@adaptabletools/adaptable-mcp 0.1.0-canary.1 → 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 (271) hide show
  1. package/README.md +3 -1
  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 +28 -10
  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 +7 -0
  54. package/dist/bin.js.map +1 -1
  55. package/dist/cli/index.js +8 -0
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/core/anonymise/anonymise.js +315 -0
  58. package/dist/core/anonymise/anonymise.js.map +1 -0
  59. package/dist/core/anonymise/capabilities.js +94 -0
  60. package/dist/core/anonymise/capabilities.js.map +1 -0
  61. package/dist/core/aql/capabilities.js +339 -0
  62. package/dist/core/aql/capabilities.js.map +1 -0
  63. package/dist/core/aql/check.js +204 -0
  64. package/dist/core/aql/check.js.map +1 -0
  65. package/dist/core/aql/engine.js +92 -0
  66. package/dist/core/aql/engine.js.map +1 -0
  67. package/dist/core/aql/functions.js +108 -0
  68. package/dist/core/aql/functions.js.map +1 -0
  69. package/dist/core/aql/migrate.js +62 -0
  70. package/dist/core/aql/migrate.js.map +1 -0
  71. package/dist/core/capabilities.js +9 -3
  72. package/dist/core/capabilities.js.map +1 -1
  73. package/dist/core/changes/capabilities.js +92 -0
  74. package/dist/core/changes/capabilities.js.map +1 -0
  75. package/dist/core/changes/changes.js +101 -0
  76. package/dist/core/changes/changes.js.map +1 -0
  77. package/dist/core/changes/grep.js +183 -0
  78. package/dist/core/changes/grep.js.map +1 -0
  79. package/dist/core/changes/records.js +172 -0
  80. package/dist/core/changes/records.js.map +1 -0
  81. package/dist/core/changes/render-md.js +101 -0
  82. package/dist/core/changes/render-md.js.map +1 -0
  83. package/dist/core/changes/with-docs.js +86 -0
  84. package/dist/core/changes/with-docs.js.map +1 -0
  85. package/dist/core/compat/capabilities.js +1 -1
  86. package/dist/core/compat/capabilities.js.map +1 -1
  87. package/dist/core/context/capabilities.js +1 -1
  88. package/dist/core/context/capabilities.js.map +1 -1
  89. package/dist/core/convert/capabilities.js +86 -0
  90. package/dist/core/convert/capabilities.js.map +1 -0
  91. package/dist/core/convert/coldefs.js +313 -0
  92. package/dist/core/convert/coldefs.js.map +1 -0
  93. package/dist/core/docs/cache.js +1 -1
  94. package/dist/core/docs/capabilities.js +1 -5
  95. package/dist/core/docs/capabilities.js.map +1 -1
  96. package/dist/core/docs/hosts.js +2 -2
  97. package/dist/core/docs/hosts.js.map +1 -1
  98. package/dist/core/extract/imports.js +163 -0
  99. package/dist/core/extract/imports.js.map +1 -0
  100. package/dist/core/extract/input.js +140 -0
  101. package/dist/core/extract/input.js.map +1 -0
  102. package/dist/core/extract/line-map.js +90 -0
  103. package/dist/core/extract/line-map.js.map +1 -0
  104. package/dist/core/extract/ts-literal.js +963 -0
  105. package/dist/core/extract/ts-literal.js.map +1 -0
  106. package/dist/core/migrate/capabilities.js +143 -0
  107. package/dist/core/migrate/capabilities.js.map +1 -0
  108. package/dist/core/migrate/leftovers.js +119 -0
  109. package/dist/core/migrate/leftovers.js.map +1 -0
  110. package/dist/core/migrate/state.js +295 -0
  111. package/dist/core/migrate/state.js.map +1 -0
  112. package/dist/core/packages/cache.js +2 -1
  113. package/dist/core/packages/cache.js.map +1 -1
  114. package/dist/core/register.js +8 -0
  115. package/dist/core/register.js.map +1 -1
  116. package/dist/core/scaffold/capabilities.js +434 -0
  117. package/dist/core/scaffold/capabilities.js.map +1 -0
  118. package/dist/core/scaffold/generate.js +409 -0
  119. package/dist/core/scaffold/generate.js.map +1 -0
  120. package/dist/core/scaffold/infer.js +441 -0
  121. package/dist/core/scaffold/infer.js.map +1 -0
  122. package/dist/core/scaffold/overlay.js +290 -0
  123. package/dist/core/scaffold/overlay.js.map +1 -0
  124. package/dist/core/scaffold/readers/csv.js +146 -0
  125. package/dist/core/scaffold/readers/csv.js.map +1 -0
  126. package/dist/core/scaffold/readers/dataset.js +53 -0
  127. package/dist/core/scaffold/readers/dataset.js.map +1 -0
  128. package/dist/core/scaffold/readers/index.js +62 -0
  129. package/dist/core/scaffold/readers/index.js.map +1 -0
  130. package/dist/core/scaffold/readers/json.js +101 -0
  131. package/dist/core/scaffold/readers/json.js.map +1 -0
  132. package/dist/core/scaffold/readers/xlsx.js +81 -0
  133. package/dist/core/scaffold/readers/xlsx.js.map +1 -0
  134. package/dist/core/scaffold/suggestions.js +57 -0
  135. package/dist/core/scaffold/suggestions.js.map +1 -0
  136. package/dist/core/scaffold/templates.js +59 -0
  137. package/dist/core/scaffold/templates.js.map +1 -0
  138. package/dist/core/setup/audit.js +91 -0
  139. package/dist/core/setup/audit.js.map +1 -0
  140. package/dist/core/setup/capabilities.js +80 -0
  141. package/dist/core/setup/capabilities.js.map +1 -0
  142. package/dist/core/setup/context.js +118 -0
  143. package/dist/core/setup/context.js.map +1 -0
  144. package/dist/core/setup/rules/cell-data-type.js +40 -0
  145. package/dist/core/setup/rules/cell-data-type.js.map +1 -0
  146. package/dist/core/setup/rules/coldef-ownership.js +67 -0
  147. package/dist/core/setup/rules/coldef-ownership.js.map +1 -0
  148. package/dist/core/setup/rules/css-import.js +34 -0
  149. package/dist/core/setup/rules/css-import.js.map +1 -0
  150. package/dist/core/setup/rules/direct-grid.js +42 -0
  151. package/dist/core/setup/rules/direct-grid.js.map +1 -0
  152. package/dist/core/setup/rules/index.js +53 -0
  153. package/dist/core/setup/rules/index.js.map +1 -0
  154. package/dist/core/setup/rules/licence-literal.js +23 -0
  155. package/dist/core/setup/rules/licence-literal.js.map +1 -0
  156. package/dist/core/setup/rules/modules.js +86 -0
  157. package/dist/core/setup/rules/modules.js.map +1 -0
  158. package/dist/core/setup/rules/react-stable-refs.js +20 -0
  159. package/dist/core/setup/rules/react-stable-refs.js.map +1 -0
  160. package/dist/core/setup/rules/ready-hook.js +33 -0
  161. package/dist/core/setup/rules/ready-hook.js.map +1 -0
  162. package/dist/core/setup/rules/required-options.js +43 -0
  163. package/dist/core/setup/rules/required-options.js.map +1 -0
  164. package/dist/core/setup/rules/rule.js +10 -0
  165. package/dist/core/setup/rules/rule.js.map +1 -0
  166. package/dist/core/setup/rules/version-skew.js +65 -0
  167. package/dist/core/setup/rules/version-skew.js.map +1 -0
  168. package/dist/core/state/capabilities.js +78 -0
  169. package/dist/core/state/capabilities.js.map +1 -0
  170. package/dist/core/state/check.js +216 -0
  171. package/dist/core/state/check.js.map +1 -0
  172. package/dist/core/state/columns.js +130 -0
  173. package/dist/core/state/columns.js.map +1 -0
  174. package/dist/core/state/did-you-mean.js +83 -0
  175. package/dist/core/state/did-you-mean.js.map +1 -0
  176. package/dist/core/state/expressions.js +170 -0
  177. package/dist/core/state/expressions.js.map +1 -0
  178. package/dist/core/state/known-names.js +96 -0
  179. package/dist/core/state/known-names.js.map +1 -0
  180. package/dist/core/state/rules/aql-legacy-shape.js +42 -0
  181. package/dist/core/state/rules/aql-legacy-shape.js.map +1 -0
  182. package/dist/core/state/rules/aql-missing.js +21 -0
  183. package/dist/core/state/rules/aql-missing.js.map +1 -0
  184. package/dist/core/state/rules/aql-syntax.js +77 -0
  185. package/dist/core/state/rules/aql-syntax.js.map +1 -0
  186. package/dist/core/state/rules/calculated-settings.js +23 -0
  187. package/dist/core/state/rules/calculated-settings.js.map +1 -0
  188. package/dist/core/state/rules/column-id-exists.js +29 -0
  189. package/dist/core/state/rules/column-id-exists.js.map +1 -0
  190. package/dist/core/state/rules/dashboard-module-names.js +31 -0
  191. package/dist/core/state/rules/dashboard-module-names.js.map +1 -0
  192. package/dist/core/state/rules/dashboard-toolbar-names.js +48 -0
  193. package/dist/core/state/rules/dashboard-toolbar-names.js.map +1 -0
  194. package/dist/core/state/rules/format-column-pivot-display-format.js +43 -0
  195. package/dist/core/state/rules/format-column-pivot-display-format.js.map +1 -0
  196. package/dist/core/state/rules/helpers.js +39 -0
  197. package/dist/core/state/rules/helpers.js.map +1 -0
  198. package/dist/core/state/rules/index.js +80 -0
  199. package/dist/core/state/rules/index.js.map +1 -0
  200. package/dist/core/state/rules/layout-column-refs.js +60 -0
  201. package/dist/core/state/rules/layout-column-refs.js.map +1 -0
  202. package/dist/core/state/rules/layout-current-exists.js +27 -0
  203. package/dist/core/state/rules/layout-current-exists.js.map +1 -0
  204. package/dist/core/state/rules/layout-non-empty.js +32 -0
  205. package/dist/core/state/rules/layout-non-empty.js.map +1 -0
  206. package/dist/core/state/rules/rule.js +2 -0
  207. package/dist/core/state/rules/rule.js.map +1 -0
  208. package/dist/core/state/rules/scope-column-refs.js +32 -0
  209. package/dist/core/state/rules/scope-column-refs.js.map +1 -0
  210. package/dist/core/state/rules/scope-shape.js +61 -0
  211. package/dist/core/state/rules/scope-shape.js.map +1 -0
  212. package/dist/core/state/rules/state-unique-name.js +40 -0
  213. package/dist/core/state/rules/state-unique-name.js.map +1 -0
  214. package/dist/core/state/rules/state-unknown-section.js +30 -0
  215. package/dist/core/state/rules/state-unknown-section.js.map +1 -0
  216. package/dist/core/state/rules/type-discriminator.js +70 -0
  217. package/dist/core/state/rules/type-discriminator.js.map +1 -0
  218. package/dist/core/state/type-check.js +349 -83
  219. package/dist/core/state/type-check.js.map +1 -1
  220. package/dist/mcp/index.js +104 -16
  221. package/dist/mcp/index.js.map +1 -1
  222. package/dist/mcp/server.js +110 -0
  223. package/dist/mcp/server.js.map +1 -0
  224. package/dist/skills/adaptable-debug/SKILL.md +145 -0
  225. package/dist/skills/adaptable-debug/VERSION.md +1 -0
  226. package/dist/skills/adaptable-debug/references/_shared/agents-snippet.md +3 -0
  227. package/dist/skills/adaptable-debug/references/_shared/capabilities.md +35 -0
  228. package/dist/skills/adaptable-debug/references/_shared/conversation.md +20 -0
  229. package/dist/skills/adaptable-debug/references/_shared/docs-protocol.md +36 -0
  230. package/dist/skills/adaptable-debug/references/_shared/grounding.md +54 -0
  231. package/dist/skills/adaptable-debug/references/_shared/guards.md +20 -0
  232. package/dist/skills/adaptable-debug/references/_shared/validation-loop.md +42 -0
  233. package/dist/skills/adaptable-debug/references/devtools-api.md +36 -0
  234. package/dist/skills/adaptable-debug/references/feedback-template.md +36 -0
  235. package/dist/skills/adaptable-debug/references/symptoms.md +37 -0
  236. package/dist/skills/adaptable-debug/references/ticket-template.md +50 -0
  237. package/dist/skills/adaptable-dev/SKILL.md +97 -0
  238. package/dist/skills/adaptable-dev/VERSION.md +1 -0
  239. package/dist/skills/adaptable-dev/references/_shared/agents-snippet.md +3 -0
  240. package/dist/skills/adaptable-dev/references/_shared/capabilities.md +35 -0
  241. package/dist/skills/adaptable-dev/references/_shared/conversation.md +20 -0
  242. package/dist/skills/adaptable-dev/references/_shared/docs-protocol.md +36 -0
  243. package/dist/skills/adaptable-dev/references/_shared/grounding.md +54 -0
  244. package/dist/skills/adaptable-dev/references/_shared/guards.md +20 -0
  245. package/dist/skills/adaptable-dev/references/_shared/validation-loop.md +42 -0
  246. package/dist/skills/adaptable-dev/references/recommendations.md +93 -0
  247. package/dist/skills/adaptable-setup/SKILL.md +158 -0
  248. package/dist/skills/adaptable-setup/VERSION.md +1 -0
  249. package/dist/skills/adaptable-setup/references/_shared/agents-snippet.md +3 -0
  250. package/dist/skills/adaptable-setup/references/_shared/capabilities.md +35 -0
  251. package/dist/skills/adaptable-setup/references/_shared/conversation.md +20 -0
  252. package/dist/skills/adaptable-setup/references/_shared/docs-protocol.md +36 -0
  253. package/dist/skills/adaptable-setup/references/_shared/grounding.md +54 -0
  254. package/dist/skills/adaptable-setup/references/_shared/guards.md +20 -0
  255. package/dist/skills/adaptable-setup/references/_shared/validation-loop.md +42 -0
  256. package/dist/skills/adaptable-setup/references/paths.md +45 -0
  257. package/dist/skills/adaptable-upgrade/SKILL.md +269 -0
  258. package/dist/skills/adaptable-upgrade/VERSION.md +1 -0
  259. package/dist/skills/adaptable-upgrade/references/_shared/agents-snippet.md +3 -0
  260. package/dist/skills/adaptable-upgrade/references/_shared/capabilities.md +35 -0
  261. package/dist/skills/adaptable-upgrade/references/_shared/conversation.md +20 -0
  262. package/dist/skills/adaptable-upgrade/references/_shared/docs-protocol.md +36 -0
  263. package/dist/skills/adaptable-upgrade/references/_shared/grounding.md +54 -0
  264. package/dist/skills/adaptable-upgrade/references/_shared/guards.md +20 -0
  265. package/dist/skills/adaptable-upgrade/references/_shared/validation-loop.md +42 -0
  266. package/dist/skills/adaptable-upgrade/references/apply-order.md +171 -0
  267. package/dist/skills/adaptable-upgrade/references/plan-preamble.md +151 -0
  268. package/dist/skills/adaptable-upgrade/scripts/adaptable.mjs +24 -0
  269. package/package.json +11 -5
  270. package/dist/core/state/rules.js +0 -417
  271. package/dist/core/state/rules.js.map +0 -1
