@ecopages/core 0.2.0-alpha.54 → 0.2.0-alpha.55

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 (594) hide show
  1. package/package.json +196 -91
  2. package/src/adapters/abstract/application-adapter.d.ts +194 -0
  3. package/src/adapters/abstract/application-adapter.js +121 -0
  4. package/src/adapters/abstract/router-adapter.d.ts +26 -0
  5. package/src/adapters/abstract/router-adapter.js +5 -0
  6. package/src/adapters/abstract/server-adapter.d.ts +69 -0
  7. package/src/adapters/abstract/server-adapter.js +15 -0
  8. package/src/adapters/bun/client-bridge.d.ts +34 -0
  9. package/src/adapters/bun/client-bridge.js +48 -0
  10. package/src/adapters/bun/create-app.d.ts +60 -0
  11. package/src/adapters/bun/create-app.js +140 -0
  12. package/src/adapters/bun/hmr-manager.d.ts +47 -0
  13. package/src/adapters/bun/hmr-manager.js +58 -0
  14. package/src/adapters/bun/index.d.ts +2 -0
  15. package/src/adapters/bun/index.js +8 -0
  16. package/src/adapters/bun/runtime-host.d.ts +52 -0
  17. package/src/adapters/bun/runtime-host.js +56 -0
  18. package/src/adapters/bun/server-adapter.d.ts +223 -0
  19. package/src/adapters/bun/server-adapter.js +450 -0
  20. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  21. package/src/adapters/bun/static-preview-host.js +45 -0
  22. package/src/adapters/create-app.d.ts +20 -0
  23. package/src/adapters/create-app.js +66 -0
  24. package/src/adapters/index.d.ts +2 -0
  25. package/src/adapters/index.js +8 -0
  26. package/src/adapters/node/create-app.d.ts +24 -0
  27. package/src/adapters/node/create-app.js +92 -0
  28. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  29. package/src/adapters/node/http-request-bridge.js +118 -0
  30. package/src/adapters/node/node-client-bridge.d.ts +26 -0
  31. package/src/adapters/node/node-client-bridge.js +66 -0
  32. package/src/adapters/node/node-hmr-manager.d.ts +52 -0
  33. package/src/adapters/node/node-hmr-manager.js +49 -0
  34. package/src/adapters/node/runtime-host.d.ts +57 -0
  35. package/src/adapters/node/runtime-host.js +92 -0
  36. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  37. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  38. package/src/adapters/node/server-adapter.d.ts +138 -0
  39. package/src/adapters/node/server-adapter.js +313 -0
  40. package/src/adapters/node/static-content-server.d.ts +60 -0
  41. package/src/adapters/node/static-content-server.js +194 -0
  42. package/src/adapters/node/static-preview-host.d.ts +55 -0
  43. package/src/adapters/node/static-preview-host.js +68 -0
  44. package/src/adapters/shared/api-response.d.ts +52 -0
  45. package/src/adapters/shared/api-response.js +96 -0
  46. package/src/adapters/shared/application-adapter.d.ts +18 -0
  47. package/src/adapters/shared/application-adapter.js +90 -0
  48. package/src/adapters/shared/define-api-handler.d.ts +25 -0
  49. package/src/adapters/shared/define-api-handler.js +15 -0
  50. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  51. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  52. package/src/adapters/shared/explicit-static-route-matcher.d.ts +41 -0
  53. package/src/adapters/shared/explicit-static-route-matcher.js +101 -0
  54. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +62 -0
  55. package/src/adapters/shared/file-route-middleware-pipeline.js +90 -0
  56. package/src/adapters/shared/fs-server-response-factory.d.ts +23 -0
  57. package/src/adapters/shared/fs-server-response-factory.js +81 -0
  58. package/src/adapters/shared/fs-server-response-matcher.d.ts +75 -0
  59. package/src/adapters/shared/fs-server-response-matcher.js +186 -0
  60. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  61. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  62. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  63. package/src/adapters/shared/hmr-html-response.js +33 -0
  64. package/src/adapters/shared/render-context.d.ts +16 -0
  65. package/src/adapters/shared/render-context.js +93 -0
  66. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  67. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  68. package/src/adapters/shared/runtime-host.d.ts +12 -0
  69. package/src/adapters/shared/runtime-host.js +0 -0
  70. package/src/adapters/shared/server-adapter.d.ts +108 -0
  71. package/src/adapters/shared/server-adapter.js +436 -0
  72. package/src/adapters/shared/server-route-handler.d.ts +89 -0
  73. package/src/adapters/shared/server-route-handler.js +111 -0
  74. package/src/adapters/shared/server-static-builder.d.ts +71 -0
  75. package/src/adapters/shared/server-static-builder.js +100 -0
  76. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  77. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  78. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  79. package/src/adapters/shared/static-preview-host.js +0 -0
  80. package/src/build/browser-runtime-manifest.d.ts +31 -0
  81. package/src/build/browser-runtime-manifest.js +61 -0
  82. package/src/build/{browser-runtime-plugin-helpers.ts → browser-runtime-plugin-helpers.d.ts} +2 -13
  83. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  84. package/src/build/browser-runtime-plugin.d.ts +78 -0
  85. package/src/build/browser-runtime-plugin.js +172 -0
  86. package/src/build/build-adapter.d.ts +504 -0
  87. package/src/build/build-adapter.js +240 -0
  88. package/src/build/build-manifest.d.ts +33 -0
  89. package/src/build/build-manifest.js +49 -0
  90. package/src/build/build-types.d.ts +57 -0
  91. package/src/build/build-types.js +0 -0
  92. package/src/build/rolldown-build-adapter.d.ts +32 -0
  93. package/src/build/rolldown-build-adapter.js +260 -0
  94. package/src/build/rolldown-plugin-bridge.d.ts +50 -0
  95. package/src/build/rolldown-plugin-bridge.js +194 -0
  96. package/src/build/{runtime-build-executor.ts → runtime-build-executor.d.ts} +3 -19
  97. package/src/build/runtime-build-executor.js +19 -0
  98. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  99. package/src/build/runtime-build-output-normalizer.js +111 -0
  100. package/src/build/serialized-build-executor.d.ts +64 -0
  101. package/src/build/serialized-build-executor.js +63 -0
  102. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  103. package/src/build/server-side-css-shim-plugin.js +35 -0
  104. package/src/cache/{index.ts → index.d.ts} +1 -1
  105. package/src/cache/index.js +6 -0
  106. package/src/cache/module-parse-cache.d.ts +65 -0
  107. package/src/cache/module-parse-cache.js +75 -0
  108. package/src/config/config-builder.d.ts +252 -0
  109. package/src/config/config-builder.js +589 -0
  110. package/src/config/{constants.ts → constants.d.ts} +13 -22
  111. package/src/config/constants.js +25 -0
  112. package/src/dev/host-runtime.d.ts +10 -0
  113. package/src/dev/host-runtime.js +24 -0
  114. package/src/dev/sc-server.d.ts +30 -0
  115. package/src/dev/sc-server.js +111 -0
  116. package/src/eco/eco.browser.d.ts +2 -0
  117. package/src/eco/eco.browser.js +88 -0
  118. package/src/eco/eco.d.ts +9 -0
  119. package/src/eco/eco.js +119 -0
  120. package/src/eco/eco.types.d.ts +230 -0
  121. package/src/eco/eco.types.js +0 -0
  122. package/src/eco/eco.utils.d.ts +1 -0
  123. package/src/eco/eco.utils.js +10 -0
  124. package/src/eco/global-injector-map.d.ts +16 -0
  125. package/src/eco/global-injector-map.js +80 -0
  126. package/src/eco/lazy-injector-map.d.ts +8 -0
  127. package/src/eco/lazy-injector-map.js +70 -0
  128. package/src/eco/module-dependencies.d.ts +18 -0
  129. package/src/eco/module-dependencies.js +49 -0
  130. package/src/errors/http-error.d.ts +31 -0
  131. package/src/errors/http-error.js +50 -0
  132. package/src/errors/index.d.ts +3 -0
  133. package/src/errors/index.js +6 -0
  134. package/src/errors/locals-access-error.d.ts +4 -0
  135. package/src/errors/locals-access-error.js +9 -0
  136. package/src/global/app-logger.d.ts +2 -0
  137. package/src/global/app-logger.js +6 -0
  138. package/src/hmr/client/hmr-runtime.d.ts +5 -0
  139. package/src/hmr/client/hmr-runtime.js +117 -0
  140. package/src/hmr/hmr-strategy.d.ts +162 -0
  141. package/src/hmr/hmr-strategy.js +44 -0
  142. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  143. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  144. package/src/hmr/hmr.test.e2e.d.ts +1 -0
  145. package/src/hmr/hmr.test.e2e.js +43 -0
  146. package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
  147. package/src/hmr/strategies/default-hmr-strategy.js +34 -0
  148. package/src/hmr/strategies/js-hmr-strategy.d.ts +134 -0
  149. package/src/hmr/strategies/js-hmr-strategy.js +173 -0
  150. package/src/index.browser.d.ts +3 -0
  151. package/src/index.browser.js +4 -0
  152. package/src/index.d.ts +6 -0
  153. package/src/index.js +21 -0
  154. package/src/integrations/ghtml/ghtml-renderer.d.ts +16 -0
  155. package/src/integrations/ghtml/ghtml-renderer.js +57 -0
  156. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  157. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  158. package/src/integrations/ghtml/ghtml.plugin.d.ts +16 -0
  159. package/src/integrations/ghtml/ghtml.plugin.js +20 -0
  160. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  161. package/src/plugins/alias-resolver-cache.js +106 -0
  162. package/src/plugins/alias-resolver-plugin.d.ts +6 -0
  163. package/src/plugins/alias-resolver-plugin.js +65 -0
  164. package/src/plugins/eco-component-meta-plugin.d.ts +108 -0
  165. package/src/plugins/eco-component-meta-plugin.js +175 -0
  166. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  167. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  168. package/src/plugins/integration-plugin.d.ts +230 -0
  169. package/src/plugins/integration-plugin.js +201 -0
  170. package/src/plugins/processor.d.ts +97 -0
  171. package/src/plugins/processor.js +141 -0
  172. package/src/plugins/{runtime-capability.ts → runtime-capability.d.ts} +3 -8
  173. package/src/plugins/runtime-capability.js +0 -0
  174. package/src/plugins/source-transform.d.ts +46 -0
  175. package/src/plugins/source-transform.js +71 -0
  176. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  177. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  178. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  179. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  180. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  181. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  182. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  183. package/src/route-renderer/orchestration/integration-renderer.js +991 -0
  184. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  185. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  186. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  187. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  188. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  189. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  190. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  191. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  192. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  193. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  194. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  195. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  196. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  197. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  198. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  199. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  200. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  201. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  202. package/src/route-renderer/page-loading/dependency-resolver.d.ts +35 -0
  203. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  204. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  205. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  206. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  207. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  208. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  209. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  210. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  211. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  212. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  213. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  214. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  215. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  216. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  217. package/src/route-renderer/page-loading/page-module-loader.js +127 -0
  218. package/src/route-renderer/route-renderer.d.ts +69 -0
  219. package/src/route-renderer/route-renderer.js +80 -0
  220. package/src/router/client/link-intent.js +34 -0
  221. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  222. package/src/router/client/link-intent.test.browser.js +43 -0
  223. package/src/router/client/navigation-coordinator.d.ts +169 -0
  224. package/src/router/client/navigation-coordinator.js +215 -0
  225. package/src/router/server/route-registry.d.ts +78 -0
  226. package/src/router/server/route-registry.js +262 -0
  227. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  228. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  229. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  230. package/src/services/assets/asset-processing-service/asset-processing.service.js +285 -0
  231. package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
  232. package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
  233. package/src/services/assets/asset-processing-service/assets.types.d.ts +103 -0
  234. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  235. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +57 -0
  236. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  237. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  238. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  239. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  240. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  241. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  242. package/src/services/assets/asset-processing-service/index.js +6 -0
  243. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  244. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  245. package/src/services/assets/asset-processing-service/{processor.interface.ts → processor.interface.d.ts} +5 -10
  246. package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
  247. package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
  248. package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
  249. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
  250. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +65 -0
  251. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  252. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  253. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  254. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  255. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +6 -0
  256. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +120 -0
  257. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +9 -0
  258. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +97 -0
  259. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  260. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  261. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +8 -0
  262. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  263. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
  264. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +69 -0
  265. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  266. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  267. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  268. package/src/services/assets/browser-bundle.service.js +41 -0
  269. package/src/services/cache/cache.types.d.ts +107 -0
  270. package/src/services/cache/cache.types.js +0 -0
  271. package/src/services/cache/index.d.ts +7 -0
  272. package/src/services/cache/index.js +7 -0
  273. package/src/services/cache/memory-cache-store.d.ts +42 -0
  274. package/src/services/cache/memory-cache-store.js +98 -0
  275. package/src/services/cache/page-cache-service.d.ts +70 -0
  276. package/src/services/cache/page-cache-service.js +152 -0
  277. package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
  278. package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
  279. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  280. package/src/services/html/html-rewriter-provider.service.js +68 -0
  281. package/src/services/html/html-transformer.service.d.ts +96 -0
  282. package/src/services/html/html-transformer.service.js +287 -0
  283. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  284. package/src/services/invalidation/development-invalidation.service.js +190 -0
  285. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  286. package/src/services/module-loading/app-module-loader.service.js +0 -0
  287. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  288. package/src/services/module-loading/app-server-module-transpiler.service.js +130 -0
  289. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  290. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  291. package/src/services/module-loading/{module-loading-types.ts → module-loading-types.d.ts} +0 -1
  292. package/src/services/module-loading/module-loading-types.js +0 -0
  293. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  294. package/src/services/module-loading/page-module-import.service.js +193 -0
  295. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  296. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  297. package/src/services/module-loading/source-module-support.d.ts +5 -0
  298. package/src/services/module-loading/source-module-support.js +8 -0
  299. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  300. package/src/services/runtime-state/dev-graph.service.js +162 -0
  301. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  302. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  303. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  304. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  305. package/src/services/validation/schema-validation-service.d.ts +122 -0
  306. package/src/services/validation/schema-validation-service.js +101 -0
  307. package/src/services/validation/{standard-schema.types.ts → standard-schema.types.d.ts} +17 -20
  308. package/src/services/validation/standard-schema.types.js +0 -0
  309. package/src/static-site-generator/static-site-generator.d.ts +104 -0
  310. package/src/static-site-generator/static-site-generator.js +316 -0
  311. package/src/types/internal-types.d.ts +232 -0
  312. package/src/types/internal-types.js +0 -0
  313. package/src/types/public-types.d.ts +1307 -0
  314. package/src/types/public-types.js +0 -0
  315. package/src/utils/deep-merge.d.ts +14 -0
  316. package/src/utils/deep-merge.js +32 -0
  317. package/src/utils/hash.d.ts +1 -0
  318. package/src/utils/hash.js +7 -0
  319. package/src/utils/html-escaping.d.ts +7 -0
  320. package/src/utils/html-escaping.js +6 -0
  321. package/src/utils/html.js +4 -0
  322. package/src/utils/invariant.d.ts +5 -0
  323. package/src/utils/invariant.js +11 -0
  324. package/src/utils/locals-utils.d.ts +15 -0
  325. package/src/utils/locals-utils.js +24 -0
  326. package/src/utils/parse-cli-args.d.ts +27 -0
  327. package/src/utils/parse-cli-args.js +62 -0
  328. package/src/utils/path-utils.module.d.ts +5 -0
  329. package/src/utils/path-utils.module.js +14 -0
  330. package/src/utils/resolve-work-dir.d.ts +11 -0
  331. package/src/utils/resolve-work-dir.js +31 -0
  332. package/src/utils/runtime.d.ts +11 -0
  333. package/src/utils/runtime.js +40 -0
  334. package/src/utils/server-utils.module.d.ts +19 -0
  335. package/src/utils/server-utils.module.js +56 -0
  336. package/src/watchers/project-watcher.d.ts +136 -0
  337. package/src/watchers/project-watcher.js +275 -0
  338. package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
  339. package/src/watchers/project-watcher.test-helpers.js +52 -0
  340. package/src/adapters/abstract/application-adapter.test.ts +0 -218
  341. package/src/adapters/abstract/application-adapter.ts +0 -379
  342. package/src/adapters/abstract/router-adapter.ts +0 -30
  343. package/src/adapters/abstract/server-adapter.ts +0 -79
  344. package/src/adapters/bun/client-bridge.ts +0 -62
  345. package/src/adapters/bun/create-app.ts +0 -214
  346. package/src/adapters/bun/hmr-manager.test.ts +0 -265
  347. package/src/adapters/bun/hmr-manager.ts +0 -88
  348. package/src/adapters/bun/index.ts +0 -2
  349. package/src/adapters/bun/runtime-host.ts +0 -76
  350. package/src/adapters/bun/server-adapter.ts +0 -605
  351. package/src/adapters/bun/static-preview-host.ts +0 -70
  352. package/src/adapters/create-app.test.ts +0 -10
  353. package/src/adapters/create-app.ts +0 -91
  354. package/src/adapters/index.ts +0 -2
  355. package/src/adapters/node/create-app.test.ts +0 -76
  356. package/src/adapters/node/create-app.ts +0 -116
  357. package/src/adapters/node/http-request-bridge.test.ts +0 -146
  358. package/src/adapters/node/http-request-bridge.ts +0 -176
  359. package/src/adapters/node/node-client-bridge.test.ts +0 -198
  360. package/src/adapters/node/node-client-bridge.ts +0 -79
  361. package/src/adapters/node/node-hmr-manager.test.ts +0 -374
  362. package/src/adapters/node/node-hmr-manager.ts +0 -72
  363. package/src/adapters/node/runtime-host.test.ts +0 -49
  364. package/src/adapters/node/runtime-host.ts +0 -113
  365. package/src/adapters/node/server-adapter-dependencies.ts +0 -28
  366. package/src/adapters/node/server-adapter.test.ts +0 -84
  367. package/src/adapters/node/server-adapter.ts +0 -423
  368. package/src/adapters/node/static-content-server.test.ts +0 -60
  369. package/src/adapters/node/static-content-server.ts +0 -239
  370. package/src/adapters/node/static-preview-host.test.ts +0 -89
  371. package/src/adapters/node/static-preview-host.ts +0 -101
  372. package/src/adapters/shared/api-response.test.ts +0 -97
  373. package/src/adapters/shared/api-response.ts +0 -104
  374. package/src/adapters/shared/application-adapter.ts +0 -199
  375. package/src/adapters/shared/define-api-handler.ts +0 -66
  376. package/src/adapters/shared/explicit-static-render-preparation.ts +0 -58
  377. package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
  378. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -131
  379. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -85
  380. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -118
  381. package/src/adapters/shared/fs-server-response-factory.test.ts +0 -176
  382. package/src/adapters/shared/fs-server-response-factory.ts +0 -96
  383. package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -311
  384. package/src/adapters/shared/fs-server-response-matcher.ts +0 -240
  385. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  386. package/src/adapters/shared/hmr-html-response.ts +0 -54
  387. package/src/adapters/shared/hmr-manager.contract.test.ts +0 -228
  388. package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -229
  389. package/src/adapters/shared/render-context.test.ts +0 -244
  390. package/src/adapters/shared/render-context.ts +0 -161
  391. package/src/adapters/shared/runtime-app-bootstrap.test.ts +0 -96
  392. package/src/adapters/shared/runtime-app-bootstrap.ts +0 -72
  393. package/src/adapters/shared/runtime-host.ts +0 -11
  394. package/src/adapters/shared/server-adapter.test.ts +0 -130
  395. package/src/adapters/shared/server-adapter.ts +0 -571
  396. package/src/adapters/shared/server-route-handler.test.ts +0 -112
  397. package/src/adapters/shared/server-route-handler.ts +0 -153
  398. package/src/adapters/shared/server-static-builder.test.ts +0 -338
  399. package/src/adapters/shared/server-static-builder.ts +0 -170
  400. package/src/adapters/shared/shared-hmr-manager.ts +0 -298
  401. package/src/adapters/shared/static-preview-host.ts +0 -12
  402. package/src/build/browser-runtime-manifest.test.ts +0 -121
  403. package/src/build/browser-runtime-manifest.ts +0 -105
  404. package/src/build/browser-runtime-plugin-helpers.test.ts +0 -49
  405. package/src/build/browser-runtime-plugin.test.ts +0 -256
  406. package/src/build/browser-runtime-plugin.ts +0 -306
  407. package/src/build/build-adapter.test.ts +0 -463
  408. package/src/build/build-adapter.ts +0 -788
  409. package/src/build/build-manifest.ts +0 -79
  410. package/src/build/build-types.ts +0 -83
  411. package/src/build/rolldown-build-adapter.test.ts +0 -352
  412. package/src/build/rolldown-build-adapter.ts +0 -363
  413. package/src/build/rolldown-plugin-bridge.test.ts +0 -256
  414. package/src/build/rolldown-plugin-bridge.ts +0 -309
  415. package/src/build/runtime-build-executor.test.ts +0 -130
  416. package/src/build/runtime-build-output-normalizer.ts +0 -137
  417. package/src/build/serialized-build-executor.test.ts +0 -96
  418. package/src/build/serialized-build-executor.ts +0 -90
  419. package/src/build/server-side-css-shim-plugin.ts +0 -77
  420. package/src/cache/module-parse-cache.test.ts +0 -73
  421. package/src/cache/module-parse-cache.ts +0 -137
  422. package/src/config/config-builder.test.ts +0 -456
  423. package/src/config/config-builder.ts +0 -728
  424. package/src/config/config-builder.typecheck.test.ts +0 -96
  425. package/src/dev/host-runtime.ts +0 -34
  426. package/src/dev/sc-server.ts +0 -143
  427. package/src/eco/eco.browser.test.ts +0 -43
  428. package/src/eco/eco.browser.ts +0 -137
  429. package/src/eco/eco.test.ts +0 -781
  430. package/src/eco/eco.ts +0 -262
  431. package/src/eco/eco.types.ts +0 -293
  432. package/src/eco/eco.utils.test.ts +0 -219
  433. package/src/eco/eco.utils.ts +0 -5
  434. package/src/eco/global-injector-map.test.ts +0 -42
  435. package/src/eco/global-injector-map.ts +0 -112
  436. package/src/eco/lazy-injector-map.test.ts +0 -66
  437. package/src/eco/lazy-injector-map.ts +0 -120
  438. package/src/eco/module-dependencies.test.ts +0 -30
  439. package/src/eco/module-dependencies.ts +0 -75
  440. package/src/errors/http-error.test.ts +0 -134
  441. package/src/errors/http-error.ts +0 -72
  442. package/src/errors/index.ts +0 -3
  443. package/src/errors/locals-access-error.ts +0 -7
  444. package/src/global/app-logger.ts +0 -4
  445. package/src/global/utils.test.ts +0 -12
  446. 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
  447. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  448. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  449. package/src/hmr/client/hmr-runtime.ts +0 -162
  450. package/src/hmr/hmr-strategy.test.ts +0 -124
  451. package/src/hmr/hmr-strategy.ts +0 -177
  452. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  453. package/src/hmr/hmr.test.e2e.ts +0 -66
  454. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  455. package/src/hmr/strategies/js-hmr-strategy.test.ts +0 -344
  456. package/src/hmr/strategies/js-hmr-strategy.ts +0 -307
  457. package/src/index.browser.ts +0 -3
  458. package/src/index.ts +0 -15
  459. package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -253
  460. package/src/integrations/ghtml/ghtml-renderer.ts +0 -87
  461. package/src/integrations/ghtml/ghtml.constants.ts +0 -1
  462. package/src/integrations/ghtml/ghtml.plugin.ts +0 -28
  463. package/src/plugins/alias-resolver-cache.test.ts +0 -110
  464. package/src/plugins/alias-resolver-cache.ts +0 -145
  465. package/src/plugins/alias-resolver-plugin.test.ts +0 -41
  466. package/src/plugins/alias-resolver-plugin.ts +0 -75
  467. package/src/plugins/eco-component-meta-plugin.test.ts +0 -421
  468. package/src/plugins/eco-component-meta-plugin.ts +0 -518
  469. package/src/plugins/foreign-jsx-override-plugin.test.ts +0 -65
  470. package/src/plugins/foreign-jsx-override-plugin.ts +0 -76
  471. package/src/plugins/integration-plugin.test.ts +0 -151
  472. package/src/plugins/integration-plugin.ts +0 -344
  473. package/src/plugins/processor.test.ts +0 -148
  474. package/src/plugins/processor.ts +0 -257
  475. package/src/plugins/source-transform.test.ts +0 -82
  476. package/src/plugins/source-transform.ts +0 -123
  477. package/src/route-renderer/orchestration/component-render-context.ts +0 -338
  478. package/src/route-renderer/orchestration/declared-ownership-graph.ts +0 -62
  479. package/src/route-renderer/orchestration/foreign-subtree-execution.service.ts +0 -431
  480. package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -2251
  481. package/src/route-renderer/orchestration/integration-renderer.ts +0 -1384
  482. package/src/route-renderer/orchestration/ownership-planning.service.ts +0 -97
  483. package/src/route-renderer/orchestration/ownership-validation.service.ts +0 -76
  484. package/src/route-renderer/orchestration/processed-asset-dedupe.ts +0 -29
  485. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.test.ts +0 -435
  486. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts +0 -310
  487. package/src/route-renderer/orchestration/render-output.utils.ts +0 -310
  488. package/src/route-renderer/orchestration/route-render-orchestrator.prepare-render-options.test.ts +0 -1365
  489. package/src/route-renderer/orchestration/route-render-orchestrator.test.ts +0 -267
  490. package/src/route-renderer/orchestration/route-render-orchestrator.ts +0 -879
  491. package/src/route-renderer/orchestration/template-serialization.test.ts +0 -110
  492. package/src/route-renderer/orchestration/template-serialization.ts +0 -117
  493. package/src/route-renderer/page-loading/component-dependency-collection.ts +0 -202
  494. package/src/route-renderer/page-loading/declared-asset-collection.ts +0 -153
  495. package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -761
  496. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -144
  497. package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +0 -75
  498. package/src/route-renderer/page-loading/lazy-entry-collection.ts +0 -167
  499. package/src/route-renderer/page-loading/lazy-trigger-planning.ts +0 -74
  500. package/src/route-renderer/page-loading/module-declaration-aggregation.ts +0 -60
  501. package/src/route-renderer/page-loading/module-declaration-scripts.ts +0 -16
  502. package/src/route-renderer/page-loading/page-dependency-bundling.ts +0 -244
  503. package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -183
  504. package/src/route-renderer/page-loading/page-module-loader.ts +0 -184
  505. package/src/route-renderer/route-renderer.ts +0 -133
  506. package/src/router/client/link-intent.test.browser.ts +0 -51
  507. package/src/router/client/link-intent.ts +0 -92
  508. package/src/router/client/navigation-coordinator.test.ts +0 -237
  509. package/src/router/client/navigation-coordinator.ts +0 -453
  510. package/src/router/server/route-registry.test.ts +0 -176
  511. package/src/router/server/route-registry.ts +0 -382
  512. package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +0 -66
  513. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -473
  514. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -344
  515. package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
  516. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  517. package/src/services/assets/asset-processing-service/assets.types.ts +0 -128
  518. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -74
  519. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -98
  520. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
  521. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  522. package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +0 -104
  523. package/src/services/assets/asset-processing-service/index.ts +0 -6
  524. package/src/services/assets/asset-processing-service/page-package.test.ts +0 -135
  525. package/src/services/assets/asset-processing-service/page-package.ts +0 -103
  526. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  527. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
  528. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -83
  529. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -173
  530. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  531. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +0 -188
  532. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -138
  533. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -326
  534. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -116
  535. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -270
  536. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -145
  537. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -261
  538. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -72
  539. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -83
  540. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +0 -65
  541. package/src/services/assets/browser-bundle.service.test.ts +0 -66
  542. package/src/services/assets/browser-bundle.service.ts +0 -109
  543. package/src/services/cache/cache.types.ts +0 -126
  544. package/src/services/cache/index.ts +0 -18
  545. package/src/services/cache/memory-cache-store.test.ts +0 -225
  546. package/src/services/cache/memory-cache-store.ts +0 -130
  547. package/src/services/cache/page-cache-service.test.ts +0 -175
  548. package/src/services/cache/page-cache-service.ts +0 -202
  549. package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
  550. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  551. package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
  552. package/src/services/html/html-rewriter-provider.service.ts +0 -105
  553. package/src/services/html/html-transformer.service.test.ts +0 -544
  554. package/src/services/html/html-transformer.service.ts +0 -369
  555. package/src/services/invalidation/development-invalidation.service.test.ts +0 -87
  556. package/src/services/invalidation/development-invalidation.service.ts +0 -262
  557. package/src/services/module-loading/app-module-loader.service.ts +0 -9
  558. package/src/services/module-loading/app-server-module-transpiler.service.test.ts +0 -297
  559. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -168
  560. package/src/services/module-loading/host-module-loader-registry.ts +0 -15
  561. package/src/services/module-loading/page-module-import.service.test.ts +0 -652
  562. package/src/services/module-loading/page-module-import.service.ts +0 -302
  563. package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -242
  564. package/src/services/module-loading/server-module-transpiler.service.ts +0 -104
  565. package/src/services/module-loading/source-module-support.ts +0 -19
  566. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  567. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  568. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  569. package/src/services/validation/schema-validation-service.test.ts +0 -223
  570. package/src/services/validation/schema-validation-service.ts +0 -204
  571. package/src/static-site-generator/static-site-generator.test.ts +0 -408
  572. package/src/static-site-generator/static-site-generator.ts +0 -445
  573. package/src/types/internal-types.ts +0 -243
  574. package/src/types/public-types.ts +0 -1508
  575. package/src/utils/deep-merge.test.ts +0 -114
  576. package/src/utils/deep-merge.ts +0 -47
  577. package/src/utils/hash.ts +0 -5
  578. package/src/utils/html-escaping.ts +0 -9
  579. package/src/utils/invariant.test.ts +0 -22
  580. package/src/utils/invariant.ts +0 -15
  581. package/src/utils/locals-utils.ts +0 -37
  582. package/src/utils/parse-cli-args.test.ts +0 -69
  583. package/src/utils/parse-cli-args.ts +0 -105
  584. package/src/utils/path-utils.module.ts +0 -14
  585. package/src/utils/path-utils.test.ts +0 -15
  586. package/src/utils/resolve-work-dir.ts +0 -45
  587. package/src/utils/runtime.ts +0 -44
  588. package/src/utils/server-utils.module.ts +0 -67
  589. package/src/utils/server-utils.test.ts +0 -38
  590. package/src/watchers/project-watcher.integration.test.ts +0 -337
  591. package/src/watchers/project-watcher.test-helpers.ts +0 -42
  592. package/src/watchers/project-watcher.test.ts +0 -768
  593. package/src/watchers/project-watcher.ts +0 -357
  594. /package/src/utils/{html.ts → html.d.ts} +0 -0
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Per-plugin cache for `@/...` alias resolution.
3
+ *
4
+ * @remarks
5
+ * The `ecopages-alias-resolver` plugin resolves project aliases like
6
+ * `@/components/Button` to concrete file paths under the app's `srcDir`.
7
+ * Each resolution can trigger up to 22 `existsSync` calls and (when
8
+ * the resolved path is a barrel) a `readFileSync` to detect
9
+ * `export * from './...'` forwarding.
10
+ *
11
+ * This cache memoizes the result keyed by `(srcDir, specifier)`. It is
12
+ * process-local and not currently invalidated by the file watcher —
13
+ * `srcDir` contents are assumed to be stable for the lifetime of the
14
+ * process.
15
+ */
16
+ export declare class AliasResolverCache {
17
+ private readonly entries;
18
+ private readonly maxEntries;
19
+ private hits;
20
+ private misses;
21
+ constructor(maxEntries?: number);
22
+ /**
23
+ * Look up a previously-computed resolution for `(srcDir, specifier)`.
24
+ *
25
+ * Returns `{ hit: true, resolved }` on cache hit (resolved may be
26
+ * `undefined` for an unresolvable specifier), or `{ hit: false }` on
27
+ * miss. The caller is responsible for re-running the resolver and
28
+ * calling `set` to store the new entry.
29
+ */
30
+ get(srcDir: string, specifier: string): {
31
+ hit: true;
32
+ resolved: string | undefined;
33
+ } | {
34
+ hit: false;
35
+ };
36
+ /**
37
+ * Store a resolution result.
38
+ *
39
+ * Pass `undefined` for `resolved` to memoize the negative case
40
+ * (specifier did not resolve) and avoid repeating the FS walk on
41
+ * every `@/...` import.
42
+ */
43
+ set(srcDir: string, specifier: string, resolved: string | undefined): void;
44
+ /**
45
+ * Drop all entries whose `srcDir` is under `rootDir`. Use this from
46
+ * the file watcher when files are added or removed under the app's
47
+ * source tree.
48
+ *
49
+ * Path comparison is path-aware (handles both POSIX `/` and
50
+ * Windows `\` separators) via `path.relative` so cached entries
51
+ * normalized on one platform still match the watcher's `rootDir`
52
+ * on another. Without this, a Windows build that sees
53
+ * `entry.srcDir === 'C:\app\src'` would miss
54
+ * `entry.srcDir.startsWith('C:/app/src/')` and leave stale entries.
55
+ */
56
+ invalidateUnder(rootDir: string): number;
57
+ /** Clear all entries. */
58
+ clear(): void;
59
+ /** Current cache size. */
60
+ get size(): number;
61
+ /** Hit/miss counters for observability. */
62
+ stats(): {
63
+ hits: number;
64
+ misses: number;
65
+ size: number;
66
+ hitRate: number;
67
+ };
68
+ }
@@ -0,0 +1,106 @@
1
+ import path from "node:path";
2
+ const DEFAULT_MAX_ENTRIES = 2e3;
3
+ class AliasResolverCache {
4
+ entries = /* @__PURE__ */ new Map();
5
+ maxEntries;
6
+ hits = 0;
7
+ misses = 0;
8
+ constructor(maxEntries = DEFAULT_MAX_ENTRIES) {
9
+ if (maxEntries <= 0) {
10
+ throw new Error(`AliasResolverCache: maxEntries must be > 0, got ${maxEntries}`);
11
+ }
12
+ this.maxEntries = maxEntries;
13
+ }
14
+ /**
15
+ * Look up a previously-computed resolution for `(srcDir, specifier)`.
16
+ *
17
+ * Returns `{ hit: true, resolved }` on cache hit (resolved may be
18
+ * `undefined` for an unresolvable specifier), or `{ hit: false }` on
19
+ * miss. The caller is responsible for re-running the resolver and
20
+ * calling `set` to store the new entry.
21
+ */
22
+ get(srcDir, specifier) {
23
+ const key = makeKey(srcDir, specifier);
24
+ const existing = this.entries.get(key);
25
+ if (existing) {
26
+ this.hits += 1;
27
+ this.entries.delete(key);
28
+ this.entries.set(key, existing);
29
+ return { hit: true, resolved: existing.resolved };
30
+ }
31
+ this.misses += 1;
32
+ return { hit: false };
33
+ }
34
+ /**
35
+ * Store a resolution result.
36
+ *
37
+ * Pass `undefined` for `resolved` to memoize the negative case
38
+ * (specifier did not resolve) and avoid repeating the FS walk on
39
+ * every `@/...` import.
40
+ */
41
+ set(srcDir, specifier, resolved) {
42
+ const key = makeKey(srcDir, specifier);
43
+ this.entries.set(key, { srcDir, resolved });
44
+ if (this.entries.size > this.maxEntries) {
45
+ const oldestKey = this.entries.keys().next().value;
46
+ if (oldestKey !== void 0) {
47
+ this.entries.delete(oldestKey);
48
+ }
49
+ }
50
+ }
51
+ /**
52
+ * Drop all entries whose `srcDir` is under `rootDir`. Use this from
53
+ * the file watcher when files are added or removed under the app's
54
+ * source tree.
55
+ *
56
+ * Path comparison is path-aware (handles both POSIX `/` and
57
+ * Windows `\` separators) via `path.relative` so cached entries
58
+ * normalized on one platform still match the watcher's `rootDir`
59
+ * on another. Without this, a Windows build that sees
60
+ * `entry.srcDir === 'C:\app\src'` would miss
61
+ * `entry.srcDir.startsWith('C:/app/src/')` and leave stale entries.
62
+ */
63
+ invalidateUnder(rootDir) {
64
+ const normalizedRoot = path.resolve(rootDir);
65
+ let removed = 0;
66
+ for (const [key, entry] of this.entries) {
67
+ if (isUnderDirectory(path.resolve(entry.srcDir), normalizedRoot)) {
68
+ this.entries.delete(key);
69
+ removed += 1;
70
+ }
71
+ }
72
+ return removed;
73
+ }
74
+ /** Clear all entries. */
75
+ clear() {
76
+ this.entries.clear();
77
+ this.hits = 0;
78
+ this.misses = 0;
79
+ }
80
+ /** Current cache size. */
81
+ get size() {
82
+ return this.entries.size;
83
+ }
84
+ /** Hit/miss counters for observability. */
85
+ stats() {
86
+ const total = this.hits + this.misses;
87
+ return {
88
+ hits: this.hits,
89
+ misses: this.misses,
90
+ size: this.entries.size,
91
+ hitRate: total === 0 ? 0 : this.hits / total
92
+ };
93
+ }
94
+ }
95
+ function makeKey(srcDir, specifier) {
96
+ return `${srcDir} ${specifier}`;
97
+ }
98
+ function isUnderDirectory(candidate, parent) {
99
+ if (candidate === parent) return true;
100
+ const rel = path.relative(parent, candidate);
101
+ if (!rel || rel.startsWith("..") || path.isAbsolute(rel)) return false;
102
+ return true;
103
+ }
104
+ export {
105
+ AliasResolverCache
106
+ };
@@ -0,0 +1,6 @@
1
+ import type { EcoBuildPlugin } from '../build/build-types.js';
2
+ import { AliasResolverCache } from './alias-resolver-cache.js';
3
+ export declare function resolveAppSourceAliasPath(srcDir: string, specifier: string): string | undefined;
4
+ export declare function createAliasResolverPlugin(srcDir: string, options?: {
5
+ cache?: AliasResolverCache;
6
+ }): EcoBuildPlugin;
@@ -0,0 +1,65 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { AliasResolverCache } from "./alias-resolver-cache.js";
4
+ const RESOLVABLE_EXTENSIONS = [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mdx", ".css", ".scss", ".sass", ".less"];
5
+ function findResolvablePath(candidate) {
6
+ if (path.extname(candidate)) {
7
+ if (existsSync(candidate)) {
8
+ return candidate;
9
+ }
10
+ }
11
+ for (const extension of RESOLVABLE_EXTENSIONS) {
12
+ const fileCandidate = `${candidate}${extension}`;
13
+ if (existsSync(fileCandidate)) {
14
+ return fileCandidate;
15
+ }
16
+ }
17
+ for (const extension of RESOLVABLE_EXTENSIONS) {
18
+ const indexCandidate = path.join(candidate, `index${extension}`);
19
+ if (existsSync(indexCandidate)) {
20
+ return indexCandidate;
21
+ }
22
+ }
23
+ return void 0;
24
+ }
25
+ function resolveAliasedBarrelTarget(resolvedPath) {
26
+ if (!path.basename(resolvedPath).startsWith("index.")) {
27
+ return resolvedPath;
28
+ }
29
+ const source = readFileSync(resolvedPath, "utf8").trim();
30
+ const match = source.match(/^export\s+\*\s+from\s+['"]([^'"]+)['"]\s*;?$/);
31
+ if (!match?.[1]?.startsWith(".")) {
32
+ return resolvedPath;
33
+ }
34
+ const target = findResolvablePath(path.resolve(path.dirname(resolvedPath), match[1]));
35
+ return target ?? resolvedPath;
36
+ }
37
+ function resolveAppSourceAliasPath(srcDir, specifier) {
38
+ if (!specifier.startsWith("@/")) {
39
+ return void 0;
40
+ }
41
+ const candidate = path.join(srcDir, specifier.slice(2));
42
+ const resolved = findResolvablePath(candidate);
43
+ return resolved ? resolveAliasedBarrelTarget(resolved) : void 0;
44
+ }
45
+ function createAliasResolverPlugin(srcDir, options) {
46
+ const cache = options?.cache ?? new AliasResolverCache();
47
+ return {
48
+ name: "ecopages-alias-resolver",
49
+ setup(build) {
50
+ build.onResolve({ filter: /^@\// }, (args) => {
51
+ const cached = cache.get(srcDir, args.path);
52
+ if (cached.hit) {
53
+ return cached.resolved ? { path: cached.resolved } : {};
54
+ }
55
+ const resolved = resolveAppSourceAliasPath(srcDir, args.path);
56
+ cache.set(srcDir, args.path, resolved);
57
+ return resolved ? { path: resolved } : {};
58
+ });
59
+ }
60
+ };
61
+ }
62
+ export {
63
+ createAliasResolverPlugin,
64
+ resolveAppSourceAliasPath
65
+ };
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Bun plugin that auto-injects `__eco` metadata into EcoComponent config objects.
3
+ *
4
+ * This plugin uses AST parsing (via oxc-parser) to reliably inject the `__eco` property
5
+ * into EcoComponent config objects at import time. The injected metadata contains:
6
+ * - `dir`: The directory path of the component file (used for dependency resolution)
7
+ * - `integration`: The integration type (e.g., 'react', 'kitajs', 'ghtml', 'lit')
8
+ *
9
+ * The plugin intercepts file loading for all configured integration extensions and
10
+ * transforms component configs before they are executed.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * // Before transformation:
15
+ * export default eco.page({
16
+ * render: () => '<div>Hello</div>',
17
+ * });
18
+ *
19
+ * // After transformation:
20
+ * export default eco.page({
21
+ * __eco: { id: "<hash>", file: "/path/to/pages/index.tsx", integration: "react" },
22
+ * render: () => '<div>Hello</div>',
23
+ * });
24
+ * ```
25
+ *
26
+ * @module eco-component-meta-plugin
27
+ */
28
+ import type { EcoBuildPlugin } from '../build/build-types.js';
29
+ import type { EcoPagesAppConfig } from '../types/internal-types.js';
30
+ import { type EcoSourceTransform, type EcoViteCompatiblePlugin } from './source-transform.js';
31
+ /**
32
+ * Options for creating the eco-component-meta-plugin.
33
+ */
34
+ export interface EcoComponentDirPluginOptions {
35
+ /** The EcoPages application configuration containing integration settings */
36
+ config: EcoPagesAppConfig;
37
+ }
38
+ /**
39
+ * Creates the bundler-neutral metadata transform used by Ecopages loaders and
40
+ * Vite-compatible adapters.
41
+ */
42
+ export declare function createEcoComponentMetaTransform(options: EcoComponentDirPluginOptions): EcoSourceTransform;
43
+ /**
44
+ * Creates a build plugin that auto-injects `__eco` metadata into EcoComponent config objects.
45
+ *
46
+ * This plugin intercepts file loading for all integration-compatible files and:
47
+ * 1. Strips any query string from the file path (for dev mode cache-busting)
48
+ * 2. Reads the file contents
49
+ * 3. Parses the AST using oxc-parser to find injection points
50
+ * 4. Injects `__eco: { id: "...", file: "...", integration: "..." }` into config objects
51
+ * 5. Returns the transformed content with the appropriate loader
52
+ *
53
+ * Supported patterns:
54
+ * - `eco.page({ ... })` - Page component declarations
55
+ * - `eco.component({ ... })` - Reusable component declarations
56
+ * - `eco.html({ ... })` - HTML shell declarations
57
+ * - `eco.layout({ ... })` - Layout declarations
58
+ * - `Component.config = { ... }` - Config assignment pattern
59
+ * - `config: { ... }` - Config property in object literals
60
+ * - `export const config = { ... }` - Exported config declarations
61
+ *
62
+ * @param options - Plugin options containing the EcoPages config
63
+ * @returns A build plugin instance ready for registration
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * import { createEcoComponentMetaPlugin } from '@ecopages/core';
68
+ *
69
+ * const plugin = createEcoComponentMetaPlugin({ config: appConfig });
70
+ * appConfig.loaders.set(plugin.name, plugin);
71
+ * ```
72
+ */
73
+ export declare function createEcoComponentMetaPlugin(options: EcoComponentDirPluginOptions): EcoBuildPlugin;
74
+ /**
75
+ * Creates a Vite-compatible metadata injection plugin from the shared
76
+ * Ecopages source-transform primitive.
77
+ */
78
+ export declare function createEcoComponentMetaVitePlugin(options: EcoComponentDirPluginOptions): EcoViteCompatiblePlugin;
79
+ /**
80
+ * Injects `__eco` metadata into EcoComponent config objects in file content.
81
+ *
82
+ * Uses oxc-parser for robust AST-based code analysis, which handles edge cases
83
+ * that regex-based approaches would miss (e.g., complex generics, nested objects,
84
+ * comments, string literals containing similar patterns).
85
+ *
86
+ * The injection is performed by:
87
+ * 1. Parsing the source code into an AST
88
+ * 2. Walking the AST to find all config object patterns
89
+ * 3. Collecting insertion points (sorted in reverse order to preserve positions)
90
+ * 4. Inserting the `__eco` property at each point
91
+ *
92
+ * @param contents - The source code content to transform
93
+ * @param filePath - Absolute path to the file (used to derive the directory)
94
+ * @param integration - The integration identifier for this file type
95
+ * @returns Transformed source code with `__eco` injected, or original if no patterns found
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * const result = injectEcoMeta(
100
+ * 'export default eco.page({ render: () => "<div>Hi</div>" });',
101
+ * '/app/src/pages/index.tsx',
102
+ * 'react'
103
+ * );
104
+ * // Result: 'export default eco.page({ __eco: { id: "<hash>", file: "/app/src/pages/index.tsx", integration: "react" }, render: () => "<div>Hi</div>" });'
105
+ * ```
106
+ */
107
+ export declare function injectEcoMeta(contents: string, filePath: string, integration: string): string;
108
+ export default createEcoComponentMetaPlugin;
@@ -0,0 +1,175 @@
1
+ import { cachedParseSync } from "../cache/module-parse-cache.js";
2
+ import { rapidhash } from "../utils/hash.js";
3
+ import {
4
+ createEcoBuildPluginFromSourceTransform,
5
+ createVitePluginFromSourceTransform
6
+ } from "./source-transform.js";
7
+ const REGEX_SPECIAL_CHARS = /[.*+?^${}()|[\]\\]/g;
8
+ const VALID_LOADER_EXTENSIONS = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx"]);
9
+ function hasValidLoaderExtension(ext) {
10
+ for (const validExt of VALID_LOADER_EXTENSIONS) {
11
+ if (ext.endsWith(validExt)) {
12
+ return true;
13
+ }
14
+ }
15
+ return false;
16
+ }
17
+ function buildExtensionToIntegrationMap(integrations) {
18
+ const mapping = [];
19
+ for (const integration of integrations) {
20
+ for (const ext of integration.extensions) {
21
+ mapping.push([
22
+ ext,
23
+ {
24
+ name: integration.name,
25
+ jsxImportSource: integration.jsxImportSource
26
+ }
27
+ ]);
28
+ }
29
+ }
30
+ mapping.sort((a, b) => b[0].length - a[0].length);
31
+ return mapping;
32
+ }
33
+ function detectIntegration(filePath, extensionToIntegration) {
34
+ for (const [ext, integration] of extensionToIntegration) {
35
+ if (filePath.endsWith(ext)) {
36
+ return integration;
37
+ }
38
+ }
39
+ return { name: "ghtml" };
40
+ }
41
+ function prependJsxImportSource(code, jsxImportSource) {
42
+ if (!jsxImportSource || code.includes("@jsxImportSource")) {
43
+ return code;
44
+ }
45
+ return `/** @jsxImportSource ${jsxImportSource} */
46
+ ${code}`;
47
+ }
48
+ function createExtensionPattern(extensions) {
49
+ if (extensions.length === 0) {
50
+ throw new Error("[eco-component-meta-plugin] No extensions configured. At least one integration is required.");
51
+ }
52
+ const uniqueExtensions = [...new Set(extensions)];
53
+ const escaped = uniqueExtensions.map((ext) => ext.replace(REGEX_SPECIAL_CHARS, "\\$&"));
54
+ return new RegExp(`(${escaped.join("|")})(\\?.*)?$`);
55
+ }
56
+ function createEcoComponentMetaTransform(options) {
57
+ const allExtensions = options.config.integrations.flatMap((integration) => integration.extensions).filter(hasValidLoaderExtension);
58
+ if (allExtensions.length === 0) {
59
+ throw new Error("[eco-component-meta-plugin] No extensions configured. At least one integration is required.");
60
+ }
61
+ const extensionPattern = createExtensionPattern(allExtensions);
62
+ const extensionToIntegration = buildExtensionToIntegrationMap(options.config.integrations);
63
+ return {
64
+ name: "eco-component-meta-plugin",
65
+ enforce: "pre",
66
+ filter: extensionPattern,
67
+ transform(code, id) {
68
+ const integration = detectIntegration(id, extensionToIntegration);
69
+ return {
70
+ code: prependJsxImportSource(injectEcoMeta(code, id, integration.name), integration.jsxImportSource)
71
+ };
72
+ }
73
+ };
74
+ }
75
+ function createEcoComponentMetaPlugin(options) {
76
+ return createEcoBuildPluginFromSourceTransform(createEcoComponentMetaTransform(options));
77
+ }
78
+ function createEcoComponentMetaVitePlugin(options) {
79
+ return createVitePluginFromSourceTransform(createEcoComponentMetaTransform(options));
80
+ }
81
+ function findInjectionPoints(node, insertions, injection, isInsideEcoComponent = false) {
82
+ if (!node || typeof node !== "object") return;
83
+ const n = node;
84
+ if (n.type === "CallExpression") {
85
+ const callee = n.callee;
86
+ if (callee?.type === "MemberExpression" || callee?.type === "StaticMemberExpression") {
87
+ const obj = callee.object;
88
+ const prop = callee.property;
89
+ if (obj?.type === "Identifier" && obj?.name === "eco" && (prop?.name === "page" || prop?.name === "component" || prop?.name === "html" || prop?.name === "layout")) {
90
+ const args = n.arguments;
91
+ const firstArg = args?.[0];
92
+ if (firstArg?.type === "ObjectExpression") {
93
+ const start = firstArg.start;
94
+ if (typeof start === "number") {
95
+ insertions.push({ position: start + 1, text: injection });
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ if (n.type === "AssignmentExpression") {
102
+ const left = n.left;
103
+ const right = n.right;
104
+ if (left?.type === "MemberExpression" || left?.type === "StaticMemberExpression") {
105
+ const prop = left.property;
106
+ if (prop?.name === "config" && right?.type === "ObjectExpression") {
107
+ const start = right.start;
108
+ if (typeof start === "number") {
109
+ insertions.push({ position: start + 1, text: injection });
110
+ }
111
+ }
112
+ }
113
+ }
114
+ if (n.type === "ObjectProperty" || n.type === "Property") {
115
+ const key = n.key;
116
+ const value = n.value;
117
+ if ((key?.type === "Identifier" || key?.type === "IdentifierName") && key?.name === "config" && value?.type === "ObjectExpression" && isInsideEcoComponent) {
118
+ const start = value.start;
119
+ if (typeof start === "number") {
120
+ insertions.push({ position: start + 1, text: injection });
121
+ }
122
+ }
123
+ }
124
+ let childIsInsideEcoComponent = isInsideEcoComponent;
125
+ if (n.type === "VariableDeclarator") {
126
+ const id = n.id;
127
+ const typeAnnotation = id?.typeAnnotation;
128
+ if (typeAnnotation) {
129
+ const typeStr = JSON.stringify(typeAnnotation);
130
+ if (typeStr.includes("EcoComponent")) {
131
+ childIsInsideEcoComponent = true;
132
+ }
133
+ }
134
+ }
135
+ for (const key in n) {
136
+ if (key === "start" || key === "end" || key === "type") continue;
137
+ const value = n[key];
138
+ if (Array.isArray(value)) {
139
+ for (const child of value) {
140
+ findInjectionPoints(child, insertions, injection, childIsInsideEcoComponent);
141
+ }
142
+ } else if (typeof value === "object" && value !== null) {
143
+ findInjectionPoints(value, insertions, injection, childIsInsideEcoComponent);
144
+ }
145
+ }
146
+ }
147
+ function injectEcoMeta(contents, filePath, integration) {
148
+ const result = cachedParseSync(filePath, contents);
149
+ if (result.errors.length > 0) {
150
+ console.warn(`[eco-component-meta-plugin] Parse errors in ${filePath}:`, result.errors);
151
+ return contents;
152
+ }
153
+ const ast = result.program;
154
+ const id = rapidhash(filePath).toString(36);
155
+ const injection = ` __eco: { id: "${id}", file: "${filePath}", integration: "${integration}" },`;
156
+ const insertions = [];
157
+ findInjectionPoints(ast, insertions, injection);
158
+ if (insertions.length === 0) {
159
+ return contents;
160
+ }
161
+ insertions.sort((a, b) => b.position - a.position);
162
+ let transformed = contents;
163
+ for (const { position, text } of insertions) {
164
+ transformed = transformed.slice(0, position) + text + transformed.slice(position);
165
+ }
166
+ return transformed;
167
+ }
168
+ var eco_component_meta_plugin_default = createEcoComponentMetaPlugin;
169
+ export {
170
+ createEcoComponentMetaPlugin,
171
+ createEcoComponentMetaTransform,
172
+ createEcoComponentMetaVitePlugin,
173
+ eco_component_meta_plugin_default as default,
174
+ injectEcoMeta
175
+ };
@@ -0,0 +1,33 @@
1
+ import type { EcoBuildPlugin } from '../build/build-types.js';
2
+ /**
3
+ * Options for the shared foreign-JSX override build plugin.
4
+ */
5
+ export interface ForeignJsxOverrideOptions {
6
+ /** JSX runtime that should own the transformed foreign files. */
7
+ hostJsxImportSource: string;
8
+ /** Extensions claimed by other JSX integrations that may appear in the host graph. */
9
+ foreignExtensions: string[];
10
+ /** More specific owned suffixes that must not be claimed by this override. */
11
+ excludeExtensions?: string[];
12
+ /** Optional plugin name override for debug output. */
13
+ name?: string;
14
+ }
15
+ /**
16
+ * Build plugin that prepends a `@jsxImportSource` pragma to foreign integration
17
+ * files bundled into a host integration's client graph.
18
+ *
19
+ * When a host integration (e.g. React) bundles a component file that belongs to
20
+ * another JSX integration (e.g. `.kita.tsx`), that file inherits the project
21
+ * `tsconfig` JSX runtime which produces the wrong output (HTML strings instead
22
+ * of framework elements). This plugin rewrites the source to explicitly target
23
+ * the host's JSX factory so the bundler compiles every JSX expression into the
24
+ * correct element creation calls.
25
+ *
26
+ * The plugin is intentionally framework-agnostic: any integration that does
27
+ * client-side bundling can use it by passing its own `jsxImportSource` and the
28
+ * set of foreign extensions collected from the app config.
29
+ *
30
+ * When no JSX-bearing foreign extensions are present, the returned plugin is a
31
+ * no-op so integrations can register it unconditionally.
32
+ */
33
+ export declare function createForeignJsxOverridePlugin(options: ForeignJsxOverrideOptions): EcoBuildPlugin;
@@ -0,0 +1,41 @@
1
+ import { readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ function createForeignJsxOverridePlugin(options) {
4
+ const extensions = options.foreignExtensions.filter((ext) => ext.endsWith(".tsx") || ext.endsWith(".jsx"));
5
+ const excludedExtensions = (options.excludeExtensions ?? []).filter(
6
+ (ext) => ext.endsWith(".tsx") || ext.endsWith(".jsx")
7
+ );
8
+ if (extensions.length === 0) {
9
+ return {
10
+ name: options.name ?? "foreign-jsx-override",
11
+ setup() {
12
+ }
13
+ };
14
+ }
15
+ const pragma = `/** @jsxImportSource ${options.hostJsxImportSource} */
16
+ `;
17
+ const filter = new RegExp(`(${extensions.map((e) => e.replace(".", "\\.")).join("|")})$`);
18
+ return {
19
+ name: options.name ?? "foreign-jsx-override",
20
+ setup(build) {
21
+ build.onLoad({ filter }, (args) => {
22
+ if (excludedExtensions.some((extension) => args.path.endsWith(extension))) {
23
+ return void 0;
24
+ }
25
+ const source = readFileSync(args.path, "utf-8");
26
+ const loader = args.path.endsWith(".jsx") ? "jsx" : "tsx";
27
+ if (source.includes("@jsxImportSource")) {
28
+ return void 0;
29
+ }
30
+ return {
31
+ contents: pragma + source,
32
+ loader,
33
+ resolveDir: path.dirname(args.path)
34
+ };
35
+ });
36
+ }
37
+ };
38
+ }
39
+ export {
40
+ createForeignJsxOverridePlugin
41
+ };