@ecopages/core 0.2.0-beta.31 → 0.2.0-beta.32
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 +1 -0
- package/package.json +82 -3
- package/src/adapters/abstract/application-adapter.d.ts +0 -8
- package/src/adapters/abstract/application-adapter.js +252 -261
- package/src/adapters/abstract/router-adapter.js +12 -4
- package/src/adapters/abstract/segment-path-matcher.js +132 -134
- package/src/adapters/abstract/server-adapter.js +22 -14
- package/src/adapters/abstract/ws-pattern-matcher.js +24 -26
- package/src/adapters/bun/bun-user-websocket-lifecycle.js +83 -86
- package/src/adapters/bun/client-bridge.js +51 -50
- package/src/adapters/bun/create-app.js +171 -161
- package/src/adapters/bun/hmr-manager.js +62 -57
- package/src/adapters/bun/index.js +2 -31
- package/src/adapters/bun/runtime-host.js +61 -54
- package/src/adapters/bun/server-adapter.d.ts +0 -1
- package/src/adapters/bun/server-adapter.js +561 -561
- package/src/adapters/bun/static-preview-host.js +43 -46
- package/src/adapters/create-app.js +11 -14
- package/src/adapters/index.js +2 -30
- package/src/adapters/node/create-app.js +123 -129
- package/src/adapters/node/http-request-bridge.js +147 -106
- package/src/adapters/node/node-client-bridge.js +62 -64
- package/src/adapters/node/node-hmr-manager.js +58 -48
- package/src/adapters/node/runtime-host.js +96 -89
- package/src/adapters/node/server-adapter-dependencies.js +18 -21
- package/src/adapters/node/server-adapter.d.ts +0 -1
- package/src/adapters/node/server-adapter.js +347 -326
- package/src/adapters/node/static-content-server.js +172 -191
- package/src/adapters/node/static-preview-host.js +87 -78
- package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
- package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
- package/src/adapters/shared/hmr/hmr-html-response.js +46 -32
- package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +29 -38
- package/src/adapters/shared/hmr/shared-hmr-manager.js +439 -425
- package/src/adapters/shared/http/api-request-pipeline.js +122 -119
- package/src/adapters/shared/http/api-response.js +77 -77
- package/src/adapters/shared/http/create-body-response.js +22 -19
- package/src/adapters/shared/http/define-api-handler.js +41 -55
- package/src/adapters/shared/http/explicit-static-render-preparation.js +26 -23
- package/src/adapters/shared/http/explicit-static-route-matcher.js +55 -62
- package/src/adapters/shared/http/file-route-middleware-pipeline.js +81 -75
- package/src/adapters/shared/http/fs-server-response-factory.js +101 -96
- package/src/adapters/shared/http/fs-server-response-matcher.js +239 -257
- package/src/adapters/shared/http/run-middleware-chain.js +15 -15
- package/src/adapters/shared/runtime/application-adapter.js +72 -87
- package/src/adapters/shared/runtime/copy-runtime-public-dir.js +25 -22
- package/src/adapters/shared/runtime/port-manager.js +207 -177
- package/src/adapters/shared/runtime/render-context.js +94 -79
- package/src/adapters/shared/runtime/runtime-app-bootstrap.js +33 -38
- package/src/adapters/shared/runtime/runtime-host.js +1 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +2 -3
- package/src/adapters/shared/runtime/runtime-server-lifecycle.js +65 -51
- package/src/adapters/shared/runtime/server-adapter.d.ts +1 -0
- package/src/adapters/shared/runtime/server-adapter.js +233 -217
- package/src/adapters/shared/runtime/server-route-handler.js +74 -70
- package/src/adapters/shared/runtime/server-static-builder.js +165 -184
- package/src/adapters/shared/runtime/static-preview-host.js +1 -0
- package/src/adapters/shared/ws/node-http-websocket-upgrades.js +97 -88
- package/src/adapters/shared/ws/websocket-lifecycle.js +57 -50
- package/src/build/README.md +52 -1
- package/src/build/app-build-manifest-runtime.js +129 -108
- package/src/build/browser/browser-runtime-manifest.js +47 -50
- package/src/build/browser/browser-runtime-plugin-helpers.js +32 -12
- package/src/build/browser/browser-runtime-plugin.js +206 -160
- package/src/build/browser/jsx-ownership-plugins.js +51 -37
- package/src/build/browser/lit-static-render-worker-context.js +3 -5
- package/src/build/build-adapter.js +276 -139
- package/src/build/cache/build-input-fingerprint.js +28 -26
- package/src/build/cache/cache-constants.js +4 -6
- package/src/build/cache/cache-keys.js +64 -56
- package/src/build/cache/pages-unified-graph-build.js +179 -178
- package/src/build/cache/production-build-cache.js +47 -54
- package/src/build/cache/server-entry-build-cache.js +134 -146
- package/src/build/contracts/build-contracts.d.ts +4 -4
- package/src/build/contracts/build-contracts.js +1 -0
- package/src/build/contracts/build-manifest.js +58 -43
- package/src/build/contracts/build-types.js +1 -0
- package/src/build/rolldown/rolldown-adapter-helpers.d.ts +9 -0
- package/src/build/rolldown/rolldown-adapter-helpers.js +405 -298
- package/src/build/rolldown/rolldown-build-adapter.js +53 -61
- package/src/build/rolldown/rolldown-build-invocation-metrics.js +31 -35
- package/src/build/rolldown/rolldown-plugin-bridge.js +264 -194
- package/src/build/rolldown/rolldown-source-transform-pass.js +59 -50
- package/src/build/rolldown/runtime-build-output-normalizer.js +227 -175
- package/src/build/rolldown/server-side-css-shim-plugin.js +54 -31
- package/src/build/runtime/build-profile-options.js +36 -36
- package/src/build/runtime/build-request-identity.js +70 -45
- package/src/build/runtime/build-request-policy.js +80 -42
- package/src/build/runtime/build-runtime.js +64 -54
- package/src/build/runtime/deduping-build-executor.js +38 -32
- package/src/build/runtime/parallel-build-executor.js +58 -50
- package/src/build/runtime/serialized-build-executor.js +78 -62
- package/src/cache/index.js +6 -6
- package/src/cache/module-parse-cache.js +99 -68
- package/src/client/navigation-scripts/classification.js +45 -37
- package/src/client/navigation-scripts/index.js +3 -23
- package/src/client/navigation-scripts/navigation-scripts.test.browser.js +58 -62
- package/src/client/navigation-scripts/registry.js +15 -11
- package/src/client/navigation-scripts/rerun-queue.js +81 -64
- package/src/client/scroll.js +32 -24
- package/src/client/scroll.test.browser.js +27 -33
- package/src/client/view-transitions.js +68 -55
- package/src/config/config-builder.d.ts +8 -0
- package/src/config/config-builder.js +637 -642
- package/src/config/constants.js +44 -24
- package/src/declarations.d.ts +1 -0
- package/src/dev/README.md +24 -0
- package/src/dev/client-bridge-registry.js +7 -12
- package/src/dev/dev-client-ownership.js +7 -5
- package/src/dev/hmr-manager-registry.js +7 -12
- package/src/dev/host-runtime.js +25 -30
- package/src/dev/runtime-server-started-message.js +2 -5
- package/src/dev/sc-server.js +106 -103
- package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
- package/src/dev/transform-server/dev-transform-bundler.js +79 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.js +110 -0
- package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
- package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
- package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
- package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
- package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
- package/src/dev/transform-server/dev-transform-server.js +191 -0
- package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
- package/src/dev/transform-server/dev-transform-url.js +58 -0
- package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +27 -0
- package/src/dev/transform-server/dev-transform-vendor-registry.js +145 -0
- package/src/dev/transform-server/index.d.ts +6 -0
- package/src/dev/transform-server/index.js +4 -0
- package/src/dev/transform-server/types.d.ts +15 -0
- package/src/dev/transform-server/types.js +1 -0
- package/src/dev-toolbar/README.md +51 -0
- package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
- package/src/dev-toolbar/define-dev-tool.js +9 -0
- package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
- package/src/dev-toolbar/dev-toolbar-config.js +19 -0
- package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
- package/src/dev-toolbar/dev-toolbar-host.js +117 -0
- package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
- package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
- package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
- package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
- package/src/dev-toolbar/dev-toolbar-package.d.ts +31 -0
- package/src/dev-toolbar/dev-toolbar-package.js +72 -0
- package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
- package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
- package/src/diagnostics/request-build-dedupe.js +34 -28
- package/src/diagnostics/startup-trace.d.ts +10 -1
- package/src/diagnostics/startup-trace.js +269 -241
- package/src/eco/README.md +6 -0
- package/src/eco/eco-declared-component.js +19 -14
- package/src/eco/eco.browser.js +56 -69
- package/src/eco/eco.js +156 -96
- package/src/eco/eco.types.js +5 -0
- package/src/eco/eco.utils.js +1 -10
- package/src/eco/global-injector-map.js +55 -41
- package/src/eco/lazy-injector-map.js +90 -60
- package/src/eco/module-dependencies.js +52 -44
- package/src/eco/page-layout-normalization.js +59 -49
- package/src/errors/http-error.js +50 -49
- package/src/errors/index.js +3 -12
- package/src/errors/locals-access-error.js +5 -8
- package/src/errors/undeclared-component-dependency-error.js +15 -15
- package/src/global/app-logger.js +3 -6
- package/src/hmr/README.md +10 -0
- package/src/hmr/client/hmr-runtime.js +117 -113
- package/src/hmr/client/module-update.d.ts +13 -0
- package/src/hmr/client/module-update.js +39 -0
- package/src/hmr/hmr-asset-paths.d.ts +14 -0
- package/src/hmr/hmr-asset-paths.js +22 -0
- package/src/hmr/hmr-entrypoint-output.d.ts +11 -39
- package/src/hmr/hmr-entrypoint-output.js +28 -54
- package/src/hmr/hmr-file-change-prep.js +13 -16
- package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
- package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
- package/src/hmr/hmr-runtime-paths.d.ts +10 -0
- package/src/hmr/hmr-runtime-paths.js +13 -0
- package/src/hmr/hmr-strategy.d.ts +5 -11
- package/src/hmr/hmr-strategy.js +113 -61
- package/src/hmr/strategies/default-hmr-strategy.js +55 -33
- package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -95
- package/src/hmr/strategies/js-hmr-strategy.js +104 -217
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +33 -27
- package/src/index.browser.js +1 -4
- package/src/index.d.ts +1 -0
- package/src/index.js +6 -47
- package/src/integrations/ghtml/ghtml-renderer.js +12 -7
- package/src/integrations/ghtml/ghtml.constants.js +1 -4
- package/src/integrations/ghtml/ghtml.plugin.js +9 -12
- package/src/islands/README.md +25 -0
- package/src/islands/island-host.d.ts +37 -0
- package/src/islands/island-host.js +55 -0
- package/src/plugins/alias-resolver-cache.js +114 -97
- package/src/plugins/alias-resolver-plugin.js +33 -47
- package/src/plugins/define-integration.js +18 -17
- package/src/plugins/eco-component-meta-plugin.js +387 -145
- package/src/plugins/foreign-jsx-override-plugin.js +49 -35
- package/src/plugins/integration-plugin.js +212 -203
- package/src/plugins/jsx-import-source.utils.js +16 -21
- package/src/plugins/processor.js +159 -149
- package/src/plugins/runtime-capability.js +1 -0
- package/src/plugins/source-transform.js +109 -79
- package/src/plugins/tsconfig-import-resolver.d.ts +17 -0
- package/src/plugins/tsconfig-import-resolver.js +218 -142
- package/src/route-renderer/README.md +12 -1
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +143 -136
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +33 -27
- package/src/route-renderer/orchestration/foreign-child/component-render-context.js +173 -126
- package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +165 -154
- package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +329 -341
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +33 -32
- package/src/route-renderer/orchestration/integration-renderer.d.ts +1 -0
- package/src/route-renderer/orchestration/integration-renderer.js +731 -750
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +168 -172
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +119 -131
- package/src/route-renderer/orchestration/ownership-graph/component-graph.js +82 -91
- package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +82 -76
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +29 -31
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.js +10 -6
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +31 -28
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +3 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +430 -413
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +191 -212
- package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +20 -24
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +4 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +24 -24
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +22 -24
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +41 -34
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +5 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +42 -22
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +50 -48
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +29 -32
- package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +150 -156
- package/src/route-renderer/orchestration/string-markup-renderer.js +48 -51
- package/src/route-renderer/page-loading/component-dependency-collection.js +120 -124
- package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
- package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +68 -54
- package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +46 -36
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +38 -31
- package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
- package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
- package/src/route-renderer/page-loading/page-module-loader.js +130 -124
- package/src/route-renderer/route-renderer.js +74 -76
- package/src/router/client/link-intent.js +55 -39
- package/src/router/client/link-intent.test.browser.js +49 -49
- package/src/router/client/link-navigation-policy.js +114 -93
- package/src/router/client/link-navigation-policy.test.browser.js +70 -80
- package/src/router/client/navigation-coordinator.js +235 -211
- package/src/router/server/route-registry.js +237 -242
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -53
- package/src/services/assets/asset-processing-service/asset-processing.service.js +287 -303
- package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
- package/src/services/assets/asset-processing-service/assets.types.js +1 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +106 -69
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -53
- package/src/services/assets/asset-processing-service/finalize-processed-asset.js +4 -6
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +79 -80
- package/src/services/assets/asset-processing-service/index.js +8 -8
- package/src/services/assets/asset-processing-service/inline-content-script-body.js +22 -16
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +21 -17
- package/src/services/assets/asset-processing-service/page-package.js +70 -72
- package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
- package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -117
- package/src/services/assets/asset-processing-service/processors/index.js +5 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +110 -115
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -97
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +27 -29
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +34 -40
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +36 -35
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +14 -16
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -39
- package/src/services/assets/browser-bundle.service.js +52 -47
- package/src/services/cache/cache.types.js +5 -0
- package/src/services/cache/index.js +6 -7
- package/src/services/cache/memory-cache-store.js +101 -89
- package/src/services/cache/page-cache-service.js +156 -145
- package/src/services/cache/page-request-cache-coordinator.service.js +102 -102
- package/src/services/html/html-rewriter-provider.service.js +61 -61
- package/src/services/html/html-transformer.service.js +249 -266
- package/src/services/invalidation/development-invalidation.service.js +252 -241
- package/src/services/module-loading/app-module-loader.service.js +1 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +107 -101
- package/src/services/module-loading/host-module-loader-registry.js +6 -11
- package/src/services/module-loading/module-loading-types.js +1 -0
- package/src/services/module-loading/page-module-import.service.js +235 -243
- package/src/services/module-loading/route-module-build-cache-registry.js +47 -33
- package/src/services/module-loading/route-module-build-cache.js +3 -38
- package/src/services/module-loading/route-module-build-cache.store.js +195 -200
- package/src/services/module-loading/route-module-build-manifest.js +61 -74
- package/src/services/module-loading/route-module-dependency-hasher.js +136 -110
- package/src/services/module-loading/server-module-transpiler.service.js +68 -62
- package/src/services/module-loading/source-module-support.js +15 -7
- package/src/services/runtime-state/dev-graph.service.js +165 -157
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
- package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
- package/src/services/validation/schema-validation-service.js +157 -95
- package/src/services/validation/standard-schema.types.js +1 -0
- package/src/services/validation/validate-standard-schema.js +13 -13
- package/src/static-site-generator/production-page-browser-graph-prebuild.js +35 -19
- package/src/static-site-generator/sitemap-routes.js +33 -28
- package/src/static-site-generator/sitemap.js +38 -29
- package/src/static-site-generator/static-build-invalidation.js +34 -56
- package/src/static-site-generator/static-export-context.js +1 -0
- package/src/static-site-generator/static-site-generator.js +517 -553
- package/src/types/internal-types.d.ts +19 -3
- package/src/types/internal-types.js +1 -0
- package/src/types/public-types.d.ts +16 -46
- package/src/types/public-types.js +1 -0
- package/src/utils/deep-merge.js +39 -26
- package/src/utils/ecopages-route-info.js +27 -23
- package/src/utils/hash.js +3 -6
- package/src/utils/html-escaping.js +21 -8
- package/src/utils/html.js +1 -4
- package/src/utils/invariant.js +11 -10
- package/src/utils/locals-utils.js +32 -22
- package/src/utils/parse-cli-args.js +73 -65
- package/src/utils/path-pattern.js +38 -23
- package/src/utils/path-utils.module.js +8 -11
- package/src/utils/resolve-entry-file.js +70 -38
- package/src/utils/resolve-work-dir.js +23 -27
- package/src/utils/runtime.js +24 -33
- package/src/utils/server-utils.module.js +60 -52
- package/src/utils/static-file-extensions.js +52 -46
- package/src/watchers/project-watcher-ignore.js +16 -15
- package/src/watchers/project-watcher.js +385 -366
- package/src/watchers/project-watcher.test-helpers.js +45 -50
- package/src/adapters/shared/hmr/hmr-entrypoint-registrar.d.ts +0 -56
- package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +0 -106
- package/src/build/cache/dev-browser-script-cache.d.ts +0 -34
- package/src/build/cache/dev-browser-script-cache.js +0 -90
package/src/config/constants.js
CHANGED
|
@@ -1,26 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* This file contains constants used throughout the project.
|
|
3
|
+
* @module constants
|
|
4
|
+
**/
|
|
5
|
+
/**
|
|
6
|
+
* Collection of status messages used in the application.
|
|
7
|
+
*/
|
|
8
|
+
export const STATUS_MESSAGE = {
|
|
9
|
+
404: '404 Not Found',
|
|
10
|
+
500: 'Internal Server Error',
|
|
4
11
|
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
RESOLVED_ASSETS_VENDORS_DIR,
|
|
25
|
-
STATUS_MESSAGE
|
|
12
|
+
/**
|
|
13
|
+
*Variables used to determine if the app is running on Bun
|
|
14
|
+
*/
|
|
15
|
+
export const IS_BUN = typeof Bun !== 'undefined';
|
|
16
|
+
/**
|
|
17
|
+
* Directory used for storing assets.
|
|
18
|
+
*/
|
|
19
|
+
export const RESOLVED_ASSETS_DIR = 'assets';
|
|
20
|
+
/**
|
|
21
|
+
* Directory used for storing vendor assets.
|
|
22
|
+
* This is a subdirectory of the assets directory.
|
|
23
|
+
*/
|
|
24
|
+
export const RESOLVED_ASSETS_VENDORS_DIR = `${RESOLVED_ASSETS_DIR}/vendors`;
|
|
25
|
+
/**
|
|
26
|
+
* Base paths for generated project files.
|
|
27
|
+
*/
|
|
28
|
+
export const GENERATED_BASE_PATHS = {
|
|
29
|
+
types: 'node_modules/@types',
|
|
30
|
+
cache: 'cache',
|
|
26
31
|
};
|
|
32
|
+
export const DEFAULT_ECOPAGES_PORT = 3000;
|
|
33
|
+
export const DEFAULT_ECOPAGES_HOSTNAME = 'localhost';
|
|
34
|
+
/**
|
|
35
|
+
* Default directory used for deployable output.
|
|
36
|
+
*/
|
|
37
|
+
export const DEFAULT_ECOPAGES_DIST_DIR = 'dist';
|
|
38
|
+
/**
|
|
39
|
+
* Default internal working directory used for runtime-only artifacts.
|
|
40
|
+
*
|
|
41
|
+
* @remarks
|
|
42
|
+
* This directory is a local tool workspace and is not intended for deployment.
|
|
43
|
+
* It owns transpiled server modules, runtime manifests, and processor caches
|
|
44
|
+
* so the export directory can remain a clean deployable tree.
|
|
45
|
+
*/
|
|
46
|
+
export const DEFAULT_ECOPAGES_WORK_DIR = '.eco';
|
package/src/declarations.d.ts
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Development-only browser tooling is opt-in per application.
|
|
2
|
+
|
|
3
|
+
## Dev toolbar
|
|
4
|
+
|
|
5
|
+
- `/_dev_toolbar.js` — browser bundle built by core from `devToolbar.package` (for example `@ecopages/dev-toolbar`)
|
|
6
|
+
- `#__ECO_DEV_MANIFEST__` — per-page dependency graph payload for the Deps panel
|
|
7
|
+
|
|
8
|
+
Public docs: [Dev toolbar](/docs/core/dev-toolbar) (built-in apps, manifest fields).
|
|
9
|
+
|
|
10
|
+
Configure in `eco.config.ts`:
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
import { devToolbar } from '@ecopages/dev-toolbar/config';
|
|
14
|
+
|
|
15
|
+
.setDevToolbar(devToolbar())
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
For a custom client package, use `defineDevTool` from `@ecopages/core/dev-toolbar/define-dev-tool`.
|
|
19
|
+
|
|
20
|
+
Install the client package in the app project. Core resolves it from the application root and bundles it during watch mode.
|
|
21
|
+
|
|
22
|
+
Disable per project with `devToolbar: { enabled: false }`, or per process with `ECOPAGES_DEV_TOOLBAR=false`.
|
|
23
|
+
|
|
24
|
+
Server wiring: [dev-toolbar/README.md](../dev-toolbar/README.md) (`DevToolbarHost`, manifest, runtime bundling, HTML injection). Bring-your-own toolbars export `src/bootstrap.ts` and use the same `devToolbar.package` config key.
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
const appDevClientBridges =
|
|
2
|
-
function setAppDevClientBridge(appConfig, bridge) {
|
|
3
|
-
|
|
1
|
+
const appDevClientBridges = new WeakMap();
|
|
2
|
+
export function setAppDevClientBridge(appConfig, bridge) {
|
|
3
|
+
appDevClientBridges.set(appConfig, bridge);
|
|
4
4
|
}
|
|
5
|
-
function getAppDevClientBridge(appConfig) {
|
|
6
|
-
|
|
5
|
+
export function getAppDevClientBridge(appConfig) {
|
|
6
|
+
return appDevClientBridges.get(appConfig);
|
|
7
7
|
}
|
|
8
|
-
function clearAppDevClientBridge(appConfig) {
|
|
9
|
-
|
|
8
|
+
export function clearAppDevClientBridge(appConfig) {
|
|
9
|
+
appDevClientBridges.delete(appConfig);
|
|
10
10
|
}
|
|
11
|
-
export {
|
|
12
|
-
clearAppDevClientBridge,
|
|
13
|
-
getAppDevClientBridge,
|
|
14
|
-
setAppDevClientBridge
|
|
15
|
-
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Returns whether the host dev server owns all browser dev-client bootstrap.
|
|
3
|
+
*
|
|
4
|
+
* When true, core must not inject the HMR runtime or signal full-page reloads.
|
|
5
|
+
*/
|
|
6
|
+
export function hostOwnsDevClient(runtime) {
|
|
7
|
+
return runtime?.devClientOwner === 'host';
|
|
3
8
|
}
|
|
4
|
-
export {
|
|
5
|
-
hostOwnsDevClient
|
|
6
|
-
};
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
const appHmrManagers =
|
|
2
|
-
function setAppHmrManager(appConfig, hmrManager) {
|
|
3
|
-
|
|
1
|
+
const appHmrManagers = new WeakMap();
|
|
2
|
+
export function setAppHmrManager(appConfig, hmrManager) {
|
|
3
|
+
appHmrManagers.set(appConfig, hmrManager);
|
|
4
4
|
}
|
|
5
|
-
function getAppHmrManager(appConfig) {
|
|
6
|
-
|
|
5
|
+
export function getAppHmrManager(appConfig) {
|
|
6
|
+
return appHmrManagers.get(appConfig);
|
|
7
7
|
}
|
|
8
|
-
function clearAppHmrManager(appConfig) {
|
|
9
|
-
|
|
8
|
+
export function clearAppHmrManager(appConfig) {
|
|
9
|
+
appHmrManagers.delete(appConfig);
|
|
10
10
|
}
|
|
11
|
-
export {
|
|
12
|
-
clearAppHmrManager,
|
|
13
|
-
getAppHmrManager,
|
|
14
|
-
setAppHmrManager
|
|
15
|
-
};
|
package/src/dev/host-runtime.js
CHANGED
|
@@ -1,31 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
};
|
|
1
|
+
import { DevelopmentInvalidationService, } from '../services/invalidation/development-invalidation.service.js';
|
|
2
|
+
import { getAppDevClientBridge } from './client-bridge-registry.js';
|
|
3
|
+
import { setHostModuleLoader } from '../services/module-loading/host-module-loader-registry.js';
|
|
4
|
+
export function createDevelopmentHostRuntime(appConfig) {
|
|
5
|
+
const invalidationService = new DevelopmentInvalidationService(appConfig);
|
|
6
|
+
return {
|
|
7
|
+
registerHostModuleLoader(loader) {
|
|
8
|
+
setHostModuleLoader(loader);
|
|
9
|
+
},
|
|
10
|
+
planFileChange(filePath) {
|
|
11
|
+
return invalidationService.planFileChange(filePath);
|
|
12
|
+
},
|
|
13
|
+
invalidateServerModules(changedFiles) {
|
|
14
|
+
invalidationService.invalidateServerModules(changedFiles);
|
|
15
|
+
},
|
|
16
|
+
resetRuntimeState(changedFiles) {
|
|
17
|
+
invalidationService.resetRuntimeState(changedFiles);
|
|
18
|
+
},
|
|
19
|
+
broadcastClientEvent(event) {
|
|
20
|
+
getAppDevClientBridge(appConfig)?.broadcast(event);
|
|
21
|
+
},
|
|
22
|
+
isServerRenderedTemplatePlan(plan) {
|
|
23
|
+
return plan.category === 'include-source' || plan.category === 'explicit-server-view';
|
|
24
|
+
},
|
|
25
|
+
};
|
|
28
26
|
}
|
|
29
|
-
export {
|
|
30
|
-
createDevelopmentHostRuntime
|
|
31
|
-
};
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
function formatRuntimeServerStartedMessage(runtime, origin) {
|
|
2
|
-
|
|
1
|
+
export function formatRuntimeServerStartedMessage(runtime, origin) {
|
|
2
|
+
return `${runtime} server running at ${origin.replace(/\/$/, '')}`;
|
|
3
3
|
}
|
|
4
|
-
export {
|
|
5
|
-
formatRuntimeServerStartedMessage
|
|
6
|
-
};
|
package/src/dev/sc-server.js
CHANGED
|
@@ -1,111 +1,114 @@
|
|
|
1
|
-
import { extname, join } from
|
|
2
|
-
import { STATUS_MESSAGE } from
|
|
3
|
-
import { fileSystem } from
|
|
4
|
-
import { ServerUtils } from
|
|
5
|
-
import { getRequiredBunRuntime } from
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return contentType === "text/html";
|
|
20
|
-
}
|
|
21
|
-
async sendNotFoundPage() {
|
|
22
|
-
const error404TemplatePath = `${this.appConfig.absolutePaths.distDir}/404.html`;
|
|
23
|
-
try {
|
|
24
|
-
fileSystem.exists(error404TemplatePath);
|
|
25
|
-
} catch {
|
|
26
|
-
return new Response(STATUS_MESSAGE[404], {
|
|
27
|
-
status: 404
|
|
28
|
-
});
|
|
1
|
+
import { extname, join } from 'node:path';
|
|
2
|
+
import { STATUS_MESSAGE } from '../config/constants.js';
|
|
3
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
4
|
+
import { ServerUtils } from '../utils/server-utils.module.js';
|
|
5
|
+
import { getRequiredBunRuntime } from '../utils/runtime.js';
|
|
6
|
+
/**
|
|
7
|
+
* Static content server for production builds.
|
|
8
|
+
* Serves pre-built static files from the dist directory with gzip compression support.
|
|
9
|
+
*/
|
|
10
|
+
export class StaticContentServer {
|
|
11
|
+
server = null;
|
|
12
|
+
appConfig;
|
|
13
|
+
options = { port: 3000 };
|
|
14
|
+
constructor({ appConfig, options }) {
|
|
15
|
+
this.appConfig = appConfig;
|
|
16
|
+
if (options)
|
|
17
|
+
this.options = options;
|
|
18
|
+
this.startServer();
|
|
29
19
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return new Response(file, {
|
|
46
|
-
headers: {
|
|
47
|
-
"Content-Type": contentType,
|
|
48
|
-
"Content-Encoding": "gzip",
|
|
49
|
-
Vary: "Accept-Encoding"
|
|
50
|
-
}
|
|
51
|
-
});
|
|
20
|
+
shouldServeGzip(contentType) {
|
|
21
|
+
return ['text/javascript', 'text/css'].includes(contentType);
|
|
22
|
+
}
|
|
23
|
+
isHtml(contentType) {
|
|
24
|
+
return contentType === 'text/html';
|
|
25
|
+
}
|
|
26
|
+
async sendNotFoundPage() {
|
|
27
|
+
const error404TemplatePath = `${this.appConfig.absolutePaths.distDir}/404.html`;
|
|
28
|
+
try {
|
|
29
|
+
fileSystem.exists(error404TemplatePath);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return new Response(STATUS_MESSAGE[404], {
|
|
33
|
+
status: 404,
|
|
34
|
+
});
|
|
52
35
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const file = fileSystem.readFileAsBuffer(basePath);
|
|
56
|
-
return new Response(file, {
|
|
57
|
-
headers: { "Content-Type": contentType }
|
|
36
|
+
const response = new Response(fileSystem.readFileAsBuffer(error404TemplatePath), {
|
|
37
|
+
headers: { 'Content-Type': 'text/html' },
|
|
58
38
|
});
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
39
|
+
return response;
|
|
40
|
+
}
|
|
41
|
+
async serveFromDir({ path, request }) {
|
|
42
|
+
const { absolutePaths } = this.appConfig;
|
|
43
|
+
const basePath = join(absolutePaths.distDir, path);
|
|
44
|
+
const contentType = ServerUtils.getContentType(extname(basePath));
|
|
45
|
+
const acceptsGzip = request.headers.get('Accept-Encoding')?.includes('gzip');
|
|
46
|
+
try {
|
|
47
|
+
if (acceptsGzip && this.shouldServeGzip(contentType)) {
|
|
48
|
+
const gzipPath = `${basePath}.gz`;
|
|
49
|
+
if (fileSystem.exists(gzipPath)) {
|
|
50
|
+
const file = fileSystem.readFileAsBuffer(gzipPath);
|
|
51
|
+
return new Response(file, {
|
|
52
|
+
headers: {
|
|
53
|
+
'Content-Type': contentType,
|
|
54
|
+
'Content-Encoding': 'gzip',
|
|
55
|
+
Vary: 'Accept-Encoding',
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (path.includes('.') && fileSystem.exists(basePath)) {
|
|
61
|
+
const file = fileSystem.readFileAsBuffer(basePath);
|
|
62
|
+
return new Response(file, {
|
|
63
|
+
headers: { 'Content-Type': contentType },
|
|
64
|
+
});
|
|
67
65
|
}
|
|
68
|
-
|
|
66
|
+
const htmlCandidates = [`${basePath}.html`, `${basePath}/index.html`];
|
|
67
|
+
for (const candidate of htmlCandidates) {
|
|
68
|
+
if (fileSystem.exists(candidate)) {
|
|
69
|
+
const file = fileSystem.readFileAsBuffer(candidate);
|
|
70
|
+
return new Response(file, {
|
|
71
|
+
headers: {
|
|
72
|
+
'Content-Type': ServerUtils.getContentType(extname(candidate)),
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return this.sendNotFoundPage();
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return this.sendNotFoundPage();
|
|
69
81
|
}
|
|
70
|
-
}
|
|
71
|
-
return this.sendNotFoundPage();
|
|
72
|
-
} catch {
|
|
73
|
-
return this.sendNotFoundPage();
|
|
74
82
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
83
|
+
async fetch(request) {
|
|
84
|
+
let reqPath = new URL(request.url).pathname;
|
|
85
|
+
if (reqPath === '/')
|
|
86
|
+
reqPath = '/index.html';
|
|
87
|
+
const response = this.serveFromDir({
|
|
88
|
+
path: reqPath,
|
|
89
|
+
request,
|
|
90
|
+
});
|
|
91
|
+
if (response)
|
|
92
|
+
return response;
|
|
93
|
+
return new Response(STATUS_MESSAGE[404], {
|
|
94
|
+
status: 404,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
startServer() {
|
|
98
|
+
this.server = getRequiredBunRuntime().serve({
|
|
99
|
+
fetch: this.fetch.bind(this),
|
|
100
|
+
port: this.options.port,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
stop() {
|
|
104
|
+
if (this.server) {
|
|
105
|
+
this.server.stop(true);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
static createServer({ appConfig, options, }) {
|
|
109
|
+
return new StaticContentServer({
|
|
110
|
+
appConfig: appConfig,
|
|
111
|
+
options,
|
|
112
|
+
});
|
|
97
113
|
}
|
|
98
|
-
}
|
|
99
|
-
static createServer({
|
|
100
|
-
appConfig,
|
|
101
|
-
options
|
|
102
|
-
}) {
|
|
103
|
-
return new StaticContentServer({
|
|
104
|
-
appConfig,
|
|
105
|
-
options
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
114
|
}
|
|
109
|
-
export {
|
|
110
|
-
StaticContentServer
|
|
111
|
-
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
2
|
+
import type { DevTransformVendorRegistry } from './dev-transform-vendor-registry.js';
|
|
3
|
+
import type { DevTransformBundleContributor, DevTransformBundleResult } from './types.js';
|
|
4
|
+
export type DevTransformBundlerOptions = {
|
|
5
|
+
appConfig: EcoPagesAppConfig;
|
|
6
|
+
contributors?: readonly DevTransformBundleContributor[];
|
|
7
|
+
getRuntimeSpecifierMap: () => ReadonlyMap<string, string>;
|
|
8
|
+
vendorRegistry: DevTransformVendorRegistry;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Transpiles one dev client module at a time to browser ESM with rewritten imports.
|
|
12
|
+
*/
|
|
13
|
+
export declare class DevTransformBundler {
|
|
14
|
+
private readonly appConfig;
|
|
15
|
+
private readonly browserBundleService;
|
|
16
|
+
private readonly getRuntimeSpecifierMap;
|
|
17
|
+
private readonly vendorRegistry;
|
|
18
|
+
private readonly contributors;
|
|
19
|
+
constructor(options: DevTransformBundlerOptions);
|
|
20
|
+
addContributor(contributor: DevTransformBundleContributor): void;
|
|
21
|
+
private selectContributor;
|
|
22
|
+
private resolveTempOutdir;
|
|
23
|
+
transpileModule(sourcePath: string): Promise<DevTransformBundleResult>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
4
|
+
import { BrowserBundleService } from '../../services/assets/browser-bundle.service.js';
|
|
5
|
+
import { createDevTransformExternalizeImportsPlugin } from './dev-transform-externalize-plugin.js';
|
|
6
|
+
import { rewriteModuleImports } from './dev-transform-import-rewriter.js';
|
|
7
|
+
/**
|
|
8
|
+
* Transpiles one dev client module at a time to browser ESM with rewritten imports.
|
|
9
|
+
*/
|
|
10
|
+
export class DevTransformBundler {
|
|
11
|
+
appConfig;
|
|
12
|
+
browserBundleService;
|
|
13
|
+
getRuntimeSpecifierMap;
|
|
14
|
+
vendorRegistry;
|
|
15
|
+
contributors = [];
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.appConfig = options.appConfig;
|
|
18
|
+
this.browserBundleService = new BrowserBundleService(options.appConfig);
|
|
19
|
+
this.getRuntimeSpecifierMap = options.getRuntimeSpecifierMap;
|
|
20
|
+
this.vendorRegistry = options.vendorRegistry;
|
|
21
|
+
this.contributors.push(...(options.contributors ?? []));
|
|
22
|
+
}
|
|
23
|
+
addContributor(contributor) {
|
|
24
|
+
this.contributors.push(contributor);
|
|
25
|
+
}
|
|
26
|
+
selectContributor(sourcePath) {
|
|
27
|
+
return this.contributors.find((contributor) => contributor.ownsModule(sourcePath));
|
|
28
|
+
}
|
|
29
|
+
resolveTempOutdir() {
|
|
30
|
+
const distDir = this.appConfig.absolutePaths?.distDir ?? path.join(this.appConfig.rootDir, '.eco', 'assets');
|
|
31
|
+
return path.join(distDir, '.dev-transform');
|
|
32
|
+
}
|
|
33
|
+
async transpileModule(sourcePath) {
|
|
34
|
+
const normalized = path.resolve(sourcePath);
|
|
35
|
+
const contributor = this.selectContributor(normalized);
|
|
36
|
+
const pagePlugins = contributor ? await contributor.getModulePlugins(normalized) : [];
|
|
37
|
+
const tempDir = this.resolveTempOutdir();
|
|
38
|
+
fileSystem.ensureDir(tempDir);
|
|
39
|
+
/**
|
|
40
|
+
* @remarks
|
|
41
|
+
* Entry key is a path hash so concurrent transpiles of different modules that
|
|
42
|
+
* share a basename (e.g. multiple `index.tsx`) never collide on disk output.
|
|
43
|
+
*/
|
|
44
|
+
const entryKey = createHash('sha256').update(normalized).digest('hex').slice(0, 16);
|
|
45
|
+
const result = await this.browserBundleService.bundle({
|
|
46
|
+
profile: 'hmr-entrypoint',
|
|
47
|
+
entrypoints: { [entryKey]: normalized },
|
|
48
|
+
outdir: tempDir,
|
|
49
|
+
naming: '[name].js',
|
|
50
|
+
plugins: [createDevTransformExternalizeImportsPlugin(), ...pagePlugins],
|
|
51
|
+
minify: false,
|
|
52
|
+
});
|
|
53
|
+
if (!result.success) {
|
|
54
|
+
const details = result.logs.map((log) => log.message).join('\n');
|
|
55
|
+
throw new Error(details
|
|
56
|
+
? `[dev-transform] Transpile failed for ${normalized}:\n${details}`
|
|
57
|
+
: `[dev-transform] Transpile failed for ${normalized}`);
|
|
58
|
+
}
|
|
59
|
+
const outputPath = result.entryOutputs?.[normalized] ??
|
|
60
|
+
result.outputs.find((output) => path.basename(output.path) === `${entryKey}.js`)?.path ??
|
|
61
|
+
result.outputs[0]?.path;
|
|
62
|
+
if (!outputPath) {
|
|
63
|
+
throw new Error(`[dev-transform] No transpile output for ${normalized}`);
|
|
64
|
+
}
|
|
65
|
+
const transpiledCode = fileSystem.readFileSync(outputPath);
|
|
66
|
+
const rewritten = await rewriteModuleImports({
|
|
67
|
+
code: transpiledCode,
|
|
68
|
+
sourcePath: normalized,
|
|
69
|
+
srcDir: this.appConfig.absolutePaths.srcDir,
|
|
70
|
+
projectRoot: this.appConfig.rootDir,
|
|
71
|
+
runtimeSpecifierMap: this.getRuntimeSpecifierMap(),
|
|
72
|
+
resolveVendorUrl: (specifier) => this.vendorRegistry.resolveVendorUrl(specifier),
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
code: rewritten.code,
|
|
76
|
+
dependencies: rewritten.dependencies,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EcoBuildPlugin } from '../../build/contracts/build-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Marks dependency imports as external so Rolldown transpiles only the entry module.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* The Rolldown plugin bridge splits specifiers such as `ecopages:images` into
|
|
7
|
+
* `namespace` + `path` before `onResolve`. Returning `external: true` for those
|
|
8
|
+
* would emit a bare `from "images"` import and skip virtual-module `onLoad`.
|
|
9
|
+
* Namespaced imports are left for app plugins (image map, etc.) to inline into
|
|
10
|
+
* this single-file transpile.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createDevTransformExternalizeImportsPlugin(): EcoBuildPlugin;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Marks dependency imports as external so Rolldown transpiles only the entry module.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* The Rolldown plugin bridge splits specifiers such as `ecopages:images` into
|
|
6
|
+
* `namespace` + `path` before `onResolve`. Returning `external: true` for those
|
|
7
|
+
* would emit a bare `from "images"` import and skip virtual-module `onLoad`.
|
|
8
|
+
* Namespaced imports are left for app plugins (image map, etc.) to inline into
|
|
9
|
+
* this single-file transpile.
|
|
10
|
+
*/
|
|
11
|
+
export function createDevTransformExternalizeImportsPlugin() {
|
|
12
|
+
return {
|
|
13
|
+
name: 'ecopages-dev-transform-externalize-imports',
|
|
14
|
+
setup(build) {
|
|
15
|
+
build.onResolve({ filter: /.*/u }, (args) => {
|
|
16
|
+
if (!args.importer) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
if (args.namespace) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
path: args.path,
|
|
24
|
+
external: true,
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type RewriteModuleImportsOptions = {
|
|
2
|
+
code: string;
|
|
3
|
+
sourcePath: string;
|
|
4
|
+
srcDir: string;
|
|
5
|
+
projectRoot: string;
|
|
6
|
+
runtimeSpecifierMap: ReadonlyMap<string, string>;
|
|
7
|
+
resolveVendorUrl: (specifier: string) => Promise<string>;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Rewrites static and dynamic import specifiers to dev-transform or vendor URLs.
|
|
11
|
+
*/
|
|
12
|
+
export declare function rewriteModuleImports(options: RewriteModuleImportsOptions): Promise<{
|
|
13
|
+
code: string;
|
|
14
|
+
dependencies: string[];
|
|
15
|
+
}>;
|
|
16
|
+
export {};
|