veryfront 0.1.128 → 0.1.129

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 (382) hide show
  1. package/esm/cli/router.d.ts +0 -5
  2. package/esm/cli/router.d.ts.map +1 -1
  3. package/esm/cli/router.js +30 -2
  4. package/esm/cli/shared/update-check.d.ts +4 -0
  5. package/esm/cli/shared/update-check.d.ts.map +1 -0
  6. package/esm/cli/shared/update-check.js +97 -0
  7. package/esm/deno.d.ts +5 -0
  8. package/esm/deno.js +13 -8
  9. package/esm/src/channels/control-plane.d.ts.map +1 -1
  10. package/esm/src/channels/control-plane.js +5 -5
  11. package/esm/src/channels/invoke.d.ts +1 -1
  12. package/esm/src/channels/invoke.d.ts.map +1 -1
  13. package/esm/src/channels/invoke.js +6 -6
  14. package/esm/src/chat/index.d.ts +12 -24
  15. package/esm/src/chat/index.d.ts.map +1 -1
  16. package/esm/src/chat/index.js +5 -25
  17. package/esm/src/config/env.d.ts.map +1 -1
  18. package/esm/src/config/env.js +18 -10
  19. package/esm/src/data/static-data-fetcher.d.ts +3 -0
  20. package/esm/src/data/static-data-fetcher.d.ts.map +1 -1
  21. package/esm/src/data/static-data-fetcher.js +29 -25
  22. package/esm/src/data/static-paths-fetcher.d.ts.map +1 -1
  23. package/esm/src/data/static-paths-fetcher.js +3 -2
  24. package/esm/src/errors/logging.d.ts.map +1 -1
  25. package/esm/src/errors/logging.js +16 -7
  26. package/esm/src/errors/user-friendly/error-formatter.d.ts.map +1 -1
  27. package/esm/src/errors/user-friendly/error-formatter.js +9 -25
  28. package/esm/src/fs/index.d.ts +11 -12
  29. package/esm/src/fs/index.d.ts.map +1 -1
  30. package/esm/src/fs/index.js +11 -24
  31. package/esm/src/html/dev-scripts.d.ts.map +1 -1
  32. package/esm/src/html/dev-scripts.js +5 -8
  33. package/esm/src/html/html-escape.d.ts +1 -0
  34. package/esm/src/html/html-escape.d.ts.map +1 -1
  35. package/esm/src/html/html-escape.js +3 -0
  36. package/esm/src/html/html-injection.js +2 -2
  37. package/esm/src/html/html-shell-generator.d.ts +5 -2
  38. package/esm/src/html/html-shell-generator.d.ts.map +1 -1
  39. package/esm/src/html/html-shell-generator.js +41 -30
  40. package/esm/src/html/hydration-script-builder/dev-client-renderer.js +2 -2
  41. package/esm/src/html/hydration-script-builder/dev-component-manifest.js +2 -2
  42. package/esm/src/html/hydration-script-builder/dev-error-logger.d.ts.map +1 -1
  43. package/esm/src/html/hydration-script-builder/dev-error-logger.js +2 -6
  44. package/esm/src/html/hydration-script-builder/dev-scripts.js +2 -2
  45. package/esm/src/html/hydration-script-builder/hydration-data-generator.d.ts +3 -1
  46. package/esm/src/html/hydration-script-builder/hydration-data-generator.d.ts.map +1 -1
  47. package/esm/src/html/hydration-script-builder/hydration-data-generator.js +2 -2
  48. package/esm/src/html/hydration-script-builder/index.d.ts +1 -1
  49. package/esm/src/html/hydration-script-builder/index.d.ts.map +1 -1
  50. package/esm/src/html/hydration-script-builder/index.js +1 -1
  51. package/esm/src/html/hydration-script-builder/prod-hydration.js +2 -2
  52. package/esm/src/html/hydration-script-builder/prod-scripts.d.ts +2 -0
  53. package/esm/src/html/hydration-script-builder/prod-scripts.d.ts.map +1 -1
  54. package/esm/src/html/hydration-script-builder/prod-scripts.js +14 -14
  55. package/esm/src/html/schemas/html.schema.d.ts +2 -0
  56. package/esm/src/html/schemas/html.schema.d.ts.map +1 -1
  57. package/esm/src/html/schemas/html.schema.js +2 -0
  58. package/esm/src/html/styles-builder/css-pregeneration.d.ts +17 -1
  59. package/esm/src/html/styles-builder/css-pregeneration.d.ts.map +1 -1
  60. package/esm/src/html/styles-builder/css-pregeneration.js +103 -1
  61. package/esm/src/html/styles-builder/dev-styles.js +2 -2
  62. package/esm/src/html/utils.d.ts +2 -0
  63. package/esm/src/html/utils.d.ts.map +1 -1
  64. package/esm/src/html/utils.js +49 -28
  65. package/esm/src/integrations/remote-tools.d.ts.map +1 -1
  66. package/esm/src/integrations/remote-tools.js +32 -39
  67. package/esm/src/internal-agents/ag-ui-sse.d.ts +0 -1
  68. package/esm/src/internal-agents/ag-ui-sse.d.ts.map +1 -1
  69. package/esm/src/internal-agents/ag-ui-sse.js +2 -16
  70. package/esm/src/internal-agents/control-plane-auth.d.ts.map +1 -1
  71. package/esm/src/internal-agents/control-plane-auth.js +5 -3
  72. package/esm/src/internal-agents/request-body.d.ts.map +1 -1
  73. package/esm/src/internal-agents/request-body.js +6 -3
  74. package/esm/src/internal-agents/session-manager.d.ts +1 -0
  75. package/esm/src/internal-agents/session-manager.d.ts.map +1 -1
  76. package/esm/src/internal-agents/session-manager.js +12 -18
  77. package/esm/src/issues/core.d.ts.map +1 -1
  78. package/esm/src/issues/core.js +24 -23
  79. package/esm/src/issues/schemas/issue.schema.d.ts.map +1 -1
  80. package/esm/src/issues/schemas/issue.schema.js +2 -1
  81. package/esm/src/jobs/runtime-env.d.ts.map +1 -1
  82. package/esm/src/jobs/runtime-env.js +21 -44
  83. package/esm/src/markdown/index.d.ts +1 -2
  84. package/esm/src/markdown/index.d.ts.map +1 -1
  85. package/esm/src/markdown/index.js +1 -6
  86. package/esm/src/mcp/server.d.ts +0 -1
  87. package/esm/src/mcp/server.d.ts.map +1 -1
  88. package/esm/src/mcp/server.js +40 -41
  89. package/esm/src/mdx/index.d.ts +3 -2
  90. package/esm/src/mdx/index.d.ts.map +1 -1
  91. package/esm/src/mdx/index.js +3 -5
  92. package/esm/src/middleware/builtin/logger.d.ts.map +1 -1
  93. package/esm/src/middleware/builtin/logger.js +31 -28
  94. package/esm/src/middleware/builtin/security/rate-limit.d.ts.map +1 -1
  95. package/esm/src/middleware/builtin/security/rate-limit.js +17 -12
  96. package/esm/src/middleware/builtin/timeout.d.ts.map +1 -1
  97. package/esm/src/middleware/builtin/timeout.js +17 -10
  98. package/esm/src/modules/import-map/default-import-map.d.ts.map +1 -1
  99. package/esm/src/modules/import-map/default-import-map.js +4 -3
  100. package/esm/src/oauth/handlers/callback-handler.d.ts +0 -5
  101. package/esm/src/oauth/handlers/callback-handler.d.ts.map +1 -1
  102. package/esm/src/oauth/handlers/callback-handler.js +9 -14
  103. package/esm/src/oauth/handlers/index.d.ts +1 -1
  104. package/esm/src/oauth/handlers/index.js +1 -1
  105. package/esm/src/oauth/handlers/init-handler.d.ts.map +1 -1
  106. package/esm/src/oauth/handlers/init-handler.js +32 -20
  107. package/esm/src/oauth/providers/index.d.ts +1 -1
  108. package/esm/src/oauth/providers/index.js +1 -1
  109. package/esm/src/oauth/schemas/index.d.ts +1 -1
  110. package/esm/src/oauth/schemas/index.js +1 -1
  111. package/esm/src/oauth/token-store/index.d.ts +1 -1
  112. package/esm/src/oauth/token-store/index.js +1 -1
  113. package/esm/src/oauth/token-store/memory.d.ts +1 -1
  114. package/esm/src/oauth/token-store/memory.d.ts.map +1 -1
  115. package/esm/src/oauth/token-store/memory.js +8 -8
  116. package/esm/src/observability/request-profiler.d.ts +31 -0
  117. package/esm/src/observability/request-profiler.d.ts.map +1 -0
  118. package/esm/src/observability/request-profiler.js +94 -0
  119. package/esm/src/observability/tracing/otlp-setup.d.ts.map +1 -1
  120. package/esm/src/observability/tracing/otlp-setup.js +16 -21
  121. package/esm/src/prompt/factory.d.ts.map +1 -1
  122. package/esm/src/prompt/factory.js +10 -12
  123. package/esm/src/prompt/registry.d.ts.map +1 -1
  124. package/esm/src/prompt/registry.js +12 -10
  125. package/esm/src/prompt/schemas/prompt.schema.d.ts.map +1 -1
  126. package/esm/src/prompt/schemas/prompt.schema.js +0 -2
  127. package/esm/src/prompt/types.d.ts +1 -1
  128. package/esm/src/prompt/types.d.ts.map +1 -1
  129. package/esm/src/provider/local/ai-sdk-adapter.d.ts.map +1 -1
  130. package/esm/src/provider/local/ai-sdk-adapter.js +3 -8
  131. package/esm/src/provider/local/env.d.ts +4 -6
  132. package/esm/src/provider/local/env.d.ts.map +1 -1
  133. package/esm/src/provider/local/env.js +14 -1
  134. package/esm/src/provider/local/local-engine.d.ts.map +1 -1
  135. package/esm/src/provider/local/local-engine.js +2 -7
  136. package/esm/src/provider/model-registry.d.ts.map +1 -1
  137. package/esm/src/provider/model-registry.js +2 -7
  138. package/esm/src/provider/veryfront-cloud/provider.d.ts.map +1 -1
  139. package/esm/src/provider/veryfront-cloud/provider.js +1 -7
  140. package/esm/src/provider/veryfront-cloud/shared.d.ts.map +1 -1
  141. package/esm/src/provider/veryfront-cloud/shared.js +9 -11
  142. package/esm/src/proxy/handler.d.ts.map +1 -1
  143. package/esm/src/proxy/handler.js +56 -57
  144. package/esm/src/react/compat/hooks-adapter.d.ts +1 -7
  145. package/esm/src/react/compat/hooks-adapter.d.ts.map +1 -1
  146. package/esm/src/react/compat/hooks-adapter.js +35 -40
  147. package/esm/src/react/components/Head.d.ts +1 -26
  148. package/esm/src/react/components/Head.d.ts.map +1 -1
  149. package/esm/src/react/components/Head.js +1 -172
  150. package/esm/src/react/context/index.d.ts +2 -46
  151. package/esm/src/react/context/index.d.ts.map +1 -1
  152. package/esm/src/react/context/index.js +1 -44
  153. package/esm/src/react/head-collector.d.ts +1 -10
  154. package/esm/src/react/head-collector.d.ts.map +1 -1
  155. package/esm/src/react/head-collector.js +4 -0
  156. package/esm/src/react/router/index.d.ts +2 -45
  157. package/esm/src/react/router/index.d.ts.map +1 -1
  158. package/esm/src/react/router/index.js +1 -49
  159. package/esm/src/react/runtime/core.d.ts +49 -0
  160. package/esm/src/react/runtime/core.d.ts.map +1 -0
  161. package/esm/src/react/runtime/core.js +200 -0
  162. package/esm/src/rendering/orchestrator/html.d.ts +2 -0
  163. package/esm/src/rendering/orchestrator/html.d.ts.map +1 -1
  164. package/esm/src/rendering/orchestrator/html.js +69 -12
  165. package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts.map +1 -1
  166. package/esm/src/rendering/orchestrator/ssr-orchestrator.js +4 -0
  167. package/esm/src/rendering/orchestrator/types.d.ts +4 -0
  168. package/esm/src/rendering/orchestrator/types.d.ts.map +1 -1
  169. package/esm/src/repositories/types.d.ts.map +1 -1
  170. package/esm/src/resource/factory.d.ts.map +1 -1
  171. package/esm/src/resource/factory.js +12 -9
  172. package/esm/src/resource/registry.d.ts +3 -3
  173. package/esm/src/resource/registry.d.ts.map +1 -1
  174. package/esm/src/resource/registry.js +7 -7
  175. package/esm/src/schemas/common.d.ts.map +1 -1
  176. package/esm/src/schemas/common.js +7 -4
  177. package/esm/src/security/http/config.d.ts +0 -1
  178. package/esm/src/security/http/config.d.ts.map +1 -1
  179. package/esm/src/security/http/config.js +3 -16
  180. package/esm/src/security/http/response/security-handler.d.ts +1 -0
  181. package/esm/src/security/http/response/security-handler.d.ts.map +1 -1
  182. package/esm/src/security/http/response/security-handler.js +17 -12
  183. package/esm/src/security/index.d.ts +4 -2
  184. package/esm/src/security/index.d.ts.map +1 -1
  185. package/esm/src/security/index.js +3 -1
  186. package/esm/src/server/handlers/dev/styles-css.handler.d.ts.map +1 -1
  187. package/esm/src/server/handlers/dev/styles-css.handler.js +8 -7
  188. package/esm/src/server/handlers/monitoring/metrics.handler.d.ts.map +1 -1
  189. package/esm/src/server/handlers/monitoring/metrics.handler.js +3 -1
  190. package/esm/src/server/handlers/request/module/module-server-handler.d.ts.map +1 -1
  191. package/esm/src/server/handlers/request/module/module-server-handler.js +18 -15
  192. package/esm/src/server/handlers/request/prod-hydration-module.handler.d.ts +8 -0
  193. package/esm/src/server/handlers/request/prod-hydration-module.handler.d.ts.map +1 -0
  194. package/esm/src/server/handlers/request/prod-hydration-module.handler.js +41 -0
  195. package/esm/src/server/handlers/request/ssr/ssr.handler.d.ts.map +1 -1
  196. package/esm/src/server/handlers/request/ssr/ssr.handler.js +3 -0
  197. package/esm/src/server/production-server.d.ts.map +1 -1
  198. package/esm/src/server/production-server.js +65 -0
  199. package/esm/src/server/runtime-handler/handler-context-builder.d.ts +1 -1
  200. package/esm/src/server/runtime-handler/handler-context-builder.d.ts.map +1 -1
  201. package/esm/src/server/runtime-handler/index.d.ts +1 -1
  202. package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
  203. package/esm/src/server/runtime-handler/index.js +36 -11
  204. package/esm/src/server/runtime-handler/request-utils.d.ts +7 -0
  205. package/esm/src/server/runtime-handler/request-utils.d.ts.map +1 -1
  206. package/esm/src/server/runtime-handler/request-utils.js +10 -0
  207. package/esm/src/server/services/rendering/ssr.service.d.ts +1 -0
  208. package/esm/src/server/services/rendering/ssr.service.d.ts.map +1 -1
  209. package/esm/src/server/services/rendering/ssr.service.js +12 -5
  210. package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.js +1 -1
  211. package/esm/src/skill/allowed-tools.d.ts +3 -8
  212. package/esm/src/skill/allowed-tools.d.ts.map +1 -1
  213. package/esm/src/skill/executor.js +2 -2
  214. package/esm/src/skill/parser.d.ts.map +1 -1
  215. package/esm/src/skill/parser.js +12 -12
  216. package/esm/src/skill/path-safety.js +1 -1
  217. package/esm/src/skill/tools.d.ts.map +1 -1
  218. package/esm/src/skill/tools.js +18 -11
  219. package/esm/src/studio/bridge/bridge-bundle.generated.d.ts.map +1 -1
  220. package/esm/src/studio/bridge/bridge-bundle.generated.js +1 -1
  221. package/esm/src/task/discovery.d.ts.map +1 -1
  222. package/esm/src/task/discovery.js +73 -95
  223. package/esm/src/tool/executor.d.ts.map +1 -1
  224. package/esm/src/tool/executor.js +8 -7
  225. package/esm/src/tool/factory.d.ts.map +1 -1
  226. package/esm/src/tool/factory.js +13 -16
  227. package/esm/src/transforms/esm/package-registry.d.ts +4 -0
  228. package/esm/src/transforms/esm/package-registry.d.ts.map +1 -1
  229. package/esm/src/transforms/esm/package-registry.js +34 -17
  230. package/esm/src/transforms/import-rewriter/strategies/veryfront-strategy.d.ts.map +1 -1
  231. package/esm/src/transforms/import-rewriter/strategies/veryfront-strategy.js +2 -1
  232. package/esm/src/transforms/mdx/esm-module-loader/cache-format.d.ts.map +1 -1
  233. package/esm/src/transforms/mdx/esm-module-loader/cache-format.js +26 -1
  234. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts +1 -1
  235. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts.map +1 -1
  236. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.js +1 -1
  237. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.d.ts +1 -0
  238. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.d.ts.map +1 -1
  239. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.js +3 -0
  240. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/index.d.ts +1 -1
  241. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/index.js +1 -1
  242. package/esm/src/transforms/veryfront-module-urls.d.ts.map +1 -1
  243. package/esm/src/transforms/veryfront-module-urls.js +7 -3
  244. package/esm/src/types/entities/getEntityInfo.d.ts.map +1 -1
  245. package/esm/src/types/entities/getEntityInfo.js +79 -127
  246. package/esm/src/utils/path-utils.d.ts +1 -1
  247. package/esm/src/utils/path-utils.d.ts.map +1 -1
  248. package/esm/src/utils/path-utils.js +16 -7
  249. package/esm/src/utils/version-constant.d.ts +1 -1
  250. package/esm/src/utils/version-constant.js +1 -1
  251. package/esm/src/utils/version.d.ts.map +1 -1
  252. package/esm/src/utils/version.js +0 -1
  253. package/esm/src/workflow/worker/dynamic-job-entrypoint.d.ts.map +1 -1
  254. package/esm/src/workflow/worker/dynamic-job-entrypoint.js +5 -72
  255. package/esm/src/workflow/worker/job-entrypoint.d.ts.map +1 -1
  256. package/esm/src/workflow/worker/job-entrypoint.js +5 -72
  257. package/esm/src/workflow/worker/shared.d.ts +18 -0
  258. package/esm/src/workflow/worker/shared.d.ts.map +1 -0
  259. package/esm/src/workflow/worker/shared.js +77 -0
  260. package/package.json +1 -1
  261. package/src/cli/router.ts +41 -2
  262. package/src/cli/shared/update-check.ts +110 -0
  263. package/src/deno.js +13 -8
  264. package/src/src/channels/control-plane.ts +6 -10
  265. package/src/src/channels/invoke.ts +7 -7
  266. package/src/src/chat/index.ts +96 -132
  267. package/src/src/config/env.ts +24 -11
  268. package/src/src/data/static-data-fetcher.ts +59 -34
  269. package/src/src/data/static-paths-fetcher.ts +4 -2
  270. package/src/src/errors/logging.ts +21 -7
  271. package/src/src/errors/user-friendly/error-formatter.ts +14 -29
  272. package/src/src/fs/index.ts +21 -30
  273. package/src/src/html/dev-scripts.ts +5 -9
  274. package/src/src/html/html-escape.ts +4 -0
  275. package/src/src/html/html-injection.ts +2 -2
  276. package/src/src/html/html-shell-generator.ts +60 -26
  277. package/src/src/html/hydration-script-builder/dev-client-renderer.ts +2 -2
  278. package/src/src/html/hydration-script-builder/dev-component-manifest.ts +2 -2
  279. package/src/src/html/hydration-script-builder/dev-error-logger.ts +2 -8
  280. package/src/src/html/hydration-script-builder/dev-scripts.ts +2 -2
  281. package/src/src/html/hydration-script-builder/hydration-data-generator.ts +2 -1
  282. package/src/src/html/hydration-script-builder/index.ts +5 -1
  283. package/src/src/html/hydration-script-builder/prod-hydration.ts +2 -2
  284. package/src/src/html/hydration-script-builder/prod-scripts.ts +16 -15
  285. package/src/src/html/schemas/html.schema.ts +2 -0
  286. package/src/src/html/styles-builder/css-pregeneration.ts +133 -1
  287. package/src/src/html/styles-builder/dev-styles.ts +2 -2
  288. package/src/src/html/utils.ts +62 -29
  289. package/src/src/integrations/remote-tools.ts +39 -37
  290. package/src/src/internal-agents/ag-ui-sse.ts +2 -17
  291. package/src/src/internal-agents/control-plane-auth.ts +8 -6
  292. package/src/src/internal-agents/request-body.ts +7 -5
  293. package/src/src/internal-agents/session-manager.ts +16 -20
  294. package/src/src/issues/core.ts +24 -27
  295. package/src/src/issues/schemas/issue.schema.ts +3 -1
  296. package/src/src/jobs/runtime-env.ts +24 -50
  297. package/src/src/markdown/index.ts +5 -8
  298. package/src/src/mcp/server.ts +50 -53
  299. package/src/src/mdx/index.ts +7 -8
  300. package/src/src/middleware/builtin/logger.ts +44 -29
  301. package/src/src/middleware/builtin/security/rate-limit.ts +20 -11
  302. package/src/src/middleware/builtin/timeout.ts +22 -13
  303. package/src/src/modules/import-map/default-import-map.ts +4 -3
  304. package/src/src/oauth/handlers/callback-handler.ts +9 -16
  305. package/src/src/oauth/handlers/index.ts +1 -1
  306. package/src/src/oauth/handlers/init-handler.ts +56 -27
  307. package/src/src/oauth/providers/index.ts +1 -1
  308. package/src/src/oauth/schemas/index.ts +1 -1
  309. package/src/src/oauth/token-store/index.ts +1 -1
  310. package/src/src/oauth/token-store/memory.ts +8 -8
  311. package/src/src/observability/request-profiler.ts +140 -0
  312. package/src/src/observability/tracing/otlp-setup.ts +16 -22
  313. package/src/src/prompt/factory.ts +16 -14
  314. package/src/src/prompt/registry.ts +14 -13
  315. package/src/src/prompt/schemas/prompt.schema.ts +0 -4
  316. package/src/src/prompt/types.ts +1 -2
  317. package/src/src/provider/local/ai-sdk-adapter.ts +3 -10
  318. package/src/src/provider/local/env.ts +22 -2
  319. package/src/src/provider/local/local-engine.ts +2 -9
  320. package/src/src/provider/model-registry.ts +2 -9
  321. package/src/src/provider/veryfront-cloud/provider.ts +1 -8
  322. package/src/src/provider/veryfront-cloud/shared.ts +12 -15
  323. package/src/src/proxy/handler.ts +90 -74
  324. package/src/src/react/compat/hooks-adapter.ts +43 -44
  325. package/src/src/react/components/Head.tsx +1 -181
  326. package/src/src/react/context/index.tsx +2 -83
  327. package/src/src/react/head-collector.ts +9 -0
  328. package/src/src/react/router/index.tsx +2 -100
  329. package/src/src/react/runtime/core.ts +303 -0
  330. package/src/src/rendering/orchestrator/html.ts +122 -18
  331. package/src/src/rendering/orchestrator/ssr-orchestrator.ts +8 -0
  332. package/src/src/rendering/orchestrator/types.ts +4 -0
  333. package/src/src/repositories/types.ts +0 -4
  334. package/src/src/resource/factory.ts +15 -11
  335. package/src/src/resource/registry.ts +7 -7
  336. package/src/src/schemas/common.ts +8 -5
  337. package/src/src/security/http/config.ts +3 -19
  338. package/src/src/security/http/response/security-handler.ts +22 -13
  339. package/src/src/security/index.ts +4 -7
  340. package/src/src/server/handlers/dev/styles-css.handler.ts +32 -14
  341. package/src/src/server/handlers/monitoring/metrics.handler.ts +3 -1
  342. package/src/src/server/handlers/request/module/module-server-handler.ts +24 -17
  343. package/src/src/server/handlers/request/prod-hydration-module.handler.ts +61 -0
  344. package/src/src/server/handlers/request/ssr/ssr.handler.ts +3 -0
  345. package/src/src/server/production-server.ts +84 -0
  346. package/src/src/server/runtime-handler/handler-context-builder.ts +1 -1
  347. package/src/src/server/runtime-handler/index.ts +44 -13
  348. package/src/src/server/runtime-handler/request-utils.ts +11 -0
  349. package/src/src/server/services/rendering/ssr.service.ts +31 -18
  350. package/src/src/server/services/rsc/endpoints/rsc-bundles.generated.ts +1 -1
  351. package/src/src/skill/allowed-tools.ts +1 -8
  352. package/src/src/skill/executor.ts +2 -2
  353. package/src/src/skill/parser.ts +13 -20
  354. package/src/src/skill/path-safety.ts +1 -1
  355. package/src/src/skill/tools.ts +27 -20
  356. package/src/src/studio/bridge/bridge-bundle.generated.ts +1 -1
  357. package/src/src/task/discovery.ts +97 -97
  358. package/src/src/tool/executor.ts +10 -8
  359. package/src/src/tool/factory.ts +21 -22
  360. package/src/src/tool/types.ts +0 -17
  361. package/src/src/transforms/esm/package-registry.ts +52 -20
  362. package/src/src/transforms/import-rewriter/strategies/veryfront-strategy.ts +2 -1
  363. package/src/src/transforms/mdx/esm-module-loader/cache-format.ts +34 -1
  364. package/src/src/transforms/mdx/esm-module-loader/module-fetcher/index.ts +1 -1
  365. package/src/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.ts +4 -0
  366. package/src/src/transforms/pipeline/stages/ssr-vf-modules/index.ts +1 -1
  367. package/src/src/transforms/veryfront-module-urls.ts +6 -2
  368. package/src/src/types/entities/getEntityInfo.ts +131 -152
  369. package/src/src/utils/path-utils.ts +16 -7
  370. package/src/src/utils/version-constant.ts +1 -1
  371. package/src/src/utils/version.ts +0 -1
  372. package/src/src/workflow/worker/dynamic-job-entrypoint.ts +18 -84
  373. package/src/src/workflow/worker/job-entrypoint.ts +18 -85
  374. package/src/src/workflow/worker/shared.ts +127 -0
  375. package/esm/src/prompt/schemas/index.d.ts +0 -7
  376. package/esm/src/prompt/schemas/index.d.ts.map +0 -1
  377. package/esm/src/prompt/schemas/index.js +0 -6
  378. package/esm/src/security/http/handlers-index.d.ts +0 -5
  379. package/esm/src/security/http/handlers-index.d.ts.map +0 -1
  380. package/esm/src/security/http/handlers-index.js +0 -3
  381. package/src/src/prompt/schemas/index.ts +0 -7
  382. package/src/src/security/http/handlers-index.ts +0 -4
