@ecopages/core 0.2.0-alpha.4 → 0.2.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +213 -12
- package/package.json +100 -188
- package/src/adapters/README.md +39 -0
- package/src/adapters/bun/hmr-manager.test.ts +267 -0
- package/src/adapters/bun/hmr-manager.ts +181 -68
- package/src/adapters/bun/index.ts +1 -2
- package/src/adapters/bun/server-adapter.ts +41 -34
- package/src/adapters/bun/server-lifecycle.ts +40 -70
- package/src/adapters/index.ts +1 -1
- package/src/adapters/node/bootstrap-dependency-resolver.test.ts +282 -0
- package/src/adapters/node/bootstrap-dependency-resolver.ts +301 -0
- package/src/adapters/node/index.ts +7 -0
- package/src/adapters/node/node-client-bridge.test.ts +198 -0
- package/src/adapters/node/node-hmr-manager.test.ts +322 -0
- package/src/adapters/node/node-hmr-manager.ts +208 -116
- package/src/adapters/node/runtime-adapter.test.ts +868 -0
- package/src/adapters/node/runtime-adapter.ts +439 -0
- package/src/adapters/node/server-adapter.ts +31 -104
- package/src/adapters/node/static-content-server.test.ts +60 -0
- package/src/adapters/node/static-content-server.ts +36 -0
- package/src/adapters/node/write-runtime-manifest.ts +38 -0
- package/src/adapters/shared/api-response.test.ts +97 -0
- package/src/{define-api-handler.ts → adapters/shared/define-api-handler.ts} +1 -1
- package/src/adapters/shared/explicit-static-route-matcher.test.ts +381 -0
- package/src/adapters/shared/explicit-static-route-matcher.ts +7 -1
- package/src/adapters/shared/file-route-middleware-pipeline.test.ts +90 -0
- package/src/adapters/shared/file-route-middleware-pipeline.ts +6 -2
- package/src/adapters/shared/fs-server-response-factory.test.ts +187 -0
- package/src/adapters/shared/fs-server-response-matcher.test.ts +286 -0
- package/src/adapters/shared/fs-server-response-matcher.ts +17 -10
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +149 -0
- package/src/adapters/shared/hmr-html-response.ts +52 -0
- package/src/adapters/shared/hmr-manager.contract.test.ts +196 -0
- package/src/adapters/shared/hmr-manager.dispatch.test.ts +220 -0
- package/src/adapters/shared/render-context.test.ts +146 -0
- package/src/adapters/shared/render-context.ts +21 -6
- package/src/adapters/shared/runtime-bootstrap.ts +79 -0
- package/src/adapters/shared/server-adapter.test.ts +77 -0
- package/src/adapters/shared/server-adapter.ts +51 -4
- package/src/adapters/shared/server-route-handler.test.ts +110 -0
- package/src/adapters/shared/server-route-handler.ts +5 -18
- package/src/adapters/shared/server-static-builder.test.ts +316 -0
- package/src/adapters/shared/server-static-builder.ts +92 -8
- package/src/build/README.md +101 -0
- package/src/build/build-adapter-serialization.test.ts +268 -0
- package/src/build/build-adapter.test.ts +815 -0
- package/src/build/build-adapter.ts +235 -6
- package/src/build/build-manifest.ts +54 -0
- package/src/build/dev-build-coordinator.ts +221 -0
- package/src/build/esbuild-build-adapter.ts +132 -83
- package/src/build/runtime-build-executor.ts +34 -0
- package/src/build/runtime-specifier-alias-plugin.test.ts +43 -0
- package/src/build/runtime-specifier-alias-plugin.ts +58 -0
- package/src/config/README.md +33 -0
- package/src/config/config-builder.test.ts +410 -0
- package/src/config/config-builder.ts +281 -49
- package/src/constants.ts +15 -0
- package/src/declarations.d.ts +18 -13
- package/src/eco/README.md +70 -16
- package/src/eco/component-render-context.ts +39 -17
- package/src/eco/eco.test.ts +678 -0
- package/src/eco/eco.ts +29 -8
- package/src/eco/eco.types.ts +20 -1
- package/src/eco/eco.utils.test.ts +124 -0
- package/src/eco/global-injector-map.test.ts +42 -0
- package/src/eco/lazy-injector-map.test.ts +66 -0
- package/src/eco/module-dependencies.test.ts +30 -0
- package/src/errors/http-error.test.ts +134 -0
- package/src/global/utils.test.ts +12 -0
- package/src/hmr/README.md +26 -0
- 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 +38 -7
- package/src/hmr/hmr-strategy.test.ts +124 -0
- package/src/hmr/hmr.postcss.test.e2e.ts +41 -0
- package/src/hmr/hmr.test.e2e.ts +29 -38
- package/src/hmr/strategies/js-hmr-strategy.test.ts +335 -0
- package/src/hmr/strategies/js-hmr-strategy.ts +115 -115
- package/src/index.ts +1 -1
- package/src/integrations/ghtml/ghtml-renderer.test.ts +63 -0
- package/src/integrations/ghtml/ghtml-renderer.ts +4 -1
- package/src/internal-types.ts +39 -19
- package/src/plugins/README.md +34 -0
- package/src/plugins/alias-resolver-plugin.test.ts +41 -0
- package/src/plugins/alias-resolver-plugin.ts +21 -3
- package/src/plugins/eco-component-meta-plugin.test.ts +380 -0
- package/src/plugins/eco-component-meta-plugin.ts +10 -3
- package/src/plugins/integration-plugin.test.ts +111 -0
- package/src/plugins/integration-plugin.ts +45 -3
- package/src/plugins/processor.test.ts +148 -0
- package/src/plugins/processor.ts +22 -2
- package/src/plugins/runtime-capability.ts +14 -0
- package/src/public-types.ts +73 -16
- package/src/route-renderer/GRAPH.md +16 -20
- package/src/route-renderer/README.md +8 -21
- package/src/route-renderer/component-graph/component-graph-executor.test.ts +41 -0
- package/src/route-renderer/component-graph/component-graph.test.ts +63 -0
- package/src/route-renderer/component-graph/component-marker.test.ts +73 -0
- package/src/route-renderer/component-graph/component-reference.ts +29 -0
- package/src/route-renderer/component-graph/marker-graph-resolver.test.ts +135 -0
- package/src/route-renderer/{marker-graph-resolver.ts → component-graph/marker-graph-resolver.ts} +11 -9
- package/src/route-renderer/orchestration/integration-renderer.test.ts +936 -0
- package/src/route-renderer/{integration-renderer.ts → orchestration/integration-renderer.ts} +113 -19
- package/src/route-renderer/orchestration/render-execution.service.test.ts +97 -0
- package/src/route-renderer/{render-execution.service.ts → orchestration/render-execution.service.ts} +109 -37
- package/src/route-renderer/orchestration/render-preparation.service.test.ts +235 -0
- package/src/route-renderer/{render-preparation.service.ts → orchestration/render-preparation.service.ts} +127 -9
- package/src/route-renderer/page-loading/dependency-resolver.test.ts +345 -0
- package/src/route-renderer/{dependency-resolver.ts → page-loading/dependency-resolver.ts} +28 -12
- package/src/route-renderer/page-loading/page-module-loader.test.ts +96 -0
- package/src/route-renderer/{page-module-loader.ts → page-loading/page-module-loader.ts} +49 -21
- package/src/route-renderer/route-renderer.ts +36 -1
- package/src/router/README.md +26 -0
- package/src/router/client/link-intent.d.ts +53 -0
- package/src/router/client/link-intent.test.browser.ts +51 -0
- package/src/router/client/link-intent.ts +92 -0
- package/src/router/client/navigation-coordinator.test.ts +237 -0
- package/src/router/client/navigation-coordinator.ts +433 -0
- package/src/router/server/fs-router-scanner.test.ts +83 -0
- package/src/router/{fs-router-scanner.ts → server/fs-router-scanner.ts} +12 -10
- package/src/router/server/fs-router.test.ts +214 -0
- package/src/router/{fs-router.ts → server/fs-router.ts} +2 -2
- package/src/services/README.md +29 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +385 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.ts +101 -6
- package/src/services/assets/asset-processing-service/asset.factory.test.ts +63 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.ts +2 -1
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +72 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +95 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +67 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +78 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/index.ts +2 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.ts +1 -1
- package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +59 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.ts +11 -5
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-script-processor.ts +17 -27
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +286 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.ts +3 -3
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +227 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.ts +5 -4
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +199 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.ts +4 -1
- package/src/services/assets/browser-bundle.service.test.ts +36 -0
- package/src/services/assets/browser-bundle.service.ts +53 -0
- package/src/services/cache/index.ts +3 -3
- package/src/services/cache/memory-cache-store.test.ts +225 -0
- package/src/services/cache/memory-cache-store.ts +1 -1
- package/src/services/cache/page-cache-service.test.ts +175 -0
- package/src/services/cache/page-cache-service.ts +3 -3
- package/src/services/cache/page-request-cache-coordinator.service.test.ts +79 -0
- package/src/services/{page-request-cache-coordinator.service.ts → cache/page-request-cache-coordinator.service.ts} +9 -6
- package/src/services/html/html-rewriter-provider.service.test.ts +183 -0
- package/src/services/html/html-rewriter-provider.service.ts +103 -0
- package/src/services/html/html-transformer.service.test.ts +378 -0
- package/src/services/html/html-transformer.service.ts +279 -0
- package/src/services/invalidation/development-invalidation.service.test.ts +77 -0
- package/src/services/invalidation/development-invalidation.service.ts +261 -0
- package/src/services/module-loading/app-server-module-transpiler.service.ts +52 -0
- package/src/services/module-loading/page-module-import.service.test.ts +253 -0
- package/src/services/module-loading/page-module-import.service.ts +200 -0
- package/src/services/module-loading/server-loader.service.test.ts +161 -0
- package/src/services/module-loading/server-loader.service.ts +130 -0
- package/src/services/module-loading/server-module-transpiler.service.test.ts +115 -0
- package/src/services/module-loading/server-module-transpiler.service.ts +105 -0
- package/src/services/runtime-manifest/node-runtime-manifest.service.test.ts +95 -0
- package/src/services/runtime-manifest/node-runtime-manifest.service.ts +101 -0
- package/src/services/runtime-state/dev-graph.service.ts +217 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +136 -0
- package/src/services/runtime-state/runtime-specifier-registry.service.ts +96 -0
- package/src/services/runtime-state/server-invalidation-state.service.ts +68 -0
- package/src/services/validation/schema-validation-service.test.ts +223 -0
- package/src/services/{schema-validation-service.ts → validation/schema-validation-service.ts} +1 -1
- package/src/static-site-generator/README.md +26 -0
- package/src/static-site-generator/static-site-generator.test.ts +307 -0
- package/src/static-site-generator/static-site-generator.ts +109 -6
- package/src/utils/deep-merge.test.ts +114 -0
- package/src/utils/invariant.test.ts +22 -0
- package/src/utils/path-utils.test.ts +15 -0
- package/src/utils/resolve-work-dir.ts +45 -0
- package/src/utils/server-utils.test.ts +38 -0
- package/src/watchers/project-watcher.integration.test.ts +337 -0
- package/src/watchers/project-watcher.test-helpers.ts +1 -1
- package/src/watchers/project-watcher.test.ts +678 -0
- package/src/watchers/project-watcher.ts +130 -111
- package/CHANGELOG.md +0 -91
- package/src/adapters/abstract/application-adapter.d.ts +0 -168
- package/src/adapters/abstract/application-adapter.js +0 -109
- package/src/adapters/abstract/router-adapter.d.ts +0 -26
- package/src/adapters/abstract/router-adapter.js +0 -5
- package/src/adapters/abstract/server-adapter.d.ts +0 -69
- package/src/adapters/abstract/server-adapter.js +0 -15
- package/src/adapters/bun/client-bridge.d.ts +0 -34
- package/src/adapters/bun/client-bridge.js +0 -48
- package/src/adapters/bun/create-app.d.ts +0 -60
- package/src/adapters/bun/create-app.js +0 -117
- package/src/adapters/bun/define-api-handler.d.ts +0 -61
- package/src/adapters/bun/define-api-handler.js +0 -15
- package/src/adapters/bun/define-api-handler.ts +0 -114
- package/src/adapters/bun/hmr-manager.d.ts +0 -85
- package/src/adapters/bun/hmr-manager.js +0 -240
- package/src/adapters/bun/index.d.ts +0 -3
- package/src/adapters/bun/index.js +0 -8
- package/src/adapters/bun/server-adapter.d.ts +0 -155
- package/src/adapters/bun/server-adapter.js +0 -368
- package/src/adapters/bun/server-lifecycle.d.ts +0 -52
- package/src/adapters/bun/server-lifecycle.js +0 -120
- package/src/adapters/index.d.ts +0 -6
- package/src/adapters/index.js +0 -14
- package/src/adapters/node/create-app.d.ts +0 -21
- package/src/adapters/node/create-app.js +0 -143
- package/src/adapters/node/index.d.ts +0 -4
- package/src/adapters/node/index.js +0 -8
- package/src/adapters/node/node-client-bridge.d.ts +0 -26
- package/src/adapters/node/node-client-bridge.js +0 -66
- package/src/adapters/node/node-hmr-manager.d.ts +0 -63
- package/src/adapters/node/node-hmr-manager.js +0 -237
- package/src/adapters/node/server-adapter.d.ts +0 -190
- package/src/adapters/node/server-adapter.js +0 -420
- package/src/adapters/node/static-content-server.d.ts +0 -24
- package/src/adapters/node/static-content-server.js +0 -166
- package/src/adapters/shared/api-response.d.ts +0 -52
- package/src/adapters/shared/api-response.js +0 -96
- package/src/adapters/shared/application-adapter.d.ts +0 -18
- package/src/adapters/shared/application-adapter.js +0 -90
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +0 -38
- package/src/adapters/shared/explicit-static-route-matcher.js +0 -100
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +0 -65
- package/src/adapters/shared/file-route-middleware-pipeline.js +0 -98
- package/src/adapters/shared/fs-server-response-factory.d.ts +0 -19
- package/src/adapters/shared/fs-server-response-factory.js +0 -97
- package/src/adapters/shared/fs-server-response-matcher.d.ts +0 -71
- package/src/adapters/shared/fs-server-response-matcher.js +0 -155
- package/src/adapters/shared/render-context.d.ts +0 -14
- package/src/adapters/shared/render-context.js +0 -69
- package/src/adapters/shared/server-adapter.d.ts +0 -87
- package/src/adapters/shared/server-adapter.js +0 -353
- package/src/adapters/shared/server-route-handler.d.ts +0 -89
- package/src/adapters/shared/server-route-handler.js +0 -120
- package/src/adapters/shared/server-static-builder.d.ts +0 -38
- package/src/adapters/shared/server-static-builder.js +0 -46
- package/src/build/build-adapter.d.ts +0 -74
- package/src/build/build-adapter.js +0 -54
- package/src/build/build-types.d.ts +0 -57
- package/src/build/build-types.js +0 -0
- package/src/build/esbuild-build-adapter.d.ts +0 -69
- package/src/build/esbuild-build-adapter.js +0 -390
- package/src/config/config-builder.d.ts +0 -227
- package/src/config/config-builder.js +0 -392
- package/src/constants.d.ts +0 -32
- package/src/constants.js +0 -21
- package/src/create-app.d.ts +0 -17
- package/src/create-app.js +0 -66
- package/src/define-api-handler.d.ts +0 -25
- package/src/define-api-handler.js +0 -15
- package/src/dev/sc-server.d.ts +0 -30
- package/src/dev/sc-server.js +0 -111
- package/src/eco/component-render-context.d.ts +0 -105
- package/src/eco/component-render-context.js +0 -77
- package/src/eco/eco.d.ts +0 -9
- package/src/eco/eco.js +0 -110
- package/src/eco/eco.types.d.ts +0 -170
- package/src/eco/eco.types.js +0 -0
- package/src/eco/eco.utils.d.ts +0 -40
- package/src/eco/eco.utils.js +0 -40
- package/src/eco/global-injector-map.d.ts +0 -16
- package/src/eco/global-injector-map.js +0 -80
- package/src/eco/lazy-injector-map.d.ts +0 -8
- package/src/eco/lazy-injector-map.js +0 -70
- package/src/eco/module-dependencies.d.ts +0 -18
- package/src/eco/module-dependencies.js +0 -49
- package/src/errors/http-error.d.ts +0 -31
- package/src/errors/http-error.js +0 -50
- package/src/errors/index.d.ts +0 -2
- package/src/errors/index.js +0 -4
- package/src/errors/locals-access-error.d.ts +0 -4
- package/src/errors/locals-access-error.js +0 -9
- package/src/global/app-logger.d.ts +0 -2
- package/src/global/app-logger.js +0 -6
- package/src/hmr/client/hmr-runtime.d.ts +0 -10
- package/src/hmr/client/hmr-runtime.js +0 -86
- package/src/hmr/hmr-strategy.d.ts +0 -159
- package/src/hmr/hmr-strategy.js +0 -29
- package/src/hmr/hmr.test.e2e.d.ts +0 -1
- package/src/hmr/hmr.test.e2e.js +0 -50
- package/src/hmr/strategies/default-hmr-strategy.d.ts +0 -43
- package/src/hmr/strategies/default-hmr-strategy.js +0 -34
- package/src/hmr/strategies/js-hmr-strategy.d.ts +0 -136
- package/src/hmr/strategies/js-hmr-strategy.js +0 -188
- package/src/index.browser.d.ts +0 -3
- package/src/index.browser.js +0 -4
- package/src/index.d.ts +0 -5
- package/src/index.js +0 -10
- package/src/integrations/ghtml/ghtml-renderer.d.ts +0 -15
- package/src/integrations/ghtml/ghtml-renderer.js +0 -60
- package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -20
- package/src/integrations/ghtml/ghtml.plugin.js +0 -21
- package/src/internal-types.d.ts +0 -200
- package/src/internal-types.js +0 -0
- package/src/plugins/alias-resolver-plugin.d.ts +0 -2
- package/src/plugins/alias-resolver-plugin.js +0 -39
- package/src/plugins/eco-component-meta-plugin.d.ts +0 -95
- package/src/plugins/eco-component-meta-plugin.js +0 -157
- package/src/plugins/integration-plugin.d.ts +0 -102
- package/src/plugins/integration-plugin.js +0 -100
- package/src/plugins/processor.d.ts +0 -82
- package/src/plugins/processor.js +0 -122
- package/src/public-types.d.ts +0 -1098
- package/src/public-types.js +0 -0
- 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.d.ts +0 -42
- package/src/route-renderer/component-graph.js +0 -72
- package/src/route-renderer/component-marker.d.ts +0 -52
- package/src/route-renderer/component-marker.js +0 -46
- package/src/route-renderer/dependency-resolver.d.ts +0 -24
- package/src/route-renderer/dependency-resolver.js +0 -428
- 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/marker-graph-resolver.d.ts +0 -76
- package/src/route-renderer/marker-graph-resolver.js +0 -93
- package/src/route-renderer/page-module-loader.d.ts +0 -61
- package/src/route-renderer/page-module-loader.js +0 -102
- 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-preparation.service.d.ts +0 -112
- package/src/route-renderer/render-preparation.service.js +0 -243
- package/src/route-renderer/route-renderer.d.ts +0 -26
- package/src/route-renderer/route-renderer.js +0 -68
- package/src/router/fs-router-scanner.d.ts +0 -41
- package/src/router/fs-router-scanner.js +0 -155
- package/src/router/fs-router.d.ts +0 -26
- package/src/router/fs-router.js +0 -100
- package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
- package/src/services/asset-processing-service/asset-processing.service.js +0 -250
- package/src/services/asset-processing-service/asset.factory.d.ts +0 -17
- package/src/services/asset-processing-service/asset.factory.js +0 -82
- package/src/services/asset-processing-service/assets.types.d.ts +0 -88
- package/src/services/asset-processing-service/assets.types.js +0 -0
- 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/processor.interface.d.ts +0 -22
- package/src/services/asset-processing-service/processor.interface.js +0 -6
- package/src/services/asset-processing-service/processor.registry.d.ts +0 -8
- package/src/services/asset-processing-service/processor.registry.js +0 -15
- package/src/services/asset-processing-service/processors/base/base-processor.d.ts +0 -24
- package/src/services/asset-processing-service/processors/base/base-processor.js +0 -59
- 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/index.d.ts +0 -5
- package/src/services/asset-processing-service/processors/index.js +0 -5
- package/src/services/asset-processing-service/processors/script/content-script.processor.d.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/file-script.processor.d.ts +0 -8
- package/src/services/asset-processing-service/processors/script/file-script.processor.js +0 -76
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -5
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
- package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -9
- package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +0 -63
- package/src/services/cache/cache.types.d.ts +0 -107
- package/src/services/cache/cache.types.js +0 -0
- package/src/services/cache/index.d.ts +0 -7
- package/src/services/cache/index.js +0 -7
- package/src/services/cache/memory-cache-store.d.ts +0 -42
- package/src/services/cache/memory-cache-store.js +0 -98
- package/src/services/cache/page-cache-service.d.ts +0 -70
- package/src/services/cache/page-cache-service.js +0 -152
- 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.d.ts +0 -75
- package/src/services/page-request-cache-coordinator.service.js +0 -107
- package/src/services/schema-validation-service.d.ts +0 -122
- package/src/services/schema-validation-service.js +0 -101
- package/src/services/validation/standard-schema.types.d.ts +0 -65
- package/src/services/validation/standard-schema.types.js +0 -0
- package/src/static-site-generator/static-site-generator.d.ts +0 -57
- package/src/static-site-generator/static-site-generator.js +0 -272
- package/src/utils/css.d.ts +0 -1
- package/src/utils/css.js +0 -7
- package/src/utils/deep-merge.d.ts +0 -14
- package/src/utils/deep-merge.js +0 -32
- package/src/utils/hash.d.ts +0 -1
- package/src/utils/hash.js +0 -7
- package/src/utils/html.d.ts +0 -1
- package/src/utils/html.js +0 -4
- package/src/utils/invariant.d.ts +0 -5
- package/src/utils/invariant.js +0 -11
- package/src/utils/locals-utils.d.ts +0 -15
- package/src/utils/locals-utils.js +0 -24
- package/src/utils/parse-cli-args.d.ts +0 -24
- package/src/utils/parse-cli-args.js +0 -47
- package/src/utils/path-utils.module.d.ts +0 -5
- package/src/utils/path-utils.module.js +0 -14
- package/src/utils/runtime.d.ts +0 -11
- package/src/utils/runtime.js +0 -40
- package/src/utils/server-utils.module.d.ts +0 -19
- package/src/utils/server-utils.module.js +0 -56
- package/src/watchers/project-watcher.d.ts +0 -125
- package/src/watchers/project-watcher.js +0 -265
- package/src/watchers/project-watcher.test-helpers.d.ts +0 -4
- package/src/watchers/project-watcher.test-helpers.js +0 -52
- /package/src/route-renderer/{component-graph-executor.ts → component-graph/component-graph-executor.ts} +0 -0
- /package/src/route-renderer/{component-graph.ts → component-graph/component-graph.ts} +0 -0
- /package/src/route-renderer/{component-marker.ts → component-graph/component-marker.ts} +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.ts +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/index.ts +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.ts +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.ts +0 -0
|
@@ -6,6 +6,7 @@ import type {
|
|
|
6
6
|
} from 'esbuild';
|
|
7
7
|
import path from 'node:path';
|
|
8
8
|
import { createRequire } from 'node:module';
|
|
9
|
+
import { pathToFileURL } from 'node:url';
|
|
9
10
|
import { fileSystem } from '@ecopages/file-system';
|
|
10
11
|
import type {
|
|
11
12
|
EcoBuildOnLoadResult,
|
|
@@ -23,6 +24,8 @@ import type {
|
|
|
23
24
|
BuildTranspileProfile,
|
|
24
25
|
} from './build-adapter.ts';
|
|
25
26
|
|
|
27
|
+
const esbuildRequire = createRequire(import.meta.url);
|
|
28
|
+
|
|
26
29
|
/**
|
|
27
30
|
* Provides common transpile output defaults shared across build profiles.
|
|
28
31
|
*/
|
|
@@ -56,17 +59,14 @@ function transpileProfileToOptions(profile: BuildTranspileProfile): BuildTranspi
|
|
|
56
59
|
* and `module`) while delegating bundling and TypeScript/decorator transforms to esbuild.
|
|
57
60
|
*/
|
|
58
61
|
export class EsbuildBuildAdapter implements BuildAdapter {
|
|
59
|
-
private registeredPlugins: EcoBuildPlugin[] = [];
|
|
60
|
-
|
|
61
62
|
private escapeRegExp(value: string): string {
|
|
62
63
|
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
private getPluginsForBuild(additionalPlugins?: EcoBuildPlugin[]): EcoBuildPlugin[] {
|
|
66
|
-
const merged = [...(additionalPlugins ?? []), ...this.registeredPlugins];
|
|
67
67
|
const byName = new Map<string, EcoBuildPlugin>();
|
|
68
68
|
|
|
69
|
-
for (const plugin of
|
|
69
|
+
for (const plugin of additionalPlugins ?? []) {
|
|
70
70
|
if (!byName.has(plugin.name)) {
|
|
71
71
|
byName.set(plugin.name, plugin);
|
|
72
72
|
}
|
|
@@ -286,8 +286,28 @@ export class EsbuildBuildAdapter implements BuildAdapter {
|
|
|
286
286
|
};
|
|
287
287
|
}
|
|
288
288
|
|
|
289
|
-
private async loadEsbuildModule(): Promise<typeof import('esbuild')> {
|
|
290
|
-
const
|
|
289
|
+
private async loadEsbuildModule(moduleGeneration = 0): Promise<typeof import('esbuild')> {
|
|
290
|
+
const importedModule = await import('esbuild');
|
|
291
|
+
const esbuildModule = (
|
|
292
|
+
typeof (importedModule as typeof import('esbuild')).build === 'function'
|
|
293
|
+
? importedModule
|
|
294
|
+
: ((importedModule as { default?: typeof import('esbuild') }).default ?? importedModule)
|
|
295
|
+
) as typeof import('esbuild');
|
|
296
|
+
|
|
297
|
+
if (moduleGeneration > 0 && !this.isMockedEsbuildModule(esbuildModule)) {
|
|
298
|
+
const freshModule = await import(
|
|
299
|
+
`${pathToFileURL(esbuildRequire.resolve('esbuild')).href}?ecopages_esbuild=${moduleGeneration}`
|
|
300
|
+
);
|
|
301
|
+
const normalizedFreshModule = (
|
|
302
|
+
typeof (freshModule as typeof import('esbuild')).build === 'function'
|
|
303
|
+
? freshModule
|
|
304
|
+
: ((freshModule as { default?: typeof import('esbuild') }).default ?? freshModule)
|
|
305
|
+
) as typeof import('esbuild');
|
|
306
|
+
|
|
307
|
+
if (typeof normalizedFreshModule.build === 'function') {
|
|
308
|
+
return normalizedFreshModule;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
291
311
|
|
|
292
312
|
if (typeof esbuildModule.build !== 'function') {
|
|
293
313
|
throw new Error('esbuild is not available. Install esbuild to use Node bundling.');
|
|
@@ -296,6 +316,102 @@ export class EsbuildBuildAdapter implements BuildAdapter {
|
|
|
296
316
|
return esbuildModule;
|
|
297
317
|
}
|
|
298
318
|
|
|
319
|
+
private isMockedEsbuildModule(esbuildModule: typeof import('esbuild')): boolean {
|
|
320
|
+
const build = esbuildModule.build as { mock?: unknown } | undefined;
|
|
321
|
+
const stop = esbuildModule.stop as { mock?: unknown } | undefined;
|
|
322
|
+
return typeof build?.mock === 'object' || typeof stop?.mock === 'object';
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Detects the subset of runtime faults that indicate esbuild's worker
|
|
327
|
+
* protocol is corrupted rather than a normal build error.
|
|
328
|
+
*/
|
|
329
|
+
isEsbuildProtocolError(error: unknown): boolean {
|
|
330
|
+
if (!(error instanceof Error)) {
|
|
331
|
+
return false;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
return ['Unexpected end of JSON input', 'Unexpected EOF', 'parseJSON', 'buildResponseToResult'].some(
|
|
335
|
+
(fragment) => error.message.includes(fragment) || error.stack?.includes(fragment),
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
async stopEsbuildService(moduleGeneration = 0): Promise<void> {
|
|
340
|
+
const esbuild = await this.loadEsbuildModule(moduleGeneration);
|
|
341
|
+
if (typeof esbuild.stop === 'function') {
|
|
342
|
+
esbuild.stop();
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
async buildOrThrow(options: BuildOptions, moduleGeneration = 0): Promise<BuildResult> {
|
|
347
|
+
const esbuild = await this.loadEsbuildModule(moduleGeneration);
|
|
348
|
+
const contextRoot = options.root ? path.resolve(options.root) : process.cwd();
|
|
349
|
+
const outdir = path.resolve(options.outdir ?? 'dist/assets');
|
|
350
|
+
const tsconfigPath = path.join(contextRoot, 'tsconfig.json');
|
|
351
|
+
const tsconfigExists = fileSystem.exists(tsconfigPath);
|
|
352
|
+
|
|
353
|
+
const plugins = this.getPluginsForBuild(options.plugins);
|
|
354
|
+
const esbuildPlugins: EsbuildPlugin[] = [
|
|
355
|
+
...(plugins.length > 0 ? [this.createEcoPluginBridge(plugins, contextRoot)] : []),
|
|
356
|
+
];
|
|
357
|
+
const transpileTarget = 'es2022';
|
|
358
|
+
|
|
359
|
+
const usesTemplatedNaming = this.hasTemplateTokens(options.naming);
|
|
360
|
+
const outfile = options.naming && !usesTemplatedNaming ? path.join(outdir, options.naming) : undefined;
|
|
361
|
+
if (outfile) {
|
|
362
|
+
fileSystem.ensureDir(path.dirname(outfile));
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
const outputOptions = outfile
|
|
366
|
+
? { outfile }
|
|
367
|
+
: {
|
|
368
|
+
outdir,
|
|
369
|
+
...(options.outbase ? { outbase: path.resolve(options.outbase) } : {}),
|
|
370
|
+
entryNames: usesTemplatedNaming ? this.toEntryNamePattern(options.naming) : '[name]',
|
|
371
|
+
chunkNames: '[name]-[hash]',
|
|
372
|
+
assetNames: '[name]-[hash]',
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
const result = await esbuild.build({
|
|
376
|
+
absWorkingDir: contextRoot,
|
|
377
|
+
entryPoints: options.entrypoints,
|
|
378
|
+
bundle: options.bundle ?? true,
|
|
379
|
+
...outputOptions,
|
|
380
|
+
...(options.conditions ? { conditions: options.conditions } : {}),
|
|
381
|
+
...(options.define ? { define: options.define } : {}),
|
|
382
|
+
format: this.mapEsbuildFormat(options.format),
|
|
383
|
+
platform: (options.target === 'browser' ? 'browser' : 'node') as 'browser' | 'node',
|
|
384
|
+
sourcemap: this.mapEsbuildSourcemap(options.sourcemap),
|
|
385
|
+
splitting: outfile ? false : !!options.splitting,
|
|
386
|
+
minify: !!options.minify,
|
|
387
|
+
...(typeof options.treeshaking === 'boolean' ? { treeShaking: options.treeshaking } : {}),
|
|
388
|
+
external: options.external,
|
|
389
|
+
...(options.target !== 'browser' && options.externalPackages !== false
|
|
390
|
+
? { packages: 'external' as const }
|
|
391
|
+
: {}),
|
|
392
|
+
target: transpileTarget,
|
|
393
|
+
metafile: true,
|
|
394
|
+
write: true,
|
|
395
|
+
plugins: esbuildPlugins,
|
|
396
|
+
jsx: 'automatic',
|
|
397
|
+
tsconfig: tsconfigExists ? tsconfigPath : undefined,
|
|
398
|
+
logLevel: 'silent',
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
const outputs = Object.keys(result.metafile.outputs).map((outputPath) => ({
|
|
402
|
+
path: path.isAbsolute(outputPath) ? outputPath : path.join(contextRoot, outputPath),
|
|
403
|
+
}));
|
|
404
|
+
const logs = result.warnings.map((warning) => ({ message: warning.text }));
|
|
405
|
+
const dependencyGraph = this.extractDependencyGraph(result.metafile, contextRoot);
|
|
406
|
+
|
|
407
|
+
return {
|
|
408
|
+
success: true,
|
|
409
|
+
logs,
|
|
410
|
+
outputs,
|
|
411
|
+
dependencyGraph,
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
|
|
299
415
|
private mapEsbuildSourcemap(value: string | undefined): false | 'linked' | 'inline' | 'external' | 'both' {
|
|
300
416
|
switch (value) {
|
|
301
417
|
case 'none':
|
|
@@ -407,80 +523,22 @@ export class EsbuildBuildAdapter implements BuildAdapter {
|
|
|
407
523
|
return [{ message: 'Unknown esbuild error' }];
|
|
408
524
|
}
|
|
409
525
|
|
|
526
|
+
createFailureResult(error: unknown): BuildResult {
|
|
527
|
+
return {
|
|
528
|
+
success: false,
|
|
529
|
+
logs: this.toBuildLogs(error),
|
|
530
|
+
outputs: [],
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
|
|
410
534
|
/**
|
|
411
535
|
* Bundles entrypoints using esbuild for Node runtime builds.
|
|
412
536
|
*/
|
|
413
537
|
async build(options: BuildOptions): Promise<BuildResult> {
|
|
414
|
-
const esbuild = await this.loadEsbuildModule();
|
|
415
|
-
const contextRoot = options.root ? path.resolve(options.root) : process.cwd();
|
|
416
|
-
const outdir = path.resolve(options.outdir ?? '.eco/assets');
|
|
417
|
-
const tsconfigPath = path.join(contextRoot, 'tsconfig.json');
|
|
418
|
-
const tsconfigExists = fileSystem.exists(tsconfigPath);
|
|
419
|
-
|
|
420
|
-
const plugins = this.getPluginsForBuild(options.plugins);
|
|
421
|
-
const esbuildPlugins: EsbuildPlugin[] = [
|
|
422
|
-
...(plugins.length > 0 ? [this.createEcoPluginBridge(plugins, contextRoot)] : []),
|
|
423
|
-
];
|
|
424
|
-
const transpileTarget = 'es2022';
|
|
425
|
-
|
|
426
|
-
const usesTemplatedNaming = this.hasTemplateTokens(options.naming);
|
|
427
|
-
const outfile = options.naming && !usesTemplatedNaming ? path.join(outdir, options.naming) : undefined;
|
|
428
|
-
if (outfile) {
|
|
429
|
-
fileSystem.ensureDir(path.dirname(outfile));
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
const outputOptions = outfile
|
|
433
|
-
? { outfile }
|
|
434
|
-
: {
|
|
435
|
-
outdir,
|
|
436
|
-
entryNames: usesTemplatedNaming ? this.toEntryNamePattern(options.naming) : '[name]',
|
|
437
|
-
chunkNames: '[name]-[hash]',
|
|
438
|
-
assetNames: '[name]-[hash]',
|
|
439
|
-
};
|
|
440
|
-
|
|
441
538
|
try {
|
|
442
|
-
|
|
443
|
-
absWorkingDir: contextRoot,
|
|
444
|
-
entryPoints: options.entrypoints,
|
|
445
|
-
bundle: options.bundle ?? true,
|
|
446
|
-
...outputOptions,
|
|
447
|
-
format: this.mapEsbuildFormat(options.format),
|
|
448
|
-
platform: (options.target === 'browser' ? 'browser' : 'node') as 'browser' | 'node',
|
|
449
|
-
sourcemap: this.mapEsbuildSourcemap(options.sourcemap),
|
|
450
|
-
splitting: outfile ? false : !!options.splitting,
|
|
451
|
-
minify: !!options.minify,
|
|
452
|
-
...(typeof options.treeshaking === 'boolean' ? { treeShaking: options.treeshaking } : {}),
|
|
453
|
-
external: options.external,
|
|
454
|
-
...(options.target !== 'browser' && options.externalPackages !== false
|
|
455
|
-
? { packages: 'external' as const }
|
|
456
|
-
: {}),
|
|
457
|
-
target: transpileTarget,
|
|
458
|
-
metafile: true,
|
|
459
|
-
write: true,
|
|
460
|
-
plugins: esbuildPlugins,
|
|
461
|
-
jsx: 'automatic',
|
|
462
|
-
tsconfig: tsconfigExists ? tsconfigPath : undefined,
|
|
463
|
-
logLevel: 'silent',
|
|
464
|
-
});
|
|
465
|
-
|
|
466
|
-
const outputs = Object.keys(result.metafile.outputs).map((outputPath) => ({
|
|
467
|
-
path: path.isAbsolute(outputPath) ? outputPath : path.join(contextRoot, outputPath),
|
|
468
|
-
}));
|
|
469
|
-
const logs = result.warnings.map((warning) => ({ message: warning.text }));
|
|
470
|
-
const dependencyGraph = this.extractDependencyGraph(result.metafile, contextRoot);
|
|
471
|
-
|
|
472
|
-
return {
|
|
473
|
-
success: true,
|
|
474
|
-
logs,
|
|
475
|
-
outputs,
|
|
476
|
-
dependencyGraph,
|
|
477
|
-
};
|
|
539
|
+
return await this.buildOrThrow(options);
|
|
478
540
|
} catch (error) {
|
|
479
|
-
return
|
|
480
|
-
success: false,
|
|
481
|
-
logs: this.toBuildLogs(error),
|
|
482
|
-
outputs: [],
|
|
483
|
-
};
|
|
541
|
+
return this.createFailureResult(error);
|
|
484
542
|
}
|
|
485
543
|
}
|
|
486
544
|
|
|
@@ -492,15 +550,6 @@ export class EsbuildBuildAdapter implements BuildAdapter {
|
|
|
492
550
|
return localRequire.resolve(importPath);
|
|
493
551
|
}
|
|
494
552
|
|
|
495
|
-
/**
|
|
496
|
-
* Registers a build plugin once by plugin name.
|
|
497
|
-
*/
|
|
498
|
-
registerPlugin(plugin: EcoBuildPlugin): void {
|
|
499
|
-
if (!this.registeredPlugins.find((registered) => registered.name === plugin.name)) {
|
|
500
|
-
this.registeredPlugins.push(plugin);
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
|
|
504
553
|
/**
|
|
505
554
|
* Returns transpile defaults for a known transpile profile.
|
|
506
555
|
*/
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { EcoPagesAppConfig } from '../internal-types.ts';
|
|
2
|
+
import {
|
|
3
|
+
getAppBuildAdapter,
|
|
4
|
+
getAppBuildExecutor,
|
|
5
|
+
getAppServerBuildPlugins,
|
|
6
|
+
setAppBuildExecutor,
|
|
7
|
+
type BuildExecutor,
|
|
8
|
+
} from './build-adapter.ts';
|
|
9
|
+
import { createOrReuseAppBuildExecutor } from './dev-build-coordinator.ts';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Installs the app-owned runtime build executor for one app instance.
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* This is the single coordinator boundary for runtime executor ownership across
|
|
16
|
+
* adapters. It preserves an existing development coordinator when available and
|
|
17
|
+
* always applies app server build plugins through one shared path.
|
|
18
|
+
*/
|
|
19
|
+
export function installAppRuntimeBuildExecutor(
|
|
20
|
+
appConfig: EcoPagesAppConfig,
|
|
21
|
+
options: {
|
|
22
|
+
development: boolean;
|
|
23
|
+
},
|
|
24
|
+
): BuildExecutor {
|
|
25
|
+
const buildExecutor = createOrReuseAppBuildExecutor({
|
|
26
|
+
development: options.development,
|
|
27
|
+
adapter: getAppBuildAdapter(appConfig),
|
|
28
|
+
currentExecutor: getAppBuildExecutor(appConfig),
|
|
29
|
+
getPlugins: () => getAppServerBuildPlugins(appConfig),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
setAppBuildExecutor(appConfig, buildExecutor);
|
|
33
|
+
return buildExecutor;
|
|
34
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { test } from 'vitest';
|
|
3
|
+
import type { EcoBuildOnResolveResult } from './build-types.ts';
|
|
4
|
+
import { createRuntimeSpecifierAliasPlugin } from './runtime-specifier-alias-plugin.ts';
|
|
5
|
+
|
|
6
|
+
test('createRuntimeSpecifierAliasPlugin resolves mapped specifiers as externals', async () => {
|
|
7
|
+
const registrations: Array<{
|
|
8
|
+
filter: RegExp;
|
|
9
|
+
callback: (args: {
|
|
10
|
+
path: string;
|
|
11
|
+
}) => EcoBuildOnResolveResult | undefined | Promise<EcoBuildOnResolveResult | undefined>;
|
|
12
|
+
}> = [];
|
|
13
|
+
const plugin = createRuntimeSpecifierAliasPlugin(
|
|
14
|
+
{
|
|
15
|
+
react: '/assets/vendors/react.js',
|
|
16
|
+
'react-dom/client': '/assets/vendors/react-dom.js',
|
|
17
|
+
},
|
|
18
|
+
{ name: 'test-runtime-alias' },
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
assert.ok(plugin);
|
|
22
|
+
assert.equal(plugin.name, 'test-runtime-alias');
|
|
23
|
+
|
|
24
|
+
plugin.setup({
|
|
25
|
+
onResolve(options, callback) {
|
|
26
|
+
registrations.push({ filter: options.filter, callback });
|
|
27
|
+
},
|
|
28
|
+
onLoad() {},
|
|
29
|
+
module() {},
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
assert.equal(registrations.length, 1);
|
|
33
|
+
assert.equal(registrations[0]?.filter.test('react'), true);
|
|
34
|
+
assert.deepEqual(await registrations[0]?.callback({ path: 'react' }), {
|
|
35
|
+
path: '/assets/vendors/react.js',
|
|
36
|
+
external: true,
|
|
37
|
+
});
|
|
38
|
+
assert.equal(await registrations[0]?.callback({ path: 'unknown' }), undefined);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test('createRuntimeSpecifierAliasPlugin returns null for an empty specifier map', () => {
|
|
42
|
+
assert.equal(createRuntimeSpecifierAliasPlugin(new Map()), null);
|
|
43
|
+
});
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { EcoBuildPlugin } from './build-types.ts';
|
|
2
|
+
|
|
3
|
+
type RuntimeSpecifierMap = ReadonlyMap<string, string> | Record<string, string>;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Normalizes runtime specifier input into a read-only map shape.
|
|
7
|
+
*/
|
|
8
|
+
function toRuntimeSpecifierMap(specifierMap: RuntimeSpecifierMap): ReadonlyMap<string, string> {
|
|
9
|
+
return specifierMap instanceof Map ? specifierMap : new Map(Object.entries(specifierMap));
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Escapes a literal specifier for inclusion in a regular expression.
|
|
14
|
+
*/
|
|
15
|
+
function escapeRegExp(value: string): string {
|
|
16
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Creates a build plugin that aliases runtime bare specifiers to concrete URLs.
|
|
21
|
+
*
|
|
22
|
+
* @remarks
|
|
23
|
+
* This helper is used when browser-target builds must preserve integration-owned
|
|
24
|
+
* runtime specifier semantics while letting the bundler treat the mapped URLs as
|
|
25
|
+
* external runtime assets.
|
|
26
|
+
*/
|
|
27
|
+
export function createRuntimeSpecifierAliasPlugin(
|
|
28
|
+
specifierMapInput: RuntimeSpecifierMap,
|
|
29
|
+
options?: {
|
|
30
|
+
name?: string;
|
|
31
|
+
external?: boolean;
|
|
32
|
+
},
|
|
33
|
+
): EcoBuildPlugin | null {
|
|
34
|
+
const specifierMap = toRuntimeSpecifierMap(specifierMapInput);
|
|
35
|
+
|
|
36
|
+
if (specifierMap.size === 0) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const filter = new RegExp(`^(${Array.from(specifierMap.keys()).map(escapeRegExp).join('|')})$`);
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
name: options?.name ?? 'runtime-specifier-alias',
|
|
44
|
+
setup(build) {
|
|
45
|
+
build.onResolve({ filter }, (args) => {
|
|
46
|
+
const mappedPath = specifierMap.get(args.path);
|
|
47
|
+
if (!mappedPath) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
path: mappedPath,
|
|
53
|
+
external: options?.external ?? true,
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Config Layer
|
|
2
|
+
|
|
3
|
+
This directory contains the app-configuration finalization path for Ecopages.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
The config layer answers one question:
|
|
8
|
+
|
|
9
|
+
How does one `eco.config.ts` become one stable, app-owned runtime/build configuration?
|
|
10
|
+
|
|
11
|
+
It is responsible for:
|
|
12
|
+
|
|
13
|
+
- validating integration, processor, and loader registration
|
|
14
|
+
- resolving semantic paths such as `html` and `404` templates
|
|
15
|
+
- creating app-owned runtime state such as the build adapter, build executor, build manifest, dev graph service, runtime specifier registry, and Node runtime manifest
|
|
16
|
+
- enforcing runtime capability requirements before startup
|
|
17
|
+
|
|
18
|
+
## Main Files
|
|
19
|
+
|
|
20
|
+
- `config-builder.ts`: the primary builder and config finalization boundary
|
|
21
|
+
- `config-builder.test.ts`: coverage for validation, path resolution, and runtime capability checks
|
|
22
|
+
|
|
23
|
+
## Ownership Rules
|
|
24
|
+
|
|
25
|
+
- Integrations and processors declare contributions.
|
|
26
|
+
- `ConfigBuilder.build()` decides ordering and validates compatibility.
|
|
27
|
+
- Runtime startup reuses finalized config/build state; it should not recompute manifest ownership.
|
|
28
|
+
|
|
29
|
+
## Output
|
|
30
|
+
|
|
31
|
+
The result of this layer is a built `EcoPagesAppConfig` with resolved absolute paths and app-owned runtime services attached under `appConfig.runtime`.
|
|
32
|
+
|
|
33
|
+
That built config is then consumed by server adapters, static generation, route rendering, and HMR.
|