@ecopages/core 0.2.0-beta.30 → 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/plugins/processor.js
CHANGED
|
@@ -1,160 +1,170 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
import { fileSystem } from
|
|
3
|
-
import { DEFAULT_ECOPAGES_WORK_DIR } from
|
|
4
|
-
import { GENERATED_BASE_PATHS } from
|
|
5
|
-
import { deepMerge } from
|
|
6
|
-
const PROCESSOR_ERRORS = {
|
|
7
|
-
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
3
|
+
import { DEFAULT_ECOPAGES_WORK_DIR } from '../config/constants.js';
|
|
4
|
+
import { GENERATED_BASE_PATHS } from '../config/constants.js';
|
|
5
|
+
import { deepMerge } from '../utils/deep-merge.js';
|
|
6
|
+
export const PROCESSOR_ERRORS = {
|
|
7
|
+
CACHE_DIRECTORY_NOT_SET: 'Cache directory not set in context',
|
|
8
8
|
};
|
|
9
|
-
function mergeProcessorOptions(defaults, overrides) {
|
|
10
|
-
|
|
9
|
+
export function mergeProcessorOptions(defaults, overrides) {
|
|
10
|
+
return deepMerge(defaults, overrides);
|
|
11
11
|
}
|
|
12
|
-
function resolveGeneratedPath(type, options) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
export function resolveGeneratedPath(type, options) {
|
|
13
|
+
const { root, module, subPath } = options;
|
|
14
|
+
const parts = [root, GENERATED_BASE_PATHS[type], module, subPath].filter(Boolean);
|
|
15
|
+
return path.join(...parts);
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
cache: cachePath
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Prepares build-facing processor contributions before config finalization.
|
|
48
|
-
*
|
|
49
|
-
* @remarks
|
|
50
|
-
* Override this when a processor must compute runtime/build plugins or other
|
|
51
|
-
* manifest-owned state before startup. Runtime-only work such as cache
|
|
52
|
-
* warming or watcher registration should stay in `setup()`.
|
|
53
|
-
*/
|
|
54
|
-
async prepareBuildContributions() {
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Reports whether this processor's build inputs changed since the last
|
|
58
|
-
* incremental static build.
|
|
59
|
-
*
|
|
60
|
-
* @remarks
|
|
61
|
-
* No shipped processor overrides this today. Integrations and processors can
|
|
62
|
-
* opt in when they own build inputs that should invalidate incremental static
|
|
63
|
-
* exports without a full rebuild.
|
|
64
|
-
*/
|
|
65
|
-
didChange() {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Releases runtime resources owned by the processor.
|
|
70
|
-
*
|
|
71
|
-
* @remarks
|
|
72
|
-
* Core does not call this hook today. Override only when a processor owns
|
|
73
|
-
* watchers, compiler handles, or other resources that outlive individual
|
|
74
|
-
* requests.
|
|
75
|
-
*/
|
|
76
|
-
async teardown() {
|
|
77
|
-
}
|
|
78
|
-
getCachePath(key) {
|
|
79
|
-
return `${this.context?.cache}/${key}`;
|
|
80
|
-
}
|
|
81
|
-
async readCache(key) {
|
|
82
|
-
const cachePath = this.getCachePath(key);
|
|
83
|
-
try {
|
|
84
|
-
const data = await fileSystem.readFile(cachePath);
|
|
85
|
-
return JSON.parse(data);
|
|
86
|
-
} catch {
|
|
87
|
-
return null;
|
|
17
|
+
/**
|
|
18
|
+
* Base class for content and asset processors that contribute build plugins.
|
|
19
|
+
*
|
|
20
|
+
* @remarks
|
|
21
|
+
* Processors declare plugins through two getters that map to
|
|
22
|
+
* {@link AppBuildManifest} buckets (names differ from integrations):
|
|
23
|
+
*
|
|
24
|
+
* - `plugins` → `runtimePlugins` (server **and** browser builds)
|
|
25
|
+
* - `buildPlugins` → `browserBundlePlugins` (browser bundles only)
|
|
26
|
+
*
|
|
27
|
+
* Virtual modules that must resolve during route-module transpile belong in
|
|
28
|
+
* `plugins`. Browser-only bundler hooks belong in `buildPlugins`.
|
|
29
|
+
*/
|
|
30
|
+
export class Processor {
|
|
31
|
+
name;
|
|
32
|
+
context;
|
|
33
|
+
options;
|
|
34
|
+
watchConfig;
|
|
35
|
+
capabilities = [];
|
|
36
|
+
runtimeCapability;
|
|
37
|
+
constructor(config) {
|
|
38
|
+
this.name = config.name;
|
|
39
|
+
this.options = config.options;
|
|
40
|
+
this.watchConfig = config.watch;
|
|
41
|
+
this.capabilities = config.capabilities ?? [];
|
|
42
|
+
this.runtimeCapability = config.runtimeCapability;
|
|
88
43
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
44
|
+
setContext(appConfig) {
|
|
45
|
+
const workDir = appConfig.absolutePaths.workDir ??
|
|
46
|
+
path.join(appConfig.rootDir, appConfig.workDir ?? DEFAULT_ECOPAGES_WORK_DIR);
|
|
47
|
+
const cachePath = resolveGeneratedPath('cache', {
|
|
48
|
+
root: workDir,
|
|
49
|
+
module: this.name,
|
|
50
|
+
});
|
|
51
|
+
fileSystem.ensureDir(cachePath);
|
|
52
|
+
this.context = {
|
|
53
|
+
config: appConfig,
|
|
54
|
+
rootDir: appConfig.rootDir,
|
|
55
|
+
srcDir: appConfig.absolutePaths.srcDir,
|
|
56
|
+
distDir: appConfig.absolutePaths.distDir,
|
|
57
|
+
cache: cachePath,
|
|
58
|
+
};
|
|
93
59
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Prepares build-facing processor contributions before config finalization.
|
|
62
|
+
*
|
|
63
|
+
* @remarks
|
|
64
|
+
* Override this when a processor must compute runtime/build plugins or other
|
|
65
|
+
* manifest-owned state before startup. Runtime-only work such as cache
|
|
66
|
+
* warming or watcher registration should stay in `setup()`.
|
|
67
|
+
*/
|
|
68
|
+
async prepareBuildContributions() { }
|
|
69
|
+
/**
|
|
70
|
+
* Reports whether this processor's build inputs changed since the last
|
|
71
|
+
* incremental static build.
|
|
72
|
+
*
|
|
73
|
+
* @remarks
|
|
74
|
+
* No shipped processor overrides this today. Integrations and processors can
|
|
75
|
+
* opt in when they own build inputs that should invalidate incremental static
|
|
76
|
+
* exports without a full rebuild.
|
|
77
|
+
*/
|
|
78
|
+
didChange() {
|
|
79
|
+
return false;
|
|
113
80
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Releases runtime resources owned by the processor.
|
|
83
|
+
*
|
|
84
|
+
* @remarks
|
|
85
|
+
* Core does not call this hook today. Override only when a processor owns
|
|
86
|
+
* watchers, compiler handles, or other resources that outlive individual
|
|
87
|
+
* requests.
|
|
88
|
+
*/
|
|
89
|
+
async teardown() { }
|
|
90
|
+
getCachePath(key) {
|
|
91
|
+
return `${this.context?.cache}/${key}`;
|
|
117
92
|
}
|
|
118
|
-
|
|
119
|
-
|
|
93
|
+
async readCache(key) {
|
|
94
|
+
const cachePath = this.getCachePath(key);
|
|
95
|
+
try {
|
|
96
|
+
const data = await fileSystem.readFile(cachePath);
|
|
97
|
+
return JSON.parse(data);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
120
102
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
103
|
+
async writeCache(key, data) {
|
|
104
|
+
if (!this.context?.cache) {
|
|
105
|
+
throw new Error(PROCESSOR_ERRORS.CACHE_DIRECTORY_NOT_SET);
|
|
106
|
+
}
|
|
107
|
+
const cachePath = this.getCachePath(key);
|
|
108
|
+
fileSystem.write(cachePath, JSON.stringify(data, null, 2));
|
|
126
109
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return
|
|
132
|
-
|
|
133
|
-
|
|
110
|
+
getWatchConfig() {
|
|
111
|
+
return this.watchConfig;
|
|
112
|
+
}
|
|
113
|
+
getName() {
|
|
114
|
+
return this.name;
|
|
115
|
+
}
|
|
116
|
+
getAssetCapabilities() {
|
|
117
|
+
return this.capabilities;
|
|
118
|
+
}
|
|
119
|
+
matchesFileFilter(_filepath) {
|
|
134
120
|
return true;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
121
|
+
}
|
|
122
|
+
canProcessAsset(kind, filepath) {
|
|
123
|
+
const capabilities = this.getAssetCapabilities();
|
|
124
|
+
if (capabilities.length === 0) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
const matchingKind = capabilities.filter((capability) => capability.kind === kind);
|
|
128
|
+
if (matchingKind.length === 0) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
if (!filepath) {
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
return matchingKind.some((capability) => this.matchesCapabilityExtensions(filepath, capability.extensions));
|
|
135
|
+
}
|
|
136
|
+
matchesCapabilityExtensions(filepath, extensions) {
|
|
137
|
+
if (!extensions || extensions.length === 0) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
const normalizedExt = path.extname(filepath).toLowerCase();
|
|
141
|
+
return extensions.some((rawPattern) => {
|
|
142
|
+
const pattern = this.normalizeExtensionPattern(rawPattern);
|
|
143
|
+
if (!pattern) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
if (pattern === '*') {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
const groupedMatch = pattern.match(/^\*\.\{(.+)\}$/);
|
|
150
|
+
if (groupedMatch) {
|
|
151
|
+
const groupItems = groupedMatch[1]
|
|
152
|
+
.split(',')
|
|
153
|
+
.map((item) => this.normalizeExtensionPattern(item))
|
|
154
|
+
.filter(Boolean);
|
|
155
|
+
return groupItems.some((item) => normalizedExt === item || normalizedExt === `.${item}`);
|
|
156
|
+
}
|
|
157
|
+
if (pattern.startsWith('*')) {
|
|
158
|
+
const suffix = pattern.slice(1);
|
|
159
|
+
return normalizedExt.endsWith(suffix);
|
|
160
|
+
}
|
|
161
|
+
if (pattern.startsWith('.')) {
|
|
162
|
+
return normalizedExt === pattern;
|
|
163
|
+
}
|
|
164
|
+
return normalizedExt === `.${pattern}`;
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
normalizeExtensionPattern(rawPattern) {
|
|
168
|
+
return rawPattern.trim().toLowerCase();
|
|
169
|
+
}
|
|
154
170
|
}
|
|
155
|
-
export {
|
|
156
|
-
PROCESSOR_ERRORS,
|
|
157
|
-
Processor,
|
|
158
|
-
mergeProcessorOptions,
|
|
159
|
-
resolveGeneratedPath
|
|
160
|
-
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,93 +1,123 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
import { fileSystem } from
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
3
|
+
/**
|
|
4
|
+
* Normalizes bundler module ids so one transform can serve Ecopages loaders,
|
|
5
|
+
* Vite, and future bundler adapters.
|
|
6
|
+
*/
|
|
7
|
+
export function normalizeTransformId(id) {
|
|
8
|
+
const queryIndex = id.indexOf('?');
|
|
9
|
+
const hashIndex = id.indexOf('#');
|
|
10
|
+
const endIndex = [queryIndex, hashIndex].filter((index) => index >= 0).sort((left, right) => left - right)[0];
|
|
11
|
+
return endIndex === undefined ? id : id.slice(0, endIndex);
|
|
8
12
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Applies one source transform if the normalized id matches its filter.
|
|
15
|
+
*/
|
|
16
|
+
export function applySourceTransform(transform, code, id) {
|
|
17
|
+
const normalizedId = normalizeTransformId(id);
|
|
18
|
+
if (!transform.filter.test(normalizedId)) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
return transform.transform(code, normalizedId);
|
|
15
22
|
}
|
|
16
23
|
const SOURCE_TRANSFORM_ENFORCE_ORDER = {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
24
|
+
pre: 0,
|
|
25
|
+
default: 1,
|
|
26
|
+
post: 2,
|
|
20
27
|
};
|
|
21
28
|
function getSourceTransformEnforceOrder(transform) {
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
function applySourceTransforms(transforms, code, id) {
|
|
25
|
-
let current = code;
|
|
26
|
-
for (const transform of [...transforms].sort(
|
|
27
|
-
(left, right) => getSourceTransformEnforceOrder(left) - getSourceTransformEnforceOrder(right)
|
|
28
|
-
)) {
|
|
29
|
-
const result = applySourceTransform(transform, current, id);
|
|
30
|
-
if (!result) {
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
current = typeof result === "string" ? result : result.code;
|
|
34
|
-
}
|
|
35
|
-
return current;
|
|
36
|
-
}
|
|
37
|
-
function inferLoaderFromPath(filePath) {
|
|
38
|
-
const extension = path.extname(filePath).toLowerCase();
|
|
39
|
-
switch (extension) {
|
|
40
|
-
case ".ts":
|
|
41
|
-
return "ts";
|
|
42
|
-
case ".tsx":
|
|
43
|
-
return "tsx";
|
|
44
|
-
case ".jsx":
|
|
45
|
-
return "jsx";
|
|
46
|
-
default:
|
|
47
|
-
return "js";
|
|
48
|
-
}
|
|
29
|
+
return SOURCE_TRANSFORM_ENFORCE_ORDER[transform.enforce ?? 'default'];
|
|
49
30
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Applies app-owned source transforms in deterministic `pre` → default → `post` order.
|
|
33
|
+
*
|
|
34
|
+
* @remarks
|
|
35
|
+
* Used by the Rolldown plugin bridge after `onLoad` plugins produce final module
|
|
36
|
+
* contents. Transforms that do not match `filter` are skipped; matching transforms
|
|
37
|
+
* are chained left-to-right on the current source string.
|
|
38
|
+
*
|
|
39
|
+
* @param transforms - App-owned transforms, usually from {@link getAppSourceTransforms}.
|
|
40
|
+
* @param code - Current module source.
|
|
41
|
+
* @param id - Module id forwarded to each transform after query/hash normalization.
|
|
42
|
+
* @returns The transformed source, or the original `code` when no transform matches.
|
|
43
|
+
*/
|
|
44
|
+
export function applySourceTransforms(transforms, code, id) {
|
|
45
|
+
let current = code;
|
|
46
|
+
for (const transform of [...transforms].sort((left, right) => getSourceTransformEnforceOrder(left) - getSourceTransformEnforceOrder(right))) {
|
|
47
|
+
const result = applySourceTransform(transform, current, id);
|
|
58
48
|
if (!result) {
|
|
59
|
-
|
|
49
|
+
continue;
|
|
60
50
|
}
|
|
61
|
-
|
|
62
|
-
contents: typeof result === "string" ? result : result.code,
|
|
63
|
-
loader: inferLoaderFromPath(filePath),
|
|
64
|
-
resolveDir: path.dirname(filePath)
|
|
65
|
-
};
|
|
66
|
-
});
|
|
51
|
+
current = typeof result === 'string' ? result : result.code;
|
|
67
52
|
}
|
|
68
|
-
|
|
53
|
+
return current;
|
|
69
54
|
}
|
|
70
|
-
function
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
55
|
+
function inferLoaderFromPath(filePath) {
|
|
56
|
+
const extension = path.extname(filePath).toLowerCase();
|
|
57
|
+
switch (extension) {
|
|
58
|
+
case '.ts':
|
|
59
|
+
return 'ts';
|
|
60
|
+
case '.tsx':
|
|
61
|
+
return 'tsx';
|
|
62
|
+
case '.jsx':
|
|
63
|
+
return 'jsx';
|
|
64
|
+
default:
|
|
65
|
+
return 'js';
|
|
76
66
|
}
|
|
77
|
-
};
|
|
78
67
|
}
|
|
79
|
-
|
|
80
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Adapts a source transform into the existing Ecopages build-plugin contract.
|
|
70
|
+
*
|
|
71
|
+
* @remarks
|
|
72
|
+
* Server-oriented builds and loader registration still use this adapter.
|
|
73
|
+
* Browser/HMR builds should register the transform in `appConfig.sourceTransforms`
|
|
74
|
+
* instead so the Rolldown bridge can run it after competing `onLoad` plugins.
|
|
75
|
+
*/
|
|
76
|
+
export function createEcoBuildPluginFromSourceTransform(transform) {
|
|
77
|
+
return {
|
|
78
|
+
name: transform.name,
|
|
79
|
+
setup(build) {
|
|
80
|
+
build.onLoad({ filter: transform.filter }, (args) => {
|
|
81
|
+
const filePath = normalizeTransformId(args.path);
|
|
82
|
+
const code = fileSystem.readFileSync(filePath);
|
|
83
|
+
const result = applySourceTransform(transform, code, filePath);
|
|
84
|
+
if (!result) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
contents: typeof result === 'string' ? result : result.code,
|
|
89
|
+
loader: inferLoaderFromPath(filePath),
|
|
90
|
+
resolveDir: path.dirname(filePath),
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
},
|
|
94
|
+
};
|
|
81
95
|
}
|
|
82
|
-
|
|
83
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Adapts a source transform into a Vite-compatible plugin object.
|
|
98
|
+
*
|
|
99
|
+
* @remarks
|
|
100
|
+
* This intentionally returns a plain object shape so core does not need a hard
|
|
101
|
+
* dependency on `vite` just to author transform primitives.
|
|
102
|
+
*/
|
|
103
|
+
export function createVitePluginFromSourceTransform(transform) {
|
|
104
|
+
return {
|
|
105
|
+
name: transform.name,
|
|
106
|
+
enforce: transform.enforce,
|
|
107
|
+
transform(code, id) {
|
|
108
|
+
return applySourceTransform(transform, code, id);
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Returns the app-owned source transforms in stable registration order.
|
|
114
|
+
*/
|
|
115
|
+
export function getAppSourceTransforms(appConfig) {
|
|
116
|
+
return appConfig.sourceTransforms ? Array.from(appConfig.sourceTransforms.values()) : [];
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Adapts the app-owned source transforms into Vite-compatible plugin objects.
|
|
120
|
+
*/
|
|
121
|
+
export function createVitePluginsFromAppSourceTransforms(appConfig) {
|
|
122
|
+
return getAppSourceTransforms(appConfig).map((transform) => createVitePluginFromSourceTransform(transform));
|
|
84
123
|
}
|
|
85
|
-
export {
|
|
86
|
-
applySourceTransform,
|
|
87
|
-
applySourceTransforms,
|
|
88
|
-
createEcoBuildPluginFromSourceTransform,
|
|
89
|
-
createVitePluginFromSourceTransform,
|
|
90
|
-
createVitePluginsFromAppSourceTransforms,
|
|
91
|
-
getAppSourceTransforms,
|
|
92
|
-
normalizeTransformId
|
|
93
|
-
};
|
|
@@ -8,6 +8,23 @@ export declare function matchesTsconfigPathPrefix(specifier: string, prefixes: r
|
|
|
8
8
|
* a relative path, absolute path, node built-in, tsconfig alias, or `#` import map.
|
|
9
9
|
*/
|
|
10
10
|
export declare function isBarePackageImportSpecifier(specifier: string, projectRoot?: string): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Resolves a bare npm package entry for browser vendor prebundles.
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* Prefer package `"browser"` / `"exports.browser"` over Node `"import"` entries.
|
|
16
|
+
* `createRequire().resolve()` is wrong here — it selects the server facade for
|
|
17
|
+
* dual packages such as `@ecopages/core`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveBarePackageBrowserEntry(projectRoot: string, specifier: string): string | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Resolves a relative import against the filesystem without requiring tsconfig.
|
|
22
|
+
*
|
|
23
|
+
* @remarks
|
|
24
|
+
* Used when oxc-resolver has no tsconfig (minimal fixtures / apps without paths)
|
|
25
|
+
* and as a fallback when the resolver cannot locate a relative specifier.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveRelativeModulePath(fromFile: string, specifier: string): string | undefined;
|
|
11
28
|
/**
|
|
12
29
|
* Resolves a relative or tsconfig path alias import (via oxc-resolver).
|
|
13
30
|
*/
|