feat(core-realtime): scaffold realtime optional core

Generator-emitted scaffold (pnpm turbo gen core-package realtime) plus
the story-00-precedent coverage repairs (coverage provider devDep,
symbols.ts exclude + tested allowlist mirror) and three minimal tests
covering generator-emitted realtime code the template suite misses.
Squash of 31d85e0 + review-fix cf11b38.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016j8z4VHjedXDTjEDNg7qHK
This commit is contained in:
2026-07-12 20:35:09 +02:00
parent fc13424e9d
commit e50306cbf6
41 changed files with 1913 additions and 3 deletions

View File

@@ -0,0 +1,48 @@
// packages/core-eslint/rules/no-direct-socket-io.test.js
import { RuleTester } from "eslint";
import rule from "./no-direct-socket-io.js";
const tester = new RuleTester({
languageOptions: { ecmaVersion: 2022, sourceType: "module" },
});
tester.run("no-direct-socket-io", rule, {
valid: [
// Allowed inside core-realtime
{
code: 'import { Server } from "socket.io";',
filename: "/repo/packages/core-realtime/src/socket-io-realtime-server.ts",
},
// Allowed in app servers
{
code: 'import { Server } from "socket.io";',
filename: "/repo/apps/web-next/server.ts",
},
// Allowed in app integration tests (e.g. realtime-ping e2e)
{
code: 'import { Server } from "socket.io";',
filename: "/repo/apps/web-next/src/__tests__/realtime-ping.test.ts",
},
{
code: 'import { io } from "socket.io-client";',
filename: "/repo/apps/web-next/src/__tests__/realtime-ping.test.ts",
},
// Allowed elsewhere when not importing socket.io
{
code: 'import { foo } from "bar";',
filename: "/repo/packages/blog/src/foo.ts",
},
],
invalid: [
{
code: 'import { Server } from "socket.io";',
filename: "/repo/packages/blog/src/foo.ts",
errors: [{ messageId: "noDirectSocketIO" }],
},
{
code: 'import { io } from "socket.io-client";',
filename: "/repo/packages/blog/src/ui/Component.tsx",
errors: [{ messageId: "noDirectSocketIOClient" }],
},
],
});