nuclie 1.0.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/LICENSE +21 -0
- package/README.md +516 -0
- package/dist/ai/analyzer.d.ts +29 -0
- package/dist/ai/analyzer.js +202 -0
- package/dist/ai/chat/cli.d.ts +3 -0
- package/dist/ai/chat/cli.js +38 -0
- package/dist/ai/client.d.ts +17 -0
- package/dist/ai/client.js +68 -0
- package/dist/ai/cloud/api.d.ts +28 -0
- package/dist/ai/cloud/api.js +118 -0
- package/dist/ai/cloud/modelSync.d.ts +18 -0
- package/dist/ai/cloud/modelSync.js +104 -0
- package/dist/ai/cloud/telemetry.d.ts +14 -0
- package/dist/ai/cloud/telemetry.js +23 -0
- package/dist/ai/config.d.ts +14 -0
- package/dist/ai/config.js +9 -0
- package/dist/ai/core/errorMemory.d.ts +14 -0
- package/dist/ai/core/errorMemory.js +36 -0
- package/dist/ai/dashboard/cli.d.ts +3 -0
- package/dist/ai/dashboard/cli.js +32 -0
- package/dist/ai/healer/applier.d.ts +9 -0
- package/dist/ai/healer/applier.js +74 -0
- package/dist/ai/healer/cli.d.ts +3 -0
- package/dist/ai/healer/cli.js +57 -0
- package/dist/ai/healer/collector.d.ts +16 -0
- package/dist/ai/healer/collector.js +41 -0
- package/dist/ai/healer/fixer.d.ts +12 -0
- package/dist/ai/healer/fixer.js +40 -0
- package/dist/ai/healer/llm.d.ts +9 -0
- package/dist/ai/healer/llm.js +20 -0
- package/dist/ai/healer/parser.d.ts +16 -0
- package/dist/ai/healer/parser.js +67 -0
- package/dist/ai/learning/evolver.d.ts +8 -0
- package/dist/ai/learning/evolver.js +24 -0
- package/dist/ai/llm/fixGenerator.d.ts +9 -0
- package/dist/ai/llm/fixGenerator.js +21 -0
- package/dist/ai/llm/ollama.d.ts +10 -0
- package/dist/ai/llm/ollama.js +56 -0
- package/dist/ai/local/fixStore.d.ts +19 -0
- package/dist/ai/local/fixStore.js +105 -0
- package/dist/ai/optimizer/analyzer.d.ts +9 -0
- package/dist/ai/optimizer/analyzer.js +65 -0
- package/dist/ai/optimizer/engine.d.ts +16 -0
- package/dist/ai/optimizer/engine.js +51 -0
- package/dist/ai/optimizer/llm.d.ts +8 -0
- package/dist/ai/optimizer/llm.js +14 -0
- package/dist/ai/optimizer/profiler.d.ts +11 -0
- package/dist/ai/optimizer/profiler.js +111 -0
- package/dist/ai/optimizer/rules.d.ts +12 -0
- package/dist/ai/optimizer/rules.js +37 -0
- package/dist/ai/patterns/common.d.ts +8 -0
- package/dist/ai/patterns/common.js +181 -0
- package/dist/ai/reporter/assembler.d.ts +11 -0
- package/dist/ai/reporter/assembler.js +10 -0
- package/dist/ai/reporter/generator.d.ts +4 -0
- package/dist/ai/reporter/generator.js +42 -0
- package/dist/ai/reporter/narrator.d.ts +8 -0
- package/dist/ai/reporter/narrator.js +29 -0
- package/dist/ai/schema.d.ts +104 -0
- package/dist/ai/schema.js +45 -0
- package/dist/ai/telemetry.d.ts +14 -0
- package/dist/ai/telemetry.js +96 -0
- package/dist/audit/a11y.d.ts +5 -0
- package/dist/audit/a11y.js +123 -0
- package/dist/audit/best-practices.d.ts +5 -0
- package/dist/audit/best-practices.js +68 -0
- package/dist/audit/build-integration.d.ts +59 -0
- package/dist/audit/build-integration.js +138 -0
- package/dist/audit/core.d.ts +62 -0
- package/dist/audit/core.js +327 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.js +60 -0
- package/dist/audit/perf.d.ts +5 -0
- package/dist/audit/perf.js +69 -0
- package/dist/audit/seo.d.ts +5 -0
- package/dist/audit/seo.js +63 -0
- package/dist/audit/types.d.ts +35 -0
- package/dist/audit/types.js +1 -0
- package/dist/audit-stub/types.d.ts +25 -0
- package/dist/audit-stub/types.js +1 -0
- package/dist/build/bundle-stats.d.ts +2 -0
- package/dist/build/bundle-stats.js +42 -0
- package/dist/build/bundler.d.ts +46 -0
- package/dist/build/bundler.js +31 -0
- package/dist/build/index.d.ts +36 -0
- package/dist/build/index.js +69 -0
- package/dist/build/pipeline.d.ts +31 -0
- package/dist/build/pipeline.js +68 -0
- package/dist/builder/server.d.ts +11 -0
- package/dist/builder/server.js +253 -0
- package/dist/cache/incremental.d.ts +75 -0
- package/dist/cache/incremental.js +200 -0
- package/dist/cache/index.d.ts +17 -0
- package/dist/cache/index.js +186 -0
- package/dist/cache/rocksdb.d.ts +18 -0
- package/dist/cache/rocksdb.js +63 -0
- package/dist/cli/css-cli.d.ts +5 -0
- package/dist/cli/css-cli.js +112 -0
- package/dist/cli/inspect.d.ts +1 -0
- package/dist/cli/inspect.js +94 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +586 -0
- package/dist/commands/analyze.d.ts +1 -0
- package/dist/commands/analyze.js +295 -0
- package/dist/commands/doctor.d.ts +21 -0
- package/dist/commands/doctor.js +364 -0
- package/dist/commands/ssr.d.ts +12 -0
- package/dist/commands/ssr.js +30 -0
- package/dist/commands/verify.d.ts +38 -0
- package/dist/commands/verify.js +459 -0
- package/dist/config/index.d.ts +145 -0
- package/dist/config/index.js +227 -0
- package/dist/config/live-config.d.ts +22 -0
- package/dist/config/live-config.js +88 -0
- package/dist/core/__tests__/permissions.test.d.ts +1 -0
- package/dist/core/__tests__/permissions.test.js +16 -0
- package/dist/core/__tests__/universal-transformer.test.d.ts +1 -0
- package/dist/core/__tests__/universal-transformer.test.js +27 -0
- package/dist/core/build/globalOptimizer.d.ts +8 -0
- package/dist/core/build/globalOptimizer.js +21 -0
- package/dist/core/build/incremental.d.ts +13 -0
- package/dist/core/build/incremental.js +29 -0
- package/dist/core/bundler-rolldown.d.ts +42 -0
- package/dist/core/bundler-rolldown.js +100 -0
- package/dist/core/cache/lazy-init.d.ts +50 -0
- package/dist/core/cache/lazy-init.js +153 -0
- package/dist/core/cache-manager.d.ts +51 -0
- package/dist/core/cache-manager.js +149 -0
- package/dist/core/css/engine.d.ts +37 -0
- package/dist/core/css/engine.js +113 -0
- package/dist/core/css-framework-detector.d.ts +10 -0
- package/dist/core/css-framework-detector.js +169 -0
- package/dist/core/detection/files.d.ts +2 -0
- package/dist/core/detection/files.js +77 -0
- package/dist/core/detection/index.d.ts +8 -0
- package/dist/core/detection/index.js +39 -0
- package/dist/core/detection/resolver.d.ts +2 -0
- package/dist/core/detection/resolver.js +116 -0
- package/dist/core/detection/scanner.d.ts +4 -0
- package/dist/core/detection/scanner.js +145 -0
- package/dist/core/detection/types.d.ts +33 -0
- package/dist/core/detection/types.js +12 -0
- package/dist/core/engine/cache.d.ts +18 -0
- package/dist/core/engine/cache.js +72 -0
- package/dist/core/engine/config.d.ts +11 -0
- package/dist/core/engine/config.js +158 -0
- package/dist/core/engine/emit.d.ts +8 -0
- package/dist/core/engine/emit.js +60 -0
- package/dist/core/engine/events.d.ts +13 -0
- package/dist/core/engine/events.js +35 -0
- package/dist/core/engine/execute.d.ts +5 -0
- package/dist/core/engine/execute.js +226 -0
- package/dist/core/engine/hash.d.ts +8 -0
- package/dist/core/engine/hash.js +39 -0
- package/dist/core/engine/index.d.ts +49 -0
- package/dist/core/engine/index.js +156 -0
- package/dist/core/engine/optimize.d.ts +2 -0
- package/dist/core/engine/optimize.js +99 -0
- package/dist/core/engine/plan.d.ts +9 -0
- package/dist/core/engine/plan.js +196 -0
- package/dist/core/engine/types.d.ts +120 -0
- package/dist/core/engine/types.js +1 -0
- package/dist/core/errors/hero-errors.d.ts +57 -0
- package/dist/core/errors/hero-errors.js +269 -0
- package/dist/core/framework-detector.d.ts +20 -0
- package/dist/core/framework-detector.js +148 -0
- package/dist/core/graph/js-graph-analyzer.d.ts +51 -0
- package/dist/core/graph/js-graph-analyzer.js +178 -0
- package/dist/core/graph/serializer.d.ts +7 -0
- package/dist/core/graph/serializer.js +24 -0
- package/dist/core/interop/analyze.d.ts +8 -0
- package/dist/core/interop/analyze.js +82 -0
- package/dist/core/interop/analyze_ast.d.ts +9 -0
- package/dist/core/interop/analyze_ast.js +174 -0
- package/dist/core/interop/index.d.ts +19 -0
- package/dist/core/interop/index.js +36 -0
- package/dist/core/interop/resolve.d.ts +9 -0
- package/dist/core/interop/resolve.js +55 -0
- package/dist/core/interop/types.d.ts +28 -0
- package/dist/core/interop/types.js +2 -0
- package/dist/core/interop/wrapper.d.ts +11 -0
- package/dist/core/interop/wrapper.js +50 -0
- package/dist/core/parser-bun.d.ts +54 -0
- package/dist/core/parser-bun.js +86 -0
- package/dist/core/permissions.d.ts +16 -0
- package/dist/core/permissions.js +47 -0
- package/dist/core/pipeline/framework-pipeline.d.ts +71 -0
- package/dist/core/pipeline/framework-pipeline.js +113 -0
- package/dist/core/plugins/index.d.ts +5 -0
- package/dist/core/plugins/index.js +5 -0
- package/dist/core/plugins/manager.d.ts +30 -0
- package/dist/core/plugins/manager.js +123 -0
- package/dist/core/plugins/sandbox_js.d.ts +9 -0
- package/dist/core/plugins/sandbox_js.js +37 -0
- package/dist/core/plugins/sandbox_wasm.d.ts +10 -0
- package/dist/core/plugins/sandbox_wasm.js +68 -0
- package/dist/core/plugins/types.d.ts +37 -0
- package/dist/core/plugins/types.js +2 -0
- package/dist/core/plugins/validation.d.ts +8 -0
- package/dist/core/plugins/validation.js +30 -0
- package/dist/core/sandbox.d.ts +9 -0
- package/dist/core/sandbox.js +79 -0
- package/dist/core/steps/css-optimization.d.ts +65 -0
- package/dist/core/steps/css-optimization.js +318 -0
- package/dist/core/steps.d.ts +7 -0
- package/dist/core/steps.js +17 -0
- package/dist/core/transform/batchTransformer.d.ts +12 -0
- package/dist/core/transform/batchTransformer.js +24 -0
- package/dist/core/transform/transformer.d.ts +9 -0
- package/dist/core/transform/transformer.js +189 -0
- package/dist/core/universal-transformer.d.ts +81 -0
- package/dist/core/universal-transformer.js +780 -0
- package/dist/create/index.d.ts +25 -0
- package/dist/create/index.js +584 -0
- package/dist/create/ui.d.ts +13 -0
- package/dist/create/ui.js +218 -0
- package/dist/create-nuclie/cli.d.ts +7 -0
- package/dist/create-nuclie/cli.js +73 -0
- package/dist/create-nuclie/templates.d.ts +18 -0
- package/dist/create-nuclie/templates.js +73 -0
- package/dist/create-nuclie.d.ts +2 -0
- package/dist/create-nuclie.js +7 -0
- package/dist/dashboard/metrics.d.ts +31 -0
- package/dist/dashboard/metrics.js +59 -0
- package/dist/dashboard/server/router.d.ts +52 -0
- package/dist/dashboard/server/router.js +36 -0
- package/dist/dev/__tests__/preBundler.test.d.ts +1 -0
- package/dist/dev/__tests__/preBundler.test.js +51 -0
- package/dist/dev/configWatcher.d.ts +10 -0
- package/dist/dev/configWatcher.js +42 -0
- package/dist/dev/devServer.d.ts +2 -0
- package/dist/dev/devServer.js +1398 -0
- package/dist/dev/devServer.minimal.d.ts +8 -0
- package/dist/dev/devServer.minimal.js +122 -0
- package/dist/dev/federation-dev.d.ts +14 -0
- package/dist/dev/federation-dev.js +69 -0
- package/dist/dev/hmr-engine.d.ts +12 -0
- package/dist/dev/hmr-engine.js +66 -0
- package/dist/dev/hmr-v2.d.ts +40 -0
- package/dist/dev/hmr-v2.js +87 -0
- package/dist/dev/hmrThrottle.d.ts +13 -0
- package/dist/dev/hmrThrottle.js +56 -0
- package/dist/dev/overlay/overlay-client.d.ts +7 -0
- package/dist/dev/overlay/overlay-client.js +53 -0
- package/dist/dev/overlay/overlay-ui.d.ts +17 -0
- package/dist/dev/overlay/overlay-ui.js +133 -0
- package/dist/dev/preBundler.d.ts +17 -0
- package/dist/dev/preBundler.js +343 -0
- package/dist/dev/statusHandler.d.ts +11 -0
- package/dist/dev/statusHandler.js +44 -0
- package/dist/dev/types.d.ts +30 -0
- package/dist/dev/types.js +1 -0
- package/dist/dev/watcher.d.ts +11 -0
- package/dist/dev/watcher.js +40 -0
- package/dist/dev-server-manual.d.ts +5 -0
- package/dist/dev-server-manual.js +24 -0
- package/dist/dev-server.d.ts +25 -0
- package/dist/dev-server.js +255 -0
- package/dist/env/api.d.ts +27 -0
- package/dist/env/api.js +36 -0
- package/dist/fix/ast-transforms.d.ts +81 -0
- package/dist/fix/ast-transforms.js +449 -0
- package/dist/hmr/classifier.d.ts +51 -0
- package/dist/hmr/classifier.js +232 -0
- package/dist/hmr/index.d.ts +5 -0
- package/dist/hmr/index.js +5 -0
- package/dist/hmr/overlay.d.ts +39 -0
- package/dist/hmr/overlay.js +285 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.js +57 -0
- package/dist/init/bootstrap.d.ts +1 -0
- package/dist/init/bootstrap.js +106 -0
- package/dist/init/index.d.ts +1 -0
- package/dist/init/index.js +74 -0
- package/dist/init/templates.d.ts +2 -0
- package/dist/init/templates.js +227 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +3 -0
- package/dist/marketplace/client.d.ts +25 -0
- package/dist/marketplace/client.js +73 -0
- package/dist/marketplace/db.d.ts +24 -0
- package/dist/marketplace/db.js +57 -0
- package/dist/marketplace/plugin-adapter.d.ts +14 -0
- package/dist/marketplace/plugin-adapter.js +85 -0
- package/dist/marketplace/server.d.ts +66 -0
- package/dist/marketplace/server.js +97 -0
- package/dist/meta-frameworks/base-router.d.ts +63 -0
- package/dist/meta-frameworks/base-router.js +259 -0
- package/dist/meta-frameworks/index.d.ts +8 -0
- package/dist/meta-frameworks/index.js +8 -0
- package/dist/meta-frameworks/nextjs/router.d.ts +35 -0
- package/dist/meta-frameworks/nextjs/router.js +176 -0
- package/dist/meta-frameworks/nuxt/router.d.ts +22 -0
- package/dist/meta-frameworks/nuxt/router.js +84 -0
- package/dist/meta-frameworks/remix/router.d.ts +28 -0
- package/dist/meta-frameworks/remix/router.js +136 -0
- package/dist/meta-frameworks/ssr/react-renderer.d.ts +24 -0
- package/dist/meta-frameworks/ssr/react-renderer.js +53 -0
- package/dist/meta-frameworks/ssr/server.d.ts +92 -0
- package/dist/meta-frameworks/ssr/server.js +312 -0
- package/dist/meta-frameworks/ssr/vue-renderer.d.ts +11 -0
- package/dist/meta-frameworks/ssr/vue-renderer.js +35 -0
- package/dist/meta-frameworks/types.d.ts +76 -0
- package/dist/meta-frameworks/types.js +5 -0
- package/dist/migrate/analyzer.d.ts +46 -0
- package/dist/migrate/analyzer.js +254 -0
- package/dist/migrate/cli.d.ts +10 -0
- package/dist/migrate/cli.js +63 -0
- package/dist/migrate/generator.d.ts +32 -0
- package/dist/migrate/generator.js +214 -0
- package/dist/native/cache.d.ts +86 -0
- package/dist/native/cache.js +154 -0
- package/dist/native/index.d.ts +4 -0
- package/dist/native/index.js +56 -0
- package/dist/native/orchestrator.d.ts +78 -0
- package/dist/native/orchestrator.js +107 -0
- package/dist/native/wasm.d.ts +22 -0
- package/dist/native/wasm.js +33 -0
- package/dist/nuclie_native.node +0 -0
- package/dist/plugins/assets.d.ts +2 -0
- package/dist/plugins/assets.js +50 -0
- package/dist/plugins/compat/adapter.d.ts +33 -0
- package/dist/plugins/compat/adapter.js +102 -0
- package/dist/plugins/compat/deferred.d.ts +17 -0
- package/dist/plugins/compat/deferred.js +28 -0
- package/dist/plugins/compat/index.d.ts +11 -0
- package/dist/plugins/compat/index.js +11 -0
- package/dist/plugins/compat/rollup.d.ts +19 -0
- package/dist/plugins/compat/rollup.js +76 -0
- package/dist/plugins/compat/tier-a.d.ts +60 -0
- package/dist/plugins/compat/tier-a.js +132 -0
- package/dist/plugins/compat/tier-b.d.ts +34 -0
- package/dist/plugins/compat/tier-b.js +90 -0
- package/dist/plugins/compat/tier-c.d.ts +48 -0
- package/dist/plugins/compat/tier-c.js +49 -0
- package/dist/plugins/compat/webpack.d.ts +26 -0
- package/dist/plugins/compat/webpack.js +77 -0
- package/dist/plugins/core/linker.d.ts +8 -0
- package/dist/plugins/core/linker.js +51 -0
- package/dist/plugins/css/bootstrap.d.ts +25 -0
- package/dist/plugins/css/bootstrap.js +110 -0
- package/dist/plugins/css/bulma.d.ts +23 -0
- package/dist/plugins/css/bulma.js +75 -0
- package/dist/plugins/css/css-modules.d.ts +19 -0
- package/dist/plugins/css/css-modules.js +96 -0
- package/dist/plugins/css/css-optimizer.d.ts +43 -0
- package/dist/plugins/css/css-optimizer.js +155 -0
- package/dist/plugins/css/emotion.d.ts +35 -0
- package/dist/plugins/css/emotion.js +109 -0
- package/dist/plugins/css/less.d.ts +6 -0
- package/dist/plugins/css/less.js +33 -0
- package/dist/plugins/css/material.d.ts +24 -0
- package/dist/plugins/css/material.js +97 -0
- package/dist/plugins/css/postcss.d.ts +2 -0
- package/dist/plugins/css/postcss.js +96 -0
- package/dist/plugins/css/sass.d.ts +6 -0
- package/dist/plugins/css/sass.js +36 -0
- package/dist/plugins/css/styled-components.d.ts +33 -0
- package/dist/plugins/css/styled-components.js +94 -0
- package/dist/plugins/css/stylus.d.ts +6 -0
- package/dist/plugins/css/stylus.js +41 -0
- package/dist/plugins/css/tailwind.d.ts +9 -0
- package/dist/plugins/css/tailwind.js +132 -0
- package/dist/plugins/css-in-js.d.ts +10 -0
- package/dist/plugins/css-in-js.js +24 -0
- package/dist/plugins/edge.d.ts +7 -0
- package/dist/plugins/edge.js +38 -0
- package/dist/plugins/esbuildAdapter.d.ts +3 -0
- package/dist/plugins/esbuildAdapter.js +77 -0
- package/dist/plugins/federation_next.d.ts +16 -0
- package/dist/plugins/federation_next.js +78 -0
- package/dist/plugins/framework-plugins.d.ts +3 -0
- package/dist/plugins/framework-plugins.js +40 -0
- package/dist/plugins/frameworks/index.d.ts +8 -0
- package/dist/plugins/frameworks/index.js +10 -0
- package/dist/plugins/frameworks/lit.d.ts +36 -0
- package/dist/plugins/frameworks/lit.js +114 -0
- package/dist/plugins/frameworks/react.d.ts +38 -0
- package/dist/plugins/frameworks/react.js +144 -0
- package/dist/plugins/frameworks/solid.d.ts +36 -0
- package/dist/plugins/frameworks/solid.js +108 -0
- package/dist/plugins/frameworks/svelte.d.ts +43 -0
- package/dist/plugins/frameworks/svelte.js +144 -0
- package/dist/plugins/frameworks/vue.d.ts +43 -0
- package/dist/plugins/frameworks/vue.js +240 -0
- package/dist/plugins/governance.d.ts +36 -0
- package/dist/plugins/governance.js +50 -0
- package/dist/plugins/html.d.ts +2 -0
- package/dist/plugins/html.js +49 -0
- package/dist/plugins/implementations/analytics.d.ts +7 -0
- package/dist/plugins/implementations/analytics.js +15 -0
- package/dist/plugins/implementations/apollo.d.ts +7 -0
- package/dist/plugins/implementations/apollo.js +15 -0
- package/dist/plugins/implementations/audit.d.ts +7 -0
- package/dist/plugins/implementations/audit.js +30 -0
- package/dist/plugins/implementations/auto-fix.d.ts +7 -0
- package/dist/plugins/implementations/auto-fix.js +15 -0
- package/dist/plugins/implementations/avif.d.ts +7 -0
- package/dist/plugins/implementations/avif.js +27 -0
- package/dist/plugins/implementations/babel.d.ts +7 -0
- package/dist/plugins/implementations/babel.js +15 -0
- package/dist/plugins/implementations/bundle-analyzer.d.ts +7 -0
- package/dist/plugins/implementations/bundle-analyzer.js +21 -0
- package/dist/plugins/implementations/bundle-size.d.ts +7 -0
- package/dist/plugins/implementations/bundle-size.js +21 -0
- package/dist/plugins/implementations/checker.d.ts +7 -0
- package/dist/plugins/implementations/checker.js +15 -0
- package/dist/plugins/implementations/chromatic.d.ts +7 -0
- package/dist/plugins/implementations/chromatic.js +15 -0
- package/dist/plugins/implementations/cloudflare.d.ts +7 -0
- package/dist/plugins/implementations/cloudflare.js +15 -0
- package/dist/plugins/implementations/code-split.d.ts +7 -0
- package/dist/plugins/implementations/code-split.js +21 -0
- package/dist/plugins/implementations/compression.d.ts +7 -0
- package/dist/plugins/implementations/compression.js +21 -0
- package/dist/plugins/implementations/copy.d.ts +7 -0
- package/dist/plugins/implementations/copy.js +15 -0
- package/dist/plugins/implementations/critical-css.d.ts +7 -0
- package/dist/plugins/implementations/critical-css.js +25 -0
- package/dist/plugins/implementations/crypto-sign.d.ts +7 -0
- package/dist/plugins/implementations/crypto-sign.js +30 -0
- package/dist/plugins/implementations/css-framework.d.ts +7 -0
- package/dist/plugins/implementations/css-framework.js +25 -0
- package/dist/plugins/implementations/css.d.ts +7 -0
- package/dist/plugins/implementations/css.js +25 -0
- package/dist/plugins/implementations/cypress.d.ts +7 -0
- package/dist/plugins/implementations/cypress.js +15 -0
- package/dist/plugins/implementations/determinism.d.ts +7 -0
- package/dist/plugins/implementations/determinism.js +21 -0
- package/dist/plugins/implementations/edge.d.ts +8 -0
- package/dist/plugins/implementations/edge.js +35 -0
- package/dist/plugins/implementations/env-validation.d.ts +7 -0
- package/dist/plugins/implementations/env-validation.js +30 -0
- package/dist/plugins/implementations/eslint.d.ts +7 -0
- package/dist/plugins/implementations/eslint.js +15 -0
- package/dist/plugins/implementations/federation.d.ts +7 -0
- package/dist/plugins/implementations/federation.js +15 -0
- package/dist/plugins/implementations/file.d.ts +7 -0
- package/dist/plugins/implementations/file.js +27 -0
- package/dist/plugins/implementations/font-subset.d.ts +7 -0
- package/dist/plugins/implementations/font-subset.js +27 -0
- package/dist/plugins/implementations/fonts.d.ts +7 -0
- package/dist/plugins/implementations/fonts.js +27 -0
- package/dist/plugins/implementations/formatjs.d.ts +7 -0
- package/dist/plugins/implementations/formatjs.js +18 -0
- package/dist/plugins/implementations/graphql.d.ts +7 -0
- package/dist/plugins/implementations/graphql.js +15 -0
- package/dist/plugins/implementations/hmr-classify.d.ts +7 -0
- package/dist/plugins/implementations/hmr-classify.js +21 -0
- package/dist/plugins/implementations/html.d.ts +7 -0
- package/dist/plugins/implementations/html.js +15 -0
- package/dist/plugins/implementations/i18n.d.ts +7 -0
- package/dist/plugins/implementations/i18n.js +15 -0
- package/dist/plugins/implementations/icon.d.ts +7 -0
- package/dist/plugins/implementations/icon.js +27 -0
- package/dist/plugins/implementations/imagemin.d.ts +7 -0
- package/dist/plugins/implementations/imagemin.js +27 -0
- package/dist/plugins/implementations/inspect.d.ts +7 -0
- package/dist/plugins/implementations/inspect.js +15 -0
- package/dist/plugins/implementations/jest.d.ts +7 -0
- package/dist/plugins/implementations/jest.js +19 -0
- package/dist/plugins/implementations/jotai.d.ts +8 -0
- package/dist/plugins/implementations/jotai.js +35 -0
- package/dist/plugins/implementations/lazy-load.d.ts +7 -0
- package/dist/plugins/implementations/lazy-load.js +21 -0
- package/dist/plugins/implementations/legacy.d.ts +7 -0
- package/dist/plugins/implementations/legacy.js +15 -0
- package/dist/plugins/implementations/lighthouse.d.ts +7 -0
- package/dist/plugins/implementations/lighthouse.js +21 -0
- package/dist/plugins/implementations/manifest.d.ts +7 -0
- package/dist/plugins/implementations/manifest.js +15 -0
- package/dist/plugins/implementations/markdown.d.ts +7 -0
- package/dist/plugins/implementations/markdown.js +15 -0
- package/dist/plugins/implementations/md.d.ts +7 -0
- package/dist/plugins/implementations/md.js +15 -0
- package/dist/plugins/implementations/mdx.d.ts +7 -0
- package/dist/plugins/implementations/mdx.js +15 -0
- package/dist/plugins/implementations/meta-tags.d.ts +7 -0
- package/dist/plugins/implementations/meta-tags.js +15 -0
- package/dist/plugins/implementations/mini-css-extract-plugin.d.ts +7 -0
- package/dist/plugins/implementations/mini-css-extract-plugin.js +25 -0
- package/dist/plugins/implementations/mobx.d.ts +8 -0
- package/dist/plugins/implementations/mobx.js +35 -0
- package/dist/plugins/implementations/mock.d.ts +7 -0
- package/dist/plugins/implementations/mock.js +15 -0
- package/dist/plugins/implementations/msw.d.ts +7 -0
- package/dist/plugins/implementations/msw.js +19 -0
- package/dist/plugins/implementations/nanostores.d.ts +7 -0
- package/dist/plugins/implementations/nanostores.js +18 -0
- package/dist/plugins/implementations/netlify.d.ts +7 -0
- package/dist/plugins/implementations/netlify.js +15 -0
- package/dist/plugins/implementations/observability.d.ts +7 -0
- package/dist/plugins/implementations/observability.js +15 -0
- package/dist/plugins/implementations/og-image.d.ts +7 -0
- package/dist/plugins/implementations/og-image.js +15 -0
- package/dist/plugins/implementations/pages.d.ts +7 -0
- package/dist/plugins/implementations/pages.js +15 -0
- package/dist/plugins/implementations/pinia.d.ts +8 -0
- package/dist/plugins/implementations/pinia.js +35 -0
- package/dist/plugins/implementations/plausible.d.ts +7 -0
- package/dist/plugins/implementations/plausible.js +18 -0
- package/dist/plugins/implementations/playwright.d.ts +7 -0
- package/dist/plugins/implementations/playwright.js +15 -0
- package/dist/plugins/implementations/postcss.d.ts +7 -0
- package/dist/plugins/implementations/postcss.js +25 -0
- package/dist/plugins/implementations/posthog.d.ts +7 -0
- package/dist/plugins/implementations/posthog.js +18 -0
- package/dist/plugins/implementations/prebundle.d.ts +7 -0
- package/dist/plugins/implementations/prebundle.js +21 -0
- package/dist/plugins/implementations/prefetch.d.ts +7 -0
- package/dist/plugins/implementations/prefetch.js +21 -0
- package/dist/plugins/implementations/preload.d.ts +7 -0
- package/dist/plugins/implementations/preload.js +21 -0
- package/dist/plugins/implementations/prisma.d.ts +7 -0
- package/dist/plugins/implementations/prisma.js +15 -0
- package/dist/plugins/implementations/pwa.d.ts +7 -0
- package/dist/plugins/implementations/pwa.js +15 -0
- package/dist/plugins/implementations/qr-code.d.ts +7 -0
- package/dist/plugins/implementations/qr-code.js +19 -0
- package/dist/plugins/implementations/razorpay.d.ts +7 -0
- package/dist/plugins/implementations/razorpay.js +19 -0
- package/dist/plugins/implementations/react-i18next.d.ts +7 -0
- package/dist/plugins/implementations/react-i18next.js +18 -0
- package/dist/plugins/implementations/react-query.d.ts +8 -0
- package/dist/plugins/implementations/react-query.js +35 -0
- package/dist/plugins/implementations/react.d.ts +8 -0
- package/dist/plugins/implementations/react.js +35 -0
- package/dist/plugins/implementations/recoil.d.ts +8 -0
- package/dist/plugins/implementations/recoil.js +35 -0
- package/dist/plugins/implementations/redux.d.ts +8 -0
- package/dist/plugins/implementations/redux.js +35 -0
- package/dist/plugins/implementations/relay.d.ts +7 -0
- package/dist/plugins/implementations/relay.js +15 -0
- package/dist/plugins/implementations/repro.d.ts +7 -0
- package/dist/plugins/implementations/repro.js +15 -0
- package/dist/plugins/implementations/robots.d.ts +7 -0
- package/dist/plugins/implementations/robots.js +15 -0
- package/dist/plugins/implementations/root-cause.d.ts +7 -0
- package/dist/plugins/implementations/root-cause.js +15 -0
- package/dist/plugins/implementations/rss.d.ts +7 -0
- package/dist/plugins/implementations/rss.js +15 -0
- package/dist/plugins/implementations/sass.d.ts +7 -0
- package/dist/plugins/implementations/sass.js +25 -0
- package/dist/plugins/implementations/sentry.d.ts +7 -0
- package/dist/plugins/implementations/sentry.js +15 -0
- package/dist/plugins/implementations/sitemap.d.ts +7 -0
- package/dist/plugins/implementations/sitemap.js +15 -0
- package/dist/plugins/implementations/solid.d.ts +8 -0
- package/dist/plugins/implementations/solid.js +35 -0
- package/dist/plugins/implementations/sprite.d.ts +7 -0
- package/dist/plugins/implementations/sprite.js +27 -0
- package/dist/plugins/implementations/ssr.d.ts +8 -0
- package/dist/plugins/implementations/ssr.js +35 -0
- package/dist/plugins/implementations/storybook.d.ts +7 -0
- package/dist/plugins/implementations/storybook.js +15 -0
- package/dist/plugins/implementations/stripe.d.ts +7 -0
- package/dist/plugins/implementations/stripe.js +19 -0
- package/dist/plugins/implementations/style.d.ts +7 -0
- package/dist/plugins/implementations/style.js +25 -0
- package/dist/plugins/implementations/svelte.d.ts +8 -0
- package/dist/plugins/implementations/svelte.js +35 -0
- package/dist/plugins/implementations/tailwind.d.ts +7 -0
- package/dist/plugins/implementations/tailwind.js +25 -0
- package/dist/plugins/implementations/tanstack-query.d.ts +7 -0
- package/dist/plugins/implementations/tanstack-query.js +18 -0
- package/dist/plugins/implementations/terser.d.ts +7 -0
- package/dist/plugins/implementations/terser.js +21 -0
- package/dist/plugins/implementations/testing-library-react.d.ts +7 -0
- package/dist/plugins/implementations/testing-library-react.js +19 -0
- package/dist/plugins/implementations/testing-library.d.ts +7 -0
- package/dist/plugins/implementations/testing-library.js +15 -0
- package/dist/plugins/implementations/tree-shake.d.ts +7 -0
- package/dist/plugins/implementations/tree-shake.js +21 -0
- package/dist/plugins/implementations/trpc.d.ts +7 -0
- package/dist/plugins/implementations/trpc.js +15 -0
- package/dist/plugins/implementations/ts.d.ts +7 -0
- package/dist/plugins/implementations/ts.js +15 -0
- package/dist/plugins/implementations/typescript.d.ts +7 -0
- package/dist/plugins/implementations/typescript.js +15 -0
- package/dist/plugins/implementations/unocss.d.ts +7 -0
- package/dist/plugins/implementations/unocss.js +25 -0
- package/dist/plugins/implementations/upi-payment.d.ts +7 -0
- package/dist/plugins/implementations/upi-payment.js +19 -0
- package/dist/plugins/implementations/url.d.ts +7 -0
- package/dist/plugins/implementations/url.js +27 -0
- package/dist/plugins/implementations/vercel.d.ts +7 -0
- package/dist/plugins/implementations/vercel.js +15 -0
- package/dist/plugins/implementations/visualizer.d.ts +7 -0
- package/dist/plugins/implementations/visualizer.js +15 -0
- package/dist/plugins/implementations/vite-svg-loader.d.ts +7 -0
- package/dist/plugins/implementations/vite-svg-loader.js +27 -0
- package/dist/plugins/implementations/vitest.d.ts +7 -0
- package/dist/plugins/implementations/vitest.js +15 -0
- package/dist/plugins/implementations/vue-i18n-next.d.ts +7 -0
- package/dist/plugins/implementations/vue-i18n-next.js +18 -0
- package/dist/plugins/implementations/vue-i18n.d.ts +7 -0
- package/dist/plugins/implementations/vue-i18n.js +15 -0
- package/dist/plugins/implementations/vue-layouts.d.ts +8 -0
- package/dist/plugins/implementations/vue-layouts.js +35 -0
- package/dist/plugins/implementations/vue.d.ts +8 -0
- package/dist/plugins/implementations/vue.js +35 -0
- package/dist/plugins/implementations/vuex.d.ts +8 -0
- package/dist/plugins/implementations/vuex.js +35 -0
- package/dist/plugins/implementations/wasm-sandbox.d.ts +7 -0
- package/dist/plugins/implementations/wasm-sandbox.js +30 -0
- package/dist/plugins/implementations/webp.d.ts +7 -0
- package/dist/plugins/implementations/webp.js +27 -0
- package/dist/plugins/implementations/windicss.d.ts +7 -0
- package/dist/plugins/implementations/windicss.js +25 -0
- package/dist/plugins/implementations/workbox.d.ts +7 -0
- package/dist/plugins/implementations/workbox.js +15 -0
- package/dist/plugins/implementations/xstate.d.ts +7 -0
- package/dist/plugins/implementations/xstate.js +18 -0
- package/dist/plugins/implementations/zod.d.ts +7 -0
- package/dist/plugins/implementations/zod.js +15 -0
- package/dist/plugins/implementations/zustand-devtools.d.ts +7 -0
- package/dist/plugins/implementations/zustand-devtools.js +18 -0
- package/dist/plugins/implementations/zustand.d.ts +8 -0
- package/dist/plugins/implementations/zustand.js +35 -0
- package/dist/plugins/index.d.ts +49 -0
- package/dist/plugins/index.js +117 -0
- package/dist/plugins/js-transform.d.ts +2 -0
- package/dist/plugins/js-transform.js +49 -0
- package/dist/plugins/json.d.ts +2 -0
- package/dist/plugins/json.js +34 -0
- package/dist/plugins/pluginWorker.mjs +95 -0
- package/dist/plugins/ported/adapter.d.ts +92 -0
- package/dist/plugins/ported/adapter.js +226 -0
- package/dist/plugins/registry.d.ts +51 -0
- package/dist/plugins/registry.js +151 -0
- package/dist/plugins/reporter.d.ts +5 -0
- package/dist/plugins/reporter.js +47 -0
- package/dist/plugins/samplePlugin.mjs +4 -0
- package/dist/plugins/sandbox.d.ts +12 -0
- package/dist/plugins/sandbox.js +126 -0
- package/dist/plugins/signer.d.ts +53 -0
- package/dist/plugins/signer.js +109 -0
- package/dist/plugins/static.d.ts +2 -0
- package/dist/plugins/static.js +47 -0
- package/dist/plugins/svelte.d.ts +7 -0
- package/dist/plugins/svelte.js +27 -0
- package/dist/plugins/testSandbox.d.ts +1 -0
- package/dist/plugins/testSandbox.js +14 -0
- package/dist/plugins/verify.d.ts +3 -0
- package/dist/plugins/verify.js +113 -0
- package/dist/plugins/vue.d.ts +7 -0
- package/dist/plugins/vue.js +86 -0
- package/dist/plugins/wasm-runtime.d.ts +15 -0
- package/dist/plugins/wasm-runtime.js +33 -0
- package/dist/plugins/wasm.d.ts +5 -0
- package/dist/plugins/wasm.js +44 -0
- package/dist/polyfills/corejs.d.ts +9 -0
- package/dist/polyfills/corejs.js +18 -0
- package/dist/presets/core.d.ts +111 -0
- package/dist/presets/core.js +239 -0
- package/dist/presets/frameworks.d.ts +34 -0
- package/dist/presets/frameworks.js +270 -0
- package/dist/presets/index.d.ts +8 -0
- package/dist/presets/index.js +3 -0
- package/dist/presets/infrastructure.d.ts +2 -0
- package/dist/presets/infrastructure.js +33 -0
- package/dist/presets/spa.d.ts +2 -0
- package/dist/presets/spa.js +15 -0
- package/dist/presets/ssg.d.ts +2 -0
- package/dist/presets/ssg.js +9 -0
- package/dist/presets/ssr.d.ts +2 -0
- package/dist/presets/ssr.js +13 -0
- package/dist/repro/dashboard.d.ts +83 -0
- package/dist/repro/dashboard.js +251 -0
- package/dist/repro/github.d.ts +26 -0
- package/dist/repro/github.js +73 -0
- package/dist/resolve/css-precedence.d.ts +16 -0
- package/dist/resolve/css-precedence.js +56 -0
- package/dist/resolve/graph.d.ts +48 -0
- package/dist/resolve/graph.js +232 -0
- package/dist/resolve/utils.d.ts +13 -0
- package/dist/resolve/utils.js +53 -0
- package/dist/runtime/client.d.ts +9 -0
- package/dist/runtime/client.js +218 -0
- package/dist/runtime/error-overlay.d.ts +15 -0
- package/dist/runtime/error-overlay.js +327 -0
- package/dist/runtime/federation-fallback.d.ts +67 -0
- package/dist/runtime/federation-fallback.js +225 -0
- package/dist/runtime/federation.d.ts +27 -0
- package/dist/runtime/federation.js +210 -0
- package/dist/runtime/federation_runtime.js +90 -0
- package/dist/runtime/hmr-client.d.ts +5 -0
- package/dist/runtime/hmr-client.js +70 -0
- package/dist/security/anomaly.d.ts +41 -0
- package/dist/security/anomaly.js +77 -0
- package/dist/server/security-headers.d.ts +37 -0
- package/dist/server/security-headers.js +110 -0
- package/dist/ssr/adapters/edge.d.ts +12 -0
- package/dist/ssr/adapters/edge.js +26 -0
- package/dist/ssr/adapters/index.d.ts +23 -0
- package/dist/ssr/adapters/index.js +58 -0
- package/dist/ssr/app-router.d.ts +24 -0
- package/dist/ssr/app-router.js +70 -0
- package/dist/ssr/edge/handlers.d.ts +24 -0
- package/dist/ssr/edge/handlers.js +48 -0
- package/dist/ssr/image.d.ts +24 -0
- package/dist/ssr/image.js +38 -0
- package/dist/ssr/isr.d.ts +14 -0
- package/dist/ssr/isr.js +29 -0
- package/dist/ssr/rsc.d.ts +19 -0
- package/dist/ssr/rsc.js +33 -0
- package/dist/ssr/streaming.d.ts +31 -0
- package/dist/ssr/streaming.js +78 -0
- package/dist/ssr/universal-engine.d.ts +36 -0
- package/dist/ssr/universal-engine.js +139 -0
- package/dist/templates/manager.d.ts +28 -0
- package/dist/templates/manager.js +162 -0
- package/dist/templates/starters/angular-spa.d.ts +6 -0
- package/dist/templates/starters/angular-spa.js +149 -0
- package/dist/templates/starters/edge.d.ts +6 -0
- package/dist/templates/starters/edge.js +93 -0
- package/dist/templates/starters/fintech.d.ts +6 -0
- package/dist/templates/starters/fintech.js +211 -0
- package/dist/templates/starters/monorepo.d.ts +6 -0
- package/dist/templates/starters/monorepo.js +133 -0
- package/dist/templates/starters/nextjs-app.d.ts +13 -0
- package/dist/templates/starters/nextjs-app.js +116 -0
- package/dist/templates/starters/preact-spa.d.ts +6 -0
- package/dist/templates/starters/preact-spa.js +97 -0
- package/dist/templates/starters/premium-dashboard.d.ts +6 -0
- package/dist/templates/starters/premium-dashboard.js +762 -0
- package/dist/templates/starters/react-spa.d.ts +6 -0
- package/dist/templates/starters/react-spa.js +152 -0
- package/dist/templates/starters/react-ssr.d.ts +6 -0
- package/dist/templates/starters/react-ssr.js +190 -0
- package/dist/templates/starters/remix-app.d.ts +12 -0
- package/dist/templates/starters/remix-app.js +108 -0
- package/dist/templates/starters/solid-spa.d.ts +6 -0
- package/dist/templates/starters/solid-spa.js +158 -0
- package/dist/templates/starters/svelte-spa.d.ts +6 -0
- package/dist/templates/starters/svelte-spa.js +147 -0
- package/dist/templates/starters/vue-spa.d.ts +6 -0
- package/dist/templates/starters/vue-spa.js +136 -0
- package/dist/test/api.d.ts +58 -0
- package/dist/test/api.js +154 -0
- package/dist/test/coverage.d.ts +1 -0
- package/dist/test/coverage.js +134 -0
- package/dist/test/determinism.d.ts +1 -0
- package/dist/test/determinism.js +122 -0
- package/dist/test/regression.d.ts +1 -0
- package/dist/test/regression.js +30 -0
- package/dist/test/runner.d.ts +1 -0
- package/dist/test/runner.js +159 -0
- package/dist/test-server.d.ts +1 -0
- package/dist/test-server.js +22 -0
- package/dist/ui/terminal-warnings.d.ts +10 -0
- package/dist/ui/terminal-warnings.js +26 -0
- package/dist/ui/types.d.ts +13 -0
- package/dist/ui/types.js +5 -0
- package/dist/ui/warning-detector.d.ts +46 -0
- package/dist/ui/warning-detector.js +178 -0
- package/dist/ui/warning-library.d.ts +51 -0
- package/dist/ui/warning-library.js +283 -0
- package/dist/utils/interactive.d.ts +2 -0
- package/dist/utils/interactive.js +37 -0
- package/dist/utils/logger.d.ts +26 -0
- package/dist/utils/logger.js +130 -0
- package/dist/utils/path-normalize.d.ts +24 -0
- package/dist/utils/path-normalize.js +37 -0
- package/dist/visual/chart-generator.d.ts +11 -0
- package/dist/visual/chart-generator.js +30 -0
- package/dist/visual/client/renderer.d.ts +31 -0
- package/dist/visual/client/renderer.js +98 -0
- package/dist/visual/federation-editor.d.ts +1 -0
- package/dist/visual/federation-editor.js +231 -0
- package/dist/visual/graph-engine.d.ts +38 -0
- package/dist/visual/graph-engine.js +64 -0
- package/dist/visual/graph-ui.d.ts +2 -0
- package/dist/visual/graph-ui.js +119 -0
- package/dist/visual/graph-visualizer.d.ts +69 -0
- package/dist/visual/graph-visualizer.js +282 -0
- package/dist/visual/root-cause.d.ts +83 -0
- package/dist/visual/root-cause.js +265 -0
- package/package.json +169 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nuclie Native Federation Runtime
|
|
3
|
+
* 100% self-contained, zero external dependencies
|
|
4
|
+
* Loads and manages federated modules using native ESM
|
|
5
|
+
* With advanced fallback strategies and circuit breaker pattern
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { fallbackManager, CircuitState } from './federation-fallback.js';
|
|
9
|
+
|
|
10
|
+
class FederationRuntime {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.remotes = new Map();
|
|
13
|
+
this.sharedModules = new Map();
|
|
14
|
+
this.manifestCache = new Map();
|
|
15
|
+
this.moduleCache = new Map();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Register a remote application
|
|
20
|
+
* @param {string} name - Remote name
|
|
21
|
+
* @param {string} url - Base URL or manifest URL
|
|
22
|
+
*/
|
|
23
|
+
async registerRemote(name, url) {
|
|
24
|
+
try {
|
|
25
|
+
// Fetch and parse manifest
|
|
26
|
+
const manifestUrl = url.endsWith('.json') ? url : `${url}/remoteEntry.json`;
|
|
27
|
+
const response = await fetch(manifestUrl);
|
|
28
|
+
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
throw new Error(`Failed to fetch manifest from ${manifestUrl}: ${response.statusText}`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const manifest = await response.json();
|
|
34
|
+
this.manifestCache.set(name, manifest);
|
|
35
|
+
|
|
36
|
+
// Store remote configuration
|
|
37
|
+
this.remotes.set(name, {
|
|
38
|
+
name: manifest.name || name,
|
|
39
|
+
url: url.endsWith('.json') ? url.replace('/remoteEntry.json', '') : url,
|
|
40
|
+
manifest,
|
|
41
|
+
loaded: true
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
console.log(`[Federation] Registered remote: ${name}`, manifest);
|
|
45
|
+
return manifest;
|
|
46
|
+
} catch (error) {
|
|
47
|
+
console.error(`[Federation] Failed to register remote ${name}:`, error);
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Load a module from a remote
|
|
54
|
+
* @param {string} remoteName - Name of the remote
|
|
55
|
+
* @param {string} modulePath - Path to the module (e.g., './Button')
|
|
56
|
+
* @returns {Promise<any>} The loaded module
|
|
57
|
+
*/
|
|
58
|
+
async loadRemoteModule(remoteName, modulePath) {
|
|
59
|
+
const cacheKey = `${remoteName}:${modulePath}`;
|
|
60
|
+
|
|
61
|
+
// Check cache first
|
|
62
|
+
if (this.moduleCache.has(cacheKey)) {
|
|
63
|
+
return this.moduleCache.get(cacheKey);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const remote = this.remotes.get(remoteName);
|
|
67
|
+
if (!remote) {
|
|
68
|
+
throw new Error(`Remote "${remoteName}" not registered. Call registerRemote() first.`);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const manifest = remote.manifest;
|
|
72
|
+
const exposed = manifest.exposes?.[modulePath];
|
|
73
|
+
|
|
74
|
+
if (!exposed) {
|
|
75
|
+
throw new Error(`Module "${modulePath}" not exposed by remote "${remoteName}"`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
try {
|
|
79
|
+
// Construct full URL
|
|
80
|
+
const moduleUrl = this.resolveModuleUrl(remote.url, exposed.import);
|
|
81
|
+
|
|
82
|
+
console.log(`[Federation] Loading module: ${remoteName}${modulePath} from ${moduleUrl}`);
|
|
83
|
+
|
|
84
|
+
// Dynamic import
|
|
85
|
+
const module = await import(/* @vite-ignore */ moduleUrl);
|
|
86
|
+
|
|
87
|
+
// Cache the module
|
|
88
|
+
this.moduleCache.set(cacheKey, module);
|
|
89
|
+
|
|
90
|
+
return module;
|
|
91
|
+
} catch (error) {
|
|
92
|
+
console.error(`[Federation] Failed to load module ${remoteName}${modulePath}:`, error);
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Resolve module URL from base URL and import path
|
|
99
|
+
* @private
|
|
100
|
+
*/
|
|
101
|
+
resolveModuleUrl(baseUrl, importPath) {
|
|
102
|
+
// Handle absolute URLs
|
|
103
|
+
if (importPath.startsWith('http://') || importPath.startsWith('https://')) {
|
|
104
|
+
return importPath;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Handle relative paths
|
|
108
|
+
if (importPath.startsWith('./') || importPath.startsWith('../')) {
|
|
109
|
+
return `${baseUrl}/${importPath.replace(/^\.\//, '')}`;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Default: treat as relative
|
|
113
|
+
return `${baseUrl}/${importPath}`;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Register a shared module (for singleton dependencies like React)
|
|
118
|
+
* @param {string} name - Module name (e.g., 'react')
|
|
119
|
+
* @param {any} module - The actual module
|
|
120
|
+
* @param {string} version - Version string
|
|
121
|
+
*/
|
|
122
|
+
registerShared(name, module, version) {
|
|
123
|
+
this.sharedModules.set(name, {
|
|
124
|
+
module,
|
|
125
|
+
version,
|
|
126
|
+
singleton: true
|
|
127
|
+
});
|
|
128
|
+
console.log(`[Federation] Registered shared module: ${name}@${version}`);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Get a shared module
|
|
133
|
+
* @param {string} name - Module name
|
|
134
|
+
* @returns {any} The shared module or undefined
|
|
135
|
+
*/
|
|
136
|
+
getShared(name) {
|
|
137
|
+
return this.sharedModules.get(name)?.module;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Prefetch remote manifests for faster loading
|
|
142
|
+
* @param {Array<{name: string, url: string}>} remotes
|
|
143
|
+
*/
|
|
144
|
+
async prefetchRemotes(remotes) {
|
|
145
|
+
const promises = remotes.map(({ name, url }) =>
|
|
146
|
+
this.registerRemote(name, url).catch(err => {
|
|
147
|
+
console.warn(`[Federation] Prefetch failed for ${name}:`, err);
|
|
148
|
+
})
|
|
149
|
+
);
|
|
150
|
+
await Promise.all(promises);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Health check for a remote
|
|
155
|
+
* @param {string} remoteName
|
|
156
|
+
* @returns {Promise<boolean>}
|
|
157
|
+
*/
|
|
158
|
+
async healthCheck(remoteName) {
|
|
159
|
+
const remote = this.remotes.get(remoteName);
|
|
160
|
+
if (!remote) return false;
|
|
161
|
+
|
|
162
|
+
const manifest = remote.manifest;
|
|
163
|
+
if (manifest.health) {
|
|
164
|
+
try {
|
|
165
|
+
const response = await fetch(`${remote.url}${manifest.health}`);
|
|
166
|
+
return response.ok;
|
|
167
|
+
} catch {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Default: check if manifest is accessible
|
|
173
|
+
return remote.loaded;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Clear module cache (useful for HMR)
|
|
178
|
+
* @param {string} [remoteName] - Optional: clear only specific remote
|
|
179
|
+
*/
|
|
180
|
+
clearCache(remoteName) {
|
|
181
|
+
if (remoteName) {
|
|
182
|
+
for (const [key] of this.moduleCache) {
|
|
183
|
+
if (key.startsWith(`${remoteName}:`)) {
|
|
184
|
+
this.moduleCache.delete(key);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
} else {
|
|
188
|
+
this.moduleCache.clear();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Global singleton instance
|
|
194
|
+
if (typeof window !== 'undefined') {
|
|
195
|
+
window.__NUCLIE_FEDERATION__ = window.__NUCLIE_FEDERATION__ || new FederationRuntime();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Export for module usage
|
|
199
|
+
export default typeof window !== 'undefined' ? window.__NUCLIE_FEDERATION__ : new FederationRuntime();
|
|
200
|
+
|
|
201
|
+
// Helper function for easier usage
|
|
202
|
+
export async function loadRemote(remoteName, modulePath) {
|
|
203
|
+
const runtime = typeof window !== 'undefined' ? window.__NUCLIE_FEDERATION__ : new FederationRuntime();
|
|
204
|
+
return runtime.loadRemoteModule(remoteName, modulePath);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export async function registerRemote(name, url) {
|
|
208
|
+
const runtime = typeof window !== 'undefined' ? window.__NUCLIE_FEDERATION__ : new FederationRuntime();
|
|
209
|
+
return runtime.registerRemote(name, url);
|
|
210
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Microfrontend Runtime Loader
|
|
3
|
+
* Handles loading remote modules and managing shared dependencies.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Global scope for shared dependencies
|
|
7
|
+
const shareScope = {
|
|
8
|
+
default: {}
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
// Map of loaded remotes
|
|
12
|
+
const containerMap = {};
|
|
13
|
+
|
|
14
|
+
// Map of loading promises
|
|
15
|
+
const loadingMap = {};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Initialize a remote container
|
|
19
|
+
*/
|
|
20
|
+
async function initRemote(container, scope) {
|
|
21
|
+
if (!container.__initialized && !container.__initializing) {
|
|
22
|
+
container.__initializing = true;
|
|
23
|
+
if (!container.init) {
|
|
24
|
+
console.warn('Remote container does not have init method');
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
await container.init(scope);
|
|
28
|
+
container.__initialized = true;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Load a remote module
|
|
34
|
+
* @param {string} url - URL of the remoteEntry.js
|
|
35
|
+
* @param {string} scope - Name of the remote container
|
|
36
|
+
* @param {string} module - Path of the module to load
|
|
37
|
+
*/
|
|
38
|
+
export async function loadRemote(url, scope, module) {
|
|
39
|
+
// 1. Load the remote entry script if not already loaded
|
|
40
|
+
if (!window[scope]) {
|
|
41
|
+
if (!loadingMap[url]) {
|
|
42
|
+
loadingMap[url] = new Promise((resolve, reject) => {
|
|
43
|
+
const script = document.createElement('script');
|
|
44
|
+
script.src = url;
|
|
45
|
+
script.type = 'text/javascript';
|
|
46
|
+
script.async = true;
|
|
47
|
+
|
|
48
|
+
script.onload = () => {
|
|
49
|
+
resolve(window[scope]);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
script.onerror = (e) => {
|
|
53
|
+
reject(new Error(`Failed to load remote script: ${url}`));
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
document.head.appendChild(script);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
await loadingMap[url];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const container = window[scope];
|
|
64
|
+
if (!container) {
|
|
65
|
+
throw new Error(`Remote container '${scope}' not found after loading script`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// 2. Initialize the container with shared scope
|
|
69
|
+
await initRemote(container, shareScope.default);
|
|
70
|
+
|
|
71
|
+
// 3. Get the module factory
|
|
72
|
+
const factory = await container.get(module);
|
|
73
|
+
|
|
74
|
+
// 4. Return the module exports
|
|
75
|
+
return factory();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Register a shared module
|
|
80
|
+
*/
|
|
81
|
+
export function registerShared(name, version, factory) {
|
|
82
|
+
if (!shareScope.default[name]) {
|
|
83
|
+
shareScope.default[name] = {};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
shareScope.default[name][version] = {
|
|
87
|
+
loaded: false,
|
|
88
|
+
get: factory
|
|
89
|
+
};
|
|
90
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nuclie HMR Client Runtime
|
|
3
|
+
* Provides the `import.meta.hot` API and handles WebSocket updates.
|
|
4
|
+
*/
|
|
5
|
+
class HMRClient {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.registry = new Map();
|
|
8
|
+
this.boundaries = new Map();
|
|
9
|
+
const protocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
10
|
+
this.socket = new WebSocket(`${protocol}//${location.host}`);
|
|
11
|
+
this.socket.onmessage = (e) => this.handleMessage(JSON.parse(e.data));
|
|
12
|
+
}
|
|
13
|
+
handleMessage(msg) {
|
|
14
|
+
console.log('[Nuclie] HMR Message:', msg);
|
|
15
|
+
switch (msg.type) {
|
|
16
|
+
case 'connected':
|
|
17
|
+
console.log('[Nuclie] Connected to Dev Server');
|
|
18
|
+
break;
|
|
19
|
+
case 'update':
|
|
20
|
+
this.applyUpdate(msg.payload.updates);
|
|
21
|
+
break;
|
|
22
|
+
case 'reload':
|
|
23
|
+
console.warn('[Nuclie] Reload triggered:', msg.payload.reason);
|
|
24
|
+
location.reload();
|
|
25
|
+
break;
|
|
26
|
+
case 'error':
|
|
27
|
+
console.error('[Nuclie] Build Error:', msg.payload.message);
|
|
28
|
+
// Show Error Overlay (Phase 5.11)
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async applyUpdate(updates) {
|
|
33
|
+
for (const update of updates) {
|
|
34
|
+
console.log(`[Nuclie] Hot Updating: ${update.moduleId}`);
|
|
35
|
+
try {
|
|
36
|
+
// 1. Dispose old module
|
|
37
|
+
const old = this.registry.get(update.moduleId);
|
|
38
|
+
if (old && old.hot && old.hot._dispose) {
|
|
39
|
+
old.hot._dispose();
|
|
40
|
+
}
|
|
41
|
+
// 2. Import new module (with cache buster)
|
|
42
|
+
const newModule = await import(update.url + '?t=' + Date.now());
|
|
43
|
+
this.registry.set(update.moduleId, newModule);
|
|
44
|
+
// 3. Re-execute boundary or notify parents
|
|
45
|
+
// This requires a dependency map on the client
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
console.error('[Nuclie] Update Failed:', err);
|
|
49
|
+
location.reload();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// API provided to modules
|
|
54
|
+
createHotContext(moduleId) {
|
|
55
|
+
return {
|
|
56
|
+
accept: (cb) => {
|
|
57
|
+
this.boundaries.set(moduleId, cb || true);
|
|
58
|
+
},
|
|
59
|
+
dispose: (cb) => {
|
|
60
|
+
const mod = this.registry.get(moduleId);
|
|
61
|
+
if (mod && mod.hot)
|
|
62
|
+
mod.hot._dispose = cb;
|
|
63
|
+
},
|
|
64
|
+
invalidate: () => location.reload(),
|
|
65
|
+
data: {}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
window.__NUCLIE_HMR__ = new HMRClient();
|
|
70
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anomaly Detection System (Day 41)
|
|
3
|
+
*
|
|
4
|
+
* Monitors runtime and build-time security events including:
|
|
5
|
+
* - CSP Violations
|
|
6
|
+
* - XSS Patterns in Requests
|
|
7
|
+
* - Plugin Escape Attempts
|
|
8
|
+
*/
|
|
9
|
+
export interface SecurityEvent {
|
|
10
|
+
type: 'csp-violation' | 'xss-attempt' | 'plugin-escape' | 'auth-failure' | 'anomaly';
|
|
11
|
+
severity: 'low' | 'medium' | 'high' | 'critical';
|
|
12
|
+
details: any;
|
|
13
|
+
timestamp: number;
|
|
14
|
+
source?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class AnomalyDetector {
|
|
17
|
+
private events;
|
|
18
|
+
private blockedIPs;
|
|
19
|
+
/**
|
|
20
|
+
* Report a security event
|
|
21
|
+
*/
|
|
22
|
+
report(event: Omit<SecurityEvent, 'timestamp'>): void;
|
|
23
|
+
/**
|
|
24
|
+
* Analyze incoming HTTP request for XSS signatures
|
|
25
|
+
*/
|
|
26
|
+
scanRequest(req: {
|
|
27
|
+
url: string;
|
|
28
|
+
headers: any;
|
|
29
|
+
method: string;
|
|
30
|
+
}): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Get scan summary
|
|
33
|
+
*/
|
|
34
|
+
getDashboard(): {
|
|
35
|
+
totalEvents: number;
|
|
36
|
+
critical: number;
|
|
37
|
+
high: number;
|
|
38
|
+
recentEvents: SecurityEvent[];
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export declare const anomalyDetector: AnomalyDetector;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anomaly Detection System (Day 41)
|
|
3
|
+
*
|
|
4
|
+
* Monitors runtime and build-time security events including:
|
|
5
|
+
* - CSP Violations
|
|
6
|
+
* - XSS Patterns in Requests
|
|
7
|
+
* - Plugin Escape Attempts
|
|
8
|
+
*/
|
|
9
|
+
export class AnomalyDetector {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.events = [];
|
|
12
|
+
this.blockedIPs = new Set();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Report a security event
|
|
16
|
+
*/
|
|
17
|
+
report(event) {
|
|
18
|
+
const fullEvent = {
|
|
19
|
+
...event,
|
|
20
|
+
timestamp: Date.now()
|
|
21
|
+
};
|
|
22
|
+
this.events.push(fullEvent);
|
|
23
|
+
// Log critical events immediately
|
|
24
|
+
if (fullEvent.severity === 'critical' || fullEvent.severity === 'high') {
|
|
25
|
+
// Using console directly to ensure visibility, or use logger if available
|
|
26
|
+
console.error(`🚨 [SECURITY] ${fullEvent.type.toUpperCase()}:`, fullEvent.details);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Analyze incoming HTTP request for XSS signatures
|
|
31
|
+
*/
|
|
32
|
+
scanRequest(req) {
|
|
33
|
+
const xssPatterns = [
|
|
34
|
+
/<script>/i,
|
|
35
|
+
/javascript:/i,
|
|
36
|
+
/onload\s*=/i,
|
|
37
|
+
/onerror\s*=/i,
|
|
38
|
+
/eval\(/i
|
|
39
|
+
];
|
|
40
|
+
// Decode URL to catch encoded attacks (e.g. %3Cscript%3E)
|
|
41
|
+
let decodedUrl = req.url || '';
|
|
42
|
+
try {
|
|
43
|
+
decodedUrl = decodeURIComponent(req.url || '');
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
// malformed URI sequence, use raw
|
|
47
|
+
}
|
|
48
|
+
const target = decodedUrl + JSON.stringify(req.headers);
|
|
49
|
+
for (const pattern of xssPatterns) {
|
|
50
|
+
if (pattern.test(target)) {
|
|
51
|
+
this.report({
|
|
52
|
+
type: 'xss-attempt',
|
|
53
|
+
severity: 'high',
|
|
54
|
+
details: {
|
|
55
|
+
url: req.url,
|
|
56
|
+
pattern: pattern.toString(),
|
|
57
|
+
method: req.method
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return false; // Block request
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return true; // Safe
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get scan summary
|
|
67
|
+
*/
|
|
68
|
+
getDashboard() {
|
|
69
|
+
return {
|
|
70
|
+
totalEvents: this.events.length,
|
|
71
|
+
critical: this.events.filter(e => e.severity === 'critical').length,
|
|
72
|
+
high: this.events.filter(e => e.severity === 'high').length,
|
|
73
|
+
recentEvents: this.events.slice(-10)
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export const anomalyDetector = new AnomalyDetector();
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { IncomingMessage, ServerResponse } from 'http';
|
|
2
|
+
export interface SecurityHeadersConfig {
|
|
3
|
+
csp?: string | boolean;
|
|
4
|
+
hsts?: boolean;
|
|
5
|
+
frameOptions?: 'DENY' | 'SAMEORIGIN' | string;
|
|
6
|
+
xssProtection?: boolean;
|
|
7
|
+
contentTypeNosniff?: boolean;
|
|
8
|
+
referrerPolicy?: string;
|
|
9
|
+
permissionsPolicy?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Production-grade security headers middleware
|
|
13
|
+
*/
|
|
14
|
+
export declare class SecurityHeaders {
|
|
15
|
+
private config;
|
|
16
|
+
constructor(config?: SecurityHeadersConfig);
|
|
17
|
+
/**
|
|
18
|
+
* Apply security headers to response
|
|
19
|
+
*/
|
|
20
|
+
apply(req: IncomingMessage, res: ServerResponse): void;
|
|
21
|
+
/**
|
|
22
|
+
* Get default Content Security Policy for development
|
|
23
|
+
*/
|
|
24
|
+
private getDefaultCSP;
|
|
25
|
+
/**
|
|
26
|
+
* Get production-grade CSP (stricter)
|
|
27
|
+
*/
|
|
28
|
+
static getProductionCSP(nonce?: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Middleware function for Express-like servers
|
|
31
|
+
*/
|
|
32
|
+
middleware(): (req: IncomingMessage, res: ServerResponse, next?: () => void) => void;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create security headers middleware with config
|
|
36
|
+
*/
|
|
37
|
+
export declare function createSecurityHeaders(config?: SecurityHeadersConfig): SecurityHeaders;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Production-grade security headers middleware
|
|
3
|
+
*/
|
|
4
|
+
export class SecurityHeaders {
|
|
5
|
+
constructor(config = {}) {
|
|
6
|
+
this.config = {
|
|
7
|
+
csp: config.csp ?? true,
|
|
8
|
+
hsts: config.hsts ?? true,
|
|
9
|
+
frameOptions: config.frameOptions ?? 'SAMEORIGIN',
|
|
10
|
+
xssProtection: config.xssProtection ?? true,
|
|
11
|
+
contentTypeNosniff: config.contentTypeNosniff ?? true,
|
|
12
|
+
referrerPolicy: config.referrerPolicy ?? 'strict-origin-when-cross-origin',
|
|
13
|
+
permissionsPolicy: config.permissionsPolicy
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Apply security headers to response
|
|
18
|
+
*/
|
|
19
|
+
apply(req, res) {
|
|
20
|
+
// Content Security Policy
|
|
21
|
+
if (this.config.csp) {
|
|
22
|
+
const cspValue = typeof this.config.csp === 'string'
|
|
23
|
+
? this.config.csp
|
|
24
|
+
: this.getDefaultCSP();
|
|
25
|
+
res.setHeader('Content-Security-Policy', cspValue);
|
|
26
|
+
}
|
|
27
|
+
// HTTP Strict Transport Security
|
|
28
|
+
if (this.config.hsts) {
|
|
29
|
+
res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload');
|
|
30
|
+
}
|
|
31
|
+
// X-Frame-Options
|
|
32
|
+
if (this.config.frameOptions) {
|
|
33
|
+
res.setHeader('X-Frame-Options', this.config.frameOptions);
|
|
34
|
+
}
|
|
35
|
+
// X-XSS-Protection (legacy, but still useful)
|
|
36
|
+
if (this.config.xssProtection) {
|
|
37
|
+
res.setHeader('X-XSS-Protection', '1; mode=block');
|
|
38
|
+
}
|
|
39
|
+
// X-Content-Type-Options
|
|
40
|
+
if (this.config.contentTypeNosniff) {
|
|
41
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
42
|
+
}
|
|
43
|
+
// Referrer-Policy
|
|
44
|
+
if (this.config.referrerPolicy) {
|
|
45
|
+
res.setHeader('Referrer-Policy', this.config.referrerPolicy);
|
|
46
|
+
}
|
|
47
|
+
// Permissions-Policy (formerly Feature-Policy)
|
|
48
|
+
if (this.config.permissionsPolicy) {
|
|
49
|
+
res.setHeader('Permissions-Policy', this.config.permissionsPolicy);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Default: restrict dangerous features
|
|
53
|
+
res.setHeader('Permissions-Policy', 'camera=(), microphone=(), geolocation=(), interest-cohort=()');
|
|
54
|
+
}
|
|
55
|
+
// Additional security headers
|
|
56
|
+
res.setHeader('X-DNS-Prefetch-Control', 'off');
|
|
57
|
+
res.setHeader('X-Download-Options', 'noopen');
|
|
58
|
+
res.setHeader('X-Permitted-Cross-Domain-Policies', 'none');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get default Content Security Policy for development
|
|
62
|
+
*/
|
|
63
|
+
getDefaultCSP() {
|
|
64
|
+
return [
|
|
65
|
+
"default-src 'self'",
|
|
66
|
+
"script-src 'self' 'unsafe-inline' 'unsafe-eval'", // Relaxed for dev
|
|
67
|
+
"style-src 'self' 'unsafe-inline'",
|
|
68
|
+
"img-src 'self' data: blob: https:",
|
|
69
|
+
"font-src 'self' data:",
|
|
70
|
+
"connect-src 'self' ws: wss:", // WebSocket for HMR
|
|
71
|
+
"frame-ancestors 'self'",
|
|
72
|
+
"base-uri 'self'",
|
|
73
|
+
"form-action 'self'"
|
|
74
|
+
].join('; ');
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get production-grade CSP (stricter)
|
|
78
|
+
*/
|
|
79
|
+
static getProductionCSP(nonce) {
|
|
80
|
+
const nonceAttr = nonce ? ` 'nonce-${nonce}'` : '';
|
|
81
|
+
return [
|
|
82
|
+
"default-src 'self'",
|
|
83
|
+
`script-src 'self'${nonceAttr}`,
|
|
84
|
+
"style-src 'self' 'unsafe-inline'", // Some frameworks need this
|
|
85
|
+
"img-src 'self' data: https:",
|
|
86
|
+
"font-src 'self'",
|
|
87
|
+
"connect-src 'self'",
|
|
88
|
+
"frame-ancestors 'none'",
|
|
89
|
+
"base-uri 'self'",
|
|
90
|
+
"form-action 'self'",
|
|
91
|
+
"upgrade-insecure-requests"
|
|
92
|
+
].join('; ');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Middleware function for Express-like servers
|
|
96
|
+
*/
|
|
97
|
+
middleware() {
|
|
98
|
+
return (req, res, next) => {
|
|
99
|
+
this.apply(req, res);
|
|
100
|
+
if (next)
|
|
101
|
+
next();
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Create security headers middleware with config
|
|
107
|
+
*/
|
|
108
|
+
export function createSecurityHeaders(config) {
|
|
109
|
+
return new SecurityHeaders(config);
|
|
110
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SSRAdapter } from '../universal-engine.js';
|
|
2
|
+
/**
|
|
3
|
+
* Nuclie Vercel Edge / Cloudflare Workers Adapter
|
|
4
|
+
* Day 54: SSR Power Locked
|
|
5
|
+
*/
|
|
6
|
+
export declare function createEdgeHandler(adapter: SSRAdapter): (request: Request) => Promise<Response>;
|
|
7
|
+
/**
|
|
8
|
+
* Cloudflare Workers entry point bridge
|
|
9
|
+
*/
|
|
10
|
+
export declare function exportToCloudflare(handler: any): {
|
|
11
|
+
fetch(request: Request, env: any, ctx: any): Promise<any>;
|
|
12
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { UniversalSSREngine } from '../universal-engine.js';
|
|
2
|
+
/**
|
|
3
|
+
* Nuclie Vercel Edge / Cloudflare Workers Adapter
|
|
4
|
+
* Day 54: SSR Power Locked
|
|
5
|
+
*/
|
|
6
|
+
export function createEdgeHandler(adapter) {
|
|
7
|
+
const engine = new UniversalSSREngine(adapter);
|
|
8
|
+
return async (request) => {
|
|
9
|
+
const response = await engine.handleRequest(request);
|
|
10
|
+
if (response instanceof Response) {
|
|
11
|
+
return response;
|
|
12
|
+
}
|
|
13
|
+
// Fallback for non-standard response
|
|
14
|
+
return new Response('Edge runtime internal error', { status: 500 });
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Cloudflare Workers entry point bridge
|
|
19
|
+
*/
|
|
20
|
+
export function exportToCloudflare(handler) {
|
|
21
|
+
return {
|
|
22
|
+
async fetch(request, env, ctx) {
|
|
23
|
+
return await handler(request);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|