@ir-kit/k6-toolkit 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 +62 -0
- package/dist/ast-imports.d.ts +15 -0
- package/dist/ast-imports.d.ts.map +1 -0
- package/dist/ast-imports.js +12 -0
- package/dist/ast-imports.js.map +1 -0
- package/dist/bundle.d.ts +25 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +60 -0
- package/dist/bundle.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +88 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +50 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +73 -0
- package/dist/init.js.map +1 -0
- package/dist/loadtest-scaffold.d.ts +48 -0
- package/dist/loadtest-scaffold.d.ts.map +1 -0
- package/dist/loadtest-scaffold.js +121 -0
- package/dist/loadtest-scaffold.js.map +1 -0
- package/dist/operation-map.d.ts +6 -0
- package/dist/operation-map.d.ts.map +1 -0
- package/dist/operation-map.js +27 -0
- package/dist/operation-map.js.map +1 -0
- package/dist/print.d.ts +4 -0
- package/dist/print.d.ts.map +1 -0
- package/dist/print.js +14 -0
- package/dist/print.js.map +1 -0
- package/dist/rename-report.d.ts +26 -0
- package/dist/rename-report.d.ts.map +1 -0
- package/dist/rename-report.js +30 -0
- package/dist/rename-report.js.map +1 -0
- package/dist/run.d.ts +27 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +30 -0
- package/dist/run.js.map +1 -0
- package/dist/scaffold/ast-helpers.d.ts +10 -0
- package/dist/scaffold/ast-helpers.d.ts.map +1 -0
- package/dist/scaffold/ast-helpers.js +21 -0
- package/dist/scaffold/ast-helpers.js.map +1 -0
- package/dist/scaffold/chains.d.ts +10 -0
- package/dist/scaffold/chains.d.ts.map +1 -0
- package/dist/scaffold/chains.js +92 -0
- package/dist/scaffold/chains.js.map +1 -0
- package/dist/scaffold/cli-handler.d.ts +4 -0
- package/dist/scaffold/cli-handler.d.ts.map +1 -0
- package/dist/scaffold/cli-handler.js +204 -0
- package/dist/scaffold/cli-handler.js.map +1 -0
- package/dist/scaffold/scenario.d.ts +34 -0
- package/dist/scaffold/scenario.d.ts.map +1 -0
- package/dist/scaffold/scenario.js +67 -0
- package/dist/scaffold/scenario.js.map +1 -0
- package/dist/scaffold/spec-tags.d.ts +15 -0
- package/dist/scaffold/spec-tags.d.ts.map +1 -0
- package/dist/scaffold/spec-tags.js +23 -0
- package/dist/scaffold/spec-tags.js.map +1 -0
- package/dist/scaffold/wizard.d.ts +25 -0
- package/dist/scaffold/wizard.d.ts.map +1 -0
- package/dist/scaffold/wizard.js +156 -0
- package/dist/scaffold/wizard.js.map +1 -0
- package/dist/snapshot.d.ts +6 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +35 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/spawn-k6.d.ts +30 -0
- package/dist/spawn-k6.d.ts.map +1 -0
- package/dist/spawn-k6.js +46 -0
- package/dist/spawn-k6.js.map +1 -0
- package/dist/sync-cli.d.ts +2 -0
- package/dist/sync-cli.d.ts.map +1 -0
- package/dist/sync-cli.js +137 -0
- package/dist/sync-cli.js.map +1 -0
- package/dist/sync.d.ts +23 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +37 -0
- package/dist/sync.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type StdioOptions } from "node:child_process";
|
|
2
|
+
export interface K6FlagArgs {
|
|
3
|
+
baseUrl?: string;
|
|
4
|
+
vus?: string;
|
|
5
|
+
duration?: string;
|
|
6
|
+
/** k6 `--out` sinks. Each entry is a separate `--out` flag. */
|
|
7
|
+
out?: ReadonlyArray<string>;
|
|
8
|
+
/** k6 `--summary-export=<path>`. */
|
|
9
|
+
summary?: string;
|
|
10
|
+
/** Extra args appended verbatim after the synthesized flags. */
|
|
11
|
+
extraArgs?: ReadonlyArray<string>;
|
|
12
|
+
}
|
|
13
|
+
/** Build the `k6 run …` argv for one bundle. */
|
|
14
|
+
export declare function buildK6Args(outfile: string, args?: K6FlagArgs): string[];
|
|
15
|
+
export interface SpawnK6Opts {
|
|
16
|
+
/** Where to inherit/pipe k6's stdio. Default: "inherit". */
|
|
17
|
+
stdio?: StdioOptions;
|
|
18
|
+
/** Path/name of the k6 binary. Default: "k6". */
|
|
19
|
+
binary?: string;
|
|
20
|
+
/** Working directory. */
|
|
21
|
+
cwd?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Spawn k6 with the given argv. Resolves to the exit code; for
|
|
25
|
+
* signal-terminated processes returns `128 + signum` per POSIX so
|
|
26
|
+
* callers can fail-fast on Ctrl-C / SIGKILL without manual signal
|
|
27
|
+
* decoding.
|
|
28
|
+
*/
|
|
29
|
+
export declare function spawnK6(k6Args: ReadonlyArray<string>, opts?: SpawnK6Opts): Promise<number>;
|
|
30
|
+
//# sourceMappingURL=spawn-k6.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn-k6.d.ts","sourceRoot":"","sources":["../src/spawn-k6.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAS,MAAM,oBAAoB,CAAC;AAG9D,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5B,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,SAAS,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,gDAAgD;AAChD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,MAAM,EAAE,CAU5E;AAED,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,MAAM,CAAC,CAajB"}
|
package/dist/spawn-k6.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { constants as osConstants } from "node:os";
|
|
3
|
+
/** Build the `k6 run …` argv for one bundle. */
|
|
4
|
+
export function buildK6Args(outfile, args = {}) {
|
|
5
|
+
const out = ["run"];
|
|
6
|
+
if (args.baseUrl)
|
|
7
|
+
out.push("-e", `BASE_URL=${args.baseUrl}`);
|
|
8
|
+
if (args.vus)
|
|
9
|
+
out.push("--vus", args.vus);
|
|
10
|
+
if (args.duration)
|
|
11
|
+
out.push("--duration", args.duration);
|
|
12
|
+
for (const sink of args.out ?? [])
|
|
13
|
+
out.push("--out", sink);
|
|
14
|
+
if (args.summary)
|
|
15
|
+
out.push(`--summary-export=${args.summary}`);
|
|
16
|
+
out.push(...(args.extraArgs ?? []));
|
|
17
|
+
out.push(outfile);
|
|
18
|
+
return out;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Spawn k6 with the given argv. Resolves to the exit code; for
|
|
22
|
+
* signal-terminated processes returns `128 + signum` per POSIX so
|
|
23
|
+
* callers can fail-fast on Ctrl-C / SIGKILL without manual signal
|
|
24
|
+
* decoding.
|
|
25
|
+
*/
|
|
26
|
+
export function spawnK6(k6Args, opts = {}) {
|
|
27
|
+
const child = spawn(opts.binary ?? "k6", [...k6Args], {
|
|
28
|
+
stdio: opts.stdio ?? "inherit",
|
|
29
|
+
cwd: opts.cwd,
|
|
30
|
+
});
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
child.on("exit", (code, signal) => {
|
|
33
|
+
if (code !== null)
|
|
34
|
+
return resolve(code);
|
|
35
|
+
if (signal)
|
|
36
|
+
return resolve(128 + (signalNumber(signal) ?? 1));
|
|
37
|
+
resolve(1);
|
|
38
|
+
});
|
|
39
|
+
child.on("error", reject);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/** Look up the platform-correct signum from Node's os.constants. */
|
|
43
|
+
function signalNumber(signal) {
|
|
44
|
+
return osConstants.signals[signal];
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=spawn-k6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn-k6.js","sourceRoot":"","sources":["../src/spawn-k6.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AAcnD,gDAAgD;AAChD,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,OAAmB,EAAE;IAChE,MAAM,GAAG,GAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,OAAO;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,GAAG;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,QAAQ;QAAE,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,OAAO;QAAE,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/D,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;IACpC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,GAAG,CAAC;AACb,CAAC;AAWD;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CACrB,MAA6B,EAC7B,OAAoB,EAAE;IAEtB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE;QACpD,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;QAC9B,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,MAAM;gBAAE,OAAO,OAAO,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,oEAAoE;AACpE,SAAS,YAAY,CAAC,MAAsB;IAC1C,OAAQ,WAAW,CAAC,OAA8C,CAAC,MAAM,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-cli.d.ts","sourceRoot":"","sources":["../src/sync-cli.ts"],"names":[],"mappings":"AAiIA,wBAAsB,cAAc,CAClC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
package/dist/sync-cli.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { relative } from "node:path";
|
|
2
|
+
import { sync } from "./sync.js";
|
|
3
|
+
const HELP = `
|
|
4
|
+
k6-ts sync — generate the typed k6 client from an OpenAPI spec.
|
|
5
|
+
|
|
6
|
+
USAGE
|
|
7
|
+
k6-ts sync <spec> [--output ./src/gen] [options]
|
|
8
|
+
k6-ts sync - [options] # read JSON spec from stdin
|
|
9
|
+
|
|
10
|
+
OPTIONS
|
|
11
|
+
--output <dir> Where to write client.ts / types.ts / data.ts / index.ts.
|
|
12
|
+
Default: ./src/gen
|
|
13
|
+
--base-url <url> DEFAULT_BASE_URL baked into the generated client.
|
|
14
|
+
Default: spec.servers[0].url
|
|
15
|
+
--scaffold Also emit one stub loadtest per spec operation under loadtests/.
|
|
16
|
+
--no-normalize Skip the safe-normalize preset on the input spec.
|
|
17
|
+
--dry-run Build everything in memory, print results, don't write.
|
|
18
|
+
--report-renames Diff operationIds against the prior sync's snapshot.
|
|
19
|
+
--help, -h Show this help.
|
|
20
|
+
|
|
21
|
+
EXAMPLES
|
|
22
|
+
k6-ts sync ./openapi.yaml --output ./src/gen
|
|
23
|
+
k6-ts sync https://api.example.com/openapi.json --base-url https://staging.example.com
|
|
24
|
+
openapi-recon ./traffic.har | k6-ts sync - --output ./src/gen
|
|
25
|
+
`.trim();
|
|
26
|
+
function parseArgs(argv) {
|
|
27
|
+
let input = "";
|
|
28
|
+
let output = "./src/gen";
|
|
29
|
+
let baseUrl;
|
|
30
|
+
let scaffold = false;
|
|
31
|
+
let normalize = true;
|
|
32
|
+
let dryRun = false;
|
|
33
|
+
let reportRenames = false;
|
|
34
|
+
let showHelp = false;
|
|
35
|
+
for (let i = 0; i < argv.length; i++) {
|
|
36
|
+
const a = argv[i];
|
|
37
|
+
if (a === "--help" || a === "-h") {
|
|
38
|
+
showHelp = true;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (a === "--scaffold") {
|
|
42
|
+
scaffold = true;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (a === "--no-normalize") {
|
|
46
|
+
normalize = false;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (a === "--dry-run") {
|
|
50
|
+
dryRun = true;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (a === "--report-renames") {
|
|
54
|
+
reportRenames = true;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (a === "--output") {
|
|
58
|
+
output = expectValue(argv, ++i, "--output");
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (a === "--base-url") {
|
|
62
|
+
baseUrl = expectValue(argv, ++i, "--base-url");
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (a.startsWith("-") && a !== "-") {
|
|
66
|
+
throw new Error(`Unknown flag: ${a}`);
|
|
67
|
+
}
|
|
68
|
+
if (input) {
|
|
69
|
+
throw new Error(`Multiple inputs given: "${input}" and "${a}"`);
|
|
70
|
+
}
|
|
71
|
+
input = a;
|
|
72
|
+
}
|
|
73
|
+
if (!showHelp && !input) {
|
|
74
|
+
throw new Error("Missing input — pass a spec path, URL, or `-` for stdin JSON.");
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
input,
|
|
78
|
+
output,
|
|
79
|
+
baseUrl,
|
|
80
|
+
scaffold,
|
|
81
|
+
normalize,
|
|
82
|
+
dryRun,
|
|
83
|
+
reportRenames,
|
|
84
|
+
showHelp,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function expectValue(argv, idx, flag) {
|
|
88
|
+
const v = argv[idx];
|
|
89
|
+
if (v === undefined || (v.startsWith("-") && v !== "-")) {
|
|
90
|
+
throw new Error(`${flag} requires a value`);
|
|
91
|
+
}
|
|
92
|
+
return v;
|
|
93
|
+
}
|
|
94
|
+
async function readStdinJson() {
|
|
95
|
+
const chunks = [];
|
|
96
|
+
for await (const chunk of process.stdin) {
|
|
97
|
+
chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
|
|
98
|
+
}
|
|
99
|
+
return JSON.parse(Buffer.concat(chunks).toString("utf8"));
|
|
100
|
+
}
|
|
101
|
+
export async function runSyncCommand(argv) {
|
|
102
|
+
let parsed;
|
|
103
|
+
try {
|
|
104
|
+
parsed = parseArgs(argv);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
console.error(`k6-ts sync: ${err instanceof Error ? err.message : String(err)}`);
|
|
108
|
+
console.error("Run `k6-ts sync --help` for usage.");
|
|
109
|
+
process.exit(2);
|
|
110
|
+
}
|
|
111
|
+
if (parsed.showHelp) {
|
|
112
|
+
console.log(HELP);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const input = parsed.input === "-" ? await readStdinJson() : parsed.input;
|
|
116
|
+
const result = await sync({
|
|
117
|
+
input,
|
|
118
|
+
output: parsed.output,
|
|
119
|
+
normalize: parsed.normalize,
|
|
120
|
+
defaultBaseUrl: parsed.baseUrl,
|
|
121
|
+
scaffold: parsed.scaffold,
|
|
122
|
+
dryRun: parsed.dryRun,
|
|
123
|
+
reportRenames: parsed.reportRenames,
|
|
124
|
+
});
|
|
125
|
+
const where = relative(process.cwd(), result.output) || result.output;
|
|
126
|
+
const action = parsed.dryRun ? "would write" : "wrote";
|
|
127
|
+
console.error(`k6-ts sync: ${action} ${result.files.length} files to ${where}`);
|
|
128
|
+
if (result.diff) {
|
|
129
|
+
for (const r of result.diff.renamed) {
|
|
130
|
+
console.warn(` renamed: ${r.method.toUpperCase()} ${r.path} — ${r.from} → ${r.to}`);
|
|
131
|
+
}
|
|
132
|
+
for (const r of result.diff.removed) {
|
|
133
|
+
console.warn(` removed: ${r.method.toUpperCase()} ${r.path} — ${r.operationId}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=sync-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-cli.js","sourceRoot":"","sources":["../src/sync-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/sync.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type GenerateOptions, type GenerateResult } from "@ir-kit/k6-gen";
|
|
2
|
+
import { type OperationDiff } from "./rename-report.js";
|
|
3
|
+
export interface SyncOptions extends Pick<GenerateOptions, "input" | "normalize" | "defaultBaseUrl" | "scaffold" | "dryRun"> {
|
|
4
|
+
/** Output directory for the generated client. */
|
|
5
|
+
output: string;
|
|
6
|
+
/** Working directory used to resolve relative `input` / `output`. Default: `process.cwd()`. */
|
|
7
|
+
cwd?: string;
|
|
8
|
+
/** Diff operationIds against the prior sync's snapshot. */
|
|
9
|
+
reportRenames?: boolean;
|
|
10
|
+
/** Persist a fresh snapshot after generate. Default: `true`. */
|
|
11
|
+
writeSnapshot?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface SyncResult extends GenerateResult {
|
|
14
|
+
/** Drift summary; populated only when `reportRenames` is true. */
|
|
15
|
+
diff?: OperationDiff;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Drive {@link generate} from a spec to an output directory, plus the
|
|
19
|
+
* snapshot bookkeeping that powers `--report-renames`. Returns the full
|
|
20
|
+
* `GenerateResult` (files + ir) so callers can chain.
|
|
21
|
+
*/
|
|
22
|
+
export declare function sync(opts: SyncOptions): Promise<SyncResult>;
|
|
23
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAEpB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAO1E,MAAM,WAAW,WACf,SAAQ,IAAI,CACV,eAAe,EACf,OAAO,GAAG,WAAW,GAAG,gBAAgB,GAAG,UAAU,GAAG,QAAQ,CACjE;IACD,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gEAAgE;IAChE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,kEAAkE;IAClE,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA6BjE"}
|
package/dist/sync.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { join, resolve } from "node:path";
|
|
2
|
+
import { generate, } from "@ir-kit/k6-gen";
|
|
3
|
+
import { resolveSpecInput } from "@ir-kit/openapi-tools";
|
|
4
|
+
import { extractOperationMap } from "./operation-map.js";
|
|
5
|
+
import { diffOperationIds } from "./rename-report.js";
|
|
6
|
+
import { loadSnapshotOps, SNAPSHOT_FILENAME, writeSnapshotOps, } from "./snapshot.js";
|
|
7
|
+
/**
|
|
8
|
+
* Drive {@link generate} from a spec to an output directory, plus the
|
|
9
|
+
* snapshot bookkeeping that powers `--report-renames`. Returns the full
|
|
10
|
+
* `GenerateResult` (files + ir) so callers can chain.
|
|
11
|
+
*/
|
|
12
|
+
export async function sync(opts) {
|
|
13
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
14
|
+
const output = resolve(cwd, opts.output);
|
|
15
|
+
const input = resolveSpecInput(opts.input, cwd);
|
|
16
|
+
const snapshotPath = join(output, SNAPSHOT_FILENAME);
|
|
17
|
+
const prevOps = opts.reportRenames
|
|
18
|
+
? await loadSnapshotOps(snapshotPath)
|
|
19
|
+
: null;
|
|
20
|
+
const result = await generate({
|
|
21
|
+
input,
|
|
22
|
+
output,
|
|
23
|
+
normalize: opts.normalize,
|
|
24
|
+
defaultBaseUrl: opts.defaultBaseUrl,
|
|
25
|
+
scaffold: opts.scaffold,
|
|
26
|
+
dryRun: opts.dryRun,
|
|
27
|
+
});
|
|
28
|
+
const nextOps = extractOperationMap(result.ir);
|
|
29
|
+
if (!opts.dryRun && opts.writeSnapshot !== false) {
|
|
30
|
+
await writeSnapshotOps(snapshotPath, nextOps);
|
|
31
|
+
}
|
|
32
|
+
const diff = opts.reportRenames
|
|
33
|
+
? diffOperationIds(prevOps ?? new Map(), nextOps)
|
|
34
|
+
: undefined;
|
|
35
|
+
return { ...result, diff };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=sync.js.map
|
package/dist/sync.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAGL,QAAQ,GACT,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAsB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAsBvB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAiB;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAErD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa;QAChC,CAAC,CAAC,MAAM,eAAe,CAAC,YAAY,CAAC;QACrC,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;QAC5B,KAAK;QACL,MAAM;QACN,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QACjD,MAAM,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa;QAC7B,CAAC,CAAC,gBAAgB,CAAC,OAAO,IAAI,IAAI,GAAG,EAAE,EAAE,OAAO,CAAC;QACjD,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ir-kit/k6-toolkit",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Programmatic toolkit for k6 workflows. Bundle loadtests (tsdown passthrough), spawn the k6 binary, sync the typed client from OpenAPI specs. One library covering the bundle → run → sync flow.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"k6",
|
|
7
|
+
"load-testing",
|
|
8
|
+
"openapi",
|
|
9
|
+
"codegen",
|
|
10
|
+
"bundler",
|
|
11
|
+
"tsdown"
|
|
12
|
+
],
|
|
13
|
+
"homepage": "https://github.com/ir-kit/ir-kit/tree/main/packages/k6/toolkit",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/ir-kit/ir-kit/issues"
|
|
16
|
+
},
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"author": {
|
|
19
|
+
"name": "Ahmed Rowaihi",
|
|
20
|
+
"email": "ahmedrowaihi@gmail.com"
|
|
21
|
+
},
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/ir-kit/ir-kit.git",
|
|
25
|
+
"directory": "packages/k6/toolkit"
|
|
26
|
+
},
|
|
27
|
+
"type": "module",
|
|
28
|
+
"sideEffects": false,
|
|
29
|
+
"main": "./dist/index.js",
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"exports": {
|
|
32
|
+
".": {
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"import": "./dist/index.js"
|
|
35
|
+
},
|
|
36
|
+
"./package.json": "./package.json"
|
|
37
|
+
},
|
|
38
|
+
"bin": {
|
|
39
|
+
"k6-ts": "./dist/cli.js"
|
|
40
|
+
},
|
|
41
|
+
"files": [
|
|
42
|
+
"dist",
|
|
43
|
+
"README.md",
|
|
44
|
+
"LICENSE.md"
|
|
45
|
+
],
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public",
|
|
48
|
+
"provenance": true
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@clack/prompts": "^1.3.0",
|
|
52
|
+
"tinyglobby": "^0.2.10",
|
|
53
|
+
"tsdown": "^0.22.0",
|
|
54
|
+
"@ir-kit/k6-gen": "0.1.0",
|
|
55
|
+
"@ir-kit/openapi-tools": "0.1.0"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@types/node": "^22",
|
|
59
|
+
"vitest": "^4.0.0",
|
|
60
|
+
"@ir-kit/tsconfig": "0.0.0"
|
|
61
|
+
},
|
|
62
|
+
"engines": {
|
|
63
|
+
"node": ">=20.19.0"
|
|
64
|
+
},
|
|
65
|
+
"scripts": {
|
|
66
|
+
"build": "tsc -p tsconfig.build.json",
|
|
67
|
+
"dev": "tsc -p tsconfig.build.json --watch",
|
|
68
|
+
"typecheck": "tsc --noEmit",
|
|
69
|
+
"test": "vitest run --passWithNoTests"
|
|
70
|
+
}
|
|
71
|
+
}
|