@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.
- package/LICENSE.md +21 -0
- package/README.md +46 -0
- package/dist/emit/ast-imports.d.ts +20 -0
- package/dist/emit/ast-imports.d.ts.map +1 -0
- package/dist/emit/ast-imports.js +20 -0
- package/dist/emit/ast-imports.js.map +1 -0
- package/dist/emit/client-preamble.d.ts +8 -0
- package/dist/emit/client-preamble.d.ts.map +1 -0
- package/dist/emit/client-preamble.js +271 -0
- package/dist/emit/client-preamble.js.map +1 -0
- package/dist/emit/client.d.ts +12 -0
- package/dist/emit/client.d.ts.map +1 -0
- package/dist/emit/client.js +124 -0
- package/dist/emit/client.js.map +1 -0
- package/dist/emit/data.d.ts +3 -0
- package/dist/emit/data.d.ts.map +1 -0
- package/dist/emit/data.js +39 -0
- package/dist/emit/data.js.map +1 -0
- package/dist/emit/index.d.ts +8 -0
- package/dist/emit/index.d.ts.map +1 -0
- package/dist/emit/index.js +14 -0
- package/dist/emit/index.js.map +1 -0
- package/dist/emit/loadtest-stub-template.d.ts +10 -0
- package/dist/emit/loadtest-stub-template.d.ts.map +1 -0
- package/dist/emit/loadtest-stub-template.js +45 -0
- package/dist/emit/loadtest-stub-template.js.map +1 -0
- package/dist/emit/loadtest-stubs.d.ts +11 -0
- package/dist/emit/loadtest-stubs.d.ts.map +1 -0
- package/dist/emit/loadtest-stubs.js +73 -0
- package/dist/emit/loadtest-stubs.js.map +1 -0
- package/dist/emit/operation-expressions.d.ts +35 -0
- package/dist/emit/operation-expressions.d.ts.map +1 -0
- package/dist/emit/operation-expressions.js +98 -0
- package/dist/emit/operation-expressions.js.map +1 -0
- package/dist/emit/types.d.ts +3 -0
- package/dist/emit/types.d.ts.map +1 -0
- package/dist/emit/types.js +11 -0
- package/dist/emit/types.js.map +1 -0
- package/dist/generate.d.ts +41 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +48 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/identifiers.d.ts +5 -0
- package/dist/ir/identifiers.d.ts.map +1 -0
- package/dist/ir/identifiers.js +13 -0
- package/dist/ir/identifiers.js.map +1 -0
- package/dist/ir/index.d.ts +6 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +5 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/schema-to-faker.d.ts +14 -0
- package/dist/ir/schema-to-faker.d.ts.map +1 -0
- package/dist/ir/schema-to-faker.js +103 -0
- package/dist/ir/schema-to-faker.js.map +1 -0
- package/dist/ir/schema-to-type.d.ts +12 -0
- package/dist/ir/schema-to-type.d.ts.map +1 -0
- package/dist/ir/schema-to-type.js +102 -0
- package/dist/ir/schema-to-type.js.map +1 -0
- package/dist/ir/walk-ops.d.ts +23 -0
- package/dist/ir/walk-ops.d.ts.map +1 -0
- package/dist/ir/walk-ops.js +52 -0
- package/dist/ir/walk-ops.js.map +1 -0
- package/dist/print.d.ts +8 -0
- package/dist/print.d.ts.map +1 -0
- package/dist/print.js +20 -0
- package/dist/print.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type { ClientEmitOptions } from "./client.js";
|
|
2
|
+
export { emitClientFile } from "./client.js";
|
|
3
|
+
export { emitDataFile } from "./data.js";
|
|
4
|
+
export { emitLoadtestStubs, type ScaffoldStubsOptions, } from "./loadtest-stubs.js";
|
|
5
|
+
export { emitTypesFile } from "./types.js";
|
|
6
|
+
/** Emit the umbrella `index.ts` re-exporting client, types, data. */
|
|
7
|
+
export declare function emitIndexFile(): string;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/emit/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,iBAAiB,EACjB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,qEAAqE;AACrE,wBAAgB,aAAa,IAAI,MAAM,CAMtC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { GENERATED_HEADER } from "../print.js";
|
|
2
|
+
export { emitClientFile } from "./client.js";
|
|
3
|
+
export { emitDataFile } from "./data.js";
|
|
4
|
+
export { emitLoadtestStubs, } from "./loadtest-stubs.js";
|
|
5
|
+
export { emitTypesFile } from "./types.js";
|
|
6
|
+
/** Emit the umbrella `index.ts` re-exporting client, types, data. */
|
|
7
|
+
export function emitIndexFile() {
|
|
8
|
+
return `${GENERATED_HEADER}
|
|
9
|
+
export * from "./client.js";
|
|
10
|
+
export * as types from "./types.js";
|
|
11
|
+
export { data } from "./data.js";
|
|
12
|
+
`;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,iBAAiB,GAElB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,qEAAqE;AACrE,MAAM,UAAU,aAAa;IAC3B,OAAO,GAAG,gBAAgB;;;;CAI3B,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
export interface LoadtestStubInput {
|
|
3
|
+
fnName: string;
|
|
4
|
+
summary: string;
|
|
5
|
+
clientImport: string;
|
|
6
|
+
dataImport: string;
|
|
7
|
+
callArgs: ReadonlyArray<ts.Expression>;
|
|
8
|
+
}
|
|
9
|
+
export declare function renderLoadtestStub(input: LoadtestStubInput): string;
|
|
10
|
+
//# sourceMappingURL=loadtest-stub-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadtest-stub-template.d.ts","sourceRoot":"","sources":["../../src/emit/loadtest-stub-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAK5B,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;CACxC;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAiBnE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { GENERATED_HEADER, printStatements } from "../print.js";
|
|
3
|
+
import { namedImport, namespaceImport } from "./ast-imports.js";
|
|
4
|
+
const f = ts.factory;
|
|
5
|
+
export function renderLoadtestStub(input) {
|
|
6
|
+
const header = `${GENERATED_HEADER}\n//\n// Stub loadtest for \`${input.fnName}\` — ${input.summary}.\n// Fill in pace, budgets, and assertions. Safe to edit.`;
|
|
7
|
+
return printStatements([
|
|
8
|
+
namedImport([{ name: "defineLoadTest" }, { name: "flow" }, { name: "smoke" }], "@ir-kit/k6"),
|
|
9
|
+
namespaceImport("api", input.clientImport),
|
|
10
|
+
namedImport([{ name: "data" }], input.dataImport),
|
|
11
|
+
defineLoadTestConst(input),
|
|
12
|
+
reExportConst("options", "lt", "options"),
|
|
13
|
+
defaultExport("lt", "default"),
|
|
14
|
+
], header);
|
|
15
|
+
}
|
|
16
|
+
function defineLoadTestConst(input) {
|
|
17
|
+
const stepBody = f.createArrowFunction(undefined, undefined, [], undefined, f.createToken(ts.SyntaxKind.EqualsGreaterThanToken), f.createBlock([
|
|
18
|
+
f.createExpressionStatement(f.createCallExpression(f.createPropertyAccessExpression(f.createIdentifier("api"), f.createIdentifier(input.fnName)), undefined, input.callArgs)),
|
|
19
|
+
], true));
|
|
20
|
+
const flowChain = f.createCallExpression(f.createPropertyAccessExpression(f.createCallExpression(f.createIdentifier("flow"), undefined, []), f.createIdentifier("step")), undefined, [f.createStringLiteral(input.fnName), stepBody]);
|
|
21
|
+
const ltConfig = f.createObjectLiteralExpression([
|
|
22
|
+
f.createPropertyAssignment("scenario", f.createCallExpression(f.createIdentifier("smoke"), undefined, [
|
|
23
|
+
f.createObjectLiteralExpression([
|
|
24
|
+
f.createPropertyAssignment("duration", f.createStringLiteral("30s")),
|
|
25
|
+
], false),
|
|
26
|
+
])),
|
|
27
|
+
f.createPropertyAssignment("budgets", f.createObjectLiteralExpression([
|
|
28
|
+
f.createPropertyAssignment("p95", f.createStringLiteral("500ms")),
|
|
29
|
+
f.createPropertyAssignment("errors", f.createStringLiteral("1%")),
|
|
30
|
+
], true)),
|
|
31
|
+
f.createPropertyAssignment("flow", flowChain),
|
|
32
|
+
], true);
|
|
33
|
+
return f.createVariableStatement(undefined, f.createVariableDeclarationList([
|
|
34
|
+
f.createVariableDeclaration("lt", undefined, undefined, f.createCallExpression(f.createIdentifier("defineLoadTest"), undefined, [ltConfig])),
|
|
35
|
+
], ts.NodeFlags.Const));
|
|
36
|
+
}
|
|
37
|
+
function reExportConst(localName, sourceVar, sourceProp) {
|
|
38
|
+
return f.createVariableStatement([f.createModifier(ts.SyntaxKind.ExportKeyword)], f.createVariableDeclarationList([
|
|
39
|
+
f.createVariableDeclaration(localName, undefined, undefined, f.createPropertyAccessExpression(f.createIdentifier(sourceVar), f.createIdentifier(sourceProp))),
|
|
40
|
+
], ts.NodeFlags.Const));
|
|
41
|
+
}
|
|
42
|
+
function defaultExport(sourceVar, sourceProp) {
|
|
43
|
+
return f.createExportAssignment(undefined, false, f.createPropertyAccessExpression(f.createIdentifier(sourceVar), f.createIdentifier(sourceProp)));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=loadtest-stub-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadtest-stub-template.js","sourceRoot":"","sources":["../../src/emit/loadtest-stub-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { BuiltFile } from "../generate.js";
|
|
2
|
+
import { walkOperations } from "../ir/index.js";
|
|
3
|
+
export interface ScaffoldStubsOptions {
|
|
4
|
+
/** Path the stubs import the generated client from. Default: `../index.js`. */
|
|
5
|
+
clientImport?: string;
|
|
6
|
+
/** Subdirectory inside the output dir where stubs land. Default: `loadtests`. */
|
|
7
|
+
dir?: string;
|
|
8
|
+
}
|
|
9
|
+
/** One loadtest skeleton per operation: import api+data, call op in a flow().step(). */
|
|
10
|
+
export declare function emitLoadtestStubs(paths: Parameters<typeof walkOperations>[0], schemas: Record<string, unknown> | undefined, opts?: ScaffoldStubsOptions): BuiltFile[];
|
|
11
|
+
//# sourceMappingURL=loadtest-stubs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadtest-stubs.d.ts","sourceRoot":"","sources":["../../src/emit/loadtest-stubs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAiC,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAQ/E,MAAM,WAAW,oBAAoB;IACnC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,EAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,IAAI,GAAE,oBAAyB,GAC9B,SAAS,EAAE,CAgBb"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { safeIdent } from "@ir-kit/codegen-core";
|
|
2
|
+
import ts from "typescript";
|
|
3
|
+
import { toIdent, walkOperations } from "../ir/index.js";
|
|
4
|
+
import { renderLoadtestStub, } from "./loadtest-stub-template.js";
|
|
5
|
+
const f = ts.factory;
|
|
6
|
+
/** One loadtest skeleton per operation: import api+data, call op in a flow().step(). */
|
|
7
|
+
export function emitLoadtestStubs(paths, schemas, opts = {}) {
|
|
8
|
+
const dir = (opts.dir ?? "loadtests").replace(/\/+$/, "");
|
|
9
|
+
const clientImport = opts.clientImport ?? "../index.js";
|
|
10
|
+
const dataImport = clientImport.replace(/index\.js$/, "data.js");
|
|
11
|
+
const knownSchemas = new Set(Object.keys(schemas ?? {}).map(safeIdent));
|
|
12
|
+
const files = [];
|
|
13
|
+
for (const op of walkOperations(paths)) {
|
|
14
|
+
files.push({
|
|
15
|
+
path: `${dir}/${toIdent(op.id)}.ts`,
|
|
16
|
+
content: renderLoadtestStub(stubInput(op, clientImport, dataImport, knownSchemas)),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return files;
|
|
20
|
+
}
|
|
21
|
+
function stubInput(op, clientImport, dataImport, knownSchemas) {
|
|
22
|
+
return {
|
|
23
|
+
fnName: toIdent(op.id),
|
|
24
|
+
summary: op.summary ?? `${op.method.toUpperCase()} ${op.path}`,
|
|
25
|
+
clientImport,
|
|
26
|
+
dataImport,
|
|
27
|
+
callArgs: callArgExpressions(op, knownSchemas),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function callArgExpressions(op, knownSchemas) {
|
|
31
|
+
const args = [];
|
|
32
|
+
for (const p of op.pathParams)
|
|
33
|
+
args.push(pathParamPlaceholder(p));
|
|
34
|
+
if (op.queryParams.length)
|
|
35
|
+
args.push(f.createObjectLiteralExpression([], false));
|
|
36
|
+
if (op.body)
|
|
37
|
+
args.push(bodyExpression(op, knownSchemas));
|
|
38
|
+
return args;
|
|
39
|
+
}
|
|
40
|
+
function pathParamPlaceholder(p) {
|
|
41
|
+
switch (p.schema?.type) {
|
|
42
|
+
case "integer":
|
|
43
|
+
case "number":
|
|
44
|
+
return f.createNumericLiteral("1");
|
|
45
|
+
case "boolean":
|
|
46
|
+
return f.createFalse();
|
|
47
|
+
default:
|
|
48
|
+
return f.createStringLiteral("");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function bodyExpression(op, knownSchemas) {
|
|
52
|
+
const dataName = resolveDataBuilderName(op, knownSchemas);
|
|
53
|
+
if (dataName) {
|
|
54
|
+
return f.createCallExpression(f.createPropertyAccessExpression(f.createIdentifier("data"), f.createIdentifier(dataName)), undefined, []);
|
|
55
|
+
}
|
|
56
|
+
return f.createAsExpression(f.createObjectLiteralExpression([], false), f.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword));
|
|
57
|
+
}
|
|
58
|
+
function resolveDataBuilderName(op, knownSchemas) {
|
|
59
|
+
const ref = op.body?.schema?.$ref;
|
|
60
|
+
if (ref) {
|
|
61
|
+
const name = safeIdent(ref.split("/").pop() ?? "");
|
|
62
|
+
if (knownSchemas.has(name))
|
|
63
|
+
return name;
|
|
64
|
+
}
|
|
65
|
+
const sym = op.body?.schema?.symbolRef?.name;
|
|
66
|
+
if (sym) {
|
|
67
|
+
const name = safeIdent(sym);
|
|
68
|
+
if (knownSchemas.has(name))
|
|
69
|
+
return name;
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=loadtest-stubs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadtest-stubs.js","sourceRoot":"","sources":["../../src/emit/loadtest-stubs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type TsDsl } from "@hey-api/openapi-ts";
|
|
2
|
+
import type ts from "typescript";
|
|
3
|
+
import { type WalkedOperation } from "../ir/index.js";
|
|
4
|
+
type Expr = TsDsl<ts.Expression>;
|
|
5
|
+
/** `getBaseUrl(DEFAULT_BASE_URL) + "/path" + param + "/sub" (+ "?" + qs)`. */
|
|
6
|
+
export declare function urlExpression(op: WalkedOperation): Expr;
|
|
7
|
+
/** `applyMiddlewareHeaders({ "Content-Type": ..., ...opts?.headers })`. */
|
|
8
|
+
export declare function headersExpression(op: WalkedOperation): Expr;
|
|
9
|
+
/**
|
|
10
|
+
* Params object passed to k6's http call. `headersExpr` decides how the
|
|
11
|
+
* `headers` property is resolved — sync/async siblings declare a local
|
|
12
|
+
* `const headers = …` and pass `$("headers")` here; the `.spec` arrow has
|
|
13
|
+
* no locals and passes `headersExpression(op)` to inline it.
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* {
|
|
17
|
+
* ...applyMiddlewareParams(),
|
|
18
|
+
* ...opts,
|
|
19
|
+
* headers: <headersExpr>,
|
|
20
|
+
* tags: mergeTags("opId", opts?.tags),
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* Order ensures middleware params (auth) seed defaults, user opts override,
|
|
25
|
+
* and computed headers/tags always win — they're the merged results.
|
|
26
|
+
*/
|
|
27
|
+
export declare function paramsExpression(op: WalkedOperation, headersExpr: Expr): Expr;
|
|
28
|
+
/** Body argument for verb calls — currently JSON-stringify; multipart TODO. */
|
|
29
|
+
export declare function bodyArg(op: WalkedOperation): Expr;
|
|
30
|
+
/** `http.<verb>(url, [body], params)` — sync variant. */
|
|
31
|
+
export declare function syncCallExpression(op: WalkedOperation): Expr;
|
|
32
|
+
/** `http.asyncRequest(method, url, body, params)` — async variant. */
|
|
33
|
+
export declare function asyncCallExpression(op: WalkedOperation): Expr;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=operation-expressions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation-expressions.d.ts","sourceRoot":"","sources":["../../src/emit/operation-expressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE/D,KAAK,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AAsBjC,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,CAQvD;AAUD,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,CAU3D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,GAAG,IAAI,CAS7E;AAED,+EAA+E;AAC/E,wBAAgB,OAAO,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,CAIjD;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,CAQ5D;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,CAU7D"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { $ } from "@hey-api/openapi-ts";
|
|
2
|
+
import { toIdent } from "../ir/index.js";
|
|
3
|
+
/** OpenAPI verb → k6 `http` namespace attribute (`delete` → `del`). */
|
|
4
|
+
const METHOD_TO_HTTP_ATTR = {
|
|
5
|
+
get: "get",
|
|
6
|
+
post: "post",
|
|
7
|
+
put: "put",
|
|
8
|
+
patch: "patch",
|
|
9
|
+
delete: "del",
|
|
10
|
+
head: "head",
|
|
11
|
+
options: "options",
|
|
12
|
+
};
|
|
13
|
+
/** Methods k6 forms with `http.<verb>(url, body, params)`. */
|
|
14
|
+
const METHODS_WITH_BODY = new Set([
|
|
15
|
+
"post",
|
|
16
|
+
"put",
|
|
17
|
+
"patch",
|
|
18
|
+
"delete",
|
|
19
|
+
"options",
|
|
20
|
+
]);
|
|
21
|
+
/** `getBaseUrl(DEFAULT_BASE_URL) + "/path" + param + "/sub" (+ "?" + qs)`. */
|
|
22
|
+
export function urlExpression(op) {
|
|
23
|
+
let expr = $("getBaseUrl").call($("DEFAULT_BASE_URL"));
|
|
24
|
+
for (const part of op.path.split(/(\{[^}]+\})/g).filter((s) => s.length)) {
|
|
25
|
+
const m = part.match(/^\{([^}]+)\}$/);
|
|
26
|
+
expr = $.binary(expr, "+", m ? $(toIdent(m[1])) : $.literal(part));
|
|
27
|
+
}
|
|
28
|
+
if (op.queryParams.length)
|
|
29
|
+
expr = $.binary(expr, "+", buildQueryCall());
|
|
30
|
+
return expr;
|
|
31
|
+
}
|
|
32
|
+
function buildQueryCall() {
|
|
33
|
+
return $("buildQuery").call($("query").as($.type("Record").generic($.type("string")).generic($.type("unknown"))));
|
|
34
|
+
}
|
|
35
|
+
/** `applyMiddlewareHeaders({ "Content-Type": ..., ...opts?.headers })`. */
|
|
36
|
+
export function headersExpression(op) {
|
|
37
|
+
let obj = $.object();
|
|
38
|
+
if (op.body) {
|
|
39
|
+
obj = obj.prop("Content-Type", $.literal(op.body.mediaType || "application/json"));
|
|
40
|
+
}
|
|
41
|
+
obj = obj.spread($("opts").attr("headers").optional());
|
|
42
|
+
return $("applyMiddlewareHeaders").call(obj);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Params object passed to k6's http call. `headersExpr` decides how the
|
|
46
|
+
* `headers` property is resolved — sync/async siblings declare a local
|
|
47
|
+
* `const headers = …` and pass `$("headers")` here; the `.spec` arrow has
|
|
48
|
+
* no locals and passes `headersExpression(op)` to inline it.
|
|
49
|
+
*
|
|
50
|
+
* ```ts
|
|
51
|
+
* {
|
|
52
|
+
* ...applyMiddlewareParams(),
|
|
53
|
+
* ...opts,
|
|
54
|
+
* headers: <headersExpr>,
|
|
55
|
+
* tags: mergeTags("opId", opts?.tags),
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* Order ensures middleware params (auth) seed defaults, user opts override,
|
|
60
|
+
* and computed headers/tags always win — they're the merged results.
|
|
61
|
+
*/
|
|
62
|
+
export function paramsExpression(op, headersExpr) {
|
|
63
|
+
return $.object()
|
|
64
|
+
.spread($("applyMiddlewareParams").call())
|
|
65
|
+
.spread($("opts"))
|
|
66
|
+
.prop("headers", headersExpr)
|
|
67
|
+
.prop("tags", $("mergeTags").call($.literal(op.id), $("opts").attr("tags").optional()));
|
|
68
|
+
}
|
|
69
|
+
/** Body argument for verb calls — currently JSON-stringify; multipart TODO. */
|
|
70
|
+
export function bodyArg(op) {
|
|
71
|
+
return op.body
|
|
72
|
+
? $("JSON").attr("stringify").call($("body"))
|
|
73
|
+
: $.literal(null);
|
|
74
|
+
}
|
|
75
|
+
/** `http.<verb>(url, [body], params)` — sync variant. */
|
|
76
|
+
export function syncCallExpression(op) {
|
|
77
|
+
const httpAttr = METHOD_TO_HTTP_ATTR[op.method] ?? op.method;
|
|
78
|
+
const args = [$("url")];
|
|
79
|
+
if (METHODS_WITH_BODY.has(op.method))
|
|
80
|
+
args.push(bodyArg(op));
|
|
81
|
+
args.push($("params"));
|
|
82
|
+
return $("http")
|
|
83
|
+
.attr(httpAttr)
|
|
84
|
+
.call(...args);
|
|
85
|
+
}
|
|
86
|
+
/** `http.asyncRequest(method, url, body, params)` — async variant. */
|
|
87
|
+
export function asyncCallExpression(op) {
|
|
88
|
+
const args = [
|
|
89
|
+
$.literal(op.method.toUpperCase()),
|
|
90
|
+
$("url"),
|
|
91
|
+
METHODS_WITH_BODY.has(op.method) ? bodyArg(op) : $.literal(null),
|
|
92
|
+
$("params"),
|
|
93
|
+
];
|
|
94
|
+
return $("http")
|
|
95
|
+
.attr("asyncRequest")
|
|
96
|
+
.call(...args);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=operation-expressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation-expressions.js","sourceRoot":"","sources":["../../src/emit/operation-expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/emit/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAM1C,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,SAAS,GACnD,MAAM,CAMR"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { $ } from "@hey-api/openapi-ts";
|
|
2
|
+
import { safeIdent } from "@ir-kit/codegen-core";
|
|
3
|
+
import { schemaToTypeNode } from "../ir/index.js";
|
|
4
|
+
import { GENERATED_HEADER, printDslNodes } from "../print.js";
|
|
5
|
+
export function emitTypesFile(schemas) {
|
|
6
|
+
const decls = Object.entries(schemas ?? {}).map(([rawName, schema]) => $.type.alias(safeIdent(rawName)).export().type(schemaToTypeNode(schema)));
|
|
7
|
+
if (!decls.length)
|
|
8
|
+
return `${GENERATED_HEADER}\n\nexport {};\n`;
|
|
9
|
+
return printDslNodes(decls, GENERATED_HEADER);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/emit/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,UAAU,aAAa,CAC3B,OAAoD;IAEpD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,CACpE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CACzE,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,GAAG,gBAAgB,kBAAkB,CAAC;IAChE,OAAO,aAAa,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { IR } from "@hey-api/shared";
|
|
2
|
+
import type { NormalizeOptions } from "@ir-kit/openapi-core";
|
|
3
|
+
export interface BuiltFile {
|
|
4
|
+
/** Path relative to the output dir. */
|
|
5
|
+
path: string;
|
|
6
|
+
content: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ScaffoldOptions {
|
|
9
|
+
/** Subdirectory inside `output` for the stubs. Default: `loadtests`. */
|
|
10
|
+
dir?: string;
|
|
11
|
+
/** How the stubs import the generated client. Default: `../index.js`. */
|
|
12
|
+
clientImport?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface GenerateOptions {
|
|
15
|
+
/** OpenAPI spec source. Path, URL, or pre-parsed spec object. */
|
|
16
|
+
input: string | Record<string, unknown>;
|
|
17
|
+
/** Output directory. Created if missing. */
|
|
18
|
+
output: string;
|
|
19
|
+
/** Falls back to spec `servers[0].url`. */
|
|
20
|
+
defaultBaseUrl?: string;
|
|
21
|
+
/** Pre-codegen spec normalization. `true` enables the safe preset. */
|
|
22
|
+
normalize?: boolean | NormalizeOptions;
|
|
23
|
+
/** Don't write to disk — just return the files. */
|
|
24
|
+
dryRun?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Emit one minimal `loadtests/<op>.ts` skeleton per operation alongside
|
|
27
|
+
* the typed client. `true` uses defaults; pass an object to customize.
|
|
28
|
+
* Files are written, not overwritten — pre-existing stubs are left alone.
|
|
29
|
+
*/
|
|
30
|
+
scaffold?: boolean | ScaffoldOptions;
|
|
31
|
+
}
|
|
32
|
+
export interface GenerateResult {
|
|
33
|
+
files: BuiltFile[];
|
|
34
|
+
/** Absolute path to the output directory. */
|
|
35
|
+
output: string;
|
|
36
|
+
/** Parsed IR — exposed so callers can run secondary passes (rename diffs, doc gen). */
|
|
37
|
+
ir: IR.Model;
|
|
38
|
+
}
|
|
39
|
+
/** Generate the typed k6 client + types + faker-backed data builders. */
|
|
40
|
+
export declare function generate(opts: GenerateOptions): Promise<GenerateResult>;
|
|
41
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAY7D,MAAM,WAAW,SAAS;IACxB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IACvC,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;CACd;AAED,yEAAyE;AACzE,wBAAsB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA8C7E"}
|
package/dist/generate.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { assertSafeOutputDir } from "@ir-kit/codegen-core";
|
|
5
|
+
import { loadSpec } from "@ir-kit/openapi-tools";
|
|
6
|
+
import { parseSpec } from "@ir-kit/openapi-tools/parse";
|
|
7
|
+
import { emitClientFile, emitDataFile, emitIndexFile, emitLoadtestStubs, emitTypesFile, } from "./emit/index.js";
|
|
8
|
+
/** Generate the typed k6 client + types + faker-backed data builders. */
|
|
9
|
+
export async function generate(opts) {
|
|
10
|
+
const bundled = await loadSpec({
|
|
11
|
+
input: opts.input,
|
|
12
|
+
normalize: opts.normalize,
|
|
13
|
+
});
|
|
14
|
+
const ir = parseSpec(bundled);
|
|
15
|
+
const defaultBaseUrl = opts.defaultBaseUrl ?? ir.servers?.[0]?.url ?? "";
|
|
16
|
+
const schemaNames = Object.keys(ir.components?.schemas ?? {});
|
|
17
|
+
const files = [
|
|
18
|
+
{ path: "types.ts", content: emitTypesFile(ir.components?.schemas) },
|
|
19
|
+
{
|
|
20
|
+
path: "client.ts",
|
|
21
|
+
content: emitClientFile(ir.paths, { defaultBaseUrl, schemaNames }),
|
|
22
|
+
},
|
|
23
|
+
{ path: "data.ts", content: emitDataFile(ir.components?.schemas) },
|
|
24
|
+
{ path: "index.ts", content: emitIndexFile() },
|
|
25
|
+
];
|
|
26
|
+
const stubs = opts.scaffold
|
|
27
|
+
? emitLoadtestStubs(ir.paths, ir.components?.schemas, typeof opts.scaffold === "object" ? opts.scaffold : {})
|
|
28
|
+
: [];
|
|
29
|
+
const out = resolve(opts.output);
|
|
30
|
+
if (!opts.dryRun) {
|
|
31
|
+
assertSafeOutputDir(out);
|
|
32
|
+
for (const file of files) {
|
|
33
|
+
const full = join(out, file.path);
|
|
34
|
+
await mkdir(dirname(full), { recursive: true });
|
|
35
|
+
await writeFile(full, file.content);
|
|
36
|
+
}
|
|
37
|
+
// Stubs are user-editable — never overwrite once they exist.
|
|
38
|
+
for (const file of stubs) {
|
|
39
|
+
const full = join(out, file.path);
|
|
40
|
+
if (existsSync(full))
|
|
41
|
+
continue;
|
|
42
|
+
await mkdir(dirname(full), { recursive: true });
|
|
43
|
+
await writeFile(full, file.content);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { files: [...files, ...stubs], output: out, ir };
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { ClientEmitOptions } from "./emit/index.js";
|
|
2
|
+
export { emitClientFile, emitDataFile, emitIndexFile, emitTypesFile, } from "./emit/index.js";
|
|
3
|
+
export type { BuiltFile, GenerateOptions, GenerateResult, ScaffoldOptions, } from "./generate.js";
|
|
4
|
+
export { generate } from "./generate.js";
|
|
5
|
+
export type { WalkedOperation } from "./ir/index.js";
|
|
6
|
+
export { walkOperations } from "./ir/index.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,SAAS,EACT,eAAe,EACf,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,aAAa,GACd,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Legal JS identifier preserving original casing — for fn/param slots. */
|
|
2
|
+
export declare function toIdent(input: string): string;
|
|
3
|
+
/** `#/components/schemas/Pet` → `Pet`, run through `safeIdent`. */
|
|
4
|
+
export declare function refToTypeName(ref: string): string;
|
|
5
|
+
//# sourceMappingURL=identifiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifiers.d.ts","sourceRoot":"","sources":["../../src/ir/identifiers.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED,mEAAmE;AACnE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGjD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { safeIdent } from "@ir-kit/codegen-core";
|
|
2
|
+
/** Legal JS identifier preserving original casing — for fn/param slots. */
|
|
3
|
+
export function toIdent(input) {
|
|
4
|
+
const stripped = input.replace(/[^A-Za-z0-9_$]+/g, "_");
|
|
5
|
+
const leading = /^[0-9]/.test(stripped) ? `_${stripped}` : stripped;
|
|
6
|
+
return leading || "_";
|
|
7
|
+
}
|
|
8
|
+
/** `#/components/schemas/Pet` → `Pet`, run through `safeIdent`. */
|
|
9
|
+
export function refToTypeName(ref) {
|
|
10
|
+
const parts = ref.split("/");
|
|
11
|
+
return safeIdent(parts[parts.length - 1] ?? "Unknown");
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=identifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifiers.js","sourceRoot":"","sources":["../../src/ir/identifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,2EAA2E;AAC3E,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IACpE,OAAO,OAAO,IAAI,GAAG,CAAC;AACxB,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { refToTypeName, toIdent } from "./identifiers.js";
|
|
2
|
+
export { schemaToFakerExpr } from "./schema-to-faker.js";
|
|
3
|
+
export { objectToTypeLiteral, schemaToTypeNode } from "./schema-to-type.js";
|
|
4
|
+
export type { WalkedOperation } from "./walk-ops.js";
|
|
5
|
+
export { walkOperations } from "./walk-ops.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ir/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/ir/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { refToTypeName, toIdent } from "./identifiers.js";
|
|
2
|
+
export { schemaToFakerExpr } from "./schema-to-faker.js";
|
|
3
|
+
export { objectToTypeLiteral, schemaToTypeNode } from "./schema-to-type.js";
|
|
4
|
+
export { walkOperations } from "./walk-ops.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ir/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type TsDsl } from "@hey-api/openapi-ts";
|
|
2
|
+
import type { IR } from "@hey-api/shared";
|
|
3
|
+
import type ts from "typescript";
|
|
4
|
+
type Expr = TsDsl<ts.Expression>;
|
|
5
|
+
/**
|
|
6
|
+
* Build a faker-backed expression that, when called, returns a value
|
|
7
|
+
* matching the schema. Refs resolve to `data.<Type>()` so cycles stay
|
|
8
|
+
* lazy. Format / field-name heuristics come from
|
|
9
|
+
* `@ir-kit/openapi-ts-faker/core` so the source-of-truth stays
|
|
10
|
+
* shared with the faker plugin.
|
|
11
|
+
*/
|
|
12
|
+
export declare function schemaToFakerExpr(schema: IR.SchemaObject, propName?: string): Expr;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=schema-to-faker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-to-faker.d.ts","sourceRoot":"","sources":["../../src/ir/schema-to-faker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAU1C,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAIjC,KAAK,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AAEjC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,EAAE,CAAC,YAAY,EACvB,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI,CA8BN"}
|