@ecopages/core 0.2.0-alpha.4 → 0.2.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/README.md +213 -12
  2. package/package.json +100 -188
  3. package/src/adapters/README.md +39 -0
  4. package/src/adapters/bun/hmr-manager.test.ts +267 -0
  5. package/src/adapters/bun/hmr-manager.ts +181 -68
  6. package/src/adapters/bun/index.ts +1 -2
  7. package/src/adapters/bun/server-adapter.ts +41 -34
  8. package/src/adapters/bun/server-lifecycle.ts +40 -70
  9. package/src/adapters/index.ts +1 -1
  10. package/src/adapters/node/bootstrap-dependency-resolver.test.ts +282 -0
  11. package/src/adapters/node/bootstrap-dependency-resolver.ts +301 -0
  12. package/src/adapters/node/index.ts +7 -0
  13. package/src/adapters/node/node-client-bridge.test.ts +198 -0
  14. package/src/adapters/node/node-hmr-manager.test.ts +322 -0
  15. package/src/adapters/node/node-hmr-manager.ts +208 -116
  16. package/src/adapters/node/runtime-adapter.test.ts +868 -0
  17. package/src/adapters/node/runtime-adapter.ts +439 -0
  18. package/src/adapters/node/server-adapter.ts +31 -104
  19. package/src/adapters/node/static-content-server.test.ts +60 -0
  20. package/src/adapters/node/static-content-server.ts +36 -0
  21. package/src/adapters/node/write-runtime-manifest.ts +38 -0
  22. package/src/adapters/shared/api-response.test.ts +97 -0
  23. package/src/{define-api-handler.ts → adapters/shared/define-api-handler.ts} +1 -1
  24. package/src/adapters/shared/explicit-static-route-matcher.test.ts +381 -0
  25. package/src/adapters/shared/explicit-static-route-matcher.ts +7 -1
  26. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +90 -0
  27. package/src/adapters/shared/file-route-middleware-pipeline.ts +6 -2
  28. package/src/adapters/shared/fs-server-response-factory.test.ts +187 -0
  29. package/src/adapters/shared/fs-server-response-matcher.test.ts +286 -0
  30. package/src/adapters/shared/fs-server-response-matcher.ts +17 -10
  31. package/src/adapters/shared/hmr-entrypoint-registrar.ts +149 -0
  32. package/src/adapters/shared/hmr-html-response.ts +52 -0
  33. package/src/adapters/shared/hmr-manager.contract.test.ts +196 -0
  34. package/src/adapters/shared/hmr-manager.dispatch.test.ts +220 -0
  35. package/src/adapters/shared/render-context.test.ts +146 -0
  36. package/src/adapters/shared/render-context.ts +21 -6
  37. package/src/adapters/shared/runtime-bootstrap.ts +79 -0
  38. package/src/adapters/shared/server-adapter.test.ts +77 -0
  39. package/src/adapters/shared/server-adapter.ts +51 -4
  40. package/src/adapters/shared/server-route-handler.test.ts +110 -0
  41. package/src/adapters/shared/server-route-handler.ts +5 -18
  42. package/src/adapters/shared/server-static-builder.test.ts +316 -0
  43. package/src/adapters/shared/server-static-builder.ts +92 -8
  44. package/src/build/README.md +101 -0
  45. package/src/build/build-adapter-serialization.test.ts +268 -0
  46. package/src/build/build-adapter.test.ts +815 -0
  47. package/src/build/build-adapter.ts +235 -6
  48. package/src/build/build-manifest.ts +54 -0
  49. package/src/build/dev-build-coordinator.ts +221 -0
  50. package/src/build/esbuild-build-adapter.ts +132 -83
  51. package/src/build/runtime-build-executor.ts +34 -0
  52. package/src/build/runtime-specifier-alias-plugin.test.ts +43 -0
  53. package/src/build/runtime-specifier-alias-plugin.ts +58 -0
  54. package/src/config/README.md +33 -0
  55. package/src/config/config-builder.test.ts +410 -0
  56. package/src/config/config-builder.ts +281 -49
  57. package/src/constants.ts +15 -0
  58. package/src/declarations.d.ts +18 -13
  59. package/src/eco/README.md +70 -16
  60. package/src/eco/component-render-context.ts +39 -17
  61. package/src/eco/eco.test.ts +678 -0
  62. package/src/eco/eco.ts +29 -8
  63. package/src/eco/eco.types.ts +20 -1
  64. package/src/eco/eco.utils.test.ts +124 -0
  65. package/src/eco/global-injector-map.test.ts +42 -0
  66. package/src/eco/lazy-injector-map.test.ts +66 -0
  67. package/src/eco/module-dependencies.test.ts +30 -0
  68. package/src/errors/http-error.test.ts +134 -0
  69. package/src/global/utils.test.ts +12 -0
  70. package/src/hmr/README.md +26 -0
  71. 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
  72. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  73. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  74. package/src/hmr/client/hmr-runtime.ts +38 -7
  75. package/src/hmr/hmr-strategy.test.ts +124 -0
  76. package/src/hmr/hmr.postcss.test.e2e.ts +41 -0
  77. package/src/hmr/hmr.test.e2e.ts +29 -38
  78. package/src/hmr/strategies/js-hmr-strategy.test.ts +335 -0
  79. package/src/hmr/strategies/js-hmr-strategy.ts +115 -115
  80. package/src/index.ts +1 -1
  81. package/src/integrations/ghtml/ghtml-renderer.test.ts +63 -0
  82. package/src/integrations/ghtml/ghtml-renderer.ts +4 -1
  83. package/src/internal-types.ts +39 -19
  84. package/src/plugins/README.md +34 -0
  85. package/src/plugins/alias-resolver-plugin.test.ts +41 -0
  86. package/src/plugins/alias-resolver-plugin.ts +21 -3
  87. package/src/plugins/eco-component-meta-plugin.test.ts +380 -0
  88. package/src/plugins/eco-component-meta-plugin.ts +10 -3
  89. package/src/plugins/integration-plugin.test.ts +111 -0
  90. package/src/plugins/integration-plugin.ts +45 -3
  91. package/src/plugins/processor.test.ts +148 -0
  92. package/src/plugins/processor.ts +22 -2
  93. package/src/plugins/runtime-capability.ts +14 -0
  94. package/src/public-types.ts +73 -16
  95. package/src/route-renderer/GRAPH.md +16 -20
  96. package/src/route-renderer/README.md +8 -21
  97. package/src/route-renderer/component-graph/component-graph-executor.test.ts +41 -0
  98. package/src/route-renderer/component-graph/component-graph.test.ts +63 -0
  99. package/src/route-renderer/component-graph/component-marker.test.ts +73 -0
  100. package/src/route-renderer/component-graph/component-reference.ts +29 -0
  101. package/src/route-renderer/component-graph/marker-graph-resolver.test.ts +135 -0
  102. package/src/route-renderer/{marker-graph-resolver.ts → component-graph/marker-graph-resolver.ts} +11 -9
  103. package/src/route-renderer/orchestration/integration-renderer.test.ts +936 -0
  104. package/src/route-renderer/{integration-renderer.ts → orchestration/integration-renderer.ts} +113 -19
  105. package/src/route-renderer/orchestration/render-execution.service.test.ts +97 -0
  106. package/src/route-renderer/{render-execution.service.ts → orchestration/render-execution.service.ts} +109 -37
  107. package/src/route-renderer/orchestration/render-preparation.service.test.ts +235 -0
  108. package/src/route-renderer/{render-preparation.service.ts → orchestration/render-preparation.service.ts} +127 -9
  109. package/src/route-renderer/page-loading/dependency-resolver.test.ts +345 -0
  110. package/src/route-renderer/{dependency-resolver.ts → page-loading/dependency-resolver.ts} +28 -12
  111. package/src/route-renderer/page-loading/page-module-loader.test.ts +96 -0
  112. package/src/route-renderer/{page-module-loader.ts → page-loading/page-module-loader.ts} +49 -21
  113. package/src/route-renderer/route-renderer.ts +36 -1
  114. package/src/router/README.md +26 -0
  115. package/src/router/client/link-intent.d.ts +53 -0
  116. package/src/router/client/link-intent.test.browser.ts +51 -0
  117. package/src/router/client/link-intent.ts +92 -0
  118. package/src/router/client/navigation-coordinator.test.ts +237 -0
  119. package/src/router/client/navigation-coordinator.ts +433 -0
  120. package/src/router/server/fs-router-scanner.test.ts +83 -0
  121. package/src/router/{fs-router-scanner.ts → server/fs-router-scanner.ts} +12 -10
  122. package/src/router/server/fs-router.test.ts +214 -0
  123. package/src/router/{fs-router.ts → server/fs-router.ts} +2 -2
  124. package/src/services/README.md +29 -0
  125. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +385 -0
  126. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.ts +101 -6
  127. package/src/services/assets/asset-processing-service/asset.factory.test.ts +63 -0
  128. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.ts +2 -2
  129. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.ts +2 -1
  130. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +72 -0
  131. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +95 -0
  132. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +67 -0
  133. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +78 -0
  134. package/src/services/{asset-processing-service → assets/asset-processing-service}/index.ts +2 -0
  135. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.ts +1 -1
  136. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +59 -0
  137. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.ts +11 -5
  138. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-script-processor.ts +17 -27
  139. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +286 -0
  140. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.ts +3 -3
  141. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +227 -0
  142. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.ts +5 -4
  143. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +199 -0
  144. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.ts +4 -1
  145. package/src/services/assets/browser-bundle.service.test.ts +36 -0
  146. package/src/services/assets/browser-bundle.service.ts +53 -0
  147. package/src/services/cache/index.ts +3 -3
  148. package/src/services/cache/memory-cache-store.test.ts +225 -0
  149. package/src/services/cache/memory-cache-store.ts +1 -1
  150. package/src/services/cache/page-cache-service.test.ts +175 -0
  151. package/src/services/cache/page-cache-service.ts +3 -3
  152. package/src/services/cache/page-request-cache-coordinator.service.test.ts +79 -0
  153. package/src/services/{page-request-cache-coordinator.service.ts → cache/page-request-cache-coordinator.service.ts} +9 -6
  154. package/src/services/html/html-rewriter-provider.service.test.ts +183 -0
  155. package/src/services/html/html-rewriter-provider.service.ts +103 -0
  156. package/src/services/html/html-transformer.service.test.ts +378 -0
  157. package/src/services/html/html-transformer.service.ts +279 -0
  158. package/src/services/invalidation/development-invalidation.service.test.ts +77 -0
  159. package/src/services/invalidation/development-invalidation.service.ts +261 -0
  160. package/src/services/module-loading/app-server-module-transpiler.service.ts +52 -0
  161. package/src/services/module-loading/page-module-import.service.test.ts +253 -0
  162. package/src/services/module-loading/page-module-import.service.ts +200 -0
  163. package/src/services/module-loading/server-loader.service.test.ts +161 -0
  164. package/src/services/module-loading/server-loader.service.ts +130 -0
  165. package/src/services/module-loading/server-module-transpiler.service.test.ts +115 -0
  166. package/src/services/module-loading/server-module-transpiler.service.ts +105 -0
  167. package/src/services/runtime-manifest/node-runtime-manifest.service.test.ts +95 -0
  168. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +101 -0
  169. package/src/services/runtime-state/dev-graph.service.ts +217 -0
  170. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +136 -0
  171. package/src/services/runtime-state/runtime-specifier-registry.service.ts +96 -0
  172. package/src/services/runtime-state/server-invalidation-state.service.ts +68 -0
  173. package/src/services/validation/schema-validation-service.test.ts +223 -0
  174. package/src/services/{schema-validation-service.ts → validation/schema-validation-service.ts} +1 -1
  175. package/src/static-site-generator/README.md +26 -0
  176. package/src/static-site-generator/static-site-generator.test.ts +307 -0
  177. package/src/static-site-generator/static-site-generator.ts +109 -6
  178. package/src/utils/deep-merge.test.ts +114 -0
  179. package/src/utils/invariant.test.ts +22 -0
  180. package/src/utils/path-utils.test.ts +15 -0
  181. package/src/utils/resolve-work-dir.ts +45 -0
  182. package/src/utils/server-utils.test.ts +38 -0
  183. package/src/watchers/project-watcher.integration.test.ts +337 -0
  184. package/src/watchers/project-watcher.test-helpers.ts +1 -1
  185. package/src/watchers/project-watcher.test.ts +678 -0
  186. package/src/watchers/project-watcher.ts +130 -111
  187. package/CHANGELOG.md +0 -91
  188. package/src/adapters/abstract/application-adapter.d.ts +0 -168
  189. package/src/adapters/abstract/application-adapter.js +0 -109
  190. package/src/adapters/abstract/router-adapter.d.ts +0 -26
  191. package/src/adapters/abstract/router-adapter.js +0 -5
  192. package/src/adapters/abstract/server-adapter.d.ts +0 -69
  193. package/src/adapters/abstract/server-adapter.js +0 -15
  194. package/src/adapters/bun/client-bridge.d.ts +0 -34
  195. package/src/adapters/bun/client-bridge.js +0 -48
  196. package/src/adapters/bun/create-app.d.ts +0 -60
  197. package/src/adapters/bun/create-app.js +0 -117
  198. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  199. package/src/adapters/bun/define-api-handler.js +0 -15
  200. package/src/adapters/bun/define-api-handler.ts +0 -114
  201. package/src/adapters/bun/hmr-manager.d.ts +0 -85
  202. package/src/adapters/bun/hmr-manager.js +0 -240
  203. package/src/adapters/bun/index.d.ts +0 -3
  204. package/src/adapters/bun/index.js +0 -8
  205. package/src/adapters/bun/server-adapter.d.ts +0 -155
  206. package/src/adapters/bun/server-adapter.js +0 -368
  207. package/src/adapters/bun/server-lifecycle.d.ts +0 -52
  208. package/src/adapters/bun/server-lifecycle.js +0 -120
  209. package/src/adapters/index.d.ts +0 -6
  210. package/src/adapters/index.js +0 -14
  211. package/src/adapters/node/create-app.d.ts +0 -21
  212. package/src/adapters/node/create-app.js +0 -143
  213. package/src/adapters/node/index.d.ts +0 -4
  214. package/src/adapters/node/index.js +0 -8
  215. package/src/adapters/node/node-client-bridge.d.ts +0 -26
  216. package/src/adapters/node/node-client-bridge.js +0 -66
  217. package/src/adapters/node/node-hmr-manager.d.ts +0 -63
  218. package/src/adapters/node/node-hmr-manager.js +0 -237
  219. package/src/adapters/node/server-adapter.d.ts +0 -190
  220. package/src/adapters/node/server-adapter.js +0 -420
  221. package/src/adapters/node/static-content-server.d.ts +0 -24
  222. package/src/adapters/node/static-content-server.js +0 -166
  223. package/src/adapters/shared/api-response.d.ts +0 -52
  224. package/src/adapters/shared/api-response.js +0 -96
  225. package/src/adapters/shared/application-adapter.d.ts +0 -18
  226. package/src/adapters/shared/application-adapter.js +0 -90
  227. package/src/adapters/shared/explicit-static-route-matcher.d.ts +0 -38
  228. package/src/adapters/shared/explicit-static-route-matcher.js +0 -100
  229. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +0 -65
  230. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -98
  231. package/src/adapters/shared/fs-server-response-factory.d.ts +0 -19
  232. package/src/adapters/shared/fs-server-response-factory.js +0 -97
  233. package/src/adapters/shared/fs-server-response-matcher.d.ts +0 -71
  234. package/src/adapters/shared/fs-server-response-matcher.js +0 -155
  235. package/src/adapters/shared/render-context.d.ts +0 -14
  236. package/src/adapters/shared/render-context.js +0 -69
  237. package/src/adapters/shared/server-adapter.d.ts +0 -87
  238. package/src/adapters/shared/server-adapter.js +0 -353
  239. package/src/adapters/shared/server-route-handler.d.ts +0 -89
  240. package/src/adapters/shared/server-route-handler.js +0 -120
  241. package/src/adapters/shared/server-static-builder.d.ts +0 -38
  242. package/src/adapters/shared/server-static-builder.js +0 -46
  243. package/src/build/build-adapter.d.ts +0 -74
  244. package/src/build/build-adapter.js +0 -54
  245. package/src/build/build-types.d.ts +0 -57
  246. package/src/build/build-types.js +0 -0
  247. package/src/build/esbuild-build-adapter.d.ts +0 -69
  248. package/src/build/esbuild-build-adapter.js +0 -390
  249. package/src/config/config-builder.d.ts +0 -227
  250. package/src/config/config-builder.js +0 -392
  251. package/src/constants.d.ts +0 -32
  252. package/src/constants.js +0 -21
  253. package/src/create-app.d.ts +0 -17
  254. package/src/create-app.js +0 -66
  255. package/src/define-api-handler.d.ts +0 -25
  256. package/src/define-api-handler.js +0 -15
  257. package/src/dev/sc-server.d.ts +0 -30
  258. package/src/dev/sc-server.js +0 -111
  259. package/src/eco/component-render-context.d.ts +0 -105
  260. package/src/eco/component-render-context.js +0 -77
  261. package/src/eco/eco.d.ts +0 -9
  262. package/src/eco/eco.js +0 -110
  263. package/src/eco/eco.types.d.ts +0 -170
  264. package/src/eco/eco.types.js +0 -0
  265. package/src/eco/eco.utils.d.ts +0 -40
  266. package/src/eco/eco.utils.js +0 -40
  267. package/src/eco/global-injector-map.d.ts +0 -16
  268. package/src/eco/global-injector-map.js +0 -80
  269. package/src/eco/lazy-injector-map.d.ts +0 -8
  270. package/src/eco/lazy-injector-map.js +0 -70
  271. package/src/eco/module-dependencies.d.ts +0 -18
  272. package/src/eco/module-dependencies.js +0 -49
  273. package/src/errors/http-error.d.ts +0 -31
  274. package/src/errors/http-error.js +0 -50
  275. package/src/errors/index.d.ts +0 -2
  276. package/src/errors/index.js +0 -4
  277. package/src/errors/locals-access-error.d.ts +0 -4
  278. package/src/errors/locals-access-error.js +0 -9
  279. package/src/global/app-logger.d.ts +0 -2
  280. package/src/global/app-logger.js +0 -6
  281. package/src/hmr/client/hmr-runtime.d.ts +0 -10
  282. package/src/hmr/client/hmr-runtime.js +0 -86
  283. package/src/hmr/hmr-strategy.d.ts +0 -159
  284. package/src/hmr/hmr-strategy.js +0 -29
  285. package/src/hmr/hmr.test.e2e.d.ts +0 -1
  286. package/src/hmr/hmr.test.e2e.js +0 -50
  287. package/src/hmr/strategies/default-hmr-strategy.d.ts +0 -43
  288. package/src/hmr/strategies/default-hmr-strategy.js +0 -34
  289. package/src/hmr/strategies/js-hmr-strategy.d.ts +0 -136
  290. package/src/hmr/strategies/js-hmr-strategy.js +0 -188
  291. package/src/index.browser.d.ts +0 -3
  292. package/src/index.browser.js +0 -4
  293. package/src/index.d.ts +0 -5
  294. package/src/index.js +0 -10
  295. package/src/integrations/ghtml/ghtml-renderer.d.ts +0 -15
  296. package/src/integrations/ghtml/ghtml-renderer.js +0 -60
  297. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -20
  298. package/src/integrations/ghtml/ghtml.plugin.js +0 -21
  299. package/src/internal-types.d.ts +0 -200
  300. package/src/internal-types.js +0 -0
  301. package/src/plugins/alias-resolver-plugin.d.ts +0 -2
  302. package/src/plugins/alias-resolver-plugin.js +0 -39
  303. package/src/plugins/eco-component-meta-plugin.d.ts +0 -95
  304. package/src/plugins/eco-component-meta-plugin.js +0 -157
  305. package/src/plugins/integration-plugin.d.ts +0 -102
  306. package/src/plugins/integration-plugin.js +0 -100
  307. package/src/plugins/processor.d.ts +0 -82
  308. package/src/plugins/processor.js +0 -122
  309. package/src/public-types.d.ts +0 -1098
  310. package/src/public-types.js +0 -0
  311. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  312. package/src/route-renderer/component-graph-executor.js +0 -31
  313. package/src/route-renderer/component-graph.d.ts +0 -42
  314. package/src/route-renderer/component-graph.js +0 -72
  315. package/src/route-renderer/component-marker.d.ts +0 -52
  316. package/src/route-renderer/component-marker.js +0 -46
  317. package/src/route-renderer/dependency-resolver.d.ts +0 -24
  318. package/src/route-renderer/dependency-resolver.js +0 -428
  319. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  320. package/src/route-renderer/html-post-processing.service.js +0 -86
  321. package/src/route-renderer/html-post-processing.service.ts +0 -103
  322. package/src/route-renderer/integration-renderer.d.ts +0 -339
  323. package/src/route-renderer/integration-renderer.js +0 -526
  324. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  325. package/src/route-renderer/marker-graph-resolver.js +0 -93
  326. package/src/route-renderer/page-module-loader.d.ts +0 -61
  327. package/src/route-renderer/page-module-loader.js +0 -102
  328. package/src/route-renderer/render-execution.service.d.ts +0 -69
  329. package/src/route-renderer/render-execution.service.js +0 -91
  330. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  331. package/src/route-renderer/render-preparation.service.js +0 -243
  332. package/src/route-renderer/route-renderer.d.ts +0 -26
  333. package/src/route-renderer/route-renderer.js +0 -68
  334. package/src/router/fs-router-scanner.d.ts +0 -41
  335. package/src/router/fs-router-scanner.js +0 -155
  336. package/src/router/fs-router.d.ts +0 -26
  337. package/src/router/fs-router.js +0 -100
  338. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  339. package/src/services/asset-processing-service/asset-processing.service.js +0 -250
  340. package/src/services/asset-processing-service/asset.factory.d.ts +0 -17
  341. package/src/services/asset-processing-service/asset.factory.js +0 -82
  342. package/src/services/asset-processing-service/assets.types.d.ts +0 -88
  343. package/src/services/asset-processing-service/assets.types.js +0 -0
  344. package/src/services/asset-processing-service/index.d.ts +0 -3
  345. package/src/services/asset-processing-service/index.js +0 -3
  346. package/src/services/asset-processing-service/processor.interface.d.ts +0 -22
  347. package/src/services/asset-processing-service/processor.interface.js +0 -6
  348. package/src/services/asset-processing-service/processor.registry.d.ts +0 -8
  349. package/src/services/asset-processing-service/processor.registry.js +0 -15
  350. package/src/services/asset-processing-service/processors/base/base-processor.d.ts +0 -24
  351. package/src/services/asset-processing-service/processors/base/base-processor.js +0 -59
  352. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  353. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  354. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  355. package/src/services/asset-processing-service/processors/index.js +0 -5
  356. package/src/services/asset-processing-service/processors/script/content-script.processor.d.ts +0 -5
  357. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  358. package/src/services/asset-processing-service/processors/script/file-script.processor.d.ts +0 -8
  359. package/src/services/asset-processing-service/processors/script/file-script.processor.js +0 -76
  360. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
  361. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
  362. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -5
  363. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  364. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -9
  365. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +0 -63
  366. package/src/services/cache/cache.types.d.ts +0 -107
  367. package/src/services/cache/cache.types.js +0 -0
  368. package/src/services/cache/index.d.ts +0 -7
  369. package/src/services/cache/index.js +0 -7
  370. package/src/services/cache/memory-cache-store.d.ts +0 -42
  371. package/src/services/cache/memory-cache-store.js +0 -98
  372. package/src/services/cache/page-cache-service.d.ts +0 -70
  373. package/src/services/cache/page-cache-service.js +0 -152
  374. package/src/services/html-transformer.service.d.ts +0 -50
  375. package/src/services/html-transformer.service.js +0 -163
  376. package/src/services/html-transformer.service.ts +0 -217
  377. package/src/services/page-module-import.service.d.ts +0 -37
  378. package/src/services/page-module-import.service.js +0 -88
  379. package/src/services/page-module-import.service.ts +0 -129
  380. package/src/services/page-request-cache-coordinator.service.d.ts +0 -75
  381. package/src/services/page-request-cache-coordinator.service.js +0 -107
  382. package/src/services/schema-validation-service.d.ts +0 -122
  383. package/src/services/schema-validation-service.js +0 -101
  384. package/src/services/validation/standard-schema.types.d.ts +0 -65
  385. package/src/services/validation/standard-schema.types.js +0 -0
  386. package/src/static-site-generator/static-site-generator.d.ts +0 -57
  387. package/src/static-site-generator/static-site-generator.js +0 -272
  388. package/src/utils/css.d.ts +0 -1
  389. package/src/utils/css.js +0 -7
  390. package/src/utils/deep-merge.d.ts +0 -14
  391. package/src/utils/deep-merge.js +0 -32
  392. package/src/utils/hash.d.ts +0 -1
  393. package/src/utils/hash.js +0 -7
  394. package/src/utils/html.d.ts +0 -1
  395. package/src/utils/html.js +0 -4
  396. package/src/utils/invariant.d.ts +0 -5
  397. package/src/utils/invariant.js +0 -11
  398. package/src/utils/locals-utils.d.ts +0 -15
  399. package/src/utils/locals-utils.js +0 -24
  400. package/src/utils/parse-cli-args.d.ts +0 -24
  401. package/src/utils/parse-cli-args.js +0 -47
  402. package/src/utils/path-utils.module.d.ts +0 -5
  403. package/src/utils/path-utils.module.js +0 -14
  404. package/src/utils/runtime.d.ts +0 -11
  405. package/src/utils/runtime.js +0 -40
  406. package/src/utils/server-utils.module.d.ts +0 -19
  407. package/src/utils/server-utils.module.js +0 -56
  408. package/src/watchers/project-watcher.d.ts +0 -125
  409. package/src/watchers/project-watcher.js +0 -265
  410. package/src/watchers/project-watcher.test-helpers.d.ts +0 -4
  411. package/src/watchers/project-watcher.test-helpers.js +0 -52
  412. /package/src/route-renderer/{component-graph-executor.ts → component-graph/component-graph-executor.ts} +0 -0
  413. /package/src/route-renderer/{component-graph.ts → component-graph/component-graph.ts} +0 -0
  414. /package/src/route-renderer/{component-marker.ts → component-graph/component-marker.ts} +0 -0
  415. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.ts +0 -0
  416. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/index.ts +0 -0
  417. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.ts +0 -0
  418. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.ts +0 -0
