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