create-jen-app 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/colors.js +92 -0
- package/dist/create.js +167 -0
- package/dist/generator.js +149 -0
- package/dist/index.js +5 -71
- package/package.json +12 -6
- package/templates/static/.esbuild/jen.config.js +0 -1
- package/templates/static/README.md +67 -0
- package/templates/static/build.js +28 -8
- package/templates/static/jen.config.ts +102 -9
- package/templates/static/jenjs.d.ts +33 -15
- package/templates/static/lib/api/(hello).d.ts +7 -0
- package/templates/static/lib/api/(hello).js +26 -0
- package/templates/static/lib/auth/cookie-utils.d.ts +24 -0
- package/templates/static/lib/auth/cookie-utils.js +99 -0
- package/templates/static/lib/auth/index.d.ts +2 -0
- package/templates/static/lib/auth/index.js +19 -0
- package/templates/static/lib/auth/jwt.d.ts +2 -0
- package/templates/static/lib/auth/jwt.js +30 -0
- package/templates/static/lib/auth/session.d.ts +44 -0
- package/templates/static/lib/auth/session.js +111 -0
- package/templates/static/lib/build/asset-hashing.d.ts +10 -0
- package/templates/static/lib/build/asset-hashing.js +42 -0
- package/templates/static/lib/build/asset-manifest.d.ts +11 -0
- package/templates/static/lib/build/asset-manifest.js +38 -0
- package/templates/static/lib/build/build.d.ts +4 -0
- package/templates/static/lib/build/build.js +113 -0
- package/templates/static/lib/build/island-hydration.d.ts +25 -0
- package/templates/static/lib/build/island-hydration.js +62 -0
- package/templates/static/lib/build/minifier.d.ts +20 -0
- package/templates/static/lib/build/minifier.js +65 -0
- package/templates/static/lib/build/page-renderer.d.ts +17 -0
- package/templates/static/lib/build/page-renderer.js +45 -0
- package/templates/static/lib/build/production-build.d.ts +10 -0
- package/templates/static/lib/build/production-build.js +30 -0
- package/templates/static/lib/build/ssg-pipeline.d.ts +15 -0
- package/templates/static/lib/build/ssg-pipeline.js +119 -0
- package/templates/static/lib/build-tools/build-site.d.ts +6 -0
- package/templates/static/lib/build-tools/build-site.js +56 -0
- package/templates/static/lib/cache/index.d.ts +2 -0
- package/templates/static/lib/cache/index.js +19 -0
- package/templates/static/lib/cache/memory.d.ts +6 -0
- package/templates/static/lib/cache/memory.js +31 -0
- package/templates/static/lib/cache/redis.d.ts +6 -0
- package/templates/static/lib/cache/redis.js +33 -0
- package/templates/static/lib/cli/banner.d.ts +1 -0
- package/templates/static/lib/cli/banner.js +41 -0
- package/templates/static/lib/cli/templates/ssg/jen.config.d.ts +3 -0
- package/templates/static/lib/cli/templates/ssg/jen.config.js +49 -0
- package/templates/static/lib/cli/templates/ssg/site/index.d.ts +2 -0
- package/templates/static/lib/cli/templates/ssg/site/index.js +4 -0
- package/templates/static/lib/cli/templates/ssr/jen.config.d.ts +3 -0
- package/templates/static/lib/cli/templates/ssr/jen.config.js +49 -0
- package/templates/static/lib/cli/templates/ssr/site/index.d.ts +2 -0
- package/templates/static/lib/cli/templates/ssr/site/index.js +4 -0
- package/templates/static/lib/compilers/esbuild-plugins.d.ts +6 -0
- package/templates/static/lib/compilers/esbuild-plugins.js +130 -0
- package/templates/static/lib/compilers/svelte.d.ts +18 -0
- package/templates/static/lib/compilers/svelte.js +61 -0
- package/templates/static/lib/compilers/vue.d.ts +15 -0
- package/templates/static/lib/compilers/vue.js +99 -0
- package/templates/static/lib/core/config.d.ts +53 -0
- package/templates/static/lib/core/config.js +18 -0
- package/templates/static/lib/core/http.d.ts +3 -0
- package/templates/static/lib/core/http.js +42 -0
- package/templates/static/lib/core/middleware-hooks.d.ts +46 -0
- package/templates/static/lib/core/middleware-hooks.js +69 -0
- package/templates/static/lib/core/paths.d.ts +6 -0
- package/templates/static/lib/core/paths.js +24 -0
- package/templates/static/lib/core/routes/match.d.ts +6 -0
- package/templates/static/lib/core/routes/match.js +31 -0
- package/templates/static/lib/core/routes/scan.d.ts +9 -0
- package/templates/static/lib/core/routes/scan.js +148 -0
- package/templates/static/lib/core/types.d.ts +18 -0
- package/templates/static/lib/core/types.js +18 -0
- package/templates/static/lib/css/compiler.d.ts +20 -0
- package/templates/static/lib/css/compiler.js +87 -0
- package/templates/static/lib/db/connector.d.ts +4 -0
- package/templates/static/lib/db/connector.js +33 -0
- package/templates/static/lib/db/drivers/jdb.d.ts +13 -0
- package/templates/static/lib/db/drivers/jdb.js +59 -0
- package/templates/static/lib/db/drivers/sql.d.ts +18 -0
- package/templates/static/lib/db/drivers/sql.js +182 -0
- package/templates/static/lib/db/index.d.ts +19 -0
- package/templates/static/lib/db/index.js +65 -0
- package/templates/static/lib/db/types.d.ts +29 -0
- package/templates/static/lib/db/types.js +18 -0
- package/templates/static/lib/graphql/index.d.ts +1 -0
- package/templates/static/lib/graphql/index.js +22 -0
- package/templates/static/lib/graphql/resolvers.d.ts +17 -0
- package/templates/static/lib/graphql/resolvers.js +26 -0
- package/templates/static/lib/graphql/schema.d.ts +1 -0
- package/templates/static/lib/graphql/schema.js +20 -0
- package/templates/static/lib/i18n/en.json +4 -0
- package/templates/static/lib/i18n/es.json +4 -0
- package/templates/static/lib/i18n/index.d.ts +8 -0
- package/templates/static/lib/i18n/index.js +32 -0
- package/templates/static/lib/import/jen-import.d.ts +27 -0
- package/templates/static/lib/import/jen-import.js +128 -0
- package/templates/static/lib/index.d.ts +81 -0
- package/templates/static/lib/index.js +120 -0
- package/templates/static/lib/jdb/engine.d.ts +9 -0
- package/templates/static/lib/jdb/engine.js +176 -0
- package/templates/static/lib/jdb/index.d.ts +2 -0
- package/templates/static/lib/jdb/index.js +19 -0
- package/templates/static/lib/jdb/types.d.ts +46 -0
- package/templates/static/lib/jdb/types.js +18 -0
- package/templates/static/lib/jdb/utils.d.ts +6 -0
- package/templates/static/lib/jdb/utils.js +141 -0
- package/templates/static/lib/middleware/builtins/body-parser.d.ts +1 -0
- package/templates/static/lib/middleware/builtins/body-parser.js +55 -0
- package/templates/static/lib/middleware/builtins/cors.d.ts +13 -0
- package/templates/static/lib/middleware/builtins/cors.js +67 -0
- package/templates/static/lib/middleware/builtins/logger.d.ts +1 -0
- package/templates/static/lib/middleware/builtins/logger.js +33 -0
- package/templates/static/lib/middleware/builtins/rate-limit.d.ts +5 -0
- package/templates/static/lib/middleware/builtins/rate-limit.js +76 -0
- package/templates/static/lib/middleware/builtins/request-id.d.ts +1 -0
- package/templates/static/lib/middleware/builtins/request-id.js +25 -0
- package/templates/static/lib/middleware/builtins/security-headers.d.ts +1 -0
- package/templates/static/lib/middleware/builtins/security-headers.js +39 -0
- package/templates/static/lib/middleware/context.d.ts +18 -0
- package/templates/static/lib/middleware/context.js +50 -0
- package/templates/static/lib/middleware/decorators.d.ts +2 -0
- package/templates/static/lib/middleware/decorators.js +61 -0
- package/templates/static/lib/middleware/errors/handler.d.ts +1 -0
- package/templates/static/lib/middleware/errors/handler.js +65 -0
- package/templates/static/lib/middleware/errors/http-error.d.ts +5 -0
- package/templates/static/lib/middleware/errors/http-error.js +27 -0
- package/templates/static/lib/middleware/kernel.d.ts +6 -0
- package/templates/static/lib/middleware/kernel.js +39 -0
- package/templates/static/lib/middleware/pipeline.d.ts +4 -0
- package/templates/static/lib/middleware/pipeline.js +67 -0
- package/templates/static/lib/middleware/registry.d.ts +10 -0
- package/templates/static/lib/middleware/registry.js +41 -0
- package/templates/static/lib/middleware/response.d.ts +13 -0
- package/templates/static/lib/middleware/response.js +60 -0
- package/templates/static/lib/middleware/types.d.ts +1 -0
- package/templates/static/lib/middleware/types.js +18 -0
- package/templates/static/lib/middleware/utils/matcher.d.ts +1 -0
- package/templates/static/lib/middleware/utils/matcher.js +31 -0
- package/templates/static/lib/native/bundle.d.ts +19 -0
- package/templates/static/lib/native/bundle.js +39 -0
- package/templates/static/lib/native/dev-server.d.ts +6 -0
- package/templates/static/lib/native/dev-server.js +38 -0
- package/templates/static/lib/native/index.d.ts +30 -0
- package/templates/static/lib/native/index.js +48 -0
- package/templates/static/lib/native/optimizer.d.ts +17 -0
- package/templates/static/lib/native/optimizer.js +37 -0
- package/templates/static/lib/native/style-compiler.d.ts +10 -0
- package/templates/static/lib/native/style-compiler.js +36 -0
- package/templates/static/lib/plugin/loader.d.ts +8 -0
- package/templates/static/lib/plugin/loader.js +59 -0
- package/templates/static/lib/runtime/client-runtime.d.ts +1 -0
- package/templates/static/lib/runtime/client-runtime.js +28 -0
- package/templates/static/lib/runtime/hmr.d.ts +1 -0
- package/templates/static/lib/runtime/hmr.js +54 -0
- package/templates/static/lib/runtime/hydrate.d.ts +1 -0
- package/templates/static/lib/runtime/hydrate.js +45 -0
- package/templates/static/lib/runtime/island-hydration-client.d.ts +5 -0
- package/templates/static/lib/runtime/island-hydration-client.js +132 -0
- package/templates/static/lib/runtime/islands.d.ts +46 -0
- package/templates/static/lib/runtime/islands.js +89 -0
- package/templates/static/lib/runtime/render.d.ts +13 -0
- package/templates/static/lib/runtime/render.js +183 -0
- package/templates/static/lib/server/api-routes.d.ts +44 -0
- package/templates/static/lib/server/api-routes.js +196 -0
- package/templates/static/lib/server/api.d.ts +6 -0
- package/templates/static/lib/server/api.js +124 -0
- package/templates/static/lib/server/app.d.ts +10 -0
- package/templates/static/lib/server/app.js +381 -0
- package/templates/static/lib/server/runtimeServe.d.ts +4 -0
- package/templates/static/lib/server/runtimeServe.js +125 -0
- package/templates/static/lib/shared/log.d.ts +5 -0
- package/templates/static/lib/shared/log.js +31 -0
- package/templates/static/node_modules/.bin/esbuild +3 -8
- package/templates/static/node_modules/.bin/esbuild.cmd +17 -0
- package/templates/static/node_modules/.bin/esbuild.ps1 +4 -17
- package/templates/static/node_modules/.bin/tsc +3 -8
- package/templates/static/node_modules/.bin/tsc.cmd +17 -0
- package/templates/static/node_modules/.bin/tsc.ps1 +4 -17
- package/templates/static/node_modules/.bin/tsserver +3 -8
- package/templates/static/node_modules/.bin/tsserver.cmd +17 -0
- package/templates/static/node_modules/.bin/tsserver.ps1 +4 -17
- package/templates/static/node_modules/.jen/cache/B__Jen.js_packages_create-jen-app_templates_static_site_(home).tsx.mjs +14 -0
- package/templates/static/node_modules/.jen/cache/B__Jen.js_packages_create-jen-app_yo_site_(home).tsx.mjs +11 -0
- package/templates/static/node_modules/.package-lock.json +585 -0
- package/templates/static/node_modules/@esbuild/win32-x64/README.md +3 -0
- package/templates/static/node_modules/@esbuild/win32-x64/esbuild.exe +0 -0
- package/templates/static/node_modules/@esbuild/win32-x64/package.json +20 -0
- package/templates/static/node_modules/@jenjs/master/README.md +24 -0
- package/templates/static/node_modules/@jenjs/master/index.js +3655 -0
- package/templates/static/node_modules/@jenjs/master/package.json +36 -0
- package/templates/static/node_modules/@polka/url/build.js +49 -0
- package/templates/static/node_modules/@polka/url/build.mjs +47 -0
- package/templates/static/node_modules/@polka/url/index.d.ts +11 -0
- package/templates/static/node_modules/@polka/url/package.json +30 -0
- package/templates/static/node_modules/@polka/url/readme.md +68 -0
- package/templates/static/node_modules/@types/node/LICENSE +21 -0
- package/templates/static/node_modules/@types/node/README.md +15 -0
- package/templates/static/node_modules/@types/node/assert/strict.d.ts +111 -0
- package/templates/static/node_modules/@types/node/assert.d.ts +1078 -0
- package/templates/static/node_modules/@types/node/async_hooks.d.ts +603 -0
- package/templates/static/node_modules/@types/node/buffer.buffer.d.ts +472 -0
- package/templates/static/node_modules/@types/node/buffer.d.ts +1934 -0
- package/templates/static/node_modules/@types/node/child_process.d.ts +1476 -0
- package/templates/static/node_modules/@types/node/cluster.d.ts +578 -0
- package/templates/static/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
- package/templates/static/node_modules/@types/node/compatibility/index.d.ts +9 -0
- package/templates/static/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
- package/templates/static/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
- package/templates/static/node_modules/@types/node/console.d.ts +452 -0
- package/templates/static/node_modules/@types/node/constants.d.ts +21 -0
- package/templates/static/node_modules/@types/node/crypto.d.ts +4545 -0
- package/templates/static/node_modules/@types/node/dgram.d.ts +600 -0
- package/templates/static/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
- package/templates/static/node_modules/@types/node/dns/promises.d.ts +503 -0
- package/templates/static/node_modules/@types/node/dns.d.ts +923 -0
- package/templates/static/node_modules/@types/node/domain.d.ts +170 -0
- package/templates/static/node_modules/@types/node/events.d.ts +976 -0
- package/templates/static/node_modules/@types/node/fs/promises.d.ts +1295 -0
- package/templates/static/node_modules/@types/node/fs.d.ts +4461 -0
- package/templates/static/node_modules/@types/node/globals.d.ts +172 -0
- package/templates/static/node_modules/@types/node/globals.typedarray.d.ts +38 -0
- package/templates/static/node_modules/@types/node/http.d.ts +2089 -0
- package/templates/static/node_modules/@types/node/http2.d.ts +2644 -0
- package/templates/static/node_modules/@types/node/https.d.ts +579 -0
- package/templates/static/node_modules/@types/node/index.d.ts +97 -0
- package/templates/static/node_modules/@types/node/inspector.d.ts +253 -0
- package/templates/static/node_modules/@types/node/inspector.generated.d.ts +4052 -0
- package/templates/static/node_modules/@types/node/module.d.ts +891 -0
- package/templates/static/node_modules/@types/node/net.d.ts +1057 -0
- package/templates/static/node_modules/@types/node/os.d.ts +506 -0
- package/templates/static/node_modules/@types/node/package.json +145 -0
- package/templates/static/node_modules/@types/node/path.d.ts +200 -0
- package/templates/static/node_modules/@types/node/perf_hooks.d.ts +968 -0
- package/templates/static/node_modules/@types/node/process.d.ts +2089 -0
- package/templates/static/node_modules/@types/node/punycode.d.ts +117 -0
- package/templates/static/node_modules/@types/node/querystring.d.ts +152 -0
- package/templates/static/node_modules/@types/node/readline/promises.d.ts +161 -0
- package/templates/static/node_modules/@types/node/readline.d.ts +594 -0
- package/templates/static/node_modules/@types/node/repl.d.ts +428 -0
- package/templates/static/node_modules/@types/node/sea.d.ts +153 -0
- package/templates/static/node_modules/@types/node/sqlite.d.ts +721 -0
- package/templates/static/node_modules/@types/node/stream/consumers.d.ts +38 -0
- package/templates/static/node_modules/@types/node/stream/promises.d.ts +90 -0
- package/templates/static/node_modules/@types/node/stream/web.d.ts +622 -0
- package/templates/static/node_modules/@types/node/stream.d.ts +1664 -0
- package/templates/static/node_modules/@types/node/string_decoder.d.ts +67 -0
- package/templates/static/node_modules/@types/node/test.d.ts +2163 -0
- package/templates/static/node_modules/@types/node/timers/promises.d.ts +108 -0
- package/templates/static/node_modules/@types/node/timers.d.ts +287 -0
- package/templates/static/node_modules/@types/node/tls.d.ts +1319 -0
- package/templates/static/node_modules/@types/node/trace_events.d.ts +197 -0
- package/templates/static/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
- package/templates/static/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
- package/templates/static/node_modules/@types/node/ts5.6/index.d.ts +97 -0
- package/templates/static/node_modules/@types/node/tty.d.ts +208 -0
- package/templates/static/node_modules/@types/node/url.d.ts +984 -0
- package/templates/static/node_modules/@types/node/util.d.ts +2606 -0
- package/templates/static/node_modules/@types/node/v8.d.ts +920 -0
- package/templates/static/node_modules/@types/node/vm.d.ts +1000 -0
- package/templates/static/node_modules/@types/node/wasi.d.ts +181 -0
- package/templates/static/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
- package/templates/static/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
- package/templates/static/node_modules/@types/node/web-globals/events.d.ts +97 -0
- package/templates/static/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
- package/templates/static/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
- package/templates/static/node_modules/@types/node/web-globals/storage.d.ts +24 -0
- package/templates/static/node_modules/@types/node/worker_threads.d.ts +784 -0
- package/templates/static/node_modules/@types/node/zlib.d.ts +683 -0
- package/templates/static/node_modules/esbuild/LICENSE.md +21 -0
- package/templates/static/node_modules/esbuild/README.md +3 -0
- package/templates/static/node_modules/esbuild/bin/esbuild +223 -0
- package/templates/static/node_modules/esbuild/install.js +289 -0
- package/templates/static/node_modules/esbuild/lib/main.d.ts +716 -0
- package/templates/static/node_modules/esbuild/lib/main.js +2242 -0
- package/templates/static/node_modules/esbuild/package.json +49 -0
- package/templates/static/node_modules/mrmime/index.d.ts +2 -0
- package/templates/static/node_modules/mrmime/index.js +449 -0
- package/templates/static/node_modules/mrmime/index.mjs +448 -0
- package/templates/static/node_modules/mrmime/license +21 -0
- package/templates/static/node_modules/mrmime/package.json +44 -0
- package/templates/static/node_modules/mrmime/readme.md +130 -0
- package/templates/static/node_modules/preact/LICENSE +21 -0
- package/templates/static/node_modules/preact/README.md +185 -0
- package/templates/static/node_modules/preact/compat/client.d.ts +13 -0
- package/templates/static/node_modules/preact/compat/client.js +21 -0
- package/templates/static/node_modules/preact/compat/client.mjs +24 -0
- package/templates/static/node_modules/preact/compat/dist/compat.js +2 -0
- package/templates/static/node_modules/preact/compat/dist/compat.js.map +1 -0
- package/templates/static/node_modules/preact/compat/dist/compat.mjs +2 -0
- package/templates/static/node_modules/preact/compat/dist/compat.module.js +2 -0
- package/templates/static/node_modules/preact/compat/dist/compat.module.js.map +1 -0
- package/templates/static/node_modules/preact/compat/dist/compat.umd.js +2 -0
- package/templates/static/node_modules/preact/compat/dist/compat.umd.js.map +1 -0
- package/templates/static/node_modules/preact/compat/jsx-dev-runtime.js +3 -0
- package/templates/static/node_modules/preact/compat/jsx-dev-runtime.mjs +3 -0
- package/templates/static/node_modules/preact/compat/jsx-runtime.js +3 -0
- package/templates/static/node_modules/preact/compat/jsx-runtime.mjs +3 -0
- package/templates/static/node_modules/preact/compat/package.json +55 -0
- package/templates/static/node_modules/preact/compat/scheduler.js +15 -0
- package/templates/static/node_modules/preact/compat/scheduler.mjs +23 -0
- package/templates/static/node_modules/preact/compat/server.browser.js +11 -0
- package/templates/static/node_modules/preact/compat/server.js +36 -0
- package/templates/static/node_modules/preact/compat/server.mjs +17 -0
- package/templates/static/node_modules/preact/compat/src/Children.js +21 -0
- package/templates/static/node_modules/preact/compat/src/PureComponent.js +16 -0
- package/templates/static/node_modules/preact/compat/src/forwardRef.js +44 -0
- package/templates/static/node_modules/preact/compat/src/hooks.js +70 -0
- package/templates/static/node_modules/preact/compat/src/index.d.ts +351 -0
- package/templates/static/node_modules/preact/compat/src/index.js +238 -0
- package/templates/static/node_modules/preact/compat/src/internal.d.ts +48 -0
- package/templates/static/node_modules/preact/compat/src/memo.js +35 -0
- package/templates/static/node_modules/preact/compat/src/portals.js +78 -0
- package/templates/static/node_modules/preact/compat/src/render.js +313 -0
- package/templates/static/node_modules/preact/compat/src/suspense-list.d.ts +16 -0
- package/templates/static/node_modules/preact/compat/src/suspense-list.js +127 -0
- package/templates/static/node_modules/preact/compat/src/suspense.d.ts +19 -0
- package/templates/static/node_modules/preact/compat/src/suspense.js +291 -0
- package/templates/static/node_modules/preact/compat/src/util.js +33 -0
- package/templates/static/node_modules/preact/compat/test-utils.js +1 -0
- package/templates/static/node_modules/preact/compat/test-utils.mjs +1 -0
- package/templates/static/node_modules/preact/debug/dist/debug.js +2 -0
- package/templates/static/node_modules/preact/debug/dist/debug.js.map +1 -0
- package/templates/static/node_modules/preact/debug/dist/debug.mjs +2 -0
- package/templates/static/node_modules/preact/debug/dist/debug.module.js +2 -0
- package/templates/static/node_modules/preact/debug/dist/debug.module.js.map +1 -0
- package/templates/static/node_modules/preact/debug/dist/debug.umd.js +2 -0
- package/templates/static/node_modules/preact/debug/dist/debug.umd.js.map +1 -0
- package/templates/static/node_modules/preact/debug/package.json +27 -0
- package/templates/static/node_modules/preact/debug/src/check-props.js +54 -0
- package/templates/static/node_modules/preact/debug/src/component-stack.js +146 -0
- package/templates/static/node_modules/preact/debug/src/constants.js +3 -0
- package/templates/static/node_modules/preact/debug/src/debug.js +593 -0
- package/templates/static/node_modules/preact/debug/src/index.d.ts +23 -0
- package/templates/static/node_modules/preact/debug/src/index.js +12 -0
- package/templates/static/node_modules/preact/debug/src/internal.d.ts +82 -0
- package/templates/static/node_modules/preact/debug/src/util.js +15 -0
- package/templates/static/node_modules/preact/devtools/dist/devtools.js +2 -0
- package/templates/static/node_modules/preact/devtools/dist/devtools.js.map +1 -0
- package/templates/static/node_modules/preact/devtools/dist/devtools.mjs +2 -0
- package/templates/static/node_modules/preact/devtools/dist/devtools.module.js +2 -0
- package/templates/static/node_modules/preact/devtools/dist/devtools.module.js.map +1 -0
- package/templates/static/node_modules/preact/devtools/dist/devtools.umd.js +2 -0
- package/templates/static/node_modules/preact/devtools/dist/devtools.umd.js.map +1 -0
- package/templates/static/node_modules/preact/devtools/package.json +25 -0
- package/templates/static/node_modules/preact/devtools/src/devtools.js +21 -0
- package/templates/static/node_modules/preact/devtools/src/index.d.ts +8 -0
- package/templates/static/node_modules/preact/devtools/src/index.js +15 -0
- package/templates/static/node_modules/preact/dist/preact.js +2 -0
- package/templates/static/node_modules/preact/dist/preact.js.map +1 -0
- package/templates/static/node_modules/preact/dist/preact.min.js +2 -0
- package/templates/static/node_modules/preact/dist/preact.min.js.map +1 -0
- package/templates/static/node_modules/preact/dist/preact.min.module.js +2 -0
- package/templates/static/node_modules/preact/dist/preact.min.module.js.map +1 -0
- package/templates/static/node_modules/preact/dist/preact.min.umd.js +2 -0
- package/templates/static/node_modules/preact/dist/preact.min.umd.js.map +1 -0
- package/templates/static/node_modules/preact/dist/preact.mjs +2 -0
- package/templates/static/node_modules/preact/dist/preact.module.js +2 -0
- package/templates/static/node_modules/preact/dist/preact.module.js.map +1 -0
- package/templates/static/node_modules/preact/dist/preact.umd.js +2 -0
- package/templates/static/node_modules/preact/dist/preact.umd.js.map +1 -0
- package/templates/static/node_modules/preact/hooks/dist/hooks.js +2 -0
- package/templates/static/node_modules/preact/hooks/dist/hooks.js.map +1 -0
- package/templates/static/node_modules/preact/hooks/dist/hooks.mjs +2 -0
- package/templates/static/node_modules/preact/hooks/dist/hooks.module.js +2 -0
- package/templates/static/node_modules/preact/hooks/dist/hooks.module.js.map +1 -0
- package/templates/static/node_modules/preact/hooks/dist/hooks.umd.js +2 -0
- package/templates/static/node_modules/preact/hooks/dist/hooks.umd.js.map +1 -0
- package/templates/static/node_modules/preact/hooks/package.json +35 -0
- package/templates/static/node_modules/preact/hooks/src/index.d.ts +145 -0
- package/templates/static/node_modules/preact/hooks/src/index.js +555 -0
- package/templates/static/node_modules/preact/hooks/src/internal.d.ts +103 -0
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.js +2 -0
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.js.map +1 -0
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.mjs +2 -0
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js +2 -0
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js.map +1 -0
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.umd.js +2 -0
- package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.umd.js.map +1 -0
- package/templates/static/node_modules/preact/jsx-runtime/package.json +28 -0
- package/templates/static/node_modules/preact/jsx-runtime/src/index.d.ts +62 -0
- package/templates/static/node_modules/preact/jsx-runtime/src/index.js +206 -0
- package/templates/static/node_modules/preact/jsx-runtime/src/utils.js +36 -0
- package/templates/static/node_modules/preact/package.json +258 -0
- package/templates/static/node_modules/preact/src/cjs.js +3 -0
- package/templates/static/node_modules/preact/src/clone-element.js +48 -0
- package/templates/static/node_modules/preact/src/component.js +249 -0
- package/templates/static/node_modules/preact/src/constants.js +22 -0
- package/templates/static/node_modules/preact/src/create-context.js +60 -0
- package/templates/static/node_modules/preact/src/create-element.js +97 -0
- package/templates/static/node_modules/preact/src/diff/catch-error.js +46 -0
- package/templates/static/node_modules/preact/src/diff/children.js +451 -0
- package/templates/static/node_modules/preact/src/diff/index.js +684 -0
- package/templates/static/node_modules/preact/src/diff/props.js +173 -0
- package/templates/static/node_modules/preact/src/dom.d.ts +2476 -0
- package/templates/static/node_modules/preact/src/index-5.d.ts +399 -0
- package/templates/static/node_modules/preact/src/index.d.ts +402 -0
- package/templates/static/node_modules/preact/src/index.js +13 -0
- package/templates/static/node_modules/preact/src/internal.d.ts +190 -0
- package/templates/static/node_modules/preact/src/jsx.d.ts +2878 -0
- package/templates/static/node_modules/preact/src/options.js +16 -0
- package/templates/static/node_modules/preact/src/render.js +78 -0
- package/templates/static/node_modules/preact/src/util.js +28 -0
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.js +2 -0
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.js.map +1 -0
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.mjs +2 -0
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.module.js +2 -0
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.module.js.map +1 -0
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.umd.js +2 -0
- package/templates/static/node_modules/preact/test-utils/dist/testUtils.umd.js.map +1 -0
- package/templates/static/node_modules/preact/test-utils/package.json +28 -0
- package/templates/static/node_modules/preact/test-utils/src/index.d.ts +3 -0
- package/templates/static/node_modules/preact/test-utils/src/index.js +129 -0
- package/templates/static/node_modules/preact-render-to-string/LICENSE +21 -0
- package/templates/static/node_modules/preact-render-to-string/README.md +149 -0
- package/templates/static/node_modules/preact-render-to-string/dist/commonjs.js +2 -0
- package/templates/static/node_modules/preact-render-to-string/dist/index.d.ts +17 -0
- package/templates/static/node_modules/preact-render-to-string/dist/index.js +6 -0
- package/templates/static/node_modules/preact-render-to-string/dist/index.js.map +1 -0
- package/templates/static/node_modules/preact-render-to-string/dist/index.mjs +2 -0
- package/templates/static/node_modules/preact-render-to-string/dist/index.module.js +2 -0
- package/templates/static/node_modules/preact-render-to-string/dist/index.module.js.map +1 -0
- package/templates/static/node_modules/preact-render-to-string/dist/index.umd.js +2 -0
- package/templates/static/node_modules/preact-render-to-string/dist/index.umd.js.map +1 -0
- package/templates/static/node_modules/preact-render-to-string/dist/internal.d.ts +35 -0
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/commonjs.js +2 -0
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.js +4 -0
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.js.map +1 -0
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.mjs +2 -0
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.module.js +2 -0
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.module.js.map +1 -0
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.umd.js +2 -0
- package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.umd.js.map +1 -0
- package/templates/static/node_modules/preact-render-to-string/dist/jsx.d.ts +24 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.js +2 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.js.map +1 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.mjs +2 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.module.js +2 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.module.js.map +1 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.umd.js +2 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/index.umd.js.map +1 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.js +884 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.js.map +1 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.mjs +884 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.module.js +884 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.module.js.map +1 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.umd.js +888 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.umd.js.map +1 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream-node.d.ts +19 -0
- package/templates/static/node_modules/preact-render-to-string/dist/stream.d.ts +10 -0
- package/templates/static/node_modules/preact-render-to-string/jsx.d.ts +24 -0
- package/templates/static/node_modules/preact-render-to-string/jsx.js +1 -0
- package/templates/static/node_modules/preact-render-to-string/package.json +152 -0
- package/templates/static/node_modules/preact-render-to-string/src/index.d.ts +17 -0
- package/templates/static/node_modules/preact-render-to-string/src/index.js +764 -0
- package/templates/static/node_modules/preact-render-to-string/src/internal.d.ts +35 -0
- package/templates/static/node_modules/preact-render-to-string/src/jsx.d.ts +24 -0
- package/templates/static/node_modules/preact-render-to-string/src/jsx.js +102 -0
- package/templates/static/node_modules/preact-render-to-string/src/lib/chunked.js +97 -0
- package/templates/static/node_modules/preact-render-to-string/src/lib/client.js +62 -0
- package/templates/static/node_modules/preact-render-to-string/src/lib/constants.js +20 -0
- package/templates/static/node_modules/preact-render-to-string/src/lib/polyfills.js +8 -0
- package/templates/static/node_modules/preact-render-to-string/src/lib/util.js +208 -0
- package/templates/static/node_modules/preact-render-to-string/src/pretty.js +491 -0
- package/templates/static/node_modules/preact-render-to-string/src/stream-node.d.ts +19 -0
- package/templates/static/node_modules/preact-render-to-string/src/stream-node.js +84 -0
- package/templates/static/node_modules/preact-render-to-string/src/stream.d.ts +10 -0
- package/templates/static/node_modules/preact-render-to-string/src/stream.js +43 -0
- package/templates/static/node_modules/preact-render-to-string/typings.json +5 -0
- package/templates/static/node_modules/sirv/build.js +197 -0
- package/templates/static/node_modules/sirv/build.mjs +197 -0
- package/templates/static/node_modules/sirv/index.d.mts +29 -0
- package/templates/static/node_modules/sirv/index.d.ts +33 -0
- package/templates/static/node_modules/sirv/package.json +40 -0
- package/templates/static/node_modules/sirv/readme.md +238 -0
- package/templates/static/node_modules/totalist/dist/index.js +24 -0
- package/templates/static/node_modules/totalist/dist/index.mjs +22 -0
- package/templates/static/node_modules/totalist/index.d.ts +3 -0
- package/templates/static/node_modules/totalist/license +21 -0
- package/templates/static/node_modules/totalist/package.json +55 -0
- package/templates/static/node_modules/totalist/readme.md +109 -0
- package/templates/static/node_modules/totalist/sync/index.d.ts +3 -0
- package/templates/static/node_modules/totalist/sync/index.js +17 -0
- package/templates/static/node_modules/totalist/sync/index.mjs +15 -0
- package/templates/static/node_modules/typescript/bin/tsc +2 -0
- package/templates/static/node_modules/typescript/bin/tsserver +2 -0
- package/templates/static/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +2122 -0
- package/templates/static/node_modules/typescript/lib/de/diagnosticMessages.generated.json +2122 -0
- package/templates/static/node_modules/typescript/lib/es/diagnosticMessages.generated.json +2122 -0
- package/templates/static/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +2122 -0
- package/templates/static/node_modules/typescript/lib/it/diagnosticMessages.generated.json +2122 -0
- package/templates/static/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +2122 -0
- package/templates/static/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +2122 -0
- package/templates/static/node_modules/typescript/lib/lib.d.ts +22 -0
- package/templates/static/node_modules/typescript/lib/lib.decorators.d.ts +384 -0
- package/templates/static/node_modules/typescript/lib/lib.decorators.legacy.d.ts +22 -0
- package/templates/static/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +41 -0
- package/templates/static/node_modules/typescript/lib/lib.dom.d.ts +39429 -0
- package/templates/static/node_modules/typescript/lib/lib.dom.iterable.d.ts +571 -0
- package/templates/static/node_modules/typescript/lib/lib.es2015.collection.d.ts +147 -0
- package/templates/static/node_modules/typescript/lib/lib.es2015.core.d.ts +597 -0
- package/templates/static/node_modules/typescript/lib/lib.es2015.d.ts +28 -0
- package/templates/static/node_modules/typescript/lib/lib.es2015.generator.d.ts +77 -0
- package/templates/static/node_modules/typescript/lib/lib.es2015.iterable.d.ts +605 -0
- package/templates/static/node_modules/typescript/lib/lib.es2015.promise.d.ts +81 -0
- package/templates/static/node_modules/typescript/lib/lib.es2015.proxy.d.ts +128 -0
- package/templates/static/node_modules/typescript/lib/lib.es2015.reflect.d.ts +144 -0
- package/templates/static/node_modules/typescript/lib/lib.es2015.symbol.d.ts +46 -0
- package/templates/static/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +326 -0
- package/templates/static/node_modules/typescript/lib/lib.es2016.array.include.d.ts +116 -0
- package/templates/static/node_modules/typescript/lib/lib.es2016.d.ts +21 -0
- package/templates/static/node_modules/typescript/lib/lib.es2016.full.d.ts +23 -0
- package/templates/static/node_modules/typescript/lib/lib.es2016.intl.d.ts +31 -0
- package/templates/static/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +21 -0
- package/templates/static/node_modules/typescript/lib/lib.es2017.d.ts +26 -0
- package/templates/static/node_modules/typescript/lib/lib.es2017.date.d.ts +31 -0
- package/templates/static/node_modules/typescript/lib/lib.es2017.full.d.ts +23 -0
- package/templates/static/node_modules/typescript/lib/lib.es2017.intl.d.ts +44 -0
- package/templates/static/node_modules/typescript/lib/lib.es2017.object.d.ts +49 -0
- package/templates/static/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +135 -0
- package/templates/static/node_modules/typescript/lib/lib.es2017.string.d.ts +45 -0
- package/templates/static/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +53 -0
- package/templates/static/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +77 -0
- package/templates/static/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +53 -0
- package/templates/static/node_modules/typescript/lib/lib.es2018.d.ts +24 -0
- package/templates/static/node_modules/typescript/lib/lib.es2018.full.d.ts +24 -0
- package/templates/static/node_modules/typescript/lib/lib.es2018.intl.d.ts +83 -0
- package/templates/static/node_modules/typescript/lib/lib.es2018.promise.d.ts +30 -0
- package/templates/static/node_modules/typescript/lib/lib.es2018.regexp.d.ts +37 -0
- package/templates/static/node_modules/typescript/lib/lib.es2019.array.d.ts +79 -0
- package/templates/static/node_modules/typescript/lib/lib.es2019.d.ts +24 -0
- package/templates/static/node_modules/typescript/lib/lib.es2019.full.d.ts +24 -0
- package/templates/static/node_modules/typescript/lib/lib.es2019.intl.d.ts +23 -0
- package/templates/static/node_modules/typescript/lib/lib.es2019.object.d.ts +33 -0
- package/templates/static/node_modules/typescript/lib/lib.es2019.string.d.ts +37 -0
- package/templates/static/node_modules/typescript/lib/lib.es2019.symbol.d.ts +24 -0
- package/templates/static/node_modules/typescript/lib/lib.es2020.bigint.d.ts +765 -0
- package/templates/static/node_modules/typescript/lib/lib.es2020.d.ts +27 -0
- package/templates/static/node_modules/typescript/lib/lib.es2020.date.d.ts +42 -0
- package/templates/static/node_modules/typescript/lib/lib.es2020.full.d.ts +24 -0
- package/templates/static/node_modules/typescript/lib/lib.es2020.intl.d.ts +474 -0
- package/templates/static/node_modules/typescript/lib/lib.es2020.number.d.ts +28 -0
- package/templates/static/node_modules/typescript/lib/lib.es2020.promise.d.ts +47 -0
- package/templates/static/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +99 -0
- package/templates/static/node_modules/typescript/lib/lib.es2020.string.d.ts +44 -0
- package/templates/static/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +41 -0
- package/templates/static/node_modules/typescript/lib/lib.es2021.d.ts +23 -0
- package/templates/static/node_modules/typescript/lib/lib.es2021.full.d.ts +24 -0
- package/templates/static/node_modules/typescript/lib/lib.es2021.intl.d.ts +166 -0
- package/templates/static/node_modules/typescript/lib/lib.es2021.promise.d.ts +48 -0
- package/templates/static/node_modules/typescript/lib/lib.es2021.string.d.ts +33 -0
- package/templates/static/node_modules/typescript/lib/lib.es2021.weakref.d.ts +78 -0
- package/templates/static/node_modules/typescript/lib/lib.es2022.array.d.ts +121 -0
- package/templates/static/node_modules/typescript/lib/lib.es2022.d.ts +25 -0
- package/templates/static/node_modules/typescript/lib/lib.es2022.error.d.ts +75 -0
- package/templates/static/node_modules/typescript/lib/lib.es2022.full.d.ts +24 -0
- package/templates/static/node_modules/typescript/lib/lib.es2022.intl.d.ts +145 -0
- package/templates/static/node_modules/typescript/lib/lib.es2022.object.d.ts +26 -0
- package/templates/static/node_modules/typescript/lib/lib.es2022.regexp.d.ts +39 -0
- package/templates/static/node_modules/typescript/lib/lib.es2022.string.d.ts +25 -0
- package/templates/static/node_modules/typescript/lib/lib.es2023.array.d.ts +924 -0
- package/templates/static/node_modules/typescript/lib/lib.es2023.collection.d.ts +21 -0
- package/templates/static/node_modules/typescript/lib/lib.es2023.d.ts +22 -0
- package/templates/static/node_modules/typescript/lib/lib.es2023.full.d.ts +24 -0
- package/templates/static/node_modules/typescript/lib/lib.es2023.intl.d.ts +56 -0
- package/templates/static/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +65 -0
- package/templates/static/node_modules/typescript/lib/lib.es2024.collection.d.ts +29 -0
- package/templates/static/node_modules/typescript/lib/lib.es2024.d.ts +26 -0
- package/templates/static/node_modules/typescript/lib/lib.es2024.full.d.ts +24 -0
- package/templates/static/node_modules/typescript/lib/lib.es2024.object.d.ts +29 -0
- package/templates/static/node_modules/typescript/lib/lib.es2024.promise.d.ts +35 -0
- package/templates/static/node_modules/typescript/lib/lib.es2024.regexp.d.ts +25 -0
- package/templates/static/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +68 -0
- package/templates/static/node_modules/typescript/lib/lib.es2024.string.d.ts +29 -0
- package/templates/static/node_modules/typescript/lib/lib.es5.d.ts +4601 -0
- package/templates/static/node_modules/typescript/lib/lib.es6.d.ts +23 -0
- package/templates/static/node_modules/typescript/lib/lib.esnext.array.d.ts +35 -0
- package/templates/static/node_modules/typescript/lib/lib.esnext.collection.d.ts +96 -0
- package/templates/static/node_modules/typescript/lib/lib.esnext.d.ts +29 -0
- package/templates/static/node_modules/typescript/lib/lib.esnext.decorators.d.ts +28 -0
- package/templates/static/node_modules/typescript/lib/lib.esnext.disposable.d.ts +193 -0
- package/templates/static/node_modules/typescript/lib/lib.esnext.error.d.ts +24 -0
- package/templates/static/node_modules/typescript/lib/lib.esnext.float16.d.ts +445 -0
- package/templates/static/node_modules/typescript/lib/lib.esnext.full.d.ts +24 -0
- package/templates/static/node_modules/typescript/lib/lib.esnext.intl.d.ts +21 -0
- package/templates/static/node_modules/typescript/lib/lib.esnext.iterator.d.ts +148 -0
- package/templates/static/node_modules/typescript/lib/lib.esnext.promise.d.ts +34 -0
- package/templates/static/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +25 -0
- package/templates/static/node_modules/typescript/lib/lib.scripthost.d.ts +322 -0
- package/templates/static/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +41 -0
- package/templates/static/node_modules/typescript/lib/lib.webworker.d.ts +13150 -0
- package/templates/static/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +23 -0
- package/templates/static/node_modules/typescript/lib/lib.webworker.iterable.d.ts +340 -0
- package/templates/static/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +2122 -0
- package/templates/static/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +2122 -0
- package/templates/static/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +2122 -0
- package/templates/static/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +2122 -0
- package/templates/static/node_modules/typescript/lib/tsc.js +8 -0
- package/templates/static/node_modules/typescript/lib/tsserver.js +8 -0
- package/templates/static/node_modules/typescript/lib/tsserverlibrary.d.ts +17 -0
- package/templates/static/node_modules/typescript/lib/tsserverlibrary.js +21 -0
- package/templates/static/node_modules/typescript/lib/typescript.d.ts +11437 -0
- package/templates/static/package.json +1 -1
- package/templates/static/server.js +31 -9
- package/templates/static/site/(home).tsx +12 -11
- package/templates/static/site/styles/global.scss +78 -43
- package/templates/static/tsconfig.json +39 -0
- package/templates/static/.esbuild/jen.config.js.map +0 -7
- package/templates/static/dist/index.html +0 -1
- package/templates/static/dist/styles.css +0 -1
- package/templates/static/node_modules/.bin/esbuild.CMD +0 -12
- package/templates/static/node_modules/.bin/tsc.CMD +0 -12
- package/templates/static/node_modules/.bin/tsserver.CMD +0 -12
- package/templates/static/node_modules/.jen/cache/C__Users_rejes_Documents_GitHub_Jen.js_packages_create-jen-app_templates_new-sass-compiler_site_(home).tsx.mjs +0 -8
- package/templates/static/node_modules/.jen/cache/C__Users_rejes_Documents_GitHub_Jen.js_packages_create-jen-app_templates_static_site_(home).tsx.mjs +0 -8
- package/templates/static/site/(home).esbuild.mjs +0 -15
- package/templates/static/site/(index).esbuild.mjs +0 -14
|
@@ -1,3 +1,21 @@
|
|
|
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
|
+
|
|
1
19
|
import { dirname, join } from "node:path";
|
|
2
20
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
3
21
|
import { readdir, stat, readFile, writeFile } from "node:fs/promises";
|
|
@@ -5,7 +23,7 @@ import esbuild from "esbuild";
|
|
|
5
23
|
|
|
6
24
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
25
|
const currentDir = dirname(__filename);
|
|
8
|
-
const rootDir = join(currentDir, "
|
|
26
|
+
const rootDir = join(currentDir, ".");
|
|
9
27
|
|
|
10
28
|
// Embedded Minifier Logic
|
|
11
29
|
const Minifier = {
|
|
@@ -25,7 +43,7 @@ const Minifier = {
|
|
|
25
43
|
.replace(/\s+/g, " ")
|
|
26
44
|
.replace(/;\s*}/g, "}")
|
|
27
45
|
.trim();
|
|
28
|
-
}
|
|
46
|
+
},
|
|
29
47
|
};
|
|
30
48
|
|
|
31
49
|
async function main() {
|
|
@@ -33,7 +51,7 @@ async function main() {
|
|
|
33
51
|
|
|
34
52
|
const configPath = join(currentDir, "jen.config.ts");
|
|
35
53
|
const outdir = join(currentDir, ".esbuild");
|
|
36
|
-
|
|
54
|
+
|
|
37
55
|
await esbuild.build({
|
|
38
56
|
entryPoints: [configPath],
|
|
39
57
|
outdir,
|
|
@@ -44,19 +62,21 @@ async function main() {
|
|
|
44
62
|
minify: true,
|
|
45
63
|
sourcemap: true,
|
|
46
64
|
loader: { ".ts": "ts" },
|
|
47
|
-
logLevel: "silent"
|
|
65
|
+
logLevel: "silent",
|
|
48
66
|
});
|
|
49
67
|
|
|
50
68
|
const configFile = join(outdir, "jen.config.js");
|
|
51
69
|
const config = (await import(pathToFileURL(configFile).href)).default;
|
|
52
70
|
|
|
53
|
-
const buildPath = pathToFileURL(
|
|
71
|
+
const buildPath = pathToFileURL(
|
|
72
|
+
join(rootDir, "lib/build/build.js"),
|
|
73
|
+
).href;
|
|
54
74
|
const { buildSite } = await import(buildPath);
|
|
55
75
|
|
|
56
76
|
await buildSite({ config });
|
|
57
77
|
|
|
58
78
|
console.log("[BUILD] Minifying output...");
|
|
59
|
-
|
|
79
|
+
|
|
60
80
|
async function minifyDir(dir) {
|
|
61
81
|
try {
|
|
62
82
|
const files = await readdir(dir);
|
|
@@ -74,7 +94,7 @@ async function main() {
|
|
|
74
94
|
}
|
|
75
95
|
}
|
|
76
96
|
} catch (e) {
|
|
77
|
-
if (e.code !==
|
|
97
|
+
if (e.code !== "ENOENT") console.warn("Minification warning:", e.message);
|
|
78
98
|
}
|
|
79
99
|
}
|
|
80
100
|
|
|
@@ -83,4 +103,4 @@ async function main() {
|
|
|
83
103
|
console.log("✅ Site built successfully!");
|
|
84
104
|
}
|
|
85
105
|
|
|
86
|
-
main().catch(console.error);
|
|
106
|
+
main().catch(console.error);
|
|
@@ -1,4 +1,21 @@
|
|
|
1
|
-
|
|
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
|
+
|
|
2
19
|
|
|
3
20
|
const config: FrameworkConfig = {
|
|
4
21
|
siteDir: "site",
|
|
@@ -6,30 +23,106 @@ const config: FrameworkConfig = {
|
|
|
6
23
|
routes: {
|
|
7
24
|
fileExtensions: [".tsx", ".jsx", ".ts", ".js"],
|
|
8
25
|
routeFilePattern: /^\(([^)]+)\)\.(tsx|jsx|ts|js)$/,
|
|
9
|
-
enableIndexFallback: true
|
|
26
|
+
enableIndexFallback: true,
|
|
10
27
|
},
|
|
11
28
|
rendering: {
|
|
12
29
|
defaultMode: "ssg",
|
|
13
|
-
defaultRevalidateSeconds: 0
|
|
30
|
+
defaultRevalidateSeconds: 0,
|
|
14
31
|
},
|
|
15
32
|
inject: {
|
|
16
33
|
head: [],
|
|
17
|
-
bodyEnd: []
|
|
34
|
+
bodyEnd: [],
|
|
18
35
|
},
|
|
19
36
|
css: {
|
|
20
|
-
globalScss: "site/styles/global.scss"
|
|
37
|
+
globalScss: "site/styles/global.scss",
|
|
21
38
|
},
|
|
22
39
|
assets: {
|
|
23
40
|
publicDir: "site/assets",
|
|
24
|
-
cacheControl: "public, max-age=3600"
|
|
41
|
+
cacheControl: "public, max-age=3600",
|
|
25
42
|
},
|
|
26
43
|
server: {
|
|
27
44
|
port: 3001,
|
|
28
|
-
hostname: "localhost"
|
|
45
|
+
hostname: "localhost",
|
|
29
46
|
},
|
|
30
47
|
dev: {
|
|
31
|
-
liveReload: true
|
|
32
|
-
}
|
|
48
|
+
liveReload: true,
|
|
49
|
+
},
|
|
33
50
|
};
|
|
34
51
|
|
|
35
52
|
export default config;
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
export type RenderMode = "ssg" | "ssr";
|
|
56
|
+
|
|
57
|
+
export interface FrameworkConfig {
|
|
58
|
+
/** Root directory where pages/components live */
|
|
59
|
+
siteDir: string;
|
|
60
|
+
|
|
61
|
+
/** Output directory for build artifacts */
|
|
62
|
+
distDir: string;
|
|
63
|
+
|
|
64
|
+
routes: {
|
|
65
|
+
/** Allowed extensions for route files */
|
|
66
|
+
fileExtensions: string[];
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Pattern for matching route files.
|
|
70
|
+
* Example: (hello).tsx -> "hello"
|
|
71
|
+
*/
|
|
72
|
+
routeFilePattern: RegExp;
|
|
73
|
+
|
|
74
|
+
/** If true, /about maps to /about/index */
|
|
75
|
+
enableIndexFallback: boolean;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
rendering: {
|
|
79
|
+
/** Default rendering strategy */
|
|
80
|
+
defaultMode: RenderMode;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Default revalidation time in seconds (ISR-like behavior).
|
|
84
|
+
* 0 = never revalidate.
|
|
85
|
+
*/
|
|
86
|
+
defaultRevalidateSeconds: number;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
inject: {
|
|
90
|
+
/**
|
|
91
|
+
* HTML strings to inject into <head>.
|
|
92
|
+
* Example: `<meta charset="utf-8">`
|
|
93
|
+
*/
|
|
94
|
+
head: string[];
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* HTML strings injected before </body>.
|
|
98
|
+
* Example: `<script src="/app.js"></script>`
|
|
99
|
+
*/
|
|
100
|
+
bodyEnd: string[];
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
css: {
|
|
104
|
+
/** Path to global SCSS file loaded into every page */
|
|
105
|
+
globalScss?: string;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
assets: {
|
|
109
|
+
/** Directory for static public assets */
|
|
110
|
+
publicDir: string;
|
|
111
|
+
|
|
112
|
+
/** Cache-Control header applied to assets */
|
|
113
|
+
cacheControl?: string;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
server: {
|
|
117
|
+
/** Dev/SSR server port */
|
|
118
|
+
port: number;
|
|
119
|
+
|
|
120
|
+
/** Dev/SSR server hostname */
|
|
121
|
+
hostname: string;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
dev: {
|
|
125
|
+
/** Enables live reload / HMR behavior */
|
|
126
|
+
liveReload: boolean;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
@@ -1,15 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
+
|
|
19
|
+
declare module "@jenjs/master" {
|
|
20
|
+
export * from "@jenjs/master";
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
declare module "@jenjs/master/config" {
|
|
24
|
+
export * from "@jenjs/master/config";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
declare module "@jenjs/master/compile" {
|
|
28
|
+
export * from "@jenjs/master/compile";
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
declare module "@jenjs/master/render" {
|
|
32
|
+
export * from "@jenjs/master/render";
|
|
33
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
export default async function handler(ctx) {
|
|
19
|
+
return {
|
|
20
|
+
ok: true,
|
|
21
|
+
message: "Hello from API route",
|
|
22
|
+
method: ctx.method,
|
|
23
|
+
query: ctx.query,
|
|
24
|
+
body: ctx.body,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secure cookie utilities for session management
|
|
3
|
+
* Ensures cookies have proper security flags
|
|
4
|
+
*/
|
|
5
|
+
export interface CookieOptions {
|
|
6
|
+
httpOnly?: boolean;
|
|
7
|
+
secure?: boolean;
|
|
8
|
+
sameSite?: "Strict" | "Lax" | "None";
|
|
9
|
+
maxAge?: number;
|
|
10
|
+
path?: string;
|
|
11
|
+
domain?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generate secure cookie header value
|
|
15
|
+
*/
|
|
16
|
+
export declare function createSecureCookie(name: string, value: string, options?: CookieOptions): string;
|
|
17
|
+
/**
|
|
18
|
+
* Parse cookies from request header
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseCookies(cookieHeader: string): Record<string, string>;
|
|
21
|
+
/**
|
|
22
|
+
* Validate session cookie - check all security properties
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateSessionCookie(header: string, expectedName?: string): boolean;
|
|
@@ -0,0 +1,99 @@
|
|
|
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
|
+
/**
|
|
19
|
+
* Generate secure cookie header value
|
|
20
|
+
*/
|
|
21
|
+
export function createSecureCookie(name, value, options = {}) {
|
|
22
|
+
const defaults = {
|
|
23
|
+
httpOnly: true, // Prevent XSS token theft
|
|
24
|
+
secure: process.env.NODE_ENV === "production", // HTTPS only in production
|
|
25
|
+
sameSite: "Strict", // CSRF protection
|
|
26
|
+
maxAge: 24 * 60 * 60, // 24 hours
|
|
27
|
+
path: "/",
|
|
28
|
+
};
|
|
29
|
+
const opts = { ...defaults, ...options };
|
|
30
|
+
let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
|
|
31
|
+
if (opts.maxAge !== undefined) {
|
|
32
|
+
cookieStr += `; Max-Age=${opts.maxAge}`;
|
|
33
|
+
}
|
|
34
|
+
if (opts.path) {
|
|
35
|
+
cookieStr += `; Path=${opts.path}`;
|
|
36
|
+
}
|
|
37
|
+
if (opts.domain) {
|
|
38
|
+
cookieStr += `; Domain=${opts.domain}`;
|
|
39
|
+
}
|
|
40
|
+
if (opts.secure) {
|
|
41
|
+
cookieStr += "; Secure";
|
|
42
|
+
}
|
|
43
|
+
if (opts.httpOnly) {
|
|
44
|
+
cookieStr += "; HttpOnly";
|
|
45
|
+
}
|
|
46
|
+
if (opts.sameSite) {
|
|
47
|
+
cookieStr += `; SameSite=${opts.sameSite}`;
|
|
48
|
+
}
|
|
49
|
+
return cookieStr;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Parse cookies from request header
|
|
53
|
+
*/
|
|
54
|
+
export function parseCookies(cookieHeader) {
|
|
55
|
+
const cookies = {};
|
|
56
|
+
if (!cookieHeader || !cookieHeader.trim())
|
|
57
|
+
return cookies;
|
|
58
|
+
cookieHeader.split(";").forEach((cookie) => {
|
|
59
|
+
const trimmed = cookie.trim();
|
|
60
|
+
if (!trimmed)
|
|
61
|
+
return;
|
|
62
|
+
const eqIndex = trimmed.indexOf("=");
|
|
63
|
+
if (eqIndex === -1)
|
|
64
|
+
return;
|
|
65
|
+
const name = trimmed.substring(0, eqIndex).trim();
|
|
66
|
+
const value = trimmed.substring(eqIndex + 1).trim();
|
|
67
|
+
if (name && value) {
|
|
68
|
+
try {
|
|
69
|
+
cookies[decodeURIComponent(name)] = decodeURIComponent(value);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
// Skip cookies with invalid URI encoding
|
|
73
|
+
console.warn(`Failed to decode cookie ${name}:`, err instanceof Error ? err.message : String(err));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
return cookies;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Validate session cookie - check all security properties
|
|
81
|
+
*/
|
|
82
|
+
export function validateSessionCookie(header, expectedName = "sessionId") {
|
|
83
|
+
if (!header)
|
|
84
|
+
return false;
|
|
85
|
+
const parts = header.split(";").map((p) => p.trim());
|
|
86
|
+
const [cookiePair, ...flags] = parts;
|
|
87
|
+
if (!cookiePair || !cookiePair.includes("="))
|
|
88
|
+
return false;
|
|
89
|
+
const [name] = cookiePair.split("=");
|
|
90
|
+
if (decodeURIComponent(name) !== expectedName)
|
|
91
|
+
return false;
|
|
92
|
+
// Check required security flags
|
|
93
|
+
const hasHttpOnly = flags.some((f) => f.toLowerCase() === "httponly");
|
|
94
|
+
const hasSameSite = flags.some((f) => f.toLowerCase().startsWith("samesite"));
|
|
95
|
+
const isSecure = process.env.NODE_ENV === "production"
|
|
96
|
+
? flags.some((f) => f.toLowerCase() === "secure")
|
|
97
|
+
: true;
|
|
98
|
+
return hasHttpOnly && hasSameSite && isSecure;
|
|
99
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
export * from "./jwt";
|
|
19
|
+
export * from "./session";
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
// JWT token utilities - external JWT library not included
|
|
19
|
+
// Users should implement with their own jwt library (e.g., npm install jsonwebtoken)
|
|
20
|
+
const SECRET = process.env.JWT_SECRET;
|
|
21
|
+
// Validate JWT_SECRET is configured
|
|
22
|
+
if (!SECRET) {
|
|
23
|
+
throw new Error("CRITICAL: JWT_SECRET environment variable is required. Set JWT_SECRET in your .env file or environment.");
|
|
24
|
+
}
|
|
25
|
+
export function signToken(payload, expiresIn = "1h") {
|
|
26
|
+
throw new Error("JWT implementation requires external library. Install: npm install jsonwebtoken");
|
|
27
|
+
}
|
|
28
|
+
export function verifyToken(token) {
|
|
29
|
+
throw new Error("JWT implementation requires external library. Install: npm install jsonwebtoken");
|
|
30
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
interface SessionData {
|
|
2
|
+
userId: string;
|
|
3
|
+
createdAt: number;
|
|
4
|
+
expiresAt: number;
|
|
5
|
+
[key: string]: any;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* In-memory session manager
|
|
9
|
+
* WARNING: Sessions are lost on server restart
|
|
10
|
+
* For production, use persistent storage (Redis, Database, etc.)
|
|
11
|
+
*/
|
|
12
|
+
export declare class SessionManager {
|
|
13
|
+
private sessions;
|
|
14
|
+
constructor();
|
|
15
|
+
/**
|
|
16
|
+
* Create a new session with automatic expiration
|
|
17
|
+
*/
|
|
18
|
+
createSession(userId: string, data?: Record<string, any>): string;
|
|
19
|
+
/**
|
|
20
|
+
* Get session with expiration check
|
|
21
|
+
*/
|
|
22
|
+
getSession(sessionId: string): SessionData | null;
|
|
23
|
+
/**
|
|
24
|
+
* Destroy session immediately
|
|
25
|
+
*/
|
|
26
|
+
destroySession(sessionId: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Verify session is valid and return user ID
|
|
29
|
+
*/
|
|
30
|
+
verifySession(sessionId: string): string | null;
|
|
31
|
+
/**
|
|
32
|
+
* Update session expiration
|
|
33
|
+
*/
|
|
34
|
+
refreshSession(sessionId: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Generate cryptographically secure session ID
|
|
37
|
+
*/
|
|
38
|
+
private generateSecureSessionId;
|
|
39
|
+
/**
|
|
40
|
+
* Clean up expired sessions
|
|
41
|
+
*/
|
|
42
|
+
private cleanupExpiredSessions;
|
|
43
|
+
}
|
|
44
|
+
export {};
|
|
@@ -0,0 +1,111 @@
|
|
|
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
|
+
const SESSION_TIMEOUT = parseInt(process.env.SESSION_TIMEOUT ?? "86400000", 10); // 24 hours default
|
|
19
|
+
/**
|
|
20
|
+
* In-memory session manager
|
|
21
|
+
* WARNING: Sessions are lost on server restart
|
|
22
|
+
* For production, use persistent storage (Redis, Database, etc.)
|
|
23
|
+
*/
|
|
24
|
+
export class SessionManager {
|
|
25
|
+
sessions = new Map();
|
|
26
|
+
constructor() {
|
|
27
|
+
// Cleanup expired sessions every 30 minutes
|
|
28
|
+
setInterval(() => this.cleanupExpiredSessions(), 30 * 60 * 1000);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create a new session with automatic expiration
|
|
32
|
+
*/
|
|
33
|
+
createSession(userId, data = {}) {
|
|
34
|
+
// Validate userId
|
|
35
|
+
if (!userId || typeof userId !== "string" || userId.length > 255) {
|
|
36
|
+
throw new Error("Invalid userId");
|
|
37
|
+
}
|
|
38
|
+
const sessionId = this.generateSecureSessionId();
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
const session = {
|
|
41
|
+
userId,
|
|
42
|
+
createdAt: now,
|
|
43
|
+
expiresAt: now + SESSION_TIMEOUT,
|
|
44
|
+
...data,
|
|
45
|
+
};
|
|
46
|
+
this.sessions.set(sessionId, session);
|
|
47
|
+
return sessionId;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get session with expiration check
|
|
51
|
+
*/
|
|
52
|
+
getSession(sessionId) {
|
|
53
|
+
if (!sessionId)
|
|
54
|
+
return null;
|
|
55
|
+
const session = this.sessions.get(sessionId);
|
|
56
|
+
if (!session)
|
|
57
|
+
return null;
|
|
58
|
+
// Check if session expired
|
|
59
|
+
if (Date.now() > session.expiresAt) {
|
|
60
|
+
this.sessions.delete(sessionId);
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return session;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Destroy session immediately
|
|
67
|
+
*/
|
|
68
|
+
destroySession(sessionId) {
|
|
69
|
+
this.sessions.delete(sessionId);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Verify session is valid and return user ID
|
|
73
|
+
*/
|
|
74
|
+
verifySession(sessionId) {
|
|
75
|
+
const session = this.getSession(sessionId);
|
|
76
|
+
return session?.userId ?? null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Update session expiration
|
|
80
|
+
*/
|
|
81
|
+
refreshSession(sessionId) {
|
|
82
|
+
const session = this.getSession(sessionId);
|
|
83
|
+
if (!session)
|
|
84
|
+
return false;
|
|
85
|
+
session.expiresAt = Date.now() + SESSION_TIMEOUT;
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Generate cryptographically secure session ID
|
|
90
|
+
*/
|
|
91
|
+
generateSecureSessionId() {
|
|
92
|
+
// In production, use crypto.randomBytes
|
|
93
|
+
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
94
|
+
let result = "";
|
|
95
|
+
for (let i = 0; i < 32; i++) {
|
|
96
|
+
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Clean up expired sessions
|
|
102
|
+
*/
|
|
103
|
+
cleanupExpiredSessions() {
|
|
104
|
+
const now = Date.now();
|
|
105
|
+
for (const [sessionId, session] of this.sessions.entries()) {
|
|
106
|
+
if (now > session.expiresAt) {
|
|
107
|
+
this.sessions.delete(sessionId);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class AssetHasher {
|
|
2
|
+
/**
|
|
3
|
+
* Calculate hash of file content
|
|
4
|
+
*/
|
|
5
|
+
static hashContent(content: string | Buffer): string;
|
|
6
|
+
/**
|
|
7
|
+
* Rename file to include hash (e.g. style.css -> style.a1b2c3.css)
|
|
8
|
+
*/
|
|
9
|
+
static hashFile(filePath: string): string;
|
|
10
|
+
}
|