@ir-kit/cli 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.
Files changed (91) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +81 -0
  3. package/dist/bin.d.ts +3 -0
  4. package/dist/bin.d.ts.map +1 -0
  5. package/dist/bin.js +42 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/command-spec.d.ts +11 -0
  8. package/dist/command-spec.d.ts.map +1 -0
  9. package/dist/command-spec.js +2 -0
  10. package/dist/command-spec.js.map +1 -0
  11. package/dist/commands/_load-openapi.d.ts +7 -0
  12. package/dist/commands/_load-openapi.d.ts.map +1 -0
  13. package/dist/commands/_load-openapi.js +15 -0
  14. package/dist/commands/_load-openapi.js.map +1 -0
  15. package/dist/commands/docs.d.ts +10 -0
  16. package/dist/commands/docs.d.ts.map +1 -0
  17. package/dist/commands/docs.js +55 -0
  18. package/dist/commands/docs.js.map +1 -0
  19. package/dist/commands/fn-schema-diff.d.ts +10 -0
  20. package/dist/commands/fn-schema-diff.d.ts.map +1 -0
  21. package/dist/commands/fn-schema-diff.js +46 -0
  22. package/dist/commands/fn-schema-diff.js.map +1 -0
  23. package/dist/commands/fn-schema-extract.d.ts +25 -0
  24. package/dist/commands/fn-schema-extract.d.ts.map +1 -0
  25. package/dist/commands/fn-schema-extract.js +189 -0
  26. package/dist/commands/fn-schema-extract.js.map +1 -0
  27. package/dist/commands/fn-schema-inspect.d.ts +16 -0
  28. package/dist/commands/fn-schema-inspect.d.ts.map +1 -0
  29. package/dist/commands/fn-schema-inspect.js +118 -0
  30. package/dist/commands/fn-schema-inspect.js.map +1 -0
  31. package/dist/commands/fn-schema-scan.d.ts +13 -0
  32. package/dist/commands/fn-schema-scan.d.ts.map +1 -0
  33. package/dist/commands/fn-schema-scan.js +92 -0
  34. package/dist/commands/fn-schema-scan.js.map +1 -0
  35. package/dist/commands/k6-bundle.d.ts +10 -0
  36. package/dist/commands/k6-bundle.d.ts.map +1 -0
  37. package/dist/commands/k6-bundle.js +38 -0
  38. package/dist/commands/k6-bundle.js.map +1 -0
  39. package/dist/commands/k6-sync.d.ts +14 -0
  40. package/dist/commands/k6-sync.d.ts.map +1 -0
  41. package/dist/commands/k6-sync.js +61 -0
  42. package/dist/commands/k6-sync.js.map +1 -0
  43. package/dist/commands/recon.d.ts +13 -0
  44. package/dist/commands/recon.d.ts.map +1 -0
  45. package/dist/commands/recon.js +62 -0
  46. package/dist/commands/recon.js.map +1 -0
  47. package/dist/commands/sdk-all.d.ts +11 -0
  48. package/dist/commands/sdk-all.d.ts.map +1 -0
  49. package/dist/commands/sdk-all.js +82 -0
  50. package/dist/commands/sdk-all.js.map +1 -0
  51. package/dist/commands/sdk-go.d.ts +13 -0
  52. package/dist/commands/sdk-go.d.ts.map +1 -0
  53. package/dist/commands/sdk-go.js +53 -0
  54. package/dist/commands/sdk-go.js.map +1 -0
  55. package/dist/commands/sdk-k6.d.ts +11 -0
  56. package/dist/commands/sdk-k6.d.ts.map +1 -0
  57. package/dist/commands/sdk-k6.js +40 -0
  58. package/dist/commands/sdk-k6.js.map +1 -0
  59. package/dist/commands/sdk-kotlin.d.ts +13 -0
  60. package/dist/commands/sdk-kotlin.d.ts.map +1 -0
  61. package/dist/commands/sdk-kotlin.js +54 -0
  62. package/dist/commands/sdk-kotlin.js.map +1 -0
  63. package/dist/commands/sdk-swift.d.ts +12 -0
  64. package/dist/commands/sdk-swift.d.ts.map +1 -0
  65. package/dist/commands/sdk-swift.js +49 -0
  66. package/dist/commands/sdk-swift.js.map +1 -0
  67. package/dist/commands/sdk-typescript.d.ts +9 -0
  68. package/dist/commands/sdk-typescript.d.ts.map +1 -0
  69. package/dist/commands/sdk-typescript.js +29 -0
  70. package/dist/commands/sdk-typescript.js.map +1 -0
  71. package/dist/commands/spec-convert.d.ts +11 -0
  72. package/dist/commands/spec-convert.d.ts.map +1 -0
  73. package/dist/commands/spec-convert.js +69 -0
  74. package/dist/commands/spec-convert.js.map +1 -0
  75. package/dist/commands/spec-diff.d.ts +10 -0
  76. package/dist/commands/spec-diff.d.ts.map +1 -0
  77. package/dist/commands/spec-diff.js +53 -0
  78. package/dist/commands/spec-diff.js.map +1 -0
  79. package/dist/index.d.ts +12 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +11 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/runtime.d.ts +10 -0
  84. package/dist/runtime.d.ts.map +1 -0
  85. package/dist/runtime.js +78 -0
  86. package/dist/runtime.js.map +1 -0
  87. package/dist/schema-args.d.ts +24 -0
  88. package/dist/schema-args.d.ts.map +1 -0
  89. package/dist/schema-args.js +130 -0
  90. package/dist/schema-args.js.map +1 -0
  91. package/package.json +84 -0
