@contractkit/plugin-typescript 0.28.1 → 0.28.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/.turbo/turbo-build$colon$ci.log +5 -5
- package/.turbo/turbo-test$colon$ci.log +17 -15
- package/CHANGELOG.md +6 -0
- package/dist/codegen-mcp.d.ts +38 -0
- package/dist/codegen-mcp.d.ts.map +1 -0
- package/dist/codegen-operation.d.ts +42 -1
- package/dist/codegen-operation.d.ts.map +1 -1
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +575 -35
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/codegen-mcp.ts +501 -0
- package/src/codegen-operation.ts +39 -5
- package/src/index.ts +154 -0
- package/tests/codegen-mcp.test.ts +246 -0
- package/tests/codegen-operation.test.ts +18 -0
- package/tests/pipeline.test.ts +59 -0
|
@@ -5,9 +5,9 @@ $ tsup src/index.ts --format esm --sourcemap --dts && tsc --emitDeclarationOnly
|
|
|
5
5
|
[34mCLI[39m tsup v8.5.1
|
|
6
6
|
[34mCLI[39m Target: esnext
|
|
7
7
|
[34mESM[39m Build start
|
|
8
|
-
[32mESM[39m [1mdist/index.js [22m[
|
|
9
|
-
[32mESM[39m [1mdist/index.js.map [22m[
|
|
10
|
-
[32mESM[39m ⚡️ Build success in
|
|
8
|
+
[32mESM[39m [1mdist/index.js [22m[32m176.01 KB[39m
|
|
9
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m388.17 KB[39m
|
|
10
|
+
[32mESM[39m ⚡️ Build success in 473ms
|
|
11
11
|
[34mDTS[39m Build start
|
|
12
|
-
[32mDTS[39m ⚡️ Build success in
|
|
13
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[
|
|
12
|
+
[32mDTS[39m ⚡️ Build success in 5954ms
|
|
13
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m3.71 KB[39m
|
|
@@ -3,30 +3,32 @@ $ vitest run --coverage
|
|
|
3
3
|
[1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/ContractKit/ContractKit/packages/plugin-typescript[39m
|
|
4
4
|
[2mCoverage enabled with [22m[33mv8[39m
|
|
5
5
|
|
|
6
|
-
[32m✓[39m tests/codegen-contract.test.ts [2m([22m[2m128 tests[22m[2m)[22m[32m
|
|
7
|
-
[32m✓[39m tests/codegen-operation.test.ts [2m([22m[
|
|
8
|
-
[32m✓[39m tests/codegen-sdk.test.ts [2m([22m[2m140 tests[22m[2m)[22m[
|
|
9
|
-
[32m✓[39m tests/codegen-plain-types.test.ts [2m([22m[2m61 tests[22m[2m)[22m[32m
|
|
10
|
-
[32m✓[39m tests/
|
|
11
|
-
[32m✓[39m tests/
|
|
12
|
-
[32m✓[39m tests/
|
|
6
|
+
[32m✓[39m tests/codegen-contract.test.ts [2m([22m[2m128 tests[22m[2m)[22m[32m 233[2mms[22m[39m
|
|
7
|
+
[32m✓[39m tests/codegen-operation.test.ts [2m([22m[2m91 tests[22m[2m)[22m[32m 103[2mms[22m[39m
|
|
8
|
+
[32m✓[39m tests/codegen-sdk.test.ts [2m([22m[2m140 tests[22m[2m)[22m[32m 276[2mms[22m[39m
|
|
9
|
+
[32m✓[39m tests/codegen-plain-types.test.ts [2m([22m[2m61 tests[22m[2m)[22m[32m 42[2mms[22m[39m
|
|
10
|
+
[32m✓[39m tests/codegen-server.test.ts [2m([22m[2m22 tests[22m[2m)[22m[32m 91[2mms[22m[39m
|
|
11
|
+
[32m✓[39m tests/pipeline.test.ts [2m([22m[2m28 tests[22m[2m)[22m[32m 224[2mms[22m[39m
|
|
12
|
+
[32m✓[39m tests/codegen-mcp.test.ts [2m([22m[2m24 tests[22m[2m)[22m[32m 98[2mms[22m[39m
|
|
13
|
+
[32m✓[39m tests/escaping-security.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 51[2mms[22m[39m
|
|
13
14
|
|
|
14
|
-
[2m Test Files [22m [1m[
|
|
15
|
-
[2m Tests [22m [1m[
|
|
16
|
-
[2m Start at [22m
|
|
17
|
-
[2m Duration [22m 9.
|
|
15
|
+
[2m Test Files [22m [1m[32m8 passed[39m[22m[90m (8)[39m
|
|
16
|
+
[2m Tests [22m [1m[32m512 passed[39m[22m[90m (512)[39m
|
|
17
|
+
[2m Start at [22m 16:29:52
|
|
18
|
+
[2m Duration [22m 9.09s[2m (transform 4.13s, setup 0ms, import 16.79s, tests 1.12s, environment 1ms)[22m
|
|
18
19
|
|
|
19
20
|
[34m % [39m[2mCoverage report from [22m[33mv8[39m
|
|
20
21
|
-------------------|---------|----------|---------|---------|-------------------
|
|
21
22
|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
|
|
22
23
|
-------------------|---------|----------|---------|---------|-------------------
|
|
23
|
-
All files |
|
|
24
|
-
src |
|
|
24
|
+
All files | 81.49 | 76.01 | 84.56 | 84.05 |
|
|
25
|
+
src | 81.33 | 75.75 | 84.25 | 83.87 |
|
|
25
26
|
...n-contract.ts | 88.1 | 82.91 | 90.08 | 89.26 | ...1088,1093-1094
|
|
26
|
-
|
|
27
|
+
codegen-mcp.ts | 82.67 | 75.47 | 84.61 | 85.9 | ...85,290-291,374
|
|
28
|
+
...-operation.ts | 78.46 | 74.7 | 78.94 | 79.9 | ...99-710,715-716
|
|
27
29
|
...lain-types.ts | 91.52 | 81.65 | 96.87 | 94.4 | ...23,143,249,255
|
|
28
30
|
codegen-sdk.ts | 88.37 | 83.2 | 87.83 | 91.48 | ...1187-1188,1191
|
|
29
|
-
index.ts |
|
|
31
|
+
index.ts | 60.04 | 48.95 | 65.45 | 63.82 | ...1002,1018-1037
|
|
30
32
|
path-utils.ts | 69.56 | 50 | 100 | 73.5 | ...65-168,216-231
|
|
31
33
|
ts-render.ts | 84.21 | 86.66 | 75 | 89.23 | 68,141,172-180
|
|
32
34
|
tests | 90.38 | 90.9 | 89.28 | 93.47 |
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @contractkit/contractkit-plugin-typescript
|
|
2
2
|
|
|
3
|
+
## 0.28.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ca9309a: Generated Koa route handlers now use `async ctx => {` instead of `async (ctx, next) => {`. The `next` argument was never referenced in the emitted body and tripped no-unused-vars lint rules in consuming projects.
|
|
8
|
+
|
|
3
9
|
## 0.28.1
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { OpRootNode } from '@contractkit/core';
|
|
2
|
+
export interface McpCodegenOptions {
|
|
3
|
+
/** Absolute path of the file being generated. Used to compute relative imports. */
|
|
4
|
+
outPath?: string;
|
|
5
|
+
/** Map from schema identifier (model name / `${name}Input`) → absolute output file. */
|
|
6
|
+
modelOutPaths?: Map<string, string>;
|
|
7
|
+
/** Model names that have an Input variant schema. */
|
|
8
|
+
modelsWithInput?: Set<string>;
|
|
9
|
+
/** Model names that have an Output variant schema. */
|
|
10
|
+
modelsWithOutput?: Set<string>;
|
|
11
|
+
/** Import-path template for service implementations (same semantics as ServerConfig). */
|
|
12
|
+
servicePathTemplate?: string;
|
|
13
|
+
/** Emit tools for `internal` operations. Default false. */
|
|
14
|
+
includeInternal?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* True if the root has at least one MCP-exposed operation. With `includeInternal: false`
|
|
18
|
+
* (default) `internal` operations don't count. Mirrors `hasPublicOperations`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function hasMcpOperations(root: OpRootNode, includeInternal?: boolean): boolean;
|
|
21
|
+
/** The exported register-fn name for an op-root file, e.g. `payments.op` → `registerPaymentsMcpTools`. */
|
|
22
|
+
export declare function deriveMcpRegisterFnName(file: string): string;
|
|
23
|
+
/** Generate one `<filename>.mcp.ts` for an op-root: tool handler classes + a per-file register fn. */
|
|
24
|
+
export declare function generateMcpFile(root: OpRootNode, options?: McpCodegenOptions): string;
|
|
25
|
+
/** One entry per emitted `<filename>.mcp.ts` for the aggregator to import. */
|
|
26
|
+
export interface McpAggregatorEntry {
|
|
27
|
+
/** The file's exported register fn name, e.g. `registerPaymentsMcpTools`. */
|
|
28
|
+
registerFn: string;
|
|
29
|
+
/** Module specifier for the file, relative to the aggregator and `.js`-suffixed. */
|
|
30
|
+
importPath: string;
|
|
31
|
+
}
|
|
32
|
+
/** Generate the aggregator `mcp.tools.ts` that assembles the single McpToolHandlerMap. */
|
|
33
|
+
export declare function generateMcpAggregator(entries: McpAggregatorEntry[]): string;
|
|
34
|
+
/** Generate the optional `mcp.router.ts` — the standard ServerKit route wiring for the dispatcher. */
|
|
35
|
+
export declare function generateMcpRouter(options?: {
|
|
36
|
+
path?: string;
|
|
37
|
+
}): string;
|
|
38
|
+
//# sourceMappingURL=codegen-mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen-mcp.d.ts","sourceRoot":"","sources":["../src/codegen-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA8E,MAAM,mBAAmB,CAAC;AAShI,MAAM,WAAW,iBAAiB;IAC9B,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,qDAAqD;IACrD,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,yFAAyF;IACzF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AASD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,UAAQ,GAAG,OAAO,CASnF;AAoVD,0GAA0G;AAC1G,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,sGAAsG;AACtG,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CA0DzF;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IAC/B,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAe3E;AAED,sGAAsG;AACtG,wBAAgB,iBAAiB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAuBzE"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { OpRootNode, ContractTypeNode } from '@contractkit/core';
|
|
1
|
+
import type { OpRootNode, OpRouteNode, OpOperationNode, ContractTypeNode } from '@contractkit/core';
|
|
2
2
|
/**
|
|
3
3
|
* Deep structural equality on ContractTypeNode, ignoring source locations on inline fields.
|
|
4
4
|
* Used to decide whether multiple declared request MIMEs can share a single validate path.
|
|
5
5
|
*/
|
|
6
6
|
export declare function bodyTypesStructurallyEqual(a: ContractTypeNode, b: ContractTypeNode): boolean;
|
|
7
|
+
/** Options controlling how {@link generateOp} renders a Koa router module. */
|
|
7
8
|
export interface OpCodegenOptions {
|
|
8
9
|
servicePathTemplate?: string;
|
|
9
10
|
typeImportPathTemplate?: string;
|
|
@@ -23,4 +24,44 @@ export interface OpCodegenOptions {
|
|
|
23
24
|
}
|
|
24
25
|
/** Generate a Koa router module for every operation in `root`, including the imports, type aliases, and handler list. */
|
|
25
26
|
export declare function generateOp(root: OpRootNode, options?: OpCodegenOptions): string;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the service class and method a handler should delegate to.
|
|
29
|
+
*
|
|
30
|
+
* Uses the operation's explicit `service: Class.method` declaration when present; otherwise derives
|
|
31
|
+
* the class from the contract file name (`ledger.categories.ck` → `LedgerCategoriesService`) and the
|
|
32
|
+
* method from the HTTP verb and whether the path carries a parameter (`get` → `list` / `getById`).
|
|
33
|
+
*
|
|
34
|
+
* @param file Path of the `.ck` file the operation came from.
|
|
35
|
+
*/
|
|
36
|
+
export declare function inferService(op: OpOperationNode, route: OpRouteNode, file: string): {
|
|
37
|
+
className: string;
|
|
38
|
+
methodName: string;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Build the comma-separated argument list passed to the service method in a generated handler.
|
|
42
|
+
*
|
|
43
|
+
* Order is params, body, query, headers. Inline path params are spread as individual identifiers;
|
|
44
|
+
* a referenced/compound params type is passed as a single `params` object. A lone
|
|
45
|
+
* `multipart/form-data` request body is passed as `multipartBody` rather than `body`.
|
|
46
|
+
*
|
|
47
|
+
* @returns The rendered argument list, or an empty string when the method takes no arguments.
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildArgs(route: OpRouteNode, op: OpOperationNode): string;
|
|
50
|
+
/**
|
|
51
|
+
* Derive the PascalCase base name used for router, service, and type names from a contract file path.
|
|
52
|
+
*
|
|
53
|
+
* Strips directories and the `.op`/`.ck` extension, then PascalCases each dot-separated segment
|
|
54
|
+
* (`contracts/ledger.categories.ck` → `LedgerCategories`). Falls back to `Resource` for an empty path.
|
|
55
|
+
*/
|
|
56
|
+
export declare function deriveBaseName(file: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Resolve the import specifier for a service class.
|
|
59
|
+
*
|
|
60
|
+
* Drops the trailing `Service` suffix and kebab-cases the remainder, then applies `template` if given
|
|
61
|
+
* (`{name}` → `Ledger`, `{kebab}` → `ledger`). Without a template, defaults to
|
|
62
|
+
* `#modules/<kebab>/<kebab>.service.js`.
|
|
63
|
+
*
|
|
64
|
+
* @param template Optional `servicePathTemplate` from the plugin config.
|
|
65
|
+
*/
|
|
66
|
+
export declare function deriveModulePath(serviceName: string, template?: string): string;
|
|
26
67
|
//# sourceMappingURL=codegen-operation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen-operation.d.ts","sourceRoot":"","sources":["../src/codegen-operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"codegen-operation.d.ts","sourceRoot":"","sources":["../src/codegen-operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAA2B,MAAM,mBAAmB,CAAC;AAmC7H;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAkE5F;AAID,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,qFAAqF;IACrF,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,yHAAyH;AACzH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CA4EnF;AAsKD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAY7H;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,eAAe,GAAG,MAAM,CAqBzE;AAmXD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWnD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ/E"}
|
package/dist/index.d.ts
CHANGED
|
@@ -43,11 +43,38 @@ export interface TypesConfig {
|
|
|
43
43
|
baseDir?: string;
|
|
44
44
|
output?: string;
|
|
45
45
|
}
|
|
46
|
+
export interface McpConfig {
|
|
47
|
+
/** Directory (relative to rootDir) where MCP files are written. Default: rootDir. */
|
|
48
|
+
baseDir?: string;
|
|
49
|
+
output?: {
|
|
50
|
+
/** Path template for per-op-file tool handlers. Supports {filename}, {dir}, {area}. Default `{filename}.mcp.ts`. */
|
|
51
|
+
tools?: string;
|
|
52
|
+
/** Path (or template) for the aggregator that assembles the McpToolHandlerMap. Default `mcp.tools.ts`. */
|
|
53
|
+
index?: string;
|
|
54
|
+
/** Path (or template) for the optional POST /mcp route file. Default `mcp.router.ts`. */
|
|
55
|
+
router?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Path template for the model **Zod schema** files the tools import (for arg validation and
|
|
58
|
+
* `z.toJSONSchema`). When omitted, falls back to the `server` sub-config's `output.types`
|
|
59
|
+
* (if `server.zod`) or the `zod` sub-config's output. Tools require Zod schemas, not plain types.
|
|
60
|
+
*/
|
|
61
|
+
types?: string;
|
|
62
|
+
};
|
|
63
|
+
/** Emit the `mcp.router.ts` route boilerplate. Default true. */
|
|
64
|
+
emitRouter?: boolean;
|
|
65
|
+
/** Mount path used in the emitted router. Default `/mcp`. */
|
|
66
|
+
path?: string;
|
|
67
|
+
/** Import path template for service implementations (same semantics as ServerConfig). */
|
|
68
|
+
servicePathTemplate?: string;
|
|
69
|
+
/** Whether to expose operations marked `internal` as MCP tools. Default false. */
|
|
70
|
+
includeInternal?: boolean;
|
|
71
|
+
}
|
|
46
72
|
export interface TypescriptPluginConfig {
|
|
47
73
|
server?: ServerConfig;
|
|
48
74
|
sdk?: SdkConfig;
|
|
49
75
|
zod?: ZodConfig;
|
|
50
76
|
types?: TypesConfig;
|
|
77
|
+
mcp?: McpConfig;
|
|
51
78
|
}
|
|
52
79
|
/** Bumped when the codegen output shape changes in a way that should bust every per-file fingerprint. */
|
|
53
80
|
export declare const TYPESCRIPT_CODEGEN_VERSION = "1";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACR,iBAAiB,EAQpB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACR,iBAAiB,EAQpB,MAAM,mBAAmB,CAAC;AA8C3B,MAAM,WAAW,YAAY;IACzB,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6HAA6H;IAC7H,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE;QACL,8EAA8E;QAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,+EAA+E;QAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wEAAwE;IACxE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACtB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QACL,oHAAoH;QACpH,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,0GAA0G;QAC1G,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,yFAAyF;QACzF,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB;;;;WAIG;QACH,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACnC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,GAAG,CAAC,EAAE,SAAS,CAAC;CACnB;AAID,yGAAyG;AACzG,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAO9C,QAAA,MAAM,MAAM,EAAE,iBAMb,CAAC;AAEF,eAAe,MAAM,CAAC;AAEtB,2GAA2G;AAC3G,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAOzG"}
|