@@ -1 +1 @@
1
- {"version":3,"file":"package-registry.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/package-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAEL,eAAe,EACf,qBAAqB,EAErB,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,CAAC;AAEpE;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQzE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,IAAI,SAAK,EACT,QAAQ,UAAQ,GACf,MAAM,CAOR;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUrE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE;IACxD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CACjC,GAAG,OAAO,CAAC,MAAM,CAAC,CAqClB"}
1
+ {"version":3,"file":"package-registry.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/package-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAEL,eAAe,EACf,qBAAqB,EAErB,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,CAAC;AAUpE;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQzE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,IAAI,SAAK,EACT,QAAQ,UAAQ,GACf,MAAM,CAOR;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUrE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAUD,wBAAsB,6BAA6B,CACjD,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6BjD;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE;IACxD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CACjC,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBlB"}
@@ -8,6 +8,7 @@ import { rendererLogger } from "../../utils/index.js";
8
8
  import { buildReactUrl, CSSTYPE_VERSION, DEFAULT_REACT_VERSION, getReactImportMap as getReactImportMapFromRewriter, TAILWIND_VERSION, } from "../import-rewriter/url-builder.js";
9
9
  // Re-export constants from unified source
10
10
  export { CSSTYPE_VERSION, DEFAULT_REACT_VERSION, TAILWIND_VERSION };
