@ecopages/core 0.2.0-alpha.7 → 0.2.0-alpha.8
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 +31 -0
- package/package.json +212 -92
- package/src/adapters/abstract/application-adapter.d.ts +168 -0
- package/src/adapters/abstract/application-adapter.js +109 -0
- package/src/adapters/abstract/router-adapter.d.ts +26 -0
- package/src/adapters/abstract/router-adapter.js +5 -0
- package/src/adapters/abstract/server-adapter.d.ts +69 -0
- package/src/adapters/abstract/server-adapter.js +15 -0
- package/src/adapters/bun/client-bridge.d.ts +34 -0
- package/src/adapters/bun/client-bridge.js +48 -0
- package/src/adapters/bun/create-app.d.ts +60 -0
- package/src/adapters/bun/create-app.js +117 -0
- package/src/adapters/bun/hmr-manager.d.ts +143 -0
- package/src/adapters/bun/hmr-manager.js +334 -0
- package/src/adapters/bun/index.d.ts +2 -0
- package/src/adapters/bun/index.js +8 -0
- package/src/adapters/bun/server-adapter.d.ts +155 -0
- package/src/adapters/bun/server-adapter.js +373 -0
- package/src/adapters/bun/server-lifecycle.d.ts +63 -0
- package/src/adapters/bun/server-lifecycle.js +92 -0
- package/src/adapters/index.d.ts +6 -0
- package/src/adapters/index.js +14 -0
- package/src/adapters/node/bootstrap-dependency-resolver.d.ts +44 -0
- package/src/adapters/node/bootstrap-dependency-resolver.js +172 -0
- package/src/adapters/node/create-app.d.ts +21 -0
- package/src/adapters/node/create-app.js +143 -0
- package/src/adapters/node/index.d.ts +6 -0
- package/src/adapters/node/index.js +11 -0
- package/src/adapters/node/node-client-bridge.d.ts +26 -0
- package/src/adapters/node/node-client-bridge.js +66 -0
- package/src/adapters/node/node-hmr-manager.d.ts +133 -0
- package/src/adapters/node/node-hmr-manager.js +312 -0
- package/src/adapters/node/runtime-adapter.d.ts +46 -0
- package/src/adapters/node/runtime-adapter.js +306 -0
- package/src/adapters/node/server-adapter.d.ts +161 -0
- package/src/adapters/node/server-adapter.js +358 -0
- package/src/adapters/node/static-content-server.d.ts +60 -0
- package/src/adapters/node/static-content-server.js +194 -0
- package/src/adapters/node/write-runtime-manifest.d.ts +26 -0
- package/src/adapters/node/write-runtime-manifest.js +12 -0
- package/src/adapters/shared/api-response.d.ts +52 -0
- package/src/adapters/shared/api-response.js +96 -0
- package/src/adapters/shared/application-adapter.d.ts +18 -0
- package/src/adapters/shared/application-adapter.js +90 -0
- package/src/adapters/shared/define-api-handler.d.ts +25 -0
- package/src/adapters/shared/define-api-handler.js +15 -0
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +38 -0
- package/src/adapters/shared/explicit-static-route-matcher.js +103 -0
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +65 -0
- package/src/adapters/shared/file-route-middleware-pipeline.js +99 -0
- package/src/adapters/shared/fs-server-response-factory.d.ts +19 -0
- package/src/adapters/shared/fs-server-response-factory.js +97 -0
- package/src/adapters/shared/fs-server-response-matcher.d.ts +75 -0
- package/src/adapters/shared/fs-server-response-matcher.js +160 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
- package/src/adapters/shared/hmr-html-response.d.ts +22 -0
- package/src/adapters/shared/hmr-html-response.js +32 -0
- package/src/adapters/shared/render-context.d.ts +14 -0
- package/src/adapters/shared/render-context.js +70 -0
- package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
- package/src/adapters/shared/runtime-bootstrap.js +43 -0
- package/src/adapters/shared/server-adapter.d.ts +97 -0
- package/src/adapters/shared/server-adapter.js +386 -0
- package/src/adapters/shared/server-route-handler.d.ts +89 -0
- package/src/adapters/shared/server-route-handler.js +111 -0
- package/src/adapters/shared/server-static-builder.d.ts +70 -0
- package/src/adapters/shared/server-static-builder.js +99 -0
- package/src/build/build-adapter.d.ts +186 -0
- package/src/build/build-adapter.js +168 -0
- package/src/build/build-manifest.d.ts +27 -0
- package/src/build/build-manifest.js +30 -0
- package/src/build/build-types.d.ts +57 -0
- package/src/build/build-types.js +0 -0
- package/src/build/dev-build-coordinator.d.ts +74 -0
- package/src/build/dev-build-coordinator.js +161 -0
- package/src/build/esbuild-build-adapter.d.ts +72 -0
- package/src/build/esbuild-build-adapter.js +422 -0
- package/src/build/runtime-build-executor.d.ts +13 -0
- package/src/build/runtime-build-executor.js +20 -0
- package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
- package/src/build/runtime-specifier-alias-plugin.js +31 -0
- package/src/config/config-builder.d.ts +238 -0
- package/src/config/config-builder.js +565 -0
- package/src/constants.d.ts +45 -0
- package/src/constants.js +25 -0
- package/src/create-app.d.ts +17 -0
- package/src/create-app.js +66 -0
- package/src/dev/sc-server.d.ts +30 -0
- package/src/dev/sc-server.js +111 -0
- package/src/eco/component-render-context.d.ts +105 -0
- package/src/eco/component-render-context.js +87 -0
- package/src/eco/eco.d.ts +9 -0
- package/src/eco/eco.js +114 -0
- package/src/eco/eco.types.d.ts +178 -0
- package/src/eco/eco.types.js +0 -0
- package/src/eco/eco.utils.d.ts +40 -0
- package/src/eco/eco.utils.js +40 -0
- package/src/eco/global-injector-map.d.ts +16 -0
- package/src/eco/global-injector-map.js +80 -0
- package/src/eco/lazy-injector-map.d.ts +8 -0
- package/src/eco/lazy-injector-map.js +70 -0
- package/src/eco/module-dependencies.d.ts +18 -0
- package/src/eco/module-dependencies.js +49 -0
- package/src/errors/http-error.d.ts +31 -0
- package/src/errors/http-error.js +50 -0
- package/src/errors/index.d.ts +2 -0
- package/src/errors/index.js +4 -0
- package/src/errors/locals-access-error.d.ts +4 -0
- package/src/errors/locals-access-error.js +9 -0
- package/src/global/app-logger.d.ts +2 -0
- package/src/global/app-logger.js +6 -0
- package/src/hmr/client/hmr-runtime.d.ts +5 -0
- package/src/hmr/client/hmr-runtime.js +109 -0
- package/src/hmr/hmr-strategy.d.ts +159 -0
- package/src/hmr/hmr-strategy.js +29 -0
- package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
- package/src/hmr/hmr.postcss.test.e2e.js +31 -0
- package/src/hmr/hmr.test.e2e.d.ts +1 -0
- package/src/hmr/hmr.test.e2e.js +43 -0
- package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
- package/src/hmr/strategies/default-hmr-strategy.js +34 -0
- package/src/hmr/strategies/js-hmr-strategy.d.ts +139 -0
- package/src/hmr/strategies/js-hmr-strategy.js +178 -0
- package/src/index.browser.d.ts +3 -0
- package/src/index.browser.js +4 -0
- package/src/index.d.ts +5 -0
- package/src/index.js +10 -0
- package/src/integrations/ghtml/ghtml-renderer.d.ts +15 -0
- package/src/integrations/ghtml/ghtml-renderer.js +62 -0
- package/src/integrations/ghtml/ghtml.plugin.d.ts +20 -0
- package/src/integrations/ghtml/ghtml.plugin.js +21 -0
- package/src/internal-types.d.ts +221 -0
- package/src/internal-types.js +0 -0
- package/src/plugins/alias-resolver-plugin.d.ts +2 -0
- package/src/plugins/alias-resolver-plugin.js +53 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +97 -0
- package/src/plugins/eco-component-meta-plugin.js +157 -0
- package/src/plugins/integration-plugin.d.ts +136 -0
- package/src/plugins/integration-plugin.js +133 -0
- package/src/plugins/processor.d.ts +95 -0
- package/src/plugins/processor.js +136 -0
- package/src/plugins/runtime-capability.d.ts +9 -0
- package/src/plugins/runtime-capability.js +0 -0
- package/src/public-types.d.ts +1149 -0
- package/src/public-types.js +0 -0
- package/src/route-renderer/component-graph/component-graph-executor.d.ts +32 -0
- package/src/route-renderer/component-graph/component-graph-executor.js +31 -0
- package/src/route-renderer/component-graph/component-graph.d.ts +42 -0
- package/src/route-renderer/component-graph/component-graph.js +72 -0
- package/src/route-renderer/component-graph/component-marker.d.ts +52 -0
- package/src/route-renderer/component-graph/component-marker.js +46 -0
- package/src/route-renderer/component-graph/component-reference.d.ts +10 -0
- package/src/route-renderer/component-graph/component-reference.js +19 -0
- package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +77 -0
- package/src/route-renderer/component-graph/marker-graph-resolver.js +95 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +372 -0
- package/src/route-renderer/orchestration/integration-renderer.js +589 -0
- package/src/route-renderer/orchestration/render-execution.service.d.ts +103 -0
- package/src/route-renderer/orchestration/render-execution.service.js +121 -0
- package/src/route-renderer/orchestration/render-preparation.service.d.ts +121 -0
- package/src/route-renderer/orchestration/render-preparation.service.js +332 -0
- package/src/route-renderer/page-loading/dependency-resolver.d.ts +35 -0
- package/src/route-renderer/page-loading/dependency-resolver.js +442 -0
- package/src/route-renderer/page-loading/page-module-loader.d.ts +87 -0
- package/src/route-renderer/page-loading/page-module-loader.js +124 -0
- package/src/route-renderer/route-renderer.d.ts +61 -0
- package/src/route-renderer/route-renderer.js +87 -0
- package/src/router/client/link-intent.js +34 -0
- package/src/router/client/link-intent.test.browser.d.ts +1 -0
- package/src/router/client/link-intent.test.browser.js +43 -0
- package/src/router/client/navigation-coordinator.d.ts +149 -0
- package/src/router/client/navigation-coordinator.js +215 -0
- package/src/router/server/fs-router-scanner.d.ts +41 -0
- package/src/router/server/fs-router-scanner.js +156 -0
- package/src/router/server/fs-router.d.ts +26 -0
- package/src/router/server/fs-router.js +100 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +120 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.js +331 -0
- package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
- package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
- package/src/services/assets/asset-processing-service/assets.types.d.ts +89 -0
- package/src/services/assets/asset-processing-service/assets.types.js +0 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +48 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
- package/src/services/assets/asset-processing-service/index.d.ts +5 -0
- package/src/services/assets/asset-processing-service/index.js +5 -0
- package/src/services/assets/asset-processing-service/processor.interface.d.ts +22 -0
- package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
- package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
- package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +64 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +17 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +72 -0
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
- package/src/services/assets/asset-processing-service/processors/index.js +5 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +5 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +57 -0
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +76 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +7 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +75 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +25 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +66 -0
- package/src/services/assets/browser-bundle.service.d.ts +32 -0
- package/src/services/assets/browser-bundle.service.js +33 -0
- package/src/services/cache/cache.types.d.ts +107 -0
- package/src/services/cache/cache.types.js +0 -0
- package/src/services/cache/index.d.ts +7 -0
- package/src/services/cache/index.js +7 -0
- package/src/services/cache/memory-cache-store.d.ts +42 -0
- package/src/services/cache/memory-cache-store.js +98 -0
- package/src/services/cache/page-cache-service.d.ts +70 -0
- package/src/services/cache/page-cache-service.js +152 -0
- package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
- package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
- package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
- package/src/services/html/html-rewriter-provider.service.js +65 -0
- package/src/services/html/html-transformer.service.d.ts +77 -0
- package/src/services/html/html-transformer.service.js +221 -0
- package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
- package/src/services/invalidation/development-invalidation.service.js +189 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +16 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +34 -0
- package/src/services/module-loading/page-module-import.service.d.ts +71 -0
- package/src/services/module-loading/page-module-import.service.js +132 -0
- package/src/services/module-loading/server-loader.service.d.ts +96 -0
- package/src/services/module-loading/server-loader.service.js +32 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +69 -0
- package/src/services/module-loading/server-module-transpiler.service.js +61 -0
- package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +35 -0
- package/src/services/runtime-manifest/node-runtime-manifest.service.js +60 -0
- package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
- package/src/services/runtime-state/dev-graph.service.js +162 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
- package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +69 -0
- package/src/services/runtime-state/runtime-specifier-registry.service.js +37 -0
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
- package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
- package/src/services/validation/schema-validation-service.d.ts +122 -0
- package/src/services/validation/schema-validation-service.js +101 -0
- package/src/services/validation/standard-schema.types.d.ts +65 -0
- package/src/services/validation/standard-schema.types.js +0 -0
- package/src/static-site-generator/static-site-generator.d.ts +109 -0
- package/src/static-site-generator/static-site-generator.js +353 -0
- package/src/utils/css.d.ts +1 -0
- package/src/utils/css.js +7 -0
- package/src/utils/deep-merge.d.ts +14 -0
- package/src/utils/deep-merge.js +32 -0
- package/src/utils/hash.d.ts +1 -0
- package/src/utils/hash.js +7 -0
- package/src/utils/html.d.ts +1 -0
- package/src/utils/html.js +4 -0
- package/src/utils/invariant.d.ts +5 -0
- package/src/utils/invariant.js +11 -0
- package/src/utils/locals-utils.d.ts +15 -0
- package/src/utils/locals-utils.js +24 -0
- package/src/utils/parse-cli-args.d.ts +24 -0
- package/src/utils/parse-cli-args.js +47 -0
- package/src/utils/path-utils.module.d.ts +5 -0
- package/src/utils/path-utils.module.js +14 -0
- package/src/utils/resolve-work-dir.d.ts +11 -0
- package/src/utils/resolve-work-dir.js +31 -0
- package/src/utils/runtime.d.ts +11 -0
- package/src/utils/runtime.js +40 -0
- package/src/utils/server-utils.module.d.ts +19 -0
- package/src/utils/server-utils.module.js +56 -0
- package/src/watchers/project-watcher.d.ts +136 -0
- package/src/watchers/project-watcher.js +281 -0
- package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
- package/src/watchers/project-watcher.test-helpers.js +52 -0
- package/src/adapters/bun/hmr-manager.test.ts +0 -267
- package/src/adapters/node/bootstrap-dependency-resolver.test.ts +0 -282
- package/src/adapters/node/node-client-bridge.test.ts +0 -198
- package/src/adapters/node/node-hmr-manager.test.ts +0 -322
- package/src/adapters/node/runtime-adapter.test.ts +0 -868
- package/src/adapters/node/static-content-server.test.ts +0 -60
- package/src/adapters/shared/api-response.test.ts +0 -97
- package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
- package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -90
- package/src/adapters/shared/fs-server-response-factory.test.ts +0 -187
- package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -286
- package/src/adapters/shared/hmr-manager.contract.test.ts +0 -196
- package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -220
- package/src/adapters/shared/render-context.test.ts +0 -146
- package/src/adapters/shared/server-adapter.test.ts +0 -77
- package/src/adapters/shared/server-route-handler.test.ts +0 -110
- package/src/adapters/shared/server-static-builder.test.ts +0 -316
- package/src/build/build-adapter-serialization.test.ts +0 -268
- package/src/build/build-adapter.test.ts +0 -815
- package/src/build/runtime-specifier-alias-plugin.test.ts +0 -43
- package/src/config/config-builder.test.ts +0 -410
- package/src/eco/eco.test.ts +0 -678
- package/src/eco/eco.utils.test.ts +0 -124
- package/src/eco/global-injector-map.test.ts +0 -42
- package/src/eco/lazy-injector-map.test.ts +0 -66
- package/src/eco/module-dependencies.test.ts +0 -30
- package/src/errors/http-error.test.ts +0 -134
- package/src/global/utils.test.ts +0 -12
- 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/hmr-strategy.test.ts +0 -124
- package/src/hmr/strategies/js-hmr-strategy.test.ts +0 -335
- package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -63
- package/src/plugins/alias-resolver-plugin.test.ts +0 -41
- package/src/plugins/eco-component-meta-plugin.test.ts +0 -380
- package/src/plugins/integration-plugin.test.ts +0 -111
- package/src/plugins/processor.test.ts +0 -148
- package/src/route-renderer/component-graph/component-graph-executor.test.ts +0 -41
- package/src/route-renderer/component-graph/component-graph.test.ts +0 -63
- package/src/route-renderer/component-graph/component-marker.test.ts +0 -73
- package/src/route-renderer/component-graph/marker-graph-resolver.test.ts +0 -135
- package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -936
- package/src/route-renderer/orchestration/render-execution.service.test.ts +0 -97
- package/src/route-renderer/orchestration/render-preparation.service.test.ts +0 -235
- package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -345
- package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -96
- package/src/router/client/navigation-coordinator.test.ts +0 -237
- package/src/router/server/fs-router-scanner.test.ts +0 -83
- package/src/router/server/fs-router.test.ts +0 -214
- package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -385
- package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -72
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
- package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -286
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -227
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -199
- package/src/services/assets/browser-bundle.service.test.ts +0 -36
- package/src/services/cache/memory-cache-store.test.ts +0 -225
- package/src/services/cache/page-cache-service.test.ts +0 -175
- package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
- package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
- package/src/services/html/html-transformer.service.test.ts +0 -378
- package/src/services/invalidation/development-invalidation.service.test.ts +0 -77
- package/src/services/module-loading/page-module-import.service.test.ts +0 -253
- package/src/services/module-loading/server-loader.service.test.ts +0 -161
- package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -115
- package/src/services/runtime-manifest/node-runtime-manifest.service.test.ts +0 -95
- package/src/services/validation/schema-validation-service.test.ts +0 -223
- package/src/static-site-generator/static-site-generator.test.ts +0 -307
- package/src/utils/deep-merge.test.ts +0 -114
- package/src/utils/invariant.test.ts +0 -22
- package/src/utils/path-utils.test.ts +0 -15
- package/src/utils/server-utils.test.ts +0 -38
- package/src/watchers/project-watcher.integration.test.ts +0 -337
- package/src/watchers/project-watcher.test.ts +0 -678
package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts
DELETED
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
-
import { fileSystem } from '@ecopages/file-system';
|
|
3
|
-
import { FileScriptProcessor } from './file-script.processor';
|
|
4
|
-
import type { EcoPagesAppConfig, IHmrManager } from '../../../../../internal-types';
|
|
5
|
-
import type { FileScriptAsset } from '../../assets.types';
|
|
6
|
-
|
|
7
|
-
const originalReadFileSync = fileSystem.readFileSync;
|
|
8
|
-
const originalCopyFile = fileSystem.copyFile;
|
|
9
|
-
const originalExists = fileSystem.exists;
|
|
10
|
-
|
|
11
|
-
const createMockConfig = (): EcoPagesAppConfig =>
|
|
12
|
-
({
|
|
13
|
-
rootDir: '/test/project',
|
|
14
|
-
srcDir: 'src',
|
|
15
|
-
distDir: '.eco/public',
|
|
16
|
-
absolutePaths: {
|
|
17
|
-
distDir: '/test/project/.eco/public',
|
|
18
|
-
srcDir: '/test/project/src',
|
|
19
|
-
},
|
|
20
|
-
processors: new Map(),
|
|
21
|
-
loaders: new Map(),
|
|
22
|
-
}) as unknown as EcoPagesAppConfig;
|
|
23
|
-
|
|
24
|
-
describe('FileScriptProcessor', () => {
|
|
25
|
-
let readFileSyncMock: any;
|
|
26
|
-
let copyFileMock: any;
|
|
27
|
-
let existsMock: any;
|
|
28
|
-
|
|
29
|
-
beforeEach(() => {
|
|
30
|
-
readFileSyncMock = vi.fn(() => 'console.log("test");');
|
|
31
|
-
copyFileMock = vi.fn(() => {});
|
|
32
|
-
existsMock = vi.fn(() => false);
|
|
33
|
-
fileSystem.readFileSync = readFileSyncMock;
|
|
34
|
-
fileSystem.copyFile = copyFileMock;
|
|
35
|
-
fileSystem.exists = existsMock;
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
afterEach(() => {
|
|
39
|
-
fileSystem.readFileSync = originalReadFileSync;
|
|
40
|
-
fileSystem.copyFile = originalCopyFile;
|
|
41
|
-
fileSystem.exists = originalExists;
|
|
42
|
-
vi.restoreAllMocks();
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe('setHmrManager', () => {
|
|
46
|
-
test('should accept an HMR manager', () => {
|
|
47
|
-
const processor = new FileScriptProcessor({ appConfig: createMockConfig() });
|
|
48
|
-
const HmrManager = {
|
|
49
|
-
isEnabled: () => true,
|
|
50
|
-
registerScriptEntrypoint: async () => '/hmr/script.js',
|
|
51
|
-
} as unknown as IHmrManager;
|
|
52
|
-
|
|
53
|
-
expect(() => processor.setHmrManager(HmrManager)).not.toThrow();
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
describe('process', () => {
|
|
58
|
-
test('should delegate to HMR manager when enabled and not inline and preserve excludeFromHtml', async () => {
|
|
59
|
-
const processor = new FileScriptProcessor({ appConfig: createMockConfig() });
|
|
60
|
-
const HmrManager = {
|
|
61
|
-
isEnabled: () => true,
|
|
62
|
-
registerScriptEntrypoint: vi.fn(async () => '/hmr/script.js'),
|
|
63
|
-
} as unknown as IHmrManager;
|
|
64
|
-
processor.setHmrManager(HmrManager);
|
|
65
|
-
|
|
66
|
-
const dep: FileScriptAsset = {
|
|
67
|
-
kind: 'script',
|
|
68
|
-
source: 'file',
|
|
69
|
-
filepath: '/test/project/src/script.ts',
|
|
70
|
-
inline: false,
|
|
71
|
-
excludeFromHtml: true,
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
const result = await processor.process(dep);
|
|
75
|
-
|
|
76
|
-
expect(HmrManager.registerScriptEntrypoint).toHaveBeenCalledWith('/test/project/src/script.ts');
|
|
77
|
-
expect(result.srcUrl).toBe('/hmr/script.js');
|
|
78
|
-
expect(result.inline).toBe(false);
|
|
79
|
-
expect(result.excludeFromHtml).toBe(true);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
test('should preserve excludeFromHtml: false when delegating to HMR manager', async () => {
|
|
83
|
-
const processor = new FileScriptProcessor({ appConfig: createMockConfig() });
|
|
84
|
-
const HmrManager = {
|
|
85
|
-
isEnabled: () => true,
|
|
86
|
-
registerScriptEntrypoint: vi.fn(async () => '/hmr/script.js'),
|
|
87
|
-
} as unknown as IHmrManager;
|
|
88
|
-
processor.setHmrManager(HmrManager);
|
|
89
|
-
|
|
90
|
-
const dep: FileScriptAsset = {
|
|
91
|
-
kind: 'script',
|
|
92
|
-
source: 'file',
|
|
93
|
-
filepath: '/test/project/src/script.ts',
|
|
94
|
-
inline: false,
|
|
95
|
-
excludeFromHtml: false,
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
const result = await processor.process(dep);
|
|
99
|
-
|
|
100
|
-
expect(HmrManager.registerScriptEntrypoint).toHaveBeenCalledWith('/test/project/src/script.ts');
|
|
101
|
-
expect(result.srcUrl).toBe('/hmr/script.js');
|
|
102
|
-
expect(result.inline).toBe(false);
|
|
103
|
-
expect(result.excludeFromHtml).toBe(false);
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
test('should not use HMR when inline is true', async () => {
|
|
107
|
-
const processor = new FileScriptProcessor({ appConfig: createMockConfig() });
|
|
108
|
-
const HmrManager = {
|
|
109
|
-
isEnabled: () => true,
|
|
110
|
-
registerScriptEntrypoint: vi.fn(async () => '/hmr/script.js'),
|
|
111
|
-
} as unknown as IHmrManager;
|
|
112
|
-
processor.setHmrManager(HmrManager);
|
|
113
|
-
|
|
114
|
-
const dep: FileScriptAsset = {
|
|
115
|
-
kind: 'script',
|
|
116
|
-
source: 'file',
|
|
117
|
-
filepath: '/test/project/src/script.ts',
|
|
118
|
-
inline: true,
|
|
119
|
-
bundle: false,
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
const result = await processor.process(dep);
|
|
123
|
-
|
|
124
|
-
expect(HmrManager.registerScriptEntrypoint).not.toHaveBeenCalled();
|
|
125
|
-
expect(result.inline).toBe(true);
|
|
126
|
-
expect(result.content).toBeDefined();
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
test('should copy file without bundling when bundle is false', async () => {
|
|
130
|
-
const processor = new FileScriptProcessor({ appConfig: createMockConfig() });
|
|
131
|
-
|
|
132
|
-
const dep: FileScriptAsset = {
|
|
133
|
-
kind: 'script',
|
|
134
|
-
source: 'file',
|
|
135
|
-
filepath: '/test/project/src/scripts/app.js',
|
|
136
|
-
bundle: false,
|
|
137
|
-
inline: false,
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
const result = await processor.process(dep);
|
|
141
|
-
|
|
142
|
-
expect(copyFileMock).toHaveBeenCalled();
|
|
143
|
-
expect(result.kind).toBe('script');
|
|
144
|
-
expect(result.inline).toBe(false);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
test('should return consistent result when called multiple times with same file', async () => {
|
|
148
|
-
const processor = new FileScriptProcessor({ appConfig: createMockConfig() });
|
|
149
|
-
|
|
150
|
-
const dep: FileScriptAsset = {
|
|
151
|
-
kind: 'script',
|
|
152
|
-
source: 'file',
|
|
153
|
-
filepath: '/test/project/src/scripts/cached.js',
|
|
154
|
-
bundle: false,
|
|
155
|
-
inline: false,
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
const result1 = await processor.process(dep);
|
|
159
|
-
const result2 = await processor.process(dep);
|
|
160
|
-
|
|
161
|
-
expect(result1).toEqual(result2);
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
test('should include content when inline is true and bundle is false', async () => {
|
|
165
|
-
const processor = new FileScriptProcessor({ appConfig: createMockConfig() });
|
|
166
|
-
|
|
167
|
-
const dep: FileScriptAsset = {
|
|
168
|
-
kind: 'script',
|
|
169
|
-
source: 'file',
|
|
170
|
-
filepath: '/test/project/src/inline.js',
|
|
171
|
-
bundle: false,
|
|
172
|
-
inline: true,
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
const result = await processor.process(dep);
|
|
176
|
-
|
|
177
|
-
expect(result.inline).toBe(true);
|
|
178
|
-
expect(result.content).toBe('console.log("test");');
|
|
179
|
-
expect(result.filepath).toBeUndefined();
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
test('should preserve attributes from dependency', async () => {
|
|
183
|
-
const processor = new FileScriptProcessor({ appConfig: createMockConfig() });
|
|
184
|
-
|
|
185
|
-
const dep: FileScriptAsset = {
|
|
186
|
-
kind: 'script',
|
|
187
|
-
source: 'file',
|
|
188
|
-
filepath: '/test/project/src/script.js',
|
|
189
|
-
bundle: false,
|
|
190
|
-
attributes: { defer: 'true', 'data-custom': 'value' },
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
const result = await processor.process(dep);
|
|
194
|
-
|
|
195
|
-
expect(result.attributes).toEqual({ defer: 'true', 'data-custom': 'value' });
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
test('should preserve position from dependency', async () => {
|
|
199
|
-
const processor = new FileScriptProcessor({ appConfig: createMockConfig() });
|
|
200
|
-
|
|
201
|
-
const dep: FileScriptAsset = {
|
|
202
|
-
kind: 'script',
|
|
203
|
-
source: 'file',
|
|
204
|
-
filepath: '/test/project/src/script.js',
|
|
205
|
-
bundle: false,
|
|
206
|
-
position: 'head',
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
const result = await processor.process(dep);
|
|
210
|
-
|
|
211
|
-
expect(result.position).toBe('head');
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
test('should pass bundle plugins through when bundling', async () => {
|
|
215
|
-
const processor = new FileScriptProcessor({ appConfig: createMockConfig() });
|
|
216
|
-
const bundleScriptSpy = vi.spyOn(processor as any, 'bundleScript').mockResolvedValue('/tmp/out.js');
|
|
217
|
-
const customPlugin = {
|
|
218
|
-
name: 'custom-plugin',
|
|
219
|
-
setup() {},
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
const dep: FileScriptAsset = {
|
|
223
|
-
kind: 'script',
|
|
224
|
-
source: 'file',
|
|
225
|
-
filepath: '/test/project/src/script.tsx',
|
|
226
|
-
bundle: true,
|
|
227
|
-
bundleOptions: {
|
|
228
|
-
plugins: [customPlugin],
|
|
229
|
-
},
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
await processor.process(dep);
|
|
233
|
-
|
|
234
|
-
expect(bundleScriptSpy).toHaveBeenCalled();
|
|
235
|
-
const buildArgs = bundleScriptSpy.mock.calls[0]?.[0] as { plugins?: Array<{ name?: string }> };
|
|
236
|
-
expect(buildArgs.plugins?.some((plugin) => plugin.name === 'custom-plugin')).toBe(true);
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
test('should bundle nested source files into dist assets subdirectories', async () => {
|
|
240
|
-
const processor = new FileScriptProcessor({ appConfig: createMockConfig() });
|
|
241
|
-
const bundleScriptSpy = vi.spyOn(processor as any, 'bundleScript').mockResolvedValue('/tmp/out.js');
|
|
242
|
-
|
|
243
|
-
const dep: FileScriptAsset = {
|
|
244
|
-
kind: 'script',
|
|
245
|
-
source: 'file',
|
|
246
|
-
filepath: '/test/project/src/pages/index.tsx',
|
|
247
|
-
bundle: true,
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
await processor.process(dep);
|
|
251
|
-
|
|
252
|
-
const buildArgs = bundleScriptSpy.mock.calls[0]?.[0] as { outdir?: string };
|
|
253
|
-
expect(buildArgs.outdir).toBe('/test/project/.eco/public/assets/pages');
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
test('should return updated attributes when cached asset is retrieved with different attributes', async () => {
|
|
257
|
-
const processor = new FileScriptProcessor({ appConfig: createMockConfig() });
|
|
258
|
-
|
|
259
|
-
const depWithDefer: FileScriptAsset = {
|
|
260
|
-
kind: 'script',
|
|
261
|
-
source: 'file',
|
|
262
|
-
filepath: '/test/project/src/cached-attrs.js',
|
|
263
|
-
bundle: false,
|
|
264
|
-
attributes: { defer: '' },
|
|
265
|
-
position: 'head',
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
const depWithAsync: FileScriptAsset = {
|
|
269
|
-
kind: 'script',
|
|
270
|
-
source: 'file',
|
|
271
|
-
filepath: '/test/project/src/cached-attrs.js',
|
|
272
|
-
bundle: false,
|
|
273
|
-
attributes: { async: '' },
|
|
274
|
-
position: 'body',
|
|
275
|
-
};
|
|
276
|
-
|
|
277
|
-
const result1 = await processor.process(depWithDefer);
|
|
278
|
-
const result2 = await processor.process(depWithAsync);
|
|
279
|
-
|
|
280
|
-
expect(result1.attributes).toEqual({ defer: '' });
|
|
281
|
-
expect(result1.position).toBe('head');
|
|
282
|
-
expect(result2.attributes).toEqual({ async: '' });
|
|
283
|
-
expect(result2.position).toBe('body');
|
|
284
|
-
});
|
|
285
|
-
});
|
|
286
|
-
});
|
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
-
import { fileSystem } from '@ecopages/file-system';
|
|
3
|
-
import { NodeModuleScriptProcessor } from './node-module-script.processor';
|
|
4
|
-
import type { EcoPagesAppConfig } from '../../../../../internal-types';
|
|
5
|
-
import type { NodeModuleScriptAsset } from '../../assets.types';
|
|
6
|
-
|
|
7
|
-
const originalExists = fileSystem.exists;
|
|
8
|
-
const originalReadFileAsBuffer = fileSystem.readFileAsBuffer;
|
|
9
|
-
|
|
10
|
-
const createMockConfig = (): EcoPagesAppConfig =>
|
|
11
|
-
({
|
|
12
|
-
rootDir: '/test/project',
|
|
13
|
-
srcDir: 'src',
|
|
14
|
-
distDir: '.eco/public',
|
|
15
|
-
absolutePaths: {
|
|
16
|
-
distDir: '/test/project/.eco/public',
|
|
17
|
-
srcDir: '/test/project/src',
|
|
18
|
-
},
|
|
19
|
-
processors: new Map(),
|
|
20
|
-
loaders: new Map(),
|
|
21
|
-
}) as unknown as EcoPagesAppConfig;
|
|
22
|
-
|
|
23
|
-
describe('NodeModuleScriptProcessor', () => {
|
|
24
|
-
let existsMock: any;
|
|
25
|
-
let readFileAsBufferMock: any;
|
|
26
|
-
|
|
27
|
-
beforeEach(() => {
|
|
28
|
-
existsMock = vi.fn(() => true);
|
|
29
|
-
readFileAsBufferMock = vi.fn(() => Buffer.from('// module content'));
|
|
30
|
-
fileSystem.exists = existsMock;
|
|
31
|
-
fileSystem.readFileAsBuffer = readFileAsBufferMock;
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
afterEach(() => {
|
|
35
|
-
fileSystem.exists = originalExists;
|
|
36
|
-
fileSystem.readFileAsBuffer = originalReadFileAsBuffer;
|
|
37
|
-
vi.restoreAllMocks();
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
describe('process - inline module', () => {
|
|
41
|
-
test('should return inline content for inline modules', async () => {
|
|
42
|
-
const processor = new NodeModuleScriptProcessor({ appConfig: createMockConfig() });
|
|
43
|
-
|
|
44
|
-
const dep: NodeModuleScriptAsset = {
|
|
45
|
-
kind: 'script',
|
|
46
|
-
source: 'node-module',
|
|
47
|
-
importPath: 'some-package/dist/index.js',
|
|
48
|
-
inline: true,
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
const result = await processor.process(dep);
|
|
52
|
-
|
|
53
|
-
expect(result.inline).toBe(true);
|
|
54
|
-
expect(result.content).toBe('// module content');
|
|
55
|
-
expect(result.kind).toBe('script');
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
test('should preserve attributes for inline modules', async () => {
|
|
59
|
-
const processor = new NodeModuleScriptProcessor({ appConfig: createMockConfig() });
|
|
60
|
-
|
|
61
|
-
const dep: NodeModuleScriptAsset = {
|
|
62
|
-
kind: 'script',
|
|
63
|
-
source: 'node-module',
|
|
64
|
-
importPath: 'some-package/dist/index.js',
|
|
65
|
-
inline: true,
|
|
66
|
-
attributes: { type: 'module' },
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
const result = await processor.process(dep);
|
|
70
|
-
|
|
71
|
-
expect(result.attributes).toEqual({ type: 'module' });
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
test('should preserve position for inline modules', async () => {
|
|
75
|
-
const processor = new NodeModuleScriptProcessor({ appConfig: createMockConfig() });
|
|
76
|
-
|
|
77
|
-
const dep: NodeModuleScriptAsset = {
|
|
78
|
-
kind: 'script',
|
|
79
|
-
source: 'node-module',
|
|
80
|
-
importPath: 'some-package/dist/index.js',
|
|
81
|
-
inline: true,
|
|
82
|
-
position: 'head',
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
const result = await processor.process(dep);
|
|
86
|
-
|
|
87
|
-
expect(result.position).toBe('head');
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
describe('process - caching', () => {
|
|
92
|
-
test('should return cached result on subsequent calls', async () => {
|
|
93
|
-
const processor = new NodeModuleScriptProcessor({ appConfig: createMockConfig() });
|
|
94
|
-
|
|
95
|
-
const dep: NodeModuleScriptAsset = {
|
|
96
|
-
kind: 'script',
|
|
97
|
-
source: 'node-module',
|
|
98
|
-
importPath: 'cached-package/dist/index.js',
|
|
99
|
-
inline: true,
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
const result1 = await processor.process(dep);
|
|
103
|
-
const result2 = await processor.process(dep);
|
|
104
|
-
|
|
105
|
-
expect(readFileAsBufferMock.mock.calls.length).toBe(1);
|
|
106
|
-
expect(result1).toEqual(result2);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
describe('resolveModulePath', () => {
|
|
111
|
-
test('should throw error when module not found', async () => {
|
|
112
|
-
existsMock = vi.fn(() => false);
|
|
113
|
-
fileSystem.exists = existsMock;
|
|
114
|
-
|
|
115
|
-
const processor = new NodeModuleScriptProcessor({ appConfig: createMockConfig() });
|
|
116
|
-
|
|
117
|
-
const dep: NodeModuleScriptAsset = {
|
|
118
|
-
kind: 'script',
|
|
119
|
-
source: 'node-module',
|
|
120
|
-
importPath: 'non-existent-package/index.js',
|
|
121
|
-
inline: true,
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
await expect(processor.process(dep)).rejects.toThrow(/Could not resolve module/);
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
test('should find module in parent directories', async () => {
|
|
128
|
-
let callCount = 0;
|
|
129
|
-
existsMock = vi.fn((_path: string) => {
|
|
130
|
-
callCount++;
|
|
131
|
-
return callCount >= 3;
|
|
132
|
-
});
|
|
133
|
-
fileSystem.exists = existsMock;
|
|
134
|
-
|
|
135
|
-
const processor = new NodeModuleScriptProcessor({ appConfig: createMockConfig() });
|
|
136
|
-
|
|
137
|
-
const dep: NodeModuleScriptAsset = {
|
|
138
|
-
kind: 'script',
|
|
139
|
-
source: 'node-module',
|
|
140
|
-
importPath: 'parent-package/index.js',
|
|
141
|
-
inline: true,
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
const result = await processor.process(dep);
|
|
145
|
-
|
|
146
|
-
expect(result).toBeDefined();
|
|
147
|
-
expect(callCount).toBeGreaterThanOrEqual(3);
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
describe('process - custom name', () => {
|
|
152
|
-
test('should use custom name when provided', async () => {
|
|
153
|
-
const processor = new NodeModuleScriptProcessor({ appConfig: createMockConfig() });
|
|
154
|
-
|
|
155
|
-
const dep: NodeModuleScriptAsset = {
|
|
156
|
-
kind: 'script',
|
|
157
|
-
source: 'node-module',
|
|
158
|
-
importPath: 'some-package/dist/index.js',
|
|
159
|
-
name: 'custom-vendor',
|
|
160
|
-
inline: true,
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
const result = await processor.process(dep);
|
|
164
|
-
|
|
165
|
-
expect(result).toBeDefined();
|
|
166
|
-
expect(result.inline).toBe(true);
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
test('should preserve explicit bundle naming when provided', async () => {
|
|
170
|
-
const processor = new NodeModuleScriptProcessor({ appConfig: createMockConfig() });
|
|
171
|
-
const bundleScriptSpy = vi
|
|
172
|
-
.spyOn(
|
|
173
|
-
processor as unknown as { bundleScript: (options: Record<string, unknown>) => Promise<string> },
|
|
174
|
-
'bundleScript',
|
|
175
|
-
)
|
|
176
|
-
.mockResolvedValue('/test/project/.eco/public/assets/vendors/react.development.js');
|
|
177
|
-
|
|
178
|
-
const dep: NodeModuleScriptAsset = {
|
|
179
|
-
kind: 'script',
|
|
180
|
-
source: 'node-module',
|
|
181
|
-
importPath: 'react',
|
|
182
|
-
name: 'react',
|
|
183
|
-
inline: false,
|
|
184
|
-
bundleOptions: {
|
|
185
|
-
naming: 'react.development.js',
|
|
186
|
-
},
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
const result = await processor.process(dep);
|
|
190
|
-
|
|
191
|
-
expect(bundleScriptSpy).toHaveBeenCalledWith(
|
|
192
|
-
expect.objectContaining({
|
|
193
|
-
naming: 'react.development.js',
|
|
194
|
-
}),
|
|
195
|
-
);
|
|
196
|
-
expect(result.filepath).toBe('/test/project/.eco/public/assets/vendors/react.development.js');
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
describe('resolveModulePath with real dependencies', () => {
|
|
201
|
-
beforeEach(() => {
|
|
202
|
-
fileSystem.exists = originalExists;
|
|
203
|
-
fileSystem.readFileAsBuffer = originalReadFileAsBuffer;
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
test('should resolve @ecopages/logger using Bun.resolveSync', async () => {
|
|
207
|
-
const config = createMockConfig();
|
|
208
|
-
config.rootDir = process.cwd();
|
|
209
|
-
const processor = new NodeModuleScriptProcessor({ appConfig: config });
|
|
210
|
-
fileSystem.readFileAsBuffer = vi.fn().mockResolvedValue(Buffer.from('dummy content'));
|
|
211
|
-
|
|
212
|
-
const dep: NodeModuleScriptAsset = {
|
|
213
|
-
kind: 'script',
|
|
214
|
-
source: 'node-module',
|
|
215
|
-
importPath: '@ecopages/logger',
|
|
216
|
-
inline: true,
|
|
217
|
-
};
|
|
218
|
-
|
|
219
|
-
const result = await processor.process(dep);
|
|
220
|
-
|
|
221
|
-
expect(result).toBeDefined();
|
|
222
|
-
expect(result.inline).toBe(true);
|
|
223
|
-
expect(result.content).toBeDefined();
|
|
224
|
-
expect(result.content!.length).toBeGreaterThan(0);
|
|
225
|
-
});
|
|
226
|
-
});
|
|
227
|
-
});
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
-
import { fileSystem } from '@ecopages/file-system';
|
|
3
|
-
import { ContentStylesheetProcessor } from './content-stylesheet.processor';
|
|
4
|
-
import type { EcoPagesAppConfig } from '../../../../../internal-types';
|
|
5
|
-
import type { ContentStylesheetAsset } from '../../assets.types';
|
|
6
|
-
|
|
7
|
-
const originalWrite = fileSystem.write;
|
|
8
|
-
const originalExists = fileSystem.exists;
|
|
9
|
-
|
|
10
|
-
const createMockConfig = (): EcoPagesAppConfig =>
|
|
11
|
-
({
|
|
12
|
-
rootDir: '/test/project',
|
|
13
|
-
srcDir: 'src',
|
|
14
|
-
distDir: '.eco/public',
|
|
15
|
-
absolutePaths: {
|
|
16
|
-
distDir: '/test/project/.eco/public',
|
|
17
|
-
srcDir: '/test/project/src',
|
|
18
|
-
},
|
|
19
|
-
}) as unknown as EcoPagesAppConfig;
|
|
20
|
-
|
|
21
|
-
describe('ContentStylesheetProcessor', () => {
|
|
22
|
-
let writeMock: any;
|
|
23
|
-
|
|
24
|
-
beforeEach(() => {
|
|
25
|
-
writeMock = vi.fn(() => {});
|
|
26
|
-
fileSystem.write = writeMock;
|
|
27
|
-
fileSystem.exists = vi.fn(() => true);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
afterEach(() => {
|
|
31
|
-
fileSystem.write = originalWrite;
|
|
32
|
-
fileSystem.exists = originalExists;
|
|
33
|
-
vi.restoreAllMocks();
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
describe('process - file-based stylesheet', () => {
|
|
37
|
-
test('should write stylesheet file when not inline', async () => {
|
|
38
|
-
const processor = new ContentStylesheetProcessor({ appConfig: createMockConfig() });
|
|
39
|
-
|
|
40
|
-
const dep: ContentStylesheetAsset = {
|
|
41
|
-
kind: 'stylesheet',
|
|
42
|
-
source: 'content',
|
|
43
|
-
content: 'body { color: red; }',
|
|
44
|
-
inline: false,
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const result = await processor.process(dep);
|
|
48
|
-
|
|
49
|
-
expect(writeMock).toHaveBeenCalled();
|
|
50
|
-
expect(result.filepath).toBeDefined();
|
|
51
|
-
expect(result.filepath).toContain('style-');
|
|
52
|
-
expect(result.filepath).toContain('.css');
|
|
53
|
-
expect(result.kind).toBe('stylesheet');
|
|
54
|
-
expect(result.inline).toBe(false);
|
|
55
|
-
expect(result.content).toBeUndefined();
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
test('should include hash in filename', async () => {
|
|
59
|
-
const processor = new ContentStylesheetProcessor({ appConfig: createMockConfig() });
|
|
60
|
-
|
|
61
|
-
const dep: ContentStylesheetAsset = {
|
|
62
|
-
kind: 'stylesheet',
|
|
63
|
-
source: 'content',
|
|
64
|
-
content: 'body { color: blue; }',
|
|
65
|
-
inline: false,
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const result = await processor.process(dep);
|
|
69
|
-
|
|
70
|
-
expect(result.filepath).toMatch(/style-\d+\.css$/);
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
describe('process - inline stylesheet', () => {
|
|
75
|
-
test('should return content without writing file when inline', async () => {
|
|
76
|
-
const processor = new ContentStylesheetProcessor({ appConfig: createMockConfig() });
|
|
77
|
-
|
|
78
|
-
const dep: ContentStylesheetAsset = {
|
|
79
|
-
kind: 'stylesheet',
|
|
80
|
-
source: 'content',
|
|
81
|
-
content: '.inline { display: flex; }',
|
|
82
|
-
inline: true,
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
const result = await processor.process(dep);
|
|
86
|
-
|
|
87
|
-
expect(writeMock).not.toHaveBeenCalled();
|
|
88
|
-
expect(result.inline).toBe(true);
|
|
89
|
-
expect(result.content).toBe('.inline { display: flex; }');
|
|
90
|
-
expect(result.filepath).toBeUndefined();
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
describe('process - caching', () => {
|
|
95
|
-
test('should return cached result on subsequent calls', async () => {
|
|
96
|
-
const processor = new ContentStylesheetProcessor({ appConfig: createMockConfig() });
|
|
97
|
-
|
|
98
|
-
const dep: ContentStylesheetAsset = {
|
|
99
|
-
kind: 'stylesheet',
|
|
100
|
-
source: 'content',
|
|
101
|
-
content: '.cached { margin: 0; }',
|
|
102
|
-
inline: false,
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
const result1 = await processor.process(dep);
|
|
106
|
-
const result2 = await processor.process(dep);
|
|
107
|
-
|
|
108
|
-
expect(writeMock.mock.calls.length).toBe(1);
|
|
109
|
-
expect(result1).toEqual(result2);
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
test('should use different cache keys for different content', async () => {
|
|
113
|
-
const processor = new ContentStylesheetProcessor({ appConfig: createMockConfig() });
|
|
114
|
-
|
|
115
|
-
const dep1: ContentStylesheetAsset = {
|
|
116
|
-
kind: 'stylesheet',
|
|
117
|
-
source: 'content',
|
|
118
|
-
content: '.first { padding: 10px; }',
|
|
119
|
-
inline: false,
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
const dep2: ContentStylesheetAsset = {
|
|
123
|
-
kind: 'stylesheet',
|
|
124
|
-
source: 'content',
|
|
125
|
-
content: '.second { padding: 20px; }',
|
|
126
|
-
inline: false,
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
await processor.process(dep1);
|
|
130
|
-
await processor.process(dep2);
|
|
131
|
-
|
|
132
|
-
expect(writeMock.mock.calls.length).toBe(2);
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
describe('process - attributes and position', () => {
|
|
137
|
-
test('should preserve attributes from dependency', async () => {
|
|
138
|
-
const processor = new ContentStylesheetProcessor({ appConfig: createMockConfig() });
|
|
139
|
-
|
|
140
|
-
const dep: ContentStylesheetAsset = {
|
|
141
|
-
kind: 'stylesheet',
|
|
142
|
-
source: 'content',
|
|
143
|
-
content: '.styled { color: green; }',
|
|
144
|
-
inline: true,
|
|
145
|
-
attributes: { 'data-theme': 'dark' },
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
const result = await processor.process(dep);
|
|
149
|
-
|
|
150
|
-
expect(result.attributes).toEqual({ 'data-theme': 'dark' });
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
test('should preserve position from dependency', async () => {
|
|
154
|
-
const processor = new ContentStylesheetProcessor({ appConfig: createMockConfig() });
|
|
155
|
-
|
|
156
|
-
const dep: ContentStylesheetAsset = {
|
|
157
|
-
kind: 'stylesheet',
|
|
158
|
-
source: 'content',
|
|
159
|
-
content: '.head-style { font-size: 16px; }',
|
|
160
|
-
inline: true,
|
|
161
|
-
position: 'head',
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
const result = await processor.process(dep);
|
|
165
|
-
|
|
166
|
-
expect(result.position).toBe('head');
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
test('should return updated attributes when cached asset is retrieved with different attributes', async () => {
|
|
170
|
-
const processor = new ContentStylesheetProcessor({ appConfig: createMockConfig() });
|
|
171
|
-
|
|
172
|
-
const depWithMedia: ContentStylesheetAsset = {
|
|
173
|
-
kind: 'stylesheet',
|
|
174
|
-
source: 'content',
|
|
175
|
-
content: '.cached-style { color: red; }',
|
|
176
|
-
inline: false,
|
|
177
|
-
attributes: { media: 'screen' },
|
|
178
|
-
position: 'head',
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
const depWithPrint: ContentStylesheetAsset = {
|
|
182
|
-
kind: 'stylesheet',
|
|
183
|
-
source: 'content',
|
|
184
|
-
content: '.cached-style { color: red; }',
|
|
185
|
-
inline: false,
|
|
186
|
-
attributes: { media: 'print' },
|
|
187
|
-
position: 'body',
|
|
188
|
-
};
|
|
189
|
-
|
|
190
|
-
const result1 = await processor.process(depWithMedia);
|
|
191
|
-
const result2 = await processor.process(depWithPrint);
|
|
192
|
-
|
|
193
|
-
expect(result1.attributes).toEqual({ media: 'screen' });
|
|
194
|
-
expect(result1.position).toBe('head');
|
|
195
|
-
expect(result2.attributes).toEqual({ media: 'print' });
|
|
196
|
-
expect(result2.position).toBe('body');
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
});
|