@adaptabletools/adaptable-mcp 0.0.0-stage → 0.1.0-canary.1
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.
- package/README.md +90 -2
- package/data/manifest.snapshot.json +184 -0
- package/dist/bin.js +16 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/build-commands.js +200 -0
- package/dist/cli/build-commands.js.map +1 -0
- package/dist/cli/index.js +86 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/render.js +57 -0
- package/dist/cli/render.js.map +1 -0
- package/dist/core/capabilities.js +99 -0
- package/dist/core/capabilities.js.map +1 -0
- package/dist/core/compat/capabilities.js +127 -0
- package/dist/core/compat/capabilities.js.map +1 -0
- package/dist/core/compat/manifest.js +203 -0
- package/dist/core/compat/manifest.js.map +1 -0
- package/dist/core/constants.js +38 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/context/capabilities.js +106 -0
- package/dist/core/context/capabilities.js.map +1 -0
- package/dist/core/context/detect.js +370 -0
- package/dist/core/context/detect.js.map +1 -0
- package/dist/core/context/projects.js +159 -0
- package/dist/core/context/projects.js.map +1 -0
- package/dist/core/context/resolve.js +85 -0
- package/dist/core/context/resolve.js.map +1 -0
- package/dist/core/docs/areas.js +22 -0
- package/dist/core/docs/areas.js.map +1 -0
- package/dist/core/docs/cache.js +133 -0
- package/dist/core/docs/cache.js.map +1 -0
- package/dist/core/docs/capabilities.js +381 -0
- package/dist/core/docs/capabilities.js.map +1 -0
- package/dist/core/docs/corpus.js +114 -0
- package/dist/core/docs/corpus.js.map +1 -0
- package/dist/core/docs/demos.js +105 -0
- package/dist/core/docs/demos.js.map +1 -0
- package/dist/core/docs/get-page.js +182 -0
- package/dist/core/docs/get-page.js.map +1 -0
- package/dist/core/docs/hosts.js +74 -0
- package/dist/core/docs/hosts.js.map +1 -0
- package/dist/core/docs/search.js +92 -0
- package/dist/core/docs/search.js.map +1 -0
- package/dist/core/envelope.js +79 -0
- package/dist/core/envelope.js.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/packages/cache.js +138 -0
- package/dist/core/packages/cache.js.map +1 -0
- package/dist/core/packages/capabilities.js +95 -0
- package/dist/core/packages/capabilities.js.map +1 -0
- package/dist/core/packages/entry-types.js +13 -0
- package/dist/core/packages/entry-types.js.map +1 -0
- package/dist/core/packages/exec.js +37 -0
- package/dist/core/packages/exec.js.map +1 -0
- package/dist/core/packages/load-entry.js +123 -0
- package/dist/core/packages/load-entry.js.map +1 -0
- package/dist/core/packages/prepare.js +122 -0
- package/dist/core/packages/prepare.js.map +1 -0
- package/dist/core/packages/registry.js +75 -0
- package/dist/core/packages/registry.js.map +1 -0
- package/dist/core/packages/resolve.js +94 -0
- package/dist/core/packages/resolve.js.map +1 -0
- package/dist/core/packages/versions.js +71 -0
- package/dist/core/packages/versions.js.map +1 -0
- package/dist/core/ping.js +22 -0
- package/dist/core/ping.js.map +1 -0
- package/dist/core/register.js +10 -0
- package/dist/core/register.js.map +1 -0
- package/dist/core/state/rules.js +417 -0
- package/dist/core/state/rules.js.map +1 -0
- package/dist/core/state/type-check.js +142 -0
- package/dist/core/state/type-check.js.map +1 -0
- package/dist/mcp/index.js +21 -0
- package/dist/mcp/index.js.map +1 -0
- package/package.json +50 -4
|
@@ -0,0 +1,417 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/core/state/rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { existsSync, statSync } from 'node:fs';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
const CHECK_FILE = '__adaptable_mcp_state_check__.ts';
|
|
5
|
+
/** Module that exports `InitialState`, as an absolute path without extension */
|
|
6
|
+
function resolveInitialStateModule(projectPath) {
|
|
7
|
+
const sourceDir = process.env.ADAPTABLE_MCP_ADAPTABLE_SRC;
|
|
8
|
+
if (sourceDir) {
|
|
9
|
+
const file = join(sourceDir, 'src/AdaptableState/InitialState');
|
|
10
|
+
return existsSync(`${file}.ts`) ? file : undefined;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
const require = createRequire(join(projectPath, 'package.json'));
|
|
14
|
+
const packageDir = dirname(require.resolve('@adaptabletools/adaptable/package.json'));
|
|
15
|
+
const file = join(packageDir, 'types');
|
|
16
|
+
return existsSync(`${file}.d.ts`) ? file : undefined;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
let typescript;
|
|
23
|
+
const loadTypeScript = () => (typescript ??= import('typescript').then((m) => m.default));
|
|
24
|
+
/** Parsed declaration files, shared across calls (AdapTable's types are large) */
|
|
25
|
+
const sourceFiles = new Map();
|
|
26
|
+
const OPTIONS = {
|
|
27
|
+
strict: true,
|
|
28
|
+
noEmit: true,
|
|
29
|
+
skipLibCheck: true,
|
|
30
|
+
types: [],
|
|
31
|
+
};
|
|
32
|
+
/** Path of the state property that contains `pos`, e.g. `CalculatedColumn.CalculatedColumns[0].Query` */
|
|
33
|
+
function pathAt(ts, sf, root, pos) {
|
|
34
|
+
let path = '';
|
|
35
|
+
let node = root;
|
|
36
|
+
for (;;) {
|
|
37
|
+
let next;
|
|
38
|
+
if (ts.isObjectLiteralExpression(node)) {
|
|
39
|
+
const prop = node.properties.find((p) => p.getStart(sf) <= pos && pos < p.end);
|
|
40
|
+
if (prop?.name && (ts.isStringLiteral(prop.name) || ts.isIdentifier(prop.name))) {
|
|
41
|
+
path += `${path ? '.' : ''}${prop.name.text}`;
|
|
42
|
+
next = ts.isPropertyAssignment(prop) ? prop.initializer : undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else if (ts.isArrayLiteralExpression(node)) {
|
|
46
|
+
const index = node.elements.findIndex((e) => e.getStart(sf) <= pos && pos < e.end);
|
|
47
|
+
if (index >= 0) {
|
|
48
|
+
path += `[${index}]`;
|
|
49
|
+
next = node.elements[index];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (!next || next.getStart(sf) > pos) {
|
|
53
|
+
return path;
|
|
54
|
+
}
|
|
55
|
+
node = next;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function messageOf(ts, diagnostic) {
|
|
59
|
+
const lines = ts
|
|
60
|
+
.flattenDiagnosticMessageText(diagnostic.messageText, '\n')
|
|
61
|
+
.split('\n')
|
|
62
|
+
.map((l) => l.trim())
|
|
63
|
+
.filter(Boolean);
|
|
64
|
+
const message = lines.length > 2 ? `${lines[0]} ${lines[lines.length - 1]}` : lines.join(' ');
|
|
65
|
+
return message.length > 400 ? `${message.slice(0, 400)}…` : message;
|
|
66
|
+
}
|
|
67
|
+
/** Type issues not already explained by a rule issue on the same object (or inside it) */
|
|
68
|
+
export function unexplainedTypeIssues(typeIssues, ruleIssues) {
|
|
69
|
+
return typeIssues.filter((t) => !ruleIssues.some((r) => r.path === t.path || r.path.startsWith(`${t.path}.`)));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Type-checks a state object against `InitialState` from the project's AdapTable
|
|
73
|
+
* (the TypeScript a developer would get from `const initialState: InitialState = ...`).
|
|
74
|
+
*/
|
|
75
|
+
export async function typeCheckState(projectPath, state) {
|
|
76
|
+
const typesModule = resolveInitialStateModule(projectPath);
|
|
77
|
+
if (!typesModule) {
|
|
78
|
+
return {
|
|
79
|
+
ok: false,
|
|
80
|
+
reason: 'AdapTable type definitions (InitialState) not found in this project; install @adaptabletools/adaptable first.',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const ts = await loadTypeScript();
|
|
84
|
+
const checkFile = join(projectPath, CHECK_FILE);
|
|
85
|
+
const prefix = `import type { InitialState } from ${JSON.stringify(typesModule)};\nexport const state: InitialState = `;
|
|
86
|
+
const text = `${prefix}${JSON.stringify(state, null, 2)};\n`;
|
|
87
|
+
const host = ts.createCompilerHost(OPTIONS, true);
|
|
88
|
+
const getSourceFile = host.getSourceFile.bind(host);
|
|
89
|
+
host.getSourceFile = (fileName, languageVersion, onError) => {
|
|
90
|
+
if (fileName === checkFile) {
|
|
91
|
+
return ts.createSourceFile(fileName, text, languageVersion, true);
|
|
92
|
+
}
|
|
93
|
+
let mtime = 0;
|
|
94
|
+
try {
|
|
95
|
+
mtime = statSync(fileName).mtimeMs;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// missing files are reported by the compiler
|
|
99
|
+
}
|
|
100
|
+
const cached = sourceFiles.get(fileName);
|
|
101
|
+
if (cached && cached.mtime === mtime) {
|
|
102
|
+
return cached.file;
|
|
103
|
+
}
|
|
104
|
+
const file = getSourceFile(fileName, languageVersion, onError);
|
|
105
|
+
if (file) {
|
|
106
|
+
sourceFiles.set(fileName, { mtime, file });
|
|
107
|
+
}
|
|
108
|
+
return file;
|
|
109
|
+
};
|
|
110
|
+
const fileExists = host.fileExists.bind(host);
|
|
111
|
+
host.fileExists = (fileName) => fileName === checkFile || fileExists(fileName);
|
|
112
|
+
const program = ts.createProgram({
|
|
113
|
+
rootNames: [checkFile],
|
|
114
|
+
options: {
|
|
115
|
+
...OPTIONS,
|
|
116
|
+
target: ts.ScriptTarget.ES2020,
|
|
117
|
+
module: ts.ModuleKind.ESNext,
|
|
118
|
+
moduleResolution: ts.ModuleResolutionKind.Bundler,
|
|
119
|
+
jsx: ts.JsxEmit.ReactJSX,
|
|
120
|
+
},
|
|
121
|
+
host,
|
|
122
|
+
});
|
|
123
|
+
const sf = program.getSourceFile(checkFile);
|
|
124
|
+
const diagnostics = [...program.getSyntacticDiagnostics(sf), ...program.getSemanticDiagnostics(sf)];
|
|
125
|
+
if (diagnostics.some((d) => d.code === 2307 || (d.start ?? 0) < prefix.indexOf('export'))) {
|
|
126
|
+
return {
|
|
127
|
+
ok: false,
|
|
128
|
+
reason: `Could not load InitialState from ${typesModule}: ${diagnostics.map((d) => messageOf(ts, d)).join('; ')}`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const declaration = sf.statements
|
|
132
|
+
.filter(ts.isVariableStatement)
|
|
133
|
+
.flatMap((s) => s.declarationList.declarations)[0];
|
|
134
|
+
const root = declaration?.initializer;
|
|
135
|
+
const issues = diagnostics.map((d) => ({
|
|
136
|
+
path: root && d.start !== undefined ? pathAt(ts, sf, root, d.start) : '',
|
|
137
|
+
severity: 'error',
|
|
138
|
+
message: messageOf(ts, d),
|
|
139
|
+
}));
|
|
140
|
+
return { ok: true, issues, source: `${typesModule}${process.env.ADAPTABLE_MCP_ADAPTABLE_SRC ? '.ts' : '.d.ts'}` };
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=type-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-check.js","sourceRoot":"","sources":["../../../src/core/state/type-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP entry. A6.1 replaces this with the stdio server generated from the
|
|
3
|
+
* registry (plan §9); until then `adaptable mcp` fails with `NOT_FOUND` and
|
|
4
|
+
* exit 2 so a client configuration that points here reports a clear error
|
|
5
|
+
* instead of hanging.
|
|
6
|
+
*/
|
|
7
|
+
import { exitCodeFor } from '../core/index.js';
|
|
8
|
+
export async function runMcp(_argv, io) {
|
|
9
|
+
const envelope = {
|
|
10
|
+
schemaVersion: 1,
|
|
11
|
+
ok: false,
|
|
12
|
+
error: {
|
|
13
|
+
code: 'NOT_FOUND',
|
|
14
|
+
message: 'The MCP server is not available in this build of @adaptabletools/adaptable-mcp.',
|
|
15
|
+
hint: 'Use the `adaptable` CLI (`adaptable --help`), or upgrade to a version whose `adaptable --capabilities` lists MCP tools.',
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
io.stderr(`${JSON.stringify(envelope, null, 2)}\n`);
|
|
19
|
+
return exitCodeFor(envelope);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAO9D,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAe,EAAE,EAAS;IACrD,MAAM,QAAQ,GAAoB;QAChC,aAAa,EAAE,CAAC;QAChB,EAAE,EAAE,KAAK;QACT,KAAK,EAAE;YACL,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,iFAAiF;YAC1F,IAAI,EAAE,yHAAyH;SAChI;KACF,CAAC;IACF,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
|