sygnal 5.3.6 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -38
- package/dist/astro/client.cjs.js +18 -8106
- package/dist/astro/client.cjs.js.map +1 -0
- package/dist/astro/client.mjs +17 -8105
- package/dist/astro/client.mjs.map +1 -0
- package/dist/astro/index.cjs.js +768 -9
- package/dist/astro/index.cjs.js.map +1 -0
- package/dist/astro/index.mjs +768 -9
- package/dist/astro/index.mjs.map +1 -0
- package/dist/astro/server.cjs.js +4 -1
- package/dist/astro/server.cjs.js.map +1 -0
- package/dist/astro/server.mjs +4 -1
- package/dist/astro/server.mjs.map +1 -0
- package/dist/diagnostics.cjs.js +1297 -0
- package/dist/diagnostics.cjs.js.map +1 -0
- package/dist/diagnostics.esm.js +1267 -0
- package/dist/diagnostics.esm.js.map +1 -0
- package/dist/index.cjs.js +2981 -1386
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +848 -111
- package/dist/index.esm.js +2997 -1411
- package/dist/index.esm.js.map +1 -0
- package/dist/jsx-dev-runtime.cjs.js +15 -9
- package/dist/jsx-dev-runtime.cjs.js.map +1 -0
- package/dist/jsx-dev-runtime.esm.js +15 -9
- package/dist/jsx-dev-runtime.esm.js.map +1 -0
- package/dist/jsx-runtime.cjs.js +15 -9
- package/dist/jsx-runtime.cjs.js.map +1 -0
- package/dist/jsx-runtime.esm.js +15 -9
- package/dist/jsx-runtime.esm.js.map +1 -0
- package/dist/jsx.cjs.js +15 -9
- package/dist/jsx.cjs.js.map +1 -0
- package/dist/jsx.esm.js +15 -9
- package/dist/jsx.esm.js.map +1 -0
- package/dist/sygnal.min.js +2 -1
- package/dist/sygnal.min.js.map +1 -0
- package/dist/vike/+config.cjs.js +1 -0
- package/dist/vike/+config.cjs.js.map +1 -0
- package/dist/vike/+config.js +1 -0
- package/dist/vike/+config.js.map +1 -0
- package/dist/vike/ClientOnly.cjs.js +1 -0
- package/dist/vike/ClientOnly.cjs.js.map +1 -0
- package/dist/vike/ClientOnly.mjs +1 -0
- package/dist/vike/ClientOnly.mjs.map +1 -0
- package/dist/vike/onRenderClient.cjs.js +1 -0
- package/dist/vike/onRenderClient.cjs.js.map +1 -0
- package/dist/vike/onRenderClient.mjs +1 -0
- package/dist/vike/onRenderClient.mjs.map +1 -0
- package/dist/vike/onRenderHtml.cjs.js +1 -0
- package/dist/vike/onRenderHtml.cjs.js.map +1 -0
- package/dist/vike/onRenderHtml.mjs +1 -0
- package/dist/vike/onRenderHtml.mjs.map +1 -0
- package/dist/vite/plugin.cjs.js +680 -47
- package/dist/vite/plugin.cjs.js.map +1 -0
- package/dist/vite/plugin.mjs +680 -47
- package/dist/vite/plugin.mjs.map +1 -0
- package/llms.txt +250 -0
- package/package.json +15 -6
- package/src/astro/client.ts +13 -2
- package/src/astro/index.d.ts +24 -1
- package/src/astro/index.ts +40 -9
- package/src/astro/server.ts +3 -1
- package/src/collection.ts +5 -2
- package/src/component.ts +375 -330
- package/src/cycle/dom/MainDOMSource.ts +4 -0
- package/src/cycle/dom/classNameModule.ts +74 -0
- package/src/cycle/dom/controlledInputModule.ts +33 -0
- package/src/cycle/dom/enrichEventStream.ts +9 -3
- package/src/cycle/dom/makeDOMDriver.ts +1 -2
- package/src/cycle/dom/mockDOMSource.ts +62 -8
- package/src/cycle/dom/modules.ts +5 -1
- package/src/cycle/state/Collection.ts +13 -3
- package/src/cycle/state/StateSource.ts +1 -1
- package/src/cycle/state/pickCombine.ts +35 -1
- package/src/cycle/state/withState.ts +1 -1
- package/src/extra/devtools.ts +8 -0
- package/src/extra/diagnostics/checks/collections.ts +67 -0
- package/src/extra/diagnostics/checks/dom.ts +241 -0
- package/src/extra/diagnostics/checks/events.ts +68 -0
- package/src/extra/diagnostics/checks/index.ts +109 -0
- package/src/extra/diagnostics/checks/inspect.ts +319 -0
- package/src/extra/diagnostics/checks/props.ts +51 -0
- package/src/extra/diagnostics/checks/public.d.ts +211 -0
- package/src/extra/diagnostics/checks/rxjsHints.ts +88 -0
- package/src/extra/diagnostics/checks/shared.ts +119 -0
- package/src/extra/diagnostics/checks/state.ts +55 -0
- package/src/extra/diagnostics/checks/strict.ts +112 -0
- package/src/extra/diagnostics/checks/wiring.ts +65 -0
- package/src/extra/diagnostics/codes.ts +232 -0
- package/src/extra/diagnostics/index.ts +328 -0
- package/src/extra/diagnostics/legacy.ts +59 -0
- package/src/extra/driverFactories.ts +106 -58
- package/src/extra/eventDriver.ts +4 -0
- package/src/extra/flatten.ts +75 -0
- package/src/extra/reducers.ts +12 -5
- package/src/extra/run.ts +11 -0
- package/src/extra/testing.ts +890 -180
- package/src/extra/xstreamExtras.ts +269 -0
- package/src/index.d.ts +428 -17
- package/src/index.ts +7 -6
- package/src/pragma/index.ts +14 -9
- package/src/switchable.ts +10 -8
- package/src/vike/types.ts +21 -4
- package/src/vite/plugin.d.ts +95 -2
- package/src/vite/plugin.ts +730 -55
- package/dist/astro/astro/client.d.ts +0 -5
- package/dist/astro/astro/index.d.ts +0 -16
- package/dist/astro/astro/server.d.ts +0 -12
- package/dist/astro/client.d.ts +0 -5
- package/dist/astro/client.esm.js +0 -4665
- package/dist/astro/collection.d.ts +0 -12
- package/dist/astro/component.d.ts +0 -22
- package/dist/astro/cycle/dom/BodyDOMSource.d.ts +0 -10
- package/dist/astro/cycle/dom/DOMSource.d.ts +0 -11
- package/dist/astro/cycle/dom/DocumentDOMSource.d.ts +0 -12
- package/dist/astro/cycle/dom/ElementFinder.d.ts +0 -8
- package/dist/astro/cycle/dom/EventDelegator.d.ts +0 -34
- package/dist/astro/cycle/dom/IsolateModule.d.ts +0 -23
- package/dist/astro/cycle/dom/MainDOMSource.d.ts +0 -32
- package/dist/astro/cycle/dom/PriorityQueue.d.ts +0 -7
- package/dist/astro/cycle/dom/ScopeChecker.d.ts +0 -9
- package/dist/astro/cycle/dom/SymbolTree.d.ts +0 -9
- package/dist/astro/cycle/dom/VNodeWrapper.d.ts +0 -8
- package/dist/astro/cycle/dom/enrichEventStream.d.ts +0 -24
- package/dist/astro/cycle/dom/fromEvent.d.ts +0 -6
- package/dist/astro/cycle/dom/index.d.ts +0 -8
- package/dist/astro/cycle/dom/isolate.d.ts +0 -9
- package/dist/astro/cycle/dom/makeDOMDriver.d.ts +0 -11
- package/dist/astro/cycle/dom/mockDOMSource.d.ts +0 -17
- package/dist/astro/cycle/dom/modules.d.ts +0 -5
- package/dist/astro/cycle/dom/snabbdom.d.ts +0 -22
- package/dist/astro/cycle/dom/styleModule.d.ts +0 -13
- package/dist/astro/cycle/dom/thunk.d.ts +0 -11
- package/dist/astro/cycle/dom/utils.d.ts +0 -8
- package/dist/astro/cycle/isolate/index.d.ts +0 -42
- package/dist/astro/cycle/run/adapt.d.ts +0 -6
- package/dist/astro/cycle/run/index.d.ts +0 -36
- package/dist/astro/cycle/run/internals.d.ts +0 -8
- package/dist/astro/cycle/run/types.d.ts +0 -49
- package/dist/astro/cycle/state/Collection.d.ts +0 -29
- package/dist/astro/cycle/state/StateSource.d.ts +0 -20
- package/dist/astro/cycle/state/index.d.ts +0 -5
- package/dist/astro/cycle/state/pickCombine.d.ts +0 -3
- package/dist/astro/cycle/state/pickMerge.d.ts +0 -3
- package/dist/astro/cycle/state/types.d.ts +0 -18
- package/dist/astro/cycle/state/withState.d.ts +0 -17
- package/dist/astro/extra/classes.d.ts +0 -7
- package/dist/astro/extra/devtools.d.ts +0 -78
- package/dist/astro/extra/dragDriver.d.ts +0 -20
- package/dist/astro/extra/driverFactories.d.ts +0 -12
- package/dist/astro/extra/eventDriver.d.ts +0 -9
- package/dist/astro/extra/exactState.d.ts +0 -1
- package/dist/astro/extra/hmr.d.ts +0 -17
- package/dist/astro/extra/logDriver.d.ts +0 -2
- package/dist/astro/extra/processDrag.d.ts +0 -19
- package/dist/astro/extra/processForm.d.ts +0 -15
- package/dist/astro/extra/run.d.ts +0 -13
- package/dist/astro/extra/xstreamCompat.d.ts +0 -5
- package/dist/astro/index.d.ts +0 -19
- package/dist/astro/index.esm.js +0 -27
- package/dist/astro/jsx-dev-runtime.d.ts +0 -1
- package/dist/astro/jsx-runtime.d.ts +0 -4
- package/dist/astro/jsx.d.ts +0 -2
- package/dist/astro/pragma/fn.d.ts +0 -7
- package/dist/astro/pragma/index.d.ts +0 -7
- package/dist/astro/pragma/is.d.ts +0 -10
- package/dist/astro/server.d.ts +0 -12
- package/dist/astro/server.esm.js +0 -25
- package/dist/astro/switchable.d.ts +0 -7
- package/dist/collection.d.ts +0 -12
- package/dist/component.d.ts +0 -22
- package/dist/cycle/dom/BodyDOMSource.d.ts +0 -10
- package/dist/cycle/dom/DOMSource.d.ts +0 -11
- package/dist/cycle/dom/DocumentDOMSource.d.ts +0 -12
- package/dist/cycle/dom/ElementFinder.d.ts +0 -8
- package/dist/cycle/dom/EventDelegator.d.ts +0 -34
- package/dist/cycle/dom/IsolateModule.d.ts +0 -23
- package/dist/cycle/dom/MainDOMSource.d.ts +0 -32
- package/dist/cycle/dom/PriorityQueue.d.ts +0 -7
- package/dist/cycle/dom/ScopeChecker.d.ts +0 -9
- package/dist/cycle/dom/SymbolTree.d.ts +0 -9
- package/dist/cycle/dom/VNodeWrapper.d.ts +0 -8
- package/dist/cycle/dom/enrichEventStream.d.ts +0 -24
- package/dist/cycle/dom/fromEvent.d.ts +0 -6
- package/dist/cycle/dom/index.d.ts +0 -8
- package/dist/cycle/dom/isolate.d.ts +0 -9
- package/dist/cycle/dom/makeDOMDriver.d.ts +0 -11
- package/dist/cycle/dom/mockDOMSource.d.ts +0 -17
- package/dist/cycle/dom/modules.d.ts +0 -5
- package/dist/cycle/dom/snabbdom.d.ts +0 -22
- package/dist/cycle/dom/styleModule.d.ts +0 -13
- package/dist/cycle/dom/thunk.d.ts +0 -11
- package/dist/cycle/dom/utils.d.ts +0 -8
- package/dist/cycle/isolate/index.d.ts +0 -42
- package/dist/cycle/run/adapt.d.ts +0 -6
- package/dist/cycle/run/index.d.ts +0 -36
- package/dist/cycle/run/internals.d.ts +0 -8
- package/dist/cycle/run/types.d.ts +0 -49
- package/dist/cycle/state/Collection.d.ts +0 -29
- package/dist/cycle/state/StateSource.d.ts +0 -20
- package/dist/cycle/state/index.d.ts +0 -5
- package/dist/cycle/state/pickCombine.d.ts +0 -3
- package/dist/cycle/state/pickMerge.d.ts +0 -3
- package/dist/cycle/state/types.d.ts +0 -18
- package/dist/cycle/state/withState.d.ts +0 -17
- package/dist/extra/classes.d.ts +0 -7
- package/dist/extra/devtools.d.ts +0 -78
- package/dist/extra/dragDriver.d.ts +0 -20
- package/dist/extra/driverFactories.d.ts +0 -12
- package/dist/extra/eventDriver.d.ts +0 -9
- package/dist/extra/exactState.d.ts +0 -1
- package/dist/extra/hmr.d.ts +0 -17
- package/dist/extra/logDriver.d.ts +0 -2
- package/dist/extra/processDrag.d.ts +0 -19
- package/dist/extra/processForm.d.ts +0 -15
- package/dist/extra/run.d.ts +0 -13
- package/dist/extra/xstreamCompat.d.ts +0 -5
- package/dist/jsx-dev-runtime.d.ts +0 -1
- package/dist/jsx-dev-runtime.js +0 -224
- package/dist/jsx-runtime.d.ts +0 -4
- package/dist/jsx-runtime.js +0 -224
- package/dist/jsx.d.ts +0 -2
- package/dist/pragma/fn.d.ts +0 -7
- package/dist/pragma/index.d.ts +0 -7
- package/dist/pragma/is.d.ts +0 -10
- package/dist/switchable.d.ts +0 -7
package/dist/vike/+config.cjs.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"+config.cjs.js","sources":["../../src/vike/+config.ts"],"sourcesContent":["/**\n * Vike extension config for Sygnal.\n *\n * Usage in your project's +config.ts:\n *\n * import vikeSygnal from 'sygnal/vike'\n * export default { extends: [vikeSygnal] }\n */\n\nexport default {\n name: 'sygnal',\n clientRouting: true,\n hydrationCanBeAborted: true,\n\n onRenderHtml: 'import:sygnal/vike/onRenderHtml:onRenderHtml',\n onRenderClient: 'import:sygnal/vike/onRenderClient:onRenderClient',\n\n passToClient: ['data', 'routeParams', 'urlPathname'],\n\n meta: {\n Layout: {\n env: { server: true, client: true },\n cumulative: true,\n },\n Wrapper: {\n env: { server: true, client: true },\n cumulative: true,\n },\n Head: {\n env: { server: true },\n },\n title: {\n env: { server: true, client: true },\n },\n description: {\n env: { server: true },\n },\n favicon: {\n env: { server: true },\n global: true,\n },\n lang: {\n env: { server: true, client: true },\n },\n drivers: {\n env: { client: true },\n },\n ssr: {\n env: { config: true },\n effect({ configDefinedAt, configValue }: { configDefinedAt: string; configValue: unknown }) {\n if (typeof configValue !== 'boolean') {\n throw new Error(`${configDefinedAt} should be a boolean`)\n }\n if (configValue === false) {\n return {\n meta: {\n ssr: { env: { server: true, client: true } },\n },\n }\n }\n return {}\n },\n },\n },\n}\n"],"names":[],"mappings":";;AAAA;;;;;;;AAOG;AAEH,cAAe;AACb,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,qBAAqB,EAAE,IAAI;AAE3B,IAAA,YAAY,EAAE,8CAA8C;AAC5D,IAAA,cAAc,EAAE,kDAAkD;AAElE,IAAA,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC;AAEpD,IAAA,IAAI,EAAE;AACJ,QAAA,MAAM,EAAE;YACN,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACnC,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA;AACD,QAAA,OAAO,EAAE;YACP,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACnC,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA;AACD,QAAA,IAAI,EAAE;AACJ,YAAA,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACtB,SAAA;AACD,QAAA,KAAK,EAAE;YACL,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACpC,SAAA;AACD,QAAA,WAAW,EAAE;AACX,YAAA,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACtB,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACrB,YAAA,MAAM,EAAE,IAAI;AACb,SAAA;AACD,QAAA,IAAI,EAAE;YACJ,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACpC,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACtB,SAAA;AACD,QAAA,GAAG,EAAE;AACH,YAAA,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACrB,YAAA,MAAM,CAAC,EAAE,eAAe,EAAE,WAAW,EAAqD,EAAA;AACxF,gBAAA,IAAI,OAAO,WAAW,KAAK,SAAS,EAAE;AACpC,oBAAA,MAAM,IAAI,KAAK,CAAC,GAAG,eAAe,CAAA,oBAAA,CAAsB,CAAC,CAAA;iBAC1D;AACD,gBAAA,IAAI,WAAW,KAAK,KAAK,EAAE;oBACzB,OAAO;AACL,wBAAA,IAAI,EAAE;AACJ,4BAAA,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;AAC7C,yBAAA;qBACF,CAAA;iBACF;AACD,gBAAA,OAAO,EAAE,CAAA;aACV;AACF,SAAA;AACF,KAAA;CACF;;;;"}
|
package/dist/vike/+config.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"+config.js","sources":["../../src/vike/+config.ts"],"sourcesContent":["/**\n * Vike extension config for Sygnal.\n *\n * Usage in your project's +config.ts:\n *\n * import vikeSygnal from 'sygnal/vike'\n * export default { extends: [vikeSygnal] }\n */\n\nexport default {\n name: 'sygnal',\n clientRouting: true,\n hydrationCanBeAborted: true,\n\n onRenderHtml: 'import:sygnal/vike/onRenderHtml:onRenderHtml',\n onRenderClient: 'import:sygnal/vike/onRenderClient:onRenderClient',\n\n passToClient: ['data', 'routeParams', 'urlPathname'],\n\n meta: {\n Layout: {\n env: { server: true, client: true },\n cumulative: true,\n },\n Wrapper: {\n env: { server: true, client: true },\n cumulative: true,\n },\n Head: {\n env: { server: true },\n },\n title: {\n env: { server: true, client: true },\n },\n description: {\n env: { server: true },\n },\n favicon: {\n env: { server: true },\n global: true,\n },\n lang: {\n env: { server: true, client: true },\n },\n drivers: {\n env: { client: true },\n },\n ssr: {\n env: { config: true },\n effect({ configDefinedAt, configValue }: { configDefinedAt: string; configValue: unknown }) {\n if (typeof configValue !== 'boolean') {\n throw new Error(`${configDefinedAt} should be a boolean`)\n }\n if (configValue === false) {\n return {\n meta: {\n ssr: { env: { server: true, client: true } },\n },\n }\n }\n return {}\n },\n },\n },\n}\n"],"names":[],"mappings":"AAAA;;;;;;;AAOG;AAEH,cAAe;AACb,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,qBAAqB,EAAE,IAAI;AAE3B,IAAA,YAAY,EAAE,8CAA8C;AAC5D,IAAA,cAAc,EAAE,kDAAkD;AAElE,IAAA,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC;AAEpD,IAAA,IAAI,EAAE;AACJ,QAAA,MAAM,EAAE;YACN,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACnC,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA;AACD,QAAA,OAAO,EAAE;YACP,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACnC,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA;AACD,QAAA,IAAI,EAAE;AACJ,YAAA,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACtB,SAAA;AACD,QAAA,KAAK,EAAE;YACL,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACpC,SAAA;AACD,QAAA,WAAW,EAAE;AACX,YAAA,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACtB,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACrB,YAAA,MAAM,EAAE,IAAI;AACb,SAAA;AACD,QAAA,IAAI,EAAE;YACJ,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACpC,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACtB,SAAA;AACD,QAAA,GAAG,EAAE;AACH,YAAA,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACrB,YAAA,MAAM,CAAC,EAAE,eAAe,EAAE,WAAW,EAAqD,EAAA;AACxF,gBAAA,IAAI,OAAO,WAAW,KAAK,SAAS,EAAE;AACpC,oBAAA,MAAM,IAAI,KAAK,CAAC,GAAG,eAAe,CAAA,oBAAA,CAAsB,CAAC,CAAA;iBAC1D;AACD,gBAAA,IAAI,WAAW,KAAK,KAAK,EAAE;oBACzB,OAAO;AACL,wBAAA,IAAI,EAAE;AACJ,4BAAA,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;AAC7C,yBAAA;qBACF,CAAA;iBACF;AACD,gBAAA,OAAO,EAAE,CAAA;aACV;AACF,SAAA;AACF,KAAA;CACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientOnly.cjs.js","sources":["../../src/cycle/dom/snabbdom.ts","../../src/vike/ClientOnly.ts"],"sourcesContent":["/**\n * Local snabbdom re-export barrel.\n *\n * Imports from specific snabbdom subpaths instead of the main barrel to avoid\n * triggering the broken `styleModule` top-level `window` reference in\n * snabbdom 3.6.3 (which causes ReferenceError in Node.js environments).\n *\n * The styleModule is provided separately by ./styleModule.ts with a fixed\n * window guard.\n */\n\n// Core\nexport {h, fragment as HFragment} from 'snabbdom/build/h.js';\nexport {init} from 'snabbdom/build/init.js';\nexport type {Options} from 'snabbdom/build/init.js';\nexport {toVNode} from 'snabbdom/build/tovnode.js';\nexport {vnode} from 'snabbdom/build/vnode.js';\nexport type {VNode, VNodeData} from 'snabbdom/build/vnode.js';\nimport {Fragment as _Fragment} from 'snabbdom/build/jsx.js';\n\n// Tag Fragment so we can identify it even after minification mangles Function.name\n(_Fragment as any).__sygnalFragment = true;\nexport const Fragment = _Fragment;\n\n// Module type\nexport type {Module} from 'snabbdom/build/modules/module.js';\n\n// Modules (excluding styleModule — see ./styleModule.ts)\nexport {classModule} from 'snabbdom/build/modules/class.js';\nexport {propsModule} from 'snabbdom/build/modules/props.js';\nexport {attributesModule} from 'snabbdom/build/modules/attributes.js';\nexport {datasetModule} from 'snabbdom/build/modules/dataset.js';\n","import {h} from '../cycle/dom/snabbdom';\n\nconst ClientOnly = (props: any) => {\n const {children, ...sanitizedProps} = props;\n return h('clientonly', {props: sanitizedProps}, children);\n};\n(ClientOnly as any).label = 'clientonly';\n(ClientOnly as any).preventInstantiation = true;\n\nexport {ClientOnly};\n"],"names":["_Fragment","h"],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;AASG;AAEH;AASA;AACCA,eAAiB,CAAC,gBAAgB,GAAG,IAAI;;ACnB1C,MAAM,UAAU,GAAG,CAAC,KAAU,KAAI;IAChC,MAAM,EAAC,QAAQ,EAAE,GAAG,cAAc,EAAC,GAAG,KAAK,CAAC;AAC5C,IAAA,OAAOC,MAAC,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,cAAc,EAAC,EAAE,QAAQ,CAAC,CAAC;AAC5D,EAAE;AACD,UAAkB,CAAC,KAAK,GAAG,YAAY,CAAC;AACxC,UAAkB,CAAC,oBAAoB,GAAG,IAAI;;;;"}
|
package/dist/vike/ClientOnly.mjs
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientOnly.mjs","sources":["../../src/cycle/dom/snabbdom.ts","../../src/vike/ClientOnly.ts"],"sourcesContent":["/**\n * Local snabbdom re-export barrel.\n *\n * Imports from specific snabbdom subpaths instead of the main barrel to avoid\n * triggering the broken `styleModule` top-level `window` reference in\n * snabbdom 3.6.3 (which causes ReferenceError in Node.js environments).\n *\n * The styleModule is provided separately by ./styleModule.ts with a fixed\n * window guard.\n */\n\n// Core\nexport {h, fragment as HFragment} from 'snabbdom/build/h.js';\nexport {init} from 'snabbdom/build/init.js';\nexport type {Options} from 'snabbdom/build/init.js';\nexport {toVNode} from 'snabbdom/build/tovnode.js';\nexport {vnode} from 'snabbdom/build/vnode.js';\nexport type {VNode, VNodeData} from 'snabbdom/build/vnode.js';\nimport {Fragment as _Fragment} from 'snabbdom/build/jsx.js';\n\n// Tag Fragment so we can identify it even after minification mangles Function.name\n(_Fragment as any).__sygnalFragment = true;\nexport const Fragment = _Fragment;\n\n// Module type\nexport type {Module} from 'snabbdom/build/modules/module.js';\n\n// Modules (excluding styleModule — see ./styleModule.ts)\nexport {classModule} from 'snabbdom/build/modules/class.js';\nexport {propsModule} from 'snabbdom/build/modules/props.js';\nexport {attributesModule} from 'snabbdom/build/modules/attributes.js';\nexport {datasetModule} from 'snabbdom/build/modules/dataset.js';\n","import {h} from '../cycle/dom/snabbdom';\n\nconst ClientOnly = (props: any) => {\n const {children, ...sanitizedProps} = props;\n return h('clientonly', {props: sanitizedProps}, children);\n};\n(ClientOnly as any).label = 'clientonly';\n(ClientOnly as any).preventInstantiation = true;\n\nexport {ClientOnly};\n"],"names":["_Fragment"],"mappings":";;;;;;;;;;AAAA;;;;;;;;;AASG;AAEH;AASA;AACCA,QAAiB,CAAC,gBAAgB,GAAG,IAAI;;ACnB1C,MAAM,UAAU,GAAG,CAAC,KAAU,KAAI;IAChC,MAAM,EAAC,QAAQ,EAAE,GAAG,cAAc,EAAC,GAAG,KAAK,CAAC;AAC5C,IAAA,OAAO,CAAC,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,cAAc,EAAC,EAAE,QAAQ,CAAC,CAAC;AAC5D,EAAE;AACD,UAAkB,CAAC,KAAK,GAAG,YAAY,CAAC;AACxC,UAAkB,CAAC,oBAAoB,GAAG,IAAI;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onRenderClient.cjs.js","sources":["../../src/vike/onRenderClient.ts"],"sourcesContent":["/**\n * Vike client-side render hook for Sygnal.\n *\n * On first page load (hydration): reads server-serialized state and\n * boots the Sygnal app via run().\n *\n * On client-side navigation with a Layout/Wrapper: the Layout and Wrapper\n * stay mounted and only the Page sub-component is hot-swapped. Layout and\n * Wrapper state persists across navigations. Without either, the app is\n * disposed and recreated.\n *\n * Nesting order: Wrapper > Layout > Page\n * - Wrappers are outermost (context providers, state management)\n * - Layouts are inside wrappers (visual structure, navigation chrome)\n * - Page is innermost (route-specific content, swapped on navigation)\n */\n\n// Import from the package entry so rollup externalizes it\n// @ts-ignore — resolved at runtime via package exports\nimport { run } from 'sygnal'\n\ndeclare global {\n interface Window {\n __VIKE_SYGNAL_STATE__?: any\n }\n}\n\ninterface PageContext {\n Page: any\n data?: any\n routeParams?: Record<string, string>\n urlPathname?: string\n isHydration?: boolean\n config: {\n Layout?: any | any[]\n Wrapper?: any | any[]\n title?: string\n ssr?: boolean\n drivers?: Record<string, (sink: any) => any>\n }\n}\n\n/** Track the running Sygnal app for disposal on navigation */\nlet currentApp: { sources: any; sinks: any; dispose: () => void } | null = null\n\n/**\n * Mutable references read by the wrapper's view function.\n * Updated on navigation to swap the Page without disposing the Layout.\n */\nlet currentPage: any = null\nlet currentPageName: string = ''\nlet currentPageData: any = {}\nlet currentRouteParams: any = {}\nlet currentUrlPathname: string = ''\nlet pageNavCounter: number = 0\n\n/**\n * Build a component vnode that matches what the JSX pragma produces.\n */\nfunction componentVNode(comp: any, stateField: string, children: any[], compInitialState?: any): any {\n const name = comp.componentName || comp.name || 'FUNCTION_COMPONENT'\n return {\n sel: name,\n data: {\n props: {\n state: stateField,\n sygnalOptions: {\n name,\n view: comp,\n model: comp.model,\n intent: comp.intent,\n hmrActions: comp.hmrActions,\n context: comp.context,\n peers: comp.peers,\n components: comp.components,\n initialState: compInitialState,\n isolatedState: true,\n calculated: comp.calculated,\n storeCalculatedInState: comp.storeCalculatedInState,\n DOMSourceName: comp.DOMSourceName,\n stateSourceName: comp.stateSourceName,\n onError: comp.onError,\n debug: comp.debug,\n },\n },\n },\n children,\n text: undefined,\n elm: undefined,\n key: '__vike_' + stateField + '__',\n }\n}\n\n/**\n * Build a vnode for the current Page as a child of the Layout.\n * Reads from mutable `currentPage` / `currentPageName` so the wrapper\n * view picks up the new Page component on navigation without being recreated.\n */\nfunction pageChildVNode(pageState: any): any {\n // Include pageNavCounter in sel so instantiateSubComponents detects a\n // component swap even when both pages have the same function name (e.g. 'Page').\n const sel = currentPageName + '__nav' + pageNavCounter\n return {\n sel,\n data: {\n props: {\n state: 'page',\n sygnalOptions: {\n name: sel,\n view: currentPage,\n model: currentPage.model,\n intent: currentPage.intent,\n hmrActions: currentPage.hmrActions,\n context: currentPage.context,\n peers: currentPage.peers,\n components: currentPage.components,\n initialState: pageState,\n isolatedState: true,\n calculated: currentPage.calculated,\n storeCalculatedInState: currentPage.storeCalculatedInState,\n DOMSourceName: currentPage.DOMSourceName,\n stateSourceName: currentPage.stateSourceName,\n onError: currentPage.onError,\n debug: currentPage.debug,\n },\n },\n },\n children: [],\n text: undefined,\n elm: undefined,\n key: '__vike_page__',\n }\n}\n\n/**\n * Create a synthetic wrapper component that nests Page inside Layout(s)\n * inside Wrapper(s).\n *\n * Nesting order: Wrapper(s) > Layout(s) > Page\n *\n * The wrapper's view reads `currentPage` from the mutable closure, so\n * on client-side navigation only the Page sub-component changes while\n * the Layout and Wrapper stay mounted with their state preserved.\n */\nfunction createLayoutWrapper(wrappers: any[], layouts: any[], Page: any): any {\n currentPage = Page\n currentPageName = Page.componentName || Page.name || 'VikePageComponent'\n\n // Combined shell = wrappers (outermost) + layouts (innermost around Page)\n // State keys: wrapper_0, wrapper_1, ..., layout_0, layout_1, ...\n // Page state lives under the innermost shell component's slice.\n const shell = [\n ...wrappers.map((w: any, i: number) => ({ comp: w, key: 'wrapper_' + i })),\n ...layouts.map((l: any, i: number) => ({ comp: l, key: 'layout_' + i })),\n ]\n\n function LayoutWrapperView({ state }: any) {\n if (shell.length === 0) {\n // No wrappers or layouts — render Page directly\n return pageChildVNode(state.page)\n }\n\n const lastIdx = shell.length - 1\n const innermostState = state[shell[lastIdx].key] || {}\n let inner: any = componentVNode(\n shell[lastIdx].comp,\n shell[lastIdx].key,\n [pageChildVNode(innermostState.page)],\n innermostState\n )\n\n // Wrap with outer shell components\n for (let i = lastIdx - 1; i >= 0; i--) {\n inner = componentVNode(shell[i].comp, shell[i].key, [inner], state[shell[i].key])\n }\n\n // Wrap in a plain div so the view returns a regular DOM vnode.\n // Sub-component vnodes at the root position are not processed correctly\n // by the rendering pipeline — they must be children of a DOM element.\n return {\n sel: 'div',\n data: { attrs: { id: 'vike-shell' } },\n children: [inner],\n text: undefined,\n elm: undefined,\n key: '__vike_shell__',\n }\n }\n\n LayoutWrapperView.componentName = 'VikeLayoutWrapper'\n\n // Build the wrapper's initial state with a slice for each shell component.\n // Page state is nested under the innermost shell component's slice.\n const wrapperInitialState: any = {}\n shell.forEach(({ comp, key }: any, i: number) => {\n const sliceState: any = { ...(comp.initialState || {}) }\n if (i === shell.length - 1) {\n sliceState.page = Page.initialState || {}\n }\n wrapperInitialState[key] = sliceState\n })\n\n LayoutWrapperView.initialState = wrapperInitialState\n\n // Context uses mutable references so navigation updates are picked up.\n // Wrapper and Layout contexts are merged once; page-level context\n // (pageData, routeParams, urlPathname) reads from mutable variables\n // updated on each navigation.\n const shellContext: any = {}\n shell.forEach(({ comp }: any) => {\n if (comp.context) {\n Object.assign(shellContext, comp.context)\n }\n })\n\n LayoutWrapperView.context = {\n ...shellContext,\n ...(Page.context || {}),\n pageData: () => currentPageData,\n routeParams: () => currentRouteParams,\n urlPathname: () => currentUrlPathname,\n }\n\n return LayoutWrapperView\n}\n\n/**\n * Normalize a cumulative config value into an array of functions.\n */\nfunction toComponentArray(val: any): any[] {\n if (!val) return []\n return (Array.isArray(val) ? val : [val]).filter((c: any) => typeof c === 'function')\n}\n\nexport function onRenderClient(pageContext: PageContext) {\n const { Page, config } = pageContext\n const data = pageContext.data || {}\n\n const wrappers = toComponentArray(config.Wrapper)\n const layouts = toComponentArray(config.Layout)\n const hasShell = wrappers.length > 0 || layouts.length > 0\n\n // The shell is wrappers (outermost) + layouts. The innermost component\n // holds the Page state as a nested sub-component.\n const shell = [\n ...wrappers.map((_: any, i: number) => 'wrapper_' + i),\n ...layouts.map((_: any, i: number) => 'layout_' + i),\n ]\n const innermostKey = shell.length > 0 ? shell[shell.length - 1] : null\n\n // Update mutable context references (used by the wrapper's context functions)\n currentPageData = data\n currentRouteParams = pageContext.routeParams || {}\n currentUrlPathname = pageContext.urlPathname || ''\n\n // --- Shell path: hot-swap Page, keep Layout/Wrapper alive ---\n if (hasShell) {\n if (currentApp) {\n // Client-side navigation: swap the Page without disposing the shell.\n currentPage = Page\n currentPageName = Page.componentName || Page.name || 'VikePageComponent'\n pageNavCounter++\n\n const newPageState = { ...(Page.initialState || {}), ...data }\n if (currentApp.sinks?.STATE?.shamefullySendNext) {\n currentApp.sinks.STATE.shamefullySendNext((state: any) => {\n const shellState = state[innermostKey!] || {}\n return {\n ...state,\n [innermostKey!]: { ...shellState, page: newPageState },\n }\n })\n }\n } else {\n // First load: read hydrated state or build from initialState\n let initialState: any\n if (typeof window !== 'undefined' && window.__VIKE_SYGNAL_STATE__ !== undefined) {\n initialState = window.__VIKE_SYGNAL_STATE__\n delete window.__VIKE_SYGNAL_STATE__\n } else {\n initialState = null\n }\n\n if (initialState && innermostKey && initialState[innermostKey] !== undefined) {\n // Hydrated combined state — distribute slices to each shell component\n const allShellComps = [...wrappers, ...layouts]\n shell.forEach((key: string, i: number) => {\n if (initialState[key] !== undefined) {\n if (i === shell.length - 1) {\n const { page: pageState, ...compState } = initialState[key]\n allShellComps[i].initialState = compState\n Page.initialState = pageState || { ...(Page.initialState || {}), ...data }\n } else {\n allShellComps[i].initialState = initialState[key]\n }\n }\n })\n } else {\n // SPA mode or client-side first navigation\n Page.initialState = { ...(Page.initialState || {}), ...data }\n }\n\n // Inject page-level context into Page (for SSR renderToString compat)\n Page.context = {\n ...Page.context,\n pageData: () => currentPageData,\n routeParams: () => currentRouteParams,\n urlPathname: () => currentUrlPathname,\n }\n\n const Component = createLayoutWrapper(wrappers, layouts, Page)\n\n try {\n currentApp = run(Component, config.drivers || {}, { mountPoint: '#page-view' }) as any\n } catch (err: any) {\n console.error('[sygnal/vike] Client render error:', err)\n const container = document.getElementById('page-view')\n if (container) {\n container.innerHTML = `<div data-sygnal-error style=\"padding:2rem;color:#e74c3c;font-family:monospace\">\n <h2>Render Error</h2>\n <pre>${String(err.message || err)}</pre>\n </div>`\n }\n }\n }\n\n // --- No shell path: dispose and recreate ---\n } else {\n if (currentApp) {\n currentApp.dispose()\n currentApp = null\n }\n\n let initialState: any\n if (typeof window !== 'undefined' && window.__VIKE_SYGNAL_STATE__ !== undefined) {\n initialState = window.__VIKE_SYGNAL_STATE__\n delete window.__VIKE_SYGNAL_STATE__\n } else {\n initialState = { ...(Page.initialState || {}), ...data }\n }\n\n Page.initialState = initialState\n Page.context = {\n ...Page.context,\n pageData: () => currentPageData,\n routeParams: () => currentRouteParams,\n urlPathname: () => currentUrlPathname,\n }\n\n try {\n currentApp = run(Page, config.drivers || {}, { mountPoint: '#page-view' }) as any\n } catch (err: any) {\n console.error('[sygnal/vike] Client render error:', err)\n const container = document.getElementById('page-view')\n if (container) {\n container.innerHTML = `<div data-sygnal-error style=\"padding:2rem;color:#e74c3c;font-family:monospace\">\n <h2>Render Error</h2>\n <pre>${String(err.message || err)}</pre>\n </div>`\n }\n }\n }\n\n // Update document title on client navigation\n if (config.title) {\n document.title = config.title\n }\n}\n"],"names":["run"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onRenderClient.mjs","sources":["../../src/vike/onRenderClient.ts"],"sourcesContent":["/**\n * Vike client-side render hook for Sygnal.\n *\n * On first page load (hydration): reads server-serialized state and\n * boots the Sygnal app via run().\n *\n * On client-side navigation with a Layout/Wrapper: the Layout and Wrapper\n * stay mounted and only the Page sub-component is hot-swapped. Layout and\n * Wrapper state persists across navigations. Without either, the app is\n * disposed and recreated.\n *\n * Nesting order: Wrapper > Layout > Page\n * - Wrappers are outermost (context providers, state management)\n * - Layouts are inside wrappers (visual structure, navigation chrome)\n * - Page is innermost (route-specific content, swapped on navigation)\n */\n\n// Import from the package entry so rollup externalizes it\n// @ts-ignore — resolved at runtime via package exports\nimport { run } from 'sygnal'\n\ndeclare global {\n interface Window {\n __VIKE_SYGNAL_STATE__?: any\n }\n}\n\ninterface PageContext {\n Page: any\n data?: any\n routeParams?: Record<string, string>\n urlPathname?: string\n isHydration?: boolean\n config: {\n Layout?: any | any[]\n Wrapper?: any | any[]\n title?: string\n ssr?: boolean\n drivers?: Record<string, (sink: any) => any>\n }\n}\n\n/** Track the running Sygnal app for disposal on navigation */\nlet currentApp: { sources: any; sinks: any; dispose: () => void } | null = null\n\n/**\n * Mutable references read by the wrapper's view function.\n * Updated on navigation to swap the Page without disposing the Layout.\n */\nlet currentPage: any = null\nlet currentPageName: string = ''\nlet currentPageData: any = {}\nlet currentRouteParams: any = {}\nlet currentUrlPathname: string = ''\nlet pageNavCounter: number = 0\n\n/**\n * Build a component vnode that matches what the JSX pragma produces.\n */\nfunction componentVNode(comp: any, stateField: string, children: any[], compInitialState?: any): any {\n const name = comp.componentName || comp.name || 'FUNCTION_COMPONENT'\n return {\n sel: name,\n data: {\n props: {\n state: stateField,\n sygnalOptions: {\n name,\n view: comp,\n model: comp.model,\n intent: comp.intent,\n hmrActions: comp.hmrActions,\n context: comp.context,\n peers: comp.peers,\n components: comp.components,\n initialState: compInitialState,\n isolatedState: true,\n calculated: comp.calculated,\n storeCalculatedInState: comp.storeCalculatedInState,\n DOMSourceName: comp.DOMSourceName,\n stateSourceName: comp.stateSourceName,\n onError: comp.onError,\n debug: comp.debug,\n },\n },\n },\n children,\n text: undefined,\n elm: undefined,\n key: '__vike_' + stateField + '__',\n }\n}\n\n/**\n * Build a vnode for the current Page as a child of the Layout.\n * Reads from mutable `currentPage` / `currentPageName` so the wrapper\n * view picks up the new Page component on navigation without being recreated.\n */\nfunction pageChildVNode(pageState: any): any {\n // Include pageNavCounter in sel so instantiateSubComponents detects a\n // component swap even when both pages have the same function name (e.g. 'Page').\n const sel = currentPageName + '__nav' + pageNavCounter\n return {\n sel,\n data: {\n props: {\n state: 'page',\n sygnalOptions: {\n name: sel,\n view: currentPage,\n model: currentPage.model,\n intent: currentPage.intent,\n hmrActions: currentPage.hmrActions,\n context: currentPage.context,\n peers: currentPage.peers,\n components: currentPage.components,\n initialState: pageState,\n isolatedState: true,\n calculated: currentPage.calculated,\n storeCalculatedInState: currentPage.storeCalculatedInState,\n DOMSourceName: currentPage.DOMSourceName,\n stateSourceName: currentPage.stateSourceName,\n onError: currentPage.onError,\n debug: currentPage.debug,\n },\n },\n },\n children: [],\n text: undefined,\n elm: undefined,\n key: '__vike_page__',\n }\n}\n\n/**\n * Create a synthetic wrapper component that nests Page inside Layout(s)\n * inside Wrapper(s).\n *\n * Nesting order: Wrapper(s) > Layout(s) > Page\n *\n * The wrapper's view reads `currentPage` from the mutable closure, so\n * on client-side navigation only the Page sub-component changes while\n * the Layout and Wrapper stay mounted with their state preserved.\n */\nfunction createLayoutWrapper(wrappers: any[], layouts: any[], Page: any): any {\n currentPage = Page\n currentPageName = Page.componentName || Page.name || 'VikePageComponent'\n\n // Combined shell = wrappers (outermost) + layouts (innermost around Page)\n // State keys: wrapper_0, wrapper_1, ..., layout_0, layout_1, ...\n // Page state lives under the innermost shell component's slice.\n const shell = [\n ...wrappers.map((w: any, i: number) => ({ comp: w, key: 'wrapper_' + i })),\n ...layouts.map((l: any, i: number) => ({ comp: l, key: 'layout_' + i })),\n ]\n\n function LayoutWrapperView({ state }: any) {\n if (shell.length === 0) {\n // No wrappers or layouts — render Page directly\n return pageChildVNode(state.page)\n }\n\n const lastIdx = shell.length - 1\n const innermostState = state[shell[lastIdx].key] || {}\n let inner: any = componentVNode(\n shell[lastIdx].comp,\n shell[lastIdx].key,\n [pageChildVNode(innermostState.page)],\n innermostState\n )\n\n // Wrap with outer shell components\n for (let i = lastIdx - 1; i >= 0; i--) {\n inner = componentVNode(shell[i].comp, shell[i].key, [inner], state[shell[i].key])\n }\n\n // Wrap in a plain div so the view returns a regular DOM vnode.\n // Sub-component vnodes at the root position are not processed correctly\n // by the rendering pipeline — they must be children of a DOM element.\n return {\n sel: 'div',\n data: { attrs: { id: 'vike-shell' } },\n children: [inner],\n text: undefined,\n elm: undefined,\n key: '__vike_shell__',\n }\n }\n\n LayoutWrapperView.componentName = 'VikeLayoutWrapper'\n\n // Build the wrapper's initial state with a slice for each shell component.\n // Page state is nested under the innermost shell component's slice.\n const wrapperInitialState: any = {}\n shell.forEach(({ comp, key }: any, i: number) => {\n const sliceState: any = { ...(comp.initialState || {}) }\n if (i === shell.length - 1) {\n sliceState.page = Page.initialState || {}\n }\n wrapperInitialState[key] = sliceState\n })\n\n LayoutWrapperView.initialState = wrapperInitialState\n\n // Context uses mutable references so navigation updates are picked up.\n // Wrapper and Layout contexts are merged once; page-level context\n // (pageData, routeParams, urlPathname) reads from mutable variables\n // updated on each navigation.\n const shellContext: any = {}\n shell.forEach(({ comp }: any) => {\n if (comp.context) {\n Object.assign(shellContext, comp.context)\n }\n })\n\n LayoutWrapperView.context = {\n ...shellContext,\n ...(Page.context || {}),\n pageData: () => currentPageData,\n routeParams: () => currentRouteParams,\n urlPathname: () => currentUrlPathname,\n }\n\n return LayoutWrapperView\n}\n\n/**\n * Normalize a cumulative config value into an array of functions.\n */\nfunction toComponentArray(val: any): any[] {\n if (!val) return []\n return (Array.isArray(val) ? val : [val]).filter((c: any) => typeof c === 'function')\n}\n\nexport function onRenderClient(pageContext: PageContext) {\n const { Page, config } = pageContext\n const data = pageContext.data || {}\n\n const wrappers = toComponentArray(config.Wrapper)\n const layouts = toComponentArray(config.Layout)\n const hasShell = wrappers.length > 0 || layouts.length > 0\n\n // The shell is wrappers (outermost) + layouts. The innermost component\n // holds the Page state as a nested sub-component.\n const shell = [\n ...wrappers.map((_: any, i: number) => 'wrapper_' + i),\n ...layouts.map((_: any, i: number) => 'layout_' + i),\n ]\n const innermostKey = shell.length > 0 ? shell[shell.length - 1] : null\n\n // Update mutable context references (used by the wrapper's context functions)\n currentPageData = data\n currentRouteParams = pageContext.routeParams || {}\n currentUrlPathname = pageContext.urlPathname || ''\n\n // --- Shell path: hot-swap Page, keep Layout/Wrapper alive ---\n if (hasShell) {\n if (currentApp) {\n // Client-side navigation: swap the Page without disposing the shell.\n currentPage = Page\n currentPageName = Page.componentName || Page.name || 'VikePageComponent'\n pageNavCounter++\n\n const newPageState = { ...(Page.initialState || {}), ...data }\n if (currentApp.sinks?.STATE?.shamefullySendNext) {\n currentApp.sinks.STATE.shamefullySendNext((state: any) => {\n const shellState = state[innermostKey!] || {}\n return {\n ...state,\n [innermostKey!]: { ...shellState, page: newPageState },\n }\n })\n }\n } else {\n // First load: read hydrated state or build from initialState\n let initialState: any\n if (typeof window !== 'undefined' && window.__VIKE_SYGNAL_STATE__ !== undefined) {\n initialState = window.__VIKE_SYGNAL_STATE__\n delete window.__VIKE_SYGNAL_STATE__\n } else {\n initialState = null\n }\n\n if (initialState && innermostKey && initialState[innermostKey] !== undefined) {\n // Hydrated combined state — distribute slices to each shell component\n const allShellComps = [...wrappers, ...layouts]\n shell.forEach((key: string, i: number) => {\n if (initialState[key] !== undefined) {\n if (i === shell.length - 1) {\n const { page: pageState, ...compState } = initialState[key]\n allShellComps[i].initialState = compState\n Page.initialState = pageState || { ...(Page.initialState || {}), ...data }\n } else {\n allShellComps[i].initialState = initialState[key]\n }\n }\n })\n } else {\n // SPA mode or client-side first navigation\n Page.initialState = { ...(Page.initialState || {}), ...data }\n }\n\n // Inject page-level context into Page (for SSR renderToString compat)\n Page.context = {\n ...Page.context,\n pageData: () => currentPageData,\n routeParams: () => currentRouteParams,\n urlPathname: () => currentUrlPathname,\n }\n\n const Component = createLayoutWrapper(wrappers, layouts, Page)\n\n try {\n currentApp = run(Component, config.drivers || {}, { mountPoint: '#page-view' }) as any\n } catch (err: any) {\n console.error('[sygnal/vike] Client render error:', err)\n const container = document.getElementById('page-view')\n if (container) {\n container.innerHTML = `<div data-sygnal-error style=\"padding:2rem;color:#e74c3c;font-family:monospace\">\n <h2>Render Error</h2>\n <pre>${String(err.message || err)}</pre>\n </div>`\n }\n }\n }\n\n // --- No shell path: dispose and recreate ---\n } else {\n if (currentApp) {\n currentApp.dispose()\n currentApp = null\n }\n\n let initialState: any\n if (typeof window !== 'undefined' && window.__VIKE_SYGNAL_STATE__ !== undefined) {\n initialState = window.__VIKE_SYGNAL_STATE__\n delete window.__VIKE_SYGNAL_STATE__\n } else {\n initialState = { ...(Page.initialState || {}), ...data }\n }\n\n Page.initialState = initialState\n Page.context = {\n ...Page.context,\n pageData: () => currentPageData,\n routeParams: () => currentRouteParams,\n urlPathname: () => currentUrlPathname,\n }\n\n try {\n currentApp = run(Page, config.drivers || {}, { mountPoint: '#page-view' }) as any\n } catch (err: any) {\n console.error('[sygnal/vike] Client render error:', err)\n const container = document.getElementById('page-view')\n if (container) {\n container.innerHTML = `<div data-sygnal-error style=\"padding:2rem;color:#e74c3c;font-family:monospace\">\n <h2>Render Error</h2>\n <pre>${String(err.message || err)}</pre>\n </div>`\n }\n }\n }\n\n // Update document title on client navigation\n if (config.title) {\n document.title = config.title\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onRenderHtml.cjs.js","sources":["../../src/vike/onRenderHtml.ts"],"sourcesContent":["/**\n * Vike server-side render hook for Sygnal.\n *\n * Renders the Page component to HTML using Sygnal's renderToString,\n * wraps it in a full HTML document, and embeds serialized state for\n * client hydration.\n *\n * When a Layout is configured, the Layout HTML wraps the Page HTML\n * inside #page-view so the structure matches the client-side wrapper\n * component (see onRenderClient.ts).\n *\n * Returns a plain HTML string. Vike wraps it with dangerouslySkipEscape\n * automatically. We avoid importing from vike/server because our bundled\n * output lives in node_modules/sygnal/ where vike isn't resolvable.\n */\n\n// @ts-ignore — resolved at runtime via package exports\nimport { renderToString } from 'sygnal'\n\ninterface PageContext {\n Page: any\n data?: any\n routeParams?: Record<string, string>\n urlPathname?: string\n config: {\n Layout?: any | any[]\n Wrapper?: any | any[]\n Head?: any\n title?: string\n description?: string\n favicon?: string\n lang?: string\n ssr?: boolean\n }\n is404?: boolean\n}\n\n/**\n * Escape a string for use in HTML attributes/text.\n */\nfunction esc(str: string): string {\n return String(str)\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n}\n\nexport function onRenderHtml(pageContext: PageContext) {\n const { Page, config } = pageContext\n const data = pageContext.data || {}\n\n // SPA mode: return empty shell, let the client render everything.\n // Head component and meta tags are still included — they're static\n // metadata that should be present regardless of SSR being disabled.\n if (config.ssr === false) {\n const lang = config.lang || 'en'\n const title = config.title || ''\n const description = config.description || ''\n const favicon = config.favicon || ''\n const titleTag = title ? `<title>${esc(title)}</title>` : ''\n const descTag = description\n ? `<meta name=\"description\" content=\"${esc(description)}\">`\n : ''\n const faviconTag = favicon\n ? `<link rel=\"icon\" href=\"${esc(favicon)}\">`\n : ''\n\n let headContent = ''\n if (config.Head && typeof config.Head === 'function') {\n try {\n headContent = renderToString(config.Head, { state: {} })\n } catch (_) {\n // Head rendering failure is non-fatal\n }\n }\n\n const spaHtml = `<!DOCTYPE html>\n<html lang=\"${lang}\">\n <head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n ${titleTag}\n ${descTag}\n ${faviconTag}\n ${headContent}\n </head>\n <body>\n <div id=\"page-view\"></div>\n </body>\n</html>`\n return { documentHtml: { _escaped: spaHtml } }\n }\n\n // Merge fetched data into the component's initial state\n const initialState = {\n ...(Page.initialState || {}),\n ...data,\n }\n\n // Inject page data, route params, and URL into the component's context\n // so sub-components can access them without prop drilling during SSR.\n Page.context = {\n ...Page.context,\n pageData: () => data,\n routeParams: () => pageContext.routeParams || {},\n urlPathname: () => pageContext.urlPathname || '',\n }\n\n // Determine if Wrapper(s) and/or Layout(s) are present — this affects hydration state shape\n const wrapperArray = config.Wrapper\n ? (Array.isArray(config.Wrapper) ? config.Wrapper : [config.Wrapper])\n .filter((W: any) => typeof W === 'function')\n : []\n const layoutArray = config.Layout\n ? (Array.isArray(config.Layout) ? config.Layout : [config.Layout])\n .filter((L: any) => typeof L === 'function')\n : []\n const hasShell = wrapperArray.length > 0 || layoutArray.length > 0\n\n // Render the page component to HTML, with error boundary.\n // When layouts are present, the hydration state is serialized separately\n // as the wrapper's combined state (with page + layout slices).\n let pageHtml: string\n try {\n pageHtml = renderToString(Page, {\n state: initialState,\n hydrateState: hasShell ? false : '__VIKE_SYGNAL_STATE__',\n })\n } catch (err: any) {\n // If the component has an onError boundary, try rendering its fallback\n if (Page.onError) {\n try {\n const fallbackVNode = Page.onError(err, { componentName: Page.name || 'Page' })\n if (fallbackVNode) {\n pageHtml = renderToString(() => fallbackVNode, { state: {} })\n if (!hasShell) {\n pageHtml += `<script>window.__VIKE_SYGNAL_STATE__=${JSON.stringify(initialState)}</script>`\n }\n } else {\n pageHtml = `<div data-sygnal-error>Render error</div>`\n }\n } catch (_) {\n pageHtml = `<div data-sygnal-error>Render error</div>`\n }\n } else {\n console.error('[sygnal/vike] SSR render error:', err)\n pageHtml = `<div data-sygnal-error><!-- SSR render error: ${esc(String(err.message || err))} --></div>`\n }\n }\n\n // If Layout(s) and/or Wrapper(s) are defined, render them wrapping the page content.\n // HTML is rendered INSIDE #page-view so the structure matches the client-side\n // wrapper component. Nesting order: Wrapper > Layout > Page.\n // Each shell component receives page content via a placeholder in its children slot.\n let pageViewContent = pageHtml\n if (hasShell) {\n // Combined shell: wrappers (outermost) + layouts (innermost around Page)\n // Must match the order used in onRenderClient's createLayoutWrapper.\n const shell = [\n ...wrapperArray.map((w: any, i: number) => ({ comp: w, key: 'wrapper_' + i })),\n ...layoutArray.map((l: any, i: number) => ({ comp: l, key: 'layout_' + i })),\n ]\n\n // Wrap from innermost to outermost (reverse order)\n for (let i = shell.length - 1; i >= 0; i--) {\n const { comp } = shell[i]\n const PLACEHOLDER = '<!--SYGNAL_PAGE_SLOT-->'\n const compHtml = renderToString(comp, {\n state: comp.initialState || {},\n props: { innerHTML: PLACEHOLDER },\n })\n const splitIdx = compHtml.indexOf(PLACEHOLDER)\n if (splitIdx !== -1) {\n pageViewContent = compHtml.substring(0, splitIdx) + pageViewContent + compHtml.substring(splitIdx + PLACEHOLDER.length)\n } else {\n // Fallback: component didn't use children/innerHTML, wrap content after it\n pageViewContent = compHtml + pageViewContent\n }\n }\n // Wrap in a shell div matching the client-side wrapper's root element\n pageViewContent = `<div id=\"vike-shell\">${pageViewContent}</div>`\n\n // Serialize the wrapper's combined state for hydration.\n // Must match the state shape from createLayoutWrapper:\n // { wrapper_0: {...}, layout_0: { ...layoutState, page: pageState } }\n const wrapperState: any = {}\n shell.forEach(({ comp, key }: any, i: number) => {\n const compState: any = { ...(comp.initialState || {}) }\n if (i === shell.length - 1) {\n compState.page = initialState\n }\n wrapperState[key] = compState\n })\n pageViewContent += `<script>window.__VIKE_SYGNAL_STATE__=${JSON.stringify(wrapperState)}</script>`\n }\n\n // Render Head component for <head> tags\n let headContent = ''\n if (config.Head && typeof config.Head === 'function') {\n try {\n headContent = renderToString(config.Head, { state: initialState })\n } catch (_) {\n // Head rendering failure is non-fatal\n }\n }\n\n const title = config.title || ''\n const description = config.description || ''\n const favicon = config.favicon || ''\n const lang = config.lang || 'en'\n\n const titleTag = title ? `<title>${esc(title)}</title>` : ''\n const descTag = description\n ? `<meta name=\"description\" content=\"${esc(description)}\">`\n : ''\n const faviconTag = favicon\n ? `<link rel=\"icon\" href=\"${esc(favicon)}\">`\n : ''\n\n const documentHtml = `<!DOCTYPE html>\n<html lang=\"${lang}\">\n <head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n ${titleTag}\n ${descTag}\n ${faviconTag}\n ${headContent}\n </head>\n <body>\n <div id=\"page-view\">${pageViewContent}</div>\n </body>\n</html>`\n\n // Produce the shape Vike's isDocumentHtml() recognizes: { _escaped: string }\n // This is equivalent to dangerouslySkipEscape(html) from vike/server,\n // but avoids importing vike/server (which isn't resolvable from within\n // node_modules/sygnal/ in Vite's module runner).\n return { documentHtml: { _escaped: documentHtml } }\n}\n"],"names":["renderToString"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onRenderHtml.mjs","sources":["../../src/vike/onRenderHtml.ts"],"sourcesContent":["/**\n * Vike server-side render hook for Sygnal.\n *\n * Renders the Page component to HTML using Sygnal's renderToString,\n * wraps it in a full HTML document, and embeds serialized state for\n * client hydration.\n *\n * When a Layout is configured, the Layout HTML wraps the Page HTML\n * inside #page-view so the structure matches the client-side wrapper\n * component (see onRenderClient.ts).\n *\n * Returns a plain HTML string. Vike wraps it with dangerouslySkipEscape\n * automatically. We avoid importing from vike/server because our bundled\n * output lives in node_modules/sygnal/ where vike isn't resolvable.\n */\n\n// @ts-ignore — resolved at runtime via package exports\nimport { renderToString } from 'sygnal'\n\ninterface PageContext {\n Page: any\n data?: any\n routeParams?: Record<string, string>\n urlPathname?: string\n config: {\n Layout?: any | any[]\n Wrapper?: any | any[]\n Head?: any\n title?: string\n description?: string\n favicon?: string\n lang?: string\n ssr?: boolean\n }\n is404?: boolean\n}\n\n/**\n * Escape a string for use in HTML attributes/text.\n */\nfunction esc(str: string): string {\n return String(str)\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n}\n\nexport function onRenderHtml(pageContext: PageContext) {\n const { Page, config } = pageContext\n const data = pageContext.data || {}\n\n // SPA mode: return empty shell, let the client render everything.\n // Head component and meta tags are still included — they're static\n // metadata that should be present regardless of SSR being disabled.\n if (config.ssr === false) {\n const lang = config.lang || 'en'\n const title = config.title || ''\n const description = config.description || ''\n const favicon = config.favicon || ''\n const titleTag = title ? `<title>${esc(title)}</title>` : ''\n const descTag = description\n ? `<meta name=\"description\" content=\"${esc(description)}\">`\n : ''\n const faviconTag = favicon\n ? `<link rel=\"icon\" href=\"${esc(favicon)}\">`\n : ''\n\n let headContent = ''\n if (config.Head && typeof config.Head === 'function') {\n try {\n headContent = renderToString(config.Head, { state: {} })\n } catch (_) {\n // Head rendering failure is non-fatal\n }\n }\n\n const spaHtml = `<!DOCTYPE html>\n<html lang=\"${lang}\">\n <head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n ${titleTag}\n ${descTag}\n ${faviconTag}\n ${headContent}\n </head>\n <body>\n <div id=\"page-view\"></div>\n </body>\n</html>`\n return { documentHtml: { _escaped: spaHtml } }\n }\n\n // Merge fetched data into the component's initial state\n const initialState = {\n ...(Page.initialState || {}),\n ...data,\n }\n\n // Inject page data, route params, and URL into the component's context\n // so sub-components can access them without prop drilling during SSR.\n Page.context = {\n ...Page.context,\n pageData: () => data,\n routeParams: () => pageContext.routeParams || {},\n urlPathname: () => pageContext.urlPathname || '',\n }\n\n // Determine if Wrapper(s) and/or Layout(s) are present — this affects hydration state shape\n const wrapperArray = config.Wrapper\n ? (Array.isArray(config.Wrapper) ? config.Wrapper : [config.Wrapper])\n .filter((W: any) => typeof W === 'function')\n : []\n const layoutArray = config.Layout\n ? (Array.isArray(config.Layout) ? config.Layout : [config.Layout])\n .filter((L: any) => typeof L === 'function')\n : []\n const hasShell = wrapperArray.length > 0 || layoutArray.length > 0\n\n // Render the page component to HTML, with error boundary.\n // When layouts are present, the hydration state is serialized separately\n // as the wrapper's combined state (with page + layout slices).\n let pageHtml: string\n try {\n pageHtml = renderToString(Page, {\n state: initialState,\n hydrateState: hasShell ? false : '__VIKE_SYGNAL_STATE__',\n })\n } catch (err: any) {\n // If the component has an onError boundary, try rendering its fallback\n if (Page.onError) {\n try {\n const fallbackVNode = Page.onError(err, { componentName: Page.name || 'Page' })\n if (fallbackVNode) {\n pageHtml = renderToString(() => fallbackVNode, { state: {} })\n if (!hasShell) {\n pageHtml += `<script>window.__VIKE_SYGNAL_STATE__=${JSON.stringify(initialState)}</script>`\n }\n } else {\n pageHtml = `<div data-sygnal-error>Render error</div>`\n }\n } catch (_) {\n pageHtml = `<div data-sygnal-error>Render error</div>`\n }\n } else {\n console.error('[sygnal/vike] SSR render error:', err)\n pageHtml = `<div data-sygnal-error><!-- SSR render error: ${esc(String(err.message || err))} --></div>`\n }\n }\n\n // If Layout(s) and/or Wrapper(s) are defined, render them wrapping the page content.\n // HTML is rendered INSIDE #page-view so the structure matches the client-side\n // wrapper component. Nesting order: Wrapper > Layout > Page.\n // Each shell component receives page content via a placeholder in its children slot.\n let pageViewContent = pageHtml\n if (hasShell) {\n // Combined shell: wrappers (outermost) + layouts (innermost around Page)\n // Must match the order used in onRenderClient's createLayoutWrapper.\n const shell = [\n ...wrapperArray.map((w: any, i: number) => ({ comp: w, key: 'wrapper_' + i })),\n ...layoutArray.map((l: any, i: number) => ({ comp: l, key: 'layout_' + i })),\n ]\n\n // Wrap from innermost to outermost (reverse order)\n for (let i = shell.length - 1; i >= 0; i--) {\n const { comp } = shell[i]\n const PLACEHOLDER = '<!--SYGNAL_PAGE_SLOT-->'\n const compHtml = renderToString(comp, {\n state: comp.initialState || {},\n props: { innerHTML: PLACEHOLDER },\n })\n const splitIdx = compHtml.indexOf(PLACEHOLDER)\n if (splitIdx !== -1) {\n pageViewContent = compHtml.substring(0, splitIdx) + pageViewContent + compHtml.substring(splitIdx + PLACEHOLDER.length)\n } else {\n // Fallback: component didn't use children/innerHTML, wrap content after it\n pageViewContent = compHtml + pageViewContent\n }\n }\n // Wrap in a shell div matching the client-side wrapper's root element\n pageViewContent = `<div id=\"vike-shell\">${pageViewContent}</div>`\n\n // Serialize the wrapper's combined state for hydration.\n // Must match the state shape from createLayoutWrapper:\n // { wrapper_0: {...}, layout_0: { ...layoutState, page: pageState } }\n const wrapperState: any = {}\n shell.forEach(({ comp, key }: any, i: number) => {\n const compState: any = { ...(comp.initialState || {}) }\n if (i === shell.length - 1) {\n compState.page = initialState\n }\n wrapperState[key] = compState\n })\n pageViewContent += `<script>window.__VIKE_SYGNAL_STATE__=${JSON.stringify(wrapperState)}</script>`\n }\n\n // Render Head component for <head> tags\n let headContent = ''\n if (config.Head && typeof config.Head === 'function') {\n try {\n headContent = renderToString(config.Head, { state: initialState })\n } catch (_) {\n // Head rendering failure is non-fatal\n }\n }\n\n const title = config.title || ''\n const description = config.description || ''\n const favicon = config.favicon || ''\n const lang = config.lang || 'en'\n\n const titleTag = title ? `<title>${esc(title)}</title>` : ''\n const descTag = description\n ? `<meta name=\"description\" content=\"${esc(description)}\">`\n : ''\n const faviconTag = favicon\n ? `<link rel=\"icon\" href=\"${esc(favicon)}\">`\n : ''\n\n const documentHtml = `<!DOCTYPE html>\n<html lang=\"${lang}\">\n <head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n ${titleTag}\n ${descTag}\n ${faviconTag}\n ${headContent}\n </head>\n <body>\n <div id=\"page-view\">${pageViewContent}</div>\n </body>\n</html>`\n\n // Produce the shape Vike's isDocumentHtml() recognizes: { _escaped: string }\n // This is equivalent to dangerouslySkipEscape(html) from vike/server,\n // but avoids importing vike/server (which isn't resolvable from within\n // node_modules/sygnal/ in Vite's module runner).\n return { documentHtml: { _escaped: documentHtml } }\n}\n"],"names":[],"mappings":"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"}
|