@lomray/vite-ssr-boost 7.1.0 → 8.0.0-beta.2
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 +18 -1
- package/adapters/body.d.ts +5 -0
- package/adapters/body.js +2 -0
- package/adapters/body.js.map +1 -0
- package/adapters/compression.d.ts +11 -0
- package/adapters/compression.js +2 -0
- package/adapters/compression.js.map +1 -0
- package/adapters/edge.d.ts +11 -0
- package/adapters/edge.js +2 -0
- package/adapters/edge.js.map +1 -0
- package/adapters/express/create-request.d.ts +11 -0
- package/adapters/express/create-request.js +2 -0
- package/adapters/express/create-request.js.map +1 -0
- package/adapters/express/entry.d.ts +55 -0
- package/adapters/express/entry.js.map +1 -0
- package/{services → adapters/express}/prepare-server.d.ts +15 -40
- package/adapters/express/prepare-server.js +2 -0
- package/adapters/express/prepare-server.js.map +1 -0
- package/adapters/express/render.d.ts +63 -0
- package/adapters/express/render.js +2 -0
- package/adapters/express/render.js.map +1 -0
- package/adapters/express/server.d.ts +15 -0
- package/adapters/express/server.js +2 -0
- package/adapters/express/server.js.map +1 -0
- package/adapters/express.d.ts +11 -0
- package/adapters/express.js +2 -0
- package/adapters/express.js.map +1 -0
- package/adapters/fastify.d.ts +23 -0
- package/adapters/fastify.js +2 -0
- package/adapters/fastify.js.map +1 -0
- package/adapters/hono.d.ts +13 -0
- package/adapters/hono.js +2 -0
- package/adapters/hono.js.map +1 -0
- package/adapters/node.d.ts +19 -0
- package/adapters/node.js +2 -0
- package/adapters/node.js.map +1 -0
- package/browser/entry.d.ts +9 -9
- package/browser/entry.js +1 -1
- package/browser/entry.js.map +1 -1
- package/cli/build.d.ts +2 -2
- package/cli/build.js.map +1 -1
- package/cli/helpers/keyboard-input.d.ts +1 -1
- package/cli/helpers/keyboard-input.js +1 -1
- package/cli/helpers/keyboard-input.js.map +1 -1
- package/cli/helpers/vite-reset-cache.d.ts +1 -1
- package/cli/helpers/vite-reset-cache.js.map +1 -1
- package/cli/interfaces/actions.d.ts +8 -9
- package/cli/run-amplify-build.d.ts +1 -1
- package/cli/run-amplify-build.js.map +1 -1
- package/cli/run-dev.d.ts +3 -4
- package/cli/run-dev.js +1 -1
- package/cli/run-dev.js.map +1 -1
- package/cli/run-docker-build.d.ts +2 -2
- package/cli/run-docker-build.js.map +1 -1
- package/cli/run-prod.d.ts +5 -6
- package/cli/run-prod.js +1 -1
- package/cli/run-prod.js.map +1 -1
- package/cli/run-serverless.d.ts +3 -3
- package/cli/run-serverless.js +1 -1
- package/cli/run-serverless.js.map +1 -1
- package/cli/run-vercel-build.d.ts +1 -1
- package/cli/run-vercel-build.js.map +1 -1
- package/cli.js +1 -1
- package/cli.js.map +1 -1
- package/components/navigate.d.ts +3 -3
- package/components/navigate.js.map +1 -1
- package/components/only-client.d.ts +2 -2
- package/components/only-client.js +1 -1
- package/components/only-client.js.map +1 -1
- package/components/render-client.d.ts +4 -4
- package/components/render-client.js +1 -1
- package/components/render-client.js.map +1 -1
- package/components/response-status.d.ts +2 -2
- package/components/response-status.js +1 -1
- package/components/response-status.js.map +1 -1
- package/components/scroll-to-top.d.ts +2 -2
- package/components/scroll-to-top.js +1 -1
- package/components/scroll-to-top.js.map +1 -1
- package/components/with-suspense.d.ts +3 -3
- package/components/with-suspense.js.map +1 -1
- package/constants/cli-actions.d.ts +1 -1
- package/constants/cli-actions.js.map +1 -1
- package/constants/cli-context.d.ts +4 -5
- package/constants/cli-context.js.map +1 -1
- package/constants/cli-name.d.ts +1 -1
- package/constants/cli-name.js.map +1 -1
- package/constants/cli-shortcuts.d.ts +2 -2
- package/constants/cli-shortcuts.js +1 -1
- package/constants/cli-shortcuts.js.map +1 -1
- package/constants/common.js.map +1 -1
- package/constants/plugin-name.d.ts +1 -1
- package/constants/plugin-name.js.map +1 -1
- package/constants/stream-error.d.ts +1 -1
- package/constants/stream-error.js.map +1 -1
- package/context/server.d.ts +3 -4
- package/context/server.js.map +1 -1
- package/core/compose-html.d.ts +5 -0
- package/core/compose-html.js +2 -0
- package/core/compose-html.js.map +1 -0
- package/core/early-hints.d.ts +6 -0
- package/core/early-hints.js +2 -0
- package/core/early-hints.js.map +1 -0
- package/core/handler.d.ts +30 -0
- package/core/handler.js +2 -0
- package/core/handler.js.map +1 -0
- package/core/head-response.d.ts +5 -0
- package/core/head-response.js +2 -0
- package/core/head-response.js.map +1 -0
- package/core/headers.d.ts +12 -0
- package/core/headers.js +2 -0
- package/core/headers.js.map +1 -0
- package/core/render.d.ts +101 -0
- package/core/render.js +2 -0
- package/core/render.js.map +1 -0
- package/core/transform-html.d.ts +7 -0
- package/core/transform-html.js +2 -0
- package/core/transform-html.js.map +1 -0
- package/core/types.d.ts +7 -0
- package/core/types.js +2 -0
- package/core/types.js.map +1 -0
- package/edge/render-to-stream.d.ts +6 -0
- package/edge/render-to-stream.js +2 -0
- package/edge/render-to-stream.js.map +1 -0
- package/helpers/build-custom-state.d.ts +2 -3
- package/helpers/build-custom-state.js +1 -1
- package/helpers/build-custom-state.js.map +1 -1
- package/helpers/build-router-state.d.ts +2 -2
- package/helpers/build-router-state.js.map +1 -1
- package/helpers/create-focus-only.d.ts +3 -3
- package/helpers/create-focus-only.js.map +1 -1
- package/helpers/dev-marker.d.ts +1 -1
- package/helpers/dev-marker.js.map +1 -1
- package/helpers/get-server-state.d.ts +1 -1
- package/helpers/get-server-state.js.map +1 -1
- package/helpers/html-escape.d.ts +1 -1
- package/helpers/html-escape.js +1 -1
- package/helpers/html-escape.js.map +1 -1
- package/helpers/import-route.d.ts +7 -7
- package/helpers/import-route.js +1 -1
- package/helpers/import-route.js.map +1 -1
- package/helpers/is-route-file.d.ts +1 -1
- package/helpers/is-route-file.js.map +1 -1
- package/helpers/obtain-stream-error.d.ts +3 -3
- package/helpers/obtain-stream-error.js +1 -1
- package/helpers/obtain-stream-error.js.map +1 -1
- package/helpers/plugin-config.d.ts +5 -5
- package/helpers/plugin-config.js +1 -1
- package/helpers/plugin-config.js.map +1 -1
- package/helpers/print-server-info.d.ts +3 -4
- package/helpers/print-server-info.js +1 -1
- package/helpers/print-server-info.js.map +1 -1
- package/helpers/print-server-urls.d.ts +2 -2
- package/helpers/print-server-urls.js +1 -1
- package/helpers/print-server-urls.js.map +1 -1
- package/helpers/process-stop.d.ts +1 -1
- package/helpers/process-stop.js.map +1 -1
- package/helpers/resolve-server-urls.d.ts +3 -4
- package/helpers/resolve-server-urls.js +1 -1
- package/helpers/resolve-server-urls.js.map +1 -1
- package/helpers/serialize-errors.d.ts +2 -2
- package/helpers/serialize-errors.js.map +1 -1
- package/helpers/vite-aliases.d.ts +2 -2
- package/helpers/vite-aliases.js +1 -1
- package/helpers/vite-aliases.js.map +1 -1
- package/interfaces/fc-route.d.ts +4 -4
- package/interfaces/fc-route.js.map +1 -1
- package/interfaces/fc.d.ts +3 -4
- package/interfaces/route-object.d.ts +6 -6
- package/node/compress-response.d.ts +6 -0
- package/node/compress-response.js +2 -0
- package/node/compress-response.js.map +1 -0
- package/node/create-headers.d.ts +6 -0
- package/node/create-headers.js +2 -0
- package/node/create-headers.js.map +1 -0
- package/node/create-request.d.ts +13 -0
- package/node/create-request.js +2 -0
- package/node/create-request.js.map +1 -0
- package/node/http.d.ts +4 -0
- package/node/http.js +2 -0
- package/node/http.js.map +1 -0
- package/node/render-to-stream.d.ts +6 -0
- package/node/render-to-stream.js +2 -0
- package/node/render-to-stream.js.map +1 -0
- package/node/request-signal.d.ts +10 -0
- package/node/request-signal.js +2 -0
- package/node/request-signal.js.map +1 -0
- package/node/split-link-header.d.ts +5 -0
- package/node/split-link-header.js +2 -0
- package/node/split-link-header.js.map +1 -0
- package/node/write-early-hints.d.ts +6 -0
- package/node/write-early-hints.js +2 -0
- package/node/write-early-hints.js.map +1 -0
- package/node/write-fetch-response.d.ts +11 -0
- package/node/write-fetch-response.js +2 -0
- package/node/write-fetch-response.js.map +1 -0
- package/package.json +89 -27
- package/plugin.d.ts +7 -7
- package/plugin.js.map +1 -1
- package/plugins/create-spa-index.d.ts +3 -3
- package/plugins/create-spa-index.js.map +1 -1
- package/plugins/handle-custom-entrypoint.d.ts +4 -4
- package/plugins/handle-custom-entrypoint.js +1 -1
- package/plugins/handle-custom-entrypoint.js.map +1 -1
- package/plugins/make-aliases.d.ts +3 -3
- package/plugins/make-aliases.js +1 -1
- package/plugins/make-aliases.js.map +1 -1
- package/plugins/normalize-route.d.ts +3 -3
- package/plugins/normalize-route.js.map +1 -1
- package/services/build.d.ts +5 -51
- package/services/build.js +1 -1
- package/services/build.js.map +1 -1
- package/services/logger.d.ts +2 -30
- package/services/logger.js.map +1 -1
- package/services/parse-routes.d.ts +5 -42
- package/services/parse-routes.js +1 -1
- package/services/parse-routes.js.map +1 -1
- package/services/path-normalize.d.ts +3 -18
- package/services/path-normalize.js +1 -1
- package/services/path-normalize.js.map +1 -1
- package/services/server-api.d.ts +1 -7
- package/services/server-api.js.map +1 -1
- package/services/server-config.d.ts +7 -52
- package/services/server-config.js +1 -1
- package/services/server-config.js.map +1 -1
- package/services/ssr-manifest.d.ts +20 -60
- package/services/ssr-manifest.js +1 -1
- package/services/ssr-manifest.js.map +1 -1
- package/workflow/Dockerfile +1 -1
- package/helpers/handle-response.d.ts +0 -7
- package/helpers/handle-response.js +0 -2
- package/helpers/handle-response.js.map +0 -1
- package/node/create-fetch-request.d.ts +0 -7
- package/node/create-fetch-request.js +0 -2
- package/node/create-fetch-request.js.map +0 -1
- package/node/entry.d.ts +0 -63
- package/node/entry.js.map +0 -1
- package/node/render.d.ts +0 -64
- package/node/render.js +0 -2
- package/node/render.js.map +0 -1
- package/node/server.d.ts +0 -16
- package/node/server.js +0 -2
- package/node/server.js.map +0 -1
- package/node/write-response.d.ts +0 -14
- package/node/write-response.js +0 -2
- package/node/write-response.js.map +0 -1
- package/services/prepare-server.js +0 -2
- package/services/prepare-server.js.map +0 -1
- /package/{node → adapters/express}/entry.js +0 -0
package/constants/cli-name.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
declare const _default: "ssr-boost";
|
|
2
|
-
export
|
|
2
|
+
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-name.js","sources":["../../src/constants/cli-name.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"cli-name.js","sources":["../../src/constants/cli-name.ts"],"sourcesContent":[null],"names":["cliName"],"mappings":"AAAA,IAAAA,EAAe"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { IPluginOptions } from
|
|
1
|
+
import type { IPluginOptions } from '../plugin.js';
|
|
2
2
|
/**
|
|
3
3
|
* Default plugin shortcuts
|
|
4
4
|
*/
|
|
5
5
|
declare const shortcuts: NonNullable<IPluginOptions['customShortcuts']>;
|
|
6
|
-
export
|
|
6
|
+
export default shortcuts;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"chalk";import r from"../helpers/process-stop.js";const o=async({server:r,config:o})=>{const t=o?.getLogger(),i=await new Promise(
|
|
1
|
+
import e from"chalk";import r from"../helpers/process-stop.js";const o=async({server:r,config:o})=>{const t=o?.getLogger(),i=await new Promise(e=>{r?.close(e)});return await(o?.getVite()?.close()),!i||(t?.info(e.red(`failed to stop dev server: ${i}`)),!1)},t=[{key:"r",description:"restart server",action:async r=>{const{reboot:t,config:i}=r,s=i?.getLogger();s?.info(e.yellow("\nrestarting server...")),await o(r)&&(await(t?.(!1)),s?.info(e.green("server restarted successful.")))}},{key:"u",description:"show server url",action({config:e}){e?.getLogger()?.info(""),e?.getVite()?.printUrls()}},{key:"c",description:"clear console",isOnlyDev:!0,action({config:e}){e?.getLogger()?.clearScreen("error")}},{key:"o",description:"open in browser",isOnlyDev:!0,action({config:e}){e?.getVite()?.openBrowser()}},{key:"q",description:"quit",async action(e){await o(e),r()}}];export{t as default};
|
|
2
2
|
//# sourceMappingURL=cli-shortcuts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-shortcuts.js","sources":["../../src/constants/cli-shortcuts.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"cli-shortcuts.js","sources":["../../src/constants/cli-shortcuts.ts"],"sourcesContent":[null],"names":["stopServer","async","server","config","Logger","getLogger","err","Promise","resolve","close","getVite","info","chalk","red","shortcuts","key","description","action","cliContext","reboot","yellow","green","printUrls","isOnlyDev","clearScreen","openBrowser","processStop"],"mappings":"+DAQA,MAAMA,EAAaC,OAASC,SAAQC,aAClC,MAAMC,EAASD,GAAQE,YAGjBC,QAAY,IAAIC,QAASC,IAC7BN,GAAQO,MAAMD,KAMhB,aAFML,GAAQO,WAAWD,UAErBH,IACFF,GAAQO,KAAKC,EAAMC,IAAI,8BAA8BP,OAE9C,IASLQ,EAA4D,CAChE,CACEC,IAAK,IACLC,YAAa,iBACbC,OAAQhB,MAAOiB,IACb,MAAMC,OAAEA,EAAMhB,OAAEA,GAAWe,EACrBd,EAASD,GAAQE,YAEvBD,GAAQO,KAAKC,EAAMQ,OAAO,iCAEdpB,EAAWkB,WAIjBC,KAAS,IACff,GAAQO,KAAKC,EAAMS,MAAM,oCAG7B,CACEN,IAAK,IACLC,YAAa,kBACb,MAAAC,EAAOd,OAAEA,IACPA,GAAQE,aAAaM,KAAK,IAC1BR,GAAQO,WAAWY,WACrB,GAEF,CACEP,IAAK,IACLC,YAAa,gBACbO,WAAW,EACX,MAAAN,EAAOd,OAAEA,IACPA,GAAQE,aAAamB,YAAY,QACnC,GAEF,CACET,IAAK,IACLC,YAAa,kBACbO,WAAW,EACX,MAAAN,EAAOd,OAAEA,IACPA,GAAQO,WAAWe,aACrB,GAEF,CACEV,IAAK,IACLC,YAAa,OACb,YAAMC,CAAOC,SACLlB,EAAWkB,GACjBQ,GACF"}
|
package/constants/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sources":["../../src/constants/common.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"common.js","sources":["../../src/constants/common.ts"],"sourcesContent":[null],"names":["IS_SSR_MODE","__IS_SSR__","IS_SERVER","window"],"mappings":"AAEA,MAAMA,EAAqC,oBAAfC,YAAoCA,WAE1DC,EAA8B,oBAAXC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
declare const _default: "@lomray/vite-ssr-boost";
|
|
2
|
-
export
|
|
2
|
+
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-name.js","sources":["../../src/constants/plugin-name.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"plugin-name.js","sources":["../../src/constants/plugin-name.ts"],"sourcesContent":[null],"names":["PLUGIN_NAME"],"mappings":"AAAA,IAAAA,EAAe"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-error.js","sources":["../../src/constants/stream-error.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"stream-error.js","sources":["../../src/constants/stream-error.ts"],"sourcesContent":[null],"names":["StreamError","StreamError$1"],"mappings":"AAGA,IAAKA,GAAL,SAAKA,GACHA,EAAA,cAAA,UACAA,EAAA,cAAA,UACAA,EAAA,aAAA,SACAA,EAAA,WAAA,OACAA,EAAA,QAAA,SACD,CAND,CAAKA,IAAAA,EAAW,CAAA,IAQhB,IAAAC,EAAeD"}
|
package/context/server.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import type { FC, PropsWithChildren } from 'react';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
|
|
4
|
-
interface IServerContext {
|
|
3
|
+
export interface IServerContext {
|
|
5
4
|
response: Response | null;
|
|
6
5
|
isServer: boolean;
|
|
7
6
|
basename?: string;
|
|
@@ -19,4 +18,4 @@ interface IServerProvider {
|
|
|
19
18
|
*/
|
|
20
19
|
declare const ServerProvider: FC<PropsWithChildren<IServerProvider>>;
|
|
21
20
|
declare const useServerContext: () => IServerContext;
|
|
22
|
-
export {
|
|
21
|
+
export { ServerContext, ServerProvider, useServerContext };
|
package/context/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sources":["../../src/context/server.tsx"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"server.js","sources":["../../src/context/server.tsx"],"sourcesContent":[null],"names":["ServerContext","React","createContext","response","isServer","ServerProvider","children","context","createElement","Provider","value","useServerContext","useContext"],"mappings":"sCASA,MAQMA,EAAgBC,EAAMC,cARV,CAChBC,SAAU,KACVC,UAAU,IAgBNC,EAAyD,EAAGC,WAAUC,aAC1EN,EAAAO,cAACR,EAAcS,SAAQ,CAACC,MAAOH,EAASD,SAAUA,IAG9CK,EAAmB,IAAsBC,EAAWZ"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream the shell, React body and hydration footer under downstream backpressure.
|
|
3
|
+
*/
|
|
4
|
+
declare const composeHtml: (header: string, body: ReadableStream<Uint8Array>, footer: string, abort?: (reason?: unknown) => void, onComplete?: () => void) => ReadableStream<Uint8Array>;
|
|
5
|
+
export default composeHtml;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=(e,a,r,o,n)=>{const t=new TextEncoder,c=a.getReader();let l="header";return new ReadableStream({cancel:async e=>{if(o?.(e),"footer"!==l)try{await c.cancel(e)}finally{c.releaseLock(),n?.()}},async pull(a){if("header"===l&&(l="body",e))a.enqueue(t.encode(e));else{if("body"===l){let e;try{e=await c.read()}catch(e){return o?.(e),c.releaseLock(),n?.(),void a.error(e)}if(!e.done)return void a.enqueue(e.value);l="footer",c.releaseLock(),n?.()}r&&a.enqueue(t.encode(r)),a.close()}}})};export{e as default};
|
|
2
|
+
//# sourceMappingURL=compose-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-html.js","sources":["../../src/core/compose-html.ts"],"sourcesContent":[null],"names":["composeHtml","header","body","footer","abort","onComplete","encoder","TextEncoder","reader","getReader","phase","ReadableStream","cancel","async","reason","releaseLock","pull","controller","enqueue","encode","chunk","read","error","done","value","close"],"mappings":"AAGA,MAAMA,EAAc,CAClBC,EACAC,EACAC,EACAC,EACAC,KAEA,MAAMC,EAAU,IAAIC,YACdC,EAASN,EAAKO,YACpB,IAAIC,EAAsC,SAE1C,OAAO,IAAIC,eAA2B,CAIpCC,OAAQC,MAAOC,IAGb,GAFAV,IAAQU,GAEM,WAAVJ,EAIJ,UACQF,EAAOI,OAAOE,EACtB,SACEN,EAAOO,cACPV,KACF,GAMF,UAAMW,CAAKC,GACT,GAAc,WAAVP,IACFA,EAAQ,OAEJT,GACFgB,EAAWC,QAAQZ,EAAQa,OAAOlB,QAJtC,CAUA,GAAc,SAAVS,EAAkB,CACpB,IAAIU,EAEJ,IACEA,QAAcZ,EAAOa,MACvB,CAAE,MAAOC,GAMP,OALAlB,IAAQkB,GACRd,EAAOO,cACPV,WACAY,EAAWK,MAAMA,EAGnB,CAEA,IAAKF,EAAMG,KAGT,YAFAN,EAAWC,QAAQE,EAAMI,OAK3Bd,EAAQ,SACRF,EAAOO,cACPV,KACF,CAEIF,GACFc,EAAWC,QAAQZ,EAAQa,OAAOhB,IAGpCc,EAAWQ,OA/BX,CAgCF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ISsrExecutionContext } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Emit informational headers when the runtime supports early hints.
|
|
4
|
+
*/
|
|
5
|
+
declare const emitEarlyHints: (context: ISsrExecutionContext | undefined, headers: Headers) => Promise<void>;
|
|
6
|
+
export default emitEarlyHints;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"early-hints.js","sources":["../../src/core/early-hints.ts"],"sourcesContent":[null],"names":["emitEarlyHints","async","context","headers","onEarlyHints"],"mappings":"AAKA,MAAMA,EAAiBC,MACrBC,EACAC,WAEMD,GAASE,eAAeD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ICoreRenderOptions, ICoreRenderParams } from './render.js';
|
|
2
|
+
import type { ISsrExecutionContext, TSsrHandler } from './types.js';
|
|
3
|
+
interface IHtmlShell {
|
|
4
|
+
footer: string;
|
|
5
|
+
header: string;
|
|
6
|
+
}
|
|
7
|
+
interface IRequestInit<TAppProps> {
|
|
8
|
+
appProps?: TAppProps;
|
|
9
|
+
headers?: HeadersInit;
|
|
10
|
+
status?: number;
|
|
11
|
+
}
|
|
12
|
+
interface ICreateHandlerOptions<TAppProps> extends ICoreRenderOptions<TAppProps> {
|
|
13
|
+
/**
|
|
14
|
+
* Supply the document shell, including the application's browser entry script.
|
|
15
|
+
*/
|
|
16
|
+
getHtml: (request: Request) => IHtmlShell | Promise<IHtmlShell>;
|
|
17
|
+
/**
|
|
18
|
+
* Initialize request metadata or return a Response to bypass rendering.
|
|
19
|
+
*/
|
|
20
|
+
onRequest?: (params: {
|
|
21
|
+
executionContext?: ISsrExecutionContext;
|
|
22
|
+
request: Request;
|
|
23
|
+
}) => IRequestInit<TAppProps> | Promise<IRequestInit<TAppProps> | Response> | Response;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create isolated request state and allow request hooks to bypass rendering.
|
|
27
|
+
*/
|
|
28
|
+
declare const createHandler: <TAppProps = Record<string, any>>(params: ICoreRenderParams<TAppProps>, { getHtml, onRequest, ...options }: ICreateHandlerOptions<TAppProps>) => TSsrHandler;
|
|
29
|
+
export type { ICreateHandlerOptions, IHtmlShell, IRequestInit };
|
|
30
|
+
export default createHandler;
|
package/core/handler.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"./head-response.js";import s from"./render.js";const t=(t,{getHtml:r,onRequest:o,...a})=>async(n,p)=>{const u=await(o?.({executionContext:p,request:n}));if(u instanceof Response)return e(n,u);const i={appProps:u?.appProps??{},html:await r(n),request:n,response:{headers:new Headers(u?.headers),status:u?.status}};return s(t,i,a,p)};export{t as default};
|
|
2
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sources":["../../src/core/handler.ts"],"sourcesContent":[null],"names":["createHandler","params","getHtml","onRequest","options","async","request","executionContext","requestInit","Response","headResponse","context","appProps","html","response","headers","Headers","status","render"],"mappings":"6DAkCA,MAAMA,EAAgB,CACpBC,GACEC,UAASC,eAAcC,KAKlBC,MAAOC,EAASC,KACrB,MAAMC,QAAoBL,IAAY,CAAEI,mBAAkBD,aAE1D,GAAIE,aAAuBC,SACzB,OAAOC,EAAaJ,EAASE,GAG/B,MAAMG,EAAyC,CAC7CC,SAAWJ,GAAaI,UAAY,GACpCC,WAAYX,EAAQI,GACpBA,UACAQ,SAAU,CACRC,QAAS,IAAIC,QAAQR,GAAaO,SAClCE,OAAQT,GAAaS,SAIzB,OAAOC,EAAOjB,EAAQU,EAASP,EAASG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"head-response.js","sources":["../../src/core/head-response.ts"],"sourcesContent":[null],"names":["headResponse","async","request","response","method","body","cancel","Response","headers","status","statusText"],"mappings":"AAGA,MAAMA,EAAeC,MAAOC,EAAkBC,IACrB,SAAnBD,EAAQE,QAAsBD,EAASE,YAIrCF,EAASE,KAAKC,SAEb,IAAIC,SAAS,KAAM,CACxBC,QAASL,EAASK,QAClBC,OAAQN,EAASM,OACjBC,WAAYP,EAASO,cARdP"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enumerate ordinary headers without combining independent Set-Cookie values.
|
|
3
|
+
*/
|
|
4
|
+
export declare const getHeaderEntries: (headers: Headers) => [string, string][];
|
|
5
|
+
/**
|
|
6
|
+
* Read cookies without splitting commas inside Expires attributes.
|
|
7
|
+
*/
|
|
8
|
+
export declare const getSetCookieHeaders: (headers: Headers) => string[];
|
|
9
|
+
/**
|
|
10
|
+
* Response headers override hook headers, while every Set-Cookie remains independent.
|
|
11
|
+
*/
|
|
12
|
+
export declare const mergeResponseHeaders: (response: Response, base: Headers) => Response;
|
package/core/headers.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=e=>{const t=[];return e.forEach((e,s)=>{"set-cookie"!==s.toLowerCase()&&t.push([s,e])}),t},t=e=>e.getSetCookie(),s=(s,o)=>{const a=new Headers(o);return e(s.headers).forEach(([e,t])=>a.set(e,t)),t(s.headers).forEach(e=>a.append("Set-Cookie",e)),new Response(s.body,{headers:a,status:s.status,statusText:s.statusText})};export{e as getHeaderEntries,t as getSetCookieHeaders,s as mergeResponseHeaders};
|
|
2
|
+
//# sourceMappingURL=headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","sources":["../../src/core/headers.ts"],"sourcesContent":[null],"names":["getHeaderEntries","headers","entries","forEach","value","name","toLowerCase","push","getSetCookieHeaders","getSetCookie","mergeResponseHeaders","response","base","Headers","set","cookie","append","Response","body","status","statusText"],"mappings":"AAGO,MAAMA,EAAoBC,IAC/B,MAAMC,EAA8B,GAQpC,OANAD,EAAQE,QAAQ,CAACC,EAAOC,KACK,eAAvBA,EAAKC,eACPJ,EAAQK,KAAK,CAACF,EAAMD,MAIjBF,GAMIM,EAAuBP,GAA+BA,EAAQQ,eAK9DC,EAAuB,CAACC,EAAoBC,KACvD,MAAMX,EAAU,IAAIY,QAAQD,GAK5B,OAHAZ,EAAiBW,EAASV,SAASE,QAAQ,EAAEE,EAAMD,KAAWH,EAAQa,IAAIT,EAAMD,IAChFI,EAAoBG,EAASV,SAASE,QAASY,GAAWd,EAAQe,OAAO,aAAcD,IAEhF,IAAIE,SAASN,EAASO,KAAM,CACjCjB,UACAkB,OAAQR,EAASQ,OACjBC,WAAYT,EAASS"}
|
package/core/render.d.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { StaticHandler, StaticHandlerContext } from 'react-router';
|
|
3
|
+
import StreamError from '../constants/stream-error.js';
|
|
4
|
+
import type { IServerContext } from '../context/server.js';
|
|
5
|
+
import type { ISsrExecutionContext } from './types.js';
|
|
6
|
+
import type { IObtainStreamErrorOut } from '../helpers/obtain-stream-error.js';
|
|
7
|
+
export interface ISsrRequestContext<TAppProps = Record<string, any>> {
|
|
8
|
+
appProps: NonNullable<TAppProps>;
|
|
9
|
+
/**
|
|
10
|
+
* First render failure, or the explicit timeout/cancellation classification.
|
|
11
|
+
*/
|
|
12
|
+
didError?: StreamError;
|
|
13
|
+
html: {
|
|
14
|
+
footer: string;
|
|
15
|
+
header: string;
|
|
16
|
+
};
|
|
17
|
+
isStream?: boolean;
|
|
18
|
+
request: Request;
|
|
19
|
+
/**
|
|
20
|
+
* Mutable response metadata shared with request and render hooks.
|
|
21
|
+
*/
|
|
22
|
+
response: {
|
|
23
|
+
headers: Headers;
|
|
24
|
+
status?: number;
|
|
25
|
+
};
|
|
26
|
+
routerContext?: StaticHandlerContext;
|
|
27
|
+
serverContext?: IServerContext;
|
|
28
|
+
}
|
|
29
|
+
export interface IRenderStreamOptions {
|
|
30
|
+
onError: (error: unknown) => void;
|
|
31
|
+
signal: AbortSignal;
|
|
32
|
+
}
|
|
33
|
+
export interface IRenderStream {
|
|
34
|
+
/**
|
|
35
|
+
* Settles after all suspended content completes or rendering is aborted.
|
|
36
|
+
*/
|
|
37
|
+
allReady: Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Stop rendering and settle pending readiness promises.
|
|
40
|
+
*/
|
|
41
|
+
abort: (reason?: unknown) => void;
|
|
42
|
+
/**
|
|
43
|
+
* Settles when the first shell is available or cannot be produced.
|
|
44
|
+
*/
|
|
45
|
+
shellReady: Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Begin piping after the core commits its response metadata.
|
|
48
|
+
*/
|
|
49
|
+
start: () => void;
|
|
50
|
+
stream: ReadableStream<Uint8Array>;
|
|
51
|
+
}
|
|
52
|
+
export type TRenderToStream = (node: ReactNode, options: IRenderStreamOptions) => IRenderStream | Promise<IRenderStream>;
|
|
53
|
+
export interface ICoreRenderParams<TAppProps = Record<string, any>> {
|
|
54
|
+
createApp: (children: ReactNode, context: ISsrRequestContext<TAppProps>) => ReactNode;
|
|
55
|
+
handler: StaticHandler;
|
|
56
|
+
renderToStream: TRenderToStream;
|
|
57
|
+
}
|
|
58
|
+
export interface ICoreRenderOptions<TAppProps = Record<string, any>> {
|
|
59
|
+
/**
|
|
60
|
+
* React rendering deadline in milliseconds, starting after router preparation.
|
|
61
|
+
*/
|
|
62
|
+
abortDelay?: number;
|
|
63
|
+
getState?: (params: {
|
|
64
|
+
context: ISsrRequestContext<TAppProps>;
|
|
65
|
+
}) => Record<string, Record<string, any>> | undefined | void;
|
|
66
|
+
onError?: (params: {
|
|
67
|
+
context: ISsrRequestContext<TAppProps>;
|
|
68
|
+
error: IObtainStreamErrorOut;
|
|
69
|
+
}) => void;
|
|
70
|
+
onResponse?: (params: {
|
|
71
|
+
context: ISsrRequestContext<TAppProps>;
|
|
72
|
+
html: string;
|
|
73
|
+
}) => string | undefined | void;
|
|
74
|
+
onRouterReady?: (params: {
|
|
75
|
+
context: ISsrRequestContext<TAppProps>;
|
|
76
|
+
}) => Promise<{
|
|
77
|
+
isStream?: boolean;
|
|
78
|
+
}> | {
|
|
79
|
+
isStream?: boolean;
|
|
80
|
+
};
|
|
81
|
+
onShellError?: (params: {
|
|
82
|
+
context: ISsrRequestContext<TAppProps>;
|
|
83
|
+
error: Error;
|
|
84
|
+
}) => string | undefined | void;
|
|
85
|
+
onShellReady?: (params: {
|
|
86
|
+
context: ISsrRequestContext<TAppProps>;
|
|
87
|
+
}) => {
|
|
88
|
+
footer?: string;
|
|
89
|
+
header?: string;
|
|
90
|
+
};
|
|
91
|
+
prepare?: (params: {
|
|
92
|
+
context: ISsrRequestContext<TAppProps>;
|
|
93
|
+
executionContext?: ISsrExecutionContext;
|
|
94
|
+
}) => Promise<void> | void;
|
|
95
|
+
routerRequestContext?: unknown;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Coordinate router queries, React rendering and the final Fetch response.
|
|
99
|
+
*/
|
|
100
|
+
declare const render: <TAppProps>({ createApp, handler, renderToStream }: ICoreRenderParams<TAppProps>, context: ISsrRequestContext<TAppProps>, { abortDelay, getState, onError, onResponse, onRouterReady, onShellError, onShellReady, prepare, routerRequestContext, }: ICoreRenderOptions<TAppProps>, executionContext?: ISsrExecutionContext) => Promise<Response>;
|
|
101
|
+
export default render;
|
package/core/render.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"react";import{createStaticRouter as t,StaticRouterProvider as r}from"react-router";import o from"../constants/stream-error.js";import{ServerProvider as s}from"../context/server.js";import a from"./compose-html.js";import n from"./head-response.js";import{mergeResponseHeaders as c}from"./headers.js";import d from"./transform-html.js";import l from"../helpers/build-custom-state.js";import u from"../helpers/build-router-state.js";import i from"../helpers/obtain-stream-error.js";const m="text/html",h="Content-Type",p=async({createApp:p,handler:x,renderToStream:f},R,{abortDelay:C=15e3,getState:w,onError:E,onResponse:y,onRouterReady:b,onShellError:q,onShellReady:S,prepare:g,routerRequestContext:v},j)=>{const T=await x.query(R.request,{requestContext:v??R});if(T instanceof Response)return n(R.request,c(T,R.response.headers));R.routerContext=T,await(g?.({context:R,executionContext:j}));const{isStream:A=!0}=await(b?.({context:R}))??{};R.isStream=A,R.serverContext={basename:R.routerContext.basename,isServer:!0,response:null};const H=t(x.dataRoutes,R.routerContext),D=e.createElement(s,{context:R.serverContext},p(e.createElement(r,{router:H,context:R.routerContext,hydrate:!1}),R)),L=new AbortController;let k,B,I=!1;const z=()=>J(R.request.signal.reason),F=()=>clearTimeout(K),G=()=>{F(),R.request.signal.removeEventListener("abort",z)},J=e=>{I||(I=!0,k=e,G(),R.didError??=o.RenderCancel,L.abort(e),B?.abort(e))},K=setTimeout(()=>{R.didError=o.RenderTimeout,J()},C);R.request.signal.aborted?J(R.request.signal.reason):R.request.signal.addEventListener("abort",z,{once:!0});try{B=await f(D,{onError:e=>{const t=i(e);!I||t.code!==o.RenderAborted&&e!==L.signal.reason||(t.code=R.didError===o.RenderTimeout?o.RenderTimeout:o.RenderCancel);const{code:r}=t;R.didError??=r,E?.({context:R,error:t})},signal:L.signal}),I&&B.abort(k),B.allReady.then(F,F),await(A?B.shellReady:B.allReady)}catch(e){return J(e),await(B?.stream.cancel(e).catch(()=>{})),((e,t,r)=>{const o=t instanceof Error?t:new Error(String(t)),s=r?.({context:e,error:o})||"<!doctype html><p>Internal Server Error</p>",a=new Headers(e.response.headers);return a.set(h,m),new Response("HEAD"===e.request.method?null:s,{headers:a,status:500})})(R,e,q)}try{const e=R.serverContext.response;if(e&&(M=e,Boolean(M&&M.status>=300&&M.status<400&&M.headers.has("Location"))))return J(),await B.stream.cancel().catch(()=>{}),n(R.request,c(e,R.response.headers));const{header:t,footer:r,headers:o,status:s}=((e,{getState:t,onShellReady:r})=>{const o=e.serverContext.response;e.response.status=o?.status??e.response.status??e.routerContext.statusCode??200,e.response.headers.has(h)||e.response.headers.set(h,m);const s=r?.({context:e})??{},a=u(e.routerContext),n=l(t?.({context:e}));return{header:s.header||e.html.header,footer:a+n+(s.footer||e.html.footer),headers:new Headers(e.response.headers),status:e.response.status}})(R,{getState:w,onShellReady:S});if("HEAD"===R.request.method||[204,205,304].includes(s))return J(),await B.stream.cancel().catch(()=>{}),new Response(null,{headers:o,status:s});const i=a(t,B.stream,r,J,G),p=d(i,y?e=>y({context:R,html:e}):void 0);return B.start(),new Response(p,{headers:o,status:s})}catch(e){throw J(e),B.stream.locked||await B.stream.cancel(e).catch(()=>{}),e}var M};export{p as default};
|
|
2
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sources":["../../src/core/render.tsx"],"sourcesContent":[null],"names":["HTML_CONTENT_TYPE","CONTENT_TYPE","render","async","createApp","handler","renderToStream","context","abortDelay","getState","onError","onResponse","onRouterReady","onShellError","onShellReady","prepare","routerRequestContext","executionContext","queried","query","request","requestContext","Response","headResponse","mergeResponseHeaders","response","headers","routerContext","isStream","serverContext","basename","isServer","router","createStaticRouter","dataRoutes","node","React","createElement","ServerProvider","StaticRouterProvider","hydrate","renderController","AbortController","abortReason","output","hasAborted","onRequestAbort","abort","signal","reason","clearAbortTimer","clearTimeout","abortTimer","cleanup","removeEventListener","didError","StreamError","RenderCancel","setTimeout","RenderTimeout","aborted","addEventListener","once","error","streamError","obtainStreamError","code","RenderAborted","allReady","then","shellReady","stream","cancel","catch","shellError","Error","String","html","Headers","set","method","status","createShellErrorResponse","serverResponse","Boolean","has","header","footer","statusCode","shell","routerState","buildRouterState","customState","buildCustomState","prepareHtmlResponse","includes","body","composeHtml","transformed","transformHtml","undefined","start","locked"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type TTransformHtml = (html: string) => string | undefined | void;
|
|
2
|
+
/**
|
|
3
|
+
* Apply response hooks to decoded text without splitting UTF-8 characters.
|
|
4
|
+
*/
|
|
5
|
+
declare const transformHtml: (stream: ReadableStream<Uint8Array>, transform?: TTransformHtml) => ReadableStream<Uint8Array>;
|
|
6
|
+
export type { TTransformHtml };
|
|
7
|
+
export default transformHtml;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=(e,r)=>{if(!r)return e;const n=new TextDecoder,o=new TextEncoder,t=(e,n)=>{e&&n.enqueue(o.encode(r(e)||e))};return e.pipeThrough(new TransformStream({flush:e=>t(n.decode(),e),transform:(e,r)=>t(n.decode(e,{stream:!0}),r)}))};export{e as default};
|
|
2
|
+
//# sourceMappingURL=transform-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-html.js","sources":["../../src/core/transform-html.ts"],"sourcesContent":[null],"names":["transformHtml","stream","transform","decoder","TextDecoder","encoder","TextEncoder","apply","html","controller","enqueue","encode","pipeThrough","TransformStream","flush","decode","chunk"],"mappings":"AAKA,MAAMA,EAAgB,CACpBC,EACAC,KAEA,IAAKA,EACH,OAAOD,EAGT,MAAME,EAAU,IAAIC,YACdC,EAAU,IAAIC,YAKdC,EAAQ,CAACC,EAAcC,KACtBD,GAILC,EAAWC,QAAQL,EAAQM,OAAOT,EAAUM,IAASA,KAGvD,OAAOP,EAAOW,YACZ,IAAIC,gBAAwC,CAI1CC,MAAQL,GAAeF,EAAMJ,EAAQY,SAAUN,GAK/CP,UAAW,CAACc,EAAOP,IAAeF,EAAMJ,EAAQY,OAAOC,EAAO,CAAEf,QAAQ,IAASQ"}
|
package/core/types.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ISsrExecutionContext {
|
|
2
|
+
/**
|
|
3
|
+
* Deliver informational headers outside the final Fetch response when supported.
|
|
4
|
+
*/
|
|
5
|
+
onEarlyHints?: (headers: Headers) => Promise<void> | void;
|
|
6
|
+
}
|
|
7
|
+
export type TSsrHandler = (request: Request, context?: ISsrExecutionContext) => Promise<Response>;
|
package/core/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import*as e from"react-dom/server";const r=async()=>e.renderToReadableStream??(await(import("react-dom/server.browser"))).renderToReadableStream,a=async(e,{onError:a,signal:t})=>{const o=new AbortController;let n;const s=new Promise((e,r)=>{n=r}),l=()=>{const{reason:e}=t;o.abort(e);const{reason:r}=o.signal;n(r instanceof Error?r:new Error(String(r)))};let c;t.aborted?l():t.addEventListener("abort",l,{once:!0});try{c=await Promise.race([r().then(r=>r(e,{onError:a,signal:o.signal})),s])}catch(e){t.removeEventListener("abort",l);const r=Promise.reject(e);return r.catch(()=>{}),{allReady:r,abort:e=>o.abort(e),shellReady:r,start:()=>{},stream:new ReadableStream}}const d=()=>t.removeEventListener("abort",l);return c.allReady.then(d,d),{allReady:c.allReady,abort:e=>o.abort(e),shellReady:Promise.resolve(),start:()=>{},stream:c}};export{a as default};
|
|
2
|
+
//# sourceMappingURL=render-to-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-to-stream.js","sources":["../../src/edge/render-to-stream.ts"],"sourcesContent":[null],"names":["getRenderer","async","ReactDOMServer","renderToReadableStream","renderToStream","node","onError","signal","controller","AbortController","rejectPending","pendingAbort","Promise","_","reject","abort","reason","signalReason","Error","String","stream","aborted","addEventListener","once","race","then","error","removeEventListener","shellError","catch","allReady","shellReady","start","ReadableStream","removeAbortListener","resolve"],"mappings":"mCAMA,MAAMA,EAAcC,SAClBC,EAAeC,sCACD,8BAA6BA,uBAKvCC,EAAkCH,MAAOI,GAAQC,UAASC,aAC9D,MAAMC,EAAa,IAAIC,gBACvB,IAAIC,EAKJ,MAAMC,EAAe,IAAIC,QAAe,CAACC,EAAGC,KAC1CJ,EAAgBI,IAMZC,EAAQ,KACZ,MAAQC,OAAQC,GAAiBV,EAEjCC,EAAWO,MAAME,GAEjB,MAAMD,OAAEA,GAAWR,EAAWD,OAE9BG,EAAcM,aAAkBE,MAAQF,EAAS,IAAIE,MAAMC,OAAOH,MASpE,IAAII,EANAb,EAAOc,QACTN,IAEAR,EAAOe,iBAAiB,QAASP,EAAO,CAAEQ,MAAM,IAKlD,IACEH,QAAeR,QAAQY,KAAK,CAC1BxB,IAAcyB,KAAMtB,GAClBA,EAAuBE,EAAM,CAAEC,UAASC,OAAQC,EAAWD,UAE7DI,GAEJ,CAAE,MAAOe,GACPnB,EAAOoB,oBAAoB,QAASZ,GACpC,MAAMa,EAAahB,QAAQE,OAAOY,GAIlC,OAFKE,EAAWC,MAAM,QAEf,CACLC,SAAUF,EAKVb,MAAQC,GAAWR,EAAWO,MAAMC,GACpCe,WAAYH,EAKZI,MAAO,OACPZ,OAAQ,IAAIa,eAEhB,CAKA,MAAMC,EAAsB,IAAY3B,EAAOoB,oBAAoB,QAASZ,GAI5E,OAFKK,EAAOU,SAASL,KAAKS,EAAqBA,GAExC,CACLJ,SAAUV,EAAOU,SAKjBf,MAAQC,GAAWR,EAAWO,MAAMC,GACpCe,WAAYnB,QAAQuB,UAKpBH,MAAO,OACPZ"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { IRenderOptions } from "../node/render.js";
|
|
2
1
|
/**
|
|
3
2
|
* Build custom state
|
|
4
3
|
*/
|
|
5
|
-
declare function buildCustomState(initState?:
|
|
6
|
-
export
|
|
4
|
+
declare function buildCustomState(initState?: Record<string, Record<string, any>> | void): string;
|
|
5
|
+
export default buildCustomState;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import t from"./html-escape.js";function r(r){return Object.entries(r??{}).map((
|
|
1
|
+
import t from"./html-escape.js";function r(r){return Object.entries(r??{}).map(([r,e])=>{if(!r||!e||!Object.keys(e||{}).length)return"";const i=t(JSON.stringify(JSON.stringify(e)));return`<script async>window${/^[A-Za-z_$][\w$]*$/.test(r)?`.${r}`:`[${t(JSON.stringify(r))}]`} = JSON.parse(${i});<\/script>`}).join("").trim()}export{r as default};
|
|
2
2
|
//# sourceMappingURL=build-custom-state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-custom-state.js","sources":["../../src/helpers/build-custom-state.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"build-custom-state.js","sources":["../../src/helpers/build-custom-state.ts"],"sourcesContent":[null],"names":["buildCustomState","initState","Object","entries","map","key","state","keys","length","json","htmlEscape","JSON","stringify","test","join","trim"],"mappings":"gCAKA,SAASA,EAAiBC,GAcxB,OAbqBC,OAAOC,QAAQF,GAAa,CAAA,GAAIG,IAAI,EAAEC,EAAKC,MAC9D,IAAKD,IAAQC,IAAUJ,OAAOK,KAAKD,GAAS,IAAIE,OAC9C,MAAO,GAGT,MAAMC,EAAOC,EAAWC,KAAKC,UAAUD,KAAKC,UAAUN,KAKtD,MAAO,uBAJU,qBAAqBO,KAAKR,GACvC,IAAIA,IACJ,IAAIK,EAAWC,KAAKC,UAAUP,uBAEqBI,kBAGrCK,KAAK,IAAIC,MAC/B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { StaticHandlerContext } from 'react-router';
|
|
1
|
+
import type { StaticHandlerContext } from 'react-router';
|
|
2
2
|
/**
|
|
3
3
|
* Build router state
|
|
4
4
|
*/
|
|
5
5
|
declare function buildRouterState(context: StaticHandlerContext): string;
|
|
6
|
-
export
|
|
6
|
+
export default buildRouterState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-router-state.js","sources":["../../src/helpers/build-router-state.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"build-router-state.js","sources":["../../src/helpers/build-router-state.ts"],"sourcesContent":[null],"names":["buildRouterState","context","loaderData","actionData","errors","routerState","serializeErrors","htmlEscape","JSON","stringify"],"mappings":"qEAOA,SAASA,EAAiBC,GACxB,MAAMC,WAAEA,EAAUC,WAAEA,EAAUC,OAAEA,GAAWH,EACrCI,EAAc,CAClBH,aACAC,aACAC,OAAQE,EAAgBF,IAI1B,MAAO,iEAFMG,EAAWC,KAAKC,UAAUD,KAAKC,UAAUJ,kBAGxD"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { IBuildParams } from
|
|
1
|
+
import type { IBuildParams } from '../services/build.js';
|
|
2
2
|
/**
|
|
3
3
|
* Small focus only helper to provide simple and useful methods to detect focus state
|
|
4
4
|
*/
|
|
5
|
-
declare const createFocusOnly: (focus: IBuildParams[
|
|
5
|
+
declare const createFocusOnly: (focus: IBuildParams["focusOnly"]) => {
|
|
6
6
|
isOnlyClient: () => boolean;
|
|
7
7
|
isClient: () => boolean;
|
|
8
8
|
isServer: () => boolean;
|
|
9
9
|
isEntrypoint: () => boolean;
|
|
10
10
|
};
|
|
11
|
-
export
|
|
11
|
+
export default createFocusOnly;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-focus-only.js","sources":["../../src/helpers/create-focus-only.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"create-focus-only.js","sources":["../../src/helpers/create-focus-only.ts"],"sourcesContent":[null],"names":["createFocusOnly","focus","isOnlyClient","isClient","includes","isServer","isEntrypoint"],"mappings":"AAKA,MAAMA,EAAmBC,IAAgC,CACvDC,aAAc,IAAgB,WAAVD,EACpBE,SAAU,IAAM,CAAC,MAAO,MAAO,UAAUC,SAASH,GAClDI,SAAU,IAAM,CAAC,MAAO,MAAO,UAAUD,SAASH,GAClDK,aAAc,IAAM,CAAC,MAAO,cAAcF,SAASH"}
|
package/helpers/dev-marker.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-marker.js","sources":["../../src/helpers/dev-marker.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"dev-marker.js","sources":["../../src/helpers/dev-marker.ts"],"sourcesContent":[null],"names":["getMarkerFile","root","withFile","filter","Boolean","join","createDevMarker","isProd","build","buildConf","buildRoot","path","resolve","outDir","devMarkerPath","devMarker","fs","existsSync","rmSync","mkdirSync","recursive","writeFileSync"],"mappings":"gDAIA,MAAMA,EAAgB,CAACC,EAAcC,GAAW,IAC9C,CAACD,EAAM,SAAUC,GAAY,QAAQC,OAAOC,SAASC,KAAK,KAOtDC,EAAkB,CAACC,GAAmBN,OAAMO,MAAOC,MACvD,MAAMC,EAAYC,EAAKC,QAAQX,EAAMQ,EAAUI,QACzCC,EAAgBd,EAAcU,GAAW,GACzCK,EAAYf,EAAcU,GAE3BH,EAMMS,EAAGC,WAAWF,IACvBC,EAAGE,OAAOH,IANLC,EAAGC,WAAWH,IACjBE,EAAGG,UAAUL,EAAe,CAAEM,WAAW,IAG3CJ,EAAGK,cAAcN,EAAW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-server-state.js","sources":["../../src/helpers/get-server-state.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"get-server-state.js","sources":["../../src/helpers/get-server-state.ts"],"sourcesContent":[null],"names":["getServerState","name","shouldRemove","data","window"],"mappings":"AAGA,MAAMA,EAAiB,CAA2BC,EAAcC,GAAe,KAC7E,MAAMC,EAAQC,OAA4BH,GAM1C,OAJIC,GAAgBC,UACVC,OAA4BH,GAG9BE,GAAQ,CAAA"}
|
package/helpers/html-escape.d.ts
CHANGED
package/helpers/html-escape.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const u={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},e=/[&><\u2028\u2029]/g,a=a=>a.replace(e,
|
|
1
|
+
const u={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},e=/[&><\u2028\u2029]/g,a=a=>a.replace(e,e=>u[e]);export{a as default};
|
|
2
2
|
//# sourceMappingURL=html-escape.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-escape.js","sources":["../../src/helpers/html-escape.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"html-escape.js","sources":["../../src/helpers/html-escape.ts"],"sourcesContent":[null],"names":["ESCAPE_LOOKUP","ESCAPE_REGEX","htmlEscape","str","replace","match"],"mappings":"AAAA,MAAMA,EAA6C,CACjD,IAAK,UACL,IAAK,UACL,IAAK,UACL,SAAU,UACV,SAAU,WAENC,EAAe,qBAMfC,EAAcC,GACXA,EAAIC,QAAQH,EAAeI,GAAUL,EAAcK"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { IndexRouteObject, NonIndexRouteObject } from 'react-router';
|
|
2
|
-
import { FCCRoute, FCRoute } from
|
|
3
|
-
import { TOnlyClientProp } from
|
|
4
|
-
type IDynamicRoute = () => Promise<{
|
|
1
|
+
import type { IndexRouteObject, NonIndexRouteObject } from 'react-router';
|
|
2
|
+
import type { FCCRoute, FCRoute } from '../interfaces/fc-route.js';
|
|
3
|
+
import type { TOnlyClientProp } from '../interfaces/route-object.js';
|
|
4
|
+
export type IDynamicRoute = () => Promise<{
|
|
5
5
|
default: FCRoute | FCCRoute<any>;
|
|
6
6
|
}>;
|
|
7
|
-
type ImmutableRouteKey = 'lazy' | 'caseSensitive' | 'path' | 'id' | 'index' | 'children';
|
|
8
|
-
type IAsyncRoute = {
|
|
7
|
+
export type ImmutableRouteKey = 'lazy' | 'caseSensitive' | 'path' | 'id' | 'index' | 'children';
|
|
8
|
+
export type IAsyncRoute = {
|
|
9
9
|
pathId?: string;
|
|
10
10
|
} & (Omit<IndexRouteObject, ImmutableRouteKey> | Omit<NonIndexRouteObject, ImmutableRouteKey>);
|
|
11
11
|
/**
|
|
12
12
|
* Import dynamic route
|
|
13
13
|
*/
|
|
14
14
|
declare const importRoute: (route: IDynamicRoute, onlyClient?: TOnlyClientProp) => (() => Promise<IAsyncRoute>);
|
|
15
|
-
export
|
|
15
|
+
export default importRoute;
|
package/helpers/import-route.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{isValidElement as o}from"react";import n from"../components/render-client.js";import t from"../components/with-suspense.js";import{IS_SERVER as e}from"../constants/common.js";import{keys as m}from"../interfaces/fc-route.js";const p=(p,r)=>async()=>{const s=(n=>o(n)?{element:n}:"function"!=typeof n&&"object"!=typeof n||null===n?{Component:null}:{Component:n})(r);if(r&&e)return s;const c=await p();if("Component"in c){const o=r?n(c.Component,s):c.Component;return{...c,Component:o}}const f=c.default,i={Component:f};return m.forEach(
|
|
1
|
+
import{isValidElement as o}from"react";import n from"../components/render-client.js";import t from"../components/with-suspense.js";import{IS_SERVER as e}from"../constants/common.js";import{keys as m}from"../interfaces/fc-route.js";const p=(p,r)=>async()=>{const s=(n=>o(n)?{element:n}:"function"!=typeof n&&"object"!=typeof n||null===n?{Component:null}:{Component:n})(r);if(r&&e)return s;const c=await p();if("Component"in c){const o=r?n(c.Component,s):c.Component;return{...c,Component:o}}const f=c.default,i={Component:f};return m.forEach(o=>{f[o]&&(i[o]=f[o])}),f.Suspense&&(i.Component=t(f,f.Suspense)),r&&(i.Component=n(i.Component,s)),i};export{p as default};
|
|
2
2
|
//# sourceMappingURL=import-route.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-route.js","sources":["../../src/helpers/import-route.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"import-route.js","sources":["../../src/helpers/import-route.ts"],"sourcesContent":[null],"names":["importRoute","route","onlyClient","async","Fallback","isValidElement","element","Component","getFallback","IS_SERVER","resolved","renderClient","default","result","keys","forEach","key","Suspense","withSuspense"],"mappings":"uOAqBA,MAiBMA,EAAc,CAClBC,EACAC,IAEOC,UACL,MAAMC,EAtBU,CAClBA,GAEIC,EAAeD,GACV,CAAEE,QAASF,GAGK,mBAAbA,GAA+C,iBAAbA,GAAuC,OAAbA,EAIjE,CAAEG,UAAW,MAHX,CAAEA,UAAWH,GAcHI,CAAYN,GAE7B,GAAIA,GAAcO,EAChB,OAAOL,EAGT,MAAMM,QAAiBT,IAGvB,GAAI,cAAeS,EAAU,CAC3B,MAAMH,EAAYL,EACdS,EAAaD,EAASH,UAAsCH,GAC5DM,EAASH,UAEb,MAAO,IAAKG,EAAUH,YACxB,CAEA,MAAMA,EAAYG,EAASE,QACrBC,EAAsB,CAAEN,aAiB9B,OAfAO,EAAKC,QAASC,IACRT,EAAUS,KAEZH,EAAOG,GAAOT,EAAUS,MAIxBT,EAAUU,WACZJ,EAAON,UAAYW,EAAaX,EAAWA,EAAUU,WAGnDf,IACFW,EAAON,UAAYI,EAAaE,EAAON,UAAsCH,IAGxES"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-route-file.js","sources":["../../src/helpers/is-route-file.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"is-route-file.js","sources":["../../src/helpers/is-route-file.ts"],"sourcesContent":[null],"names":["isRoutesFile","code","test"],"mappings":"AAGA,MAAMA,EAAgBC,GACpB,+FAA+FC,KAC7FD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import StreamError from
|
|
2
|
-
interface IObtainStreamErrorOut {
|
|
1
|
+
import StreamError from '../constants/stream-error.js';
|
|
2
|
+
export interface IObtainStreamErrorOut {
|
|
3
3
|
code: StreamError;
|
|
4
4
|
message: string;
|
|
5
5
|
original: unknown;
|
|
@@ -8,4 +8,4 @@ interface IObtainStreamErrorOut {
|
|
|
8
8
|
* Get react stream error
|
|
9
9
|
*/
|
|
10
10
|
declare const obtainStreamError: (err: unknown) => IObtainStreamErrorOut;
|
|
11
|
-
export
|
|
11
|
+
export default obtainStreamError;
|