@ecopages/core 0.2.0-alpha.8 → 0.2.1
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 +18 -11
- package/README.md +23 -26
- package/package.json +76 -58
- package/src/adapters/README.md +2 -2
- package/src/adapters/abstract/application-adapter.d.ts +28 -2
- package/src/adapters/abstract/application-adapter.js +14 -2
- package/src/adapters/abstract/router-adapter.d.ts +1 -1
- package/src/adapters/abstract/server-adapter.d.ts +2 -2
- package/src/adapters/bun/client-bridge.d.ts +1 -1
- package/src/adapters/bun/create-app.d.ts +4 -12
- package/src/adapters/bun/create-app.js +4 -5
- package/src/adapters/bun/hmr-manager.d.ts +4 -4
- package/src/adapters/bun/hmr-manager.js +8 -8
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +2 -2
- package/src/adapters/bun/server-adapter.d.ts +5 -5
- package/src/adapters/bun/server-adapter.js +6 -5
- package/src/adapters/bun/server-lifecycle.d.ts +4 -4
- package/src/adapters/bun/server-lifecycle.js +2 -2
- package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
- package/src/{create-app.js → adapters/create-app.js} +4 -4
- package/src/adapters/index.d.ts +1 -5
- package/src/adapters/index.js +1 -7
- package/src/adapters/node/create-app.d.ts +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 +2 -2
- package/src/adapters/node/node-hmr-manager.js +3 -3
- package/src/adapters/node/server-adapter.d.ts +4 -4
- package/src/adapters/node/server-adapter.js +13 -12
- package/src/adapters/node/static-content-server.d.ts +1 -1
- package/src/adapters/node/static-content-server.js +1 -1
- package/src/adapters/shared/application-adapter.d.ts +1 -1
- package/src/adapters/shared/define-api-handler.d.ts +1 -1
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +2 -2
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +1 -1
- 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 +1 -1
- package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
- package/src/adapters/shared/hmr-html-response.d.ts +1 -1
- package/src/adapters/shared/render-context.d.ts +2 -1
- package/src/adapters/shared/render-context.js +3 -1
- package/src/adapters/shared/runtime-bootstrap.d.ts +1 -1
- package/src/adapters/shared/runtime-bootstrap.js +1 -1
- package/src/adapters/shared/server-adapter.d.ts +1 -1
- package/src/adapters/shared/server-adapter.js +5 -1
- package/src/adapters/shared/server-route-handler.d.ts +4 -4
- package/src/adapters/shared/server-route-handler.js +3 -3
- package/src/adapters/shared/server-static-builder.d.ts +5 -5
- package/src/adapters/shared/server-static-builder.js +5 -4
- package/src/build/README.md +19 -13
- package/src/build/build-adapter.d.ts +67 -20
- package/src/build/build-adapter.js +420 -19
- package/src/build/dev-build-coordinator.d.ts +10 -12
- package/src/build/dev-build-coordinator.js +8 -15
- package/src/build/esbuild-build-adapter.d.ts +6 -0
- package/src/build/esbuild-build-adapter.js +94 -11
- package/src/build/runtime-build-executor.d.ts +5 -4
- package/src/build/runtime-build-executor.js +5 -3
- package/src/build/runtime-specifier-alias-plugin.js +19 -15
- package/src/build/runtime-specifier-aliases.d.ts +5 -0
- package/src/build/runtime-specifier-aliases.js +95 -0
- package/src/config/README.md +5 -2
- package/src/config/config-builder.d.ts +25 -2
- package/src/config/config-builder.js +44 -7
- package/src/declarations.d.ts +1 -1
- package/src/dev/sc-server.d.ts +1 -1
- package/src/dev/sc-server.js +1 -1
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +83 -0
- package/src/eco/eco.js +19 -48
- package/src/eco/eco.types.d.ts +1 -1
- package/src/eco/eco.utils.d.ts +1 -40
- package/src/eco/eco.utils.js +5 -35
- package/src/eco/global-injector-map.d.ts +1 -1
- package/src/eco/lazy-injector-map.d.ts +1 -1
- package/src/hmr/hmr-strategy.d.ts +16 -13
- package/src/hmr/hmr-strategy.js +22 -7
- package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
- package/src/hmr/strategies/default-hmr-strategy.js +1 -1
- package/src/hmr/strategies/js-hmr-strategy.d.ts +2 -2
- package/src/hmr/strategies/js-hmr-strategy.js +2 -2
- package/src/index.browser.d.ts +2 -2
- package/src/index.browser.js +1 -1
- package/src/index.d.ts +3 -2
- package/src/index.js +15 -4
- package/src/integrations/ghtml/ghtml-renderer.d.ts +6 -1
- package/src/integrations/ghtml/ghtml-renderer.js +29 -28
- package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -2
- package/src/integrations/ghtml/ghtml.plugin.js +2 -2
- package/src/plugins/README.md +1 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
- package/src/plugins/eco-component-meta-plugin.js +26 -20
- package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
- package/src/plugins/foreign-jsx-override-plugin.js +35 -0
- package/src/plugins/integration-plugin.d.ts +99 -33
- package/src/plugins/integration-plugin.js +68 -21
- package/src/plugins/processor.d.ts +2 -2
- package/src/plugins/processor.js +2 -2
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/GRAPH.md +54 -84
- package/src/route-renderer/README.md +14 -20
- package/src/route-renderer/orchestration/component-render-context.d.ts +83 -0
- package/src/route-renderer/orchestration/component-render-context.js +147 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +233 -76
- package/src/route-renderer/orchestration/integration-renderer.js +500 -143
- package/src/route-renderer/orchestration/queued-boundary-runtime.service.d.ts +93 -0
- package/src/route-renderer/orchestration/queued-boundary-runtime.service.js +155 -0
- package/src/route-renderer/orchestration/render-execution.service.d.ts +11 -71
- package/src/route-renderer/orchestration/render-execution.service.js +65 -80
- package/src/{eco/eco.utils.ts → route-renderer/orchestration/render-output.utils.d.ts} +10 -53
- package/src/route-renderer/orchestration/render-output.utils.js +65 -0
- package/src/route-renderer/orchestration/render-preparation.service.d.ts +2 -8
- package/src/route-renderer/orchestration/render-preparation.service.js +10 -17
- package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
- package/src/route-renderer/orchestration/template-serialization.js +45 -0
- package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
- package/src/route-renderer/page-loading/dependency-resolver.js +10 -8
- package/src/route-renderer/page-loading/page-module-loader.d.ts +6 -4
- package/src/route-renderer/page-loading/page-module-loader.js +7 -5
- package/src/route-renderer/route-renderer.d.ts +5 -3
- package/src/route-renderer/route-renderer.js +13 -3
- package/src/router/README.md +79 -8
- package/src/router/client/navigation-coordinator.js +2 -2
- package/src/router/server/fs-router-scanner.d.ts +1 -1
- package/src/router/server/fs-router-scanner.js +6 -1
- package/src/router/server/fs-router.d.ts +1 -1
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -3
- package/src/services/assets/asset-processing-service/asset-processing.service.js +6 -6
- package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
- package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
- package/src/services/assets/asset-processing-service/index.d.ts +5 -5
- package/src/services/assets/asset-processing-service/index.js +5 -5
- package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +1 -1
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +3 -3
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +2 -2
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
- package/src/services/assets/asset-processing-service/processors/index.js +5 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +1 -1
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +15 -3
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +3 -3
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +1 -1
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +1 -1
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +1 -1
- package/src/services/assets/browser-bundle.service.d.ts +1 -1
- package/src/services/assets/browser-bundle.service.js +2 -2
- package/src/services/html/html-rewriter-provider.service.js +4 -1
- package/src/services/html/html-transformer.service.d.ts +2 -2
- package/src/services/html/html-transformer.service.js +4 -10
- package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
- package/src/services/invalidation/development-invalidation.service.js +1 -0
- package/src/services/module-loading/app-module-loader.service.d.ts +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 +9 -1
- package/src/services/module-loading/app-server-module-transpiler.service.js +77 -2
- 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/{adapters/node/bootstrap-dependency-resolver.d.ts → services/module-loading/node-bootstrap-plugin.d.ts} +2 -24
- package/src/{adapters/node/bootstrap-dependency-resolver.js → services/module-loading/node-bootstrap-plugin.js} +42 -22
- package/src/services/module-loading/page-module-import.service.d.ts +4 -0
- package/src/services/module-loading/page-module-import.service.js +38 -9
- package/src/services/module-loading/server-module-transpiler.service.d.ts +3 -0
- package/src/services/module-loading/server-module-transpiler.service.js +4 -1
- package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
- package/src/services/runtime-state/dev-graph.service.js +10 -10
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
- package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +1 -1
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
- package/src/static-site-generator/static-site-generator.d.ts +2 -2
- package/src/static-site-generator/static-site-generator.js +1 -1
- package/src/{internal-types.d.ts → types/internal-types.d.ts} +24 -14
- package/src/{public-types.d.ts → types/public-types.d.ts} +30 -14
- package/src/types/public-types.js +0 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +6 -0
- package/src/utils/locals-utils.d.ts +1 -1
- package/src/utils/parse-cli-args.d.ts +4 -1
- package/src/utils/parse-cli-args.js +16 -1
- package/src/utils/resolve-work-dir.js +1 -1
- package/src/watchers/project-watcher.d.ts +4 -4
- package/src/watchers/project-watcher.js +4 -10
- package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
- package/src/adapters/abstract/application-adapter.ts +0 -337
- package/src/adapters/abstract/router-adapter.ts +0 -30
- package/src/adapters/abstract/server-adapter.ts +0 -79
- package/src/adapters/bun/client-bridge.ts +0 -62
- package/src/adapters/bun/create-app.ts +0 -189
- package/src/adapters/bun/hmr-manager.ts +0 -409
- package/src/adapters/bun/index.ts +0 -2
- package/src/adapters/bun/server-adapter.ts +0 -499
- package/src/adapters/bun/server-lifecycle.ts +0 -124
- package/src/adapters/index.ts +0 -6
- package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
- package/src/adapters/node/create-app.ts +0 -179
- package/src/adapters/node/index.d.ts +0 -6
- package/src/adapters/node/index.js +0 -11
- package/src/adapters/node/index.ts +0 -16
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.ts +0 -381
- package/src/adapters/node/runtime-adapter.d.ts +0 -46
- package/src/adapters/node/runtime-adapter.js +0 -306
- package/src/adapters/node/runtime-adapter.ts +0 -439
- package/src/adapters/node/server-adapter.ts +0 -488
- package/src/adapters/node/static-content-server.ts +0 -239
- package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
- package/src/adapters/node/write-runtime-manifest.js +0 -12
- package/src/adapters/node/write-runtime-manifest.ts +0 -38
- package/src/adapters/shared/api-response.ts +0 -104
- package/src/adapters/shared/application-adapter.ts +0 -199
- package/src/adapters/shared/define-api-handler.ts +0 -66
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
- package/src/adapters/shared/fs-server-response-factory.ts +0 -118
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
- package/src/adapters/shared/hmr-html-response.ts +0 -52
- package/src/adapters/shared/render-context.ts +0 -120
- package/src/adapters/shared/runtime-bootstrap.ts +0 -79
- package/src/adapters/shared/server-adapter.ts +0 -489
- package/src/adapters/shared/server-route-handler.ts +0 -153
- package/src/adapters/shared/server-static-builder.ts +0 -166
- package/src/build/build-adapter.ts +0 -361
- package/src/build/build-manifest.ts +0 -54
- package/src/build/build-types.ts +0 -83
- package/src/build/dev-build-coordinator.ts +0 -221
- package/src/build/esbuild-build-adapter.ts +0 -559
- package/src/build/runtime-build-executor.ts +0 -34
- package/src/build/runtime-specifier-alias-plugin.ts +0 -58
- package/src/config/config-builder.ts +0 -706
- package/src/constants.ts +0 -54
- package/src/create-app.ts +0 -87
- package/src/dev/sc-server.ts +0 -143
- package/src/eco/component-render-context.d.ts +0 -105
- package/src/eco/component-render-context.js +0 -87
- package/src/eco/component-render-context.ts +0 -224
- package/src/eco/eco.ts +0 -242
- package/src/eco/eco.types.ts +0 -221
- package/src/eco/global-injector-map.ts +0 -112
- package/src/eco/lazy-injector-map.ts +0 -120
- package/src/eco/module-dependencies.ts +0 -75
- package/src/errors/http-error.ts +0 -72
- package/src/errors/index.ts +0 -2
- package/src/errors/locals-access-error.ts +0 -7
- package/src/global/app-logger.ts +0 -4
- package/src/hmr/client/hmr-runtime.ts +0 -152
- package/src/hmr/hmr-strategy.ts +0 -172
- package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
- package/src/hmr/hmr.test.e2e.ts +0 -66
- package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
- package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
- package/src/index.browser.ts +0 -3
- package/src/index.ts +0 -5
- package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
- package/src/internal-types.ts +0 -232
- package/src/plugins/alias-resolver-plugin.ts +0 -63
- package/src/plugins/eco-component-meta-plugin.ts +0 -481
- package/src/plugins/integration-plugin.ts +0 -226
- package/src/plugins/processor.ts +0 -240
- package/src/plugins/runtime-capability.ts +0 -14
- package/src/public-types.ts +0 -1317
- package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
- package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
- package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
- package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
- package/src/route-renderer/component-graph/component-graph.js +0 -72
- package/src/route-renderer/component-graph/component-graph.ts +0 -159
- package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
- package/src/route-renderer/component-graph/component-marker.js +0 -46
- package/src/route-renderer/component-graph/component-marker.ts +0 -117
- package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
- package/src/route-renderer/component-graph/component-reference.js +0 -19
- package/src/route-renderer/component-graph/component-reference.ts +0 -29
- package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
- package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
- package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
- package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
- package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
- package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
- package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
- package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
- package/src/route-renderer/route-renderer.ts +0 -115
- package/src/router/client/link-intent.test.browser.ts +0 -51
- package/src/router/client/link-intent.ts +0 -92
- package/src/router/client/navigation-coordinator.ts +0 -433
- package/src/router/server/fs-router-scanner.ts +0 -219
- package/src/router/server/fs-router.ts +0 -122
- package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
- package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
- package/src/services/assets/asset-processing-service/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
- package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
- package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
- package/src/services/assets/browser-bundle.service.ts +0 -53
- package/src/services/cache/cache.types.ts +0 -126
- package/src/services/cache/index.ts +0 -18
- package/src/services/cache/memory-cache-store.ts +0 -130
- package/src/services/cache/page-cache-service.ts +0 -202
- package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
- package/src/services/html/html-rewriter-provider.service.ts +0 -103
- package/src/services/html/html-transformer.service.ts +0 -279
- package/src/services/invalidation/development-invalidation.service.ts +0 -261
- package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
- package/src/services/module-loading/page-module-import.service.ts +0 -200
- package/src/services/module-loading/server-loader.service.d.ts +0 -96
- package/src/services/module-loading/server-loader.service.js +0 -32
- package/src/services/module-loading/server-loader.service.ts +0 -130
- package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
- package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
- package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
- package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
- package/src/services/runtime-state/dev-graph.service.ts +0 -217
- package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
- package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
- package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
- package/src/services/validation/schema-validation-service.ts +0 -204
- package/src/services/validation/standard-schema.types.ts +0 -68
- package/src/static-site-generator/static-site-generator.ts +0 -462
- package/src/utils/css.d.ts +0 -1
- package/src/utils/css.js +0 -7
- package/src/utils/css.ts +0 -5
- package/src/utils/deep-merge.ts +0 -47
- package/src/utils/hash.ts +0 -5
- package/src/utils/html.ts +0 -1
- package/src/utils/invariant.ts +0 -15
- package/src/utils/locals-utils.ts +0 -37
- package/src/utils/parse-cli-args.ts +0 -83
- package/src/utils/path-utils.module.ts +0 -14
- package/src/utils/resolve-work-dir.ts +0 -45
- package/src/utils/runtime.ts +0 -44
- package/src/utils/server-utils.module.ts +0 -67
- package/src/watchers/project-watcher.test-helpers.ts +0 -41
- package/src/watchers/project-watcher.ts +0 -363
- /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
- /package/src/{constants.js → config/constants.js} +0 -0
- /package/src/{internal-types.js → services/module-loading/module-loading-types.js} +0 -0
- /package/src/{public-types.js → types/internal-types.js} +0 -0
package/src/eco/eco.js
CHANGED
|
@@ -1,56 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {
|
|
2
|
+
finalizeComponentRender,
|
|
3
|
+
interceptComponentBoundary
|
|
4
|
+
} from "../route-renderer/orchestration/component-render-context.js";
|
|
5
|
+
import { isThenable } from "../route-renderer/orchestration/render-output.utils.js";
|
|
5
6
|
function createComponentFactory(options) {
|
|
6
7
|
const integrationName = options.integration ?? options.__eco?.integration;
|
|
7
8
|
const comp = ((props) => {
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
renderContext.propsByRef[propsRef] = componentProps;
|
|
20
|
-
let slotRef;
|
|
21
|
-
const children = componentProps.children;
|
|
22
|
-
if (typeof children === "string" && children.includes("<eco-marker")) {
|
|
23
|
-
const childMarkers = parseComponentMarkers(children);
|
|
24
|
-
if (childMarkers.length > 0) {
|
|
25
|
-
slotRef = createSlotRef(renderContext);
|
|
26
|
-
renderContext.slotChildrenByRef[slotRef] = childMarkers.map((marker) => marker.nodeId);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return createComponentMarker({
|
|
30
|
-
nodeId,
|
|
31
|
-
integration: integrationName,
|
|
32
|
-
componentRef,
|
|
33
|
-
propsRef,
|
|
34
|
-
slotRef
|
|
35
|
-
});
|
|
9
|
+
const componentProps = props ?? {};
|
|
10
|
+
const renderInline = () => finalizeComponentRender(comp, options.render(props));
|
|
11
|
+
const boundaryRender = interceptComponentBoundary({
|
|
12
|
+
component: comp,
|
|
13
|
+
props: componentProps,
|
|
14
|
+
targetIntegration: integrationName
|
|
15
|
+
});
|
|
16
|
+
if (isThenable(boundaryRender)) {
|
|
17
|
+
return boundaryRender.then(
|
|
18
|
+
(resolvedBoundaryRender) => resolvedBoundaryRender !== void 0 ? resolvedBoundaryRender : renderInline()
|
|
19
|
+
);
|
|
36
20
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (lazyTriggers && lazyTriggers.length > 0) {
|
|
40
|
-
const triggerId = lazyTriggers[0].triggerId;
|
|
41
|
-
if (isThenable(content)) {
|
|
42
|
-
return content.then((resolvedContent) => addTriggerAttribute(resolvedContent, triggerId));
|
|
43
|
-
}
|
|
44
|
-
return addTriggerAttribute(content, triggerId);
|
|
21
|
+
if (boundaryRender !== void 0) {
|
|
22
|
+
return boundaryRender;
|
|
45
23
|
}
|
|
46
|
-
|
|
47
|
-
if (lazyGroups && lazyGroups.length > 0) {
|
|
48
|
-
if (isThenable(content)) {
|
|
49
|
-
return content.then((resolvedContent) => wrapWithScriptsInjector(resolvedContent, lazyGroups));
|
|
50
|
-
}
|
|
51
|
-
return wrapWithScriptsInjector(content, lazyGroups);
|
|
52
|
-
}
|
|
53
|
-
return content;
|
|
24
|
+
return renderInline();
|
|
54
25
|
});
|
|
55
26
|
comp.config = {
|
|
56
27
|
__eco: options.__eco,
|
package/src/eco/eco.types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Type definitions for the eco namespace API
|
|
3
3
|
* @module
|
|
4
4
|
*/
|
|
5
|
-
import type { DependencyLazyTrigger, EcoComponent, EcoComponentDependencies, EcoHtmlComponent, EcoInjectedMeta, EcoLayoutComponent, EcoPageLayoutComponent, EcoPagesElement, GetMetadata, GetStaticPaths, GetStaticProps, HtmlTemplateProps, LayoutProps, Middleware, RequestLocals, RequestPageContext } from '../public-types.js';
|
|
5
|
+
import type { DependencyLazyTrigger, EcoComponent, EcoComponentDependencies, EcoHtmlComponent, EcoInjectedMeta, EcoLayoutComponent, EcoPageLayoutComponent, EcoPagesElement, GetMetadata, GetStaticPaths, GetStaticProps, HtmlTemplateProps, LayoutProps, Middleware, RequestLocals, RequestPageContext } from '../types/public-types.js';
|
|
6
6
|
import type { CacheStrategy } from '../services/cache/cache.types.js';
|
|
7
7
|
type WithRequiredLocals<K extends keyof RequestLocals> = Omit<RequestLocals, K> & {
|
|
8
8
|
[P in K]-?: Exclude<RequestLocals[P], null | undefined>;
|
package/src/eco/eco.utils.d.ts
CHANGED
|
@@ -1,40 +1 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* Returns `true` when `value` is a thenable (Promise-like) object.
|
|
4
|
-
*
|
|
5
|
-
* Used to transparently handle both synchronous and asynchronous component
|
|
6
|
-
* render results without requiring every caller to branch on `instanceof Promise`.
|
|
7
|
-
*
|
|
8
|
-
* @typeParam T Expected resolved type of the thenable.
|
|
9
|
-
*/
|
|
10
|
-
export declare function isThenable<T>(value: unknown): value is PromiseLike<T>;
|
|
11
|
-
/**
|
|
12
|
-
* Injects `data-eco-trigger` into the first real HTML element opening tag of
|
|
13
|
-
* a component's rendered output string.
|
|
14
|
-
*
|
|
15
|
-
* The scan skips over leading whitespace, HTML comments (`<!-- -->`), CDATA
|
|
16
|
-
* sections, and doctype declarations so that the attribute is always placed on
|
|
17
|
-
* the first actual element — not spurious markup that can precede it.
|
|
18
|
-
*
|
|
19
|
-
* The insertion point is the end of the element's tag name, before any existing
|
|
20
|
-
* attributes or the closing `>`, which produces output like:
|
|
21
|
-
*
|
|
22
|
-
* ```html
|
|
23
|
-
* <my-element data-eco-trigger="eco-trigger-abc123" class="foo">…</my-element>
|
|
24
|
-
* ```
|
|
25
|
-
*
|
|
26
|
-
* When no eligible opening tag is found the original string is returned
|
|
27
|
-
* unchanged so callers never receive a broken fragment.
|
|
28
|
-
*
|
|
29
|
-
* @param content Rendered HTML string (or any value coercible to string).
|
|
30
|
-
* @param triggerId Stable trigger identifier produced by `buildResolvedLazyTriggers`.
|
|
31
|
-
*/
|
|
32
|
-
export declare function addTriggerAttribute(content: unknown, triggerId: string): string;
|
|
33
|
-
/**
|
|
34
|
-
* Wraps rendered component output in a `<scripts-injector>` element that
|
|
35
|
-
* carries an inline injector map for the legacy (non-global-injector) path.
|
|
36
|
-
*
|
|
37
|
-
* @param content Rendered component HTML.
|
|
38
|
-
* @param lazyGroups Resolved lazy script groups attached to the component config.
|
|
39
|
-
*/
|
|
40
|
-
export declare function wrapWithScriptsInjector(content: unknown, lazyGroups: NonNullable<EcoComponent['config']>['_resolvedLazyScripts']): string;
|
|
1
|
+
export { addTriggerAttribute, isThenable, wrapWithScriptsInjector, } from '../route-renderer/orchestration/render-output.utils.js';
|
package/src/eco/eco.utils.js
CHANGED
|
@@ -1,38 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const str = String(content);
|
|
7
|
-
let i = 0;
|
|
8
|
-
while (i < str.length) {
|
|
9
|
-
if (str[i] !== "<") {
|
|
10
|
-
i++;
|
|
11
|
-
continue;
|
|
12
|
-
}
|
|
13
|
-
const next = str[i + 1];
|
|
14
|
-
if (next === "!" || next === "?") {
|
|
15
|
-
const end = str.indexOf(">", i);
|
|
16
|
-
if (end === -1) break;
|
|
17
|
-
i = end + 1;
|
|
18
|
-
continue;
|
|
19
|
-
}
|
|
20
|
-
if (next && /[a-zA-Z]/.test(next)) {
|
|
21
|
-
const tagSlice = str.slice(i + 1);
|
|
22
|
-
const nameEnd = tagSlice.search(/[\s/>]/);
|
|
23
|
-
if (nameEnd === -1) break;
|
|
24
|
-
const insertAt = i + 1 + nameEnd;
|
|
25
|
-
return `${str.slice(0, insertAt)} data-eco-trigger="${triggerId}"${str.slice(insertAt)}`;
|
|
26
|
-
}
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
return str;
|
|
30
|
-
}
|
|
31
|
-
function wrapWithScriptsInjector(content, lazyGroups) {
|
|
32
|
-
const wrappedContent = String(content);
|
|
33
|
-
const injectorMapScript = buildInjectorMapScript(lazyGroups ?? []);
|
|
34
|
-
return `<scripts-injector><script type="ecopages/injector-map">${injectorMapScript}<\/script>${wrappedContent}<\/scripts-injector>`;
|
|
35
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
addTriggerAttribute,
|
|
3
|
+
isThenable,
|
|
4
|
+
wrapWithScriptsInjector
|
|
5
|
+
} from "../route-renderer/orchestration/render-output.utils.js";
|
|
36
6
|
export {
|
|
37
7
|
addTriggerAttribute,
|
|
38
8
|
isThenable,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ResolvedLazyTrigger } from '../public-types.js';
|
|
1
|
+
import type { ResolvedLazyTrigger } from '../types/public-types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Serializes resolved lazy triggers into a JSON string safe for embedding
|
|
4
4
|
* inside an inline `<script type="ecopages/global-injector-map">` tag.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ClientBridgeEvent } from '../public-types';
|
|
1
|
+
import type { ClientBridgeEvent } from '../types/public-types.js';
|
|
2
2
|
/**
|
|
3
3
|
* HMR Strategy Pattern
|
|
4
4
|
*
|
|
@@ -18,11 +18,13 @@ import type { ClientBridgeEvent } from '../public-types';
|
|
|
18
18
|
* async process(filePath: string): Promise<HmrAction> {
|
|
19
19
|
* return {
|
|
20
20
|
* type: 'broadcast',
|
|
21
|
-
* events: [{ type: 'update', path: filePath, timestamp: Date.now() }]
|
|
21
|
+
* events: [{ type: 'update', path: filePath, timestamp: Date.now() }],
|
|
22
22
|
* };
|
|
23
23
|
* }
|
|
24
24
|
* }
|
|
25
|
-
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
26
28
|
* Defines the category of an HMR strategy, which determines its execution priority.
|
|
27
29
|
* Strategies are evaluated in descending order: INTEGRATION → ASSET → SCRIPT → FALLBACK.
|
|
28
30
|
*
|
|
@@ -30,28 +32,29 @@ import type { ClientBridgeEvent } from '../public-types';
|
|
|
30
32
|
* The numeric values represent base priorities. Strategies can fine-tune their priority
|
|
31
33
|
* using the `priorityOffset` property.
|
|
32
34
|
*/
|
|
33
|
-
export declare
|
|
35
|
+
export declare const HmrStrategyType: {
|
|
34
36
|
/**
|
|
35
37
|
* Integration-specific strategies (React, Lit, etc.)
|
|
36
38
|
* Highest priority to allow framework-specific HMR handling.
|
|
37
39
|
*/
|
|
38
|
-
INTEGRATION
|
|
40
|
+
readonly INTEGRATION: 100;
|
|
39
41
|
/**
|
|
40
42
|
* Asset processing strategies (CSS, images, etc.)
|
|
41
43
|
* High priority for specialized asset handling.
|
|
42
44
|
*/
|
|
43
|
-
ASSET
|
|
45
|
+
readonly ASSET: 50;
|
|
44
46
|
/**
|
|
45
47
|
* Generic script bundling strategies (JS/TS)
|
|
46
48
|
* Medium priority for standard script processing.
|
|
47
49
|
*/
|
|
48
|
-
SCRIPT
|
|
50
|
+
readonly SCRIPT: 25;
|
|
49
51
|
/**
|
|
50
52
|
* Fallback strategy for unhandled file types.
|
|
51
53
|
* Lowest priority, triggers full page reload.
|
|
52
54
|
*/
|
|
53
|
-
FALLBACK
|
|
54
|
-
}
|
|
55
|
+
readonly FALLBACK: 0;
|
|
56
|
+
};
|
|
57
|
+
export type HmrStrategyType = (typeof HmrStrategyType)[keyof typeof HmrStrategyType];
|
|
55
58
|
/**
|
|
56
59
|
* Represents an action to be taken after processing a file change.
|
|
57
60
|
*/
|
|
@@ -62,7 +65,7 @@ export interface HmrAction {
|
|
|
62
65
|
type: 'broadcast' | 'none';
|
|
63
66
|
/**
|
|
64
67
|
* The HMR events to broadcast, if type is 'broadcast'.
|
|
65
|
-
*
|
|
68
|
+
* Multiple events may be broadcast in one action.
|
|
66
69
|
*/
|
|
67
70
|
events?: ClientBridgeEvent[];
|
|
68
71
|
}
|
|
@@ -74,8 +77,8 @@ export interface HmrAction {
|
|
|
74
77
|
* whether they match the changed file path.
|
|
75
78
|
*
|
|
76
79
|
* @remarks
|
|
77
|
-
* Strategies
|
|
78
|
-
* produce the same result when processed by the same strategy.
|
|
80
|
+
* Strategies are expected to be stateless and idempotent. The same file change
|
|
81
|
+
* should produce the same result when processed by the same strategy.
|
|
79
82
|
*
|
|
80
83
|
* @example
|
|
81
84
|
* ```typescript
|
|
@@ -120,7 +123,7 @@ export declare abstract class HmrStrategy {
|
|
|
120
123
|
* Determines if this strategy can handle the given file path.
|
|
121
124
|
*
|
|
122
125
|
* @param filePath - Absolute path to the changed file
|
|
123
|
-
* @returns
|
|
126
|
+
* @returns `true` when this strategy should process the file
|
|
124
127
|
*
|
|
125
128
|
* @example
|
|
126
129
|
* ```typescript
|
package/src/hmr/hmr-strategy.js
CHANGED
|
@@ -1,10 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
const HmrStrategyType = {
|
|
2
|
+
/**
|
|
3
|
+
* Integration-specific strategies (React, Lit, etc.)
|
|
4
|
+
* Highest priority to allow framework-specific HMR handling.
|
|
5
|
+
*/
|
|
6
|
+
INTEGRATION: 100,
|
|
7
|
+
/**
|
|
8
|
+
* Asset processing strategies (CSS, images, etc.)
|
|
9
|
+
* High priority for specialized asset handling.
|
|
10
|
+
*/
|
|
11
|
+
ASSET: 50,
|
|
12
|
+
/**
|
|
13
|
+
* Generic script bundling strategies (JS/TS)
|
|
14
|
+
* Medium priority for standard script processing.
|
|
15
|
+
*/
|
|
16
|
+
SCRIPT: 25,
|
|
17
|
+
/**
|
|
18
|
+
* Fallback strategy for unhandled file types.
|
|
19
|
+
* Lowest priority, triggers full page reload.
|
|
20
|
+
*/
|
|
21
|
+
FALLBACK: 0
|
|
22
|
+
};
|
|
8
23
|
class HmrStrategy {
|
|
9
24
|
/**
|
|
10
25
|
* Optional offset to fine-tune priority within the same category.
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
|
-
import { HmrStrategy,
|
|
9
|
+
import { HmrStrategy, type HmrAction } from '../hmr-strategy.js';
|
|
10
10
|
/**
|
|
11
11
|
* Default fallback strategy for unhandled file types.
|
|
12
12
|
*
|
|
@@ -25,7 +25,7 @@ import { HmrStrategy, HmrStrategyType, type HmrAction } from '../hmr-strategy';
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
export declare class DefaultHmrStrategy extends HmrStrategy {
|
|
28
|
-
readonly type
|
|
28
|
+
readonly type: 0;
|
|
29
29
|
/**
|
|
30
30
|
* Matches all file paths.
|
|
31
31
|
*
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @module
|
|
9
9
|
*/
|
|
10
|
-
import { HmrStrategy,
|
|
10
|
+
import { HmrStrategy, type HmrAction } from '../hmr-strategy.js';
|
|
11
11
|
import type { EcoBuildPlugin } from '../../build/build-types.js';
|
|
12
12
|
import type { BrowserBundleExecutor } from '../../services/assets/browser-bundle.service.js';
|
|
13
13
|
import type { EntrypointDependencyGraph } from '../../services/runtime-state/entrypoint-dependency-graph.service.js';
|
|
@@ -94,7 +94,7 @@ export interface JsHmrContext {
|
|
|
94
94
|
* ```
|
|
95
95
|
*/
|
|
96
96
|
export declare class JsHmrStrategy extends HmrStrategy {
|
|
97
|
-
readonly type
|
|
97
|
+
readonly type: 25;
|
|
98
98
|
private context;
|
|
99
99
|
constructor(context: JsHmrContext);
|
|
100
100
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { fileSystem } from "@ecopages/file-system";
|
|
3
|
-
import { HmrStrategy, HmrStrategyType } from "../hmr-strategy";
|
|
4
|
-
import { appLogger } from "../../global/app-logger";
|
|
3
|
+
import { HmrStrategy, HmrStrategyType } from "../hmr-strategy.js";
|
|
4
|
+
import { appLogger } from "../../global/app-logger.js";
|
|
5
5
|
class JsHmrStrategy extends HmrStrategy {
|
|
6
6
|
type = HmrStrategyType.SCRIPT;
|
|
7
7
|
context;
|
package/src/index.browser.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type * from './public-types.js';
|
|
1
|
+
export type * from './types/public-types.js';
|
|
2
2
|
export type * from './eco/eco.types.js';
|
|
3
|
-
export { eco } from './eco/eco.js';
|
|
3
|
+
export { eco } from './eco/eco.browser.js';
|
package/src/index.browser.js
CHANGED
package/src/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export type * from './public-types.js';
|
|
1
|
+
export type * from './types/public-types.js';
|
|
2
2
|
export type * from './eco/eco.types.js';
|
|
3
3
|
export { eco } from './eco/eco.js';
|
|
4
|
-
export { EcopagesApp, createApp, type EcopagesAppOptions } from './create-app.js';
|
|
5
4
|
export { defineApiHandler, defineGroupHandler, type GroupHandler } from './adapters/shared/define-api-handler.js';
|
|
5
|
+
export { createEcoBuildPluginFromSourceTransform, createVitePluginsFromAppSourceTransforms, getAppSourceTransforms, createVitePluginFromSourceTransform, normalizeTransformId, type EcoSourceTransform, type EcoSourceTransformResult, type EcoViteCompatiblePlugin, } from './plugins/source-transform.js';
|
|
6
|
+
export { createEcoComponentMetaTransform } from './plugins/eco-component-meta-plugin.js';
|
package/src/index.js
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
import { eco } from "./eco/eco.js";
|
|
2
|
-
import { EcopagesApp, createApp } from "./create-app.js";
|
|
3
2
|
import { defineApiHandler, defineGroupHandler } from "./adapters/shared/define-api-handler.js";
|
|
3
|
+
import {
|
|
4
|
+
createEcoBuildPluginFromSourceTransform,
|
|
5
|
+
createVitePluginsFromAppSourceTransforms,
|
|
6
|
+
getAppSourceTransforms,
|
|
7
|
+
createVitePluginFromSourceTransform,
|
|
8
|
+
normalizeTransformId
|
|
9
|
+
} from "./plugins/source-transform.js";
|
|
10
|
+
import { createEcoComponentMetaTransform } from "./plugins/eco-component-meta-plugin.js";
|
|
4
11
|
export {
|
|
5
|
-
|
|
6
|
-
|
|
12
|
+
createEcoBuildPluginFromSourceTransform,
|
|
13
|
+
createEcoComponentMetaTransform,
|
|
14
|
+
createVitePluginFromSourceTransform,
|
|
15
|
+
createVitePluginsFromAppSourceTransforms,
|
|
7
16
|
defineApiHandler,
|
|
8
17
|
defineGroupHandler,
|
|
9
|
-
eco
|
|
18
|
+
eco,
|
|
19
|
+
getAppSourceTransforms,
|
|
20
|
+
normalizeTransformId
|
|
10
21
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* This module contains the ghtml renderer
|
|
3
3
|
* @module
|
|
4
4
|
*/
|
|
5
|
-
import type { EcoComponent, EcoPagesElement, IntegrationRendererRenderOptions, RouteRendererBody } from '../../public-types.js';
|
|
5
|
+
import type { ComponentRenderInput, ComponentRenderResult, EcoComponent, EcoPagesElement, IntegrationRendererRenderOptions, RouteRendererBody } from '../../types/public-types.js';
|
|
6
6
|
import { IntegrationRenderer, type RenderToResponseContext } from '../../route-renderer/orchestration/integration-renderer.js';
|
|
7
7
|
/**
|
|
8
8
|
* A renderer for the ghtml integration.
|
|
@@ -10,6 +10,11 @@ import { IntegrationRenderer, type RenderToResponseContext } from '../../route-r
|
|
|
10
10
|
*/
|
|
11
11
|
export declare class GhtmlRenderer extends IntegrationRenderer<EcoPagesElement> {
|
|
12
12
|
name: string;
|
|
13
|
+
renderComponent(input: ComponentRenderInput): Promise<ComponentRenderResult>;
|
|
14
|
+
protected createComponentBoundaryRuntime(options: {
|
|
15
|
+
boundaryInput: ComponentRenderInput;
|
|
16
|
+
rendererCache: Map<string, IntegrationRenderer<any>>;
|
|
17
|
+
}): import("../../index.browser.js").ComponentBoundaryRuntime;
|
|
13
18
|
render({ params, query, props, locals, pageLocals, metadata, Page, Layout, HtmlTemplate, }: IntegrationRendererRenderOptions): Promise<RouteRendererBody>;
|
|
14
19
|
renderToResponse<P = Record<string, unknown>>(view: EcoComponent<P>, props: P, ctx: RenderToResponseContext): Promise<Response>;
|
|
15
20
|
}
|
|
@@ -4,6 +4,18 @@ import {
|
|
|
4
4
|
import { GHTML_PLUGIN_NAME } from "./ghtml.plugin.js";
|
|
5
5
|
class GhtmlRenderer extends IntegrationRenderer {
|
|
6
6
|
name = GHTML_PLUGIN_NAME;
|
|
7
|
+
async renderComponent(input) {
|
|
8
|
+
return this.renderStringComponentBoundaryWithQueuedForeignBoundaries(
|
|
9
|
+
input,
|
|
10
|
+
input.component
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
createComponentBoundaryRuntime(options) {
|
|
14
|
+
return this.createQueuedBoundaryRuntime({
|
|
15
|
+
boundaryInput: options.boundaryInput,
|
|
16
|
+
rendererCache: options.rendererCache
|
|
17
|
+
});
|
|
18
|
+
}
|
|
7
19
|
async render({
|
|
8
20
|
params,
|
|
9
21
|
query,
|
|
@@ -16,42 +28,31 @@ class GhtmlRenderer extends IntegrationRenderer {
|
|
|
16
28
|
HtmlTemplate
|
|
17
29
|
}) {
|
|
18
30
|
try {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
31
|
+
return await this.renderPageWithDocumentShell({
|
|
32
|
+
page: {
|
|
33
|
+
component: Page,
|
|
34
|
+
props: { params, query, ...props, locals: pageLocals }
|
|
35
|
+
},
|
|
36
|
+
layout: Layout ? {
|
|
37
|
+
component: Layout,
|
|
38
|
+
props: locals ? { locals } : {}
|
|
39
|
+
} : void 0,
|
|
40
|
+
htmlTemplate: HtmlTemplate,
|
|
22
41
|
metadata,
|
|
23
|
-
|
|
24
|
-
pageProps: props || {}
|
|
42
|
+
pageProps: props ?? {}
|
|
25
43
|
});
|
|
26
|
-
return this.DOC_TYPE + body;
|
|
27
44
|
} catch (error) {
|
|
28
45
|
throw this.createRenderError("Error rendering page", error);
|
|
29
46
|
}
|
|
30
47
|
}
|
|
31
48
|
async renderToResponse(view, props, ctx) {
|
|
32
49
|
try {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
} else {
|
|
40
|
-
const children = Layout ? await Layout({ children: pageContent }) : pageContent;
|
|
41
|
-
const HtmlTemplate = await this.getHtmlTemplate();
|
|
42
|
-
const metadata = view.metadata ? await view.metadata({
|
|
43
|
-
params: {},
|
|
44
|
-
query: {},
|
|
45
|
-
props,
|
|
46
|
-
appConfig: this.appConfig
|
|
47
|
-
}) : this.appConfig.defaultMetadata;
|
|
48
|
-
body = this.DOC_TYPE + await HtmlTemplate({
|
|
49
|
-
metadata,
|
|
50
|
-
children,
|
|
51
|
-
pageProps: props
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
return this.createHtmlResponse(body, ctx);
|
|
50
|
+
return await this.renderViewWithDocumentShell({
|
|
51
|
+
view,
|
|
52
|
+
props,
|
|
53
|
+
ctx,
|
|
54
|
+
layout: view.config?.layout
|
|
55
|
+
});
|
|
55
56
|
} catch (error) {
|
|
56
57
|
throw this.createRenderError("Error rendering view", error);
|
|
57
58
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { IntegrationPlugin, type IntegrationPluginConfig } from '../../plugins/integration-plugin';
|
|
2
|
-
import { GhtmlRenderer } from './ghtml-renderer';
|
|
1
|
+
import { IntegrationPlugin, type IntegrationPluginConfig } from '../../plugins/integration-plugin.js';
|
|
2
|
+
import { GhtmlRenderer } from './ghtml-renderer.js';
|
|
3
3
|
/**
|
|
4
4
|
* The name of the ghtml plugin
|
|
5
5
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { IntegrationPlugin } from "../../plugins/integration-plugin";
|
|
2
|
-
import { GhtmlRenderer } from "./ghtml-renderer";
|
|
1
|
+
import { IntegrationPlugin } from "../../plugins/integration-plugin.js";
|
|
2
|
+
import { GhtmlRenderer } from "./ghtml-renderer.js";
|
|
3
3
|
const GHTML_PLUGIN_NAME = "ghtml";
|
|
4
4
|
class GhtmlPlugin extends IntegrationPlugin {
|
|
5
5
|
renderer = GhtmlRenderer;
|
package/src/plugins/README.md
CHANGED
|
@@ -18,6 +18,7 @@ These contracts are responsible for:
|
|
|
18
18
|
- `integration-plugin.ts`: framework-semantics contract for render integrations
|
|
19
19
|
- `processor.ts`: asset-transformation contract for processors
|
|
20
20
|
- `runtime-capability.ts`: runtime compatibility declaration types
|
|
21
|
+
- `source-transform.ts`: bundler-neutral source-transform primitive with Ecopages adapters plus app-level Vite plugin composition helpers
|
|
21
22
|
- `eco-component-meta-plugin.ts`: shared metadata transform used by core loading/build paths
|
|
22
23
|
|
|
23
24
|
## Ownership Rules
|
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
* @module eco-component-meta-plugin
|
|
27
27
|
*/
|
|
28
28
|
import type { EcoBuildPlugin } from '../build/build-types.js';
|
|
29
|
-
import type { EcoPagesAppConfig } from '../internal-types.js';
|
|
29
|
+
import type { EcoPagesAppConfig } from '../types/internal-types.js';
|
|
30
|
+
import { type EcoSourceTransform, type EcoViteCompatiblePlugin } from './source-transform.js';
|
|
30
31
|
/**
|
|
31
32
|
* Options for creating the eco-component-meta-plugin.
|
|
32
33
|
*/
|
|
@@ -34,6 +35,11 @@ export interface EcoComponentDirPluginOptions {
|
|
|
34
35
|
/** The EcoPages application configuration containing integration settings */
|
|
35
36
|
config: EcoPagesAppConfig;
|
|
36
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Creates the bundler-neutral metadata transform used by Ecopages loaders and
|
|
40
|
+
* Vite-compatible adapters.
|
|
41
|
+
*/
|
|
42
|
+
export declare function createEcoComponentMetaTransform(options: EcoComponentDirPluginOptions): EcoSourceTransform;
|
|
37
43
|
/**
|
|
38
44
|
* Creates a build plugin that auto-injects `__eco` metadata into EcoComponent config objects.
|
|
39
45
|
*
|
|
@@ -65,6 +71,11 @@ export interface EcoComponentDirPluginOptions {
|
|
|
65
71
|
* ```
|
|
66
72
|
*/
|
|
67
73
|
export declare function createEcoComponentMetaPlugin(options: EcoComponentDirPluginOptions): EcoBuildPlugin;
|
|
74
|
+
/**
|
|
75
|
+
* Creates a Vite-compatible metadata injection plugin from the shared
|
|
76
|
+
* Ecopages source-transform primitive.
|
|
77
|
+
*/
|
|
78
|
+
export declare function createEcoComponentMetaVitePlugin(options: EcoComponentDirPluginOptions): EcoViteCompatiblePlugin;
|
|
68
79
|
/**
|
|
69
80
|
* Injects `__eco` metadata into EcoComponent config objects in file content.
|
|
70
81
|
*
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { parseSync } from "oxc-parser";
|
|
3
|
-
import { fileSystem } from "@ecopages/file-system";
|
|
4
3
|
import { rapidhash } from "../utils/hash.js";
|
|
4
|
+
import {
|
|
5
|
+
createEcoBuildPluginFromSourceTransform,
|
|
6
|
+
createVitePluginFromSourceTransform
|
|
7
|
+
} from "./source-transform.js";
|
|
5
8
|
const REGEX_SPECIAL_CHARS = /[.*+?^${}()|[\]\\]/g;
|
|
6
9
|
const VALID_LOADER_EXTENSIONS = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx"]);
|
|
7
10
|
function hasValidLoaderExtension(ext) {
|
|
@@ -38,30 +41,31 @@ function createExtensionPattern(extensions) {
|
|
|
38
41
|
const escaped = uniqueExtensions.map((ext) => ext.replace(REGEX_SPECIAL_CHARS, "\\$&"));
|
|
39
42
|
return new RegExp(`(${escaped.join("|")})(\\?.*)?$`);
|
|
40
43
|
}
|
|
41
|
-
function
|
|
44
|
+
function createEcoComponentMetaTransform(options) {
|
|
45
|
+
const allExtensions = options.config.integrations.flatMap((integration) => integration.extensions).filter(hasValidLoaderExtension);
|
|
46
|
+
if (allExtensions.length === 0) {
|
|
47
|
+
throw new Error("[eco-component-meta-plugin] No extensions configured. At least one integration is required.");
|
|
48
|
+
}
|
|
49
|
+
const extensionPattern = createExtensionPattern(allExtensions);
|
|
50
|
+
const extensionToIntegration = buildExtensionToIntegrationMap(options.config.integrations);
|
|
42
51
|
return {
|
|
43
52
|
name: "eco-component-meta-plugin",
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
build.onLoad({ filter: extensionPattern }, (args) => {
|
|
52
|
-
const filePath = args.path.split("?")[0];
|
|
53
|
-
const contents = fileSystem.readFileSync(filePath);
|
|
54
|
-
const integration = detectIntegration(filePath, extensionToIntegration);
|
|
55
|
-
const transformedContents = injectEcoMeta(contents, filePath, integration);
|
|
56
|
-
const ext = path.extname(filePath).slice(1);
|
|
57
|
-
return {
|
|
58
|
-
contents: transformedContents,
|
|
59
|
-
loader: ext || "ts"
|
|
60
|
-
};
|
|
61
|
-
});
|
|
53
|
+
enforce: "pre",
|
|
54
|
+
filter: extensionPattern,
|
|
55
|
+
transform(code, id) {
|
|
56
|
+
const integration = detectIntegration(id, extensionToIntegration);
|
|
57
|
+
return {
|
|
58
|
+
code: injectEcoMeta(code, id, integration)
|
|
59
|
+
};
|
|
62
60
|
}
|
|
63
61
|
};
|
|
64
62
|
}
|
|
63
|
+
function createEcoComponentMetaPlugin(options) {
|
|
64
|
+
return createEcoBuildPluginFromSourceTransform(createEcoComponentMetaTransform(options));
|
|
65
|
+
}
|
|
66
|
+
function createEcoComponentMetaVitePlugin(options) {
|
|
67
|
+
return createVitePluginFromSourceTransform(createEcoComponentMetaTransform(options));
|
|
68
|
+
}
|
|
65
69
|
function findInjectionPoints(node, insertions, injection, isInsideEcoComponent = false) {
|
|
66
70
|
if (!node || typeof node !== "object") return;
|
|
67
71
|
const n = node;
|
|
@@ -152,6 +156,8 @@ function injectEcoMeta(contents, filePath, integration) {
|
|
|
152
156
|
var eco_component_meta_plugin_default = createEcoComponentMetaPlugin;
|
|
153
157
|
export {
|
|
154
158
|
createEcoComponentMetaPlugin,
|
|
159
|
+
createEcoComponentMetaTransform,
|
|
160
|
+
createEcoComponentMetaVitePlugin,
|
|
155
161
|
eco_component_meta_plugin_default as default,
|
|
156
162
|
injectEcoMeta
|
|
157
163
|
};
|