@bilig/workbook 0.64.0 → 0.67.0
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 +23 -10
- package/dist/describe.d.ts +2 -0
- package/dist/describe.js +2 -0
- package/dist/describe.js.map +1 -1
- package/dist/feature-plugin.d.ts +91 -0
- package/dist/feature-plugin.js +351 -0
- package/dist/feature-plugin.js.map +1 -0
- package/dist/features.d.ts +2 -75
- package/dist/features.js +44 -98
- package/dist/features.js.map +1 -1
- package/dist/find.js +9 -1
- package/dist/find.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +2 -1
- package/dist/input.js +42 -25
- package/dist/input.js.map +1 -1
- package/dist/model.js +25 -6
- package/dist/model.js.map +1 -1
- package/dist/plan-data.js +67 -4
- package/dist/plan-data.js.map +1 -1
- package/dist/result.d.ts +2 -0
- package/dist/run.js +5 -1
- package/dist/run.js.map +1 -1
- package/dist/verify.js +2 -2
- package/dist/verify.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -102,7 +102,7 @@ The main API is intentionally small:
|
|
|
102
102
|
- descriptions: `describeModel`, `describeRef`, `describePlan`, `describePlanResult`, `describeRuntimeRequirements`, `checkRuntimeRequirements`, `checkRuntimeAdapter`, `describeRunResult`
|
|
103
103
|
- transport data: `isWorkbookRefData`, `toWorkbookRefData`, `collectWorkbookRefData`, `hydrateWorkbookRef`, `hydrateWorkbookRefs`, `toPlanData`, `isPlanData`, `checkPlanData`, `hydratePlanData`, `verifyPlanData`
|
|
104
104
|
- runtime handoff: `runWorkbookPlan`, `runWorkbookAction`, `WorkbookRunAdapter`
|
|
105
|
-
- feature handoff: `defineWorkbookFeaturePlugin`, `checkWorkbookCommandRequest`, `normalizeWorkbookCommandRequest`, `checkWorkbookCommandReceipt`, `normalizeWorkbookCommandReceipt`, `workbookCommandReceiptOpsMatch`
|
|
105
|
+
- feature handoff: `defineWorkbookFeaturePlugin`, `checkWorkbookFeaturePlugin`, `checkWorkbookCommandRequest`, `normalizeWorkbookCommandRequest`, `checkWorkbookCommandReceipt`, `normalizeWorkbookCommandReceipt`, `workbookCommandReceiptOpsMatch`
|
|
106
106
|
- low-level language: `WorkbookOp`, `WorkbookTxn`, `EngineOp`, `EngineOpBatch`, `isEngineOpBatch`
|
|
107
107
|
|
|
108
108
|
Stable data helpers are exported for generic tool builders:
|
|
@@ -143,7 +143,10 @@ For full action handoff, use `toPlanData(plan)` before JSON transport. A runtime
|
|
|
143
143
|
can call `checkPlanData(data)` to get structured path-based issues before
|
|
144
144
|
hydration, call `hydratePlanData(data)` to regain frozen refs and helper
|
|
145
145
|
methods, or pass the data directly to `describeRuntimeRequirements(data)` and
|
|
146
|
-
`runWorkbookPlan(data, adapter)`.
|
|
146
|
+
`runWorkbookPlan(data, adapter)`. Invalid transported action input and check
|
|
147
|
+
proof keep nested JSON paths such as `input.rows[1]` and
|
|
148
|
+
`checks[0].proof.when`, so an agent can repair the exact payload field before
|
|
149
|
+
hydration. The hydrated plan exposes
|
|
147
150
|
`refs: { refsUsed }` instead of the consumer's private model-shaped `refs`
|
|
148
151
|
object, so transported execution stays generic.
|
|
149
152
|
|
|
@@ -156,7 +159,12 @@ can describe generic input with `json`, `object`, `array`, `string`, `number`,
|
|
|
156
159
|
before running workbook model code. Omitted input is valid unless the top-level
|
|
157
160
|
description sets `required: true`, so agents can distinguish an optional payload
|
|
158
161
|
from a malformed payload. `planWorkbookAction` uses the same check when an action
|
|
159
|
-
declares input metadata
|
|
162
|
+
declares input metadata and preserves each failed input issue as a run error
|
|
163
|
+
with `path` and `issueCode`, so agents can branch without parsing messages.
|
|
164
|
+
JSON-safety failures keep the nested offending path too, such as
|
|
165
|
+
`input.items[2].amount`. Normalized payloads preserve consumer-owned JSON keys
|
|
166
|
+
as data, including names like `__proto__` and `constructor`, instead of letting
|
|
167
|
+
them affect object prototypes.
|
|
160
168
|
|
|
161
169
|
## Formulas
|
|
162
170
|
|
|
@@ -248,13 +256,18 @@ type WorkbookRunResult =
|
|
|
248
256
|
## Feature Handoff
|
|
249
257
|
|
|
250
258
|
Feature command requests are plain data for runtimes that expose workbook
|
|
251
|
-
features to agents. Use `
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
259
|
+
features to agents. Use `checkWorkbookFeaturePlugin(data)` before registering
|
|
260
|
+
consumer-provided feature metadata. It returns stable path issues for commands,
|
|
261
|
+
projection interceptors, UI contributions, dependencies, lifecycle hooks, and
|
|
262
|
+
nested command input-description or UI metadata fields.
|
|
263
|
+
|
|
264
|
+
Use `checkWorkbookCommandRequest(data)` before dispatching a transported
|
|
265
|
+
request. It returns stable path issues such as `featureId`, `commandId`,
|
|
266
|
+
`category`, `mode`, and nested input paths like `input.rows[1]`, and
|
|
267
|
+
`normalizeWorkbookCommandRequest` returns the frozen request data for the
|
|
268
|
+
runtime. The exported command category, execution-mode, receipt-status,
|
|
269
|
+
projection-point, and UI-slot lists let tool builders present and validate
|
|
270
|
+
command contracts without importing a schema framework.
|
|
258
271
|
|
|
259
272
|
Use `checkWorkbookCommandReceipt(data)` before trusting runtime command evidence.
|
|
260
273
|
It returns the same boring `{ status, issues }` shape for receipt fields such as
|
package/dist/describe.d.ts
CHANGED
|
@@ -152,6 +152,8 @@ export type WorkbookRunResultDescription = {
|
|
|
152
152
|
export interface WorkbookRunErrorDescription {
|
|
153
153
|
readonly code: WorkbookRunErrorCode;
|
|
154
154
|
readonly message: string;
|
|
155
|
+
readonly path?: string;
|
|
156
|
+
readonly issueCode?: string;
|
|
155
157
|
}
|
|
156
158
|
export declare function describeModel<Refs, Actions extends WorkbookActionMap<Refs>>(model: WorkbookModel<Refs, Actions>): WorkbookModelDescription;
|
|
157
159
|
export declare function describeRef(ref: WorkbookRef): WorkbookRefDescription;
|
package/dist/describe.js
CHANGED
|
@@ -155,6 +155,8 @@ function describeError(error) {
|
|
|
155
155
|
return {
|
|
156
156
|
code: error.code,
|
|
157
157
|
message: error.message,
|
|
158
|
+
...(error.path !== undefined ? { path: error.path } : {}),
|
|
159
|
+
...(error.issueCode !== undefined ? { issueCode: error.issueCode } : {}),
|
|
158
160
|
};
|
|
159
161
|
}
|
|
160
162
|
function describeUndo(undo) {
|
package/dist/describe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describe.js","sourceRoot":"","sources":["../src/describe.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,YAAY,GAOb,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"describe.js","sourceRoot":"","sources":["../src/describe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { CellRangeRef, CellStylePatch, CellStyleRecord, LiteralInput } from '@bilig/protocol';
|
|
2
|
+
import { type WorkbookCommandCategory, type WorkbookFeatureId, type WorkbookProjectionInterceptorPoint, type WorkbookUiContributionSlot } from './features.js';
|
|
3
|
+
import { type WorkbookActionInput, type WorkbookActionInputDescription } from './input.js';
|
|
4
|
+
export interface WorkbookFeatureLifecycleContext {
|
|
5
|
+
readonly featureId: WorkbookFeatureId;
|
|
6
|
+
readonly activeFeatures: readonly WorkbookFeatureId[];
|
|
7
|
+
}
|
|
8
|
+
export interface WorkbookCommandDescriptor {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly featureId: WorkbookFeatureId;
|
|
11
|
+
readonly category: WorkbookCommandCategory;
|
|
12
|
+
readonly label: string;
|
|
13
|
+
readonly description?: string;
|
|
14
|
+
readonly input?: WorkbookActionInputDescription;
|
|
15
|
+
}
|
|
16
|
+
export interface WorkbookCellDisplayProjection {
|
|
17
|
+
readonly value?: LiteralInput;
|
|
18
|
+
readonly text?: string;
|
|
19
|
+
readonly metadata?: WorkbookActionInput;
|
|
20
|
+
}
|
|
21
|
+
export interface WorkbookCellStyleProjection {
|
|
22
|
+
readonly style?: CellStylePatch | CellStyleRecord;
|
|
23
|
+
readonly metadata?: WorkbookActionInput;
|
|
24
|
+
}
|
|
25
|
+
export interface WorkbookRangeChromeProjection {
|
|
26
|
+
readonly id: string;
|
|
27
|
+
readonly featureId: WorkbookFeatureId;
|
|
28
|
+
readonly source: 'workbook-metadata' | 'command-preview' | 'runtime';
|
|
29
|
+
readonly range: CellRangeRef;
|
|
30
|
+
readonly role: string;
|
|
31
|
+
readonly label?: string;
|
|
32
|
+
readonly metadata?: WorkbookActionInput;
|
|
33
|
+
}
|
|
34
|
+
export interface WorkbookRowVisibilityProjection {
|
|
35
|
+
readonly hidden?: boolean;
|
|
36
|
+
readonly metadata?: WorkbookActionInput;
|
|
37
|
+
}
|
|
38
|
+
export interface WorkbookCommandMetadataProjection {
|
|
39
|
+
readonly label?: string;
|
|
40
|
+
readonly changedRanges?: readonly CellRangeRef[];
|
|
41
|
+
readonly semanticTargets?: readonly WorkbookActionInput[];
|
|
42
|
+
readonly metadata?: WorkbookActionInput;
|
|
43
|
+
}
|
|
44
|
+
export interface WorkbookProjectionContext {
|
|
45
|
+
readonly featureId: WorkbookFeatureId;
|
|
46
|
+
}
|
|
47
|
+
export interface WorkbookProjectionInterceptorRegistration {
|
|
48
|
+
readonly id: string;
|
|
49
|
+
readonly featureId: WorkbookFeatureId;
|
|
50
|
+
readonly point: WorkbookProjectionInterceptorPoint;
|
|
51
|
+
readonly priority?: number;
|
|
52
|
+
readonly label?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface WorkbookUiContribution {
|
|
55
|
+
readonly id: string;
|
|
56
|
+
readonly featureId: WorkbookFeatureId;
|
|
57
|
+
readonly slot: WorkbookUiContributionSlot;
|
|
58
|
+
readonly label: string;
|
|
59
|
+
readonly order?: number;
|
|
60
|
+
readonly metadata?: WorkbookActionInput;
|
|
61
|
+
}
|
|
62
|
+
export interface WorkbookFeatureRegistration {
|
|
63
|
+
readonly commands: readonly WorkbookCommandDescriptor[];
|
|
64
|
+
readonly projectionInterceptors: readonly WorkbookProjectionInterceptorRegistration[];
|
|
65
|
+
readonly uiContributions: readonly WorkbookUiContribution[];
|
|
66
|
+
}
|
|
67
|
+
export interface WorkbookFeaturePlugin extends WorkbookFeatureRegistration {
|
|
68
|
+
readonly id: WorkbookFeatureId;
|
|
69
|
+
readonly version: string;
|
|
70
|
+
readonly dependsOn?: readonly WorkbookFeatureId[];
|
|
71
|
+
readonly register?: (context: WorkbookFeatureLifecycleContext) => void;
|
|
72
|
+
readonly activate?: (context: WorkbookFeatureLifecycleContext) => void;
|
|
73
|
+
readonly dispose?: (context: WorkbookFeatureLifecycleContext) => void;
|
|
74
|
+
}
|
|
75
|
+
export type WorkbookFeaturePluginIssueCode = 'invalid_feature_plugin';
|
|
76
|
+
export interface WorkbookFeaturePluginIssue {
|
|
77
|
+
readonly code: WorkbookFeaturePluginIssueCode;
|
|
78
|
+
readonly path: string;
|
|
79
|
+
readonly message: string;
|
|
80
|
+
}
|
|
81
|
+
export type WorkbookFeaturePluginCheckResult = {
|
|
82
|
+
readonly status: 'valid';
|
|
83
|
+
readonly plugin: WorkbookFeaturePlugin;
|
|
84
|
+
readonly issues: readonly [];
|
|
85
|
+
} | {
|
|
86
|
+
readonly status: 'invalid';
|
|
87
|
+
readonly issues: readonly WorkbookFeaturePluginIssue[];
|
|
88
|
+
};
|
|
89
|
+
export declare function checkWorkbookFeaturePlugin(value: unknown): WorkbookFeaturePluginCheckResult;
|
|
90
|
+
export declare function defineWorkbookFeaturePlugin(plugin: WorkbookFeaturePlugin): WorkbookFeaturePlugin;
|
|
91
|
+
export declare function normalizeWorkbookCommandDescriptor(descriptor: WorkbookCommandDescriptor, expectedFeatureId?: WorkbookFeatureId): WorkbookCommandDescriptor;
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { isWorkbookCommandCategory, isWorkbookProjectionInterceptorPoint, isWorkbookUiContributionSlot, normalizeWorkbookFeatureId, } from './features.js';
|
|
2
|
+
import { WorkbookActionInputError, isWorkbookActionInput, isWorkbookActionInputDescription, normalizeWorkbookActionInput, normalizeWorkbookActionInputDescription, } from './input.js';
|
|
3
|
+
export function checkWorkbookFeaturePlugin(value) {
|
|
4
|
+
if (!isRecord(value)) {
|
|
5
|
+
return {
|
|
6
|
+
status: 'invalid',
|
|
7
|
+
issues: Object.freeze([featurePluginIssue('plugin', 'Workbook feature plugin must be an object')]),
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
const issues = [];
|
|
11
|
+
const pluginId = pushRequiredFeaturePluginStringIssue(issues, value['id'], 'id', 'Workbook feature id');
|
|
12
|
+
pushRequiredFeaturePluginStringIssue(issues, value['version'], 'version', 'Workbook feature version');
|
|
13
|
+
pushFeaturePluginDependencyIssues(issues, value['dependsOn']);
|
|
14
|
+
readFeaturePluginArray(issues, value['commands'], 'commands', 'Workbook feature commands').forEach((command, index) => {
|
|
15
|
+
pushFeaturePluginCommandIssues(issues, command, index, pluginId);
|
|
16
|
+
});
|
|
17
|
+
readFeaturePluginArray(issues, value['projectionInterceptors'], 'projectionInterceptors', 'Workbook feature projection interceptors').forEach((interceptor, index) => {
|
|
18
|
+
pushFeaturePluginProjectionIssues(issues, interceptor, index, pluginId);
|
|
19
|
+
});
|
|
20
|
+
readFeaturePluginArray(issues, value['uiContributions'], 'uiContributions', 'Workbook feature UI contributions').forEach((contribution, index) => {
|
|
21
|
+
pushFeaturePluginUiContributionIssues(issues, contribution, index, pluginId);
|
|
22
|
+
});
|
|
23
|
+
pushFeaturePluginLifecycleIssue(issues, value['register'], 'register');
|
|
24
|
+
pushFeaturePluginLifecycleIssue(issues, value['activate'], 'activate');
|
|
25
|
+
pushFeaturePluginLifecycleIssue(issues, value['dispose'], 'dispose');
|
|
26
|
+
if (issues.length > 0) {
|
|
27
|
+
return {
|
|
28
|
+
status: 'invalid',
|
|
29
|
+
issues: Object.freeze(issues),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (!isWorkbookFeaturePluginRecord(value)) {
|
|
33
|
+
return {
|
|
34
|
+
status: 'invalid',
|
|
35
|
+
issues: Object.freeze([featurePluginIssue('plugin', 'Workbook feature plugin is invalid')]),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
status: 'valid',
|
|
40
|
+
plugin: normalizedFeaturePlugin(value),
|
|
41
|
+
issues: Object.freeze([]),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function defineWorkbookFeaturePlugin(plugin) {
|
|
45
|
+
const check = checkWorkbookFeaturePlugin(plugin);
|
|
46
|
+
if (check.status === 'invalid') {
|
|
47
|
+
const [firstIssue] = check.issues;
|
|
48
|
+
throw new Error(firstIssue === undefined ? 'Workbook feature plugin is invalid' : `Workbook feature plugin is invalid: ${firstIssue.message}`);
|
|
49
|
+
}
|
|
50
|
+
return check.plugin;
|
|
51
|
+
}
|
|
52
|
+
export function normalizeWorkbookCommandDescriptor(descriptor, expectedFeatureId) {
|
|
53
|
+
const featureId = normalizeWorkbookFeatureId(descriptor.featureId, 'Workbook command feature id');
|
|
54
|
+
if (expectedFeatureId !== undefined && featureId !== expectedFeatureId) {
|
|
55
|
+
throw new Error(`Workbook command ${descriptor.id} feature id ${featureId} does not match plugin ${expectedFeatureId}`);
|
|
56
|
+
}
|
|
57
|
+
const id = normalizeRequiredString(descriptor.id, 'Workbook command id');
|
|
58
|
+
const label = normalizeRequiredString(descriptor.label, `Workbook command ${id} label`);
|
|
59
|
+
const description = descriptor.description === undefined ? undefined : normalizeRequiredString(descriptor.description, `Workbook command ${id} description`);
|
|
60
|
+
const input = descriptor.input === undefined ? undefined : normalizeWorkbookActionInputDescription(descriptor.input);
|
|
61
|
+
if (!isWorkbookCommandCategory(descriptor.category)) {
|
|
62
|
+
throw new Error(`Workbook command ${id} category is invalid`);
|
|
63
|
+
}
|
|
64
|
+
return Object.freeze({
|
|
65
|
+
id,
|
|
66
|
+
featureId,
|
|
67
|
+
category: descriptor.category,
|
|
68
|
+
label,
|
|
69
|
+
...(description !== undefined ? { description } : {}),
|
|
70
|
+
...(input !== undefined ? { input } : {}),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function featurePluginIssue(path, message) {
|
|
74
|
+
return Object.freeze({
|
|
75
|
+
code: 'invalid_feature_plugin',
|
|
76
|
+
path,
|
|
77
|
+
message,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function errorMessage(error) {
|
|
81
|
+
return error instanceof Error ? error.message : String(error);
|
|
82
|
+
}
|
|
83
|
+
function inputPath(basePath, error) {
|
|
84
|
+
if (!(error instanceof WorkbookActionInputError)) {
|
|
85
|
+
return basePath;
|
|
86
|
+
}
|
|
87
|
+
if (error.path === 'input') {
|
|
88
|
+
return basePath;
|
|
89
|
+
}
|
|
90
|
+
if (error.path.startsWith('input.')) {
|
|
91
|
+
return `${basePath}${error.path.slice('input'.length)}`;
|
|
92
|
+
}
|
|
93
|
+
if (error.path.startsWith('input[')) {
|
|
94
|
+
return `${basePath}${error.path.slice('input'.length)}`;
|
|
95
|
+
}
|
|
96
|
+
return basePath;
|
|
97
|
+
}
|
|
98
|
+
function pushFeaturePluginInputDescriptionIssue(issues, value, path, label) {
|
|
99
|
+
if (value === undefined) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
normalizeWorkbookActionInputDescription(value);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
issues.push(featurePluginIssue(inputPath(path, error), `${label} input description is invalid: ${errorMessage(error)}`));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function pushFeaturePluginInputIssue(issues, value, path, label) {
|
|
110
|
+
if (value === undefined) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
normalizeWorkbookActionInput(value);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
issues.push(featurePluginIssue(inputPath(path, error), `${label} metadata is invalid: ${errorMessage(error)}`));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function pushRequiredFeaturePluginStringIssue(issues, value, path, label) {
|
|
121
|
+
if (typeof value !== 'string') {
|
|
122
|
+
issues.push(featurePluginIssue(path, `${label} must be a string`));
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
const normalized = value.trim();
|
|
126
|
+
if (normalized === '') {
|
|
127
|
+
issues.push(featurePluginIssue(path, `${label} cannot be empty`));
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
if (normalized !== value) {
|
|
131
|
+
issues.push(featurePluginIssue(path, `${label} must not have leading or trailing whitespace`));
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
return normalized;
|
|
135
|
+
}
|
|
136
|
+
function pushOptionalFeaturePluginStringIssue(issues, value, path, label) {
|
|
137
|
+
if (value === undefined) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
pushRequiredFeaturePluginStringIssue(issues, value, path, label);
|
|
141
|
+
}
|
|
142
|
+
function readFeaturePluginArray(issues, value, path, label) {
|
|
143
|
+
if (!Array.isArray(value)) {
|
|
144
|
+
issues.push(featurePluginIssue(path, `${label} must be an array`));
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
return value;
|
|
148
|
+
}
|
|
149
|
+
function pushFeaturePluginDependencyIssues(issues, value) {
|
|
150
|
+
if (value === undefined) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (!Array.isArray(value)) {
|
|
154
|
+
issues.push(featurePluginIssue('dependsOn', 'Workbook feature dependencies must be an array'));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
value.forEach((dependency, index) => {
|
|
158
|
+
pushRequiredFeaturePluginStringIssue(issues, dependency, `dependsOn[${index}]`, 'Workbook feature dependency');
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function pushFeaturePluginCommandIssues(issues, command, index, pluginId) {
|
|
162
|
+
const path = `commands[${index}]`;
|
|
163
|
+
if (!isRecord(command)) {
|
|
164
|
+
issues.push(featurePluginIssue(path, 'Workbook command must be an object'));
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const commandId = pushRequiredFeaturePluginStringIssue(issues, command['id'], `${path}.id`, 'Workbook command id');
|
|
168
|
+
const featureId = pushRequiredFeaturePluginStringIssue(issues, command['featureId'], `${path}.featureId`, 'Workbook command feature id');
|
|
169
|
+
if (pluginId !== undefined && featureId !== undefined && featureId !== pluginId) {
|
|
170
|
+
issues.push(featurePluginIssue(`${path}.featureId`, `Workbook command ${commandId ?? path} feature id ${featureId} does not match plugin ${pluginId}`));
|
|
171
|
+
}
|
|
172
|
+
if (!isWorkbookCommandCategory(command['category'])) {
|
|
173
|
+
issues.push(featurePluginIssue(`${path}.category`, `Workbook command ${commandId ?? path} category is invalid`));
|
|
174
|
+
}
|
|
175
|
+
pushRequiredFeaturePluginStringIssue(issues, command['label'], `${path}.label`, `Workbook command ${commandId ?? path} label`);
|
|
176
|
+
pushOptionalFeaturePluginStringIssue(issues, command['description'], `${path}.description`, `Workbook command ${commandId ?? path} description`);
|
|
177
|
+
pushFeaturePluginInputDescriptionIssue(issues, command['input'], `${path}.input`, `Workbook command ${commandId ?? path}`);
|
|
178
|
+
}
|
|
179
|
+
function pushFeaturePluginProjectionIssues(issues, interceptor, index, pluginId) {
|
|
180
|
+
const path = `projectionInterceptors[${index}]`;
|
|
181
|
+
if (!isRecord(interceptor)) {
|
|
182
|
+
issues.push(featurePluginIssue(path, 'Workbook projection interceptor must be an object'));
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const id = pushRequiredFeaturePluginStringIssue(issues, interceptor['id'], `${path}.id`, 'Workbook projection interceptor id');
|
|
186
|
+
const featureId = pushRequiredFeaturePluginStringIssue(issues, interceptor['featureId'], `${path}.featureId`, 'Workbook projection interceptor feature id');
|
|
187
|
+
if (pluginId !== undefined && featureId !== undefined && featureId !== pluginId) {
|
|
188
|
+
issues.push(featurePluginIssue(`${path}.featureId`, `Workbook projection interceptor ${id ?? path} feature id ${featureId} does not match plugin ${pluginId}`));
|
|
189
|
+
}
|
|
190
|
+
if (!isWorkbookProjectionInterceptorPoint(interceptor['point'])) {
|
|
191
|
+
issues.push(featurePluginIssue(`${path}.point`, `Workbook projection interceptor ${id ?? path} point is invalid`));
|
|
192
|
+
}
|
|
193
|
+
if (interceptor['priority'] !== undefined && !isSafeInteger(interceptor['priority'])) {
|
|
194
|
+
issues.push(featurePluginIssue(`${path}.priority`, `Workbook projection interceptor ${id ?? path} priority is invalid`));
|
|
195
|
+
}
|
|
196
|
+
pushOptionalFeaturePluginStringIssue(issues, interceptor['label'], `${path}.label`, `Workbook projection interceptor ${id ?? path} label`);
|
|
197
|
+
}
|
|
198
|
+
function pushFeaturePluginUiContributionIssues(issues, contribution, index, pluginId) {
|
|
199
|
+
const path = `uiContributions[${index}]`;
|
|
200
|
+
if (!isRecord(contribution)) {
|
|
201
|
+
issues.push(featurePluginIssue(path, 'Workbook UI contribution must be an object'));
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
const id = pushRequiredFeaturePluginStringIssue(issues, contribution['id'], `${path}.id`, 'Workbook UI contribution id');
|
|
205
|
+
const featureId = pushRequiredFeaturePluginStringIssue(issues, contribution['featureId'], `${path}.featureId`, 'Workbook UI contribution feature id');
|
|
206
|
+
if (pluginId !== undefined && featureId !== undefined && featureId !== pluginId) {
|
|
207
|
+
issues.push(featurePluginIssue(`${path}.featureId`, `Workbook UI contribution ${id ?? path} feature id ${featureId} does not match plugin ${pluginId}`));
|
|
208
|
+
}
|
|
209
|
+
if (!isWorkbookUiContributionSlot(contribution['slot'])) {
|
|
210
|
+
issues.push(featurePluginIssue(`${path}.slot`, `Workbook UI contribution ${id ?? path} slot is invalid`));
|
|
211
|
+
}
|
|
212
|
+
pushRequiredFeaturePluginStringIssue(issues, contribution['label'], `${path}.label`, `Workbook UI contribution ${id ?? path} label`);
|
|
213
|
+
if (contribution['order'] !== undefined && !isSafeInteger(contribution['order'])) {
|
|
214
|
+
issues.push(featurePluginIssue(`${path}.order`, `Workbook UI contribution ${id ?? path} order is invalid`));
|
|
215
|
+
}
|
|
216
|
+
pushFeaturePluginInputIssue(issues, contribution['metadata'], `${path}.metadata`, `Workbook UI contribution ${id ?? path}`);
|
|
217
|
+
}
|
|
218
|
+
function pushFeaturePluginLifecycleIssue(issues, value, path) {
|
|
219
|
+
if (value !== undefined && typeof value !== 'function') {
|
|
220
|
+
issues.push(featurePluginIssue(path, `Workbook feature ${path} must be a function`));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
function normalizedFeaturePlugin(plugin) {
|
|
224
|
+
const id = normalizeWorkbookFeatureId(plugin.id);
|
|
225
|
+
const version = normalizeRequiredString(plugin.version, `Workbook feature ${id} version`);
|
|
226
|
+
const dependsOn = plugin.dependsOn?.map((dependency) => normalizeWorkbookFeatureId(dependency, `Workbook feature ${id} dependency`));
|
|
227
|
+
const commands = plugin.commands.map((command) => normalizeWorkbookCommandDescriptor(command, id));
|
|
228
|
+
const projectionInterceptors = plugin.projectionInterceptors.map((interceptor) => normalizeProjectionInterceptor(interceptor, id));
|
|
229
|
+
const uiContributions = plugin.uiContributions.map((contribution) => normalizeUiContribution(contribution, id));
|
|
230
|
+
return Object.freeze({
|
|
231
|
+
id,
|
|
232
|
+
version,
|
|
233
|
+
...(dependsOn !== undefined ? { dependsOn: Object.freeze([...dependsOn]) } : {}),
|
|
234
|
+
commands: Object.freeze(commands),
|
|
235
|
+
projectionInterceptors: Object.freeze(projectionInterceptors),
|
|
236
|
+
uiContributions: Object.freeze(uiContributions),
|
|
237
|
+
...(plugin.register !== undefined ? { register: plugin.register } : {}),
|
|
238
|
+
...(plugin.activate !== undefined ? { activate: plugin.activate } : {}),
|
|
239
|
+
...(plugin.dispose !== undefined ? { dispose: plugin.dispose } : {}),
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
function normalizeProjectionInterceptor(interceptor, expectedFeatureId) {
|
|
243
|
+
const featureId = normalizeWorkbookFeatureId(interceptor.featureId, 'Workbook projection interceptor feature id');
|
|
244
|
+
if (featureId !== expectedFeatureId) {
|
|
245
|
+
throw new Error(`Workbook projection interceptor ${interceptor.id} feature id ${featureId} does not match plugin ${expectedFeatureId}`);
|
|
246
|
+
}
|
|
247
|
+
const id = normalizeRequiredString(interceptor.id, 'Workbook projection interceptor id');
|
|
248
|
+
if (!isWorkbookProjectionInterceptorPoint(interceptor.point)) {
|
|
249
|
+
throw new Error(`Workbook projection interceptor ${id} point is invalid`);
|
|
250
|
+
}
|
|
251
|
+
const label = interceptor.label === undefined ? undefined : normalizeRequiredString(interceptor.label, `Workbook projection interceptor ${id} label`);
|
|
252
|
+
if (interceptor.priority !== undefined && !isSafeInteger(interceptor.priority)) {
|
|
253
|
+
throw new Error(`Workbook projection interceptor ${id} priority is invalid`);
|
|
254
|
+
}
|
|
255
|
+
return Object.freeze({
|
|
256
|
+
id,
|
|
257
|
+
featureId,
|
|
258
|
+
point: interceptor.point,
|
|
259
|
+
...(interceptor.priority !== undefined ? { priority: interceptor.priority } : {}),
|
|
260
|
+
...(label !== undefined ? { label } : {}),
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
function normalizeUiContribution(contribution, expectedFeatureId) {
|
|
264
|
+
const featureId = normalizeWorkbookFeatureId(contribution.featureId, 'Workbook UI contribution feature id');
|
|
265
|
+
if (featureId !== expectedFeatureId) {
|
|
266
|
+
throw new Error(`Workbook UI contribution ${contribution.id} feature id ${featureId} does not match plugin ${expectedFeatureId}`);
|
|
267
|
+
}
|
|
268
|
+
const id = normalizeRequiredString(contribution.id, 'Workbook UI contribution id');
|
|
269
|
+
const label = normalizeRequiredString(contribution.label, `Workbook UI contribution ${id} label`);
|
|
270
|
+
if (!isWorkbookUiContributionSlot(contribution.slot)) {
|
|
271
|
+
throw new Error(`Workbook UI contribution ${id} slot is invalid`);
|
|
272
|
+
}
|
|
273
|
+
if (contribution.order !== undefined && !isSafeInteger(contribution.order)) {
|
|
274
|
+
throw new Error(`Workbook UI contribution ${id} order is invalid`);
|
|
275
|
+
}
|
|
276
|
+
if (contribution.metadata !== undefined && !isWorkbookActionInput(contribution.metadata)) {
|
|
277
|
+
throw new Error(`Workbook UI contribution ${id} metadata is invalid`);
|
|
278
|
+
}
|
|
279
|
+
return Object.freeze({
|
|
280
|
+
id,
|
|
281
|
+
featureId,
|
|
282
|
+
slot: contribution.slot,
|
|
283
|
+
label,
|
|
284
|
+
...(contribution.order !== undefined ? { order: contribution.order } : {}),
|
|
285
|
+
...(contribution.metadata !== undefined ? { metadata: normalizeWorkbookActionInput(contribution.metadata) } : {}),
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
function isWorkbookFeaturePluginRecord(value) {
|
|
289
|
+
return (isRecord(value) &&
|
|
290
|
+
typeof value['id'] === 'string' &&
|
|
291
|
+
typeof value['version'] === 'string' &&
|
|
292
|
+
(value['dependsOn'] === undefined || (Array.isArray(value['dependsOn']) && value['dependsOn'].every(isString))) &&
|
|
293
|
+
Array.isArray(value['commands']) &&
|
|
294
|
+
value['commands'].every(isWorkbookCommandDescriptorRecord) &&
|
|
295
|
+
Array.isArray(value['projectionInterceptors']) &&
|
|
296
|
+
value['projectionInterceptors'].every(isWorkbookProjectionInterceptorRecord) &&
|
|
297
|
+
Array.isArray(value['uiContributions']) &&
|
|
298
|
+
value['uiContributions'].every(isWorkbookUiContributionRecord) &&
|
|
299
|
+
isOptionalLifecycleHook(value['register']) &&
|
|
300
|
+
isOptionalLifecycleHook(value['activate']) &&
|
|
301
|
+
isOptionalLifecycleHook(value['dispose']));
|
|
302
|
+
}
|
|
303
|
+
function isWorkbookCommandDescriptorRecord(value) {
|
|
304
|
+
return (isRecord(value) &&
|
|
305
|
+
typeof value['id'] === 'string' &&
|
|
306
|
+
typeof value['featureId'] === 'string' &&
|
|
307
|
+
isWorkbookCommandCategory(value['category']) &&
|
|
308
|
+
typeof value['label'] === 'string' &&
|
|
309
|
+
(value['description'] === undefined || typeof value['description'] === 'string') &&
|
|
310
|
+
(value['input'] === undefined || isWorkbookActionInputDescription(value['input'])));
|
|
311
|
+
}
|
|
312
|
+
function isWorkbookProjectionInterceptorRecord(value) {
|
|
313
|
+
return (isRecord(value) &&
|
|
314
|
+
typeof value['id'] === 'string' &&
|
|
315
|
+
typeof value['featureId'] === 'string' &&
|
|
316
|
+
isWorkbookProjectionInterceptorPoint(value['point']) &&
|
|
317
|
+
(value['priority'] === undefined || isSafeInteger(value['priority'])) &&
|
|
318
|
+
(value['label'] === undefined || typeof value['label'] === 'string'));
|
|
319
|
+
}
|
|
320
|
+
function isWorkbookUiContributionRecord(value) {
|
|
321
|
+
return (isRecord(value) &&
|
|
322
|
+
typeof value['id'] === 'string' &&
|
|
323
|
+
typeof value['featureId'] === 'string' &&
|
|
324
|
+
isWorkbookUiContributionSlot(value['slot']) &&
|
|
325
|
+
typeof value['label'] === 'string' &&
|
|
326
|
+
(value['order'] === undefined || isSafeInteger(value['order'])) &&
|
|
327
|
+
(value['metadata'] === undefined || isWorkbookActionInput(value['metadata'])));
|
|
328
|
+
}
|
|
329
|
+
function isString(value) {
|
|
330
|
+
return typeof value === 'string';
|
|
331
|
+
}
|
|
332
|
+
function isOptionalLifecycleHook(value) {
|
|
333
|
+
return value === undefined || typeof value === 'function';
|
|
334
|
+
}
|
|
335
|
+
function isSafeInteger(value) {
|
|
336
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && Number.isFinite(value);
|
|
337
|
+
}
|
|
338
|
+
function isRecord(value) {
|
|
339
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
340
|
+
}
|
|
341
|
+
function normalizeRequiredString(value, label) {
|
|
342
|
+
const normalized = value.trim();
|
|
343
|
+
if (normalized === '') {
|
|
344
|
+
throw new Error(`${label} cannot be empty`);
|
|
345
|
+
}
|
|
346
|
+
if (normalized !== value) {
|
|
347
|
+
throw new Error(`${label} must not have leading or trailing whitespace`);
|
|
348
|
+
}
|
|
349
|
+
return normalized;
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=feature-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-plugin.js","sourceRoot":"","sources":["../src/feature-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EACL,yBAAyB,EACzB,oCAAoC,EACpC,4BAA4B,EAC5B,0BAA0B,GAK3B,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,gCAAgC,EAChC,4BAA4B,EAC5B,uCAAuC,GAGxC,MAAM,YAAY,CAAA;AAwGnB,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,2CAA2C,CAAC,CAAC,CAAC;SACnG,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAiC,EAAE,CAAA;IAC/C,MAAM,QAAQ,GAAG,oCAAoC,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAA;IACvG,oCAAoC,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAA;IACrG,iCAAiC,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;IAC7D,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,2BAA2B,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACpH,8BAA8B,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IACF,sBAAsB,CACpB,MAAM,EACN,KAAK,CAAC,wBAAwB,CAAC,EAC/B,wBAAwB,EACxB,0CAA0C,CAC3C,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;QAC/B,iCAAiC,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;IACF,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,mCAAmC,CAAC,CAAC,OAAO,CACtH,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE;QACtB,qCAAqC,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC9E,CAAC,CACF,CAAA;IACD,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAA;IACtE,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAA;IACtE,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAA;IAEpE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;SAC9B,CAAA;IACH,CAAC;IACD,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,oCAAoC,CAAC,CAAC,CAAC;SAC5F,CAAA;IACH,CAAC;IACD,OAAO;QACL,MAAM,EAAE,OAAO;QACf,MAAM,EAAE,uBAAuB,CAAC,KAAK,CAAC;QACtC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;KAC1B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAA6B;IACvE,MAAM,KAAK,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAA;IAChD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,MAAM,CAAA;QACjC,MAAM,IAAI,KAAK,CACb,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,uCAAuC,UAAU,CAAC,OAAO,EAAE,CAC9H,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,UAAqC,EACrC,iBAAqC;IAErC,MAAM,SAAS,GAAG,0BAA0B,CAAC,UAAU,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAA;IACjG,IAAI,iBAAiB,KAAK,SAAS,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,oBAAoB,UAAU,CAAC,EAAE,eAAe,SAAS,0BAA0B,iBAAiB,EAAE,CAAC,CAAA;IACzH,CAAC;IACD,MAAM,EAAE,GAAG,uBAAuB,CAAC,UAAU,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAA;IACxE,MAAM,KAAK,GAAG,uBAAuB,CAAC,UAAU,CAAC,KAAK,EAAE,oBAAoB,EAAE,QAAQ,CAAC,CAAA;IACvF,MAAM,WAAW,GACf,UAAU,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,UAAU,CAAC,WAAW,EAAE,oBAAoB,EAAE,cAAc,CAAC,CAAA;IAC1I,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uCAAuC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACpH,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE;QACF,SAAS;QACT,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,KAAK;QACL,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,OAAe;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,wBAAwB;QAC9B,IAAI;QACJ,OAAO;KACR,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC/D,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,KAAc;IACjD,IAAI,CAAC,CAAC,KAAK,YAAY,wBAAwB,CAAC,EAAE,CAAC;QACjD,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAA;IACzD,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAA;IACzD,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,sCAAsC,CAAC,MAAoC,EAAE,KAAc,EAAE,IAAY,EAAE,KAAa;IAC/H,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAM;IACR,CAAC;IACD,IAAI,CAAC;QACH,uCAAuC,CAAC,KAAK,CAAC,CAAA;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,kCAAkC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1H,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,MAAoC,EAAE,KAAc,EAAE,IAAY,EAAE,KAAa;IACpH,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAM;IACR,CAAC;IACD,IAAI,CAAC;QACH,4BAA4B,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,yBAAyB,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;IACjH,CAAC;AACH,CAAC;AAED,SAAS,oCAAoC,CAC3C,MAAoC,EACpC,KAAc,EACd,IAAY,EACZ,KAAa;IAEb,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,KAAK,mBAAmB,CAAC,CAAC,CAAA;QAClE,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC/B,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,KAAK,kBAAkB,CAAC,CAAC,CAAA;QACjE,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,KAAK,+CAA+C,CAAC,CAAC,CAAA;QAC9F,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,oCAAoC,CAAC,MAAoC,EAAE,KAAc,EAAE,IAAY,EAAE,KAAa;IAC7H,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAM;IACR,CAAC;IACD,oCAAoC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAClE,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAoC,EAAE,KAAc,EAAE,IAAY,EAAE,KAAa;IAC/G,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,KAAK,mBAAmB,CAAC,CAAC,CAAA;QAClE,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAoC,EAAE,KAAc;IAC7F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAM;IACR,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,gDAAgD,CAAC,CAAC,CAAA;QAC9F,OAAM;IACR,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;QAClC,oCAAoC,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,KAAK,GAAG,EAAE,6BAA6B,CAAC,CAAA;IAChH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,8BAA8B,CACrC,MAAoC,EACpC,OAAgB,EAChB,KAAa,EACb,QAA4B;IAE5B,MAAM,IAAI,GAAG,YAAY,KAAK,GAAG,CAAA;IACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,oCAAoC,CAAC,CAAC,CAAA;QAC3E,OAAM;IACR,CAAC;IAED,MAAM,SAAS,GAAG,oCAAoC,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,KAAK,EAAE,qBAAqB,CAAC,CAAA;IAClH,MAAM,SAAS,GAAG,oCAAoC,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,IAAI,YAAY,EAAE,6BAA6B,CAAC,CAAA;IACxI,IAAI,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChF,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,GAAG,IAAI,YAAY,EACnB,oBAAoB,SAAS,IAAI,IAAI,eAAe,SAAS,0BAA0B,QAAQ,EAAE,CAClG,CACF,CAAA;IACH,CAAC;IACD,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,WAAW,EAAE,oBAAoB,SAAS,IAAI,IAAI,sBAAsB,CAAC,CAAC,CAAA;IAClH,CAAC;IACD,oCAAoC,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,oBAAoB,SAAS,IAAI,IAAI,QAAQ,CAAC,CAAA;IAC9H,oCAAoC,CAClC,MAAM,EACN,OAAO,CAAC,aAAa,CAAC,EACtB,GAAG,IAAI,cAAc,EACrB,oBAAoB,SAAS,IAAI,IAAI,cAAc,CACpD,CAAA;IACD,sCAAsC,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,oBAAoB,SAAS,IAAI,IAAI,EAAE,CAAC,CAAA;AAC5H,CAAC;AAED,SAAS,iCAAiC,CACxC,MAAoC,EACpC,WAAoB,EACpB,KAAa,EACb,QAA4B;IAE5B,MAAM,IAAI,GAAG,0BAA0B,KAAK,GAAG,CAAA;IAC/C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,mDAAmD,CAAC,CAAC,CAAA;QAC1F,OAAM;IACR,CAAC;IAED,MAAM,EAAE,GAAG,oCAAoC,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,KAAK,EAAE,oCAAoC,CAAC,CAAA;IAC9H,MAAM,SAAS,GAAG,oCAAoC,CACpD,MAAM,EACN,WAAW,CAAC,WAAW,CAAC,EACxB,GAAG,IAAI,YAAY,EACnB,4CAA4C,CAC7C,CAAA;IACD,IAAI,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChF,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,GAAG,IAAI,YAAY,EACnB,mCAAmC,EAAE,IAAI,IAAI,eAAe,SAAS,0BAA0B,QAAQ,EAAE,CAC1G,CACF,CAAA;IACH,CAAC;IACD,IAAI,CAAC,oCAAoC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,QAAQ,EAAE,mCAAmC,EAAE,IAAI,IAAI,mBAAmB,CAAC,CAAC,CAAA;IACpH,CAAC;IACD,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACrF,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,WAAW,EAAE,mCAAmC,EAAE,IAAI,IAAI,sBAAsB,CAAC,CAAC,CAAA;IAC1H,CAAC;IACD,oCAAoC,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,mCAAmC,EAAE,IAAI,IAAI,QAAQ,CAAC,CAAA;AAC5I,CAAC;AAED,SAAS,qCAAqC,CAC5C,MAAoC,EACpC,YAAqB,EACrB,KAAa,EACb,QAA4B;IAE5B,MAAM,IAAI,GAAG,mBAAmB,KAAK,GAAG,CAAA;IACxC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,4CAA4C,CAAC,CAAC,CAAA;QACnF,OAAM;IACR,CAAC;IAED,MAAM,EAAE,GAAG,oCAAoC,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,KAAK,EAAE,6BAA6B,CAAC,CAAA;IACxH,MAAM,SAAS,GAAG,oCAAoC,CACpD,MAAM,EACN,YAAY,CAAC,WAAW,CAAC,EACzB,GAAG,IAAI,YAAY,EACnB,qCAAqC,CACtC,CAAA;IACD,IAAI,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChF,MAAM,CAAC,IAAI,CACT,kBAAkB,CAChB,GAAG,IAAI,YAAY,EACnB,4BAA4B,EAAE,IAAI,IAAI,eAAe,SAAS,0BAA0B,QAAQ,EAAE,CACnG,CACF,CAAA;IACH,CAAC;IACD,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,OAAO,EAAE,4BAA4B,EAAE,IAAI,IAAI,kBAAkB,CAAC,CAAC,CAAA;IAC3G,CAAC;IACD,oCAAoC,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,4BAA4B,EAAE,IAAI,IAAI,QAAQ,CAAC,CAAA;IACpI,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACjF,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,QAAQ,EAAE,4BAA4B,EAAE,IAAI,IAAI,mBAAmB,CAAC,CAAC,CAAA;IAC7G,CAAC;IACD,2BAA2B,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,WAAW,EAAE,4BAA4B,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;AAC7H,CAAC;AAED,SAAS,+BAA+B,CACtC,MAAoC,EACpC,KAAc,EACd,IAAyC;IAEzC,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,IAAI,qBAAqB,CAAC,CAAC,CAAA;IACtF,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA6B;IAC5D,MAAM,EAAE,GAAG,0BAA0B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAoB,EAAE,UAAU,CAAC,CAAA;IACzF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,0BAA0B,CAAC,UAAU,EAAE,oBAAoB,EAAE,aAAa,CAAC,CAAC,CAAA;IACpI,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kCAAkC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;IAClG,MAAM,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,8BAA8B,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAA;IAClI,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,uBAAuB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAA;IAC/G,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE;QACF,OAAO;QACP,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjC,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC;QAC7D,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;QAC/C,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,8BAA8B,CACrC,WAAsD,EACtD,iBAAoC;IAEpC,MAAM,SAAS,GAAG,0BAA0B,CAAC,WAAW,CAAC,SAAS,EAAE,4CAA4C,CAAC,CAAA;IACjH,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,mCAAmC,WAAW,CAAC,EAAE,eAAe,SAAS,0BAA0B,iBAAiB,EAAE,CAAC,CAAA;IACzI,CAAC;IACD,MAAM,EAAE,GAAG,uBAAuB,CAAC,WAAW,CAAC,EAAE,EAAE,oCAAoC,CAAC,CAAA;IACxF,IAAI,CAAC,oCAAoC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE,mBAAmB,CAAC,CAAA;IAC3E,CAAC;IACD,MAAM,KAAK,GACT,WAAW,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,WAAW,CAAC,KAAK,EAAE,mCAAmC,EAAE,QAAQ,CAAC,CAAA;IACzI,IAAI,WAAW,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE,sBAAsB,CAAC,CAAA;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE;QACF,SAAS;QACT,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,GAAG,CAAC,WAAW,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,YAAoC,EAAE,iBAAoC;IACzG,MAAM,SAAS,GAAG,0BAA0B,CAAC,YAAY,CAAC,SAAS,EAAE,qCAAqC,CAAC,CAAA;IAC3G,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,CAAC,EAAE,eAAe,SAAS,0BAA0B,iBAAiB,EAAE,CAAC,CAAA;IACnI,CAAC;IACD,MAAM,EAAE,GAAG,uBAAuB,CAAC,YAAY,CAAC,EAAE,EAAE,6BAA6B,CAAC,CAAA;IAClF,MAAM,KAAK,GAAG,uBAAuB,CAAC,YAAY,CAAC,KAAK,EAAE,4BAA4B,EAAE,QAAQ,CAAC,CAAA;IACjG,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,kBAAkB,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,YAAY,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,mBAAmB,CAAC,CAAA;IACpE,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,sBAAsB,CAAC,CAAA;IACvE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE;QACF,SAAS;QACT,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,KAAK;QACL,GAAG,CAAC,YAAY,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,YAAY,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,4BAA4B,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClH,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAc;IACnD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ;QAC/B,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ;QACpC,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/G,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAChC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,iCAAiC,CAAC;QAC1D,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,KAAK,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAAC,qCAAqC,CAAC;QAC5E,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACvC,KAAK,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC;QAC9D,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1C,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1C,uBAAuB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAC1C,CAAA;AACH,CAAC;AAED,SAAS,iCAAiC,CAAC,KAAc;IACvD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ;QAC/B,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,QAAQ;QACtC,yBAAyB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ;QAClC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC;QAChF,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,gCAAgC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACnF,CAAA;AACH,CAAC;AAED,SAAS,qCAAqC,CAAC,KAAc;IAC3D,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ;QAC/B,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,QAAQ;QACtC,oCAAoC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,IAAI,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACrE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CACrE,CAAA;AACH,CAAC;AAED,SAAS,8BAA8B,CAAC,KAAc;IACpD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ;QAC/B,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,QAAQ;QACtC,4BAA4B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ;QAClC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,IAAI,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAC9E,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AAClC,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,UAAU,CAAA;AAC3D,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC3F,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa,EAAE,KAAa;IAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC/B,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,kBAAkB,CAAC,CAAA;IAC7C,CAAC;IACD,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,+CAA+C,CAAC,CAAA;IAC1E,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC"}
|