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,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MODULE 8: PERSISTENT CACHE & COLD START MASTERY
|
|
3
|
+
*
|
|
4
|
+
* Strategy:
|
|
5
|
+
* 1. Lazy RocksDB Initialization (Deferred to background)
|
|
6
|
+
* 2. Mmap-backed reads for native performance
|
|
7
|
+
* 3. Cache Warming in non-blocking background thread
|
|
8
|
+
* 4. Docker/Edge persistent volume support
|
|
9
|
+
*/
|
|
10
|
+
import path from 'path';
|
|
11
|
+
import fs from 'fs';
|
|
12
|
+
import { log } from '../../utils/logger.js';
|
|
13
|
+
import { BuildCache } from '../../native/cache.js';
|
|
14
|
+
export class LazyCacheInitializer {
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.rocksDb = null;
|
|
17
|
+
this.initPromise = null;
|
|
18
|
+
this.isInitialized = false;
|
|
19
|
+
this.cacheDir = options.cacheDir;
|
|
20
|
+
this.preload = options.preload ?? true;
|
|
21
|
+
this.warmup = options.warmup ?? true;
|
|
22
|
+
// Auto-detect Docker/Edge persistent volumes
|
|
23
|
+
this.setupPersistentStorage();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Setup persistent storage paths for Docker/CI/Edge
|
|
27
|
+
*/
|
|
28
|
+
setupPersistentStorage() {
|
|
29
|
+
// Task Day 51: Persistent cache for Docker/Edge
|
|
30
|
+
const tmpCache = '/tmp/nuclie-cache';
|
|
31
|
+
if (process.env.DOCKER_CONTAINER && !fs.existsSync(this.cacheDir)) {
|
|
32
|
+
try {
|
|
33
|
+
if (!fs.existsSync(tmpCache))
|
|
34
|
+
fs.mkdirSync(tmpCache, { recursive: true });
|
|
35
|
+
this.cacheDir = tmpCache;
|
|
36
|
+
log.info(`Using Docker persistent cache volume at ${tmpCache}`);
|
|
37
|
+
}
|
|
38
|
+
catch (e) { }
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get database instance - initializes lazily on first access
|
|
43
|
+
*/
|
|
44
|
+
async getDatabase() {
|
|
45
|
+
if (this.rocksDb)
|
|
46
|
+
return this.rocksDb;
|
|
47
|
+
if (this.initPromise) {
|
|
48
|
+
await this.initPromise;
|
|
49
|
+
return this.rocksDb;
|
|
50
|
+
}
|
|
51
|
+
this.initPromise = this.initialize();
|
|
52
|
+
await this.initPromise;
|
|
53
|
+
return this.rocksDb;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Initialize cache in background (non-blocking for <200ms cold start)
|
|
57
|
+
*/
|
|
58
|
+
initializeInBackground() {
|
|
59
|
+
if (this.isInitialized || this.initPromise)
|
|
60
|
+
return;
|
|
61
|
+
log.debug('Starting background RocksDB initialization...');
|
|
62
|
+
// Use setImmediate to ensure it doesn't block the event loop during startup
|
|
63
|
+
global.setImmediate(() => {
|
|
64
|
+
this.initPromise = this.initialize().catch(err => {
|
|
65
|
+
log.warn(`Background cache init failed: ${err.message}`, { category: 'cache' });
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Core initialization logic (RocksDB Native)
|
|
71
|
+
*/
|
|
72
|
+
async initialize() {
|
|
73
|
+
const startTime = Date.now();
|
|
74
|
+
try {
|
|
75
|
+
if (!fs.existsSync(this.cacheDir)) {
|
|
76
|
+
fs.mkdirSync(this.cacheDir, { recursive: true });
|
|
77
|
+
}
|
|
78
|
+
// Task Day 51: Native RocksDB with mmap and level compaction
|
|
79
|
+
// The native module already has these opts now.
|
|
80
|
+
this.rocksDb = new BuildCache(this.cacheDir);
|
|
81
|
+
if (this.warmup) {
|
|
82
|
+
await this.warmupCache();
|
|
83
|
+
}
|
|
84
|
+
this.isInitialized = true;
|
|
85
|
+
const duration = Date.now() - startTime;
|
|
86
|
+
log.success(`RocksDB Cache ready in ${duration}ms`, { category: 'cache' });
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
const isLockError = error.message?.includes('Lock') ||
|
|
90
|
+
error.message?.includes('IO error') ||
|
|
91
|
+
error.message?.includes('Resource temporarily unavailable');
|
|
92
|
+
if (isLockError) {
|
|
93
|
+
log.warn(`Cache locked by another process. Falling back to in-memory mode.`, { category: 'cache' });
|
|
94
|
+
// Return a mock DB object
|
|
95
|
+
const store = new Map();
|
|
96
|
+
this.rocksDb = {
|
|
97
|
+
get: (k) => store.get(k) || null,
|
|
98
|
+
set: (k, v) => { store.set(k, v); },
|
|
99
|
+
clearAll: () => store.clear(),
|
|
100
|
+
getStats: () => ({ size: store.size, keys: store.size }),
|
|
101
|
+
close: () => { store.clear(); }
|
|
102
|
+
};
|
|
103
|
+
this.isInitialized = true;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
log.error(`RocksDB initialization failed: ${error.message}`, { category: 'cache' });
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Warm up cache by pre-reading essential keys
|
|
113
|
+
*/
|
|
114
|
+
async warmupCache() {
|
|
115
|
+
if (!this.rocksDb)
|
|
116
|
+
return;
|
|
117
|
+
try {
|
|
118
|
+
// Task Day 51: Implement cache warming
|
|
119
|
+
// We just hit the stats and maybe some common keys
|
|
120
|
+
this.rocksDb.getStats();
|
|
121
|
+
log.debug('Cache warmup completed');
|
|
122
|
+
}
|
|
123
|
+
catch (e) { }
|
|
124
|
+
}
|
|
125
|
+
close() {
|
|
126
|
+
if (this.rocksDb) {
|
|
127
|
+
this.rocksDb.close();
|
|
128
|
+
this.rocksDb = null;
|
|
129
|
+
this.isInitialized = false;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
isReady() {
|
|
133
|
+
return this.isInitialized;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
let globalLazyCache = null;
|
|
137
|
+
export function getLazyCache(cacheDir) {
|
|
138
|
+
if (!globalLazyCache) {
|
|
139
|
+
const dir = cacheDir || path.join(process.cwd(), '.nuclie_cache');
|
|
140
|
+
globalLazyCache = new LazyCacheInitializer({
|
|
141
|
+
cacheDir: dir,
|
|
142
|
+
preload: true,
|
|
143
|
+
warmup: true,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
return globalLazyCache;
|
|
147
|
+
}
|
|
148
|
+
export function initCacheInBackground(cacheDir) {
|
|
149
|
+
getLazyCache(cacheDir).initializeInBackground();
|
|
150
|
+
}
|
|
151
|
+
export async function getLazyCacheDatabase(cacheDir) {
|
|
152
|
+
return getLazyCache(cacheDir).getDatabase();
|
|
153
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RocksDB Cache Manager
|
|
3
|
+
* Day 6: Module 1 - Speed Mastery
|
|
4
|
+
*
|
|
5
|
+
* Provides a high-level interface for the persistent RocksDB cache.
|
|
6
|
+
* Manages cache partitions (Parse, Transform, Bundle) and enforces policies.
|
|
7
|
+
*/
|
|
8
|
+
export type CacheCategory = 'parse' | 'transform' | 'bundle' | 'optimize' | 'meta';
|
|
9
|
+
export interface CacheOptions {
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
root: string;
|
|
12
|
+
compression?: boolean;
|
|
13
|
+
maxSizeBytes?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare class CacheManager {
|
|
16
|
+
private cache;
|
|
17
|
+
private enabled;
|
|
18
|
+
private root;
|
|
19
|
+
private maxSizeBytes;
|
|
20
|
+
constructor(options: CacheOptions);
|
|
21
|
+
private init;
|
|
22
|
+
private getDb;
|
|
23
|
+
/**
|
|
24
|
+
* Get a cached result
|
|
25
|
+
*/
|
|
26
|
+
get(category: CacheCategory, key: string): Promise<string | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Set a cached result
|
|
29
|
+
*/
|
|
30
|
+
set(category: CacheCategory, key: string, value: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Check existence
|
|
33
|
+
*/
|
|
34
|
+
has(category: CacheCategory, key: string): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* Batch write
|
|
37
|
+
*/
|
|
38
|
+
batchSet(entries: Record<string, string>, category: CacheCategory): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Enforce cache policies (Compaction, Eviction simulation)
|
|
41
|
+
*/
|
|
42
|
+
enforcePolicy(): Promise<void>;
|
|
43
|
+
getStats(): import("*.node").CacheStats | {
|
|
44
|
+
hitRate: number;
|
|
45
|
+
sizeBytes: number;
|
|
46
|
+
hits: number;
|
|
47
|
+
misses: number;
|
|
48
|
+
};
|
|
49
|
+
close(): void;
|
|
50
|
+
}
|
|
51
|
+
export declare function getCacheManager(root?: string): CacheManager;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RocksDB Cache Manager
|
|
3
|
+
* Day 6: Module 1 - Speed Mastery
|
|
4
|
+
*
|
|
5
|
+
* Provides a high-level interface for the persistent RocksDB cache.
|
|
6
|
+
* Manages cache partitions (Parse, Transform, Bundle) and enforces policies.
|
|
7
|
+
*/
|
|
8
|
+
import { log } from '../utils/logger.js';
|
|
9
|
+
import path from 'path';
|
|
10
|
+
export class CacheManager {
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.cache = null;
|
|
13
|
+
this.enabled = options.enabled;
|
|
14
|
+
this.root = options.root;
|
|
15
|
+
this.maxSizeBytes = options.maxSizeBytes || 512 * 1024 * 1024; // 512MB default
|
|
16
|
+
if (this.enabled) {
|
|
17
|
+
this.init();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async init() {
|
|
21
|
+
try {
|
|
22
|
+
const { getLazyCacheDatabase, initCacheInBackground } = await import('./cache/lazy-init.js');
|
|
23
|
+
// Background init
|
|
24
|
+
initCacheInBackground(path.join(this.root, '.nuclie_cache'));
|
|
25
|
+
// The first 'get' or 'set' will await the database if it's not ready
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
log.warn(`Failed to initialize lazy RocksDB cache: ${error.message}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async getDb() {
|
|
32
|
+
if (!this.enabled)
|
|
33
|
+
return null;
|
|
34
|
+
try {
|
|
35
|
+
const { getLazyCacheDatabase } = await import('./cache/lazy-init.js');
|
|
36
|
+
return await getLazyCacheDatabase(path.join(this.root, '.nuclie_cache'));
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get a cached result
|
|
44
|
+
*/
|
|
45
|
+
async get(category, key) {
|
|
46
|
+
if (!this.enabled)
|
|
47
|
+
return null;
|
|
48
|
+
const db = await this.getDb();
|
|
49
|
+
if (!db)
|
|
50
|
+
return null;
|
|
51
|
+
try {
|
|
52
|
+
return db.get(`${category}:${key}`);
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Set a cached result
|
|
60
|
+
*/
|
|
61
|
+
async set(category, key, value) {
|
|
62
|
+
if (!this.enabled)
|
|
63
|
+
return;
|
|
64
|
+
const db = await this.getDb();
|
|
65
|
+
if (!db)
|
|
66
|
+
return;
|
|
67
|
+
try {
|
|
68
|
+
db.set(`${category}:${key}`, value);
|
|
69
|
+
}
|
|
70
|
+
catch (e) { }
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check existence
|
|
74
|
+
*/
|
|
75
|
+
async has(category, key) {
|
|
76
|
+
if (!this.enabled)
|
|
77
|
+
return false;
|
|
78
|
+
const db = await this.getDb();
|
|
79
|
+
if (!db)
|
|
80
|
+
return false;
|
|
81
|
+
return db.has(`${category}:${key}`);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Batch write
|
|
85
|
+
*/
|
|
86
|
+
async batchSet(entries, category) {
|
|
87
|
+
if (!this.enabled)
|
|
88
|
+
return;
|
|
89
|
+
const db = await this.getDb();
|
|
90
|
+
if (!db)
|
|
91
|
+
return;
|
|
92
|
+
const prefixed = {};
|
|
93
|
+
for (const [k, v] of Object.entries(entries)) {
|
|
94
|
+
prefixed[`${category}:${k}`] = v;
|
|
95
|
+
}
|
|
96
|
+
db.batchSet(prefixed);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Enforce cache policies (Compaction, Eviction simulation)
|
|
100
|
+
*/
|
|
101
|
+
async enforcePolicy() {
|
|
102
|
+
if (!this.enabled || !this.cache)
|
|
103
|
+
return;
|
|
104
|
+
try {
|
|
105
|
+
const stats = this.cache.getStats();
|
|
106
|
+
// log.debug('Cache Stats:', stats);
|
|
107
|
+
// 1. Compaction
|
|
108
|
+
// RocksDB does auto-compaction, but we can trigger it manually if fragmentation is high
|
|
109
|
+
// For now, we just call it periodically or on shutdown
|
|
110
|
+
// this.cache.compact(); // Expensive, maybe only do rarely?
|
|
111
|
+
// 2. Eviction (Size limit)
|
|
112
|
+
if (stats.sizeBytes > this.maxSizeBytes) {
|
|
113
|
+
log.warn(`Cache size (${(stats.sizeBytes / 1024 / 1024).toFixed(2)}MB) exceeds limit. Clearing...`);
|
|
114
|
+
// Simple strategy: Clear everything or specific targets.
|
|
115
|
+
// RocksDB makes LRU hard without column families or manual tracking.
|
|
116
|
+
// We'll clear 'dev' builds first, preserving 'prod'.
|
|
117
|
+
const cleared = this.cache.clearTarget('dev');
|
|
118
|
+
log.info(`Evicted ${cleared} dev entries.`);
|
|
119
|
+
// If still too big, compact
|
|
120
|
+
this.cache.compact();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
log.error('Cache policy enforcement failed:', e);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
getStats() {
|
|
128
|
+
if (!this.enabled || !this.cache)
|
|
129
|
+
return { hitRate: 0, sizeBytes: 0, hits: 0, misses: 0 };
|
|
130
|
+
return this.cache.getStats();
|
|
131
|
+
}
|
|
132
|
+
close() {
|
|
133
|
+
if (this.cache) {
|
|
134
|
+
this.cache.close();
|
|
135
|
+
this.cache = null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Global instance helper
|
|
140
|
+
let _instance = null;
|
|
141
|
+
export function getCacheManager(root = process.cwd()) {
|
|
142
|
+
if (!_instance) {
|
|
143
|
+
_instance = new CacheManager({
|
|
144
|
+
enabled: true,
|
|
145
|
+
root
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return _instance;
|
|
149
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { DependencyGraph, GraphNode } from '../../resolve/graph.js';
|
|
2
|
+
import { PluginManager } from '../plugins/manager.js';
|
|
3
|
+
export interface CSSUsage {
|
|
4
|
+
selector: string;
|
|
5
|
+
usedByModules: string[];
|
|
6
|
+
usagePercentage: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class CSSEngine {
|
|
9
|
+
private graph;
|
|
10
|
+
private pluginManager;
|
|
11
|
+
private precedenceResolver;
|
|
12
|
+
constructor(graph: DependencyGraph, pluginManager: PluginManager);
|
|
13
|
+
/**
|
|
14
|
+
* 7.1 CSS & CSS-IN-JS DETECTION
|
|
15
|
+
*/
|
|
16
|
+
detect(filePath: string, content: string): Promise<GraphNode['type'] | null>;
|
|
17
|
+
/**
|
|
18
|
+
* 7.2 CSS DEPENDENCY GRAPH + IMPORT PRECEDENCE
|
|
19
|
+
*/
|
|
20
|
+
processEdges(node: GraphNode): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* 7.6 GRAPH-BASED CSS TREE-SHAKING
|
|
23
|
+
*/
|
|
24
|
+
treeShake(node: GraphNode, usedSelectors: Set<string>): Promise<string>;
|
|
25
|
+
/**
|
|
26
|
+
* 7.5 DETERMINISTIC CSS MODULES
|
|
27
|
+
*/
|
|
28
|
+
generateClassNameHash(filePath: string, className: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* 7.3 CSS TRANSFORM PIPELINE (WASM + JS Hybrid)
|
|
31
|
+
*/
|
|
32
|
+
transform(node: GraphNode): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* 7.1 CSS-IN-JS EXTRACTION (Unified)
|
|
35
|
+
*/
|
|
36
|
+
extractCSSInJS(node: GraphNode, rootDir: string): Promise<void>;
|
|
37
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { CSSImportPrecedenceResolver } from '../../resolve/css-precedence.js';
|
|
2
|
+
import { log } from '../../utils/logger.js';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs/promises';
|
|
5
|
+
import { generateModuleId } from '../../resolve/utils.js';
|
|
6
|
+
import { canonicalHash } from '../engine/hash.js';
|
|
7
|
+
export class CSSEngine {
|
|
8
|
+
constructor(graph, pluginManager) {
|
|
9
|
+
this.graph = graph;
|
|
10
|
+
this.pluginManager = pluginManager;
|
|
11
|
+
this.precedenceResolver = new CSSImportPrecedenceResolver();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 7.1 CSS & CSS-IN-JS DETECTION
|
|
15
|
+
*/
|
|
16
|
+
async detect(filePath, content) {
|
|
17
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
18
|
+
if (ext === '.css') {
|
|
19
|
+
if (filePath.endsWith('.module.css'))
|
|
20
|
+
return 'css-module';
|
|
21
|
+
return 'css';
|
|
22
|
+
}
|
|
23
|
+
if (['.scss', '.less', '.styl'].includes(ext)) {
|
|
24
|
+
return 'css';
|
|
25
|
+
}
|
|
26
|
+
// CSS-in-JS detection (Module 4 extractors would do the heavy lifting)
|
|
27
|
+
if (content.includes('styled-components') || content.includes('@emotion/react') || content.includes('linaria')) {
|
|
28
|
+
return 'css-in-js';
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 7.2 CSS DEPENDENCY GRAPH + IMPORT PRECEDENCE
|
|
34
|
+
*/
|
|
35
|
+
async processEdges(node) {
|
|
36
|
+
if (node.type !== 'css' && node.type !== 'css-module' && node.type !== 'css-in-js')
|
|
37
|
+
return;
|
|
38
|
+
// Resolve precedence deterministically
|
|
39
|
+
node.edges = this.precedenceResolver.resolve(node.edges, this.graph.nodes);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 7.6 GRAPH-BASED CSS TREE-SHAKING
|
|
43
|
+
*/
|
|
44
|
+
async treeShake(node, usedSelectors) {
|
|
45
|
+
// In a real implementation, we'd parse the CSS and remove unused selectors
|
|
46
|
+
// based on the reachable selectors found in the dependency graph.
|
|
47
|
+
log.info(`Tree-shaking CSS for ${node.id}`);
|
|
48
|
+
// Placeholder for actual tree-shaking logic
|
|
49
|
+
// Uses Module 2 graph to know which selectors are reachable from JS modules
|
|
50
|
+
return node.path; // Return path for now
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 7.5 DETERMINISTIC CSS MODULES
|
|
54
|
+
*/
|
|
55
|
+
generateClassNameHash(filePath, className) {
|
|
56
|
+
// SHA256(filePath + className) as per plan
|
|
57
|
+
return canonicalHash(filePath + className).slice(0, 8);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 7.3 CSS TRANSFORM PIPELINE (WASM + JS Hybrid)
|
|
61
|
+
*/
|
|
62
|
+
async transform(node) {
|
|
63
|
+
// 1. Detect if it's Tailwind, SCSS, etc.
|
|
64
|
+
// 2. Call WASM plugins for CPU-heavy (Sass, Tailwind)
|
|
65
|
+
// 3. Call JS plugins for others
|
|
66
|
+
log.info(`Transforming CSS node: ${node.id}`);
|
|
67
|
+
// Hybrid model:
|
|
68
|
+
// - runHook('transformModule', ...)
|
|
69
|
+
const result = await this.pluginManager.runHook('transformModule', {
|
|
70
|
+
id: node.id,
|
|
71
|
+
path: node.path,
|
|
72
|
+
type: node.type,
|
|
73
|
+
code: '' // Assuming code is loaded elsewhere or we load it here
|
|
74
|
+
});
|
|
75
|
+
return result.code;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 7.1 CSS-IN-JS EXTRACTION (Unified)
|
|
79
|
+
*/
|
|
80
|
+
async extractCSSInJS(node, rootDir) {
|
|
81
|
+
if (node.type !== 'css-in-js')
|
|
82
|
+
return;
|
|
83
|
+
log.info(`Extracting CSS-in-JS from ${node.path}`);
|
|
84
|
+
// Use plugins to extract CSS
|
|
85
|
+
const content = await fs.readFile(node.path, 'utf-8');
|
|
86
|
+
const result = await this.pluginManager.runHook('transformModule', {
|
|
87
|
+
id: node.id,
|
|
88
|
+
path: node.path,
|
|
89
|
+
type: node.type,
|
|
90
|
+
code: content
|
|
91
|
+
});
|
|
92
|
+
if (result.metadata?.cssInJs) {
|
|
93
|
+
node.cssInJs = result.metadata.cssInJs;
|
|
94
|
+
// Create virtual CSS node in graph
|
|
95
|
+
const virtualPath = `${node.path}.extracted.css`;
|
|
96
|
+
const virtualId = generateModuleId('css', virtualPath, rootDir);
|
|
97
|
+
this.graph.nodes.set(virtualId, {
|
|
98
|
+
id: virtualId,
|
|
99
|
+
type: 'css',
|
|
100
|
+
path: virtualPath,
|
|
101
|
+
contentHash: canonicalHash(result.metadata.cssInJs.extractedCss),
|
|
102
|
+
edges: []
|
|
103
|
+
});
|
|
104
|
+
// Add edge from JS to virtual CSS
|
|
105
|
+
node.edges.push({
|
|
106
|
+
from: node.id,
|
|
107
|
+
to: virtualId,
|
|
108
|
+
kind: 'js-style-import'
|
|
109
|
+
});
|
|
110
|
+
log.success(`Extracted CSS from ${node.path} -> ${virtualPath}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type CSSFramework = 'tailwind' | 'bootstrap' | 'bulma' | 'material' | 'none';
|
|
2
|
+
export interface DetectedCSSFramework {
|
|
3
|
+
name: CSSFramework;
|
|
4
|
+
version?: string;
|
|
5
|
+
source: 'package.json' | 'file-pattern' | 'class-scan';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Main CSS framework detection function
|
|
9
|
+
*/
|
|
10
|
+
export declare function detectCSSFramework(root: string): Promise<DetectedCSSFramework>;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { log } from '../utils/logger.js';
|
|
4
|
+
/**
|
|
5
|
+
* Check if a package exists in package.json dependencies
|
|
6
|
+
*/
|
|
7
|
+
async function hasPackage(root, packageName) {
|
|
8
|
+
try {
|
|
9
|
+
const pkgPath = path.join(root, 'package.json');
|
|
10
|
+
const content = await fs.readFile(pkgPath, 'utf-8');
|
|
11
|
+
const pkg = JSON.parse(content);
|
|
12
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
13
|
+
return deps[packageName] || null;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Check if a file or directory exists
|
|
21
|
+
*/
|
|
22
|
+
async function hasFile(root, filePath) {
|
|
23
|
+
try {
|
|
24
|
+
await fs.access(path.join(root, filePath));
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Scan source files for class name patterns
|
|
33
|
+
*/
|
|
34
|
+
async function hasClassPattern(root, patterns) {
|
|
35
|
+
try {
|
|
36
|
+
const srcPath = path.join(root, 'src');
|
|
37
|
+
const srcExists = await fs.access(srcPath).then(() => true).catch(() => false);
|
|
38
|
+
if (!srcExists)
|
|
39
|
+
return false;
|
|
40
|
+
// Read first few files to check for class patterns
|
|
41
|
+
const files = await fs.readdir(srcPath);
|
|
42
|
+
const jsFiles = files.filter(f => f.endsWith('.js') || f.endsWith('.jsx') ||
|
|
43
|
+
f.endsWith('.ts') || f.endsWith('.tsx') ||
|
|
44
|
+
f.endsWith('.vue') || f.endsWith('.svelte')).slice(0, 5); // Check first 5 files
|
|
45
|
+
for (const file of jsFiles) {
|
|
46
|
+
const content = await fs.readFile(path.join(srcPath, file), 'utf-8');
|
|
47
|
+
// Check if any pattern exists in the content
|
|
48
|
+
for (const pattern of patterns) {
|
|
49
|
+
if (content.includes(`"${pattern}"`) ||
|
|
50
|
+
content.includes(`'${pattern}'`) ||
|
|
51
|
+
content.includes(`className="${pattern}`) ||
|
|
52
|
+
content.includes(`class="${pattern}`)) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Detect Tailwind CSS
|
|
65
|
+
*/
|
|
66
|
+
async function detectTailwind(root) {
|
|
67
|
+
// Check package.json
|
|
68
|
+
const version = await hasPackage(root, 'tailwindcss');
|
|
69
|
+
if (version) {
|
|
70
|
+
return { name: 'tailwind', version, source: 'package.json' };
|
|
71
|
+
}
|
|
72
|
+
// Check for tailwind.config.js
|
|
73
|
+
if (await hasFile(root, 'tailwind.config.js') || await hasFile(root, 'tailwind.config.ts')) {
|
|
74
|
+
return { name: 'tailwind', source: 'file-pattern' };
|
|
75
|
+
}
|
|
76
|
+
// Check for Tailwind class patterns
|
|
77
|
+
if (await hasClassPattern(root, ['flex', 'grid', 'bg-', 'text-', 'p-', 'm-'])) {
|
|
78
|
+
return { name: 'tailwind', source: 'class-scan' };
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Detect Bootstrap
|
|
84
|
+
*/
|
|
85
|
+
async function detectBootstrap(root) {
|
|
86
|
+
// Check package.json
|
|
87
|
+
const version = await hasPackage(root, 'bootstrap');
|
|
88
|
+
if (version) {
|
|
89
|
+
return { name: 'bootstrap', version, source: 'package.json' };
|
|
90
|
+
}
|
|
91
|
+
// Check for Bootstrap in node_modules
|
|
92
|
+
if (await hasFile(root, 'node_modules/bootstrap')) {
|
|
93
|
+
return { name: 'bootstrap', source: 'file-pattern' };
|
|
94
|
+
}
|
|
95
|
+
// Check for Bootstrap class patterns
|
|
96
|
+
if (await hasClassPattern(root, ['btn', 'container', 'row', 'col-', 'navbar'])) {
|
|
97
|
+
return { name: 'bootstrap', source: 'class-scan' };
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Detect Bulma
|
|
103
|
+
*/
|
|
104
|
+
async function detectBulma(root) {
|
|
105
|
+
// Check package.json
|
|
106
|
+
const version = await hasPackage(root, 'bulma');
|
|
107
|
+
if (version) {
|
|
108
|
+
return { name: 'bulma', version, source: 'package.json' };
|
|
109
|
+
}
|
|
110
|
+
// Check for Bulma in node_modules
|
|
111
|
+
if (await hasFile(root, 'node_modules/bulma')) {
|
|
112
|
+
return { name: 'bulma', source: 'file-pattern' };
|
|
113
|
+
}
|
|
114
|
+
// Check for Bulma class patterns
|
|
115
|
+
if (await hasClassPattern(root, ['button', 'hero', 'section', 'column', 'box'])) {
|
|
116
|
+
return { name: 'bulma', source: 'class-scan' };
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Detect Material UI / Material Design
|
|
122
|
+
*/
|
|
123
|
+
async function detectMaterial(root) {
|
|
124
|
+
// Check package.json for MUI
|
|
125
|
+
const muiVersion = await hasPackage(root, '@mui/material');
|
|
126
|
+
if (muiVersion) {
|
|
127
|
+
return { name: 'material', version: muiVersion, source: 'package.json' };
|
|
128
|
+
}
|
|
129
|
+
// Check for Material Design Lite
|
|
130
|
+
const mdlVersion = await hasPackage(root, 'material-design-lite');
|
|
131
|
+
if (mdlVersion) {
|
|
132
|
+
return { name: 'material', version: mdlVersion, source: 'package.json' };
|
|
133
|
+
}
|
|
134
|
+
// Check for Material Components Web
|
|
135
|
+
const mcwVersion = await hasPackage(root, '@material/web');
|
|
136
|
+
if (mcwVersion) {
|
|
137
|
+
return { name: 'material', version: mcwVersion, source: 'package.json' };
|
|
138
|
+
}
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Main CSS framework detection function
|
|
143
|
+
*/
|
|
144
|
+
export async function detectCSSFramework(root) {
|
|
145
|
+
log.info('Detecting CSS framework...');
|
|
146
|
+
// Try each detector in priority order
|
|
147
|
+
const tailwind = await detectTailwind(root);
|
|
148
|
+
if (tailwind) {
|
|
149
|
+
log.success(`Detected Tailwind CSS ${tailwind.version || ''} (${tailwind.source})`);
|
|
150
|
+
return tailwind;
|
|
151
|
+
}
|
|
152
|
+
const bootstrap = await detectBootstrap(root);
|
|
153
|
+
if (bootstrap) {
|
|
154
|
+
log.success(`Detected Bootstrap ${bootstrap.version || ''} (${bootstrap.source})`);
|
|
155
|
+
return bootstrap;
|
|
156
|
+
}
|
|
157
|
+
const material = await detectMaterial(root);
|
|
158
|
+
if (material) {
|
|
159
|
+
log.success(`Detected Material UI ${material.version || ''} (${material.source})`);
|
|
160
|
+
return material;
|
|
161
|
+
}
|
|
162
|
+
const bulma = await detectBulma(root);
|
|
163
|
+
if (bulma) {
|
|
164
|
+
log.success(`Detected Bulma ${bulma.version || ''} (${bulma.source})`);
|
|
165
|
+
return bulma;
|
|
166
|
+
}
|
|
167
|
+
log.info('No CSS framework detected');
|
|
168
|
+
return { name: 'none', source: 'package.json' };
|
|
169
|
+
}
|