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