@ecopages/core 0.2.0-alpha.3 → 0.2.0-alpha.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +66 -66
- package/README.md +268 -14
- package/package.json +72 -108
- package/src/adapters/README.md +39 -0
- 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 +5 -12
- package/src/adapters/bun/create-app.js +43 -7
- package/src/adapters/bun/hmr-manager.d.ts +72 -26
- package/src/adapters/bun/hmr-manager.js +153 -81
- package/src/adapters/bun/index.d.ts +2 -3
- package/src/adapters/bun/index.js +3 -3
- package/src/adapters/bun/server-adapter.d.ts +5 -5
- package/src/adapters/bun/server-adapter.js +63 -38
- package/src/adapters/bun/server-lifecycle.d.ts +28 -17
- package/src/adapters/bun/server-lifecycle.js +34 -62
- 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 +2 -6
- package/src/adapters/index.js +2 -8
- package/src/adapters/node/create-app.d.ts +6 -9
- package/src/adapters/node/create-app.js +12 -6
- package/src/adapters/node/node-client-bridge.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.d.ts +79 -21
- package/src/adapters/node/node-hmr-manager.js +167 -114
- package/src/adapters/node/server-adapter.d.ts +7 -35
- package/src/adapters/node/server-adapter.js +55 -107
- package/src/adapters/node/static-content-server.d.ts +37 -1
- package/src/adapters/node/static-content-server.js +29 -1
- package/src/adapters/shared/application-adapter.d.ts +1 -1
- package/src/{define-api-handler.d.ts → 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 -13
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
- package/src/adapters/shared/file-route-middleware-pipeline.js +3 -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 +20 -16
- package/src/adapters/shared/fs-server-response-matcher.js +76 -45
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
- package/src/adapters/shared/hmr-html-response.d.ts +22 -0
- package/src/adapters/shared/hmr-html-response.js +32 -0
- package/src/adapters/shared/render-context.d.ts +4 -3
- package/src/adapters/shared/render-context.js +6 -3
- package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
- package/src/adapters/shared/runtime-bootstrap.js +43 -0
- package/src/adapters/shared/server-adapter.d.ts +33 -12
- package/src/adapters/shared/server-adapter.js +208 -132
- package/src/adapters/shared/server-route-handler.d.ts +5 -5
- package/src/adapters/shared/server-route-handler.js +7 -16
- package/src/adapters/shared/server-static-builder.d.ts +41 -8
- package/src/adapters/shared/server-static-builder.js +65 -11
- package/src/build/README.md +107 -0
- package/src/build/build-adapter.d.ts +168 -3
- package/src/build/build-adapter.js +604 -16
- package/src/build/build-manifest.d.ts +27 -0
- package/src/build/build-manifest.js +30 -0
- package/src/build/dev-build-coordinator.d.ts +72 -0
- package/src/build/dev-build-coordinator.js +154 -0
- package/src/build/esbuild-build-adapter.d.ts +15 -6
- package/src/build/esbuild-build-adapter.js +189 -74
- package/src/build/runtime-build-executor.d.ts +14 -0
- package/src/build/runtime-build-executor.js +22 -0
- package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
- package/src/build/runtime-specifier-alias-plugin.js +35 -0
- package/src/build/runtime-specifier-aliases.d.ts +5 -0
- package/src/build/runtime-specifier-aliases.js +95 -0
- package/src/config/README.md +36 -0
- package/src/config/config-builder.d.ts +54 -29
- package/src/config/config-builder.js +255 -49
- package/src/{constants.d.ts → config/constants.d.ts} +13 -0
- package/src/{constants.js → config/constants.js} +4 -0
- package/src/declarations.d.ts +19 -14
- 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/README.md +70 -16
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +83 -0
- package/src/eco/eco.js +32 -57
- package/src/eco/eco.types.d.ts +14 -6
- 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/README.md +26 -0
- package/src/hmr/client/hmr-runtime.d.ts +1 -6
- package/src/hmr/client/hmr-runtime.js +38 -7
- package/src/hmr/hmr-strategy.d.ts +16 -13
- package/src/hmr/hmr-strategy.js +22 -7
- package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
- package/src/hmr/hmr.postcss.test.e2e.js +31 -0
- package/src/hmr/hmr.test.e2e.js +26 -33
- 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 +46 -48
- package/src/hmr/strategies/js-hmr-strategy.js +64 -74
- package/src/index.browser.d.ts +2 -2
- package/src/index.browser.js +1 -1
- package/src/index.d.ts +4 -3
- package/src/index.js +16 -5
- package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
- package/src/integrations/ghtml/ghtml-renderer.js +27 -30
- 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 +35 -0
- package/src/plugins/alias-resolver-plugin.js +17 -3
- package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
- package/src/plugins/eco-component-meta-plugin.js +27 -22
- package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
- package/src/plugins/foreign-jsx-override-plugin.js +35 -0
- package/src/plugins/integration-plugin.d.ts +142 -29
- package/src/plugins/integration-plugin.js +103 -14
- package/src/plugins/processor.d.ts +17 -2
- package/src/plugins/processor.js +22 -3
- package/src/plugins/runtime-capability.d.ts +9 -0
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/GRAPH.md +83 -325
- package/src/route-renderer/README.md +73 -90
- package/src/route-renderer/orchestration/component-render-context.d.ts +89 -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 +108 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +206 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +516 -0
- package/src/route-renderer/orchestration/integration-renderer.js +909 -0
- 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 +2 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +23 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +90 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +158 -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 +120 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.js +388 -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/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
- package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
- 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 +90 -0
- package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
- package/src/route-renderer/route-renderer.d.ts +57 -14
- package/src/route-renderer/route-renderer.js +30 -18
- package/src/router/README.md +94 -0
- package/src/router/client/link-intent.d.ts +53 -0
- package/src/router/client/link-intent.js +34 -0
- package/src/router/client/link-intent.test.browser.d.ts +1 -0
- package/src/router/client/link-intent.test.browser.js +43 -0
- package/src/router/client/navigation-coordinator.d.ts +169 -0
- package/src/router/client/navigation-coordinator.js +215 -0
- package/src/router/server/route-registry.d.ts +78 -0
- package/src/router/server/route-registry.js +262 -0
- package/src/services/README.md +28 -0
- 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 +103 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -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 -0
- package/src/services/assets/asset-processing-service/index.js +6 -0
- package/src/services/assets/asset-processing-service/page-package.d.ts +3 -0
- package/src/services/assets/asset-processing-service/page-package.js +74 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
- package/src/services/assets/asset-processing-service/processors/index.js +5 -0
- package/src/services/{asset-processing-service → 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 +119 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.d.ts +3 -3
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.js +12 -7
- package/src/services/{asset-processing-service → 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 +59 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
- 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 +73 -0
- package/src/services/assets/browser-bundle.service.js +41 -0
- package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
- package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
- package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
- package/src/services/html/html-rewriter-provider.service.js +68 -0
- package/src/services/html/html-transformer.service.d.ts +87 -0
- package/src/services/html/html-transformer.service.js +216 -0
- package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
- package/src/services/invalidation/development-invalidation.service.js +190 -0
- package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +115 -0
- 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/node-bootstrap-plugin.d.ts +42 -0
- package/src/services/module-loading/node-bootstrap-plugin.js +216 -0
- package/src/services/module-loading/page-module-import.service.d.ts +76 -0
- package/src/services/module-loading/page-module-import.service.js +170 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
- package/src/services/module-loading/server-module-transpiler.service.js +64 -0
- 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 +118 -0
- package/src/services/runtime-state/dev-graph.service.js +162 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
- package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
- package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
- package/src/static-site-generator/README.md +26 -0
- package/src/static-site-generator/static-site-generator.d.ts +67 -20
- package/src/static-site-generator/static-site-generator.js +182 -138
- package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
- package/src/types/internal-types.js +0 -0
- package/src/{public-types.d.ts → types/public-types.d.ts} +201 -32
- 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.d.ts +11 -0
- package/src/utils/resolve-work-dir.js +31 -0
- package/src/watchers/project-watcher.d.ts +40 -29
- package/src/watchers/project-watcher.js +126 -116
- package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
- package/src/watchers/project-watcher.test-helpers.js +6 -6
- 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/define-api-handler.d.ts +0 -61
- package/src/adapters/bun/define-api-handler.ts +0 -114
- package/src/adapters/bun/hmr-manager.ts +0 -296
- package/src/adapters/bun/index.ts +0 -3
- package/src/adapters/bun/server-adapter.ts +0 -492
- package/src/adapters/bun/server-lifecycle.ts +0 -154
- package/src/adapters/index.ts +0 -6
- package/src/adapters/node/create-app.ts +0 -179
- package/src/adapters/node/index.d.ts +0 -4
- package/src/adapters/node/index.js +0 -8
- package/src/adapters/node/index.ts +0 -9
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.ts +0 -289
- package/src/adapters/node/server-adapter.ts +0 -561
- package/src/adapters/node/static-content-server.ts +0 -203
- package/src/adapters/shared/api-response.ts +0 -104
- package/src/adapters/shared/application-adapter.ts +0 -199
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
- package/src/adapters/shared/fs-server-response-factory.ts +0 -118
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
- package/src/adapters/shared/render-context.ts +0 -105
- package/src/adapters/shared/server-adapter.ts +0 -442
- package/src/adapters/shared/server-route-handler.ts +0 -166
- package/src/adapters/shared/server-static-builder.ts +0 -82
- package/src/build/build-adapter.ts +0 -132
- package/src/build/build-types.ts +0 -83
- package/src/build/esbuild-build-adapter.ts +0 -510
- package/src/config/config-builder.ts +0 -474
- package/src/constants.ts +0 -39
- package/src/create-app.ts +0 -87
- package/src/define-api-handler.js +0 -15
- package/src/define-api-handler.ts +0 -66
- 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 -77
- package/src/eco/component-render-context.ts +0 -202
- package/src/eco/eco.ts +0 -221
- package/src/eco/eco.types.ts +0 -202
- 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/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-have-HMR-script-injected-in-page-1.png +0 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
- package/src/hmr/client/hmr-runtime.ts +0 -121
- package/src/hmr/hmr-strategy.ts +0 -172
- package/src/hmr/hmr.test.e2e.ts +0 -75
- 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 -93
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
- package/src/internal-types.ts +0 -212
- package/src/plugins/alias-resolver-plugin.ts +0 -45
- package/src/plugins/eco-component-meta-plugin.ts +0 -474
- package/src/plugins/integration-plugin.ts +0 -184
- package/src/plugins/processor.ts +0 -220
- package/src/public-types.ts +0 -1260
- package/src/route-renderer/component-graph-executor.d.ts +0 -32
- package/src/route-renderer/component-graph-executor.js +0 -31
- package/src/route-renderer/component-graph-executor.ts +0 -84
- package/src/route-renderer/component-graph.d.ts +0 -42
- package/src/route-renderer/component-graph.js +0 -72
- package/src/route-renderer/component-graph.ts +0 -159
- package/src/route-renderer/component-marker.d.ts +0 -52
- package/src/route-renderer/component-marker.js +0 -46
- package/src/route-renderer/component-marker.ts +0 -117
- package/src/route-renderer/dependency-resolver.js +0 -428
- package/src/route-renderer/dependency-resolver.ts +0 -596
- package/src/route-renderer/html-post-processing.service.d.ts +0 -40
- package/src/route-renderer/html-post-processing.service.js +0 -86
- package/src/route-renderer/html-post-processing.service.ts +0 -103
- package/src/route-renderer/integration-renderer.d.ts +0 -339
- package/src/route-renderer/integration-renderer.js +0 -526
- package/src/route-renderer/integration-renderer.ts +0 -696
- package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
- package/src/route-renderer/marker-graph-resolver.js +0 -93
- package/src/route-renderer/marker-graph-resolver.ts +0 -153
- package/src/route-renderer/page-module-loader.d.ts +0 -61
- package/src/route-renderer/page-module-loader.ts +0 -153
- package/src/route-renderer/render-execution.service.d.ts +0 -69
- package/src/route-renderer/render-execution.service.js +0 -91
- package/src/route-renderer/render-execution.service.ts +0 -158
- package/src/route-renderer/render-preparation.service.d.ts +0 -112
- package/src/route-renderer/render-preparation.service.js +0 -243
- package/src/route-renderer/render-preparation.service.ts +0 -358
- package/src/route-renderer/route-renderer.ts +0 -80
- package/src/router/fs-router-scanner.d.ts +0 -41
- package/src/router/fs-router-scanner.js +0 -155
- package/src/router/fs-router-scanner.ts +0 -217
- package/src/router/fs-router.d.ts +0 -26
- package/src/router/fs-router.js +0 -100
- package/src/router/fs-router.ts +0 -122
- package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
- package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
- package/src/services/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/asset-processing-service/assets.types.ts +0 -112
- package/src/services/asset-processing-service/index.d.ts +0 -3
- package/src/services/asset-processing-service/index.js +0 -3
- package/src/services/asset-processing-service/index.ts +0 -3
- package/src/services/asset-processing-service/processor.interface.ts +0 -27
- package/src/services/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
- package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
- package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
- package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
- package/src/services/asset-processing-service/processors/index.d.ts +0 -5
- package/src/services/asset-processing-service/processors/index.js +0 -5
- package/src/services/asset-processing-service/processors/index.ts +0 -5
- package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
- package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
- package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
- package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
- 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/html-transformer.service.d.ts +0 -50
- package/src/services/html-transformer.service.js +0 -163
- package/src/services/html-transformer.service.ts +0 -217
- package/src/services/page-module-import.service.d.ts +0 -37
- package/src/services/page-module-import.service.js +0 -88
- package/src/services/page-module-import.service.ts +0 -129
- package/src/services/page-request-cache-coordinator.service.ts +0 -128
- package/src/services/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 -359
- 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/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 -344
- /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
- /package/src/{internal-types.js → plugins/runtime-capability.js} +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.js +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
- /package/src/{public-types.js → services/module-loading/app-module-loader.service.js} +0 -0
- /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { fileSystem } from "@ecopages/file-system";
|
|
3
|
-
import {
|
|
4
|
-
import { BaseScriptProcessor } from "../base/base-script-processor";
|
|
3
|
+
import { getAppBuildAdapter } from "../../../../../build/build-adapter.js";
|
|
4
|
+
import { BaseScriptProcessor } from "../base/base-script-processor.js";
|
|
5
5
|
class NodeModuleScriptProcessor extends BaseScriptProcessor {
|
|
6
6
|
async process(dep) {
|
|
7
7
|
const modulePath = this.resolveModulePath(dep.importPath, this.appConfig.rootDir);
|
|
@@ -20,16 +20,19 @@ class NodeModuleScriptProcessor extends BaseScriptProcessor {
|
|
|
20
20
|
position: dep.position,
|
|
21
21
|
attributes: dep.attributes,
|
|
22
22
|
inline: true,
|
|
23
|
-
excludeFromHtml: dep.excludeFromHtml
|
|
23
|
+
excludeFromHtml: dep.excludeFromHtml,
|
|
24
|
+
packageRole: dep.packageRole,
|
|
25
|
+
bundledSourceFilepaths: dep.bundledSourceFilepaths
|
|
24
26
|
};
|
|
25
27
|
}
|
|
26
28
|
const outdir = path.join(this.getAssetsDir(), "vendors");
|
|
29
|
+
const bundlerOptions = this.getBundlerOptions(dep);
|
|
27
30
|
const filePath = await this.bundleScript({
|
|
28
31
|
entrypoint: modulePath,
|
|
29
32
|
outdir,
|
|
30
33
|
minify: this.isProduction,
|
|
31
|
-
naming: dep.name ? `${dep.name}-[hash].[ext]` : "[name]-[hash].[ext]",
|
|
32
|
-
...
|
|
34
|
+
naming: bundlerOptions.naming ?? (dep.name ? `${dep.name}-[hash].[ext]` : "[name]-[hash].[ext]"),
|
|
35
|
+
...bundlerOptions
|
|
33
36
|
});
|
|
34
37
|
return {
|
|
35
38
|
filepath: filePath,
|
|
@@ -37,7 +40,9 @@ class NodeModuleScriptProcessor extends BaseScriptProcessor {
|
|
|
37
40
|
position: dep.position,
|
|
38
41
|
attributes: dep.attributes,
|
|
39
42
|
inline: dep.inline,
|
|
40
|
-
excludeFromHtml: dep.excludeFromHtml
|
|
43
|
+
excludeFromHtml: dep.excludeFromHtml,
|
|
44
|
+
packageRole: dep.packageRole,
|
|
45
|
+
bundledSourceFilepaths: dep.bundledSourceFilepaths
|
|
41
46
|
};
|
|
42
47
|
});
|
|
43
48
|
}
|
|
@@ -46,7 +51,7 @@ class NodeModuleScriptProcessor extends BaseScriptProcessor {
|
|
|
46
51
|
return importPath;
|
|
47
52
|
}
|
|
48
53
|
try {
|
|
49
|
-
return
|
|
54
|
+
return getAppBuildAdapter(this.appConfig).resolve(importPath, rootDir);
|
|
50
55
|
} catch {
|
|
51
56
|
return this.resolveModulePathFallback(importPath, rootDir);
|
|
52
57
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import type { ContentStylesheetAsset, ProcessedAsset } from '../../assets.types';
|
|
2
|
-
import { BaseProcessor } from '../base/base-processor';
|
|
1
|
+
import type { ContentStylesheetAsset, ProcessedAsset } from '../../assets.types.js';
|
|
2
|
+
import { BaseProcessor } from '../base/base-processor.js';
|
|
3
3
|
export declare class ContentStylesheetProcessor extends BaseProcessor<ContentStylesheetAsset> {
|
|
4
|
+
private static readonly PROCESSABLE_STYLESHEET_EXTENSIONS;
|
|
5
|
+
private isProcessableStylesheet;
|
|
6
|
+
private applyStylesheetProcessors;
|
|
4
7
|
process(dep: ContentStylesheetAsset): Promise<ProcessedAsset>;
|
|
5
8
|
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { fileSystem } from "@ecopages/file-system";
|
|
3
|
+
import { BaseProcessor } from "../base/base-processor.js";
|
|
4
|
+
class ContentStylesheetProcessor extends BaseProcessor {
|
|
5
|
+
static PROCESSABLE_STYLESHEET_EXTENSIONS = /* @__PURE__ */ new Set([".css", ".scss", ".sass", ".less"]);
|
|
6
|
+
isProcessableStylesheet(filepath) {
|
|
7
|
+
return ContentStylesheetProcessor.PROCESSABLE_STYLESHEET_EXTENSIONS.has(path.extname(filepath));
|
|
8
|
+
}
|
|
9
|
+
async applyStylesheetProcessors(content, filepath) {
|
|
10
|
+
if (!this.isProcessableStylesheet(filepath)) {
|
|
11
|
+
return content;
|
|
12
|
+
}
|
|
13
|
+
let transformedContent = content;
|
|
14
|
+
const processors = this.appConfig.processors ? Array.from(this.appConfig.processors.values()) : [];
|
|
15
|
+
for (const processor of processors) {
|
|
16
|
+
const hasCapabilities = processor.getAssetCapabilities().length > 0;
|
|
17
|
+
const canProcessStylesheet = processor.canProcessAsset("stylesheet", filepath);
|
|
18
|
+
if (!canProcessStylesheet && (hasCapabilities || !processor.getName().includes("postcss"))) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (!processor.matchesFileFilter(filepath)) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const result = await processor.process(transformedContent, filepath);
|
|
25
|
+
if (typeof result === "string") {
|
|
26
|
+
transformedContent = result;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (result instanceof Buffer) {
|
|
30
|
+
transformedContent = result.toString();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return transformedContent;
|
|
34
|
+
}
|
|
35
|
+
async process(dep) {
|
|
36
|
+
const virtualFilepath = path.join(this.appConfig.absolutePaths.distDir, "styles", "page-bundle.css");
|
|
37
|
+
const processedContent = await this.applyStylesheetProcessors(dep.content, virtualFilepath);
|
|
38
|
+
const hash = this.generateHash(processedContent);
|
|
39
|
+
const filename = `style-${hash}.css`;
|
|
40
|
+
const cachekey = this.buildCacheKey(filename, hash, dep);
|
|
41
|
+
return this.getOrProcess(cachekey, () => {
|
|
42
|
+
const filepath = path.join(this.getAssetsDir(), "styles", filename);
|
|
43
|
+
if (!dep.inline) fileSystem.write(filepath, processedContent);
|
|
44
|
+
return {
|
|
45
|
+
filepath: dep.inline ? void 0 : filepath,
|
|
46
|
+
content: dep.inline ? processedContent : void 0,
|
|
47
|
+
kind: "stylesheet",
|
|
48
|
+
position: dep.position,
|
|
49
|
+
attributes: dep.attributes,
|
|
50
|
+
inline: dep.inline,
|
|
51
|
+
packageRole: dep.packageRole,
|
|
52
|
+
bundledSourceFilepaths: dep.bundledSourceFilepaths
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export {
|
|
58
|
+
ContentStylesheetProcessor
|
|
59
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { FileStylesheetAsset, ProcessedAsset } from '../../assets.types';
|
|
2
|
-
import { BaseProcessor } from '../base/base-processor';
|
|
1
|
+
import type { FileStylesheetAsset, ProcessedAsset } from '../../assets.types.js';
|
|
2
|
+
import { BaseProcessor } from '../base/base-processor.js';
|
|
3
3
|
export declare class FileStylesheetProcessor extends BaseProcessor<FileStylesheetAsset> {
|
|
4
4
|
private static readonly PROCESSABLE_STYLESHEET_EXTENSIONS;
|
|
5
5
|
getStyleContent: (srcUrl: string) => Buffer;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { fileSystem } from "@ecopages/file-system";
|
|
3
|
-
import { BaseProcessor } from "../base/base-processor";
|
|
3
|
+
import { BaseProcessor } from "../base/base-processor.js";
|
|
4
4
|
class FileStylesheetProcessor extends BaseProcessor {
|
|
5
5
|
static PROCESSABLE_STYLESHEET_EXTENSIONS = /* @__PURE__ */ new Set([".css", ".scss", ".sass", ".less"]);
|
|
6
6
|
getStyleContent = (srcUrl) => {
|
|
@@ -41,7 +41,10 @@ class FileStylesheetProcessor extends BaseProcessor {
|
|
|
41
41
|
const hash = this.generateHash(processedContent);
|
|
42
42
|
const cachekey = this.buildCacheKey(dep.filepath, hash, dep);
|
|
43
43
|
return this.getOrProcess(cachekey, () => {
|
|
44
|
-
const filepath = path.join(
|
|
44
|
+
const filepath = path.join(
|
|
45
|
+
this.getAssetsDir(),
|
|
46
|
+
path.relative(this.appConfig.absolutePaths.srcDir, dep.filepath)
|
|
47
|
+
);
|
|
45
48
|
const outputBuffer = Buffer.from(processedContent);
|
|
46
49
|
if (!dep.inline) {
|
|
47
50
|
fileSystem.ensureDir(path.dirname(filepath));
|
|
@@ -49,11 +52,14 @@ class FileStylesheetProcessor extends BaseProcessor {
|
|
|
49
52
|
}
|
|
50
53
|
return {
|
|
51
54
|
filepath,
|
|
55
|
+
sourceFilepath: dep.filepath,
|
|
52
56
|
content: dep.inline ? processedContent : void 0,
|
|
53
57
|
kind: "stylesheet",
|
|
54
58
|
position: dep.position,
|
|
55
59
|
attributes: dep.attributes,
|
|
56
|
-
inline: dep.inline
|
|
60
|
+
inline: dep.inline,
|
|
61
|
+
packageRole: dep.packageRole,
|
|
62
|
+
bundledSourceFilepaths: dep.bundledSourceFilepaths
|
|
57
63
|
};
|
|
58
64
|
});
|
|
59
65
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AssetProcessor } from './processor.interface.js';
|
|
2
|
+
import type { AssetDefinition, ProcessedAsset } from './assets.types.js';
|
|
3
|
+
type ProcessUngroupedDependencyOptions = {
|
|
4
|
+
dep: AssetDefinition;
|
|
5
|
+
key: string;
|
|
6
|
+
depKey: string;
|
|
7
|
+
getCachedAsset: (dep: AssetDefinition, depKey: string) => ProcessedAsset | null;
|
|
8
|
+
getProcessor: (dep: AssetDefinition) => AssetProcessor | undefined;
|
|
9
|
+
resolveProcessedAssetSrcUrl: (processed: ProcessedAsset) => string | undefined;
|
|
10
|
+
setCachedAsset: (dep: AssetDefinition, depKey: string, processed: ProcessedAsset) => void;
|
|
11
|
+
logMissingProcessor: (dep: AssetDefinition) => void;
|
|
12
|
+
logMissingFile: (dep: AssetDefinition & {
|
|
13
|
+
filepath: string;
|
|
14
|
+
}) => void;
|
|
15
|
+
logProcessingError: (dep: AssetDefinition, error: unknown) => void;
|
|
16
|
+
};
|
|
17
|
+
export declare function processUngroupedDependency(options: ProcessUngroupedDependencyOptions): Promise<ProcessedAsset | null>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { fileSystem } from "@ecopages/file-system";
|
|
2
|
+
async function processUngroupedDependency(options) {
|
|
3
|
+
const {
|
|
4
|
+
dep,
|
|
5
|
+
key,
|
|
6
|
+
depKey,
|
|
7
|
+
getCachedAsset,
|
|
8
|
+
getProcessor,
|
|
9
|
+
resolveProcessedAssetSrcUrl,
|
|
10
|
+
setCachedAsset,
|
|
11
|
+
logMissingProcessor,
|
|
12
|
+
logMissingFile,
|
|
13
|
+
logProcessingError
|
|
14
|
+
} = options;
|
|
15
|
+
const cached = getCachedAsset(dep, depKey);
|
|
16
|
+
if (cached) {
|
|
17
|
+
return { key, ...cached };
|
|
18
|
+
}
|
|
19
|
+
const processor = getProcessor(dep);
|
|
20
|
+
if (!processor) {
|
|
21
|
+
logMissingProcessor(dep);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
if (dep.source === "file" && "filepath" in dep && !fileSystem.exists(dep.filepath)) {
|
|
25
|
+
logMissingFile(dep);
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const processed = await processor.process(dep);
|
|
30
|
+
const srcUrl = resolveProcessedAssetSrcUrl(processed);
|
|
31
|
+
const processedWithKey = {
|
|
32
|
+
key,
|
|
33
|
+
...processed,
|
|
34
|
+
srcUrl
|
|
35
|
+
};
|
|
36
|
+
setCachedAsset(dep, depKey, processedWithKey);
|
|
37
|
+
return processedWithKey;
|
|
38
|
+
} catch (error) {
|
|
39
|
+
logProcessingError(dep, error);
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export {
|
|
44
|
+
processUngroupedDependency
|
|
45
|
+
};
|
|
@@ -0,0 +1,73 @@
|
|
|
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[];
|
|
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;
|
|
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[];
|
|
40
|
+
};
|
|
41
|
+
export interface BrowserBundleExecutor {
|
|
42
|
+
bundle(options: BrowserBundleOptions): Promise<BuildResult>;
|
|
43
|
+
}
|
|
44
|
+
export type BrowserBundleGroupedEntry = {
|
|
45
|
+
entrypoint: string;
|
|
46
|
+
entryName: string;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* App-owned boundary for browser-oriented bundle work.
|
|
50
|
+
*
|
|
51
|
+
* @remarks
|
|
52
|
+
* This service owns the shared browser transpile defaults and ensures browser
|
|
53
|
+
* builds always run through the app-owned executor rather than direct backend
|
|
54
|
+
* calls scattered across HMR and asset processing paths.
|
|
55
|
+
*/
|
|
56
|
+
export declare class BrowserBundleService implements BrowserBundleExecutor {
|
|
57
|
+
private readonly appConfig;
|
|
58
|
+
/**
|
|
59
|
+
* Creates the browser bundle boundary for one finalized app instance.
|
|
60
|
+
*/
|
|
61
|
+
constructor(appConfig: EcoPagesAppConfig);
|
|
62
|
+
/**
|
|
63
|
+
* Runs one browser-targeted build through the app-owned executor.
|
|
64
|
+
*
|
|
65
|
+
* @remarks
|
|
66
|
+
* Browser defaults and app-owned browser build plugins are applied here so HMR
|
|
67
|
+
* and runtime asset generation do not have to recreate that policy at each call
|
|
68
|
+
* site.
|
|
69
|
+
*/
|
|
70
|
+
bundle(options: BrowserBundleOptions): Promise<BuildResult>;
|
|
71
|
+
bundleGroupedEntries(entries: BrowserBundleGroupedEntry[], options: BrowserBundleGroupedOptions): Promise<BuildResult>;
|
|
72
|
+
}
|
|
73
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { getAppBrowserBuildPlugins, getAppBuildExecutor, getAppTranspileOptions } from "../../build/build-adapter.js";
|
|
2
|
+
import { mergeEcoBuildPlugins } from "../../build/build-manifest.js";
|
|
3
|
+
class BrowserBundleService {
|
|
4
|
+
appConfig;
|
|
5
|
+
/**
|
|
6
|
+
* Creates the browser bundle boundary for one finalized app instance.
|
|
7
|
+
*/
|
|
8
|
+
constructor(appConfig) {
|
|
9
|
+
this.appConfig = appConfig;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Runs one browser-targeted build through the app-owned executor.
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* Browser defaults and app-owned browser build plugins are applied here so HMR
|
|
16
|
+
* and runtime asset generation do not have to recreate that policy at each call
|
|
17
|
+
* site.
|
|
18
|
+
*/
|
|
19
|
+
async bundle(options) {
|
|
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
|
+
const request = {
|
|
24
|
+
...rawBuildOptions,
|
|
25
|
+
entrypoints: options.entrypoints,
|
|
26
|
+
...getAppTranspileOptions(this.appConfig, profile),
|
|
27
|
+
plugins: mergeEcoBuildPlugins(plugins, filteredAppBrowserPlugins)
|
|
28
|
+
};
|
|
29
|
+
return await getAppBuildExecutor(this.appConfig).build(request);
|
|
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
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
BrowserBundleService
|
|
41
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type PageCacheService } from './
|
|
2
|
-
import type { CacheStrategy, RenderResult } from './cache
|
|
1
|
+
import { type PageCacheService } from './page-cache-service.js';
|
|
2
|
+
import type { CacheStrategy, RenderResult } from './cache.types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Coordinates request-time page caching concerns around one render invocation.
|
|
5
5
|
*
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { getCacheControlHeader } from "./
|
|
1
|
+
import { getCacheControlHeader } from "./page-cache-service.js";
|
|
2
2
|
class PageRequestCacheCoordinator {
|
|
3
|
+
cacheService;
|
|
4
|
+
defaultCacheStrategy;
|
|
3
5
|
constructor(cacheService, defaultCacheStrategy) {
|
|
4
6
|
this.cacheService = cacheService;
|
|
5
7
|
this.defaultCacheStrategy = defaultCacheStrategy;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export type HtmlRewriterElement = {
|
|
2
|
+
append(content: string, options?: {
|
|
3
|
+
html?: boolean;
|
|
4
|
+
}): void;
|
|
5
|
+
};
|
|
6
|
+
export type HtmlRewriterRuntime = {
|
|
7
|
+
on(selector: 'head' | 'body', handler: {
|
|
8
|
+
element: (element: HtmlRewriterElement) => void;
|
|
9
|
+
}): HtmlRewriterRuntime;
|
|
10
|
+
transform(response: Response): Response;
|
|
11
|
+
};
|
|
12
|
+
export type HtmlRewriterConstructor = new () => HtmlRewriterRuntime;
|
|
13
|
+
export type HtmlRewriterMode = 'auto' | 'native' | 'worker-tools' | 'fallback';
|
|
14
|
+
export interface HtmlRewriterProvider {
|
|
15
|
+
createHtmlRewriter(): Promise<HtmlRewriterRuntime | null>;
|
|
16
|
+
setMode(mode: HtmlRewriterMode): void;
|
|
17
|
+
}
|
|
18
|
+
export interface HtmlRewriterLogger {
|
|
19
|
+
warn(message: string): void;
|
|
20
|
+
}
|
|
21
|
+
export interface DefaultHtmlRewriterProviderOptions {
|
|
22
|
+
mode?: HtmlRewriterMode;
|
|
23
|
+
logger?: HtmlRewriterLogger;
|
|
24
|
+
getNativeHtmlRewriter?: () => HtmlRewriterConstructor | undefined;
|
|
25
|
+
loadWorkerToolsHtmlRewriter?: () => Promise<HtmlRewriterConstructor | null>;
|
|
26
|
+
}
|
|
27
|
+
export declare class DefaultHtmlRewriterProvider implements HtmlRewriterProvider {
|
|
28
|
+
private htmlRewriterConstructorPromise?;
|
|
29
|
+
private htmlRewriterMode;
|
|
30
|
+
private logger;
|
|
31
|
+
private getNativeHtmlRewriter;
|
|
32
|
+
private loadWorkerToolsHtmlRewriter;
|
|
33
|
+
constructor(options?: DefaultHtmlRewriterProviderOptions);
|
|
34
|
+
setMode(mode: HtmlRewriterMode): void;
|
|
35
|
+
createHtmlRewriter(): Promise<HtmlRewriterRuntime | null>;
|
|
36
|
+
private resolveHtmlRewriterConstructor;
|
|
37
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { appLogger } from "../../global/app-logger.js";
|
|
2
|
+
class DefaultHtmlRewriterProvider {
|
|
3
|
+
htmlRewriterConstructorPromise;
|
|
4
|
+
htmlRewriterMode;
|
|
5
|
+
logger;
|
|
6
|
+
getNativeHtmlRewriter;
|
|
7
|
+
loadWorkerToolsHtmlRewriter;
|
|
8
|
+
constructor(options = {}) {
|
|
9
|
+
this.htmlRewriterMode = options.mode ?? "auto";
|
|
10
|
+
this.logger = options.logger ?? appLogger;
|
|
11
|
+
this.getNativeHtmlRewriter = options.getNativeHtmlRewriter ?? (() => globalThis.HTMLRewriter);
|
|
12
|
+
this.loadWorkerToolsHtmlRewriter = options.loadWorkerToolsHtmlRewriter ?? loadWorkerToolsHtmlRewriter;
|
|
13
|
+
}
|
|
14
|
+
setMode(mode) {
|
|
15
|
+
this.htmlRewriterMode = mode;
|
|
16
|
+
this.htmlRewriterConstructorPromise = void 0;
|
|
17
|
+
}
|
|
18
|
+
async createHtmlRewriter() {
|
|
19
|
+
const RuntimeHtmlRewriter = await this.resolveHtmlRewriterConstructor();
|
|
20
|
+
return RuntimeHtmlRewriter ? new RuntimeHtmlRewriter() : null;
|
|
21
|
+
}
|
|
22
|
+
async resolveHtmlRewriterConstructor() {
|
|
23
|
+
if (!this.htmlRewriterConstructorPromise) {
|
|
24
|
+
const mode = this.htmlRewriterMode;
|
|
25
|
+
const RuntimeHtmlRewriter = this.getNativeHtmlRewriter();
|
|
26
|
+
if (mode === "fallback") {
|
|
27
|
+
this.htmlRewriterConstructorPromise = Promise.resolve(null);
|
|
28
|
+
} else if (mode === "native") {
|
|
29
|
+
if (RuntimeHtmlRewriter) {
|
|
30
|
+
this.htmlRewriterConstructorPromise = Promise.resolve(RuntimeHtmlRewriter);
|
|
31
|
+
} else {
|
|
32
|
+
this.logger.warn(
|
|
33
|
+
"[HtmlTransformerService] Native HTMLRewriter was forced but is unavailable, falling back to string injection."
|
|
34
|
+
);
|
|
35
|
+
this.htmlRewriterConstructorPromise = Promise.resolve(null);
|
|
36
|
+
}
|
|
37
|
+
} else if (mode === "auto" && RuntimeHtmlRewriter) {
|
|
38
|
+
this.htmlRewriterConstructorPromise = Promise.resolve(RuntimeHtmlRewriter);
|
|
39
|
+
} else {
|
|
40
|
+
this.htmlRewriterConstructorPromise = this.loadWorkerToolsHtmlRewriter();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return this.htmlRewriterConstructorPromise;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function loadWorkerToolsHtmlRewriter() {
|
|
47
|
+
try {
|
|
48
|
+
const module = await import("@worker-tools/html-rewriter/base64");
|
|
49
|
+
return module.HTMLRewriter;
|
|
50
|
+
} catch (primaryError) {
|
|
51
|
+
try {
|
|
52
|
+
const runtimeLocalModule = await import(
|
|
53
|
+
/* @vite-ignore */
|
|
54
|
+
new URL("../node_modules/@worker-tools/html-rewriter/base64.js", import.meta.url).href
|
|
55
|
+
);
|
|
56
|
+
return runtimeLocalModule.HTMLRewriter;
|
|
57
|
+
} catch {
|
|
58
|
+
const message = primaryError instanceof Error ? primaryError.message : String(primaryError);
|
|
59
|
+
appLogger.warn(
|
|
60
|
+
`[HtmlTransformerService] Failed to load @worker-tools/html-rewriter/base64, falling back to string injection: ${message}`
|
|
61
|
+
);
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export {
|
|
67
|
+
DefaultHtmlRewriterProvider
|
|
68
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
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 interface HtmlTransformerServiceOptions {
|
|
5
|
+
htmlRewriterMode?: HtmlRewriterMode;
|
|
6
|
+
htmlRewriterProvider?: HtmlRewriterProvider;
|
|
7
|
+
}
|
|
8
|
+
export declare class HtmlTransformerService {
|
|
9
|
+
private processedDependencies;
|
|
10
|
+
private pagePackage?;
|
|
11
|
+
private htmlRewriterProvider;
|
|
12
|
+
constructor(options?: HtmlTransformerServiceOptions);
|
|
13
|
+
/**
|
|
14
|
+
* Overrides the HTML rewriter runtime selection.
|
|
15
|
+
*
|
|
16
|
+
* This is intended for internal/runtime tests that need deterministic
|
|
17
|
+
* selection between native, worker-tools, and string fallback behavior.
|
|
18
|
+
*
|
|
19
|
+
* @param mode Requested runtime selection strategy.
|
|
20
|
+
*/
|
|
21
|
+
setHtmlRewriterMode(mode: HtmlRewriterMode): void;
|
|
22
|
+
private formatAttributes;
|
|
23
|
+
private generateScriptTag;
|
|
24
|
+
private generateStylesheetTag;
|
|
25
|
+
private appendDependencies;
|
|
26
|
+
private buildDependencyTags;
|
|
27
|
+
/**
|
|
28
|
+
* Injects generated markup immediately before the closing HTML tag when it is
|
|
29
|
+
* present, or appends/prepends a fallback insertion otherwise.
|
|
30
|
+
*/
|
|
31
|
+
private injectBeforeClosingTag;
|
|
32
|
+
/**
|
|
33
|
+
* Replaces the current processed dependency set used during HTML finalization.
|
|
34
|
+
*/
|
|
35
|
+
setProcessedDependencies(processedDependencies: ProcessedAsset[]): void;
|
|
36
|
+
/**
|
|
37
|
+
* Replaces the current structured page package used during HTML finalization.
|
|
38
|
+
*/
|
|
39
|
+
setPagePackage(pagePackage: PagePackageResult): void;
|
|
40
|
+
/**
|
|
41
|
+
* Returns the processed dependencies queued for the next transform pass.
|
|
42
|
+
*/
|
|
43
|
+
getProcessedDependencies(): ProcessedAsset[];
|
|
44
|
+
/**
|
|
45
|
+
* Returns the structured page package queued for the next transform pass.
|
|
46
|
+
*/
|
|
47
|
+
getPagePackage(): PagePackageResult | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Applies attributes to the opening `<html>` tag when present.
|
|
50
|
+
*/
|
|
51
|
+
applyAttributesToHtmlElement(html: string, attributes: Record<string, string>): string;
|
|
52
|
+
/**
|
|
53
|
+
* Applies attributes to the first element nested directly under `<body>`.
|
|
54
|
+
*/
|
|
55
|
+
applyAttributesToFirstBodyElement(html: string, attributes: Record<string, string>): string;
|
|
56
|
+
/**
|
|
57
|
+
* Applies attributes to the first element in a fragment or full-document HTML
|
|
58
|
+
* string.
|
|
59
|
+
*/
|
|
60
|
+
applyAttributesToFirstElement(html: string, attributes: Record<string, string>): string;
|
|
61
|
+
/**
|
|
62
|
+
* Removes duplicate processed assets while preserving first-seen order.
|
|
63
|
+
*
|
|
64
|
+
* @remarks
|
|
65
|
+
* Dedupe keys include structural asset fields and HTML attributes so repeated
|
|
66
|
+
* orchestration passes can merge assets safely without collapsing distinct tag
|
|
67
|
+
* variants.
|
|
68
|
+
*/
|
|
69
|
+
dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
|
|
70
|
+
/**
|
|
71
|
+
* Injects the currently processed dependencies into an HTML response.
|
|
72
|
+
*
|
|
73
|
+
* @remarks
|
|
74
|
+
* Native or worker-tools HTML rewriter support is preferred when available. A
|
|
75
|
+
* string-based fallback remains in place for runtimes that cannot provide one
|
|
76
|
+
* of those rewriter implementations.
|
|
77
|
+
*/
|
|
78
|
+
transform(res: Response): Promise<Response>;
|
|
79
|
+
/**
|
|
80
|
+
* Splits processed assets into head and body injection groups.
|
|
81
|
+
*/
|
|
82
|
+
private groupDependenciesByPosition;
|
|
83
|
+
/**
|
|
84
|
+
* Builds a serialized HTML attribute string from an attribute object.
|
|
85
|
+
*/
|
|
86
|
+
private buildAttributeString;
|
|
87
|
+
}
|