@ir-kit/k6-gen 0.1.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.
Files changed (71) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +46 -0
  3. package/dist/emit/ast-imports.d.ts +20 -0
  4. package/dist/emit/ast-imports.d.ts.map +1 -0
  5. package/dist/emit/ast-imports.js +20 -0
  6. package/dist/emit/ast-imports.js.map +1 -0
  7. package/dist/emit/client-preamble.d.ts +8 -0
  8. package/dist/emit/client-preamble.d.ts.map +1 -0
  9. package/dist/emit/client-preamble.js +271 -0
  10. package/dist/emit/client-preamble.js.map +1 -0
  11. package/dist/emit/client.d.ts +12 -0
  12. package/dist/emit/client.d.ts.map +1 -0
  13. package/dist/emit/client.js +124 -0
  14. package/dist/emit/client.js.map +1 -0
  15. package/dist/emit/data.d.ts +3 -0
  16. package/dist/emit/data.d.ts.map +1 -0
  17. package/dist/emit/data.js +39 -0
  18. package/dist/emit/data.js.map +1 -0
  19. package/dist/emit/index.d.ts +8 -0
  20. package/dist/emit/index.d.ts.map +1 -0
  21. package/dist/emit/index.js +14 -0
  22. package/dist/emit/index.js.map +1 -0
  23. package/dist/emit/loadtest-stub-template.d.ts +10 -0
  24. package/dist/emit/loadtest-stub-template.d.ts.map +1 -0
  25. package/dist/emit/loadtest-stub-template.js +45 -0
  26. package/dist/emit/loadtest-stub-template.js.map +1 -0
  27. package/dist/emit/loadtest-stubs.d.ts +11 -0
  28. package/dist/emit/loadtest-stubs.d.ts.map +1 -0
  29. package/dist/emit/loadtest-stubs.js +73 -0
  30. package/dist/emit/loadtest-stubs.js.map +1 -0
  31. package/dist/emit/operation-expressions.d.ts +35 -0
  32. package/dist/emit/operation-expressions.d.ts.map +1 -0
  33. package/dist/emit/operation-expressions.js +98 -0
  34. package/dist/emit/operation-expressions.js.map +1 -0
  35. package/dist/emit/types.d.ts +3 -0
  36. package/dist/emit/types.d.ts.map +1 -0
  37. package/dist/emit/types.js +11 -0
  38. package/dist/emit/types.js.map +1 -0
  39. package/dist/generate.d.ts +41 -0
  40. package/dist/generate.d.ts.map +1 -0
  41. package/dist/generate.js +48 -0
  42. package/dist/generate.js.map +1 -0
  43. package/dist/index.d.ts +7 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +4 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/ir/identifiers.d.ts +5 -0
  48. package/dist/ir/identifiers.d.ts.map +1 -0
  49. package/dist/ir/identifiers.js +13 -0
  50. package/dist/ir/identifiers.js.map +1 -0
  51. package/dist/ir/index.d.ts +6 -0
  52. package/dist/ir/index.d.ts.map +1 -0
  53. package/dist/ir/index.js +5 -0
  54. package/dist/ir/index.js.map +1 -0
  55. package/dist/ir/schema-to-faker.d.ts +14 -0
  56. package/dist/ir/schema-to-faker.d.ts.map +1 -0
  57. package/dist/ir/schema-to-faker.js +103 -0
  58. package/dist/ir/schema-to-faker.js.map +1 -0
  59. package/dist/ir/schema-to-type.d.ts +12 -0
  60. package/dist/ir/schema-to-type.d.ts.map +1 -0
  61. package/dist/ir/schema-to-type.js +102 -0
  62. package/dist/ir/schema-to-type.js.map +1 -0
  63. package/dist/ir/walk-ops.d.ts +23 -0
  64. package/dist/ir/walk-ops.d.ts.map +1 -0
  65. package/dist/ir/walk-ops.js +52 -0
  66. package/dist/ir/walk-ops.js.map +1 -0
  67. package/dist/print.d.ts +8 -0
  68. package/dist/print.d.ts.map +1 -0
  69. package/dist/print.js +20 -0
  70. package/dist/print.js.map +1 -0
  71. package/package.json +72 -0
