@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
@@ -1,417 +0,0 @@
1
- /** Top-level keys of v24 `InitialState` */
2
- const INITIAL_STATE_KEYS = new Set([
3
- 'Alert',
4
- 'Application',
5
- 'CalculatedColumn',
6
- 'Charting',
7
- 'CustomSort',
8
- 'Dashboard',
9
- 'Export',
10
- 'FlashingCell',
11
- 'FormatColumn',
12
- 'FreeTextColumn',
13
- 'Layout',
14
- 'NamedQuery',
15
- 'Note',
16
- 'PlusMinus',
17
- 'QuickSearch',
18
- 'Shortcut',
19
- 'StatusBar',
20
- 'StyledColumn',
21
- 'Theme',
22
- 'ToolPanel',
23
- 'UserInterface',
24
- ]);
25
- const GROUP_COLUMN_ID = 'ag-Grid-AutoColumn';
26
- const SELECTION_COLUMN_ID = 'ag-Grid-SelectionColumn';
27
- const TABLE_ONLY_KEYS = ['TableColumns', 'TableAggregationColumns', 'RowGroupedColumns'];
28
- const PIVOT_ONLY_KEYS = [
29
- 'PivotColumns',
30
- 'PivotAggregationColumns',
31
- 'PivotGroupedColumns',
32
- 'PivotExpandLevel',
33
- ];
34
- const isObj = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
35
- const asArray = (value) => (Array.isArray(value) ? value : []);
36
- const STRING_LITERAL = /'(?:[^']|'')*'|"(?:[^"\\]|\\.)*"/g;
37
- /**
38
- * True when the text calls an aggregation in its catalogue form: braces for
39
- * `SUM{[price]}`, parens for `PERCENTAGE([price])`
40
- */
41
- export function containsAggregation(expression, aggregations) {
42
- const text = expression.replace(STRING_LITERAL, "''");
43
- for (const match of text.matchAll(/\b([A-Za-z_][A-Za-z0-9_]*)\s*([{(])/g)) {
44
- const callForm = aggregations.get(match[1].toUpperCase());
45
- if (callForm && callForm === (match[2] === '{' ? 'brace' : 'paren')) {
46
- return true;
47
- }
48
- }
49
- return false;
50
- }
51
- /** Keys of the pre-v24 expression wrapper object (`Rule: { BooleanExpression: '...' }`) */
52
- const LEGACY_WRAPPER_KEYS = [
53
- 'BooleanExpression',
54
- 'ScalarExpression',
55
- 'AggregatedBooleanExpression',
56
- 'AggregatedScalarExpression',
57
- 'AggregatedExpression',
58
- 'ObservableExpression',
59
- 'Expression',
60
- ];
61
- function expressionSlots(state) {
62
- const slots = [];
63
- const section = (key) => (isObj(state[key]) ? state[key] : {});
64
- const each = (list, owner, fn) => asArray(list).forEach((item, i) => {
65
- if (isObj(item)) {
66
- fn(item, `${owner}[${i}]`);
67
- }
68
- });
69
- each(section('NamedQuery').NamedQueries, 'NamedQuery.NamedQueries', (holder, owner) => {
70
- const returnType = holder.ReturnType ?? 'boolean';
71
- slots.push({
72
- owner,
73
- holder,
74
- prop: 'Expression',
75
- legacyProps: LEGACY_WRAPPER_KEYS.filter((k) => k !== 'Expression'),
76
- required: true,
77
- module: 'NamedQuery',
78
- kind: returnType === 'boolean' ? 'boolean' : 'scalar',
79
- });
80
- });
81
- each(section('CalculatedColumn').CalculatedColumns, 'CalculatedColumn.CalculatedColumns', (holder, owner) => {
82
- slots.push({
83
- owner,
84
- holder,
85
- prop: 'Expression',
86
- legacyProps: ['Query'],
87
- required: true,
88
- module: 'CalculatedColumn',
89
- kind: 'scalar',
90
- aggregatedKind: 'aggregatedScalar',
91
- });
92
- });
93
- each(section('Alert').AlertDefinitions, 'Alert.AlertDefinitions', (holder, owner) => {
94
- slots.push({ owner, holder, prop: 'Rule', module: 'Alert', kind: 'boolean', aggregatedKind: 'aggregatedBoolean' });
95
- });
96
- const ruleSections = [
97
- ['FlashingCell', 'FlashingCellDefinitions'],
98
- ['FormatColumn', 'FormatColumns'],
99
- ['PlusMinus', 'PlusMinusNudges'],
100
- ];
101
- for (const [module, list] of ruleSections) {
102
- each(section(module)[list], `${module}.${list}`, (holder, owner) => {
103
- slots.push({ owner, holder, prop: 'Rule', module, kind: 'boolean' });
104
- });
105
- }
106
- each(section('Export').Reports, 'Export.Reports', (holder, owner) => {
107
- slots.push({ owner, holder, prop: 'Expression', legacyProps: ['Query'], module: 'Export', kind: 'boolean' });
108
- });
109
- each(section('StyledColumn').StyledColumns, 'StyledColumn.StyledColumns', (styled, styledPath) => {
110
- if (isObj(styled.BadgeStyle)) {
111
- each(styled.BadgeStyle.Badges, `${styledPath}.BadgeStyle.Badges`, (holder, owner) => {
112
- slots.push({ owner, holder, prop: 'Rule', module: 'StyledColumn', kind: 'boolean' });
113
- });
114
- }
115
- });
116
- each(section('Layout').Layouts, 'Layout.Layouts', (layout, layoutPath) => {
117
- if (isObj(layout.GridFilter)) {
118
- slots.push({
119
- owner: `${layoutPath}.GridFilter`,
120
- holder: layout.GridFilter,
121
- prop: 'Expression',
122
- module: 'GridFilter',
123
- kind: 'boolean',
124
- });
125
- }
126
- each(layout.ColumnFilters, `${layoutPath}.ColumnFilters`, (holder, owner) => {
127
- slots.push({ owner, holder, prop: 'Expression', module: 'ColumnFilter', kind: 'boolean' });
128
- });
129
- });
130
- return slots;
131
- }
132
- const legacyWrapperText = (value) => LEGACY_WRAPPER_KEYS.map((k) => value[k]).find((v) => typeof v === 'string');
133
- /** The expression a slot holds, in v24 form or a pre-v24 shape (reported by checkStateRules) */
134
- function readSlot(slot) {
135
- for (const prop of [slot.prop, ...(slot.legacyProps ?? [])]) {
136
- const value = slot.holder[prop];
137
- if (value === undefined) {
138
- continue;
139
- }
140
- const path = `${slot.owner}.${prop}`;
141
- if (typeof value === 'string') {
142
- return { path, text: value, legacy: prop !== slot.prop };
143
- }
144
- return { path, text: isObj(value) ? legacyWrapperText(value) : undefined, legacy: true };
145
- }
146
- return undefined;
147
- }
148
- /** Every AdapTableQL string in state, with its Module and the kind that Module evaluates it as */
149
- export function collectExpressions(state, aggregations) {
150
- const found = [];
151
- for (const slot of expressionSlots(state)) {
152
- const read = readSlot(slot);
153
- if (!read?.text?.trim()) {
154
- continue;
155
- }
156
- found.push({
157
- path: read.path,
158
- expression: read.text,
159
- module: slot.module,
160
- kind: slot.aggregatedKind && containsAggregation(read.text, aggregations) ? slot.aggregatedKind : slot.kind,
161
- });
162
- }
163
- return found;
164
- }
165
- function expressionShapeIssues(state) {
166
- const issues = [];
167
- for (const slot of expressionSlots(state)) {
168
- const read = readSlot(slot);
169
- if (!read) {
170
- if (slot.required) {
171
- issues.push({
172
- path: `${slot.owner}.${slot.prop}`,
173
- severity: 'error',
174
- message: `Missing \`${slot.prop}\` (the AdapTableQL expression string).`,
175
- });
176
- }
177
- continue;
178
- }
179
- if (read.legacy) {
180
- const v24 = read.text === undefined ? `'...'` : JSON.stringify(read.text);
181
- issues.push({
182
- path: read.path,
183
- severity: 'error',
184
- message: `Pre-v24 shape. In v24 \`${slot.prop}\` is the expression string itself: \`${slot.prop}: ${v24}\`. To convert a whole older state use migrate_state.`,
185
- });
186
- }
187
- }
188
- eachInSection(state, 'Alert', 'AlertDefinitions', (alert, path) => {
189
- const rowEvent = typeof alert.Rule === 'string' && alert.Rule.match(/^\s*ROW_(ADDED|REMOVED)\s*[{(]/);
190
- if (rowEvent) {
191
- const trigger = rowEvent[1] === 'ADDED' ? 'Added' : 'Removed';
192
- issues.push({
193
- path: `${path}.Rule`,
194
- severity: 'error',
195
- message: `Pre-v24 row event rule. 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'\`).`,
196
- });
197
- }
198
- });
199
- eachInSection(state, 'CalculatedColumn', 'CalculatedColumns', (column, path) => {
200
- const settings = column.CalculatedColumnSettings;
201
- if (!isObj(settings) || typeof settings.DataType !== 'string') {
202
- issues.push({
203
- path: `${path}.CalculatedColumnSettings${isObj(settings) ? '.DataType' : ''}`,
204
- severity: 'error',
205
- message: `Calculated Columns need \`CalculatedColumnSettings: { DataType: ... }\` (the type the Expression returns, e.g. 'number').`,
206
- });
207
- }
208
- });
209
- return issues;
210
- }
211
- function eachInSection(state, module, list, fn) {
212
- const sectionValue = state[module];
213
- if (isObj(sectionValue)) {
214
- asArray(sectionValue[list]).forEach((item, i) => {
215
- if (isObj(item)) {
216
- fn(item, `${module}.${list}[${i}]`);
217
- }
218
- });
219
- }
220
- }
221
- /** Columns the state itself defines (Calculated and FreeText Columns), with their data types */
222
- export function getStateColumnIds(state) {
223
- const columns = [];
224
- for (const [module, list, settings] of [
225
- ['CalculatedColumn', 'CalculatedColumns', 'CalculatedColumnSettings'],
226
- ['FreeTextColumn', 'FreeTextColumns', 'FreeTextColumnSettings'],
227
- ]) {
228
- const sectionValue = state[module];
229
- if (isObj(sectionValue)) {
230
- for (const c of asArray(sectionValue[list])) {
231
- if (isObj(c) && typeof c.ColumnId === 'string') {
232
- const dataType = isObj(c[settings]) ? c[settings].DataType : undefined;
233
- columns.push([c.ColumnId, typeof dataType === 'string' ? dataType : undefined]);
234
- }
235
- }
236
- }
237
- }
238
- return columns;
239
- }
240
- function layoutColumnRefs(layout) {
241
- const refs = [];
242
- for (const key of ['TableColumns', 'PivotColumns', 'RowGroupedColumns', 'PivotGroupedColumns']) {
243
- for (const id of asArray(layout[key])) {
244
- if (typeof id === 'string') {
245
- refs.push({ key, columnId: id });
246
- }
247
- }
248
- }
249
- for (const key of ['ColumnSorts', 'ColumnFilters', 'TableAggregationColumns', 'PivotAggregationColumns']) {
250
- for (const item of asArray(layout[key])) {
251
- if (isObj(item) && typeof item.ColumnId === 'string') {
252
- refs.push({ key, columnId: item.ColumnId });
253
- }
254
- }
255
- }
256
- for (const key of ['ColumnSizing', 'ColumnPinning', 'ColumnVisibility', 'ColumnHeaders']) {
257
- if (isObj(layout[key])) {
258
- for (const id of Object.keys(layout[key])) {
259
- refs.push({ key, columnId: id });
260
- }
261
- }
262
- }
263
- return refs;
264
- }
265
- const isSpecialColumn = (id) => id === GROUP_COLUMN_ID || id === SELECTION_COLUMN_ID || id.startsWith(`${GROUP_COLUMN_ID}-`);
266
- /**
267
- * Semantic rules TypeScript cannot catch, plus the expression shapes agents
268
- * most often get wrong (with the v24 rewrite); other shape errors are left to
269
- * the type check
270
- */
271
- export function checkStateRules(state, input) {
272
- const issues = [];
273
- if (!isObj(state)) {
274
- return [{ path: '', severity: 'error', message: 'State must be a JSON object (the value of `initialState`).' }];
275
- }
276
- for (const key of Object.keys(state)) {
277
- if (key === 'PredefinedConfig') {
278
- issues.push({
279
- path: key,
280
- severity: 'error',
281
- message: '`PredefinedConfig` is not part of AdapTable state: put its contents directly in `initialState`.',
282
- });
283
- }
284
- else if (!INITIAL_STATE_KEYS.has(key)) {
285
- issues.push({
286
- path: key,
287
- severity: 'warning',
288
- message: `\`${key}\` is not an Initial State section; AdapTable ignores it. Check search_docs for where this belongs (it may be an Adaptable Option).`,
289
- });
290
- }
291
- }
292
- issues.push(...expressionShapeIssues(state));
293
- const layoutState = isObj(state.Layout) ? state.Layout : undefined;
294
- const layouts = asArray(layoutState?.Layouts);
295
- if (!layouts.length) {
296
- issues.push({
297
- path: 'Layout.Layouts',
298
- severity: 'warning',
299
- message: 'No Layouts: Initial State must include at least one Layout unless `layoutOptions.autoCreateLayout` is set.',
300
- });
301
- }
302
- const known = input.columnIds
303
- ? new Set([...input.columnIds, ...getStateColumnIds(state).map(([id]) => id)])
304
- : undefined;
305
- const names = new Map();
306
- layouts.forEach((layout, i) => {
307
- const path = `Layout.Layouts[${i}]`;
308
- if (!isObj(layout)) {
309
- issues.push({ path, severity: 'error', message: 'Layout must be an object.' });
310
- return;
311
- }
312
- const name = layout.Name;
313
- if (typeof name !== 'string' || !name) {
314
- issues.push({ path: `${path}.Name`, severity: 'error', message: 'Layout needs a `Name`.' });
315
- }
316
- else if (names.has(name)) {
317
- issues.push({
318
- path: `${path}.Name`,
319
- severity: 'error',
320
- message: `Duplicate Layout name "${name}" (also Layout.Layouts[${names.get(name)}]); Layout names must be unique.`,
321
- });
322
- }
323
- else {
324
- names.set(name, i);
325
- }
326
- const isTable = layout.TableColumns !== undefined;
327
- const isPivot = layout.PivotColumns !== undefined;
328
- if (isTable && isPivot) {
329
- issues.push({
330
- path,
331
- severity: 'error',
332
- message: 'A Layout is either a Table Layout (`TableColumns`) or a Pivot Layout (`PivotColumns`), not both.',
333
- });
334
- }
335
- else if (!isTable && !isPivot) {
336
- issues.push({
337
- path,
338
- severity: 'error',
339
- message: 'Layout needs `TableColumns` (Table Layout) or `PivotColumns` (Pivot Layout; use [] to show only aggregations).',
340
- });
341
- }
342
- else {
343
- const wrongKeys = (isTable ? PIVOT_ONLY_KEYS : TABLE_ONLY_KEYS).filter((k) => layout[k] !== undefined);
344
- for (const key of wrongKeys) {
345
- issues.push({
346
- path: `${path}.${key}`,
347
- severity: 'error',
348
- message: isTable
349
- ? `\`${key}\` belongs to Pivot Layouts; this is a Table Layout.`
350
- : `\`${key}\` belongs to Table Layouts; in Pivot Layouts use ${key === 'RowGroupedColumns' ? '`PivotGroupedColumns`' : key === 'TableAggregationColumns' ? '`PivotAggregationColumns`' : '`PivotColumns`'}.`,
351
- });
352
- }
353
- }
354
- if (isObj(layout.ColumnSizing)) {
355
- for (const [columnId, sizing] of Object.entries(layout.ColumnSizing)) {
356
- if (isObj(sizing) && sizing.Width !== undefined && sizing.Flex !== undefined) {
357
- issues.push({
358
- path: `${path}.ColumnSizing.${columnId}`,
359
- severity: 'error',
360
- message: 'Column sizing takes `Width` or `Flex`, not both.',
361
- });
362
- }
363
- }
364
- }
365
- if (known) {
366
- const reported = new Set();
367
- for (const { key, columnId } of layoutColumnRefs(layout)) {
368
- if (!known.has(columnId) && !isSpecialColumn(columnId) && !reported.has(columnId)) {
369
- reported.add(columnId);
370
- issues.push({
371
- path: `${path}.${key}`,
372
- severity: 'error',
373
- message: `Column "${columnId}" is not in the grid's columns. If it is an Action Column or another column defined outside columnDefs, add it to columns.`,
374
- });
375
- }
376
- }
377
- }
378
- });
379
- // A Format Column's DisplayFormat is matched against the generated pivot result column
380
- // (`pivot_<pivotColumn>_<value>_<columnId>`), so a ColumnIds scope on the aggregation column
381
- // never reaches it; only Style and Rule are inherited from the base column
382
- const pivotAggregated = new Map();
383
- layouts.forEach((layout) => {
384
- if (isObj(layout) && layout.PivotColumns !== undefined) {
385
- for (const item of asArray(layout.PivotAggregationColumns)) {
386
- if (isObj(item) && typeof item.ColumnId === 'string' && !pivotAggregated.has(item.ColumnId)) {
387
- pivotAggregated.set(item.ColumnId, String(layout.Name));
388
- }
389
- }
390
- }
391
- });
392
- if (pivotAggregated.size) {
393
- eachInSection(state, 'FormatColumn', 'FormatColumns', (formatColumn, path) => {
394
- if (formatColumn.DisplayFormat === undefined || !isObj(formatColumn.Scope)) {
395
- return;
396
- }
397
- const hit = asArray(formatColumn.Scope.ColumnIds).find((id) => typeof id === 'string' && pivotAggregated.has(id));
398
- if (hit) {
399
- issues.push({
400
- path: `${path}.Scope`,
401
- severity: 'warning',
402
- message: `DisplayFormat scoped to "${hit}" does not format its pivot result columns in Layout "${pivotAggregated.get(hit)}" (only Style and Rule are inherited). Scope the DisplayFormat with DataTypes (e.g. ['number']) or ColumnTypes (AG Grid \`colDef.type\`, copied onto pivot result columns), or list the generated pivot result column ids.`,
403
- });
404
- }
405
- });
406
- }
407
- const current = layoutState?.CurrentLayout;
408
- if (typeof current === 'string' && layouts.length && !names.has(current)) {
409
- issues.push({
410
- path: 'Layout.CurrentLayout',
411
- severity: 'error',
412
- message: `CurrentLayout "${current}" does not match any Layout Name (${[...names.keys()].map((n) => `"${n}"`).join(', ')}).`,
413
- });
414
- }
415
- return issues;
416
- }
417
- //# sourceMappingURL=rules.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/core/state/rules.ts"],"names":[],"mappings":"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"}