veryfront 0.1.215 → 0.1.217

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 (305) hide show
  1. package/README.md +1 -1
  2. package/esm/cli/commands/extension/command-help.d.ts +3 -0
  3. package/esm/cli/commands/extension/command-help.d.ts.map +1 -0
  4. package/esm/cli/commands/extension/command-help.js +16 -0
  5. package/esm/cli/commands/extension/handler.d.ts +3 -0
  6. package/esm/cli/commands/extension/handler.d.ts.map +1 -0
  7. package/esm/cli/commands/extension/handler.js +36 -0
  8. package/esm/cli/commands/extension/init-command.d.ts +19 -0
  9. package/esm/cli/commands/extension/init-command.d.ts.map +1 -0
  10. package/esm/cli/commands/extension/init-command.js +122 -0
  11. package/esm/cli/commands/extension/validate-command.d.ts +13 -0
  12. package/esm/cli/commands/extension/validate-command.d.ts.map +1 -0
  13. package/esm/cli/commands/extension/validate-command.js +62 -0
  14. package/esm/cli/commands/generate/integration-generator-helpers.d.ts +35 -0
  15. package/esm/cli/commands/generate/integration-generator-helpers.d.ts.map +1 -0
  16. package/esm/cli/commands/generate/integration-generator-helpers.js +123 -0
  17. package/esm/cli/commands/generate/integration-generator.d.ts +1 -2
  18. package/esm/cli/commands/generate/integration-generator.d.ts.map +1 -1
  19. package/esm/cli/commands/generate/integration-generator.js +1 -123
  20. package/esm/cli/commands/knowledge/command-helpers.d.ts +48 -0
  21. package/esm/cli/commands/knowledge/command-helpers.d.ts.map +1 -0
  22. package/esm/cli/commands/knowledge/command-helpers.js +216 -0
  23. package/esm/cli/commands/knowledge/command.d.ts +12 -17
  24. package/esm/cli/commands/knowledge/command.d.ts.map +1 -1
  25. package/esm/cli/commands/knowledge/command.js +26 -214
  26. package/esm/cli/help/command-definitions.d.ts.map +1 -1
  27. package/esm/cli/help/command-definitions.js +2 -0
  28. package/esm/cli/mcp/remote-file-tool-helpers.d.ts +5 -0
  29. package/esm/cli/mcp/remote-file-tool-helpers.d.ts.map +1 -0
  30. package/esm/cli/mcp/remote-file-tool-helpers.js +22 -0
  31. package/esm/cli/mcp/remote-file-tools.d.ts.map +1 -1
  32. package/esm/cli/mcp/remote-file-tools.js +1 -22
  33. package/esm/cli/router.d.ts.map +1 -1
  34. package/esm/cli/router.js +2 -0
  35. package/esm/cli/templates/integration-loader-helpers.d.ts +8 -0
  36. package/esm/cli/templates/integration-loader-helpers.d.ts.map +1 -0
  37. package/esm/cli/templates/integration-loader-helpers.js +29 -0
  38. package/esm/cli/templates/integration-loader.d.ts.map +1 -1
  39. package/esm/cli/templates/integration-loader.js +5 -21
  40. package/esm/cli/templates/manifest.d.ts +1 -0
  41. package/esm/cli/templates/manifest.js +2 -1
  42. package/esm/deno.d.ts +3 -0
  43. package/esm/deno.js +5 -2
  44. package/esm/src/agent/runtime/index.d.ts.map +1 -1
  45. package/esm/src/agent/runtime/index.js +48 -90
  46. package/esm/src/chat/ag-ui-helpers.d.ts +17 -0
  47. package/esm/src/chat/ag-ui-helpers.d.ts.map +1 -0
  48. package/esm/src/chat/ag-ui-helpers.js +111 -0
  49. package/esm/src/chat/ag-ui.d.ts.map +1 -1
  50. package/esm/src/chat/ag-ui.js +1 -111
  51. package/esm/src/config/schemas/config.schema.d.ts +1 -0
  52. package/esm/src/config/schemas/config.schema.d.ts.map +1 -1
  53. package/esm/src/config/schemas/config.schema.js +11 -0
  54. package/esm/src/config/schemas/index.d.ts +11 -1
  55. package/esm/src/config/schemas/index.d.ts.map +1 -1
  56. package/esm/src/errors/error-registry-helpers.d.ts +6 -0
  57. package/esm/src/errors/error-registry-helpers.d.ts.map +1 -0
  58. package/esm/src/errors/error-registry-helpers.js +9 -0
  59. package/esm/src/errors/error-registry.d.ts.map +1 -1
  60. package/esm/src/errors/error-registry.js +4 -3
  61. package/esm/src/extensions/capabilities.d.ts +20 -0
  62. package/esm/src/extensions/capabilities.d.ts.map +1 -0
  63. package/esm/src/extensions/capabilities.js +77 -0
  64. package/esm/src/extensions/contracts.d.ts +10 -0
  65. package/esm/src/extensions/contracts.d.ts.map +1 -0
  66. package/esm/src/extensions/contracts.js +28 -0
  67. package/esm/src/extensions/discovery.d.ts +48 -0
  68. package/esm/src/extensions/discovery.d.ts.map +1 -0
  69. package/esm/src/extensions/discovery.js +179 -0
  70. package/esm/src/extensions/errors.d.ts +10 -0
  71. package/esm/src/extensions/errors.d.ts.map +1 -0
  72. package/esm/src/extensions/errors.js +34 -0
  73. package/esm/src/extensions/factory-loader.d.ts +29 -0
  74. package/esm/src/extensions/factory-loader.d.ts.map +1 -0
  75. package/esm/src/extensions/factory-loader.js +63 -0
  76. package/esm/src/extensions/index.d.ts +37 -0
  77. package/esm/src/extensions/index.d.ts.map +1 -0
  78. package/esm/src/extensions/index.js +41 -0
  79. package/esm/src/extensions/interfaces/ai-model-provider.d.ts +94 -0
  80. package/esm/src/extensions/interfaces/ai-model-provider.d.ts.map +1 -0
  81. package/esm/src/extensions/interfaces/ai-model-provider.js +8 -0
  82. package/esm/src/extensions/interfaces/auth-provider.d.ts +49 -0
  83. package/esm/src/extensions/interfaces/auth-provider.d.ts.map +1 -0
  84. package/esm/src/extensions/interfaces/auth-provider.js +8 -0
  85. package/esm/src/extensions/interfaces/bundler.d.ts +118 -0
  86. package/esm/src/extensions/interfaces/bundler.d.ts.map +1 -0
  87. package/esm/src/extensions/interfaces/bundler.js +8 -0
  88. package/esm/src/extensions/interfaces/cache-store.d.ts +27 -0
  89. package/esm/src/extensions/interfaces/cache-store.d.ts.map +1 -0
  90. package/esm/src/extensions/interfaces/cache-store.js +8 -0
  91. package/esm/src/extensions/interfaces/code-parser.d.ts +76 -0
  92. package/esm/src/extensions/interfaces/code-parser.d.ts.map +1 -0
  93. package/esm/src/extensions/interfaces/code-parser.js +8 -0
  94. package/esm/src/extensions/interfaces/content-transformer.d.ts +40 -0
  95. package/esm/src/extensions/interfaces/content-transformer.d.ts.map +1 -0
  96. package/esm/src/extensions/interfaces/content-transformer.js +8 -0
  97. package/esm/src/extensions/interfaces/css-processor.d.ts +38 -0
  98. package/esm/src/extensions/interfaces/css-processor.d.ts.map +1 -0
  99. package/esm/src/extensions/interfaces/css-processor.js +8 -0
  100. package/esm/src/extensions/interfaces/database-client.d.ts +31 -0
  101. package/esm/src/extensions/interfaces/database-client.d.ts.map +1 -0
  102. package/esm/src/extensions/interfaces/database-client.js +8 -0
  103. package/esm/src/extensions/interfaces/embedding-provider.d.ts +37 -0
  104. package/esm/src/extensions/interfaces/embedding-provider.d.ts.map +1 -0
  105. package/esm/src/extensions/interfaces/embedding-provider.js +8 -0
  106. package/esm/src/extensions/interfaces/index.d.ts +21 -0
  107. package/esm/src/extensions/interfaces/index.d.ts.map +1 -0
  108. package/esm/src/extensions/interfaces/index.js +9 -0
  109. package/esm/src/extensions/interfaces/node-compat.d.ts +25 -0
  110. package/esm/src/extensions/interfaces/node-compat.d.ts.map +1 -0
  111. package/esm/src/extensions/interfaces/node-compat.js +8 -0
  112. package/esm/src/extensions/interfaces/schema-validator.d.ts +46 -0
  113. package/esm/src/extensions/interfaces/schema-validator.d.ts.map +1 -0
  114. package/esm/src/extensions/interfaces/schema-validator.js +8 -0
  115. package/esm/src/extensions/interfaces/tracing-exporter.d.ts +44 -0
  116. package/esm/src/extensions/interfaces/tracing-exporter.d.ts.map +1 -0
  117. package/esm/src/extensions/interfaces/tracing-exporter.js +8 -0
  118. package/esm/src/extensions/loader.d.ts +33 -0
  119. package/esm/src/extensions/loader.d.ts.map +1 -0
  120. package/esm/src/extensions/loader.js +209 -0
  121. package/esm/src/extensions/orchestrate.d.ts +54 -0
  122. package/esm/src/extensions/orchestrate.d.ts.map +1 -0
  123. package/esm/src/extensions/orchestrate.js +116 -0
  124. package/esm/src/extensions/recommendations.d.ts +7 -0
  125. package/esm/src/extensions/recommendations.d.ts.map +1 -0
  126. package/esm/src/extensions/recommendations.js +22 -0
  127. package/esm/src/extensions/types.d.ts +47 -0
  128. package/esm/src/extensions/types.d.ts.map +1 -0
  129. package/esm/src/extensions/types.js +6 -0
  130. package/esm/src/extensions/validation.d.ts +44 -0
  131. package/esm/src/extensions/validation.d.ts.map +1 -0
  132. package/esm/src/extensions/validation.js +115 -0
  133. package/esm/src/html/styles-builder/plugin-loader.d.ts.map +1 -1
  134. package/esm/src/html/styles-builder/plugin-loader.js +23 -0
  135. package/esm/src/html/styles-builder/tailwind-plugin-allowlist.d.ts +29 -0
  136. package/esm/src/html/styles-builder/tailwind-plugin-allowlist.d.ts.map +1 -0
  137. package/esm/src/html/styles-builder/tailwind-plugin-allowlist.js +48 -0
  138. package/esm/src/modules/react-loader/ssr-module-loader/loader-helpers.d.ts +15 -0
  139. package/esm/src/modules/react-loader/ssr-module-loader/loader-helpers.d.ts.map +1 -0
  140. package/esm/src/modules/react-loader/ssr-module-loader/loader-helpers.js +22 -0
  141. package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts +0 -2
  142. package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts.map +1 -1
  143. package/esm/src/modules/react-loader/ssr-module-loader/loader.js +4 -24
  144. package/esm/src/platform/adapters/fs/veryfront/adapter-helpers.d.ts +19 -0
  145. package/esm/src/platform/adapters/fs/veryfront/adapter-helpers.d.ts.map +1 -0
  146. package/esm/src/platform/adapters/fs/veryfront/adapter-helpers.js +26 -0
  147. package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts.map +1 -1
  148. package/esm/src/platform/adapters/fs/veryfront/adapter.js +4 -20
  149. package/esm/src/platform/adapters/fs/veryfront/read-operations-helpers.d.ts +1 -0
  150. package/esm/src/platform/adapters/fs/veryfront/read-operations-helpers.d.ts.map +1 -1
  151. package/esm/src/platform/adapters/fs/veryfront/read-operations-helpers.js +3 -0
  152. package/esm/src/platform/adapters/fs/veryfront/read-operations.d.ts.map +1 -1
  153. package/esm/src/platform/adapters/fs/veryfront/read-operations.js +4 -7
  154. package/esm/src/platform/adapters/fs/veryfront/websocket-manager-helpers.d.ts +28 -0
  155. package/esm/src/platform/adapters/fs/veryfront/websocket-manager-helpers.d.ts.map +1 -0
  156. package/esm/src/platform/adapters/fs/veryfront/websocket-manager-helpers.js +41 -0
  157. package/esm/src/platform/adapters/fs/veryfront/websocket-manager.d.ts +1 -4
  158. package/esm/src/platform/adapters/fs/veryfront/websocket-manager.d.ts.map +1 -1
  159. package/esm/src/platform/adapters/fs/veryfront/websocket-manager.js +7 -40
  160. package/esm/src/platform/compat/process/command.d.ts +31 -0
  161. package/esm/src/platform/compat/process/command.d.ts.map +1 -0
  162. package/esm/src/platform/compat/process/command.js +193 -0
  163. package/esm/src/platform/compat/process/env.d.ts +31 -0
  164. package/esm/src/platform/compat/process/env.d.ts.map +1 -0
  165. package/esm/src/platform/compat/process/env.js +175 -0
  166. package/esm/src/platform/compat/process/lifecycle.d.ts +98 -0
  167. package/esm/src/platform/compat/process/lifecycle.d.ts.map +1 -0
  168. package/esm/src/platform/compat/process/lifecycle.js +305 -0
  169. package/esm/src/platform/compat/process/runtime-process.d.ts +10 -0
  170. package/esm/src/platform/compat/process/runtime-process.d.ts.map +1 -0
  171. package/esm/src/platform/compat/process/runtime-process.js +24 -0
  172. package/esm/src/platform/compat/process.d.ts +4 -165
  173. package/esm/src/platform/compat/process.d.ts.map +1 -1
  174. package/esm/src/platform/compat/process.js +4 -682
  175. package/esm/src/platform/index.d.ts +1 -1
  176. package/esm/src/platform/index.d.ts.map +1 -1
  177. package/esm/src/provider/runtime-loader/provider-endpoints.d.ts +8 -0
  178. package/esm/src/provider/runtime-loader/provider-endpoints.d.ts.map +1 -0
  179. package/esm/src/provider/runtime-loader/provider-endpoints.js +27 -0
  180. package/esm/src/provider/runtime-loader/provider-request-init.d.ts +32 -0
  181. package/esm/src/provider/runtime-loader/provider-request-init.d.ts.map +1 -0
  182. package/esm/src/provider/runtime-loader/provider-request-init.js +67 -0
  183. package/esm/src/provider/runtime-loader/tool-input-status.d.ts +17 -0
  184. package/esm/src/provider/runtime-loader/tool-input-status.d.ts.map +1 -0
  185. package/esm/src/provider/runtime-loader/tool-input-status.js +155 -0
  186. package/esm/src/provider/runtime-loader.d.ts +2 -3
  187. package/esm/src/provider/runtime-loader.d.ts.map +1 -1
  188. package/esm/src/provider/runtime-loader.js +92 -291
  189. package/esm/src/proxy/handler.d.ts.map +1 -1
  190. package/esm/src/proxy/handler.js +14 -0
  191. package/esm/src/rendering/orchestrator/pipeline-helpers.d.ts +8 -0
  192. package/esm/src/rendering/orchestrator/pipeline-helpers.d.ts.map +1 -0
  193. package/esm/src/rendering/orchestrator/pipeline-helpers.js +20 -0
  194. package/esm/src/rendering/orchestrator/pipeline.d.ts +0 -3
  195. package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
  196. package/esm/src/rendering/orchestrator/pipeline.js +4 -22
  197. package/esm/src/routing/api/module-loader/loader-helpers.d.ts +10 -0
  198. package/esm/src/routing/api/module-loader/loader-helpers.d.ts.map +1 -0
  199. package/esm/src/routing/api/module-loader/loader-helpers.js +62 -0
  200. package/esm/src/routing/api/module-loader/loader.d.ts +1 -1
  201. package/esm/src/routing/api/module-loader/loader.d.ts.map +1 -1
  202. package/esm/src/routing/api/module-loader/loader.js +2 -60
  203. package/esm/src/server/bootstrap.d.ts +22 -2
  204. package/esm/src/server/bootstrap.d.ts.map +1 -1
  205. package/esm/src/server/bootstrap.js +67 -5
  206. package/esm/src/server/dev-ui/manifest.d.ts +2 -0
  207. package/esm/src/server/dev-ui/manifest.js +3 -1
  208. package/esm/src/server/handlers/request/api/project-discovery.d.ts.map +1 -1
  209. package/esm/src/server/handlers/request/api/project-discovery.js +14 -8
  210. package/esm/src/server/production-server.js +1 -1
  211. package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.d.ts.map +1 -1
  212. package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.js +2 -2
  213. package/esm/src/server/utils/domain-parser.d.ts.map +1 -1
  214. package/esm/src/server/utils/domain-parser.js +4 -0
  215. package/esm/src/studio/bridge/bridge-bundle.generated.d.ts.map +1 -1
  216. package/esm/src/studio/bridge/bridge-bundle.generated.js +1 -1
  217. package/esm/src/tool/index.d.ts +1 -1
  218. package/esm/src/tool/index.d.ts.map +1 -1
  219. package/esm/src/tool/types.d.ts +20 -0
  220. package/esm/src/tool/types.d.ts.map +1 -1
  221. package/esm/src/utils/version-constant.d.ts +1 -1
  222. package/esm/src/utils/version-constant.js +1 -1
  223. package/package.json +7 -1
  224. package/src/cli/commands/extension/command-help.ts +18 -0
  225. package/src/cli/commands/extension/handler.ts +41 -0
  226. package/src/cli/commands/extension/init-command.ts +140 -0
  227. package/src/cli/commands/extension/validate-command.ts +78 -0
  228. package/src/cli/commands/generate/integration-generator-helpers.ts +185 -0
  229. package/src/cli/commands/generate/integration-generator.ts +12 -168
  230. package/src/cli/commands/knowledge/command-helpers.ts +295 -0
  231. package/src/cli/commands/knowledge/command.ts +34 -261
  232. package/src/cli/help/command-definitions.ts +2 -0
  233. package/src/cli/mcp/remote-file-tool-helpers.ts +27 -0
  234. package/src/cli/mcp/remote-file-tools.ts +6 -28
  235. package/src/cli/router.ts +2 -0
  236. package/src/cli/templates/integration-loader-helpers.ts +49 -0
  237. package/src/cli/templates/integration-loader.ts +10 -28
  238. package/src/cli/templates/manifest.js +2 -1
  239. package/src/deno.js +5 -2
  240. package/src/src/agent/runtime/index.ts +77 -94
  241. package/src/src/chat/ag-ui-helpers.ts +139 -0
  242. package/src/src/chat/ag-ui.ts +11 -139
  243. package/src/src/config/schemas/config.schema.ts +11 -0
  244. package/src/src/config/schemas/index.ts +15 -1
  245. package/src/src/errors/error-registry-helpers.ts +23 -0
  246. package/src/src/errors/error-registry.ts +8 -3
  247. package/src/src/extensions/capabilities.ts +97 -0
  248. package/src/src/extensions/contracts.ts +36 -0
  249. package/src/src/extensions/discovery.ts +221 -0
  250. package/src/src/extensions/errors.ts +39 -0
  251. package/src/src/extensions/factory-loader.ts +76 -0
  252. package/src/src/extensions/index.ts +79 -0
  253. package/src/src/extensions/interfaces/ai-model-provider.ts +100 -0
  254. package/src/src/extensions/interfaces/auth-provider.ts +52 -0
  255. package/src/src/extensions/interfaces/bundler.ts +116 -0
  256. package/src/src/extensions/interfaces/cache-store.ts +27 -0
  257. package/src/src/extensions/interfaces/code-parser.ts +84 -0
  258. package/src/src/extensions/interfaces/content-transformer.ts +38 -0
  259. package/src/src/extensions/interfaces/css-processor.ts +40 -0
  260. package/src/src/extensions/interfaces/database-client.ts +35 -0
  261. package/src/src/extensions/interfaces/embedding-provider.ts +39 -0
  262. package/src/src/extensions/interfaces/index.ts +81 -0
  263. package/src/src/extensions/interfaces/node-compat.ts +25 -0
  264. package/src/src/extensions/interfaces/schema-validator.ts +51 -0
  265. package/src/src/extensions/interfaces/tracing-exporter.ts +42 -0
  266. package/src/src/extensions/loader.ts +245 -0
  267. package/src/src/extensions/orchestrate.ts +184 -0
  268. package/src/src/extensions/recommendations.ts +24 -0
  269. package/src/src/extensions/types.ts +57 -0
  270. package/src/src/extensions/validation.ts +147 -0
  271. package/src/src/html/styles-builder/plugin-loader.ts +32 -0
  272. package/src/src/html/styles-builder/tailwind-plugin-allowlist.ts +51 -0
  273. package/src/src/modules/react-loader/ssr-module-loader/loader-helpers.ts +37 -0
  274. package/src/src/modules/react-loader/ssr-module-loader/loader.ts +8 -39
  275. package/src/src/platform/adapters/fs/veryfront/adapter-helpers.ts +43 -0
  276. package/src/src/platform/adapters/fs/veryfront/adapter.ts +8 -22
  277. package/src/src/platform/adapters/fs/veryfront/read-operations-helpers.ts +4 -0
  278. package/src/src/platform/adapters/fs/veryfront/read-operations.ts +4 -7
  279. package/src/src/platform/adapters/fs/veryfront/websocket-manager-helpers.ts +73 -0
  280. package/src/src/platform/adapters/fs/veryfront/websocket-manager.ts +29 -44
  281. package/src/src/platform/compat/process/command.ts +297 -0
  282. package/src/src/platform/compat/process/env.ts +227 -0
  283. package/src/src/platform/compat/process/lifecycle.ts +330 -0
  284. package/src/src/platform/compat/process/runtime-process.ts +27 -0
  285. package/src/src/platform/compat/process.ts +37 -870
  286. package/src/src/platform/index.ts +1 -0
  287. package/src/src/provider/runtime-loader/provider-endpoints.ts +50 -0
  288. package/src/src/provider/runtime-loader/provider-request-init.ts +101 -0
  289. package/src/src/provider/runtime-loader/tool-input-status.ts +210 -0
  290. package/src/src/provider/runtime-loader.ts +113 -368
  291. package/src/src/proxy/handler.ts +16 -0
  292. package/src/src/rendering/orchestrator/pipeline-helpers.ts +35 -0
  293. package/src/src/rendering/orchestrator/pipeline.ts +8 -35
  294. package/src/src/routing/api/module-loader/loader-helpers.ts +68 -0
  295. package/src/src/routing/api/module-loader/loader.ts +8 -65
  296. package/src/src/server/bootstrap.ts +88 -7
  297. package/src/src/server/dev-ui/manifest.js +3 -1
  298. package/src/src/server/handlers/request/api/project-discovery.ts +19 -8
  299. package/src/src/server/production-server.ts +1 -1
  300. package/src/src/server/services/rsc/endpoints/rsc-bundles.generated.ts +2 -2
  301. package/src/src/server/utils/domain-parser.ts +4 -0
  302. package/src/src/studio/bridge/bridge-bundle.generated.ts +1 -1
  303. package/src/src/tool/index.ts +1 -0
  304. package/src/src/tool/types.ts +21 -0
  305. package/src/src/utils/version-constant.ts +1 -1
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Core types for the veryfront extension system.
3
+ *
4
+ * @module extensions/types
5
+ */
6
+ /**
7
+ * Declares a system capability an extension requires.
8
+ * Object-based for extensibility -- scoping fields vary by type.
9
+ */
10
+ export interface Capability {
11
+ type: string;
12
+ [key: string]: unknown;
13
+ }
14
+ export interface ExtensionContext {
15
+ get<T>(contract: string): T | undefined;
16
+ require<T>(contract: string): T;
17
+ provide<T>(contract: string, impl: T): void;
18
+ config: Record<string, unknown>;
19
+ logger: ExtensionLogger;
20
+ }
21
+ export interface ExtensionLogger {
22
+ debug(message: string, ...args: unknown[]): void;
23
+ info(message: string, ...args: unknown[]): void;
24
+ warn(message: string, ...args: unknown[]): void;
25
+ error(message: string, ...args: unknown[]): void;
26
+ }
27
+ export interface Extension {
28
+ name: string;
29
+ version: string;
30
+ capabilities: Capability[];
31
+ setup?(ctx: ExtensionContext): Promise<void> | void;
32
+ teardown?(): Promise<void> | void;
33
+ provides?: Record<string, unknown>;
34
+ extends?: Extension[];
35
+ }
36
+ export type ExtensionFactory = (config?: unknown) => Extension;
37
+ export type ExtensionConfigEntry = Extension | {
38
+ name: string;
39
+ enabled: false;
40
+ };
41
+ export type ExtensionSource = "config" | "package" | "project" | "local-file";
42
+ export interface ResolvedExtension {
43
+ extension: Extension;
44
+ source: ExtensionSource;
45
+ origin: string;
46
+ }
47
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;IAChC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,KAAK,CAAC,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,SAAS,CAAC;AAE/D,MAAM,MAAM,oBAAoB,GAC5B,SAAS,GACT;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;AAErC,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,SAAS,GACT,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Core types for the veryfront extension system.
3
+ *
4
+ * @module extensions/types
5
+ */
6
+ export {};
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Extension validation and conflict detection.
3
+ *
4
+ * @module extensions/validation
5
+ */
6
+ import type { ExtensionSource, ResolvedExtension } from "./types.js";
7
+ /**
8
+ * Information about a contract conflict between extensions.
9
+ */
10
+ export interface ConflictInfo {
11
+ contract: string;
12
+ providers: Array<{
13
+ name: string;
14
+ source: ExtensionSource;
15
+ }>;
16
+ }
17
+ /**
18
+ * Priority map for extension sources.
19
+ * Lower number = higher priority.
20
+ */
21
+ export declare const SOURCE_PRIORITY: Record<ExtensionSource, number>;
22
+ /**
23
+ * Select the highest-priority provider for each contract across a list of
24
+ * resolved extensions. When multiple extensions provide the same contract,
25
+ * the one whose source has the lowest `SOURCE_PRIORITY` number wins.
26
+ * Ties break on first-seen order (mirrors detectConflicts semantics).
27
+ */
28
+ export declare function selectContractProviders(extensions: ResolvedExtension[]): Map<string, ResolvedExtension>;
29
+ /**
30
+ * Validate the shape of an extension object.
31
+ * Returns an array of issue descriptions (empty array = valid).
32
+ *
33
+ * Accepts `unknown` so callers at module-boundary / config-loading paths can
34
+ * validate arbitrary imported values without casting.
35
+ */
36
+ export declare function validateExtension(ext: unknown): string[];
37
+ /**
38
+ * Detect contract conflicts between resolved extensions.
39
+ *
40
+ * A conflict exists when two or more extensions provide the same contract
41
+ * and no single provider has strictly higher source priority than all others.
42
+ */
43
+ export declare function detectConflicts(extensions: ResolvedExtension[]): ConflictInfo[];
44
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAa,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAK3D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,iBAAiB,EAAE,GAC9B,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAgBhC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAmCxD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,YAAY,EAAE,CA2C/E"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Extension validation and conflict detection.
3
+ *
4
+ * @module extensions/validation
5
+ */
6
+ /**
7
+ * Priority map for extension sources.
8
+ * Lower number = higher priority.
9
+ */
10
+ export const SOURCE_PRIORITY = {
11
+ config: 0,
12
+ package: 1,
13
+ project: 2,
14
+ "local-file": 3,
15
+ };
16
+ /**
17
+ * Select the highest-priority provider for each contract across a list of
18
+ * resolved extensions. When multiple extensions provide the same contract,
19
+ * the one whose source has the lowest `SOURCE_PRIORITY` number wins.
20
+ * Ties break on first-seen order (mirrors detectConflicts semantics).
21
+ */
22
+ export function selectContractProviders(extensions) {
23
+ const winner = new Map();
24
+ for (const resolved of extensions) {
25
+ const provides = resolved.extension.provides;
26
+ if (!provides)
27
+ continue;
28
+ for (const contract of Object.keys(provides)) {
29
+ const current = winner.get(contract);
30
+ if (!current ||
31
+ SOURCE_PRIORITY[resolved.source] < SOURCE_PRIORITY[current.source]) {
32
+ winner.set(contract, resolved);
33
+ }
34
+ }
35
+ }
36
+ return winner;
37
+ }
38
+ /**
39
+ * Validate the shape of an extension object.
40
+ * Returns an array of issue descriptions (empty array = valid).
41
+ *
42
+ * Accepts `unknown` so callers at module-boundary / config-loading paths can
43
+ * validate arbitrary imported values without casting.
44
+ */
45
+ export function validateExtension(ext) {
46
+ const issues = [];
47
+ if (ext === null || typeof ext !== "object" || Array.isArray(ext)) {
48
+ issues.push("extension must be a non-null object");
49
+ return issues;
50
+ }
51
+ const candidate = ext;
52
+ if (typeof candidate.name !== "string" || candidate.name.length === 0) {
53
+ issues.push("name must be a non-empty string");
54
+ }
55
+ if (typeof candidate.version !== "string" || candidate.version.length === 0) {
56
+ issues.push("version must be a non-empty string");
57
+ }
58
+ if (!Array.isArray(candidate.capabilities)) {
59
+ issues.push("capabilities must be an array");
60
+ return issues;
61
+ }
62
+ for (let i = 0; i < candidate.capabilities.length; i++) {
63
+ const cap = candidate.capabilities[i];
64
+ if (typeof cap !== "object" || cap === null || Array.isArray(cap)) {
65
+ issues.push(`capabilities[${i}] must be an object`);
66
+ continue;
67
+ }
68
+ if (typeof cap.type !== "string" || cap.type.length === 0) {
69
+ issues.push(`capabilities[${i}].type must be a non-empty string`);
70
+ }
71
+ }
72
+ return issues;
73
+ }
74
+ /**
75
+ * Detect contract conflicts between resolved extensions.
76
+ *
77
+ * A conflict exists when two or more extensions provide the same contract
78
+ * and no single provider has strictly higher source priority than all others.
79
+ */
80
+ export function detectConflicts(extensions) {
81
+ const contractProviders = new Map();
82
+ for (const resolved of extensions) {
83
+ const provides = resolved.extension.provides;
84
+ if (!provides)
85
+ continue;
86
+ for (const contract of Object.keys(provides)) {
87
+ let list = contractProviders.get(contract);
88
+ if (!list) {
89
+ list = [];
90
+ contractProviders.set(contract, list);
91
+ }
92
+ list.push({
93
+ name: resolved.extension.name,
94
+ source: resolved.source,
95
+ });
96
+ }
97
+ }
98
+ const conflicts = [];
99
+ for (const [contract, providers] of contractProviders) {
100
+ if (providers.length < 2)
101
+ continue;
102
+ // Find the highest priority (lowest number) among providers
103
+ const priorities = providers.map((p) => SOURCE_PRIORITY[p.source]);
104
+ const bestPriority = Math.min(...priorities);
105
+ const winnersCount = priorities.filter((p) => p === bestPriority).length;
106
+ // If exactly one provider has the best priority, no conflict
107
+ if (winnersCount === 1)
108
+ continue;
109
+ conflicts.push({
110
+ contract,
111
+ providers: providers.map((p) => ({ name: p.name, source: p.source })),
112
+ });
113
+ }
114
+ return conflicts;
115
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-loader.d.ts","sourceRoot":"","sources":["../../../../src/src/html/styles-builder/plugin-loader.ts"],"names":[],"mappings":"AAwGA;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0D/E;AAED,wBAAsB,UAAU,CAC9B,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAC/B,OAAO,CAAC,OAAO,CAAC,CAmClB"}
1
+ {"version":3,"file":"plugin-loader.d.ts","sourceRoot":"","sources":["../../../../src/src/html/styles-builder/plugin-loader.ts"],"names":[],"mappings":"AAiIA;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA4D/E;AAED,wBAAsB,UAAU,CAC9B,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAC/B,OAAO,CAAC,OAAO,CAAC,CAwClB"}
@@ -13,7 +13,25 @@ import colors from "tailwindcss/colors";
13
13
  import { serverLogger } from "../../utils/index.js";
14
14
  import { getErrorBySlug, IMPORT_RESOLUTION_ERROR, NETWORK_ERROR, VeryfrontError, } from "../../errors/index.js";
15
15
  import { getTailwindPluginBundleUrl } from "../../build/binary-plugin-includes.js";
16
+ import { bareName, PACKAGE_SPEC_RE, TAILWIND_PLUGIN_ALLOWLIST, } from "./tailwind-plugin-allowlist.js";
16
17
  const logger = serverLogger.component("tailwind");
18
+ /**
19
+ * Enforce the Tailwind plugin allowlist (VULN-FS-1).
20
+ *
21
+ * Called at the top of every entry point that can load third-party plugin
22
+ * code. Rejects anything that is not a syntactically valid npm package
23
+ * specifier, and anything whose bare name is not on the allowlist.
24
+ */
25
+ function assertPluginAllowed(spec) {
26
+ if (!PACKAGE_SPEC_RE.test(spec)) {
27
+ throw new Error(`Invalid Tailwind plugin specifier: ${spec}`);
28
+ }
29
+ const name = bareName(spec);
30
+ if (!TAILWIND_PLUGIN_ALLOWLIST.has(name)) {
31
+ throw new Error(`Package "${name}" is not on the Tailwind plugin allowlist. ` +
32
+ `See src/html/styles-builder/tailwind-plugin-allowlist.ts.`);
33
+ }
34
+ }
17
35
  // Provide localStorage shim for plugins that use util-deprecate (which checks localStorage)
18
36
  // This prevents "LocalStorage is not supported in this context" errors in Deno.
19
37
  try {
@@ -89,6 +107,7 @@ async function importBundledModule(code) {
89
107
  * dynamic imports from URLs. Fetches bundled code, rewrites imports, loads via temp file.
90
108
  */
91
109
  export async function loadModuleFromEsmSh(packageName) {
110
+ assertPluginAllowed(packageName);
92
111
  const stubUrl = getTailwindPluginBundleUrl(packageName);
93
112
  logger.debug("Fetching esm.sh stub", { url: stubUrl });
94
113
  const stubResponse = await fetch(stubUrl);
@@ -133,6 +152,10 @@ export async function loadModuleFromEsmSh(packageName) {
133
152
  return await importBundledModule(code);
134
153
  }
135
154
  export async function loadPlugin(id, pluginCache, pluginErrors) {
155
+ // Enforce the allowlist before consulting any caches so a disallowed id can
156
+ // never be served from a pre-seeded or stale cache entry — defence-in-depth
157
+ // against future changes that might pre-populate these maps.
158
+ assertPluginAllowed(id);
136
159
  const cachedError = pluginErrors.get(id);
137
160
  if (cachedError)
138
161
  throw cachedError;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Allowlist of Tailwind CSS plugin package names that may be dynamically loaded
3
+ * via `loadPlugin` / `loadModuleFromEsmSh`.
4
+ *
5
+ * Tailwind v4 stylesheets can request plugins through the `@plugin "..."`
6
+ * directive. Without restriction, this turns arbitrary project CSS into a
7
+ * remote-code-execution vector because the loader fetches and imports code
8
+ * from https://esm.sh. Only the packages listed here may be loaded.
9
+ *
10
+ * @module html/styles-builder/tailwind-plugin-allowlist
11
+ */
12
+ export declare const TAILWIND_PLUGIN_ALLOWLIST: ReadonlySet<string>;
13
+ /**
14
+ * Matches npm package specifiers, optionally scoped and optionally suffixed
15
+ * with an `@version` range. Deliberately restrictive: ASCII only, no path
16
+ * separators, no whitespace, no control characters.
17
+ */
18
+ export declare const PACKAGE_SPEC_RE: RegExp;
19
+ /**
20
+ * Return the bare package name (without any `@version` suffix) for a spec.
21
+ *
22
+ * Examples:
23
+ * bareName("pkg") -> "pkg"
24
+ * bareName("pkg@1.0.0") -> "pkg"
25
+ * bareName("@scope/pkg") -> "@scope/pkg"
26
+ * bareName("@scope/pkg@1.0") -> "@scope/pkg"
27
+ */
28
+ export declare function bareName(spec: string): string;
29
+ //# sourceMappingURL=tailwind-plugin-allowlist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-plugin-allowlist.d.ts","sourceRoot":"","sources":["../../../../src/src/html/styles-builder/tailwind-plugin-allowlist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,CAaxD,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAA4D,CAAC;AAEzF;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO7C"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Allowlist of Tailwind CSS plugin package names that may be dynamically loaded
3
+ * via `loadPlugin` / `loadModuleFromEsmSh`.
4
+ *
5
+ * Tailwind v4 stylesheets can request plugins through the `@plugin "..."`
6
+ * directive. Without restriction, this turns arbitrary project CSS into a
7
+ * remote-code-execution vector because the loader fetches and imports code
8
+ * from https://esm.sh. Only the packages listed here may be loaded.
9
+ *
10
+ * @module html/styles-builder/tailwind-plugin-allowlist
11
+ */
12
+ export const TAILWIND_PLUGIN_ALLOWLIST = new Set([
13
+ // Bundled into the compiled binary (see src/build/binary-plugin-includes.ts).
14
+ // Must stay in sync with BINARY_TAILWIND_PLUGIN_PACKAGES — an invariant
15
+ // enforced by tailwind-plugin-allowlist.test.ts.
16
+ "@tailwindcss/typography",
17
+ "@tailwindcss/forms",
18
+ "tailwindcss-animate",
19
+ "tailwind-scrollbar-hide",
20
+ "daisyui",
21
+ // Allowlisted but NOT bundled: loaded from esm.sh on first use. Adding an
22
+ // entry here is arbitrary-code-exec surface; review each one explicitly.
23
+ "@tailwindcss/aspect-ratio",
24
+ "@tailwindcss/container-queries",
25
+ ]);
26
+ /**
27
+ * Matches npm package specifiers, optionally scoped and optionally suffixed
28
+ * with an `@version` range. Deliberately restrictive: ASCII only, no path
29
+ * separators, no whitespace, no control characters.
30
+ */
31
+ export const PACKAGE_SPEC_RE = /^(?:@[a-z0-9][\w.-]*\/)?[a-z0-9][\w.-]*(?:@[\w.+-]+)?$/i;
32
+ /**
33
+ * Return the bare package name (without any `@version` suffix) for a spec.
34
+ *
35
+ * Examples:
36
+ * bareName("pkg") -> "pkg"
37
+ * bareName("pkg@1.0.0") -> "pkg"
38
+ * bareName("@scope/pkg") -> "@scope/pkg"
39
+ * bareName("@scope/pkg@1.0") -> "@scope/pkg"
40
+ */
41
+ export function bareName(spec) {
42
+ if (spec.startsWith("@")) {
43
+ const idx = spec.indexOf("@", 1);
44
+ return idx === -1 ? spec : spec.slice(0, idx);
45
+ }
46
+ const idx = spec.indexOf("@");
47
+ return idx === -1 ? spec : spec.slice(0, idx);
48
+ }
@@ -0,0 +1,15 @@
1
+ export type TransformCapacityErrorMode = "plain" | "build";
2
+ export type ImportErrorClassification = {
3
+ type: "http-bundle-missing";
4
+ hash: string;
5
+ message: string;
6
+ } | {
7
+ type: "module-not-found";
8
+ message: string;
9
+ } | {
10
+ type: "unknown";
11
+ message: string;
12
+ };
13
+ export declare function classifyImportError(importError: unknown): ImportErrorClassification;
14
+ export declare function createTransformCapacityError(mode: TransformCapacityErrorMode, message: string, filePath: string): Error;
15
+ //# sourceMappingURL=loader-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-helpers.d.ts","sourceRoot":"","sources":["../../../../../src/src/modules/react-loader/ssr-module-loader/loader-helpers.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,0BAA0B,GAAG,OAAO,GAAG,OAAO,CAAC;AAE3D,MAAM,MAAM,yBAAyB,GACjC;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,GAAG,yBAAyB,CAUnF;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,0BAA0B,EAChC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,KAAK,CASP"}
@@ -0,0 +1,22 @@
1
+ import { createError, toError } from "../../../errors/veryfront-error.js";
2
+ const MISSING_HTTP_BUNDLE_PATTERN = /veryfront-http-bundle\/http-([a-f0-9]+)\.mjs/;
3
+ export function classifyImportError(importError) {
4
+ const message = importError instanceof Error ? importError.message : String(importError);
5
+ const bundleMatch = message.match(MISSING_HTTP_BUNDLE_PATTERN);
6
+ if (bundleMatch?.[1]) {
7
+ return { type: "http-bundle-missing", hash: bundleMatch[1], message };
8
+ }
9
+ if (message.includes("Cannot find module") || message.includes("Module not found")) {
10
+ return { type: "module-not-found", message };
11
+ }
12
+ return { type: "unknown", message };
13
+ }
14
+ export function createTransformCapacityError(mode, message, filePath) {
15
+ if (mode === "plain")
16
+ return new Error(message);
17
+ return toError(createError({
18
+ type: "build",
19
+ message,
20
+ context: { file: filePath, phase: "transform" },
21
+ }));
22
+ }
@@ -19,8 +19,6 @@ export declare class SSRModuleLoader {
19
19
  private circuitBreaker;
20
20
  private depValidator;
21
21
  constructor(options: SSRModuleLoaderOptions);
22
- private classifyImportError;
23
- private createTransformCapacityError;
24
22
  private withTransformCapacity;
25
23
  private importModuleFromCacheEntry;
26
24
  loadRawModule(filePath: string, source: string): Promise<Record<string, unknown>>;
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../../src/src/modules/react-loader/ssr-module-loader/loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAiCpC,OAAO,KAAK,EAAoB,sBAAsB,EAAE,MAAM,YAAY,CAAC;AA2B3E;;;;;GAKG;AACH,qBAAa,eAAe;IAKd,OAAO,CAAC,OAAO;IAJ3B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,YAAY,CAAyB;gBAEzB,OAAO,EAAE,sBAAsB;IAWnD,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,4BAA4B;YAetB,qBAAqB;YAuCrB,0BAA0B;IAwHxC,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA+C7B,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;YAK1C,2BAA2B;IAYzC,OAAO,CAAC,yBAAyB;YAiBnB,2BAA2B;CA+V1C"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../../src/src/modules/react-loader/ssr-module-loader/loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAsCpC,OAAO,KAAK,EAAoB,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAkB3E;;;;;GAKG;AACH,qBAAa,eAAe;IAKd,OAAO,CAAC,OAAO;IAJ3B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,YAAY,CAAyB;gBAEzB,OAAO,EAAE,sBAAsB;YAWrC,qBAAqB;YAuCrB,0BAA0B;IAwHxC,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA+C7B,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;YAK1C,2BAA2B;IAYzC,OAAO,CAAC,yBAAyB;YAiBnB,2BAA2B;CA+V1C"}
@@ -16,6 +16,7 @@ import { rendererLogger } from "../../../utils/index.js";
16
16
  import { withSpan } from "../../../observability/tracing/otlp-setup.js";
17
17
  import { SpanNames } from "../../../observability/tracing/span-names.js";
18
18
  import { extractComponent } from "../extract-component.js";
19
+ import { classifyImportError, createTransformCapacityError, } from "./loader-helpers.js";
19
20
  import { getMaxConcurrentTransforms, IN_PROGRESS_WAIT_TIMEOUT_MS, MAX_TRANSFORM_DEPTH, TRANSFORM_ACQUIRE_TIMEOUT_MS, TRANSFORM_BATCH_SIZE, } from "./constants.js";
20
21
  import { withTimeoutThrow } from "../../../rendering/utils/stream-utils.js";
21
22
  import { getFromRedis, getTransformSemaphore, globalInProgress, globalModuleCache, isSSRDistributedCacheEnabled, releaseTransformSlot, setInRedis, tryAcquireTransformSlot, } from "./cache/index.js";
@@ -34,7 +35,6 @@ import { registerCSSImport } from "../css-import-collector.js";
34
35
  import { injectNodePositions } from "../../../transforms/plugins/babel-node-positions.js";
35
36
  import { ensureMdxModuleDependencies } from "../../../transforms/mdx/esm-module-loader/module-fetcher/dependency-recovery.js";
36
37
  const logger = rendererLogger.component("ssr-module-loader");
37
- const MISSING_HTTP_BUNDLE_PATTERN = /veryfront-http-bundle\/http-([a-f0-9]+)\.mjs/;
38
38
  /**
39
39
  * SSR Module Loader with Redis Support.
40
40
  *
@@ -51,39 +51,19 @@ export class SSRModuleLoader {
51
51
  this.cache = new SSRCacheManager(options);
52
52
  this.depValidator = new SSRDependencyValidator((filePath) => this.cache.getCacheKey(filePath), (filePath, source, depth) => this.transformWithDependencies(filePath, source, depth), (crossImport) => this.transformCrossProjectImport(crossImport), options.adapter, options.projectDir);
53
53
  }
54
- classifyImportError(importError) {
55
- const message = importError instanceof Error ? importError.message : String(importError);
56
- const bundleMatch = message.match(MISSING_HTTP_BUNDLE_PATTERN);
57
- if (bundleMatch?.[1]) {
58
- return { type: "http-bundle-missing", hash: bundleMatch[1], message };
59
- }
60
- if (message.includes("Cannot find module") || message.includes("Module not found")) {
61
- return { type: "module-not-found", message };
62
- }
63
- return { type: "unknown", message };
64
- }
65
- createTransformCapacityError(mode, message, filePath) {
66
- if (mode === "plain")
67
- return new Error(message);
68
- return toError(createError({
69
- type: "build",
70
- message,
71
- context: { file: filePath, phase: "transform" },
72
- }));
73
- }
74
54
  async withTransformCapacity(filePath, mode, operation) {
75
55
  const useSemaphore = getMaxConcurrentTransforms() > 0;
76
56
  const projectId = this.options.projectId;
77
57
  const semaphore = useSemaphore ? getTransformSemaphore() : undefined;
78
58
  let semaphoreAcquired = false;
79
59
  if (!await tryAcquireTransformSlot(projectId, TRANSFORM_ACQUIRE_TIMEOUT_MS)) {
80
- throw this.createTransformCapacityError(mode, `Project ${projectId} at transform capacity. Consider reducing page complexity or request rate.`, filePath);
60
+ throw createTransformCapacityError(mode, `Project ${projectId} at transform capacity. Consider reducing page complexity or request rate.`, filePath);
81
61
  }
82
62
  try {
83
63
  if (semaphore) {
84
64
  semaphoreAcquired = await semaphore.tryAcquire(TRANSFORM_ACQUIRE_TIMEOUT_MS);
85
65
  if (!semaphoreAcquired) {
86
- throw this.createTransformCapacityError(mode, `Transform capacity exceeded (${semaphore.waiting} waiting). Service is overloaded.`, filePath);
66
+ throw createTransformCapacityError(mode, `Transform capacity exceeded (${semaphore.waiting} waiting). Service is overloaded.`, filePath);
87
67
  }
88
68
  }
89
69
  return await operation();
@@ -115,7 +95,7 @@ export class SSRModuleLoader {
115
95
  return (await withSpan(SpanNames.SSR_DYNAMIC_IMPORT, () => import(`file://${cacheEntry.tempPath}?v=${cacheEntry.contentHash}`), { "ssr.file": fileName }));
116
96
  }
117
97
  catch (importError) {
118
- const classifiedError = this.classifyImportError(importError);
98
+ const classifiedError = classifyImportError(importError);
119
99
  if (classifiedError.type === "http-bundle-missing") {
120
100
  const hash = classifiedError.hash;
121
101
  const cacheDir = getHttpBundleCacheDir();
@@ -0,0 +1,19 @@
1
+ import type { VeryfrontAPIConfig } from "../../veryfront-api-client/types.js";
2
+ import type { FileCacheOptions } from "../cache/types.js";
3
+ import type { ContentSource, FSAdapterConfig } from "./types.js";
4
+ export declare const DEFAULT_MAX_RETRIES = 3;
5
+ export declare const DEFAULT_INITIAL_RETRY_DELAY_MS = 1000;
6
+ export declare const DEFAULT_MAX_RETRY_DELAY_MS = 10000;
7
+ export declare const DEFAULT_CACHE_TTL_MS = 60000;
8
+ export declare const DEFAULT_CACHE_MAX_ENTRIES = 1000;
9
+ export declare const DEFAULT_CACHE_MAX_MEMORY_BYTES: number;
10
+ type VeryfrontConfigOverrides = NonNullable<FSAdapterConfig["veryfront"]>;
11
+ type RetryOverrides = VeryfrontConfigOverrides["retry"];
12
+ type CacheOverrides = VeryfrontConfigOverrides["cache"];
13
+ export declare function buildRetryConfig(retry?: RetryOverrides): NonNullable<VeryfrontAPIConfig["retry"]>;
14
+ export declare function buildFileCacheOptions(cache?: CacheOverrides): FileCacheOptions;
15
+ export declare function shouldBackgroundPregenerateStyles(contentContext: {
16
+ sourceType: ContentSource["type"];
17
+ } | null): boolean;
18
+ export {};
19
+ //# sourceMappingURL=adapter-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/adapter-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,8BAA8B,OAAQ,CAAC;AACpD,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAC3C,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAC/C,eAAO,MAAM,8BAA8B,QAAoB,CAAC;AAEhE,KAAK,wBAAwB,GAAG,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1E,KAAK,cAAc,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;AACxD,KAAK,cAAc,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAExD,wBAAgB,gBAAgB,CAC9B,KAAK,CAAC,EAAE,cAAc,GACrB,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAO1C;AAED,wBAAgB,qBAAqB,CACnC,KAAK,CAAC,EAAE,cAAc,GACrB,gBAAgB,CAQlB;AAED,wBAAgB,iCAAiC,CAC/C,cAAc,EAAE;IAAE,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,GAC3D,OAAO,CAET"}
@@ -0,0 +1,26 @@
1
+ export const DEFAULT_MAX_RETRIES = 3;
2
+ export const DEFAULT_INITIAL_RETRY_DELAY_MS = 1_000;
3
+ export const DEFAULT_MAX_RETRY_DELAY_MS = 10_000;
4
+ export const DEFAULT_CACHE_TTL_MS = 60_000;
5
+ export const DEFAULT_CACHE_MAX_ENTRIES = 1_000;
6
+ export const DEFAULT_CACHE_MAX_MEMORY_BYTES = 100 * 1024 * 1024;
7
+ export function buildRetryConfig(retry) {
8
+ return {
9
+ maxRetries: DEFAULT_MAX_RETRIES,
10
+ initialDelay: DEFAULT_INITIAL_RETRY_DELAY_MS,
11
+ maxDelay: DEFAULT_MAX_RETRY_DELAY_MS,
12
+ ...retry,
13
+ };
14
+ }
15
+ export function buildFileCacheOptions(cache) {
16
+ return {
17
+ enabled: true,
18
+ ttl: DEFAULT_CACHE_TTL_MS,
19
+ maxSize: DEFAULT_CACHE_MAX_ENTRIES,
20
+ maxMemory: DEFAULT_CACHE_MAX_MEMORY_BYTES,
21
+ ...cache,
22
+ };
23
+ }
24
+ export function shouldBackgroundPregenerateStyles(contentContext) {
25
+ return contentContext?.sourceType !== "branch";
26
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EAEV,cAAc,EACd,SAAS,EACT,eAAe,EAEf,sBAAsB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AA2BnE,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,WAAW,CAAS;IAE5B,kFAAkF;IAClF,OAAO,CAAC,oBAAoB,CAA6B;IACzD,0EAA0E;IAC1E,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,OAAO,CAAC,WAAW,CAAC,CAAU;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,SAAS,CAAmB;IAEpC,4DAA4D;IAC5D,OAAO,CAAC,aAAa,CAAuB;IAE5C,+CAA+C;IAC/C,OAAO,CAAC,aAAa,CAAgB;IACrC,iGAAiG;IACjG,OAAO,CAAC,cAAc,CAAuC;IAC7D,mFAAmF;IACnF,OAAO,CAAC,SAAS,CAAU;IAE3B,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,qBAAqB;YAMf,sBAAsB;gBA4BxB,MAAM,EAAE,eAAe;IA0I7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8IjC,OAAO,CAAC,4BAA4B;IAIpC,OAAO,CAAC,iCAAiC;IAOzC,OAAO,CAAC,sBAAsB;IA0E9B,cAAc,IAAI;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B;IAIK,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKhD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK3C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAKhD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtC,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKzB,OAAO,IAAI,IAAI;IAYf,aAAa,IAAI,UAAU;IAI3B,cAAc,IAAI,OAAO,GAAG,SAAS;IAI/B,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAwC7E,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOpD,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAMrD,0BAA0B,CAC9B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IA0BvD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpC,iBAAiB,IAAI,IAAI;IAIzB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAK7C,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC,kBAAkB,IAAI,IAAI;IAK1B,iBAAiB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAoCxD,iBAAiB,IAAI,sBAAsB,GAAG,IAAI;IAWlD,SAAS,IAAI,kBAAkB;YAIjB,iBAAiB;IAK/B;;;;;OAKG;YACW,uBAAuB;CAgFtC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/adapter.ts"],"names":[],"mappings":"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"}
@@ -10,13 +10,8 @@ import { buildFileCacheKeyPrefix, buildFileListCacheKey } from "./cache-keys.js"
10
10
  import { isPrefixBeingInvalidated } from "./invalidation-state.js";
11
11
  import { WebSocketManager } from "./websocket-manager.js";
12
12
  import { fetchFileListForContext, hasContentContextChanged, resolveContentContext, summarizeFileList, toClientContext, } from "./adapter-content-context.js";
13
+ import { buildFileCacheOptions, buildRetryConfig, shouldBackgroundPregenerateStyles, } from "./adapter-helpers.js";
13
14
  const logger = baseLogger.component("veryfront-fs-adapter");
14
- const DEFAULT_MAX_RETRIES = 3;
15
- const DEFAULT_INITIAL_RETRY_DELAY_MS = 1_000;
16
- const DEFAULT_MAX_RETRY_DELAY_MS = 10_000;
17
- const DEFAULT_CACHE_TTL_MS = 60_000;
18
- const DEFAULT_CACHE_MAX_ENTRIES = 1_000;
19
- const DEFAULT_CACHE_MAX_MEMORY_BYTES = 100 * 1024 * 1024;
20
15
  export class VeryfrontFSAdapter {
21
16
  client;
22
17
  cache;
@@ -85,12 +80,7 @@ export class VeryfrontFSAdapter {
85
80
  this.projectSlug = vf.projectSlug ?? "";
86
81
  this.contentSource = vf.contentSource ?? { type: "branch", branch: "main" };
87
82
  this.proxyMode = vf.proxyMode ?? false;
88
- const retryConfig = {
89
- maxRetries: DEFAULT_MAX_RETRIES,
90
- initialDelay: DEFAULT_INITIAL_RETRY_DELAY_MS,
91
- maxDelay: DEFAULT_MAX_RETRY_DELAY_MS,
92
- ...vf.retry,
93
- };
83
+ const retryConfig = buildRetryConfig(vf.retry);
94
84
  this.client = new VeryfrontApiClient({
95
85
  apiBaseUrl: this.apiBaseUrl,
96
86
  apiToken: this.apiToken,
@@ -99,13 +89,7 @@ export class VeryfrontFSAdapter {
99
89
  proxyMode: vf.proxyMode,
100
90
  retry: retryConfig,
101
91
  });
102
- const cacheConfig = {
103
- enabled: true,
104
- ttl: DEFAULT_CACHE_TTL_MS,
105
- maxSize: DEFAULT_CACHE_MAX_ENTRIES,
106
- maxMemory: DEFAULT_CACHE_MAX_MEMORY_BYTES,
107
- ...vf.cache,
108
- };
92
+ const cacheConfig = buildFileCacheOptions(vf.cache);
109
93
  this.cache = new FileCache(cacheConfig);
110
94
  this.normalizer = new PathNormalizer(config.projectDir);
111
95
  const contentContextGetter = {
@@ -283,7 +267,7 @@ export class VeryfrontFSAdapter {
283
267
  // Branch previews should recover the last registered stylesheet artifact on
284
268
  // cold starts before rebuilding CSS locally. Live edit pokes still
285
269
  // pregenerate through the WebSocket path after branch content changes.
286
- return this.contentContext?.sourceType !== "branch";
270
+ return shouldBackgroundPregenerateStyles(this.contentContext);
287
271
  }
288
272
  scheduleFileListWarmup(reason, cacheKey) {
289
273
  if (!this.initialized || !this.contentContext)
@@ -31,6 +31,7 @@ interface BuildReadFetchStateOptions {
31
31
  export declare function assertProjectSourcePath(normalizedPath: string): void;
32
32
  export declare function buildReadFetchState(options: BuildReadFetchStateOptions): ReadFetchState;
33
33
  export declare function getResolvedCacheKey(cacheKeyPrefix: string, normalizedResolvedPath: string): string;
34
+ export declare function buildContentPreview(content: string, max?: number): string;
34
35
  export declare function buildExtensionCandidatePaths(basePath: string): string[];
35
36
  export declare function splitKnownFileExtension(apiPath: string): {
36
37
  originalExtension: string;
@@ -1 +1 @@
1
- {"version":3,"file":"read-operations-helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/read-operations-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iCAAiC,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,iCAAiC,EAAE,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,UAAU,uBAAuB;IAC/B,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC,4BAA4B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3D,yBAAyB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5D;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,UAAU,0BAA0B;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC9C,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/C;AAED,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAOpE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,cAAc,CA2BvF;AAED,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EACtB,sBAAsB,EAAE,MAAM,GAC7B,MAAM,CAER;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvE;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GACd;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASxD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG3D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAEvE"}
1
+ {"version":3,"file":"read-operations-helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/read-operations-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iCAAiC,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,iCAAiC,EAAE,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,UAAU,uBAAuB;IAC/B,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC,4BAA4B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3D,yBAAyB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5D;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,UAAU,0BAA0B;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC9C,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/C;AAED,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAOpE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,cAAc,CA2BvF;AAED,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EACtB,sBAAsB,EAAE,MAAM,GAC7B,MAAM,CAER;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,MAAM,CAErE;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvE;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GACd;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASxD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG3D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAEvE"}
@@ -40,6 +40,9 @@ export function buildReadFetchState(options) {
40
40
  export function getResolvedCacheKey(cacheKeyPrefix, normalizedResolvedPath) {
41
41
  return `${cacheKeyPrefix}:${normalizedResolvedPath}`;
42
42
  }
43
+ export function buildContentPreview(content, max = 80) {
44
+ return content.length > max ? `${content.slice(0, max)}...` : content;
45
+ }
43
46
  export function buildExtensionCandidatePaths(basePath) {
44
47
  return READ_OPERATION_EXTENSION_PRIORITY.map((ext) => `${basePath}${ext}`);
45
48
  }