@ecopages/core 0.2.0-alpha.8 → 0.2.1-beta.0
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 +79 -28
- package/package.json +94 -116
- package/src/adapters/README.md +2 -2
- package/src/adapters/abstract/application-adapter.d.ts +28 -2
- package/src/adapters/abstract/application-adapter.js +14 -2
- package/src/adapters/abstract/router-adapter.d.ts +1 -1
- package/src/adapters/abstract/server-adapter.d.ts +2 -2
- package/src/adapters/bun/client-bridge.d.ts +1 -1
- package/src/adapters/bun/create-app.d.ts +12 -12
- package/src/adapters/bun/create-app.js +64 -41
- package/src/adapters/bun/hmr-manager.d.ts +19 -115
- package/src/adapters/bun/hmr-manager.js +25 -301
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +2 -2
- package/src/adapters/bun/runtime-host.d.ts +52 -0
- package/src/adapters/bun/runtime-host.js +56 -0
- package/src/adapters/bun/server-adapter.d.ts +100 -32
- package/src/adapters/bun/server-adapter.js +142 -65
- package/src/adapters/bun/static-preview-host.d.ts +28 -0
- package/src/adapters/bun/static-preview-host.js +45 -0
- package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
- package/src/{create-app.js → adapters/create-app.js} +4 -4
- package/src/adapters/index.d.ts +1 -5
- package/src/adapters/index.js +1 -7
- package/src/adapters/node/create-app.d.ts +15 -12
- package/src/adapters/node/create-app.js +34 -85
- package/src/adapters/node/http-request-bridge.d.ts +57 -0
- package/src/adapters/node/http-request-bridge.js +118 -0
- package/src/adapters/node/node-client-bridge.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.d.ts +22 -103
- package/src/adapters/node/node-hmr-manager.js +26 -289
- package/src/adapters/node/runtime-host.d.ts +57 -0
- package/src/adapters/node/runtime-host.js +92 -0
- package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
- package/src/adapters/node/server-adapter-dependencies.js +18 -0
- package/src/adapters/node/server-adapter.d.ts +19 -42
- package/src/adapters/node/server-adapter.js +94 -139
- package/src/adapters/node/static-content-server.d.ts +1 -1
- package/src/adapters/node/static-content-server.js +1 -1
- package/src/adapters/node/static-preview-host.d.ts +55 -0
- package/src/adapters/node/static-preview-host.js +68 -0
- package/src/adapters/shared/application-adapter.d.ts +1 -1
- package/src/adapters/shared/define-api-handler.d.ts +1 -1
- package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
- package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
- package/src/adapters/shared/explicit-static-route-matcher.js +14 -16
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
- package/src/adapters/shared/file-route-middleware-pipeline.js +2 -11
- package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
- package/src/adapters/shared/fs-server-response-factory.js +11 -27
- package/src/adapters/shared/fs-server-response-matcher.d.ts +18 -18
- package/src/adapters/shared/fs-server-response-matcher.js +72 -46
- package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
- package/src/adapters/shared/hmr-html-response.d.ts +1 -1
- package/src/adapters/shared/hmr-html-response.js +4 -3
- package/src/adapters/shared/render-context.d.ts +5 -3
- package/src/adapters/shared/render-context.js +24 -1
- package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
- package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
- package/src/adapters/shared/runtime-host.d.ts +12 -0
- package/src/adapters/shared/server-adapter.d.ts +22 -11
- package/src/adapters/shared/server-adapter.js +183 -133
- package/src/adapters/shared/server-route-handler.d.ts +5 -5
- package/src/adapters/shared/server-route-handler.js +4 -4
- package/src/adapters/shared/server-static-builder.d.ts +8 -7
- package/src/adapters/shared/server-static-builder.js +6 -5
- package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
- package/src/adapters/shared/shared-hmr-manager.js +241 -0
- package/src/adapters/shared/static-preview-host.d.ts +10 -0
- package/src/build/README.md +57 -67
- package/src/build/browser-runtime-manifest.d.ts +31 -0
- package/src/build/browser-runtime-manifest.js +61 -0
- package/src/build/browser-runtime-plugin-helpers.d.ts +26 -0
- package/src/build/browser-runtime-plugin-helpers.js +14 -0
- package/src/build/browser-runtime-plugin.d.ts +78 -0
- package/src/build/browser-runtime-plugin.js +173 -0
- package/src/build/build-adapter.d.ts +384 -63
- package/src/build/build-adapter.js +129 -54
- package/src/build/build-manifest.d.ts +6 -0
- package/src/build/build-manifest.js +21 -2
- package/src/build/build-types.d.ts +2 -2
- package/src/build/rolldown-adapter-helpers.d.ts +58 -0
- package/src/build/rolldown-adapter-helpers.js +265 -0
- package/src/build/rolldown-build-adapter.d.ts +28 -0
- package/src/build/rolldown-build-adapter.js +65 -0
- package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
- package/src/build/rolldown-dev-build-adapter.js +166 -0
- package/src/build/rolldown-plugin-bridge.d.ts +59 -0
- package/src/build/rolldown-plugin-bridge.js +199 -0
- package/src/build/runtime-build-executor.d.ts +15 -7
- package/src/build/runtime-build-executor.js +8 -9
- package/src/build/runtime-build-output-normalizer.d.ts +3 -0
- package/src/build/runtime-build-output-normalizer.js +111 -0
- package/src/build/serialized-build-executor.d.ts +64 -0
- package/src/build/serialized-build-executor.js +63 -0
- package/src/build/server-side-css-shim-plugin.d.ts +41 -0
- package/src/build/server-side-css-shim-plugin.js +35 -0
- package/src/cache/index.d.ts +6 -0
- package/src/cache/index.js +6 -0
- package/src/cache/module-parse-cache.d.ts +65 -0
- package/src/cache/module-parse-cache.js +75 -0
- package/src/config/README.md +5 -2
- package/src/config/config-builder.d.ts +41 -13
- package/src/config/config-builder.js +62 -24
- package/src/declarations.d.ts +1 -1
- package/src/dev/host-runtime.d.ts +10 -0
- package/src/dev/host-runtime.js +24 -0
- package/src/dev/sc-server.d.ts +1 -1
- package/src/dev/sc-server.js +1 -1
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +88 -0
- package/src/eco/eco.js +50 -45
- package/src/eco/eco.types.d.ts +60 -8
- package/src/eco/eco.utils.d.ts +1 -40
- package/src/eco/eco.utils.js +5 -35
- package/src/eco/global-injector-map.d.ts +3 -3
- package/src/eco/global-injector-map.js +2 -2
- package/src/eco/lazy-injector-map.d.ts +2 -2
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +3 -1
- package/src/hmr/client/hmr-runtime.js +9 -1
- package/src/hmr/hmr-strategy.d.ts +16 -13
- package/src/hmr/hmr-strategy.js +22 -7
- package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
- package/src/hmr/strategies/default-hmr-strategy.js +1 -1
- package/src/hmr/strategies/js-hmr-strategy.d.ts +4 -9
- package/src/hmr/strategies/js-hmr-strategy.js +5 -10
- package/src/index.browser.d.ts +2 -2
- package/src/index.browser.js +1 -1
- package/src/index.d.ts +3 -2
- package/src/index.js +15 -4
- package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
- package/src/integrations/ghtml/ghtml-renderer.js +24 -29
- package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
- package/src/integrations/ghtml/ghtml.constants.js +4 -0
- package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
- package/src/integrations/ghtml/ghtml.plugin.js +3 -4
- package/src/plugins/README.md +1 -0
- package/src/plugins/alias-resolver-cache.d.ts +68 -0
- package/src/plugins/alias-resolver-cache.js +106 -0
- package/src/plugins/alias-resolver-plugin.d.ts +5 -1
- package/src/plugins/alias-resolver-plugin.js +19 -7
- package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
- package/src/plugins/eco-component-meta-plugin.js +43 -25
- package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
- package/src/plugins/foreign-jsx-override-plugin.js +41 -0
- package/src/plugins/integration-plugin.d.ts +136 -42
- package/src/plugins/integration-plugin.js +99 -31
- package/src/plugins/processor.d.ts +4 -2
- package/src/plugins/processor.js +8 -3
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/GRAPH.md +80 -318
- package/src/route-renderer/README.md +74 -78
- package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
- package/src/route-renderer/orchestration/component-render-context.js +147 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +290 -128
- package/src/route-renderer/orchestration/integration-renderer.js +660 -258
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
- package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
- package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
- package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
- package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
- package/src/route-renderer/orchestration/render-output.utils.js +171 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
- package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
- package/src/route-renderer/orchestration/template-serialization.js +45 -0
- package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
- package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
- package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
- package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
- package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
- package/src/route-renderer/page-loading/page-module-loader.d.ts +7 -4
- package/src/route-renderer/page-loading/page-module-loader.js +8 -5
- package/src/route-renderer/route-renderer.d.ts +31 -23
- package/src/route-renderer/route-renderer.js +17 -24
- package/src/router/README.md +76 -8
- package/src/router/client/navigation-coordinator.d.ts +20 -0
- package/src/router/client/navigation-coordinator.js +2 -2
- package/src/router/server/route-registry.d.ts +78 -0
- package/src/router/server/route-registry.js +262 -0
- package/src/services/README.md +1 -2
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -20
- package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
- package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
- package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
- package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
- package/src/services/assets/asset-processing-service/index.d.ts +6 -5
- package/src/services/assets/asset-processing-service/index.js +6 -5
- package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
- package/src/services/assets/asset-processing-service/page-package.js +80 -0
- package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
- package/src/services/assets/asset-processing-service/processors/index.js +5 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +3 -2
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +66 -3
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +39 -5
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
- package/src/services/assets/browser-bundle.service.d.ts +44 -3
- package/src/services/assets/browser-bundle.service.js +15 -7
- package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
- package/src/services/html/html-rewriter-provider.service.js +4 -1
- package/src/services/html/html-transformer.service.d.ts +22 -3
- package/src/services/html/html-transformer.service.js +101 -35
- package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
- package/src/services/invalidation/development-invalidation.service.js +1 -0
- package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
- package/src/services/module-loading/app-module-loader.service.js +0 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
- package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
- package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
- package/src/services/module-loading/host-module-loader-registry.js +15 -0
- package/src/services/module-loading/module-loading-types.d.ts +2 -0
- package/src/services/module-loading/module-loading-types.js +0 -0
- package/src/services/module-loading/page-module-import.service.d.ts +32 -8
- package/src/services/module-loading/page-module-import.service.js +83 -22
- package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
- package/src/services/module-loading/server-module-transpiler.service.js +5 -2
- package/src/services/module-loading/source-module-support.d.ts +5 -0
- package/src/services/module-loading/source-module-support.js +8 -0
- package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
- package/src/services/runtime-state/dev-graph.service.js +10 -10
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
- package/src/static-site-generator/static-site-generator.d.ts +23 -28
- package/src/static-site-generator/static-site-generator.js +119 -156
- package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
- package/src/types/internal-types.js +0 -0
- package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
- package/src/types/public-types.js +0 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +6 -0
- package/src/utils/locals-utils.d.ts +1 -1
- package/src/utils/parse-cli-args.d.ts +4 -1
- package/src/utils/parse-cli-args.js +16 -1
- package/src/utils/resolve-work-dir.js +1 -1
- package/src/watchers/project-watcher.d.ts +4 -4
- package/src/watchers/project-watcher.js +35 -41
- package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
- package/src/watchers/project-watcher.test-helpers.js +5 -5
- package/CHANGELOG.md +0 -31
- package/src/adapters/abstract/application-adapter.ts +0 -337
- package/src/adapters/abstract/router-adapter.ts +0 -30
- package/src/adapters/abstract/server-adapter.ts +0 -79
- package/src/adapters/bun/client-bridge.ts +0 -62
- package/src/adapters/bun/create-app.ts +0 -189
- package/src/adapters/bun/hmr-manager.ts +0 -409
- package/src/adapters/bun/index.ts +0 -2
- package/src/adapters/bun/server-adapter.ts +0 -499
- package/src/adapters/bun/server-lifecycle.d.ts +0 -63
- package/src/adapters/bun/server-lifecycle.js +0 -92
- package/src/adapters/bun/server-lifecycle.ts +0 -124
- package/src/adapters/index.ts +0 -6
- package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
- package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
- package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
- package/src/adapters/node/create-app.ts +0 -179
- package/src/adapters/node/index.d.ts +0 -6
- package/src/adapters/node/index.js +0 -11
- package/src/adapters/node/index.ts +0 -16
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.ts +0 -381
- package/src/adapters/node/runtime-adapter.d.ts +0 -46
- package/src/adapters/node/runtime-adapter.js +0 -306
- package/src/adapters/node/runtime-adapter.ts +0 -439
- package/src/adapters/node/server-adapter.ts +0 -488
- package/src/adapters/node/static-content-server.ts +0 -239
- package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
- package/src/adapters/node/write-runtime-manifest.js +0 -12
- package/src/adapters/node/write-runtime-manifest.ts +0 -38
- package/src/adapters/shared/api-response.ts +0 -104
- package/src/adapters/shared/application-adapter.ts +0 -199
- package/src/adapters/shared/define-api-handler.ts +0 -66
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
- package/src/adapters/shared/fs-server-response-factory.ts +0 -118
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
- package/src/adapters/shared/hmr-html-response.ts +0 -52
- package/src/adapters/shared/render-context.ts +0 -120
- package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
- package/src/adapters/shared/runtime-bootstrap.js +0 -43
- package/src/adapters/shared/runtime-bootstrap.ts +0 -79
- package/src/adapters/shared/server-adapter.ts +0 -489
- package/src/adapters/shared/server-route-handler.ts +0 -153
- package/src/adapters/shared/server-static-builder.ts +0 -166
- package/src/build/build-adapter.ts +0 -361
- package/src/build/build-manifest.ts +0 -54
- package/src/build/build-types.ts +0 -83
- package/src/build/dev-build-coordinator.d.ts +0 -74
- package/src/build/dev-build-coordinator.js +0 -161
- package/src/build/dev-build-coordinator.ts +0 -221
- package/src/build/esbuild-build-adapter.d.ts +0 -72
- package/src/build/esbuild-build-adapter.js +0 -422
- package/src/build/esbuild-build-adapter.ts +0 -559
- package/src/build/runtime-build-executor.ts +0 -34
- package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
- package/src/build/runtime-specifier-alias-plugin.js +0 -31
- package/src/build/runtime-specifier-alias-plugin.ts +0 -58
- package/src/config/config-builder.ts +0 -706
- package/src/constants.ts +0 -54
- package/src/create-app.ts +0 -87
- package/src/dev/sc-server.ts +0 -143
- package/src/eco/component-render-context.d.ts +0 -105
- package/src/eco/component-render-context.js +0 -87
- package/src/eco/component-render-context.ts +0 -224
- package/src/eco/eco.ts +0 -242
- package/src/eco/eco.types.ts +0 -221
- package/src/eco/eco.utils.ts +0 -89
- package/src/eco/global-injector-map.ts +0 -112
- package/src/eco/lazy-injector-map.ts +0 -120
- package/src/eco/module-dependencies.ts +0 -75
- package/src/errors/http-error.ts +0 -72
- package/src/errors/index.ts +0 -2
- package/src/errors/locals-access-error.ts +0 -7
- package/src/global/app-logger.ts +0 -4
- package/src/hmr/client/hmr-runtime.ts +0 -152
- package/src/hmr/hmr-strategy.ts +0 -172
- package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
- package/src/hmr/hmr.test.e2e.ts +0 -66
- package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
- package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
- package/src/index.browser.ts +0 -3
- package/src/index.ts +0 -5
- package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
- package/src/internal-types.ts +0 -232
- package/src/plugins/alias-resolver-plugin.ts +0 -63
- package/src/plugins/eco-component-meta-plugin.ts +0 -481
- package/src/plugins/integration-plugin.ts +0 -226
- package/src/plugins/processor.ts +0 -240
- package/src/plugins/runtime-capability.ts +0 -14
- package/src/public-types.ts +0 -1317
- package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
- package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
- package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
- package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
- package/src/route-renderer/component-graph/component-graph.js +0 -72
- package/src/route-renderer/component-graph/component-graph.ts +0 -159
- package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
- package/src/route-renderer/component-graph/component-marker.js +0 -46
- package/src/route-renderer/component-graph/component-marker.ts +0 -117
- package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
- package/src/route-renderer/component-graph/component-reference.js +0 -19
- package/src/route-renderer/component-graph/component-reference.ts +0 -29
- package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
- package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
- package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
- package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
- package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
- package/src/route-renderer/orchestration/render-execution.service.js +0 -121
- package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
- package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
- package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
- package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
- package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
- package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
- package/src/route-renderer/route-renderer.ts +0 -115
- package/src/router/client/link-intent.test.browser.ts +0 -51
- package/src/router/client/link-intent.ts +0 -92
- package/src/router/client/navigation-coordinator.ts +0 -433
- package/src/router/server/fs-router-scanner.d.ts +0 -41
- package/src/router/server/fs-router-scanner.js +0 -156
- package/src/router/server/fs-router-scanner.ts +0 -219
- package/src/router/server/fs-router.d.ts +0 -26
- package/src/router/server/fs-router.js +0 -100
- package/src/router/server/fs-router.ts +0 -122
- package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
- package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
- package/src/services/assets/asset-processing-service/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
- package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
- package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
- package/src/services/assets/browser-bundle.service.ts +0 -53
- package/src/services/cache/cache.types.ts +0 -126
- package/src/services/cache/index.ts +0 -18
- package/src/services/cache/memory-cache-store.ts +0 -130
- package/src/services/cache/page-cache-service.ts +0 -202
- package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
- package/src/services/html/html-rewriter-provider.service.ts +0 -103
- package/src/services/html/html-transformer.service.ts +0 -279
- package/src/services/invalidation/development-invalidation.service.ts +0 -261
- package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
- package/src/services/module-loading/page-module-import.service.ts +0 -200
- package/src/services/module-loading/server-loader.service.d.ts +0 -96
- package/src/services/module-loading/server-loader.service.js +0 -32
- package/src/services/module-loading/server-loader.service.ts +0 -130
- package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
- package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
- package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
- package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
- package/src/services/runtime-state/dev-graph.service.ts +0 -217
- package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
- package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
- package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
- package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
- package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
- package/src/services/validation/schema-validation-service.ts +0 -204
- package/src/services/validation/standard-schema.types.ts +0 -68
- package/src/static-site-generator/static-site-generator.ts +0 -462
- package/src/utils/css.d.ts +0 -1
- package/src/utils/css.js +0 -7
- package/src/utils/css.ts +0 -5
- package/src/utils/deep-merge.ts +0 -47
- package/src/utils/hash.ts +0 -5
- package/src/utils/html.ts +0 -1
- package/src/utils/invariant.ts +0 -15
- package/src/utils/locals-utils.ts +0 -37
- package/src/utils/parse-cli-args.ts +0 -83
- package/src/utils/path-utils.module.ts +0 -14
- package/src/utils/resolve-work-dir.ts +0 -45
- package/src/utils/runtime.ts +0 -44
- package/src/utils/server-utils.module.ts +0 -67
- package/src/watchers/project-watcher.test-helpers.ts +0 -41
- package/src/watchers/project-watcher.ts +0 -363
- /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
- /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
- /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
- /package/src/{constants.js → config/constants.js} +0 -0
|
@@ -1,11 +1,50 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
1
|
+
import type { BuildResult, BuildTranspileProfile } from '../../build/build-adapter.js';
|
|
2
|
+
import type { EcoBuildPlugin } from '../../build/build-types.js';
|
|
3
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
4
|
+
export type BrowserBundleOptions = {
|
|
5
|
+
entrypoints: string[] | Record<string, string>;
|
|
6
|
+
outdir?: string;
|
|
7
|
+
outbase?: string;
|
|
8
|
+
naming?: string;
|
|
9
|
+
conditions?: string[];
|
|
10
|
+
define?: Record<string, string>;
|
|
11
|
+
minify?: boolean;
|
|
12
|
+
treeshaking?: boolean;
|
|
13
|
+
splitting?: boolean;
|
|
14
|
+
root?: string;
|
|
15
|
+
bundle?: boolean;
|
|
16
|
+
externalPackages?: boolean;
|
|
17
|
+
external?: string[];
|
|
18
|
+
plugins?: EcoBuildPlugin[];
|
|
19
|
+
[key: string]: unknown;
|
|
4
20
|
profile: BuildTranspileProfile;
|
|
21
|
+
excludeAppBuildPlugins?: string[];
|
|
22
|
+
};
|
|
23
|
+
type BrowserBundleGroupedOptions = {
|
|
24
|
+
outdir?: string;
|
|
25
|
+
outbase?: string;
|
|
26
|
+
naming?: string;
|
|
27
|
+
conditions?: string[];
|
|
28
|
+
define?: Record<string, string>;
|
|
29
|
+
minify?: boolean;
|
|
30
|
+
treeshaking?: boolean;
|
|
31
|
+
splitting?: boolean;
|
|
32
|
+
root?: string;
|
|
33
|
+
bundle?: boolean;
|
|
34
|
+
externalPackages?: boolean;
|
|
35
|
+
external?: string[];
|
|
36
|
+
plugins?: EcoBuildPlugin[];
|
|
37
|
+
[key: string]: unknown;
|
|
38
|
+
profile: BuildTranspileProfile;
|
|
39
|
+
excludeAppBuildPlugins?: string[];
|
|
5
40
|
};
|
|
6
41
|
export interface BrowserBundleExecutor {
|
|
7
42
|
bundle(options: BrowserBundleOptions): Promise<BuildResult>;
|
|
8
43
|
}
|
|
44
|
+
export type BrowserBundleGroupedEntry = {
|
|
45
|
+
entrypoint: string;
|
|
46
|
+
entryName: string;
|
|
47
|
+
};
|
|
9
48
|
/**
|
|
10
49
|
* App-owned boundary for browser-oriented bundle work.
|
|
11
50
|
*
|
|
@@ -29,4 +68,6 @@ export declare class BrowserBundleService implements BrowserBundleExecutor {
|
|
|
29
68
|
* site.
|
|
30
69
|
*/
|
|
31
70
|
bundle(options: BrowserBundleOptions): Promise<BuildResult>;
|
|
71
|
+
bundleGroupedEntries(entries: BrowserBundleGroupedEntry[], options: BrowserBundleGroupedOptions): Promise<BuildResult>;
|
|
32
72
|
}
|
|
73
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getAppBrowserBuildPlugins, getAppBuildExecutor,
|
|
1
|
+
import { getAppBrowserBuildPlugins, getAppBuildExecutor, getAppTranspileOptions } from "../../build/build-adapter.js";
|
|
2
2
|
import { mergeEcoBuildPlugins } from "../../build/build-manifest.js";
|
|
3
3
|
class BrowserBundleService {
|
|
4
4
|
appConfig;
|
|
@@ -17,16 +17,24 @@ class BrowserBundleService {
|
|
|
17
17
|
* site.
|
|
18
18
|
*/
|
|
19
19
|
async bundle(options) {
|
|
20
|
-
const { profile, ...rawBuildOptions } = options;
|
|
21
|
-
const
|
|
22
|
-
const
|
|
20
|
+
const { profile, excludeAppBuildPlugins, plugins, ...rawBuildOptions } = options;
|
|
21
|
+
const appBrowserPlugins = getAppBrowserBuildPlugins(this.appConfig);
|
|
22
|
+
const filteredAppBrowserPlugins = excludeAppBuildPlugins && excludeAppBuildPlugins.length > 0 ? appBrowserPlugins.filter((plugin) => !excludeAppBuildPlugins.includes(plugin.name)) : appBrowserPlugins;
|
|
23
23
|
const request = {
|
|
24
|
-
...
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
...rawBuildOptions,
|
|
25
|
+
entrypoints: options.entrypoints,
|
|
26
|
+
...getAppTranspileOptions(this.appConfig, profile),
|
|
27
|
+
plugins: mergeEcoBuildPlugins(plugins, filteredAppBrowserPlugins)
|
|
27
28
|
};
|
|
28
29
|
return await getAppBuildExecutor(this.appConfig).build(request);
|
|
29
30
|
}
|
|
31
|
+
async bundleGroupedEntries(entries, options) {
|
|
32
|
+
const request = {
|
|
33
|
+
...options,
|
|
34
|
+
entrypoints: entries.map((entry) => entry.entrypoint)
|
|
35
|
+
};
|
|
36
|
+
return this.bundle(request);
|
|
37
|
+
}
|
|
30
38
|
}
|
|
31
39
|
export {
|
|
32
40
|
BrowserBundleService
|
|
@@ -49,7 +49,10 @@ async function loadWorkerToolsHtmlRewriter() {
|
|
|
49
49
|
return module.HTMLRewriter;
|
|
50
50
|
} catch (primaryError) {
|
|
51
51
|
try {
|
|
52
|
-
const runtimeLocalModule = await import(
|
|
52
|
+
const runtimeLocalModule = await import(
|
|
53
|
+
/* @vite-ignore */
|
|
54
|
+
new URL("../node_modules/@worker-tools/html-rewriter/base64.js", import.meta.url).href
|
|
55
|
+
);
|
|
53
56
|
return runtimeLocalModule.HTMLRewriter;
|
|
54
57
|
} catch {
|
|
55
58
|
const message = primaryError instanceof Error ? primaryError.message : String(primaryError);
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import type { ProcessedAsset } from '../assets/asset-processing-service/assets.types';
|
|
2
|
-
import
|
|
1
|
+
import type { ProcessedAsset } from '../assets/asset-processing-service/assets.types.js';
|
|
2
|
+
import type { PagePackageResult } from '../../types/public-types.js';
|
|
3
|
+
import { type HtmlRewriterMode, type HtmlRewriterProvider } from './html-rewriter-provider.service.js';
|
|
4
|
+
export type HtmlDocumentContributionPlacement = 'head-prepend' | 'head-append' | 'body-prepend' | 'body-append';
|
|
5
|
+
export type HtmlDocumentContribution = {
|
|
6
|
+
placement: HtmlDocumentContributionPlacement;
|
|
7
|
+
html: string;
|
|
8
|
+
};
|
|
3
9
|
export interface HtmlTransformerServiceOptions {
|
|
4
10
|
htmlRewriterMode?: HtmlRewriterMode;
|
|
5
11
|
htmlRewriterProvider?: HtmlRewriterProvider;
|
|
6
12
|
}
|
|
7
13
|
export declare class HtmlTransformerService {
|
|
8
14
|
private processedDependencies;
|
|
15
|
+
private pagePackage?;
|
|
9
16
|
private htmlRewriterProvider;
|
|
10
17
|
constructor(options?: HtmlTransformerServiceOptions);
|
|
11
18
|
/**
|
|
@@ -22,19 +29,30 @@ export declare class HtmlTransformerService {
|
|
|
22
29
|
private generateStylesheetTag;
|
|
23
30
|
private appendDependencies;
|
|
24
31
|
private buildDependencyTags;
|
|
32
|
+
private applyContributions;
|
|
25
33
|
/**
|
|
26
34
|
* Injects generated markup immediately before the closing HTML tag when it is
|
|
27
35
|
* present, or appends/prepends a fallback insertion otherwise.
|
|
28
36
|
*/
|
|
29
37
|
private injectBeforeClosingTag;
|
|
38
|
+
private injectAfterOpeningTag;
|
|
39
|
+
private groupContributionsByPlacement;
|
|
30
40
|
/**
|
|
31
41
|
* Replaces the current processed dependency set used during HTML finalization.
|
|
32
42
|
*/
|
|
33
43
|
setProcessedDependencies(processedDependencies: ProcessedAsset[]): void;
|
|
44
|
+
/**
|
|
45
|
+
* Replaces the current structured page package used during HTML finalization.
|
|
46
|
+
*/
|
|
47
|
+
setPagePackage(pagePackage: PagePackageResult): void;
|
|
34
48
|
/**
|
|
35
49
|
* Returns the processed dependencies queued for the next transform pass.
|
|
36
50
|
*/
|
|
37
51
|
getProcessedDependencies(): ProcessedAsset[];
|
|
52
|
+
/**
|
|
53
|
+
* Returns the structured page package queued for the next transform pass.
|
|
54
|
+
*/
|
|
55
|
+
getPagePackage(): PagePackageResult | undefined;
|
|
38
56
|
/**
|
|
39
57
|
* Applies attributes to the opening `<html>` tag when present.
|
|
40
58
|
*/
|
|
@@ -65,11 +83,12 @@ export declare class HtmlTransformerService {
|
|
|
65
83
|
* string-based fallback remains in place for runtimes that cannot provide one
|
|
66
84
|
* of those rewriter implementations.
|
|
67
85
|
*/
|
|
68
|
-
transform(res: Response): Promise<Response>;
|
|
86
|
+
transform(res: Response, contributions?: HtmlDocumentContribution[]): Promise<Response>;
|
|
69
87
|
/**
|
|
70
88
|
* Splits processed assets into head and body injection groups.
|
|
71
89
|
*/
|
|
72
90
|
private groupDependenciesByPosition;
|
|
91
|
+
private resolvePagePackageHtmlDependencies;
|
|
73
92
|
/**
|
|
74
93
|
* Builds a serialized HTML attribute string from an attribute object.
|
|
75
94
|
*/
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DefaultHtmlRewriterProvider
|
|
3
|
-
} from "./html-rewriter-provider.service";
|
|
3
|
+
} from "./html-rewriter-provider.service.js";
|
|
4
|
+
import {
|
|
5
|
+
buildProcessedAssetDedupeKey,
|
|
6
|
+
dedupeProcessedAssets
|
|
7
|
+
} from "../../route-renderer/orchestration/processed-asset-dedupe.js";
|
|
4
8
|
class HtmlTransformerService {
|
|
5
9
|
processedDependencies = [];
|
|
10
|
+
pagePackage;
|
|
6
11
|
htmlRewriterProvider;
|
|
7
12
|
constructor(options = {}) {
|
|
8
13
|
this.htmlRewriterProvider = options.htmlRewriterProvider ?? new DefaultHtmlRewriterProvider();
|
|
@@ -42,6 +47,11 @@ class HtmlTransformerService {
|
|
|
42
47
|
(dep) => dep.kind === "script" ? this.generateScriptTag(dep) : this.generateStylesheetTag(dep)
|
|
43
48
|
).join("");
|
|
44
49
|
}
|
|
50
|
+
applyContributions(element, contributions, placement) {
|
|
51
|
+
for (const contribution of contributions) {
|
|
52
|
+
element[placement](contribution.html, { html: true });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
45
55
|
/**
|
|
46
56
|
* Injects generated markup immediately before the closing HTML tag when it is
|
|
47
57
|
* present, or appends/prepends a fallback insertion otherwise.
|
|
@@ -61,18 +71,52 @@ class HtmlTransformerService {
|
|
|
61
71
|
}
|
|
62
72
|
return `${html}${content}`;
|
|
63
73
|
}
|
|
74
|
+
injectAfterOpeningTag(html, tag, content) {
|
|
75
|
+
if (!content) {
|
|
76
|
+
return html;
|
|
77
|
+
}
|
|
78
|
+
const openingTag = new RegExp(`<${tag}\\b[^>]*>`, "i");
|
|
79
|
+
const match = html.match(openingTag);
|
|
80
|
+
if (!match || match.index === void 0) {
|
|
81
|
+
return tag === "head" ? `${content}${html}` : html.replace(/<body\b[^>]*>/i, (value) => `${value}${content}`);
|
|
82
|
+
}
|
|
83
|
+
const insertAt = match.index + match[0].length;
|
|
84
|
+
return `${html.slice(0, insertAt)}${content}${html.slice(insertAt)}`;
|
|
85
|
+
}
|
|
86
|
+
groupContributionsByPlacement(contributions) {
|
|
87
|
+
return {
|
|
88
|
+
headPrepend: contributions.filter((item) => item.placement === "head-prepend"),
|
|
89
|
+
headAppend: contributions.filter((item) => item.placement === "head-append"),
|
|
90
|
+
bodyPrepend: contributions.filter((item) => item.placement === "body-prepend"),
|
|
91
|
+
bodyAppend: contributions.filter((item) => item.placement === "body-append")
|
|
92
|
+
};
|
|
93
|
+
}
|
|
64
94
|
/**
|
|
65
95
|
* Replaces the current processed dependency set used during HTML finalization.
|
|
66
96
|
*/
|
|
67
97
|
setProcessedDependencies(processedDependencies) {
|
|
98
|
+
this.pagePackage = void 0;
|
|
68
99
|
this.processedDependencies = processedDependencies;
|
|
69
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Replaces the current structured page package used during HTML finalization.
|
|
103
|
+
*/
|
|
104
|
+
setPagePackage(pagePackage) {
|
|
105
|
+
this.pagePackage = pagePackage;
|
|
106
|
+
this.processedDependencies = this.resolvePagePackageHtmlDependencies(pagePackage);
|
|
107
|
+
}
|
|
70
108
|
/**
|
|
71
109
|
* Returns the processed dependencies queued for the next transform pass.
|
|
72
110
|
*/
|
|
73
111
|
getProcessedDependencies() {
|
|
74
112
|
return this.processedDependencies;
|
|
75
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Returns the structured page package queued for the next transform pass.
|
|
116
|
+
*/
|
|
117
|
+
getPagePackage() {
|
|
118
|
+
return this.pagePackage;
|
|
119
|
+
}
|
|
76
120
|
/**
|
|
77
121
|
* Applies attributes to the opening `<html>` tag when present.
|
|
78
122
|
*/
|
|
@@ -134,23 +178,7 @@ class HtmlTransformerService {
|
|
|
134
178
|
* variants.
|
|
135
179
|
*/
|
|
136
180
|
dedupeProcessedAssets(assets) {
|
|
137
|
-
|
|
138
|
-
for (const asset of assets) {
|
|
139
|
-
const key = [
|
|
140
|
-
asset.kind,
|
|
141
|
-
asset.position ?? "",
|
|
142
|
-
asset.srcUrl ?? "",
|
|
143
|
-
asset.filepath ?? "",
|
|
144
|
-
asset.content ?? "",
|
|
145
|
-
asset.inline ? "inline" : "external",
|
|
146
|
-
asset.excludeFromHtml ? "excluded" : "included",
|
|
147
|
-
JSON.stringify(asset.attributes ?? {})
|
|
148
|
-
].join("|");
|
|
149
|
-
if (!unique.has(key)) {
|
|
150
|
-
unique.set(key, asset);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return [...unique.values()];
|
|
181
|
+
return dedupeProcessedAssets(assets);
|
|
154
182
|
}
|
|
155
183
|
/**
|
|
156
184
|
* Injects the currently processed dependencies into an HTML response.
|
|
@@ -160,30 +188,47 @@ class HtmlTransformerService {
|
|
|
160
188
|
* string-based fallback remains in place for runtimes that cannot provide one
|
|
161
189
|
* of those rewriter implementations.
|
|
162
190
|
*/
|
|
163
|
-
async transform(res) {
|
|
191
|
+
async transform(res, contributions = []) {
|
|
164
192
|
const { head, body } = this.groupDependenciesByPosition();
|
|
193
|
+
const { headPrepend, headAppend, bodyPrepend, bodyAppend } = this.groupContributionsByPlacement(contributions);
|
|
165
194
|
const htmlRewriter = await this.htmlRewriterProvider.createHtmlRewriter();
|
|
166
|
-
const html = await res.text();
|
|
167
|
-
const headers = new Headers(res.headers);
|
|
168
195
|
if (htmlRewriter) {
|
|
169
196
|
htmlRewriter.on("head", {
|
|
170
|
-
element: (element) =>
|
|
197
|
+
element: (element) => {
|
|
198
|
+
this.applyContributions(element, headPrepend, "prepend");
|
|
199
|
+
this.appendDependencies(element, head);
|
|
200
|
+
this.applyContributions(element, headAppend, "append");
|
|
201
|
+
}
|
|
171
202
|
}).on("body", {
|
|
172
|
-
element: (element) =>
|
|
203
|
+
element: (element) => {
|
|
204
|
+
this.applyContributions(element, bodyPrepend, "prepend");
|
|
205
|
+
this.appendDependencies(element, body);
|
|
206
|
+
this.applyContributions(element, bodyAppend, "append");
|
|
207
|
+
}
|
|
173
208
|
});
|
|
174
|
-
return htmlRewriter.transform(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
const
|
|
209
|
+
return htmlRewriter.transform(res);
|
|
210
|
+
}
|
|
211
|
+
const html = await res.text();
|
|
212
|
+
const headers = new Headers(res.headers);
|
|
213
|
+
const withHeadPrependedContent = this.injectAfterOpeningTag(
|
|
214
|
+
html,
|
|
215
|
+
"head",
|
|
216
|
+
headPrepend.map((item) => item.html).join("")
|
|
217
|
+
);
|
|
218
|
+
const withHeadDependencies = this.injectBeforeClosingTag(
|
|
219
|
+
withHeadPrependedContent,
|
|
220
|
+
"head",
|
|
221
|
+
`${this.buildDependencyTags(head)}${headAppend.map((item) => item.html).join("")}`
|
|
222
|
+
);
|
|
223
|
+
const withBodyPrependedContent = this.injectAfterOpeningTag(
|
|
184
224
|
withHeadDependencies,
|
|
185
225
|
"body",
|
|
186
|
-
|
|
226
|
+
bodyPrepend.map((item) => item.html).join("")
|
|
227
|
+
);
|
|
228
|
+
const transformedHtml = this.injectBeforeClosingTag(
|
|
229
|
+
withBodyPrependedContent,
|
|
230
|
+
"body",
|
|
231
|
+
`${this.buildDependencyTags(body)}${bodyAppend.map((item) => item.html).join("")}`
|
|
187
232
|
);
|
|
188
233
|
return new Response(transformedHtml, {
|
|
189
234
|
headers,
|
|
@@ -195,7 +240,8 @@ class HtmlTransformerService {
|
|
|
195
240
|
* Splits processed assets into head and body injection groups.
|
|
196
241
|
*/
|
|
197
242
|
groupDependenciesByPosition() {
|
|
198
|
-
|
|
243
|
+
const dependencies = this.pagePackage ? this.resolvePagePackageHtmlDependencies(this.pagePackage) : this.processedDependencies;
|
|
244
|
+
return dependencies.reduce(
|
|
199
245
|
(acc, dep) => {
|
|
200
246
|
if (dep.kind === "script") {
|
|
201
247
|
if (dep.excludeFromHtml) return acc;
|
|
@@ -209,6 +255,26 @@ class HtmlTransformerService {
|
|
|
209
255
|
{ head: [], body: [] }
|
|
210
256
|
);
|
|
211
257
|
}
|
|
258
|
+
resolvePagePackageHtmlDependencies(pagePackage) {
|
|
259
|
+
if (!pagePackage.pageBrowserGraph) {
|
|
260
|
+
return pagePackage.htmlAssets;
|
|
261
|
+
}
|
|
262
|
+
const chunkKeys = new Set(
|
|
263
|
+
pagePackage.pageBrowserGraph.chunkAssets.map((asset) => buildProcessedAssetDedupeKey(asset))
|
|
264
|
+
);
|
|
265
|
+
const graphKeys = new Set(
|
|
266
|
+
[...pagePackage.pageBrowserGraph.entryAssets, ...pagePackage.pageBrowserGraph.chunkAssets].map(
|
|
267
|
+
(asset) => buildProcessedAssetDedupeKey(asset)
|
|
268
|
+
)
|
|
269
|
+
);
|
|
270
|
+
const nonGraphHtmlAssets = pagePackage.htmlAssets.filter(
|
|
271
|
+
(asset) => !graphKeys.has(buildProcessedAssetDedupeKey(asset))
|
|
272
|
+
);
|
|
273
|
+
const entryHtmlAssets = pagePackage.pageBrowserGraph.entryAssets.filter(
|
|
274
|
+
(asset) => !chunkKeys.has(buildProcessedAssetDedupeKey(asset))
|
|
275
|
+
);
|
|
276
|
+
return dedupeProcessedAssets([...nonGraphHtmlAssets, ...entryHtmlAssets]);
|
|
277
|
+
}
|
|
212
278
|
/**
|
|
213
279
|
* Builds a serialized HTML attribute string from an attribute object.
|
|
214
280
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EcoPagesAppConfig } from '../../internal-types.js';
|
|
1
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
2
2
|
export type DevelopmentInvalidationCategory = 'public-asset' | 'additional-watch' | 'include-source' | 'route-source' | 'processor-owned-asset' | 'server-source' | 'other';
|
|
3
3
|
/**
|
|
4
4
|
* Framework-owned invalidation plan for one changed file.
|
|
@@ -16,6 +16,7 @@ class DevelopmentInvalidationService {
|
|
|
16
16
|
*/
|
|
17
17
|
invalidateServerModules(changedFiles) {
|
|
18
18
|
getAppServerInvalidationState(this.appConfig).invalidateServerModules(changedFiles);
|
|
19
|
+
this.appConfig.runtime?.appModuleLoader?.invalidateDevelopmentGraph();
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
22
|
* Resets runtime-owned graph state and invalidates server modules.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PageModuleBuildImportOptions } from './page-module-import.service.js';
|
|
2
|
+
export type AppModuleLoaderOwner = 'app' | 'host';
|
|
3
|
+
export interface AppModuleLoader {
|
|
4
|
+
readonly owner: AppModuleLoaderOwner;
|
|
5
|
+
importModule<T = unknown>(options: PageModuleBuildImportOptions): Promise<T>;
|
|
6
|
+
invalidateDevelopmentGraph(): void;
|
|
7
|
+
}
|
|
File without changes
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
import type { EcoPagesAppConfig } from '../../internal-types.js';
|
|
1
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
2
|
+
import { type AppModuleLoader } from './app-module-loader.service.js';
|
|
3
|
+
import type { SourceModuleLoader } from './module-loading-types.js';
|
|
2
4
|
import { ServerModuleTranspiler } from './server-module-transpiler.service.js';
|
|
5
|
+
export declare function shouldAppUseHostModuleLoader(appConfig: EcoPagesAppConfig, filePath: string): boolean;
|
|
6
|
+
export declare function getAppHostModuleLoader(appConfig: EcoPagesAppConfig): SourceModuleLoader | undefined;
|
|
7
|
+
export declare function setAppHostModuleLoader(appConfig: EcoPagesAppConfig, hostModuleLoader?: SourceModuleLoader): void;
|
|
8
|
+
export declare function createAppModuleLoader(appConfig: EcoPagesAppConfig): AppModuleLoader;
|
|
9
|
+
export declare function getAppModuleLoader(appConfig: EcoPagesAppConfig): AppModuleLoader;
|
|
10
|
+
export declare function setAppModuleLoader(appConfig: EcoPagesAppConfig, appModuleLoader: AppModuleLoader): void;
|
|
3
11
|
/**
|
|
4
12
|
* Creates the shared app-scoped server-module transpiler for one runtime
|
|
5
13
|
* instance.
|
|
@@ -1,15 +1,105 @@
|
|
|
1
|
-
import { getAppBuildExecutor } from "../../build/build-adapter.js";
|
|
2
|
-
import {
|
|
1
|
+
import { getAppBuildExecutor, getAppServerBuildPlugins } from "../../build/build-adapter.js";
|
|
2
|
+
import { createForeignJsxOverridePlugin } from "../../plugins/foreign-jsx-override-plugin.js";
|
|
3
|
+
import path from "node:path";
|
|
3
4
|
import { DevelopmentInvalidationService } from "../invalidation/development-invalidation.service.js";
|
|
5
|
+
import {} from "./app-module-loader.service.js";
|
|
6
|
+
import { PageModuleImportService } from "./page-module-import.service.js";
|
|
7
|
+
import { supportsSourceModuleLoading } from "./source-module-support.js";
|
|
4
8
|
import { ServerModuleTranspiler } from "./server-module-transpiler.service.js";
|
|
9
|
+
function shouldAppUseHostModuleLoader(appConfig, filePath) {
|
|
10
|
+
if (appConfig.runtime?.hostModuleLoader) {
|
|
11
|
+
return supportsSourceModuleLoading(filePath);
|
|
12
|
+
}
|
|
13
|
+
const normalizedFilePath = path.normalize(filePath);
|
|
14
|
+
const frameworkOwnedDirectories = [
|
|
15
|
+
appConfig.absolutePaths.pagesDir,
|
|
16
|
+
appConfig.absolutePaths.includesDir,
|
|
17
|
+
appConfig.absolutePaths.layoutsDir,
|
|
18
|
+
appConfig.absolutePaths.componentsDir
|
|
19
|
+
].map((directoryPath) => path.normalize(directoryPath));
|
|
20
|
+
const isFrameworkOwnedModule = frameworkOwnedDirectories.some((directoryPath) => {
|
|
21
|
+
return normalizedFilePath === directoryPath || normalizedFilePath.startsWith(`${directoryPath}${path.sep}`);
|
|
22
|
+
});
|
|
23
|
+
const isConfiguredTemplateModule = appConfig.templatesExt.some(
|
|
24
|
+
(extension) => normalizedFilePath.endsWith(extension)
|
|
25
|
+
);
|
|
26
|
+
return !(isFrameworkOwnedModule && isConfiguredTemplateModule);
|
|
27
|
+
}
|
|
28
|
+
function getAppHostModuleLoader(appConfig) {
|
|
29
|
+
return appConfig.runtime?.hostModuleLoader;
|
|
30
|
+
}
|
|
31
|
+
function getAppModuleLoaderOwner(appConfig) {
|
|
32
|
+
return getAppHostModuleLoader(appConfig) ? "host" : "app";
|
|
33
|
+
}
|
|
34
|
+
function setAppHostModuleLoader(appConfig, hostModuleLoader) {
|
|
35
|
+
appConfig.runtime = {
|
|
36
|
+
...appConfig.runtime ?? {},
|
|
37
|
+
hostModuleLoader
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function getJsxOwnershipPlugins(appConfig) {
|
|
41
|
+
const jsxExtensions = (appConfig.integrations ?? []).filter((integration) => integration.jsxImportSource).flatMap(
|
|
42
|
+
(integration) => integration.extensions.filter((extension) => extension.endsWith(".tsx") || extension.endsWith(".jsx")).map((extension) => ({ integration, extension }))
|
|
43
|
+
).sort((left, right) => right.extension.length - left.extension.length);
|
|
44
|
+
return jsxExtensions.map(
|
|
45
|
+
({ integration, extension }) => createForeignJsxOverridePlugin({
|
|
46
|
+
hostJsxImportSource: integration.jsxImportSource,
|
|
47
|
+
foreignExtensions: [extension],
|
|
48
|
+
excludeExtensions: jsxExtensions.filter((candidate) => candidate.extension.length > extension.length).filter((candidate) => candidate.extension.endsWith(extension)).map((candidate) => candidate.extension),
|
|
49
|
+
name: `ecopages-jsx-ownership-${integration.name}-${extension.replace(/[^a-zA-Z0-9]+/g, "-")}`
|
|
50
|
+
})
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
function createAppModuleLoader(appConfig) {
|
|
54
|
+
const invalidationService = new DevelopmentInvalidationService(appConfig);
|
|
55
|
+
const pageModuleImportService = new PageModuleImportService({
|
|
56
|
+
canLoadSourceModuleFromHost: (filePath) => shouldAppUseHostModuleLoader(appConfig, filePath),
|
|
57
|
+
getHostModuleLoader: () => getAppHostModuleLoader(appConfig)
|
|
58
|
+
});
|
|
59
|
+
const appServerBuildPlugins = appConfig.runtime?.buildManifest ? getAppServerBuildPlugins(appConfig) : Array.from(appConfig.loaders?.values() ?? []);
|
|
60
|
+
const jsxOwnershipPlugins = getJsxOwnershipPlugins(appConfig);
|
|
61
|
+
const appModuleLoader = {
|
|
62
|
+
get owner() {
|
|
63
|
+
return getAppModuleLoaderOwner(appConfig);
|
|
64
|
+
},
|
|
65
|
+
pageModuleImportService,
|
|
66
|
+
async importModule(options) {
|
|
67
|
+
const invalidationVersion = options.invalidationVersion ?? invalidationService.getServerModuleInvalidationVersion();
|
|
68
|
+
const mergedPlugins = [...appServerBuildPlugins, ...jsxOwnershipPlugins, ...options.plugins ?? []];
|
|
69
|
+
return await pageModuleImportService.importModule({
|
|
70
|
+
...options,
|
|
71
|
+
...mergedPlugins.length > 0 ? { plugins: mergedPlugins } : {},
|
|
72
|
+
buildExecutor: options.buildExecutor ?? getAppBuildExecutor(appConfig),
|
|
73
|
+
invalidationVersion
|
|
74
|
+
});
|
|
75
|
+
},
|
|
76
|
+
invalidateDevelopmentGraph() {
|
|
77
|
+
pageModuleImportService.invalidateDevelopmentGraph();
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
return appModuleLoader;
|
|
81
|
+
}
|
|
82
|
+
function getAppModuleLoader(appConfig) {
|
|
83
|
+
const existingModuleLoader = appConfig.runtime?.appModuleLoader;
|
|
84
|
+
if (existingModuleLoader) {
|
|
85
|
+
return existingModuleLoader;
|
|
86
|
+
}
|
|
87
|
+
const appModuleLoader = createAppModuleLoader(appConfig);
|
|
88
|
+
setAppModuleLoader(appConfig, appModuleLoader);
|
|
89
|
+
return appModuleLoader;
|
|
90
|
+
}
|
|
91
|
+
function setAppModuleLoader(appConfig, appModuleLoader) {
|
|
92
|
+
appConfig.runtime = {
|
|
93
|
+
...appConfig.runtime ?? {},
|
|
94
|
+
appModuleLoader
|
|
95
|
+
};
|
|
96
|
+
}
|
|
5
97
|
function createAppServerModuleTranspiler(appConfig) {
|
|
6
98
|
const invalidationService = new DevelopmentInvalidationService(appConfig);
|
|
7
99
|
return new ServerModuleTranspiler({
|
|
8
100
|
rootDir: appConfig.rootDir,
|
|
9
|
-
getBuildExecutor: () => getAppBuildExecutor(appConfig),
|
|
10
|
-
getInvalidationVersion: () => invalidationService.getServerModuleInvalidationVersion(),
|
|
11
101
|
invalidateModules: (changedFiles) => invalidationService.invalidateServerModules(changedFiles),
|
|
12
|
-
|
|
102
|
+
pageModuleImportService: getAppModuleLoader(appConfig)
|
|
13
103
|
});
|
|
14
104
|
}
|
|
15
105
|
function getAppServerModuleTranspiler(appConfig) {
|
|
@@ -28,7 +118,13 @@ function setAppServerModuleTranspiler(appConfig, serverModuleTranspiler) {
|
|
|
28
118
|
};
|
|
29
119
|
}
|
|
30
120
|
export {
|
|
121
|
+
createAppModuleLoader,
|
|
31
122
|
createAppServerModuleTranspiler,
|
|
123
|
+
getAppHostModuleLoader,
|
|
124
|
+
getAppModuleLoader,
|
|
32
125
|
getAppServerModuleTranspiler,
|
|
33
|
-
|
|
126
|
+
setAppHostModuleLoader,
|
|
127
|
+
setAppModuleLoader,
|
|
128
|
+
setAppServerModuleTranspiler,
|
|
129
|
+
shouldAppUseHostModuleLoader
|
|
34
130
|
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SourceModuleLoader } from './module-loading-types.js';
|
|
2
|
+
export declare function setHostModuleLoader(loader: SourceModuleLoader): void;
|
|
3
|
+
export declare function getHostModuleLoader(): SourceModuleLoader | undefined;
|
|
4
|
+
export declare function clearHostModuleLoader(): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
let hostModuleLoader;
|
|
2
|
+
function setHostModuleLoader(loader) {
|
|
3
|
+
hostModuleLoader = loader;
|
|
4
|
+
}
|
|
5
|
+
function getHostModuleLoader() {
|
|
6
|
+
return hostModuleLoader;
|
|
7
|
+
}
|
|
8
|
+
function clearHostModuleLoader() {
|
|
9
|
+
hostModuleLoader = void 0;
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
clearHostModuleLoader,
|
|
13
|
+
getHostModuleLoader,
|
|
14
|
+
setHostModuleLoader
|
|
15
|
+
};
|
|
File without changes
|
|
@@ -1,13 +1,33 @@
|
|
|
1
1
|
import { build, type BuildExecutor, type BuildResult } from '../../build/build-adapter.js';
|
|
2
2
|
import type { EcoBuildPlugin } from '../../build/build-types.js';
|
|
3
|
-
|
|
3
|
+
import type { SourceModuleLoaderFactory } from './module-loading-types.js';
|
|
4
|
+
interface PageModuleImportBaseOptions {
|
|
4
5
|
filePath: string;
|
|
6
|
+
bypassCache?: boolean;
|
|
7
|
+
cacheScope?: string;
|
|
8
|
+
invalidationVersion?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Options for imports that must pass through the Ecopages build pipeline.
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* Callers should use build mode for framework-owned page modules and any other
|
|
15
|
+
* source that relies on Ecopages build resolution before runtime execution.
|
|
16
|
+
*/
|
|
17
|
+
export interface PageModuleBuildImportOptions extends PageModuleImportBaseOptions {
|
|
5
18
|
rootDir: string;
|
|
6
19
|
outdir: string;
|
|
7
20
|
buildExecutor?: BuildExecutor;
|
|
8
|
-
invalidationVersion?: number;
|
|
9
21
|
splitting?: boolean;
|
|
10
22
|
externalPackages?: boolean;
|
|
23
|
+
jsx?: {
|
|
24
|
+
development?: boolean;
|
|
25
|
+
factory?: string;
|
|
26
|
+
fragment?: string;
|
|
27
|
+
importSource?: string;
|
|
28
|
+
runtime?: 'classic' | 'automatic';
|
|
29
|
+
sideEffects?: boolean;
|
|
30
|
+
};
|
|
11
31
|
plugins?: EcoBuildPlugin[];
|
|
12
32
|
transpileErrorMessage?: (details: string) => string;
|
|
13
33
|
noOutputMessage?: (filePath: string) => string;
|
|
@@ -23,14 +43,17 @@ export interface PageModuleImportOptions {
|
|
|
23
43
|
export interface PageModuleImportDependencies {
|
|
24
44
|
hashFile(filePath: string): string;
|
|
25
45
|
buildModule(options: Parameters<typeof build>[0], buildExecutor?: BuildExecutor): Promise<BuildResult>;
|
|
46
|
+
canLoadSourceModuleFromHost(filePath: string): boolean;
|
|
47
|
+
getHostModuleLoader: SourceModuleLoaderFactory;
|
|
26
48
|
}
|
|
27
49
|
/**
|
|
28
|
-
* Loads
|
|
50
|
+
* Loads page-like modules through the Ecopages build pipeline.
|
|
29
51
|
*
|
|
30
|
-
* This service centralizes the
|
|
31
|
-
* scanning, page data loading, and request-time page inspection. In
|
|
32
|
-
*
|
|
33
|
-
*
|
|
52
|
+
* This service centralizes the shared build-first import strategy used by route
|
|
53
|
+
* scanning, page data loading, and request-time page inspection. In Node
|
|
54
|
+
* development it can still delegate compatible source imports to the active
|
|
55
|
+
* host loader, but the public contract remains one transpile-targeted module
|
|
56
|
+
* loading path.
|
|
34
57
|
*
|
|
35
58
|
* Keeping this logic in one place prevents subtle drift in cache-busting,
|
|
36
59
|
* transpilation settings, and error semantics across the different callers.
|
|
@@ -66,6 +89,7 @@ export declare class PageModuleImportService {
|
|
|
66
89
|
* @param options Runtime-specific import settings.
|
|
67
90
|
* @returns The loaded module.
|
|
68
91
|
*/
|
|
69
|
-
importModule<T = unknown>(options:
|
|
92
|
+
importModule<T = unknown>(options: PageModuleBuildImportOptions): Promise<T>;
|
|
70
93
|
private loadModule;
|
|
71
94
|
}
|
|
95
|
+
export {};
|