11
+ const dependencyVersionCache = new Map();
11
12
  /**
12
13
  * Validate React version format (semver: X.Y.Z).
13
14
  */
@@ -61,8 +62,36 @@ export function stripSemverRange(version) {
61
62
  * Compatibility no-op. Kept for tests and older call sites.
62
63
  */
63
64
  export function clearReactVersionCache() {
64
- // Intentionally empty: resolveProjectReactVersion reads package.json per call
65
- // to avoid stale version values in long-lived processes.
65
+ dependencyVersionCache.clear();
66
+ }
67
+ function getPackageJsonPath(projectDir) {
68
+ return `${projectDir}/package.json`;
69
+ }
70
+ function getMtimeMs(mtime) {
71
+ return mtime instanceof Date ? mtime.getTime() : null;
72
+ }
73
+ export async function readProjectDependencyVersions(projectDir) {
74
+ const packageJsonPath = getPackageJsonPath(projectDir);
75
+ try {
76
+ const { createFileSystem } = await import("../../platform/compat/fs.js");
77
+ const fs = createFileSystem();
78
+ const stat = await fs.stat(packageJsonPath);
79
+ const mtimeMs = getMtimeMs(stat.mtime);
80
+ const cached = dependencyVersionCache.get(packageJsonPath);
81
+ if (cached && cached.mtimeMs === mtimeMs) {
82
+ return { react: cached.react, veryfront: cached.veryfront };
83
+ }
84
+ const content = await fs.readTextFile(packageJsonPath);
85
+ const pkg = JSON.parse(content);
86
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
87
+ const react = deps.react ? normalizeReactVersion(stripSemverRange(deps.react)) : undefined;
88
+ const veryfront = deps.veryfront ? stripSemverRange(deps.veryfront) : undefined;
89
+ dependencyVersionCache.set(packageJsonPath, { mtimeMs, react, veryfront });
90
+ return { react, veryfront };
91
+ }
92
+ catch (_) {
93
+ return {};
94
+ }
66
95
  }
67
96
  /**
68
97
  * Resolve React version for a project with consistent priority:
@@ -86,21 +115,9 @@ export async function resolveProjectReactVersion(options) {
86
115
  }
87
116
  // 2. Detect from package.json
88
117
  if (projectDir) {
89
- try {
90
- const { createFileSystem } = await import("../../platform/compat/fs.js");
91
- const fs = createFileSystem();
92
- const content = await fs.readTextFile(`${projectDir}/package.json`);
93
- const pkg = JSON.parse(content);
94
- const deps = { ...pkg.dependencies, ...pkg.devDependencies };
95
- const rawVersion = deps.react;
96
- if (rawVersion) {
97
- const stripped = stripSemverRange(rawVersion);
98
- return normalizeReactVersion(stripped);
99
- }
100
- }
101
- catch (_) {
102
- /* expected: package.json may not exist or be unreadable */
103
- }
118
+ const detected = await readProjectDependencyVersions(projectDir);
119
+ if (detected.react)
120
+ return detected.react;
104
121
  }
