@ecopages/core 0.2.0-alpha.5 → 0.2.0-alpha.7
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 +180 -47
- 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 +207 -97
- 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 +234 -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 -84
- 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 +71 -78
- 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 -11
- 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 -0
- package/src/watchers/project-watcher.test.ts +678 -0
- package/src/watchers/project-watcher.ts +49 -50
- package/CHANGELOG.md +0 -94
- 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 -79
- package/src/adapters/bun/hmr-manager.js +0 -222
- 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 -62
- package/src/adapters/node/node-hmr-manager.js +0 -221
- 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 -75
- 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 -391
- 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 -192
- 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 -1094
- 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 -132
- package/src/watchers/project-watcher.js +0 -281
- package/src/watchers/project-watcher.test-helpers.d.ts +0 -4
- package/src/watchers/project-watcher.test-helpers.js +0 -51
- /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
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
+
import { DEFAULT_ECOPAGES_WORK_DIR } from '../constants.ts';
|
|
2
3
|
import { appLogger } from '../global/app-logger.ts';
|
|
3
4
|
import type { EcoPagesAppConfig } from '../internal-types.ts';
|
|
4
5
|
import type { EcoPageComponent, StaticRoute } from '../public-types.ts';
|
|
5
6
|
import type { RouteRendererFactory } from '../route-renderer/route-renderer.ts';
|
|
6
|
-
import type { FSRouter } from '../router/fs-router.
|
|
7
|
+
import type { FSRouter } from '../router/server/fs-router.js';
|
|
7
8
|
import { fileSystem } from '@ecopages/file-system';
|
|
8
9
|
import { PathUtils } from '../utils/path-utils.module.ts';
|
|
10
|
+
import { getAppServerModuleTranspiler } from '../services/module-loading/app-server-module-transpiler.service.ts';
|
|
11
|
+
import type { ServerModuleTranspiler } from '../services/module-loading/server-module-transpiler.service.ts';
|
|
9
12
|
|
|
10
13
|
export const STATIC_SITE_GENERATOR_ERRORS = {
|
|
11
14
|
ROUTE_RENDERER_FACTORY_REQUIRED: 'RouteRendererFactory is required for render strategy',
|
|
@@ -17,13 +20,89 @@ export const STATIC_SITE_GENERATOR_ERRORS = {
|
|
|
17
20
|
`Dynamic route ${routePath} requires staticPaths to be defined on the view.`,
|
|
18
21
|
} as const;
|
|
19
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Generates static output files from the finalized app config and route graph.
|
|
25
|
+
*
|
|
26
|
+
* @remarks
|
|
27
|
+
* This class intentionally reuses the same routing, renderer, and server-module
|
|
28
|
+
* loading seams used by runtime rendering. Static generation should be a build
|
|
29
|
+
* loop over the normal app model, not a parallel rendering stack with different
|
|
30
|
+
* semantics.
|
|
31
|
+
*/
|
|
20
32
|
export class StaticSiteGenerator {
|
|
21
33
|
appConfig: EcoPagesAppConfig;
|
|
34
|
+
private serverModuleTranspiler: ServerModuleTranspiler;
|
|
22
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Creates the static-site generator for one app config.
|
|
38
|
+
*/
|
|
23
39
|
constructor({ appConfig }: { appConfig: EcoPagesAppConfig }) {
|
|
24
40
|
this.appConfig = appConfig;
|
|
41
|
+
this.serverModuleTranspiler = getAppServerModuleTranspiler(appConfig);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Returns the transpiler output directory used for static page-module probes.
|
|
46
|
+
*/
|
|
47
|
+
private getStaticPageModuleOutdir(): string {
|
|
48
|
+
const workDir =
|
|
49
|
+
this.appConfig.absolutePaths?.workDir ??
|
|
50
|
+
path.join(this.appConfig.rootDir, this.appConfig.workDir ?? DEFAULT_ECOPAGES_WORK_DIR);
|
|
51
|
+
return path.join(workDir, '.server-static-page-modules');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private getExportDir(): string {
|
|
55
|
+
return this.appConfig.absolutePaths?.distDir ?? path.join(this.appConfig.rootDir, this.appConfig.distDir);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Logs the standardized warning emitted when a dynamic-cache page is skipped.
|
|
60
|
+
*/
|
|
61
|
+
private warnDynamicPageSkipped(filePath: string): void {
|
|
62
|
+
appLogger.warn(
|
|
63
|
+
"Pages with cache: 'dynamic' are not supported in static generation or preview, so they will be skipped\n",
|
|
64
|
+
`➤ ${filePath}`,
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Determines whether one filesystem-discovered page should be excluded from
|
|
70
|
+
* static generation.
|
|
71
|
+
*/
|
|
72
|
+
private async shouldSkipStaticPageFile(filePath: string): Promise<boolean> {
|
|
73
|
+
const module = (await this.serverModuleTranspiler.importModule({
|
|
74
|
+
filePath,
|
|
75
|
+
outdir: this.getStaticPageModuleOutdir(),
|
|
76
|
+
externalPackages: false,
|
|
77
|
+
transpileErrorMessage: (details) => `Error transpiling static page module: ${details}`,
|
|
78
|
+
noOutputMessage: (targetFilePath) =>
|
|
79
|
+
`No transpiled output generated for static page module: ${targetFilePath}`,
|
|
80
|
+
})) as { default?: EcoPageComponent<any> };
|
|
81
|
+
|
|
82
|
+
if (module.default?.cache !== 'dynamic') {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
this.warnDynamicPageSkipped(filePath);
|
|
87
|
+
return true;
|
|
25
88
|
}
|
|
26
89
|
|
|
90
|
+
/**
|
|
91
|
+
* Determines whether one explicit static route view should be excluded from
|
|
92
|
+
* static generation.
|
|
93
|
+
*/
|
|
94
|
+
private shouldSkipStaticView(routePath: string, view: EcoPageComponent<any>): boolean {
|
|
95
|
+
if (view.cache !== 'dynamic') {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
this.warnDynamicPageSkipped(routePath);
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Writes the robots.txt file declared by the app config.
|
|
105
|
+
*/
|
|
27
106
|
generateRobotsTxt(): void {
|
|
28
107
|
let data = '';
|
|
29
108
|
const preferences = this.appConfig.robotsTxt.preferences;
|
|
@@ -36,15 +115,21 @@ export class StaticSiteGenerator {
|
|
|
36
115
|
data += '\n';
|
|
37
116
|
}
|
|
38
117
|
|
|
39
|
-
fileSystem.ensureDir(this.
|
|
40
|
-
fileSystem.write(
|
|
118
|
+
fileSystem.ensureDir(this.getExportDir());
|
|
119
|
+
fileSystem.write(path.join(this.getExportDir(), 'robots.txt'), data);
|
|
41
120
|
}
|
|
42
121
|
|
|
122
|
+
/**
|
|
123
|
+
* Returns whether the input path points at the root directory.
|
|
124
|
+
*/
|
|
43
125
|
isRootDir(path: string) {
|
|
44
126
|
const slashes = path.match(/\//g);
|
|
45
127
|
return slashes && slashes.length === 1;
|
|
46
128
|
}
|
|
47
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Collects parent directories that must exist for the generated route set.
|
|
132
|
+
*/
|
|
48
133
|
getDirectories(routes: string[]) {
|
|
49
134
|
const directories = new Set<string>();
|
|
50
135
|
|
|
@@ -84,6 +169,14 @@ export class StaticSiteGenerator {
|
|
|
84
169
|
return params;
|
|
85
170
|
}
|
|
86
171
|
|
|
172
|
+
/**
|
|
173
|
+
* Generates static output for all filesystem-discovered routes.
|
|
174
|
+
*
|
|
175
|
+
* @remarks
|
|
176
|
+
* Routes whose integrations opt into fetch-based static builds are rendered by
|
|
177
|
+
* issuing a request against the running server origin. Render-strategy routes
|
|
178
|
+
* go through the normal route renderer directly.
|
|
179
|
+
*/
|
|
87
180
|
async generateStaticPages(router: FSRouter, baseUrl: string, routeRendererFactory?: RouteRendererFactory) {
|
|
88
181
|
const routes = Object.keys(router.routes).filter((route) => !route.includes('['));
|
|
89
182
|
|
|
@@ -92,12 +185,16 @@ export class StaticSiteGenerator {
|
|
|
92
185
|
const directories = this.getDirectories(routes);
|
|
93
186
|
|
|
94
187
|
for (const directory of directories) {
|
|
95
|
-
fileSystem.ensureDir(path.join(this.
|
|
188
|
+
fileSystem.ensureDir(path.join(this.getExportDir(), directory));
|
|
96
189
|
}
|
|
97
190
|
|
|
98
191
|
for (const route of routes) {
|
|
99
192
|
try {
|
|
100
193
|
const { filePath, pathname: routePathname } = router.routes[route];
|
|
194
|
+
if (await this.shouldSkipStaticPageFile(filePath)) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
|
|
101
198
|
const ext = PathUtils.getEcoTemplateExtension(filePath);
|
|
102
199
|
const integration = this.appConfig.integrations.find((plugin) => plugin.extensions.includes(ext));
|
|
103
200
|
const strategy = integration?.staticBuildStep || 'render';
|
|
@@ -163,7 +260,7 @@ export class StaticSiteGenerator {
|
|
|
163
260
|
pathname += '.html';
|
|
164
261
|
}
|
|
165
262
|
|
|
166
|
-
const outputPath = path.join(this.
|
|
263
|
+
const outputPath = path.join(this.getExportDir(), pathname);
|
|
167
264
|
fileSystem.write(outputPath, contents);
|
|
168
265
|
} catch (error) {
|
|
169
266
|
appLogger.error(
|
|
@@ -174,6 +271,9 @@ export class StaticSiteGenerator {
|
|
|
174
271
|
}
|
|
175
272
|
}
|
|
176
273
|
|
|
274
|
+
/**
|
|
275
|
+
* Executes the full static-generation workflow for one app run.
|
|
276
|
+
*/
|
|
177
277
|
async run({
|
|
178
278
|
router,
|
|
179
279
|
baseUrl,
|
|
@@ -210,6 +310,9 @@ export class StaticSiteGenerator {
|
|
|
210
310
|
try {
|
|
211
311
|
const mod = await route.loader();
|
|
212
312
|
const view = mod.default;
|
|
313
|
+
if (this.shouldSkipStaticView(route.path, view)) {
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
213
316
|
|
|
214
317
|
const isDynamic = route.path.includes(':') || route.path.includes('[');
|
|
215
318
|
|
|
@@ -347,7 +450,7 @@ export class StaticSiteGenerator {
|
|
|
347
450
|
outputName = `${routePath}.html`;
|
|
348
451
|
}
|
|
349
452
|
|
|
350
|
-
return path.join(this.
|
|
453
|
+
return path.join(this.getExportDir(), outputName);
|
|
351
454
|
}
|
|
352
455
|
}
|
|
353
456
|
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { deepMerge } from './deep-merge.ts';
|
|
3
|
+
|
|
4
|
+
describe('deepMerge', () => {
|
|
5
|
+
it('should merge two objects with nested properties', () => {
|
|
6
|
+
const target = { a: 1, b: { c: 2 } };
|
|
7
|
+
const source = { b: { d: 3 }, e: 4 };
|
|
8
|
+
const expected = { a: 1, b: { c: 2, d: 3 }, e: 4 };
|
|
9
|
+
const result = deepMerge(target, source);
|
|
10
|
+
expect(result).toEqual(expected);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('should merge two objects with overlapping properties', () => {
|
|
14
|
+
const target = { a: 1, b: 2 };
|
|
15
|
+
const source = { b: 3, c: 4 };
|
|
16
|
+
const expected = { a: 1, b: 3, c: 4 };
|
|
17
|
+
const result = deepMerge(target, source);
|
|
18
|
+
expect(result).toEqual(expected);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('should merge two objects with arrays', () => {
|
|
22
|
+
const target = { a: [1, 2], b: { c: [3, 4] } };
|
|
23
|
+
const source = { a: [5, 6], b: { c: [7, 8] } };
|
|
24
|
+
const expected = { a: [1, 2, 5, 6], b: { c: [3, 4, 7, 8] } };
|
|
25
|
+
const result = deepMerge(target, source);
|
|
26
|
+
expect(result).toEqual(expected);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('should merge two objects with nested objects', () => {
|
|
30
|
+
const target = { a: { b: 1, c: 2 }, d: 3 };
|
|
31
|
+
const source = { a: { c: 3, d: 4 }, e: 5 };
|
|
32
|
+
const expected = { a: { b: 1, c: 3, d: 4 }, d: 3, e: 5 };
|
|
33
|
+
const result = deepMerge(target, source);
|
|
34
|
+
expect(result).toEqual(expected);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('should overwrite non-object properties in the target', () => {
|
|
38
|
+
const target = { a: 1, b: 2 };
|
|
39
|
+
const source = { a: 3, c: 4 };
|
|
40
|
+
const expected = { a: 3, b: 2, c: 4 };
|
|
41
|
+
const result = deepMerge(target, source);
|
|
42
|
+
expect(result).toEqual(expected);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('should add properties from the source that are not in the target', () => {
|
|
46
|
+
const target = { a: 1 };
|
|
47
|
+
const source = { b: 2 };
|
|
48
|
+
const expected = { a: 1, b: 2 };
|
|
49
|
+
const result = deepMerge(target, source);
|
|
50
|
+
expect(result).toEqual(expected);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('should return an empty object when both inputs are empty', () => {
|
|
54
|
+
const target = {};
|
|
55
|
+
const source = {};
|
|
56
|
+
const expected = {};
|
|
57
|
+
const result = deepMerge(target, source);
|
|
58
|
+
expect(result).toEqual(expected);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('should ignore properties in the source that are undefined', () => {
|
|
62
|
+
const target = { a: 1, b: 2 };
|
|
63
|
+
const source = { a: undefined, c: 3 } as Partial<typeof target>;
|
|
64
|
+
const expected = { a: 1, b: 2, c: 3 };
|
|
65
|
+
const result = deepMerge(target, source);
|
|
66
|
+
expect(result).toEqual(expected);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('should merge dependencies', () => {
|
|
70
|
+
const depsA = {
|
|
71
|
+
stylesheets: ['/components/radiant-counter/radiant-counter.css'],
|
|
72
|
+
scripts: ['/components/radiant-counter/radiant-counter.script.ts'],
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const depsB = {
|
|
76
|
+
stylesheets: [
|
|
77
|
+
'/layouts/docs-layout/docs-layout.css',
|
|
78
|
+
'/layouts/base-layout/base-layout.css',
|
|
79
|
+
'/components/header/header.css',
|
|
80
|
+
'/components/navigation/navigation.css',
|
|
81
|
+
'/components/logo/logo.css',
|
|
82
|
+
'/components/code-block/code-block.css',
|
|
83
|
+
],
|
|
84
|
+
scripts: ['/layouts/base-layout/base-layout.script.ts'],
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const expected = {
|
|
88
|
+
stylesheets: [
|
|
89
|
+
'/components/radiant-counter/radiant-counter.css',
|
|
90
|
+
'/layouts/docs-layout/docs-layout.css',
|
|
91
|
+
'/layouts/base-layout/base-layout.css',
|
|
92
|
+
'/components/header/header.css',
|
|
93
|
+
'/components/navigation/navigation.css',
|
|
94
|
+
'/components/logo/logo.css',
|
|
95
|
+
'/components/code-block/code-block.css',
|
|
96
|
+
],
|
|
97
|
+
scripts: [
|
|
98
|
+
'/components/radiant-counter/radiant-counter.script.ts',
|
|
99
|
+
'/layouts/base-layout/base-layout.script.ts',
|
|
100
|
+
],
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const result = deepMerge(depsA, depsB);
|
|
104
|
+
expect(result).toEqual(expected);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('should merge two arrays', () => {
|
|
108
|
+
const target = [1, 2, 3];
|
|
109
|
+
const source = [4, 5, 6];
|
|
110
|
+
const expected = [1, 2, 3, 4, 5, 6];
|
|
111
|
+
const result = deepMerge(target, source);
|
|
112
|
+
expect(result).toEqual(expected);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest';
|
|
2
|
+
import { invariant } from './invariant.ts';
|
|
3
|
+
|
|
4
|
+
describe('invariant', () => {
|
|
5
|
+
test('should not throw an error when the condition is true', () => {
|
|
6
|
+
expect(() => {
|
|
7
|
+
invariant(true);
|
|
8
|
+
}).not.toThrow();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test('should throw an error with the default message when the condition is false', () => {
|
|
12
|
+
expect(() => {
|
|
13
|
+
invariant(false);
|
|
14
|
+
}).toThrowError('[ecopages] An error occurred');
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('should throw an error with the provided message when the condition is false', () => {
|
|
18
|
+
expect(() => {
|
|
19
|
+
invariant(false, 'Custom error message');
|
|
20
|
+
}).toThrowError('[ecopages] Custom error message');
|
|
21
|
+
});
|
|
22
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest';
|
|
2
|
+
import { PathUtils } from './path-utils.module.ts';
|
|
3
|
+
|
|
4
|
+
describe('PathUtils', () => {
|
|
5
|
+
test.each([
|
|
6
|
+
['packages/core/src/utils/file-name-analyzer.ts', '.ts'],
|
|
7
|
+
['packages/playground/src/pages/blog/author/%5Bid%5D.kita.tsx', '.kita.tsx'],
|
|
8
|
+
['packages/core/src/component-utils/deps-manager.ts', '.ts'],
|
|
9
|
+
['/packages/core/src/plugins/build-html-pages/build-html-pages.plugin.ts', '.plugin.ts'],
|
|
10
|
+
['packages/core/src/ecopages.fake.descriptor.ts', '.descriptor.ts'],
|
|
11
|
+
])('getEcoTemplateExtension: %p should return %p', (filePath, expected) => {
|
|
12
|
+
const result = PathUtils.getEcoTemplateExtension(filePath);
|
|
13
|
+
expect(result).toBe(expected);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { DEFAULT_ECOPAGES_WORK_DIR } from '../constants.ts';
|
|
3
|
+
|
|
4
|
+
type InternalPathConfig = {
|
|
5
|
+
rootDir?: string;
|
|
6
|
+
workDir?: string;
|
|
7
|
+
absolutePaths?: {
|
|
8
|
+
workDir?: string;
|
|
9
|
+
distDir?: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
function isInsideNodeModules(directory: string): boolean {
|
|
14
|
+
return path.normalize(directory).split(path.sep).includes('node_modules');
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function resolveInternalWorkDir(appConfig: InternalPathConfig): string {
|
|
18
|
+
if (appConfig.absolutePaths?.workDir) {
|
|
19
|
+
return appConfig.absolutePaths.workDir;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (appConfig.rootDir) {
|
|
23
|
+
return path.join(appConfig.rootDir, appConfig.workDir ?? DEFAULT_ECOPAGES_WORK_DIR);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (appConfig.workDir) {
|
|
27
|
+
return appConfig.workDir;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return DEFAULT_ECOPAGES_WORK_DIR;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function resolveInternalExecutionDir(appConfig: InternalPathConfig): string {
|
|
34
|
+
const workDir = resolveInternalWorkDir(appConfig);
|
|
35
|
+
|
|
36
|
+
if (!isInsideNodeModules(workDir)) {
|
|
37
|
+
return workDir;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (appConfig.rootDir) {
|
|
41
|
+
return path.join(appConfig.rootDir, DEFAULT_ECOPAGES_WORK_DIR);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return DEFAULT_ECOPAGES_WORK_DIR;
|
|
45
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest';
|
|
2
|
+
import { FIXTURE_APP_PROJECT_DIR } from '../../__fixtures__/constants.js';
|
|
3
|
+
import { ConfigBuilder } from '../config/config-builder.ts';
|
|
4
|
+
import { ServerUtils } from './server-utils.module.ts';
|
|
5
|
+
|
|
6
|
+
await new ConfigBuilder().setRootDir(FIXTURE_APP_PROJECT_DIR).build();
|
|
7
|
+
|
|
8
|
+
describe('ServerUtils', () => {
|
|
9
|
+
test.each([
|
|
10
|
+
['/my-file.controller.js', 'text/javascript'],
|
|
11
|
+
['/my-file.css', 'text/css'],
|
|
12
|
+
['/my-file.html', 'text/html'],
|
|
13
|
+
['/my-file.json', 'application/json'],
|
|
14
|
+
['/my-file.png', 'image/png'],
|
|
15
|
+
['/my-file.jpg', 'image/jpeg'],
|
|
16
|
+
['/my-file.jpeg', 'image/jpeg'],
|
|
17
|
+
['/my-file.svg', 'image/svg+xml'],
|
|
18
|
+
['/my-file.gif', 'image/gif'],
|
|
19
|
+
['/my-file.ico', 'image/x-icon'],
|
|
20
|
+
['/my-file', 'text/plain'],
|
|
21
|
+
])('getContentType(%p) should return %p', (filePath, expected) => {
|
|
22
|
+
expect(ServerUtils.getContentType(filePath)).toBe(expected);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
test.each([
|
|
26
|
+
['/file.css', true],
|
|
27
|
+
['/file.js', true],
|
|
28
|
+
['/file.html', true],
|
|
29
|
+
['/file.txt', true],
|
|
30
|
+
['/file.png', true],
|
|
31
|
+
['/page', false],
|
|
32
|
+
['/page.', false],
|
|
33
|
+
['/page.xyz', false],
|
|
34
|
+
['/page.dd', false],
|
|
35
|
+
])('hasKnownExtension(%p) should return %p', (filePath, expected) => {
|
|
36
|
+
expect(ServerUtils.hasKnownExtension(filePath)).toBe(expected);
|
|
37
|
+
});
|
|
38
|
+
});
|