@@ -0,0 +1,118 @@
1
+ import path from "node:path";
2
+ import { runInspect } from "@ir-kit/fn-schema-core";
3
+ import { typescript } from "@ir-kit/fn-schema-typescript";
4
+ import consola from "consola";
5
+ const args = {
6
+ type: "object",
7
+ properties: {
8
+ name: { type: "string", description: "Function name to inspect" },
9
+ patterns: {
10
+ type: "string",
11
+ description: "Glob pattern(s) for source files",
12
+ },
13
+ cwd: { type: "string", description: "Working directory" },
14
+ tsconfig: { type: "string", description: "Path to tsconfig.json" },
15
+ params: {
16
+ type: "string",
17
+ description: "Parameter rendering",
18
+ enum: ["array", "first-only", "object"],
19
+ },
20
+ unwrapPromise: {
21
+ type: "boolean",
22
+ description: "Unwrap Promise<T> in return types",
23
+ },
24
+ identity: {
25
+ type: "string",
26
+ description: "Vendor keyword for originating TS type",
27
+ },
28
+ transport: {
29
+ type: "string",
30
+ description: "Vendor keyword for binary transport hints",
31
+ },
32
+ json: {
33
+ type: "boolean",
34
+ description: "Emit machine-readable JSON",
35
+ default: false,
36
+ },
37
+ quiet: {
38
+ type: "boolean",
39
+ description: "Suppress non-error logs",
40
+ default: false,
41
+ },
42
+ },
43
+ required: ["name"],
44
+ };
45
+ export const fnSchemaInspectCommand = {
46
+ path: ["fn-schema", "inspect"],
47
+ description: "Print the resolved input + output JSON Schema for a single function",
48
+ args,
49
+ handler: async (input) => {
50
+ if (input.quiet)
51
+ consola.level = 1;
52
+ const out = await runInspect({
53
+ name: input.name,
54
+ cwd: input.cwd,
55
+ patterns: input.patterns,
56
+ tsconfig: input.tsconfig,
57
+ params: input.params,
58
+ unwrapPromise: input.unwrapPromise,
59
+ identity: input.identity,
60
+ transport: input.transport,
61
+ extractors: [typescript()],
62
+ });
63
+ if (out.kind === "not-found") {
64
+ consola.error(`Function "${input.name}" not found.`);
65
+ process.exitCode = 1;
66
+ return;
67
+ }
68
+ if (out.kind === "ambiguous") {
69
+ const cwd = path.resolve(input.cwd ?? process.cwd());
70
+ consola.error(`Function "${input.name}" matched ${out.matches.length} signatures. Narrow the patterns:`);
71
+ for (const m of out.matches) {
72
+ consola.error(` ${path.relative(cwd, m.file)}:${m.location.line}:${m.location.column}`);
73
+ }
74
+ process.exitCode = 1;
75
+ return;
76
+ }
77
+ if (input.json) {
78
+ process.stdout.write(`${JSON.stringify({
79
+ signature: out.signature,
80
+ definitions: out.result.definitions,
81
+ diagnostics: out.result.diagnostics,
82
+ }, null, 2)}\n`);
83
+ return;
84
+ }
85
+ renderInspect(out.signature, out.result, path.resolve(input.cwd ?? process.cwd()));
86
+ },
87
+ };
88
+ function renderInspect(sig, result, cwd) {
89
+ const rel = path.relative(cwd, sig.file);
90
+ process.stdout.write(`\n${sig.id} ${rel}:${sig.location.line}:${sig.location.column}\n`);
91
+ if (sig.jsDoc?.description) {
92
+ process.stdout.write(` ${sig.jsDoc.description}\n`);
93
+ }
94
+ process.stdout.write("\n input:\n");
95
+ process.stdout.write(indent(JSON.stringify(sig.input, null, 2), 4));
96
+ process.stdout.write("\n\n output:\n");
97
+ process.stdout.write(indent(JSON.stringify(sig.output, null, 2), 4));
98
+ if (Object.keys(result.definitions).length > 0) {
99
+ process.stdout.write("\n\n definitions:\n");
100
+ process.stdout.write(indent(JSON.stringify(result.definitions, null, 2), 4));
101
+ }
102
+ const fnDiags = result.diagnostics.filter((d) => d.function === sig.name);
103
+ if (fnDiags.length > 0) {
104
+ process.stdout.write("\n\n diagnostics:\n");
105
+ for (const d of fnDiags) {
106
+ process.stdout.write(` ${d.severity} ${d.code} ${d.message}\n`);
107
+ }
108
+ }
109
+ process.stdout.write("\n");
110
+ }
111
+ function indent(text, spaces) {
112
+ const pad = " ".repeat(spaces);
113
+ return text
114
+ .split("\n")
115
+ .map((line) => `${pad}${line}`)
116
+ .join("\n");
117
+ }
118
+ //# sourceMappingURL=fn-schema-inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fn-schema-inspect.js","sourceRoot":"","sources":["../../src/commands/fn-schema-inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { CommandSpec } from "../command-spec.js";
2
+ interface Input {
3
+ patterns?: string;
4
+ cwd?: string;
5
+ tsconfig?: string;
6
+ includeTag?: string;
7
+ excludeName?: string;
8
+ json?: boolean;
9
+ quiet?: boolean;
10
+ }
11
+ export declare const fnSchemaScanCommand: CommandSpec<Input, void>;
12
+ export {};
13
+ //# sourceMappingURL=fn-schema-scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fn-schema-scan.d.ts","sourceRoot":"","sources":["../../src/commands/fn-schema-scan.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,UAAU,KAAK;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAgCD,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAiCxD,CAAC"}
@@ -0,0 +1,92 @@
1
+ import path from "node:path";
2
+ import { runScan } from "@ir-kit/fn-schema-core";
3
+ import { typescript } from "@ir-kit/fn-schema-typescript";
4
+ import consola from "consola";
5
+ const args = {
6
+ type: "object",
7
+ properties: {
8
+ patterns: {
9
+ type: "string",
10
+ description: "Glob pattern(s) for source files",
11
+ },
12
+ cwd: { type: "string", description: "Working directory" },
13
+ tsconfig: { type: "string", description: "Path to tsconfig.json" },
14
+ includeTag: {
15
+ type: "string",
16
+ description: "Only include functions carrying this JSDoc tag",
17
+ },
18
+ excludeName: {
19
+ type: "string",
20
+ description: "Exclude functions whose name matches this regex",
21
+ },
22
+ json: {
23
+ type: "boolean",
24
+ description: "Emit machine-readable JSON instead of a human table",
25
+ default: false,
26
+ },
27
+ quiet: {
28
+ type: "boolean",
29
+ description: "Suppress non-error logs",
30
+ default: false,
31
+ },
32
+ },
33
+ };
34
+ export const fnSchemaScanCommand = {
35
+ path: ["fn-schema", "scan"],
36
+ description: "List functions discoverable in source — no schemas generated",
37
+ args,
38
+ handler: async (input) => {
39
+ if (input.quiet)
40
+ consola.level = 1;
41
+ const out = await runScan({
42
+ cwd: input.cwd,
43
+ patterns: input.patterns,
44
+ tsconfig: input.tsconfig,
45
+ includeTag: input.includeTag,
46
+ excludeName: input.excludeName,
47
+ extractors: [typescript()],
48
+ });
49
+ if (!out.ok) {
50
+ consola.warn("No files matched.");
51
+ return;
52
+ }
53
+ if (input.json) {
54
+ process.stdout.write(`${JSON.stringify(out.result, null, 2)}\n`);
55
+ return;
56
+ }
57
+ renderTable(out.result.signatures, path.resolve(input.cwd ?? process.cwd()));
58
+ consola.box(`${out.result.signatures.length} fn(s) across ${out.filesScanned} file(s) in ${out.durationMs}ms` +
59
+ (out.errors + out.warnings > 0
60
+ ? ` — ${out.errors} error(s), ${out.warnings} warning(s)`
61
+ : ""));
62
+ },
63
+ };
64
+ function renderTable(signatures, cwd) {
65
+ const byFile = new Map();
66
+ for (const sig of signatures) {
67
+ const list = byFile.get(sig.file) ?? [];
68
+ list.push(sig);
69
+ byFile.set(sig.file, list);
70
+ }
71
+ for (const [file, list] of byFile) {
72
+ process.stdout.write(`\n${path.relative(cwd, file)}\n`);
73
+ for (const sig of list) {
74
+ const flags = [
75
+ sig.exported ? "exported" : "",
76
+ sig.async ? "async" : "",
77
+ sig.generic ? "generic" : "",
78
+ sig.kind !== "function" ? sig.kind : "",
79
+ sig.className ? `class:${sig.className}` : "",
80
+ ]
81
+ .filter(Boolean)
82
+ .join(" ");
83
+ const tag = sig.jsDoc?.tags
84
+ ? Object.entries(sig.jsDoc.tags)
85
+ .map(([k, v]) => `@${k}${typeof v === "string" ? ` ${v}` : ""}`)
86
+ .join(" ")
87
+ : "";
88
+ process.stdout.write(` ${sig.name.padEnd(24)} ${`${sig.location.line}:${sig.location.column}`.padEnd(8)} ${flags}${tag ? ` ${tag}` : ""}\n`);
89
+ }
90
+ }
91
+ }
92
+ //# sourceMappingURL=fn-schema-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fn-schema-scan.js","sourceRoot":"","sources":["../../src/commands/fn-schema-scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { CommandSpec } from "../command-spec.js";
2
+ interface Input {
3
+ input: string;
4
+ output?: string;
5
+ minify?: boolean;
6
+ sourcemap?: boolean;
7
+ }
8
+ export declare const k6BundleCommand: CommandSpec<Input, void>;
9
+ export {};
10
+ //# sourceMappingURL=k6-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k6-bundle.d.ts","sourceRoot":"","sources":["../../src/commands/k6-bundle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAwBD,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAapD,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { bundle } from "@ir-kit/k6-toolkit";
2
+ import consola from "consola";
3
+ const args = {
4
+ type: "object",
5
+ properties: {
6
+ input: { type: "string", description: "Entry .ts file" },
7
+ output: {
8
+ type: "string",
9
+ description: "Output .js path (default: alongside input)",
10
+ },
11
+ minify: {
12
+ type: "boolean",
13
+ description: "Minify the bundle",
14
+ default: false,
15
+ },
16
+ sourcemap: {
17
+ type: "boolean",
18
+ description: "Emit a sourcemap alongside the bundle",
19
+ default: false,
20
+ },
21
+ },
22
+ required: ["input"],
23
+ };
24
+ export const k6BundleCommand = {
25
+ path: ["k6", "bundle"],
26
+ description: "Bundle a TypeScript k6 loadtest to a single .js (tsdown)",
27
+ args,
28
+ handler: async (input) => {
29
+ const result = await bundle({
30
+ entry: input.input,
31
+ ...(input.output ? { outFile: input.output } : {}),
32
+ minify: input.minify,
33
+ sourcemap: input.sourcemap,
34
+ });
35
+ consola.success(`Bundled to ${result.outfile}`);
36
+ },
37
+ };
38
+ //# sourceMappingURL=k6-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k6-bundle.js","sourceRoot":"","sources":["../../src/commands/k6-bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,OAAO,MAAM,SAAS,CAAC;AAW9B,MAAM,IAAI,GAAW;IACnB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE;QACxD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,4CAA4C;SAC1D;QACD,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,mBAAmB;YAChC,OAAO,EAAE,KAAK;SACf;QACD,SAAS,EAAE;YACT,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,uCAAuC;YACpD,OAAO,EAAE,KAAK;SACf;KACF;IACD,QAAQ,EAAE,CAAC,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;IACtB,WAAW,EAAE,0DAA0D;IACvE,IAAI;IACJ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;SACK,CAAC,CAAC;QACnC,OAAO,CAAC,OAAO,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { CommandSpec } from "../command-spec.js";
2
+ interface Input {
3
+ input: string;
4
+ output: string;
5
+ normalize?: boolean;
6
+ defaultBaseUrl?: string;
7
+ scaffold?: boolean;
8
+ dryRun?: boolean;
9
+ reportRenames?: boolean;
10
+ cwd?: string;
11
+ }
12
+ export declare const k6SyncCommand: CommandSpec<Input, void>;
13
+ export {};
14
+ //# sourceMappingURL=k6-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k6-sync.d.ts","sourceRoot":"","sources":["../../src/commands/k6-sync.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAuCD,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CA4BlD,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { sync } from "@ir-kit/k6-toolkit";
2
+ import consola from "consola";
3
+ const args = {
4
+ type: "object",
5
+ properties: {
6
+ input: { type: "string", description: "OpenAPI spec path or URL" },
7
+ output: {
8
+ type: "string",
9
+ description: "Output directory for the generated k6 client",
10
+ },
11
+ normalize: {
12
+ type: "boolean",
13
+ description: "Apply spec normalization",
14
+ default: false,
15
+ },
16
+ defaultBaseUrl: {
17
+ type: "string",
18
+ description: "Default base URL (falls back to spec.servers[0].url)",
19
+ },
20
+ scaffold: {
21
+ type: "boolean",
22
+ description: "Also emit per-operation loadtest stubs",
23
+ default: false,
24
+ },
25
+ dryRun: {
26
+ type: "boolean",
27
+ description: "Don't write to disk — just return what would be written",
28
+ default: false,
29
+ },
30
+ reportRenames: {
31
+ type: "boolean",
32
+ description: "Diff operationIds against the prior sync's snapshot",
33
+ default: false,
34
+ },
35
+ cwd: { type: "string", description: "Working directory" },
36
+ },
37
+ required: ["input", "output"],
38
+ };
39
+ export const k6SyncCommand = {
40
+ path: ["k6", "sync"],
41
+ description: "Generate a typed k6 client + snapshot diff from an OpenAPI spec",
42
+ args,
43
+ handler: async (input) => {
44
+ const result = await sync({
45
+ input: input.input,
46
+ output: input.output,
47
+ cwd: input.cwd,
48
+ normalize: input.normalize,
49
+ defaultBaseUrl: input.defaultBaseUrl,
50
+ scaffold: input.scaffold,
51
+ dryRun: input.dryRun,
52
+ reportRenames: input.reportRenames,
53
+ });
54
+ consola.success(`Synced ${result.files.length} file(s) to ${result.output}`);
55
+ if (result.diff &&
56
+ (result.diff.added.length || result.diff.removed.length)) {
57
+ consola.box(`Renames detected — ${result.diff.added.length} added, ${result.diff.removed.length} removed`);
58
+ }
59
+ },
60
+ };
61
+ //# sourceMappingURL=k6-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k6-sync.js","sourceRoot":"","sources":["../../src/commands/k6-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,OAAO,MAAM,SAAS,CAAC;AAe9B,MAAM,IAAI,GAAW;IACnB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;QAClE,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8CAA8C;SAC5D;QACD,SAAS,EAAE;YACT,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,0BAA0B;YACvC,OAAO,EAAE,KAAK;SACf;QACD,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sDAAsD;SACpE;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,wCAAwC;YACrD,OAAO,EAAE,KAAK;SACf;QACD,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,yDAAyD;YACtE,OAAO,EAAE,KAAK;SACf;QACD,aAAa,EAAE;YACb,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,qDAAqD;YAClE,OAAO,EAAE,KAAK;SACf;QACD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;KAC1D;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAA6B;IACrD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;IACpB,WAAW,EACT,iEAAiE;IACnE,IAAI;IACJ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,CACb,UAAU,MAAM,CAAC,KAAK,CAAC,MAAM,eAAe,MAAM,CAAC,MAAM,EAAE,CAC5D,CAAC;QACF,IACE,MAAM,CAAC,IAAI;YACX,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EACxD,CAAC;YACD,OAAO,CAAC,GAAG,CACT,sBAAsB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,WAAW,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,UAAU,CAC9F,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { CommandSpec } from "../command-spec.js";
2
+ interface Input {
3
+ input: string;
4
+ out?: string;
5
+ title?: string;
6
+ version?: string;
7
+ origin?: string;
8
+ maxExamples?: string;
9
+ pathTemplating?: boolean;
10
+ }
11
+ export declare const reconCommand: CommandSpec<Input, void>;
12
+ export {};
13
+ //# sourceMappingURL=recon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recon.d.ts","sourceRoot":"","sources":["../../src/commands/recon.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA8BD,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAwBjD,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { fromHAR } from "@ir-kit/openapi-recon";
3
+ const args = {
4
+ type: "object",
5
+ properties: {
6
+ input: {
7
+ type: "string",
8
+ description: "HAR file path (or `-` for stdin)",
9
+ },
10
+ out: { type: "string", description: "Write to file (default: stdout)" },
11
+ title: { type: "string", description: "Document title" },
12
+ version: { type: "string", description: "Document version" },
13
+ origin: {
14
+ type: "string",
15
+ description: "Restrict to a single origin (e.g. https://api.example.com)",
16
+ },
17
+ maxExamples: {
18
+ type: "string",
19
+ description: "Max example payloads kept per shape",
20
+ default: "3",
21
+ },
22
+ pathTemplating: {
23
+ type: "boolean",
24
+ description: "Auto-detect path templates from observed URLs",
25
+ default: true,
26
+ },
27
+ },
28
+ required: ["input"],
29
+ };
30
+ export const reconCommand = {
31
+ path: ["recon"],
32
+ description: "Reverse-engineer an OpenAPI 3.1 spec from a HAR capture of observed HTTP traffic",
33
+ args,
34
+ handler: async (input) => {
35
+ const harText = await readInput(input.input);
36
+ const recon = await fromHAR(harText, {
37
+ title: input.title,
38
+ version: input.version,
39
+ maxExamples: input.maxExamples !== undefined ? Number(input.maxExamples) : undefined,
40
+ pathTemplating: input.pathTemplating !== false,
41
+ });
42
+ const spec = recon.toOpenAPI(input.origin ? { origin: input.origin } : undefined);
43
+ const json = `${JSON.stringify(spec, null, 2)}\n`;
44
+ if (input.out) {
45
+ await writeFile(input.out, json, "utf8");
46
+ }
47
+ else {
48
+ process.stdout.write(json);
49
+ }
50
+ },
51
+ };
52
+ async function readInput(source) {
53
+ if (source === "-") {
54
+ const chunks = [];
55
+ for await (const chunk of process.stdin) {
56
+ chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
57
+ }
58
+ return Buffer.concat(chunks).toString("utf8");
59
+ }
60
+ return readFile(source, "utf8");
61
+ }
62
+ //# sourceMappingURL=recon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recon.js","sourceRoot":"","sources":["../../src/commands/recon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAehD,MAAM,IAAI,GAAW;IACnB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC;SAChD;QACD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;QACvE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE;QACxD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;QAC5D,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,4DAA4D;SAC1E;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,qCAAqC;YAClD,OAAO,EAAE,GAAG;SACb;QACD,cAAc,EAAE;YACd,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,+CAA+C;YAC5D,OAAO,EAAE,IAAI;SACd;KACF;IACD,QAAQ,EAAE,CAAC,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAA6B;IACpD,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,WAAW,EACT,kFAAkF;IACpF,IAAI;IACJ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE;YACnC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EACT,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;YACzE,cAAc,EAAE,KAAK,CAAC,cAAc,KAAK,KAAK;SAC/C,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAC1B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CACpD,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QAClD,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF,CAAC;AAEF,KAAK,UAAU,SAAS,CAAC,MAAc;IACrC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { CommandSpec } from "../command-spec.js";
2
+ interface Input {
3
+ input: string;
4
+ output: string;
5
+ targets?: string;
6
+ clean?: boolean;
7
+ normalize?: boolean;
8
+ }
9
+ export declare const sdkAllCommand: CommandSpec<Input, void>;
10
+ export {};
11
+ //# sourceMappingURL=sdk-all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk-all.d.ts","sourceRoot":"","sources":["../../src/commands/sdk-all.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKtD,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAgCD,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CA4ClD,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { join } from "node:path";
2
+ import { generate as generateK6 } from "@ir-kit/k6-gen";
3
+ import { generate as generateGo } from "@ir-kit/openapi-go";
4
+ import { generate as generateKotlin } from "@ir-kit/openapi-kotlin";
5
+ import { generate as generateSwift } from "@ir-kit/openapi-swift";
6
+ import { generate as generateTypescript } from "@ir-kit/openapi-typescript";
7
+ const TARGETS = ["go", "kotlin", "swift", "typescript", "k6"];
8
+ const args = {
9
+ type: "object",
10
+ properties: {
11
+ input: {
12
+ type: "string",
13
+ description: "OpenAPI spec path, URL, or .tsp file",
14
+ },
15
+ output: {
16
+ type: "string",
17
+ description: "Root output directory (per-target subdirs created)",
18
+ },
19
+ targets: {
20
+ type: "string",
21
+ description: `Comma-separated targets (default: all). Available: ${TARGETS.join(", ")}`,
22
+ default: TARGETS.join(","),
23
+ },
24
+ clean: {
25
+ type: "boolean",
26
+ description: "Wipe each target dir before writing",
27
+ default: true,
28
+ },
29
+ normalize: {
30
+ type: "boolean",
31
+ description: "Apply spec normalization",
32
+ default: false,
33
+ },
34
+ },
35
+ required: ["input", "output"],
36
+ };
37
+ export const sdkAllCommand = {
38
+ path: ["sdk", "all"],
39
+ description: "Generate SDKs for multiple targets in one pass",
40
+ args,
41
+ handler: async (input) => {
42
+ const requested = (input.targets ?? TARGETS.join(","))
43
+ .split(",")
44
+ .map((t) => t.trim())
45
+ .filter(Boolean);
46
+ for (const t of requested) {
47
+ if (!TARGETS.includes(t)) {
48
+ throw new Error(`Unknown target: ${t}. Available: ${TARGETS.join(", ")}`);
49
+ }
50
+ }
51
+ const targets = requested;
52
+ for (const target of targets) {
53
+ const out = join(input.output, target);
54
+ const common = {
55
+ input: input.input,
56
+ output: out,
57
+ clean: input.clean,
58
+ normalize: input.normalize,
59
+ };
60
+ if (target === "go")
61
+ await generateGo(common);
62
+ else if (target === "kotlin")
63
+ await generateKotlin(common);
64
+ else if (target === "swift")
65
+ await generateSwift(common);
66
+ else if (target === "typescript")
67
+ await generateTypescript({
68
+ input: input.input,
69
+ output: out,
70
+ normalize: input.normalize,
71
+ });
72
+ else if (target === "k6")
73
+ await generateK6({
74
+ input: input.input,
75
+ output: out,
76
+ normalize: input.normalize,
77
+ });
78
+ process.stdout.write(`✓ ${target} → ${out}\n`);
79
+ }
80
+ },
81
+ };
82
+ //# sourceMappingURL=sdk-all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk-all.js","sourceRoot":"","sources":["../../src/commands/sdk-all.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { CommandSpec } from "../command-spec.js";
2
+ interface Input {
3
+ input: string;
4
+ output: string;
5
+ clean?: boolean;
6
+ normalize?: boolean;
7
+ gomod?: string;
8
+ packageName?: string;
9
+ defaultTag?: string;
10
+ }
11
+ export declare const sdkGoCommand: CommandSpec<Input, void>;
12
+ export {};
13
+ //# sourceMappingURL=sdk-go.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk-go.d.ts","sourceRoot":"","sources":["../../src/commands/sdk-go.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAoCD,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAgBjD,CAAC"}