105
122
  // 3. Fallback to default
106
123
  return DEFAULT_REACT_VERSION;
@@ -1 +1 @@
1
- {"version":3,"file":"veryfront-strategy.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/import-rewriter/strategies/veryfront-strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACd,MAAM,aAAa,CAAC;AAkBrB,qBAAa,iBAAkB,YAAW,qBAAqB;IAC7D,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,QAAQ,OAAO;IAExB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO;IASzD,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,cAAc,GAAG,aAAa;CAkDvE;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
1
+ {"version":3,"file":"veryfront-strategy.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/import-rewriter/strategies/veryfront-strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACd,MAAM,aAAa,CAAC;AAkBrB,qBAAa,iBAAkB,YAAW,qBAAqB;IAC7D,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,QAAQ,OAAO;IAExB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO;IASzD,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,cAAc,GAAG,aAAa;CAmDvE;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
@@ -36,7 +36,8 @@ export class VeryfrontStrategy {
36
36
  // Handle #veryfront/* (internal framework imports)
37
37
  if (specifier.startsWith("#veryfront/")) {
38
38
  const path = specifier.slice("#veryfront/".length);
39
- // Try resolving via deno.json mappings first (veryfront/head → react/components/Head.js)
39
+ // Try resolving via deno.json mappings first (for example,
40
+ // veryfront/head → react/runtime/core.js).
40
41
  const mapped = resolveVeryfrontModuleUrl(`veryfront/${path}`);
41
42
  if (mapped) {
42
43
  if (ctx.target === "ssr")
@@ -1 +1 @@
1
- {"version":3,"file":"cache-format.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/mdx/esm-module-loader/cache-format.ts"],"names":[],"mappings":"AAqGA,eAAO,MAAM,mCAAmC,QAA8B,CAAC;AAC/E,eAAO,MAAM,mCAAmC,QAA8B,CAAC;AAE/E,eAAO,MAAM,uBAAuB,QAGnC,CAAC;AAEF,eAAO,MAAM,mCAAmC,QAG/C,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,MAAM,CASR;AAED,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,MAAM,EACtB,YAAY,SAAwB,GACnC,MAAM,CAER;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,GACf,MAAM,CAOR;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,MAAM,CAOR"}
1
+ {"version":3,"file":"cache-format.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/mdx/esm-module-loader/cache-format.ts"],"names":[],"mappings":"AAsIA,eAAO,MAAM,mCAAmC,QAA8B,CAAC;AAC/E,eAAO,MAAM,mCAAmC,QAA8B,CAAC;AAE/E,eAAO,MAAM,uBAAuB,QAGnC,CAAC;AAEF,eAAO,MAAM,mCAAmC,QAG/C,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,MAAM,CASR;AAED,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,MAAM,EACtB,YAAY,SAAwB,GACnC,MAAM,CAER;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,GACf,MAAM,CAOR;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,MAAM,CAOR"}
@@ -2,11 +2,26 @@ import { hashCodeHex } from "../../../utils/hash-utils.js";
2
2
  import { createCacheNamespace } from "../../../utils/cache-namespace.js";
3
3
  import { REACT_DEFAULT_VERSION } from "../../../utils/constants/cdn.js";
4
4
  import { VERSION } from "../../../utils/version.js";
5
+ import { resolveVeryfrontModuleTarget, resolveVeryfrontModuleUrl, } from "../../veryfront-module-urls.js";
5
6
  import { UNRESOLVED_VF_MODULES_PATTERN } from "./constants.js";
6
7
  import { hashString } from "./utils/hash.js";
7
8
  const ALL_FILE_URL_PATTERN_SOURCE = /file:\/\/([^"'\s]+)/.source;
8
9
  const MJS_FILE_URL_PATTERN_SOURCE = /file:\/\/([^"'\s]+\.mjs)/.source;
9
10
  const CACHE_NAMESPACE_SENTINEL = "__vf_cache_namespace__";
11
+ const PUBLIC_RUNTIME_SPECIFIERS = [
12
+ "veryfront/head",
13
+ "veryfront/router",
14
+ "veryfront/context",
15
+ ];
16
+ function buildPublicRuntimeAliasSchema(overrides) {
17
+ return Object.fromEntries(PUBLIC_RUNTIME_SPECIFIERS.map((specifier) => [
18
+ specifier,
19
+ {
20
+ target: overrides?.[specifier] ?? resolveVeryfrontModuleTarget(specifier),
21
+ url: resolveVeryfrontModuleUrl(specifier),
22
+ },
23
+ ]));
24
+ }
10
25
  function formatMdxEsmTransformCacheKey(namespace, projectId, contentSourceId, reactVersion, normalizedPath, contentHash) {
11
26
  return `${namespace}:${projectId}:${contentSourceId}:${reactVersion}:${normalizedPath}:${contentHash}:ssr`;
12
27
  }
@@ -39,12 +54,22 @@ function buildMdxEsmCacheSchemaSample() {
39
54
  hashString("_vf_modules/pages/index.jsexport default 1;"),
40
55
  hashString("/tmp/project/Button.tsx"),
41
56
  ],
57
+ publicRuntimeAliases: buildPublicRuntimeAliasSchema({
58
+ "veryfront/head": "./src/react/runtime/core.ts",
59
+ "veryfront/router": "./src/react/runtime/core.ts",
60
+ "veryfront/context": "./src/react/runtime/core.ts",
61
+ }),
42
62
  frameworkVersion: VERSION,
43
63
  };
44
64
  }
45
65
  function buildFrameworkVfModuleCacheSchemaSample() {
46
66
  return {
47
- moduleFile: formatFrameworkVfModuleCacheFileName(CACHE_NAMESPACE_SENTINEL, hashCodeHex("_vf_modules/_veryfront/react/components/Head.js"), hashCodeHex("/app/.cache/veryfront-mdx-esm").slice(0, 8), hashCodeHex("export default function Head() {}")),
67
+ moduleFile: formatFrameworkVfModuleCacheFileName(CACHE_NAMESPACE_SENTINEL, hashCodeHex("/_vf_modules/_veryfront/react/runtime/core.js"), hashCodeHex("/app/.cache/veryfront-mdx-esm").slice(0, 8), hashCodeHex("export default function Head() {}")),
68
+ publicRuntimeAliases: buildPublicRuntimeAliasSchema({
69
+ "veryfront/head": "./src/react/runtime/core.ts",
70
+ "veryfront/router": "./src/react/runtime/core.ts",
71
+ "veryfront/context": "./src/react/runtime/core.ts",
72
+ }),
48
73
  };
49
74
  }
50
75
  export const MDX_ESM_ALL_FILE_URL_PATTERN_SOURCE = ALL_FILE_URL_PATTERN_SOURCE;
@@ -15,7 +15,7 @@ import type { Logger } from "../../../../utils/logger/logger.js";
15
15
  import type { RuntimeAdapter } from "../../../../platform/adapters/base.js";
16
16
  import type { ModuleFetcherContext } from "../types.js";
17
17
  export { rewriteDntImports } from "./import-rewriter.js";
18
- export { endRenderSession, startRenderSession } from "./render-sessions.js";
18
+ export { endRenderSession, hasRenderSession, startRenderSession } from "./render-sessions.js";
19
19
  /**
20
20
  * Error thrown when transform tree exceeds the timeout.
21
21
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/mdx/esm-module-loader/module-fetcher/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAO5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAexD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAS5E;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAOtD;AAED;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,SAAS,EAAE,MAAM;CAI9B;AAcD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,oBAAoB,EAC7B,gBAAgB,CAAC,EAAE,MAAM,EACzB,OAAO,GAAE,GAAG,CAAC,MAAM,CAAa,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwFxB;AAoSD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IACR,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,GACA,oBAAoB,CAUtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/mdx/esm-module-loader/module-fetcher/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAO5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAexD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAS9F;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAOtD;AAED;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,SAAS,EAAE,MAAM;CAI9B;AAcD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,oBAAoB,EAC7B,gBAAgB,CAAC,EAAE,MAAM,EACzB,OAAO,GAAE,GAAG,CAAC,MAAM,CAAa,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwFxB;AAoSD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IACR,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,GACA,oBAAoB,CAUtB"}
@@ -32,7 +32,7 @@ import { fetchModuleViaHTTP } from "./http-fetcher.js";
32
32
  import { cacheModule, normalizePath } from "./module-cache.js";
33
33
  // Re-export extracted modules for backward compatibility
34
34
  export { rewriteDntImports } from "./import-rewriter.js";
35
- export { endRenderSession, startRenderSession } from "./render-sessions.js";
35
+ export { endRenderSession, hasRenderSession, startRenderSession } from "./render-sessions.js";
36
36
  /**
37
37
  * Maximum time allowed for the entire transform tree (recursive module resolution).
38
38
  * If the cumulative time exceeds this, we fail fast instead of hanging indefinitely.
@@ -14,5 +14,6 @@ export declare function startRenderSession(sessionId: string, projectSlug?: stri
14
14
  * End a render session and record loaded modules to the manifest.
15
15
  */
16
16
  export declare function endRenderSession(sessionId: string): void;
17
+ export declare function hasRenderSession(sessionId: string): boolean;
17
18
  export declare function recordModuleToSession(normalizedPath: string): void;
18
19
  //# sourceMappingURL=render-sessions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-sessions.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAOhG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAiCxD;AAWD,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAQlE"}
1
+ {"version":3,"file":"render-sessions.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAOhG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAiCxD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3D;AAWD,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAQlE"}
@@ -58,6 +58,9 @@ export function endRenderSession(sessionId) {
58
58
  }
59
59
  renderSessions.delete(sessionId);
60
60
  }
61
+ export function hasRenderSession(sessionId) {
62
+ return renderSessions.has(sessionId);
63
+ }
61
64
  /**
62
65
  * Get the current active render session (if any).
63
66
  * Used to record modules during fetch and for per-session in-flight deduplication.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * SSR VF Modules Stage - resolves /_vf_modules/_veryfront/ paths to framework source.
3
3
  *
4
- * The SSR import map rewrites "veryfront/head" -> "/_vf_modules/_veryfront/react/components/Head.js?ssr=true"
4
+ * The SSR import map rewrites "veryfront/head" -> "/_vf_modules/_veryfront/react/runtime/core.js?ssr=true"
5
5
  * This stage resolves those paths to actual framework source files, transforms them
6
6
  * (including React import rewriting), and rewrites imports to file:// paths.
7
7
  *
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * SSR VF Modules Stage - resolves /_vf_modules/_veryfront/ paths to framework source.
3
3
  *
4
- * The SSR import map rewrites "veryfront/head" -> "/_vf_modules/_veryfront/react/components/Head.js?ssr=true"
4
+ * The SSR import map rewrites "veryfront/head" -> "/_vf_modules/_veryfront/react/runtime/core.js?ssr=true"
5
5
  * This stage resolves those paths to actual framework source files, transforms them
6
6
  * (including React import rewriting), and rewrites imports to file:// paths.
7
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"veryfront-module-urls.d.ts","sourceRoot":"","sources":["../../../src/src/transforms/veryfront-module-urls.ts"],"names":[],"mappings":"AAwGA,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7E;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE5E;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG1E;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGzE"}
1
+ {"version":3,"file":"veryfront-module-urls.d.ts","sourceRoot":"","sources":["../../../src/src/transforms/veryfront-module-urls.ts"],"names":[],"mappings":"AA4GA,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7E;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE5E;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG1E;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGzE"}
@@ -22,7 +22,7 @@ function toModuleServerUrl(target) {
22
22
  return null;
23
23
  return `/_vf_modules/_veryfront/${normalizeModulePath(relative)}`;
24
24
  }
25
- function addMapping(index, specifier, target) {
25
+ function addMapping(index, specifier, target, options) {
26
26
  if (!target.startsWith(SRC_PREFIX))
27
27
  return;
28
28
  if (specifier.endsWith("/")) {
@@ -32,6 +32,8 @@ function addMapping(index, specifier, target) {
32
32
  });
33
33
  return;
34
34
  }
35
+ if (options?.preserveExistingExact && index.exactTargets.has(specifier))
36
+ return;
35
37
  index.exactTargets.set(specifier, target);
36
38
  }
37
39
  function finalizeIndex(index) {
@@ -67,12 +69,14 @@ for (const [key, target] of Object.entries(config.exports ?? {})) {
67
69
  if (typeof target !== "string")
68
70
  continue;
69
71
  if (key === ".") {
70
- addMapping(veryfrontTargetIndex, "veryfront", target);
72
+ addMapping(veryfrontTargetIndex, "veryfront", target, { preserveExistingExact: true });
71
73
  continue;
72
74
  }
73
75
  if (!key.startsWith("./"))
74
76
  continue;
75
- addMapping(veryfrontTargetIndex, `veryfront/${key.slice(2)}`, target);
77
+ addMapping(veryfrontTargetIndex, `veryfront/${key.slice(2)}`, target, {
78
+ preserveExistingExact: true,
79
+ });
76
80
  }
77
81
  finalizeIndex(veryfrontTargetIndex);
78
82
  finalizeIndex(internalTargetIndex);
@@ -1 +1 @@
1
- {"version":3,"file":"getEntityInfo.d.ts","sourceRoot":"","sources":["../../../../src/src/types/entities/getEntityInfo.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAU,UAAU,EAAe,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAWtE,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAmJ5B;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAwM5B;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAyE5B"}
1
+ {"version":3,"file":"getEntityInfo.d.ts","sourceRoot":"","sources":["../../../../src/src/types/entities/getEntityInfo.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAU,UAAU,EAAe,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAiBtE,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAmJ5B;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAiG5B;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAoE5B"}
@@ -12,6 +12,10 @@ import { logger as baseLogger } from "../../utils/index.js";
12
12
  const logger = baseLogger.component("get-entity-by-slug");
13
13
  const entityInfoScope = createErrorScope("getEntityInfo");
14
14
  const fs = createFileSystem();
15
+ const PAGE_FILE_EXTENSIONS = ["mdx", "md", "tsx", "jsx", "ts"];
16
+ const DIRECT_ROUTE_EXTENSIONS = ["mdx", "md", "tsx", "ts"];
17
+ const LAYOUT_FILE_EXTENSIONS = ["mdx", "md", "tsx", "jsx", "ts", "js"];
18
+ const DYNAMIC_PAGE_ENTRY_PATTERN = /\[.+\]\.(mdx|md|tsx|jsx|ts|js)$/;
15
19
  export async function getEntityInfo(filePath, adapter) {
16
20
  return await withSpan("types.getEntityInfo", async () => {
17
21
  // Normalize path for Veryfront API adapter
@@ -148,7 +152,7 @@ export async function getEntityBySlug(projectDir, slug, adapter) {
148
152
  normalizedSlug,
149
153
  basePaths,
150
154
  });
151
- const pathResults = await parallelMap(basePaths, async (basePath) => {
155
+ const candidateResults = await parallelMap(basePaths, async (basePath) => {
152
156
  const resolvedPath = await resolveFile.call(adapter.fs, basePath);
153
157
  logger.debug("resolveFile result", {
154
158
  basePath,
@@ -158,7 +162,7 @@ export async function getEntityBySlug(projectDir, slug, adapter) {
158
162
  return null;
159
163
  return await getEntityInfo(resolvedPath, adapter);
160
164
  });
161
- for (const info of pathResults) {
165
+ for (const info of candidateResults) {
162
166
  if (info?.entity.isPage) {
163
167
  logger.debug("Found page via resolveFile", {
164
168
  slug,
@@ -168,115 +172,30 @@ export async function getEntityBySlug(projectDir, slug, adapter) {
168
172
  return info;
169
173
  }
170
174
  }
171
- const slugParts = normalizedSlug === "" ? [] : normalizedSlug.split("/");
172
- for (let depth = slugParts.length - 1; depth >= 0; depth--) {
173
- const parentPath = slugParts.slice(0, depth).join("/");
174
- const pagesDir = parentPath
175
- ? pathHelper.join(projectDir, "pages", parentPath)
176
- : pathHelper.join(projectDir, "pages");
177
- try {
178
- let dirExists = false;
179
- try {
180
- const stat = await withFallback(() => adapter.fs.stat(pagesDir), () => fs.stat(pagesDir), { operationName: "stat:getEntityBySlug", logError: false });
181
- dirExists = stat.isDirectory;
182
- }
183
- catch (_) {
184
- /* expected: stat may fail for non-existent directories */
185
- dirExists = false;
186
- }
187
- if (!dirExists)
188
- continue;
189
- const entries = [];
190
- for await (const entry of adapter.fs.readDir(pagesDir)) {
191
- entries.push(entry);
192
- }
193
- const dynamicEntries = entries.filter((entry) => entry.isFile && /\[.+\]\.(mdx|md|tsx|jsx|ts|js)$/.test(entry.name));
194
- const dynamicResults = await parallelMap(dynamicEntries, async (entry) => {
195
- const dynamicPath = pathHelper.join(pagesDir, entry.name);
196
- return await getEntityInfo(dynamicPath, adapter);
197
- });
198
- for (const info of dynamicResults) {
199
- if (info?.entity.isPage)
200
- return info;
201
- }
202
- }
203
- catch (_) {
204
- /* expected: directory may not exist or readDir may fail */
205
- }
206
- }
175
+ const dynamicPage = await findDynamicPageEntity(projectDir, normalizedSlug, adapter);
176
+ if (dynamicPage)
177
+ return dynamicPage;
207
178
  logger.debug("No page found via resolveFile branch", { slug, normalizedSlug });
208
179
  return null;
209
180
  }
