@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
|
@@ -1,214 +1,284 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Bundler plugin bridge.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Translates an array of `EcoBuildPlugin` instances (the runtime-agnostic
|
|
6
|
+
* plugin contract used by Ecopages processors and integrations) into
|
|
7
|
+
* the bundler's native `Plugin` array. The bridge exposes the same
|
|
8
|
+
* three hooks (`onResolve`, `onLoad`, `module`) the `EcoBuildPlugin`
|
|
9
|
+
* contract uses, but maps them to the bundler's `resolveId`/`load`
|
|
10
|
+
* hooks.
|
|
11
|
+
*
|
|
12
|
+
* The shared `EcoBuildPlugin` contract stays the boundary between
|
|
13
|
+
* integrations and bundler backends.
|
|
14
|
+
*
|
|
15
|
+
* **Namespace handling.**
|
|
16
|
+
*
|
|
17
|
+
* The shared `EcoBuildPlugin` contract scopes `onResolve`/`onLoad`
|
|
18
|
+
* handlers with a `namespace` string. The bundler encodes namespaces
|
|
19
|
+
* into the module id (no separate field). The bridge prepends
|
|
20
|
+
* `<namespace>:` to the resolved id when the result includes a
|
|
21
|
+
* namespace, and matches `onLoad`/`onResolve` filters against that
|
|
22
|
+
* prefix. The bridge strips the prefix before forwarding the id back
|
|
23
|
+
* to the callback so plugin code keeps seeing the same `path` shape
|
|
24
|
+
* it did on the historical contract.
|
|
25
|
+
*
|
|
26
|
+
* **Plugin ordering is semantically significant.**
|
|
27
|
+
*
|
|
28
|
+
* The bundler's `resolveId` and `load` are "first" hooks: the first
|
|
29
|
+
* plugin that returns a non-null value wins. Because the bridge
|
|
30
|
+
* translates each `EcoBuildPlugin` into its own bundler plugin and
|
|
31
|
+
* preserves the array order, the position of each plugin in the
|
|
32
|
+
* `plugins` array determines its priority:
|
|
33
|
+
*
|
|
34
|
+
* - **Index 0** has the highest priority.
|
|
35
|
+
* - **Last index** has the lowest priority.
|
|
36
|
+
*
|
|
37
|
+
* When adding new integrations or processors, ensure security-critical
|
|
38
|
+
* plugins (e.g. `ecopages-client-graph-boundary`) are placed **before**
|
|
39
|
+
* general-purpose loaders in the array so they always get first refusal
|
|
40
|
+
* on every source file.
|
|
41
|
+
*/
|
|
42
|
+
import path from 'node:path';
|
|
43
|
+
import { finalizeLoadResultWithSourceTransforms } from './rolldown-source-transform-pass.js';
|
|
44
|
+
import { escapeRegExp } from '../browser/browser-runtime-plugin-helpers.js';
|
|
45
|
+
const NAMESPACE_SEPARATOR = ':';
|
|
5
46
|
function joinNamespace(namespace, value) {
|
|
6
|
-
|
|
47
|
+
return namespace ? `${namespace}${NAMESPACE_SEPARATOR}${value}` : value;
|
|
7
48
|
}
|
|
8
49
|
function splitNamespace(id) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
50
|
+
const separatorIndex = id.indexOf(NAMESPACE_SEPARATOR);
|
|
51
|
+
if (separatorIndex <= 0) {
|
|
52
|
+
return { namespace: undefined, path: id };
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
namespace: id.slice(0, separatorIndex),
|
|
56
|
+
path: id.slice(separatorIndex + 1),
|
|
57
|
+
};
|
|
17
58
|
}
|
|
18
59
|
function inferRolldownModuleTypeFromPath(filePath) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
+
}
|
|
34
75
|
}
|
|
35
76
|
function normalizeRolldownModuleType(loader) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
77
|
+
switch (loader) {
|
|
78
|
+
case 'js':
|
|
79
|
+
case 'jsx':
|
|
80
|
+
case 'ts':
|
|
81
|
+
case 'tsx':
|
|
82
|
+
case 'json':
|
|
83
|
+
case 'css':
|
|
84
|
+
case 'text':
|
|
85
|
+
case 'base64':
|
|
86
|
+
case 'dataurl':
|
|
87
|
+
case 'binary':
|
|
88
|
+
case 'empty':
|
|
89
|
+
return loader;
|
|
90
|
+
case 'global-css':
|
|
91
|
+
case 'local-css':
|
|
92
|
+
return 'css';
|
|
93
|
+
case 'file':
|
|
94
|
+
case 'copy':
|
|
95
|
+
return 'asset';
|
|
96
|
+
default:
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
58
99
|
}
|
|
59
100
|
function convertLoadResultToModuleSource(result) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
101
|
+
if (result.loader === 'object' && result.exports && typeof result.exports === 'object') {
|
|
102
|
+
return Object.entries(result.exports)
|
|
103
|
+
.map(([key, value]) => key === 'default'
|
|
104
|
+
? `export default ${JSON.stringify(value)};`
|
|
105
|
+
: `export const ${key} = ${JSON.stringify(value)};`)
|
|
106
|
+
.join('\n');
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
66
109
|
}
|
|
67
110
|
function buildIdFilter(filter, namespace) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
111
|
+
if (!namespace) {
|
|
112
|
+
return filter;
|
|
113
|
+
}
|
|
114
|
+
return new RegExp(`^${escapeRegExp(namespace)}${NAMESPACE_SEPARATOR}${filter.source.slice(1)}`);
|
|
72
115
|
}
|
|
73
116
|
function resolvePluginPath(value, importer, contextRoot) {
|
|
74
|
-
|
|
117
|
+
if (path.isAbsolute(value)) {
|
|
118
|
+
return value;
|
|
119
|
+
}
|
|
120
|
+
if (value.startsWith('.') || value.startsWith('..')) {
|
|
121
|
+
const baseDir = importer ? path.dirname(importer) : contextRoot;
|
|
122
|
+
return path.resolve(baseDir, value);
|
|
123
|
+
}
|
|
75
124
|
return value;
|
|
76
|
-
}
|
|
77
|
-
if (value.startsWith(".") || value.startsWith("..")) {
|
|
78
|
-
const baseDir = importer ? path.dirname(importer) : contextRoot;
|
|
79
|
-
return path.resolve(baseDir, value);
|
|
80
|
-
}
|
|
81
|
-
return value;
|
|
82
125
|
}
|
|
83
126
|
function convertPluginOnLoadResult(args, result) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
127
|
+
if (!result || typeof result !== 'object') {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
const candidate = result;
|
|
131
|
+
const { path: sourcePath } = splitNamespace(args.id);
|
|
132
|
+
const sourceFromExports = convertLoadResultToModuleSource(candidate);
|
|
133
|
+
if (sourceFromExports) {
|
|
134
|
+
const description = {
|
|
135
|
+
code: sourceFromExports,
|
|
136
|
+
moduleType: 'js',
|
|
137
|
+
};
|
|
138
|
+
return description;
|
|
139
|
+
}
|
|
140
|
+
if (typeof candidate.contents === 'string' || candidate.contents instanceof Uint8Array) {
|
|
141
|
+
const code = typeof candidate.contents === 'string' ? candidate.contents : new TextDecoder().decode(candidate.contents);
|
|
142
|
+
const description = {
|
|
143
|
+
code,
|
|
144
|
+
moduleType: (normalizeRolldownModuleType(candidate.loader) ??
|
|
145
|
+
inferRolldownModuleTypeFromPath(sourcePath)),
|
|
146
|
+
};
|
|
147
|
+
return description;
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
106
150
|
}
|
|
107
151
|
function convertPluginOnResolveResult(result, importer, contextRoot) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
152
|
+
if (!result || typeof result !== 'object') {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
const candidate = result;
|
|
156
|
+
if (typeof candidate.path !== 'string' && typeof candidate.namespace !== 'string') {
|
|
157
|
+
if (typeof candidate.external !== 'boolean') {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const partial = { id: '' };
|
|
162
|
+
if (typeof candidate.path === 'string') {
|
|
163
|
+
partial.id = joinNamespace(candidate.namespace, resolvePluginPath(candidate.path, importer, contextRoot));
|
|
164
|
+
}
|
|
165
|
+
else if (typeof candidate.namespace === 'string') {
|
|
166
|
+
partial.id = joinNamespace(candidate.namespace, '');
|
|
167
|
+
}
|
|
168
|
+
if (typeof candidate.external === 'boolean') {
|
|
169
|
+
partial.external = candidate.external;
|
|
170
|
+
}
|
|
171
|
+
return partial;
|
|
127
172
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
173
|
+
/**
|
|
174
|
+
* Creates a Rolldown `Plugin` array that drives the supplied
|
|
175
|
+
* `EcoBuildPlugin` instances.
|
|
176
|
+
*
|
|
177
|
+
* All eco plugins are merged into a single Rolldown plugin to minimize
|
|
178
|
+
* Rust→JS FFI overhead. Rolldown calls every hook for every module when
|
|
179
|
+
* there is no static filter, so N separate plugins would cause N
|
|
180
|
+
* `resolveId` + N `load` calls per module. Consolidating into one
|
|
181
|
+
* plugin reduces that to 1 call each, with JavaScript-side filtering
|
|
182
|
+
* routing to the correct eco plugin callback.
|
|
183
|
+
*
|
|
184
|
+
* Plugin ordering is preserved: registrations from earlier eco plugins
|
|
185
|
+
* are checked before registrations from later ones, matching the
|
|
186
|
+
* original per-plugin priority semantics.
|
|
187
|
+
*
|
|
188
|
+
* @remarks
|
|
189
|
+
* Rolldown re-fires `buildStart` on each build, so registrations and the
|
|
190
|
+
* virtual-module counter are cleared before every `setup` pass — otherwise
|
|
191
|
+
* handlers accumulate when bridge plugins are reused.
|
|
192
|
+
*
|
|
193
|
+
* @param plugins - `EcoBuildPlugin` instances registered for this build.
|
|
194
|
+
* @param contextRoot - Project root used to resolve relative load paths.
|
|
195
|
+
* @param sourceTransforms - Optional app-owned transforms applied after a matching
|
|
196
|
+
* `onLoad` handler returns module contents. Browser builds pass
|
|
197
|
+
* {@link getAppSourceTransforms | app source transforms} here so metadata injection
|
|
198
|
+
* still runs on output rewritten by boundary/runtime plugins. Virtual modules,
|
|
199
|
+
* CSS, and asset loads are skipped.
|
|
200
|
+
*/
|
|
201
|
+
export function createRolldownPluginBridge(plugins, contextRoot, sourceTransforms = []) {
|
|
202
|
+
if (plugins.length === 0) {
|
|
203
|
+
return [];
|
|
204
|
+
}
|
|
205
|
+
const moduleCounter = { value: 0 };
|
|
206
|
+
const resolveRegistrations = [];
|
|
207
|
+
const loadRegistrations = [];
|
|
208
|
+
const registerResolve = (filter, callback) => {
|
|
209
|
+
resolveRegistrations.push({ filter, callback });
|
|
210
|
+
};
|
|
211
|
+
const registerLoad = (filter, callback) => {
|
|
212
|
+
loadRegistrations.push({ filter, callback });
|
|
213
|
+
};
|
|
214
|
+
const resolveIdHandler = async (source, importer, _extraOptions) => {
|
|
215
|
+
for (const { filter, callback } of resolveRegistrations) {
|
|
216
|
+
if (!filter.test(source)) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const { namespace, path: sourcePath } = splitNamespace(source);
|
|
220
|
+
const result = await callback({ path: sourcePath, importer, namespace });
|
|
221
|
+
const converted = convertPluginOnResolveResult(result, importer, contextRoot);
|
|
222
|
+
if (converted !== undefined) {
|
|
223
|
+
return converted;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return undefined;
|
|
227
|
+
};
|
|
228
|
+
const loadHandler = async (id) => {
|
|
229
|
+
let loadResult;
|
|
230
|
+
for (const { filter, callback } of loadRegistrations) {
|
|
231
|
+
if (!filter.test(id)) {
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
const { namespace, path: sourcePath } = splitNamespace(id);
|
|
235
|
+
const result = await callback({ path: sourcePath, namespace });
|
|
236
|
+
const converted = convertPluginOnLoadResult({ id }, result);
|
|
237
|
+
if (converted !== undefined) {
|
|
238
|
+
loadResult = converted;
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const { namespace, path: sourcePath } = splitNamespace(id);
|
|
243
|
+
return finalizeLoadResultWithSourceTransforms({
|
|
244
|
+
id,
|
|
245
|
+
namespace,
|
|
246
|
+
sourcePath,
|
|
247
|
+
loadResult,
|
|
248
|
+
sourceTransforms,
|
|
249
|
+
contextRoot,
|
|
250
|
+
inferModuleTypeFromPath: (filePath) => inferRolldownModuleTypeFromPath(filePath),
|
|
251
|
+
});
|
|
252
|
+
};
|
|
253
|
+
const plugin = {
|
|
254
|
+
name: 'ecopages-plugin-bridge',
|
|
255
|
+
buildStart: async () => {
|
|
256
|
+
resolveRegistrations.length = 0;
|
|
257
|
+
loadRegistrations.length = 0;
|
|
258
|
+
moduleCounter.value = 0;
|
|
259
|
+
for (const ecoPlugin of plugins) {
|
|
260
|
+
const bridge = {
|
|
261
|
+
onResolve: (options, callback) => {
|
|
262
|
+
registerResolve(buildIdFilter(options.filter, options.namespace), callback);
|
|
263
|
+
},
|
|
264
|
+
onLoad: (options, callback) => {
|
|
265
|
+
registerLoad(buildIdFilter(options.filter, options.namespace), callback);
|
|
266
|
+
},
|
|
267
|
+
module: (specifier, callback) => {
|
|
268
|
+
const namespace = `ecopages-module-${moduleCounter.value}`;
|
|
269
|
+
moduleCounter.value += 1;
|
|
270
|
+
const filter = new RegExp(`^${escapeRegExp(specifier)}$`);
|
|
271
|
+
registerResolve(filter, async () => ({
|
|
272
|
+
path: joinNamespace(namespace, specifier),
|
|
273
|
+
}));
|
|
274
|
+
registerLoad(buildIdFilter(/.*/, namespace), async () => callback());
|
|
275
|
+
},
|
|
276
|
+
};
|
|
277
|
+
await ecoPlugin.setup(bridge);
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
resolveId: resolveIdHandler,
|
|
281
|
+
load: loadHandler,
|
|
282
|
+
};
|
|
283
|
+
return [plugin];
|
|
211
284
|
}
|
|
212
|
-
export {
|
|
213
|
-
createRolldownPluginBridge
|
|
214
|
-
};
|
|
@@ -1,61 +1,70 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
import { fileSystem } from
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
3
|
+
import { applySourceTransforms, normalizeTransformId, } from '../../plugins/source-transform.js';
|
|
4
|
+
/**
|
|
5
|
+
* Standard source extensions eligible for the browser post-load transform pass.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* Compound integration templates (for example `.kita.tsx`) still match because
|
|
9
|
+
* matching uses the final path suffix. Keep this aligned with integration
|
|
10
|
+
* template extensions registered in app config.
|
|
11
|
+
*/
|
|
12
|
+
const TRANSFORMABLE_SOURCE_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mdx']);
|
|
8
13
|
function shouldApplySourceTransforms(namespace, sourcePath) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
if (namespace !== undefined) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
const normalizedPath = normalizeTransformId(sourcePath);
|
|
18
|
+
return TRANSFORMABLE_SOURCE_EXTENSIONS.has(path.extname(normalizedPath).toLowerCase());
|
|
14
19
|
}
|
|
15
20
|
function shouldTransformLoadedModule(moduleType) {
|
|
16
|
-
|
|
21
|
+
return moduleType !== 'css' && moduleType !== 'asset';
|
|
17
22
|
}
|
|
18
23
|
function applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, code) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
if (sourceTransforms.length === 0) {
|
|
25
|
+
return code;
|
|
26
|
+
}
|
|
27
|
+
return applySourceTransforms(sourceTransforms, code, sourcePath);
|
|
23
28
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (!
|
|
31
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Runs app-owned source transforms after first-wins `onLoad` plugins produce
|
|
31
|
+
* module contents for one Rolldown load request.
|
|
32
|
+
*/
|
|
33
|
+
export async function finalizeLoadResultWithSourceTransforms(options) {
|
|
34
|
+
const { id, namespace, sourcePath, loadResult, sourceTransforms, contextRoot, inferModuleTypeFromPath } = options;
|
|
35
|
+
if (!shouldApplySourceTransforms(namespace, sourcePath)) {
|
|
36
|
+
return loadResult;
|
|
37
|
+
}
|
|
38
|
+
if (typeof loadResult === 'object' &&
|
|
39
|
+
loadResult !== null &&
|
|
40
|
+
'code' in loadResult &&
|
|
41
|
+
typeof loadResult.code === 'string') {
|
|
42
|
+
if (!shouldTransformLoadedModule(loadResult.moduleType)) {
|
|
43
|
+
return loadResult;
|
|
44
|
+
}
|
|
45
|
+
const transformedCode = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, loadResult.code);
|
|
46
|
+
if (transformedCode === loadResult.code) {
|
|
47
|
+
return loadResult;
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
code: transformedCode,
|
|
51
|
+
moduleType: loadResult.moduleType,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if (loadResult !== undefined || sourceTransforms.length === 0) {
|
|
55
|
+
return loadResult;
|
|
56
|
+
}
|
|
57
|
+
const normalizedPath = path.isAbsolute(sourcePath) ? sourcePath : path.resolve(contextRoot, sourcePath);
|
|
58
|
+
if (!fileSystem.exists(normalizedPath)) {
|
|
59
|
+
return loadResult;
|
|
32
60
|
}
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
61
|
+
const originalCode = fileSystem.readFileSync(normalizedPath);
|
|
62
|
+
const transformedCode = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, originalCode);
|
|
63
|
+
if (transformedCode === originalCode) {
|
|
64
|
+
return loadResult;
|
|
36
65
|
}
|
|
37
66
|
return {
|
|
38
|
-
|
|
39
|
-
|
|
67
|
+
code: transformedCode,
|
|
68
|
+
moduleType: inferModuleTypeFromPath(normalizedPath),
|
|
40
69
|
};
|
|
41
|
-
}
|
|
42
|
-
if (loadResult !== void 0 || sourceTransforms.length === 0) {
|
|
43
|
-
return loadResult;
|
|
44
|
-
}
|
|
45
|
-
const normalizedPath = path.isAbsolute(sourcePath) ? sourcePath : path.resolve(contextRoot, sourcePath);
|
|
46
|
-
if (!fileSystem.exists(normalizedPath)) {
|
|
47
|
-
return loadResult;
|
|
48
|
-
}
|
|
49
|
-
const originalCode = fileSystem.readFileSync(normalizedPath);
|
|
50
|
-
const transformedCode = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, originalCode);
|
|
51
|
-
if (transformedCode === originalCode) {
|
|
52
|
-
return loadResult;
|
|
53
|
-
}
|
|
54
|
-
return {
|
|
55
|
-
code: transformedCode,
|
|
56
|
-
moduleType: inferModuleTypeFromPath(normalizedPath)
|
|
57
|
-
};
|
|
58
70
|
}
|
|
59
|
-
export {
|
|
60
|
-
finalizeLoadResultWithSourceTransforms
|
|
61
|
-
};
|