@glubean/scanner 0.3.2 → 0.5.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/dist/ast.d.ts +120 -0
- package/dist/ast.d.ts.map +1 -0
- package/dist/ast.js +312 -0
- package/dist/ast.js.map +1 -0
- package/dist/contract-extraction.d.ts +84 -0
- package/dist/contract-extraction.d.ts.map +1 -1
- package/dist/contract-extraction.js +112 -34
- package/dist/contract-extraction.js.map +1 -1
- package/dist/extractor-ast.d.ts +59 -0
- package/dist/extractor-ast.d.ts.map +1 -0
- package/dist/extractor-ast.js +579 -0
- package/dist/extractor-ast.js.map +1 -0
- package/dist/extractor-static.d.ts +22 -95
- package/dist/extractor-static.d.ts.map +1 -1
- package/dist/extractor-static.js +11 -753
- package/dist/extractor-static.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +2 -1
- package/dist/scanner.js.map +1 -1
- package/dist/static.d.ts +3 -2
- package/dist/static.d.ts.map +1 -1
- package/dist/static.js +6 -1
- package/dist/static.js.map +1 -1
- package/package.json +9 -1
package/dist/ast.d.ts
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared AST helper for the scanner's AST extractors (`extractor-ast.ts`,
|
|
3
|
+
* `contract-ast.ts`) and downstream consumers — exposed as
|
|
4
|
+
* `@glubean/scanner/ast` (the VSCode extension consolidates onto it).
|
|
5
|
+
*
|
|
6
|
+
* Parser: `@babel/parser` (actively maintained, pure JS, no native binary).
|
|
7
|
+
* It parses modern TypeScript natively — `satisfies`, `const` type params,
|
|
8
|
+
* decorators, `<Foo>bar` angle assertions (in `.ts`), import attributes,
|
|
9
|
+
* `using` declarations — so NO source pre-normalization is needed. (We moved off
|
|
10
|
+
* `acorn-typescript`, which was unmaintained since 2024 and could not parse
|
|
11
|
+
* `satisfies`/`const T`, forcing a fragile rewrite hack.)
|
|
12
|
+
*
|
|
13
|
+
* The Babel AST: object literals use `ObjectProperty`, string/number literals
|
|
14
|
+
* are `StringLiteral`/`NumericLiteral`, TS wrappers are `TSAsExpression`,
|
|
15
|
+
* `TSSatisfiesExpression`, `TSNonNullExpression`, `TSTypeAssertion`,
|
|
16
|
+
* `TSInstantiationExpression`. Type-only constructs are ignored — we only read
|
|
17
|
+
* runtime expressions.
|
|
18
|
+
*
|
|
19
|
+
* A thin helper (not raw `parse` calls): the line-number/comment-lookup/
|
|
20
|
+
* `as`-`!`-`satisfies` unwrapping transitions recur across consumers, so
|
|
21
|
+
* centralizing keeps behavior consistent and lets us swap parsers by editing one
|
|
22
|
+
* file.
|
|
23
|
+
*/
|
|
24
|
+
export interface SourceFile {
|
|
25
|
+
/** Original raw text — needed to read template-string raw values, line slices. */
|
|
26
|
+
text: string;
|
|
27
|
+
/** Babel `Program` node. */
|
|
28
|
+
program: AnyNode;
|
|
29
|
+
/**
|
|
30
|
+
* Comments collected during parse, in source order. Babel attaches them to
|
|
31
|
+
* nodes too, but we look them up by offset (e.g. `// @contract` markers).
|
|
32
|
+
*/
|
|
33
|
+
comments: CommentInfo[];
|
|
34
|
+
}
|
|
35
|
+
export interface CommentInfo {
|
|
36
|
+
/** `false` for line comments (`//`), `true` for block comments (`/* */`). */
|
|
37
|
+
block: boolean;
|
|
38
|
+
/** Text inside the delimiters, excluding the `//` or `/* */` markers. */
|
|
39
|
+
text: string;
|
|
40
|
+
start: number;
|
|
41
|
+
end: number;
|
|
42
|
+
}
|
|
43
|
+
export type AnyNode = {
|
|
44
|
+
type: string;
|
|
45
|
+
start: number | null;
|
|
46
|
+
end: number | null;
|
|
47
|
+
loc?: {
|
|
48
|
+
start: {
|
|
49
|
+
line: number;
|
|
50
|
+
column: number;
|
|
51
|
+
};
|
|
52
|
+
end: {
|
|
53
|
+
line: number;
|
|
54
|
+
column: number;
|
|
55
|
+
};
|
|
56
|
+
} | null;
|
|
57
|
+
[key: string]: unknown;
|
|
58
|
+
};
|
|
59
|
+
/** Parse TypeScript/JavaScript source into a {@link SourceFile}. */
|
|
60
|
+
export declare function parseSource(content: string, filePath?: string): SourceFile;
|
|
61
|
+
/**
|
|
62
|
+
* Iterate over every `export const` declaration at the top level. Calls `cb`
|
|
63
|
+
* once per declarator (`export const a = 1, b = 2` → two calls).
|
|
64
|
+
*
|
|
65
|
+
* Contract: skips destructuring patterns (`export const { x } = ...` / `[a] =`)
|
|
66
|
+
* — only plain identifier declarators are surfaced, so callers can assume
|
|
67
|
+
* `declarator.id` is an `Identifier`.
|
|
68
|
+
*/
|
|
69
|
+
export declare function forEachExportedConst(source: SourceFile, cb: (statement: AnyNode, declaration: AnyNode) => void): void;
|
|
70
|
+
/**
|
|
71
|
+
* Returns `true` if a `// @<marker>` line comment leads the node — i.e. it is on
|
|
72
|
+
* its own line and only whitespace/other comments sit between it and the node.
|
|
73
|
+
* (A trailing comment on the previous statement, `const p = 1; // @x`, does NOT
|
|
74
|
+
* count.)
|
|
75
|
+
*/
|
|
76
|
+
export declare function hasLeadingMarker(source: SourceFile, node: AnyNode, marker: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Read a property name as a string. Handles identifier (`key`), string
|
|
79
|
+
* (`"key"`), numeric (`0`), no-substitution template (`` `key` ``), computed
|
|
80
|
+
* string/template (`["key"]`), and shorthand (`{ key }`) keys. Returns undefined
|
|
81
|
+
* for computed expressions that aren't string-resolvable.
|
|
82
|
+
*/
|
|
83
|
+
export declare function propertyNameText(node: AnyNode): string | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* Strip TypeScript and grouping wrappers (`expr as T`, `<T>expr`,
|
|
86
|
+
* `expr satisfies T`, `expr!`, `expr<T>`, `(expr)`) so the caller sees the
|
|
87
|
+
* underlying value. Returns undefined if the input is undefined.
|
|
88
|
+
*/
|
|
89
|
+
export declare function unwrapExpression(expr: AnyNode | undefined): AnyNode | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* Resolve an expression that should be a string literal (or a no-substitution
|
|
92
|
+
* template literal) to its plain string value. Returns undefined for any other
|
|
93
|
+
* shape — including template literals with substitutions.
|
|
94
|
+
*/
|
|
95
|
+
export declare function stringFromExpression(expr: AnyNode | undefined): string | undefined;
|
|
96
|
+
/** Resolve an expression that should be an object literal (stripping type wrappers). */
|
|
97
|
+
export declare function objectFromExpression(expr: AnyNode | undefined): AnyNode | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Find an object-literal property assignment by key name. Returns the
|
|
100
|
+
* `ObjectProperty` node or undefined. Skips spread/method members.
|
|
101
|
+
*/
|
|
102
|
+
export declare function objectProperty(object: AnyNode, name: string): AnyNode | undefined;
|
|
103
|
+
/** Read an object literal's named property as a string (objectProperty + stringFromExpression). */
|
|
104
|
+
export declare function stringProperty(object: AnyNode, name: string): string | undefined;
|
|
105
|
+
/**
|
|
106
|
+
* Walk the method-chain spine looking for the first `.<name>(...)` call (e.g.
|
|
107
|
+
* `.flow("id")`, `.meta(...)`, `.step(...)`). Never descends into arguments or
|
|
108
|
+
* callback bodies — only follows the chain via `callee.object`.
|
|
109
|
+
*/
|
|
110
|
+
export declare function findPropertyCall(root: AnyNode, name: string): AnyNode | undefined;
|
|
111
|
+
/**
|
|
112
|
+
* Depth-first walker. Returning `false` from the callback prunes descent into the
|
|
113
|
+
* current node's children (but doesn't abort the whole walk).
|
|
114
|
+
*/
|
|
115
|
+
export declare function walk(root: AnyNode, cb: (node: AnyNode) => boolean | undefined | void): void;
|
|
116
|
+
/** 1-based line of a node's start position. */
|
|
117
|
+
export declare function lineOf(node: AnyNode): number;
|
|
118
|
+
/** `true` if the node is a top-level `export` declaration wrapper. */
|
|
119
|
+
export declare function hasExportModifier(node: AnyNode): boolean;
|
|
120
|
+
//# sourceMappingURL=ast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,KAAK,EAAE,OAAO,CAAC;IACf,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAID,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,CAAC,EAAE;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,GAAG,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAChG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAa,GAAG,UAAU,CA2C9E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,UAAU,EAClB,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,GACrD,IAAI,CAgBN;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAwB3F;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQlE;AAiBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAiB/E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAelF;AAED,wFAAwF;AACxF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAGnF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAUjF;AAED,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIhF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAiBjF;AASD;;;GAGG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAoB3F;AAED,+CAA+C;AAC/C,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE5C;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAExD"}
|
package/dist/ast.js
ADDED
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared AST helper for the scanner's AST extractors (`extractor-ast.ts`,
|
|
3
|
+
* `contract-ast.ts`) and downstream consumers — exposed as
|
|
4
|
+
* `@glubean/scanner/ast` (the VSCode extension consolidates onto it).
|
|
5
|
+
*
|
|
6
|
+
* Parser: `@babel/parser` (actively maintained, pure JS, no native binary).
|
|
7
|
+
* It parses modern TypeScript natively — `satisfies`, `const` type params,
|
|
8
|
+
* decorators, `<Foo>bar` angle assertions (in `.ts`), import attributes,
|
|
9
|
+
* `using` declarations — so NO source pre-normalization is needed. (We moved off
|
|
10
|
+
* `acorn-typescript`, which was unmaintained since 2024 and could not parse
|
|
11
|
+
* `satisfies`/`const T`, forcing a fragile rewrite hack.)
|
|
12
|
+
*
|
|
13
|
+
* The Babel AST: object literals use `ObjectProperty`, string/number literals
|
|
14
|
+
* are `StringLiteral`/`NumericLiteral`, TS wrappers are `TSAsExpression`,
|
|
15
|
+
* `TSSatisfiesExpression`, `TSNonNullExpression`, `TSTypeAssertion`,
|
|
16
|
+
* `TSInstantiationExpression`. Type-only constructs are ignored — we only read
|
|
17
|
+
* runtime expressions.
|
|
18
|
+
*
|
|
19
|
+
* A thin helper (not raw `parse` calls): the line-number/comment-lookup/
|
|
20
|
+
* `as`-`!`-`satisfies` unwrapping transitions recur across consumers, so
|
|
21
|
+
* centralizing keeps behavior consistent and lets us swap parsers by editing one
|
|
22
|
+
* file.
|
|
23
|
+
*/
|
|
24
|
+
import { parse } from "@babel/parser";
|
|
25
|
+
/** Parse TypeScript/JavaScript source into a {@link SourceFile}. */
|
|
26
|
+
export function parseSource(content, filePath = "input.ts") {
|
|
27
|
+
const jsx = filePath.endsWith(".tsx") || filePath.endsWith(".jsx");
|
|
28
|
+
const base = ["typescript", ["importAttributes", { deprecatedAssertSyntax: true }]];
|
|
29
|
+
if (jsx)
|
|
30
|
+
base.push("jsx");
|
|
31
|
+
const options = (decorators) => ({
|
|
32
|
+
sourceType: "module",
|
|
33
|
+
plugins: [...base, ...decorators],
|
|
34
|
+
ranges: true,
|
|
35
|
+
allowImportExportEverywhere: true,
|
|
36
|
+
allowAwaitOutsideFunction: true,
|
|
37
|
+
allowReturnOutsideFunction: true,
|
|
38
|
+
allowSuperOutsideMethod: true,
|
|
39
|
+
allowUndeclaredExports: true,
|
|
40
|
+
});
|
|
41
|
+
// Babel's `decorators` (stage-3) and `decorators-legacy` are mutually
|
|
42
|
+
// exclusive. Legacy is the only mode with PARAMETER decorators (the common
|
|
43
|
+
// experimentalDecorators ecosystem — Angular/Nest); the modern mode (option
|
|
44
|
+
// omitted) accepts BOTH `@dec export class` and `export @dec class` placements
|
|
45
|
+
// but has no parameter decorators. Try legacy first (covers param decorators +
|
|
46
|
+
// `@dec export` + `accessor`); on a parse failure (e.g. a file using the
|
|
47
|
+
// post-export `export @dec` placement), retry with modern, which accepts both
|
|
48
|
+
// placements. The only combo neither parses — `export @dec` together with a
|
|
49
|
+
// parameter decorator — isn't valid under any single TS decorator config.
|
|
50
|
+
let file;
|
|
51
|
+
try {
|
|
52
|
+
file = parse(content, options(["decorators-legacy", "decoratorAutoAccessors"]));
|
|
53
|
+
}
|
|
54
|
+
catch (legacyError) {
|
|
55
|
+
try {
|
|
56
|
+
file = parse(content, options(["decorators", "decoratorAutoAccessors"]));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
throw legacyError; // not a decorator-mode mismatch — surface the real error
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const comments = (file.comments ?? []).map((c) => ({
|
|
63
|
+
block: c.type === "CommentBlock",
|
|
64
|
+
text: c.value,
|
|
65
|
+
start: c.start ?? 0,
|
|
66
|
+
end: c.end ?? 0,
|
|
67
|
+
}));
|
|
68
|
+
return { text: content, program: file.program, comments };
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Iterate over every `export const` declaration at the top level. Calls `cb`
|
|
72
|
+
* once per declarator (`export const a = 1, b = 2` → two calls).
|
|
73
|
+
*
|
|
74
|
+
* Contract: skips destructuring patterns (`export const { x } = ...` / `[a] =`)
|
|
75
|
+
* — only plain identifier declarators are surfaced, so callers can assume
|
|
76
|
+
* `declarator.id` is an `Identifier`.
|
|
77
|
+
*/
|
|
78
|
+
export function forEachExportedConst(source, cb) {
|
|
79
|
+
const body = source.program.body ?? [];
|
|
80
|
+
for (const statement of body) {
|
|
81
|
+
if (statement.type !== "ExportNamedDeclaration")
|
|
82
|
+
continue;
|
|
83
|
+
const declaration = statement.declaration;
|
|
84
|
+
if (!declaration)
|
|
85
|
+
continue;
|
|
86
|
+
if (declaration.type !== "VariableDeclaration")
|
|
87
|
+
continue;
|
|
88
|
+
if (declaration.kind !== "const")
|
|
89
|
+
continue;
|
|
90
|
+
const declarators = declaration.declarations;
|
|
91
|
+
if (!declarators)
|
|
92
|
+
continue;
|
|
93
|
+
for (const declarator of declarators) {
|
|
94
|
+
const id = declarator.id;
|
|
95
|
+
if (id?.type !== "Identifier")
|
|
96
|
+
continue;
|
|
97
|
+
cb(statement, declarator);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Returns `true` if a `// @<marker>` line comment leads the node — i.e. it is on
|
|
103
|
+
* its own line and only whitespace/other comments sit between it and the node.
|
|
104
|
+
* (A trailing comment on the previous statement, `const p = 1; // @x`, does NOT
|
|
105
|
+
* count.)
|
|
106
|
+
*/
|
|
107
|
+
export function hasLeadingMarker(source, node, marker) {
|
|
108
|
+
const start = node.start;
|
|
109
|
+
if (start == null)
|
|
110
|
+
return false;
|
|
111
|
+
const candidates = source.comments
|
|
112
|
+
.filter((c) => c.end <= start)
|
|
113
|
+
.sort((a, b) => a.start - b.start);
|
|
114
|
+
if (candidates.length === 0)
|
|
115
|
+
return false;
|
|
116
|
+
const re = new RegExp(String.raw `^\s*@${marker}\s*$`);
|
|
117
|
+
// Walk the contiguous leading-comment block from the node upward: each comment
|
|
118
|
+
// counts while everything from it to the previous thing toward the node
|
|
119
|
+
// (`cursor`) is whitespace. Other comments don't break the chain.
|
|
120
|
+
let cursor = start;
|
|
121
|
+
for (let i = candidates.length - 1; i >= 0; i--) {
|
|
122
|
+
const comment = candidates[i];
|
|
123
|
+
if (!/^\s*$/.test(source.text.slice(comment.end, cursor)))
|
|
124
|
+
break; // code between → block ended
|
|
125
|
+
if (!comment.block && re.test(comment.text)) {
|
|
126
|
+
// Must be a LEADING comment (its own line), not a trailing comment.
|
|
127
|
+
const lineStart = source.text.lastIndexOf("\n", comment.start - 1) + 1;
|
|
128
|
+
if (/^\s*$/.test(source.text.slice(lineStart, comment.start)))
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
cursor = comment.start;
|
|
132
|
+
}
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Read a property name as a string. Handles identifier (`key`), string
|
|
137
|
+
* (`"key"`), numeric (`0`), no-substitution template (`` `key` ``), computed
|
|
138
|
+
* string/template (`["key"]`), and shorthand (`{ key }`) keys. Returns undefined
|
|
139
|
+
* for computed expressions that aren't string-resolvable.
|
|
140
|
+
*/
|
|
141
|
+
export function propertyNameText(node) {
|
|
142
|
+
if (node.type === "ObjectProperty" || node.type === "ObjectMethod") {
|
|
143
|
+
const key = node.key;
|
|
144
|
+
if (!key)
|
|
145
|
+
return undefined;
|
|
146
|
+
return readKey(key, node.computed === true);
|
|
147
|
+
}
|
|
148
|
+
// Fallback: caller passed the key node directly.
|
|
149
|
+
return readKey(node, false);
|
|
150
|
+
}
|
|
151
|
+
function readKey(key, computed) {
|
|
152
|
+
if (key.type === "Identifier" && !computed)
|
|
153
|
+
return key.name;
|
|
154
|
+
if (key.type === "StringLiteral")
|
|
155
|
+
return key.value;
|
|
156
|
+
if (key.type === "NumericLiteral")
|
|
157
|
+
return String(key.value);
|
|
158
|
+
if (key.type === "TemplateLiteral") {
|
|
159
|
+
const expressions = key.expressions;
|
|
160
|
+
const quasis = key.quasis;
|
|
161
|
+
if (expressions && expressions.length === 0 && quasis && quasis.length === 1) {
|
|
162
|
+
const cooked = quasis[0].value.cooked;
|
|
163
|
+
if (typeof cooked === "string")
|
|
164
|
+
return cooked;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Strip TypeScript and grouping wrappers (`expr as T`, `<T>expr`,
|
|
171
|
+
* `expr satisfies T`, `expr!`, `expr<T>`, `(expr)`) so the caller sees the
|
|
172
|
+
* underlying value. Returns undefined if the input is undefined.
|
|
173
|
+
*/
|
|
174
|
+
export function unwrapExpression(expr) {
|
|
175
|
+
let current = expr;
|
|
176
|
+
while (current) {
|
|
177
|
+
switch (current.type) {
|
|
178
|
+
case "TSAsExpression":
|
|
179
|
+
case "TSTypeAssertion":
|
|
180
|
+
case "TSSatisfiesExpression":
|
|
181
|
+
case "TSNonNullExpression":
|
|
182
|
+
case "TSInstantiationExpression":
|
|
183
|
+
case "ParenthesizedExpression":
|
|
184
|
+
current = current.expression;
|
|
185
|
+
break;
|
|
186
|
+
default:
|
|
187
|
+
return current;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return current;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Resolve an expression that should be a string literal (or a no-substitution
|
|
194
|
+
* template literal) to its plain string value. Returns undefined for any other
|
|
195
|
+
* shape — including template literals with substitutions.
|
|
196
|
+
*/
|
|
197
|
+
export function stringFromExpression(expr) {
|
|
198
|
+
const unwrapped = unwrapExpression(expr);
|
|
199
|
+
if (!unwrapped)
|
|
200
|
+
return undefined;
|
|
201
|
+
if (unwrapped.type === "StringLiteral" && typeof unwrapped.value === "string") {
|
|
202
|
+
return unwrapped.value;
|
|
203
|
+
}
|
|
204
|
+
if (unwrapped.type === "TemplateLiteral") {
|
|
205
|
+
const expressions = unwrapped.expressions;
|
|
206
|
+
const quasis = unwrapped.quasis;
|
|
207
|
+
if (expressions && expressions.length === 0 && quasis && quasis.length === 1) {
|
|
208
|
+
const cooked = quasis[0].value.cooked;
|
|
209
|
+
if (typeof cooked === "string")
|
|
210
|
+
return cooked;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
/** Resolve an expression that should be an object literal (stripping type wrappers). */
|
|
216
|
+
export function objectFromExpression(expr) {
|
|
217
|
+
const unwrapped = unwrapExpression(expr);
|
|
218
|
+
return unwrapped?.type === "ObjectExpression" ? unwrapped : undefined;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Find an object-literal property assignment by key name. Returns the
|
|
222
|
+
* `ObjectProperty` node or undefined. Skips spread/method members.
|
|
223
|
+
*/
|
|
224
|
+
export function objectProperty(object, name) {
|
|
225
|
+
if (object.type !== "ObjectExpression")
|
|
226
|
+
return undefined;
|
|
227
|
+
const properties = object.properties;
|
|
228
|
+
if (!properties)
|
|
229
|
+
return undefined;
|
|
230
|
+
for (const property of properties) {
|
|
231
|
+
if (property.type === "ObjectProperty" && propertyNameText(property) === name) {
|
|
232
|
+
return property;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
/** Read an object literal's named property as a string (objectProperty + stringFromExpression). */
|
|
238
|
+
export function stringProperty(object, name) {
|
|
239
|
+
const property = objectProperty(object, name);
|
|
240
|
+
if (!property)
|
|
241
|
+
return undefined;
|
|
242
|
+
return stringFromExpression(property.value);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Walk the method-chain spine looking for the first `.<name>(...)` call (e.g.
|
|
246
|
+
* `.flow("id")`, `.meta(...)`, `.step(...)`). Never descends into arguments or
|
|
247
|
+
* callback bodies — only follows the chain via `callee.object`.
|
|
248
|
+
*/
|
|
249
|
+
export function findPropertyCall(root, name) {
|
|
250
|
+
let current = unwrapExpression(root);
|
|
251
|
+
while (current && current.type === "CallExpression") {
|
|
252
|
+
const callee = unwrapExpression(current.callee);
|
|
253
|
+
if (!callee)
|
|
254
|
+
break;
|
|
255
|
+
if (callee.type === "MemberExpression") {
|
|
256
|
+
const property = callee.property;
|
|
257
|
+
// Non-computed `.name(...)` only — `obj[name](...)` is a dynamic access.
|
|
258
|
+
if (callee.computed !== true && property.type === "Identifier" && property.name === name) {
|
|
259
|
+
return current;
|
|
260
|
+
}
|
|
261
|
+
current = unwrapExpression(callee.object);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
current = callee;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return undefined;
|
|
268
|
+
}
|
|
269
|
+
// Babel attaches non-AST bookkeeping to nodes; skip it so `walk` only descends
|
|
270
|
+
// into real child nodes.
|
|
271
|
+
const _SKIP_KEYS = new Set([
|
|
272
|
+
"type", "start", "end", "loc", "range", "extra",
|
|
273
|
+
"leadingComments", "trailingComments", "innerComments", "comments", "tokens", "errors",
|
|
274
|
+
]);
|
|
275
|
+
/**
|
|
276
|
+
* Depth-first walker. Returning `false` from the callback prunes descent into the
|
|
277
|
+
* current node's children (but doesn't abort the whole walk).
|
|
278
|
+
*/
|
|
279
|
+
export function walk(root, cb) {
|
|
280
|
+
const stack = [root];
|
|
281
|
+
while (stack.length > 0) {
|
|
282
|
+
const node = stack.pop();
|
|
283
|
+
if (cb(node) === false)
|
|
284
|
+
continue;
|
|
285
|
+
for (const key of Object.keys(node)) {
|
|
286
|
+
if (_SKIP_KEYS.has(key))
|
|
287
|
+
continue;
|
|
288
|
+
const value = node[key];
|
|
289
|
+
if (!value)
|
|
290
|
+
continue;
|
|
291
|
+
if (Array.isArray(value)) {
|
|
292
|
+
for (const item of value) {
|
|
293
|
+
if (item && typeof item === "object" && typeof item.type === "string") {
|
|
294
|
+
stack.push(item);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
else if (typeof value === "object" && typeof value.type === "string") {
|
|
299
|
+
stack.push(value);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/** 1-based line of a node's start position. */
|
|
305
|
+
export function lineOf(node) {
|
|
306
|
+
return node.loc?.start.line ?? 1;
|
|
307
|
+
}
|
|
308
|
+
/** `true` if the node is a top-level `export` declaration wrapper. */
|
|
309
|
+
export function hasExportModifier(node) {
|
|
310
|
+
return node.type === "ExportNamedDeclaration";
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=ast.js.map
|
package/dist/ast.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -124,6 +124,40 @@ export type ExtractedContract = NormalizedContractMeta;
|
|
|
124
124
|
/**
|
|
125
125
|
* Single step in a flow projection. Discriminated by `kind`.
|
|
126
126
|
*/
|
|
127
|
+
/**
|
|
128
|
+
* JSON-safe predicate descriptor for a predicate-mode branch case.
|
|
129
|
+
* Mirrors the SDK's `ExtractedPredicate` (scanner is dep-free, so the shape is
|
|
130
|
+
* duplicated structurally rather than imported).
|
|
131
|
+
*/
|
|
132
|
+
export type NormalizedPredicate = {
|
|
133
|
+
kind: "compare";
|
|
134
|
+
op: string;
|
|
135
|
+
path: string[];
|
|
136
|
+
value: string | number | boolean | null;
|
|
137
|
+
} | {
|
|
138
|
+
kind: "in";
|
|
139
|
+
path: string[];
|
|
140
|
+
values: Array<string | number | boolean | null>;
|
|
141
|
+
} | {
|
|
142
|
+
kind: "presence";
|
|
143
|
+
op: string;
|
|
144
|
+
path: string[];
|
|
145
|
+
} | {
|
|
146
|
+
kind: "matches";
|
|
147
|
+
path: string[];
|
|
148
|
+
pattern: string;
|
|
149
|
+
flags?: string;
|
|
150
|
+
} | {
|
|
151
|
+
kind: "and" | "or";
|
|
152
|
+
clauses: NormalizedPredicate[];
|
|
153
|
+
} | {
|
|
154
|
+
kind: "not";
|
|
155
|
+
clause: NormalizedPredicate;
|
|
156
|
+
} | {
|
|
157
|
+
kind: "opaque";
|
|
158
|
+
strictness: "L1" | "L0";
|
|
159
|
+
mayDoAsyncIO: boolean;
|
|
160
|
+
};
|
|
127
161
|
export type NormalizedFlowStep = {
|
|
128
162
|
kind: "contract-call";
|
|
129
163
|
name?: string;
|
|
@@ -133,11 +167,57 @@ export type NormalizedFlowStep = {
|
|
|
133
167
|
target: string;
|
|
134
168
|
inputs?: NormalizedFieldMapping[];
|
|
135
169
|
outputs?: NormalizedFieldMapping[];
|
|
170
|
+
/** Accepted alternate outcome keys (HTTP: status numbers) when the step declared `accept`. */
|
|
171
|
+
accept?: ReadonlyArray<string | number>;
|
|
136
172
|
} | {
|
|
137
173
|
kind: "compute";
|
|
138
174
|
name?: string;
|
|
139
175
|
reads: string[];
|
|
140
176
|
writes: string[];
|
|
177
|
+
} | {
|
|
178
|
+
/**
|
|
179
|
+
* Branch (condition / switch). `mode` discriminates value-switch vs
|
|
180
|
+
* predicate-branch. Sub-steps (cases + default) nest recursively so
|
|
181
|
+
* downstream consumers can render/inspect the full tree.
|
|
182
|
+
*/
|
|
183
|
+
kind: "branch";
|
|
184
|
+
mode: "value" | "predicate";
|
|
185
|
+
name?: string;
|
|
186
|
+
/** value-mode only: the traced subject lens path. */
|
|
187
|
+
subjectPath?: string[];
|
|
188
|
+
cases: Array<{
|
|
189
|
+
/** value-mode: scalar matched against the subject. */
|
|
190
|
+
value?: string | number | boolean | null;
|
|
191
|
+
/** predicate-mode: human-facing fallback message for the branch. */
|
|
192
|
+
message?: string;
|
|
193
|
+
/** predicate-mode: JSON-safe predicate (absent in the duck-typed fallback path). */
|
|
194
|
+
predicate?: NormalizedPredicate;
|
|
195
|
+
steps: NormalizedFlowStep[];
|
|
196
|
+
}>;
|
|
197
|
+
default: NormalizedFlowStep[];
|
|
198
|
+
} | {
|
|
199
|
+
/**
|
|
200
|
+
* Poll (bounded poll-until). Repeats one case until `until` holds, bounded
|
|
201
|
+
* by `timeoutMs` / `maxAttempts` / `perAttemptTimeoutMs`. `until` is the
|
|
202
|
+
* exit predicate (L2 precise, or `{kind:"opaque",...}` when marked).
|
|
203
|
+
*/
|
|
204
|
+
kind: "poll";
|
|
205
|
+
name?: string;
|
|
206
|
+
contractId: string;
|
|
207
|
+
caseKey: string;
|
|
208
|
+
protocol: string;
|
|
209
|
+
target: string;
|
|
210
|
+
inputs?: NormalizedFieldMapping[];
|
|
211
|
+
outputs?: NormalizedFieldMapping[];
|
|
212
|
+
accept?: ReadonlyArray<string | number>;
|
|
213
|
+
/** Exit predicate (absent only in the duck-typed fallback path). */
|
|
214
|
+
until?: NormalizedPredicate;
|
|
215
|
+
message?: string;
|
|
216
|
+
every: number;
|
|
217
|
+
backoff: number;
|
|
218
|
+
timeoutMs?: number;
|
|
219
|
+
perAttemptTimeoutMs?: number;
|
|
220
|
+
maxAttempts?: number;
|
|
141
221
|
};
|
|
142
222
|
export interface NormalizedFieldMapping {
|
|
143
223
|
target: string;
|
|
@@ -335,6 +415,10 @@ export declare function protocolContractToNormalized(value: {
|
|
|
335
415
|
_projection: any;
|
|
336
416
|
_extracted: any;
|
|
337
417
|
}, exportName: string): NormalizedContractMeta;
|
|
418
|
+
export declare function flowContractToNormalized(value: {
|
|
419
|
+
_flow: any;
|
|
420
|
+
_extracted?: any;
|
|
421
|
+
}, exportName: string): NormalizedFlowMeta;
|
|
338
422
|
/**
|
|
339
423
|
* Bootstrap overlay marker collected during file walk — pre-synthesis raw
|
|
340
424
|
* material. Not yet a final attachment entry; `synthesizeAttachments`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-extraction.d.ts","sourceRoot":"","sources":["../src/contract-extraction.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"contract-extraction.d.ts","sourceRoot":"","sources":["../src/contract-extraction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAUH,sBAAsB;AACtB,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;AAEjE,qBAAqB;AACrB,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE3D,kCAAkC;AAClC,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;AAElE,+BAA+B;AAC/B,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,4DAA4D;AAC5D,MAAM,MAAM,UAAU,GAClB,MAAM,GACN;IACE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,CAAC;AAEN,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,8CAA8C;AAC9C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,iDAAiD;AACjD,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iEAAiE;IACjE,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AAIvD;;GAEG;AACH;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;CAAE,GACxF;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAA;CAAE,GAC/E;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,mBAAmB,EAAE,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC;AAEvE,MAAM,MAAM,kBAAkB,GAC1B;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACnC,8FAA8F;IAC9F,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;CACzC,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,GACD;IACE;;;;OAIG;IACH,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;QACX,sDAAsD;QACtD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;QACzC,oEAAoE;QACpE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,oFAAoF;QACpF,SAAS,CAAC,EAAE,mBAAmB,CAAC;QAChC,KAAK,EAAE,kBAAkB,EAAE,CAAC;KAC7B,CAAC,CAAC;IACH,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B,GACD;IACE;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACnC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACxC,oEAAoE;IACpE,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EACF;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAC9B;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GACnC;QAAE,IAAI,EAAE,cAAc,CAAA;KAAE,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAqBD;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,KAAK,CAAC;IACZ,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oCAAoC;IACnD,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,SAAS,EAAE;QACT,2EAA2E;QAC3E,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,iFAAiF;IACjF,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,IAAI,CAAC;QAChB,6FAA6F;QAC7F,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,uEAAuE;AACvE,MAAM,MAAM,wBAAwB,GAChC,uBAAuB,GACvB,oCAAoC,GACpC,wBAAwB,CAAC;AAE7B,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC;;;;OAIG;IACH,WAAW,EAAE,wBAAwB,EAAE,CAAC;IACxC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;IAC1D,cAAc,EAAE,sBAAsB,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;CAChB,CAOA;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;IACvD,WAAW,EAAE;QACX,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,EAAE,KAAK,CAAC;YACX,GAAG,EAAE,MAAM,CAAC;YACZ,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,SAAS,EAAE,MAAM,CAAC;YAClB,QAAQ,EAAE,MAAM,CAAC;YACjB,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;YAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACrC,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,IAAI,CAAC,EAAE,OAAO,CAAC;SAChB,CAAC,CAAC;KACJ,CAAC;IAGF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,CAWA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;IACnD,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;QACpC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;QACvC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;KACnB,CAAC;IACF,UAAU,CAAC,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,YAAY,CAAC,EAAE,IAAI,CAAC;QACpB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;KACnB,CAAC;CACH,CAOA;AAYD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE;IAAE,WAAW,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,GAAG,CAAA;CAAE,EAC5C,UAAU,EAAE,MAAM,GACjB,sBAAsB,CAoCxB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE;IAAE,KAAK,EAAE,GAAG,CAAC;IAAC,UAAU,CAAC,EAAE,GAAG,CAAA;CAAE,EACvC,UAAU,EAAE,MAAM,GACjB,kBAAkB,CAsCpB;AA8ID;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAC9B,UAAU,EAAE,MAAM,GACjB,sBAAsB,GAAG,IAAI,CAa/B;AAgBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,sBAAsB,EAAE,EACnC,KAAK,EAAE,kBAAkB,EAAE,EAC3B,OAAO,EAAE,sBAAsB,EAAE,GAChC;IAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;CAAE,CA+EjF;AAmFD;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;AAsCD;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,CAAC,CA0B3B;AAeD;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA+B/E;AAMD,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,CAKnD"}
|