package/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Ahmed Rowaihi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # @ir-kit/k6-gen
2
+
3
+ Standalone programmatic generator: OpenAPI 3.x spec → typed [k6](https://k6.io) client + TS types + faker-backed data builders. Same shape as `@ir-kit/openapi-swift`, `@ir-kit/openapi-go`, `@ir-kit/openapi-kotlin` — pure `generate({ spec, output })`, no hey-api plugin runner required at the call site.
4
+
5
+ ## Use cases
6
+
7
+ - The [@ir-kit/k6-tools](../tools) CLI uses this internally for `k6-tools sync` and `k6-tools init`.
8
+ - Embedding in your own tooling (MCP servers, internal CLIs, custom generators).
9
+ - The [@ir-kit/openapi-ts-k6](../hey-api) hey-api plugin wraps this when you prefer the `openapi-ts.config.ts` workflow.
10
+
11
+ ## Usage
12
+
13
+ ```ts
14
+ import { generate } from "@ir-kit/k6-gen";
15
+
16
+ await generate({
17
+ input: "./openapi.yaml", // path | URL | parsed spec object
18
+ output: "./src/gen",
19
+ defaultBaseUrl: "https://api.example.com", // optional override
20
+ normalize: true, // safe normalize preset
21
+ });
22
+ ```
23
+
24
+ Emits four files under `output`:
25
+
26
+ | File | Contents |
27
+ | ------------ | ------------------------------------------------------------------------------ |
28
+ | `types.ts` | One `export type <Name>` per spec schema. Object schemas → type literals; enums → string-literal unions; refs → `TypeReferenceNode`s. |
29
+ | `client.ts` | One `export function <opId>(...)` per spec operation. Path/query/body/headers typed; returns the parsed JSON response (`__parseJson<T>`). Each call tags `{ operation: <opId> }` and reads middleware headers from `@ir-kit/k6/runtime`. |
30
+ | `data.ts` | `data.<TypeName>(overrides?)` builders — `@faker-js/faker` underneath. Format-aware (uuid, email, date-time, …) and refs resolve to nested `data.<X>()` calls so cycles stay lazy. |
31
+ | `index.ts` | Re-exports the above (`* from client`, `* as types from types`, `data`). |
32
+
33
+ ## Shape
34
+
35
+ Internally:
36
+ 1. `@hey-api/json-schema-ref-parser` bundles external refs.
37
+ 2. `@ir-kit/openapi-core`'s `normalizeSpec` runs (optional, on by default).
38
+ 3. `@ir-kit/openapi-tools/parse` returns hey-api's normalized IR.
39
+ 4. Operation + schema walkers emit `ts.factory` AST → printed with `ts.createPrinter`.
40
+
41
+ That's it — no hey-api plugin runner is loaded, no `$` DSL is touched.
42
+
43
+ ## See also
44
+
45
+ - [@ir-kit/k6](../framework) — runtime framework consumed by the generated client
46
+ - [@ir-kit/k6-tools](../tools) — CLI built on top of this
@@ -0,0 +1,20 @@
1
+ import ts from "typescript";
2
+ export interface NamedImportSpec {
3
+ /** Name exported by the module. */
4
+ name: string;
5
+ /** Local alias. Omit to use `name` as-is. */
6
+ alias?: string;
7
+ /** `true` → `import type { … }`. */
8
+ typeOnly?: boolean;
9
+ }
10
+ /** `import { a, b as c } from "mod";` */
11
+ export declare function namedImport(specs: ReadonlyArray<NamedImportSpec>, moduleSpecifier: string, options?: {
12
+ typeOnly?: boolean;
13
+ }): ts.ImportDeclaration;
14
+ /** `import * as name from "mod";` (add `typeOnly: true` for `import type * as name`). */
15
+ export declare function namespaceImport(name: string, moduleSpecifier: string, options?: {
16
+ typeOnly?: boolean;
17
+ }): ts.ImportDeclaration;
18
+ /** `import name from "mod";` */
19
+ export declare function defaultImport(name: string, moduleSpecifier: string): ts.ImportDeclaration;
20
+ //# sourceMappingURL=ast-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-imports.d.ts","sourceRoot":"","sources":["../../src/emit/ast-imports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAW5B,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,yCAAyC;AACzC,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,EACrC,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,EAAE,CAAC,iBAAiB,CAiBtB;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,EAAE,CAAC,iBAAiB,CAUtB;AAED,gCAAgC;AAChC,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,GACtB,EAAE,CAAC,iBAAiB,CAMtB"}
@@ -0,0 +1,20 @@
1
+ import ts from "typescript";
2
+ const f = ts.factory;
3
+ /** Modern factory accepts `SyntaxKind.TypeKeyword` as the phase modifier to express `import type`. */
4
+ function phase(typeOnly) {
5
+ return typeOnly ? ts.SyntaxKind.TypeKeyword : undefined;
6
+ }
7
+ /** `import { a, b as c } from "mod";` */
8
+ export function namedImport(specs, moduleSpecifier, options = {}) {
9
+ const elements = specs.map((s) => f.createImportSpecifier(s.typeOnly ?? false, s.alias ? f.createIdentifier(s.name) : undefined, f.createIdentifier(s.alias ?? s.name)));
10
+ return f.createImportDeclaration(undefined, f.createImportClause(phase(options.typeOnly), undefined, f.createNamedImports(elements)), f.createStringLiteral(moduleSpecifier));
11
+ }
12
+ /** `import * as name from "mod";` (add `typeOnly: true` for `import type * as name`). */
13
+ export function namespaceImport(name, moduleSpecifier, options = {}) {
14
+ return f.createImportDeclaration(undefined, f.createImportClause(phase(options.typeOnly), undefined, f.createNamespaceImport(f.createIdentifier(name))), f.createStringLiteral(moduleSpecifier));
15
+ }
16
+ /** `import name from "mod";` */
17
+ export function defaultImport(name, moduleSpecifier) {
18
+ return f.createImportDeclaration(undefined, f.createImportClause(undefined, f.createIdentifier(name), undefined), f.createStringLiteral(moduleSpecifier));
19
+ }
20
+ //# sourceMappingURL=ast-imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-imports.js","sourceRoot":"","sources":["../../src/emit/ast-imports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;AAErB,sGAAsG;AACtG,SAAS,KAAK,CACZ,QAA6B;IAE7B,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAWD,yCAAyC;AACzC,MAAM,UAAU,WAAW,CACzB,KAAqC,EACrC,eAAuB,EACvB,UAAkC,EAAE;IAEpC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,CAAC,CAAC,qBAAqB,CACrB,CAAC,CAAC,QAAQ,IAAI,KAAK,EACnB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAChD,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CACtC,CACF,CAAC;IACF,OAAO,CAAC,CAAC,uBAAuB,CAC9B,SAAS,EACT,CAAC,CAAC,kBAAkB,CAClB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EACvB,SAAS,EACT,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAC/B,EACD,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAAC,CACvC,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,eAAuB,EACvB,UAAkC,EAAE;IAEpC,OAAO,CAAC,CAAC,uBAAuB,CAC9B,SAAS,EACT,CAAC,CAAC,kBAAkB,CAClB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EACvB,SAAS,EACT,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAClD,EACD,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAAC,CACvC,CAAC;AACJ,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,eAAuB;IAEvB,OAAO,CAAC,CAAC,uBAAuB,CAC9B,SAAS,EACT,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EACpE,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAAC,CACvC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import ts from "typescript";
2
+ export interface ClientPreambleInput {
3
+ defaultBaseUrl: string;
4
+ typeNamespace: string;
5
+ hasTypes: boolean;
6
+ }
7
+ export declare function clientPreambleStatements(input: ClientPreambleInput): ts.Statement[];
8
+ //# sourceMappingURL=client-preamble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-preamble.d.ts","sourceRoot":"","sources":["../../src/emit/client-preamble.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAM5B,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,mBAAmB,GACzB,EAAE,CAAC,SAAS,EAAE,CAiDhB"}
@@ -0,0 +1,271 @@
1
+ import { $ } from "@hey-api/openapi-ts";
2
+ import ts from "typescript";
3
+ import { defaultImport, namedImport, namespaceImport } from "./ast-imports.js";
4
+ const f = ts.factory;
5
+ export function clientPreambleStatements(input) {
6
+ const stmts = [
7
+ namespaceImport("http", "k6/http"),
8
+ namedImport([{ name: "check" }, { name: "group" }, { name: "sleep" }], "k6"),
9
+ namedImport([
10
+ { name: "Counter" },
11
+ { name: "Gauge" },
12
+ { name: "Rate" },
13
+ { name: "Trend" },
14
+ ], "k6/metrics"),
15
+ defaultImport("exec", "k6/execution"),
16
+ namedImport([
17
+ { name: "applyMiddlewareHeaders" },
18
+ { name: "applyMiddlewareParams" },
19
+ { name: "buildQuery" },
20
+ { name: "getBaseUrl" },
21
+ { name: "installK6Bridge" },
22
+ { name: "installMetricsFactory" },
23
+ { name: "mergeTags" },
24
+ { name: "parseJson" },
25
+ { name: "setExecModule" },
26
+ ], "@ir-kit/k6/runtime"),
27
+ ];
28
+ if (input.hasTypes) {
29
+ stmts.push(namespaceImport(input.typeNamespace, "./types.js", { typeOnly: true }));
30
+ }
31
+ stmts.push(bridgeInstall(), execInstall(), metricsInstall(), defaultBaseUrlConst(input.defaultBaseUrl).toAst(), callOptsTypeAlias(), ...helperStatements());
32
+ return stmts;
33
+ }
34
+ /**
35
+ * Centralized per-request wiring. Each generated op is a one-line wrapper
36
+ * around `call<T>` / `callAsync<T>` / `buildSpec`. Living here (one source of
37
+ * truth) keeps the per-op output short and ensures any change to the request
38
+ * shape lands in one place. Built with `ts.factory` per the codebase
39
+ * convention — no template strings for emitted source.
40
+ */
41
+ function helperStatements() {
42
+ return [requestSpecTypeAlias(), buildSpecFn(), callFn(false), callFn(true)];
43
+ }
44
+ /** `type RequestSpec = { method: string; url: string; body: string | null; params: Record<string, unknown>; };` */
45
+ function requestSpecTypeAlias() {
46
+ const stringT = f.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
47
+ const bodyT = f.createUnionTypeNode([
48
+ stringT,
49
+ f.createLiteralTypeNode(f.createNull()),
50
+ ]);
51
+ const paramsT = f.createTypeReferenceNode("Record", [
52
+ stringT,
53
+ f.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),
54
+ ]);
55
+ return f.createTypeAliasDeclaration(undefined, "RequestSpec", undefined, f.createTypeLiteralNode([
56
+ sig("method", stringT),
57
+ sig("url", stringT),
58
+ sig("body", bodyT),
59
+ sig("params", paramsT),
60
+ ]));
61
+ }
62
+ /**
63
+ * ```ts
64
+ * function buildSpec(method, url, opId, body, opts?): RequestSpec {
65
+ * const contentType: Record<string, string> =
66
+ * body !== null ? { "Content-Type": "application/json" } : {};
67
+ * return {
68
+ * method, url, body,
69
+ * params: {
70
+ * ...applyMiddlewareParams(),
71
+ * ...opts,
72
+ * headers: applyMiddlewareHeaders({ ...contentType, ...opts?.headers }),
73
+ * tags: mergeTags(opId, opts?.tags),
74
+ * },
75
+ * };
76
+ * }
77
+ * ```
78
+ */
79
+ function buildSpecFn() {
80
+ const stringT = f.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
81
+ const stringRecord = f.createTypeReferenceNode("Record", [stringT, stringT]);
82
+ // body !== null ? { "Content-Type": "application/json" } : {}
83
+ const contentTypeTernary = f.createConditionalExpression(f.createBinaryExpression(f.createIdentifier("body"), f.createToken(ts.SyntaxKind.ExclamationEqualsEqualsToken), f.createNull()), f.createToken(ts.SyntaxKind.QuestionToken), f.createObjectLiteralExpression([
84
+ f.createPropertyAssignment(f.createStringLiteral("Content-Type"), f.createStringLiteral("application/json")),
85
+ ]), f.createToken(ts.SyntaxKind.ColonToken), f.createObjectLiteralExpression([]));
86
+ const contentTypeDecl = constDecl("contentType", contentTypeTernary, stringRecord);
87
+ // headers: applyMiddlewareHeaders({ ...contentType, ...opts?.headers })
88
+ const headersValue = f.createCallExpression(f.createIdentifier("applyMiddlewareHeaders"), undefined, [
89
+ f.createObjectLiteralExpression([
90
+ f.createSpreadAssignment(f.createIdentifier("contentType")),
91
+ f.createSpreadAssignment(optsHeaders()),
92
+ ], false),
93
+ ]);
94
+ // tags: mergeTags(opId, opts?.tags)
95
+ const tagsValue = f.createCallExpression(f.createIdentifier("mergeTags"), undefined, [f.createIdentifier("opId"), optsTags()]);
96
+ // { ...applyMiddlewareParams(), ...opts, headers, tags }
97
+ const paramsObj = f.createObjectLiteralExpression([
98
+ f.createSpreadAssignment(f.createCallExpression(f.createIdentifier("applyMiddlewareParams"), undefined, [])),
99
+ f.createSpreadAssignment(f.createIdentifier("opts")),
100
+ f.createPropertyAssignment("headers", headersValue),
101
+ f.createPropertyAssignment("tags", tagsValue),
102
+ ], true);
103
+ // { method, url, body, params }
104
+ const returnObj = f.createObjectLiteralExpression([
105
+ f.createShorthandPropertyAssignment("method"),
106
+ f.createShorthandPropertyAssignment("url"),
107
+ f.createShorthandPropertyAssignment("body"),
108
+ f.createPropertyAssignment("params", paramsObj),
109
+ ], true);
110
+ return f.createFunctionDeclaration(undefined, undefined, "buildSpec", undefined, callHelperParams(), f.createTypeReferenceNode("RequestSpec"), f.createBlock([contentTypeDecl, f.createReturnStatement(returnObj)], true));
111
+ }
112
+ /**
113
+ * ```ts
114
+ * function call<T>(method, url, opId, body, opts?): T { ... return parseJson(http.request(...)) as T; }
115
+ * async function callAsync<T>(method, url, opId, body, opts?): Promise<T> { ... }
116
+ * ```
117
+ */
118
+ function callFn(asyncCall) {
119
+ const tRef = f.createTypeReferenceNode("T");
120
+ const returnType = asyncCall
121
+ ? f.createTypeReferenceNode("Promise", [tRef])
122
+ : tRef;
123
+ const modifiers = asyncCall
124
+ ? [f.createModifier(ts.SyntaxKind.AsyncKeyword)]
125
+ : [];
126
+ // const spec = buildSpec(method, url, opId, body, opts);
127
+ const specDecl = constDecl("spec", f.createCallExpression(f.createIdentifier("buildSpec"), undefined, [
128
+ f.createIdentifier("method"),
129
+ f.createIdentifier("url"),
130
+ f.createIdentifier("opId"),
131
+ f.createIdentifier("body"),
132
+ f.createIdentifier("opts"),
133
+ ]));
134
+ // http.<request|asyncRequest>(spec.method, spec.url, spec.body, spec.params)
135
+ const httpCall = f.createCallExpression(f.createPropertyAccessExpression(f.createIdentifier("http"), f.createIdentifier(asyncCall ? "asyncRequest" : "request")), undefined, [specProp("method"), specProp("url"), specProp("body"), specProp("params")]);
136
+ const body = [specDecl];
137
+ let parseSource = httpCall;
138
+ if (asyncCall) {
139
+ // const res = await http.asyncRequest(...);
140
+ body.push(constDecl("res", f.createAwaitExpression(httpCall)));
141
+ parseSource = f.createIdentifier("res");
142
+ }
143
+ // return parseJson(...) as T;
144
+ body.push(f.createReturnStatement(f.createAsExpression(f.createCallExpression(f.createIdentifier("parseJson"), undefined, [
145
+ parseSource,
146
+ ]), tRef)));
147
+ return f.createFunctionDeclaration(modifiers, undefined, asyncCall ? "callAsync" : "call", [f.createTypeParameterDeclaration(undefined, "T")], callHelperParams(), returnType, f.createBlock(body, true));
148
+ }
149
+ /** Parameter list shared by `buildSpec` / `call` / `callAsync`. */
150
+ function callHelperParams() {
151
+ const stringT = f.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
152
+ const bodyT = f.createUnionTypeNode([
153
+ stringT,
154
+ f.createLiteralTypeNode(f.createNull()),
155
+ ]);
156
+ return [
157
+ paramDecl("method", stringT),
158
+ paramDecl("url", stringT),
159
+ paramDecl("opId", stringT),
160
+ paramDecl("body", bodyT),
161
+ paramDecl("opts", f.createTypeReferenceNode("CallOpts"), true),
162
+ ];
163
+ }
164
+ // === small factory helpers ===
165
+ /** `name<?:> type;` inside a TypeLiteralNode. */
166
+ function sig(name, type) {
167
+ return f.createPropertySignature(undefined, name, undefined, type);
168
+ }
169
+ /** Function/arrow parameter — optional via the question token. */
170
+ function paramDecl(name, type, optional = false) {
171
+ return f.createParameterDeclaration(undefined, undefined, name, optional ? f.createToken(ts.SyntaxKind.QuestionToken) : undefined, type);
172
+ }
173
+ /** `const <name>[: <type>] = <init>;` */
174
+ function constDecl(name, init, type) {
175
+ return f.createVariableStatement(undefined, f.createVariableDeclarationList([f.createVariableDeclaration(name, undefined, type, init)], ts.NodeFlags.Const));
176
+ }
177
+ /** `spec.<name>` */
178
+ function specProp(name) {
179
+ return f.createPropertyAccessExpression(f.createIdentifier("spec"), name);
180
+ }
181
+ /** `opts?.headers` */
182
+ function optsHeaders() {
183
+ return f.createPropertyAccessChain(f.createIdentifier("opts"), f.createToken(ts.SyntaxKind.QuestionDotToken), f.createIdentifier("headers"));
184
+ }
185
+ /** `opts?.tags` */
186
+ function optsTags() {
187
+ return f.createPropertyAccessChain(f.createIdentifier("opts"), f.createToken(ts.SyntaxKind.QuestionDotToken), f.createIdentifier("tags"));
188
+ }
189
+ /** `installK6Bridge({ check, group, sleep });` */
190
+ function bridgeInstall() {
191
+ return f.createExpressionStatement(f.createCallExpression(f.createIdentifier("installK6Bridge"), undefined, [
192
+ f.createObjectLiteralExpression([
193
+ f.createShorthandPropertyAssignment("check"),
194
+ f.createShorthandPropertyAssignment("group"),
195
+ f.createShorthandPropertyAssignment("sleep"),
196
+ ], false),
197
+ ]));
198
+ }
199
+ /** `setExecModule(exec);` */
200
+ function execInstall() {
201
+ return f.createExpressionStatement(f.createCallExpression(f.createIdentifier("setExecModule"), undefined, [
202
+ f.createIdentifier("exec"),
203
+ ]));
204
+ }
205
+ /**
206
+ * Emit:
207
+ * ```ts
208
+ * installMetricsFactory((kind, name) =>
209
+ * new ({ counter: Counter, gauge: Gauge, rate: Rate, trend: Trend }[kind])(name)
210
+ * );
211
+ * ```
212
+ */
213
+ function metricsInstall() {
214
+ const ctorMap = f.createObjectLiteralExpression([
215
+ f.createPropertyAssignment("counter", f.createIdentifier("Counter")),
216
+ f.createPropertyAssignment("gauge", f.createIdentifier("Gauge")),
217
+ f.createPropertyAssignment("rate", f.createIdentifier("Rate")),
218
+ f.createPropertyAssignment("trend", f.createIdentifier("Trend")),
219
+ ], false);
220
+ const ctorAccess = f.createElementAccessExpression(f.createParenthesizedExpression(ctorMap), f.createIdentifier("kind"));
221
+ const arrowBody = f.createNewExpression(f.createParenthesizedExpression(ctorAccess), undefined, [f.createIdentifier("name")]);
222
+ const stringType = f.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
223
+ const kindUnion = f.createUnionTypeNode([
224
+ f.createLiteralTypeNode(f.createStringLiteral("counter")),
225
+ f.createLiteralTypeNode(f.createStringLiteral("gauge")),
226
+ f.createLiteralTypeNode(f.createStringLiteral("rate")),
227
+ f.createLiteralTypeNode(f.createStringLiteral("trend")),
228
+ ]);
229
+ const arrow = f.createArrowFunction(undefined, undefined, [
230
+ f.createParameterDeclaration(undefined, undefined, "kind", undefined, kindUnion, undefined),
231
+ f.createParameterDeclaration(undefined, undefined, "name", undefined, stringType, undefined),
232
+ ], undefined, undefined, arrowBody);
233
+ return f.createExpressionStatement(f.createCallExpression(f.createIdentifier("installMetricsFactory"), undefined, [arrow]));
234
+ }
235
+ function defaultBaseUrlConst(value) {
236
+ return $.const("DEFAULT_BASE_URL")
237
+ .type($.type("string"))
238
+ .assign($.literal(value));
239
+ }
240
+ /**
241
+ * `CallOpts` — per-request override. Headers/tags merged with middleware;
242
+ * timeout/redirects/compression/responseType/responseCallback pass through
243
+ * directly to k6's request params.
244
+ */
245
+ function callOptsTypeAlias() {
246
+ const stringRecord = f.createTypeReferenceNode("Record", [
247
+ f.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
248
+ f.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
249
+ ]);
250
+ const responseTypeUnion = f.createUnionTypeNode([
251
+ f.createLiteralTypeNode(f.createStringLiteral("text")),
252
+ f.createLiteralTypeNode(f.createStringLiteral("binary")),
253
+ f.createLiteralTypeNode(f.createStringLiteral("none")),
254
+ ]);
255
+ const timeoutUnion = f.createUnionTypeNode([
256
+ f.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
257
+ f.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),
258
+ ]);
259
+ return f.createTypeAliasDeclaration([f.createModifier(ts.SyntaxKind.ExportKeyword)], "CallOpts", undefined, f.createTypeLiteralNode([
260
+ optionalProp("headers", stringRecord),
261
+ optionalProp("tags", stringRecord),
262
+ optionalProp("timeout", timeoutUnion),
263
+ optionalProp("redirects", f.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword)),
264
+ optionalProp("compression", f.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)),
265
+ optionalProp("responseType", responseTypeUnion),
266
+ ]));
267
+ }
268
+ function optionalProp(name, type) {
269
+ return f.createPropertySignature(undefined, name, f.createToken(ts.SyntaxKind.QuestionToken), type);
270
+ }
271
+ //# sourceMappingURL=client-preamble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-preamble.js","sourceRoot":"","sources":["../../src/emit/client-preamble.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { IR } from "@hey-api/shared";
2
+ export interface ClientEmitOptions {
3
+ defaultBaseUrl?: string;
4
+ schemaNames?: ReadonlyArray<string>;
5
+ }
6
+ /**
7
+ * Emit the generated client file. Per-op output is one-line wrappers around
8
+ * preamble helpers (`call`/`callAsync`/`buildSpec`); see `client-preamble.ts`
9
+ * for the helpers themselves.
10
+ */
11
+ export declare function emitClientFile(paths: IR.PathsObject | undefined, opts?: ClientEmitOptions): string;
12
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/emit/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AA8B1C,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACrC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,EAAE,CAAC,WAAW,GAAG,SAAS,EACjC,IAAI,GAAE,iBAAsB,GAC3B,MAAM,CAiBR"}
@@ -0,0 +1,124 @@
1
+ import ts from "typescript";
2
+ import { schemaToTypeNode, toIdent, walkOperations, } from "../ir/index.js";
3
+ import { GENERATED_HEADER, printStatements } from "../print.js";
4
+ import { clientPreambleStatements } from "./client-preamble.js";
5
+ import { bodyArg, urlExpression } from "./operation-expressions.js";
6
+ const f = ts.factory;
7
+ /** Namespace alias for type imports — generated client emits `T.Pet`. */
8
+ const TYPE_NAMESPACE = "T";
9
+ function typed(schema) {
10
+ return schemaToTypeNode(schema, { typeNamespace: TYPE_NAMESPACE });
11
+ }
12
+ function typeNodeFor(op) {
13
+ return op.successSchema
14
+ ? typed(op.successSchema).toAst()
15
+ : f.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword);
16
+ }
17
+ /**
18
+ * Emit the generated client file. Per-op output is one-line wrappers around
19
+ * preamble helpers (`call`/`callAsync`/`buildSpec`); see `client-preamble.ts`
20
+ * for the helpers themselves.
21
+ */
22
+ export function emitClientFile(paths, opts = {}) {
23
+ const preamble = clientPreambleStatements({
24
+ defaultBaseUrl: opts.defaultBaseUrl ?? "",
25
+ typeNamespace: TYPE_NAMESPACE,
26
+ hasTypes: (opts.schemaNames?.length ?? 0) > 0,
27
+ });
28
+ const operations = Array.from(walkOperations(paths));
29
+ const syncDecls = operations.map(syncOperationFn);
30
+ const asyncDecls = operations.map(asyncOperationFn);
31
+ const specAssignments = operations.map(emitSpecAssignment);
32
+ const asyncExport = asyncNamespaceExport(operations);
33
+ return printStatements([...preamble, ...syncDecls, ...asyncDecls, ...specAssignments, asyncExport], GENERATED_HEADER);
34
+ }
35
+ /** `export function getPet(...): Pet { return call<Pet>(...); }` */
36
+ function syncOperationFn(op) {
37
+ return operationFnDecl(op, /* async */ false, /* exported */ true);
38
+ }
39
+ /** `async function getPet_async(...): Promise<Pet> { return callAsync<Pet>(...); }` */
40
+ function asyncOperationFn(op) {
41
+ return operationFnDecl(op, /* async */ true, /* exported */ false);
42
+ }
43
+ function operationFnDecl(op, asyncCall, exported) {
44
+ const returnTypeNode = typeNodeFor(op);
45
+ const fnReturnType = asyncCall
46
+ ? f.createTypeReferenceNode("Promise", [returnTypeNode])
47
+ : returnTypeNode;
48
+ const modifiers = [];
49
+ if (exported)
50
+ modifiers.push(f.createModifier(ts.SyntaxKind.ExportKeyword));
51
+ if (asyncCall)
52
+ modifiers.push(f.createModifier(ts.SyntaxKind.AsyncKeyword));
53
+ return f.createFunctionDeclaration(modifiers, undefined, exported ? toIdent(op.id) : asyncInternalName(op), undefined, buildParamDeclarations(op), fnReturnType, f.createBlock([f.createReturnStatement(callExpression(op, returnTypeNode, asyncCall))], true));
54
+ }
55
+ function asyncInternalName(op) {
56
+ return `${toIdent(op.id)}_async`;
57
+ }
58
+ /** `call<Pet>("GET", url, "getPet", null, opts)` or the async variant. */
59
+ function callExpression(op, returnType, asyncCall) {
60
+ return f.createCallExpression(f.createIdentifier(asyncCall ? "callAsync" : "call"), [returnType], [
61
+ f.createStringLiteral(op.method.toUpperCase()),
62
+ urlExpression(op).toAst(),
63
+ f.createStringLiteral(op.id),
64
+ bodyArg(op).toAst(),
65
+ f.createIdentifier("opts"),
66
+ ]);
67
+ }
68
+ /**
69
+ * `getPet.spec = (args, opts?) => buildSpec("GET", url, "getPet", null, opts);`
70
+ *
71
+ * Lets users drop to raw `http.request(spec.method, spec.url, spec.body,
72
+ * spec.params)` with all the wiring done — keeping access to the raw Response
73
+ * for status checks, timings, `http.batch()` composition, etc.
74
+ */
75
+ function emitSpecAssignment(op) {
76
+ const buildSpecCall = f.createCallExpression(f.createIdentifier("buildSpec"), undefined, [
77
+ f.createStringLiteral(op.method.toUpperCase()),
78
+ urlExpression(op).toAst(),
79
+ f.createStringLiteral(op.id),
80
+ bodyArg(op).toAst(),
81
+ f.createIdentifier("opts"),
82
+ ]);
83
+ const arrow = f.createArrowFunction(undefined, undefined, buildParamDeclarations(op), undefined, f.createToken(ts.SyntaxKind.EqualsGreaterThanToken), buildSpecCall);
84
+ return f.createExpressionStatement(f.createAssignment(f.createPropertyAccessExpression(f.createIdentifier(toIdent(op.id)), f.createIdentifier("spec")), arrow));
85
+ }
86
+ /**
87
+ * Shared parameter list for sync/async/spec emit — all three present the same
88
+ * signature to the user. (path params, optional query, optional body, opts).
89
+ */
90
+ function buildParamDeclarations(op) {
91
+ const out = [];
92
+ for (const p of op.pathParams) {
93
+ out.push(f.createParameterDeclaration(undefined, undefined, toIdent(p.name), undefined, typed(p.schema).toAst()));
94
+ }
95
+ if (op.queryParams.length) {
96
+ const allOptional = op.queryParams.every((p) => !p.required);
97
+ const members = op.queryParams.map((p) => f.createPropertySignature(undefined, p.name, p.required ? undefined : f.createToken(ts.SyntaxKind.QuestionToken), typed(p.schema).toAst()));
98
+ out.push(f.createParameterDeclaration(undefined, undefined, "query", allOptional ? f.createToken(ts.SyntaxKind.QuestionToken) : undefined, f.createTypeLiteralNode(members)));
99
+ }
100
+ if (op.body) {
101
+ out.push(f.createParameterDeclaration(undefined, undefined, "body", op.body.required
102
+ ? undefined
103
+ : f.createToken(ts.SyntaxKind.QuestionToken), typed(op.body.schema).toAst()));
104
+ }
105
+ out.push(f.createParameterDeclaration(undefined, undefined, "opts", f.createToken(ts.SyntaxKind.QuestionToken), f.createTypeReferenceNode("CallOpts")));
106
+ return out;
107
+ }
108
+ /**
109
+ * Emit:
110
+ *
111
+ * ```ts
112
+ * export const async = {
113
+ * getPet: getPet_async,
114
+ * addPet: addPet_async,
115
+ * // ...
116
+ * };
117
+ * ```
118
+ */
119
+ function asyncNamespaceExport(operations) {
120
+ const props = operations.map((op) => f.createPropertyAssignment(toIdent(op.id), f.createIdentifier(asyncInternalName(op))));
121
+ const literal = f.createObjectLiteralExpression(props, true);
122
+ return f.createVariableStatement([f.createModifier(ts.SyntaxKind.ExportKeyword)], f.createVariableDeclarationList([f.createVariableDeclaration("async", undefined, undefined, literal)], ts.NodeFlags.Const));
123
+ }
124
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/emit/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { IR } from "@hey-api/shared";
2
+ export declare function emitDataFile(schemas: Record<string, IR.SchemaObject> | undefined): string;
3
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/emit/data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAS1C,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,SAAS,GACnD,MAAM,CAsCR"}
@@ -0,0 +1,39 @@
1
+ import { $ } from "@hey-api/openapi-ts";
2
+ import { safeIdent } from "@ir-kit/codegen-core";
3
+ import { schemaToFakerExpr } from "../ir/index.js";
4
+ import { GENERATED_HEADER, printDslNodes } from "../print.js";
5
+ /** Matches the namespace alias used by `emitClientFile`. */
6
+ const TYPE_NAMESPACE = "T";
7
+ export function emitDataFile(schemas) {
8
+ const entries = Object.entries(schemas ?? {});
9
+ if (!entries.length) {
10
+ return `${GENERATED_HEADER}\nexport const data = {} as const;\n`;
11
+ }
12
+ const preamble = `${GENERATED_HEADER}
13
+ import { faker } from "@faker-js/faker";
14
+ import type * as ${TYPE_NAMESPACE} from "./types.js";
15
+ `;
16
+ let dataObj = $.object();
17
+ for (const [rawName, schema] of entries) {
18
+ const name = safeIdent(rawName);
19
+ const typeRef = $.type(`${TYPE_NAMESPACE}.${name}`);
20
+ const isObject = schema.type === "object" || !!schema.properties;
21
+ const body = isObject
22
+ ? $.object()
23
+ .spread(schemaToFakerExpr(schema))
24
+ .spread($("overrides").or($.object()))
25
+ .as(typeRef)
26
+ : $("overrides").or(schemaToFakerExpr(schema)).as(typeRef);
27
+ const fn = $.func()
28
+ .param("overrides", (p) => {
29
+ const t = isObject ? $.type("Partial").generic(typeRef) : typeRef;
30
+ return p.optional().type(t);
31
+ })
32
+ .returns(typeRef)
33
+ .do($.return(body));
34
+ dataObj = dataObj.prop(name, fn);
35
+ }
36
+ const decl = $.const("data").export().assign(dataObj);
37
+ return `${preamble}\n${printDslNodes([decl])}`;
38
+ }
39
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/emit/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9D,4DAA4D;AAC5D,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,UAAU,YAAY,CAC1B,OAAoD;IAEpD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAE9C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,GAAG,gBAAgB,sCAAsC,CAAC;IACnE,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,gBAAgB;;mBAEnB,cAAc;CAChC,CAAC;IAEA,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,cAAc,IAAI,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QAEjE,MAAM,IAAI,GAAG,QAAQ;YACnB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;iBACP,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;iBACjC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBACrC,EAAE,CAAC,OAAO,CAAC;YAChB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAE7D,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;aAChB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACxB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAClE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC;aACD,OAAO,CAAC,OAAO,CAAC;aAChB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,GAAG,QAAQ,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC"}