@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,118 @@
1
+ /**
2
+ * What `check setup` (plan §8.6) looks at: the project as `detect` describes it,
3
+ * its source and style files with line indexes, and the Options / `columnDefs` /
4
+ * State literals the extractor can see in its entry files.
5
+ */
6
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
7
+ import { join, relative } from 'node:path';
8
+ import { describeProject, listSourceFiles } from '../context/detect.js';
9
+ import { CapabilityError } from '../envelope.js';
10
+ import { extractFromFile } from '../extract/input.js';
11
+ import { LineIndex } from '../extract/line-map.js';
12
+ import { isSourceFile } from '../extract/ts-literal.js';
13
+ const MAX_FILE_BYTES = 512 * 1024;
14
+ const STYLE_EXTENSIONS = new Set(['.css', '.scss', '.sass', '.less']);
15
+ const SKIP_DIRS = new Set(['node_modules', 'dist', 'build', 'out', 'coverage', '.git', '.angular', '.next', '.nuxt', '.turbo']);
16
+ function listStyleFiles(root, limit = 2000) {
17
+ const files = [];
18
+ const walk = (dir) => {
19
+ let entries;
20
+ try {
21
+ entries = readdirSync(dir, { withFileTypes: true });
22
+ }
23
+ catch {
24
+ return;
25
+ }
26
+ for (const entry of entries) {
27
+ if (files.length >= limit) {
28
+ return;
29
+ }
30
+ if (entry.isDirectory()) {
31
+ if (!SKIP_DIRS.has(entry.name) && !entry.name.startsWith('.')) {
32
+ walk(join(dir, entry.name));
33
+ }
34
+ }
35
+ else if (entry.isFile()) {
36
+ const dot = entry.name.lastIndexOf('.');
37
+ if ((dot >= 0 && STYLE_EXTENSIONS.has(entry.name.slice(dot))) || entry.name === 'angular.json') {
38
+ files.push(join(dir, entry.name));
39
+ }
40
+ }
41
+ }
42
+ };
43
+ walk(root);
44
+ return files.sort();
45
+ }
46
+ function readSources(root, paths) {
47
+ const out = [];
48
+ for (const path of paths) {
49
+ try {
50
+ if (statSync(path).size > MAX_FILE_BYTES) {
51
+ continue;
52
+ }
53
+ const text = readFileSync(path, 'utf8');
54
+ out.push({ path, rel: relative(root, path).split('\\').join('/'), text, index: new LineIndex(text) });
55
+ }
56
+ catch {
57
+ // unreadable files are skipped, as in detect
58
+ }
59
+ }
60
+ return out;
61
+ }
62
+ /** Every match of `pattern` (which must carry the `g` flag) across `files`, with its position */
63
+ export function findAll(files, pattern) {
64
+ const found = [];
65
+ for (const file of files) {
66
+ for (const match of file.text.matchAll(pattern)) {
67
+ const { line, column } = file.index.positionAt(match.index ?? 0);
68
+ found.push({ file: file.path, line, column, match });
69
+ }
70
+ }
71
+ return found;
72
+ }
73
+ /** The first file among `candidates` (relative paths) where the extractor finds `target` */
74
+ function extractFirst(root, candidates, target) {
75
+ for (const rel of candidates) {
76
+ const path = join(root, rel);
77
+ if (!isSourceFile(path) || !existsSync(path)) {
78
+ continue;
79
+ }
80
+ try {
81
+ const result = extractFromFile(path, { target });
82
+ if (result.value !== undefined) {
83
+ return result;
84
+ }
85
+ }
86
+ catch (error) {
87
+ if (!(error instanceof CapabilityError)) {
88
+ throw error;
89
+ }
90
+ // a file the extractor cannot parse is reported by its own rule, not here
91
+ }
92
+ }
93
+ return undefined;
94
+ }
95
+ export function buildSetupContext(project, options = {}) {
96
+ const report = describeProject(project, options.manifest, options.boundary);
97
+ const root = project.path;
98
+ const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8'));
99
+ const dependencies = { ...(pkg.peerDependencies ?? {}), ...(pkg.devDependencies ?? {}), ...(pkg.dependencies ?? {}) };
100
+ const major = options.major ?? report.adaptable.major;
101
+ if (major === undefined) {
102
+ throw new CapabilityError('USAGE', `The AdapTable major of ${root} could not be determined.`, 'Pin @adaptabletools/adaptable to a version in package.json, or pass --major <n>.');
103
+ }
104
+ const uniq = (list) => [...new Set(list)];
105
+ return {
106
+ project: report,
107
+ framework: report.framework,
108
+ major,
109
+ ...(options.manifest ? { manifest: options.manifest } : {}),
110
+ sources: readSources(root, listSourceFiles(root)),
111
+ styles: readSources(root, listStyleFiles(root)),
112
+ dependencies,
113
+ options: extractFirst(root, uniq([...report.entryPoints, ...report.initialStateLiterals]), 'options'),
114
+ columnDefs: extractFirst(root, uniq([...report.entryPoints, ...report.columnDefsFiles]), 'columnDefs'),
115
+ state: extractFirst(root, uniq([...report.initialStateLiterals, ...report.entryPoints]), 'state'),
116
+ };
117
+ }
118
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/core/setup/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { isObj } from '../../state/expressions.js';
2
+ import { defineSetupRule, positionOf } from './rule.js';
3
+ /** Every leaf ColDef declares its `cellDataType` (AdapTable's data types come from it; Appendix E) */
4
+ export default defineSetupRule({
5
+ id: 'setup/cell-data-type',
6
+ docs: 'dev-guide-aggrid-cell-data-types',
7
+ check(ctx) {
8
+ const defs = ctx.columnDefs?.value;
9
+ if (!Array.isArray(defs)) {
10
+ return [];
11
+ }
12
+ const missing = [];
13
+ const visit = (def, path) => {
14
+ if (!isObj(def)) {
15
+ return;
16
+ }
17
+ if (Array.isArray(def.children)) {
18
+ def.children.forEach((child, i) => visit(child, `${path}.children[${i}]`));
19
+ return;
20
+ }
21
+ const id = typeof def.colId === 'string' ? def.colId : typeof def.field === 'string' ? def.field : undefined;
22
+ if (id && typeof def.cellDataType !== 'string' && def.cellDataType !== false) {
23
+ missing.push({ id, path });
24
+ }
25
+ };
26
+ defs.forEach((def, i) => visit(def, `[${i}]`));
27
+ if (!missing.length) {
28
+ return [];
29
+ }
30
+ const issues = missing.map(({ id, path }) => ({
31
+ severity: 'warning',
32
+ path,
33
+ message: `Column "${id}" has no \`cellDataType\`; AdapTable infers its data type from the first rows, which is unreliable for dates and empty columns.`,
34
+ fix: "Set `cellDataType: 'text' | 'number' | 'boolean' | 'date' | 'dateString' | 'object'` on the ColDef.",
35
+ ...(positionOf(ctx.columnDefs, path) ?? {}),
36
+ }));
37
+ return issues;
38
+ },
39
+ });
40
+ //# sourceMappingURL=cell-data-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell-data-type.js","sourceRoot":"","sources":["../../../../src/core/setup/rules/cell-data-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AAEzE,sGAAsG;AACtG,eAAe,eAAe,CAAC;IAC7B,EAAE,EAAE,sBAAsB;IAC1B,IAAI,EAAE,kCAAkC;IACxC,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,OAAO,GAAmC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,CAAC,GAAY,EAAE,IAAY,EAAQ,EAAE;YACjD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3E,OAAO;YACT,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7G,IAAI,EAAE,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAiB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1D,QAAQ,EAAE,SAAS;YACnB,IAAI;YACJ,OAAO,EAAE,WAAW,EAAE,iIAAiI;YACvJ,GAAG,EAAE,qGAAqG;YAC1G,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;SAC5C,CAAC,CAAC,CAAC;QACJ,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { isObj } from '../../state/expressions.js';
2
+ import { defineSetupRule, positionOf } from './rule.js';
3
+ /**
4
+ * Appendix E as data: ColDef properties AdapTable owns, the Layout / State property that
5
+ * replaces them, and the `check setup` severity. `convert coldefs` (A4.5) derives its
6
+ * `remove` list (the `warning` rows) and its `candidates` (the `info` rows) from this
7
+ * same table.
8
+ */
9
+ export const COLDEF_OWNERSHIP = {
10
+ hide: { owner: 'Layout.Layouts[].TableColumns (leave the column out)', severity: 'warning' },
11
+ pinned: { owner: 'Layout.Layouts[].ColumnPinning', severity: 'warning' },
12
+ width: { owner: 'Layout.Layouts[].ColumnSizing', severity: 'warning' },
13
+ flex: { owner: 'Layout.Layouts[].ColumnSizing', severity: 'warning' },
14
+ sort: { owner: 'Layout.Layouts[].ColumnSorts', severity: 'warning' },
15
+ sortIndex: { owner: 'Layout.Layouts[].ColumnSorts (order)', severity: 'warning' },
16
+ rowGroup: { owner: 'Layout.Layouts[].RowGroupedColumns', severity: 'warning' },
17
+ rowGroupIndex: { owner: 'Layout.Layouts[].RowGroupedColumns (order)', severity: 'warning' },
18
+ pivot: { owner: 'Layout.Layouts[].PivotColumns', severity: 'warning' },
19
+ pivotIndex: { owner: 'Layout.Layouts[].PivotColumns (order)', severity: 'warning' },
20
+ aggFunc: { owner: 'Layout.Layouts[].TableAggregationColumns / PivotAggregationColumns', severity: 'warning' },
21
+ cellStyle: { owner: 'FormatColumn (Scope + Style)', severity: 'info' },
22
+ cellClassRules: { owner: 'FormatColumn (Scope + Rule + Style)', severity: 'info' },
23
+ valueFormatter: { owner: 'FormatColumn.DisplayFormat', severity: 'info' },
24
+ valueGetter: { owner: 'CalculatedColumn (an AdapTableQL Expression)', severity: 'info', note: 'unless the value needs JavaScript state the Expression cannot reach' },
25
+ cellRenderer: { owner: 'StyledColumn (sparklines, percent bars, badges, ratings) or ActionColumn (buttons)', severity: 'info', note: 'for anything but a bespoke renderer' },
26
+ };
27
+ const OWNED = COLDEF_OWNERSHIP;
28
+ /**
29
+ * ColDef properties AdapTable owns (Appendix E) are set in Initial State instead,
30
+ * where AdapTable persists and overrides them.
31
+ */
32
+ export default defineSetupRule({
33
+ id: 'setup/coldef-ownership',
34
+ docs: 'dev-guide-columns-configuring-coldefs',
35
+ check(ctx) {
36
+ const defs = ctx.columnDefs?.value;
37
+ if (!Array.isArray(defs)) {
38
+ return [];
39
+ }
40
+ const issues = [];
41
+ const visit = (def, path) => {
42
+ if (!isObj(def)) {
43
+ return;
44
+ }
45
+ if (Array.isArray(def.children)) {
46
+ def.children.forEach((child, i) => visit(child, `${path}.children[${i}]`));
47
+ return;
48
+ }
49
+ const id = typeof def.colId === 'string' ? def.colId : typeof def.field === 'string' ? def.field : path;
50
+ for (const [prop, { owner, severity, note }] of Object.entries(OWNED)) {
51
+ if (def[prop] === undefined) {
52
+ continue;
53
+ }
54
+ issues.push({
55
+ severity,
56
+ path: `${path}.${prop}`,
57
+ message: `\`${prop}\` on column "${id}" is owned by AdapTable: set it in \`${owner}\`${note ? ` (${note})` : ''}.`,
58
+ fix: severity === 'warning' ? `Remove \`${prop}\` from the ColDef and express it in Initial State (\`convert coldefs\` does this for a whole columnDefs).` : `Consider moving it to Initial State so it is persisted and editable at run time.`,
59
+ ...(positionOf(ctx.columnDefs, `${path}.${prop}`, 'key') ?? {}),
60
+ });
61
+ }
62
+ };
63
+ defs.forEach((def, i) => visit(def, `[${i}]`));
64
+ return issues;
65
+ },
66
+ });
67
+ //# sourceMappingURL=coldef-ownership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coldef-ownership.js","sourceRoot":"","sources":["../../../../src/core/setup/rules/coldef-ownership.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { findAll } from '../context.js';
2
+ import { defineSetupRule } from './rule.js';
3
+ const CSS_IMPORT = /@adaptabletools\/adaptable(?:-[a-z0-9-]+)?\/(?:index|base|themes\/[^'"`)]+)\.css/g;
4
+ const TAILWIND = /@import\s+["']tailwindcss|@tailwind\s+(?:base|components|utilities)/g;
5
+ /** AdapTable's stylesheet is imported somewhere: source, CSS, or angular.json `styles` */
6
+ export default defineSetupRule({
7
+ id: 'setup/css-import',
8
+ docs: 'getting-started-installation',
9
+ check(ctx) {
10
+ const imports = findAll([...ctx.sources, ...ctx.styles], CSS_IMPORT);
11
+ if (!imports.length) {
12
+ return [
13
+ {
14
+ severity: 'error',
15
+ message: 'AdapTable\'s stylesheet (`@adaptabletools/adaptable/index.css`) is not imported anywhere; the grid renders unstyled.',
16
+ fix: `Import it once, where your app loads global styles: ${ctx.framework === 'angular' ? 'add `node_modules/@adaptabletools/adaptable/index.css` to `styles` in angular.json' : "`import '@adaptabletools/adaptable/index.css';`"}.`,
17
+ },
18
+ ];
19
+ }
20
+ const issues = [];
21
+ const tailwind = findAll(ctx.styles, TAILWIND);
22
+ if (tailwind.length || 'tailwindcss' in ctx.dependencies) {
23
+ const where = tailwind[0];
24
+ issues.push({
25
+ severity: 'info',
26
+ message: 'Tailwind is present: AdapTable\'s stylesheet must not be reset by Tailwind\'s base layer.',
27
+ fix: 'Import `@adaptabletools/adaptable/index.css` after Tailwind\'s base layer (or wrap your Tailwind import in `@layer`), and keep AdapTable\'s container outside `@apply`-reset scopes.',
28
+ ...(where ? { file: where.file, line: where.line, column: where.column } : {}),
29
+ });
30
+ }
31
+ return issues;
32
+ },
33
+ });
34
+ //# sourceMappingURL=css-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-import.js","sourceRoot":"","sources":["../../../../src/core/setup/rules/css-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAmB,MAAM,WAAW,CAAC;AAE7D,MAAM,UAAU,GAAG,mFAAmF,CAAC;AACvG,MAAM,QAAQ,GAAG,sEAAsE,CAAC;AAExF,0FAA0F;AAC1F,eAAe,eAAe,CAAC;IAC7B,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,8BAA8B;IACpC,KAAK,CAAC,GAAG;QACP,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO;gBACL;oBACE,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,sHAAsH;oBAC/H,GAAG,EAAE,uDAAuD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,oFAAoF,CAAC,CAAC,CAAC,iDAAiD,GAAG;iBACtO;aACF,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,QAAQ,CAAC,MAAM,IAAI,aAAa,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,2FAA2F;gBACpG,GAAG,EAAE,sLAAsL;gBAC3L,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/E,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { findAll } from '../context.js';
2
+ import { defineSetupRule } from './rule.js';
3
+ /** AG Grid created directly, next to AdapTable: two grids, or AdapTable never sees the grid */
4
+ const DIRECT = /\bcreateGrid\s*\(|<AgGridReact\b|<ag-grid-angular\b|<AgGridVue\b|<ag-grid-vue\b/g;
5
+ /**
6
+ * The Angular wrapper's documented pattern renders `<ag-grid-angular *adaptable="let adaptable">`
7
+ * inside `<adaptable-provider>`: the structural directive hands the element to AdapTable.
8
+ */
9
+ function isAdaptableOwned(match) {
10
+ if (match[0] !== '<ag-grid-angular' || match.input === undefined || match.index === undefined) {
11
+ return false;
12
+ }
13
+ const tagEnd = match.input.indexOf('>', match.index);
14
+ const tag = match.input.slice(match.index, tagEnd < 0 ? undefined : tagEnd);
15
+ return /\*adaptable\s*=/.test(tag);
16
+ }
17
+ export default defineSetupRule({
18
+ id: 'setup/direct-grid',
19
+ docs: 'getting-started-key-concepts',
20
+ check(ctx) {
21
+ return findAll(ctx.sources, DIRECT)
22
+ .filter((found) => !isAdaptableOwned(found.match))
23
+ .map((found) => {
24
+ const what = found.match[0].replace(/\s*\($/, '');
25
+ return {
26
+ severity: 'error',
27
+ message: `\`${what}\` creates an AG Grid directly; AdapTable creates and owns the grid.`,
28
+ fix: ctx.framework === 'react'
29
+ ? 'Render `<Adaptable.Provider adaptableOptions={…} gridOptions={…} modules={…}>` with `<Adaptable.UI />` and `<Adaptable.AgGridReact />` inside it instead of `<AgGridReact>`; the provider mounts the grid.'
30
+ : ctx.framework === 'angular'
31
+ ? 'Render `<adaptable-provider [adaptableOptions]="…" [gridOptions]="…" [modules]="…">` with `<adaptable-ui>` and `<ag-grid-angular *adaptable="let adaptable" [gridOptions]="adaptable.gridOptions" [modules]="adaptable.modules">` inside it; the `*adaptable` directive hands the grid to AdapTable.'
32
+ : ctx.framework === 'vue'
33
+ ? 'Render `<AdaptableProvider :adaptableOptions="…" :gridOptions="…" :modules="…">` with `<AdaptableUI />` and `<AdaptableAgGridVue />` inside it instead of the AG Grid component.'
34
+ : 'Call `Adaptable.init(adaptableOptions, { gridOptions, modules })` instead of `createGrid(...)`; it resolves with the Adaptable API once the grid is ready.',
35
+ file: found.file,
36
+ line: found.line,
37
+ column: found.column,
38
+ };
39
+ });
40
+ },
41
+ });
42
+ //# sourceMappingURL=direct-grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-grid.js","sourceRoot":"","sources":["../../../../src/core/setup/rules/direct-grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,+FAA+F;AAC/F,MAAM,MAAM,GAAG,kFAAkF,CAAC;AAElG;;;GAGG;AACH,SAAS,gBAAgB,CAAC,KAAuB;IAC/C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,kBAAkB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9F,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5E,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,eAAe,eAAe,CAAC;IAC7B,EAAE,EAAE,mBAAmB;IACvB,IAAI,EAAE,8BAA8B;IACpC,KAAK,CAAC,GAAG;QACP,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;aAChC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACjD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAClD,OAAO;gBACL,QAAQ,EAAE,OAAgB;gBAC1B,OAAO,EAAE,KAAK,IAAI,sEAAsE;gBACxF,GAAG,EACD,GAAG,CAAC,SAAS,KAAK,OAAO;oBACvB,CAAC,CAAC,4MAA4M;oBAC9M,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS;wBAC3B,CAAC,CAAC,sSAAsS;wBACxS,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,KAAK;4BACvB,CAAC,CAAC,kLAAkL;4BACpL,CAAC,CAAC,4JAA4J;gBACtK,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;QACJ,CAAC,CAAC,CAAC;IACP,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,53 @@
1
+ import cellDataType from './cell-data-type.js';
2
+ import coldefOwnership from './coldef-ownership.js';
3
+ import cssImport from './css-import.js';
4
+ import directGrid from './direct-grid.js';
5
+ import licenceLiteral from './licence-literal.js';
6
+ import modules from './modules.js';
7
+ import reactStableRefs from './react-stable-refs.js';
8
+ import readyHook from './ready-hook.js';
9
+ import requiredOptions from './required-options.js';
10
+ import versionSkew from './version-skew.js';
11
+ export const STATIC_RULES = [
12
+ cssImport,
13
+ requiredOptions,
14
+ licenceLiteral,
15
+ versionSkew,
16
+ modules,
17
+ cellDataType,
18
+ directGrid,
19
+ coldefOwnership,
20
+ reactStableRefs,
21
+ readyHook,
22
+ ];
23
+ export const OPTIONS_SHAPE_RULE = 'setup/options-shape';
24
+ export const SETUP_RULE_IDS = [...STATIC_RULES.map((r) => r.id), OPTIONS_SHAPE_RULE];
25
+ export function runStaticRules(ctx) {
26
+ const issues = [];
27
+ const applied = [];
28
+ const skipped = [];
29
+ for (const rule of STATIC_RULES) {
30
+ if (rule.frameworks && !rule.frameworks.includes(ctx.framework)) {
31
+ skipped.push(rule.id);
32
+ continue;
33
+ }
34
+ applied.push(rule.id);
35
+ for (const found of rule.check(ctx)) {
36
+ const issue = { code: rule.id, severity: found.severity, message: found.message, docs: rule.docs };
37
+ if (found.path !== undefined) {
38
+ issue.path = found.path;
39
+ }
40
+ if (found.fix) {
41
+ issue.fix = found.fix;
42
+ }
43
+ if (found.file) {
44
+ issue.file = found.file;
45
+ issue.line = found.line;
46
+ issue.column = found.column;
47
+ }
48
+ issues.push(issue);
49
+ }
50
+ }
51
+ return { issues, applied, skipped };
52
+ }
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/setup/rules/index.ts"],"names":[],"mappings":"AAMA,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,eAAe,MAAM,uBAAuB,CAAC;AAEpD,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAI5C,MAAM,CAAC,MAAM,YAAY,GAAyB;IAChD,SAAS;IACT,eAAe;IACf,cAAc;IACd,WAAW;IACX,OAAO;IACP,YAAY;IACZ,UAAU;IACV,eAAe;IACf,eAAe;IACf,SAAS;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAsB,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAExG,MAAM,UAAU,cAAc,CAAC,GAAiB;IAC9C,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,KAAK,GAAU,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1G,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YAC1B,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACd,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;YACxB,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;gBACxB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;gBACxB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC9B,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { findAll } from '../context.js';
2
+ import { defineSetupRule } from './rule.js';
3
+ /** `licenseKey: '<literal>'` — a string of licence length written in the source */
4
+ const LICENCE_LITERAL = /\blicenseKey\s*[:=]\s*(['"`])([^'"`\n]{24,})\1/g;
5
+ const PLACEHOLDER = /(?:YOUR|MY|INSERT|REPLACE|TODO|XXX|PLACEHOLDER|LICEN[CS]E[_-]?KEY)/i;
6
+ /** The licence key is read from the environment or configuration, not written into the code */
7
+ export default defineSetupRule({
8
+ id: 'setup/licence-literal',
9
+ docs: 'getting-started-license-key',
10
+ check(ctx) {
11
+ return findAll(ctx.sources, LICENCE_LITERAL)
12
+ .filter((found) => !PLACEHOLDER.test(found.match[2]))
13
+ .map((found) => ({
14
+ severity: 'error',
15
+ message: 'The AdapTable licence key is written as a string literal in the source.',
16
+ fix: 'Read it from the environment or build configuration (e.g. `licenseKey: process.env.ADAPTABLE_LICENSE_KEY`, `import.meta.env.VITE_ADAPTABLE_LICENSE_KEY`) and keep it out of version control.',
17
+ file: found.file,
18
+ line: found.line,
19
+ column: found.column,
20
+ }));
21
+ },
22
+ });
23
+ //# sourceMappingURL=licence-literal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"licence-literal.js","sourceRoot":"","sources":["../../../../src/core/setup/rules/licence-literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,mFAAmF;AACnF,MAAM,eAAe,GAAG,iDAAiD,CAAC;AAC1E,MAAM,WAAW,GAAG,qEAAqE,CAAC;AAE1F,+FAA+F;AAC/F,eAAe,eAAe,CAAC;IAC7B,EAAE,EAAE,uBAAuB;IAC3B,IAAI,EAAE,6BAA6B;IACnC,KAAK,CAAC,GAAG;QACP,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC;aACzC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACpD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,QAAQ,EAAE,OAAgB;YAC1B,OAAO,EAAE,yEAAyE;YAClF,GAAG,EAAE,8LAA8L;YACnM,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC,CAAC;IACR,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { asArray, isObj } from '../../state/expressions.js';
2
+ import { findAll } from '../context.js';
3
+ import { defineSetupRule } from './rule.js';
4
+ const REGISTER = /\bModuleRegistry\.registerModules\s*\(/g;
5
+ const ALL_MODULE = /\bAll(?:Enterprise|Community)Module\b/g;
6
+ const COMMUNITY_ONLY = /\bAllCommunityModule\b/;
7
+ /** State features → the AG Grid Enterprise module they need, for an explicit module list */
8
+ function featuresNeeded(state, columnDefs) {
9
+ const needed = new Set();
10
+ const s = isObj(state) ? state : {};
11
+ for (const layout of asArray(isObj(s.Layout) ? s.Layout.Layouts : undefined)) {
12
+ if (!isObj(layout)) {
13
+ continue;
14
+ }
15
+ if (layout.RowGroupedColumns !== undefined || layout.PivotGroupedColumns !== undefined) {
16
+ needed.add('RowGroupingModule');
17
+ }
18
+ if (layout.PivotColumns !== undefined) {
19
+ needed.add('PivotModule');
20
+ }
21
+ if (layout.TableAggregationColumns !== undefined || layout.PivotAggregationColumns !== undefined) {
22
+ needed.add('RowGroupingModule');
23
+ }
24
+ }
25
+ if (s.Export !== undefined) {
26
+ needed.add('ExcelExportModule');
27
+ }
28
+ if (s.Charting !== undefined) {
29
+ needed.add('IntegratedChartsModule');
30
+ }
31
+ for (const def of asArray(columnDefs)) {
32
+ if (isObj(def) && (def.rowGroup || def.enableRowGroup)) {
33
+ needed.add('RowGroupingModule');
34
+ }
35
+ if (isObj(def) && (def.pivot || def.enablePivot)) {
36
+ needed.add('PivotModule');
37
+ }
38
+ }
39
+ return [...needed].sort();
40
+ }
41
+ /** AG Grid modules are registered: `AllEnterpriseModule`, or an explicit list that covers what the grid uses */
42
+ export default defineSetupRule({
43
+ id: 'setup/modules',
44
+ docs: 'getting-started-installation',
45
+ check(ctx) {
46
+ const registrations = findAll(ctx.sources, REGISTER);
47
+ const allModules = findAll(ctx.sources, ALL_MODULE);
48
+ if (!registrations.length && !allModules.length) {
49
+ return [
50
+ {
51
+ severity: 'error',
52
+ message: 'No AG Grid module registration was found (`ModuleRegistry.registerModules([...])`); AG Grid 33+ renders nothing without it.',
53
+ fix: "Register `AllEnterpriseModule` once at startup: `import { ModuleRegistry, AllEnterpriseModule } from 'ag-grid-enterprise'; ModuleRegistry.registerModules([AllEnterpriseModule]);`",
54
+ },
55
+ ];
56
+ }
57
+ const issues = [];
58
+ const community = ctx.sources.find((f) => COMMUNITY_ONLY.test(f.text) && !/\bAllEnterpriseModule\b/.test(f.text));
59
+ if (community && allModules.every((m) => m.match[0] === 'AllCommunityModule')) {
60
+ const where = allModules[0];
61
+ issues.push({
62
+ severity: 'error',
63
+ message: 'Only `AllCommunityModule` is registered; AdapTable needs the Enterprise modules.',
64
+ fix: 'Register `AllEnterpriseModule` from `ag-grid-enterprise` instead.',
65
+ file: where.file,
66
+ line: where.line,
67
+ column: where.column,
68
+ });
69
+ return issues;
70
+ }
71
+ if (!allModules.length && registrations.length) {
72
+ const needed = featuresNeeded(ctx.state?.value, ctx.columnDefs?.value);
73
+ const where = registrations[0];
74
+ issues.push({
75
+ severity: 'info',
76
+ message: `An explicit AG Grid module list is registered${needed.length ? `; the grid's State and columns need at least ${needed.join(', ')}` : ''}.`,
77
+ fix: 'Make sure the list covers every feature AdapTable drives (row grouping, pivoting, aggregation, Excel export, charts, menus, filters…), or register `AllEnterpriseModule`.',
78
+ file: where.file,
79
+ line: where.line,
80
+ column: where.column,
81
+ });
82
+ }
83
+ return issues;
84
+ },
85
+ });
86
+ //# sourceMappingURL=modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.js","sourceRoot":"","sources":["../../../../src/core/setup/rules/modules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { findAll } from '../context.js';
2
+ import { defineSetupRule } from './rule.js';
3
+ /** `adaptableOptions={{ … }}` / `gridOptions={{ … }}`: a new object on every render */
4
+ const INLINE_PROP = /\b(adaptableOptions|gridOptions)=\{\{/g;
5
+ export default defineSetupRule({
6
+ id: 'setup/react-stable-refs',
7
+ docs: 'getting-started-installation',
8
+ frameworks: ['react'],
9
+ check(ctx) {
10
+ return findAll(ctx.sources.filter((f) => /\.(tsx|jsx)$/.test(f.path)), INLINE_PROP).map((found) => ({
11
+ severity: 'warning',
12
+ message: `\`${found.match[1]}\` is an inline object literal in JSX: it is a new object on every render, so AdapTable re-initialises or ignores the change.`,
13
+ fix: `Declare \`${found.match[1]}\` once — at module level, or with \`useMemo(() => ({ … }), [])\` / \`useState\` — and pass the reference.`,
14
+ file: found.file,
15
+ line: found.line,
16
+ column: found.column,
17
+ }));
18
+ },
19
+ });
20
+ //# sourceMappingURL=react-stable-refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-stable-refs.js","sourceRoot":"","sources":["../../../../src/core/setup/rules/react-stable-refs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,uFAAuF;AACvF,MAAM,WAAW,GAAG,wCAAwC,CAAC;AAE7D,eAAe,eAAe,CAAC;IAC7B,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,8BAA8B;IACpC,UAAU,EAAE,CAAC,OAAO,CAAC;IACrB,KAAK,CAAC,GAAG;QACP,OAAO,OAAO,CACZ,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EACtD,WAAW,CACZ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChB,QAAQ,EAAE,SAAkB;YAC5B,OAAO,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,+HAA+H;YAC3J,GAAG,EAAE,aAAa,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,4GAA4G;YAC5I,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { findAll } from '../context.js';
2
+ import { defineSetupRule } from './rule.js';
3
+ const READY = /\badaptableReady\b|\bonAdaptableReady\b|\(adaptableReady\)|@adaptable-ready\b|Adaptable\.init\s*\([^)]*\)\s*\.then\b|await\s+Adaptable\.init\b/g;
4
+ const API_USE = /\badaptableApi\b/g;
5
+ /** The Adaptable API is taken from the ready hook, not assumed to exist at construction */
6
+ export default defineSetupRule({
7
+ id: 'setup/ready-hook',
8
+ docs: 'getting-started-adaptable-ready',
9
+ check(ctx) {
10
+ if (findAll(ctx.sources, READY).length) {
11
+ return [];
12
+ }
13
+ const uses = findAll(ctx.sources, API_USE);
14
+ const where = uses[0];
15
+ return [
16
+ {
17
+ severity: uses.length ? 'warning' : 'info',
18
+ message: uses.length
19
+ ? '`adaptableApi` is used but no ready hook was found; the API exists only after AdapTable has initialised.'
20
+ : 'No ready hook was found; the Adaptable API (`adaptableApi`) is delivered through it.',
21
+ fix: ctx.framework === 'react'
22
+ ? 'Pass `onAdaptableReady={({ adaptableApi }) => …}` to `<AdaptableReact>`.'
23
+ : ctx.framework === 'angular'
24
+ ? 'Bind `(adaptableReady)="onReady($event)"` on `<adaptable-angular-aggrid>`.'
25
+ : ctx.framework === 'vue'
26
+ ? 'Listen to `@adaptable-ready="onReady"` on `<AdaptableVue>`.'
27
+ : 'Use `const api = await Adaptable.init(adaptableOptions, gridOptions)` (or `.then(api => …)`).',
28
+ ...(where ? { file: where.file, line: where.line, column: where.column } : {}),
29
+ },
30
+ ];
31
+ },
32
+ });
33
+ //# sourceMappingURL=ready-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ready-hook.js","sourceRoot":"","sources":["../../../../src/core/setup/rules/ready-hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,KAAK,GAAG,iJAAiJ,CAAC;AAChK,MAAM,OAAO,GAAG,mBAAmB,CAAC;AAEpC,2FAA2F;AAC3F,eAAe,eAAe,CAAC;IAC7B,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,iCAAiC;IACvC,KAAK,CAAC,GAAG;QACP,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO;YACL;gBACE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;gBAC1C,OAAO,EAAE,IAAI,CAAC,MAAM;oBAClB,CAAC,CAAC,0GAA0G;oBAC5G,CAAC,CAAC,sFAAsF;gBAC1F,GAAG,EACD,GAAG,CAAC,SAAS,KAAK,OAAO;oBACvB,CAAC,CAAC,0EAA0E;oBAC5E,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS;wBAC3B,CAAC,CAAC,4EAA4E;wBAC9E,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,KAAK;4BACvB,CAAC,CAAC,6DAA6D;4BAC/D,CAAC,CAAC,+FAA+F;gBACzG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/E;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { columnsFromInput } from '../../state/columns.js';
2
+ import { defineSetupRule, positionOf } from './rule.js';
3
+ /** `adaptableId` and `primaryKey` are set, and `primaryKey` names a column when the columns are visible */
4
+ export default defineSetupRule({
5
+ id: 'setup/required-options',
6
+ docs: 'technical-reference-adaptable-options',
7
+ check(ctx) {
8
+ const options = ctx.options?.value;
9
+ if (!options || typeof options !== 'object' || Array.isArray(options)) {
10
+ return [];
11
+ }
12
+ const issues = [];
13
+ const root = positionOf(ctx.options, '');
14
+ for (const key of ['adaptableId', 'primaryKey']) {
15
+ const value = options[key];
16
+ if (typeof value !== 'string' || !value) {
17
+ issues.push({
18
+ severity: 'error',
19
+ path: key,
20
+ message: `Adaptable Options have no \`${key}\`${value === null ? ' that can be read statically' : ''}.`,
21
+ fix: key === 'primaryKey' ? 'Set `primaryKey` to the column id that uniquely identifies a row.' : 'Set `adaptableId` to a stable name; it keys persisted State and licence checks.',
22
+ ...(root ?? {}),
23
+ });
24
+ }
25
+ }
26
+ const primaryKey = options.primaryKey;
27
+ if (typeof primaryKey === 'string' && primaryKey && Array.isArray(ctx.columnDefs?.value)) {
28
+ const ids = columnsFromInput(ctx.columnDefs.value).map((c) => c.id);
29
+ if (ids.length && !ids.includes(primaryKey)) {
30
+ const cased = ids.find((id) => id.toLowerCase() === primaryKey.toLowerCase());
31
+ issues.push({
32
+ severity: 'error',
33
+ path: 'primaryKey',
34
+ message: `\`primaryKey: "${primaryKey}"\` does not match any column (${ids.slice(0, 8).map((id) => `"${id}"`).join(', ')}${ids.length > 8 ? ', …' : ''}).`,
35
+ fix: cased ? `Use "${cased}" — column ids are case-sensitive.` : 'Use a column\'s `colId` (or `field`), or add the column.',
36
+ ...(positionOf(ctx.options, 'primaryKey') ?? {}),
37
+ });
38
+ }
39
+ }
40
+ return issues;
41
+ },
42
+ });
43
+ //# sourceMappingURL=required-options.js.map