@ecopages/core 0.2.0-alpha.5 → 0.2.0-alpha.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +267 -14
- package/package.json +98 -108
- package/src/adapters/README.md +39 -0
- package/src/adapters/abstract/application-adapter.d.ts +28 -2
- package/src/adapters/abstract/application-adapter.js +14 -2
- package/src/adapters/abstract/router-adapter.d.ts +1 -1
- package/src/adapters/abstract/server-adapter.d.ts +2 -2
- package/src/adapters/bun/client-bridge.d.ts +1 -1
- package/src/adapters/bun/create-app.d.ts +12 -12
- package/src/adapters/bun/create-app.js +64 -41
- package/src/adapters/bun/hmr-manager.d.ts +30 -62
- package/src/adapters/bun/hmr-manager.js +30 -194
- package/src/adapters/bun/index.d.ts +2 -3
- package/src/adapters/bun/index.js +3 -3
- package/src/adapters/bun/runtime-host.d.ts +52 -0
- package/src/adapters/bun/runtime-host.js +56 -0
- package/src/adapters/bun/server-adapter.d.ts +93 -32
- package/src/adapters/bun/server-adapter.js +166 -89
- package/src/adapters/bun/static-preview-host.d.ts +28 -0
- package/src/adapters/bun/static-preview-host.js +45 -0
- package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
- package/src/{create-app.js → adapters/create-app.js} +4 -4
- package/src/adapters/index.d.ts +2 -6
- package/src/adapters/index.js +2 -8
- package/src/adapters/node/create-app.d.ts +15 -12
- package/src/adapters/node/create-app.js +34 -85
- package/src/adapters/node/http-request-bridge.d.ts +57 -0
- package/src/adapters/node/http-request-bridge.js +118 -0
- package/src/adapters/node/node-client-bridge.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.d.ts +38 -48
- package/src/adapters/node/node-hmr-manager.js +31 -203
- package/src/adapters/node/runtime-host.d.ts +57 -0
- package/src/adapters/node/runtime-host.js +92 -0
- package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
- package/src/adapters/node/server-adapter-dependencies.js +18 -0
- package/src/adapters/node/server-adapter.d.ts +20 -72
- package/src/adapters/node/server-adapter.js +98 -203
- package/src/adapters/node/static-content-server.d.ts +37 -1
- package/src/adapters/node/static-content-server.js +29 -1
- package/src/adapters/node/static-preview-host.d.ts +55 -0
- package/src/adapters/node/static-preview-host.js +68 -0
- package/src/adapters/shared/application-adapter.d.ts +1 -1
- package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
- package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
- package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
- package/src/adapters/shared/explicit-static-route-matcher.js +14 -13
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
- package/src/adapters/shared/file-route-middleware-pipeline.js +3 -11
- package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
- package/src/adapters/shared/fs-server-response-factory.js +11 -27
- package/src/adapters/shared/fs-server-response-matcher.d.ts +20 -16
- package/src/adapters/shared/fs-server-response-matcher.js +76 -45
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
- package/src/adapters/shared/hmr-html-response.d.ts +22 -0
- package/src/adapters/shared/hmr-html-response.js +33 -0
- package/src/adapters/shared/render-context.d.ts +5 -3
- package/src/adapters/shared/render-context.js +27 -3
- package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
- package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
- package/src/adapters/shared/runtime-host.d.ts +12 -0
- package/src/adapters/shared/server-adapter.d.ts +33 -12
- package/src/adapters/shared/server-adapter.js +215 -132
- package/src/adapters/shared/server-route-handler.d.ts +5 -5
- package/src/adapters/shared/server-route-handler.js +7 -16
- package/src/adapters/shared/server-static-builder.d.ts +41 -8
- package/src/adapters/shared/server-static-builder.js +65 -11
- package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
- package/src/adapters/shared/shared-hmr-manager.js +240 -0
- package/src/adapters/shared/static-preview-host.d.ts +10 -0
- package/src/build/README.md +107 -0
- package/src/build/browser-runtime-import-rewrite-plugin.d.ts +26 -0
- package/src/build/browser-runtime-import-rewrite-plugin.js +162 -0
- package/src/build/browser-runtime-manifest.d.ts +31 -0
- package/src/build/browser-runtime-manifest.js +61 -0
- package/src/build/build-adapter.d.ts +175 -3
- package/src/build/build-adapter.js +633 -16
- package/src/build/build-manifest.d.ts +33 -0
- package/src/build/build-manifest.js +52 -0
- package/src/build/dev-build-coordinator.d.ts +72 -0
- package/src/build/dev-build-coordinator.js +154 -0
- package/src/build/esbuild-build-adapter.d.ts +16 -6
- package/src/build/esbuild-build-adapter.js +205 -75
- package/src/build/runtime-build-executor.d.ts +14 -0
- package/src/build/runtime-build-executor.js +22 -0
- package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
- package/src/build/runtime-specifier-alias-plugin.js +31 -0
- package/src/config/README.md +36 -0
- package/src/config/config-builder.d.ts +54 -29
- package/src/config/config-builder.js +256 -50
- package/src/{constants.d.ts → config/constants.d.ts} +13 -0
- package/src/{constants.js → config/constants.js} +4 -0
- package/src/declarations.d.ts +19 -14
- package/src/dev/host-runtime.d.ts +10 -0
- package/src/dev/host-runtime.js +24 -0
- package/src/dev/sc-server.d.ts +1 -1
- package/src/dev/sc-server.js +1 -1
- package/src/eco/README.md +70 -16
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +88 -0
- package/src/eco/eco.js +63 -54
- package/src/eco/eco.types.d.ts +69 -6
- package/src/eco/eco.utils.d.ts +1 -40
- package/src/eco/eco.utils.js +5 -35
- package/src/eco/global-injector-map.d.ts +3 -3
- package/src/eco/global-injector-map.js +2 -2
- package/src/eco/lazy-injector-map.d.ts +2 -2
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +3 -1
- package/src/hmr/README.md +26 -0
- package/src/hmr/client/hmr-runtime.d.ts +1 -6
- package/src/hmr/client/hmr-runtime.js +38 -7
- package/src/hmr/hmr-strategy.d.ts +16 -13
- package/src/hmr/hmr-strategy.js +22 -7
- package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
- package/src/hmr/hmr.postcss.test.e2e.js +31 -0
- package/src/hmr/hmr.test.e2e.js +26 -33
- package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
- package/src/hmr/strategies/default-hmr-strategy.js +1 -1
- package/src/hmr/strategies/js-hmr-strategy.d.ts +40 -42
- package/src/hmr/strategies/js-hmr-strategy.js +24 -43
- package/src/index.browser.d.ts +2 -2
- package/src/index.browser.js +1 -1
- package/src/index.d.ts +4 -3
- package/src/index.js +16 -5
- package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
- package/src/integrations/ghtml/ghtml-renderer.js +27 -30
- package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
- package/src/integrations/ghtml/ghtml.constants.js +4 -0
- package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
- package/src/integrations/ghtml/ghtml.plugin.js +3 -4
- package/src/plugins/README.md +35 -0
- package/src/plugins/alias-resolver-plugin.d.ts +1 -0
- package/src/plugins/alias-resolver-plugin.js +27 -5
- package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
- package/src/plugins/eco-component-meta-plugin.js +42 -24
- package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
- package/src/plugins/foreign-jsx-override-plugin.js +41 -0
- package/src/plugins/integration-plugin.d.ts +157 -29
- package/src/plugins/integration-plugin.js +115 -14
- package/src/plugins/processor.d.ts +17 -2
- package/src/plugins/processor.js +22 -3
- package/src/plugins/runtime-capability.d.ts +9 -0
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/GRAPH.md +83 -325
- package/src/route-renderer/README.md +73 -90
- package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
- package/src/route-renderer/orchestration/component-render-context.js +147 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
- package/src/route-renderer/orchestration/integration-renderer.js +991 -0
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
- package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
- package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
- package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
- package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
- package/src/route-renderer/orchestration/render-output.utils.js +171 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
- package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
- package/src/route-renderer/orchestration/template-serialization.js +45 -0
- package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
- package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
- package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
- package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
- package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
- package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
- package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
- package/src/route-renderer/route-renderer.d.ts +57 -14
- package/src/route-renderer/route-renderer.js +30 -18
- package/src/router/README.md +94 -0
- package/src/router/client/link-intent.d.ts +53 -0
- package/src/router/client/link-intent.js +34 -0
- package/src/router/client/link-intent.test.browser.d.ts +1 -0
- package/src/router/client/link-intent.test.browser.js +43 -0
- package/src/router/client/navigation-coordinator.d.ts +169 -0
- package/src/router/client/navigation-coordinator.js +215 -0
- package/src/router/server/route-registry.d.ts +78 -0
- package/src/router/server/route-registry.js +262 -0
- package/src/services/README.md +28 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
- package/src/services/assets/asset-processing-service/assets.types.js +0 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +57 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
- package/src/services/assets/asset-processing-service/index.d.ts +6 -0
- package/src/services/assets/asset-processing-service/index.js +6 -0
- package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
- package/src/services/assets/asset-processing-service/page-package.js +80 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
- package/src/services/assets/asset-processing-service/processors/index.js +5 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +120 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
- package/src/services/assets/browser-bundle.service.d.ts +73 -0
- package/src/services/assets/browser-bundle.service.js +41 -0
- package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
- package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
- package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
- package/src/services/html/html-rewriter-provider.service.js +68 -0
- package/src/services/html/html-transformer.service.d.ts +96 -0
- package/src/services/html/html-transformer.service.js +287 -0
- package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
- package/src/services/invalidation/development-invalidation.service.js +190 -0
- package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
- package/src/services/module-loading/app-module-loader.service.js +0 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +151 -0
- package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
- package/src/services/module-loading/host-module-loader-registry.js +15 -0
- package/src/services/module-loading/module-loading-types.d.ts +2 -0
- package/src/services/module-loading/module-loading-types.js +0 -0
- package/src/services/module-loading/node-bootstrap-plugin.d.ts +38 -0
- package/src/services/module-loading/node-bootstrap-plugin.js +215 -0
- package/src/services/module-loading/page-module-import.service.d.ts +95 -0
- package/src/services/module-loading/page-module-import.service.js +191 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
- package/src/services/module-loading/server-module-transpiler.service.js +64 -0
- package/src/services/module-loading/source-module-support.d.ts +5 -0
- package/src/services/module-loading/source-module-support.js +8 -0
- package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
- package/src/services/runtime-state/dev-graph.service.js +162 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
- package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
- package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
- package/src/static-site-generator/README.md +26 -0
- package/src/static-site-generator/static-site-generator.d.ts +67 -20
- package/src/static-site-generator/static-site-generator.js +182 -138
- package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
- package/src/types/internal-types.js +0 -0
- package/src/{public-types.d.ts → types/public-types.d.ts} +239 -31
- package/src/types/public-types.js +0 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +6 -0
- package/src/utils/locals-utils.d.ts +1 -1
- package/src/utils/parse-cli-args.d.ts +4 -1
- package/src/utils/parse-cli-args.js +16 -1
- package/src/utils/resolve-work-dir.d.ts +11 -0
- package/src/utils/resolve-work-dir.js +31 -0
- package/src/watchers/project-watcher.d.ts +11 -7
- package/src/watchers/project-watcher.js +69 -75
- package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
- package/src/watchers/project-watcher.test-helpers.js +6 -5
- package/CHANGELOG.md +0 -94
- package/src/adapters/abstract/application-adapter.ts +0 -337
- package/src/adapters/abstract/router-adapter.ts +0 -30
- package/src/adapters/abstract/server-adapter.ts +0 -79
- package/src/adapters/bun/client-bridge.ts +0 -62
- package/src/adapters/bun/create-app.ts +0 -189
- package/src/adapters/bun/define-api-handler.d.ts +0 -61
- package/src/adapters/bun/define-api-handler.ts +0 -114
- package/src/adapters/bun/hmr-manager.ts +0 -276
- package/src/adapters/bun/index.ts +0 -3
- package/src/adapters/bun/server-adapter.ts +0 -492
- package/src/adapters/bun/server-lifecycle.d.ts +0 -52
- package/src/adapters/bun/server-lifecycle.js +0 -120
- package/src/adapters/bun/server-lifecycle.ts +0 -154
- package/src/adapters/index.ts +0 -6
- package/src/adapters/node/create-app.ts +0 -179
- package/src/adapters/node/index.d.ts +0 -4
- package/src/adapters/node/index.js +0 -8
- package/src/adapters/node/index.ts +0 -9
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.ts +0 -271
- package/src/adapters/node/server-adapter.ts +0 -561
- package/src/adapters/node/static-content-server.ts +0 -203
- package/src/adapters/shared/api-response.ts +0 -104
- package/src/adapters/shared/application-adapter.ts +0 -199
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
- package/src/adapters/shared/fs-server-response-factory.ts +0 -118
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
- package/src/adapters/shared/render-context.ts +0 -105
- package/src/adapters/shared/server-adapter.ts +0 -442
- package/src/adapters/shared/server-route-handler.ts +0 -166
- package/src/adapters/shared/server-static-builder.ts +0 -82
- package/src/build/build-adapter.ts +0 -133
- package/src/build/build-types.ts +0 -83
- package/src/build/esbuild-build-adapter.ts +0 -511
- package/src/config/config-builder.ts +0 -474
- package/src/constants.ts +0 -39
- package/src/create-app.ts +0 -87
- package/src/define-api-handler.js +0 -15
- package/src/define-api-handler.ts +0 -66
- package/src/dev/sc-server.ts +0 -143
- package/src/eco/component-render-context.d.ts +0 -105
- package/src/eco/component-render-context.js +0 -77
- package/src/eco/component-render-context.ts +0 -202
- package/src/eco/eco.ts +0 -221
- package/src/eco/eco.types.ts +0 -202
- package/src/eco/eco.utils.ts +0 -89
- package/src/eco/global-injector-map.ts +0 -112
- package/src/eco/lazy-injector-map.ts +0 -120
- package/src/eco/module-dependencies.ts +0 -75
- package/src/errors/http-error.ts +0 -72
- package/src/errors/index.ts +0 -2
- package/src/errors/locals-access-error.ts +0 -7
- package/src/global/app-logger.ts +0 -4
- package/src/hmr/client/hmr-runtime.ts +0 -121
- package/src/hmr/hmr-strategy.ts +0 -172
- package/src/hmr/hmr.test.e2e.ts +0 -75
- package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
- package/src/hmr/strategies/js-hmr-strategy.ts +0 -327
- package/src/index.browser.ts +0 -3
- package/src/index.ts +0 -5
- package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
- package/src/internal-types.ts +0 -212
- package/src/plugins/alias-resolver-plugin.ts +0 -45
- package/src/plugins/eco-component-meta-plugin.ts +0 -474
- package/src/plugins/integration-plugin.ts +0 -184
- package/src/plugins/processor.ts +0 -220
- package/src/public-types.ts +0 -1255
- package/src/route-renderer/component-graph-executor.d.ts +0 -32
- package/src/route-renderer/component-graph-executor.js +0 -31
- package/src/route-renderer/component-graph-executor.ts +0 -84
- package/src/route-renderer/component-graph.d.ts +0 -42
- package/src/route-renderer/component-graph.js +0 -72
- package/src/route-renderer/component-graph.ts +0 -159
- package/src/route-renderer/component-marker.d.ts +0 -52
- package/src/route-renderer/component-marker.js +0 -46
- package/src/route-renderer/component-marker.ts +0 -117
- package/src/route-renderer/dependency-resolver.js +0 -428
- package/src/route-renderer/dependency-resolver.ts +0 -596
- package/src/route-renderer/html-post-processing.service.d.ts +0 -40
- package/src/route-renderer/html-post-processing.service.js +0 -86
- package/src/route-renderer/html-post-processing.service.ts +0 -103
- package/src/route-renderer/integration-renderer.d.ts +0 -339
- package/src/route-renderer/integration-renderer.js +0 -526
- package/src/route-renderer/integration-renderer.ts +0 -696
- package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
- package/src/route-renderer/marker-graph-resolver.js +0 -93
- package/src/route-renderer/marker-graph-resolver.ts +0 -153
- package/src/route-renderer/page-module-loader.d.ts +0 -61
- package/src/route-renderer/page-module-loader.ts +0 -153
- package/src/route-renderer/render-execution.service.d.ts +0 -69
- package/src/route-renderer/render-execution.service.js +0 -91
- package/src/route-renderer/render-execution.service.ts +0 -158
- package/src/route-renderer/render-preparation.service.d.ts +0 -112
- package/src/route-renderer/render-preparation.service.js +0 -243
- package/src/route-renderer/render-preparation.service.ts +0 -358
- package/src/route-renderer/route-renderer.ts +0 -80
- package/src/router/fs-router-scanner.d.ts +0 -41
- package/src/router/fs-router-scanner.js +0 -155
- package/src/router/fs-router-scanner.ts +0 -217
- package/src/router/fs-router.d.ts +0 -26
- package/src/router/fs-router.js +0 -100
- package/src/router/fs-router.ts +0 -122
- package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
- package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
- package/src/services/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/asset-processing-service/assets.types.ts +0 -112
- package/src/services/asset-processing-service/index.d.ts +0 -3
- package/src/services/asset-processing-service/index.js +0 -3
- package/src/services/asset-processing-service/index.ts +0 -3
- package/src/services/asset-processing-service/processor.interface.ts +0 -27
- package/src/services/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
- package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
- package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
- package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
- package/src/services/asset-processing-service/processors/index.d.ts +0 -5
- package/src/services/asset-processing-service/processors/index.js +0 -5
- package/src/services/asset-processing-service/processors/index.ts +0 -5
- package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
- package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
- package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
- package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
- package/src/services/cache/cache.types.ts +0 -126
- package/src/services/cache/index.ts +0 -18
- package/src/services/cache/memory-cache-store.ts +0 -130
- package/src/services/cache/page-cache-service.ts +0 -202
- package/src/services/html-transformer.service.d.ts +0 -50
- package/src/services/html-transformer.service.js +0 -163
- package/src/services/html-transformer.service.ts +0 -217
- package/src/services/page-module-import.service.d.ts +0 -37
- package/src/services/page-module-import.service.js +0 -88
- package/src/services/page-module-import.service.ts +0 -129
- package/src/services/page-request-cache-coordinator.service.ts +0 -128
- package/src/services/schema-validation-service.ts +0 -204
- package/src/services/validation/standard-schema.types.ts +0 -68
- package/src/static-site-generator/static-site-generator.ts +0 -359
- package/src/utils/css.d.ts +0 -1
- package/src/utils/css.js +0 -7
- package/src/utils/css.ts +0 -5
- package/src/utils/deep-merge.ts +0 -47
- package/src/utils/hash.ts +0 -5
- package/src/utils/html.ts +0 -1
- package/src/utils/invariant.ts +0 -15
- package/src/utils/locals-utils.ts +0 -37
- package/src/utils/parse-cli-args.ts +0 -83
- package/src/utils/path-utils.module.ts +0 -14
- package/src/utils/runtime.ts +0 -44
- package/src/utils/server-utils.module.ts +0 -67
- package/src/watchers/project-watcher.test-helpers.ts +0 -40
- package/src/watchers/project-watcher.ts +0 -364
- /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
- /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
- /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
- /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
- /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createBrowserRuntimeImportRewritePlugin,
|
|
3
|
+
DEFAULT_BROWSER_RUNTIME_IMPORT_REWRITE_PLUGIN_NAME
|
|
4
|
+
} from "./browser-runtime-import-rewrite-plugin.js";
|
|
5
|
+
import {
|
|
6
|
+
createBrowserRuntimeManifest,
|
|
7
|
+
mergeBrowserRuntimeManifests
|
|
8
|
+
} from "./browser-runtime-manifest.js";
|
|
9
|
+
function mergeEcoBuildPlugins(...pluginLists) {
|
|
10
|
+
const byName = /* @__PURE__ */ new Map();
|
|
11
|
+
for (const plugins of pluginLists) {
|
|
12
|
+
for (const plugin of plugins ?? []) {
|
|
13
|
+
if (!byName.has(plugin.name)) {
|
|
14
|
+
byName.set(plugin.name, plugin);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return Array.from(byName.values());
|
|
19
|
+
}
|
|
20
|
+
function createAppBuildManifest(input) {
|
|
21
|
+
return {
|
|
22
|
+
loaderPlugins: mergeEcoBuildPlugins(input?.loaderPlugins),
|
|
23
|
+
runtimePlugins: mergeEcoBuildPlugins(input?.runtimePlugins),
|
|
24
|
+
browserBundlePlugins: mergeEcoBuildPlugins(input?.browserBundlePlugins),
|
|
25
|
+
browserRuntimeManifest: mergeBrowserRuntimeManifests(input?.browserRuntimeManifest)
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function getBrowserRuntimeManifest(manifest) {
|
|
29
|
+
return manifest.browserRuntimeManifest ?? createBrowserRuntimeManifest();
|
|
30
|
+
}
|
|
31
|
+
function getServerBuildPlugins(manifest) {
|
|
32
|
+
return mergeEcoBuildPlugins(manifest.loaderPlugins, manifest.runtimePlugins);
|
|
33
|
+
}
|
|
34
|
+
function getBrowserBuildPlugins(manifest) {
|
|
35
|
+
const runtimeRewritePlugin = createBrowserRuntimeImportRewritePlugin({
|
|
36
|
+
name: DEFAULT_BROWSER_RUNTIME_IMPORT_REWRITE_PLUGIN_NAME,
|
|
37
|
+
manifest: getBrowserRuntimeManifest(manifest)
|
|
38
|
+
});
|
|
39
|
+
return mergeEcoBuildPlugins(
|
|
40
|
+
manifest.loaderPlugins,
|
|
41
|
+
manifest.runtimePlugins,
|
|
42
|
+
runtimeRewritePlugin ? [runtimeRewritePlugin] : [],
|
|
43
|
+
manifest.browserBundlePlugins
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
export {
|
|
47
|
+
createAppBuildManifest,
|
|
48
|
+
getBrowserBuildPlugins,
|
|
49
|
+
getBrowserRuntimeManifest,
|
|
50
|
+
getServerBuildPlugins,
|
|
51
|
+
mergeEcoBuildPlugins
|
|
52
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type BuildAdapter, type BuildExecutor, type BuildOptions, type BuildResult } from './build-adapter.js';
|
|
2
|
+
import { EsbuildBuildAdapter } from './esbuild-build-adapter.js';
|
|
3
|
+
import type { EcoBuildPlugin } from './build-types.js';
|
|
4
|
+
export declare function withBuildExecutorPlugins(executor: BuildExecutor, getPlugins: () => EcoBuildPlugin[]): BuildExecutor;
|
|
5
|
+
/**
|
|
6
|
+
* Serialized build coordinator for the shared esbuild adapter.
|
|
7
|
+
*
|
|
8
|
+
* The underlying adapter remains responsible for plain build execution. This
|
|
9
|
+
* coordinator owns the policy that must be shared across callers while Bun-native
|
|
10
|
+
* execution still uses the shared esbuild compatibility backend:
|
|
11
|
+
*
|
|
12
|
+
* - serialized access to the shared esbuild service
|
|
13
|
+
* - recovery from known esbuild worker protocol faults
|
|
14
|
+
*
|
|
15
|
+
* Unlike the previous design, the coordinator does not monkey-patch the adapter
|
|
16
|
+
* or install process-level fault handlers. The owning app/runtime passes this
|
|
17
|
+
* executor explicitly to build consumers that need coordinated builds.
|
|
18
|
+
*/
|
|
19
|
+
export declare class DevBuildCoordinator implements BuildExecutor {
|
|
20
|
+
private buildQueue;
|
|
21
|
+
private esbuildSessionWarm;
|
|
22
|
+
private esbuildModuleGeneration;
|
|
23
|
+
private readonly adapter;
|
|
24
|
+
constructor(adapter: EsbuildBuildAdapter);
|
|
25
|
+
/**
|
|
26
|
+
* Executes a build through the serialized development queue.
|
|
27
|
+
*
|
|
28
|
+
* If an esbuild protocol fault is detected, the coordinator resets the queue,
|
|
29
|
+
* stops the corrupted service, increments the module generation, and retries
|
|
30
|
+
* the build once.
|
|
31
|
+
*/
|
|
32
|
+
build(options: BuildOptions): Promise<BuildResult>;
|
|
33
|
+
/**
|
|
34
|
+
* Attempts recovery from a known esbuild worker protocol fault.
|
|
35
|
+
*
|
|
36
|
+
* Returns `true` only when the error matches the protocol-fault signature and
|
|
37
|
+
* the coordinator successfully reset its shared state.
|
|
38
|
+
*/
|
|
39
|
+
recoverFromProtocolFault(error: unknown): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* Clears internal coordinator state for isolated tests.
|
|
42
|
+
*/
|
|
43
|
+
resetForTests(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Overrides the internal queue promise for fault-recovery tests.
|
|
46
|
+
*/
|
|
47
|
+
setBuildQueueForTests(queue: Promise<void>): void;
|
|
48
|
+
/**
|
|
49
|
+
* Returns the current internal queue promise for fault-recovery tests.
|
|
50
|
+
*/
|
|
51
|
+
getBuildQueueForTests(): Promise<void>;
|
|
52
|
+
private runSerialized;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Creates the appropriate build executor for one app/runtime instance.
|
|
56
|
+
*
|
|
57
|
+
* Bun-native esbuild execution always uses the compatibility coordinator so
|
|
58
|
+
* preview/static generation and development flows share the same serialized
|
|
59
|
+
* access and protocol-fault recovery policy. Host-owned execution stays on the
|
|
60
|
+
* plain adapter boundary.
|
|
61
|
+
*/
|
|
62
|
+
export declare function createAppBuildExecutor(options: {
|
|
63
|
+
development: boolean;
|
|
64
|
+
adapter?: BuildAdapter;
|
|
65
|
+
getPlugins?: () => EcoBuildPlugin[];
|
|
66
|
+
}): BuildExecutor;
|
|
67
|
+
export declare function createOrReuseAppBuildExecutor(options: {
|
|
68
|
+
development: boolean;
|
|
69
|
+
adapter?: BuildAdapter;
|
|
70
|
+
currentExecutor?: BuildExecutor;
|
|
71
|
+
getPlugins?: () => EcoBuildPlugin[];
|
|
72
|
+
}): BuildExecutor;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { appLogger } from "../global/app-logger.js";
|
|
2
|
+
import {
|
|
3
|
+
defaultBunBuildAdapter
|
|
4
|
+
} from "./build-adapter.js";
|
|
5
|
+
import { EsbuildBuildAdapter, ESBUILD_ADAPTER_BRAND } from "./esbuild-build-adapter.js";
|
|
6
|
+
import { mergeEcoBuildPlugins } from "./build-manifest.js";
|
|
7
|
+
function isEsbuildBuildAdapter(adapter) {
|
|
8
|
+
return adapter instanceof EsbuildBuildAdapter || typeof adapter === "object" && adapter !== null && adapter[ESBUILD_ADAPTER_BRAND] === true;
|
|
9
|
+
}
|
|
10
|
+
function mergeBuildPlugins(options, appPlugins) {
|
|
11
|
+
if (appPlugins.length === 0) {
|
|
12
|
+
return options;
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
...options,
|
|
16
|
+
plugins: mergeEcoBuildPlugins(options.plugins, appPlugins)
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
class BuildExecutorWithPlugins {
|
|
20
|
+
executor;
|
|
21
|
+
getPlugins;
|
|
22
|
+
constructor(executor, getPlugins) {
|
|
23
|
+
this.executor = executor;
|
|
24
|
+
this.getPlugins = getPlugins;
|
|
25
|
+
}
|
|
26
|
+
async build(options) {
|
|
27
|
+
return await this.executor.build(mergeBuildPlugins(options, this.getPlugins()));
|
|
28
|
+
}
|
|
29
|
+
unwrap() {
|
|
30
|
+
return this.executor;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function unwrapBuildExecutor(executor) {
|
|
34
|
+
if (executor instanceof BuildExecutorWithPlugins) {
|
|
35
|
+
return unwrapBuildExecutor(executor.unwrap());
|
|
36
|
+
}
|
|
37
|
+
return executor;
|
|
38
|
+
}
|
|
39
|
+
function withBuildExecutorPlugins(executor, getPlugins) {
|
|
40
|
+
return new BuildExecutorWithPlugins(executor, getPlugins);
|
|
41
|
+
}
|
|
42
|
+
class DevBuildCoordinator {
|
|
43
|
+
buildQueue = Promise.resolve();
|
|
44
|
+
esbuildSessionWarm = false;
|
|
45
|
+
esbuildModuleGeneration = 0;
|
|
46
|
+
adapter;
|
|
47
|
+
constructor(adapter) {
|
|
48
|
+
this.adapter = adapter;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Executes a build through the serialized development queue.
|
|
52
|
+
*
|
|
53
|
+
* If an esbuild protocol fault is detected, the coordinator resets the queue,
|
|
54
|
+
* stops the corrupted service, increments the module generation, and retries
|
|
55
|
+
* the build once.
|
|
56
|
+
*/
|
|
57
|
+
async build(options) {
|
|
58
|
+
return this.runSerialized(async () => {
|
|
59
|
+
try {
|
|
60
|
+
const result = await this.adapter.buildOrThrow(options, this.esbuildModuleGeneration);
|
|
61
|
+
this.esbuildSessionWarm = true;
|
|
62
|
+
return result;
|
|
63
|
+
} catch (error) {
|
|
64
|
+
if (await this.recoverFromProtocolFault(error)) {
|
|
65
|
+
appLogger.warn("Recovered from esbuild protocol fault. Retrying build.");
|
|
66
|
+
try {
|
|
67
|
+
const retry = await this.adapter.buildOrThrow(options, this.esbuildModuleGeneration);
|
|
68
|
+
this.esbuildSessionWarm = true;
|
|
69
|
+
return retry;
|
|
70
|
+
} catch (retryError) {
|
|
71
|
+
return this.adapter.createFailureResult(retryError);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return this.adapter.createFailureResult(error);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Attempts recovery from a known esbuild worker protocol fault.
|
|
80
|
+
*
|
|
81
|
+
* Returns `true` only when the error matches the protocol-fault signature and
|
|
82
|
+
* the coordinator successfully reset its shared state.
|
|
83
|
+
*/
|
|
84
|
+
async recoverFromProtocolFault(error) {
|
|
85
|
+
if (!this.adapter.isEsbuildProtocolError(error)) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
this.buildQueue = Promise.resolve();
|
|
89
|
+
this.esbuildSessionWarm = false;
|
|
90
|
+
await this.adapter.stopEsbuildService(this.esbuildModuleGeneration);
|
|
91
|
+
this.esbuildModuleGeneration += 1;
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Clears internal coordinator state for isolated tests.
|
|
96
|
+
*/
|
|
97
|
+
resetForTests() {
|
|
98
|
+
this.buildQueue = Promise.resolve();
|
|
99
|
+
this.esbuildSessionWarm = false;
|
|
100
|
+
this.esbuildModuleGeneration = 0;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Overrides the internal queue promise for fault-recovery tests.
|
|
104
|
+
*/
|
|
105
|
+
setBuildQueueForTests(queue) {
|
|
106
|
+
this.buildQueue = queue;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Returns the current internal queue promise for fault-recovery tests.
|
|
110
|
+
*/
|
|
111
|
+
getBuildQueueForTests() {
|
|
112
|
+
return this.buildQueue;
|
|
113
|
+
}
|
|
114
|
+
async runSerialized(operation) {
|
|
115
|
+
let releaseBuild;
|
|
116
|
+
const currentBuild = new Promise((resolve) => {
|
|
117
|
+
releaseBuild = resolve;
|
|
118
|
+
});
|
|
119
|
+
const previousBuild = this.buildQueue;
|
|
120
|
+
this.buildQueue = previousBuild.catch(() => void 0).then(async () => await currentBuild);
|
|
121
|
+
await previousBuild.catch(() => void 0);
|
|
122
|
+
try {
|
|
123
|
+
return await operation();
|
|
124
|
+
} finally {
|
|
125
|
+
releaseBuild?.();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function createAppBuildExecutor(options) {
|
|
130
|
+
const adapter = options.adapter ?? defaultBunBuildAdapter;
|
|
131
|
+
const baseExecutor = isEsbuildBuildAdapter(adapter) ? new DevBuildCoordinator(adapter) : adapter;
|
|
132
|
+
if (!options.getPlugins) {
|
|
133
|
+
return baseExecutor;
|
|
134
|
+
}
|
|
135
|
+
return new BuildExecutorWithPlugins(baseExecutor, options.getPlugins);
|
|
136
|
+
}
|
|
137
|
+
function createOrReuseAppBuildExecutor(options) {
|
|
138
|
+
const adapter = options.adapter ?? defaultBunBuildAdapter;
|
|
139
|
+
const currentBaseExecutor = options.currentExecutor ? unwrapBuildExecutor(options.currentExecutor) : void 0;
|
|
140
|
+
const baseExecutor = options.development && currentBaseExecutor instanceof DevBuildCoordinator ? currentBaseExecutor : createAppBuildExecutor({
|
|
141
|
+
development: options.development,
|
|
142
|
+
adapter
|
|
143
|
+
});
|
|
144
|
+
if (!options.getPlugins) {
|
|
145
|
+
return baseExecutor;
|
|
146
|
+
}
|
|
147
|
+
return withBuildExecutorPlugins(baseExecutor, options.getPlugins);
|
|
148
|
+
}
|
|
149
|
+
export {
|
|
150
|
+
DevBuildCoordinator,
|
|
151
|
+
createAppBuildExecutor,
|
|
152
|
+
createOrReuseAppBuildExecutor,
|
|
153
|
+
withBuildExecutorPlugins
|
|
154
|
+
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { EcoBuildPlugin } from './build-types.js';
|
|
2
1
|
import type { BuildAdapter, BuildOptions, BuildResult, BuildTranspileOptions, BuildTranspileProfile } from './build-adapter.js';
|
|
3
2
|
/**
|
|
4
3
|
* Node build adapter backed by esbuild.
|
|
@@ -6,8 +5,14 @@ import type { BuildAdapter, BuildOptions, BuildResult, BuildTranspileOptions, Bu
|
|
|
6
5
|
* This adapter keeps Ecopages build plugin compatibility (`onResolve`, `onLoad`,
|
|
7
6
|
* and `module`) while delegating bundling and TypeScript/decorator transforms to esbuild.
|
|
8
7
|
*/
|
|
8
|
+
export declare const ESBUILD_ADAPTER_BRAND: unique symbol;
|
|
9
9
|
export declare class EsbuildBuildAdapter implements BuildAdapter {
|
|
10
|
-
|
|
10
|
+
readonly ownership: "bun-native";
|
|
11
|
+
readonly [ESBUILD_ADAPTER_BRAND] = true;
|
|
12
|
+
private getJavaScriptOutExtension;
|
|
13
|
+
private collectWorkspaceNodePaths;
|
|
14
|
+
private getFallbackNodePaths;
|
|
15
|
+
private rewriteBrowserRuntimeImportsInOutputs;
|
|
11
16
|
private escapeRegExp;
|
|
12
17
|
private getPluginsForBuild;
|
|
13
18
|
private normalizeEsbuildLoader;
|
|
@@ -40,6 +45,14 @@ export declare class EsbuildBuildAdapter implements BuildAdapter {
|
|
|
40
45
|
*/
|
|
41
46
|
private createEcoPluginBridge;
|
|
42
47
|
private loadEsbuildModule;
|
|
48
|
+
private isMockedEsbuildModule;
|
|
49
|
+
/**
|
|
50
|
+
* Detects the subset of runtime faults that indicate esbuild's worker
|
|
51
|
+
* protocol is corrupted rather than a normal build error.
|
|
52
|
+
*/
|
|
53
|
+
isEsbuildProtocolError(error: unknown): boolean;
|
|
54
|
+
stopEsbuildService(moduleGeneration?: number): Promise<void>;
|
|
55
|
+
buildOrThrow(options: BuildOptions, moduleGeneration?: number): Promise<BuildResult>;
|
|
43
56
|
private mapEsbuildSourcemap;
|
|
44
57
|
private mapEsbuildFormat;
|
|
45
58
|
private hasTemplateTokens;
|
|
@@ -50,6 +63,7 @@ export declare class EsbuildBuildAdapter implements BuildAdapter {
|
|
|
50
63
|
* Normalizes esbuild errors into Ecopages `BuildLog` entries.
|
|
51
64
|
*/
|
|
52
65
|
private toBuildLogs;
|
|
66
|
+
createFailureResult(error: unknown): BuildResult;
|
|
53
67
|
/**
|
|
54
68
|
* Bundles entrypoints using esbuild for Node runtime builds.
|
|
55
69
|
*/
|
|
@@ -58,10 +72,6 @@ export declare class EsbuildBuildAdapter implements BuildAdapter {
|
|
|
58
72
|
* Resolves module specifiers from a project root.
|
|
59
73
|
*/
|
|
60
74
|
resolve(importPath: string, rootDir: string): string;
|
|
61
|
-
/**
|
|
62
|
-
* Registers a build plugin once by plugin name.
|
|
63
|
-
*/
|
|
64
|
-
registerPlugin(plugin: EcoBuildPlugin): void;
|
|
65
75
|
/**
|
|
66
76
|
* Returns transpile defaults for a known transpile profile.
|
|
67
77
|
*/
|
|
@@ -1,6 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { readFileSync, readdirSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { pathToFileURL } from "node:url";
|
|
3
5
|
import { fileSystem } from "@ecopages/file-system";
|
|
6
|
+
import {
|
|
7
|
+
collectBrowserRuntimeImportRewriteMap,
|
|
8
|
+
rewriteBrowserRuntimeImports
|
|
9
|
+
} from "./browser-runtime-import-rewrite-plugin.js";
|
|
10
|
+
const moduleRequire = createRequire(import.meta.url);
|
|
11
|
+
const esbuildPath = moduleRequire.resolve("esbuild");
|
|
12
|
+
const workspaceNodePathsCache = /* @__PURE__ */ new Map();
|
|
4
13
|
function transpileProfileToOptions(profile) {
|
|
5
14
|
switch (profile) {
|
|
6
15
|
case "browser-script":
|
|
@@ -23,15 +32,96 @@ function transpileProfileToOptions(profile) {
|
|
|
23
32
|
};
|
|
24
33
|
}
|
|
25
34
|
}
|
|
35
|
+
const ESBUILD_ADAPTER_BRAND = /* @__PURE__ */ Symbol.for("EsbuildBuildAdapter");
|
|
26
36
|
class EsbuildBuildAdapter {
|
|
27
|
-
|
|
37
|
+
ownership = "bun-native";
|
|
38
|
+
[ESBUILD_ADAPTER_BRAND] = true;
|
|
39
|
+
getJavaScriptOutExtension(options) {
|
|
40
|
+
if (options.target === "browser") {
|
|
41
|
+
return void 0;
|
|
42
|
+
}
|
|
43
|
+
if (options.format === "cjs") {
|
|
44
|
+
return ".cjs";
|
|
45
|
+
}
|
|
46
|
+
if (options.format === "esm") {
|
|
47
|
+
return ".mjs";
|
|
48
|
+
}
|
|
49
|
+
return void 0;
|
|
50
|
+
}
|
|
51
|
+
collectWorkspaceNodePaths(scanRoot, maxDepth = 3) {
|
|
52
|
+
const normalizedRoot = path.resolve(scanRoot);
|
|
53
|
+
const cached = workspaceNodePathsCache.get(normalizedRoot);
|
|
54
|
+
if (cached) {
|
|
55
|
+
return cached;
|
|
56
|
+
}
|
|
57
|
+
const nodePaths = /* @__PURE__ */ new Set();
|
|
58
|
+
const skippedDirectoryNames = /* @__PURE__ */ new Set([".git", ".turbo", "dist", "node_modules", "test-results"]);
|
|
59
|
+
const visit = (dirPath, depth) => {
|
|
60
|
+
if (depth > maxDepth) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const packageJsonPath = path.join(dirPath, "package.json");
|
|
64
|
+
const nodeModulesPath = path.join(dirPath, "node_modules");
|
|
65
|
+
if (fileSystem.exists(packageJsonPath) && fileSystem.exists(nodeModulesPath)) {
|
|
66
|
+
nodePaths.add(nodeModulesPath);
|
|
67
|
+
}
|
|
68
|
+
if (depth === maxDepth) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
for (const entry of readdirSync(dirPath, { withFileTypes: true })) {
|
|
72
|
+
if (!entry.isDirectory()) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (skippedDirectoryNames.has(entry.name) || entry.name.startsWith(".")) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
visit(path.join(dirPath, entry.name), depth + 1);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
if (fileSystem.exists(normalizedRoot) && fileSystem.isDirectory(normalizedRoot)) {
|
|
82
|
+
visit(normalizedRoot, 0);
|
|
83
|
+
}
|
|
84
|
+
const resolvedNodePaths = Array.from(nodePaths);
|
|
85
|
+
workspaceNodePathsCache.set(normalizedRoot, resolvedNodePaths);
|
|
86
|
+
return resolvedNodePaths;
|
|
87
|
+
}
|
|
88
|
+
getFallbackNodePaths(contextRoot) {
|
|
89
|
+
const nodePaths = /* @__PURE__ */ new Set();
|
|
90
|
+
const contextNodeModulesPath = path.join(contextRoot, "node_modules");
|
|
91
|
+
if (fileSystem.exists(contextNodeModulesPath)) {
|
|
92
|
+
nodePaths.add(contextNodeModulesPath);
|
|
93
|
+
}
|
|
94
|
+
for (const workspaceNodePath of this.collectWorkspaceNodePaths(process.cwd())) {
|
|
95
|
+
nodePaths.add(workspaceNodePath);
|
|
96
|
+
}
|
|
97
|
+
return Array.from(nodePaths);
|
|
98
|
+
}
|
|
99
|
+
rewriteBrowserRuntimeImportsInOutputs(result, plugins) {
|
|
100
|
+
if (!result.success || result.outputs.length === 0) {
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
const specifierMap = collectBrowserRuntimeImportRewriteMap(plugins);
|
|
104
|
+
if (specifierMap.size === 0) {
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
for (const output of result.outputs) {
|
|
108
|
+
if (!/\.(?:[cm]?js)$/u.test(output.path)) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const code = readFileSync(output.path, "utf-8");
|
|
112
|
+
const rewritten = rewriteBrowserRuntimeImports(code, specifierMap, output.path);
|
|
113
|
+
if (rewritten !== code) {
|
|
114
|
+
writeFileSync(output.path, rewritten);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
28
119
|
escapeRegExp(value) {
|
|
29
120
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
30
121
|
}
|
|
31
122
|
getPluginsForBuild(additionalPlugins) {
|
|
32
|
-
const merged = [...additionalPlugins ?? [], ...this.registeredPlugins];
|
|
33
123
|
const byName = /* @__PURE__ */ new Map();
|
|
34
|
-
for (const plugin of
|
|
124
|
+
for (const plugin of additionalPlugins ?? []) {
|
|
35
125
|
if (!byName.has(plugin.name)) {
|
|
36
126
|
byName.set(plugin.name, plugin);
|
|
37
127
|
}
|
|
@@ -207,13 +297,111 @@ class EsbuildBuildAdapter {
|
|
|
207
297
|
}
|
|
208
298
|
};
|
|
209
299
|
}
|
|
210
|
-
async loadEsbuildModule() {
|
|
211
|
-
const
|
|
300
|
+
async loadEsbuildModule(moduleGeneration = 0) {
|
|
301
|
+
const importedModule = await import("esbuild");
|
|
302
|
+
const esbuildModule = typeof importedModule.build === "function" ? importedModule : importedModule.default ?? importedModule;
|
|
303
|
+
if (moduleGeneration > 0 && !this.isMockedEsbuildModule(esbuildModule)) {
|
|
304
|
+
const freshModule = await import(
|
|
305
|
+
/* @vite-ignore */
|
|
306
|
+
`${pathToFileURL(esbuildPath).href}?ecopages_esbuild=${moduleGeneration}`
|
|
307
|
+
);
|
|
308
|
+
const normalizedFreshModule = typeof freshModule.build === "function" ? freshModule : freshModule.default ?? freshModule;
|
|
309
|
+
if (typeof normalizedFreshModule.build === "function") {
|
|
310
|
+
return normalizedFreshModule;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
212
313
|
if (typeof esbuildModule.build !== "function") {
|
|
213
314
|
throw new Error("esbuild is not available. Install esbuild to use Node bundling.");
|
|
214
315
|
}
|
|
215
316
|
return esbuildModule;
|
|
216
317
|
}
|
|
318
|
+
isMockedEsbuildModule(esbuildModule) {
|
|
319
|
+
const build = esbuildModule.build;
|
|
320
|
+
const stop = esbuildModule.stop;
|
|
321
|
+
return typeof build?.mock === "object" || typeof stop?.mock === "object";
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Detects the subset of runtime faults that indicate esbuild's worker
|
|
325
|
+
* protocol is corrupted rather than a normal build error.
|
|
326
|
+
*/
|
|
327
|
+
isEsbuildProtocolError(error) {
|
|
328
|
+
if (!(error instanceof Error)) {
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
return ["Unexpected end of JSON input", "Unexpected EOF", "parseJSON", "buildResponseToResult"].some(
|
|
332
|
+
(fragment) => error.message.includes(fragment) || error.stack?.includes(fragment)
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
async stopEsbuildService(moduleGeneration = 0) {
|
|
336
|
+
const esbuild = await this.loadEsbuildModule(moduleGeneration);
|
|
337
|
+
if (typeof esbuild.stop === "function") {
|
|
338
|
+
esbuild.stop();
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
async buildOrThrow(options, moduleGeneration = 0) {
|
|
342
|
+
const esbuild = await this.loadEsbuildModule(moduleGeneration);
|
|
343
|
+
const contextRoot = options.root ? path.resolve(options.root) : process.cwd();
|
|
344
|
+
const outdir = path.resolve(options.outdir ?? "dist/assets");
|
|
345
|
+
const tsconfigPath = path.join(contextRoot, "tsconfig.json");
|
|
346
|
+
const tsconfigExists = fileSystem.exists(tsconfigPath);
|
|
347
|
+
const nodePaths = this.getFallbackNodePaths(contextRoot);
|
|
348
|
+
const plugins = this.getPluginsForBuild(options.plugins);
|
|
349
|
+
const esbuildPlugins = [
|
|
350
|
+
...plugins.length > 0 ? [this.createEcoPluginBridge(plugins, contextRoot)] : []
|
|
351
|
+
];
|
|
352
|
+
const transpileTarget = "es2022";
|
|
353
|
+
const usesTemplatedNaming = this.hasTemplateTokens(options.naming);
|
|
354
|
+
const outfile = options.naming && !usesTemplatedNaming ? path.join(outdir, options.naming) : void 0;
|
|
355
|
+
if (outfile) {
|
|
356
|
+
fileSystem.ensureDir(path.dirname(outfile));
|
|
357
|
+
}
|
|
358
|
+
const outputOptions = outfile ? { outfile } : {
|
|
359
|
+
outdir,
|
|
360
|
+
...options.outbase ? { outbase: path.resolve(options.outbase) } : {},
|
|
361
|
+
entryNames: usesTemplatedNaming ? this.toEntryNamePattern(options.naming) : "[name]",
|
|
362
|
+
chunkNames: "[name]-[hash]",
|
|
363
|
+
assetNames: "[name]-[hash]"
|
|
364
|
+
};
|
|
365
|
+
const result = await esbuild.build({
|
|
366
|
+
absWorkingDir: contextRoot,
|
|
367
|
+
...nodePaths.length > 0 ? { nodePaths } : {},
|
|
368
|
+
entryPoints: options.entrypoints,
|
|
369
|
+
bundle: options.bundle ?? true,
|
|
370
|
+
...outputOptions,
|
|
371
|
+
...options.conditions ? { conditions: options.conditions } : {},
|
|
372
|
+
...options.define ? { define: options.define } : {},
|
|
373
|
+
format: this.mapEsbuildFormat(options.format),
|
|
374
|
+
platform: options.target === "browser" ? "browser" : "node",
|
|
375
|
+
sourcemap: this.mapEsbuildSourcemap(options.sourcemap),
|
|
376
|
+
splitting: outfile ? false : !!options.splitting,
|
|
377
|
+
minify: !!options.minify,
|
|
378
|
+
...typeof options.treeshaking === "boolean" ? { treeShaking: options.treeshaking } : {},
|
|
379
|
+
external: options.external,
|
|
380
|
+
...options.target !== "browser" && options.externalPackages !== false ? { packages: "external" } : {},
|
|
381
|
+
target: transpileTarget,
|
|
382
|
+
...this.getJavaScriptOutExtension(options) ? { outExtension: { ".js": this.getJavaScriptOutExtension(options) } } : {},
|
|
383
|
+
metafile: true,
|
|
384
|
+
write: true,
|
|
385
|
+
plugins: esbuildPlugins,
|
|
386
|
+
jsx: "automatic",
|
|
387
|
+
tsconfig: tsconfigExists ? tsconfigPath : void 0,
|
|
388
|
+
logLevel: "silent"
|
|
389
|
+
});
|
|
390
|
+
const outputs = Object.keys(result.metafile.outputs).map((outputPath) => ({
|
|
391
|
+
path: path.isAbsolute(outputPath) ? outputPath : path.join(contextRoot, outputPath)
|
|
392
|
+
}));
|
|
393
|
+
const logs = result.warnings.map((warning) => ({ message: warning.text }));
|
|
394
|
+
const dependencyGraph = this.extractDependencyGraph(result.metafile, contextRoot);
|
|
395
|
+
return this.rewriteBrowserRuntimeImportsInOutputs(
|
|
396
|
+
{
|
|
397
|
+
success: true,
|
|
398
|
+
logs,
|
|
399
|
+
outputs,
|
|
400
|
+
dependencyGraph
|
|
401
|
+
},
|
|
402
|
+
plugins
|
|
403
|
+
);
|
|
404
|
+
}
|
|
217
405
|
mapEsbuildSourcemap(value) {
|
|
218
406
|
switch (value) {
|
|
219
407
|
case "none":
|
|
@@ -297,87 +485,28 @@ class EsbuildBuildAdapter {
|
|
|
297
485
|
}
|
|
298
486
|
return [{ message: "Unknown esbuild error" }];
|
|
299
487
|
}
|
|
488
|
+
createFailureResult(error) {
|
|
489
|
+
return {
|
|
490
|
+
success: false,
|
|
491
|
+
logs: this.toBuildLogs(error),
|
|
492
|
+
outputs: []
|
|
493
|
+
};
|
|
494
|
+
}
|
|
300
495
|
/**
|
|
301
496
|
* Bundles entrypoints using esbuild for Node runtime builds.
|
|
302
497
|
*/
|
|
303
498
|
async build(options) {
|
|
304
|
-
const esbuild = await this.loadEsbuildModule();
|
|
305
|
-
const contextRoot = options.root ? path.resolve(options.root) : process.cwd();
|
|
306
|
-
const outdir = path.resolve(options.outdir ?? ".eco/assets");
|
|
307
|
-
const tsconfigPath = path.join(contextRoot, "tsconfig.json");
|
|
308
|
-
const tsconfigExists = fileSystem.exists(tsconfigPath);
|
|
309
|
-
const plugins = this.getPluginsForBuild(options.plugins);
|
|
310
|
-
const esbuildPlugins = [
|
|
311
|
-
...plugins.length > 0 ? [this.createEcoPluginBridge(plugins, contextRoot)] : []
|
|
312
|
-
];
|
|
313
|
-
const transpileTarget = "es2022";
|
|
314
|
-
const usesTemplatedNaming = this.hasTemplateTokens(options.naming);
|
|
315
|
-
const outfile = options.naming && !usesTemplatedNaming ? path.join(outdir, options.naming) : void 0;
|
|
316
|
-
if (outfile) {
|
|
317
|
-
fileSystem.ensureDir(path.dirname(outfile));
|
|
318
|
-
}
|
|
319
|
-
const outputOptions = outfile ? { outfile } : {
|
|
320
|
-
outdir,
|
|
321
|
-
...options.outbase ? { outbase: path.resolve(options.outbase) } : {},
|
|
322
|
-
entryNames: usesTemplatedNaming ? this.toEntryNamePattern(options.naming) : "[name]",
|
|
323
|
-
chunkNames: "[name]-[hash]",
|
|
324
|
-
assetNames: "[name]-[hash]"
|
|
325
|
-
};
|
|
326
499
|
try {
|
|
327
|
-
|
|
328
|
-
absWorkingDir: contextRoot,
|
|
329
|
-
entryPoints: options.entrypoints,
|
|
330
|
-
bundle: options.bundle ?? true,
|
|
331
|
-
...outputOptions,
|
|
332
|
-
format: this.mapEsbuildFormat(options.format),
|
|
333
|
-
platform: options.target === "browser" ? "browser" : "node",
|
|
334
|
-
sourcemap: this.mapEsbuildSourcemap(options.sourcemap),
|
|
335
|
-
splitting: outfile ? false : !!options.splitting,
|
|
336
|
-
minify: !!options.minify,
|
|
337
|
-
...typeof options.treeshaking === "boolean" ? { treeShaking: options.treeshaking } : {},
|
|
338
|
-
external: options.external,
|
|
339
|
-
...options.target !== "browser" && options.externalPackages !== false ? { packages: "external" } : {},
|
|
340
|
-
target: transpileTarget,
|
|
341
|
-
metafile: true,
|
|
342
|
-
write: true,
|
|
343
|
-
plugins: esbuildPlugins,
|
|
344
|
-
jsx: "automatic",
|
|
345
|
-
tsconfig: tsconfigExists ? tsconfigPath : void 0,
|
|
346
|
-
logLevel: "silent"
|
|
347
|
-
});
|
|
348
|
-
const outputs = Object.keys(result.metafile.outputs).map((outputPath) => ({
|
|
349
|
-
path: path.isAbsolute(outputPath) ? outputPath : path.join(contextRoot, outputPath)
|
|
350
|
-
}));
|
|
351
|
-
const logs = result.warnings.map((warning) => ({ message: warning.text }));
|
|
352
|
-
const dependencyGraph = this.extractDependencyGraph(result.metafile, contextRoot);
|
|
353
|
-
return {
|
|
354
|
-
success: true,
|
|
355
|
-
logs,
|
|
356
|
-
outputs,
|
|
357
|
-
dependencyGraph
|
|
358
|
-
};
|
|
500
|
+
return await this.buildOrThrow(options);
|
|
359
501
|
} catch (error) {
|
|
360
|
-
return
|
|
361
|
-
success: false,
|
|
362
|
-
logs: this.toBuildLogs(error),
|
|
363
|
-
outputs: []
|
|
364
|
-
};
|
|
502
|
+
return this.createFailureResult(error);
|
|
365
503
|
}
|
|
366
504
|
}
|
|
367
505
|
/**
|
|
368
506
|
* Resolves module specifiers from a project root.
|
|
369
507
|
*/
|
|
370
508
|
resolve(importPath, rootDir) {
|
|
371
|
-
|
|
372
|
-
return localRequire.resolve(importPath);
|
|
373
|
-
}
|
|
374
|
-
/**
|
|
375
|
-
* Registers a build plugin once by plugin name.
|
|
376
|
-
*/
|
|
377
|
-
registerPlugin(plugin) {
|
|
378
|
-
if (!this.registeredPlugins.find((registered) => registered.name === plugin.name)) {
|
|
379
|
-
this.registeredPlugins.push(plugin);
|
|
380
|
-
}
|
|
509
|
+
return moduleRequire.resolve(importPath, { paths: [rootDir] });
|
|
381
510
|
}
|
|
382
511
|
/**
|
|
383
512
|
* Returns transpile defaults for a known transpile profile.
|
|
@@ -387,5 +516,6 @@ class EsbuildBuildAdapter {
|
|
|
387
516
|
}
|
|
388
517
|
}
|
|
389
518
|
export {
|
|
519
|
+
ESBUILD_ADAPTER_BRAND,
|
|
390
520
|
EsbuildBuildAdapter
|
|
391
521
|
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { EcoPagesAppConfig } from '../types/internal-types.js';
|
|
2
|
+
import { type BuildExecutor } from './build-adapter.js';
|
|
3
|
+
/**
|
|
4
|
+
* Installs the app-owned runtime build executor for one app instance.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* This is the single runtime executor boundary for adapter-owned startup.
|
|
8
|
+
* Bun-native ownership may reuse `DevBuildCoordinator` in development, while
|
|
9
|
+
* Vite-host ownership stays on a plain host-owned executor boundary with no
|
|
10
|
+
* Bun-specific coordination policy.
|
|
11
|
+
*/
|
|
12
|
+
export declare function installAppRuntimeBuildExecutor(appConfig: EcoPagesAppConfig, options: {
|
|
13
|
+
development: boolean;
|
|
14
|
+
}): BuildExecutor;
|