@adaptabletools/adaptable-mcp 0.1.0-canary.0 → 0.1.0-canary.2

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 (348) hide show
  1. package/README.md +58 -61
  2. package/data/changes/21-22.json +542 -0
  3. package/data/changes/22-23.json +639 -0
  4. package/data/changes/23-24.json +1874 -0
  5. package/data/manifest.snapshot.json +202 -0
  6. package/data/templates/angular/src/app/adaptableOptions.ts +40 -0
  7. package/data/templates/angular/src/app/agGridModules.ts +7 -0
  8. package/data/templates/angular/src/app/app.component.ts +66 -0
  9. package/data/templates/angular/src/app/app.module.ts +14 -0
  10. package/data/templates/angular/src/app/columnDefs.ts +121 -0
  11. package/data/templates/angular/src/app/gridOptions.ts +32 -0
  12. package/data/templates/angular/src/app/onAdaptableReady.ts +11 -0
  13. package/data/templates/angular/src/app/rowData.ts +851 -0
  14. package/data/templates/angular/src/app/styles.css +50 -0
  15. package/data/templates/angular/src/index.html +17 -0
  16. package/data/templates/angular/src/main.ts +18 -0
  17. package/data/templates/angular/src/polyfills.ts +1 -0
  18. package/data/templates/angular/tsconfig.json +16 -0
  19. package/data/templates/manifest.json +406 -0
  20. package/data/templates/react/src/App.tsx +71 -0
  21. package/data/templates/react/src/adaptableOptions.ts +40 -0
  22. package/data/templates/react/src/agGridModules.ts +7 -0
  23. package/data/templates/react/src/columnDefs.ts +121 -0
  24. package/data/templates/react/src/gridOptions.ts +32 -0
  25. package/data/templates/react/src/index.tsx +8 -0
  26. package/data/templates/react/src/onAdaptableReady.ts +11 -0
  27. package/data/templates/react/src/rowData.ts +851 -0
  28. package/data/templates/react/src/styles.css +50 -0
  29. package/data/templates/react/tsconfig.json +9 -0
  30. package/data/templates/vanilla/index.html +18 -0
  31. package/data/templates/vanilla/src/adaptableOptions.ts +40 -0
  32. package/data/templates/vanilla/src/agGridModules.ts +7 -0
  33. package/data/templates/vanilla/src/columnDefs.ts +121 -0
  34. package/data/templates/vanilla/src/gridOptions.ts +32 -0
  35. package/data/templates/vanilla/src/index.ts +41 -0
  36. package/data/templates/vanilla/src/onAdaptableReady.ts +11 -0
  37. package/data/templates/vanilla/src/rowData.ts +851 -0
  38. package/data/templates/vanilla/src/styles.css +50 -0
  39. package/data/templates/vanilla/tsconfig.json +14 -0
  40. package/data/templates/vue/.babelrc +3 -0
  41. package/data/templates/vue/public/index.html +19 -0
  42. package/data/templates/vue/src/App.vue +35 -0
  43. package/data/templates/vue/src/adaptableOptions.ts +40 -0
  44. package/data/templates/vue/src/agGridModules.ts +7 -0
  45. package/data/templates/vue/src/columnDefs.ts +121 -0
  46. package/data/templates/vue/src/gridOptions.ts +32 -0
  47. package/data/templates/vue/src/main.ts +6 -0
  48. package/data/templates/vue/src/onAdaptableReady.ts +11 -0
  49. package/data/templates/vue/src/rowData.ts +851 -0
  50. package/data/templates/vue/src/shims-vue.d.ts +6 -0
  51. package/data/templates/vue/src/styles.css +50 -0
  52. package/data/templates/vue/tsconfig.json +30 -0
  53. package/dist/bin.js +23 -0
  54. package/dist/bin.js.map +1 -0
  55. package/dist/cli/build-commands.js +200 -0
  56. package/dist/cli/build-commands.js.map +1 -0
  57. package/dist/cli/index.js +94 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/cli/render.js +57 -0
  60. package/dist/cli/render.js.map +1 -0
  61. package/dist/core/anonymise/anonymise.js +315 -0
  62. package/dist/core/anonymise/anonymise.js.map +1 -0
  63. package/dist/core/anonymise/capabilities.js +94 -0
  64. package/dist/core/anonymise/capabilities.js.map +1 -0
  65. package/dist/core/aql/capabilities.js +339 -0
  66. package/dist/core/aql/capabilities.js.map +1 -0
  67. package/dist/core/aql/check.js +204 -0
  68. package/dist/core/aql/check.js.map +1 -0
  69. package/dist/core/aql/engine.js +92 -0
  70. package/dist/core/aql/engine.js.map +1 -0
  71. package/dist/core/aql/functions.js +108 -0
  72. package/dist/core/aql/functions.js.map +1 -0
  73. package/dist/core/aql/migrate.js +62 -0
  74. package/dist/core/aql/migrate.js.map +1 -0
  75. package/dist/core/capabilities.js +105 -0
  76. package/dist/core/capabilities.js.map +1 -0
  77. package/dist/core/changes/capabilities.js +92 -0
  78. package/dist/core/changes/capabilities.js.map +1 -0
  79. package/dist/core/changes/changes.js +101 -0
  80. package/dist/core/changes/changes.js.map +1 -0
  81. package/dist/core/changes/grep.js +183 -0
  82. package/dist/core/changes/grep.js.map +1 -0
  83. package/dist/core/changes/records.js +172 -0
  84. package/dist/core/changes/records.js.map +1 -0
  85. package/dist/core/changes/render-md.js +101 -0
  86. package/dist/core/changes/render-md.js.map +1 -0
  87. package/dist/core/changes/with-docs.js +86 -0
  88. package/dist/core/changes/with-docs.js.map +1 -0
  89. package/dist/core/compat/capabilities.js +127 -0
  90. package/dist/core/compat/capabilities.js.map +1 -0
  91. package/dist/core/compat/manifest.js +203 -0
  92. package/dist/core/compat/manifest.js.map +1 -0
  93. package/dist/core/constants.js +38 -0
  94. package/dist/core/constants.js.map +1 -0
  95. package/dist/core/context/capabilities.js +106 -0
  96. package/dist/core/context/capabilities.js.map +1 -0
  97. package/dist/core/context/detect.js +370 -0
  98. package/dist/core/context/detect.js.map +1 -0
  99. package/dist/core/context/projects.js +159 -0
  100. package/dist/core/context/projects.js.map +1 -0
  101. package/dist/core/context/resolve.js +85 -0
  102. package/dist/core/context/resolve.js.map +1 -0
  103. package/dist/core/convert/capabilities.js +86 -0
  104. package/dist/core/convert/capabilities.js.map +1 -0
  105. package/dist/core/convert/coldefs.js +313 -0
  106. package/dist/core/convert/coldefs.js.map +1 -0
  107. package/dist/core/docs/areas.js +22 -0
  108. package/dist/core/docs/areas.js.map +1 -0
  109. package/dist/core/docs/cache.js +133 -0
  110. package/dist/core/docs/cache.js.map +1 -0
  111. package/dist/core/docs/capabilities.js +377 -0
  112. package/dist/core/docs/capabilities.js.map +1 -0
  113. package/dist/core/docs/corpus.js.map +1 -0
  114. package/dist/core/docs/demos.js +105 -0
  115. package/dist/core/docs/demos.js.map +1 -0
  116. package/dist/core/docs/get-page.js +182 -0
  117. package/dist/core/docs/get-page.js.map +1 -0
  118. package/dist/core/docs/hosts.js +74 -0
  119. package/dist/core/docs/hosts.js.map +1 -0
  120. package/dist/core/docs/search.js.map +1 -0
  121. package/dist/core/envelope.js +79 -0
  122. package/dist/core/envelope.js.map +1 -0
  123. package/dist/core/extract/imports.js +163 -0
  124. package/dist/core/extract/imports.js.map +1 -0
  125. package/dist/core/extract/input.js +140 -0
  126. package/dist/core/extract/input.js.map +1 -0
  127. package/dist/core/extract/line-map.js +90 -0
  128. package/dist/core/extract/line-map.js.map +1 -0
  129. package/dist/core/extract/ts-literal.js +963 -0
  130. package/dist/core/extract/ts-literal.js.map +1 -0
  131. package/dist/core/index.js +13 -0
  132. package/dist/core/index.js.map +1 -0
  133. package/dist/core/migrate/capabilities.js +143 -0
  134. package/dist/core/migrate/capabilities.js.map +1 -0
  135. package/dist/core/migrate/leftovers.js +119 -0
  136. package/dist/core/migrate/leftovers.js.map +1 -0
  137. package/dist/core/migrate/state.js +295 -0
  138. package/dist/core/migrate/state.js.map +1 -0
  139. package/dist/core/packages/cache.js +139 -0
  140. package/dist/core/packages/cache.js.map +1 -0
  141. package/dist/core/packages/capabilities.js +95 -0
  142. package/dist/core/packages/capabilities.js.map +1 -0
  143. package/dist/{adaptable/types.js → core/packages/entry-types.js} +1 -1
  144. package/dist/core/packages/entry-types.js.map +1 -0
  145. package/dist/core/packages/exec.js +37 -0
  146. package/dist/core/packages/exec.js.map +1 -0
  147. package/dist/core/packages/load-entry.js +123 -0
  148. package/dist/core/packages/load-entry.js.map +1 -0
  149. package/dist/core/packages/prepare.js +122 -0
  150. package/dist/core/packages/prepare.js.map +1 -0
  151. package/dist/core/packages/registry.js +75 -0
  152. package/dist/core/packages/registry.js.map +1 -0
  153. package/dist/core/packages/resolve.js +94 -0
  154. package/dist/core/packages/resolve.js.map +1 -0
  155. package/dist/core/packages/versions.js +71 -0
  156. package/dist/core/packages/versions.js.map +1 -0
  157. package/dist/core/ping.js +22 -0
  158. package/dist/core/ping.js.map +1 -0
  159. package/dist/core/register.js +18 -0
  160. package/dist/core/register.js.map +1 -0
  161. package/dist/core/scaffold/capabilities.js +434 -0
  162. package/dist/core/scaffold/capabilities.js.map +1 -0
  163. package/dist/core/scaffold/generate.js +409 -0
  164. package/dist/core/scaffold/generate.js.map +1 -0
  165. package/dist/core/scaffold/infer.js +441 -0
  166. package/dist/core/scaffold/infer.js.map +1 -0
  167. package/dist/core/scaffold/overlay.js +290 -0
  168. package/dist/core/scaffold/overlay.js.map +1 -0
  169. package/dist/core/scaffold/readers/csv.js +146 -0
  170. package/dist/core/scaffold/readers/csv.js.map +1 -0
  171. package/dist/core/scaffold/readers/dataset.js +53 -0
  172. package/dist/core/scaffold/readers/dataset.js.map +1 -0
  173. package/dist/core/scaffold/readers/index.js +62 -0
  174. package/dist/core/scaffold/readers/index.js.map +1 -0
  175. package/dist/core/scaffold/readers/json.js +101 -0
  176. package/dist/core/scaffold/readers/json.js.map +1 -0
  177. package/dist/core/scaffold/readers/xlsx.js +81 -0
  178. package/dist/core/scaffold/readers/xlsx.js.map +1 -0
  179. package/dist/core/scaffold/suggestions.js +57 -0
  180. package/dist/core/scaffold/suggestions.js.map +1 -0
  181. package/dist/core/scaffold/templates.js +59 -0
  182. package/dist/core/scaffold/templates.js.map +1 -0
  183. package/dist/core/setup/audit.js +91 -0
  184. package/dist/core/setup/audit.js.map +1 -0
  185. package/dist/core/setup/capabilities.js +80 -0
  186. package/dist/core/setup/capabilities.js.map +1 -0
  187. package/dist/core/setup/context.js +118 -0
  188. package/dist/core/setup/context.js.map +1 -0
  189. package/dist/core/setup/rules/cell-data-type.js +40 -0
  190. package/dist/core/setup/rules/cell-data-type.js.map +1 -0
  191. package/dist/core/setup/rules/coldef-ownership.js +67 -0
  192. package/dist/core/setup/rules/coldef-ownership.js.map +1 -0
  193. package/dist/core/setup/rules/css-import.js +34 -0
  194. package/dist/core/setup/rules/css-import.js.map +1 -0
  195. package/dist/core/setup/rules/direct-grid.js +42 -0
  196. package/dist/core/setup/rules/direct-grid.js.map +1 -0
  197. package/dist/core/setup/rules/index.js +53 -0
  198. package/dist/core/setup/rules/index.js.map +1 -0
  199. package/dist/core/setup/rules/licence-literal.js +23 -0
  200. package/dist/core/setup/rules/licence-literal.js.map +1 -0
  201. package/dist/core/setup/rules/modules.js +86 -0
  202. package/dist/core/setup/rules/modules.js.map +1 -0
  203. package/dist/core/setup/rules/react-stable-refs.js +20 -0
  204. package/dist/core/setup/rules/react-stable-refs.js.map +1 -0
  205. package/dist/core/setup/rules/ready-hook.js +33 -0
  206. package/dist/core/setup/rules/ready-hook.js.map +1 -0
  207. package/dist/core/setup/rules/required-options.js +43 -0
  208. package/dist/core/setup/rules/required-options.js.map +1 -0
  209. package/dist/core/setup/rules/rule.js +10 -0
  210. package/dist/core/setup/rules/rule.js.map +1 -0
  211. package/dist/core/setup/rules/version-skew.js +65 -0
  212. package/dist/core/setup/rules/version-skew.js.map +1 -0
  213. package/dist/core/state/capabilities.js +78 -0
  214. package/dist/core/state/capabilities.js.map +1 -0
  215. package/dist/core/state/check.js +216 -0
  216. package/dist/core/state/check.js.map +1 -0
  217. package/dist/core/state/columns.js +130 -0
  218. package/dist/core/state/columns.js.map +1 -0
  219. package/dist/core/state/did-you-mean.js +83 -0
  220. package/dist/core/state/did-you-mean.js.map +1 -0
  221. package/dist/core/state/expressions.js +170 -0
  222. package/dist/core/state/expressions.js.map +1 -0
  223. package/dist/core/state/known-names.js +96 -0
  224. package/dist/core/state/known-names.js.map +1 -0
  225. package/dist/core/state/rules/aql-legacy-shape.js +42 -0
  226. package/dist/core/state/rules/aql-legacy-shape.js.map +1 -0
  227. package/dist/core/state/rules/aql-missing.js +21 -0
  228. package/dist/core/state/rules/aql-missing.js.map +1 -0
  229. package/dist/core/state/rules/aql-syntax.js +77 -0
  230. package/dist/core/state/rules/aql-syntax.js.map +1 -0
  231. package/dist/core/state/rules/calculated-settings.js +23 -0
  232. package/dist/core/state/rules/calculated-settings.js.map +1 -0
  233. package/dist/core/state/rules/column-id-exists.js +29 -0
  234. package/dist/core/state/rules/column-id-exists.js.map +1 -0
  235. package/dist/core/state/rules/dashboard-module-names.js +31 -0
  236. package/dist/core/state/rules/dashboard-module-names.js.map +1 -0
  237. package/dist/core/state/rules/dashboard-toolbar-names.js +48 -0
  238. package/dist/core/state/rules/dashboard-toolbar-names.js.map +1 -0
  239. package/dist/core/state/rules/format-column-pivot-display-format.js +43 -0
  240. package/dist/core/state/rules/format-column-pivot-display-format.js.map +1 -0
  241. package/dist/core/state/rules/helpers.js +39 -0
  242. package/dist/core/state/rules/helpers.js.map +1 -0
  243. package/dist/core/state/rules/index.js +80 -0
  244. package/dist/core/state/rules/index.js.map +1 -0
  245. package/dist/core/state/rules/layout-column-refs.js +60 -0
  246. package/dist/core/state/rules/layout-column-refs.js.map +1 -0
  247. package/dist/core/state/rules/layout-current-exists.js +27 -0
  248. package/dist/core/state/rules/layout-current-exists.js.map +1 -0
  249. package/dist/core/state/rules/layout-non-empty.js +32 -0
  250. package/dist/core/state/rules/layout-non-empty.js.map +1 -0
  251. package/dist/core/state/rules/rule.js +2 -0
  252. package/dist/core/state/rules/rule.js.map +1 -0
  253. package/dist/core/state/rules/scope-column-refs.js +32 -0
  254. package/dist/core/state/rules/scope-column-refs.js.map +1 -0
  255. package/dist/core/state/rules/scope-shape.js +61 -0
  256. package/dist/core/state/rules/scope-shape.js.map +1 -0
  257. package/dist/core/state/rules/state-unique-name.js +40 -0
  258. package/dist/core/state/rules/state-unique-name.js.map +1 -0
  259. package/dist/core/state/rules/state-unknown-section.js +30 -0
  260. package/dist/core/state/rules/state-unknown-section.js.map +1 -0
  261. package/dist/core/state/rules/type-discriminator.js +70 -0
  262. package/dist/core/state/rules/type-discriminator.js.map +1 -0
  263. package/dist/core/state/type-check.js +408 -0
  264. package/dist/core/state/type-check.js.map +1 -0
  265. package/dist/mcp/index.js +109 -0
  266. package/dist/mcp/index.js.map +1 -0
  267. package/dist/mcp/server.js +110 -0
  268. package/dist/mcp/server.js.map +1 -0
  269. package/dist/skills/adaptable-debug/SKILL.md +145 -0
  270. package/dist/skills/adaptable-debug/VERSION.md +1 -0
  271. package/dist/skills/adaptable-debug/references/_shared/agents-snippet.md +3 -0
  272. package/dist/skills/adaptable-debug/references/_shared/capabilities.md +35 -0
  273. package/dist/skills/adaptable-debug/references/_shared/conversation.md +20 -0
  274. package/dist/skills/adaptable-debug/references/_shared/docs-protocol.md +36 -0
  275. package/dist/skills/adaptable-debug/references/_shared/grounding.md +54 -0
  276. package/dist/skills/adaptable-debug/references/_shared/guards.md +20 -0
  277. package/dist/skills/adaptable-debug/references/_shared/validation-loop.md +42 -0
  278. package/dist/skills/adaptable-debug/references/devtools-api.md +36 -0
  279. package/dist/skills/adaptable-debug/references/feedback-template.md +36 -0
  280. package/dist/skills/adaptable-debug/references/symptoms.md +37 -0
  281. package/dist/skills/adaptable-debug/references/ticket-template.md +50 -0
  282. package/dist/skills/adaptable-dev/SKILL.md +97 -0
  283. package/dist/skills/adaptable-dev/VERSION.md +1 -0
  284. package/dist/skills/adaptable-dev/references/_shared/agents-snippet.md +3 -0
  285. package/dist/skills/adaptable-dev/references/_shared/capabilities.md +35 -0
  286. package/dist/skills/adaptable-dev/references/_shared/conversation.md +20 -0
  287. package/dist/skills/adaptable-dev/references/_shared/docs-protocol.md +36 -0
  288. package/dist/skills/adaptable-dev/references/_shared/grounding.md +54 -0
  289. package/dist/skills/adaptable-dev/references/_shared/guards.md +20 -0
  290. package/dist/skills/adaptable-dev/references/_shared/validation-loop.md +42 -0
  291. package/dist/skills/adaptable-dev/references/recommendations.md +93 -0
  292. package/dist/skills/adaptable-setup/SKILL.md +158 -0
  293. package/dist/skills/adaptable-setup/VERSION.md +1 -0
  294. package/dist/skills/adaptable-setup/references/_shared/agents-snippet.md +3 -0
  295. package/dist/skills/adaptable-setup/references/_shared/capabilities.md +35 -0
  296. package/dist/skills/adaptable-setup/references/_shared/conversation.md +20 -0
  297. package/dist/skills/adaptable-setup/references/_shared/docs-protocol.md +36 -0
  298. package/dist/skills/adaptable-setup/references/_shared/grounding.md +54 -0
  299. package/dist/skills/adaptable-setup/references/_shared/guards.md +20 -0
  300. package/dist/skills/adaptable-setup/references/_shared/validation-loop.md +42 -0
  301. package/dist/skills/adaptable-setup/references/paths.md +45 -0
  302. package/dist/skills/adaptable-upgrade/SKILL.md +269 -0
  303. package/dist/skills/adaptable-upgrade/VERSION.md +1 -0
  304. package/dist/skills/adaptable-upgrade/references/_shared/agents-snippet.md +3 -0
  305. package/dist/skills/adaptable-upgrade/references/_shared/capabilities.md +35 -0
  306. package/dist/skills/adaptable-upgrade/references/_shared/conversation.md +20 -0
  307. package/dist/skills/adaptable-upgrade/references/_shared/docs-protocol.md +36 -0
  308. package/dist/skills/adaptable-upgrade/references/_shared/grounding.md +54 -0
  309. package/dist/skills/adaptable-upgrade/references/_shared/guards.md +20 -0
  310. package/dist/skills/adaptable-upgrade/references/_shared/validation-loop.md +42 -0
  311. package/dist/skills/adaptable-upgrade/references/apply-order.md +171 -0
  312. package/dist/skills/adaptable-upgrade/references/plan-preamble.md +151 -0
  313. package/dist/skills/adaptable-upgrade/scripts/adaptable.mjs +24 -0
  314. package/package.json +34 -13
  315. package/dist/adaptable/loadEntry.js +0 -94
  316. package/dist/adaptable/loadEntry.js.map +0 -1
  317. package/dist/adaptable/types.js.map +0 -1
  318. package/dist/cache.js +0 -11
  319. package/dist/cache.js.map +0 -1
  320. package/dist/checks/stateRules.js +0 -389
  321. package/dist/checks/stateRules.js.map +0 -1
  322. package/dist/checks/stateTypes.js +0 -142
  323. package/dist/checks/stateTypes.js.map +0 -1
  324. package/dist/context.js +0 -39
  325. package/dist/context.js.map +0 -1
  326. package/dist/docs/corpus.js.map +0 -1
  327. package/dist/docs/search.js.map +0 -1
  328. package/dist/docs/source.js +0 -151
  329. package/dist/docs/source.js.map +0 -1
  330. package/dist/environment.js +0 -181
  331. package/dist/environment.js.map +0 -1
  332. package/dist/index.js +0 -7
  333. package/dist/index.js.map +0 -1
  334. package/dist/prompts.js +0 -84
  335. package/dist/prompts.js.map +0 -1
  336. package/dist/resources.js +0 -59
  337. package/dist/resources.js.map +0 -1
  338. package/dist/server.js +0 -23
  339. package/dist/server.js.map +0 -1
  340. package/dist/tools/checks.js +0 -250
  341. package/dist/tools/checks.js.map +0 -1
  342. package/dist/tools/docs.js +0 -173
  343. package/dist/tools/docs.js.map +0 -1
  344. package/dist/tools/environment.js +0 -52
  345. package/dist/tools/environment.js.map +0 -1
  346. package/skills/adaptable-dev/SKILL.md +0 -42
  347. /package/dist/{docs → core/docs}/corpus.js +0 -0
  348. /package/dist/{docs → core/docs}/search.js +0 -0
