@ir-kit/k6-toolkit 0.1.2 → 0.2.1

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/README.md CHANGED
@@ -51,7 +51,7 @@ k6-ts sync ./openapi.yaml --output ./src/gen
51
51
  k6-ts scaffold --spec ./openapi.yaml --tags pets --output-dir loadtests/
52
52
  ```
53
53
 
54
- `k6-ts sync` also accepts `-` to read the spec from stdin, so it composes cleanly with [`@ir-kit/openapi-recon`](https://github.com/ir-kit/ir-kit/tree/main/packages/openapi/recon) (HAR → spec) and similar pipes.
54
+ `k6-ts sync` also accepts `-` to read the spec from stdin, so it composes cleanly with [`@ir-kit/openapi-recon`](https://github.com/ahmedrowaihi/ir-kit/tree/main/packages/openapi/recon) (HAR → spec) and similar pipes.
55
55
 
56
56
  ## Status
57
57
 
@@ -59,4 +59,4 @@ k6-ts scaffold --spec ./openapi.yaml --tags pets --output-dir loadtests/
59
59
 
60
60
  ## Repo
61
61
 
62
- Source at [ir-kit/ir-kit](https://github.com/ir-kit/ir-kit/tree/main/packages/k6/toolkit).
62
+ Source at [ahmedrowaihi/ir-kit](https://github.com/ahmedrowaihi/ir-kit/tree/main/packages/k6/toolkit).
package/dist/sync.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { join, resolve } from "node:path";
2
2
  import { generate, } from "@ir-kit/k6-gen";
3
- import { resolveSpecInput } from "@ir-kit/openapi-tools";
3
+ import { resolveOpenAPIInput } from "@ir-kit/openapi-loader";
4
4
  import { extractOperationMap } from "./operation-map.js";
5
5
  import { diffOperationIds } from "./rename-report.js";
6
6
  import { loadSnapshotOps, SNAPSHOT_FILENAME, writeSnapshotOps, } from "./snapshot.js";
@@ -12,7 +12,7 @@ import { loadSnapshotOps, SNAPSHOT_FILENAME, writeSnapshotOps, } from "./snapsho
12
12
  export async function sync(opts) {
13
13
  const cwd = opts.cwd ?? process.cwd();
14
14
  const output = resolve(cwd, opts.output);
15
- const input = resolveSpecInput(opts.input, cwd);
15
+ const input = resolveOpenAPIInput(opts.input, cwd);
16
16
  const snapshotPath = join(output, SNAPSHOT_FILENAME);
17
17
  const prevOps = opts.reportRenames
18
18
  ? await loadSnapshotOps(snapshotPath)
package/dist/sync.js.map CHANGED
@@ -1 +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"}
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,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,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,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnD,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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ir-kit/k6-toolkit",
3
- "version": "0.1.2",
3
+ "version": "0.2.1",
4
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
5
  "keywords": [
6
6
  "k6",
@@ -10,9 +10,9 @@
10
10
  "bundler",
11
11
  "tsdown"
12
12
  ],
13
- "homepage": "https://github.com/ir-kit/ir-kit/tree/main/packages/k6/toolkit",
13
+ "homepage": "https://github.com/ahmedrowaihi/ir-kit/tree/main/packages/k6/toolkit",
14
14
  "bugs": {
15
- "url": "https://github.com/ir-kit/ir-kit/issues"
15
+ "url": "https://github.com/ahmedrowaihi/ir-kit/issues"
16
16
  },
17
17
  "license": "MIT",
18
18
  "author": {
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "repository": {
23
23
  "type": "git",
24
- "url": "git+https://github.com/ir-kit/ir-kit.git",
24
+ "url": "git+https://github.com/ahmedrowaihi/ir-kit.git",
25
25
  "directory": "packages/k6/toolkit"
26
26
  },
27
27
  "type": "module",
@@ -35,9 +35,6 @@
35
35
  },
36
36
  "./package.json": "./package.json"
37
37
  },
38
- "bin": {
39
- "k6-ts": "./dist/cli.js"
40
- },
41
38
  "files": [
42
39
  "dist",
43
40
  "README.md",
@@ -48,11 +45,11 @@
48
45
  "provenance": true
49
46
  },
50
47
  "dependencies": {
51
- "@clack/prompts": "^1.3.0",
52
48
  "tinyglobby": "^0.2.10",
53
49
  "tsdown": "^0.22.0",
54
- "@ir-kit/k6-gen": "0.2.0",
55
- "@ir-kit/openapi-tools": "0.2.0"
50
+ "@ir-kit/k6-gen": "0.3.1",
51
+ "@ir-kit/openapi-loader": "0.3.0",
52
+ "@ir-kit/openapi-tools": "0.3.1"
56
53
  },
57
54
  "devDependencies": {
58
55
  "@types/node": "^22",
package/dist/cli.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js DELETED
@@ -1,88 +0,0 @@
1
- #!/usr/bin/env node
2
- import { spawn } from "node:child_process";
3
- import { existsSync } from "node:fs";
4
- import { constants as osConstants } from "node:os";
5
- import { resolve } from "node:path";
6
- import { bundle } from "./bundle.js";
7
- import { runScaffoldCommand } from "./scaffold/cli-handler.js";
8
- import { runSyncCommand } from "./sync-cli.js";
9
- const CACHE_DIR = ".k6-ts-cache";
10
- /**
11
- * Find the entry .ts file in the args. Walks right-to-left so the script's
12
- * position (typically the last positional) wins over earlier flag values like
13
- * `-e VAR=path.ts`.
14
- */
15
- function findTsEntry(args) {
16
- for (let i = args.length - 1; i >= 0; i--) {
17
- const a = args[i];
18
- if (a.startsWith("-"))
19
- continue;
20
- if (a.includes("="))
21
- continue;
22
- if (!a.endsWith(".ts"))
23
- continue;
24
- if (!existsSync(resolve(a)))
25
- continue;
26
- return { index: i, path: a };
27
- }
28
- return null;
29
- }
30
- function signalToExitCode(signal) {
31
- const signum = osConstants.signals[signal] ?? 1;
32
- return 128 + signum;
33
- }
34
- async function main() {
35
- const args = process.argv.slice(2);
36
- if (args[0] === "scaffold") {
37
- await runScaffoldCommand(args.slice(1));
38
- return;
39
- }
40
- if (args[0] === "sync") {
41
- await runSyncCommand(args.slice(1));
42
- return;
43
- }
44
- let toExec = args;
45
- const tsEntry = findTsEntry(args);
46
- if (tsEntry) {
47
- try {
48
- const { outfile } = await bundle({
49
- entry: resolve(tsEntry.path),
50
- outDir: CACHE_DIR,
51
- });
52
- toExec = [
53
- ...args.slice(0, tsEntry.index),
54
- outfile,
55
- ...args.slice(tsEntry.index + 1),
56
- ];
57
- }
58
- catch (err) {
59
- console.error(`k6-ts: bundle failed for ${tsEntry.path}:`, err instanceof Error ? err.message : err);
60
- process.exit(1);
61
- }
62
- }
63
- const child = spawn("k6", [...toExec], { stdio: "inherit" });
64
- for (const sig of ["SIGINT", "SIGTERM", "SIGHUP"]) {
65
- process.on(sig, () => {
66
- if (!child.killed)
67
- child.kill(sig);
68
- });
69
- }
70
- child.on("error", (err) => {
71
- if (err.code === "ENOENT") {
72
- console.error("k6-ts: k6 binary not found on PATH. Install it from https://k6.io/docs/get-started/installation/");
73
- process.exit(127);
74
- }
75
- console.error("k6-ts: failed to spawn k6:", err.message);
76
- process.exit(1);
77
- });
78
- child.on("exit", (code, signal) => {
79
- if (signal)
80
- process.exit(signalToExitCode(signal));
81
- process.exit(code ?? 1);
82
- });
83
- }
84
- main().catch((err) => {
85
- console.error("k6-ts:", err instanceof Error ? err.message : err);
86
- process.exit(1);
87
- });
88
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- declare const HELP: string;
2
- export declare function runScaffoldCommand(argv: ReadonlyArray<string>): Promise<void>;
3
- export { HELP as SCAFFOLD_HELP };
4
- //# sourceMappingURL=cli-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-handler.d.ts","sourceRoot":"","sources":["../../src/scaffold/cli-handler.ts"],"names":[],"mappings":"AAgBA,QAAA,MAAM,IAAI,QA6BF,CAAC;AA+DT,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAwJD,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,CAAC"}
@@ -1,204 +0,0 @@
1
- import { existsSync, mkdirSync, statSync, writeFileSync } from "node:fs";
2
- import { dirname, relative, resolve } from "node:path";
3
- import { intro, log, outro } from "@clack/prompts";
4
- import { loadSpec } from "@ir-kit/openapi-tools";
5
- import { parseSpec } from "@ir-kit/openapi-tools/parse";
6
- import { scaffoldScenario, } from "./scenario.js";
7
- import { readSpecOperations } from "./spec-tags.js";
8
- import { confirmOverwrite, runScenarioWizard } from "./wizard.js";
9
- const HELP = `
10
- k6-ts scaffold — generate scenario files from your OpenAPI spec.
11
-
12
- USAGE
13
- k6-ts scaffold # interactive wizard
14
- k6-ts scaffold list-ops [--json] # discover ops (grouped by tag)
15
- k6-ts scaffold [flags…] # flag-driven, single scenario
16
- k6-ts scaffold --tags <a,b,c> [flags…] # batch — one scenario per tag
17
-
18
- REQUIRED (flag mode)
19
- --name <slug> Scenario name (used for filename + step label)
20
- --ops <a,b,c> Comma-separated operation IDs
21
-
22
- OPTIONAL
23
- --spec <path-or-url> OpenAPI spec. Default: ./openapi.yaml
24
- --client-import <path> Import path for the generated client.
25
- Default: ./src/gen/index.js
26
- --chain sequential|batch Default: sequential
27
- --pace smoke|load|stress|spike|soak Default: smoke
28
- --duration <duration> Default: 30s (or 1h for soak)
29
- --auth none|bearer|basic|apiKey|session|digest|ntlm Default: none
30
- --output <file> Where to write (single scenario)
31
- --output-dir <dir> Where to write (batch mode)
32
- --force Overwrite without prompting
33
- --help Show this help
34
-
35
- BATCH MODE (--tags)
36
- Generates one scenario file per tag, named after the tag. Each picks all
37
- operations carrying that tag with sensible defaults (smoke, sequential).
38
- `.trim();
39
- function parseArgs(argv) {
40
- if (argv[0] === "list-ops") {
41
- return {
42
- kind: "list-ops",
43
- spec: pickFlag(argv, "--spec") ?? "./openapi.yaml",
44
- json: argv.includes("--json"),
45
- };
46
- }
47
- return {
48
- kind: "flags",
49
- name: pickFlag(argv, "--name"),
50
- ops: pickFlag(argv, "--ops"),
51
- tags: pickFlag(argv, "--tags"),
52
- spec: pickFlag(argv, "--spec") ?? "./openapi.yaml",
53
- clientImport: pickFlag(argv, "--client-import") ?? "./src/gen/index.js",
54
- chain: pickFlag(argv, "--chain") ?? "sequential",
55
- pace: pickFlag(argv, "--pace") ?? "smoke",
56
- duration: pickFlag(argv, "--duration"),
57
- auth: pickFlag(argv, "--auth") ?? "none",
58
- output: pickFlag(argv, "--output"),
59
- outputDir: pickFlag(argv, "--output-dir"),
60
- force: argv.includes("--force"),
61
- showHelp: argv.includes("--help") || argv.includes("-h"),
62
- };
63
- }
64
- function pickFlag(argv, name) {
65
- const i = argv.indexOf(name);
66
- if (i === -1)
67
- return undefined;
68
- return argv[i + 1];
69
- }
70
- export async function runScaffoldCommand(argv) {
71
- const parsed = parseArgs(argv);
72
- if (parsed.kind === "flags" && parsed.showHelp) {
73
- console.log(HELP);
74
- return;
75
- }
76
- // list-ops subcommand — no I/O beyond stdout
77
- if (parsed.kind === "list-ops") {
78
- await listOps(parsed);
79
- return;
80
- }
81
- const spec = await loadAndIndexSpec(parsed.spec);
82
- // Batch mode: --tags <a,b,c>
83
- if (parsed.tags) {
84
- await scaffoldByTags(spec, parsed);
85
- return;
86
- }
87
- // Flag mode (non-interactive): --name + --ops required
88
- if (parsed.name && parsed.ops) {
89
- await scaffoldFromFlags(spec, parsed);
90
- return;
91
- }
92
- // Interactive — no name/ops/tags
93
- await scaffoldInteractive(spec, parsed);
94
- }
95
- async function loadAndIndexSpec(specPath) {
96
- const bundled = await loadSpec({ input: specPath, normalize: true });
97
- const ir = parseSpec(bundled);
98
- return readSpecOperations(ir.paths);
99
- }
100
- async function listOps(parsed) {
101
- const spec = await loadAndIndexSpec(parsed.spec);
102
- if (parsed.json) {
103
- const byTag = {};
104
- for (const [tag, ops] of spec.byTag) {
105
- byTag[tag] = ops.map((o) => o.id);
106
- }
107
- console.log(JSON.stringify({ byTag, total: spec.all.length }, null, 2));
108
- return;
109
- }
110
- for (const [tag, ops] of spec.byTag) {
111
- console.log(`\n${tag} (${ops.length} ops)`);
112
- for (const op of ops) {
113
- console.log(` ${op.method.toUpperCase().padEnd(6)} ${op.path} · ${op.id}`);
114
- }
115
- }
116
- console.log(`\n${spec.all.length} total ops`);
117
- }
118
- async function scaffoldFromFlags(spec, parsed) {
119
- const opIds = parsed
120
- .ops.split(",")
121
- .map((s) => s.trim())
122
- .filter(Boolean);
123
- const ops = opIds
124
- .map((id) => spec.byId.get(id))
125
- .filter((o) => Boolean(o));
126
- if (ops.length !== opIds.length) {
127
- const missing = opIds.filter((id) => !spec.byId.has(id));
128
- console.error(`k6-ts scaffold: unknown operationId(s): ${missing.join(", ")}`);
129
- process.exit(2);
130
- }
131
- const slug = parsed.name.trim().replace(/[^a-zA-Z0-9-]+/g, "-");
132
- const output = parsed.output ?? `${parsed.outputDir ?? "./loadtests"}/${slug}.ts`;
133
- const scaffold = {
134
- clientImportPath: parsed.clientImport,
135
- pace: parsed.pace,
136
- duration: parsed.duration,
137
- ops,
138
- chain: parsed.chain,
139
- auth: { auth: parsed.auth },
140
- };
141
- await writeScenario(output, scaffold, parsed.force);
142
- console.log(`Wrote ${relative(process.cwd(), output)}`);
143
- }
144
- async function scaffoldByTags(spec, parsed) {
145
- const tags = parsed
146
- .tags.split(",")
147
- .map((s) => s.trim())
148
- .filter(Boolean);
149
- const outputDir = parsed.outputDir ?? "./loadtests";
150
- const force = parsed.force;
151
- for (const tag of tags) {
152
- const ops = spec.byTag.get(tag);
153
- if (!ops || ops.length === 0) {
154
- console.error(`k6-ts scaffold: no operations under tag "${tag}"`);
155
- continue;
156
- }
157
- const slug = tag.replace(/[^a-zA-Z0-9-]+/g, "-");
158
- const output = `${outputDir}/${slug}.ts`;
159
- await writeScenario(output, {
160
- clientImportPath: parsed.clientImport,
161
- pace: parsed.pace,
162
- duration: parsed.duration,
163
- ops,
164
- chain: parsed.chain,
165
- auth: { auth: parsed.auth },
166
- }, force);
167
- console.log(`Wrote ${relative(process.cwd(), output)} (${ops.length} ops)`);
168
- }
169
- }
170
- async function scaffoldInteractive(spec, parsed) {
171
- intro("k6-ts scaffold");
172
- const result = await runScenarioWizard(spec, {
173
- clientImportPath: parsed.clientImport,
174
- outputDir: parsed.outputDir ?? "./loadtests",
175
- });
176
- if (!result)
177
- return;
178
- await writeScenario(result.outputPath, result.scaffold, parsed.force);
179
- outro([
180
- `Wrote ${relative(process.cwd(), result.outputPath)}`,
181
- `Run it: k6-ts run ${relative(process.cwd(), result.outputPath)}`,
182
- ].join("\n"));
183
- }
184
- async function writeScenario(output, scaffold, force) {
185
- const absolute = resolve(output);
186
- if (existsSync(absolute) && !force) {
187
- const ok = await confirmOverwrite(relative(process.cwd(), absolute));
188
- if (!ok) {
189
- log.warn(`Skipped ${relative(process.cwd(), absolute)}`);
190
- return;
191
- }
192
- }
193
- const content = scaffoldScenario(scaffold);
194
- mkdirSync(dirname(absolute), { recursive: true });
195
- writeFileSync(absolute, content, "utf8");
196
- ensureFile(absolute);
197
- }
198
- function ensureFile(absolute) {
199
- const s = statSync(absolute);
200
- if (!s.isFile())
201
- throw new Error(`expected a file at ${absolute}`);
202
- }
203
- export { HELP as SCAFFOLD_HELP };
204
- //# sourceMappingURL=cli-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-handler.js","sourceRoot":"","sources":["../../src/scaffold/cli-handler.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import type { ScaffoldScenarioOpts } from "./scenario.js";
2
- import { type SpecOperations } from "./spec-tags.js";
3
- /**
4
- * Wizard answers — a fully-resolved scaffold config ready for `scaffoldScenario`
5
- * plus the filesystem target (output path).
6
- */
7
- export interface WizardResult {
8
- outputPath: string;
9
- scaffold: ScaffoldScenarioOpts;
10
- }
11
- /**
12
- * Prompt the user through scenario authoring. Returns `null` if cancelled.
13
- * Reuses `SpecOperations` for op discovery so the same source-of-truth feeds
14
- * the CLI's `list-ops` subcommand.
15
- */
16
- export declare function runScenarioWizard(spec: SpecOperations, defaults: {
17
- clientImportPath: string;
18
- outputDir: string;
19
- }): Promise<WizardResult | null>;
20
- /**
21
- * Confirm-overwrite prompt — shared by wizard and flag-mode CLI so a single
22
- * UX rules them both. Returns `true` to proceed.
23
- */
24
- export declare function confirmOverwrite(path: string): Promise<boolean>;
25
- //# sourceMappingURL=wizard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/scaffold/wizard.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAc,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,KAAK,cAAc,EAAY,MAAM,gBAAgB,CAAC;AAE/D;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAQD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE;IACR,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAkI9B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrE"}
@@ -1,156 +0,0 @@
1
- import { cancel, confirm, isCancel, multiselect, select, text, } from "@clack/prompts";
2
- import { UNTAGGED } from "./spec-tags.js";
3
- /** Bail-out helper. */
4
- function bail() {
5
- cancel("Aborted.");
6
- return null;
7
- }
8
- /**
9
- * Prompt the user through scenario authoring. Returns `null` if cancelled.
10
- * Reuses `SpecOperations` for op discovery so the same source-of-truth feeds
11
- * the CLI's `list-ops` subcommand.
12
- */
13
- export async function runScenarioWizard(spec, defaults) {
14
- const tagOptions = Array.from(spec.byTag.entries()).map(([tag, ops]) => ({
15
- value: tag,
16
- label: `${tag === UNTAGGED ? "(untagged)" : tag} — ${ops.length} op${ops.length === 1 ? "" : "s"}`,
17
- }));
18
- tagOptions.push({ value: "__manual__", label: "Pick ops manually" });
19
- const tagPick = await select({
20
- message: "Which group should this scenario cover?",
21
- options: tagOptions,
22
- });
23
- if (isCancel(tagPick))
24
- return bail();
25
- let ops;
26
- if (tagPick === "__manual__") {
27
- const opOptions = spec.all.map((op) => ({
28
- value: op.id,
29
- label: `${op.method.toUpperCase()} ${op.path} · ${op.id}`,
30
- }));
31
- const picked = (await multiselect({
32
- message: "Which ops? (space toggles, enter confirms)",
33
- options: opOptions,
34
- required: true,
35
- }));
36
- if (isCancel(picked))
37
- return bail();
38
- ops = picked
39
- .map((id) => spec.byId.get(id))
40
- .filter((o) => o !== undefined);
41
- }
42
- else {
43
- const tagOps = spec.byTag.get(tagPick) ?? [];
44
- const opOptions = tagOps.map((op) => ({
45
- value: op.id,
46
- label: `${op.method.toUpperCase()} ${op.path} · ${op.id}`,
47
- }));
48
- const picked = (await multiselect({
49
- message: `Ops from "${tagPick}" — keep them all or narrow?`,
50
- options: opOptions,
51
- initialValues: tagOps.map((o) => o.id),
52
- required: true,
53
- }));
54
- if (isCancel(picked))
55
- return bail();
56
- ops = picked
57
- .map((id) => spec.byId.get(id))
58
- .filter((o) => o !== undefined);
59
- }
60
- const defaultName = tagPick === "__manual__" ? "scenario" : `${tagPick}-flow`;
61
- const name = (await text({
62
- message: "Scenario name?",
63
- initialValue: defaultName,
64
- validate: (v) => (v && v.trim().length ? undefined : "Required"),
65
- }));
66
- if (isCancel(name))
67
- return bail();
68
- const chain = (await select({
69
- message: "How should they compose?",
70
- options: [
71
- {
72
- value: "sequential",
73
- label: "Sequential — chain step outputs (CRUD-style)",
74
- },
75
- {
76
- value: "batch",
77
- label: "Parallel fan-out — flow().batch() with async ops",
78
- },
79
- ],
80
- initialValue: "sequential",
81
- }));
82
- if (isCancel(chain))
83
- return bail();
84
- const pace = (await select({
85
- message: "Pace preset?",
86
- options: [
87
- { value: "smoke", label: "smoke 1 VU × 30s — CI sanity" },
88
- { value: "load", label: "load ramp to target VUs — steady state" },
89
- {
90
- value: "stress",
91
- label: "stress climb to ceiling — find breaking point",
92
- },
93
- { value: "spike", label: "spike baseline → peak → recover" },
94
- { value: "soak", label: "soak long-haul — leak detection" },
95
- ],
96
- initialValue: "smoke",
97
- }));
98
- if (isCancel(pace))
99
- return bail();
100
- const duration = (await text({
101
- message: "Duration?",
102
- initialValue: pace === "soak" ? "1h" : "30s",
103
- }));
104
- if (isCancel(duration))
105
- return bail();
106
- const auth = (await select({
107
- message: "Auth?",
108
- options: [
109
- { value: "none", label: "None" },
110
- { value: "bearer", label: "Bearer (API_TOKEN env)" },
111
- { value: "basic", label: "Basic (API_USER / API_PASS env)" },
112
- { value: "apiKey", label: "API key header (X-API-Key / API_KEY env)" },
113
- { value: "session", label: "Session cookie (fill signIn yourself)" },
114
- { value: "digest", label: "HTTP Digest (API_USER / API_PASS env)" },
115
- { value: "ntlm", label: "NTLM (API_USER / API_PASS env)" },
116
- ],
117
- initialValue: "none",
118
- }));
119
- if (isCancel(auth))
120
- return bail();
121
- const slug = String(name)
122
- .trim()
123
- .replace(/[^a-zA-Z0-9-]+/g, "-");
124
- const outputPath = (await text({
125
- message: "Output path?",
126
- initialValue: `${defaults.outputDir}/${slug}.ts`,
127
- }));
128
- if (isCancel(outputPath))
129
- return bail();
130
- const authOpts = { auth: auth };
131
- return {
132
- outputPath: outputPath,
133
- scaffold: {
134
- clientImportPath: defaults.clientImportPath,
135
- pace: pace,
136
- duration: duration,
137
- ops,
138
- chain: chain,
139
- auth: authOpts,
140
- },
141
- };
142
- }
143
- /**
144
- * Confirm-overwrite prompt — shared by wizard and flag-mode CLI so a single
145
- * UX rules them both. Returns `true` to proceed.
146
- */
147
- export async function confirmOverwrite(path) {
148
- const ok = await confirm({
149
- message: `${path} already exists — overwrite?`,
150
- initialValue: false,
151
- });
152
- if (isCancel(ok))
153
- return false;
154
- return Boolean(ok);
155
- }
156
- //# sourceMappingURL=wizard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/scaffold/wizard.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function runSyncCommand(argv: ReadonlyArray<string>): Promise<void>;
2
- //# sourceMappingURL=sync-cli.d.ts.map
@@ -1 +0,0 @@
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 DELETED
@@ -1,137 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-cli.js","sourceRoot":"","sources":["../src/sync-cli.ts"],"names":[],"mappings":"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"}