create-jen-app 1.2.2 → 1.2.4
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/colors.js +0 -17
- package/dist/create.js +5 -17
- package/dist/generator.js +14 -31
- package/package.json +2 -2
- package/templates/ssr-isr/README.md +77 -0
- package/templates/ssr-isr/build.js +118 -0
- package/templates/ssr-isr/jen.config.ts +109 -0
- package/templates/ssr-isr/jenjs.d.ts +22 -0
- package/templates/ssr-isr/lib/api/(hello).d.ts +7 -0
- package/templates/ssr-isr/lib/api/(hello).js +9 -0
- package/templates/ssr-isr/lib/auth/cookie-utils.d.ts +33 -0
- package/templates/ssr-isr/lib/auth/cookie-utils.js +79 -0
- package/templates/ssr-isr/lib/auth/index.js +2 -0
- package/templates/ssr-isr/lib/auth/jwt.d.ts +30 -0
- package/templates/ssr-isr/lib/auth/jwt.js +57 -0
- package/templates/ssr-isr/lib/auth/session.d.ts +44 -0
- package/templates/ssr-isr/lib/auth/session.js +92 -0
- package/templates/ssr-isr/lib/build/asset-hashing.d.ts +10 -0
- package/templates/ssr-isr/lib/build/asset-hashing.js +25 -0
- package/templates/ssr-isr/lib/build/asset-manifest.d.ts +11 -0
- package/templates/ssr-isr/lib/build/asset-manifest.js +21 -0
- package/templates/ssr-isr/lib/build/build.d.ts +24 -0
- package/templates/ssr-isr/lib/build/build.js +141 -0
- package/templates/{static → ssr-isr}/lib/build/island-hydration.d.ts +8 -5
- package/templates/ssr-isr/lib/build/island-hydration.js +44 -0
- package/templates/ssr-isr/lib/build/minifier.d.ts +20 -0
- package/templates/ssr-isr/lib/build/minifier.js +46 -0
- package/templates/ssr-isr/lib/build/page-renderer.d.ts +17 -0
- package/templates/ssr-isr/lib/build/page-renderer.js +28 -0
- package/templates/ssr-isr/lib/build/production-build.d.ts +10 -0
- package/templates/ssr-isr/lib/build/production-build.js +13 -0
- package/templates/ssr-isr/lib/build/ssg-pipeline.d.ts +15 -0
- package/templates/ssr-isr/lib/build/ssg-pipeline.js +113 -0
- package/templates/{static → ssr-isr}/lib/build-tools/build-site.d.ts +3 -3
- package/templates/ssr-isr/lib/build-tools/build-site.js +36 -0
- package/templates/ssr-isr/lib/cache/index.d.ts +10 -0
- package/templates/ssr-isr/lib/cache/index.js +10 -0
- package/templates/ssr-isr/lib/cache/memory.d.ts +33 -0
- package/templates/ssr-isr/lib/cache/memory.js +40 -0
- package/templates/ssr-isr/lib/cache/redis.d.ts +45 -0
- package/templates/ssr-isr/lib/cache/redis.js +61 -0
- package/templates/ssr-isr/lib/cli/banner.d.ts +5 -0
- package/templates/ssr-isr/lib/cli/banner.js +28 -0
- package/templates/ssr-isr/lib/cli/templates/ssg/jen.config.js +32 -0
- package/templates/ssr-isr/lib/cli/templates/ssg/site/index.js +9 -0
- package/templates/ssr-isr/lib/cli/templates/ssr/jen.config.js +32 -0
- package/templates/ssr-isr/lib/cli/templates/ssr/site/index.js +9 -0
- package/templates/ssr-isr/lib/compilers/esbuild-plugins.js +111 -0
- package/templates/ssr-isr/lib/compilers/svelte.d.ts +18 -0
- package/templates/ssr-isr/lib/compilers/svelte.js +44 -0
- package/templates/ssr-isr/lib/compilers/vue.d.ts +15 -0
- package/templates/ssr-isr/lib/compilers/vue.js +90 -0
- package/templates/ssr-isr/lib/core/config.d.ts +220 -0
- package/templates/ssr-isr/lib/core/http.d.ts +56 -0
- package/templates/ssr-isr/lib/core/http.js +71 -0
- package/templates/ssr-isr/lib/core/middleware-hooks.d.ts +219 -0
- package/templates/ssr-isr/lib/core/middleware-hooks.js +97 -0
- package/templates/ssr-isr/lib/core/paths.d.ts +44 -0
- package/templates/ssr-isr/lib/core/paths.js +39 -0
- package/templates/ssr-isr/lib/core/routes/match.d.ts +54 -0
- package/templates/ssr-isr/lib/core/routes/match.js +47 -0
- package/templates/ssr-isr/lib/core/routes/scan.d.ts +53 -0
- package/templates/ssr-isr/lib/core/routes/scan.js +190 -0
- package/templates/ssr-isr/lib/core/types.d.ts +153 -0
- package/templates/ssr-isr/lib/core/types.js +1 -0
- package/templates/ssr-isr/lib/css/compiler.d.ts +23 -0
- package/templates/ssr-isr/lib/css/compiler.js +74 -0
- package/templates/ssr-isr/lib/db/connector.d.ts +30 -0
- package/templates/ssr-isr/lib/db/connector.js +42 -0
- package/templates/ssr-isr/lib/db/drivers/jdb.d.ts +17 -0
- package/templates/ssr-isr/lib/db/drivers/jdb.js +44 -0
- package/templates/ssr-isr/lib/db/drivers/sql.d.ts +22 -0
- package/templates/ssr-isr/lib/db/drivers/sql.js +182 -0
- package/templates/ssr-isr/lib/db/index.d.ts +27 -0
- package/templates/ssr-isr/lib/db/index.js +48 -0
- package/templates/ssr-isr/lib/db/types.d.ts +33 -0
- package/templates/ssr-isr/lib/db/types.js +1 -0
- package/templates/ssr-isr/lib/graphql/index.d.ts +48 -0
- package/templates/ssr-isr/lib/graphql/index.js +52 -0
- package/templates/ssr-isr/lib/graphql/resolvers.d.ts +57 -0
- package/templates/ssr-isr/lib/graphql/resolvers.js +25 -0
- package/templates/ssr-isr/lib/graphql/schema.d.ts +35 -0
- package/templates/ssr-isr/lib/graphql/schema.js +35 -0
- package/templates/ssr-isr/lib/i18n/en.json +4 -0
- package/templates/ssr-isr/lib/i18n/es.json +4 -0
- package/templates/ssr-isr/lib/i18n/index.d.ts +8 -0
- package/templates/ssr-isr/lib/i18n/index.js +15 -0
- package/templates/ssr-isr/lib/import/jen-import.d.ts +56 -0
- package/templates/ssr-isr/lib/import/jen-import.js +161 -0
- package/templates/{static → ssr-isr}/lib/index.d.ts +42 -11
- package/templates/ssr-isr/lib/index.js +116 -0
- package/templates/ssr-isr/lib/jdb/engine.d.ts +38 -0
- package/templates/ssr-isr/lib/jdb/engine.js +275 -0
- package/templates/ssr-isr/lib/jdb/index.d.ts +34 -0
- package/templates/ssr-isr/lib/jdb/index.js +34 -0
- package/templates/ssr-isr/lib/jdb/types.d.ts +228 -0
- package/templates/ssr-isr/lib/jdb/types.js +1 -0
- package/templates/ssr-isr/lib/jdb/utils.d.ts +66 -0
- package/templates/ssr-isr/lib/jdb/utils.js +176 -0
- package/templates/ssr-isr/lib/middleware/builtins/body-parser.d.ts +16 -0
- package/templates/ssr-isr/lib/middleware/builtins/body-parser.js +56 -0
- package/templates/ssr-isr/lib/middleware/builtins/cors.d.ts +15 -0
- package/templates/ssr-isr/lib/middleware/builtins/cors.js +54 -0
- package/templates/ssr-isr/lib/middleware/builtins/logger.d.ts +19 -0
- package/templates/ssr-isr/lib/middleware/builtins/logger.js +34 -0
- package/templates/ssr-isr/lib/middleware/builtins/rate-limit.d.ts +22 -0
- package/templates/ssr-isr/lib/middleware/builtins/rate-limit.js +79 -0
- package/templates/ssr-isr/lib/middleware/builtins/request-id.d.ts +19 -0
- package/templates/ssr-isr/lib/middleware/builtins/request-id.js +29 -0
- package/templates/ssr-isr/lib/middleware/builtins/security-headers.d.ts +19 -0
- package/templates/ssr-isr/lib/middleware/builtins/security-headers.js +53 -0
- package/templates/ssr-isr/lib/middleware/context.d.ts +105 -0
- package/templates/ssr-isr/lib/middleware/context.js +124 -0
- package/templates/ssr-isr/lib/middleware/decorators.d.ts +19 -0
- package/templates/ssr-isr/lib/middleware/decorators.js +93 -0
- package/templates/ssr-isr/lib/middleware/errors/handler.js +46 -0
- package/templates/ssr-isr/lib/middleware/errors/http-error.d.ts +5 -0
- package/templates/ssr-isr/lib/middleware/errors/http-error.js +10 -0
- package/templates/ssr-isr/lib/middleware/kernel.d.ts +69 -0
- package/templates/ssr-isr/lib/middleware/kernel.js +85 -0
- package/templates/ssr-isr/lib/middleware/pipeline.d.ts +53 -0
- package/templates/ssr-isr/lib/middleware/pipeline.js +148 -0
- package/templates/ssr-isr/lib/middleware/registry.d.ts +69 -0
- package/templates/ssr-isr/lib/middleware/registry.js +85 -0
- package/templates/ssr-isr/lib/middleware/response.d.ts +75 -0
- package/templates/ssr-isr/lib/middleware/response.js +107 -0
- package/templates/ssr-isr/lib/middleware/types.d.ts +1 -0
- package/templates/ssr-isr/lib/middleware/types.js +1 -0
- package/templates/ssr-isr/lib/middleware/utils/matcher.js +13 -0
- package/templates/ssr-isr/lib/native/bundle.d.ts +24 -0
- package/templates/ssr-isr/lib/native/bundle.js +22 -0
- package/templates/ssr-isr/lib/native/dev-server.d.ts +13 -0
- package/templates/ssr-isr/lib/native/dev-server.js +23 -0
- package/templates/{static → ssr-isr}/lib/native/index.d.ts +20 -20
- package/templates/ssr-isr/lib/native/index.js +33 -0
- package/templates/ssr-isr/lib/native/optimizer.d.ts +21 -0
- package/templates/ssr-isr/lib/native/optimizer.js +20 -0
- package/templates/ssr-isr/lib/native/style-compiler.d.ts +19 -0
- package/templates/ssr-isr/lib/native/style-compiler.js +19 -0
- package/templates/ssr-isr/lib/plugin/loader.d.ts +10 -0
- package/templates/ssr-isr/lib/plugin/loader.js +36 -0
- package/templates/ssr-isr/lib/runtime/client-runtime.d.ts +16 -0
- package/templates/ssr-isr/lib/runtime/client-runtime.js +25 -0
- package/templates/ssr-isr/lib/runtime/hmr.d.ts +23 -0
- package/templates/ssr-isr/lib/runtime/hmr.js +59 -0
- package/templates/ssr-isr/lib/runtime/hydrate.d.ts +18 -0
- package/templates/ssr-isr/lib/runtime/hydrate.js +55 -0
- package/templates/ssr-isr/lib/runtime/island-hydration-client.d.ts +8 -0
- package/templates/ssr-isr/lib/runtime/island-hydration-client.js +146 -0
- package/templates/ssr-isr/lib/runtime/islands.d.ts +101 -0
- package/templates/ssr-isr/lib/runtime/islands.js +110 -0
- package/templates/ssr-isr/lib/runtime/render.d.ts +40 -0
- package/templates/ssr-isr/lib/runtime/render.js +244 -0
- package/templates/ssr-isr/lib/server/api-routes.d.ts +112 -0
- package/templates/ssr-isr/lib/server/api-routes.js +237 -0
- package/templates/{static → ssr-isr}/lib/server/api.d.ts +3 -3
- package/templates/ssr-isr/lib/server/api.js +108 -0
- package/templates/ssr-isr/lib/server/app.d.ts +44 -0
- package/templates/ssr-isr/lib/server/app.js +438 -0
- package/templates/ssr-isr/lib/server/runtimeServe.d.ts +60 -0
- package/templates/ssr-isr/lib/server/runtimeServe.js +169 -0
- package/templates/ssr-isr/lib/server/ssr.d.ts +161 -0
- package/templates/ssr-isr/lib/server/ssr.js +202 -0
- package/templates/ssr-isr/lib/shared/log.d.ts +49 -0
- package/templates/ssr-isr/lib/shared/log.js +64 -0
- package/templates/ssr-isr/package.json +23 -0
- package/templates/ssr-isr/server.js +128 -0
- package/templates/ssr-isr/site/pages/(index).tsx +11 -0
- package/templates/ssr-isr/site/styles/global.scss +37 -0
- package/templates/ssr-isr/tsconfig.json +39 -0
- package/templates/static/README.md +63 -67
- package/templates/static/build.js +31 -21
- package/templates/static/jen.config.ts +0 -20
- package/templates/static/jenjs.d.ts +0 -18
- package/templates/static/lib/api/(hello).js +7 -24
- package/templates/static/lib/api/examples/files/[...slug].js +22 -0
- package/templates/static/lib/api/examples/hello.js +11 -0
- package/templates/static/lib/api/examples/posts/[id].js +37 -0
- package/templates/static/lib/api/examples/posts.js +37 -0
- package/templates/static/lib/api/examples/search.js +23 -0
- package/templates/static/lib/api/index.js +41 -0
- package/templates/static/lib/api/loader.js +234 -0
- package/templates/static/lib/api/router.js +259 -0
- package/templates/static/lib/assets/types.js +1 -0
- package/templates/static/lib/auth/cookie-utils.js +69 -85
- package/templates/static/lib/auth/index.js +0 -17
- package/templates/static/lib/auth/jwt.js +48 -21
- package/templates/static/lib/auth/session.js +79 -98
- package/templates/static/lib/build/asset-hashing.js +47 -39
- package/templates/static/lib/build/asset-manifest.js +18 -35
- package/templates/static/lib/build/build.js +277 -95
- package/templates/static/lib/build/bundle-analyzer-ui.js +417 -0
- package/templates/static/lib/build/bundle-analyzer.js +945 -0
- package/templates/static/lib/build/code-splitter.js +194 -0
- package/templates/static/lib/build/feature-analyzer.js +190 -0
- package/templates/static/lib/build/feature-gate.js +257 -0
- package/templates/static/lib/build/island-hydration.js +17 -35
- package/templates/static/lib/build/lazy-loader.js +322 -0
- package/templates/static/lib/build/minifier.js +42 -61
- package/templates/static/lib/build/page-renderer.js +25 -42
- package/templates/static/lib/build/production-build.js +11 -28
- package/templates/static/lib/build/rust-hashing.js +71 -0
- package/templates/static/lib/build/script-optimizer.js +285 -0
- package/templates/static/lib/build/ssg-pipeline.js +107 -113
- package/templates/static/lib/build/vercel-output.js +298 -0
- package/templates/static/lib/build-tools/build-site.js +27 -47
- package/templates/static/lib/cache/index.js +6 -15
- package/templates/static/lib/cache/memory.js +37 -28
- package/templates/static/lib/cache/redis.js +56 -28
- package/templates/static/lib/cli/banner.js +18 -31
- package/templates/static/lib/cli/templates/ssg/jen.config.js +29 -46
- package/templates/static/lib/cli/templates/ssg/site/index.js +6 -1
- package/templates/static/lib/cli/templates/ssr/jen.config.js +29 -46
- package/templates/static/lib/cli/templates/ssr/site/index.js +6 -1
- package/templates/static/lib/client/Image.js +42 -0
- package/templates/static/lib/client/Link.js +190 -0
- package/templates/static/lib/client/PWA.js +46 -0
- package/templates/static/lib/client/Seo.js +97 -0
- package/templates/static/lib/client/index.js +9 -0
- package/templates/static/lib/client/useNavigation.js +25 -0
- package/templates/static/lib/client/useRouter.js +64 -0
- package/templates/static/lib/client-routing/Link.js +17 -0
- package/templates/static/lib/client-routing/index.js +19 -0
- package/templates/static/lib/client-routing/router.js +151 -0
- package/templates/static/lib/client-routing/signal.js +147 -0
- package/templates/static/lib/compilers/esbuild-plugins.js +96 -115
- package/templates/static/lib/compilers/svelte.js +31 -48
- package/templates/static/lib/compilers/vue.js +76 -85
- package/templates/static/lib/core/config.js +0 -17
- package/templates/static/lib/core/feature-guard.js +136 -0
- package/templates/static/lib/core/features.js +99 -0
- package/templates/static/lib/core/http.js +65 -36
- package/templates/static/lib/core/layouts/index.js +10 -0
- package/templates/static/lib/core/layouts/render.js +158 -0
- package/templates/static/lib/core/layouts/scan.js +112 -0
- package/templates/static/lib/core/layouts/types.js +1 -0
- package/templates/static/lib/core/lifecycle.js +129 -0
- package/templates/static/lib/core/loader-schema.js +81 -0
- package/templates/static/lib/core/middleware-hooks.js +86 -58
- package/templates/static/lib/core/paths.js +31 -16
- package/templates/static/lib/core/routes/advanced.js +114 -0
- package/templates/static/lib/core/routes/handlers.js +181 -0
- package/templates/static/lib/core/routes/match.js +129 -24
- package/templates/static/lib/core/routes/orchestrator.js +171 -0
- package/templates/static/lib/core/routes/rendering-config.js +131 -0
- package/templates/static/lib/core/routes/scan.js +174 -132
- package/templates/static/lib/core/types.js +0 -17
- package/templates/static/lib/css/compiler.js +63 -76
- package/templates/static/lib/data-fetching/cache.js +223 -0
- package/templates/static/lib/data-fetching/client.js +202 -0
- package/templates/static/lib/data-fetching/feature-guard.js +29 -0
- package/templates/static/lib/data-fetching/graphql.js +265 -0
- package/templates/static/lib/data-fetching/index.js +57 -0
- package/templates/static/lib/data-fetching/rest.js +256 -0
- package/templates/static/lib/data-fetching/server.js +182 -0
- package/templates/static/lib/data-fetching/types.js +5 -0
- package/templates/static/lib/db/connector.js +37 -28
- package/templates/static/lib/db/drivers/jdb.js +41 -56
- package/templates/static/lib/db/drivers/sql.js +152 -152
- package/templates/static/lib/db/index.js +42 -59
- package/templates/static/lib/db/types.js +0 -17
- package/templates/static/lib/devtools/component-tree.js +106 -0
- package/templates/static/lib/devtools/devtools.js +638 -0
- package/templates/static/lib/devtools/event-bus.js +29 -0
- package/templates/static/lib/devtools/event-logger.js +67 -0
- package/templates/static/lib/devtools/index.js +9 -0
- package/templates/static/lib/devtools/integration.js +149 -0
- package/templates/static/lib/devtools/performance.js +84 -0
- package/templates/static/lib/devtools/persistence.js +57 -0
- package/templates/static/lib/devtools/plugins.js +97 -0
- package/templates/static/lib/devtools/search.js +89 -0
- package/templates/static/lib/devtools/ui.js +769 -0
- package/templates/static/lib/features/api/handler.js +10 -0
- package/templates/static/lib/features/api/index.js +5 -0
- package/templates/static/lib/features/api/types.js +4 -0
- package/templates/static/lib/features/middleware/compiled.js +7 -0
- package/templates/static/lib/features/middleware/index.js +5 -0
- package/templates/static/lib/features/middleware/types.js +4 -0
- package/templates/static/lib/fonts/index.js +46 -0
- package/templates/static/lib/fonts/inject.js +125 -0
- package/templates/static/lib/fonts/loader.js +196 -0
- package/templates/static/lib/fonts/types.js +1 -0
- package/templates/static/lib/graphql/index.js +46 -16
- package/templates/static/lib/graphql/resolvers.js +42 -19
- package/templates/static/lib/graphql/schema.js +30 -15
- package/templates/static/lib/i18n/en.json +2 -2
- package/templates/static/lib/i18n/es.json +2 -2
- package/templates/static/lib/i18n/index.js +17 -29
- package/templates/static/lib/import/jen-import.js +130 -97
- package/templates/static/lib/index.js +82 -115
- package/templates/static/lib/jdb/engine.js +259 -160
- package/templates/static/lib/jdb/index.js +28 -13
- package/templates/static/lib/jdb/types.js +0 -17
- package/templates/static/lib/jdb/utils.js +159 -124
- package/templates/static/lib/middleware/builtins/cors.js +55 -64
- package/templates/static/lib/middleware/context.js +120 -46
- package/templates/static/lib/middleware/kernel.js +186 -31
- package/templates/static/lib/middleware/pipeline.js +140 -59
- package/templates/static/lib/middleware/registry.js +80 -36
- package/templates/static/lib/middleware/response.js +101 -54
- package/templates/static/lib/plugin/examples/analytics-plugin.js +183 -0
- package/templates/static/lib/plugin/examples/cdn-upload-plugin.js +94 -0
- package/templates/static/lib/plugin/loader.js +25 -48
- package/templates/static/lib/plugin/plugin-manager.js +177 -0
- package/templates/static/lib/plugin/types.js +28 -0
- package/templates/static/lib/runtime/client-runtime.js +19 -22
- package/templates/static/lib/runtime/hmr.js +23 -18
- package/templates/static/lib/runtime/hydrate.js +47 -37
- package/templates/static/lib/runtime/island-hydration-client.js +122 -108
- package/templates/static/lib/runtime/islands.js +92 -71
- package/templates/static/lib/runtime/render.js +385 -149
- package/templates/static/lib/security/security-config.js +60 -0
- package/templates/static/lib/security/security-middleware.js +229 -0
- package/templates/static/lib/server/api-routes.js +339 -171
- package/templates/static/lib/server/api.js +93 -109
- package/templates/static/lib/server/app.js +660 -270
- package/templates/static/lib/server/isr.js +365 -0
- package/templates/static/lib/server/runtimeServe.js +157 -89
- package/templates/static/lib/server/ssr.js +295 -0
- package/templates/static/lib/server-actions/handler.js +180 -0
- package/templates/static/lib/server-actions/index.js +19 -0
- package/templates/static/lib/server-actions/middleware.js +146 -0
- package/templates/static/lib/server-actions/scan.js +152 -0
- package/templates/static/lib/server-actions/types.js +1 -0
- package/templates/static/lib/server-actions/validators.js +156 -0
- package/templates/static/lib/shared/log.js +74 -25
- package/templates/static/lib/telemetry/api/rate-limiter.js +32 -0
- package/templates/static/lib/telemetry/api/validator.js +67 -0
- package/templates/static/lib/telemetry/client.js +121 -0
- package/templates/static/lib/telemetry/tests/rate-limiter.test.js +46 -0
- package/templates/static/lib/telemetry/tests/validator.test.js +62 -0
- package/templates/static/lib/vendor/glob/glob.js +4766 -0
- package/templates/static/lib/vendor/preact/preact.module.js +797 -0
- package/templates/static/lib/vendor/sass/sass.node.mjs +212 -0
- package/templates/static/package.json +4 -0
- package/templates/static/server.js +23 -25
- package/templates/static/site/(home).tsx +12 -12
- package/templates/static/site/styles/global.scss +89 -78
- package/templates/static/tsconfig.json +43 -39
- package/templates/static/.esbuild/jen.config.js +0 -1
- package/templates/static/lib/api/(hello).d.ts +0 -7
- package/templates/static/lib/auth/cookie-utils.d.ts +0 -24
- package/templates/static/lib/auth/jwt.d.ts +0 -2
- package/templates/static/lib/auth/session.d.ts +0 -44
- package/templates/static/lib/build/asset-hashing.d.ts +0 -10
- package/templates/static/lib/build/asset-manifest.d.ts +0 -11
- package/templates/static/lib/build/build.d.ts +0 -4
- package/templates/static/lib/build/minifier.d.ts +0 -20
- package/templates/static/lib/build/page-renderer.d.ts +0 -17
- package/templates/static/lib/build/production-build.d.ts +0 -10
- package/templates/static/lib/build/ssg-pipeline.d.ts +0 -15
- package/templates/static/lib/cache/index.d.ts +0 -2
- package/templates/static/lib/cache/memory.d.ts +0 -6
- package/templates/static/lib/cache/redis.d.ts +0 -6
- package/templates/static/lib/cli/banner.d.ts +0 -1
- package/templates/static/lib/compilers/svelte.d.ts +0 -18
- package/templates/static/lib/compilers/vue.d.ts +0 -15
- package/templates/static/lib/core/config.d.ts +0 -53
- package/templates/static/lib/core/http.d.ts +0 -3
- package/templates/static/lib/core/middleware-hooks.d.ts +0 -46
- package/templates/static/lib/core/paths.d.ts +0 -6
- package/templates/static/lib/core/routes/match.d.ts +0 -6
- package/templates/static/lib/core/routes/scan.d.ts +0 -9
- package/templates/static/lib/core/types.d.ts +0 -18
- package/templates/static/lib/css/compiler.d.ts +0 -20
- package/templates/static/lib/db/connector.d.ts +0 -4
- package/templates/static/lib/db/drivers/jdb.d.ts +0 -13
- package/templates/static/lib/db/drivers/sql.d.ts +0 -18
- package/templates/static/lib/db/index.d.ts +0 -19
- package/templates/static/lib/db/types.d.ts +0 -29
- package/templates/static/lib/graphql/index.d.ts +0 -1
- package/templates/static/lib/graphql/resolvers.d.ts +0 -17
- package/templates/static/lib/graphql/schema.d.ts +0 -1
- package/templates/static/lib/i18n/index.d.ts +0 -8
- package/templates/static/lib/import/jen-import.d.ts +0 -27
- package/templates/static/lib/jdb/engine.d.ts +0 -9
- package/templates/static/lib/jdb/index.d.ts +0 -2
- package/templates/static/lib/jdb/types.d.ts +0 -46
- package/templates/static/lib/jdb/utils.d.ts +0 -6
- package/templates/static/lib/middleware/builtins/body-parser.d.ts +0 -1
- package/templates/static/lib/middleware/builtins/body-parser.js +0 -55
- package/templates/static/lib/middleware/builtins/cors.d.ts +0 -13
- package/templates/static/lib/middleware/builtins/logger.d.ts +0 -1
- package/templates/static/lib/middleware/builtins/logger.js +0 -33
- package/templates/static/lib/middleware/builtins/rate-limit.d.ts +0 -5
- package/templates/static/lib/middleware/builtins/rate-limit.js +0 -76
- package/templates/static/lib/middleware/builtins/request-id.d.ts +0 -1
- package/templates/static/lib/middleware/builtins/request-id.js +0 -25
- package/templates/static/lib/middleware/builtins/security-headers.d.ts +0 -1
- package/templates/static/lib/middleware/builtins/security-headers.js +0 -39
- package/templates/static/lib/middleware/context.d.ts +0 -18
- package/templates/static/lib/middleware/decorators.d.ts +0 -2
- package/templates/static/lib/middleware/decorators.js +0 -61
- package/templates/static/lib/middleware/errors/handler.js +0 -65
- package/templates/static/lib/middleware/errors/http-error.d.ts +0 -5
- package/templates/static/lib/middleware/errors/http-error.js +0 -27
- package/templates/static/lib/middleware/kernel.d.ts +0 -6
- package/templates/static/lib/middleware/pipeline.d.ts +0 -4
- package/templates/static/lib/middleware/registry.d.ts +0 -10
- package/templates/static/lib/middleware/response.d.ts +0 -13
- package/templates/static/lib/middleware/types.js +0 -18
- package/templates/static/lib/middleware/utils/matcher.js +0 -31
- package/templates/static/lib/native/bundle.d.ts +0 -19
- package/templates/static/lib/native/bundle.js +0 -39
- package/templates/static/lib/native/dev-server.d.ts +0 -6
- package/templates/static/lib/native/dev-server.js +0 -38
- package/templates/static/lib/native/index.js +0 -48
- package/templates/static/lib/native/optimizer.d.ts +0 -17
- package/templates/static/lib/native/optimizer.js +0 -37
- package/templates/static/lib/native/style-compiler.d.ts +0 -10
- package/templates/static/lib/native/style-compiler.js +0 -36
- package/templates/static/lib/plugin/loader.d.ts +0 -8
- package/templates/static/lib/runtime/client-runtime.d.ts +0 -1
- package/templates/static/lib/runtime/hmr.d.ts +0 -1
- package/templates/static/lib/runtime/hydrate.d.ts +0 -1
- package/templates/static/lib/runtime/island-hydration-client.d.ts +0 -5
- package/templates/static/lib/runtime/islands.d.ts +0 -46
- package/templates/static/lib/runtime/render.d.ts +0 -13
- package/templates/static/lib/server/api-routes.d.ts +0 -44
- package/templates/static/lib/server/app.d.ts +0 -10
- package/templates/static/lib/server/runtimeServe.d.ts +0 -4
- package/templates/static/lib/shared/log.d.ts +0 -5
- 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/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
- /package/templates/{static → ssr-isr}/lib/auth/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/cli/templates/ssg/jen.config.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/cli/templates/ssg/site/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/cli/templates/ssr/jen.config.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/cli/templates/ssr/site/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/compilers/esbuild-plugins.d.ts +0 -0
- /package/templates/{static/lib/middleware/types.d.ts → ssr-isr/lib/core/config.js} +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/errors/handler.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/utils/matcher.d.ts +0 -0
- /package/templates/static/{node_modules → lib/vendor}/preact/LICENSE +0 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import fs from "fs/promises";
|
|
2
|
+
import crypto from "crypto";
|
|
3
|
+
/**
|
|
4
|
+
* Ensure a directory exists, creating it recursively if necessary.
|
|
5
|
+
* Idempotent: does not throw if the directory already exists.
|
|
6
|
+
*
|
|
7
|
+
* @param dir Directory path to ensure exists.
|
|
8
|
+
* @throws Error if directory creation fails.
|
|
9
|
+
*/
|
|
10
|
+
export async function ensureDir(dir) {
|
|
11
|
+
try {
|
|
12
|
+
await fs.access(dir);
|
|
13
|
+
} catch {
|
|
14
|
+
await fs.mkdir(dir, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Read and parse a JSON file from disk.
|
|
19
|
+
* Returns null if the file does not exist (ENOENT).
|
|
20
|
+
* Other errors (invalid JSON, permission denied, etc.) are re-thrown.
|
|
21
|
+
*
|
|
22
|
+
* @template T The expected JSON structure type.
|
|
23
|
+
* @param file Path to the JSON file to read.
|
|
24
|
+
* @returns Parsed JSON data, or null if file does not exist.
|
|
25
|
+
* @throws Error if the file exists but cannot be read or parsed.
|
|
26
|
+
*/
|
|
27
|
+
export async function readJSON(file) {
|
|
28
|
+
try {
|
|
29
|
+
const data = await fs.readFile(file, "utf-8");
|
|
30
|
+
return JSON.parse(data);
|
|
31
|
+
} catch (e) {
|
|
32
|
+
if (e.code === "ENOENT") return null;
|
|
33
|
+
throw e;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Write data as JSON to a file atomically using a temporary file.
|
|
38
|
+
* Atomic writes prevent corruption if the process crashes during writing.
|
|
39
|
+
* The temporary file is renamed to the target file only after writing completes successfully.
|
|
40
|
+
*
|
|
41
|
+
* @param file Path to the target file (will be created or overwritten).
|
|
42
|
+
* @param data Object to serialize as JSON with pretty-printing (2-space indent).
|
|
43
|
+
* @throws Error if writing or renaming fails.
|
|
44
|
+
*/
|
|
45
|
+
export async function writeJSON(file, data) {
|
|
46
|
+
const tempFile = `${file}.tmp`;
|
|
47
|
+
await fs.writeFile(tempFile, JSON.stringify(data, null, 2));
|
|
48
|
+
await fs.rename(tempFile, file);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Generate a unique identifier for a new document.
|
|
52
|
+
* Uses cryptographically secure UUID v4 generation.
|
|
53
|
+
*
|
|
54
|
+
* @returns A UUID string suitable for use as a document _id.
|
|
55
|
+
*/
|
|
56
|
+
export function generateId() {
|
|
57
|
+
return crypto.randomUUID();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Test whether a document matches a filter query.
|
|
61
|
+
* Supports MongoDB-like query syntax including operators ($eq, $ne, $gt, etc.) and logical operators ($or, $and).
|
|
62
|
+
* Processes each field condition and returns false if any condition fails (AND semantics).
|
|
63
|
+
* Logical operators $or and $and are processed separately with their respective semantics.
|
|
64
|
+
*
|
|
65
|
+
* @param doc The document to test.
|
|
66
|
+
* @param filter The filter query to apply.
|
|
67
|
+
* @returns True if the document matches all filter conditions, false otherwise.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* matchFilter({ name: 'John', age: 30 }, { name: 'John' }) // true
|
|
71
|
+
* matchFilter({ age: 25 }, { age: { $gte: 18 } }) // true
|
|
72
|
+
* matchFilter({ name: 'Jane' }, { $or: [{ name: 'John' }, { name: 'Jane' }] }) // true
|
|
73
|
+
*/
|
|
74
|
+
export function matchFilter(doc, filter) {
|
|
75
|
+
for (const key in filter) {
|
|
76
|
+
if (key === "$or") {
|
|
77
|
+
// OR: at least one filter must match
|
|
78
|
+
if (!filter.$or.some((f) => matchFilter(doc, f))) return false;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (key === "$and") {
|
|
82
|
+
// AND: all filters must match
|
|
83
|
+
if (!filter.$and.every((f) => matchFilter(doc, f))) return false;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const val = doc[key];
|
|
87
|
+
const cond = filter[key];
|
|
88
|
+
// If condition is an object (not array), it contains operators
|
|
89
|
+
if (typeof cond === "object" && cond !== null && !Array.isArray(cond)) {
|
|
90
|
+
for (const op in cond) {
|
|
91
|
+
const target = cond[op];
|
|
92
|
+
switch (op) {
|
|
93
|
+
case "$eq":
|
|
94
|
+
if (val !== target) return false;
|
|
95
|
+
break;
|
|
96
|
+
case "$ne":
|
|
97
|
+
if (val === target) return false;
|
|
98
|
+
break;
|
|
99
|
+
case "$gt":
|
|
100
|
+
if (!(val > target)) return false;
|
|
101
|
+
break;
|
|
102
|
+
case "$gte":
|
|
103
|
+
if (!(val >= target)) return false;
|
|
104
|
+
break;
|
|
105
|
+
case "$lt":
|
|
106
|
+
if (!(val < target)) return false;
|
|
107
|
+
break;
|
|
108
|
+
case "$lte":
|
|
109
|
+
if (!(val <= target)) return false;
|
|
110
|
+
break;
|
|
111
|
+
case "$in":
|
|
112
|
+
if (!target.includes(val)) return false;
|
|
113
|
+
break;
|
|
114
|
+
case "$nin":
|
|
115
|
+
if (target.includes(val)) return false;
|
|
116
|
+
break;
|
|
117
|
+
case "$regex":
|
|
118
|
+
if (!new RegExp(target).test(val)) return false;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
} else {
|
|
123
|
+
// Simple equality check
|
|
124
|
+
if (val !== cond) return false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Apply update operators to a document, modifying it in place.
|
|
131
|
+
* Automatically updates the _updated timestamp to the current time.
|
|
132
|
+
* Supports $set, $unset, $inc, $push, and $pull operators.
|
|
133
|
+
*
|
|
134
|
+
* @param doc The document to update (modified in place).
|
|
135
|
+
* @param update Update specification with operators.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* const doc = { name: 'John', age: 30, tags: ['js'] };
|
|
139
|
+
* applyUpdate(doc, { $set: { name: 'Jane' }, $inc: { age: 1 }, $push: { tags: 'ts' } });
|
|
140
|
+
* // doc is now { name: 'Jane', age: 31, tags: ['js', 'ts'], _updated: <current-timestamp> }
|
|
141
|
+
*/
|
|
142
|
+
export function applyUpdate(doc, update) {
|
|
143
|
+
const now = Date.now();
|
|
144
|
+
doc._updated = now;
|
|
145
|
+
for (const op in update) {
|
|
146
|
+
const fields = update[op];
|
|
147
|
+
for (const key in fields) {
|
|
148
|
+
const val = fields[key];
|
|
149
|
+
switch (op) {
|
|
150
|
+
case "$set":
|
|
151
|
+
// Set field to the specified value
|
|
152
|
+
doc[key] = val;
|
|
153
|
+
break;
|
|
154
|
+
case "$unset":
|
|
155
|
+
// Remove the field from the document
|
|
156
|
+
delete doc[key];
|
|
157
|
+
break;
|
|
158
|
+
case "$inc":
|
|
159
|
+
// Increment numeric field by the specified amount
|
|
160
|
+
doc[key] = (doc[key] || 0) + val;
|
|
161
|
+
break;
|
|
162
|
+
case "$push":
|
|
163
|
+
// Append to array (create array if doesn't exist)
|
|
164
|
+
if (!Array.isArray(doc[key])) doc[key] = [];
|
|
165
|
+
doc[key].push(val);
|
|
166
|
+
break;
|
|
167
|
+
case "$pull":
|
|
168
|
+
// Remove all occurrences of value from array
|
|
169
|
+
if (Array.isArray(doc[key])) {
|
|
170
|
+
doc[key] = doc[key].filter((item) => item !== val);
|
|
171
|
+
}
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request body parsing middleware.
|
|
3
|
+
* Reads and parses the request body based on Content-Type header.
|
|
4
|
+
* Supports JSON, URL-encoded form data, and plain text.
|
|
5
|
+
*
|
|
6
|
+
* GET and HEAD requests are passed through without parsing since they have no body.
|
|
7
|
+
* Parsed body is available in ctx.body. If parsing fails, the raw string is stored
|
|
8
|
+
* and an error message is attached to ctx.parseError for error handling downstream.
|
|
9
|
+
*
|
|
10
|
+
* @returns Middleware function.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* kernel.use(bodyParser);
|
|
14
|
+
* // ctx.body is now populated with parsed request body
|
|
15
|
+
*/
|
|
16
|
+
export function bodyParser(ctx: any, next: any): Promise<any>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request body parsing middleware.
|
|
3
|
+
* Reads and parses the request body based on Content-Type header.
|
|
4
|
+
* Supports JSON, URL-encoded form data, and plain text.
|
|
5
|
+
*
|
|
6
|
+
* GET and HEAD requests are passed through without parsing since they have no body.
|
|
7
|
+
* Parsed body is available in ctx.body. If parsing fails, the raw string is stored
|
|
8
|
+
* and an error message is attached to ctx.parseError for error handling downstream.
|
|
9
|
+
*
|
|
10
|
+
* @returns Middleware function.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* kernel.use(bodyParser);
|
|
14
|
+
* // ctx.body is now populated with parsed request body
|
|
15
|
+
*/
|
|
16
|
+
export async function bodyParser(ctx, next) {
|
|
17
|
+
// GET and HEAD requests have no body; skip parsing
|
|
18
|
+
if (ctx.req.method === "GET" || ctx.req.method === "HEAD") {
|
|
19
|
+
return next();
|
|
20
|
+
}
|
|
21
|
+
// Collect all data chunks from the request stream
|
|
22
|
+
const chunks = [];
|
|
23
|
+
await new Promise((resolve, reject) => {
|
|
24
|
+
ctx.req.on("data", (chunk) => chunks.push(chunk));
|
|
25
|
+
ctx.req.on("end", () => {
|
|
26
|
+
const data = Buffer.concat(chunks).toString();
|
|
27
|
+
const contentType = ctx.req.headers["content-type"] || "";
|
|
28
|
+
try {
|
|
29
|
+
// Parse based on Content-Type header
|
|
30
|
+
if (contentType.includes("application/json")) {
|
|
31
|
+
// Parse JSON, allowing empty bodies
|
|
32
|
+
if (!data || data.trim() === "") {
|
|
33
|
+
ctx.body = {};
|
|
34
|
+
} else {
|
|
35
|
+
ctx.body = JSON.parse(data);
|
|
36
|
+
}
|
|
37
|
+
} else if (contentType.includes("application/x-www-form-urlencoded")) {
|
|
38
|
+
// Parse URL-encoded form data as URLSearchParams
|
|
39
|
+
ctx.body = new URLSearchParams(data);
|
|
40
|
+
} else {
|
|
41
|
+
// Store raw string for other content types
|
|
42
|
+
ctx.body = data;
|
|
43
|
+
}
|
|
44
|
+
} catch (e) {
|
|
45
|
+
// On parse error, store the error and fall back to raw string
|
|
46
|
+
const error = e instanceof Error ? e.message : String(e);
|
|
47
|
+
console.error("Body parser error:", error);
|
|
48
|
+
ctx.parseError = error;
|
|
49
|
+
ctx.body = data; // Raw string on failure
|
|
50
|
+
}
|
|
51
|
+
resolve();
|
|
52
|
+
});
|
|
53
|
+
ctx.req.on("error", reject);
|
|
54
|
+
});
|
|
55
|
+
await next();
|
|
56
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CORS middleware with security defaults
|
|
3
|
+
* Prevents insecure origin sharing with credentials
|
|
4
|
+
*/
|
|
5
|
+
interface CORSOptions {
|
|
6
|
+
origin?: string | string[] | ((origin: string) => boolean) | "*";
|
|
7
|
+
methods?: string[];
|
|
8
|
+
allowedHeaders?: string[];
|
|
9
|
+
credentials?: boolean;
|
|
10
|
+
maxAge?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function cors(
|
|
13
|
+
options?: CORSOptions,
|
|
14
|
+
): (ctx: any, next: () => Promise<void>) => Promise<void>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export function cors(options = {}) {
|
|
2
|
+
const defaults = {
|
|
3
|
+
origin: ["http://localhost:3000", "http://localhost:5173"],
|
|
4
|
+
methods: ["GET", "HEAD", "PUT", "PATCH", "POST", "DELETE"],
|
|
5
|
+
allowedHeaders: ["Content-Type", "Authorization"],
|
|
6
|
+
credentials: false, // Changed: credentials should be false with CORS by default for security
|
|
7
|
+
maxAge: 86400,
|
|
8
|
+
};
|
|
9
|
+
const opts = { ...defaults, ...options };
|
|
10
|
+
return async (ctx, next) => {
|
|
11
|
+
const origin = ctx.req.headers.origin;
|
|
12
|
+
// Validate origin against whitelist
|
|
13
|
+
let allowOrigin = false;
|
|
14
|
+
if (Array.isArray(opts.origin)) {
|
|
15
|
+
allowOrigin = origin && opts.origin.includes(origin);
|
|
16
|
+
} else if (typeof opts.origin === "function") {
|
|
17
|
+
allowOrigin = origin && opts.origin(origin);
|
|
18
|
+
} else if (opts.origin === "*") {
|
|
19
|
+
// DANGEROUS: only use with credentials: false
|
|
20
|
+
if (opts.credentials) {
|
|
21
|
+
console.warn(
|
|
22
|
+
"SECURITY WARNING: CORS origin '*' with credentials=true is insecure. Origin set to empty.",
|
|
23
|
+
);
|
|
24
|
+
allowOrigin = false;
|
|
25
|
+
} else {
|
|
26
|
+
allowOrigin = true;
|
|
27
|
+
}
|
|
28
|
+
} else if (opts.origin === origin) {
|
|
29
|
+
allowOrigin = true;
|
|
30
|
+
}
|
|
31
|
+
if (allowOrigin && origin) {
|
|
32
|
+
ctx.response.header("Access-Control-Allow-Origin", origin);
|
|
33
|
+
}
|
|
34
|
+
if (opts.credentials) {
|
|
35
|
+
ctx.response.header("Access-Control-Allow-Credentials", "true");
|
|
36
|
+
}
|
|
37
|
+
if (ctx.req.method === "OPTIONS") {
|
|
38
|
+
ctx.response.header(
|
|
39
|
+
"Access-Control-Allow-Methods",
|
|
40
|
+
opts.methods?.join(","),
|
|
41
|
+
);
|
|
42
|
+
ctx.response.header(
|
|
43
|
+
"Access-Control-Allow-Headers",
|
|
44
|
+
opts.allowedHeaders?.join(","),
|
|
45
|
+
);
|
|
46
|
+
if (opts.maxAge) {
|
|
47
|
+
ctx.response.header("Access-Control-Max-Age", opts.maxAge);
|
|
48
|
+
}
|
|
49
|
+
ctx.response.status(204).send();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
await next();
|
|
53
|
+
};
|
|
54
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware that logs HTTP requests and responses with timing information.
|
|
3
|
+
* Records the request method and path on entry, then logs the status code and elapsed time on exit.
|
|
4
|
+
* If a request ID is set in ctx.state.requestId (typically by request-id middleware),
|
|
5
|
+
* it is included in log lines for request tracing.
|
|
6
|
+
*
|
|
7
|
+
* This middleware should be registered early in the middleware chain to capture timing
|
|
8
|
+
* for all downstream handlers.
|
|
9
|
+
*
|
|
10
|
+
* Log format:
|
|
11
|
+
* - Request: "[requestId] -> METHOD /path"
|
|
12
|
+
* - Response: "[requestId] <- METHOD /path 200 (45.32ms)"
|
|
13
|
+
*
|
|
14
|
+
* @returns Middleware function.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* kernel.use(logger);
|
|
18
|
+
*/
|
|
19
|
+
export function logger(ctx: any, next: any): Promise<void>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { log } from "../../shared/log.js";
|
|
2
|
+
/**
|
|
3
|
+
* Middleware that logs HTTP requests and responses with timing information.
|
|
4
|
+
* Records the request method and path on entry, then logs the status code and elapsed time on exit.
|
|
5
|
+
* If a request ID is set in ctx.state.requestId (typically by request-id middleware),
|
|
6
|
+
* it is included in log lines for request tracing.
|
|
7
|
+
*
|
|
8
|
+
* This middleware should be registered early in the middleware chain to capture timing
|
|
9
|
+
* for all downstream handlers.
|
|
10
|
+
*
|
|
11
|
+
* Log format:
|
|
12
|
+
* - Request: "[requestId] -> METHOD /path"
|
|
13
|
+
* - Response: "[requestId] <- METHOD /path 200 (45.32ms)"
|
|
14
|
+
*
|
|
15
|
+
* @returns Middleware function.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* kernel.use(logger);
|
|
19
|
+
*/
|
|
20
|
+
export async function logger(ctx, next) {
|
|
21
|
+
const start = performance.now();
|
|
22
|
+
// Log request entry with method and URL.
|
|
23
|
+
const method = ctx.req.method;
|
|
24
|
+
const url = ctx.url.pathname;
|
|
25
|
+
const id = ctx.state.requestId ? `[${ctx.state.requestId}]` : "";
|
|
26
|
+
log.info(`${id} -> ${method} ${url}`);
|
|
27
|
+
try {
|
|
28
|
+
await next();
|
|
29
|
+
} finally {
|
|
30
|
+
// Log response exit with status and elapsed time.
|
|
31
|
+
const ms = (performance.now() - start).toFixed(2);
|
|
32
|
+
log.info(`${id} <- ${method} ${url} ${ctx.res.statusCode} (${ms}ms)`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate limiting middleware that protects against brute force and DDoS attacks.
|
|
3
|
+
* Tracks request count per client IP within a time window and rejects excess requests.
|
|
4
|
+
* Uses in-memory storage, suitable for single-server deployments; use Redis for distributed systems.
|
|
5
|
+
*
|
|
6
|
+
* Automatically cleans up expired records every minute to prevent memory leaks.
|
|
7
|
+
* Respects X-Forwarded-For header for deployments behind a proxy or load balancer.
|
|
8
|
+
*
|
|
9
|
+
* @param options Rate limiting configuration.
|
|
10
|
+
* @param options.windowMs Time window in milliseconds (default: 15 minutes).
|
|
11
|
+
* @param options.max Maximum requests per IP per window (default: 100).
|
|
12
|
+
* @param options.message Error message sent to rate-limited clients (default: "Too many requests...").
|
|
13
|
+
* @param options.statusCode HTTP status for rate-limited responses (default: 429 Too Many Requests).
|
|
14
|
+
* @returns Middleware function.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* kernel.use(rateLimit({
|
|
18
|
+
* windowMs: 15 * 60 * 1000,
|
|
19
|
+
* max: 100
|
|
20
|
+
* }));
|
|
21
|
+
*/
|
|
22
|
+
export function rateLimit(options?: {}): (ctx: any, next: any) => Promise<void>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate limiting middleware that protects against brute force and DDoS attacks.
|
|
3
|
+
* Tracks request count per client IP within a time window and rejects excess requests.
|
|
4
|
+
* Uses in-memory storage, suitable for single-server deployments; use Redis for distributed systems.
|
|
5
|
+
*
|
|
6
|
+
* Automatically cleans up expired records every minute to prevent memory leaks.
|
|
7
|
+
* Respects X-Forwarded-For header for deployments behind a proxy or load balancer.
|
|
8
|
+
*
|
|
9
|
+
* @param options Rate limiting configuration.
|
|
10
|
+
* @param options.windowMs Time window in milliseconds (default: 15 minutes).
|
|
11
|
+
* @param options.max Maximum requests per IP per window (default: 100).
|
|
12
|
+
* @param options.message Error message sent to rate-limited clients (default: "Too many requests...").
|
|
13
|
+
* @param options.statusCode HTTP status for rate-limited responses (default: 429 Too Many Requests).
|
|
14
|
+
* @returns Middleware function.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* kernel.use(rateLimit({
|
|
18
|
+
* windowMs: 15 * 60 * 1000,
|
|
19
|
+
* max: 100
|
|
20
|
+
* }));
|
|
21
|
+
*/
|
|
22
|
+
export function rateLimit(options = {}) {
|
|
23
|
+
const defaults = {
|
|
24
|
+
windowMs: 15 * 60 * 1000, // 15 minutes.
|
|
25
|
+
max: 100, // 100 requests per window.
|
|
26
|
+
message: "Too many requests, please try again later.",
|
|
27
|
+
statusCode: 429,
|
|
28
|
+
};
|
|
29
|
+
const opts = { ...defaults, ...options };
|
|
30
|
+
// In-memory store mapping IP addresses to request records.
|
|
31
|
+
const hits = new Map();
|
|
32
|
+
// Cleanup old records every minute to prevent memory leak.
|
|
33
|
+
// Records outside their window are garbage collected.
|
|
34
|
+
const cleanupInterval = setInterval(() => {
|
|
35
|
+
const now = Date.now();
|
|
36
|
+
for (const [key, record] of hits.entries()) {
|
|
37
|
+
if (now > record.resetTime) {
|
|
38
|
+
hits.delete(key);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}, 60 * 1000);
|
|
42
|
+
return async (ctx, next) => {
|
|
43
|
+
// Extract the client IP address. Check X-Forwarded-For header for proxied requests.
|
|
44
|
+
let ip = ctx.req.headers["x-forwarded-for"];
|
|
45
|
+
if (typeof ip === "string") {
|
|
46
|
+
ip = ip.split(",")[0].trim(); // Get first IP if multiple are listed.
|
|
47
|
+
} else {
|
|
48
|
+
ip = ctx.req.socket.remoteAddress || "unknown";
|
|
49
|
+
}
|
|
50
|
+
const now = Date.now();
|
|
51
|
+
let record = hits.get(ip);
|
|
52
|
+
// Initialize or reset the request record if the window has expired.
|
|
53
|
+
if (!record || now > record.resetTime) {
|
|
54
|
+
record = {
|
|
55
|
+
count: 0,
|
|
56
|
+
resetTime: now + opts.windowMs,
|
|
57
|
+
firstRequest: now,
|
|
58
|
+
};
|
|
59
|
+
hits.set(ip, record);
|
|
60
|
+
}
|
|
61
|
+
record.count++;
|
|
62
|
+
const remaining = opts.max - record.count;
|
|
63
|
+
// Set standard rate-limit headers following GitHub API conventions.
|
|
64
|
+
ctx.response.header("RateLimit-Limit", opts.max);
|
|
65
|
+
ctx.response.header("RateLimit-Remaining", Math.max(0, remaining));
|
|
66
|
+
ctx.response.header("RateLimit-Reset", Math.ceil(record.resetTime / 1000));
|
|
67
|
+
if (record.count > opts.max) {
|
|
68
|
+
// Rate limit exceeded. Respond with retry-after header and error message.
|
|
69
|
+
const retryAfter = Math.ceil((record.resetTime - now) / 1000);
|
|
70
|
+
ctx.response.header("Retry-After", retryAfter);
|
|
71
|
+
ctx.response.status(opts.statusCode).json({
|
|
72
|
+
error: opts.message,
|
|
73
|
+
retryAfter,
|
|
74
|
+
});
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
await next();
|
|
78
|
+
};
|
|
79
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request ID middleware that assigns unique identifiers to incoming requests.
|
|
3
|
+
* Enables request tracing and correlation across logs and API calls.
|
|
4
|
+
*
|
|
5
|
+
* If the client provides an X-Request-ID header, that ID is used. Otherwise, a new UUID is generated.
|
|
6
|
+
* The request ID is attached to both the response header (for client visibility) and ctx.state
|
|
7
|
+
* (for other middleware like logger to use in log entries).
|
|
8
|
+
*
|
|
9
|
+
* This middleware should be registered early in the chain to ensure all downstream handlers
|
|
10
|
+
* have access to the request ID.
|
|
11
|
+
*
|
|
12
|
+
* @returns Middleware function.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* kernel.use(requestId);
|
|
16
|
+
* // All requests now have a unique X-Request-ID header
|
|
17
|
+
* // Available in ctx.state.requestId for logging and tracing
|
|
18
|
+
*/
|
|
19
|
+
export function requestId(ctx: any, next: any): Promise<void>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Request ID middleware that assigns unique identifiers to incoming requests.
|
|
4
|
+
* Enables request tracing and correlation across logs and API calls.
|
|
5
|
+
*
|
|
6
|
+
* If the client provides an X-Request-ID header, that ID is used. Otherwise, a new UUID is generated.
|
|
7
|
+
* The request ID is attached to both the response header (for client visibility) and ctx.state
|
|
8
|
+
* (for other middleware like logger to use in log entries).
|
|
9
|
+
*
|
|
10
|
+
* This middleware should be registered early in the chain to ensure all downstream handlers
|
|
11
|
+
* have access to the request ID.
|
|
12
|
+
*
|
|
13
|
+
* @returns Middleware function.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* kernel.use(requestId);
|
|
17
|
+
* // All requests now have a unique X-Request-ID header
|
|
18
|
+
* // Available in ctx.state.requestId for logging and tracing
|
|
19
|
+
*/
|
|
20
|
+
export async function requestId(ctx, next) {
|
|
21
|
+
// Use client-provided request ID if available (supports request tracing across service boundaries)
|
|
22
|
+
// Otherwise generate a new UUID for this request
|
|
23
|
+
const id = ctx.req.headers["x-request-id"] || randomUUID();
|
|
24
|
+
// Set response header so client can track the request
|
|
25
|
+
ctx.response.header("X-Request-ID", id);
|
|
26
|
+
// Attach to context state for access by other middleware (especially logger)
|
|
27
|
+
ctx.state.requestId = id;
|
|
28
|
+
await next();
|
|
29
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security headers middleware that sets HTTP response headers for defense against common attacks.
|
|
3
|
+
* Implements a comprehensive security policy including:
|
|
4
|
+
* - Clickjacking protection (X-Frame-Options)
|
|
5
|
+
* - MIME type sniffing protection (X-Content-Type-Options)
|
|
6
|
+
* - XSS protection (X-XSS-Protection, Content-Security-Policy)
|
|
7
|
+
* - HTTPS enforcement (Strict-Transport-Security)
|
|
8
|
+
* - Referrer policy (Referrer-Policy)
|
|
9
|
+
* - Feature permissions (Permissions-Policy)
|
|
10
|
+
*
|
|
11
|
+
* CSP is configured permissively to work with most applications.
|
|
12
|
+
* Adjust directives based on your application's needs (inline scripts, external resources, etc.).
|
|
13
|
+
*
|
|
14
|
+
* @returns Middleware function.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* kernel.use(securityHeaders);
|
|
18
|
+
*/
|
|
19
|
+
export function securityHeaders(ctx: any, next: any): Promise<void>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security headers middleware that sets HTTP response headers for defense against common attacks.
|
|
3
|
+
* Implements a comprehensive security policy including:
|
|
4
|
+
* - Clickjacking protection (X-Frame-Options)
|
|
5
|
+
* - MIME type sniffing protection (X-Content-Type-Options)
|
|
6
|
+
* - XSS protection (X-XSS-Protection, Content-Security-Policy)
|
|
7
|
+
* - HTTPS enforcement (Strict-Transport-Security)
|
|
8
|
+
* - Referrer policy (Referrer-Policy)
|
|
9
|
+
* - Feature permissions (Permissions-Policy)
|
|
10
|
+
*
|
|
11
|
+
* CSP is configured permissively to work with most applications.
|
|
12
|
+
* Adjust directives based on your application's needs (inline scripts, external resources, etc.).
|
|
13
|
+
*
|
|
14
|
+
* @returns Middleware function.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* kernel.use(securityHeaders);
|
|
18
|
+
*/
|
|
19
|
+
export async function securityHeaders(ctx, next) {
|
|
20
|
+
// Prevent DNS prefetch to reduce information leakage about visited sites.
|
|
21
|
+
ctx.response.header("X-DNS-Prefetch-Control", "off");
|
|
22
|
+
// Clickjacking protection. DENY prevents the page from being framed by any site.
|
|
23
|
+
ctx.response.header("X-Frame-Options", "DENY");
|
|
24
|
+
// HTTPS enforcement via HSTS. Tells browsers to always use HTTPS for this domain.
|
|
25
|
+
// max-age: 1 year, includeSubDomains: apply to all subdomains, preload: allow browser preload lists.
|
|
26
|
+
ctx.response.header(
|
|
27
|
+
"Strict-Transport-Security",
|
|
28
|
+
"max-age=31536000; includeSubDomains; preload",
|
|
29
|
+
);
|
|
30
|
+
// Prevent IE from opening files in unexpected applications.
|
|
31
|
+
ctx.response.header("X-Download-Options", "noopen");
|
|
32
|
+
// MIME type sniffing protection. Forces browsers to respect Content-Type header.
|
|
33
|
+
ctx.response.header("X-Content-Type-Options", "nosniff");
|
|
34
|
+
// XSS protection for older browsers that support X-XSS-Protection.
|
|
35
|
+
// Modern browsers use CSP instead, but this provides backward compatibility.
|
|
36
|
+
ctx.response.header("X-XSS-Protection", "1; mode=block");
|
|
37
|
+
// Referrer policy controls how much referrer information is sent to external sites.
|
|
38
|
+
ctx.response.header("Referrer-Policy", "strict-origin-when-cross-origin");
|
|
39
|
+
// Content Security Policy restricts which scripts, styles, and resources can load.
|
|
40
|
+
// This configuration allows self-origin for scripts and connect, includes unsafe-inline for styles.
|
|
41
|
+
// Adjust directives based on your application's needs (e.g., external CDNs, external APIs).
|
|
42
|
+
ctx.response.header(
|
|
43
|
+
"Content-Security-Policy",
|
|
44
|
+
"default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';",
|
|
45
|
+
);
|
|
46
|
+
// Permissions Policy (formerly Feature Policy) disables access to sensitive browser APIs.
|
|
47
|
+
// Disable: accelerometer, camera, geolocation, microphone, payment, etc.
|
|
48
|
+
ctx.response.header(
|
|
49
|
+
"Permissions-Policy",
|
|
50
|
+
"accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()",
|
|
51
|
+
);
|
|
52
|
+
await next();
|
|
53
|
+
}
|