@@ -0,0 +1,290 @@
1
+ /**
2
+ * The scaffold overlay (plan §8.11 Shell, Overlay): which files go where for a framework,
3
+ * what conflicts with the project, the `package.json` dependency additions, `AGENTS.md`,
4
+ * and applying the plan (or not, with `--dry-run`).
5
+ *
6
+ * The framework's creator owns the shell (Vite / Angular CLI); the overlay writes the
7
+ * AdapTable files under `<srcDir>/` and replaces the creator's root component / entry
8
+ * with the wiring. On a fresh creator project that entry is the one conflict the plan
9
+ * reports — it is overwritten only with `--force`, like any other existing file.
10
+ */
11
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
12
+ import { basename, dirname, join, posix, relative } from 'node:path';
13
+ import { CapabilityError } from '../envelope.js';
14
+ import { extractFromFile } from '../extract/input.js';
15
+ import { angularComponent, angularStyles, generateAdaptableOptions, generateAgGridModules, generateColumnDefs, generateGridOptions, generateLicenses, generateOnAdaptableReady, generateRowData, reactApp, typeOnlyImports, vanillaMain, viteStyles, vueApp, } from './generate.js';
16
+ import { hasAgentsSnippet, loadAgentsSnippet, loadTemplatesManifest, readTemplateFile, SCAFFOLD_FRAMEWORKS, templatesDir, } from './templates.js';
17
+ /** The creator command per framework (plan §8.11 Shell); `<dir>` is substituted */
18
+ export const CREATORS = {
19
+ vanilla: 'npm create vite@latest <dir> -- --template vanilla-ts',
20
+ react: 'npm create vite@latest <dir> -- --template react-ts',
21
+ vue: 'npm create vite@latest <dir> -- --template vue-ts',
22
+ angular: 'npx -p @angular/cli@latest ng new <dir> --style css --routing false --ssr false --skip-install',
23
+ };
24
+ /** The dev command the report suggests after `npm install` */
25
+ export const DEV_COMMANDS = {
26
+ vanilla: 'npm run dev',
27
+ react: 'npm run dev',
28
+ vue: 'npm run dev',
29
+ angular: 'npx ng serve',
30
+ };
31
+ /** Reads the shell: package.json presence and content */
32
+ export function readShell(outDir) {
33
+ const file = join(outDir, 'package.json');
34
+ if (!existsSync(file)) {
35
+ return { present: false };
36
+ }
37
+ const text = readFileSync(file, 'utf8');
38
+ let parsed;
39
+ try {
40
+ parsed = JSON.parse(text);
41
+ }
42
+ catch (error) {
43
+ throw new CapabilityError('EXTRACTION_FAILED', `${file}: ${error instanceof Error ? error.message : String(error)}`, 'Fix the package.json so it parses as JSON.');
44
+ }
45
+ return { present: true, packageJson: parsed, packageJsonText: text, name: typeof parsed.name === 'string' ? parsed.name : undefined };
46
+ }
47
+ function allDependencies(pkg) {
48
+ const out = {};
49
+ for (const section of ['dependencies', 'devDependencies', 'peerDependencies']) {
50
+ const deps = pkg?.[section];
51
+ if (deps && typeof deps === 'object') {
52
+ Object.assign(out, deps);
53
+ }
54
+ }
55
+ return out;
56
+ }
57
+ /** The framework from the shell's dependencies: `@angular/core` → angular, `react` → react, `vue` → vue, else vanilla */
58
+ export function detectFramework(shell) {
59
+ if (!shell.present) {
60
+ return undefined;
61
+ }
62
+ const deps = allDependencies(shell.packageJson);
63
+ if (deps['@angular/core']) {
64
+ return 'angular';
65
+ }
66
+ if (deps.react) {
67
+ return 'react';
68
+ }
69
+ if (deps.vue) {
70
+ return 'vue';
71
+ }
72
+ return 'vanilla';
73
+ }
74
+ /** `^<version>` for a release; a prerelease (canary) is kept so npm can resolve it */
75
+ export function caretRange(version, major) {
76
+ if (version && /^\d+\.\d+\.\d+/.test(version)) {
77
+ return `^${version}`;
78
+ }
79
+ return `^${major}.0.0`;
80
+ }
81
+ /** The dependencies the framework needs (plan §8.11): AdapTable, the wrapper, AG Grid Enterprise and its peers */
82
+ export function dependenciesFor(framework, adaptablePackage, versions) {
83
+ const deps = {
84
+ '@adaptabletools/adaptable': versions.adaptableRange,
85
+ 'ag-grid-enterprise': versions.agGridRange,
86
+ 'ag-stack': versions.agGridRange,
87
+ };
88
+ if (framework !== 'vanilla') {
89
+ deps[adaptablePackage] = versions.adaptableRange;
90
+ }
91
+ const gridPackage = { vanilla: undefined, react: 'ag-grid-react', angular: 'ag-grid-angular', vue: 'ag-grid-vue3' }[framework];
92
+ if (gridPackage) {
93
+ deps[gridPackage] = versions.agGridRange;
94
+ }
95
+ return Object.fromEntries(Object.entries(deps).sort(([a], [b]) => a.localeCompare(b)));
96
+ }
97
+ export function planDependencies(shell, wanted) {
98
+ const existing = allDependencies(shell.packageJson);
99
+ const add = {};
100
+ const present = {};
101
+ for (const [name, range] of Object.entries(wanted)) {
102
+ if (existing[name] !== undefined) {
103
+ present[name] = existing[name];
104
+ }
105
+ else {
106
+ add[name] = range;
107
+ }
108
+ }
109
+ return { add, present };
110
+ }
111
+ /** package.json with the additions merged into `dependencies`, keeping the file's indentation and trailing newline */
112
+ export function mergePackageJson(text, add) {
113
+ const pkg = JSON.parse(text);
114
+ const indent = text.match(/^([ \t]+)"/m)?.[1] ?? ' ';
115
+ const deps = { ...(pkg.dependencies ?? {}), ...add };
116
+ pkg.dependencies = Object.fromEntries(Object.entries(deps).sort(([a], [b]) => a.localeCompare(b)));
117
+ return `${JSON.stringify(pkg, null, indent)}${text.endsWith('\n') ? '\n' : ''}`;
118
+ }
119
+ /** The Angular root component file the creator wrote (≥ 20: `app.ts` / `App`; 17–19: `app.component.ts` / `AppComponent`) */
120
+ export function angularTarget(outDir) {
121
+ if (!existsSync(join(outDir, 'src', 'app', 'app.ts')) && existsSync(join(outDir, 'src', 'app', 'app.component.ts'))) {
122
+ return { file: 'src/app/app.component.ts', className: 'AppComponent' };
123
+ }
124
+ return { file: 'src/app/app.ts', className: 'App' };
125
+ }
126
+ /** The demo dataset's columns from the template `columnDefs.ts` (the "neither" case of §8.11 Inference) */
127
+ export function demoColumns(framework) {
128
+ const manifest = loadTemplatesManifest().frameworks[framework];
129
+ const file = join(templatesDir(), framework, ...posix.join(manifest.srcDir, 'columnDefs.ts').split('/'));
130
+ const extraction = extractFromFile(file, { target: 'columnDefs' });
131
+ const value = 'value' in extraction ? extraction.value : undefined;
132
+ if (!Array.isArray(value)) {
133
+ throw new CapabilityError('EXTRACTION_FAILED', `The template columnDefs.ts for ${framework} could not be read.`, 'Reinstall the package; in the repository run `npm run generate`.');
134
+ }
135
+ return value.map((col) => {
136
+ const field = String(col.field ?? col.colId ?? '');
137
+ const colId = String(col.colId ?? field);
138
+ const cellDataType = (typeof col.cellDataType === 'string' ? col.cellDataType : 'text');
139
+ return {
140
+ field,
141
+ colId,
142
+ headerName: typeof col.headerName === 'string' ? col.headerName : field,
143
+ cellDataType: ['text', 'number', 'boolean', 'date', 'object'].includes(cellDataType) ? cellDataType : 'text',
144
+ nullable: false,
145
+ nullCount: 0,
146
+ cardinality: 0,
147
+ uniqueness: 0,
148
+ enumLike: false,
149
+ samples: [],
150
+ primaryKeyCandidate: colId === 'id',
151
+ };
152
+ });
153
+ }
154
+ function actionFor(outDir, path, force) {
155
+ const target = join(outDir, ...path.split('/'));
156
+ if (!existsSync(target)) {
157
+ return 'write';
158
+ }
159
+ return force ? 'overwrite' : 'skip-exists';
160
+ }
161
+ /** Builds the file plan for a framework */
162
+ export function planOverlay(input) {
163
+ const { framework, outDir, force } = input;
164
+ const manifest = loadTemplatesManifest().frameworks[framework];
165
+ const src = manifest.srcDir;
166
+ const at = (name) => posix.join(src, name);
167
+ const templateSource = (name) => manifest.files.find((f) => f.path === at(name))?.source;
168
+ const files = [];
169
+ const notes = [];
170
+ const planned = new Map();
171
+ const add = (path, origin, content, source) => {
172
+ const file = { path, origin, action: actionFor(outDir, path, force), content, ...(source ? { source } : {}) };
173
+ planned.set(path, file);
174
+ files.push(file);
175
+ };
176
+ const demo = input.generate === undefined;
177
+ const rowType = input.generate?.rowType ?? input.demoRowType ?? 'WebFramework';
178
+ const generateInput = input.generate ??
179
+ {
180
+ framework,
181
+ rowType,
182
+ schema: input.demoSchema,
183
+ rows: [],
184
+ primaryKey: 'id',
185
+ adaptableId: input.shell.name ?? basename(outDir),
186
+ rowModel: 'client',
187
+ adaptablePackage: input.adaptablePackage,
188
+ };
189
+ // --- data files
190
+ if (demo) {
191
+ add(at('columnDefs.ts'), 'template', readTemplateFile(framework, at('columnDefs.ts')), templateSource('columnDefs.ts'));
192
+ add(at('rowData.ts'), 'template', readTemplateFile(framework, at('rowData.ts')), templateSource('rowData.ts'));
193
+ }
194
+ else {
195
+ add(at('columnDefs.ts'), 'generated', generateColumnDefs(generateInput));
196
+ add(at('rowData.ts'), 'generated', generateRowData(generateInput));
197
+ }
198
+ // --- the AdapTable files of §8.11
199
+ add(at('adaptableOptions.ts'), 'generated', generateAdaptableOptions(generateInput));
200
+ add(at('gridOptions.ts'), 'generated', generateGridOptions(generateInput));
201
+ add(at('agGridModules.ts'), 'generated', generateAgGridModules());
202
+ add(at('licenses.ts'), 'generated', generateLicenses(framework));
203
+ add(at('onAdaptableReady.ts'), 'generated', generateOnAdaptableReady(generateInput));
204
+ const styles = readTemplateFile(framework, at('styles.css'));
205
+ if (framework === 'angular') {
206
+ // the creator's global stylesheet (angular.json "styles"); a component stylesheet would trip the anyComponentStyle budget
207
+ add('src/styles.css', 'template', angularStyles(styles, input.adaptablePackage), templateSource('styles.css'));
208
+ }
209
+ else {
210
+ add(at('styles.css'), 'template', viteStyles(styles), templateSource('styles.css'));
211
+ }
212
+ // --- the wiring: the creator's entry, replaced
213
+ let wiring;
214
+ let persistenceRestored;
215
+ if (framework === 'react') {
216
+ const result = reactApp(readTemplateFile(framework, 'src/App.tsx'), rowType);
217
+ wiring = 'src/App.tsx';
218
+ persistenceRestored = result.persistenceRestored;
219
+ add(wiring, 'template', result.content, templateSource('App.tsx') ?? manifest.files.find((f) => f.path === 'src/App.tsx')?.source);
220
+ }
221
+ else if (framework === 'vue') {
222
+ const result = vueApp(readTemplateFile(framework, 'src/App.vue'), rowType, input.adaptablePackage);
223
+ wiring = 'src/App.vue';
224
+ persistenceRestored = result.persistenceRestored;
225
+ add(wiring, 'template', result.content, manifest.files.find((f) => f.path === 'src/App.vue')?.source);
226
+ notes.push("Vue: the AdapTable stylesheet is imported from App.vue (the creator's main.ts is left untouched).");
227
+ }
228
+ else if (framework === 'vanilla') {
229
+ const result = vanillaMain(readTemplateFile(framework, 'src/index.ts'), rowType);
230
+ wiring = 'src/main.ts';
231
+ persistenceRestored = result.persistenceRestored;
232
+ add(wiring, 'template', result.content, manifest.files.find((f) => f.path === 'src/index.ts')?.source);
233
+ notes.push("Vanilla: the template's index.ts is written as src/main.ts, the entry Vite's index.html loads; it creates the #adaptable and #grid containers inside #app.");
234
+ }
235
+ else {
236
+ const target = angularTarget(outDir);
237
+ wiring = target.file;
238
+ persistenceRestored = true;
239
+ add(wiring, 'generated', angularComponent(generateInput, target));
240
+ notes.push(`Angular: ${target.file} becomes a standalone root component with an inline template (the docs template is NgModule-based); the creator's app.html, app.css and app.spec.ts beside it are no longer used and can be deleted.`, `Angular: the AdapTable stylesheet is imported from the global src/styles.css (listed under "styles" in angular.json); a component stylesheet would exceed the anyComponentStyle budget.`, 'Angular: AG Grid Enterprise + AdapTable are ~7 MB, above the default 1 MB "initial" production budget — raise budgets[].maximumWarning/maximumError for "initial" in angular.json (e.g. 10mb) or `ng build` fails; `ng serve` is unaffected.');
241
+ }
242
+ // --- AGENTS.md (plan §8.11, Appendix D)
243
+ const snippet = loadAgentsSnippet();
244
+ const agentsPath = join(outDir, 'AGENTS.md');
245
+ let agentsAction = 'write';
246
+ if (existsSync(agentsPath)) {
247
+ agentsAction = hasAgentsSnippet(readFileSync(agentsPath, 'utf8')) ? 'exists-with-snippet' : 'exists';
248
+ }
249
+ // the creators' tsconfigs set verbatimModuleSyntax: every type import must say so
250
+ for (const file of files) {
251
+ if (/\.(ts|tsx|vue)$/.test(file.path)) {
252
+ file.content = typeOnlyImports(file.content, [rowType]);
253
+ }
254
+ }
255
+ const conflicts = files.filter((f) => f.action === 'skip-exists').map((f) => f.path);
256
+ return { files, conflicts, wiring, persistenceRestored, agentsMd: { path: 'AGENTS.md', action: agentsAction, snippet }, notes };
257
+ }
258
+ /** Writes the plan: new files, overwrites (only with `--force`), `AGENTS.md` when absent, package.json additions */
259
+ export function applyOverlay(outDir, plan, shell, dependencies) {
260
+ const result = { written: [], overwritten: [], skipped: [], agentsMdWritten: false, packageJsonUpdated: false };
261
+ for (const file of plan.files) {
262
+ const target = join(outDir, ...file.path.split('/'));
263
+ if (file.action === 'skip-exists') {
264
+ result.skipped.push(file.path);
265
+ continue;
266
+ }
267
+ mkdirSync(dirname(target), { recursive: true });
268
+ writeFileSync(target, file.content);
269
+ (file.action === 'overwrite' ? result.overwritten : result.written).push(file.path);
270
+ }
271
+ if (plan.agentsMd.action === 'write') {
272
+ writeFileSync(join(outDir, 'AGENTS.md'), `${plan.agentsMd.snippet}\n`);
273
+ result.agentsMdWritten = true;
274
+ }
275
+ if (shell.present && shell.packageJsonText && Object.keys(dependencies.add).length > 0) {
276
+ writeFileSync(join(outDir, 'package.json'), mergePackageJson(shell.packageJsonText, dependencies.add));
277
+ result.packageJsonUpdated = true;
278
+ }
279
+ return result;
280
+ }
281
+ export function frameworkFromName(name) {
282
+ return SCAFFOLD_FRAMEWORKS.includes(name ?? '') ? name : undefined;
283
+ }
284
+ /** `<dir>` in a creator command: the out dir relative to cwd when it is below it, else absolute */
285
+ export function creatorCommand(framework, outDir, cwd) {
286
+ const rel = relative(cwd, outDir);
287
+ const dir = rel === '' ? '.' : rel.startsWith('..') ? outDir : rel;
288
+ return CREATORS[framework].replace('<dir>', dir.includes(' ') ? `"${dir}"` : dir);
289
+ }
290
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../src/core/scaffold/overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,EACf,QAAQ,EACR,eAAe,EACf,WAAW,EACX,UAAU,EACV,MAAM,GAGP,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,GAEb,MAAM,gBAAgB,CAAC;AAExB,mFAAmF;AACnF,MAAM,CAAC,MAAM,QAAQ,GAAsC;IACzD,OAAO,EAAE,uDAAuD;IAChE,KAAK,EAAE,qDAAqD;IAC5D,GAAG,EAAE,mDAAmD;IACxD,OAAO,EAAE,gGAAgG;CAC1G,CAAC;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAsC;IAC7D,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,aAAa;IACpB,GAAG,EAAE,aAAa;IAClB,OAAO,EAAE,cAAc;CACxB,CAAC;AA+BF,yDAAyD;AACzD,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,eAAe,CAAC,mBAAmB,EAAE,GAAG,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,4CAA4C,CAAC,CAAC;IACrK,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACxI,CAAC;AAED,SAAS,eAAe,CAAC,GAAwC;IAC/D,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,OAAO,IAAI,CAAC,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAA8B,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,yHAAyH;AACzH,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAYD,sFAAsF;AACtF,MAAM,UAAU,UAAU,CAAC,OAA2B,EAAE,KAAa;IACnE,IAAI,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,OAAO,EAAE,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,KAAK,MAAM,CAAC;AACzB,CAAC;AAED,kHAAkH;AAClH,MAAM,UAAU,eAAe,CAAC,SAA4B,EAAE,gBAAwB,EAAE,QAAkB;IACxG,MAAM,IAAI,GAA2B;QACnC,2BAA2B,EAAE,QAAQ,CAAC,cAAc;QACpD,oBAAoB,EAAE,QAAQ,CAAC,WAAW;QAC1C,UAAU,EAAE,QAAQ,CAAC,WAAW;KACjC,CAAC;IACF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC;IACnD,CAAC;IACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,SAAS,CAAC,CAAC;IAC/H,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAY,EAAE,MAA8B;IAC3E,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED,sHAAsH;AACtH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,GAA2B;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACtD,MAAM,IAAI,GAAG,EAAE,GAAG,CAAE,GAAG,CAAC,YAAmD,IAAI,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;IAC7F,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAClF,CAAC;AAED,6HAA6H;AAC7H,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC;QACpH,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACtD,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,WAAW,CAAC,SAA4B;IACtD,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACzG,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,eAAe,CAAC,mBAAmB,EAAE,kCAAkC,SAAS,qBAAqB,EAAE,kEAAkE,CAAC,CAAC;IACvL,CAAC;IACD,OAAQ,KAAmC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAiC,CAAC;QACxH,OAAO;YACL,KAAK;YACL,KAAK;YACL,UAAU,EAAE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK;YACvE,YAAY,EAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM;YACvH,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,EAAE;YACX,mBAAmB,EAAE,KAAK,KAAK,IAAI;SACpC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AA0BD,SAAS,SAAS,CAAC,MAAc,EAAE,IAAY,EAAE,KAAc;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC;AAC7C,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAC3C,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC;IACjG,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,MAA6B,EAAE,OAAe,EAAE,MAAe,EAAE,EAAE;QAC5F,MAAM,IAAI,GAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3H,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,IAAI,KAAK,CAAC,WAAW,IAAI,cAAc,CAAC;IAC/E,MAAM,aAAa,GACjB,KAAK,CAAC,QAAQ;QACb;YACC,SAAS;YACT,OAAO;YACP,MAAM,EAAE,KAAK,CAAC,UAAW;YACzB,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC;YACjD,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;SAChB,CAAC;IAE7B,iBAAiB;IACjB,IAAI,IAAI,EAAE,CAAC;QACT,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,UAAU,EAAE,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;QACxH,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IACjH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;QACzE,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,mCAAmC;IACnC,GAAG,CAAC,EAAE,CAAC,qBAAqB,CAAC,EAAE,WAAW,EAAE,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC;IACrF,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3E,GAAG,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAClE,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;IACjE,GAAG,CAAC,EAAE,CAAC,qBAAqB,CAAC,EAAE,WAAW,EAAE,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAC7D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,0HAA0H;QAC1H,GAAG,CAAC,gBAAgB,EAAE,UAAU,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IACjH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,gDAAgD;IAChD,IAAI,MAAc,CAAC;IACnB,IAAI,mBAA4B,CAAC;IACjC,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7E,MAAM,GAAG,aAAa,CAAC;QACvB,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QACjD,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;IACrI,CAAC;SAAM,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACnG,MAAM,GAAG,aAAa,CAAC;QACvB,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QACjD,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;QACtG,KAAK,CAAC,IAAI,CAAC,mGAAmG,CAAC,CAAC;IAClH,CAAC;SAAM,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QACjF,MAAM,GAAG,aAAa,CAAC;QACvB,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QACjD,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;QACvG,KAAK,CAAC,IAAI,CAAC,4JAA4J,CAAC,CAAC;IAC3K,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;QACrB,mBAAmB,GAAG,IAAI,CAAC;QAC3B,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CACR,YAAY,MAAM,CAAC,IAAI,sMAAsM,EAC7N,yLAAyL,EACzL,8OAA8O,CAC/O,CAAC;IACJ,CAAC;IAED,yCAAyC;IACzC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7C,IAAI,YAAY,GAAsC,OAAO,CAAC;IAC9D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,YAAY,GAAG,gBAAgB,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvG,CAAC;IAED,kFAAkF;IAClF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC;AAClI,CAAC;AAUD,oHAAoH;AACpH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAAiB,EAAE,KAAY,EAAE,YAA4B;IACxG,MAAM,MAAM,GAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAC7H,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACrC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;QACvE,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;IAChC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvF,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,eAAe,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACvG,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAwB;IACxD,OAAQ,mBAAyC,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,IAA0B,CAAC,CAAC,CAAC,SAAS,CAAC;AACnH,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,cAAc,CAAC,SAA4B,EAAE,MAAc,EAAE,GAAW;IACtF,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;IACnE,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpF,CAAC"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * CSV reader for `scaffold --data` (plan §8.11 Inference). RFC 4180 with the usual
3
+ * tolerances: `,` `;` `\t` `|` delimiters (detected from the first rows unless given),
4
+ * quoted fields with `""` escapes and embedded newlines, CRLF or LF, a UTF-8 BOM,
5
+ * a trailing newline, blank lines skipped. The first row is the header. Cells stay
6
+ * strings (`infer.ts` classifies them); an empty cell is `null`.
7
+ */
8
+ import { CapabilityError } from '../../envelope.js';
9
+ import { normaliseHeader, rowsFromCells } from './dataset.js';
10
+ export const CSV_DELIMITERS = [',', ';', '\t', '|'];
11
+ /**
12
+ * Picks the delimiter whose count is the same on the most of the first rows (and
13
+ * non-zero); ties go to the order above. Counts ignore quoted sections.
14
+ */
15
+ export function detectDelimiter(text, sampleRows = 10) {
16
+ const lines = text.split(/\r?\n/).filter((line) => line.trim() !== '').slice(0, sampleRows);
17
+ if (lines.length === 0) {
18
+ return ',';
19
+ }
20
+ let best = { delimiter: ',', consistent: 0, total: 0 };
21
+ for (const delimiter of CSV_DELIMITERS) {
22
+ const counts = lines.map((line) => countUnquoted(line, delimiter));
23
+ const total = counts.reduce((sum, count) => sum + count, 0);
24
+ if (total === 0) {
25
+ continue;
26
+ }
27
+ const first = counts[0];
28
+ const consistent = first > 0 ? counts.filter((count) => count === first).length : 0;
29
+ if (consistent > best.consistent || (consistent === best.consistent && total > best.total)) {
30
+ best = { delimiter, consistent, total };
31
+ }
32
+ }
33
+ return best.delimiter;
34
+ }
35
+ function countUnquoted(line, delimiter) {
36
+ let count = 0;
37
+ let quoted = false;
38
+ for (const char of line) {
39
+ if (char === '"') {
40
+ quoted = !quoted;
41
+ }
42
+ else if (!quoted && char === delimiter) {
43
+ count += 1;
44
+ }
45
+ }
46
+ return count;
47
+ }
48
+ /** Parses the whole text into rows of cells; throws `EXTRACTION_FAILED` on an unterminated quote */
49
+ export function parseCsv(text, delimiter, file = '<csv>') {
50
+ const rows = [];
51
+ let row = [];
52
+ let cell = '';
53
+ let quoted = false;
54
+ let cellStarted = false;
55
+ let skippedBlank = 0;
56
+ let line = 1;
57
+ let quoteOpenedAt = 0;
58
+ const endCell = () => {
59
+ row.push(cell);
60
+ cell = '';
61
+ cellStarted = false;
62
+ };
63
+ const endRow = () => {
64
+ endCell();
65
+ if (row.length === 1 && row[0] === '') {
66
+ skippedBlank += 1;
67
+ }
68
+ else {
69
+ rows.push(row);
70
+ }
71
+ row = [];
72
+ };
73
+ const start = text.charCodeAt(0) === 0xfeff ? 1 : 0;
74
+ for (let i = start; i < text.length; i += 1) {
75
+ const char = text[i];
76
+ if (quoted) {
77
+ if (char === '"') {
78
+ if (text[i + 1] === '"') {
79
+ cell += '"';
80
+ i += 1;
81
+ }
82
+ else {
83
+ quoted = false;
84
+ }
85
+ }
86
+ else {
87
+ if (char === '\n') {
88
+ line += 1;
89
+ }
90
+ cell += char;
91
+ }
92
+ continue;
93
+ }
94
+ if (char === '"' && !cellStarted) {
95
+ quoted = true;
96
+ cellStarted = true;
97
+ quoteOpenedAt = line;
98
+ continue;
99
+ }
100
+ if (char === delimiter) {
101
+ endCell();
102
+ continue;
103
+ }
104
+ if (char === '\r') {
105
+ if (text[i + 1] === '\n') {
106
+ i += 1;
107
+ }
108
+ endRow();
109
+ line += 1;
110
+ continue;
111
+ }
112
+ if (char === '\n') {
113
+ endRow();
114
+ line += 1;
115
+ continue;
116
+ }
117
+ cell += char;
118
+ cellStarted = true;
119
+ }
120
+ if (quoted) {
121
+ throw new CapabilityError('EXTRACTION_FAILED', `${file}:${quoteOpenedAt}: a quoted field is not closed before the end of the file.`, 'Close the quote (a literal quote inside a quoted field is written as "") or re-export the file.');
122
+ }
123
+ if (cell !== '' || row.length > 0 || cellStarted) {
124
+ endRow();
125
+ }
126
+ return { rows, skippedBlank };
127
+ }
128
+ export function readCsvDataset(text, file, options = {}) {
129
+ const delimiter = options.delimiter ?? detectDelimiter(text);
130
+ const { rows, skippedBlank } = parseCsv(text, delimiter, file);
131
+ if (rows.length === 0) {
132
+ throw new CapabilityError('EXTRACTION_FAILED', `${file} has no rows.`, 'Pass a CSV with a header row and at least one data row.');
133
+ }
134
+ const { columns, notes } = normaliseHeader(rows[0]);
135
+ if (skippedBlank > 0) {
136
+ notes.push(`${skippedBlank} blank line(s) skipped.`);
137
+ }
138
+ const data = rowsFromCells(columns, rows.slice(1), notes);
139
+ return {
140
+ columns,
141
+ rows: data,
142
+ source: { file, format: 'csv', rowCount: data.length, delimiter },
143
+ notes,
144
+ };
145
+ }
146
+ //# sourceMappingURL=csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../../../src/core/scaffold/readers/csv.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * The shape every scaffold reader produces (plan §8.11 Inference): a flat table of
3
+ * rows keyed by column name, with the cells typed as faithfully as the source allows
4
+ * (CSV cells are strings; JSON cells are JSON values; XLSX cells are strings, numbers,
5
+ * booleans or `Date`s). `infer.ts` classifies them from there.
6
+ */
7
+ /** Plan §7.1 names caps for State and expressions only; datasets get their own (decision in A4.2) */
8
+ export const DATASET_MAX_BYTES = 25 * 1024 * 1024;
9
+ /**
10
+ * Makes header cells usable as column names: empty → `column_<n>` (1-based position),
11
+ * duplicates → `<name>_2`, `<name>_3`, …; trims whitespace. Returns the names and the
12
+ * notes describing what changed.
13
+ */
14
+ export function normaliseHeader(cells) {
15
+ const notes = [];
16
+ const seen = new Map();
17
+ const columns = cells.map((raw, index) => {
18
+ let name = (raw ?? '').trim();
19
+ if (name === '') {
20
+ name = `column_${index + 1}`;
21
+ notes.push(`Header cell ${index + 1} is empty; the column is named ${name}.`);
22
+ }
23
+ const count = seen.get(name) ?? 0;
24
+ seen.set(name, count + 1);
25
+ if (count > 0) {
26
+ const renamed = `${name}_${count + 1}`;
27
+ notes.push(`Header "${name}" appears more than once; occurrence ${count + 1} is named ${renamed}.`);
28
+ return renamed;
29
+ }
30
+ return name;
31
+ });
32
+ return { columns, notes };
33
+ }
34
+ /** Rows of cells → row objects over `columns`; short rows are padded with `null`, long rows are trimmed (noted once) */
35
+ export function rowsFromCells(columns, cells, notes) {
36
+ let trimmed = 0;
37
+ const rows = cells.map((row) => {
38
+ if (row.length > columns.length && row.slice(columns.length).some((cell) => cell !== null && cell !== undefined && cell !== '')) {
39
+ trimmed += 1;
40
+ }
41
+ const record = {};
42
+ columns.forEach((column, index) => {
43
+ const value = row[index];
44
+ record[column] = value === undefined || value === '' ? null : value;
45
+ });
46
+ return record;
47
+ });
48
+ if (trimmed > 0) {
49
+ notes.push(`${trimmed} row(s) have more cells than the header has columns; the extra cells were dropped.`);
50
+ }
51
+ return rows;
52
+ }
53
+ //# sourceMappingURL=dataset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset.js","sourceRoot":"","sources":["../../../../src/core/scaffold/readers/dataset.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6BH,qGAAqG;AACrG,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAoC;IAClE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACvC,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,IAAI,GAAG,UAAU,KAAK,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,GAAG,CAAC,kCAAkC,IAAI,GAAG,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,wCAAwC,KAAK,GAAG,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC;YACpG,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,wHAAwH;AACxH,MAAM,UAAU,aAAa,CAAC,OAAiB,EAAE,KAAkB,EAAE,KAAe;IAClF,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7B,IAAI,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC,EAAE,CAAC;YAChI,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACtE,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,oFAAoF,CAAC,CAAC;IAC7G,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * `readDataset(path)`: the one entry the scaffold uses for `--data` and `--sample`
3
+ * (plan §8.11 Inference). Dispatches on the extension — `.csv` / `.tsv` / `.txt`
4
+ * (CSV, delimiter detected; `.tsv` forces a tab), `.json` / `.jsonc` / `.json5`,
5
+ * `.xlsx` — applies the dataset size cap, and reads the file.
6
+ */
7
+ import { readFileSync, statSync } from 'node:fs';
8
+ import { extname, resolve } from 'node:path';
9
+ import { CapabilityError } from '../../envelope.js';
10
+ import { readCsvDataset } from './csv.js';
11
+ import { DATASET_MAX_BYTES } from './dataset.js';
12
+ import { readJsonDataset } from './json.js';
13
+ import { readXlsxDataset } from './xlsx.js';
14
+ export { DATASET_MAX_BYTES } from './dataset.js';
15
+ export const DATASET_EXTENSIONS = {
16
+ '.csv': 'csv',
17
+ '.tsv': 'csv',
18
+ '.txt': 'csv',
19
+ '.json': 'json',
20
+ '.jsonc': 'json',
21
+ '.json5': 'json',
22
+ '.xlsx': 'xlsx',
23
+ };
24
+ export function datasetFormatOf(path) {
25
+ return DATASET_EXTENSIONS[extname(path).toLowerCase()];
26
+ }
27
+ function formatBytes(bytes) {
28
+ return bytes >= 1024 * 1024 ? `${(bytes / 1024 / 1024).toFixed(1)} MB` : `${Math.ceil(bytes / 1024)} kB`;
29
+ }
30
+ export async function readDataset(path, options = {}) {
31
+ const file = resolve(path);
32
+ const ext = extname(file).toLowerCase();
33
+ const format = datasetFormatOf(file);
34
+ const role = options.role ?? 'data';
35
+ if (!format) {
36
+ const legacy = ext === '.xls' ? ' Legacy .xls workbooks are not supported; re-save as .xlsx.' : '';
37
+ throw new CapabilityError('USAGE', `${path}: unsupported ${role} file type "${ext || '(none)'}".`, `Pass a .csv, .tsv, .json or .xlsx file.${legacy}`);
38
+ }
39
+ if (role === 'sample' && format !== 'json') {
40
+ throw new CapabilityError('USAGE', `${path}: --sample takes a JSON array; for a ${format.toUpperCase()} file use --data.`, 'Pass the file with --data, or save the sample as JSON.');
41
+ }
42
+ let size;
43
+ try {
44
+ size = statSync(file).size;
45
+ }
46
+ catch {
47
+ throw new CapabilityError('NOT_FOUND', `${path} does not exist or is not readable.`, 'Pass the path of a CSV, JSON or XLSX file.');
48
+ }
49
+ const maxBytes = options.maxBytes ?? DATASET_MAX_BYTES;
50
+ if (size > maxBytes) {
51
+ throw new CapabilityError('INPUT_TOO_LARGE', `${path} is ${formatBytes(size)}; scaffold datasets are capped at ${formatBytes(maxBytes)}.`, 'Pass a representative subset (the first few thousand rows are enough to infer columns) and point rowData at the full source afterwards.');
52
+ }
53
+ if (format === 'xlsx') {
54
+ return readXlsxDataset(file);
55
+ }
56
+ const text = readFileSync(file, 'utf8');
57
+ if (format === 'json') {
58
+ return readJsonDataset(text, file);
59
+ }
60
+ return readCsvDataset(text, file, { delimiter: options.delimiter ?? (ext === '.tsv' ? '\t' : undefined) });
61
+ }
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/scaffold/readers/index.ts"],"names":[],"mappings":"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"}