@@ -0,0 +1,441 @@
1
+ /**
2
+ * Column inference for `scaffold` (plan §8.11 Inference). From a `Dataset` (any reader)
3
+ * it produces, per column: `cellDataType` (text, number, boolean, date with the
4
+ * detected format, object), nullability, cardinality, enum-likeness (badge / grouping
5
+ * candidates), a uniqueness score (primary-key candidates) and the numeric range
6
+ * (format / percent-bar candidates); plus the primary-key choice — `--primary-key`
7
+ * when given, else the best unique candidate — and the reason.
8
+ *
9
+ * Cells arrive typed as the reader could make them: CSV cells are strings, so every
10
+ * string is classified (number, boolean, date formats, sentinel); JSON / XLSX cells
11
+ * keep their type and strings are still checked for dates. Pure in core: no I/O.
12
+ */
13
+ import { CapabilityError } from '../envelope.js';
14
+ export const ENUM_MAX_VALUES = 20;
15
+ export const SAMPLE_COUNT = 3;
16
+ /** Strings that mean "no value" in exported data; honoured only in otherwise typed columns */
17
+ export const NULL_SENTINELS = new Set(['n/a', 'na', 'null', 'nan', 'none', 'nil', 'undefined', '-', '--', '#n/a', '#null!']);
18
+ const NUMBER = /^[+-]?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?(?:[eE][+-]?\d+)?$/;
19
+ const BOOLEAN = /^(?:true|false)$/i;
20
+ const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
21
+ const ISO_DATE_TIME = /^(\d{4})-(\d{2})-(\d{2})([T ])\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?(Z|[+-]\d{2}:?\d{2})?$/;
22
+ const SLASH_YMD = /^(\d{4})\/(\d{2})\/(\d{2})$/;
23
+ const NUMERIC_DMY = /^(\d{1,2})([/.-])(\d{1,2})\2(\d{4})$/;
24
+ const DAY_MONTH_NAME = /^(\d{1,2})\s+([A-Za-z]{3,9})\.?,?\s+(\d{4})$/;
25
+ const MONTH_NAME_DAY = /^([A-Za-z]{3,9})\.?\s+(\d{1,2}),?\s+(\d{4})$/;
26
+ const MONTHS = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
27
+ function monthValid(name) {
28
+ return MONTHS.includes(name.slice(0, 3).toLowerCase());
29
+ }
30
+ function inRange(value, min, max) {
31
+ return value >= min && value <= max;
32
+ }
33
+ /** Classifies one string cell */
34
+ export function classifyString(raw) {
35
+ const text = raw.trim();
36
+ if (text === '') {
37
+ return { kind: 'null' };
38
+ }
39
+ if (NUMBER.test(text)) {
40
+ return { kind: 'number', numeric: Number(text.replace(/,/g, '')) };
41
+ }
42
+ if (BOOLEAN.test(text)) {
43
+ return { kind: 'boolean' };
44
+ }
45
+ if (NULL_SENTINELS.has(text.toLowerCase())) {
46
+ return { kind: 'sentinel' };
47
+ }
48
+ if (ISO_DATE.test(text)) {
49
+ const [, month, day] = text.match(/^\d{4}-(\d{2})-(\d{2})$/).map(Number);
50
+ return inRange(month, 1, 12) && inRange(day, 1, 31) ? { kind: 'date', format: 'YYYY-MM-DD' } : { kind: 'text' };
51
+ }
52
+ const dateTime = text.match(ISO_DATE_TIME);
53
+ if (dateTime) {
54
+ const [, , month, day, separator, zone] = dateTime;
55
+ if (inRange(Number(month), 1, 12) && inRange(Number(day), 1, 31)) {
56
+ return { kind: 'date', format: separator === 'T' || zone ? 'ISO 8601' : 'YYYY-MM-DD HH:mm:ss' };
57
+ }
58
+ return { kind: 'text' };
59
+ }
60
+ const ymd = text.match(SLASH_YMD);
61
+ if (ymd) {
62
+ return inRange(Number(ymd[2]), 1, 12) && inRange(Number(ymd[3]), 1, 31) ? { kind: 'date', format: 'YYYY/MM/DD' } : { kind: 'text' };
63
+ }
64
+ const dmy = text.match(NUMERIC_DMY);
65
+ if (dmy) {
66
+ const a = Number(dmy[1]);
67
+ const b = Number(dmy[3]);
68
+ // one of the two must be a month; both within a day's range
69
+ if (inRange(a, 1, 31) && inRange(b, 1, 31) && (a <= 12 || b <= 12)) {
70
+ return { kind: 'date', format: 'dmy?', dm: { a, b, separator: dmy[2] } };
71
+ }
72
+ return { kind: 'text' };
73
+ }
74
+ const dayName = text.match(DAY_MONTH_NAME);
75
+ if (dayName && monthValid(dayName[2]) && inRange(Number(dayName[1]), 1, 31)) {
76
+ return { kind: 'date', format: 'D MMM YYYY' };
77
+ }
78
+ const nameDay = text.match(MONTH_NAME_DAY);
79
+ if (nameDay && monthValid(nameDay[1]) && inRange(Number(nameDay[2]), 1, 31)) {
80
+ return { kind: 'date', format: 'MMM D, YYYY' };
81
+ }
82
+ return { kind: 'text' };
83
+ }
84
+ /** Classifies any cell */
85
+ export function classify(value) {
86
+ if (value === null || value === undefined) {
87
+ return { kind: 'null' };
88
+ }
89
+ if (typeof value === 'number') {
90
+ return Number.isFinite(value) ? { kind: 'number', numeric: value } : { kind: 'null' };
91
+ }
92
+ if (typeof value === 'boolean') {
93
+ return { kind: 'boolean' };
94
+ }
95
+ if (value instanceof Date) {
96
+ return Number.isNaN(value.getTime()) ? { kind: 'null' } : { kind: 'date', format: 'native' };
97
+ }
98
+ if (typeof value === 'string') {
99
+ return classifyString(value);
100
+ }
101
+ if (typeof value === 'bigint') {
102
+ return { kind: 'number', numeric: Number(value) };
103
+ }
104
+ return { kind: 'object' };
105
+ }
106
+ /** `github_stars` → `Github Stars`; `createdAt` → `Created At`; `tradeID` → `Trade ID`; short acronyms like `PnL` stay */
107
+ export function humaniseHeader(field) {
108
+ const words = field
109
+ .split(/[\s_\-.]+/)
110
+ .filter((word) => word.length > 0)
111
+ .flatMap((word) => word.length > 3
112
+ ? word
113
+ .replace(/([a-z\d])([A-Z])/g, '$1 $2')
114
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
115
+ .split(' ')
116
+ : [word]);
117
+ return words.map((word) => (word === word.toUpperCase() ? word : word[0].toUpperCase() + word.slice(1))).join(' ');
118
+ }
119
+ const SAFE_ID = /^[A-Za-z_$][\w$]*$/;
120
+ /** `colId`s: the field when it is an identifier, else sanitised; unique across the table */
121
+ export function colIdsFor(fields) {
122
+ const used = new Set();
123
+ return fields.map((field) => {
124
+ let id = SAFE_ID.test(field) ? field : field.replace(/[^\w$]+/g, '_').replace(/^_+|_+$/g, '');
125
+ if (id === '' || /^\d/.test(id)) {
126
+ id = `col_${id}`;
127
+ }
128
+ let unique = id;
129
+ let n = 2;
130
+ while (used.has(unique)) {
131
+ unique = `${id}_${n}`;
132
+ n += 1;
133
+ }
134
+ used.add(unique);
135
+ return unique;
136
+ });
137
+ }
138
+ function keyOf(value) {
139
+ if (value instanceof Date) {
140
+ return `d:${value.toISOString()}`;
141
+ }
142
+ if (typeof value === 'object' && value !== null) {
143
+ return `o:${JSON.stringify(value)}`;
144
+ }
145
+ return `${typeof value}:${String(value).trim()}`;
146
+ }
147
+ function jsonFriendly(value) {
148
+ if (value instanceof Date) {
149
+ return value.toISOString();
150
+ }
151
+ if (typeof value === 'bigint') {
152
+ return Number(value);
153
+ }
154
+ return value;
155
+ }
156
+ function mostFrequent(counts) {
157
+ let best;
158
+ let bestCount = -1;
159
+ for (const [key, count] of counts) {
160
+ if (count > bestCount) {
161
+ best = key;
162
+ bestCount = count;
163
+ }
164
+ }
165
+ return best;
166
+ }
167
+ const KINDS = ['text', 'number', 'boolean', 'date', 'object'];
168
+ function inferColumn(field, colId, rows) {
169
+ const notes = [];
170
+ const kindCounts = new Map();
171
+ const formatCounts = new Map();
172
+ const distinct = new Map();
173
+ const dms = [];
174
+ let nullCount = 0;
175
+ let sentinelCount = 0;
176
+ let min = Infinity;
177
+ let max = -Infinity;
178
+ let integer = true;
179
+ let sentinelExample;
180
+ for (const row of rows) {
181
+ const value = row[field];
182
+ const c = classify(value);
183
+ if (c.kind === 'null') {
184
+ nullCount += 1;
185
+ continue;
186
+ }
187
+ if (c.kind === 'sentinel') {
188
+ sentinelCount += 1;
189
+ sentinelExample ??= String(value).trim();
190
+ }
191
+ else {
192
+ kindCounts.set(c.kind, (kindCounts.get(c.kind) ?? 0) + 1);
193
+ }
194
+ if (c.kind === 'number' && c.numeric !== undefined) {
195
+ min = Math.min(min, c.numeric);
196
+ max = Math.max(max, c.numeric);
197
+ if (!Number.isInteger(c.numeric)) {
198
+ integer = false;
199
+ }
200
+ }
201
+ if (c.kind === 'date' && c.format) {
202
+ formatCounts.set(c.format, (formatCounts.get(c.format) ?? 0) + 1);
203
+ if (c.dm) {
204
+ dms.push(c.dm);
205
+ }
206
+ }
207
+ const key = keyOf(value);
208
+ const entry = distinct.get(key);
209
+ if (entry) {
210
+ entry.count += 1;
211
+ }
212
+ else {
213
+ distinct.set(key, { value, count: 1 });
214
+ }
215
+ }
216
+ const typedKinds = KINDS.filter((kind) => (kindCounts.get(kind) ?? 0) > 0);
217
+ let cellDataType;
218
+ let mixed;
219
+ let sentinelsAsNull;
220
+ if (typedKinds.length === 0) {
221
+ // only nulls and/or sentinels
222
+ cellDataType = 'text';
223
+ if (sentinelCount > 0) {
224
+ kindCounts.set('text', sentinelCount);
225
+ }
226
+ else {
227
+ notes.push(`Column "${field}" is empty in every row; typed as text.`);
228
+ }
229
+ }
230
+ else if (typedKinds.length === 1) {
231
+ cellDataType = typedKinds[0];
232
+ if (sentinelCount > 0) {
233
+ if (cellDataType === 'text') {
234
+ kindCounts.set('text', (kindCounts.get('text') ?? 0) + sentinelCount);
235
+ }
236
+ else {
237
+ sentinelsAsNull = sentinelCount;
238
+ nullCount += sentinelCount;
239
+ for (const [key, entry] of distinct) {
240
+ if (classify(entry.value).kind === 'sentinel') {
241
+ distinct.delete(key);
242
+ }
243
+ }
244
+ notes.push(`Column "${field}": ${sentinelCount} cell(s) like "${sentinelExample}" treated as empty; the rest is ${cellDataType}.`);
245
+ }
246
+ }
247
+ }
248
+ else {
249
+ mixed = typedKinds;
250
+ cellDataType = typedKinds.includes('object') ? 'object' : 'text';
251
+ if (sentinelCount > 0) {
252
+ kindCounts.set('text', (kindCounts.get('text') ?? 0) + sentinelCount);
253
+ }
254
+ notes.push(`Column "${field}" mixes ${typedKinds.join(' and ')} values (${typedKinds.map((kind) => `${kindCounts.get(kind)} ${kind}`).join(', ')}); typed as ${cellDataType}.`);
255
+ }
256
+ const nonNull = rows.length - nullCount;
257
+ const cardinality = distinct.size;
258
+ const uniqueness = nonNull > 0 ? cardinality / nonNull : 0;
259
+ let dateFormat;
260
+ let dateFormatAmbiguous;
261
+ if (cellDataType === 'date') {
262
+ if (formatCounts.size > 1) {
263
+ notes.push(`Column "${field}" uses more than one date format (${[...formatCounts.keys()].map((f) => (f === 'dmy?' ? 'DD/MM/YYYY-like' : f)).join(', ')}); the most frequent is reported.`);
264
+ }
265
+ const chosen = mostFrequent(formatCounts) ?? 'native';
266
+ if (chosen === 'dmy?') {
267
+ const separator = dms[0]?.separator ?? '/';
268
+ const dayFirst = dms.some((dm) => dm.a > 12);
269
+ const monthFirst = dms.some((dm) => dm.b > 12);
270
+ if (dayFirst && monthFirst) {
271
+ notes.push(`Column "${field}": some values only parse as DD${separator}MM${separator}YYYY and others only as MM${separator}DD${separator}YYYY; DD${separator}MM${separator}YYYY assumed.`);
272
+ dateFormat = `DD${separator}MM${separator}YYYY`;
273
+ dateFormatAmbiguous = true;
274
+ }
275
+ else if (monthFirst) {
276
+ dateFormat = `MM${separator}DD${separator}YYYY`;
277
+ }
278
+ else if (dayFirst) {
279
+ dateFormat = `DD${separator}MM${separator}YYYY`;
280
+ }
281
+ else {
282
+ dateFormat = `DD${separator}MM${separator}YYYY`;
283
+ dateFormatAmbiguous = true;
284
+ notes.push(`Column "${field}": every value has day and month ≤ 12, so DD${separator}MM${separator}YYYY and MM${separator}DD${separator}YYYY are both possible; DD${separator}MM${separator}YYYY assumed.`);
285
+ }
286
+ }
287
+ else {
288
+ dateFormat = chosen;
289
+ }
290
+ }
291
+ const enumLike = nonNull > 0 &&
292
+ (cellDataType === 'boolean' || (cellDataType === 'text' && cardinality <= ENUM_MAX_VALUES && cardinality < nonNull && uniqueness <= 0.5));
293
+ const values = enumLike
294
+ ? [...distinct.values()]
295
+ .sort((x, y) => y.count - x.count || String(x.value).localeCompare(String(y.value)))
296
+ .map((entry) => String(entry.value).trim())
297
+ : undefined;
298
+ const samples = [...distinct.values()].slice(0, SAMPLE_COUNT).map((entry) => jsonFriendly(entry.value));
299
+ const primaryKeyCandidate = rows.length > 0 && nullCount === 0 && uniqueness === 1 && (cellDataType === 'text' || cellDataType === 'number');
300
+ const schema = {
301
+ field,
302
+ colId,
303
+ headerName: humaniseHeader(field),
304
+ cellDataType,
305
+ ...(dateFormat ? { dateFormat } : {}),
306
+ ...(dateFormatAmbiguous ? { dateFormatAmbiguous } : {}),
307
+ nullable: nullCount > 0,
308
+ nullCount,
309
+ cardinality,
310
+ uniqueness: Number(uniqueness.toFixed(4)),
311
+ enumLike,
312
+ ...(values ? { values } : {}),
313
+ ...(cellDataType === 'number' && nonNull > 0 ? { range: { min, max, integer } } : {}),
314
+ ...(mixed ? { mixed } : {}),
315
+ ...(sentinelsAsNull ? { sentinelsAsNull } : {}),
316
+ samples,
317
+ primaryKeyCandidate,
318
+ };
319
+ return { schema, notes };
320
+ }
321
+ /** How much a column's name says "key": 3 exact id-ish, 2 ends with id/key, 1 contains id, 0 otherwise */
322
+ export function keyNameScore(field) {
323
+ if (/^(?:_?id|uid|uuid|guid|key|pk|rowid|row_id)$/i.test(field)) {
324
+ return 3;
325
+ }
326
+ if (/(?:^|[_\- ])(?:id|key|uuid|guid|code|ref)$/i.test(field) || /[a-z\d](?:Id|ID|Key|Uuid|UUID|Guid|GUID)$/.test(field)) {
327
+ return 2;
328
+ }
329
+ if (/id|key/i.test(field)) {
330
+ return 1;
331
+ }
332
+ return 0;
333
+ }
334
+ function rankCandidates(columns) {
335
+ return columns
336
+ .map((column, position) => ({ column, position }))
337
+ .filter(({ column }) => column.primaryKeyCandidate)
338
+ .sort((x, y) => {
339
+ const byName = keyNameScore(y.column.field) - keyNameScore(x.column.field);
340
+ if (byName !== 0) {
341
+ return byName;
342
+ }
343
+ const typeRank = (column) => (column.cellDataType === 'number' ? (column.range?.integer ? 0 : 2) : 1);
344
+ const byType = typeRank(x.column) - typeRank(y.column);
345
+ return byType !== 0 ? byType : x.position - y.position;
346
+ })
347
+ .map(({ column }) => column.field);
348
+ }
349
+ /** Infers the schema of a dataset; throws `USAGE` when `primaryKey` names no column */
350
+ export function inferSchema(dataset, options = {}) {
351
+ const colIds = colIdsFor(dataset.columns);
352
+ const notes = [...dataset.notes];
353
+ const warnings = [];
354
+ const columns = dataset.columns.map((field, index) => {
355
+ const { schema, notes: columnNotes } = inferColumn(field, colIds[index], dataset.rows);
356
+ notes.push(...columnNotes);
357
+ return schema;
358
+ });
359
+ const dottedFields = dataset.columns.filter((field) => field.includes('.'));
360
+ if (dottedFields.length > 0) {
361
+ notes.push(`Field name(s) with a dot (${dottedFields.join(', ')}): AG Grid reads a dotted field as a nested path unless gridOptions.suppressFieldDotNotation is true.`);
362
+ }
363
+ const candidates = rankCandidates(columns);
364
+ let primaryKey;
365
+ if (options.primaryKey !== undefined) {
366
+ const column = columns.find((c) => c.field === options.primaryKey || c.colId === options.primaryKey);
367
+ if (!column) {
368
+ throw new CapabilityError('USAGE', `--primary-key ${options.primaryKey} is not a column of the data.`, `Columns: ${dataset.columns.join(', ')}.`);
369
+ }
370
+ const problems = [];
371
+ if (column.nullCount > 0) {
372
+ problems.push(`${column.nullCount} empty value(s)`);
373
+ }
374
+ if (column.uniqueness < 1 && column.cardinality < dataset.rows.length - column.nullCount) {
375
+ problems.push(`${dataset.rows.length - column.nullCount - column.cardinality} duplicate(s)`);
376
+ }
377
+ if (problems.length > 0) {
378
+ warnings.push(`--primary-key ${column.field} has ${problems.join(' and ')}; AdapTable needs the primaryKey to be unique and present on every row.`);
379
+ }
380
+ primaryKey = {
381
+ field: column.field,
382
+ source: 'explicit',
383
+ reason: problems.length > 0 ? `given with --primary-key (${problems.join(', ')})` : 'given with --primary-key',
384
+ candidates,
385
+ };
386
+ }
387
+ else if (candidates.length > 0) {
388
+ const chosen = columns.find((c) => c.field === candidates[0]);
389
+ const nameScore = keyNameScore(chosen.field);
390
+ primaryKey = {
391
+ field: chosen.field,
392
+ source: 'inferred',
393
+ reason: nameScore > 0
394
+ ? `unique and never empty, and the name says key${candidates.length > 1 ? ` (also unique: ${candidates.slice(1).join(', ')})` : ''}`
395
+ : `the ${candidates.length > 1 ? 'first ' : ''}unique, never-empty ${chosen.cellDataType} column${candidates.length > 1 ? ` (also unique: ${candidates.slice(1).join(', ')})` : ''}; no column name says key`,
396
+ candidates,
397
+ };
398
+ }
399
+ else {
400
+ primaryKey = {
401
+ source: 'none',
402
+ reason: dataset.rows.length === 0 ? 'no rows to infer from' : 'no column is unique and never empty; pass --primary-key, or the scaffold adds a generated id',
403
+ candidates: [],
404
+ };
405
+ }
406
+ return { rowCount: dataset.rows.length, columns, primaryKey, dottedFields, notes, warnings };
407
+ }
408
+ /**
409
+ * Types the rows per the inferred schema, so CSV data (all strings) becomes what a JSON
410
+ * export of the same table would be: number and boolean columns are converted, sentinel
411
+ * cells in typed columns become `null`, `Date` cells become ISO strings, everything else
412
+ * (text, date strings, objects) is left as is. Used when the scaffold writes `data.json`.
413
+ */
414
+ export function coerceRows(dataset, schema) {
415
+ const byField = new Map(schema.columns.map((column) => [column.field, column]));
416
+ return dataset.rows.map((row) => {
417
+ const out = {};
418
+ for (const field of dataset.columns) {
419
+ const column = byField.get(field);
420
+ const value = row[field];
421
+ const c = classify(value);
422
+ if (c.kind === 'null') {
423
+ out[field] = null;
424
+ }
425
+ else if (c.kind === 'sentinel') {
426
+ out[field] = column && column.cellDataType !== 'text' ? null : value;
427
+ }
428
+ else if (column?.cellDataType === 'number' && c.kind === 'number') {
429
+ out[field] = c.numeric;
430
+ }
431
+ else if (column?.cellDataType === 'boolean' && c.kind === 'boolean') {
432
+ out[field] = typeof value === 'boolean' ? value : /^true$/i.test(String(value).trim());
433
+ }
434
+ else {
435
+ out[field] = jsonFriendly(value);
436
+ }
437
+ }
438
+ return out;
439
+ });
440
+ }
441
+ //# sourceMappingURL=infer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infer.js","sourceRoot":"","sources":["../../../src/core/scaffold/infer.ts"],"names":[],"mappings":"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"}