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

263
pnpm-lock.yaml generated
View File

@@ -616,6 +616,46 @@ importers:
specifier: ^3.0.0
version: 3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.7.0)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)
packages/core-realtime:
dependencies:
"@repo/core-shared":
specifier: workspace:*
version: link:../core-shared
payload:
specifier: ^3.0.0
version: 3.81.0(graphql@16.13.2)(typescript@5.9.3)
socket.io:
specifier: ^4.7.0
version: 4.8.3
zod:
specifier: ^3.23.0
version: 3.25.76
devDependencies:
"@repo/core-eslint":
specifier: workspace:*
version: link:../core-eslint
"@repo/core-testing":
specifier: workspace:*
version: link:../core-testing
"@repo/core-typescript":
specifier: workspace:*
version: link:../core-typescript
"@types/node":
specifier: ^22.0.0
version: 22.19.17
"@vitest/coverage-v8":
specifier: ^3.2.4
version: 3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.7.0)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))
socket.io-client:
specifier: ^4.7.0
version: 4.8.3
typescript:
specifier: ^5.8.0
version: 5.9.3
vitest:
specifier: ^3.0.0
version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.7.0)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)
packages/core-shared:
dependencies:
"@opentelemetry/api":
@@ -5645,6 +5685,12 @@ packages:
integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==,
}
"@socket.io/component-emitter@3.1.2":
resolution:
{
integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==,
}
"@standard-schema/spec@1.1.0":
resolution:
{
@@ -6595,6 +6641,12 @@ packages:
integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==,
}
"@types/cors@2.8.19":
resolution:
{
integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==,
}
"@types/debug@4.1.13":
resolution:
{
@@ -7134,6 +7186,13 @@ packages:
integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==,
}
accepts@1.3.8:
resolution:
{
integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==,
}
engines: { node: ">= 0.6" }
acorn-import-attributes@1.9.5:
resolution:
{
@@ -7466,6 +7525,13 @@ packages:
}
engines: { node: 18 || 20 || >=22 }
base64id@2.0.0:
resolution:
{
integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==,
}
engines: { node: ^4.5.0 || >= 5.9 }
baseline-browser-mapping@2.10.15:
resolution:
{
@@ -7968,6 +8034,13 @@ packages:
integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==,
}
cookie@0.7.2:
resolution:
{
integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==,
}
engines: { node: ">= 0.6" }
copy-anything@4.0.5:
resolution:
{
@@ -7975,6 +8048,13 @@ packages:
}
engines: { node: ">=18" }
cors@2.8.6:
resolution:
{
integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==,
}
engines: { node: ">= 0.10" }
corser@2.0.1:
resolution:
{
@@ -8506,6 +8586,26 @@ packages:
integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==,
}
engine.io-client@6.6.6:
resolution:
{
integrity: sha512-iY6QdftLQ9pyiPoX082bpf/u1UewnOaJrtJIF9T0++QB34lZrj0uP+Q/bj8AlUsAxqhnkTV2BS8SBZSxOmoV5Q==,
}
engine.io-parser@5.2.3:
resolution:
{
integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==,
}
engines: { node: ">=10.0.0" }
engine.io@6.6.9:
resolution:
{
integrity: sha512-clKkw4C7nJ22mGgoVcCg6V/W/TxdNyIOTr89k2ONZu81qqkddPFDF0LXcbAwhzPD8DjkiRCjzuiO6Y+fkpD4vg==,
}
engines: { node: ">=10.2.0" }
enhanced-resolve@5.20.1:
resolution:
{
@@ -11280,6 +11380,13 @@ packages:
integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==,
}
negotiator@0.6.3:
resolution:
{
integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==,
}
engines: { node: ">= 0.6" }
neo-async@2.6.2:
resolution:
{
@@ -12675,6 +12782,33 @@ packages:
}
engines: { node: ">=20" }
socket.io-adapter@2.5.8:
resolution:
{
integrity: sha512-6Oy52pbg+kvdCVvjcN+FnY7BvxZ7cIHNScbvztT/It5d0vbwoJoVZmF2gjJmnV0/4WlXRfG15zc45ySk9Ah8bw==,
}
socket.io-client@4.8.3:
resolution:
{
integrity: sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==,
}
engines: { node: ">=10.0.0" }
socket.io-parser@4.2.6:
resolution:
{
integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==,
}
engines: { node: ">=10.0.0" }
socket.io@4.8.3:
resolution:
{
integrity: sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A==,
}
engines: { node: ">=10.2.0" }
sonic-boom@4.2.1:
resolution:
{
@@ -13584,6 +13718,13 @@ packages:
}
engines: { node: ">=10.12.0" }
vary@1.1.2:
resolution:
{
integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==,
}
engines: { node: ">= 0.8" }
vfile-message@4.0.3:
resolution:
{
@@ -13909,6 +14050,21 @@ packages:
utf-8-validate:
optional: true
ws@8.21.0:
resolution:
{
integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==,
}
engines: { node: ">=10.0.0" }
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ">=5.0.2"
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
xml-name-validator@5.0.0:
resolution:
{
@@ -13928,6 +14084,13 @@ packages:
integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==,
}
xmlhttprequest-ssl@2.1.2:
resolution:
{
integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==,
}
engines: { node: ">=0.4.0" }
xss@1.0.15:
resolution:
{
@@ -17588,6 +17751,8 @@ snapshots:
dependencies:
"@sinonjs/commons": 3.0.1
"@socket.io/component-emitter@3.1.2": {}
"@standard-schema/spec@1.1.0": {}
"@storybook/addon-actions@8.6.14(storybook@8.6.18(prettier@3.8.1))":
@@ -18250,6 +18415,10 @@ snapshots:
dependencies:
"@types/node": 22.19.17
"@types/cors@2.8.19":
dependencies:
"@types/node": 22.19.17
"@types/debug@4.1.13":
dependencies:
"@types/ms": 2.1.0
@@ -18669,6 +18838,11 @@ snapshots:
"@xtuc/long@4.2.2": {}
accepts@1.3.8:
dependencies:
mime-types: 2.1.35
negotiator: 0.6.3
acorn-import-attributes@1.9.5(acorn@8.16.0):
dependencies:
acorn: 8.16.0
@@ -18878,6 +19052,8 @@ snapshots:
balanced-match@4.0.4: {}
base64id@2.0.0: {}
baseline-browser-mapping@2.10.15: {}
basic-auth@2.0.1:
@@ -19129,10 +19305,17 @@ snapshots:
convert-source-map@2.0.0: {}
cookie@0.7.2: {}
copy-anything@4.0.5:
dependencies:
is-what: 5.5.0
cors@2.8.6:
dependencies:
object-assign: 4.1.1
vary: 1.1.2
corser@2.0.1: {}
cosmiconfig@7.1.0:
@@ -19361,6 +19544,37 @@ snapshots:
dependencies:
once: 1.4.0
engine.io-client@6.6.6:
dependencies:
"@socket.io/component-emitter": 3.1.2
debug: 4.4.3
engine.io-parser: 5.2.3
ws: 8.21.0
xmlhttprequest-ssl: 2.1.2
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
engine.io-parser@5.2.3: {}
engine.io@6.6.9:
dependencies:
"@types/cors": 2.8.19
"@types/node": 22.19.17
"@types/ws": 8.18.1
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.7.2
cors: 2.8.6
debug: 4.4.3
engine.io-parser: 5.2.3
ws: 8.21.0
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
enhanced-resolve@5.20.1:
dependencies:
graceful-fs: 4.2.11
@@ -21399,6 +21613,8 @@ snapshots:
natural-compare@1.4.0: {}
negotiator@0.6.3: {}
neo-async@2.6.2: {}
next@15.5.14(@babel/core@7.25.9)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0):
@@ -22377,6 +22593,47 @@ snapshots:
ansi-styles: 6.2.3
is-fullwidth-code-point: 5.1.0
socket.io-adapter@2.5.8:
dependencies:
debug: 4.4.3
ws: 8.21.0
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
socket.io-client@4.8.3:
dependencies:
"@socket.io/component-emitter": 3.1.2
debug: 4.4.3
engine.io-client: 6.6.6
socket.io-parser: 4.2.6
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
socket.io-parser@4.2.6:
dependencies:
"@socket.io/component-emitter": 3.1.2
debug: 4.4.3
transitivePeerDependencies:
- supports-color
socket.io@4.8.3:
dependencies:
accepts: 1.3.8
base64id: 2.0.0
cors: 2.8.6
debug: 4.4.3
engine.io: 6.6.9
socket.io-adapter: 2.5.8
socket.io-parser: 4.2.6
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
sonic-boom@4.2.1:
dependencies:
atomic-sleep: 1.0.0
@@ -22847,6 +23104,8 @@ snapshots:
"@types/istanbul-lib-coverage": 2.0.6
convert-source-map: 2.0.0
vary@1.1.2: {}
vfile-message@4.0.3:
dependencies:
"@types/unist": 3.0.3
@@ -23189,12 +23448,16 @@ snapshots:
ws@8.20.0: {}
ws@8.21.0: {}
xml-name-validator@5.0.0: {}
xml@1.0.1: {}
xmlchars@2.2.0: {}
xmlhttprequest-ssl@2.1.2: {}
xss@1.0.15:
dependencies:
commander: 2.20.3