@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
@@ -1,157 +0,0 @@
1
- import path from "node:path";
2
- import { parseSync } from "oxc-parser";
3
- import { fileSystem } from "@ecopages/file-system";
4
- import { rapidhash } from "../utils/hash.js";
5
- const REGEX_SPECIAL_CHARS = /[.*+?^${}()|[\]\\]/g;
6
- const VALID_LOADER_EXTENSIONS = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx"]);
7
- function hasValidLoaderExtension(ext) {
8
- for (const validExt of VALID_LOADER_EXTENSIONS) {
9
- if (ext.endsWith(validExt)) {
10
- return true;
11
- }
12
- }
13
- return false;
14
- }
15
- function buildExtensionToIntegrationMap(integrations) {
16
- const mapping = [];
17
- for (const integration of integrations) {
18
- for (const ext of integration.extensions) {
19
- mapping.push([ext, integration.name]);
20
- }
21
- }
22
- mapping.sort((a, b) => b[0].length - a[0].length);
23
- return mapping;
24
- }
25
- function detectIntegration(filePath, extensionToIntegration) {
26
- for (const [ext, integration] of extensionToIntegration) {
27
- if (filePath.endsWith(ext)) {
28
- return integration;
29
- }
30
- }
31
- return "ghtml";
32
- }
33
- function createExtensionPattern(extensions) {
34
- if (extensions.length === 0) {
35
- throw new Error("[eco-component-meta-plugin] No extensions configured. At least one integration is required.");
36
- }
37
- const uniqueExtensions = [...new Set(extensions)];
38
- const escaped = uniqueExtensions.map((ext) => ext.replace(REGEX_SPECIAL_CHARS, "\\$&"));
39
- return new RegExp(`(${escaped.join("|")})(\\?.*)?$`);
40
- }
41
- function createEcoComponentMetaPlugin(options) {
42
- return {
43
- name: "eco-component-meta-plugin",
44
- setup(build) {
45
- const allExtensions = options.config.integrations.flatMap((integration) => integration.extensions).filter(hasValidLoaderExtension);
46
- if (allExtensions.length === 0) {
47
- return;
48
- }
49
- const extensionPattern = createExtensionPattern(allExtensions);
50
- const extensionToIntegration = buildExtensionToIntegrationMap(options.config.integrations);
51
- build.onLoad({ filter: extensionPattern }, (args) => {
52
- const filePath = args.path.split("?")[0];
53
- const contents = fileSystem.readFileSync(filePath);
54
- const integration = detectIntegration(filePath, extensionToIntegration);
55
- const transformedContents = injectEcoMeta(contents, filePath, integration);
56
- const ext = path.extname(filePath).slice(1);
57
- return {
58
- contents: transformedContents,
59
- loader: ext || "ts"
60
- };
61
- });
62
- }
63
- };
64
- }
65
- function findInjectionPoints(node, insertions, injection, isInsideEcoComponent = false) {
66
- if (!node || typeof node !== "object") return;
67
- const n = node;
68
- if (n.type === "CallExpression") {
69
- const callee = n.callee;
70
- if (callee?.type === "MemberExpression" || callee?.type === "StaticMemberExpression") {
71
- const obj = callee.object;
72
- const prop = callee.property;
73
- if (obj?.type === "Identifier" && obj?.name === "eco" && (prop?.name === "page" || prop?.name === "component")) {
74
- const args = n.arguments;
75
- const firstArg = args?.[0];
76
- if (firstArg?.type === "ObjectExpression") {
77
- const start = firstArg.start;
78
- if (typeof start === "number") {
79
- insertions.push({ position: start + 1, text: injection });
80
- }
81
- }
82
- }
83
- }
84
- }
85
- if (n.type === "AssignmentExpression") {
86
- const left = n.left;
87
- const right = n.right;
88
- if (left?.type === "MemberExpression" || left?.type === "StaticMemberExpression") {
89
- const prop = left.property;
90
- if (prop?.name === "config" && right?.type === "ObjectExpression") {
91
- const start = right.start;
92
- if (typeof start === "number") {
93
- insertions.push({ position: start + 1, text: injection });
94
- }
95
- }
96
- }
97
- }
98
- if (n.type === "ObjectProperty" || n.type === "Property") {
99
- const key = n.key;
100
- const value = n.value;
101
- if ((key?.type === "Identifier" || key?.type === "IdentifierName") && key?.name === "config" && value?.type === "ObjectExpression" && isInsideEcoComponent) {
102
- const start = value.start;
103
- if (typeof start === "number") {
104
- insertions.push({ position: start + 1, text: injection });
105
- }
106
- }
107
- }
108
- let childIsInsideEcoComponent = isInsideEcoComponent;
109
- if (n.type === "VariableDeclarator") {
110
- const id = n.id;
111
- const typeAnnotation = id?.typeAnnotation;
112
- if (typeAnnotation) {
113
- const typeStr = JSON.stringify(typeAnnotation);
114
- if (typeStr.includes("EcoComponent")) {
115
- childIsInsideEcoComponent = true;
116
- }
117
- }
118
- }
119
- for (const key in n) {
120
- if (key === "start" || key === "end" || key === "type") continue;
121
- const value = n[key];
122
- if (Array.isArray(value)) {
123
- for (const child of value) {
124
- findInjectionPoints(child, insertions, injection, childIsInsideEcoComponent);
125
- }
126
- } else if (typeof value === "object" && value !== null) {
127
- findInjectionPoints(value, insertions, injection, childIsInsideEcoComponent);
128
- }
129
- }
130
- }
131
- function injectEcoMeta(contents, filePath, integration) {
132
- const result = parseSync(filePath, contents);
133
- if (result.errors.length > 0) {
134
- console.warn(`[eco-component-meta-plugin] Parse errors in ${filePath}:`, result.errors);
135
- return contents;
136
- }
137
- const ast = result.program;
138
- const id = rapidhash(filePath).toString(36);
139
- const injection = ` __eco: { id: "${id}", file: "${filePath}", integration: "${integration}" },`;
140
- const insertions = [];
141
- findInjectionPoints(ast, insertions, injection);
142
- if (insertions.length === 0) {
143
- return contents;
144
- }
145
- insertions.sort((a, b) => b.position - a.position);
146
- let transformed = contents;
147
- for (const { position, text } of insertions) {
148
- transformed = transformed.slice(0, position) + text + transformed.slice(position);
149
- }
150
- return transformed;
151
- }
152
- var eco_component_meta_plugin_default = createEcoComponentMetaPlugin;
153
- export {
154
- createEcoComponentMetaPlugin,
155
- eco_component_meta_plugin_default as default,
156
- injectEcoMeta
157
- };
@@ -1,102 +0,0 @@
1
- import type { EcoBuildPlugin } from '../build/build-types';
2
- import type { EcoPagesAppConfig, IHmrManager } from '../internal-types';
3
- import type { HmrStrategy } from '../hmr/hmr-strategy';
4
- import type { EcoComponent, EcoPagesElement } from '../public-types';
5
- import type { IntegrationRenderer } from '../route-renderer/integration-renderer';
6
- import { AssetProcessingService } from '../services/asset-processing-service/asset-processing.service';
7
- import type { AssetDefinition, ProcessedAsset } from '../services/asset-processing-service/assets.types';
8
- export declare const INTEGRATION_PLUGIN_ERRORS: {
9
- readonly NOT_INITIALIZED_WITH_APP_CONFIG: "Plugin not initialized with app config";
10
- readonly NOT_INITIALIZED_WITH_ASSET_SERVICE: "Plugin not initialized with asset dependency service";
11
- };
12
- export interface IntegrationPluginConfig {
13
- /**
14
- * The name of the integration plugin.
15
- */
16
- name: string;
17
- /**
18
- * The extensions that this plugin supports (e.g., ['.kita.js', '.kita.tsx']).
19
- */
20
- extensions: string[];
21
- /**
22
- * The dependencies that this plugin requires on a global level.
23
- * These dependencies will be resolved during the setup process and injected into the global scope of the application.
24
- * They are not specific to any particular page or component.
25
- */
26
- integrationDependencies?: AssetDefinition[];
27
- /**
28
- * The strategy to use for static building.
29
- * - 'render': Execute component function directly (faster, efficient).
30
- * - 'fetch': Start server and fetch URL (slower, needed for some SSR like Lit).
31
- * @default 'render'
32
- */
33
- staticBuildStep?: 'render' | 'fetch';
34
- }
35
- /**
36
- * Metadata used by integration-owned boundary policy.
37
- *
38
- * This payload describes the currently active integration pass together with the
39
- * target component boundary being entered.
40
- */
41
- export type ComponentBoundaryPolicyInput = {
42
- currentIntegration: string;
43
- targetIntegration?: string;
44
- component: EcoComponent;
45
- };
46
- type RendererClass<C> = new (options: {
47
- appConfig: EcoPagesAppConfig;
48
- assetProcessingService: AssetProcessingService;
49
- resolvedIntegrationDependencies: ProcessedAsset[];
50
- runtimeOrigin: string;
51
- }) => IntegrationRenderer<C>;
52
- export declare abstract class IntegrationPlugin<C = EcoPagesElement> {
53
- readonly name: string;
54
- readonly extensions: string[];
55
- abstract renderer: RendererClass<C>;
56
- readonly staticBuildStep: 'render' | 'fetch';
57
- protected integrationDependencies: AssetDefinition[];
58
- protected resolvedIntegrationDependencies: ProcessedAsset[];
59
- protected options?: Record<string, unknown>;
60
- protected appConfig?: EcoPagesAppConfig;
61
- protected assetProcessingService?: AssetProcessingService;
62
- protected hmrManager?: IHmrManager;
63
- runtimeOrigin: string;
64
- get plugins(): EcoBuildPlugin[];
65
- constructor(config: IntegrationPluginConfig);
66
- setConfig(appConfig: EcoPagesAppConfig): void;
67
- setRuntimeOrigin(runtimeOrigin: string): void;
68
- /**
69
- * Returns an HMR strategy for this integration, if applicable.
70
- * The strategy will be registered with the HmrManager during initialization.
71
- *
72
- * @returns HmrStrategy instance or undefined if no custom HMR handling needed
73
- *
74
- * @example
75
- * ```typescript
76
- * getHmrStrategy(): HmrStrategy {
77
- * const context = this.hmrManager!.getDefaultContext();
78
- * return new ReactHmrStrategy(context);
79
- * }
80
- * ```
81
- */
82
- getHmrStrategy?(): HmrStrategy | undefined;
83
- setHmrManager(hmrManager: IHmrManager): void;
84
- initializeAssetDefinitionService(): void;
85
- getResolvedIntegrationDependencies(): ProcessedAsset[];
86
- initializeRenderer(): IntegrationRenderer<C>;
87
- /**
88
- * Declares whether a component boundary targeting this integration should be
89
- * deferred through the marker pipeline.
90
- *
91
- * The default implementation never defers. Integrations that require deferred
92
- * subtree rendering should override this method and return `true` when their
93
- * boundary must be resolved during the marker graph stage.
94
- *
95
- * @param input Boundary metadata for the current render pass.
96
- * @returns `true` when the boundary should be deferred; otherwise `false`.
97
- */
98
- shouldDeferComponentBoundary(_input: ComponentBoundaryPolicyInput): boolean;
99
- setup(): Promise<void>;
100
- teardown(): Promise<void>;
101
- }
102
- export {};
@@ -1,100 +0,0 @@
1
- import { AssetProcessingService } from "../services/asset-processing-service/asset-processing.service";
2
- const INTEGRATION_PLUGIN_ERRORS = {
3
- NOT_INITIALIZED_WITH_APP_CONFIG: "Plugin not initialized with app config",
4
- NOT_INITIALIZED_WITH_ASSET_SERVICE: "Plugin not initialized with asset dependency service"
5
- };
6
- class IntegrationPlugin {
7
- name;
8
- extensions;
9
- staticBuildStep;
10
- integrationDependencies;
11
- resolvedIntegrationDependencies = [];
12
- options;
13
- appConfig;
14
- assetProcessingService;
15
- hmrManager;
16
- get plugins() {
17
- return [];
18
- }
19
- constructor(config) {
20
- this.name = config.name;
21
- this.extensions = config.extensions;
22
- this.integrationDependencies = config.integrationDependencies || [];
23
- this.staticBuildStep = config.staticBuildStep || "render";
24
- }
25
- setConfig(appConfig) {
26
- this.appConfig = appConfig;
27
- this.initializeAssetDefinitionService();
28
- }
29
- setRuntimeOrigin(runtimeOrigin) {
30
- this.runtimeOrigin = runtimeOrigin;
31
- }
32
- setHmrManager(hmrManager) {
33
- this.hmrManager = hmrManager;
34
- const strategy = this.getHmrStrategy?.();
35
- if (strategy) {
36
- hmrManager.registerStrategy(strategy);
37
- }
38
- if (this.assetProcessingService) {
39
- this.assetProcessingService.setHmrManager(hmrManager);
40
- }
41
- }
42
- initializeAssetDefinitionService() {
43
- if (!this.appConfig) throw new Error(INTEGRATION_PLUGIN_ERRORS.NOT_INITIALIZED_WITH_APP_CONFIG);
44
- this.assetProcessingService = AssetProcessingService.createWithDefaultProcessors(this.appConfig);
45
- if (this.hmrManager) {
46
- this.assetProcessingService.setHmrManager(this.hmrManager);
47
- }
48
- }
49
- getResolvedIntegrationDependencies() {
50
- return this.resolvedIntegrationDependencies;
51
- }
52
- initializeRenderer() {
53
- if (!this.appConfig) {
54
- throw new Error(INTEGRATION_PLUGIN_ERRORS.NOT_INITIALIZED_WITH_APP_CONFIG);
55
- }
56
- const assetProcessingService = AssetProcessingService.createWithDefaultProcessors(this.appConfig);
57
- if (this.hmrManager) {
58
- assetProcessingService.setHmrManager(this.hmrManager);
59
- }
60
- const renderer = new this.renderer({
61
- appConfig: this.appConfig,
62
- assetProcessingService,
63
- resolvedIntegrationDependencies: this.resolvedIntegrationDependencies,
64
- runtimeOrigin: this.runtimeOrigin
65
- });
66
- if (this.hmrManager) {
67
- renderer.setHmrManager(this.hmrManager);
68
- }
69
- return renderer;
70
- }
71
- /**
72
- * Declares whether a component boundary targeting this integration should be
73
- * deferred through the marker pipeline.
74
- *
75
- * The default implementation never defers. Integrations that require deferred
76
- * subtree rendering should override this method and return `true` when their
77
- * boundary must be resolved during the marker graph stage.
78
- *
79
- * @param input Boundary metadata for the current render pass.
80
- * @returns `true` when the boundary should be deferred; otherwise `false`.
81
- */
82
- shouldDeferComponentBoundary(_input) {
83
- return false;
84
- }
85
- async setup() {
86
- if (this.integrationDependencies.length === 0) return;
87
- if (!this.assetProcessingService) throw new Error(INTEGRATION_PLUGIN_ERRORS.NOT_INITIALIZED_WITH_ASSET_SERVICE);
88
- this.resolvedIntegrationDependencies = await this.assetProcessingService.processDependencies(
89
- this.integrationDependencies,
90
- this.name
91
- );
92
- this.initializeRenderer();
93
- }
94
- async teardown() {
95
- }
96
- }
97
- export {
98
- INTEGRATION_PLUGIN_ERRORS,
99
- IntegrationPlugin
100
- };
@@ -1,82 +0,0 @@
1
- import type { EcoBuildPlugin } from '../build/build-types.js';
2
- import type { EcoPagesAppConfig, IClientBridge } from '../internal-types';
3
- import type { AssetDefinition } from '../services/asset-processing-service';
4
- export declare const PROCESSOR_ERRORS: {
5
- readonly CACHE_DIRECTORY_NOT_SET: "Cache directory not set in context";
6
- };
7
- export interface ProcessorWatchContext {
8
- path: string;
9
- bridge: IClientBridge;
10
- }
11
- export interface ProcessorWatchConfig {
12
- paths: string[];
13
- extensions?: string[];
14
- onCreate?: (ctx: ProcessorWatchContext) => Promise<void>;
15
- onChange?: (ctx: ProcessorWatchContext) => Promise<void>;
16
- onDelete?: (ctx: ProcessorWatchContext) => Promise<void>;
17
- onError?: (error: Error) => void;
18
- }
19
- export type ProcessorAssetKind = 'script' | 'stylesheet' | 'image';
20
- export type ProcessorExtensionPattern = string;
21
- export interface ProcessorAssetCapability {
22
- kind: ProcessorAssetKind;
23
- /**
24
- * Supported patterns:
25
- * - `*` (all extensions)
26
- * - `.css` or `css`
27
- * - `*.css`
28
- * - `*.{css,scss,sass}`
29
- *
30
- * Pattern matching is case-insensitive and trims surrounding spaces,
31
- * including grouped values (e.g. `*.{ CSS, ScSs }`).
32
- */
33
- extensions?: ProcessorExtensionPattern[];
34
- }
35
- export interface ProcessorConfig<TOptions = Record<string, unknown>> {
36
- name: string;
37
- description?: string;
38
- options?: TOptions;
39
- watch?: ProcessorWatchConfig;
40
- capabilities?: ProcessorAssetCapability[];
41
- }
42
- export interface ProcessorContext {
43
- config: EcoPagesAppConfig;
44
- rootDir: string;
45
- srcDir: string;
46
- distDir: string;
47
- cache?: string;
48
- }
49
- /**
50
- * Interface for processor build plugins
51
- * This is used to pass plugins to the build process directly from the processor
52
- * For instance it can become very handy when dealing with virtual modules that needs to be recognized by the bundler
53
- * i.e. @ecopages/image-processor
54
- */
55
- export declare abstract class Processor<TOptions = Record<string, unknown>> {
56
- readonly name: string;
57
- protected dependencies: AssetDefinition[];
58
- protected context?: ProcessorContext;
59
- protected options?: TOptions;
60
- protected watchConfig?: ProcessorWatchConfig;
61
- protected capabilities: ProcessorAssetCapability[];
62
- /** Plugins that are only used during the build process */
63
- abstract buildPlugins?: EcoBuildPlugin[];
64
- /** Plugins that are used during runtime for file processing */
65
- abstract plugins?: EcoBuildPlugin[];
66
- constructor(config: ProcessorConfig<TOptions>);
67
- setContext(appConfig: EcoPagesAppConfig): void;
68
- abstract setup(): Promise<void>;
69
- abstract teardown(): Promise<void>;
70
- abstract process(input: unknown, filePath?: string): Promise<unknown>;
71
- protected getCachePath(key: string): string;
72
- protected readCache<T>(key: string): Promise<T | null>;
73
- protected writeCache<T>(key: string, data: T): Promise<void>;
74
- getWatchConfig(): ProcessorWatchConfig | undefined;
75
- getDependencies(): AssetDefinition[];
76
- getName(): string;
77
- getAssetCapabilities(): ProcessorAssetCapability[];
78
- matchesFileFilter(_filepath: string): boolean;
79
- canProcessAsset(kind: ProcessorAssetKind, filepath?: string): boolean;
80
- private matchesCapabilityExtensions;
81
- private normalizeExtensionPattern;
82
- }
@@ -1,122 +0,0 @@
1
- import path from "node:path";
2
- import { fileSystem } from "@ecopages/file-system";
3
- import { GENERATED_BASE_PATHS } from "../constants";
4
- const PROCESSOR_ERRORS = {
5
- CACHE_DIRECTORY_NOT_SET: "Cache directory not set in context"
6
- };
7
- function resolveGeneratedPath(type, options) {
8
- const { root, module, subPath } = options;
9
- const parts = [root, GENERATED_BASE_PATHS[type], module, subPath].filter(Boolean);
10
- return path.join(...parts);
11
- }
12
- class Processor {
13
- name;
14
- dependencies = [];
15
- context;
16
- options;
17
- watchConfig;
18
- capabilities = [];
19
- constructor(config) {
20
- this.name = config.name;
21
- this.options = config.options;
22
- this.watchConfig = config.watch;
23
- this.capabilities = config.capabilities ?? [];
24
- }
25
- setContext(appConfig) {
26
- const cachePath = resolveGeneratedPath("cache", {
27
- root: appConfig.absolutePaths.distDir,
28
- module: this.name
29
- });
30
- fileSystem.ensureDir(cachePath);
31
- this.context = {
32
- config: appConfig,
33
- rootDir: appConfig.rootDir,
34
- srcDir: appConfig.absolutePaths.srcDir,
35
- distDir: appConfig.absolutePaths.distDir,
36
- cache: cachePath
37
- };
38
- }
39
- getCachePath(key) {
40
- return `${this.context?.cache}/${key}`;
41
- }
42
- async readCache(key) {
43
- const cachePath = this.getCachePath(key);
44
- try {
45
- const data = await fileSystem.readFile(cachePath);
46
- return JSON.parse(data);
47
- } catch {
48
- return null;
49
- }
50
- }
51
- async writeCache(key, data) {
52
- if (!this.context?.cache) {
53
- throw new Error(PROCESSOR_ERRORS.CACHE_DIRECTORY_NOT_SET);
54
- }
55
- const cachePath = this.getCachePath(key);
56
- fileSystem.write(cachePath, JSON.stringify(data, null, 2));
57
- }
58
- getWatchConfig() {
59
- return this.watchConfig;
60
- }
61
- getDependencies() {
62
- return this.dependencies;
63
- }
64
- getName() {
65
- return this.name;
66
- }
67
- getAssetCapabilities() {
68
- return this.capabilities;
69
- }
70
- matchesFileFilter(_filepath) {
71
- return true;
72
- }
73
- canProcessAsset(kind, filepath) {
74
- const capabilities = this.getAssetCapabilities();
75
- if (capabilities.length === 0) {
76
- return false;
77
- }
78
- const matchingKind = capabilities.filter((capability) => capability.kind === kind);
79
- if (matchingKind.length === 0) {
80
- return false;
81
- }
82
- if (!filepath) {
83
- return true;
84
- }
85
- return matchingKind.some((capability) => this.matchesCapabilityExtensions(filepath, capability.extensions));
86
- }
87
- matchesCapabilityExtensions(filepath, extensions) {
88
- if (!extensions || extensions.length === 0) {
89
- return true;
90
- }
91
- const normalizedExt = path.extname(filepath).toLowerCase();
92
- return extensions.some((rawPattern) => {
93
- const pattern = this.normalizeExtensionPattern(rawPattern);
94
- if (!pattern) {
95
- return false;
96
- }
97
- if (pattern === "*") {
98
- return true;
99
- }
100
- const groupedMatch = pattern.match(/^\*\.\{(.+)\}$/);
101
- if (groupedMatch) {
102
- const groupItems = groupedMatch[1].split(",").map((item) => this.normalizeExtensionPattern(item)).filter(Boolean);
103
- return groupItems.some((item) => normalizedExt === item || normalizedExt === `.${item}`);
104
- }
105
- if (pattern.startsWith("*")) {
106
- const suffix = pattern.slice(1);
107
- return normalizedExt.endsWith(suffix);
108
- }
109
- if (pattern.startsWith(".")) {
110
- return normalizedExt === pattern;
111
- }
112
- return normalizedExt === `.${pattern}`;
113
- });
114
- }
115
- normalizeExtensionPattern(rawPattern) {
116
- return rawPattern.trim().toLowerCase();
117
- }
118
- }
119
- export {
120
- PROCESSOR_ERRORS,
121
- Processor
122
- };