// packages/core-eslint/rules/no-direct-socket-io.js const ALLOWED = [ /\/packages\/core-realtime\/src\//, /\/apps\/[^/]+\/server\.ts$/, /\/apps\/[^/]+\/src\/.*\.test\.ts$/, ]; export default { meta: { type: "problem", docs: { description: "Block direct socket.io imports outside core-realtime + app servers" }, messages: { noDirectSocketIO: 'Import from "@repo/core-realtime" instead of "socket.io". Direct imports allowed only in packages/core-realtime/src/ and apps/*/server.ts.', noDirectSocketIOClient: 'Use the realtime helpers from "@repo/core-realtime" / "@repo/core-testing/instrumentation" instead of "socket.io-client".', }, schema: [], }, create(context) { const filename = context.filename ?? context.getFilename(); const allowed = ALLOWED.some((re) => re.test(filename)); if (allowed) return {}; return { ImportDeclaration(node) { const source = node.source.value; if (source === "socket.io") { context.report({ node, messageId: "noDirectSocketIO" }); } else if (source === "socket.io-client") { context.report({ node, messageId: "noDirectSocketIOClient" }); } }, }; }, };