@ir-kit/k6-gen 0.1.1 → 0.2.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/emit/client.d.ts.map +1 -1
- package/dist/emit/client.js +4 -1
- package/dist/emit/client.js.map +1 -1
- package/dist/emit/data.d.ts.map +1 -1
- package/dist/emit/data.js +3 -1
- package/dist/emit/data.js.map +1 -1
- package/dist/emit/types.d.ts.map +1 -1
- package/dist/emit/types.js +5 -1
- package/dist/emit/types.js.map +1 -1
- package/dist/ir/schema-to-faker.d.ts +6 -6
- package/dist/ir/schema-to-faker.d.ts.map +1 -1
- package/dist/ir/schema-to-faker.js +30 -28
- package/dist/ir/schema-to-faker.js.map +1 -1
- package/dist/ir/schema-to-type.d.ts +10 -4
- package/dist/ir/schema-to-type.d.ts.map +1 -1
- package/dist/ir/schema-to-type.js +65 -42
- package/dist/ir/schema-to-type.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/emit/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAiC1C,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"}
|
package/dist/emit/client.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { fromHeyApi } from "@ir-kit/openapi";
|
|
1
2
|
import ts from "typescript";
|
|
2
3
|
import { schemaToTypeNode, toIdent, walkOperations, } from "../ir/index.js";
|
|
3
4
|
import { GENERATED_HEADER, printStatements } from "../print.js";
|
|
@@ -7,7 +8,9 @@ const f = ts.factory;
|
|
|
7
8
|
/** Namespace alias for type imports — generated client emits `T.Pet`. */
|
|
8
9
|
const TYPE_NAMESPACE = "T";
|
|
9
10
|
function typed(schema) {
|
|
10
|
-
return schemaToTypeNode(schema, {
|
|
11
|
+
return schemaToTypeNode(fromHeyApi(schema), {
|
|
12
|
+
typeNamespace: TYPE_NAMESPACE,
|
|
13
|
+
});
|
|
11
14
|
}
|
|
12
15
|
function typeNodeFor(op) {
|
|
13
16
|
return op.successSchema
|
package/dist/emit/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/emit/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,OAAO,EAEP,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAIpE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;AAErB,yEAAyE;AACzE,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,SAAS,KAAK,CAAC,MAAuB;IACpC,OAAO,gBAAgB,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/emit/client.ts"],"names":[],"mappings":"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"}
|
package/dist/emit/data.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/emit/data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAU1C,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,SAAS,GACnD,MAAM,CAuCR"}
|
package/dist/emit/data.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { $ } from "@hey-api/openapi-ts";
|
|
2
2
|
import { safeIdent } from "@ir-kit/codegen-core";
|
|
3
|
+
import { fromHeyApi } from "@ir-kit/openapi";
|
|
3
4
|
import { schemaToFakerExpr } from "../ir/index.js";
|
|
4
5
|
import { GENERATED_HEADER, printDslNodes } from "../print.js";
|
|
5
6
|
/** Matches the namespace alias used by `emitClientFile`. */
|
|
@@ -14,7 +15,8 @@ import { faker } from "@faker-js/faker";
|
|
|
14
15
|
import type * as ${TYPE_NAMESPACE} from "./types.js";
|
|
15
16
|
`;
|
|
16
17
|
let dataObj = $.object();
|
|
17
|
-
for (const [rawName,
|
|
18
|
+
for (const [rawName, heySchema] of entries) {
|
|
19
|
+
const schema = fromHeyApi(heySchema);
|
|
18
20
|
const name = safeIdent(rawName);
|
|
19
21
|
const typeRef = $.type(`${TYPE_NAMESPACE}.${name}`);
|
|
20
22
|
const isObject = schema.type === "object" || !!schema.properties;
|
package/dist/emit/data.js.map
CHANGED
|
@@ -1 +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;
|
|
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;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,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,SAAS,CAAC,IAAI,OAAO,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACrC,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"}
|
package/dist/emit/types.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/emit/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAO1C,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,SAAS,GACnD,MAAM,CASR"}
|
package/dist/emit/types.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { $ } from "@hey-api/openapi-ts";
|
|
2
2
|
import { safeIdent } from "@ir-kit/codegen-core";
|
|
3
|
+
import { fromHeyApi } from "@ir-kit/openapi";
|
|
3
4
|
import { schemaToTypeNode } from "../ir/index.js";
|
|
4
5
|
import { GENERATED_HEADER, printDslNodes } from "../print.js";
|
|
5
6
|
export function emitTypesFile(schemas) {
|
|
6
|
-
const decls = Object.entries(schemas ?? {}).map(([rawName, schema]) => $.type
|
|
7
|
+
const decls = Object.entries(schemas ?? {}).map(([rawName, schema]) => $.type
|
|
8
|
+
.alias(safeIdent(rawName))
|
|
9
|
+
.export()
|
|
10
|
+
.type(schemaToTypeNode(fromHeyApi(schema))));
|
|
7
11
|
if (!decls.length)
|
|
8
12
|
return `${GENERATED_HEADER}\n\nexport {};\n`;
|
|
9
13
|
return printDslNodes(decls, GENERATED_HEADER);
|
package/dist/emit/types.js.map
CHANGED
|
@@ -1 +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;
|
|
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;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,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;SACH,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SACzB,MAAM,EAAE;SACR,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAC9C,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,GAAG,gBAAgB,kBAAkB,CAAC;IAChE,OAAO,aAAa,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { type TsDsl } from "@hey-api/openapi-ts";
|
|
2
|
-
import type
|
|
2
|
+
import { type Schema } from "@ir-kit/openapi";
|
|
3
3
|
import type ts from "typescript";
|
|
4
4
|
type Expr = TsDsl<ts.Expression>;
|
|
5
5
|
/**
|
|
6
|
-
* Build a faker-backed expression that, when called,
|
|
6
|
+
* Build a faker-backed expression that, when called, produces a value
|
|
7
7
|
* matching the schema. Refs resolve to `data.<Type>()` so cycles stay
|
|
8
|
-
* lazy. Format / field-name heuristics
|
|
9
|
-
* `@ir-kit/openapi-ts-faker/core` so the source-of-truth stays
|
|
10
|
-
*
|
|
8
|
+
* lazy. Format / field-name heuristics route through
|
|
9
|
+
* `@ir-kit/openapi-ts-faker/core` so the source-of-truth stays shared
|
|
10
|
+
* with the faker plugin.
|
|
11
11
|
*/
|
|
12
|
-
export declare function schemaToFakerExpr(schema:
|
|
12
|
+
export declare function schemaToFakerExpr(schema: Schema, propName?: string): Expr;
|
|
13
13
|
export {};
|
|
14
14
|
//# sourceMappingURL=schema-to-faker.d.ts.map
|
|
@@ -1 +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,
|
|
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,EAIL,KAAK,MAAM,EACZ,MAAM,iBAAiB,CAAC;AAQzB,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,KAAK,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AAEjC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAqCzE"}
|
|
@@ -1,39 +1,38 @@
|
|
|
1
1
|
import { $ } from "@hey-api/openapi-ts";
|
|
2
|
-
import {
|
|
3
|
-
import { getEnumLiterals } from "@ir-kit/openapi-tools";
|
|
2
|
+
import { extractEnumValues, isSchemaObject, refName, } from "@ir-kit/openapi";
|
|
4
3
|
import { DATE_METHODS, DEFAULT_FORMAT_MAPPING, resolveFakerCall, } from "@ir-kit/openapi-ts-faker/core";
|
|
5
|
-
import { refToTypeName } from "./identifiers.js";
|
|
6
4
|
/**
|
|
7
|
-
* Build a faker-backed expression that, when called,
|
|
5
|
+
* Build a faker-backed expression that, when called, produces a value
|
|
8
6
|
* matching the schema. Refs resolve to `data.<Type>()` so cycles stay
|
|
9
|
-
* lazy. Format / field-name heuristics
|
|
10
|
-
* `@ir-kit/openapi-ts-faker/core` so the source-of-truth stays
|
|
11
|
-
*
|
|
7
|
+
* lazy. Format / field-name heuristics route through
|
|
8
|
+
* `@ir-kit/openapi-ts-faker/core` so the source-of-truth stays shared
|
|
9
|
+
* with the faker plugin.
|
|
12
10
|
*/
|
|
13
11
|
export function schemaToFakerExpr(schema, propName) {
|
|
14
12
|
if (schema.$ref)
|
|
15
|
-
return dataCall(
|
|
16
|
-
if (schema.symbolRef)
|
|
17
|
-
return dataCall(safeIdent(schema.symbolRef.name));
|
|
13
|
+
return dataCall(refName(schema.$ref));
|
|
18
14
|
if (schema.const !== undefined)
|
|
19
15
|
return literalExpr(schema.const);
|
|
20
|
-
if (schema.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
16
|
+
if (schema.type === "array") {
|
|
17
|
+
return schema.items && isSchemaObject(schema.items)
|
|
18
|
+
? $.array(schemaToFakerExpr(schema.items, propName))
|
|
19
|
+
: $.array();
|
|
20
|
+
}
|
|
21
|
+
if (Array.isArray(schema.prefixItems) && schema.prefixItems.length > 0) {
|
|
22
|
+
return $.array(...schema.prefixItems
|
|
23
|
+
.filter(isSchemaObject)
|
|
24
|
+
.map((item, i) => schemaToFakerExpr(item, `${propName ?? ""}_${i}`)));
|
|
28
25
|
}
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
const enumValues = extractEnumValues(schema);
|
|
27
|
+
if (enumValues && enumValues.length > 0)
|
|
28
|
+
return enumFaker(enumValues);
|
|
31
29
|
if (schema.type === "object")
|
|
32
30
|
return objectFaker(schema);
|
|
33
31
|
if (schema.type === "null")
|
|
34
32
|
return $.literal(null);
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
const firstBranch = (schema.oneOf ?? schema.anyOf ?? schema.allOf)?.find((b) => isSchemaObject(b) && b.type !== "null");
|
|
34
|
+
if (firstBranch && isSchemaObject(firstBranch))
|
|
35
|
+
return schemaToFakerExpr(firstBranch, propName);
|
|
37
36
|
const spec = resolveFakerCall(schemaToPropertyInfo(schema, propName), {
|
|
38
37
|
formatHints: DEFAULT_FORMAT_MAPPING,
|
|
39
38
|
respectConstraints: false,
|
|
@@ -68,12 +67,14 @@ function fakerCallSpecToExpr(spec) {
|
|
|
68
67
|
.attr(mod)
|
|
69
68
|
.attr(fn)
|
|
70
69
|
.call(...args);
|
|
71
|
-
// Date faker methods return Date objects; we want ISO strings.
|
|
72
70
|
return DATE_METHODS.has(spec.method) ? call.attr("toISOString").call() : call;
|
|
73
71
|
}
|
|
74
72
|
function schemaToPropertyInfo(schema, propName) {
|
|
73
|
+
const t = Array.isArray(schema.type)
|
|
74
|
+
? schema.type.find((x) => x !== "null")
|
|
75
|
+
: schema.type;
|
|
75
76
|
return {
|
|
76
|
-
type:
|
|
77
|
+
type: t ?? "string",
|
|
77
78
|
format: typeof schema.format === "string" ? schema.format : undefined,
|
|
78
79
|
name: propName ?? "",
|
|
79
80
|
minimum: schema.minimum,
|
|
@@ -84,18 +85,19 @@ function schemaToPropertyInfo(schema, propName) {
|
|
|
84
85
|
maxItems: schema.maxItems,
|
|
85
86
|
};
|
|
86
87
|
}
|
|
87
|
-
function enumFaker(
|
|
88
|
-
|
|
89
|
-
if (!literals.length)
|
|
88
|
+
function enumFaker(values) {
|
|
89
|
+
if (!values.length)
|
|
90
90
|
return $.literal("");
|
|
91
91
|
return $("faker")
|
|
92
92
|
.attr("helpers")
|
|
93
93
|
.attr("arrayElement")
|
|
94
|
-
.call($.array(...
|
|
94
|
+
.call($.array(...values.map((v) => literalExpr(v))));
|
|
95
95
|
}
|
|
96
96
|
function objectFaker(schema) {
|
|
97
97
|
let obj = $.object();
|
|
98
98
|
for (const [name, propSchema] of Object.entries(schema.properties ?? {})) {
|
|
99
|
+
if (!isSchemaObject(propSchema))
|
|
100
|
+
continue;
|
|
99
101
|
obj = obj.prop(name, schemaToFakerExpr(propSchema, name));
|
|
100
102
|
}
|
|
101
103
|
return obj;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-to-faker.js","sourceRoot":"","sources":["../../src/ir/schema-to-faker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAc,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-to-faker.js","sourceRoot":"","sources":["../../src/ir/schema-to-faker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { type TsDsl } from "@hey-api/openapi-ts";
|
|
2
|
-
import type
|
|
2
|
+
import { type Schema } from "@ir-kit/openapi";
|
|
3
3
|
import ts from "typescript";
|
|
4
4
|
type TypeExpr = TsDsl<ts.TypeNode>;
|
|
5
5
|
export interface SchemaToTypeOpts {
|
|
6
|
-
/** Namespace prefix for named refs (e.g. "T" → `T.Pet`).
|
|
6
|
+
/** Namespace prefix for named refs (e.g. "T" → `T.Pet`). */
|
|
7
7
|
typeNamespace?: string;
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Dispatch a canonical {@link Schema} to a TS `TypeNode` DSL expression.
|
|
11
|
+
*
|
|
12
|
+
* Dispatch order matters: `$ref`, `const`, `enum`, union shape, then
|
|
13
|
+
* compound `type` (array / tuple / object), then primitive fallback.
|
|
14
|
+
*/
|
|
15
|
+
export declare function schemaToTypeNode(schema: Schema, opts?: SchemaToTypeOpts): TypeExpr;
|
|
16
|
+
export declare function objectToTypeLiteral(schema: Schema, opts?: SchemaToTypeOpts): TypeExpr;
|
|
11
17
|
export {};
|
|
12
18
|
//# sourceMappingURL=schema-to-type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-to-type.d.ts","sourceRoot":"","sources":["../../src/ir/schema-to-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"schema-to-type.d.ts","sourceRoot":"","sources":["../../src/ir/schema-to-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAML,KAAK,MAAM,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,KAAK,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAEnC,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,gBAAqB,GAC1B,QAAQ,CAkDV;AA+CD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,gBAAqB,GAC1B,QAAQ,CA8BV"}
|
|
@@ -1,37 +1,58 @@
|
|
|
1
1
|
import { $ } from "@hey-api/openapi-ts";
|
|
2
|
-
import {
|
|
3
|
-
import { getEnumLiterals, isEnumSchema, isUnionSchema, } from "@ir-kit/openapi-tools";
|
|
2
|
+
import { classifyUnion, extractEnumValues, isSchemaObject, isUnionShape, refName, } from "@ir-kit/openapi";
|
|
4
3
|
import ts from "typescript";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Dispatch a canonical {@link Schema} to a TS `TypeNode` DSL expression.
|
|
6
|
+
*
|
|
7
|
+
* Dispatch order matters: `$ref`, `const`, `enum`, union shape, then
|
|
8
|
+
* compound `type` (array / tuple / object), then primitive fallback.
|
|
9
|
+
*/
|
|
10
10
|
export function schemaToTypeNode(schema, opts = {}) {
|
|
11
11
|
if (schema.$ref)
|
|
12
|
-
return $.type(qualify(
|
|
13
|
-
if (schema.symbolRef) {
|
|
14
|
-
return $.type(qualify(safeIdent(schema.symbolRef.name), opts));
|
|
15
|
-
}
|
|
12
|
+
return $.type(qualify(refName(schema.$ref), opts));
|
|
16
13
|
if (schema.const !== undefined) {
|
|
17
14
|
return $.type.literal(schema.const);
|
|
18
15
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const inner = schema.items.length === 1
|
|
28
|
-
? schemaToTypeNode(schema.items[0], opts)
|
|
29
|
-
: combine(schema.items.map((s) => schemaToTypeNode(s, opts)), schema.logicalOperator ?? "or");
|
|
30
|
-
return arrayOf(inner);
|
|
16
|
+
const enumValues = extractEnumValues(schema);
|
|
17
|
+
if (enumValues && enumValues.length > 0)
|
|
18
|
+
return enumToUnion(enumValues);
|
|
19
|
+
if (isUnionShape(schema)) {
|
|
20
|
+
const u = classifyUnion(schema);
|
|
21
|
+
if (u.kind === "single") {
|
|
22
|
+
const inner = schemaToTypeNode(u.inner, opts);
|
|
23
|
+
return u.nullable ? $.type.or(inner, $.type.literal(null)) : inner;
|
|
31
24
|
}
|
|
32
|
-
if (
|
|
33
|
-
return
|
|
25
|
+
if (u.kind === "intersection-with-properties") {
|
|
26
|
+
return objectToTypeLiteral(schema, opts);
|
|
27
|
+
}
|
|
28
|
+
if (u.kind === "intersection-empty")
|
|
29
|
+
return $.type("unknown");
|
|
30
|
+
const branches = [];
|
|
31
|
+
for (const b of [
|
|
32
|
+
...(schema.oneOf ?? []),
|
|
33
|
+
...(schema.anyOf ?? []),
|
|
34
|
+
...(schema.allOf ?? []),
|
|
35
|
+
]) {
|
|
36
|
+
if (!isSchemaObject(b))
|
|
37
|
+
continue;
|
|
38
|
+
if (b.type === "null")
|
|
39
|
+
continue;
|
|
40
|
+
branches.push(schemaToTypeNode(b, opts));
|
|
34
41
|
}
|
|
42
|
+
if (u.nullable)
|
|
43
|
+
branches.push($.type.literal(null));
|
|
44
|
+
return branches.length === 1 ? branches[0] : $.type.or(...branches);
|
|
45
|
+
}
|
|
46
|
+
if (schema.type === "array") {
|
|
47
|
+
const inner = schema.items && isSchemaObject(schema.items)
|
|
48
|
+
? schemaToTypeNode(schema.items, opts)
|
|
49
|
+
: $.type("unknown");
|
|
50
|
+
return arrayOf(inner);
|
|
51
|
+
}
|
|
52
|
+
if (Array.isArray(schema.prefixItems) && schema.prefixItems.length > 0) {
|
|
53
|
+
return $.type.tuple(...schema.prefixItems
|
|
54
|
+
.filter(isSchemaObject)
|
|
55
|
+
.map((s) => schemaToTypeNode(s, opts)));
|
|
35
56
|
}
|
|
36
57
|
return primitiveToTypeNode(schema, opts);
|
|
37
58
|
}
|
|
@@ -39,7 +60,10 @@ function qualify(name, opts) {
|
|
|
39
60
|
return opts.typeNamespace ? `${opts.typeNamespace}.${name}` : name;
|
|
40
61
|
}
|
|
41
62
|
function primitiveToTypeNode(schema, opts) {
|
|
42
|
-
|
|
63
|
+
const t = Array.isArray(schema.type)
|
|
64
|
+
? schema.type.find((x) => x !== "null")
|
|
65
|
+
: schema.type;
|
|
66
|
+
switch (t) {
|
|
43
67
|
case "string":
|
|
44
68
|
return $.type("string");
|
|
45
69
|
case "integer":
|
|
@@ -53,28 +77,23 @@ function primitiveToTypeNode(schema, opts) {
|
|
|
53
77
|
return arrayOf($.type("unknown"));
|
|
54
78
|
case "object":
|
|
55
79
|
return objectToTypeLiteral(schema, opts);
|
|
56
|
-
case "void":
|
|
57
|
-
case "never":
|
|
58
|
-
case "undefined":
|
|
59
|
-
return $.type("undefined");
|
|
60
80
|
default:
|
|
61
81
|
return $.type("unknown");
|
|
62
82
|
}
|
|
63
83
|
}
|
|
64
84
|
function arrayOf(inner) {
|
|
65
|
-
// `Array<T>` renders identically to `T[]` after the printer's normalize pass.
|
|
66
85
|
return $.type("Array").generic(inner);
|
|
67
86
|
}
|
|
68
|
-
function
|
|
69
|
-
if (
|
|
70
|
-
return
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
87
|
+
function enumToUnion(values) {
|
|
88
|
+
if (!values.length)
|
|
89
|
+
return $.type("string");
|
|
90
|
+
const nodes = values
|
|
91
|
+
.filter((v) => typeof v === "string" ||
|
|
92
|
+
typeof v === "number" ||
|
|
93
|
+
typeof v === "boolean")
|
|
94
|
+
.map((v) => $.type.literal(v));
|
|
95
|
+
if (!nodes.length)
|
|
76
96
|
return $.type("string");
|
|
77
|
-
const nodes = literals.map((v) => $.type.literal(v));
|
|
78
97
|
return nodes.length === 1 ? nodes[0] : $.type.or(...nodes);
|
|
79
98
|
}
|
|
80
99
|
export function objectToTypeLiteral(schema, opts = {}) {
|
|
@@ -88,14 +107,18 @@ export function objectToTypeLiteral(schema, opts = {}) {
|
|
|
88
107
|
}
|
|
89
108
|
let obj = $.type.object();
|
|
90
109
|
for (const [name, propSchema] of propEntries) {
|
|
110
|
+
if (!isSchemaObject(propSchema))
|
|
111
|
+
continue;
|
|
91
112
|
const propType = schemaToTypeNode(propSchema, opts);
|
|
92
113
|
obj = obj.prop(name, (p) => {
|
|
93
114
|
const out = p.type(propType);
|
|
94
115
|
return required.has(name) ? out : out.optional();
|
|
95
116
|
});
|
|
96
117
|
}
|
|
97
|
-
if (additional &&
|
|
98
|
-
obj = obj.idxSig("key", (s) => void s
|
|
118
|
+
if (additional && isSchemaObject(additional)) {
|
|
119
|
+
obj = obj.idxSig("key", (s) => void s
|
|
120
|
+
.key($.type("string"))
|
|
121
|
+
.type(schemaToTypeNode(additional, opts)));
|
|
99
122
|
}
|
|
100
123
|
return obj;
|
|
101
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-to-type.js","sourceRoot":"","sources":["../../src/ir/schema-to-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAc,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-to-type.js","sourceRoot":"","sources":["../../src/ir/schema-to-type.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ir-kit/k6-gen",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Programmatic generator: OpenAPI spec → typed k6 client (one function per operation), TS types, and faker-backed data builders. No hey-api plugin required.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"k6",
|
|
@@ -47,9 +47,9 @@
|
|
|
47
47
|
"@hey-api/openapi-ts": "^0.97.0",
|
|
48
48
|
"@hey-api/shared": "^0.4.2",
|
|
49
49
|
"@ir-kit/codegen-core": "0.1.0",
|
|
50
|
-
"@ir-kit/openapi": "0.
|
|
51
|
-
"@ir-kit/openapi-
|
|
52
|
-
"@ir-kit/openapi-
|
|
50
|
+
"@ir-kit/openapi": "0.3.0",
|
|
51
|
+
"@ir-kit/openapi-ts-faker": "0.1.0",
|
|
52
|
+
"@ir-kit/openapi-tools": "0.2.0"
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
55
|
"typescript": ">=5.0.0"
|