@@ -0,0 +1,59 @@
1
+ import { afterEach, beforeEach, expect, test, vi } from 'vitest';
2
+ import { fileSystem } from '@ecopages/file-system';
3
+ import type { BaseAsset, ProcessedAsset } from '../../assets.types.ts';
4
+ import { BaseProcessor } from './base-processor.ts';
5
+
6
+ type TestAsset = BaseAsset & {
7
+ name: string;
8
+ };
9
+
10
+ class TestProcessor extends BaseProcessor<TestAsset> {
11
+ processCalls = 0;
12
+
13
+ async process(dep: TestAsset): Promise<ProcessedAsset> {
14
+ return this.getOrProcess(dep.name, async () => {
15
+ this.processCalls += 1;
16
+ return {
17
+ filepath: `/test/dist/assets/${dep.name}.js`,
18
+ kind: dep.kind,
19
+ inline: false,
20
+ };
21
+ });
22
+ }
23
+ }
24
+
25
+ const originalExists = fileSystem.exists;
26
+
27
+ beforeEach(() => {
28
+ fileSystem.exists = vi.fn(() => true);
29
+ });
30
+
31
+ afterEach(() => {
32
+ fileSystem.exists = originalExists;
33
+ vi.restoreAllMocks();
34
+ });
35
+
36
+ test('BaseProcessor - rebuilds cached outputs when emitted file was deleted', async () => {
37
+ const existsMock = vi
38
+ .fn()
39
+ .mockImplementationOnce(() => false)
40
+ .mockImplementation(() => true);
41
+ fileSystem.exists = existsMock;
42
+
43
+ const processor = new TestProcessor({
44
+ appConfig: {
45
+ absolutePaths: { distDir: '/test/dist' },
46
+ } as any,
47
+ });
48
+
49
+ const asset: TestAsset = {
50
+ kind: 'script',
51
+ source: 'file',
52
+ name: 'runtime-vendor',
53
+ };
54
+
55
+ await processor.process(asset);
56
+ await processor.process(asset);
57
+
58
+ expect(processor.processCalls).toBe(2);
59
+ });
@@ -1,9 +1,10 @@
1
1
  import path from 'node:path';
