create-jen-app 1.2.1 → 1.2.3
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 +3 -1
- package/dist/index.js +1 -6
- package/package.json +2 -2
- package/templates/static/.esbuild/jen.config.js +18 -0
- package/templates/static/README.md +63 -67
- package/templates/static/build.js +4 -6
- package/templates/static/jen.config.ts +3 -5
- package/templates/static/jenjs.d.ts +3 -3
- package/templates/static/lib/api/(hello).d.ts +5 -5
- package/templates/static/lib/api/(hello).js +7 -7
- package/templates/static/lib/auth/cookie-utils.d.ts +20 -11
- package/templates/static/lib/auth/cookie-utils.js +66 -69
- package/templates/static/lib/auth/jwt.d.ts +28 -0
- package/templates/static/lib/auth/jwt.js +50 -6
- package/templates/static/lib/auth/session.d.ts +34 -34
- package/templates/static/lib/auth/session.js +79 -81
- package/templates/static/lib/build/asset-hashing.js +4 -4
- package/templates/static/lib/build/asset-manifest.js +4 -4
- package/templates/static/lib/build/build.d.ts +20 -0
- package/templates/static/lib/build/build.js +43 -6
- package/templates/static/lib/build/island-hydration.js +2 -2
- package/templates/static/lib/build/minifier.js +12 -12
- package/templates/static/lib/build/page-renderer.d.ts +2 -2
- package/templates/static/lib/build/page-renderer.js +3 -3
- package/templates/static/lib/build/production-build.d.ts +1 -1
- package/templates/static/lib/build/production-build.js +4 -4
- package/templates/static/lib/build/ssg-pipeline.d.ts +1 -1
- package/templates/static/lib/build/ssg-pipeline.js +19 -19
- package/templates/static/lib/build-tools/build-site.d.ts +3 -3
- package/templates/static/lib/build-tools/build-site.js +27 -30
- package/templates/static/lib/cache/index.d.ts +8 -0
- package/templates/static/lib/cache/index.js +8 -0
- package/templates/static/lib/cache/memory.d.ts +31 -4
- package/templates/static/lib/cache/memory.js +38 -12
- package/templates/static/lib/cache/redis.d.ts +43 -4
- package/templates/static/lib/cache/redis.js +59 -14
- package/templates/static/lib/cli/banner.d.ts +5 -1
- package/templates/static/lib/cli/banner.js +18 -14
- package/templates/static/lib/cli/templates/ssg/jen.config.js +29 -29
- package/templates/static/lib/cli/templates/ssg/site/index.js +6 -1
- package/templates/static/lib/cli/templates/ssr/jen.config.js +29 -29
- package/templates/static/lib/cli/templates/ssr/site/index.js +6 -1
- package/templates/static/lib/compilers/esbuild-plugins.js +96 -98
- package/templates/static/lib/compilers/svelte.d.ts +10 -10
- package/templates/static/lib/compilers/svelte.js +31 -31
- package/templates/static/lib/compilers/vue.d.ts +8 -8
- package/templates/static/lib/compilers/vue.js +76 -68
- package/templates/static/lib/core/config.d.ts +217 -50
- package/templates/static/lib/core/http.d.ts +55 -2
- package/templates/static/lib/core/http.js +66 -20
- package/templates/static/lib/core/middleware-hooks.d.ts +204 -31
- package/templates/static/lib/core/middleware-hooks.js +86 -41
- package/templates/static/lib/core/paths.d.ts +42 -4
- package/templates/static/lib/core/paths.js +34 -2
- package/templates/static/lib/core/routes/match.d.ts +51 -3
- package/templates/static/lib/core/routes/match.js +44 -11
- package/templates/static/lib/core/routes/scan.d.ts +49 -5
- package/templates/static/lib/core/routes/scan.js +174 -115
- package/templates/static/lib/core/types.d.ts +148 -13
- package/templates/static/lib/css/compiler.d.ts +16 -13
- package/templates/static/lib/css/compiler.js +62 -58
- package/templates/static/lib/db/connector.d.ts +27 -1
- package/templates/static/lib/db/connector.js +37 -11
- package/templates/static/lib/db/drivers/jdb.d.ts +13 -9
- package/templates/static/lib/db/drivers/jdb.js +41 -39
- package/templates/static/lib/db/drivers/sql.d.ts +16 -12
- package/templates/static/lib/db/drivers/sql.js +152 -135
- package/templates/static/lib/db/index.d.ts +20 -12
- package/templates/static/lib/db/index.js +41 -41
- package/templates/static/lib/db/types.d.ts +22 -18
- package/templates/static/lib/graphql/index.d.ts +47 -0
- package/templates/static/lib/graphql/index.js +50 -3
- package/templates/static/lib/graphql/resolvers.d.ts +51 -11
- package/templates/static/lib/graphql/resolvers.js +22 -6
- package/templates/static/lib/graphql/schema.d.ts +34 -0
- package/templates/static/lib/graphql/schema.js +34 -2
- package/templates/static/lib/i18n/en.json +2 -2
- package/templates/static/lib/i18n/es.json +2 -2
- package/templates/static/lib/i18n/index.d.ts +4 -4
- package/templates/static/lib/i18n/index.js +10 -10
- package/templates/static/lib/import/jen-import.d.ts +39 -10
- package/templates/static/lib/import/jen-import.js +130 -80
- package/templates/static/lib/index.d.ts +42 -11
- package/templates/static/lib/index.js +21 -8
- package/templates/static/lib/jdb/engine.d.ts +35 -6
- package/templates/static/lib/jdb/engine.js +260 -144
- package/templates/static/lib/jdb/index.d.ts +32 -0
- package/templates/static/lib/jdb/index.js +32 -0
- package/templates/static/lib/jdb/types.d.ts +212 -30
- package/templates/static/lib/jdb/utils.d.ts +60 -0
- package/templates/static/lib/jdb/utils.js +159 -107
- package/templates/static/lib/middleware/builtins/body-parser.d.ts +15 -0
- package/templates/static/lib/middleware/builtins/body-parser.js +53 -35
- package/templates/static/lib/middleware/builtins/cors.d.ts +8 -6
- package/templates/static/lib/middleware/builtins/cors.js +52 -48
- package/templates/static/lib/middleware/builtins/logger.d.ts +18 -0
- package/templates/static/lib/middleware/builtins/logger.js +31 -13
- package/templates/static/lib/middleware/builtins/rate-limit.d.ts +19 -2
- package/templates/static/lib/middleware/builtins/rate-limit.js +75 -55
- package/templates/static/lib/middleware/builtins/request-id.d.ts +18 -0
- package/templates/static/lib/middleware/builtins/request-id.js +26 -5
- package/templates/static/lib/middleware/builtins/security-headers.d.ts +18 -0
- package/templates/static/lib/middleware/builtins/security-headers.js +51 -20
- package/templates/static/lib/middleware/context.d.ts +102 -15
- package/templates/static/lib/middleware/context.js +121 -30
- package/templates/static/lib/middleware/decorators.d.ts +18 -1
- package/templates/static/lib/middleware/decorators.js +83 -34
- package/templates/static/lib/middleware/errors/handler.js +22 -24
- package/templates/static/lib/middleware/errors/http-error.d.ts +3 -3
- package/templates/static/lib/middleware/errors/http-error.js +8 -8
- package/templates/static/lib/middleware/kernel.d.ts +67 -4
- package/templates/static/lib/middleware/kernel.js +80 -17
- package/templates/static/lib/middleware/pipeline.d.ts +51 -2
- package/templates/static/lib/middleware/pipeline.js +143 -45
- package/templates/static/lib/middleware/registry.d.ts +67 -8
- package/templates/static/lib/middleware/registry.js +83 -22
- package/templates/static/lib/middleware/response.d.ts +73 -11
- package/templates/static/lib/middleware/response.js +104 -40
- package/templates/static/lib/middleware/utils/matcher.js +11 -12
- package/templates/static/lib/native/bundle.d.ts +13 -8
- package/templates/static/lib/native/bundle.js +14 -14
- package/templates/static/lib/native/dev-server.d.ts +11 -4
- package/templates/static/lib/native/dev-server.js +14 -12
- package/templates/static/lib/native/index.d.ts +20 -20
- package/templates/static/lib/native/index.js +23 -21
- package/templates/static/lib/native/optimizer.d.ts +14 -10
- package/templates/static/lib/native/optimizer.js +14 -14
- package/templates/static/lib/native/style-compiler.d.ts +17 -8
- package/templates/static/lib/native/style-compiler.js +9 -9
- package/templates/static/lib/plugin/loader.d.ts +8 -6
- package/templates/static/lib/plugin/loader.js +25 -31
- package/templates/static/lib/runtime/client-runtime.d.ts +15 -0
- package/templates/static/lib/runtime/client-runtime.js +23 -9
- package/templates/static/lib/runtime/hmr.d.ts +23 -1
- package/templates/static/lib/runtime/hmr.js +27 -5
- package/templates/static/lib/runtime/hydrate.d.ts +17 -0
- package/templates/static/lib/runtime/hydrate.js +48 -21
- package/templates/static/lib/runtime/island-hydration-client.d.ts +5 -2
- package/templates/static/lib/runtime/island-hydration-client.js +122 -91
- package/templates/static/lib/runtime/islands.d.ts +82 -27
- package/templates/static/lib/runtime/islands.js +92 -54
- package/templates/static/lib/runtime/render.d.ts +36 -9
- package/templates/static/lib/runtime/render.js +208 -130
- package/templates/static/lib/server/api-routes.d.ts +96 -28
- package/templates/static/lib/server/api-routes.js +214 -156
- package/templates/static/lib/server/api.d.ts +3 -3
- package/templates/static/lib/server/api.js +93 -92
- package/templates/static/lib/server/app.d.ts +37 -3
- package/templates/static/lib/server/app.js +328 -254
- package/templates/static/lib/server/runtimeServe.d.ts +56 -0
- package/templates/static/lib/server/runtimeServe.js +130 -69
- package/templates/static/lib/server/ssr.d.ts +161 -0
- package/templates/static/lib/server/ssr.js +219 -0
- package/templates/static/lib/shared/log.d.ts +47 -3
- package/templates/static/lib/shared/log.js +60 -10
- package/templates/static/package.json +5 -1
- package/templates/static/server.js +4 -6
- package/templates/static/site/(home).tsx +30 -12
- package/templates/static/site/styles/global.scss +89 -78
- package/templates/static/tsconfig.json +39 -39
- package/templates/static/node_modules/.bin/esbuild +0 -16
- package/templates/static/node_modules/.bin/esbuild.cmd +0 -17
- package/templates/static/node_modules/.bin/esbuild.ps1 +0 -28
- package/templates/static/node_modules/.bin/tsc +0 -16
- package/templates/static/node_modules/.bin/tsc.cmd +0 -17
- package/templates/static/node_modules/.bin/tsc.ps1 +0 -28
- package/templates/static/node_modules/.bin/tsserver +0 -16
- package/templates/static/node_modules/.bin/tsserver.cmd +0 -17
- package/templates/static/node_modules/.bin/tsserver.ps1 +0 -28
- package/templates/static/node_modules/.jen/cache/B__Jen.js_packages_create-jen-app_templates_static_site_(home).tsx.mjs +0 -14
- package/templates/static/node_modules/.jen/cache/B__Jen.js_packages_create-jen-app_yo_site_(home).tsx.mjs +0 -11
- package/templates/static/node_modules/.package-lock.json +0 -585
- package/templates/static/node_modules/@esbuild/win32-x64/README.md +0 -3
- package/templates/static/node_modules/@esbuild/win32-x64/esbuild.exe +0 -0
- package/templates/static/node_modules/@esbuild/win32-x64/package.json +0 -20
- package/templates/static/node_modules/@jenjs/master/README.md +0 -24
- package/templates/static/node_modules/@jenjs/master/index.js +0 -3655
- package/templates/static/node_modules/@jenjs/master/package.json +0 -36
- package/templates/static/node_modules/@polka/url/build.js +0 -49
- package/templates/static/node_modules/@polka/url/build.mjs +0 -47
- package/templates/static/node_modules/@polka/url/index.d.ts +0 -11
- package/templates/static/node_modules/@polka/url/package.json +0 -30
- package/templates/static/node_modules/@polka/url/readme.md +0 -68
- package/templates/static/node_modules/@types/node/LICENSE +0 -21
- package/templates/static/node_modules/@types/node/README.md +0 -15
- package/templates/static/node_modules/@types/node/assert/strict.d.ts +0 -111
- package/templates/static/node_modules/@types/node/assert.d.ts +0 -1078
- package/templates/static/node_modules/@types/node/async_hooks.d.ts +0 -603
- package/templates/static/node_modules/@types/node/buffer.buffer.d.ts +0 -472
- package/templates/static/node_modules/@types/node/buffer.d.ts +0 -1934
- package/templates/static/node_modules/@types/node/child_process.d.ts +0 -1476
- package/templates/static/node_modules/@types/node/cluster.d.ts +0 -578
- package/templates/static/node_modules/@types/node/compatibility/disposable.d.ts +0 -14
- package/templates/static/node_modules/@types/node/compatibility/index.d.ts +0 -9
- package/templates/static/node_modules/@types/node/compatibility/indexable.d.ts +0 -20
- package/templates/static/node_modules/@types/node/compatibility/iterators.d.ts +0 -20
- package/templates/static/node_modules/@types/node/console.d.ts +0 -452
- package/templates/static/node_modules/@types/node/constants.d.ts +0 -21
- package/templates/static/node_modules/@types/node/crypto.d.ts +0 -4545
- package/templates/static/node_modules/@types/node/dgram.d.ts +0 -600
- package/templates/static/node_modules/@types/node/diagnostics_channel.d.ts +0 -578
- package/templates/static/node_modules/@types/node/dns/promises.d.ts +0 -503
- package/templates/static/node_modules/@types/node/dns.d.ts +0 -923
- package/templates/static/node_modules/@types/node/domain.d.ts +0 -170
- package/templates/static/node_modules/@types/node/events.d.ts +0 -976
- package/templates/static/node_modules/@types/node/fs/promises.d.ts +0 -1295
- package/templates/static/node_modules/@types/node/fs.d.ts +0 -4461
- package/templates/static/node_modules/@types/node/globals.d.ts +0 -172
- package/templates/static/node_modules/@types/node/globals.typedarray.d.ts +0 -38
- package/templates/static/node_modules/@types/node/http.d.ts +0 -2089
- package/templates/static/node_modules/@types/node/http2.d.ts +0 -2644
- package/templates/static/node_modules/@types/node/https.d.ts +0 -579
- package/templates/static/node_modules/@types/node/index.d.ts +0 -97
- package/templates/static/node_modules/@types/node/inspector.d.ts +0 -253
- package/templates/static/node_modules/@types/node/inspector.generated.d.ts +0 -4052
- package/templates/static/node_modules/@types/node/module.d.ts +0 -891
- package/templates/static/node_modules/@types/node/net.d.ts +0 -1057
- package/templates/static/node_modules/@types/node/os.d.ts +0 -506
- package/templates/static/node_modules/@types/node/package.json +0 -145
- package/templates/static/node_modules/@types/node/path.d.ts +0 -200
- package/templates/static/node_modules/@types/node/perf_hooks.d.ts +0 -968
- package/templates/static/node_modules/@types/node/process.d.ts +0 -2089
- package/templates/static/node_modules/@types/node/punycode.d.ts +0 -117
- package/templates/static/node_modules/@types/node/querystring.d.ts +0 -152
- package/templates/static/node_modules/@types/node/readline/promises.d.ts +0 -161
- package/templates/static/node_modules/@types/node/readline.d.ts +0 -594
- package/templates/static/node_modules/@types/node/repl.d.ts +0 -428
- package/templates/static/node_modules/@types/node/sea.d.ts +0 -153
- package/templates/static/node_modules/@types/node/sqlite.d.ts +0 -721
- package/templates/static/node_modules/@types/node/stream/consumers.d.ts +0 -38
- package/templates/static/node_modules/@types/node/stream/promises.d.ts +0 -90
- package/templates/static/node_modules/@types/node/stream/web.d.ts +0 -622
- package/templates/static/node_modules/@types/node/stream.d.ts +0 -1664
- package/templates/static/node_modules/@types/node/string_decoder.d.ts +0 -67
- package/templates/static/node_modules/@types/node/test.d.ts +0 -2163
- package/templates/static/node_modules/@types/node/timers/promises.d.ts +0 -108
- package/templates/static/node_modules/@types/node/timers.d.ts +0 -287
- package/templates/static/node_modules/@types/node/tls.d.ts +0 -1319
- package/templates/static/node_modules/@types/node/trace_events.d.ts +0 -197
- package/templates/static/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -468
- package/templates/static/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -34
- package/templates/static/node_modules/@types/node/ts5.6/index.d.ts +0 -97
- package/templates/static/node_modules/@types/node/tty.d.ts +0 -208
- package/templates/static/node_modules/@types/node/url.d.ts +0 -984
- package/templates/static/node_modules/@types/node/util.d.ts +0 -2606
- package/templates/static/node_modules/@types/node/v8.d.ts +0 -920
- package/templates/static/node_modules/@types/node/vm.d.ts +0 -1000
- package/templates/static/node_modules/@types/node/wasi.d.ts +0 -181
- package/templates/static/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -34
- package/templates/static/node_modules/@types/node/web-globals/domexception.d.ts +0 -68
- package/templates/static/node_modules/@types/node/web-globals/events.d.ts +0 -97
- package/templates/static/node_modules/@types/node/web-globals/fetch.d.ts +0 -55
- package/templates/static/node_modules/@types/node/web-globals/navigator.d.ts +0 -22
- package/templates/static/node_modules/@types/node/web-globals/storage.d.ts +0 -24
- package/templates/static/node_modules/@types/node/worker_threads.d.ts +0 -784
- package/templates/static/node_modules/@types/node/zlib.d.ts +0 -683
- package/templates/static/node_modules/esbuild/LICENSE.md +0 -21
- package/templates/static/node_modules/esbuild/README.md +0 -3
- package/templates/static/node_modules/esbuild/bin/esbuild +0 -223
- package/templates/static/node_modules/esbuild/install.js +0 -289
- package/templates/static/node_modules/esbuild/lib/main.d.ts +0 -716
- package/templates/static/node_modules/esbuild/lib/main.js +0 -2242
- package/templates/static/node_modules/esbuild/package.json +0 -49
- package/templates/static/node_modules/mrmime/index.d.ts +0 -2
- package/templates/static/node_modules/mrmime/index.js +0 -449
- package/templates/static/node_modules/mrmime/index.mjs +0 -448
- package/templates/static/node_modules/mrmime/license +0 -21
- package/templates/static/node_modules/mrmime/package.json +0 -44
- package/templates/static/node_modules/mrmime/readme.md +0 -130
- package/templates/static/node_modules/preact/LICENSE +0 -21
- package/templates/static/node_modules/preact/README.md +0 -185
- package/templates/static/node_modules/preact/compat/client.d.ts +0 -13
- package/templates/static/node_modules/preact/compat/client.js +0 -21
- package/templates/static/node_modules/preact/compat/client.mjs +0 -24
- package/templates/static/node_modules/preact/compat/dist/compat.js +0 -2
- package/templates/static/node_modules/preact/compat/dist/compat.js.map +0 -1
- package/templates/static/node_modules/preact/compat/dist/compat.mjs +0 -2
- package/templates/static/node_modules/preact/compat/dist/compat.module.js +0 -2
- package/templates/static/node_modules/preact/compat/dist/compat.module.js.map +0 -1
- package/templates/static/node_modules/preact/compat/dist/compat.umd.js +0 -2
- package/templates/static/node_modules/preact/compat/dist/compat.umd.js.map +0 -1
- package/templates/static/node_modules/preact/compat/jsx-dev-runtime.js +0 -3
- package/templates/static/node_modules/preact/compat/jsx-dev-runtime.mjs +0 -3
- package/templates/static/node_modules/preact/compat/jsx-runtime.js +0 -3
- package/templates/static/node_modules/preact/compat/jsx-runtime.mjs +0 -3
- package/templates/static/node_modules/preact/compat/package.json +0 -55
- package/templates/static/node_modules/preact/compat/scheduler.js +0 -15
- package/templates/static/node_modules/preact/compat/scheduler.mjs +0 -23
- package/templates/static/node_modules/preact/compat/server.browser.js +0 -11
- package/templates/static/node_modules/preact/compat/server.js +0 -36
- package/templates/static/node_modules/preact/compat/server.mjs +0 -17
- package/templates/static/node_modules/preact/compat/src/Children.js +0 -21
- package/templates/static/node_modules/preact/compat/src/PureComponent.js +0 -16
- package/templates/static/node_modules/preact/compat/src/forwardRef.js +0 -44
- package/templates/static/node_modules/preact/compat/src/hooks.js +0 -70
- package/templates/static/node_modules/preact/compat/src/index.d.ts +0 -351
- package/templates/static/node_modules/preact/compat/src/index.js +0 -238
- package/templates/static/node_modules/preact/compat/src/internal.d.ts +0 -48
- package/templates/static/node_modules/preact/compat/src/memo.js +0 -35
- package/templates/static/node_modules/preact/compat/src/portals.js +0 -78
- package/templates/static/node_modules/preact/compat/src/render.js +0 -313
- package/templates/static/node_modules/preact/compat/src/suspense-list.d.ts +0 -16
- package/templates/static/node_modules/preact/compat/src/suspense-list.js +0 -127
- package/templates/static/node_modules/preact/compat/src/suspense.d.ts +0 -19
- package/templates/static/node_modules/preact/compat/src/suspense.js +0 -291
- package/templates/static/node_modules/preact/compat/src/util.js +0 -33
- package/templates/static/node_modules/preact/compat/test-utils.js +0 -1
- package/templates/static/node_modules/preact/compat/test-utils.mjs +0 -1
- package/templates/static/node_modules/preact/debug/dist/debug.js +0 -2
- package/templates/static/node_modules/preact/debug/dist/debug.js.map +0 -1
- package/templates/static/node_modules/preact/debug/dist/debug.mjs +0 -2
- package/templates/static/node_modules/preact/debug/dist/debug.module.js +0 -2
- package/templates/static/node_modules/preact/debug/dist/debug.module.js.map +0 -1
- package/templates/static/node_modules/preact/debug/dist/debug.umd.js +0 -2
- package/templates/static/node_modules/preact/debug/dist/debug.umd.js.map +0 -1
- package/templates/static/node_modules/preact/debug/package.json +0 -27
- package/templates/static/node_modules/preact/debug/src/check-props.js +0 -54
- package/templates/static/node_modules/preact/debug/src/component-stack.js +0 -146
- package/templates/static/node_modules/preact/debug/src/constants.js +0 -3
- package/templates/static/node_modules/preact/debug/src/debug.js +0 -593
- package/templates/static/node_modules/preact/debug/src/index.d.ts +0 -23
- package/templates/static/node_modules/preact/debug/src/index.js +0 -12
- package/templates/static/node_modules/preact/debug/src/internal.d.ts +0 -82
- package/templates/static/node_modules/preact/debug/src/util.js +0 -15
- package/templates/static/node_modules/preact/devtools/dist/devtools.js +0 -2
- package/templates/static/node_modules/preact/devtools/dist/devtools.js.map +0 -1
- package/templates/static/node_modules/preact/devtools/dist/devtools.mjs +0 -2
- package/templates/static/node_modules/preact/devtools/dist/devtools.module.js +0 -2
- package/templates/static/node_modules/preact/devtools/dist/devtools.module.js.map +0 -1
- package/templates/static/node_modules/preact/devtools/dist/devtools.umd.js +0 -2
- package/templates/static/node_modules/preact/devtools/dist/devtools.umd.js.map +0 -1
- package/templates/static/node_modules/preact/devtools/package.json +0 -25
- package/templates/static/node_modules/preact/devtools/src/devtools.js +0 -21
- package/templates/static/node_modules/preact/devtools/src/index.d.ts +0 -8
- package/templates/static/node_modules/preact/devtools/src/index.js +0 -15
- package/templates/static/node_modules/preact/dist/preact.js +0 -2
- package/templates/static/node_modules/preact/dist/preact.js.map +0 -1
- package/templates/static/node_modules/preact/dist/preact.min.js +0 -2
- package/templates/static/node_modules/preact/dist/preact.min.js.map +0 -1
- package/templates/static/node_modules/preact/dist/preact.min.module.js +0 -2
- package/templates/static/node_modules/preact/dist/preact.min.module.js.map +0 -1
- package/templates/static/node_modules/preact/dist/preact.min.umd.js +0 -2
- package/templates/static/node_modules/preact/dist/preact.min.umd.js.map +0 -1
- package/templates/static/node_modules/preact/dist/preact.mjs +0 -2
- package/templates/static/node_modules/preact/dist/preact.module.js +0 -2
- package/templates/static/node_modules/preact/dist/preact.module.js.map +0 -1
- package/templates/static/node_modules/preact/dist/preact.umd.js +0 -2
- package/templates/static/node_modules/preact/dist/preact.umd.js.map +0 -1
- package/templates/static/node_modules/preact/hooks/dist/hooks.js +0 -2
- package/templates/static/node_modules/preact/hooks/dist/hooks.js.map +0 -1
- package/templates/static/node_modules/preact/hooks/dist/hooks.mjs +0 -2
- package/templates/static/node_modules/preact/hooks/dist/hooks.module.js +0 -2
- package/templates/static/node_modules/preact/hooks/dist/hooks.module.js.map +0 -1
- package/templates/static/node_modules/preact/hooks/dist/hooks.umd.js +0 -2
- package/templates/static/node_modules/preact/hooks/dist/hooks.umd.js.map +0 -1
- package/templates/static/node_modules/preact/hooks/package.json +0 -35
- package/templates/static/node_modules/preact/hooks/src/index.d.ts +0 -145
- package/templates/static/node_modules/preact/hooks/src/index.js +0 -555
- package/templates/static/node_modules/preact/hooks/src/internal.d.ts +0 -103
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.js +0 -2
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.js.map +0 -1
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.mjs +0 -2
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js +0 -2
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js.map +0 -1
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.umd.js +0 -2
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.umd.js.map +0 -1
- package/templates/static/node_modules/preact/jsx-runtime/package.json +0 -28
- package/templates/static/node_modules/preact/jsx-runtime/src/index.d.ts +0 -62
- package/templates/static/node_modules/preact/jsx-runtime/src/index.js +0 -206
- package/templates/static/node_modules/preact/jsx-runtime/src/utils.js +0 -36
- package/templates/static/node_modules/preact/package.json +0 -258
- package/templates/static/node_modules/preact/src/cjs.js +0 -3
- package/templates/static/node_modules/preact/src/clone-element.js +0 -48
- package/templates/static/node_modules/preact/src/component.js +0 -249
- package/templates/static/node_modules/preact/src/constants.js +0 -22
- package/templates/static/node_modules/preact/src/create-context.js +0 -60
- package/templates/static/node_modules/preact/src/create-element.js +0 -97
- package/templates/static/node_modules/preact/src/diff/catch-error.js +0 -46
- package/templates/static/node_modules/preact/src/diff/children.js +0 -451
- package/templates/static/node_modules/preact/src/diff/index.js +0 -684
- package/templates/static/node_modules/preact/src/diff/props.js +0 -173
- package/templates/static/node_modules/preact/src/dom.d.ts +0 -2476
- package/templates/static/node_modules/preact/src/index-5.d.ts +0 -399
- package/templates/static/node_modules/preact/src/index.d.ts +0 -402
- package/templates/static/node_modules/preact/src/index.js +0 -13
- package/templates/static/node_modules/preact/src/internal.d.ts +0 -190
- package/templates/static/node_modules/preact/src/jsx.d.ts +0 -2878
- package/templates/static/node_modules/preact/src/options.js +0 -16
- package/templates/static/node_modules/preact/src/render.js +0 -78
- package/templates/static/node_modules/preact/src/util.js +0 -28
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.js +0 -2
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.js.map +0 -1
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.mjs +0 -2
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.module.js +0 -2
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.module.js.map +0 -1
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.umd.js +0 -2
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.umd.js.map +0 -1
- package/templates/static/node_modules/preact/test-utils/package.json +0 -28
- package/templates/static/node_modules/preact/test-utils/src/index.d.ts +0 -3
- package/templates/static/node_modules/preact/test-utils/src/index.js +0 -129
- package/templates/static/node_modules/preact-render-to-string/LICENSE +0 -21
- package/templates/static/node_modules/preact-render-to-string/README.md +0 -149
- package/templates/static/node_modules/preact-render-to-string/dist/commonjs.js +0 -2
- package/templates/static/node_modules/preact-render-to-string/dist/index.d.ts +0 -17
- package/templates/static/node_modules/preact-render-to-string/dist/index.js +0 -6
- package/templates/static/node_modules/preact-render-to-string/dist/index.js.map +0 -1
- package/templates/static/node_modules/preact-render-to-string/dist/index.mjs +0 -2
- package/templates/static/node_modules/preact-render-to-string/dist/index.module.js +0 -2
- package/templates/static/node_modules/preact-render-to-string/dist/index.module.js.map +0 -1
- package/templates/static/node_modules/preact-render-to-string/dist/index.umd.js +0 -2
- package/templates/static/node_modules/preact-render-to-string/dist/index.umd.js.map +0 -1
- package/templates/static/node_modules/preact-render-to-string/dist/internal.d.ts +0 -35
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/commonjs.js +0 -2
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.js +0 -4
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.js.map +0 -1
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.mjs +0 -2
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.module.js +0 -2
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.module.js.map +0 -1
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.umd.js +0 -2
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.umd.js.map +0 -1
- package/templates/static/node_modules/preact-render-to-string/dist/jsx.d.ts +0 -24
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.js +0 -2
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.js.map +0 -1
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.mjs +0 -2
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.module.js +0 -2
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.module.js.map +0 -1
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.umd.js +0 -2
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.umd.js.map +0 -1
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.js +0 -884
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.js.map +0 -1
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.mjs +0 -884
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.module.js +0 -884
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.module.js.map +0 -1
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.umd.js +0 -888
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.umd.js.map +0 -1
- package/templates/static/node_modules/preact-render-to-string/dist/stream-node.d.ts +0 -19
- package/templates/static/node_modules/preact-render-to-string/dist/stream.d.ts +0 -10
- package/templates/static/node_modules/preact-render-to-string/jsx.d.ts +0 -24
- package/templates/static/node_modules/preact-render-to-string/jsx.js +0 -1
- package/templates/static/node_modules/preact-render-to-string/package.json +0 -152
- package/templates/static/node_modules/preact-render-to-string/src/index.d.ts +0 -17
- package/templates/static/node_modules/preact-render-to-string/src/index.js +0 -764
- package/templates/static/node_modules/preact-render-to-string/src/internal.d.ts +0 -35
- package/templates/static/node_modules/preact-render-to-string/src/jsx.d.ts +0 -24
- package/templates/static/node_modules/preact-render-to-string/src/jsx.js +0 -102
- package/templates/static/node_modules/preact-render-to-string/src/lib/chunked.js +0 -97
- package/templates/static/node_modules/preact-render-to-string/src/lib/client.js +0 -62
- package/templates/static/node_modules/preact-render-to-string/src/lib/constants.js +0 -20
- package/templates/static/node_modules/preact-render-to-string/src/lib/polyfills.js +0 -8
- package/templates/static/node_modules/preact-render-to-string/src/lib/util.js +0 -208
- package/templates/static/node_modules/preact-render-to-string/src/pretty.js +0 -491
- package/templates/static/node_modules/preact-render-to-string/src/stream-node.d.ts +0 -19
- package/templates/static/node_modules/preact-render-to-string/src/stream-node.js +0 -84
- package/templates/static/node_modules/preact-render-to-string/src/stream.d.ts +0 -10
- package/templates/static/node_modules/preact-render-to-string/src/stream.js +0 -43
- package/templates/static/node_modules/preact-render-to-string/typings.json +0 -5
- package/templates/static/node_modules/sirv/build.js +0 -197
- package/templates/static/node_modules/sirv/build.mjs +0 -197
- package/templates/static/node_modules/sirv/index.d.mts +0 -29
- package/templates/static/node_modules/sirv/index.d.ts +0 -33
- package/templates/static/node_modules/sirv/package.json +0 -40
- package/templates/static/node_modules/sirv/readme.md +0 -238
- package/templates/static/node_modules/totalist/dist/index.js +0 -24
- package/templates/static/node_modules/totalist/dist/index.mjs +0 -22
- package/templates/static/node_modules/totalist/index.d.ts +0 -3
- package/templates/static/node_modules/totalist/license +0 -21
- package/templates/static/node_modules/totalist/package.json +0 -55
- package/templates/static/node_modules/totalist/readme.md +0 -109
- package/templates/static/node_modules/totalist/sync/index.d.ts +0 -3
- package/templates/static/node_modules/totalist/sync/index.js +0 -17
- package/templates/static/node_modules/totalist/sync/index.mjs +0 -15
- package/templates/static/node_modules/typescript/bin/tsc +0 -2
- package/templates/static/node_modules/typescript/bin/tsserver +0 -2
- package/templates/static/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -2122
- package/templates/static/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -2122
- package/templates/static/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -2122
- package/templates/static/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -2122
- package/templates/static/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -2122
- package/templates/static/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -2122
- package/templates/static/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -2122
- package/templates/static/node_modules/typescript/lib/lib.d.ts +0 -22
- package/templates/static/node_modules/typescript/lib/lib.decorators.d.ts +0 -384
- package/templates/static/node_modules/typescript/lib/lib.decorators.legacy.d.ts +0 -22
- package/templates/static/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +0 -41
- package/templates/static/node_modules/typescript/lib/lib.dom.d.ts +0 -39429
- package/templates/static/node_modules/typescript/lib/lib.dom.iterable.d.ts +0 -571
- package/templates/static/node_modules/typescript/lib/lib.es2015.collection.d.ts +0 -147
- package/templates/static/node_modules/typescript/lib/lib.es2015.core.d.ts +0 -597
- package/templates/static/node_modules/typescript/lib/lib.es2015.d.ts +0 -28
- package/templates/static/node_modules/typescript/lib/lib.es2015.generator.d.ts +0 -77
- package/templates/static/node_modules/typescript/lib/lib.es2015.iterable.d.ts +0 -605
- package/templates/static/node_modules/typescript/lib/lib.es2015.promise.d.ts +0 -81
- package/templates/static/node_modules/typescript/lib/lib.es2015.proxy.d.ts +0 -128
- package/templates/static/node_modules/typescript/lib/lib.es2015.reflect.d.ts +0 -144
- package/templates/static/node_modules/typescript/lib/lib.es2015.symbol.d.ts +0 -46
- package/templates/static/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -326
- package/templates/static/node_modules/typescript/lib/lib.es2016.array.include.d.ts +0 -116
- package/templates/static/node_modules/typescript/lib/lib.es2016.d.ts +0 -21
- package/templates/static/node_modules/typescript/lib/lib.es2016.full.d.ts +0 -23
- package/templates/static/node_modules/typescript/lib/lib.es2016.intl.d.ts +0 -31
- package/templates/static/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +0 -21
- package/templates/static/node_modules/typescript/lib/lib.es2017.d.ts +0 -26
- package/templates/static/node_modules/typescript/lib/lib.es2017.date.d.ts +0 -31
- package/templates/static/node_modules/typescript/lib/lib.es2017.full.d.ts +0 -23
- package/templates/static/node_modules/typescript/lib/lib.es2017.intl.d.ts +0 -44
- package/templates/static/node_modules/typescript/lib/lib.es2017.object.d.ts +0 -49
- package/templates/static/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +0 -135
- package/templates/static/node_modules/typescript/lib/lib.es2017.string.d.ts +0 -45
- package/templates/static/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +0 -53
- package/templates/static/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -77
- package/templates/static/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +0 -53
- package/templates/static/node_modules/typescript/lib/lib.es2018.d.ts +0 -24
- package/templates/static/node_modules/typescript/lib/lib.es2018.full.d.ts +0 -24
- package/templates/static/node_modules/typescript/lib/lib.es2018.intl.d.ts +0 -83
- package/templates/static/node_modules/typescript/lib/lib.es2018.promise.d.ts +0 -30
- package/templates/static/node_modules/typescript/lib/lib.es2018.regexp.d.ts +0 -37
- package/templates/static/node_modules/typescript/lib/lib.es2019.array.d.ts +0 -79
- package/templates/static/node_modules/typescript/lib/lib.es2019.d.ts +0 -24
- package/templates/static/node_modules/typescript/lib/lib.es2019.full.d.ts +0 -24
- package/templates/static/node_modules/typescript/lib/lib.es2019.intl.d.ts +0 -23
- package/templates/static/node_modules/typescript/lib/lib.es2019.object.d.ts +0 -33
- package/templates/static/node_modules/typescript/lib/lib.es2019.string.d.ts +0 -37
- package/templates/static/node_modules/typescript/lib/lib.es2019.symbol.d.ts +0 -24
- package/templates/static/node_modules/typescript/lib/lib.es2020.bigint.d.ts +0 -765
- package/templates/static/node_modules/typescript/lib/lib.es2020.d.ts +0 -27
- package/templates/static/node_modules/typescript/lib/lib.es2020.date.d.ts +0 -42
- package/templates/static/node_modules/typescript/lib/lib.es2020.full.d.ts +0 -24
- package/templates/static/node_modules/typescript/lib/lib.es2020.intl.d.ts +0 -474
- package/templates/static/node_modules/typescript/lib/lib.es2020.number.d.ts +0 -28
- package/templates/static/node_modules/typescript/lib/lib.es2020.promise.d.ts +0 -47
- package/templates/static/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +0 -99
- package/templates/static/node_modules/typescript/lib/lib.es2020.string.d.ts +0 -44
- package/templates/static/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -41
- package/templates/static/node_modules/typescript/lib/lib.es2021.d.ts +0 -23
- package/templates/static/node_modules/typescript/lib/lib.es2021.full.d.ts +0 -24
- package/templates/static/node_modules/typescript/lib/lib.es2021.intl.d.ts +0 -166
- package/templates/static/node_modules/typescript/lib/lib.es2021.promise.d.ts +0 -48
- package/templates/static/node_modules/typescript/lib/lib.es2021.string.d.ts +0 -33
- package/templates/static/node_modules/typescript/lib/lib.es2021.weakref.d.ts +0 -78
- package/templates/static/node_modules/typescript/lib/lib.es2022.array.d.ts +0 -121
- package/templates/static/node_modules/typescript/lib/lib.es2022.d.ts +0 -25
- package/templates/static/node_modules/typescript/lib/lib.es2022.error.d.ts +0 -75
- package/templates/static/node_modules/typescript/lib/lib.es2022.full.d.ts +0 -24
- package/templates/static/node_modules/typescript/lib/lib.es2022.intl.d.ts +0 -145
- package/templates/static/node_modules/typescript/lib/lib.es2022.object.d.ts +0 -26
- package/templates/static/node_modules/typescript/lib/lib.es2022.regexp.d.ts +0 -39
- package/templates/static/node_modules/typescript/lib/lib.es2022.string.d.ts +0 -25
- package/templates/static/node_modules/typescript/lib/lib.es2023.array.d.ts +0 -924
- package/templates/static/node_modules/typescript/lib/lib.es2023.collection.d.ts +0 -21
- package/templates/static/node_modules/typescript/lib/lib.es2023.d.ts +0 -22
- package/templates/static/node_modules/typescript/lib/lib.es2023.full.d.ts +0 -24
- package/templates/static/node_modules/typescript/lib/lib.es2023.intl.d.ts +0 -56
- package/templates/static/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +0 -65
- package/templates/static/node_modules/typescript/lib/lib.es2024.collection.d.ts +0 -29
- package/templates/static/node_modules/typescript/lib/lib.es2024.d.ts +0 -26
- package/templates/static/node_modules/typescript/lib/lib.es2024.full.d.ts +0 -24
- package/templates/static/node_modules/typescript/lib/lib.es2024.object.d.ts +0 -29
- package/templates/static/node_modules/typescript/lib/lib.es2024.promise.d.ts +0 -35
- package/templates/static/node_modules/typescript/lib/lib.es2024.regexp.d.ts +0 -25
- package/templates/static/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +0 -68
- package/templates/static/node_modules/typescript/lib/lib.es2024.string.d.ts +0 -29
- package/templates/static/node_modules/typescript/lib/lib.es5.d.ts +0 -4601
- package/templates/static/node_modules/typescript/lib/lib.es6.d.ts +0 -23
- package/templates/static/node_modules/typescript/lib/lib.esnext.array.d.ts +0 -35
- package/templates/static/node_modules/typescript/lib/lib.esnext.collection.d.ts +0 -96
- package/templates/static/node_modules/typescript/lib/lib.esnext.d.ts +0 -29
- package/templates/static/node_modules/typescript/lib/lib.esnext.decorators.d.ts +0 -28
- package/templates/static/node_modules/typescript/lib/lib.esnext.disposable.d.ts +0 -193
- package/templates/static/node_modules/typescript/lib/lib.esnext.error.d.ts +0 -24
- package/templates/static/node_modules/typescript/lib/lib.esnext.float16.d.ts +0 -445
- package/templates/static/node_modules/typescript/lib/lib.esnext.full.d.ts +0 -24
- package/templates/static/node_modules/typescript/lib/lib.esnext.intl.d.ts +0 -21
- package/templates/static/node_modules/typescript/lib/lib.esnext.iterator.d.ts +0 -148
- package/templates/static/node_modules/typescript/lib/lib.esnext.promise.d.ts +0 -34
- package/templates/static/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +0 -25
- package/templates/static/node_modules/typescript/lib/lib.scripthost.d.ts +0 -322
- package/templates/static/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +0 -41
- package/templates/static/node_modules/typescript/lib/lib.webworker.d.ts +0 -13150
- package/templates/static/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +0 -23
- package/templates/static/node_modules/typescript/lib/lib.webworker.iterable.d.ts +0 -340
- package/templates/static/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -2122
- package/templates/static/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -2122
- package/templates/static/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -2122
- package/templates/static/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -2122
- package/templates/static/node_modules/typescript/lib/tsc.js +0 -8
- package/templates/static/node_modules/typescript/lib/tsserver.js +0 -8
- package/templates/static/node_modules/typescript/lib/tsserverlibrary.d.ts +0 -17
- package/templates/static/node_modules/typescript/lib/tsserverlibrary.js +0 -21
- package/templates/static/node_modules/typescript/lib/typescript.d.ts +0 -11437
|
@@ -1,4 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate the browser-safe hydration runtime code.
|
|
3
|
+
* Uses CDN-hosted Preact (esm.sh) for minimal payload and no bundler overhead.
|
|
4
|
+
* This runtime is injected into the page and provides hydration primitives.
|
|
5
|
+
*
|
|
6
|
+
* Note: In production, consider self-hosting the Preact bundle for better performance
|
|
7
|
+
* and reliability (no external CDN dependency).
|
|
8
|
+
*
|
|
9
|
+
* @returns ES module code string for browser hydration runtime
|
|
10
|
+
*/
|
|
1
11
|
export declare function runtimeHydrateModule(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Clear cached compiled module for a file path.
|
|
14
|
+
* Called when a source file changes during development to ensure fresh compilation
|
|
15
|
+
* on next request.
|
|
16
|
+
*
|
|
17
|
+
* @param filePath - Absolute file path to invalidate
|
|
18
|
+
*/
|
|
2
19
|
export declare function invalidateCache(filePath: string): void;
|
|
20
|
+
/**
|
|
21
|
+
* Build a client-side hydration module for a route.
|
|
22
|
+
* Takes a route file path, extracts the default component export,
|
|
23
|
+
* transpiles to browser-executable JavaScript with Preact imports resolved.
|
|
24
|
+
*
|
|
25
|
+
* How it works:
|
|
26
|
+
* 1. Create a proxy file that re-exports only the default component
|
|
27
|
+
* This allows tree-shaking to remove server-only exports (loader, middleware, etc.)
|
|
28
|
+
* 2. Use esbuild buildSync to transpile and bundle with Preact
|
|
29
|
+
* 3. Cache the result with ETag for HTTP conditional requests
|
|
30
|
+
* 4. Return JS code or fallback to empty component on error
|
|
31
|
+
*
|
|
32
|
+
* Transpilation:
|
|
33
|
+
* - Format: ESM (for client-side import)
|
|
34
|
+
* - Platform: browser (not Node.js)
|
|
35
|
+
* - JSX: Automatic via Preact JSX runtime
|
|
36
|
+
* - Sourcemap: Inline for debugging in browser DevTools
|
|
37
|
+
* - External: Preact and runtime libs (assumed available in browser)
|
|
38
|
+
*
|
|
39
|
+
* Caching:
|
|
40
|
+
* - Cache is per-file-path; invalidated via invalidateCache() when file changes
|
|
41
|
+
* - ETag allows HTTP 304 Not Modified responses
|
|
42
|
+
* - Development mode trusts explicit invalidation (file watcher triggers it)
|
|
43
|
+
*
|
|
44
|
+
* Error handling:
|
|
45
|
+
* - Failed builds return empty Page component (graceful degradation)
|
|
46
|
+
* - Errors are logged but don't stop request
|
|
47
|
+
*
|
|
48
|
+
* @param routeIdOrPath - File path to route component (e.g., "./routes/index.tsx")
|
|
49
|
+
* Note: routeId support for future config-based resolution
|
|
50
|
+
* @returns ES module JavaScript code (browser-executable)
|
|
51
|
+
*/
|
|
3
52
|
export declare function buildHydrationModule(routeIdOrPath: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Retrieve the ETag (cache hash) for a compiled hydration module.
|
|
55
|
+
* Used for HTTP conditional requests (If-None-Match, 304 Not Modified).
|
|
56
|
+
*
|
|
57
|
+
* @param filePath - Route file path
|
|
58
|
+
* @returns ETag hash string or null if not cached
|
|
59
|
+
*/
|
|
4
60
|
export declare function getHydrationEtag(filePath: string): string | null;
|
|
@@ -19,13 +19,35 @@ import { buildSync } from "esbuild";
|
|
|
19
19
|
import { createHash } from "node:crypto";
|
|
20
20
|
import { existsSync } from "node:fs";
|
|
21
21
|
import { basename, dirname } from "node:path";
|
|
22
|
+
/**
|
|
23
|
+
* Cache for compiled hydration modules.
|
|
24
|
+
* Stores transpiled JS code and computed ETag hash per source file path.
|
|
25
|
+
* Cache is invalidated when files change (via invalidateCache).
|
|
26
|
+
*/
|
|
22
27
|
const cache = new Map();
|
|
28
|
+
/**
|
|
29
|
+
* Compute SHA-1 hash (ETag) for a string.
|
|
30
|
+
* Used for HTTP cache validation and deduplicating compiled output.
|
|
31
|
+
*
|
|
32
|
+
* @param s - String to hash
|
|
33
|
+
* @returns Hex-encoded SHA-1 hash
|
|
34
|
+
*/
|
|
23
35
|
function etagOf(s) {
|
|
24
|
-
|
|
36
|
+
return createHash("sha1").update(s).digest("hex");
|
|
25
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Generate the browser-safe hydration runtime code.
|
|
40
|
+
* Uses CDN-hosted Preact (esm.sh) for minimal payload and no bundler overhead.
|
|
41
|
+
* This runtime is injected into the page and provides hydration primitives.
|
|
42
|
+
*
|
|
43
|
+
* Note: In production, consider self-hosting the Preact bundle for better performance
|
|
44
|
+
* and reliability (no external CDN dependency).
|
|
45
|
+
*
|
|
46
|
+
* @returns ES module code string for browser hydration runtime
|
|
47
|
+
*/
|
|
26
48
|
export function runtimeHydrateModule() {
|
|
27
|
-
|
|
28
|
-
|
|
49
|
+
// Browser-safe runtime (ESM) using CDN preact (fast + zero bundler)
|
|
50
|
+
return `
|
|
29
51
|
import { hydrate } from "https://esm.sh/preact@10.25.4";
|
|
30
52
|
import { h } from "https://esm.sh/preact@10.25.4";
|
|
31
53
|
|
|
@@ -50,76 +72,115 @@ export async function hydrateClient(entryPath) {
|
|
|
50
72
|
}
|
|
51
73
|
`;
|
|
52
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Clear cached compiled module for a file path.
|
|
77
|
+
* Called when a source file changes during development to ensure fresh compilation
|
|
78
|
+
* on next request.
|
|
79
|
+
*
|
|
80
|
+
* @param filePath - Absolute file path to invalidate
|
|
81
|
+
*/
|
|
53
82
|
export function invalidateCache(filePath) {
|
|
54
|
-
|
|
83
|
+
cache.delete(filePath);
|
|
55
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Build a client-side hydration module for a route.
|
|
87
|
+
* Takes a route file path, extracts the default component export,
|
|
88
|
+
* transpiles to browser-executable JavaScript with Preact imports resolved.
|
|
89
|
+
*
|
|
90
|
+
* How it works:
|
|
91
|
+
* 1. Create a proxy file that re-exports only the default component
|
|
92
|
+
* This allows tree-shaking to remove server-only exports (loader, middleware, etc.)
|
|
93
|
+
* 2. Use esbuild buildSync to transpile and bundle with Preact
|
|
94
|
+
* 3. Cache the result with ETag for HTTP conditional requests
|
|
95
|
+
* 4. Return JS code or fallback to empty component on error
|
|
96
|
+
*
|
|
97
|
+
* Transpilation:
|
|
98
|
+
* - Format: ESM (for client-side import)
|
|
99
|
+
* - Platform: browser (not Node.js)
|
|
100
|
+
* - JSX: Automatic via Preact JSX runtime
|
|
101
|
+
* - Sourcemap: Inline for debugging in browser DevTools
|
|
102
|
+
* - External: Preact and runtime libs (assumed available in browser)
|
|
103
|
+
*
|
|
104
|
+
* Caching:
|
|
105
|
+
* - Cache is per-file-path; invalidated via invalidateCache() when file changes
|
|
106
|
+
* - ETag allows HTTP 304 Not Modified responses
|
|
107
|
+
* - Development mode trusts explicit invalidation (file watcher triggers it)
|
|
108
|
+
*
|
|
109
|
+
* Error handling:
|
|
110
|
+
* - Failed builds return empty Page component (graceful degradation)
|
|
111
|
+
* - Errors are logged but don't stop request
|
|
112
|
+
*
|
|
113
|
+
* @param routeIdOrPath - File path to route component (e.g., "./routes/index.tsx")
|
|
114
|
+
* Note: routeId support for future config-based resolution
|
|
115
|
+
* @returns ES module JavaScript code (browser-executable)
|
|
116
|
+
*/
|
|
56
117
|
export function buildHydrationModule(routeIdOrPath) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
console.error("[HYDRATION] Failed to build module for:", filePath);
|
|
106
|
-
return `export default function Page(){ return null }`;
|
|
107
|
-
}
|
|
108
|
-
const out = `
|
|
109
|
-
import { h } from "https://esm.sh/preact@10.25.4";
|
|
110
|
-
import { Fragment } from "https://esm.sh/preact@10.25.4";
|
|
111
|
-
import { jsx, jsxs } from "https://esm.sh/preact@10.25.4/jsx-runtime";
|
|
112
|
-
` + jsOutput;
|
|
113
|
-
const etag = etagOf(out);
|
|
114
|
-
cache.set(key, { js: out, etag });
|
|
115
|
-
return out;
|
|
116
|
-
}
|
|
117
|
-
catch (err) {
|
|
118
|
-
console.error("[HYDRATION] Build error for", filePath, ":", err);
|
|
119
|
-
return `export default function Page(){ return null }`;
|
|
118
|
+
// routeIdOrPath is a file path; future versions may support route IDs via config
|
|
119
|
+
let filePath = routeIdOrPath;
|
|
120
|
+
// Return fallback if file doesn't exist
|
|
121
|
+
if (!existsSync(filePath)) {
|
|
122
|
+
return `export default function Page(){ return null }`;
|
|
123
|
+
}
|
|
124
|
+
const key = filePath;
|
|
125
|
+
// Return cached result if available (invalidated by invalidateCache)
|
|
126
|
+
if (cache.has(key)) {
|
|
127
|
+
return cache.get(key).js;
|
|
128
|
+
}
|
|
129
|
+
// Create proxy file to enable tree-shaking of server-only exports (loader, middleware, etc.)
|
|
130
|
+
// The proxy re-exports only the default component, letting esbuild eliminate other exports
|
|
131
|
+
const fileName = basename(filePath);
|
|
132
|
+
const dir = dirname(filePath);
|
|
133
|
+
const proxyContent = `export { default } from "./${fileName}";`;
|
|
134
|
+
try {
|
|
135
|
+
// Transpile proxy with esbuild for browser-safe JavaScript
|
|
136
|
+
const jsOutput = buildSync({
|
|
137
|
+
stdin: {
|
|
138
|
+
contents: proxyContent,
|
|
139
|
+
resolveDir: dir, // Resolve imports relative to route directory
|
|
140
|
+
sourcefile: "hydration-proxy.tsx",
|
|
141
|
+
loader: "tsx", // Support TypeScript and JSX
|
|
142
|
+
},
|
|
143
|
+
format: "esm",
|
|
144
|
+
platform: "browser", // Browser-specific optimizations
|
|
145
|
+
bundle: true, // Inline dependencies (except external)
|
|
146
|
+
write: false, // Return code instead of writing file
|
|
147
|
+
sourcemap: "inline", // Include source map for debugging
|
|
148
|
+
jsx: "automatic", // Automatic JSX transform (Preact)
|
|
149
|
+
jsxImportSource: "preact",
|
|
150
|
+
define: {
|
|
151
|
+
"process.env.NODE_ENV": JSON.stringify("development"),
|
|
152
|
+
},
|
|
153
|
+
// Preact and runtime must be available in browser (loaded separately)
|
|
154
|
+
external: [
|
|
155
|
+
"preact",
|
|
156
|
+
"preact/hooks",
|
|
157
|
+
"preact/jsx-runtime",
|
|
158
|
+
"preact-render-to-string",
|
|
159
|
+
],
|
|
160
|
+
// TODO: Add plugin support for Vue/Svelte components
|
|
161
|
+
// plugins: [vueEsbuildPlugin(), svelteEsbuildPlugin()],
|
|
162
|
+
}).outputFiles?.[0]?.text;
|
|
163
|
+
if (!jsOutput) {
|
|
164
|
+
console.error("[HYDRATION] Failed to build module for:", filePath);
|
|
165
|
+
return `export default function Page(){ return null }`;
|
|
120
166
|
}
|
|
167
|
+
// Cache result with ETag
|
|
168
|
+
const etag = etagOf(jsOutput);
|
|
169
|
+
cache.set(key, { js: jsOutput, etag });
|
|
170
|
+
return jsOutput;
|
|
171
|
+
} catch (err) {
|
|
172
|
+
console.error("[HYDRATION] Build error for", filePath, ":", err);
|
|
173
|
+
return `export default function Page(){ return null }`;
|
|
174
|
+
}
|
|
121
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Retrieve the ETag (cache hash) for a compiled hydration module.
|
|
178
|
+
* Used for HTTP conditional requests (If-None-Match, 304 Not Modified).
|
|
179
|
+
*
|
|
180
|
+
* @param filePath - Route file path
|
|
181
|
+
* @returns ETag hash string or null if not cached
|
|
182
|
+
*/
|
|
122
183
|
export function getHydrationEtag(filePath) {
|
|
123
|
-
|
|
124
|
-
|
|
184
|
+
const v = cache.get(filePath);
|
|
185
|
+
return v?.etag ?? null;
|
|
125
186
|
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
|
+
import type { FrameworkConfig } from "../core/config.js";
|
|
3
|
+
import type { RouteEntry } from "../core/routes/scan.js";
|
|
4
|
+
/**
|
|
5
|
+
* Server-side rendering context passed to render() function.
|
|
6
|
+
* Contains all necessary information to render a page on the server.
|
|
7
|
+
*/
|
|
8
|
+
export interface SSRContext {
|
|
9
|
+
req: IncomingMessage;
|
|
10
|
+
res: ServerResponse;
|
|
11
|
+
url: URL;
|
|
12
|
+
params: Record<string, string>;
|
|
13
|
+
query: Record<string, string>;
|
|
14
|
+
headers: Record<string, string>;
|
|
15
|
+
cookies: Record<string, string>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Server-side props context passed to getServerSideProps().
|
|
19
|
+
* Provides access to request, params, and query string.
|
|
20
|
+
*/
|
|
21
|
+
export interface GetServerSidePropsContext {
|
|
22
|
+
req: IncomingMessage;
|
|
23
|
+
res: ServerResponse;
|
|
24
|
+
params: Record<string, string>;
|
|
25
|
+
query: Record<string, string>;
|
|
26
|
+
headers: Record<string, string>;
|
|
27
|
+
cookies: Record<string, string>;
|
|
28
|
+
url: URL;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Return type from getServerSideProps().
|
|
32
|
+
* Can return notFound for 404, redirect for redirects, or props for rendering.
|
|
33
|
+
*/
|
|
34
|
+
export type GetServerSidePropsResult<T = any> =
|
|
35
|
+
| {
|
|
36
|
+
props: T;
|
|
37
|
+
}
|
|
38
|
+
| {
|
|
39
|
+
notFound: true;
|
|
40
|
+
}
|
|
41
|
+
| {
|
|
42
|
+
redirect: {
|
|
43
|
+
destination: string;
|
|
44
|
+
permanent?: boolean;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Cache configuration and TTL management.
|
|
49
|
+
*/
|
|
50
|
+
export interface CacheConfig {
|
|
51
|
+
enabled: boolean;
|
|
52
|
+
ttlSeconds: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Configure the SSR HTML cache behavior.
|
|
56
|
+
*
|
|
57
|
+
* @param config Cache configuration options
|
|
58
|
+
*/
|
|
59
|
+
export declare function configureSsrCache(config: Partial<CacheConfig>): void;
|
|
60
|
+
/**
|
|
61
|
+
* Clear the entire SSR render cache.
|
|
62
|
+
* Useful in development or when data has changed.
|
|
63
|
+
*/
|
|
64
|
+
export declare function clearSsrCache(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Clear a specific cached page by URL pathname.
|
|
67
|
+
*
|
|
68
|
+
* @param pathname URL pathname to invalidate
|
|
69
|
+
*/
|
|
70
|
+
export declare function invalidateSsrCache(pathname: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* Core SSR render function: converts a component/template to HTML string.
|
|
73
|
+
* This is the main entry point for server-side rendering in Jen.js.
|
|
74
|
+
*
|
|
75
|
+
* Handles:
|
|
76
|
+
* 1. Cache lookup for performance
|
|
77
|
+
* 2. Module compilation (TS/JSX/Vue/Svelte → JS)
|
|
78
|
+
* 3. Route middleware execution
|
|
79
|
+
* 4. Loader function invocation (getServerSideProps pattern)
|
|
80
|
+
* 5. Component rendering to HTML string
|
|
81
|
+
* 6. Head management and hydration script injection
|
|
82
|
+
* 7. HTML caching for subsequent requests
|
|
83
|
+
*
|
|
84
|
+
* @param config Framework configuration
|
|
85
|
+
* @param route Route entry being rendered
|
|
86
|
+
* @param ctx Complete SSR context with request/response and metadata
|
|
87
|
+
* @returns Complete HTML document as a string
|
|
88
|
+
* @throws Error if rendering fails
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```typescript
|
|
92
|
+
* const html = await render(config, route, {
|
|
93
|
+
* req, res, url, params, query, headers, cookies
|
|
94
|
+
* });
|
|
95
|
+
* res.setHeader("content-type", "text/html; charset=utf-8");
|
|
96
|
+
* res.end(html);
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export declare function render(
|
|
100
|
+
config: FrameworkConfig,
|
|
101
|
+
route: RouteEntry,
|
|
102
|
+
ctx: SSRContext,
|
|
103
|
+
): Promise<string>;
|
|
104
|
+
/**
|
|
105
|
+
* Advanced SSR render with optional caching control.
|
|
106
|
+
* Allows per-request cache bypass for revalidation.
|
|
107
|
+
*
|
|
108
|
+
* @param config Framework configuration
|
|
109
|
+
* @param route Route entry being rendered
|
|
110
|
+
* @param ctx Complete SSR context
|
|
111
|
+
* @param options Render options
|
|
112
|
+
* @param options.cache Whether to use/update cache (default: true)
|
|
113
|
+
* @returns Complete HTML document
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* const html = await renderWithOptions(config, route, ctx, {
|
|
118
|
+
* cache: false // Bypass cache for this request
|
|
119
|
+
* });
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export declare function renderWithOptions(
|
|
123
|
+
config: FrameworkConfig,
|
|
124
|
+
route: RouteEntry,
|
|
125
|
+
ctx: SSRContext,
|
|
126
|
+
options?: {
|
|
127
|
+
cache?: boolean;
|
|
128
|
+
},
|
|
129
|
+
): Promise<string>;
|
|
130
|
+
/**
|
|
131
|
+
* Manual HTML rendering of a component to string (no full document).
|
|
132
|
+
* Useful when you need just the component HTML without head/body wrapper.
|
|
133
|
+
*
|
|
134
|
+
* This is a low-level API primarily for internal use.
|
|
135
|
+
* For typical routing, use render() instead.
|
|
136
|
+
*
|
|
137
|
+
* @param config Framework configuration
|
|
138
|
+
* @param route Route to render
|
|
139
|
+
* @param ctx SSR context
|
|
140
|
+
* @returns Just the component body HTML (no <!doctype>, no <head>, no hydration)
|
|
141
|
+
*/
|
|
142
|
+
export declare function renderComponentToString(
|
|
143
|
+
config: FrameworkConfig,
|
|
144
|
+
route: RouteEntry,
|
|
145
|
+
ctx: SSRContext,
|
|
146
|
+
): Promise<string>;
|
|
147
|
+
/**
|
|
148
|
+
* Get cache statistics for monitoring and debugging.
|
|
149
|
+
*
|
|
150
|
+
* @returns Cache statistics
|
|
151
|
+
*/
|
|
152
|
+
export declare function getSsrCacheStats(): {
|
|
153
|
+
size: number;
|
|
154
|
+
enabled: boolean;
|
|
155
|
+
ttlSeconds: number;
|
|
156
|
+
entries: {
|
|
157
|
+
pathname: string;
|
|
158
|
+
age: number;
|
|
159
|
+
size: number;
|
|
160
|
+
}[];
|
|
161
|
+
};
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of Jen.js.
|
|
3
|
+
* Copyright (C) 2026 oopsio
|
|
4
|
+
*
|
|
5
|
+
* This program is free software: you can redistribute it and/or modify
|
|
6
|
+
* it under the terms of the GNU General Public License as published by
|
|
7
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
* (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU General Public License
|
|
16
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { renderRouteToHtml } from "../runtime/render.js";
|
|
19
|
+
/**
|
|
20
|
+
* HTML rendering cache for performance optimization.
|
|
21
|
+
* Cache key is URL pathname. Useful for frequently accessed pages.
|
|
22
|
+
* In production, consider using Redis or external cache for distributed rendering.
|
|
23
|
+
*/
|
|
24
|
+
const renderCache = new Map();
|
|
25
|
+
let cacheConfig = {
|
|
26
|
+
enabled: true,
|
|
27
|
+
ttlSeconds: 3600, // Default: 1 hour
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Configure the SSR HTML cache behavior.
|
|
31
|
+
*
|
|
32
|
+
* @param config Cache configuration options
|
|
33
|
+
*/
|
|
34
|
+
export function configureSsrCache(config) {
|
|
35
|
+
cacheConfig = { ...cacheConfig, ...config };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Clear the entire SSR render cache.
|
|
39
|
+
* Useful in development or when data has changed.
|
|
40
|
+
*/
|
|
41
|
+
export function clearSsrCache() {
|
|
42
|
+
renderCache.clear();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Clear a specific cached page by URL pathname.
|
|
46
|
+
*
|
|
47
|
+
* @param pathname URL pathname to invalidate
|
|
48
|
+
*/
|
|
49
|
+
export function invalidateSsrCache(pathname) {
|
|
50
|
+
renderCache.delete(pathname);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get cached HTML for a page if it exists and hasn't expired.
|
|
54
|
+
*
|
|
55
|
+
* @param pathname URL pathname
|
|
56
|
+
* @returns Cached HTML string, or null if not cached/expired
|
|
57
|
+
*/
|
|
58
|
+
function getCachedHtml(pathname) {
|
|
59
|
+
if (!cacheConfig.enabled) return null;
|
|
60
|
+
const cached = renderCache.get(pathname);
|
|
61
|
+
if (!cached) return null;
|
|
62
|
+
const age = (Date.now() - cached.timestamp) / 1000;
|
|
63
|
+
if (age > cacheConfig.ttlSeconds) {
|
|
64
|
+
renderCache.delete(pathname);
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return cached.html;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Cache rendered HTML for a page.
|
|
71
|
+
*
|
|
72
|
+
* @param pathname URL pathname
|
|
73
|
+
* @param html Complete HTML string to cache
|
|
74
|
+
*/
|
|
75
|
+
function cacheHtml(pathname, html) {
|
|
76
|
+
if (!cacheConfig.enabled) return;
|
|
77
|
+
renderCache.set(pathname, { html, timestamp: Date.now() });
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Core SSR render function: converts a component/template to HTML string.
|
|
81
|
+
* This is the main entry point for server-side rendering in Jen.js.
|
|
82
|
+
*
|
|
83
|
+
* Handles:
|
|
84
|
+
* 1. Cache lookup for performance
|
|
85
|
+
* 2. Module compilation (TS/JSX/Vue/Svelte → JS)
|
|
86
|
+
* 3. Route middleware execution
|
|
87
|
+
* 4. Loader function invocation (getServerSideProps pattern)
|
|
88
|
+
* 5. Component rendering to HTML string
|
|
89
|
+
* 6. Head management and hydration script injection
|
|
90
|
+
* 7. HTML caching for subsequent requests
|
|
91
|
+
*
|
|
92
|
+
* @param config Framework configuration
|
|
93
|
+
* @param route Route entry being rendered
|
|
94
|
+
* @param ctx Complete SSR context with request/response and metadata
|
|
95
|
+
* @returns Complete HTML document as a string
|
|
96
|
+
* @throws Error if rendering fails
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* const html = await render(config, route, {
|
|
101
|
+
* req, res, url, params, query, headers, cookies
|
|
102
|
+
* });
|
|
103
|
+
* res.setHeader("content-type", "text/html; charset=utf-8");
|
|
104
|
+
* res.end(html);
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export async function render(config, route, ctx) {
|
|
108
|
+
const pathname = ctx.url.pathname;
|
|
109
|
+
// Check cache first
|
|
110
|
+
const cached = getCachedHtml(pathname);
|
|
111
|
+
if (cached) {
|
|
112
|
+
return cached;
|
|
113
|
+
}
|
|
114
|
+
// Render the page
|
|
115
|
+
const html = await renderRouteToHtml({
|
|
116
|
+
config,
|
|
117
|
+
route,
|
|
118
|
+
req: ctx.req,
|
|
119
|
+
res: ctx.res,
|
|
120
|
+
url: ctx.url,
|
|
121
|
+
params: ctx.params,
|
|
122
|
+
query: ctx.query,
|
|
123
|
+
headers: ctx.headers,
|
|
124
|
+
cookies: ctx.cookies,
|
|
125
|
+
});
|
|
126
|
+
// Cache for next request
|
|
127
|
+
cacheHtml(pathname, html);
|
|
128
|
+
return html;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Advanced SSR render with optional caching control.
|
|
132
|
+
* Allows per-request cache bypass for revalidation.
|
|
133
|
+
*
|
|
134
|
+
* @param config Framework configuration
|
|
135
|
+
* @param route Route entry being rendered
|
|
136
|
+
* @param ctx Complete SSR context
|
|
137
|
+
* @param options Render options
|
|
138
|
+
* @param options.cache Whether to use/update cache (default: true)
|
|
139
|
+
* @returns Complete HTML document
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* const html = await renderWithOptions(config, route, ctx, {
|
|
144
|
+
* cache: false // Bypass cache for this request
|
|
145
|
+
* });
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
export async function renderWithOptions(config, route, ctx, options = {}) {
|
|
149
|
+
const { cache = true } = options;
|
|
150
|
+
const pathname = ctx.url.pathname;
|
|
151
|
+
// Check cache if enabled
|
|
152
|
+
if (cache) {
|
|
153
|
+
const cached = getCachedHtml(pathname);
|
|
154
|
+
if (cached) return cached;
|
|
155
|
+
}
|
|
156
|
+
// Render the page
|
|
157
|
+
const html = await renderRouteToHtml({
|
|
158
|
+
config,
|
|
159
|
+
route,
|
|
160
|
+
req: ctx.req,
|
|
161
|
+
res: ctx.res,
|
|
162
|
+
url: ctx.url,
|
|
163
|
+
params: ctx.params,
|
|
164
|
+
query: ctx.query,
|
|
165
|
+
headers: ctx.headers,
|
|
166
|
+
cookies: ctx.cookies,
|
|
167
|
+
});
|
|
168
|
+
// Cache if enabled
|
|
169
|
+
if (cache) {
|
|
170
|
+
cacheHtml(pathname, html);
|
|
171
|
+
}
|
|
172
|
+
return html;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Manual HTML rendering of a component to string (no full document).
|
|
176
|
+
* Useful when you need just the component HTML without head/body wrapper.
|
|
177
|
+
*
|
|
178
|
+
* This is a low-level API primarily for internal use.
|
|
179
|
+
* For typical routing, use render() instead.
|
|
180
|
+
*
|
|
181
|
+
* @param config Framework configuration
|
|
182
|
+
* @param route Route to render
|
|
183
|
+
* @param ctx SSR context
|
|
184
|
+
* @returns Just the component body HTML (no <!doctype>, no <head>, no hydration)
|
|
185
|
+
*/
|
|
186
|
+
export async function renderComponentToString(config, route, ctx) {
|
|
187
|
+
// For now, we render the full HTML and extract the body
|
|
188
|
+
const html = await renderRouteToHtml({
|
|
189
|
+
config,
|
|
190
|
+
route,
|
|
191
|
+
req: ctx.req,
|
|
192
|
+
res: ctx.res,
|
|
193
|
+
url: ctx.url,
|
|
194
|
+
params: ctx.params,
|
|
195
|
+
query: ctx.query,
|
|
196
|
+
headers: ctx.headers,
|
|
197
|
+
cookies: ctx.cookies,
|
|
198
|
+
});
|
|
199
|
+
// Extract body content
|
|
200
|
+
const bodyMatch = html.match(/<div id="app">([\s\S]*?)<\/div>/);
|
|
201
|
+
return bodyMatch ? bodyMatch[1] : "";
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get cache statistics for monitoring and debugging.
|
|
205
|
+
*
|
|
206
|
+
* @returns Cache statistics
|
|
207
|
+
*/
|
|
208
|
+
export function getSsrCacheStats() {
|
|
209
|
+
return {
|
|
210
|
+
size: renderCache.size,
|
|
211
|
+
enabled: cacheConfig.enabled,
|
|
212
|
+
ttlSeconds: cacheConfig.ttlSeconds,
|
|
213
|
+
entries: Array.from(renderCache.entries()).map(([key, value]) => ({
|
|
214
|
+
pathname: key,
|
|
215
|
+
age: (Date.now() - value.timestamp) / 1000,
|
|
216
|
+
size: value.html.length,
|
|
217
|
+
})),
|
|
218
|
+
};
|
|
219
|
+
}
|