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,51 @@
|
|
|
1
|
+
import { canonicalHash } from '../../core/engine/hash.js';
|
|
2
|
+
/**
|
|
3
|
+
* Internal Linker Plugin
|
|
4
|
+
*
|
|
5
|
+
* Rewrites import/require specifiers using the DependencyGraph's specifierMap.
|
|
6
|
+
* This runs after all other transformations to ensure final code uses Nuclie module IDs.
|
|
7
|
+
*/
|
|
8
|
+
export function createLinkerPlugin() {
|
|
9
|
+
return {
|
|
10
|
+
manifest: {
|
|
11
|
+
name: 'nuclie:linker',
|
|
12
|
+
version: '1.0.0',
|
|
13
|
+
engineVersion: '1.0.0',
|
|
14
|
+
type: 'js',
|
|
15
|
+
hooks: ['transformModule'],
|
|
16
|
+
permissions: { fs: 'none' }
|
|
17
|
+
},
|
|
18
|
+
id: canonicalHash('nuclie:linker'),
|
|
19
|
+
async runHook(hook, input, context) {
|
|
20
|
+
if (hook !== 'transformModule')
|
|
21
|
+
return input;
|
|
22
|
+
// We need the graph to do linking
|
|
23
|
+
const graph = context?.graph;
|
|
24
|
+
if (!graph)
|
|
25
|
+
return input;
|
|
26
|
+
// Find the node for this file
|
|
27
|
+
// Note: input.path is absolute
|
|
28
|
+
const node = Array.from(graph.nodes.values()).find((n) => n.path === input.path);
|
|
29
|
+
if (!node || !node.specifierMap)
|
|
30
|
+
return input;
|
|
31
|
+
let code = input.code;
|
|
32
|
+
// Basic speculative replacement for performance
|
|
33
|
+
// In a production world, we'd use a proper AST walker or a regex that guards against comments
|
|
34
|
+
// For now, let's use a regex that matches require("specifier") or from "specifier"
|
|
35
|
+
for (const [specifier, targetId] of Object.entries(node.specifierMap)) {
|
|
36
|
+
// Escape regex special chars
|
|
37
|
+
const escaped = specifier.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
38
|
+
// Replace in require()
|
|
39
|
+
const requireRegex = new RegExp(`require\\s*\\(\\s*['"]${escaped}['"]\\s*\\)`, 'g');
|
|
40
|
+
code = code.replace(requireRegex, `require(${JSON.stringify(targetId)})`);
|
|
41
|
+
// Replace in import ... from "..."
|
|
42
|
+
const importRegex = new RegExp(`from\\s*['"]${escaped}['"]`, 'g');
|
|
43
|
+
code = code.replace(importRegex, `from ${JSON.stringify(targetId)}`);
|
|
44
|
+
// Replace in import("...")
|
|
45
|
+
const dynamicImportRegex = new RegExp(`import\\s*\\(\\s*['"]${escaped}['"]\\s*\\)`, 'g');
|
|
46
|
+
code = code.replace(dynamicImportRegex, `import(${JSON.stringify(targetId)})`);
|
|
47
|
+
}
|
|
48
|
+
return { ...input, code };
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Plugin } from 'esbuild';
|
|
2
|
+
export interface BootstrapConfig {
|
|
3
|
+
version?: string;
|
|
4
|
+
useCDN?: boolean;
|
|
5
|
+
includeIcons?: boolean;
|
|
6
|
+
autoprefixer?: boolean;
|
|
7
|
+
purgeUnused?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Bootstrap Plugin for esbuild
|
|
11
|
+
* Supports CDN injection, local node_modules, autoprefixer, and SCSS purge
|
|
12
|
+
*/
|
|
13
|
+
export declare function bootstrapPlugin(config?: BootstrapConfig): Plugin;
|
|
14
|
+
/**
|
|
15
|
+
* Inject Bootstrap CDN links into HTML
|
|
16
|
+
*/
|
|
17
|
+
export declare function injectBootstrapCDN(html: string, config?: BootstrapConfig): string;
|
|
18
|
+
/**
|
|
19
|
+
* Auto-detect Bootstrap usage in project
|
|
20
|
+
*/
|
|
21
|
+
export declare function detectBootstrapUsage(root: string): Promise<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* Get Bootstrap configuration from project
|
|
24
|
+
*/
|
|
25
|
+
export declare function getBootstrapConfig(root: string): Promise<BootstrapConfig>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Bootstrap Plugin for esbuild
|
|
5
|
+
* Supports CDN injection, local node_modules, autoprefixer, and SCSS purge
|
|
6
|
+
*/
|
|
7
|
+
export function bootstrapPlugin(config = {}) {
|
|
8
|
+
const { version = '5.3.2', useCDN = false, includeIcons = true, autoprefixer = true, purgeUnused = false } = config;
|
|
9
|
+
return {
|
|
10
|
+
name: 'bootstrap-plugin',
|
|
11
|
+
setup(build) {
|
|
12
|
+
// Intercept Bootstrap CSS imports
|
|
13
|
+
build.onResolve({ filter: /^bootstrap\/dist\/css\/bootstrap/ }, args => {
|
|
14
|
+
if (useCDN) {
|
|
15
|
+
// Return external for CDN usage
|
|
16
|
+
return { path: args.path, external: true };
|
|
17
|
+
}
|
|
18
|
+
// Resolve to local node_modules
|
|
19
|
+
return {
|
|
20
|
+
path: require.resolve('bootstrap/dist/css/bootstrap.min.css', {
|
|
21
|
+
paths: [args.resolveDir]
|
|
22
|
+
})
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
// Intercept Bootstrap Icons imports
|
|
26
|
+
if (includeIcons) {
|
|
27
|
+
build.onResolve({ filter: /^bootstrap-icons/ }, args => {
|
|
28
|
+
if (useCDN) {
|
|
29
|
+
return { path: args.path, external: true };
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
path: require.resolve('bootstrap-icons/font/bootstrap-icons.css', {
|
|
33
|
+
paths: [args.resolveDir]
|
|
34
|
+
})
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
// Intercept Bootstrap JS imports
|
|
39
|
+
build.onResolve({ filter: /^bootstrap$/ }, args => {
|
|
40
|
+
return {
|
|
41
|
+
path: require.resolve('bootstrap/dist/js/bootstrap.bundle.min.js', {
|
|
42
|
+
paths: [args.resolveDir]
|
|
43
|
+
})
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
// Handle SCSS imports
|
|
47
|
+
build.onResolve({ filter: /^bootstrap\/scss/ }, args => {
|
|
48
|
+
return {
|
|
49
|
+
path: require.resolve(args.path.replace('bootstrap/scss', 'bootstrap/scss'), {
|
|
50
|
+
paths: [args.resolveDir]
|
|
51
|
+
})
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Inject Bootstrap CDN links into HTML
|
|
59
|
+
*/
|
|
60
|
+
export function injectBootstrapCDN(html, config = {}) {
|
|
61
|
+
const { version = '5.3.2', includeIcons = true } = config;
|
|
62
|
+
const cdnLinks = `
|
|
63
|
+
<!-- Bootstrap CSS -->
|
|
64
|
+
<link href="https://cdn.jsdelivr.net/npm/bootstrap@${version}/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
|
|
65
|
+
${includeIcons ? `<!-- Bootstrap Icons -->
|
|
66
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.1/font/bootstrap-icons.css">` : ''}
|
|
67
|
+
`;
|
|
68
|
+
const jsLink = `
|
|
69
|
+
<!-- Bootstrap JS -->
|
|
70
|
+
<script src="https://cdn.jsdelivr.net/npm/bootstrap@${version}/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
|
|
71
|
+
`;
|
|
72
|
+
// Inject CSS in <head>
|
|
73
|
+
html = html.replace('</head>', `${cdnLinks}\n </head>`);
|
|
74
|
+
// Inject JS before </body>
|
|
75
|
+
html = html.replace('</body>', `${jsLink}\n </body>`);
|
|
76
|
+
return html;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Auto-detect Bootstrap usage in project
|
|
80
|
+
*/
|
|
81
|
+
export async function detectBootstrapUsage(root) {
|
|
82
|
+
try {
|
|
83
|
+
const pkgPath = path.join(root, 'package.json');
|
|
84
|
+
const content = await fs.readFile(pkgPath, 'utf-8');
|
|
85
|
+
const pkg = JSON.parse(content);
|
|
86
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
87
|
+
return !!(deps['bootstrap'] || deps['bootstrap-icons']);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get Bootstrap configuration from project
|
|
95
|
+
*/
|
|
96
|
+
export async function getBootstrapConfig(root) {
|
|
97
|
+
const hasBootstrap = await detectBootstrapUsage(root);
|
|
98
|
+
if (!hasBootstrap) {
|
|
99
|
+
return { useCDN: true }; // Default to CDN if not installed
|
|
100
|
+
}
|
|
101
|
+
// Check if node_modules/bootstrap exists
|
|
102
|
+
const localPath = path.join(root, 'node_modules', 'bootstrap');
|
|
103
|
+
const hasLocal = await fs.access(localPath).then(() => true).catch(() => false);
|
|
104
|
+
return {
|
|
105
|
+
useCDN: !hasLocal,
|
|
106
|
+
includeIcons: true,
|
|
107
|
+
autoprefixer: true,
|
|
108
|
+
purgeUnused: false
|
|
109
|
+
};
|
|
110
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Plugin } from 'esbuild';
|
|
2
|
+
export interface BulmaConfig {
|
|
3
|
+
version?: string;
|
|
4
|
+
useCDN?: boolean;
|
|
5
|
+
includeExtensions?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Bulma Plugin for esbuild
|
|
9
|
+
* Supports CDN injection and local node_modules
|
|
10
|
+
*/
|
|
11
|
+
export declare function bulmaPlugin(config?: BulmaConfig): Plugin;
|
|
12
|
+
/**
|
|
13
|
+
* Inject Bulma CDN link into HTML
|
|
14
|
+
*/
|
|
15
|
+
export declare function injectBulmaCDN(html: string, config?: BulmaConfig): string;
|
|
16
|
+
/**
|
|
17
|
+
* Auto-detect Bulma usage in project
|
|
18
|
+
*/
|
|
19
|
+
export declare function detectBulmaUsage(root: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Get Bulma configuration from project
|
|
22
|
+
*/
|
|
23
|
+
export declare function getBulmaConfig(root: string): Promise<BulmaConfig>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Bulma Plugin for esbuild
|
|
5
|
+
* Supports CDN injection and local node_modules
|
|
6
|
+
*/
|
|
7
|
+
export function bulmaPlugin(config = {}) {
|
|
8
|
+
const { version = '0.9.4', useCDN = false, includeExtensions = false } = config;
|
|
9
|
+
return {
|
|
10
|
+
name: 'bulma-plugin',
|
|
11
|
+
setup(build) {
|
|
12
|
+
// Intercept Bulma CSS imports
|
|
13
|
+
build.onResolve({ filter: /^bulma\/css\/bulma/ }, args => {
|
|
14
|
+
if (useCDN) {
|
|
15
|
+
return { path: args.path, external: true };
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
path: require.resolve('bulma/css/bulma.min.css', {
|
|
19
|
+
paths: [args.resolveDir]
|
|
20
|
+
})
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
// Handle SASS imports
|
|
24
|
+
build.onResolve({ filter: /^bulma$/ }, args => {
|
|
25
|
+
return {
|
|
26
|
+
path: require.resolve('bulma/bulma.sass', {
|
|
27
|
+
paths: [args.resolveDir]
|
|
28
|
+
})
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Inject Bulma CDN link into HTML
|
|
36
|
+
*/
|
|
37
|
+
export function injectBulmaCDN(html, config = {}) {
|
|
38
|
+
const { version = '0.9.4' } = config;
|
|
39
|
+
const cdnLink = `
|
|
40
|
+
<!-- Bulma CSS -->
|
|
41
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@${version}/css/bulma.min.css">
|
|
42
|
+
`;
|
|
43
|
+
// Inject CSS in <head>
|
|
44
|
+
return html.replace('</head>', `${cdnLink}\n </head>`);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Auto-detect Bulma usage in project
|
|
48
|
+
*/
|
|
49
|
+
export async function detectBulmaUsage(root) {
|
|
50
|
+
try {
|
|
51
|
+
const pkgPath = path.join(root, 'package.json');
|
|
52
|
+
const content = await fs.readFile(pkgPath, 'utf-8');
|
|
53
|
+
const pkg = JSON.parse(content);
|
|
54
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
55
|
+
return !!deps['bulma'];
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get Bulma configuration from project
|
|
63
|
+
*/
|
|
64
|
+
export async function getBulmaConfig(root) {
|
|
65
|
+
const hasBulma = await detectBulmaUsage(root);
|
|
66
|
+
if (!hasBulma) {
|
|
67
|
+
return { useCDN: true };
|
|
68
|
+
}
|
|
69
|
+
const localPath = path.join(root, 'node_modules', 'bulma');
|
|
70
|
+
const hasLocal = await fs.access(localPath).then(() => true).catch(() => false);
|
|
71
|
+
return {
|
|
72
|
+
useCDN: !hasLocal,
|
|
73
|
+
includeExtensions: false
|
|
74
|
+
};
|
|
75
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Plugin } from 'esbuild';
|
|
2
|
+
export interface CSSModulesConfig {
|
|
3
|
+
generateScopedName?: string;
|
|
4
|
+
exportGlobals?: boolean;
|
|
5
|
+
generateTypings?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* CSS Modules Plugin for esbuild
|
|
9
|
+
* Transforms CSS files into scoped modules
|
|
10
|
+
*/
|
|
11
|
+
export declare function cssModulesPlugin(config?: CSSModulesConfig): Plugin;
|
|
12
|
+
/**
|
|
13
|
+
* Auto-detect CSS Modules usage
|
|
14
|
+
*/
|
|
15
|
+
export declare function detectCSSModules(root: string): Promise<boolean>;
|
|
16
|
+
/**
|
|
17
|
+
* Get CSS Modules configuration
|
|
18
|
+
*/
|
|
19
|
+
export declare function getCSSModulesConfig(root: string): Promise<CSSModulesConfig>;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import crypto from 'crypto';
|
|
4
|
+
/**
|
|
5
|
+
* CSS Modules Plugin for esbuild
|
|
6
|
+
* Transforms CSS files into scoped modules
|
|
7
|
+
*/
|
|
8
|
+
export function cssModulesPlugin(config = {}) {
|
|
9
|
+
const { generateScopedName = '[name]__[local]___[hash:base64:5]', exportGlobals = false, generateTypings = true } = config;
|
|
10
|
+
return {
|
|
11
|
+
name: 'css-modules-plugin',
|
|
12
|
+
setup(build) {
|
|
13
|
+
// Intercept .module.css files
|
|
14
|
+
build.onLoad({ filter: /\.module\.css$/ }, async (args) => {
|
|
15
|
+
const source = await fs.readFile(args.path, 'utf-8');
|
|
16
|
+
// Simple CSS Modules transformation
|
|
17
|
+
const classNames = {};
|
|
18
|
+
const cssLines = [];
|
|
19
|
+
// Parse CSS and generate scoped names
|
|
20
|
+
const classRegex = /\.([a-zA-Z_-][a-zA-Z0-9_-]*)/g;
|
|
21
|
+
let match;
|
|
22
|
+
while ((match = classRegex.exec(source)) !== null) {
|
|
23
|
+
const originalName = match[1];
|
|
24
|
+
if (!classNames[originalName]) {
|
|
25
|
+
const hash = crypto.createHash('md5')
|
|
26
|
+
.update(args.path + originalName)
|
|
27
|
+
.digest('base64')
|
|
28
|
+
.substring(0, 5)
|
|
29
|
+
.replace(/[+/=]/g, '_');
|
|
30
|
+
const fileName = path.basename(args.path, '.module.css');
|
|
31
|
+
classNames[originalName] = `${fileName}__${originalName}___${hash}`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Replace class names in CSS
|
|
35
|
+
let transformedCSS = source;
|
|
36
|
+
for (const [original, scoped] of Object.entries(classNames)) {
|
|
37
|
+
transformedCSS = transformedCSS.replace(new RegExp(`\\.${original}\\b`, 'g'), `.${scoped}`);
|
|
38
|
+
}
|
|
39
|
+
// Generate TypeScript declarations if enabled
|
|
40
|
+
if (generateTypings) {
|
|
41
|
+
const dtsPath = args.path + '.d.ts';
|
|
42
|
+
const dtsContent = `declare const styles: {\n${Object.keys(classNames).map(name => ` ${name}: string;`).join('\n')}\n};\nexport default styles;\n`;
|
|
43
|
+
await fs.writeFile(dtsPath, dtsContent);
|
|
44
|
+
}
|
|
45
|
+
// Return JavaScript module that exports class names
|
|
46
|
+
const jsContent = `
|
|
47
|
+
const styles = ${JSON.stringify(classNames)};
|
|
48
|
+
|
|
49
|
+
// Inject CSS
|
|
50
|
+
if (typeof document !== 'undefined') {
|
|
51
|
+
const style = document.createElement('style');
|
|
52
|
+
style.textContent = ${JSON.stringify(transformedCSS)};
|
|
53
|
+
document.head.appendChild(style);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export default styles;
|
|
57
|
+
`;
|
|
58
|
+
return {
|
|
59
|
+
contents: jsContent,
|
|
60
|
+
loader: 'js'
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Auto-detect CSS Modules usage
|
|
68
|
+
*/
|
|
69
|
+
export async function detectCSSModules(root) {
|
|
70
|
+
try {
|
|
71
|
+
// Check for .module.css files
|
|
72
|
+
const srcPath = path.join(root, 'src');
|
|
73
|
+
const srcExists = await fs.access(srcPath).then(() => true).catch(() => false);
|
|
74
|
+
if (!srcExists)
|
|
75
|
+
return false;
|
|
76
|
+
const files = await fs.readdir(srcPath, { recursive: true });
|
|
77
|
+
return files.some((file) => typeof file === 'string' && file.endsWith('.module.css'));
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get CSS Modules configuration
|
|
85
|
+
*/
|
|
86
|
+
export async function getCSSModulesConfig(root) {
|
|
87
|
+
const hasModules = await detectCSSModules(root);
|
|
88
|
+
if (!hasModules) {
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
generateScopedName: '[name]__[local]___[hash:base64:5]',
|
|
93
|
+
exportGlobals: false,
|
|
94
|
+
generateTypings: true
|
|
95
|
+
};
|
|
96
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export interface CSSOptimizationConfig {
|
|
2
|
+
splitCritical?: boolean;
|
|
3
|
+
criticalThreshold?: number;
|
|
4
|
+
purgeUnused?: boolean;
|
|
5
|
+
framework?: 'tailwind' | 'bootstrap' | 'bulma' | 'material' | 'none';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Split CSS into critical (above-fold) and async (below-fold)
|
|
9
|
+
*/
|
|
10
|
+
export declare function splitCSSBundle(css: string, config?: CSSOptimizationConfig): Promise<{
|
|
11
|
+
critical: string;
|
|
12
|
+
async: string;
|
|
13
|
+
}>;
|
|
14
|
+
/**
|
|
15
|
+
* Framework-aware CSS purging
|
|
16
|
+
* Removes unused CSS classes based on framework patterns
|
|
17
|
+
*/
|
|
18
|
+
export declare function purgeUnusedCSS(css: string, usedClasses: Set<string>, config?: CSSOptimizationConfig): Promise<string>;
|
|
19
|
+
/**
|
|
20
|
+
* Compose source maps across preprocessors
|
|
21
|
+
*/
|
|
22
|
+
export interface SourceMapComposition {
|
|
23
|
+
version: number;
|
|
24
|
+
sources: string[];
|
|
25
|
+
mappings: string;
|
|
26
|
+
names: string[];
|
|
27
|
+
}
|
|
28
|
+
export declare function composeSourceMaps(maps: SourceMapComposition[]): Promise<SourceMapComposition>;
|
|
29
|
+
/**
|
|
30
|
+
* Extract critical CSS for above-the-fold content
|
|
31
|
+
*/
|
|
32
|
+
export declare function extractCriticalCSS(html: string, css: string): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Analyze CSS bundle and provide optimization suggestions
|
|
35
|
+
*/
|
|
36
|
+
export interface CSSAnalysis {
|
|
37
|
+
totalSize: number;
|
|
38
|
+
ruleCount: number;
|
|
39
|
+
unusedRules: number;
|
|
40
|
+
duplicateRules: number;
|
|
41
|
+
suggestions: string[];
|
|
42
|
+
}
|
|
43
|
+
export declare function analyzeCSS(css: string, usedClasses: Set<string>): Promise<CSSAnalysis>;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { log } from '../../utils/logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Split CSS into critical (above-fold) and async (below-fold)
|
|
4
|
+
*/
|
|
5
|
+
export async function splitCSSBundle(css, config = {}) {
|
|
6
|
+
const { criticalThreshold = 14000 } = config; // 14KB default
|
|
7
|
+
// Simple heuristic: first N bytes are critical
|
|
8
|
+
if (css.length <= criticalThreshold) {
|
|
9
|
+
return { critical: css, async: '' };
|
|
10
|
+
}
|
|
11
|
+
// Split at a rule boundary
|
|
12
|
+
const rules = css.split('}');
|
|
13
|
+
let critical = '';
|
|
14
|
+
let async = '';
|
|
15
|
+
let currentSize = 0;
|
|
16
|
+
for (const rule of rules) {
|
|
17
|
+
const ruleWithBrace = rule + '}';
|
|
18
|
+
if (currentSize + ruleWithBrace.length <= criticalThreshold) {
|
|
19
|
+
critical += ruleWithBrace;
|
|
20
|
+
currentSize += ruleWithBrace.length;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
async += ruleWithBrace;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return { critical, async };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Framework-aware CSS purging
|
|
30
|
+
* Removes unused CSS classes based on framework patterns
|
|
31
|
+
*/
|
|
32
|
+
export async function purgeUnusedCSS(css, usedClasses, config = {}) {
|
|
33
|
+
const { framework = 'none' } = config;
|
|
34
|
+
// Framework-specific class patterns to preserve
|
|
35
|
+
const preservePatterns = {
|
|
36
|
+
tailwind: [
|
|
37
|
+
/^(hover|focus|active|disabled|group-hover|peer-|dark):/,
|
|
38
|
+
/^(sm|md|lg|xl|2xl):/,
|
|
39
|
+
],
|
|
40
|
+
bootstrap: [
|
|
41
|
+
/^(btn|nav|card|modal|dropdown|collapse|accordion)-/,
|
|
42
|
+
/^(show|active|disabled|fade|collapse)/,
|
|
43
|
+
],
|
|
44
|
+
bulma: [
|
|
45
|
+
/^(is|has)-/,
|
|
46
|
+
/^(button|hero|section|column|box)/,
|
|
47
|
+
],
|
|
48
|
+
material: [
|
|
49
|
+
/^(mdc|mat)-/,
|
|
50
|
+
/^(ripple|elevation|theme)/,
|
|
51
|
+
],
|
|
52
|
+
none: [],
|
|
53
|
+
};
|
|
54
|
+
const patterns = preservePatterns[framework] || [];
|
|
55
|
+
// Parse CSS and remove unused rules
|
|
56
|
+
const rules = css.split('}').filter(rule => rule.trim());
|
|
57
|
+
const purgedRules = [];
|
|
58
|
+
for (const rule of rules) {
|
|
59
|
+
// Extract class name, handling escaped characters
|
|
60
|
+
const classMatch = rule.match(/\.([a-zA-Z0-9_\\:-]+)/);
|
|
61
|
+
if (!classMatch) {
|
|
62
|
+
purgedRules.push(rule + '}');
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const className = classMatch[1];
|
|
66
|
+
// Remove escape characters for comparison
|
|
67
|
+
const normalizedClass = className.replace(/\\/g, '');
|
|
68
|
+
// Keep if used or matches preserve pattern
|
|
69
|
+
const shouldKeep = usedClasses.has(className) ||
|
|
70
|
+
usedClasses.has(normalizedClass) ||
|
|
71
|
+
patterns.some(pattern => pattern.test(normalizedClass));
|
|
72
|
+
if (shouldKeep) {
|
|
73
|
+
purgedRules.push(rule + '}');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const purgedCSS = purgedRules.join('\n');
|
|
77
|
+
const originalSize = css.length;
|
|
78
|
+
const purgedSize = purgedCSS.length;
|
|
79
|
+
const reduction = ((1 - purgedSize / originalSize) * 100).toFixed(1);
|
|
80
|
+
log.success(`CSS purged: ${originalSize}B → ${purgedSize}B (${reduction}% reduction)`);
|
|
81
|
+
return purgedCSS;
|
|
82
|
+
}
|
|
83
|
+
export async function composeSourceMaps(maps) {
|
|
84
|
+
// Simple source map composition
|
|
85
|
+
// In production, use a library like 'source-map' for proper composition
|
|
86
|
+
const composed = {
|
|
87
|
+
version: 3,
|
|
88
|
+
sources: [],
|
|
89
|
+
mappings: '',
|
|
90
|
+
names: [],
|
|
91
|
+
};
|
|
92
|
+
for (const map of maps) {
|
|
93
|
+
composed.sources.push(...map.sources);
|
|
94
|
+
composed.names.push(...map.names);
|
|
95
|
+
// Simplified: just concatenate mappings
|
|
96
|
+
composed.mappings += map.mappings;
|
|
97
|
+
}
|
|
98
|
+
return composed;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Extract critical CSS for above-the-fold content
|
|
102
|
+
*/
|
|
103
|
+
export async function extractCriticalCSS(html, css) {
|
|
104
|
+
// Extract classes used in HTML
|
|
105
|
+
const classRegex = /class="([^"]+)"/g;
|
|
106
|
+
const usedClasses = new Set();
|
|
107
|
+
let match;
|
|
108
|
+
while ((match = classRegex.exec(html)) !== null) {
|
|
109
|
+
const classes = match[1].split(/\s+/);
|
|
110
|
+
classes.forEach(cls => usedClasses.add(cls));
|
|
111
|
+
}
|
|
112
|
+
// Filter CSS to only include used classes
|
|
113
|
+
const rules = css.split('}').filter(rule => rule.trim());
|
|
114
|
+
const criticalRules = [];
|
|
115
|
+
for (const rule of rules) {
|
|
116
|
+
const classMatch = rule.match(/\.([a-zA-Z0-9_-]+)/);
|
|
117
|
+
if (classMatch && usedClasses.has(classMatch[1])) {
|
|
118
|
+
criticalRules.push(rule + '}');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return criticalRules.join('\n');
|
|
122
|
+
}
|
|
123
|
+
export async function analyzeCSS(css, usedClasses) {
|
|
124
|
+
const rules = css.split('}').filter(rule => rule.trim());
|
|
125
|
+
const ruleMap = new Map();
|
|
126
|
+
let unusedCount = 0;
|
|
127
|
+
for (const rule of rules) {
|
|
128
|
+
const classMatch = rule.match(/\.([a-zA-Z0-9_-]+)/);
|
|
129
|
+
if (classMatch) {
|
|
130
|
+
const className = classMatch[1];
|
|
131
|
+
ruleMap.set(rule, (ruleMap.get(rule) || 0) + 1);
|
|
132
|
+
if (!usedClasses.has(className)) {
|
|
133
|
+
unusedCount++;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const duplicateCount = Array.from(ruleMap.values()).filter(count => count > 1).length;
|
|
138
|
+
const suggestions = [];
|
|
139
|
+
if (unusedCount > 0) {
|
|
140
|
+
suggestions.push(`Remove ${unusedCount} unused CSS rules`);
|
|
141
|
+
}
|
|
142
|
+
if (duplicateCount > 0) {
|
|
143
|
+
suggestions.push(`Deduplicate ${duplicateCount} duplicate rules`);
|
|
144
|
+
}
|
|
145
|
+
if (css.length > 100000) {
|
|
146
|
+
suggestions.push('Consider code splitting for large CSS bundle');
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
totalSize: css.length,
|
|
150
|
+
ruleCount: rules.length,
|
|
151
|
+
unusedRules: unusedCount,
|
|
152
|
+
duplicateRules: duplicateCount,
|
|
153
|
+
suggestions,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Plugin } from 'esbuild';
|
|
2
|
+
export interface EmotionConfig {
|
|
3
|
+
ssr?: boolean;
|
|
4
|
+
cssProp?: boolean;
|
|
5
|
+
autoLabel?: boolean;
|
|
6
|
+
labelFormat?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Emotion Plugin for esbuild
|
|
10
|
+
* Integrates @emotion/babel-plugin for css prop and optimization
|
|
11
|
+
*/
|
|
12
|
+
export declare function emotionPlugin(config?: EmotionConfig): Plugin;
|
|
13
|
+
/**
|
|
14
|
+
* Get Babel plugin configuration for Emotion
|
|
15
|
+
*/
|
|
16
|
+
export declare function getEmotionBabelConfig(config?: EmotionConfig): {
|
|
17
|
+
presets?: (string | {
|
|
18
|
+
runtime: string;
|
|
19
|
+
importSource: string;
|
|
20
|
+
})[][] | undefined;
|
|
21
|
+
plugins: (string | {
|
|
22
|
+
sourceMap: boolean;
|
|
23
|
+
autoLabel: string;
|
|
24
|
+
labelFormat: string;
|
|
25
|
+
cssPropOptimization: boolean;
|
|
26
|
+
})[][];
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Auto-detect Emotion usage
|
|
30
|
+
*/
|
|
31
|
+
export declare function detectEmotion(root: string): Promise<boolean>;
|
|
32
|
+
/**
|
|
33
|
+
* Get Emotion configuration
|
|
34
|
+
*/
|
|
35
|
+
export declare function getEmotionConfig(root: string): Promise<EmotionConfig>;
|