@ecopages/core 0.2.0-alpha.9 → 0.2.1
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/CHANGELOG.md +18 -11
- package/README.md +23 -26
- package/package.json +76 -58
- package/src/adapters/README.md +2 -2
- 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 +4 -12
- package/src/adapters/bun/create-app.js +4 -5
- package/src/adapters/bun/hmr-manager.d.ts +4 -4
- package/src/adapters/bun/hmr-manager.js +8 -8
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +2 -2
- package/src/adapters/bun/server-adapter.d.ts +5 -5
- package/src/adapters/bun/server-adapter.js +6 -5
- package/src/adapters/bun/server-lifecycle.d.ts +4 -4
- package/src/adapters/bun/server-lifecycle.js +2 -2
- 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 +1 -5
- package/src/adapters/index.js +1 -7
- package/src/adapters/node/create-app.d.ts +6 -9
- package/src/adapters/node/create-app.js +12 -6
- package/src/adapters/node/node-client-bridge.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.d.ts +2 -2
- package/src/adapters/node/node-hmr-manager.js +3 -3
- package/src/adapters/node/server-adapter.d.ts +4 -4
- package/src/adapters/node/server-adapter.js +13 -12
- package/src/adapters/node/static-content-server.d.ts +1 -1
- package/src/adapters/node/static-content-server.js +1 -1
- package/src/adapters/shared/application-adapter.d.ts +1 -1
- package/src/adapters/shared/define-api-handler.d.ts +1 -1
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +2 -2
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +1 -1
- package/src/adapters/shared/fs-server-response-factory.d.ts +2 -2
- package/src/adapters/shared/fs-server-response-factory.js +1 -1
- package/src/adapters/shared/fs-server-response-matcher.d.ts +1 -1
- package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
- package/src/adapters/shared/hmr-html-response.d.ts +1 -1
- package/src/adapters/shared/render-context.d.ts +2 -1
- package/src/adapters/shared/render-context.js +3 -1
- package/src/adapters/shared/runtime-bootstrap.d.ts +1 -1
- package/src/adapters/shared/runtime-bootstrap.js +1 -1
- package/src/adapters/shared/server-adapter.d.ts +1 -1
- package/src/adapters/shared/server-adapter.js +5 -1
- package/src/adapters/shared/server-route-handler.d.ts +4 -4
- package/src/adapters/shared/server-route-handler.js +3 -3
- package/src/adapters/shared/server-static-builder.d.ts +5 -5
- package/src/adapters/shared/server-static-builder.js +5 -4
- package/src/build/README.md +19 -13
- package/src/build/build-adapter.d.ts +67 -20
- package/src/build/build-adapter.js +420 -19
- package/src/build/dev-build-coordinator.d.ts +10 -12
- package/src/build/dev-build-coordinator.js +8 -15
- package/src/build/esbuild-build-adapter.d.ts +6 -0
- package/src/build/esbuild-build-adapter.js +94 -11
- package/src/build/runtime-build-executor.d.ts +5 -4
- package/src/build/runtime-build-executor.js +5 -3
- package/src/build/runtime-specifier-alias-plugin.js +19 -15
- package/src/build/runtime-specifier-aliases.d.ts +5 -0
- package/src/build/runtime-specifier-aliases.js +95 -0
- package/src/config/README.md +5 -2
- package/src/config/config-builder.d.ts +25 -2
- package/src/config/config-builder.js +44 -7
- package/src/declarations.d.ts +1 -1
- package/src/dev/sc-server.d.ts +1 -1
- package/src/dev/sc-server.js +1 -1
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +83 -0
- package/src/eco/eco.js +19 -48
- package/src/eco/eco.types.d.ts +1 -1
- 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 +1 -1
- package/src/eco/lazy-injector-map.d.ts +1 -1
- package/src/hmr/hmr-strategy.d.ts +16 -13
- package/src/hmr/hmr-strategy.js +22 -7
- 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 +2 -2
- package/src/hmr/strategies/js-hmr-strategy.js +2 -2
- package/src/index.browser.d.ts +2 -2
- package/src/index.browser.js +1 -1
- package/src/index.d.ts +3 -2
- package/src/index.js +15 -4
- package/src/integrations/ghtml/ghtml-renderer.d.ts +6 -1
- package/src/integrations/ghtml/ghtml-renderer.js +29 -28
- package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -2
- package/src/integrations/ghtml/ghtml.plugin.js +2 -2
- package/src/plugins/README.md +1 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
- package/src/plugins/eco-component-meta-plugin.js +26 -20
- package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
- package/src/plugins/foreign-jsx-override-plugin.js +35 -0
- package/src/plugins/integration-plugin.d.ts +99 -33
- package/src/plugins/integration-plugin.js +68 -21
- package/src/plugins/processor.d.ts +2 -2
- package/src/plugins/processor.js +2 -2
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/GRAPH.md +54 -84
- package/src/route-renderer/README.md +14 -20
- package/src/route-renderer/orchestration/component-render-context.d.ts +83 -0
- package/src/route-renderer/orchestration/component-render-context.js +147 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +233 -76
- package/src/route-renderer/orchestration/integration-renderer.js +500 -143
- package/src/route-renderer/orchestration/queued-boundary-runtime.service.d.ts +93 -0
- package/src/route-renderer/orchestration/queued-boundary-runtime.service.js +155 -0
- package/src/route-renderer/orchestration/render-execution.service.d.ts +11 -71
- package/src/route-renderer/orchestration/render-execution.service.js +65 -80
- package/src/{eco/eco.utils.ts → route-renderer/orchestration/render-output.utils.d.ts} +10 -53
- package/src/route-renderer/orchestration/render-output.utils.js +65 -0
- package/src/route-renderer/orchestration/render-preparation.service.d.ts +2 -8
- package/src/route-renderer/orchestration/render-preparation.service.js +10 -17
- 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/dependency-resolver.d.ts +2 -2
- package/src/route-renderer/page-loading/dependency-resolver.js +10 -8
- package/src/route-renderer/page-loading/page-module-loader.d.ts +6 -4
- package/src/route-renderer/page-loading/page-module-loader.js +7 -5
- package/src/route-renderer/route-renderer.d.ts +5 -3
- package/src/route-renderer/route-renderer.js +13 -3
- package/src/router/README.md +79 -8
- package/src/router/client/navigation-coordinator.js +2 -2
- package/src/router/server/fs-router-scanner.d.ts +1 -1
- package/src/router/server/fs-router-scanner.js +6 -1
- package/src/router/server/fs-router.d.ts +1 -1
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -3
- package/src/services/assets/asset-processing-service/asset-processing.service.js +6 -6
- package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
- package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
- package/src/services/assets/asset-processing-service/index.d.ts +5 -5
- package/src/services/assets/asset-processing-service/index.js +5 -5
- package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +1 -1
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +3 -3
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +2 -2
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
- package/src/services/assets/asset-processing-service/processors/index.js +5 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +1 -1
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +15 -3
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +3 -3
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +1 -1
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +1 -1
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +1 -1
- package/src/services/assets/browser-bundle.service.d.ts +1 -1
- package/src/services/assets/browser-bundle.service.js +2 -2
- package/src/services/html/html-rewriter-provider.service.js +4 -1
- package/src/services/html/html-transformer.service.d.ts +2 -2
- package/src/services/html/html-transformer.service.js +4 -10
- package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
- package/src/services/invalidation/development-invalidation.service.js +1 -0
- package/src/services/module-loading/app-module-loader.service.d.ts +25 -0
- package/src/services/module-loading/app-module-loader.service.js +31 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
- package/src/services/module-loading/app-server-module-transpiler.service.js +77 -2
- 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/{adapters/node/bootstrap-dependency-resolver.d.ts → services/module-loading/node-bootstrap-plugin.d.ts} +2 -24
- package/src/{adapters/node/bootstrap-dependency-resolver.js → services/module-loading/node-bootstrap-plugin.js} +42 -22
- package/src/services/module-loading/page-module-import.service.d.ts +4 -0
- package/src/services/module-loading/page-module-import.service.js +38 -9
- package/src/services/module-loading/server-module-transpiler.service.d.ts +3 -0
- package/src/services/module-loading/server-module-transpiler.service.js +4 -1
- package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
- package/src/services/runtime-state/dev-graph.service.js +10 -10
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
- package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +1 -1
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
- package/src/static-site-generator/static-site-generator.d.ts +2 -2
- package/src/static-site-generator/static-site-generator.js +1 -1
- package/src/{internal-types.d.ts → types/internal-types.d.ts} +24 -14
- package/src/{public-types.d.ts → types/public-types.d.ts} +30 -14
- 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.js +1 -1
- package/src/watchers/project-watcher.d.ts +4 -4
- package/src/watchers/project-watcher.js +4 -10
- package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
- 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/hmr-manager.ts +0 -409
- package/src/adapters/bun/index.ts +0 -2
- package/src/adapters/bun/server-adapter.ts +0 -499
- package/src/adapters/bun/server-lifecycle.ts +0 -124
- package/src/adapters/index.ts +0 -6
- package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
- package/src/adapters/node/create-app.ts +0 -179
- package/src/adapters/node/index.d.ts +0 -6
- package/src/adapters/node/index.js +0 -11
- package/src/adapters/node/index.ts +0 -16
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.ts +0 -381
- package/src/adapters/node/runtime-adapter.d.ts +0 -46
- package/src/adapters/node/runtime-adapter.js +0 -306
- package/src/adapters/node/runtime-adapter.ts +0 -439
- package/src/adapters/node/server-adapter.ts +0 -488
- package/src/adapters/node/static-content-server.ts +0 -239
- package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
- package/src/adapters/node/write-runtime-manifest.js +0 -12
- package/src/adapters/node/write-runtime-manifest.ts +0 -38
- package/src/adapters/shared/api-response.ts +0 -104
- package/src/adapters/shared/application-adapter.ts +0 -199
- package/src/adapters/shared/define-api-handler.ts +0 -66
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
- package/src/adapters/shared/fs-server-response-factory.ts +0 -118
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
- package/src/adapters/shared/hmr-html-response.ts +0 -52
- package/src/adapters/shared/render-context.ts +0 -120
- package/src/adapters/shared/runtime-bootstrap.ts +0 -79
- package/src/adapters/shared/server-adapter.ts +0 -489
- package/src/adapters/shared/server-route-handler.ts +0 -153
- package/src/adapters/shared/server-static-builder.ts +0 -166
- package/src/build/build-adapter.ts +0 -361
- package/src/build/build-manifest.ts +0 -54
- package/src/build/build-types.ts +0 -83
- package/src/build/dev-build-coordinator.ts +0 -221
- package/src/build/esbuild-build-adapter.ts +0 -559
- package/src/build/runtime-build-executor.ts +0 -34
- package/src/build/runtime-specifier-alias-plugin.ts +0 -58
- package/src/config/config-builder.ts +0 -706
- package/src/constants.ts +0 -54
- package/src/create-app.ts +0 -87
- 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 -87
- package/src/eco/component-render-context.ts +0 -224
- package/src/eco/eco.ts +0 -242
- package/src/eco/eco.types.ts +0 -221
- 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 -152
- package/src/hmr/hmr-strategy.ts +0 -172
- package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
- package/src/hmr/hmr.test.e2e.ts +0 -66
- package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
- package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
- package/src/index.browser.ts +0 -3
- package/src/index.ts +0 -5
- package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
- package/src/internal-types.ts +0 -232
- package/src/plugins/alias-resolver-plugin.ts +0 -63
- package/src/plugins/eco-component-meta-plugin.ts +0 -481
- package/src/plugins/integration-plugin.ts +0 -226
- package/src/plugins/processor.ts +0 -240
- package/src/plugins/runtime-capability.ts +0 -14
- package/src/public-types.ts +0 -1317
- package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
- package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
- package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
- package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
- package/src/route-renderer/component-graph/component-graph.js +0 -72
- package/src/route-renderer/component-graph/component-graph.ts +0 -159
- package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
- package/src/route-renderer/component-graph/component-marker.js +0 -46
- package/src/route-renderer/component-graph/component-marker.ts +0 -117
- package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
- package/src/route-renderer/component-graph/component-reference.js +0 -19
- package/src/route-renderer/component-graph/component-reference.ts +0 -29
- package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
- package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
- package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
- package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
- package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
- package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
- package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
- package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
- package/src/route-renderer/route-renderer.ts +0 -115
- package/src/router/client/link-intent.test.browser.ts +0 -51
- package/src/router/client/link-intent.ts +0 -92
- package/src/router/client/navigation-coordinator.ts +0 -433
- package/src/router/server/fs-router-scanner.ts +0 -219
- package/src/router/server/fs-router.ts +0 -122
- package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
- package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
- package/src/services/assets/asset-processing-service/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
- package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
- package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
- package/src/services/assets/browser-bundle.service.ts +0 -53
- 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/cache/page-request-cache-coordinator.service.ts +0 -131
- package/src/services/html/html-rewriter-provider.service.ts +0 -103
- package/src/services/html/html-transformer.service.ts +0 -279
- package/src/services/invalidation/development-invalidation.service.ts +0 -261
- package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
- package/src/services/module-loading/page-module-import.service.ts +0 -200
- package/src/services/module-loading/server-loader.service.d.ts +0 -96
- package/src/services/module-loading/server-loader.service.js +0 -32
- package/src/services/module-loading/server-loader.service.ts +0 -130
- package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
- package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
- package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
- package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
- package/src/services/runtime-state/dev-graph.service.ts +0 -217
- package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
- package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
- package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
- package/src/services/validation/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 -462
- 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/resolve-work-dir.ts +0 -45
- 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 -41
- package/src/watchers/project-watcher.ts +0 -363
- /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
- /package/src/{constants.js → config/constants.js} +0 -0
- /package/src/{internal-types.js → services/module-loading/module-loading-types.js} +0 -0
- /package/src/{public-types.js → types/internal-types.js} +0 -0
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
getServerBuildPlugins
|
|
5
5
|
} from "./build-manifest.js";
|
|
6
6
|
import { EsbuildBuildAdapter } from "./esbuild-build-adapter.js";
|
|
7
|
-
import {
|
|
7
|
+
import { collectRuntimeSpecifierAliasMap, rewriteRuntimeSpecifierAliases } from "./runtime-specifier-aliases.js";
|
|
8
|
+
import { getBunRuntime } from "../utils/runtime.js";
|
|
9
|
+
import fs from "node:fs";
|
|
10
|
+
import path from "node:path";
|
|
8
11
|
import { EsbuildBuildAdapter as EsbuildBuildAdapter2 } from "./esbuild-build-adapter.js";
|
|
9
|
-
function createBuildAdapter() {
|
|
10
|
-
return new EsbuildBuildAdapter();
|
|
11
|
-
}
|
|
12
12
|
function transpileProfileToOptions(profile) {
|
|
13
13
|
switch (profile) {
|
|
14
14
|
case "browser-script":
|
|
@@ -32,32 +32,419 @@ function transpileProfileToOptions(profile) {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
class BunBuildAdapter {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
ownership = "bun-native";
|
|
36
|
+
fallbackAdapter = new EsbuildBuildAdapter();
|
|
37
|
+
getPluginsForBuild(additionalPlugins) {
|
|
38
|
+
const byName = /* @__PURE__ */ new Map();
|
|
39
|
+
for (const plugin of additionalPlugins ?? []) {
|
|
40
|
+
if (!byName.has(plugin.name)) {
|
|
41
|
+
byName.set(plugin.name, plugin);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return Array.from(byName.values());
|
|
45
|
+
}
|
|
46
|
+
escapeRegExp(value) {
|
|
47
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
48
|
+
}
|
|
49
|
+
resolvePluginPath(value, importer, contextRoot) {
|
|
50
|
+
if (path.isAbsolute(value)) {
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
if (value.startsWith(".") || value.startsWith("..")) {
|
|
54
|
+
const baseDir = importer ? path.dirname(importer) : contextRoot;
|
|
55
|
+
return path.resolve(baseDir, value);
|
|
56
|
+
}
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
inferLoaderFromPath(filePath) {
|
|
60
|
+
const extension = path.extname(filePath).toLowerCase();
|
|
61
|
+
switch (extension) {
|
|
62
|
+
case ".ts":
|
|
63
|
+
return "ts";
|
|
64
|
+
case ".tsx":
|
|
65
|
+
return "tsx";
|
|
66
|
+
case ".jsx":
|
|
67
|
+
return "jsx";
|
|
68
|
+
case ".json":
|
|
69
|
+
return "json";
|
|
70
|
+
case ".css":
|
|
71
|
+
return "css";
|
|
72
|
+
default:
|
|
73
|
+
return "js";
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
normalizeBunLoader(loader) {
|
|
77
|
+
switch (loader) {
|
|
78
|
+
case "js":
|
|
79
|
+
case "jsx":
|
|
80
|
+
case "ts":
|
|
81
|
+
case "tsx":
|
|
82
|
+
case "json":
|
|
83
|
+
case "toml":
|
|
84
|
+
case "text":
|
|
85
|
+
case "file":
|
|
86
|
+
case "css":
|
|
87
|
+
return loader;
|
|
88
|
+
case "global-css":
|
|
89
|
+
case "local-css":
|
|
90
|
+
return "css";
|
|
91
|
+
default:
|
|
92
|
+
return void 0;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
convertLoadResultToModuleSource(result) {
|
|
96
|
+
if (!result || typeof result !== "object") {
|
|
97
|
+
return void 0;
|
|
98
|
+
}
|
|
99
|
+
const candidate = result;
|
|
100
|
+
if (typeof candidate.contents === "string") {
|
|
101
|
+
return candidate.contents;
|
|
102
|
+
}
|
|
103
|
+
if (candidate.loader === "object" && candidate.exports && typeof candidate.exports === "object") {
|
|
104
|
+
return Object.entries(candidate.exports).map(
|
|
105
|
+
([key, value]) => key === "default" ? `export default ${JSON.stringify(value)};` : `export const ${key} = ${JSON.stringify(value)};`
|
|
106
|
+
).join("\n");
|
|
107
|
+
}
|
|
108
|
+
return void 0;
|
|
109
|
+
}
|
|
110
|
+
convertPluginOnLoadResult(args, result) {
|
|
111
|
+
if (!result || typeof result !== "object") {
|
|
112
|
+
return void 0;
|
|
113
|
+
}
|
|
114
|
+
const candidate = result;
|
|
115
|
+
const sourceFromExports = candidate.loader === "object" && candidate.exports && typeof candidate.exports === "object" ? this.convertLoadResultToModuleSource(candidate) : void 0;
|
|
116
|
+
if (sourceFromExports) {
|
|
117
|
+
return {
|
|
118
|
+
contents: sourceFromExports,
|
|
119
|
+
loader: "js",
|
|
120
|
+
...typeof candidate.resolveDir === "string" ? { resolveDir: candidate.resolveDir } : {}
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
if (typeof candidate.contents === "string" || candidate.contents instanceof Uint8Array) {
|
|
124
|
+
return {
|
|
125
|
+
contents: candidate.contents,
|
|
126
|
+
loader: this.normalizeBunLoader(candidate.loader) ?? this.inferLoaderFromPath(args.path),
|
|
127
|
+
...typeof candidate.resolveDir === "string" ? { resolveDir: candidate.resolveDir } : {}
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
return void 0;
|
|
131
|
+
}
|
|
132
|
+
createEcoPluginBridge(plugins, contextRoot) {
|
|
133
|
+
return {
|
|
134
|
+
name: "ecopages-plugin-bridge",
|
|
135
|
+
setup: async (build2) => {
|
|
136
|
+
let moduleCounter = 0;
|
|
137
|
+
const bridge = {
|
|
138
|
+
onResolve: (options, callback) => {
|
|
139
|
+
build2.onResolve(options, async (args) => {
|
|
140
|
+
const result = await callback({
|
|
141
|
+
path: args.path,
|
|
142
|
+
importer: args.importer,
|
|
143
|
+
namespace: args.namespace
|
|
144
|
+
});
|
|
145
|
+
if (!result || typeof result !== "object") {
|
|
146
|
+
return void 0;
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
...typeof result.path === "string" ? { path: this.resolvePluginPath(result.path, args.importer, contextRoot) } : {},
|
|
150
|
+
...typeof result.namespace === "string" ? { namespace: result.namespace } : {},
|
|
151
|
+
...typeof result.external === "boolean" ? { external: result.external } : {}
|
|
152
|
+
};
|
|
153
|
+
});
|
|
154
|
+
},
|
|
155
|
+
onLoad: (options, callback) => {
|
|
156
|
+
build2.onLoad(
|
|
157
|
+
options,
|
|
158
|
+
async (args) => this.convertPluginOnLoadResult(
|
|
159
|
+
{ path: args.path },
|
|
160
|
+
await callback({
|
|
161
|
+
path: args.path,
|
|
162
|
+
namespace: args.namespace
|
|
163
|
+
})
|
|
164
|
+
)
|
|
165
|
+
);
|
|
166
|
+
},
|
|
167
|
+
module: (specifier, callback) => {
|
|
168
|
+
const namespace = `ecopages-module-${moduleCounter}`;
|
|
169
|
+
moduleCounter += 1;
|
|
170
|
+
const filter = new RegExp(`^${this.escapeRegExp(specifier)}$`);
|
|
171
|
+
build2.onResolve({ filter }, async () => ({
|
|
172
|
+
path: specifier,
|
|
173
|
+
namespace
|
|
174
|
+
}));
|
|
175
|
+
build2.onLoad(
|
|
176
|
+
{ filter, namespace },
|
|
177
|
+
async () => this.convertPluginOnLoadResult({ path: specifier }, await callback())
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
for (const plugin of plugins) {
|
|
182
|
+
await plugin.setup(bridge);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
toBuildLogs(error) {
|
|
188
|
+
if (error instanceof Error) {
|
|
189
|
+
return [{ message: error.message }];
|
|
190
|
+
}
|
|
191
|
+
return [{ message: "Unknown Bun build error" }];
|
|
192
|
+
}
|
|
193
|
+
mapBunTarget(value) {
|
|
194
|
+
return value === "browser" ? "browser" : "bun";
|
|
195
|
+
}
|
|
196
|
+
mapBunFormat(value) {
|
|
197
|
+
switch (value) {
|
|
198
|
+
case "cjs":
|
|
199
|
+
return "cjs";
|
|
200
|
+
case "esm":
|
|
201
|
+
default:
|
|
202
|
+
return "esm";
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
getOutputExtension(options, entrypointPath) {
|
|
206
|
+
const entryExtension = path.extname(entrypointPath).toLowerCase();
|
|
207
|
+
if (entryExtension === ".css") {
|
|
208
|
+
return ".css";
|
|
209
|
+
}
|
|
210
|
+
if (entryExtension === ".json") {
|
|
211
|
+
return ".json";
|
|
212
|
+
}
|
|
213
|
+
if (entryExtension === ".toml") {
|
|
214
|
+
return ".toml";
|
|
215
|
+
}
|
|
216
|
+
return options.format === "cjs" || options.format === "esm" ? ".js" : ".js";
|
|
217
|
+
}
|
|
218
|
+
resolveConcreteOutputPath(outputPath) {
|
|
219
|
+
if (fs.existsSync(outputPath)) {
|
|
220
|
+
return outputPath;
|
|
221
|
+
}
|
|
222
|
+
if (!outputPath.includes("[hash]")) {
|
|
223
|
+
return outputPath;
|
|
224
|
+
}
|
|
225
|
+
const directory = path.dirname(outputPath);
|
|
226
|
+
if (!fs.existsSync(directory)) {
|
|
227
|
+
return void 0;
|
|
228
|
+
}
|
|
229
|
+
const basenamePattern = path.basename(outputPath);
|
|
230
|
+
const matcher = new RegExp(`^${this.escapeRegExp(basenamePattern).replace(/\\\[hash\\\]/g, "(.+)")}$`);
|
|
231
|
+
const matches = fs.readdirSync(directory).filter((candidate) => matcher.test(candidate)).sort();
|
|
232
|
+
if (matches.length === 0) {
|
|
233
|
+
return void 0;
|
|
234
|
+
}
|
|
235
|
+
return path.join(directory, matches[0]);
|
|
236
|
+
}
|
|
237
|
+
resolveTemplatedOutputPath(options, entrypointPath, concreteOutputPath) {
|
|
238
|
+
if (!options.outdir) {
|
|
239
|
+
return void 0;
|
|
240
|
+
}
|
|
241
|
+
const template = typeof options.naming === "string" ? options.naming : "[dir]/[name]";
|
|
242
|
+
const outdir = path.resolve(options.outdir);
|
|
243
|
+
const outputExtension = this.getOutputExtension(options, entrypointPath);
|
|
244
|
+
const relativeBase = path.resolve(options.outbase ?? options.root ?? process.cwd());
|
|
245
|
+
const relativeEntrypoint = path.relative(relativeBase, entrypointPath);
|
|
246
|
+
const relativeDir = path.dirname(relativeEntrypoint);
|
|
247
|
+
const dirToken = relativeDir === "." ? "" : relativeDir.split(path.sep).join("/");
|
|
248
|
+
const nameToken = path.basename(relativeEntrypoint, path.extname(relativeEntrypoint));
|
|
249
|
+
const extToken = outputExtension.replace(/^\./, "");
|
|
250
|
+
let resolvedPath = template.replaceAll("[dir]", dirToken).replaceAll("[name]", nameToken).replaceAll("[ext]", extToken);
|
|
251
|
+
if (outputExtension && !resolvedPath.endsWith(outputExtension)) {
|
|
252
|
+
resolvedPath += outputExtension;
|
|
253
|
+
}
|
|
254
|
+
resolvedPath = resolvedPath.replace(/^\.\//, "");
|
|
255
|
+
if (resolvedPath.includes("[hash]")) {
|
|
256
|
+
if (!concreteOutputPath) {
|
|
257
|
+
return path.join(outdir, resolvedPath);
|
|
258
|
+
}
|
|
259
|
+
const concreteRelativePath = path.relative(outdir, concreteOutputPath).split(path.sep).join("/");
|
|
260
|
+
const matcher = new RegExp(`^${this.escapeRegExp(resolvedPath).replace(/\\\[hash\\\]/g, "(.+)")}$`);
|
|
261
|
+
const match = concreteRelativePath.match(matcher);
|
|
262
|
+
if (!match?.[1]) {
|
|
263
|
+
return concreteOutputPath;
|
|
264
|
+
}
|
|
265
|
+
resolvedPath = resolvedPath.replaceAll("[hash]", match[1]);
|
|
266
|
+
}
|
|
267
|
+
return path.join(outdir, resolvedPath);
|
|
268
|
+
}
|
|
269
|
+
relocateOutputFile(currentPath, targetPath) {
|
|
270
|
+
if (currentPath === targetPath || !fs.existsSync(currentPath)) {
|
|
271
|
+
return fs.existsSync(targetPath) ? targetPath : currentPath;
|
|
272
|
+
}
|
|
273
|
+
fs.mkdirSync(path.dirname(targetPath), { recursive: true });
|
|
274
|
+
fs.rmSync(targetPath, { force: true });
|
|
275
|
+
fs.renameSync(currentPath, targetPath);
|
|
276
|
+
return targetPath;
|
|
277
|
+
}
|
|
278
|
+
normalizeBunOutputs(result, options) {
|
|
279
|
+
if (!result.success || result.outputs.length === 0) {
|
|
280
|
+
return result;
|
|
281
|
+
}
|
|
282
|
+
const normalizedOutputs = [...result.outputs];
|
|
283
|
+
const canMapEntrypointsByIndex = options.entrypoints.length === normalizedOutputs.length;
|
|
284
|
+
if (canMapEntrypointsByIndex) {
|
|
285
|
+
for (const [index, entrypointPath] of options.entrypoints.entries()) {
|
|
286
|
+
const concreteOutputPath = this.resolveConcreteOutputPath(normalizedOutputs[index].path);
|
|
287
|
+
const expectedOutputPath = this.resolveTemplatedOutputPath(options, entrypointPath, concreteOutputPath);
|
|
288
|
+
if (!expectedOutputPath) {
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
normalizedOutputs[index] = {
|
|
292
|
+
path: this.relocateOutputFile(
|
|
293
|
+
concreteOutputPath ?? normalizedOutputs[index].path,
|
|
294
|
+
expectedOutputPath
|
|
295
|
+
)
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
return {
|
|
299
|
+
...result,
|
|
300
|
+
outputs: normalizedOutputs
|
|
301
|
+
};
|
|
302
|
+
}
|
|
41
303
|
return {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
304
|
+
...result,
|
|
305
|
+
outputs: normalizedOutputs.map((output) => {
|
|
306
|
+
const concreteOutputPath = this.resolveConcreteOutputPath(output.path) ?? output.path;
|
|
307
|
+
if (path.extname(concreteOutputPath) !== "") {
|
|
308
|
+
return output;
|
|
309
|
+
}
|
|
310
|
+
const normalizedPath = `${concreteOutputPath}.js`;
|
|
311
|
+
return {
|
|
312
|
+
path: this.relocateOutputFile(concreteOutputPath, normalizedPath)
|
|
313
|
+
};
|
|
314
|
+
})
|
|
45
315
|
};
|
|
46
316
|
}
|
|
317
|
+
rewriteAliasedRuntimeSpecifiers(result, plugins) {
|
|
318
|
+
if (!result.success || result.outputs.length === 0) {
|
|
319
|
+
return result;
|
|
320
|
+
}
|
|
321
|
+
const aliasMap = collectRuntimeSpecifierAliasMap(plugins);
|
|
322
|
+
if (aliasMap.size === 0) {
|
|
323
|
+
return result;
|
|
324
|
+
}
|
|
325
|
+
for (const output of result.outputs) {
|
|
326
|
+
if (!/\.(?:[cm]?js)$/u.test(output.path) || !fs.existsSync(output.path)) {
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
const code = fs.readFileSync(output.path, "utf-8");
|
|
330
|
+
const rewritten = rewriteRuntimeSpecifierAliases(code, aliasMap);
|
|
331
|
+
if (rewritten !== code) {
|
|
332
|
+
fs.writeFileSync(output.path, rewritten);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return result;
|
|
336
|
+
}
|
|
337
|
+
async build(options) {
|
|
338
|
+
const bun = getBunRuntime();
|
|
339
|
+
if (!bun) {
|
|
340
|
+
return this.fallbackAdapter.build(options);
|
|
341
|
+
}
|
|
342
|
+
try {
|
|
343
|
+
const contextRoot = options.root ? path.resolve(options.root) : process.cwd();
|
|
344
|
+
const outdir = path.resolve(options.outdir ?? "dist/assets");
|
|
345
|
+
const plugins = this.getPluginsForBuild(options.plugins);
|
|
346
|
+
const result = await bun.build({
|
|
347
|
+
entrypoints: options.entrypoints,
|
|
348
|
+
outdir,
|
|
349
|
+
root: contextRoot,
|
|
350
|
+
naming: typeof options.naming === "string" ? options.naming : void 0,
|
|
351
|
+
define: options.define,
|
|
352
|
+
external: options.external,
|
|
353
|
+
format: this.mapBunFormat(options.format),
|
|
354
|
+
target: this.mapBunTarget(options.target),
|
|
355
|
+
sourcemap: options.sourcemap,
|
|
356
|
+
splitting: !!options.splitting,
|
|
357
|
+
minify: !!options.minify,
|
|
358
|
+
packages: options.target !== "browser" && options.externalPackages !== false ? "external" : void 0,
|
|
359
|
+
plugins: plugins.length > 0 ? [this.createEcoPluginBridge(plugins, contextRoot)] : void 0
|
|
360
|
+
});
|
|
361
|
+
return this.rewriteAliasedRuntimeSpecifiers(
|
|
362
|
+
this.normalizeBunOutputs(
|
|
363
|
+
{
|
|
364
|
+
success: result.success,
|
|
365
|
+
logs: result.logs.map((log) => ({ message: log.message })),
|
|
366
|
+
outputs: result.outputs.map((output) => ({ path: output.path }))
|
|
367
|
+
},
|
|
368
|
+
options
|
|
369
|
+
),
|
|
370
|
+
plugins
|
|
371
|
+
);
|
|
372
|
+
} catch (error) {
|
|
373
|
+
return {
|
|
374
|
+
success: false,
|
|
375
|
+
logs: this.toBuildLogs(error),
|
|
376
|
+
outputs: []
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
}
|
|
47
380
|
resolve(importPath, rootDir) {
|
|
48
|
-
|
|
381
|
+
const bun = getBunRuntime();
|
|
382
|
+
if (!bun) {
|
|
383
|
+
return this.fallbackAdapter.resolve(importPath, rootDir);
|
|
384
|
+
}
|
|
385
|
+
return bun.resolveSync(importPath, rootDir);
|
|
49
386
|
}
|
|
50
387
|
getTranspileOptions(profile) {
|
|
51
388
|
return transpileProfileToOptions(profile);
|
|
52
389
|
}
|
|
53
390
|
}
|
|
54
|
-
|
|
391
|
+
function createHostOwnedBuildError(methodName) {
|
|
392
|
+
return new Error(
|
|
393
|
+
`Vite-hosted builds are owned by the host runtime. Core cannot ${methodName} through the host-owned compatibility adapter.`
|
|
394
|
+
);
|
|
395
|
+
}
|
|
396
|
+
class ViteHostBuildAdapter {
|
|
397
|
+
ownership = "vite-host";
|
|
398
|
+
async build(_options) {
|
|
399
|
+
throw createHostOwnedBuildError("build");
|
|
400
|
+
}
|
|
401
|
+
resolve(_importPath, _rootDir) {
|
|
402
|
+
throw createHostOwnedBuildError("resolve imports");
|
|
403
|
+
}
|
|
404
|
+
getTranspileOptions(_profile) {
|
|
405
|
+
throw createHostOwnedBuildError("derive transpile options");
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
function createBunBuildAdapter() {
|
|
409
|
+
return new BunBuildAdapter();
|
|
410
|
+
}
|
|
411
|
+
function createViteHostBuildAdapter() {
|
|
412
|
+
return new ViteHostBuildAdapter();
|
|
413
|
+
}
|
|
414
|
+
function createBuildAdapter(options) {
|
|
415
|
+
switch (options?.ownership ?? "bun-native") {
|
|
416
|
+
case "vite-host":
|
|
417
|
+
return createViteHostBuildAdapter();
|
|
418
|
+
case "bun-native":
|
|
419
|
+
default:
|
|
420
|
+
return createBunBuildAdapter();
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
const defaultBunBuildAdapter = createBuildAdapter({ ownership: "bun-native" });
|
|
424
|
+
const defaultViteHostBuildAdapter = createBuildAdapter({ ownership: "vite-host" });
|
|
425
|
+
const defaultBuildAdapter = defaultBunBuildAdapter;
|
|
426
|
+
function getDefaultBuildAdapter(ownership = "bun-native") {
|
|
427
|
+
return ownership === "vite-host" ? defaultViteHostBuildAdapter : defaultBunBuildAdapter;
|
|
428
|
+
}
|
|
429
|
+
function getBuildAdapterOwnership(buildAdapter) {
|
|
430
|
+
return buildAdapter?.ownership ?? "bun-native";
|
|
431
|
+
}
|
|
432
|
+
function getAppBuildOwnership(appConfig) {
|
|
433
|
+
return appConfig.runtime?.buildOwnership ?? getBuildAdapterOwnership(appConfig.runtime?.buildAdapter);
|
|
434
|
+
}
|
|
435
|
+
function setAppBuildOwnership(appConfig, buildOwnership) {
|
|
436
|
+
appConfig.runtime = {
|
|
437
|
+
...appConfig.runtime ?? {},
|
|
438
|
+
buildOwnership
|
|
439
|
+
};
|
|
440
|
+
}
|
|
55
441
|
function getAppBuildAdapter(appConfig) {
|
|
56
|
-
return appConfig.runtime?.buildAdapter ??
|
|
442
|
+
return appConfig.runtime?.buildAdapter ?? getDefaultBuildAdapter(getAppBuildOwnership(appConfig));
|
|
57
443
|
}
|
|
58
444
|
function setAppBuildAdapter(appConfig, buildAdapter) {
|
|
59
445
|
appConfig.runtime = {
|
|
60
446
|
...appConfig.runtime ?? {},
|
|
447
|
+
buildOwnership: getBuildAdapterOwnership(buildAdapter),
|
|
61
448
|
buildAdapter
|
|
62
449
|
};
|
|
63
450
|
}
|
|
@@ -97,7 +484,8 @@ async function collectConfiguredAppBuildManifestContributions(appConfig) {
|
|
|
97
484
|
for (const integration of appConfig.integrations) {
|
|
98
485
|
integration.setConfig(appConfig);
|
|
99
486
|
await integration.prepareBuildContributions();
|
|
100
|
-
runtimePlugins.push(...integration.plugins);
|
|
487
|
+
runtimePlugins.push(...integration.plugins ?? []);
|
|
488
|
+
browserBundlePlugins.push(...integration.browserBuildPlugins ?? []);
|
|
101
489
|
}
|
|
102
490
|
return {
|
|
103
491
|
runtimePlugins,
|
|
@@ -140,29 +528,42 @@ function setAppBuildExecutor(appConfig, buildExecutor) {
|
|
|
140
528
|
buildExecutor
|
|
141
529
|
};
|
|
142
530
|
}
|
|
143
|
-
function build(options, executor =
|
|
531
|
+
function build(options, executor = defaultBunBuildAdapter) {
|
|
144
532
|
return executor.build(options);
|
|
145
533
|
}
|
|
146
534
|
function getTranspileOptions(profile) {
|
|
147
|
-
return
|
|
535
|
+
return defaultBunBuildAdapter.getTranspileOptions(profile);
|
|
536
|
+
}
|
|
537
|
+
function getAppTranspileOptions(appConfig, profile) {
|
|
538
|
+
return getAppBuildAdapter(appConfig).getTranspileOptions(profile);
|
|
148
539
|
}
|
|
149
540
|
export {
|
|
150
541
|
BunBuildAdapter,
|
|
151
542
|
EsbuildBuildAdapter2 as EsbuildBuildAdapter,
|
|
543
|
+
ViteHostBuildAdapter,
|
|
152
544
|
build,
|
|
153
545
|
collectConfiguredAppBuildManifestContributions,
|
|
154
546
|
createBuildAdapter,
|
|
547
|
+
createBunBuildAdapter,
|
|
155
548
|
createConfiguredAppBuildManifest,
|
|
549
|
+
createViteHostBuildAdapter,
|
|
156
550
|
defaultBuildAdapter,
|
|
551
|
+
defaultBunBuildAdapter,
|
|
552
|
+
defaultViteHostBuildAdapter,
|
|
157
553
|
getAppBrowserBuildPlugins,
|
|
158
554
|
getAppBuildAdapter,
|
|
159
555
|
getAppBuildExecutor,
|
|
160
556
|
getAppBuildManifest,
|
|
557
|
+
getAppBuildOwnership,
|
|
161
558
|
getAppServerBuildPlugins,
|
|
559
|
+
getAppTranspileOptions,
|
|
560
|
+
getBuildAdapterOwnership,
|
|
561
|
+
getDefaultBuildAdapter,
|
|
162
562
|
getTranspileOptions,
|
|
163
563
|
setAppBuildAdapter,
|
|
164
564
|
setAppBuildExecutor,
|
|
165
565
|
setAppBuildManifest,
|
|
566
|
+
setAppBuildOwnership,
|
|
166
567
|
setupAppRuntimePlugins,
|
|
167
568
|
updateAppBuildManifest
|
|
168
569
|
};
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { type BuildAdapter, type BuildExecutor, type BuildOptions, type BuildResult
|
|
1
|
+
import { type BuildAdapter, type BuildExecutor, type BuildOptions, type BuildResult } from './build-adapter.js';
|
|
2
|
+
import { EsbuildBuildAdapter } from './esbuild-build-adapter.js';
|
|
2
3
|
import type { EcoBuildPlugin } from './build-types.js';
|
|
3
4
|
export declare function withBuildExecutorPlugins(executor: BuildExecutor, getPlugins: () => EcoBuildPlugin[]): BuildExecutor;
|
|
4
5
|
/**
|
|
5
|
-
* Serialized
|
|
6
|
+
* Serialized build coordinator for the shared esbuild adapter.
|
|
6
7
|
*
|
|
7
8
|
* The underlying adapter remains responsible for plain build execution. This
|
|
8
|
-
* coordinator owns the policy that must be shared across callers
|
|
9
|
+
* coordinator owns the policy that must be shared across callers while Bun-native
|
|
10
|
+
* execution still uses the shared esbuild compatibility backend:
|
|
9
11
|
*
|
|
10
12
|
* - serialized access to the shared esbuild service
|
|
11
|
-
* - warm-service recycling for Node-target builds
|
|
12
13
|
* - recovery from known esbuild worker protocol faults
|
|
13
14
|
*
|
|
14
15
|
* Unlike the previous design, the coordinator does not monkey-patch the adapter
|
|
15
16
|
* or install process-level fault handlers. The owning app/runtime passes this
|
|
16
|
-
* executor explicitly to build consumers that need coordinated
|
|
17
|
-
* builds.
|
|
17
|
+
* executor explicitly to build consumers that need coordinated builds.
|
|
18
18
|
*/
|
|
19
19
|
export declare class DevBuildCoordinator implements BuildExecutor {
|
|
20
20
|
private buildQueue;
|
|
@@ -25,9 +25,6 @@ export declare class DevBuildCoordinator implements BuildExecutor {
|
|
|
25
25
|
/**
|
|
26
26
|
* Executes a build through the serialized development queue.
|
|
27
27
|
*
|
|
28
|
-
* Node-target builds recycle the warmed esbuild service between requests to
|
|
29
|
-
* avoid stale worker state accumulating across long-lived dev sessions.
|
|
30
|
-
*
|
|
31
28
|
* If an esbuild protocol fault is detected, the coordinator resets the queue,
|
|
32
29
|
* stops the corrupted service, increments the module generation, and retries
|
|
33
30
|
* the build once.
|
|
@@ -52,14 +49,15 @@ export declare class DevBuildCoordinator implements BuildExecutor {
|
|
|
52
49
|
* Returns the current internal queue promise for fault-recovery tests.
|
|
53
50
|
*/
|
|
54
51
|
getBuildQueueForTests(): Promise<void>;
|
|
55
|
-
private shouldRecycleEsbuildService;
|
|
56
52
|
private runSerialized;
|
|
57
53
|
}
|
|
58
54
|
/**
|
|
59
55
|
* Creates the appropriate build executor for one app/runtime instance.
|
|
60
56
|
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
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.
|
|
63
61
|
*/
|
|
64
62
|
export declare function createAppBuildExecutor(options: {
|
|
65
63
|
development: boolean;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { appLogger } from "../global/app-logger.js";
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
EsbuildBuildAdapter
|
|
3
|
+
defaultBunBuildAdapter
|
|
5
4
|
} from "./build-adapter.js";
|
|
5
|
+
import { EsbuildBuildAdapter, ESBUILD_ADAPTER_BRAND } from "./esbuild-build-adapter.js";
|
|
6
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
|
+
}
|
|
7
10
|
function mergeBuildPlugins(options, appPlugins) {
|
|
8
11
|
if (appPlugins.length === 0) {
|
|
9
12
|
return options;
|
|
@@ -47,9 +50,6 @@ class DevBuildCoordinator {
|
|
|
47
50
|
/**
|
|
48
51
|
* Executes a build through the serialized development queue.
|
|
49
52
|
*
|
|
50
|
-
* Node-target builds recycle the warmed esbuild service between requests to
|
|
51
|
-
* avoid stale worker state accumulating across long-lived dev sessions.
|
|
52
|
-
*
|
|
53
53
|
* If an esbuild protocol fault is detected, the coordinator resets the queue,
|
|
54
54
|
* stops the corrupted service, increments the module generation, and retries
|
|
55
55
|
* the build once.
|
|
@@ -57,10 +57,6 @@ class DevBuildCoordinator {
|
|
|
57
57
|
async build(options) {
|
|
58
58
|
return this.runSerialized(async () => {
|
|
59
59
|
try {
|
|
60
|
-
if (this.shouldRecycleEsbuildService(options)) {
|
|
61
|
-
await this.adapter.stopEsbuildService(this.esbuildModuleGeneration);
|
|
62
|
-
this.esbuildSessionWarm = false;
|
|
63
|
-
}
|
|
64
60
|
const result = await this.adapter.buildOrThrow(options, this.esbuildModuleGeneration);
|
|
65
61
|
this.esbuildSessionWarm = true;
|
|
66
62
|
return result;
|
|
@@ -115,9 +111,6 @@ class DevBuildCoordinator {
|
|
|
115
111
|
getBuildQueueForTests() {
|
|
116
112
|
return this.buildQueue;
|
|
117
113
|
}
|
|
118
|
-
shouldRecycleEsbuildService(options) {
|
|
119
|
-
return process.env.NODE_ENV === "development" && options.target !== "browser" && this.esbuildSessionWarm;
|
|
120
|
-
}
|
|
121
114
|
async runSerialized(operation) {
|
|
122
115
|
let releaseBuild;
|
|
123
116
|
const currentBuild = new Promise((resolve) => {
|
|
@@ -134,15 +127,15 @@ class DevBuildCoordinator {
|
|
|
134
127
|
}
|
|
135
128
|
}
|
|
136
129
|
function createAppBuildExecutor(options) {
|
|
137
|
-
const adapter = options.adapter ??
|
|
138
|
-
const baseExecutor =
|
|
130
|
+
const adapter = options.adapter ?? defaultBunBuildAdapter;
|
|
131
|
+
const baseExecutor = isEsbuildBuildAdapter(adapter) ? new DevBuildCoordinator(adapter) : adapter;
|
|
139
132
|
if (!options.getPlugins) {
|
|
140
133
|
return baseExecutor;
|
|
141
134
|
}
|
|
142
135
|
return new BuildExecutorWithPlugins(baseExecutor, options.getPlugins);
|
|
143
136
|
}
|
|
144
137
|
function createOrReuseAppBuildExecutor(options) {
|
|
145
|
-
const adapter = options.adapter ??
|
|
138
|
+
const adapter = options.adapter ?? defaultBunBuildAdapter;
|
|
146
139
|
const currentBaseExecutor = options.currentExecutor ? unwrapBuildExecutor(options.currentExecutor) : void 0;
|
|
147
140
|
const baseExecutor = options.development && currentBaseExecutor instanceof DevBuildCoordinator ? currentBaseExecutor : createAppBuildExecutor({
|
|
148
141
|
development: options.development,
|
|
@@ -5,7 +5,13 @@ import type { BuildAdapter, BuildOptions, BuildResult, BuildTranspileOptions, Bu
|
|
|
5
5
|
* This adapter keeps Ecopages build plugin compatibility (`onResolve`, `onLoad`,
|
|
6
6
|
* and `module`) while delegating bundling and TypeScript/decorator transforms to esbuild.
|
|
7
7
|
*/
|
|
8
|
+
export declare const ESBUILD_ADAPTER_BRAND: unique symbol;
|
|
8
9
|
export declare class EsbuildBuildAdapter implements BuildAdapter {
|
|
10
|
+
readonly ownership: "bun-native";
|
|
11
|
+
readonly [ESBUILD_ADAPTER_BRAND] = true;
|
|
12
|
+
private collectWorkspaceNodePaths;
|
|
13
|
+
private getFallbackNodePaths;
|
|
14
|
+
private rewriteAliasedRuntimeSpecifiers;
|
|
9
15
|
private escapeRegExp;
|
|
10
16
|
private getPluginsForBuild;
|
|
11
17
|
private normalizeEsbuildLoader;
|