@ecopages/core 0.2.0-alpha.1 → 0.2.0-alpha.11
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 +16 -64
- package/README.md +210 -13
- package/package.json +88 -62
- 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 +4 -12
- package/src/adapters/bun/create-app.js +4 -5
- package/src/adapters/bun/hmr-manager.d.ts +80 -21
- package/src/adapters/bun/hmr-manager.js +163 -56
- 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 +40 -34
- 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 +89 -18
- package/src/adapters/node/node-hmr-manager.js +180 -89
- package/src/adapters/node/server-adapter.d.ts +4 -33
- package/src/adapters/node/server-adapter.js +39 -100
- 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-route-matcher.d.ts +2 -2
- package/src/adapters/shared/explicit-static-route-matcher.js +4 -1
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +1 -1
- package/src/adapters/shared/file-route-middleware-pipeline.js +1 -0
- package/src/adapters/shared/fs-server-response-factory.d.ts +2 -2
- package/src/adapters/shared/fs-server-response-factory.js +1 -1
- package/src/adapters/shared/fs-server-response-matcher.d.ts +9 -5
- package/src/adapters/shared/fs-server-response-matcher.js +13 -8
- 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 +2 -1
- 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 +13 -3
- package/src/adapters/shared/server-adapter.js +42 -5
- package/src/adapters/shared/server-route-handler.d.ts +4 -4
- package/src/adapters/shared/server-route-handler.js +6 -15
- package/src/adapters/shared/server-static-builder.d.ts +38 -6
- package/src/adapters/shared/server-static-builder.js +64 -10
- package/src/build/README.md +107 -0
- package/src/build/build-adapter.d.ts +160 -3
- package/src/build/build-adapter.js +494 -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 +52 -18
- package/src/config/config-builder.js +258 -48
- 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/sc-server.d.ts +1 -1
- package/src/dev/sc-server.js +1 -1
- package/src/eco/README.md +70 -16
- package/src/eco/component-render-context.d.ts +2 -2
- package/src/eco/component-render-context.js +33 -16
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +83 -0
- package/src/eco/eco.js +91 -16
- package/src/eco/eco.types.d.ts +12 -4
- package/src/eco/eco.utils.d.ts +1 -1
- package/src/eco/global-injector-map.d.ts +1 -1
- package/src/eco/lazy-injector-map.d.ts +1 -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 +30 -7
- package/src/hmr/hmr-strategy.d.ts +8 -7
- 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 -43
- package/src/hmr/strategies/js-hmr-strategy.js +72 -73
- 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 +2 -2
- package/src/integrations/ghtml/ghtml-renderer.js +3 -1
- package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -2
- package/src/integrations/ghtml/ghtml.plugin.js +2 -2
- 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 -21
- package/src/plugins/integration-plugin.d.ts +48 -9
- package/src/plugins/integration-plugin.js +39 -2
- package/src/plugins/processor.d.ts +15 -2
- package/src/plugins/processor.js +16 -2
- 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 +18 -22
- package/src/route-renderer/README.md +15 -26
- package/src/route-renderer/{component-graph-executor.d.ts → component-graph/component-graph-executor.d.ts} +3 -2
- package/src/route-renderer/{component-graph-executor.js → component-graph/component-graph-executor.js} +2 -3
- package/src/route-renderer/{component-graph.d.ts → component-graph/component-graph.d.ts} +13 -2
- package/src/route-renderer/{component-graph.js → component-graph/component-graph.js} +26 -4
- package/src/route-renderer/component-graph/component-reference.d.ts +11 -0
- package/src/route-renderer/component-graph/component-reference.js +39 -0
- package/src/route-renderer/{marker-graph-resolver.d.ts → component-graph/marker-graph-resolver.d.ts} +9 -6
- package/src/route-renderer/{marker-graph-resolver.js → component-graph/marker-graph-resolver.js} +36 -12
- package/src/route-renderer/{integration-renderer.d.ts → orchestration/integration-renderer.d.ts} +65 -13
- package/src/route-renderer/{integration-renderer.js → orchestration/integration-renderer.js} +206 -30
- package/src/route-renderer/{render-execution.service.d.ts → orchestration/render-execution.service.d.ts} +42 -6
- package/src/route-renderer/orchestration/render-execution.service.js +191 -0
- package/src/route-renderer/{render-preparation.service.d.ts → orchestration/render-preparation.service.d.ts} +13 -4
- package/src/route-renderer/{render-preparation.service.js → orchestration/render-preparation.service.js} +95 -5
- package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
- package/src/route-renderer/{dependency-resolver.js → page-loading/dependency-resolver.js} +18 -4
- package/src/route-renderer/page-loading/page-module-loader.d.ts +89 -0
- package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +38 -14
- package/src/route-renderer/route-renderer.d.ts +41 -4
- package/src/route-renderer/route-renderer.js +32 -3
- package/src/router/README.md +97 -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 +149 -0
- package/src/router/client/navigation-coordinator.js +215 -0
- package/src/router/{fs-router-scanner.d.ts → server/fs-router-scanner.d.ts} +3 -3
- package/src/router/{fs-router-scanner.js → server/fs-router-scanner.js} +8 -7
- package/src/router/{fs-router.d.ts → server/fs-router.d.ts} +1 -1
- package/src/router/{fs-router.js → server/fs-router.js} +1 -1
- package/src/services/README.md +29 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +120 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +91 -10
- 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 +2 -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 +48 -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/index.d.ts +5 -0
- package/src/services/assets/asset-processing-service/index.js +5 -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 +9 -4
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-script-processor.d.ts +5 -4
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-script-processor.js +15 -23
- 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 +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.js +1 -1
- 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 +16 -4
- 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 +6 -5
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.js +1 -1
- 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 +5 -2
- package/src/services/assets/browser-bundle.service.d.ts +32 -0
- package/src/services/assets/browser-bundle.service.js +33 -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 +77 -0
- package/src/services/html/html-transformer.service.js +215 -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 +25 -0
- package/src/services/module-loading/app-module-loader.service.js +31 -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 +109 -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/node-bootstrap-plugin.d.ts +22 -0
- package/src/services/module-loading/node-bootstrap-plugin.js +179 -0
- package/src/services/module-loading/page-module-import.service.d.ts +75 -0
- package/src/services/module-loading/page-module-import.service.js +161 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +72 -0
- package/src/services/module-loading/server-module-transpiler.service.js +64 -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/runtime-specifier-registry.service.d.ts +69 -0
- package/src/services/runtime-state/runtime-specifier-registry.service.js +37 -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 +55 -3
- package/src/static-site-generator/static-site-generator.js +86 -5
- package/src/{internal-types.d.ts → types/internal-types.d.ts} +53 -22
- package/src/types/internal-types.js +0 -0
- package/src/{public-types.d.ts → types/public-types.d.ts} +73 -17
- package/src/types/public-types.js +0 -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 -24
- package/src/watchers/project-watcher.js +105 -68
- package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
- package/src/watchers/project-watcher.test-helpers.js +1 -0
- 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 -281
- 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 -271
- 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.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 -308
- 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 -1255
- package/src/route-renderer/component-graph-executor.ts +0 -84
- package/src/route-renderer/component-graph.ts +0 -159
- package/src/route-renderer/component-marker.ts +0 -117
- 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.ts +0 -696
- 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.js +0 -91
- package/src/route-renderer/render-execution.service.ts +0 -158
- 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.ts +0 -217
- 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.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.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.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 -40
- package/src/watchers/project-watcher.ts +0 -306
- /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
- /package/src/{internal-types.js → plugins/runtime-capability.js} +0 -0
- /package/src/route-renderer/{component-marker.d.ts → component-graph/component-marker.d.ts} +0 -0
- /package/src/route-renderer/{component-marker.js → component-graph/component-marker.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/module-loading-types.js} +0 -0
- /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { appLogger } from "
|
|
2
|
-
import {
|
|
1
|
+
import { appLogger } from "../../../../../global/app-logger.js";
|
|
2
|
+
import { getAppBrowserBuildPlugins } from "../../../../../build/build-adapter.js";
|
|
3
3
|
import { fileSystem } from "@ecopages/file-system";
|
|
4
4
|
import path from "node:path";
|
|
5
|
-
import { BaseProcessor } from "./base-processor";
|
|
5
|
+
import { BaseProcessor } from "./base-processor.js";
|
|
6
|
+
import { BrowserBundleService } from "../../../browser-bundle.service.js";
|
|
6
7
|
class BaseScriptProcessor extends BaseProcessor {
|
|
8
|
+
browserBundleService;
|
|
7
9
|
constructor({ appConfig }) {
|
|
8
10
|
super({ appConfig });
|
|
11
|
+
this.browserBundleService = new BrowserBundleService(appConfig);
|
|
9
12
|
}
|
|
10
13
|
shouldBundle(dep) {
|
|
11
14
|
return dep.bundle !== false;
|
|
@@ -14,18 +17,7 @@ class BaseScriptProcessor extends BaseProcessor {
|
|
|
14
17
|
return dep.bundleOptions || {};
|
|
15
18
|
}
|
|
16
19
|
collectBuildPlugins() {
|
|
17
|
-
|
|
18
|
-
if (this.appConfig.processors?.size) {
|
|
19
|
-
for (const processor of this.appConfig.processors.values()) {
|
|
20
|
-
if (processor.buildPlugins) {
|
|
21
|
-
plugins.push(...processor.buildPlugins);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
if (this.appConfig.loaders?.size) {
|
|
26
|
-
plugins.push(...this.appConfig.loaders.values());
|
|
27
|
-
}
|
|
28
|
-
return plugins;
|
|
20
|
+
return getAppBrowserBuildPlugins(this.appConfig);
|
|
29
21
|
}
|
|
30
22
|
async bundleScript({
|
|
31
23
|
entrypoint,
|
|
@@ -35,31 +27,31 @@ class BaseScriptProcessor extends BaseProcessor {
|
|
|
35
27
|
}) {
|
|
36
28
|
const buildPlugins = this.collectBuildPlugins();
|
|
37
29
|
const allPlugins = additionalPlugins ? [...additionalPlugins, ...buildPlugins] : buildPlugins;
|
|
38
|
-
const
|
|
30
|
+
const buildResult = await this.browserBundleService.bundle({
|
|
31
|
+
profile: "browser-script",
|
|
39
32
|
entrypoints: [entrypoint],
|
|
40
33
|
outdir,
|
|
41
34
|
root: this.appConfig.rootDir,
|
|
42
|
-
...defaultBuildAdapter.getTranspileOptions("browser-script"),
|
|
43
35
|
splitting: true,
|
|
44
36
|
naming: "[name]-[hash].[ext]",
|
|
45
37
|
plugins: allPlugins,
|
|
46
38
|
...rest
|
|
47
39
|
});
|
|
48
|
-
if (!
|
|
49
|
-
for (const log of
|
|
40
|
+
if (!buildResult.success) {
|
|
41
|
+
for (const log of buildResult.logs) {
|
|
50
42
|
appLogger.debug(log.message, log);
|
|
51
43
|
}
|
|
52
44
|
}
|
|
53
45
|
const entryBaseName = path.parse(entrypoint).name;
|
|
54
|
-
const entryOutput =
|
|
46
|
+
const entryOutput = buildResult.outputs.map((output) => output.path).find((outputPath) => path.basename(outputPath) === `${entryBaseName}.js`);
|
|
55
47
|
if (entryOutput) {
|
|
56
48
|
return entryOutput;
|
|
57
49
|
}
|
|
58
|
-
const nonVendorOutput =
|
|
50
|
+
const nonVendorOutput = buildResult.outputs.map((output) => output.path).find((outputPath) => !path.basename(outputPath).startsWith("vendors"));
|
|
59
51
|
if (nonVendorOutput) {
|
|
60
52
|
return nonVendorOutput;
|
|
61
53
|
}
|
|
62
|
-
const primaryOutput =
|
|
54
|
+
const primaryOutput = buildResult.outputs[0]?.path;
|
|
63
55
|
if (primaryOutput) {
|
|
64
56
|
return primaryOutput;
|
|
65
57
|
}
|
|
@@ -71,7 +63,7 @@ class BaseScriptProcessor extends BaseProcessor {
|
|
|
71
63
|
if (fileSystem.exists(fallbackOutput)) {
|
|
72
64
|
return fallbackOutput;
|
|
73
65
|
}
|
|
74
|
-
const logMessage =
|
|
66
|
+
const logMessage = buildResult.logs.map((log) => log.message).join(" | ");
|
|
75
67
|
throw new Error(`No build output generated for ${entrypoint}${logMessage ? `: ${logMessage}` : ""}`);
|
|
76
68
|
}
|
|
77
69
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './script/content-script.processor.js';
|
|
2
|
+
export * from './script/file-script.processor.js';
|
|
3
|
+
export * from './script/node-module-script.processor.js';
|
|
4
|
+
export * from './stylesheet/content-stylesheet.processor.js';
|
|
5
|
+
export * from './stylesheet/file-stylesheet.processor.js';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from "./script/content-script.processor.js";
|
|
2
|
+
export * from "./script/file-script.processor.js";
|
|
3
|
+
export * from "./script/node-module-script.processor.js";
|
|
4
|
+
export * from "./stylesheet/content-stylesheet.processor.js";
|
|
5
|
+
export * from "./stylesheet/file-stylesheet.processor.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ContentScriptAsset, ProcessedAsset } from '../../assets.types';
|
|
2
|
-
import { BaseScriptProcessor } from '../base/base-script-processor';
|
|
1
|
+
import type { ContentScriptAsset, ProcessedAsset } from '../../assets.types.js';
|
|
2
|
+
import { BaseScriptProcessor } from '../base/base-script-processor.js';
|
|
3
3
|
export declare class ContentScriptProcessor extends BaseScriptProcessor<ContentScriptAsset> {
|
|
4
4
|
process(dep: ContentScriptAsset): Promise<ProcessedAsset>;
|
|
5
5
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { fileSystem } from "@ecopages/file-system";
|
|
3
|
-
import { BaseScriptProcessor } from "../base/base-script-processor";
|
|
3
|
+
import { BaseScriptProcessor } from "../base/base-script-processor.js";
|
|
4
4
|
class ContentScriptProcessor extends BaseScriptProcessor {
|
|
5
5
|
async process(dep) {
|
|
6
6
|
const hash = this.generateHash(dep.content);
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { IHmrManager } from '
|
|
2
|
-
import type { FileScriptAsset, ProcessedAsset } from '../../assets.types';
|
|
3
|
-
import { BaseScriptProcessor } from '../base/base-script-processor';
|
|
1
|
+
import type { IHmrManager } from '../../../../../types/internal-types.js';
|
|
2
|
+
import type { FileScriptAsset, ProcessedAsset } from '../../assets.types.js';
|
|
3
|
+
import { BaseScriptProcessor } from '../base/base-script-processor.js';
|
|
4
4
|
export declare class FileScriptProcessor extends BaseScriptProcessor<FileScriptAsset> {
|
|
5
5
|
private hmrManager?;
|
|
6
|
+
private resolveHmrOutputFilepath;
|
|
6
7
|
setHmrManager(hmrManager: IHmrManager): void;
|
|
7
8
|
process(dep: FileScriptAsset): Promise<ProcessedAsset>;
|
|
8
9
|
}
|
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import { RESOLVED_ASSETS_DIR } from "
|
|
2
|
+
import { RESOLVED_ASSETS_DIR } from "../../../../../config/constants.js";
|
|
3
3
|
import { fileSystem } from "@ecopages/file-system";
|
|
4
|
-
import { BaseScriptProcessor } from "../base/base-script-processor";
|
|
4
|
+
import { BaseScriptProcessor } from "../base/base-script-processor.js";
|
|
5
5
|
class FileScriptProcessor extends BaseScriptProcessor {
|
|
6
6
|
hmrManager;
|
|
7
|
+
resolveHmrOutputFilepath(entrypointPath) {
|
|
8
|
+
if (!this.hmrManager || !("getDistDir" in this.hmrManager)) {
|
|
9
|
+
return void 0;
|
|
10
|
+
}
|
|
11
|
+
const getDistDir = this.hmrManager.getDistDir;
|
|
12
|
+
if (typeof getDistDir !== "function") {
|
|
13
|
+
return void 0;
|
|
14
|
+
}
|
|
15
|
+
const relativePathJs = path.relative(this.appConfig.absolutePaths.srcDir, entrypointPath).replace(/\.(tsx?|jsx?|mdx?)$/, ".js").replace(/\[([^\]]+)\]/g, "_$1_");
|
|
16
|
+
return path.join(getDistDir.call(this.hmrManager), relativePathJs);
|
|
17
|
+
}
|
|
7
18
|
setHmrManager(hmrManager) {
|
|
8
19
|
this.hmrManager = hmrManager;
|
|
9
20
|
}
|
|
10
21
|
async process(dep) {
|
|
11
22
|
if (this.hmrManager?.isEnabled() && !dep.inline) {
|
|
12
|
-
const outputUrl = await this.hmrManager.
|
|
23
|
+
const outputUrl = await this.hmrManager.registerScriptEntrypoint(dep.filepath);
|
|
24
|
+
const outputFilepath = this.resolveHmrOutputFilepath(dep.filepath);
|
|
13
25
|
return {
|
|
14
|
-
filepath: dep.filepath,
|
|
26
|
+
filepath: outputFilepath ?? dep.filepath,
|
|
15
27
|
srcUrl: outputUrl,
|
|
16
28
|
kind: "script",
|
|
17
29
|
position: dep.position,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { NodeModuleScriptAsset } from '../../assets.types';
|
|
2
|
-
import { BaseScriptProcessor } from '../base/base-script-processor';
|
|
1
|
+
import type { NodeModuleScriptAsset } from '../../assets.types.js';
|
|
2
|
+
import { BaseScriptProcessor } from '../base/base-script-processor.js';
|
|
3
3
|
export declare class NodeModuleScriptProcessor extends BaseScriptProcessor<NodeModuleScriptAsset> {
|
|
4
|
-
process(dep: NodeModuleScriptAsset): Promise<import("../../assets.types").ProcessedAsset>;
|
|
4
|
+
process(dep: NodeModuleScriptAsset): Promise<import("../../assets.types.js").ProcessedAsset>;
|
|
5
5
|
private resolveModulePath;
|
|
6
6
|
private resolveModulePathFallback;
|
|
7
7
|
}
|
|
@@ -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);
|
|
@@ -24,12 +24,13 @@ class NodeModuleScriptProcessor extends BaseScriptProcessor {
|
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
26
|
const outdir = path.join(this.getAssetsDir(), "vendors");
|
|
27
|
+
const bundlerOptions = this.getBundlerOptions(dep);
|
|
27
28
|
const filePath = await this.bundleScript({
|
|
28
29
|
entrypoint: modulePath,
|
|
29
30
|
outdir,
|
|
30
31
|
minify: this.isProduction,
|
|
31
|
-
naming: dep.name ? `${dep.name}-[hash].[ext]` : "[name]-[hash].[ext]",
|
|
32
|
-
...
|
|
32
|
+
naming: bundlerOptions.naming ?? (dep.name ? `${dep.name}-[hash].[ext]` : "[name]-[hash].[ext]"),
|
|
33
|
+
...bundlerOptions
|
|
33
34
|
});
|
|
34
35
|
return {
|
|
35
36
|
filepath: filePath,
|
|
@@ -46,7 +47,7 @@ class NodeModuleScriptProcessor extends BaseScriptProcessor {
|
|
|
46
47
|
return importPath;
|
|
47
48
|
}
|
|
48
49
|
try {
|
|
49
|
-
return
|
|
50
|
+
return getAppBuildAdapter(this.appConfig).resolve(importPath, rootDir);
|
|
50
51
|
} catch {
|
|
51
52
|
return this.resolveModulePathFallback(importPath, rootDir);
|
|
52
53
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
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
4
|
process(dep: ContentStylesheetAsset): Promise<ProcessedAsset>;
|
|
5
5
|
}
|
|
@@ -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 ContentStylesheetProcessor extends BaseProcessor {
|
|
5
5
|
async process(dep) {
|
|
6
6
|
const hash = this.generateHash(dep.content);
|
|
@@ -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));
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { BuildOptions, BuildResult, BuildTranspileProfile } from '../../build/build-adapter.js';
|
|
2
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
3
|
+
export type BrowserBundleOptions = Omit<BuildOptions, 'target' | 'format' | 'sourcemap'> & {
|
|
4
|
+
profile: BuildTranspileProfile;
|
|
5
|
+
};
|
|
6
|
+
export interface BrowserBundleExecutor {
|
|
7
|
+
bundle(options: BrowserBundleOptions): Promise<BuildResult>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* App-owned boundary for browser-oriented bundle work.
|
|
11
|
+
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* This service owns the shared browser transpile defaults and ensures browser
|
|
14
|
+
* builds always run through the app-owned executor rather than direct backend
|
|
15
|
+
* calls scattered across HMR and asset processing paths.
|
|
16
|
+
*/
|
|
17
|
+
export declare class BrowserBundleService implements BrowserBundleExecutor {
|
|
18
|
+
private readonly appConfig;
|
|
19
|
+
/**
|
|
20
|
+
* Creates the browser bundle boundary for one finalized app instance.
|
|
21
|
+
*/
|
|
22
|
+
constructor(appConfig: EcoPagesAppConfig);
|
|
23
|
+
/**
|
|
24
|
+
* Runs one browser-targeted build through the app-owned executor.
|
|
25
|
+
*
|
|
26
|
+
* @remarks
|
|
27
|
+
* Browser defaults and app-owned browser build plugins are applied here so HMR
|
|
28
|
+
* and runtime asset generation do not have to recreate that policy at each call
|
|
29
|
+
* site.
|
|
30
|
+
*/
|
|
31
|
+
bundle(options: BrowserBundleOptions): Promise<BuildResult>;
|
|
32
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
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, ...rawBuildOptions } = options;
|
|
21
|
+
const buildOptions = rawBuildOptions;
|
|
22
|
+
const plugins = buildOptions.plugins;
|
|
23
|
+
const request = {
|
|
24
|
+
...buildOptions,
|
|
25
|
+
...getAppTranspileOptions(this.appConfig, profile),
|
|
26
|
+
plugins: mergeEcoBuildPlugins(plugins, getAppBrowserBuildPlugins(this.appConfig))
|
|
27
|
+
};
|
|
28
|
+
return await getAppBuildExecutor(this.appConfig).build(request);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
BrowserBundleService
|
|
33
|
+
};
|
|
@@ -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,77 @@
|
|
|
1
|
+
import type { ProcessedAsset } from '../assets/asset-processing-service/assets.types.js';
|
|
2
|
+
import { type HtmlRewriterMode, type HtmlRewriterProvider } from './html-rewriter-provider.service.js';
|
|
3
|
+
export interface HtmlTransformerServiceOptions {
|
|
4
|
+
htmlRewriterMode?: HtmlRewriterMode;
|
|
5
|
+
htmlRewriterProvider?: HtmlRewriterProvider;
|
|
6
|
+
}
|
|
7
|
+
export declare class HtmlTransformerService {
|
|
8
|
+
private processedDependencies;
|
|
9
|
+
private htmlRewriterProvider;
|
|
10
|
+
constructor(options?: HtmlTransformerServiceOptions);
|
|
11
|
+
/**
|
|
12
|
+
* Overrides the HTML rewriter runtime selection.
|
|
13
|
+
*
|
|
14
|
+
* This is intended for internal/runtime tests that need deterministic
|
|
15
|
+
* selection between native, worker-tools, and string fallback behavior.
|
|
16
|
+
*
|
|
17
|
+
* @param mode Requested runtime selection strategy.
|
|
18
|
+
*/
|
|
19
|
+
setHtmlRewriterMode(mode: HtmlRewriterMode): void;
|
|
20
|
+
private formatAttributes;
|
|
21
|
+
private generateScriptTag;
|
|
22
|
+
private generateStylesheetTag;
|
|
23
|
+
private appendDependencies;
|
|
24
|
+
private buildDependencyTags;
|
|
25
|
+
/**
|
|
26
|
+
* Injects generated markup immediately before the closing HTML tag when it is
|
|
27
|
+
* present, or appends/prepends a fallback insertion otherwise.
|
|
28
|
+
*/
|
|
29
|
+
private injectBeforeClosingTag;
|
|
30
|
+
/**
|
|
31
|
+
* Replaces the current processed dependency set used during HTML finalization.
|
|
32
|
+
*/
|
|
33
|
+
setProcessedDependencies(processedDependencies: ProcessedAsset[]): void;
|
|
34
|
+
/**
|
|
35
|
+
* Returns the processed dependencies queued for the next transform pass.
|
|
36
|
+
*/
|
|
37
|
+
getProcessedDependencies(): ProcessedAsset[];
|
|
38
|
+
/**
|
|
39
|
+
* Applies attributes to the opening `<html>` tag when present.
|
|
40
|
+
*/
|
|
41
|
+
applyAttributesToHtmlElement(html: string, attributes: Record<string, string>): string;
|
|
42
|
+
/**
|
|
43
|
+
* Applies attributes to the first element nested directly under `<body>`.
|
|
44
|
+
*/
|
|
45
|
+
applyAttributesToFirstBodyElement(html: string, attributes: Record<string, string>): string;
|
|
46
|
+
/**
|
|
47
|
+
* Applies attributes to the first element in a fragment or full-document HTML
|
|
48
|
+
* string.
|
|
49
|
+
*/
|
|
50
|
+
applyAttributesToFirstElement(html: string, attributes: Record<string, string>): string;
|
|
51
|
+
/**
|
|
52
|
+
* Removes duplicate processed assets while preserving first-seen order.
|
|
53
|
+
*
|
|
54
|
+
* @remarks
|
|
55
|
+
* Dedupe keys include structural asset fields and HTML attributes so repeated
|
|
56
|
+
* orchestration passes can merge assets safely without collapsing distinct tag
|
|
57
|
+
* variants.
|
|
58
|
+
*/
|
|
59
|
+
dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
|
|
60
|
+
/**
|
|
61
|
+
* Injects the currently processed dependencies into an HTML response.
|
|
62
|
+
*
|
|
63
|
+
* @remarks
|
|
64
|
+
* Native or worker-tools HTML rewriter support is preferred when available. A
|
|
65
|
+
* string-based fallback remains in place for runtimes that cannot provide one
|
|
66
|
+
* of those rewriter implementations.
|
|
67
|
+
*/
|
|
68
|
+
transform(res: Response): Promise<Response>;
|
|
69
|
+
/**
|
|
70
|
+
* Splits processed assets into head and body injection groups.
|
|
71
|
+
*/
|
|
72
|
+
private groupDependenciesByPosition;
|
|
73
|
+
/**
|
|
74
|
+
* Builds a serialized HTML attribute string from an attribute object.
|
|
75
|
+
*/
|
|
76
|
+
private buildAttributeString;
|
|
77
|
+
}
|