@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.
- package/README.md +3 -1
- 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 +28 -10
- 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 +7 -0
- package/dist/bin.js.map +1 -1
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -1
- 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 +9 -3
- package/dist/core/capabilities.js.map +1 -1
- 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 +1 -1
- package/dist/core/compat/capabilities.js.map +1 -1
- package/dist/core/context/capabilities.js +1 -1
- package/dist/core/context/capabilities.js.map +1 -1
- 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/cache.js +1 -1
- package/dist/core/docs/capabilities.js +1 -5
- package/dist/core/docs/capabilities.js.map +1 -1
- package/dist/core/docs/hosts.js +2 -2
- package/dist/core/docs/hosts.js.map +1 -1
- 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/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 +2 -1
- package/dist/core/packages/cache.js.map +1 -1
- package/dist/core/register.js +8 -0
- package/dist/core/register.js.map +1 -1
- 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 +349 -83
- package/dist/core/state/type-check.js.map +1 -1
- package/dist/mcp/index.js +104 -16
- package/dist/mcp/index.js.map +1 -1
- 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 +11 -5
- package/dist/core/state/rules.js +0 -417
- package/dist/core/state/rules.js.map +0 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { asArray, isObj } from '../expressions.js';
|
|
2
|
+
import { defineRule } from './rule.js';
|
|
3
|
+
const TABLE_ONLY_KEYS = ['TableColumns', 'TableAggregationColumns', 'RowGroupedColumns'];
|
|
4
|
+
const PIVOT_ONLY_KEYS = ['PivotColumns', 'PivotAggregationColumns', 'PivotGroupedColumns', 'PivotExpandLevel'];
|
|
5
|
+
const PIVOT_FOR = {
|
|
6
|
+
RowGroupedColumns: 'PivotGroupedColumns',
|
|
7
|
+
TableAggregationColumns: 'PivotAggregationColumns',
|
|
8
|
+
TableColumns: 'PivotColumns',
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Discriminated unions the compiler reports poorly: a Layout is a Table Layout
|
|
12
|
+
* (`TableColumns`) or a Pivot Layout (`PivotColumns`), and column sizing takes
|
|
13
|
+
* `Width` or `Flex`.
|
|
14
|
+
*/
|
|
15
|
+
export default defineRule({
|
|
16
|
+
id: 'type/discriminator',
|
|
17
|
+
docs: 'handbook-layouts',
|
|
18
|
+
check({ state }) {
|
|
19
|
+
const issues = [];
|
|
20
|
+
asArray(isObj(state.Layout) ? state.Layout.Layouts : undefined).forEach((layout, i) => {
|
|
21
|
+
const path = `Layout.Layouts[${i}]`;
|
|
22
|
+
if (!isObj(layout)) {
|
|
23
|
+
issues.push({ path, severity: 'error', message: 'Layout must be an object.' });
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const isTable = layout.TableColumns !== undefined;
|
|
27
|
+
const isPivot = layout.PivotColumns !== undefined;
|
|
28
|
+
if (isTable && isPivot) {
|
|
29
|
+
issues.push({
|
|
30
|
+
path,
|
|
31
|
+
severity: 'error',
|
|
32
|
+
message: 'A Layout is either a Table Layout (`TableColumns`) or a Pivot Layout (`PivotColumns`), not both.',
|
|
33
|
+
fix: 'Remove `PivotColumns` (and the other Pivot* properties) for a Table Layout, or `TableColumns` for a Pivot Layout.',
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
else if (!isTable && !isPivot) {
|
|
37
|
+
issues.push({
|
|
38
|
+
path,
|
|
39
|
+
severity: 'error',
|
|
40
|
+
message: 'Layout needs `TableColumns` (Table Layout) or `PivotColumns` (Pivot Layout; use [] to show only aggregations).',
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
for (const key of (isTable ? PIVOT_ONLY_KEYS : TABLE_ONLY_KEYS).filter((k) => layout[k] !== undefined)) {
|
|
45
|
+
issues.push({
|
|
46
|
+
path: `${path}.${key}`,
|
|
47
|
+
severity: 'error',
|
|
48
|
+
at: 'key',
|
|
49
|
+
message: isTable
|
|
50
|
+
? `\`${key}\` belongs to Pivot Layouts; this is a Table Layout.`
|
|
51
|
+
: `\`${key}\` belongs to Table Layouts; in Pivot Layouts use \`${PIVOT_FOR[key]}\`.`,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (isObj(layout.ColumnSizing)) {
|
|
56
|
+
for (const [columnId, sizing] of Object.entries(layout.ColumnSizing)) {
|
|
57
|
+
if (isObj(sizing) && sizing.Width !== undefined && sizing.Flex !== undefined) {
|
|
58
|
+
issues.push({
|
|
59
|
+
path: `${path}.ColumnSizing.${columnId}`,
|
|
60
|
+
severity: 'error',
|
|
61
|
+
message: 'Column sizing takes `Width` or `Flex`, not both.',
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return issues;
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=type-discriminator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-discriminator.js","sourceRoot":"","sources":["../../../../src/core/state/rules/type-discriminator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shape layer of `check state` and `check setup`'s `options-shape` (plan §8.4
|
|
3
|
+
* layer 1, §8.6): the extracted value is type-checked against `InitialState`,
|
|
4
|
+
* `AdaptablePersistentState` or `AdaptableOptions` from the `types` entry of
|
|
5
|
+
* the package for the *checked* major (plan §7.3 — the types package, resolved
|
|
6
|
+
* by the caller through `packages/resolve.ts`), the way the carried MCP did:
|
|
7
|
+
* a generated check file importing the type, compiled with the TypeScript
|
|
8
|
+
* compiler API, diagnostics mapped back to paths.
|
|
9
|
+
*
|
|
10
|
+
* Positions: the generated file's positions never reach the caller. Each
|
|
11
|
+
* diagnostic is mapped to a path in the same syntax the extractor's line map
|
|
12
|
+
* uses, and the line map (when the value came from a source file) gives the
|
|
13
|
+
* `{ file, line, column }` of that path — the key position for unknown keys,
|
|
14
|
+
* the value position otherwise. Diagnostics at or under an `unverifiable` path
|
|
15
|
+
* are dropped: the extractor stubbed those values as `null`, so the compiler's
|
|
16
|
+
* complaint there is about the stub, not the user's code.
|
|
17
|
+
*/
|
|
1
18
|
import { existsSync, statSync } from 'node:fs';
|
|
2
19
|
import { createRequire } from 'node:module';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
}
|
|
20
|
+
import { join, resolve } from 'node:path';
|
|
21
|
+
import { childPath } from '../extract/line-map.js';
|
|
22
|
+
import { describeSuggestions, suggestKeys } from './did-you-mean.js';
|
|
23
|
+
const CHECK_FILE = '__adaptable_mcp_shape_check__.ts';
|
|
22
24
|
let typescript;
|
|
23
25
|
const loadTypeScript = () => (typescript ??= import('typescript').then((m) => m.default));
|
|
24
|
-
/** Parsed declaration files, shared across calls (AdapTable's types are large) */
|
|
26
|
+
/** Parsed declaration files, shared across calls and programs (AdapTable's types are large) */
|
|
25
27
|
const sourceFiles = new Map();
|
|
28
|
+
/** Last program per types location, reused as `oldProgram` (helps the long-lived MCP process) */
|
|
29
|
+
const programs = new Map();
|
|
26
30
|
const OPTIONS = {
|
|
27
31
|
strict: true,
|
|
28
32
|
noEmit: true,
|
|
29
33
|
skipLibCheck: true,
|
|
30
34
|
types: [],
|
|
31
35
|
};
|
|
32
|
-
/**
|
|
36
|
+
/** `<dir>/types` when `types.d.ts` (package) or `types.ts` (source) exists there */
|
|
37
|
+
function typesModule(location) {
|
|
38
|
+
const file = join(location.dir, 'types');
|
|
39
|
+
const ext = location.kind === 'source' ? '.ts' : '.d.ts';
|
|
40
|
+
return existsSync(file + ext) ? file : undefined;
|
|
41
|
+
}
|
|
42
|
+
function agGridTypesResolve(dir) {
|
|
43
|
+
const require = createRequire(join(resolve(dir), 'package.json'));
|
|
44
|
+
return ['ag-grid-enterprise', 'ag-grid-community'].some((name) => {
|
|
45
|
+
try {
|
|
46
|
+
require.resolve(name);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* A program over one generated file plus the types it imports. Declaration files are
|
|
56
|
+
* cached by mtime across calls; the previous program for the same types folder and
|
|
57
|
+
* root file is reused (helps the long-lived MCP process).
|
|
58
|
+
*/
|
|
59
|
+
function createProgramFor(ts, typesDir, rootFile, text) {
|
|
60
|
+
const host = ts.createCompilerHost(OPTIONS, true);
|
|
61
|
+
const getSourceFile = host.getSourceFile.bind(host);
|
|
62
|
+
host.getSourceFile = (fileName, languageVersion, onError) => {
|
|
63
|
+
if (fileName === rootFile) {
|
|
64
|
+
return ts.createSourceFile(fileName, text, languageVersion, true);
|
|
65
|
+
}
|
|
66
|
+
let mtime = 0;
|
|
67
|
+
try {
|
|
68
|
+
mtime = statSync(fileName).mtimeMs;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// missing files are reported by the compiler
|
|
72
|
+
}
|
|
73
|
+
const cached = sourceFiles.get(fileName);
|
|
74
|
+
if (cached && cached.mtime === mtime) {
|
|
75
|
+
return cached.file;
|
|
76
|
+
}
|
|
77
|
+
const file = getSourceFile(fileName, languageVersion, onError);
|
|
78
|
+
if (file) {
|
|
79
|
+
sourceFiles.set(fileName, { mtime, file });
|
|
80
|
+
}
|
|
81
|
+
return file;
|
|
82
|
+
};
|
|
83
|
+
const fileExists = host.fileExists.bind(host);
|
|
84
|
+
host.fileExists = (fileName) => fileName === rootFile || fileExists(fileName);
|
|
85
|
+
const key = `${typesDir}\n${rootFile}`;
|
|
86
|
+
const program = ts.createProgram({
|
|
87
|
+
rootNames: [rootFile],
|
|
88
|
+
options: {
|
|
89
|
+
...OPTIONS,
|
|
90
|
+
target: ts.ScriptTarget.ES2020,
|
|
91
|
+
module: ts.ModuleKind.ESNext,
|
|
92
|
+
moduleResolution: ts.ModuleResolutionKind.Bundler,
|
|
93
|
+
jsx: ts.JsxEmit.ReactJSX,
|
|
94
|
+
},
|
|
95
|
+
host,
|
|
96
|
+
oldProgram: programs.get(key),
|
|
97
|
+
});
|
|
98
|
+
programs.set(key, program);
|
|
99
|
+
return { program, sf: program.getSourceFile(rootFile) };
|
|
100
|
+
}
|
|
101
|
+
const NAMES_FILE = '__adaptable_mcp_names__.ts';
|
|
102
|
+
/**
|
|
103
|
+
* Reads the keys of object types and the members of string-literal unions from the
|
|
104
|
+
* types of the checked major (e.g. `InitialState`, `AdaptableDashboardToolbar`).
|
|
105
|
+
* A name the major does not export is `undefined`; nothing throws.
|
|
106
|
+
*/
|
|
107
|
+
export async function readTypeNames(types, typeNames) {
|
|
108
|
+
const out = {};
|
|
109
|
+
const module = typesModule(types);
|
|
110
|
+
if (!module) {
|
|
111
|
+
return out;
|
|
112
|
+
}
|
|
113
|
+
const ts = await loadTypeScript();
|
|
114
|
+
const file = join(types.dir, NAMES_FILE);
|
|
115
|
+
const text = typeNames
|
|
116
|
+
.map((name, i) => `import type { ${name} as T${i} } from ${JSON.stringify(module)};\nexport type N${i} = T${i};`)
|
|
117
|
+
.join('\n');
|
|
118
|
+
const { program, sf } = createProgramFor(ts, types.dir, file, `${text}\n`);
|
|
119
|
+
const checker = program.getTypeChecker();
|
|
120
|
+
sf.statements.filter(ts.isTypeAliasDeclaration).forEach((alias, i) => {
|
|
121
|
+
const type = checker.getTypeAtLocation(alias.name);
|
|
122
|
+
// a name the major does not export resolves to the error type (flagged Any)
|
|
123
|
+
if (type.flags & ts.TypeFlags.Any) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (type.isUnion()) {
|
|
127
|
+
const literals = type.types.filter((t) => t.isStringLiteral()).map((t) => t.value);
|
|
128
|
+
if (literals.length) {
|
|
129
|
+
out[typeNames[i]] = literals;
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const properties = checker.getPropertiesOfType(type).map((p) => p.name);
|
|
134
|
+
if (properties.length) {
|
|
135
|
+
out[typeNames[i]] = properties;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
return out;
|
|
139
|
+
}
|
|
140
|
+
/** Path of the property that contains `pos` in the generated literal (same syntax as the extractor's line map) */
|
|
33
141
|
function pathAt(ts, sf, root, pos) {
|
|
34
142
|
let path = '';
|
|
35
143
|
let node = root;
|
|
@@ -38,7 +146,7 @@ function pathAt(ts, sf, root, pos) {
|
|
|
38
146
|
if (ts.isObjectLiteralExpression(node)) {
|
|
39
147
|
const prop = node.properties.find((p) => p.getStart(sf) <= pos && pos < p.end);
|
|
40
148
|
if (prop?.name && (ts.isStringLiteral(prop.name) || ts.isIdentifier(prop.name))) {
|
|
41
|
-
path
|
|
149
|
+
path = childPath(path, prop.name.text);
|
|
42
150
|
next = ts.isPropertyAssignment(prop) ? prop.initializer : undefined;
|
|
43
151
|
}
|
|
44
152
|
}
|
|
@@ -55,88 +163,246 @@ function pathAt(ts, sf, root, pos) {
|
|
|
55
163
|
node = next;
|
|
56
164
|
}
|
|
57
165
|
}
|
|
166
|
+
/** The generated file quotes every key (`JSON.stringify`), so the compiler names them as `'"Key"'` */
|
|
167
|
+
const unquote = (key) => key.replace(/^"(.*)"$/, '$1');
|
|
58
168
|
function messageOf(ts, diagnostic) {
|
|
59
169
|
const lines = ts
|
|
60
170
|
.flattenDiagnosticMessageText(diagnostic.messageText, '\n')
|
|
61
171
|
.split('\n')
|
|
62
172
|
.map((l) => l.trim())
|
|
63
173
|
.filter(Boolean);
|
|
64
|
-
|
|
174
|
+
let message = lines.length > 2 ? `${lines[0]} ${lines[lines.length - 1]}` : lines.join(' ');
|
|
175
|
+
message = message
|
|
176
|
+
.replace(/'"([^"']+)"'/g, "'$1'")
|
|
177
|
+
.replace(/^Property '([^']+)' is missing in type '.*' but required in type '([^']+)'\.$/, "Property '$1' is required in type '$2' but missing.")
|
|
178
|
+
.replace(/^Type '.*' is missing the following properties from type '([^']+)': (.*)$/, "Properties required in type '$1' are missing: $2.");
|
|
65
179
|
return message.length > 400 ? `${message.slice(0, 400)}…` : message;
|
|
66
180
|
}
|
|
67
|
-
/**
|
|
68
|
-
|
|
69
|
-
|
|
181
|
+
/** TS diagnostic codes → shape issue codes */
|
|
182
|
+
const UNKNOWN_KEY_CODES = new Set([2353, 2561, 2322 /* when the message is an excess-property one */]);
|
|
183
|
+
const MISSING_PROPERTY_CODES = new Set([2741, 2739, 2740, 2345]);
|
|
184
|
+
const TYPE_MISMATCH_CODES = new Set([2322, 2820, 2352, 2367]);
|
|
185
|
+
const UNKNOWN_KEY_MESSAGE = /'([^']+)' does not exist in type/;
|
|
186
|
+
function classify(diagnostic, message) {
|
|
187
|
+
const unknownKey = UNKNOWN_KEY_MESSAGE.exec(message);
|
|
188
|
+
if (unknownKey && UNKNOWN_KEY_CODES.has(diagnostic.code)) {
|
|
189
|
+
return { code: 'shape/unknown-key', key: unquote(unknownKey[1]) };
|
|
190
|
+
}
|
|
191
|
+
if (MISSING_PROPERTY_CODES.has(diagnostic.code) || /is required in type '[^']+' but missing|are missing:/.test(message)) {
|
|
192
|
+
return { code: 'shape/missing-property' };
|
|
193
|
+
}
|
|
194
|
+
if (TYPE_MISMATCH_CODES.has(diagnostic.code)) {
|
|
195
|
+
return { code: 'shape/type-mismatch' };
|
|
196
|
+
}
|
|
197
|
+
return { code: 'shape/invalid' };
|
|
198
|
+
}
|
|
199
|
+
/** Property names the contextual type of an object literal accepts (union members merged) */
|
|
200
|
+
function acceptedKeys(ts, checker, literal) {
|
|
201
|
+
const type = checker.getContextualType(literal);
|
|
202
|
+
if (!type) {
|
|
203
|
+
return [];
|
|
204
|
+
}
|
|
205
|
+
const types = type.isUnion() ? type.types : [type];
|
|
206
|
+
const names = new Set();
|
|
207
|
+
for (const member of types) {
|
|
208
|
+
for (const property of checker.getPropertiesOfType(member)) {
|
|
209
|
+
// `PivotColumns?: never` marks a key as *forbidden* in that union member, not accepted
|
|
210
|
+
const declaration = property.valueDeclaration;
|
|
211
|
+
if (declaration && ts.isPropertySignature(declaration) && declaration.type?.kind === ts.SyntaxKind.NeverKeyword) {
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
names.add(property.name);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return [...names];
|
|
218
|
+
}
|
|
219
|
+
function isUnder(path, parent) {
|
|
220
|
+
return path === parent || path.startsWith(`${parent}.`) || path.startsWith(`${parent}[`);
|
|
70
221
|
}
|
|
71
222
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
223
|
+
* The generated file up to the checked literal. A persisted State is what the runtime
|
|
224
|
+
* stored: each section object carries the metadata `addUuidsToInitialState` writes
|
|
225
|
+
* (`Uuid`, `AdaptableVersion`, `Source`), which the published types do not declare on
|
|
226
|
+
* `BaseState`; the checked type allows it (and keeps every section required, as the
|
|
227
|
+
* runtime writes them all) so a `getPersistentState()` export is judged on its content.
|
|
74
228
|
*/
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
229
|
+
function checkPrefix(type, module) {
|
|
230
|
+
if (type !== 'AdaptablePersistentState') {
|
|
231
|
+
return `import type { ${type} } from ${JSON.stringify(module)};\nexport const value: ${type} = `;
|
|
232
|
+
}
|
|
233
|
+
// the alias keeps the diagnostics naming `AdaptablePersistentState`
|
|
234
|
+
return (`import type { ${type} as Persisted } from ${JSON.stringify(module)};\n` +
|
|
235
|
+
`type RuntimeMeta = { Uuid?: string; AdaptableVersion?: string; Source?: string };\n` +
|
|
236
|
+
`type ${type} = { [K in keyof Persisted]: Persisted[K] & RuntimeMeta };\n` +
|
|
237
|
+
`export const value: ${type} = `);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Type-checks `value` as `type` against the types of `types`. Never throws for a
|
|
241
|
+
* shape problem; `ok: false` only when the types cannot be loaded.
|
|
242
|
+
*/
|
|
243
|
+
export async function checkShape(input) {
|
|
244
|
+
const module = typesModule(input.types);
|
|
245
|
+
if (!module) {
|
|
246
|
+
const where = input.types.kind === 'source' ? `${input.types.dir}/types.ts` : `${input.types.dir}/types.d.ts`;
|
|
247
|
+
return { ok: false, reason: `The types entry ${where} does not exist; the package layout is not the one the check expects.` };
|
|
248
|
+
}
|
|
249
|
+
const ts = await loadTypeScript();
|
|
250
|
+
const checkFile = join(input.types.dir, CHECK_FILE);
|
|
251
|
+
const prefix = checkPrefix(input.type, module);
|
|
252
|
+
const text = `${prefix}${JSON.stringify(input.value, null, 2)};\n`;
|
|
253
|
+
const { program, sf } = createProgramFor(ts, input.types.dir, checkFile, text);
|
|
254
|
+
const diagnostics = [...program.getSyntacticDiagnostics(sf), ...program.getSemanticDiagnostics(sf)];
|
|
255
|
+
if (diagnostics.some((d) => d.code === 2307 || (d.start ?? 0) < prefix.indexOf('export'))) {
|
|
78
256
|
return {
|
|
79
257
|
ok: false,
|
|
80
|
-
reason:
|
|
258
|
+
reason: `Could not load ${input.type} from ${module}: ${diagnostics.map((d) => messageOf(ts, d)).join('; ')}`,
|
|
81
259
|
};
|
|
82
260
|
}
|
|
83
|
-
const
|
|
84
|
-
const
|
|
85
|
-
const
|
|
86
|
-
const
|
|
87
|
-
const
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
261
|
+
const declaration = sf.statements.filter(ts.isVariableStatement).flatMap((s) => s.declarationList.declarations)[0];
|
|
262
|
+
const root = declaration?.initializer;
|
|
263
|
+
const checker = program.getTypeChecker();
|
|
264
|
+
const area = input.type === 'AdaptableOptions' ? 'options' : 'state';
|
|
265
|
+
const unverifiablePaths = (input.unverifiable ?? []).map((u) => u.path);
|
|
266
|
+
const issues = [];
|
|
267
|
+
const suppressed = [];
|
|
268
|
+
for (const diagnostic of diagnostics) {
|
|
269
|
+
const message = messageOf(ts, diagnostic);
|
|
270
|
+
const { code, key } = classify(diagnostic, message);
|
|
271
|
+
// an unknown key is reported at the key's own path (the compiler usually positions it there already)
|
|
272
|
+
let path = root && diagnostic.start !== undefined ? pathAt(ts, sf, root, diagnostic.start) : '';
|
|
273
|
+
if (code === 'shape/unknown-key' && key && path !== key && !path.endsWith(`.${key}`)) {
|
|
274
|
+
path = childPath(path, key);
|
|
92
275
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
276
|
+
// a diagnostic at or under a stubbed value is about the stub; so is one about `null` on a container holding stubs
|
|
277
|
+
// (the compiler elaborates `Tags: [null]` to the enclosing array or object)
|
|
278
|
+
if (unverifiablePaths.some((u) => isUnder(path, u) || (isUnder(u, path) && /'null'|\bnull\b/.test(message)))) {
|
|
279
|
+
suppressed.push({ path, message });
|
|
280
|
+
continue;
|
|
96
281
|
}
|
|
97
|
-
|
|
98
|
-
|
|
282
|
+
const issue = { code, severity: 'error', path, message };
|
|
283
|
+
if (code === 'shape/unknown-key' && key) {
|
|
284
|
+
issue.key = key;
|
|
285
|
+
const literal = deepestObjectLiteral(ts, sf, root, diagnostic.start);
|
|
286
|
+
const accepted = literal ? acceptedKeys(ts, checker, literal) : [];
|
|
287
|
+
const suggestions = suggestKeys(key, path, accepted, input.renames ?? [], area);
|
|
288
|
+
if (suggestions.length) {
|
|
289
|
+
issue.suggestions = suggestions;
|
|
290
|
+
issue.fix = describeSuggestions(key, suggestions);
|
|
291
|
+
}
|
|
292
|
+
const first = suggestions[0];
|
|
293
|
+
if (first?.kind === 'renamed') {
|
|
294
|
+
issue.docs = `#chg-${first.rename.anchor}`;
|
|
295
|
+
}
|
|
99
296
|
}
|
|
100
|
-
const
|
|
101
|
-
if (
|
|
102
|
-
|
|
297
|
+
const position = input.lineMap?.[path];
|
|
298
|
+
if (position) {
|
|
299
|
+
const at = code === 'shape/unknown-key' ? position.key ?? position.value : position.value;
|
|
300
|
+
issue.file = at.file;
|
|
301
|
+
issue.line = at.line;
|
|
302
|
+
issue.column = at.column;
|
|
103
303
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
304
|
+
issues.push(issue);
|
|
305
|
+
}
|
|
306
|
+
const version = input.types.kind === 'package' ? input.types.version : undefined;
|
|
307
|
+
return {
|
|
308
|
+
ok: true,
|
|
309
|
+
issues,
|
|
310
|
+
suppressed,
|
|
311
|
+
checked: {
|
|
312
|
+
types: version ? `types.d.ts@${version}` : `source@${input.types.dir}`,
|
|
313
|
+
...(version ? { version } : {}),
|
|
314
|
+
source: input.types.kind,
|
|
315
|
+
agGridTypes: agGridTypesResolve(input.types.dir),
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
/** Whether any key is acceptable in a literal of this type: `any`/`unknown`/`object`, an index signature, or no type at all */
|
|
320
|
+
function acceptsAnyKey(ts, checker, type) {
|
|
321
|
+
if (!type) {
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
const members = type.isUnion() ? type.types : [type];
|
|
325
|
+
return members.some((member) => (member.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown | ts.TypeFlags.NonPrimitive | ts.TypeFlags.TypeParameter)) !== 0 ||
|
|
326
|
+
checker.getIndexInfosOfType(member).length > 0);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Every property of `value` whose key the contextual type at that place does not
|
|
330
|
+
* declare — exhaustively, in one pass over the generated literal, independent of
|
|
331
|
+
* how the compiler elaborates its diagnostics (which stop at one problem per
|
|
332
|
+
* failing top-level property). A literal whose type accepts any key (`any`,
|
|
333
|
+
* index signatures, unresolved AG Grid types) contributes nothing; the children
|
|
334
|
+
* of an unknown key are not descended into.
|
|
335
|
+
*/
|
|
336
|
+
export async function findUnknownKeys(input) {
|
|
337
|
+
const module = typesModule(input.types);
|
|
338
|
+
if (!module) {
|
|
339
|
+
const where = input.types.kind === 'source' ? `${input.types.dir}/types.ts` : `${input.types.dir}/types.d.ts`;
|
|
340
|
+
return { ok: false, reason: `The types entry ${where} does not exist; the package layout is not the one the check expects.` };
|
|
341
|
+
}
|
|
342
|
+
const ts = await loadTypeScript();
|
|
343
|
+
const checkFile = join(input.types.dir, CHECK_FILE);
|
|
344
|
+
const prefix = checkPrefix(input.type, module);
|
|
345
|
+
const text = `${prefix}${JSON.stringify(input.value, null, 2)};\n`;
|
|
346
|
+
const { program, sf } = createProgramFor(ts, input.types.dir, checkFile, text);
|
|
347
|
+
const diagnostics = program.getSemanticDiagnostics(sf);
|
|
348
|
+
if (diagnostics.some((d) => d.code === 2307)) {
|
|
349
|
+
return { ok: false, reason: `Could not load ${input.type} from ${module}: ${diagnostics.map((d) => messageOf(ts, d)).join('; ')}` };
|
|
350
|
+
}
|
|
351
|
+
const root = sf.statements.filter(ts.isVariableStatement).flatMap((s) => s.declarationList.declarations)[0]?.initializer;
|
|
352
|
+
const checker = program.getTypeChecker();
|
|
353
|
+
const unknown = [];
|
|
354
|
+
const visit = (node, path) => {
|
|
355
|
+
if (ts.isObjectLiteralExpression(node)) {
|
|
356
|
+
const type = checker.getContextualType(node);
|
|
357
|
+
const accepted = acceptsAnyKey(ts, checker, type) ? undefined : acceptedKeys(ts, checker, node);
|
|
358
|
+
for (const property of node.properties) {
|
|
359
|
+
if (!ts.isPropertyAssignment(property) || !(ts.isStringLiteral(property.name) || ts.isIdentifier(property.name))) {
|
|
360
|
+
continue;
|
|
361
|
+
}
|
|
362
|
+
const key = property.name.text;
|
|
363
|
+
const child = childPath(path, key);
|
|
364
|
+
if (accepted && !accepted.includes(key)) {
|
|
365
|
+
unknown.push({ path: child, key, accepted, type: checker.typeToString(checker.getNonNullableType(type)).replace(/ & RuntimeMeta$/, '') });
|
|
366
|
+
continue;
|
|
367
|
+
}
|
|
368
|
+
visit(property.initializer, child);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
else if (ts.isArrayLiteralExpression(node)) {
|
|
372
|
+
node.elements.forEach((element, index) => visit(element, `${path}[${index}]`));
|
|
107
373
|
}
|
|
108
|
-
return file;
|
|
109
374
|
};
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
};
|
|
375
|
+
if (root) {
|
|
376
|
+
visit(root, '');
|
|
130
377
|
}
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
378
|
+
const version = input.types.kind === 'package' ? input.types.version : undefined;
|
|
379
|
+
return {
|
|
380
|
+
ok: true,
|
|
381
|
+
unknown,
|
|
382
|
+
checked: {
|
|
383
|
+
types: version ? `types.d.ts@${version}` : `source@${input.types.dir}`,
|
|
384
|
+
...(version ? { version } : {}),
|
|
385
|
+
source: input.types.kind,
|
|
386
|
+
agGridTypes: agGridTypesResolve(input.types.dir),
|
|
387
|
+
},
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
/** The innermost object literal containing `pos` — for a diagnostic at a key, the object that key was written in */
|
|
391
|
+
function deepestObjectLiteral(ts, sf, root, pos) {
|
|
392
|
+
let found;
|
|
393
|
+
const visit = (node) => {
|
|
394
|
+
if (node.getStart(sf) <= pos && pos < node.end) {
|
|
395
|
+
if (ts.isObjectLiteralExpression(node)) {
|
|
396
|
+
found = node;
|
|
397
|
+
}
|
|
398
|
+
ts.forEachChild(node, visit);
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
visit(root);
|
|
402
|
+
return found;
|
|
403
|
+
}
|
|
404
|
+
/** Type issues not already explained by a rule issue on the same object (or inside it); kept for A2.3 */
|
|
405
|
+
export function unexplainedShapeIssues(shapeIssues, ruleIssues) {
|
|
406
|
+
return shapeIssues.filter((t) => !ruleIssues.some((r) => r.path === t.path || r.path.startsWith(`${t.path}.`)));
|
|
141
407
|
}
|
|
142
408
|
//# sourceMappingURL=type-check.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-check.js","sourceRoot":"","sources":["../../../src/core/state/type-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQ1C,MAAM,UAAU,GAAG,kCAAkC,CAAC;AAEtD,gFAAgF;AAChF,SAAS,yBAAyB,CAAC,WAAmB;IACpD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAC1D,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;QAChE,OAAO,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvC,OAAO,UAAU,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,IAAI,UAA0C,CAAC;AAC/C,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAE1F,kFAAkF;AAClF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkD,CAAC;AAE9E,MAAM,OAAO,GAAuB;IAClC,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,YAAY,EAAE,IAAI;IAClB,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,yGAAyG;AACzG,SAAS,MAAM,CAAC,EAAa,EAAE,EAAiB,EAAE,IAAmB,EAAE,GAAW;IAChF,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,IAAI,GAAY,IAAI,CAAC;IACzB,SAAS,CAAC;QACR,IAAI,IAAyB,CAAC;QAC9B,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/E,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAChF,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC9C,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,IAAI,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACnF,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACf,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;gBACrB,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAa,EAAE,UAAyB;IACzD,MAAM,KAAK,GAAG,EAAE;SACb,4BAA4B,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1D,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9F,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AACtE,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,qBAAqB,CAAC,UAAwB,EAAE,UAAwB;IACtF,OAAO,UAAU,CAAC,MAAM,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CACrF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,KAAa;IACrE,MAAM,WAAW,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,+GAA+G;SACxH,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,qCAAqC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,wCAAwC,CAAC;IACxH,MAAM,IAAI,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;IAE7D,MAAM,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,aAAa,GAAG,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE;QAC1D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC;YACH,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACrC,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,IAAI,EAAE,CAAC;YACT,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE/E,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC;QAC/B,SAAS,EAAE,CAAC,SAAS,CAAC;QACtB,OAAO,EAAE;YACP,GAAG,OAAO;YACV,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;YAC9B,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM;YAC5B,gBAAgB,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO;YACjD,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ;SACzB;QACD,IAAI;KACL,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC1F,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,oCAAoC,WAAW,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAClH,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU;SAC9B,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC;SAC9B,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,WAAW,EAAE,WAAW,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QACxE,QAAQ,EAAE,OAAgB;QAC1B,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;KAC1B,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;AACpH,CAAC"}
|
|
1
|
+
{"version":3,"file":"type-check.js","sourceRoot":"","sources":["../../../src/core/state/type-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAmC,MAAM,mBAAmB,CAAC;AA0CtG,MAAM,UAAU,GAAG,kCAAkC,CAAC;AAEtD,IAAI,UAA0C,CAAC;AAC/C,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAE1F,+FAA+F;AAC/F,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkD,CAAC;AAC9E,iGAAiG;AACjG,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE/C,MAAM,OAAO,GAAuB;IAClC,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,YAAY,EAAE,IAAI;IAClB,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,oFAAoF;AACpF,SAAS,WAAW,CAAC,QAAuB;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;IACzD,OAAO,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC;YACH,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,EAAa,EAAE,QAAgB,EAAE,QAAgB,EAAE,IAAY;IACvF,MAAM,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,aAAa,GAAG,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE;QAC1D,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC;YACH,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACrC,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,IAAI,EAAE,CAAC;YACT,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE9E,MAAM,GAAG,GAAG,GAAG,QAAQ,KAAK,QAAQ,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC;QAC/B,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,OAAO,EAAE;YACP,GAAG,OAAO;YACV,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;YAC9B,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM;YAC5B,gBAAgB,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO;YACjD,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ;SACzB;QACD,IAAI;QACJ,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;KAC9B,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAE,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,GAAG,4BAA4B,CAAC;AAQhD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAoB,EAAE,SAA4B;IACpF,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,SAAS;SACnB,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,IAAI,QAAQ,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC;SAChH,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IACzC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACnE,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,4EAA4E;QAC5E,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAA6B,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9G,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;gBAC7B,OAAO;YACT,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxE,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kHAAkH;AAClH,SAAS,MAAM,CAAC,EAAa,EAAE,EAAiB,EAAE,IAAmB,EAAE,GAAW;IAChF,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,IAAI,GAAY,IAAI,CAAC;IACzB,SAAS,CAAC;QACR,IAAI,IAAyB,CAAC;QAC9B,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/E,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAChF,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,IAAI,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACnF,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACf,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;gBACrB,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,sGAAsG;AACtG,MAAM,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAEvE,SAAS,SAAS,CAAC,EAAa,EAAE,UAAyB;IACzD,MAAM,KAAK,GAAG,EAAE;SACb,4BAA4B,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1D,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5F,OAAO,GAAG,OAAO;SACd,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC;SAChC,OAAO,CAAC,+EAA+E,EAAE,qDAAqD,CAAC;SAC/I,OAAO,CAAC,2EAA2E,EAAE,mDAAmD,CAAC,CAAC;IAC7I,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AACtE,CAAC;AAED,8CAA8C;AAC9C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;AACvG,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACjE,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE9D,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAE/D,SAAS,QAAQ,CAAC,UAAyB,EAAE,OAAe;IAC1D,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,UAAU,IAAI,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,sDAAsD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxH,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;AACnC,CAAC;AAED,6FAA6F;AAC7F,SAAS,YAAY,CAAC,EAAa,EAAE,OAAuB,EAAE,OAAmC;IAC/F,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;QAC3B,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,uFAAuF;YACvF,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,CAAC;YAC9C,IAAI,WAAW,IAAI,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;gBAChH,SAAS;YACX,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,MAAc;IAC3C,OAAO,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;AAC3F,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,IAAmB,EAAE,MAAc;IACtD,IAAI,IAAI,KAAK,0BAA0B,EAAE,CAAC;QACxC,OAAO,iBAAiB,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,0BAA0B,IAAI,KAAK,CAAC;IACnG,CAAC;IACD,oEAAoE;IACpE,OAAO,CACL,iBAAiB,IAAI,wBAAwB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK;QACxE,qFAAqF;QACrF,QAAQ,IAAI,8DAA8D;QAC1E,uBAAuB,IAAI,KAAK,CACjC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAsB;IACrD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC;QAC9G,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,KAAK,uEAAuE,EAAE,CAAC;IAChI,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;IACnE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/E,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC1F,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,kBAAkB,KAAK,CAAC,IAAI,SAAS,MAAM,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC9G,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACnH,MAAM,IAAI,GAAG,WAAW,EAAE,WAAW,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IACzC,MAAM,IAAI,GAAsB,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACxF,MAAM,iBAAiB,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,UAAU,GAAwC,EAAE,CAAC;IAE3D,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,qGAAqG;QACrG,IAAI,IAAI,GAAG,IAAI,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,IAAI,IAAI,KAAK,mBAAmB,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;YACrF,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,kHAAkH;QAClH,4EAA4E;QAC5E,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7G,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACnC,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACrE,IAAI,IAAI,KAAK,mBAAmB,IAAI,GAAG,EAAE,CAAC;YACxC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;YAChB,MAAM,OAAO,GAAG,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAK,EAAE,UAAU,CAAC,KAAM,CAAC,CAAC;YACvE,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;YAChF,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;gBACvB,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;gBAChC,KAAK,CAAC,GAAG,GAAG,mBAAmB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,KAAK,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,GAAG,QAAQ,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,IAAI,KAAK,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC1F,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;YACrB,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;YACrB,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QAC3B,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM;QACN,UAAU;QACV,OAAO,EAAE;YACP,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;YACtE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;YACxB,WAAW,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;SACjD;KACF,CAAC;AACJ,CAAC;AAcD,+HAA+H;AAC/H,SAAS,aAAa,CAAC,EAAa,EAAE,OAAuB,EAAE,IAAyB;IACtF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,IAAI,CACjB,CAAC,MAAM,EAAE,EAAE,CACT,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC;QACzH,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CACjD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAmD;IACvF,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC;QAC9G,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,KAAK,uEAAuE,EAAE,CAAC;IAChI,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;IACnE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/E,MAAM,WAAW,GAAG,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IACvD,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,KAAK,CAAC,IAAI,SAAS,MAAM,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACtI,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;IACzH,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IACzC,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,IAAY,EAAQ,EAAE;QAClD,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAChG,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBACjH,SAAS;gBACX,CAAC;gBACD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACnC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAK,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC3I,SAAS;gBACX,CAAC;gBACD,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,IAAI,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC,CAAC;IACF,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO;QACP,OAAO,EAAE;YACP,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;YACtE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;YACxB,WAAW,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;SACjD;KACF,CAAC;AACJ,CAAC;AAED,oHAAoH;AACpH,SAAS,oBAAoB,CAAC,EAAa,EAAE,EAAiB,EAAE,IAAmB,EAAE,GAAW;IAC9F,IAAI,KAA6C,CAAC;IAClD,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/C,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;YACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,sBAAsB,CAA6B,WAAgB,EAAE,UAA8B;IACjH,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;AAClH,CAAC"}
|