2
- import { RESOLVED_ASSETS_DIR } from '../../../../constants.ts';
3
- import type { EcoPagesAppConfig } from '../../../../internal-types.ts';
4
- import { rapidhash } from '../../../../utils/hash.ts';
5
- import { isDevelopmentRuntime, isProductionRuntime } from '../../../../utils/runtime.ts';
2
+ import { RESOLVED_ASSETS_DIR } from '../../../../../constants.ts';
3
+ import type { EcoPagesAppConfig } from '../../../../../internal-types.ts';
4
+ import { rapidhash } from '../../../../../utils/hash.ts';
5
+ import { isDevelopmentRuntime, isProductionRuntime } from '../../../../../utils/runtime.ts';
6
6
  import type { BaseAsset, ProcessedAsset } from '../../assets.types.ts';
7
+ import { fileSystem } from '@ecopages/file-system';
7
8
 
8
9
  export abstract class BaseProcessor<T extends BaseAsset> {
9
10
  protected appConfig: EcoPagesAppConfig;
@@ -59,7 +60,12 @@ export abstract class BaseProcessor<T extends BaseAsset> {
59
60
  processFn: () => ProcessedAsset | Promise<ProcessedAsset>,
60
61
  ): Promise<ProcessedAsset> {
61
62
  if (this.hasCacheFile(cacheKey)) {
62
- return Promise.resolve(this.getCacheFile(cacheKey) as ProcessedAsset);
63
+ const cached = this.getCacheFile(cacheKey) as ProcessedAsset;
64
+ if (!cached.filepath || fileSystem.exists(cached.filepath)) {
65
+ return Promise.resolve(cached);
66
+ }
67
+
68
+ this.cache.delete(cacheKey);
63
69
  }
64
70
 
65
71
  const result = processFn();
@@ -1,15 +1,19 @@
1
- import { appLogger } from '../../../../global/app-logger';
2
- import type { EcoPagesAppConfig } from '../../../../internal-types';
3
- import { defaultBuildAdapter } from '../../../../build/build-adapter.ts';
4
- import type { EcoBuildPlugin } from '../../../../build/build-types.ts';
1
+ import { appLogger } from '../../../../../global/app-logger';
2
+ import type { EcoPagesAppConfig } from '../../../../../internal-types';
3
+ import { getAppBrowserBuildPlugins } from '../../../../../build/build-adapter.ts';
4
+ import type { EcoBuildPlugin } from '../../../../../build/build-types.ts';
5
5
  import { fileSystem } from '@ecopages/file-system';
6
6
  import path from 'node:path';
7
7
  import type { ScriptAsset } from '../../assets.types';
8
8
  import { BaseProcessor } from './base-processor';
9
+ import { BrowserBundleService } from '../../../browser-bundle.service.ts';
9
10
 
10
11
  export abstract class BaseScriptProcessor<T extends ScriptAsset> extends BaseProcessor<T> {
12
+ private readonly browserBundleService: BrowserBundleService;
13
+
11
14
  constructor({ appConfig }: { appConfig: EcoPagesAppConfig }) {
12
15
  super({ appConfig });
16
+ this.browserBundleService = new BrowserBundleService(appConfig);
13
17
  }
14
18
 
15
19
  protected shouldBundle(dep: T): boolean {
@@ -21,21 +25,7 @@ export abstract class BaseScriptProcessor<T extends ScriptAsset> extends BasePro
21
25
  }
22
26
 
23
27
  protected collectBuildPlugins(): EcoBuildPlugin[] {
24
- const plugins: EcoBuildPlugin[] = [];
25
-
26
- if (this.appConfig.processors?.size) {
27
- for (const processor of this.appConfig.processors.values()) {
28
- if (processor.buildPlugins) {
29
- plugins.push(...processor.buildPlugins);
30
- }
31
- }
32
- }
33
-
34
- if (this.appConfig.loaders?.size) {
35
- plugins.push(...this.appConfig.loaders.values());
36
- }
37
-
38
- return plugins;
28
+ return getAppBrowserBuildPlugins(this.appConfig);
39
29
  }
40
30
 
41
31
  protected async bundleScript({
@@ -50,25 +40,25 @@ export abstract class BaseScriptProcessor<T extends ScriptAsset> extends BasePro
50
40
  const buildPlugins = this.collectBuildPlugins();
51
41
  const allPlugins = additionalPlugins ? [...additionalPlugins, ...buildPlugins] : buildPlugins;
52
42
 
53
- const build = await defaultBuildAdapter.build({
43
+ const buildResult = await this.browserBundleService.bundle({
44
+ profile: 'browser-script',
54
45
  entrypoints: [entrypoint],
55
46
  outdir,
56
47
  root: this.appConfig.rootDir,
57
- ...defaultBuildAdapter.getTranspileOptions('browser-script'),
58
48
  splitting: true,
59
49
  naming: '[name]-[hash].[ext]',
60
50
  plugins: allPlugins,
61
51
  ...rest,
62
52
  });
63
53
 
64
- if (!build.success) {
65
- for (const log of build.logs) {
54
+ if (!buildResult.success) {
55
+ for (const log of buildResult.logs) {
66
56
  appLogger.debug(log.message, log);
67
57
  }
68
58
  }
69
59
 
70
60
  const entryBaseName = path.parse(entrypoint).name;
71
- const entryOutput = build.outputs
61
+ const entryOutput = buildResult.outputs
72
62
  .map((output) => output.path)
73
63
  .find((outputPath) => path.basename(outputPath) === `${entryBaseName}.js`);
74
64
 
@@ -76,7 +66,7 @@ export abstract class BaseScriptProcessor<T extends ScriptAsset> extends BasePro
76
66
  return entryOutput;
77
67
  }
78
68
 
79
- const nonVendorOutput = build.outputs
69
+ const nonVendorOutput = buildResult.outputs
80
70
  .map((output) => output.path)
81
71
  .find((outputPath) => !path.basename(outputPath).startsWith('vendors'));
82
72
 
@@ -84,7 +74,7 @@ export abstract class BaseScriptProcessor<T extends ScriptAsset> extends BasePro
84
74
  return nonVendorOutput;
85
75
  }
86
76
 
87
- const primaryOutput = build.outputs[0]?.path;
77
+ const primaryOutput = buildResult.outputs[0]?.path;
88
78
  if (primaryOutput) {
89
79
  return primaryOutput;
90
80
  }
@@ -99,7 +89,7 @@ export abstract class BaseScriptProcessor<T extends ScriptAsset> extends BasePro
99
89
  return fallbackOutput;
100
90
  }
101
91
 
102
- const logMessage = build.logs.map((log) => log.message).join(' | ');
92
+ const logMessage = buildResult.logs.map((log) => log.message).join(' | ');
103
93
  throw new Error(`No build output generated for ${entrypoint}${logMessage ? `: ${logMessage}` : ''}`);
104
94
  }
105
95
  }
@@ -0,0 +1,286 @@
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,7 +1,7 @@
1
1
  import path from 'node:path';
2
- import { RESOLVED_ASSETS_DIR } from '../../../../constants';
2
+ import { RESOLVED_ASSETS_DIR } from '../../../../../constants';
3
3
  import { fileSystem } from '@ecopages/file-system';
4
- import type { IHmrManager } from '../../../../internal-types';
4
+ import type { IHmrManager } from '../../../../../internal-types';
5
5
  import type { FileScriptAsset, ProcessedAsset } from '../../assets.types';
6
6
  import { BaseScriptProcessor } from '../base/base-script-processor';
7
7
 
@@ -17,7 +17,7 @@ export class FileScriptProcessor extends BaseScriptProcessor<FileScriptAsset> {
17
17
  * If HMR Manager is active, delegate build/watch to it.
18
18
  */
19
19
  if (this.hmrManager?.isEnabled() && !dep.inline) {
20
- const outputUrl = await this.hmrManager.registerEntrypoint(dep.filepath);
20
+ const outputUrl = await this.hmrManager.registerScriptEntrypoint(dep.filepath);
21
21
  return {
22
22
  filepath: dep.filepath,
23
23
  srcUrl: outputUrl,