@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,83 @@
1
+ /**
2
+ * Did-you-mean for unknown keys (plan §8.4 layer 1, §8.6 `options-shape`):
3
+ * Levenshtein over the keys the type accepts at that position, and the
4
+ * `state` / `options`-area change records of earlier transitions (an older
5
+ * spelling → the current name, with the release-note anchor and a pointer to
6
+ * `migrate state`). The records come from A3.3's `data/changes/*.json`; until
7
+ * then callers pass `[]`, and tests inject their own.
8
+ */
9
+ export function levenshtein(a, b) {
10
+ if (a === b) {
11
+ return 0;
12
+ }
13
+ const previous = Array.from({ length: b.length + 1 }, (_, i) => i);
14
+ for (let i = 1; i <= a.length; i++) {
15
+ let diagonal = previous[0];
16
+ previous[0] = i;
17
+ for (let j = 1; j <= b.length; j++) {
18
+ const temp = previous[j];
19
+ previous[j] = Math.min(previous[j] + 1, previous[j - 1] + 1, diagonal + (a[i - 1] === b[j - 1] ? 0 : 1));
20
+ diagonal = temp;
21
+ }
22
+ }
23
+ return previous[b.length];
24
+ }
25
+ /** `Layout.Layouts[0].Name` → `Layout.Layouts[].Name`: indices dropped so record paths can be compared */
26
+ export function generalisePath(path) {
27
+ return path.replace(/\[\d+\]/g, '[]');
28
+ }
29
+ /**
30
+ * Suggestions for an unknown `key` at `path` (the path of the key itself), given the
31
+ * keys its container accepts and the known renames. Ordered: exact case match,
32
+ * record renames, then the closest spellings (distance ≤ 2, or ≤ a third of the length).
33
+ */
34
+ export function suggestKeys(key, path, accepted, renames, area) {
35
+ const out = [];
36
+ const lower = key.toLowerCase();
37
+ for (const name of accepted) {
38
+ if (name !== key && name.toLowerCase() === lower) {
39
+ out.push({ kind: 'case', name });
40
+ }
41
+ }
42
+ const parent = generalisePath(path).replace(/\.?[^.]*$/, '');
43
+ for (const rename of renames) {
44
+ if (rename.area !== area || rename.from !== key) {
45
+ continue;
46
+ }
47
+ if (rename.path && generalisePath(rename.path) !== parent) {
48
+ continue;
49
+ }
50
+ if (!out.some((s) => s.name === rename.to)) {
51
+ out.push({ kind: 'renamed', name: rename.to, rename });
52
+ }
53
+ }
54
+ const limit = Math.max(2, Math.floor(key.length / 4));
55
+ const similar = accepted
56
+ .filter((name) => name !== key && !out.some((s) => s.name === name))
57
+ .map((name) => ({ name, distance: levenshtein(lower, name.toLowerCase()) }))
58
+ .filter((s) => s.distance <= limit)
59
+ .sort((a, b) => a.distance - b.distance || a.name.localeCompare(b.name))
60
+ .slice(0, 3);
61
+ for (const s of similar) {
62
+ out.push({ kind: 'similar', ...s });
63
+ }
64
+ return out;
65
+ }
66
+ /** The `fix` sentence for a set of suggestions */
67
+ export function describeSuggestions(key, suggestions) {
68
+ const first = suggestions[0];
69
+ if (!first) {
70
+ return undefined;
71
+ }
72
+ if (first.kind === 'case') {
73
+ return `Rename \`${key}\` to \`${first.name}\` (keys are case-sensitive).`;
74
+ }
75
+ if (first.kind === 'renamed') {
76
+ const { rename } = first;
77
+ const remedy = rename.area === 'state' ? 'run `migrate state` to convert the whole State, or rename it here' : 'rename it here';
78
+ return `\`${key}\` is the pre-${rename.transition.split('-')[1]} name of \`${rename.to}\` (release note #chg-${rename.anchor}); ${remedy}.`;
79
+ }
80
+ const names = suggestions.filter((s) => s.kind === 'similar').map((s) => `\`${s.name}\``);
81
+ return `Did you mean ${names.join(' or ')}?`;
82
+ }
83
+ //# sourceMappingURL=did-you-mean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"did-you-mean.js","sourceRoot":"","sources":["../../../src/core/state/did-you-mean.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ export const isObj = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
2
+ export const asArray = (value) => (Array.isArray(value) ? value : []);
3
+ const STRING_LITERAL = /'(?:[^']|'')*'|"(?:[^"\\]|\\.)*"/g;
4
+ /**
5
+ * True when the text calls an aggregation in its catalogue form: braces for
6
+ * `SUM{[price]}`, parens for `PERCENTAGE([price])`
7
+ */
8
+ export function containsAggregation(expression, aggregations) {
9
+ const text = expression.replace(STRING_LITERAL, "''");
10
+ for (const match of text.matchAll(/\b([A-Za-z_][A-Za-z0-9_]*)\s*([{(])/g)) {
11
+ const callForm = aggregations.get(match[1].toUpperCase());
12
+ if (callForm && callForm === (match[2] === '{' ? 'brace' : 'paren')) {
13
+ return true;
14
+ }
15
+ }
16
+ return false;
17
+ }
18
+ /** Keys of the pre-v24 expression wrapper object (`Rule: { BooleanExpression: '...' }`) */
19
+ export const LEGACY_WRAPPER_KEYS = [
20
+ 'BooleanExpression',
21
+ 'ScalarExpression',
22
+ 'AggregatedBooleanExpression',
23
+ 'AggregatedScalarExpression',
24
+ 'AggregatedExpression',
25
+ 'ObservableExpression',
26
+ 'Expression',
27
+ ];
28
+ export function eachInSection(state, module, list, fn) {
29
+ const sectionValue = state[module];
30
+ if (isObj(sectionValue)) {
31
+ asArray(sectionValue[list]).forEach((item, i) => {
32
+ if (isObj(item)) {
33
+ fn(item, `${module}.${list}[${i}]`);
34
+ }
35
+ });
36
+ }
37
+ }
38
+ export function expressionSlots(state) {
39
+ const slots = [];
40
+ const section = (key) => (isObj(state[key]) ? state[key] : {});
41
+ const each = (list, owner, fn) => asArray(list).forEach((item, i) => {
42
+ if (isObj(item)) {
43
+ fn(item, `${owner}[${i}]`);
44
+ }
45
+ });
46
+ each(section('NamedQuery').NamedQueries, 'NamedQuery.NamedQueries', (holder, owner) => {
47
+ const returnType = holder.ReturnType ?? 'boolean';
48
+ slots.push({
49
+ owner,
50
+ holder,
51
+ prop: 'Expression',
52
+ legacyProps: LEGACY_WRAPPER_KEYS.filter((k) => k !== 'Expression'),
53
+ required: true,
54
+ module: 'NamedQuery',
55
+ kind: returnType === 'boolean' ? 'boolean' : 'scalar',
56
+ });
57
+ });
58
+ each(section('CalculatedColumn').CalculatedColumns, 'CalculatedColumn.CalculatedColumns', (holder, owner) => {
59
+ slots.push({
60
+ owner,
61
+ holder,
62
+ prop: 'Expression',
63
+ legacyProps: ['Query'],
64
+ required: true,
65
+ module: 'CalculatedColumn',
66
+ kind: 'scalar',
67
+ aggregatedKind: 'aggregatedScalar',
68
+ });
69
+ });
70
+ each(section('Alert').AlertDefinitions, 'Alert.AlertDefinitions', (holder, owner) => {
71
+ slots.push({ owner, holder, prop: 'Rule', module: 'Alert', kind: 'boolean', aggregatedKind: 'aggregatedBoolean' });
72
+ });
73
+ const ruleSections = [
74
+ ['FlashingCell', 'FlashingCellDefinitions'],
75
+ ['FormatColumn', 'FormatColumns'],
76
+ ['PlusMinus', 'PlusMinusNudges'],
77
+ ];
78
+ for (const [module, list] of ruleSections) {
79
+ each(section(module)[list], `${module}.${list}`, (holder, owner) => {
80
+ slots.push({ owner, holder, prop: 'Rule', module, kind: 'boolean' });
81
+ });
82
+ }
83
+ each(section('Export').Reports, 'Export.Reports', (holder, owner) => {
84
+ slots.push({ owner, holder, prop: 'Expression', legacyProps: ['Query'], module: 'Export', kind: 'boolean' });
85
+ });
86
+ each(section('StyledColumn').StyledColumns, 'StyledColumn.StyledColumns', (styled, styledPath) => {
87
+ if (isObj(styled.BadgeStyle)) {
88
+ each(styled.BadgeStyle.Badges, `${styledPath}.BadgeStyle.Badges`, (holder, owner) => {
89
+ slots.push({ owner, holder, prop: 'Rule', module: 'StyledColumn', kind: 'boolean' });
90
+ });
91
+ }
92
+ });
93
+ each(section('Layout').Layouts, 'Layout.Layouts', (layout, layoutPath) => {
94
+ if (isObj(layout.GridFilter)) {
95
+ slots.push({
96
+ owner: `${layoutPath}.GridFilter`,
97
+ holder: layout.GridFilter,
98
+ prop: 'Expression',
99
+ module: 'GridFilter',
100
+ kind: 'boolean',
101
+ });
102
+ }
103
+ each(layout.ColumnFilters, `${layoutPath}.ColumnFilters`, (holder, owner) => {
104
+ slots.push({ owner, holder, prop: 'Expression', module: 'ColumnFilter', kind: 'boolean' });
105
+ });
106
+ });
107
+ return slots;
108
+ }
109
+ const legacyWrapperText = (value) => LEGACY_WRAPPER_KEYS.map((k) => value[k]).find((v) => typeof v === 'string');
110
+ /** The expression a slot holds, in v24 form or a pre-v24 shape */
111
+ export function readSlot(slot) {
112
+ for (const prop of [slot.prop, ...(slot.legacyProps ?? [])]) {
113
+ const value = slot.holder[prop];
114
+ if (value === undefined) {
115
+ continue;
116
+ }
117
+ const path = `${slot.owner}.${prop}`;
118
+ if (typeof value === 'string') {
119
+ return { path, text: value, legacy: prop !== slot.prop };
120
+ }
121
+ return { path, text: isObj(value) ? legacyWrapperText(value) : undefined, legacy: true };
122
+ }
123
+ return undefined;
124
+ }
125
+ /** The pre-24 row-event alert rule (`ROW_ADDED(...)` / `ROW_REMOVED(...)`, paren form), now a Row Change Alert */
126
+ export const ROW_EVENT_RULE = /^\s*ROW_(ADDED|REMOVED)\s*\(/;
127
+ /**
128
+ * Every AdapTableQL string in state, with its Module and the kind that Module evaluates
129
+ * it as. With `skipLegacy`, expressions in a pre-24 shape (wrapper object, old property,
130
+ * row-event rule) are left out — `aql/legacy-shape` reports those.
131
+ */
132
+ export function collectExpressions(state, aggregations, options = {}) {
133
+ const found = [];
134
+ for (const slot of expressionSlots(state)) {
135
+ const read = readSlot(slot);
136
+ if (!read?.text?.trim()) {
137
+ continue;
138
+ }
139
+ if (options.skipLegacy && (read.legacy || (slot.module === 'Alert' && ROW_EVENT_RULE.test(read.text)))) {
140
+ continue;
141
+ }
142
+ found.push({
143
+ path: read.path,
144
+ expression: read.text,
145
+ module: slot.module,
146
+ kind: slot.aggregatedKind && containsAggregation(read.text, aggregations) ? slot.aggregatedKind : slot.kind,
147
+ });
148
+ }
149
+ return found;
150
+ }
151
+ /** Columns the state itself defines (Calculated and FreeText Columns), with their data types */
152
+ export function getStateColumnIds(state) {
153
+ const columns = [];
154
+ for (const [module, list, settings] of [
155
+ ['CalculatedColumn', 'CalculatedColumns', 'CalculatedColumnSettings'],
156
+ ['FreeTextColumn', 'FreeTextColumns', 'FreeTextColumnSettings'],
157
+ ]) {
158
+ const sectionValue = state[module];
159
+ if (isObj(sectionValue)) {
160
+ for (const c of asArray(sectionValue[list])) {
161
+ if (isObj(c) && typeof c.ColumnId === 'string') {
162
+ const dataType = isObj(c[settings]) ? c[settings].DataType : undefined;
163
+ columns.push([c.ColumnId, typeof dataType === 'string' ? dataType : undefined]);
164
+ }
165
+ }
166
+ }
167
+ }
168
+ return columns;
169
+ }
170
+ //# sourceMappingURL=expressions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../../src/core/state/expressions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Name lists the rules fall back to when the checked major's types do not
3
+ * expose them (the capability reads `InitialState`'s keys, `AdaptableDashboardToolbar`
4
+ * and `AdaptableModuleButton` from the types program first — plan §7.3, the types
5
+ * package describes the checked version). These are the v24 values
6
+ * (`packages/adaptable/src/AdaptableState/Common/Types.ts`).
7
+ */
8
+ export const INITIAL_STATE_KEYS_V24 = [
9
+ 'Alert',
10
+ 'Application',
11
+ 'CalculatedColumn',
12
+ 'Charting',
13
+ 'CustomSort',
14
+ 'Dashboard',
15
+ 'Export',
16
+ 'FlashingCell',
17
+ 'FormatColumn',
18
+ 'FreeTextColumn',
19
+ 'Layout',
20
+ 'NamedQuery',
21
+ 'Note',
22
+ 'PlusMinus',
23
+ 'QuickSearch',
24
+ 'Shortcut',
25
+ 'StatusBar',
26
+ 'StyledColumn',
27
+ 'Theme',
28
+ 'ToolPanel',
29
+ 'UserInterface',
30
+ ];
31
+ /**
32
+ * `AdaptablePersistentState` — what `getPersistentState()` / `stateOptions.persistState`
33
+ * carry: every Initial State section plus the ones only the runtime writes.
34
+ */
35
+ export const PERSISTENT_STATE_KEYS_V24 = [...INITIAL_STATE_KEYS_V24, 'TeamSharing'];
36
+ /** `AdaptableDashboardToolbar` */
37
+ export const DASHBOARD_TOOLBARS_V24 = [
38
+ 'Alert',
39
+ 'BulkUpdate',
40
+ 'CellSummary',
41
+ 'Charting',
42
+ 'DataChangeHistory',
43
+ 'DataSet',
44
+ 'Export',
45
+ 'ColumnFilter',
46
+ 'IPushPull',
47
+ 'Layout',
48
+ 'GridFilter',
49
+ 'Note',
50
+ 'OpenFin',
51
+ 'QuickSearch',
52
+ 'SmartEdit',
53
+ 'StateManagement',
54
+ 'SystemStatus',
55
+ 'Theme',
56
+ ];
57
+ /** `AdaptableModuleButton` (what `Dashboard.ModuleButtons` and `ToolPanel.ModuleButtons` accept) */
58
+ export const MODULE_BUTTONS_V24 = [
59
+ 'Alert',
60
+ 'BulkUpdate',
61
+ 'CalculatedColumn',
62
+ 'CellSummary',
63
+ 'Comment',
64
+ 'CustomSort',
65
+ 'Dashboard',
66
+ 'DataChangeHistory',
67
+ 'DataImport',
68
+ 'DataSet',
69
+ 'Export',
70
+ 'ColumnFilter',
71
+ 'GridFilter',
72
+ 'NamedQuery',
73
+ 'FlashingCell',
74
+ 'FormatColumn',
75
+ 'FreeTextColumn',
76
+ 'GridInfo',
77
+ 'Layout',
78
+ 'Note',
79
+ 'OpenFin',
80
+ 'PlusMinus',
81
+ 'QuickSearch',
82
+ 'SettingsPanel',
83
+ 'Shortcut',
84
+ 'SmartEdit',
85
+ 'StyledColumn',
86
+ 'StateManagement',
87
+ 'StatusBar',
88
+ 'SystemStatus',
89
+ 'TeamSharing',
90
+ 'Theme',
91
+ ];
92
+ export const GROUP_COLUMN_ID = 'ag-Grid-AutoColumn';
93
+ export const SELECTION_COLUMN_ID = 'ag-Grid-SelectionColumn';
94
+ /** AG Grid's generated columns: auto-group, selection, and pivot result columns (`pivot_<col>_<value>_<id>`) */
95
+ export const isSpecialColumn = (id) => id === GROUP_COLUMN_ID || id === SELECTION_COLUMN_ID || id.startsWith(`${GROUP_COLUMN_ID}-`) || id.startsWith('pivot_');
96
+ //# sourceMappingURL=known-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"known-names.js","sourceRoot":"","sources":["../../../src/core/state/known-names.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,OAAO;IACP,aAAa;IACb,kBAAkB;IAClB,UAAU;IACV,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,QAAQ;IACR,YAAY;IACZ,MAAM;IACN,WAAW;IACX,aAAa;IACb,UAAU;IACV,WAAW;IACX,cAAc;IACd,OAAO;IACP,WAAW;IACX,eAAe;CACP,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAG,sBAAsB,EAAE,aAAa,CAAU,CAAC;AAE7F,kCAAkC;AAClC,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,OAAO;IACP,YAAY;IACZ,aAAa;IACb,UAAU;IACV,mBAAmB;IACnB,SAAS;IACT,QAAQ;IACR,cAAc;IACd,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,MAAM;IACN,SAAS;IACT,aAAa;IACb,WAAW;IACX,iBAAiB;IACjB,cAAc;IACd,OAAO;CACC,CAAC;AAEX,oGAAoG;AACpG,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO;IACP,YAAY;IACZ,kBAAkB;IAClB,aAAa;IACb,SAAS;IACT,YAAY;IACZ,WAAW;IACX,mBAAmB;IACnB,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,UAAU;IACV,QAAQ;IACR,MAAM;IACN,SAAS;IACT,WAAW;IACX,aAAa;IACb,eAAe;IACf,UAAU;IACV,WAAW;IACX,cAAc;IACd,iBAAiB;IACjB,WAAW;IACX,cAAc;IACd,aAAa;IACb,OAAO;CACC,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAE7D,gHAAgH;AAChH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAU,EAAW,EAAE,CACrD,EAAE,KAAK,eAAe,IAAI,EAAE,KAAK,mBAAmB,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,eAAe,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { ENGINE_FLOOR } from '../../constants.js';
2
+ import { ROW_EVENT_RULE, eachInSection, expressionSlots, readSlot } from '../expressions.js';
3
+ import { defineRule } from './rule.js';
4
+ /**
5
+ * Pre-24 expression shapes in a State checked as 24 or later: the wrapper object
6
+ * (`Rule: { BooleanExpression }`), the old property names (`Query`) and the
7
+ * `ROW_ADDED` / `ROW_REMOVED` alert rules. Reported with the migration hint.
8
+ */
9
+ export default defineRule({
10
+ id: 'aql/legacy-shape',
11
+ docs: 'adaptable-ql',
12
+ appliesTo: ({ major }) => major >= ENGINE_FLOOR,
13
+ check({ state }) {
14
+ const issues = [];
15
+ for (const slot of expressionSlots(state)) {
16
+ const read = readSlot(slot);
17
+ if (read?.legacy) {
18
+ const v24 = read.text === undefined ? `'...'` : JSON.stringify(read.text);
19
+ issues.push({
20
+ path: read.path,
21
+ severity: 'error',
22
+ message: `Pre-24 shape: in 24 \`${slot.prop}\` is the expression string itself.`,
23
+ fix: `Write \`${slot.prop}: ${v24}\`; to convert a whole older State run \`migrate state\`.`,
24
+ });
25
+ }
26
+ }
27
+ eachInSection(state, 'Alert', 'AlertDefinitions', (alert, path) => {
28
+ const rowEvent = typeof alert.Rule === 'string' && alert.Rule.match(ROW_EVENT_RULE);
29
+ if (rowEvent) {
30
+ const trigger = rowEvent[1] === 'ADDED' ? 'Added' : 'Removed';
31
+ issues.push({
32
+ path: `${path}.Rule`,
33
+ severity: 'error',
34
+ message: 'Pre-24 row event rule.',
35
+ fix: `Use a Row Change Alert: \`Type: 'RowChange', RowChangeTrigger: '${trigger}', Scope: { All: true }\`; \`Rule\` is optional and filters the ${trigger.toLowerCase()} rows (e.g. \`[status] = 'New'\`).`,
36
+ });
37
+ }
38
+ });
39
+ return issues;
40
+ },
41
+ });
42
+ //# sourceMappingURL=aql-legacy-shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aql-legacy-shape.js","sourceRoot":"","sources":["../../../../src/core/state/rules/aql-legacy-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAkB,MAAM,WAAW,CAAC;AAEvD;;;;GAIG;AACH,eAAe,UAAU,CAAC;IACxB,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,cAAc;IACpB,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI,YAAY;IAC/C,KAAK,CAAC,EAAE,KAAK,EAAE;QACb,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;gBACjB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1E,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,yBAAyB,IAAI,CAAC,IAAI,qCAAqC;oBAChF,GAAG,EAAE,WAAW,IAAI,CAAC,IAAI,KAAK,GAAG,2DAA2D;iBAC7F,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChE,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACpF,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC9D,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,GAAG,IAAI,OAAO;oBACpB,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,wBAAwB;oBACjC,GAAG,EAAE,mEAAmE,OAAO,mEAAmE,OAAO,CAAC,WAAW,EAAE,oCAAoC;iBAC5M,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { expressionSlots, readSlot } from '../expressions.js';
2
+ import { defineRule } from './rule.js';
3
+ /** Objects whose expression is mandatory (Calculated Columns, Named Queries) have one */
4
+ export default defineRule({
5
+ id: 'aql/missing',
6
+ docs: 'adaptable-ql',
7
+ check({ state }) {
8
+ const issues = [];
9
+ for (const slot of expressionSlots(state)) {
10
+ if (slot.required && !readSlot(slot)) {
11
+ issues.push({
12
+ path: `${slot.owner}.${slot.prop}`,
13
+ severity: 'error',
14
+ message: `Missing \`${slot.prop}\` (the AdapTableQL expression).`,
15
+ });
16
+ }
17
+ }
18
+ return issues;
19
+ },
20
+ });
21
+ //# sourceMappingURL=aql-missing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aql-missing.js","sourceRoot":"","sources":["../../../../src/core/state/rules/aql-missing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAkB,MAAM,WAAW,CAAC;AAEvD,yFAAyF;AACzF,eAAe,UAAU,CAAC;IACxB,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,cAAc;IACpB,KAAK,CAAC,EAAE,KAAK,EAAE;QACb,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;oBAClC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,aAAa,IAAI,CAAC,IAAI,kCAAkC;iBAClE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,77 @@
1
+ import { ENGINE_FLOOR } from '../../constants.js';
2
+ import { customFunctionNames } from '../columns.js';
3
+ import { collectExpressions } from '../expressions.js';
4
+ import { isSpecialColumn } from '../known-names.js';
5
+ import { defineRule } from './rule.js';
6
+ const errorCount = (issues) => issues.filter((issue) => issue.severity === 'error').length;
7
+ const UNKNOWN_FUNCTION_CODES = new Set(['AQL_UNKNOWN_FUNCTION', 'AQL_UNKNOWN_BRACE_CALL']);
8
+ const UNKNOWN_NAME = /^provided function (\S+) cannot be handled|^(\S+?)\{…\} is not a known|^([$A-Za-z_][\w.]*)\(…\) is not a known function/;
9
+ const COLUMN_REF = /\[([^\]]+)\]/g;
10
+ /** A custom function the Options declare is unknown to the engine but not to the grid */
11
+ function isDeclaredCustomFunction(issue, custom) {
12
+ if (!custom.length) {
13
+ return false;
14
+ }
15
+ // the parser and the type checker phrase the unknown-function message differently; the codes vary with them
16
+ const match = UNKNOWN_NAME.exec(issue.message);
17
+ if (!match && (!issue.code || !UNKNOWN_FUNCTION_CODES.has(issue.code))) {
18
+ return false;
19
+ }
20
+ const name = (match?.[1] ?? match?.[2] ?? match?.[3])?.toUpperCase();
21
+ return !!name && custom.includes(name);
22
+ }
23
+ /** The known columns plus AG Grid's generated columns the expression refers to (`[ag-Grid-AutoColumn]`, `[pivot_…]`) */
24
+ function columnsFor(expression, types) {
25
+ if (!types) {
26
+ return undefined;
27
+ }
28
+ const extended = { ...types };
29
+ for (const match of expression.matchAll(COLUMN_REF)) {
30
+ if (isSpecialColumn(match[1]) && !(match[1] in extended)) {
31
+ extended[match[1]] = undefined;
32
+ }
33
+ }
34
+ return extended;
35
+ }
36
+ /**
37
+ * Every embedded AdapTableQL expression parsed by the engine's `aql` entry under
38
+ * the kind its Module evaluates it as; the engine's issues carry over with their
39
+ * quick fixes, and pre-24 syntax the engine can migrate gets the 24 form as the fix.
40
+ */
41
+ export default defineRule({
42
+ id: 'aql/syntax',
43
+ docs: 'adaptable-ql',
44
+ appliesTo: ({ major, aql }) => major >= ENGINE_FLOOR && !!aql,
45
+ check({ state, columns, aql, options }) {
46
+ const issues = [];
47
+ const custom = customFunctionNames(options);
48
+ for (const { path, expression, kind, module } of collectExpressions(state, aql.aggregations, { skipLegacy: true })) {
49
+ const columnTypes = columnsFor(expression, columns?.types);
50
+ const raw = aql.module.validateExpression(expression, { kind, module, columns: columnTypes });
51
+ const result = { ...raw, issues: raw.issues.filter((issue) => !isDeclaredCustomFunction(issue, custom)) };
52
+ let migrationFix;
53
+ if (!result.isValid && result.issues.length) {
54
+ const migrated = aql.module.migrateExpression(expression, { kind });
55
+ if (!migrated.error && migrated.changed) {
56
+ const recheck = aql.module.validateExpression(migrated.expression, { kind, module, columns: columnTypes });
57
+ if (errorCount(recheck.issues) < errorCount(result.issues)) {
58
+ migrationFix = `Pre-24 syntax; the 24 form is \`${migrated.expression}\`${recheck.isValid ? '' : ' (which still has issues)'}. \`migrate expression\` converts it.`;
59
+ }
60
+ }
61
+ }
62
+ for (const issue of result.issues) {
63
+ const where = issue.range ? ` at ${issue.range[0]}–${issue.range[1]} (\`${expression.slice(issue.range[0], issue.range[1])}\`)` : '';
64
+ // the parser's messages span several lines (the caret drawing); one line is enough here
65
+ const detail = issue.message.replace(/\s*\n\s*/g, ' ').replace(/-{3,}\^?\s*/g, '').trim();
66
+ issues.push({
67
+ path,
68
+ severity: issue.severity,
69
+ message: `${module} expression \`${expression}\`${where}: ${detail.length > 300 ? `${detail.slice(0, 299)}…` : detail}`,
70
+ fix: migrationFix ?? (issue.quickFix ? `${issue.quickFix.label}: \`${issue.quickFix.replacement}\`` : undefined),
71
+ });
72
+ }
73
+ }
74
+ return issues;
75
+ },
76
+ });
77
+ //# sourceMappingURL=aql-syntax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aql-syntax.js","sourceRoot":"","sources":["../../../../src/core/state/rules/aql-syntax.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { eachInSection, isObj } from '../expressions.js';
2
+ import { defineRule } from './rule.js';
3
+ /** Calculated Columns declare the type their Expression returns */
4
+ export default defineRule({
5
+ id: 'calculated/settings',
6
+ docs: 'handbook-calculated-column-configuring',
7
+ check({ state }) {
8
+ const issues = [];
9
+ eachInSection(state, 'CalculatedColumn', 'CalculatedColumns', (column, path) => {
10
+ const settings = column.CalculatedColumnSettings;
11
+ if (!isObj(settings) || typeof settings.DataType !== 'string') {
12
+ issues.push({
13
+ path: `${path}.CalculatedColumnSettings${isObj(settings) ? '.DataType' : ''}`,
14
+ severity: 'error',
15
+ message: 'Calculated Columns need `CalculatedColumnSettings: { DataType: ... }` (the type the Expression returns).',
16
+ fix: "Add `CalculatedColumnSettings: { DataType: 'number' }` (or 'text', 'boolean', 'date').",
17
+ });
18
+ }
19
+ });
20
+ return issues;
21
+ },
22
+ });
23
+ //# sourceMappingURL=calculated-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculated-settings.js","sourceRoot":"","sources":["../../../../src/core/state/rules/calculated-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAkB,MAAM,WAAW,CAAC;AAEvD,mEAAmE;AACnE,eAAe,UAAU,CAAC;IACxB,EAAE,EAAE,qBAAqB;IACzB,IAAI,EAAE,wCAAwC;IAC9C,KAAK,CAAC,EAAE,KAAK,EAAE;QACb,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,aAAa,CAAC,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YAC7E,MAAM,QAAQ,GAAG,MAAM,CAAC,wBAAwB,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC9D,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,GAAG,IAAI,4BAA4B,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC7E,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,0GAA0G;oBACnH,GAAG,EAAE,wFAAwF;iBAC9F,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { caseMatch, knownColumn } from '../columns.js';
2
+ import { eachListItem } from './helpers.js';
3
+ import { defineRule } from './rule.js';
4
+ /** Sections whose `ColumnId` *defines* a column, or whose references another rule covers */
5
+ const EXCLUDED = ['Layout', 'CalculatedColumn', 'FreeTextColumn'];
6
+ /** Every other `ColumnId` reference (Styled Columns, Custom Sorts, Notes, …) exists in the effective column universe */
7
+ export default defineRule({
8
+ id: 'column-id/exists',
9
+ docs: 'dev-guide-adaptable-state-initial-state',
10
+ appliesTo: ({ columns }) => !!columns,
11
+ check({ state, columns }) {
12
+ const issues = [];
13
+ eachListItem(state, (_section, _list, item, path) => {
14
+ const columnId = item.ColumnId;
15
+ if (typeof columnId !== 'string' || knownColumn(columns, columnId)) {
16
+ return;
17
+ }
18
+ const cased = caseMatch(columns, columnId);
19
+ issues.push({
20
+ path: `${path}.ColumnId`,
21
+ severity: 'error',
22
+ message: `Column "${columnId}" is not in the grid's columns (${columns.source}).`,
23
+ fix: cased ? `Use "${cased}" — column ids are case-sensitive.` : 'Use a column id from columnDefs (`colId`, else `field`) or a column the State defines.',
24
+ });
25
+ }, { exclude: EXCLUDED });
26
+ return issues;
27
+ },
28
+ });
29
+ //# sourceMappingURL=column-id-exists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-id-exists.js","sourceRoot":"","sources":["../../../../src/core/state/rules/column-id-exists.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAkB,MAAM,WAAW,CAAC;AAEvD,4FAA4F;AAC5F,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;AAElE,wHAAwH;AACxH,eAAe,UAAU,CAAC;IACxB,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,yCAAyC;IAC/C,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO;IACrC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;QACtB,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,YAAY,CACV,KAAK,EACL,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,WAAW,CAAC,OAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACpE,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,SAAS,CAAC,OAAQ,EAAE,QAAQ,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,GAAG,IAAI,WAAW;gBACxB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,WAAW,QAAQ,mCAAmC,OAAQ,CAAC,MAAM,IAAI;gBAClF,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,oCAAoC,CAAC,CAAC,CAAC,wFAAwF;aAC1J,CAAC,CAAC;QACL,CAAC,EACD,EAAE,OAAO,EAAE,QAAQ,EAAE,CACtB,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { isObj } from '../expressions.js';
2
+ import { closest, strings } from './helpers.js';
3
+ import { defineRule } from './rule.js';
4
+ /** `Dashboard.ModuleButtons` and `ToolPanel.ModuleButtons` name modules of the checked major */
5
+ export default defineRule({
6
+ id: 'dashboard/module-names',
7
+ docs: 'ui-dashboard-buttons',
8
+ check({ state, names }) {
9
+ const issues = [];
10
+ for (const section of ['Dashboard', 'ToolPanel']) {
11
+ const value = state[section];
12
+ if (!isObj(value)) {
13
+ continue;
14
+ }
15
+ strings(value.ModuleButtons).forEach((name, i) => {
16
+ if (names.moduleButtons.includes(name)) {
17
+ return;
18
+ }
19
+ const suggestion = closest(name, names.moduleButtons);
20
+ issues.push({
21
+ path: `${section}.ModuleButtons[${i}]`,
22
+ severity: 'error',
23
+ message: `"${name}" is not an AdapTable module with a button.`,
24
+ fix: suggestion ? `Did you mean "${suggestion}"?` : `Module buttons: ${names.moduleButtons.join(', ')}.`,
25
+ });
26
+ });
27
+ }
28
+ return issues;
29
+ },
30
+ });
31
+ //# sourceMappingURL=dashboard-module-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-module-names.js","sourceRoot":"","sources":["../../../../src/core/state/rules/dashboard-module-names.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,UAAU,EAAkB,MAAM,WAAW,CAAC;AAEvD,gGAAgG;AAChG,eAAe,UAAU,CAAC;IACxB,EAAE,EAAE,wBAAwB;IAC5B,IAAI,EAAE,sBAAsB;IAC5B,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;QACpB,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,KAAK,MAAM,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC/C,IAAI,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvC,OAAO;gBACT,CAAC;gBACD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;gBACtD,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,GAAG,OAAO,kBAAkB,CAAC,GAAG;oBACtC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,IAAI,IAAI,6CAA6C;oBAC9D,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,iBAAiB,UAAU,IAAI,CAAC,CAAC,CAAC,mBAAmB,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;iBACzG,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}