@inox-tools/request-state 0.4.1 → 0.5.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/events.ts"],"names":["ServerStateLoaded","previousState","serverState","options"],"mappings":"AAEO,MAAMA,CAAAA,SAA0B,KAAM,CAGrC,WAAA,CAQGC,EAKAC,CACTC,CAAAA,CAAAA,CACC,CACD,KAAMH,CAAAA,CAAAA,CAAkB,KAAMG,CAAO,CAAA,CAR5B,mBAAAF,CAKA,CAAA,IAAA,CAAA,WAAA,CAAAC,EAIV,CAnBA,OAAc,KAAO,+BAoBtB","file":"events.js","sourcesContent":["export type State = Map<string, unknown>;\n\nexport class ServerStateLoaded extends Event {\n\tpublic static NAME = '@it-astro:server-state-loaded' as const;\n\n\tpublic constructor(\n\t\t/**\n\t\t * The client state before loading the server state.\n\t\t *\n\t\t * On first load, this will be an empty map.\n\t\t * When using View Transitions and navigating to another page,\n\t\t * this will be state of the previous page.\n\t\t */\n\t\treadonly previousState: State,\n\n\t\t/**\n\t\t * The server state that will be loaded.\n\t\t */\n\t\treadonly serverState: State,\n\t\toptions?: EventInit\n\t) {\n\t\tsuper(ServerStateLoaded.NAME, options);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../src/events.ts"],"names":["ServerStateLoaded","previousState","serverState","options"],"mappings":"AAEO,MAAMA,CAAAA,SAA0B,KAAM,CAGrC,WAAA,CAQGC,EAKAC,CAAAA,CACTC,CAAAA,CACC,CACD,KAAA,CAAMH,CAAAA,CAAkB,KAAMG,CAAO,CAAA,CAR5B,mBAAAF,CAAAA,CAKA,IAAA,CAAA,WAAA,CAAAC,EAIV,CAnBA,OAAc,KAAO,+BAoBtB","file":"events.js","sourcesContent":["export type State = Map<string, unknown>;\n\nexport class ServerStateLoaded extends Event {\n\tpublic static NAME = '@it-astro:server-state-loaded' as const;\n\n\tpublic constructor(\n\t\t/**\n\t\t * The client state before loading the server state.\n\t\t *\n\t\t * On first load, this will be an empty map.\n\t\t * When using View Transitions and navigating to another page,\n\t\t * this will be state of the previous page.\n\t\t */\n\t\treadonly previousState: State,\n\n\t\t/**\n\t\t * The server state that will be loaded.\n\t\t */\n\t\treadonly serverState: State,\n\t\toptions?: EventInit\n\t) {\n\t\tsuper(ServerStateLoaded.NAME, options);\n\t}\n}\n"]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["index_default","defineIntegration","resolve","createResolver","params","addMiddleware","addVitePlugin","plugin"],"mappings":"oHAGA,IAAOA,CAAQC,CAAAA,iBAAAA,CAAkB,CAChC,IAAM,CAAA,2BAAA,CACN,KAAQ,EAAA,CACP,KAAM,CAAE,OAAA,CAAAC,CAAQ,CAAA,CAAIC,eAAe,MAAY,CAAA,IAAA,CAAA,GAAG,CAElD,CAAA,OAAO,CACN,KAAO,CAAA,CACN,oBAAuBC,CAAAA,CAAAA,EAAW,CACjC,KAAM,CAAE,aAAAC,CAAAA,CAAc,EAAID,CAE1BA,CAAAA,CAAAA,CAAO,MAAO,CAAA,KAAA,CAAM,iCAAiC,CACrDC,CAAAA,CAAAA,CAAc,CACb,KAAA,CAAO,MACP,UAAYH,CAAAA,CAAAA,CAAQ,uBAAuB,CAC5C,CAAC,CAEDE,CAAAA,CAAAA,CAAO,MAAO,CAAA,KAAA,CAAM,qCAAqC,CACzDE,CAAAA,aAAAA,CAAcF,CAAQ,CAAA,CACrB,eAAgB,IAChB,CAAA,MAAA,CAAQG,MAAO,EAChB,CAAC,EACF,CACD,CACD,CACD,CACD,CAAC","file":"index.js","sourcesContent":["import { defineIntegration, addVitePlugin, createResolver } from 'astro-integration-kit';\nimport { plugin } from './plugin.js';\n\nexport default defineIntegration({\n\tname: '@inox-tools/request-state',\n\tsetup() {\n\t\tconst { resolve } = createResolver(import.meta.url);\n\n\t\treturn {\n\t\t\thooks: {\n\t\t\t\t'astro:config:setup': (params) => {\n\t\t\t\t\tconst { addMiddleware } = params;\n\n\t\t\t\t\tparams.logger.debug('Adding request-state middleware');\n\t\t\t\t\taddMiddleware({\n\t\t\t\t\t\torder: 'pre',\n\t\t\t\t\t\tentrypoint: resolve('runtime/middleware.js'),\n\t\t\t\t\t});\n\n\t\t\t\t\tparams.logger.debug('Adding request-state virtual module');\n\t\t\t\t\taddVitePlugin(params, {\n\t\t\t\t\t\twarnDuplicated: true,\n\t\t\t\t\t\tplugin: plugin(),\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t},\n});\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["index_default","defineIntegration","resolve","createResolver","params","addMiddleware","addVitePlugin","plugin"],"mappings":"oHAGA,IAAOA,CAAAA,CAAQC,iBAAAA,CAAkB,CAChC,IAAA,CAAM,2BAAA,CACN,KAAA,EAAQ,CACP,KAAM,CAAE,OAAA,CAAAC,CAAQ,CAAA,CAAIC,eAAe,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,CAElD,OAAO,CACN,KAAA,CAAO,CACN,oBAAA,CAAuBC,CAAAA,EAAW,CACjC,KAAM,CAAE,aAAA,CAAAC,CAAc,EAAID,CAAAA,CAE1BA,CAAAA,CAAO,MAAA,CAAO,KAAA,CAAM,iCAAiC,CAAA,CACrDC,CAAAA,CAAc,CACb,KAAA,CAAO,MACP,UAAA,CAAYH,CAAAA,CAAQ,uBAAuB,CAC5C,CAAC,CAAA,CAEDE,CAAAA,CAAO,MAAA,CAAO,KAAA,CAAM,qCAAqC,CAAA,CACzDE,aAAAA,CAAcF,CAAAA,CAAQ,CACrB,eAAgB,IAAA,CAChB,MAAA,CAAQG,MAAAA,EACT,CAAC,EACF,CACD,CACD,CACD,CACD,CAAC","file":"index.js","sourcesContent":["import { defineIntegration, addVitePlugin, createResolver } from 'astro-integration-kit';\nimport { plugin } from './plugin.js';\n\nexport default defineIntegration({\n\tname: '@inox-tools/request-state',\n\tsetup() {\n\t\tconst { resolve } = createResolver(import.meta.url);\n\n\t\treturn {\n\t\t\thooks: {\n\t\t\t\t'astro:config:setup': (params) => {\n\t\t\t\t\tconst { addMiddleware } = params;\n\n\t\t\t\t\tparams.logger.debug('Adding request-state middleware');\n\t\t\t\t\taddMiddleware({\n\t\t\t\t\t\torder: 'pre',\n\t\t\t\t\t\tentrypoint: resolve('runtime/middleware.js'),\n\t\t\t\t\t});\n\n\t\t\t\t\tparams.logger.debug('Adding request-state virtual module');\n\t\t\t\t\taddVitePlugin(params, {\n\t\t\t\t\t\twarnDuplicated: true,\n\t\t\t\t\t\tplugin: plugin(),\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t},\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugin.ts"],"names":["MODULE_ID","RESOLVED_MODULE_ID","plugin","resolve","createResolver","id","config","options","stateSource"],"mappings":"mDAGA,MAAMA,EAAY,iBACZC,CAAAA,CAAAA,CAAqB,CAAOD,EAAAA,EAAAA,CAAS,GAE9BE,CAAS,CAAA,IAAc,CACnC,KAAM,CAAE,OAAAC,CAAAA,CAAQ,CAAIC,CAAAA,cAAAA,CAAe,YAAY,GAAG,CAAA,CAElD,OAAO,CACN,KAAM,uCACN,CAAA,SAAA,CAAUC,CAAI,CAAA,CACb,GAAIA,CAAOL,GAAAA,CAAAA,CACV,OAAOC,CAET,EACA,MAAOK,CAAAA,CAAAA,CAAQ,CACVA,CAAAA,CAAO,GAAK,EAAA,QAAA,GAAa,IAE7BA,GAAAA,CAAAA,CAAO,IAAM,CACZ,GAAGA,CAAO,CAAA,GAAA,CACV,SAAU,CAAC,GAAIA,CAAO,CAAA,GAAA,EAAK,UAAY,EAAC,CAAI,kBAAkB,CAC/D,GACD,CACA,CAAA,IAAA,CAAKD,CAAIE,CAAAA,CAAAA,CAAS,CACjB,GAAIF,CAAAA,GAAOJ,CAAoB,CAAA,OAE/B,MAAMO,CAAcD,CAAAA,CAAAA,EAAS,GAAM,CAAA,gBAAA,CAAmB,iBAGtD,OAAO;AAAA,kCAFYJ,EAAAA,CAAAA,CAAQ,SAAWK,CAAAA,CAAW,CAGN,CAAA;AAAA,iCACXL,EAAAA,CAAAA,CAAQ,WAAW,CAAC,CAAA;AAAA,CACrD,CAAA,IAAA,EACA,CACD,CACD","file":"plugin.js","sourcesContent":["import { createResolver } from 'astro-integration-kit';\nimport type { Plugin } from 'vite';\n\nconst MODULE_ID = '@it-astro:state';\nconst RESOLVED_MODULE_ID = `\\x00${MODULE_ID}`;\n\nexport const plugin = (): Plugin => {\n\tconst { resolve } = createResolver(import.meta.url);\n\n\treturn {\n\t\tname: '@inox-tools/request-state/vite-plugin',\n\t\tresolveId(id) {\n\t\t\tif (id === MODULE_ID) {\n\t\t\t\treturn RESOLVED_MODULE_ID;\n\t\t\t}\n\t\t},\n\t\tconfig(config) {\n\t\t\tif (config.ssr?.external === true) return;\n\n\t\t\tconfig.ssr = {\n\t\t\t\t...config.ssr,\n\t\t\t\texternal: [...(config.ssr?.external ?? []), 'node:async_hooks'],\n\t\t\t};\n\t\t},\n\t\tload(id, options) {\n\t\t\tif (id !== RESOLVED_MODULE_ID) return;\n\n\t\t\tconst stateSource = options?.ssr ? 'serverState.js' : 'clientState.js';\n\t\t\tconst importPath = resolve('runtime', stateSource);\n\n\t\t\treturn `\nexport {setState, getState} from '${importPath}';\nexport {ServerStateLoaded} from '${resolve('events.js')}';\n`.trim();\n\t\t},\n\t};\n};\n"]}
1
+ {"version":3,"sources":["../src/plugin.ts"],"names":["MODULE_ID","RESOLVED_MODULE_ID","plugin","resolve","createResolver","id","config","options","stateSource"],"mappings":"mDAGA,MAAMA,EAAY,iBAAA,CACZC,CAAAA,CAAqB,CAAA,EAAA,EAAOD,CAAS,GAE9BE,CAAAA,CAAS,IAAc,CACnC,KAAM,CAAE,OAAA,CAAAC,CAAQ,CAAA,CAAIC,cAAAA,CAAe,YAAY,GAAG,CAAA,CAElD,OAAO,CACN,KAAM,uCAAA,CACN,SAAA,CAAUC,CAAAA,CAAI,CACb,GAAIA,CAAAA,GAAOL,CAAAA,CACV,OAAOC,CAET,EACA,MAAA,CAAOK,CAAAA,CAAQ,CACVA,CAAAA,CAAO,GAAA,EAAK,QAAA,GAAa,IAAA,GAE7BA,CAAAA,CAAO,IAAM,CACZ,GAAGA,CAAAA,CAAO,GAAA,CACV,SAAU,CAAC,GAAIA,CAAAA,CAAO,GAAA,EAAK,UAAY,EAAC,CAAI,kBAAkB,CAC/D,GACD,CAAA,CACA,IAAA,CAAKD,CAAAA,CAAIE,CAAAA,CAAS,CACjB,GAAIF,CAAAA,GAAOJ,CAAAA,CAAoB,OAE/B,MAAMO,CAAAA,CAAcD,CAAAA,EAAS,GAAA,CAAM,gBAAA,CAAmB,iBAGtD,OAAO;AAAA,kCAAA,EAFYJ,CAAAA,CAAQ,SAAA,CAAWK,CAAW,CAGN,CAAA;AAAA,iCAAA,EACXL,CAAAA,CAAQ,WAAW,CAAC,CAAA;AAAA,CAAA,CACrD,IAAA,EACA,CACD,CACD","file":"plugin.js","sourcesContent":["import { createResolver } from 'astro-integration-kit';\nimport type { Plugin } from 'vite';\n\nconst MODULE_ID = '@it-astro:state';\nconst RESOLVED_MODULE_ID = `\\x00${MODULE_ID}`;\n\nexport const plugin = (): Plugin => {\n\tconst { resolve } = createResolver(import.meta.url);\n\n\treturn {\n\t\tname: '@inox-tools/request-state/vite-plugin',\n\t\tresolveId(id) {\n\t\t\tif (id === MODULE_ID) {\n\t\t\t\treturn RESOLVED_MODULE_ID;\n\t\t\t}\n\t\t},\n\t\tconfig(config) {\n\t\t\tif (config.ssr?.external === true) return;\n\n\t\t\tconfig.ssr = {\n\t\t\t\t...config.ssr,\n\t\t\t\texternal: [...(config.ssr?.external ?? []), 'node:async_hooks'],\n\t\t\t};\n\t\t},\n\t\tload(id, options) {\n\t\t\tif (id !== RESOLVED_MODULE_ID) return;\n\n\t\t\tconst stateSource = options?.ssr ? 'serverState.js' : 'clientState.js';\n\t\t\tconst importPath = resolve('runtime', stateSource);\n\n\t\t\treturn `\nexport {setState, getState} from '${importPath}';\nexport {ServerStateLoaded} from '${resolve('events.js')}';\n`.trim();\n\t\t},\n\t};\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/runtime/clientState.ts"],"names":["revivers","value","loadState","doc","element","state","parse","nextState","applyState","event","ServerStateLoaded","key","getState","valueIfMissing","setState"],"mappings":"yEAGA,MAAMA,CAAgD,CAAA,CACrD,IAAMC,CAAU,EAAA,IAAI,IAAIA,CAAK,CAAA,CAC7B,KAAOA,CAAU,EAAA,IAAI,IAAKA,CAAAA,CAAK,EAC/B,YAAeA,CAAAA,CAAAA,EAAU,MAAO,CAAA,GAAA,CAAIA,CAAK,CACzC,CAAA,eAAA,CAAkBA,CAAU,EAAA,MAAA,CAAOA,CAA4B,CAChE,CAAA,CAEMC,EAAaC,CAAqC,EAAA,CACvD,MAAMC,CAAUD,CAAAA,CAAAA,CAAI,cAAe,CAAA,gBAAgB,EAEnD,GAAIC,CAAAA,EAAS,WAAa,CAAA,CACzB,MAAMC,CAAQC,CAAAA,KAAAA,CAAMF,CAAQ,CAAA,WAAA,CAAaJ,CAAQ,CACjD,CAAA,OAAAI,EAAQ,MAAO,EAAA,CACRC,CACR,CACD,CAAA,CAEA,IAAIE,CAAAA,CAAYL,EAAU,QAAQ,CAAA,CAClC,MAAMG,CAAAA,CAAQ,IAAI,GAEZG,CAAAA,CAAAA,CAAa,IAAM,CACxB,MAAMC,CAAQ,CAAA,IAAIC,kBAAkB,IAAI,GAAA,CAAIL,CAAK,CAAGE,CAAAA,CAAAA,EAAa,IAAI,GAAK,EAE1E,GAAI,QAAA,CAAS,aAAcE,CAAAA,CAAK,EAAG,CAClCJ,CAAAA,CAAM,KAAM,EAAA,CACZ,SAAW,CAACM,CAAAA,CAAKV,CAAK,CAAKQ,GAAAA,CAAAA,CAAM,YAAY,OAAQ,EAAA,CACpDJ,CAAM,CAAA,GAAA,CAAIM,EAAKV,CAAK,EAEtB,CACD,CAAA,CAEAO,GAEA,CAAA,QAAA,CAAS,gBAAiB,CAAA,mBAAA,CAAsBC,GAAU,CACzDF,CAAAA,CAAYL,EAAUO,CAAM,CAAA,WAAW,EACxC,CAAC,CAAA,CACD,QAAS,CAAA,gBAAA,CAAiB,mBAAoBD,CAAU,CAAA,CAE3CI,MAAAA,CAAAA,CAAW,CAACD,CAAaE,CAAAA,CAAAA,IAChCR,CAAM,CAAA,GAAA,CAAIM,CAAG,CACbE,EAAAA,CAAAA,GAAmB,QACtBR,CAAM,CAAA,GAAA,CAAIM,EAAKE,CAAc,CAAA,CAGxBR,CAAM,CAAA,GAAA,CAAIM,CAAG,CAGRG,CAAAA,CAAAA,CAAAA,CAAW,CAACH,CAAAA,CAAaV,IAAyB,CAC1DA,CAAAA,GAAU,MACbI,CAAAA,CAAAA,CAAM,OAAOM,CAAG,CAAA,CAEhBN,EAAM,GAAIM,CAAAA,CAAAA,CAAKV,CAAK,EAEtB","file":"clientState.js","sourcesContent":["import { parse } from 'devalue';\nimport { type State, ServerStateLoaded } from '../events.js';\n\nconst revivers: Record<string, (value: any) => any> = {\n\tURL: (value) => new URL(value),\n\tDate: (value) => new Date(value),\n\tGlobalSymbol: (value) => Symbol.for(value),\n\tWellKnownSymbol: (value) => Symbol[value as keyof typeof Symbol],\n};\n\nconst loadState = (doc: Document): State | undefined => {\n\tconst element = doc.getElementById('it-astro-state');\n\n\tif (element?.textContent) {\n\t\tconst state = parse(element.textContent, revivers);\n\t\telement.remove();\n\t\treturn state;\n\t}\n};\n\nlet nextState = loadState(document);\nconst state = new Map();\n\nconst applyState = () => {\n\tconst event = new ServerStateLoaded(new Map(state), nextState ?? new Map());\n\n\tif (document.dispatchEvent(event)) {\n\t\tstate.clear();\n\t\tfor (const [key, value] of event.serverState.entries()) {\n\t\t\tstate.set(key, value);\n\t\t}\n\t}\n};\n\napplyState();\n\ndocument.addEventListener('astro:before-swap', (event) => {\n\tnextState = loadState(event.newDocument);\n});\ndocument.addEventListener('astro:after-swap', applyState);\n\nexport const getState = (key: string, valueIfMissing?: unknown): unknown => {\n\tif (!state.has(key)) {\n\t\tif (valueIfMissing !== undefined) {\n\t\t\tstate.set(key, valueIfMissing);\n\t\t}\n\t}\n\treturn state.get(key);\n};\n\nexport const setState = (key: string, value: unknown): void => {\n\tif (value === undefined) {\n\t\tstate.delete(key);\n\t} else {\n\t\tstate.set(key, value);\n\t}\n};\n"]}
1
+ {"version":3,"sources":["../../src/runtime/clientState.ts"],"names":["revivers","value","loadState","doc","element","state","parse","nextState","applyState","event","ServerStateLoaded","key","getState","valueIfMissing","setState"],"mappings":"yEAGA,MAAMA,CAAAA,CAAgD,CACrD,IAAMC,CAAAA,EAAU,IAAI,IAAIA,CAAK,CAAA,CAC7B,KAAOA,CAAAA,EAAU,IAAI,IAAA,CAAKA,CAAK,EAC/B,YAAA,CAAeA,CAAAA,EAAU,MAAA,CAAO,GAAA,CAAIA,CAAK,CAAA,CACzC,eAAA,CAAkBA,CAAAA,EAAU,MAAA,CAAOA,CAA4B,CAChE,CAAA,CAEMC,EAAaC,CAAAA,EAAqC,CACvD,MAAMC,CAAAA,CAAUD,CAAAA,CAAI,cAAA,CAAe,gBAAgB,EAEnD,GAAIC,CAAAA,EAAS,WAAA,CAAa,CACzB,MAAMC,CAAAA,CAAQC,KAAAA,CAAMF,CAAAA,CAAQ,WAAA,CAAaJ,CAAQ,CAAA,CACjD,OAAAI,EAAQ,MAAA,EAAO,CACRC,CACR,CACD,CAAA,CAEA,IAAIE,CAAAA,CAAYL,EAAU,QAAQ,CAAA,CAClC,MAAMG,CAAAA,CAAQ,IAAI,GAAA,CAEZG,CAAAA,CAAa,IAAM,CACxB,MAAMC,CAAAA,CAAQ,IAAIC,kBAAkB,IAAI,GAAA,CAAIL,CAAK,CAAA,CAAGE,CAAAA,EAAa,IAAI,GAAK,EAE1E,GAAI,QAAA,CAAS,aAAA,CAAcE,CAAK,EAAG,CAClCJ,CAAAA,CAAM,KAAA,EAAM,CACZ,SAAW,CAACM,CAAAA,CAAKV,CAAK,CAAA,GAAKQ,CAAAA,CAAM,YAAY,OAAA,EAAQ,CACpDJ,CAAAA,CAAM,GAAA,CAAIM,EAAKV,CAAK,EAEtB,CACD,CAAA,CAEAO,GAAW,CAEX,QAAA,CAAS,gBAAA,CAAiB,mBAAA,CAAsBC,GAAU,CACzDF,CAAAA,CAAYL,EAAUO,CAAAA,CAAM,WAAW,EACxC,CAAC,CAAA,CACD,QAAA,CAAS,gBAAA,CAAiB,mBAAoBD,CAAU,CAAA,CAEjD,MAAMI,CAAAA,CAAW,CAACD,CAAAA,CAAaE,CAAAA,IAChCR,CAAAA,CAAM,GAAA,CAAIM,CAAG,CAAA,EACbE,CAAAA,GAAmB,QACtBR,CAAAA,CAAM,GAAA,CAAIM,EAAKE,CAAc,CAAA,CAGxBR,CAAAA,CAAM,GAAA,CAAIM,CAAG,CAAA,CAAA,CAGRG,CAAAA,CAAW,CAACH,CAAAA,CAAaV,IAAyB,CAC1DA,CAAAA,GAAU,MAAA,CACbI,CAAAA,CAAM,OAAOM,CAAG,CAAA,CAEhBN,EAAM,GAAA,CAAIM,CAAAA,CAAKV,CAAK,EAEtB","file":"clientState.js","sourcesContent":["import { parse } from 'devalue';\nimport { type State, ServerStateLoaded } from '../events.js';\n\nconst revivers: Record<string, (value: any) => any> = {\n\tURL: (value) => new URL(value),\n\tDate: (value) => new Date(value),\n\tGlobalSymbol: (value) => Symbol.for(value),\n\tWellKnownSymbol: (value) => Symbol[value as keyof typeof Symbol],\n};\n\nconst loadState = (doc: Document): State | undefined => {\n\tconst element = doc.getElementById('it-astro-state');\n\n\tif (element?.textContent) {\n\t\tconst state = parse(element.textContent, revivers);\n\t\telement.remove();\n\t\treturn state;\n\t}\n};\n\nlet nextState = loadState(document);\nconst state = new Map();\n\nconst applyState = () => {\n\tconst event = new ServerStateLoaded(new Map(state), nextState ?? new Map());\n\n\tif (document.dispatchEvent(event)) {\n\t\tstate.clear();\n\t\tfor (const [key, value] of event.serverState.entries()) {\n\t\t\tstate.set(key, value);\n\t\t}\n\t}\n};\n\napplyState();\n\ndocument.addEventListener('astro:before-swap', (event) => {\n\tnextState = loadState(event.newDocument);\n});\ndocument.addEventListener('astro:after-swap', applyState);\n\nexport const getState = (key: string, valueIfMissing?: unknown): unknown => {\n\tif (!state.has(key)) {\n\t\tif (valueIfMissing !== undefined) {\n\t\t\tstate.set(key, valueIfMissing);\n\t\t}\n\t}\n\treturn state.get(key);\n};\n\nexport const setState = (key: string, value: unknown): void => {\n\tif (value === undefined) {\n\t\tstate.delete(key);\n\t} else {\n\t\tstate.set(key, value);\n\t}\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/runtime/middleware.ts"],"names":["onRequest","defineMiddleware","_","next","getState","result","collectState","contentType","mediaType","parse","originalBody","headCloseIndex","state","stateScript"],"mappings":"6HAIO,MAAMA,EAAYC,gBAAiB,CAAA,MAAOC,CAAGC,CAAAA,CAAAA,GAAS,CAC5D,KAAM,CAAE,QAAAC,CAAAA,CAAAA,CAAU,MAAAC,CAAAA,CAAO,CAAI,CAAA,MAAMC,aAAaH,CAAI,CAAA,CAE9CI,CAAcF,CAAAA,CAAAA,CAAO,OAAQ,CAAA,GAAA,CAAI,cAAc,CAErD,CAAA,GAAIE,CAAgB,GAAA,IAAA,CAAM,OAAOF,CAAAA,CAEjC,KAAM,CAAE,IAAA,CAAMG,CAAU,CAAA,CAAIC,KAAMF,CAAAA,CAAW,EAE7C,GAAIC,CAAAA,GAAc,WAAe,EAAA,CAACA,CAAU,CAAA,UAAA,CAAW,YAAY,CAAG,CAAA,OAAOH,CAE7E,CAAA,MAAMK,CAAe,CAAA,MAAML,EAAO,IAAK,EAAA,CAEjCM,CAAiBD,CAAAA,CAAAA,CAAa,OAAQ,CAAA,SAAS,EACrD,GAAIC,CAAAA,CAAiB,EAAI,CAAA,CACxB,MAAMC,CAAAA,CAAQR,GACd,CAAA,GAAIQ,CAAO,CAAA,CACV,MAAMC,CAAAA,CAAc,+DAA+DD,CAAK,CAAA,SAAA,CAAA,CAExF,OAAO,IAAI,QACVF,CAAAA,CAAAA,CAAa,MAAM,CAAGC,CAAAA,CAAc,CAAIE,CAAAA,CAAAA,CAAcH,CAAa,CAAA,KAAA,CAAMC,CAAc,CACvFN,CAAAA,CACD,CACD,CACD,CAEA,OAAO,IAAI,QAASK,CAAAA,CAAAA,CAAcL,CAAM,CACzC,CAAC","file":"middleware.js","sourcesContent":["import { defineMiddleware } from 'astro/middleware';\nimport { collectState } from './serverState.js';\nimport { parse } from 'content-type';\n\nexport const onRequest = defineMiddleware(async (_, next) => {\n\tconst { getState, result } = await collectState(next);\n\n\tconst contentType = result.headers.get('Content-Type');\n\n\tif (contentType === null) return result;\n\n\tconst { type: mediaType } = parse(contentType);\n\n\tif (mediaType !== 'text/html' && !mediaType.startsWith('text/html+')) return result;\n\n\tconst originalBody = await result.text();\n\n\tconst headCloseIndex = originalBody.indexOf('</head>');\n\tif (headCloseIndex > -1) {\n\t\tconst state = getState();\n\t\tif (state) {\n\t\t\tconst stateScript = `<script id=\"it-astro-state\" type=\"application/json+devalue\">${state}</script>`;\n\n\t\t\treturn new Response(\n\t\t\t\toriginalBody.slice(0, headCloseIndex) + stateScript + originalBody.slice(headCloseIndex),\n\t\t\t\tresult\n\t\t\t);\n\t\t}\n\t}\n\n\treturn new Response(originalBody, result);\n});\n"]}
1
+ {"version":3,"sources":["../../src/runtime/middleware.ts"],"names":["onRequest","defineMiddleware","_","next","getState","result","collectState","contentType","mediaType","parse","originalBody","headCloseIndex","state","stateScript"],"mappings":"6HAIO,MAAMA,EAAYC,gBAAAA,CAAiB,MAAOC,CAAAA,CAAGC,CAAAA,GAAS,CAC5D,KAAM,CAAE,QAAA,CAAAC,CAAAA,CAAU,MAAA,CAAAC,CAAO,CAAA,CAAI,MAAMC,aAAaH,CAAI,CAAA,CAE9CI,CAAAA,CAAcF,CAAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,CAErD,GAAIE,CAAAA,GAAgB,IAAA,CAAM,OAAOF,CAAAA,CAEjC,KAAM,CAAE,IAAA,CAAMG,CAAU,CAAA,CAAIC,KAAAA,CAAMF,CAAW,EAE7C,GAAIC,CAAAA,GAAc,WAAA,EAAe,CAACA,CAAAA,CAAU,UAAA,CAAW,YAAY,CAAA,CAAG,OAAOH,CAAAA,CAE7E,MAAMK,CAAAA,CAAe,MAAML,EAAO,IAAA,EAAK,CAEjCM,CAAAA,CAAiBD,CAAAA,CAAa,OAAA,CAAQ,SAAS,EACrD,GAAIC,CAAAA,CAAiB,EAAA,CAAI,CACxB,MAAMC,CAAAA,CAAQR,GAAS,CACvB,GAAIQ,CAAAA,CAAO,CACV,MAAMC,CAAAA,CAAc,+DAA+DD,CAAK,CAAA,SAAA,CAAA,CAExF,OAAO,IAAI,QAAA,CACVF,CAAAA,CAAa,MAAM,CAAA,CAAGC,CAAc,CAAA,CAAIE,CAAAA,CAAcH,CAAAA,CAAa,KAAA,CAAMC,CAAc,CAAA,CACvFN,CACD,CACD,CACD,CAEA,OAAO,IAAI,QAAA,CAASK,CAAAA,CAAcL,CAAM,CACzC,CAAC","file":"middleware.js","sourcesContent":["import { defineMiddleware } from 'astro/middleware';\nimport { collectState } from './serverState.js';\nimport { parse } from 'content-type';\n\nexport const onRequest = defineMiddleware(async (_, next) => {\n\tconst { getState, result } = await collectState(next);\n\n\tconst contentType = result.headers.get('Content-Type');\n\n\tif (contentType === null) return result;\n\n\tconst { type: mediaType } = parse(contentType);\n\n\tif (mediaType !== 'text/html' && !mediaType.startsWith('text/html+')) return result;\n\n\tconst originalBody = await result.text();\n\n\tconst headCloseIndex = originalBody.indexOf('</head>');\n\tif (headCloseIndex > -1) {\n\t\tconst state = getState();\n\t\tif (state) {\n\t\t\tconst stateScript = `<script id=\"it-astro-state\" type=\"application/json+devalue\">${state}</script>`;\n\n\t\t\treturn new Response(\n\t\t\t\toriginalBody.slice(0, headCloseIndex) + stateScript + originalBody.slice(headCloseIndex),\n\t\t\t\tresult\n\t\t\t);\n\t\t}\n\t}\n\n\treturn new Response(originalBody, result);\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/runtime/serverState.ts"],"names":["store","AsyncLocalStorage","getState","key","valueIfMissing","state","setState","value","wellKnownSymbols","reducers","collectState","cb","stringify"],"mappings":"iFAKA,MAAMA,CAAQ,CAAA,IAAIC,kBAELC,CAAW,CAAA,CAACC,CAAaC,CAAAA,CAAAA,GAAsC,CAC3E,MAAMC,CAAAA,CAAQL,CAAM,CAAA,QAAA,GACpB,GAAIK,CAAAA,GAAU,MAEd,CAAA,OAAKA,EAAM,GAAIF,CAAAA,CAAG,CACbC,EAAAA,CAAAA,GAAmB,QACtBC,CAAM,CAAA,GAAA,CAAIF,EAAKC,CAAc,CAAA,CAGxBC,EAAM,GAAIF,CAAAA,CAAG,CACrB,CAAA,CAEaG,EAAW,CAACH,CAAAA,CAAaI,CAAyB,GAAA,CAC9D,MAAMF,CAAQL,CAAAA,CAAAA,CAAM,QAAS,EAAA,CACzBO,IAAU,MACbF,CAAAA,CAAAA,EAAO,OAAOF,CAAG,CAAA,CAEjBE,GAAO,GAAIF,CAAAA,CAAAA,CAAKI,CAAK,EAEvB,EAOMC,CAAmB,CAAA,IAAI,GAC5B,CAAA,MAAA,CAAO,QAAQ,MAAM,CAAA,CACnB,MAAO,CAAA,CAAC,CAACL,CAAKI,CAAAA,CAAK,IAAM,OAAOA,CAAAA,EAAU,UAAY,OAAOJ,CAAAA,EAAQ,QAAQ,CAAA,CAC7E,IAAI,CAAC,CAACA,CAAKI,CAAAA,CAAK,IAAM,CAACA,CAAAA,CAAOJ,CAAG,CAAC,CACrC,CAEMM,CAAAA,CAAAA,CAAgD,CACrD,GAAA,CAAMF,GAAUA,CAAiB,YAAA,GAAA,EAAOA,CAAM,CAAA,IAAA,CAC9C,KAAOA,CAAUA,EAAAA,CAAAA,YAAiB,IAAQA,EAAAA,CAAAA,CAAM,SAChD,CAAA,YAAA,CAAeA,CACd,EAAA,OAAOA,GAAU,QACjBA,EAAAA,CAAAA,CAAM,cAAgB,MACtBA,EAAAA,CAAAA,GAAU,OAAO,GAAIA,CAAAA,CAAAA,CAAM,WAAW,CAAA,EACtCA,EAAM,WACP,CAAA,eAAA,CAAkBA,CAAU,EAAA,OAAOA,GAAU,QAAYC,EAAAA,CAAAA,CAAiB,GAAID,CAAAA,CAAK,CACpF,CAEaG,CAAAA,CAAAA,CAAe,MAAUC,CAAqD,EAAA,CAC1F,MAAMN,CAAQ,CAAA,IAAI,GAElB,CAAA,OAAO,CACN,MAFc,CAAA,MAAML,CAAM,CAAA,GAAA,CAAIK,EAAOM,CAAE,CAAA,CAGvC,QAAU,CAAA,IAAMN,EAAM,IAAO,CAAA,CAAA,EAAKO,UAAUP,CAAOI,CAAAA,CAAQ,CAC5D,CACD","file":"serverState.js","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { stringify } from 'devalue';\n\ntype State = Map<string, unknown>;\n\nconst store = new AsyncLocalStorage<State>();\n\nexport const getState = (key: string, valueIfMissing?: unknown): unknown => {\n\tconst state = store.getStore();\n\tif (state === undefined) return;\n\n\tif (!state.has(key)) {\n\t\tif (valueIfMissing !== undefined) {\n\t\t\tstate.set(key, valueIfMissing);\n\t\t}\n\t}\n\treturn state.get(key);\n};\n\nexport const setState = (key: string, value: unknown): void => {\n\tconst state = store.getStore();\n\tif (value === undefined) {\n\t\tstate?.delete(key);\n\t} else {\n\t\tstate?.set(key, value);\n\t}\n};\n\nexport type CollectedState<T> = {\n\tgetState: () => string | false;\n\tresult: T;\n};\n\nconst wellKnownSymbols = new Map(\n\tObject.entries(Symbol)\n\t\t.filter(([key, value]) => typeof value === 'symbol' && typeof key === 'string')\n\t\t.map(([key, value]) => [value, key])\n);\n\nconst reducers: Record<string, (value: any) => any> = {\n\tURL: (value) => value instanceof URL && value.href,\n\tDate: (value) => value instanceof Date && value.valueOf(),\n\tGlobalSymbol: (value) =>\n\t\ttypeof value === 'symbol' &&\n\t\tvalue.description !== undefined &&\n\t\tvalue === Symbol.for(value.description) &&\n\t\tvalue.description,\n\tWellKnownSymbol: (value) => typeof value === 'symbol' && wellKnownSymbols.get(value),\n};\n\nexport const collectState = async <R>(cb: () => Promise<R>): Promise<CollectedState<R>> => {\n\tconst state = new Map();\n\tconst result = await store.run(state, cb);\n\treturn {\n\t\tresult,\n\t\tgetState: () => state.size > 0 && stringify(state, reducers),\n\t};\n};\n"]}
1
+ {"version":3,"sources":["../../src/runtime/serverState.ts"],"names":["store","AsyncLocalStorage","getState","key","valueIfMissing","state","setState","value","wellKnownSymbols","reducers","collectState","cb","stringify"],"mappings":"iFAKA,MAAMA,CAAAA,CAAQ,IAAIC,kBAELC,CAAAA,CAAW,CAACC,CAAAA,CAAaC,CAAAA,GAAsC,CAC3E,MAAMC,CAAAA,CAAQL,CAAAA,CAAM,QAAA,GACpB,GAAIK,CAAAA,GAAU,MAAA,CAEd,OAAKA,EAAM,GAAA,CAAIF,CAAG,CAAA,EACbC,CAAAA,GAAmB,QACtBC,CAAAA,CAAM,GAAA,CAAIF,EAAKC,CAAc,CAAA,CAGxBC,EAAM,GAAA,CAAIF,CAAG,CACrB,CAAA,CAEaG,EAAW,CAACH,CAAAA,CAAaI,CAAAA,GAAyB,CAC9D,MAAMF,CAAAA,CAAQL,CAAAA,CAAM,QAAA,EAAS,CACzBO,IAAU,MAAA,CACbF,CAAAA,EAAO,OAAOF,CAAG,CAAA,CAEjBE,GAAO,GAAA,CAAIF,CAAAA,CAAKI,CAAK,EAEvB,EAOMC,CAAAA,CAAmB,IAAI,GAAA,CAC5B,MAAA,CAAO,QAAQ,MAAM,CAAA,CACnB,MAAA,CAAO,CAAC,CAACL,CAAAA,CAAKI,CAAK,IAAM,OAAOA,CAAAA,EAAU,UAAY,OAAOJ,CAAAA,EAAQ,QAAQ,CAAA,CAC7E,IAAI,CAAC,CAACA,CAAAA,CAAKI,CAAK,IAAM,CAACA,CAAAA,CAAOJ,CAAG,CAAC,CACrC,CAAA,CAEMM,CAAAA,CAAgD,CACrD,GAAA,CAAMF,GAAUA,CAAAA,YAAiB,GAAA,EAAOA,CAAAA,CAAM,IAAA,CAC9C,KAAOA,CAAAA,EAAUA,CAAAA,YAAiB,IAAA,EAAQA,CAAAA,CAAM,SAAQ,CACxD,YAAA,CAAeA,CAAAA,EACd,OAAOA,GAAU,QAAA,EACjBA,CAAAA,CAAM,cAAgB,MAAA,EACtBA,CAAAA,GAAU,OAAO,GAAA,CAAIA,CAAAA,CAAM,WAAW,CAAA,EACtCA,EAAM,WAAA,CACP,eAAA,CAAkBA,CAAAA,EAAU,OAAOA,GAAU,QAAA,EAAYC,CAAAA,CAAiB,GAAA,CAAID,CAAK,CACpF,CAAA,CAEaG,CAAAA,CAAe,MAAUC,CAAAA,EAAqD,CAC1F,MAAMN,CAAAA,CAAQ,IAAI,GAAA,CAElB,OAAO,CACN,MAAA,CAFc,MAAML,CAAAA,CAAM,GAAA,CAAIK,EAAOM,CAAE,CAAA,CAGvC,QAAA,CAAU,IAAMN,EAAM,IAAA,CAAO,CAAA,EAAKO,UAAUP,CAAAA,CAAOI,CAAQ,CAC5D,CACD","file":"serverState.js","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { stringify } from 'devalue';\n\ntype State = Map<string, unknown>;\n\nconst store = new AsyncLocalStorage<State>();\n\nexport const getState = (key: string, valueIfMissing?: unknown): unknown => {\n\tconst state = store.getStore();\n\tif (state === undefined) return;\n\n\tif (!state.has(key)) {\n\t\tif (valueIfMissing !== undefined) {\n\t\t\tstate.set(key, valueIfMissing);\n\t\t}\n\t}\n\treturn state.get(key);\n};\n\nexport const setState = (key: string, value: unknown): void => {\n\tconst state = store.getStore();\n\tif (value === undefined) {\n\t\tstate?.delete(key);\n\t} else {\n\t\tstate?.set(key, value);\n\t}\n};\n\nexport type CollectedState<T> = {\n\tgetState: () => string | false;\n\tresult: T;\n};\n\nconst wellKnownSymbols = new Map(\n\tObject.entries(Symbol)\n\t\t.filter(([key, value]) => typeof value === 'symbol' && typeof key === 'string')\n\t\t.map(([key, value]) => [value, key])\n);\n\nconst reducers: Record<string, (value: any) => any> = {\n\tURL: (value) => value instanceof URL && value.href,\n\tDate: (value) => value instanceof Date && value.valueOf(),\n\tGlobalSymbol: (value) =>\n\t\ttypeof value === 'symbol' &&\n\t\tvalue.description !== undefined &&\n\t\tvalue === Symbol.for(value.description) &&\n\t\tvalue.description,\n\tWellKnownSymbol: (value) => typeof value === 'symbol' && wellKnownSymbols.get(value),\n};\n\nexport const collectState = async <R>(cb: () => Promise<R>): Promise<CollectedState<R>> => {\n\tconst state = new Map();\n\tconst result = await store.run(state, cb);\n\treturn {\n\t\tresult,\n\t\tgetState: () => state.size > 0 && stringify(state, reducers),\n\t};\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inox-tools/request-state",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "Shared request state between server and client",
5
5
  "keywords": [
6
6
  "astro-integration",
@@ -26,18 +26,18 @@
26
26
  "astro-integration-kit": "~0.18.0",
27
27
  "content-type": "^1.0.5",
28
28
  "devalue": "^5.1.1",
29
- "@inox-tools/utils": "^0.4.0"
29
+ "@inox-tools/utils": "^0.6.0"
30
30
  },
31
31
  "devDependencies": {
32
- "@playwright/test": "^1.52.0",
33
- "@types/content-type": "^1.1.8",
34
- "@types/node": "^22.15.17",
35
- "astro": "^5.7.12",
36
- "jest-extended": "^4.0.2",
37
- "tsup": "8.4.0",
32
+ "@playwright/test": "^1.54.1",
33
+ "@types/content-type": "^1.1.9",
34
+ "@types/node": "^24.0.15",
35
+ "astro": "^5.12.0",
36
+ "jest-extended": "^6.0.0",
37
+ "tsup": "8.5.0",
38
38
  "typescript": "^5.8.3",
39
- "vite": "^6.3.5",
40
- "@inox-tools/astro-tests": "^0.6.1"
39
+ "vite": "^7.0.5",
40
+ "@inox-tools/astro-tests": "^0.7.0"
41
41
  },
42
42
  "peerDependencies": {
43
43
  "astro": "^5"