210
- const possiblePaths = [
211
- pathHelper.join(projectDir, "pages", `${normalizedSlug}.mdx`),
212
- pathHelper.join(projectDir, "pages", `${normalizedSlug}.md`),
213
- pathHelper.join(projectDir, "pages", `${normalizedSlug}.tsx`),
214
- pathHelper.join(projectDir, "pages", `${normalizedSlug}.jsx`),
215
- pathHelper.join(projectDir, "pages", `${normalizedSlug}.ts`),
216
- pathHelper.join(projectDir, "pages", `${normalizedSlug}/index.mdx`),
217
- pathHelper.join(projectDir, "pages", `${normalizedSlug}/index.md`),
218
- pathHelper.join(projectDir, "pages", `${normalizedSlug}/index.tsx`),
219
- pathHelper.join(projectDir, "pages", `${normalizedSlug}/index.jsx`),
220
- pathHelper.join(projectDir, "pages", `${normalizedSlug}/index.ts`),
181
+ const candidatePaths = [
182
+ ...buildFileCandidates(projectDir, ["pages"], normalizedSlug, PAGE_FILE_EXTENSIONS),
183
+ ...buildFileCandidates(projectDir, ["pages"], `${normalizedSlug}/index`, PAGE_FILE_EXTENSIONS),
221
184
  ];
222
185
  if (isVeryfrontRoute) {
223
- possiblePaths.unshift(pathHelper.join(projectDir, `${normalizedSlug}.mdx`), pathHelper.join(projectDir, `${normalizedSlug}.md`), pathHelper.join(projectDir, `${normalizedSlug}.tsx`), pathHelper.join(projectDir, `${normalizedSlug}.ts`));
186
+ candidatePaths.unshift(...buildFileCandidates(projectDir, [], normalizedSlug, DIRECT_ROUTE_EXTENSIONS));
224
187
  }
225
188
  if (normalizedSlug === "index" || normalizedSlug === "") {
226
- possiblePaths.unshift(pathHelper.join(projectDir, "pages", "index.mdx"), pathHelper.join(projectDir, "pages", "index.md"), pathHelper.join(projectDir, "pages", "index.tsx"), pathHelper.join(projectDir, "pages", "index.ts"));
189
+ candidatePaths.unshift(...buildFileCandidates(projectDir, ["pages"], "index", DIRECT_ROUTE_EXTENSIONS));
227
190
  }
228
- const pathResults = await parallelMap(possiblePaths, async (p) => {
229
- return await getEntityInfo(p, adapter);
191
+ const candidateResults = await parallelMap(candidatePaths, async (candidatePath) => {
192
+ return await getEntityInfo(candidatePath, adapter);
230
193
  });
231
- for (const info of pathResults) {
194
+ for (const info of candidateResults) {
232
195
  if (info?.entity.isPage)
233
196
  return info;
234
197
  }
235
- const slugParts = normalizedSlug === "" ? [] : normalizedSlug.split("/");
236
- for (let depth = slugParts.length - 1; depth >= 0; depth--) {
237
- const parentPath = slugParts.slice(0, depth).join("/");
238
- const pagesDir = parentPath
239
- ? pathHelper.join(projectDir, "pages", parentPath)
240
- : pathHelper.join(projectDir, "pages");
241
- try {
242
- let dirExists = false;
243
- if (adapter) {
244
- try {
245
- const stat = await withFallback(() => adapter.fs.stat(pagesDir), () => fs.stat(pagesDir), { operationName: "stat:getEntityBySlug", logError: false });
246
- dirExists = stat.isDirectory;
247
- }
248
- catch (_) {
249
- /* expected: stat may fail for non-existent directories */
250
- dirExists = false;
251
- }
252
- }
253
- else {
254
- dirExists = await fs.exists(pagesDir);
255
- }
256
- if (!dirExists)
257
- continue;
258
- const entries = [];
259
- const dirIterator = adapter?.fs.readDir
260
- ? adapter.fs.readDir(pagesDir)
261
- : fs.readDir(pagesDir);
262
- for await (const entry of dirIterator) {
263
- entries.push(entry);
264
- }
265
- const dynamicEntries = entries.filter((entry) => entry.isFile && /\[.+\]\.(mdx|md|tsx|jsx|ts|js)$/.test(entry.name));
266
- const dynamicResults = await parallelMap(dynamicEntries, async (entry) => {
267
- const dynamicPath = pathHelper.join(pagesDir, entry.name);
268
- return await getEntityInfo(dynamicPath, adapter);
269
- });
270
- for (const info of dynamicResults) {
271
- if (info?.entity.isPage)
272
- return info;
273
- }
274
- }
275
- catch (_) {
276
- /* expected: directory may not exist or readDir may fail */
277
- }
278
- }
279
- return null;
198
+ return await findDynamicPageEntity(projectDir, normalizedSlug, adapter);
280
199
  }, {
281
200
  "entity.slug": slug,
282
201
  "entity.normalized_slug": normalizeSlug(slug),
@@ -301,41 +220,23 @@ export async function getLayoutEntity(projectDir, layoutName, adapter) {
301
220
  return null;
302
221
  }
303
222
  // Files in layouts/ are treated as layouts by convention (any extension)
304
- const layoutsDirPaths = [
305
- pathHelper.join(projectDir, "layouts", `${resolvedLayoutName}.mdx`),
306
- pathHelper.join(projectDir, "layouts", `${resolvedLayoutName}.md`),
307
- pathHelper.join(projectDir, "layouts", `${resolvedLayoutName}.tsx`),
308
- pathHelper.join(projectDir, "layouts", `${resolvedLayoutName}.jsx`),
309
- pathHelper.join(projectDir, "layouts", `${resolvedLayoutName}.ts`),
310
- pathHelper.join(projectDir, "layouts", `${resolvedLayoutName}.js`),
311
- ];
223
+ const layoutCandidatePaths = buildFileCandidates(projectDir, ["layouts"], resolvedLayoutName, LAYOUT_FILE_EXTENSIONS);
312
224
  // Files in components/ must be detected as layouts by name/frontmatter
313
- const componentsPaths = [
314
- pathHelper.join(projectDir, "components", `${resolvedLayoutName}Layout.mdx`),
315
- pathHelper.join(projectDir, "components", `${resolvedLayoutName}Layout.md`),
316
- pathHelper.join(projectDir, "components", `${resolvedLayoutName}Layout.tsx`),
317
- pathHelper.join(projectDir, "components", `${resolvedLayoutName}Layout.jsx`),
318
- pathHelper.join(projectDir, "components", `${resolvedLayoutName}Layout.ts`),
319
- pathHelper.join(projectDir, "components", `${resolvedLayoutName}Layout.js`),
320
- pathHelper.join(projectDir, "components", "Layout.mdx"),
321
- pathHelper.join(projectDir, "components", "Layout.md"),
322
- pathHelper.join(projectDir, "components", "Layout.tsx"),
323
- pathHelper.join(projectDir, "components", "Layout.jsx"),
324
- pathHelper.join(projectDir, "components", "Layout.ts"),
325
- pathHelper.join(projectDir, "components", "Layout.js"),
225
+ const componentCandidatePaths = [
226
+ ...buildFileCandidates(projectDir, ["components"], `${resolvedLayoutName}Layout`, LAYOUT_FILE_EXTENSIONS),
227
+ ...buildFileCandidates(projectDir, ["components"], "Layout", LAYOUT_FILE_EXTENSIONS),
326
228
  ];
327
- const allPaths = [...layoutsDirPaths, ...componentsPaths];
328
- const pathResults = await parallelMap(allPaths, async (p) => {
329
- return await getEntityInfo(p, adapter);
229
+ const candidateResults = await parallelMap([...layoutCandidatePaths, ...componentCandidatePaths], async (candidatePath) => {
230
+ return await getEntityInfo(candidatePath, adapter);
330
231
  });
331
- const layoutsDirCount = layoutsDirPaths.length;
332
- for (let i = 0; i < pathResults.length; i++) {
333
- const info = pathResults[i];
232
+ const layoutCandidateCount = layoutCandidatePaths.length;
233
+ for (let i = 0; i < candidateResults.length; i++) {
234
+ const info = candidateResults[i];
334
235
  if (!info)
335
236
  continue;
336
237
  // layouts/ dir: any valid entity is a layout
337
238
  // components/ dir: must be detected as layout by name/frontmatter
338
- if (i < layoutsDirCount || info.entity.isLayout) {
239
+ if (i < layoutCandidateCount || info.entity.isLayout) {
339
240
  return {
340
241
  entity: {
341
242
  ...info.entity,
@@ -350,6 +251,57 @@ export async function getLayoutEntity(projectDir, layoutName, adapter) {
350
251
  return null;
351
252
  }, { "layout.name": layoutName, "layout.projectDir": projectDir });
352
253
  }
254
+ function buildFileCandidates(projectDir, segments, relativeStem, extensions) {
255
+ return extensions.map((extension) => pathHelper.join(projectDir, ...segments, `${relativeStem}.${extension}`));
256
+ }
257
+ async function findDynamicPageEntity(projectDir, normalizedSlug, adapter) {
258
+ const slugParts = normalizedSlug === "" ? [] : normalizedSlug.split("/");
259
+ for (let depth = slugParts.length - 1; depth >= 0; depth--) {
260
+ const parentPath = slugParts.slice(0, depth).join("/");
261
+ const pagesDir = parentPath
262
+ ? pathHelper.join(projectDir, "pages", parentPath)
263
+ : pathHelper.join(projectDir, "pages");
264
+ try {
265
+ const canReadDirectory = await pagesDirectoryExists(pagesDir, adapter);
266
+ if (!canReadDirectory)
267
+ continue;
268
+ const entries = await readDirectoryEntries(pagesDir, adapter);
269
+ const dynamicEntries = entries.filter((entry) => entry.isFile && DYNAMIC_PAGE_ENTRY_PATTERN.test(entry.name));
270
+ const candidateResults = await parallelMap(dynamicEntries, async (entry) => {
271
+ const candidatePath = pathHelper.join(pagesDir, entry.name);
272
+ return await getEntityInfo(candidatePath, adapter);
273
+ });
274
+ for (const info of candidateResults) {
275
+ if (info?.entity.isPage)
276
+ return info;
277
+ }
278
+ }
279
+ catch (_) {
280
+ /* expected: directory may not exist or readDir may fail */
281
+ }
282
+ }
283
+ return null;
284
+ }
285
+ async function pagesDirectoryExists(pagesDir, adapter) {
286
+ if (!adapter)
287
+ return await fs.exists(pagesDir);
288
+ try {
289
+ const stat = await withFallback(() => adapter.fs.stat(pagesDir), () => fs.stat(pagesDir), { operationName: "stat:getEntityBySlug", logError: false });
290
+ return stat.isDirectory;
291
+ }
292
+ catch (_) {
293
+ /* expected: stat may fail for non-existent directories */
294
+ return false;
295
+ }
296
+ }
297
+ async function readDirectoryEntries(pagesDir, adapter) {
298
+ const entries = [];
299
+ const iterator = adapter?.fs.readDir ? adapter.fs.readDir(pagesDir) : fs.readDir(pagesDir);
300
+ for await (const entry of iterator) {
301
+ entries.push(entry);
302
+ }
303
+ return entries;
304
+ }
353
305
  function getSlugFromPath(filePath) {
354
306
  const parts = filePath.split(pathHelper.sep);
355
307
  const fileName = parts[parts.length - 1] ?? "";
@@ -18,7 +18,7 @@ export declare function hasHashedFilename(path: string): boolean;
18
18
  */
19
19
  export declare function getEsbuildLoader(filePath: string): "tsx" | "jsx" | "ts" | "js";
20
20
  export { isAbsolute as isAbsolutePath } from "../platform/compat/path/index.js";
21
- export declare function toBase64Url(s: string): string;
21
+ export declare function toBase64Url(input: string): string;
22
22
  export declare function fromBase64Url(encoded: string): string;
23
23
  /**
24
24
  * Check if a normalized path is a framework path that should not be fetched from API.
@@ -1 +1 @@
1
- {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../../src/src/utils/path-utils.ts"],"names":[],"mappings":"AAQA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAMvE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAQD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAG9E;AAED,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEhF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAQD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASrD;AAgCD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAQrE"}
1
+ {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../../src/src/utils/path-utils.ts"],"names":[],"mappings":"AASA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAMvE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAQD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAG9E;AAED,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEhF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAUD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAerD;AAgCD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAQrE"}
@@ -1,4 +1,5 @@
1
1
  import { normalize } from "../platform/compat/path/index.js";
2
+ import { base64urlEncode } from "./base64url.js";
2
3
  import { logger } from "./logger/logger.js";
3
4
  function stripTrailingSlash(pathname) {
4
5
  if (pathname === "/")
@@ -65,20 +66,28 @@ export function getEsbuildLoader(filePath) {
65
66
  return EXTENSION_TO_LOADER[ext] ?? "js";
66
67
  }
67
68
  export { isAbsolute as isAbsolutePath } from "../platform/compat/path/index.js";
68
- export function toBase64Url(s) {
69
- return btoa(s).replaceAll("+", "-").replaceAll("/", "_").replaceAll("=", "");
69
+ export function toBase64Url(input) {
70
+ return base64urlEncode(input);
70
71
  }
71
- function getBase64Padding(length) {
72
- if (length % 4 === 2)
72
+ function getRequiredBase64Padding(length) {
73
+ const remainder = length % 4;
74
+ if (remainder === 0)
75
+ return "";
76
+ if (remainder === 2)
73
77
  return "==";
74
- if (length % 4 === 3)
78
+ if (remainder === 3)
75
79
  return "=";
76
- return "";
80
+ return undefined;
77
81
  }
78
82
  export function fromBase64Url(encoded) {
79
83
  const b64 = encoded.replaceAll("-", "+").replaceAll("_", "/");
84
+ const padding = getRequiredBase64Padding(b64.length);
85
+ if (padding === undefined) {
86
+ logger.debug(`Failed to decode base64url string "${encoded}": invalid length`);
87
+ return "";
88
+ }
80
89
  try {
81
- return atob(b64 + getBase64Padding(b64.length));
90
+ return atob(b64 + padding);
82
91
  }
83
92
  catch (error) {
84
93
  logger.debug(`Failed to decode base64url string "${encoded}":`, error);
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.128";
1
+ export declare const VERSION = "0.1.129";
2
2
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.128";
3
+ export const VERSION = "0.1.129";
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/src/utils/version.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGzF;AAUD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAKd;AAED,eAAO,MAAM,eAAe,QAK1B,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,MAAmB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,YAAY,CAMxE"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/src/utils/version.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGzF;AAUD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAKd;AAED,eAAO,MAAM,eAAe,QAI1B,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,MAAmB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,YAAY,CAMxE"}