@tjalve/cube-cli 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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +39 -0
  3. package/dist/errors/index.d.ts +28 -0
  4. package/dist/errors/index.d.ts.map +1 -0
  5. package/dist/errors/index.js +58 -0
  6. package/dist/errors/index.js.map +1 -0
  7. package/dist/fixtures/cli.d.ts +4 -0
  8. package/dist/fixtures/cli.d.ts.map +1 -0
  9. package/dist/fixtures/cli.js +195 -0
  10. package/dist/fixtures/cli.js.map +1 -0
  11. package/dist/fixtures/metadata.d.ts +347 -0
  12. package/dist/fixtures/metadata.d.ts.map +1 -0
  13. package/dist/fixtures/metadata.js +372 -0
  14. package/dist/fixtures/metadata.js.map +1 -0
  15. package/dist/help/index.d.ts +24 -0
  16. package/dist/help/index.d.ts.map +1 -0
  17. package/dist/help/index.js +254 -0
  18. package/dist/help/index.js.map +1 -0
  19. package/dist/index.d.ts +20 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +21 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/metadata/define.d.ts +11 -0
  24. package/dist/metadata/define.d.ts.map +1 -0
  25. package/dist/metadata/define.js +125 -0
  26. package/dist/metadata/define.js.map +1 -0
  27. package/dist/metadata/index.d.ts +3 -0
  28. package/dist/metadata/index.d.ts.map +1 -0
  29. package/dist/metadata/index.js +2 -0
  30. package/dist/metadata/index.js.map +1 -0
  31. package/dist/metadata/types.d.ts +109 -0
  32. package/dist/metadata/types.d.ts.map +1 -0
  33. package/dist/metadata/types.js +2 -0
  34. package/dist/metadata/types.js.map +1 -0
  35. package/dist/mutation/index.d.ts +55 -0
  36. package/dist/mutation/index.d.ts.map +1 -0
  37. package/dist/mutation/index.js +162 -0
  38. package/dist/mutation/index.js.map +1 -0
  39. package/dist/output/index.d.ts +32 -0
  40. package/dist/output/index.d.ts.map +1 -0
  41. package/dist/output/index.js +94 -0
  42. package/dist/output/index.js.map +1 -0
  43. package/dist/prompts/index.d.ts +37 -0
  44. package/dist/prompts/index.d.ts.map +1 -0
  45. package/dist/prompts/index.js +78 -0
  46. package/dist/prompts/index.js.map +1 -0
  47. package/dist/redaction/index.d.ts +10 -0
  48. package/dist/redaction/index.d.ts.map +1 -0
  49. package/dist/redaction/index.js +83 -0
  50. package/dist/redaction/index.js.map +1 -0
  51. package/dist/registry/index.d.ts +25 -0
  52. package/dist/registry/index.d.ts.map +1 -0
  53. package/dist/registry/index.js +286 -0
  54. package/dist/registry/index.js.map +1 -0
  55. package/dist/runtime/index.d.ts +69 -0
  56. package/dist/runtime/index.d.ts.map +1 -0
  57. package/dist/runtime/index.js +581 -0
  58. package/dist/runtime/index.js.map +1 -0
  59. package/dist/schema/index.d.ts +122 -0
  60. package/dist/schema/index.d.ts.map +1 -0
  61. package/dist/schema/index.js +208 -0
  62. package/dist/schema/index.js.map +1 -0
  63. package/dist/terminal/index.d.ts +31 -0
  64. package/dist/terminal/index.d.ts.map +1 -0
  65. package/dist/terminal/index.js +118 -0
  66. package/dist/terminal/index.js.map +1 -0
  67. package/dist/testing/index.d.ts +85 -0
  68. package/dist/testing/index.d.ts.map +1 -0
  69. package/dist/testing/index.js +293 -0
  70. package/dist/testing/index.js.map +1 -0
  71. package/package.json +107 -0
@@ -0,0 +1,293 @@
1
+ import assert from "node:assert/strict";
2
+ import { spawnSync } from "node:child_process";
3
+ import { fileURLToPath } from "node:url";
4
+ const defaultAllowedRootFiles = Object.freeze(["LICENSE", "README.md", "package.json"]);
5
+ const defaultAllowedDistExtensions = Object.freeze([".js", ".js.map", ".d.ts", ".d.ts.map"]);
6
+ export function runCliCommand(command, args = [], options = {}) {
7
+ const result = spawnSync(command, [...args], {
8
+ cwd: options.cwd,
9
+ env: options.env ?? process.env,
10
+ input: options.input,
11
+ timeout: options.timeout,
12
+ encoding: "utf8",
13
+ shell: false
14
+ });
15
+ const base = Object.freeze({
16
+ command,
17
+ args: Object.freeze([...args]),
18
+ status: result.status,
19
+ signal: result.signal,
20
+ stdout: result.stdout,
21
+ stderr: result.stderr
22
+ });
23
+ return result.error ? Object.freeze({ ...base, error: result.error }) : base;
24
+ }
25
+ export function runNodeCliCommand(scriptPath, args = [], options = {}) {
26
+ const normalizedScriptPath = scriptPath instanceof URL ? fileURLToPath(scriptPath) : scriptPath;
27
+ return runCliCommand(process.execPath, [normalizedScriptPath, ...args], options);
28
+ }
29
+ export function assertCliResult(result, expectation = {}) {
30
+ if (result.error) {
31
+ throw result.error;
32
+ }
33
+ if (Object.hasOwn(expectation, "status")) {
34
+ assert.equal(result.status, expectation.status, formatResultMessage(result, "status"));
35
+ }
36
+ if (expectation.stdout !== undefined) {
37
+ assertTextMatches(result.stdout, expectation.stdout, "stdout");
38
+ }
39
+ if (expectation.stderr !== undefined) {
40
+ assertTextMatches(result.stderr, expectation.stderr, "stderr");
41
+ }
42
+ if (expectation.stdoutExcludes !== undefined) {
43
+ assertTextExcludes(result.stdout, expectation.stdoutExcludes, "stdout");
44
+ }
45
+ if (expectation.stderrExcludes !== undefined) {
46
+ assertTextExcludes(result.stderr, expectation.stderrExcludes, "stderr");
47
+ }
48
+ return result;
49
+ }
50
+ export function assertCliSuccess(result, expectation = {}) {
51
+ return assertCliResult(result, { status: 0, stderr: "", ...expectation });
52
+ }
53
+ export function assertCliFailure(result, expectation) {
54
+ assert.notEqual(result.status, 0, formatResultMessage(result, "expected non-zero status"));
55
+ return assertCliResult(result, expectation);
56
+ }
57
+ export function parseCliJson(result) {
58
+ try {
59
+ return JSON.parse(result.stdout);
60
+ }
61
+ catch (error) {
62
+ const detail = error instanceof Error ? error.message : String(error);
63
+ throw new SyntaxError(`CLI stdout was not valid JSON: ${detail}\n${formatResultMessage(result, "stdout")}`);
64
+ }
65
+ }
66
+ export function parseCliJsonRecord(result) {
67
+ const parsed = parseCliJson(result);
68
+ assertRecord(parsed, "CLI JSON stdout");
69
+ return parsed;
70
+ }
71
+ export function assertCliJsonSuccess(result, expectedEnvelope) {
72
+ assertCliSuccess(result);
73
+ const envelope = parseCliJsonRecord(result);
74
+ assert.equal(envelope.ok, true);
75
+ if (expectedEnvelope !== undefined) {
76
+ assert.deepEqual(envelope, expectedEnvelope);
77
+ }
78
+ return envelope;
79
+ }
80
+ export function assertCliJsonError(result, expectation = {}) {
81
+ assertCliResult(result, {
82
+ ...(expectation.status !== undefined ? { status: expectation.status } : {}),
83
+ stderr: ""
84
+ });
85
+ const envelope = parseCliJsonRecord(result);
86
+ assert.equal(envelope.ok, false);
87
+ if (expectation.envelope !== undefined) {
88
+ assert.deepEqual(envelope, expectation.envelope);
89
+ }
90
+ if (expectation.command !== undefined) {
91
+ assert.equal(envelope.command, expectation.command);
92
+ }
93
+ const error = envelope.error;
94
+ assertRecord(error, "CLI JSON error");
95
+ assertExpectedValue(error.kind, expectation.kind, "error.kind");
96
+ assertExpectedValue(error.category, expectation.category, "error.category");
97
+ assertExpectedValue(error.exitCode, expectation.exitCode, "error.exitCode");
98
+ assertExpectedText(error.operation, expectation.operation, "error.operation");
99
+ assertExpectedText(error.likelyCause, expectation.likelyCause, "error.likelyCause");
100
+ assertExpectedText(error.suggestedNextAction, expectation.suggestedNextAction, "error.suggestedNextAction");
101
+ return envelope;
102
+ }
103
+ export function assertCliPromptBlocked(result, expectation = {}) {
104
+ return assertCliJsonError(result, { status: 2, kind: "prompt-blocked", category: "usage", ...expectation });
105
+ }
106
+ export function assertCliHelp(result, expectation = {}) {
107
+ const assertNoExecutionMarker = expectation.assertNoExecutionMarker ?? true;
108
+ const excludes = assertNoExecutionMarker
109
+ ? mergeExpectations(expectation.excludes, /EXECUTED/)
110
+ : expectation.excludes;
111
+ assertCliSuccess(result, {
112
+ ...(expectation.stdout !== undefined ? { stdout: expectation.stdout } : {}),
113
+ ...(expectation.stderr !== undefined ? { stderr: expectation.stderr } : {}),
114
+ ...(expectation.stdoutExcludes !== undefined ? { stdoutExcludes: expectation.stdoutExcludes } : {}),
115
+ ...(expectation.stderrExcludes !== undefined ? { stderrExcludes: expectation.stderrExcludes } : {})
116
+ });
117
+ if (expectation.contains !== undefined) {
118
+ assertTextMatches(result.stdout, expectation.contains, "stdout");
119
+ }
120
+ if (excludes !== undefined) {
121
+ assertTextExcludes(result.stdout, excludes, "stdout");
122
+ }
123
+ return result;
124
+ }
125
+ export function assertCliDryRun(result, expectation = {}) {
126
+ const stdoutExpectation = mergeExpectations(/Dry run plan/, expectation.stdout) ?? /Dry run plan/;
127
+ assertCliSuccess(result, {
128
+ stdout: stdoutExpectation,
129
+ ...(expectation.stderr !== undefined ? { stderr: expectation.stderr } : {}),
130
+ ...(expectation.stdoutExcludes !== undefined ? { stdoutExcludes: expectation.stdoutExcludes } : {}),
131
+ ...(expectation.stderrExcludes !== undefined ? { stderrExcludes: expectation.stderrExcludes } : {})
132
+ });
133
+ if (expectation.contains !== undefined) {
134
+ assertTextMatches(result.stdout, expectation.contains, "stdout");
135
+ }
136
+ if (expectation.excludes !== undefined) {
137
+ assertTextExcludes(result.stdout, expectation.excludes, "stdout");
138
+ }
139
+ return result;
140
+ }
141
+ export function runPackDryRun(options = {}) {
142
+ const packageManager = options.packageManager ?? "pnpm";
143
+ const args = options.args ?? ["pack", "--dry-run", "--json"];
144
+ const result = runCliCommand(packageManager, args, {
145
+ ...(options.cwd !== undefined ? { cwd: options.cwd } : {}),
146
+ env: {
147
+ ...process.env,
148
+ ...options.env,
149
+ GIT_TERMINAL_PROMPT: "0"
150
+ },
151
+ ...(options.input !== undefined ? { input: options.input } : {}),
152
+ ...(options.timeout !== undefined ? { timeout: options.timeout } : {})
153
+ });
154
+ assertCliResult(result, { status: 0 });
155
+ return parsePackJson(result.stdout);
156
+ }
157
+ export function parsePackJson(stdout) {
158
+ const jsonText = extractJsonText(stdout);
159
+ const parsed = JSON.parse(jsonText);
160
+ const entries = Array.isArray(parsed) ? parsed : [parsed];
161
+ assert.equal(entries.length, 1, "Expected pack dry-run JSON to return one package entry.");
162
+ const [entry] = entries;
163
+ assertRecord(entry, "pack entry");
164
+ assert.ok(Array.isArray(entry.files), "Unexpected pack dry-run JSON shape: files must be an array.");
165
+ return entry;
166
+ }
167
+ export function getPackFilePaths(entry) {
168
+ return Object.freeze(entry.files.map((file) => normalizePackPath(file.path)).sort(compareText));
169
+ }
170
+ export function assertPackContents(entry, expectedFiles) {
171
+ const actualFiles = getPackFilePaths(entry);
172
+ const normalizedExpected = Object.freeze([...new Set(expectedFiles.map(normalizePackPath))].sort(compareText));
173
+ const missingFiles = normalizedExpected.filter((file) => !actualFiles.includes(file));
174
+ const extraFiles = actualFiles.filter((file) => !normalizedExpected.includes(file));
175
+ if (missingFiles.length > 0 || extraFiles.length > 0) {
176
+ throw new Error([
177
+ "Pack contents did not match the allowed publish file list.",
178
+ `Missing: ${missingFiles.length === 0 ? "none" : missingFiles.join(", ")}`,
179
+ `Extra: ${extraFiles.length === 0 ? "none" : extraFiles.join(", ")}`
180
+ ].join("\n"));
181
+ }
182
+ return Object.freeze({ actualFiles, missingFiles: Object.freeze(missingFiles), extraFiles: Object.freeze(extraFiles) });
183
+ }
184
+ export function assertPackSafety(entry, options = {}) {
185
+ const actualFiles = getPackFilePaths(entry);
186
+ const allowedRootFiles = options.allowedRootFiles ?? defaultAllowedRootFiles;
187
+ const allowedDistExtensions = options.allowedDistExtensions ?? defaultAllowedDistExtensions;
188
+ const requiredRootFiles = options.requiredRootFiles ?? defaultAllowedRootFiles;
189
+ const unsafeFiles = actualFiles.filter((file) => !isAllowedPackFile(file, allowedRootFiles, allowedDistExtensions));
190
+ const missingRequiredFiles = requiredRootFiles.filter((file) => !actualFiles.includes(file));
191
+ if (unsafeFiles.length > 0 || missingRequiredFiles.length > 0) {
192
+ throw new Error([
193
+ "Pack contents included files outside the safe publish boundary.",
194
+ `Unsafe: ${unsafeFiles.length === 0 ? "none" : unsafeFiles.join(", ")}`,
195
+ `Missing required root files: ${missingRequiredFiles.length === 0 ? "none" : missingRequiredFiles.join(", ")}`
196
+ ].join("\n"));
197
+ }
198
+ return actualFiles;
199
+ }
200
+ export function assertTextMatches(value, expectation, label = "text") {
201
+ for (const expected of toExpectationList(expectation)) {
202
+ if (typeof expected === "string") {
203
+ assert.ok(value.includes(expected), `${label} did not include expected text ${JSON.stringify(expected)}.\nActual ${label}:\n${value}`);
204
+ }
205
+ else {
206
+ assert.match(value, expected);
207
+ }
208
+ }
209
+ }
210
+ export function assertTextExcludes(value, expectation, label = "text") {
211
+ for (const excluded of toExpectationList(expectation)) {
212
+ if (typeof excluded === "string") {
213
+ assert.equal(value.includes(excluded), false, `${label} included excluded text ${JSON.stringify(excluded)}.\nActual ${label}:\n${value}`);
214
+ }
215
+ else {
216
+ assert.doesNotMatch(value, excluded);
217
+ }
218
+ }
219
+ }
220
+ function extractJsonText(stdout) {
221
+ const firstArray = stdout.indexOf("[");
222
+ const firstObject = stdout.indexOf("{");
223
+ const starts = [firstArray, firstObject].filter((index) => index >= 0).sort((left, right) => left - right);
224
+ if (starts.length === 0) {
225
+ return stdout;
226
+ }
227
+ return stdout.slice(starts[0]);
228
+ }
229
+ function normalizePackPath(path) {
230
+ return path.replace(/\\/g, "/").replace(/^\.\//, "").replace(/^package\//, "");
231
+ }
232
+ function isAllowedPackFile(file, allowedRootFiles, allowedDistExtensions) {
233
+ if (allowedRootFiles.includes(file)) {
234
+ return true;
235
+ }
236
+ if (!file.startsWith("dist/") || file.endsWith("/")) {
237
+ return false;
238
+ }
239
+ return allowedDistExtensions.some((extension) => file.endsWith(extension));
240
+ }
241
+ function mergeExpectations(left, right) {
242
+ const values = [...toExpectationList(left), ...toExpectationList(right)];
243
+ return values.length === 0 ? undefined : Object.freeze(values);
244
+ }
245
+ function toExpectationList(expectation) {
246
+ if (expectation === undefined) {
247
+ return [];
248
+ }
249
+ if (typeof expectation === "string" || expectation instanceof RegExp) {
250
+ return [expectation];
251
+ }
252
+ return expectation;
253
+ }
254
+ function assertExpectedValue(actual, expected, label) {
255
+ if (expected !== undefined) {
256
+ assert.deepEqual(actual, expected, label);
257
+ }
258
+ }
259
+ function assertExpectedText(actual, expected, label) {
260
+ if (expected === undefined) {
261
+ return;
262
+ }
263
+ if (typeof actual !== "string") {
264
+ assert.fail(`${label} must be a string.`);
265
+ }
266
+ if (typeof expected === "string") {
267
+ assert.equal(actual, expected, label);
268
+ }
269
+ else {
270
+ assert.match(actual, expected);
271
+ }
272
+ }
273
+ function assertRecord(value, label) {
274
+ assert.equal(typeof value, "object", `${label} must be an object.`);
275
+ assert.notEqual(value, null, `${label} must not be null.`);
276
+ assert.equal(Array.isArray(value), false, `${label} must not be an array.`);
277
+ }
278
+ function formatResultMessage(result, label) {
279
+ return [
280
+ `${label} assertion failed for ${result.command} ${result.args.join(" ")}`.trim(),
281
+ `status: ${String(result.status)}`,
282
+ `signal: ${String(result.signal)}`,
283
+ `stdout:\n${result.stdout}`,
284
+ `stderr:\n${result.stderr}`
285
+ ].join("\n");
286
+ }
287
+ function compareText(left, right) {
288
+ if (left === right) {
289
+ return 0;
290
+ }
291
+ return left < right ? -1 : 1;
292
+ }
293
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,107 @@
1
+ {
2
+ "name": "@tjalve/cube-cli",
3
+ "version": "0.1.0",
4
+ "description": "Reusable TypeScript CLI infrastructure for command-line packages.",
5
+ "license": "MIT",
6
+ "author": "ZarK",
7
+ "homepage": "https://github.com/ZarK/ai-qube-cli#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/ZarK/ai-qube-cli.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/ZarK/ai-qube-cli/issues"
14
+ },
15
+ "type": "module",
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ },
23
+ "./metadata": {
24
+ "types": "./dist/metadata/index.d.ts",
25
+ "import": "./dist/metadata/index.js"
26
+ },
27
+ "./registry": {
28
+ "types": "./dist/registry/index.d.ts",
29
+ "import": "./dist/registry/index.js"
30
+ },
31
+ "./help": {
32
+ "types": "./dist/help/index.d.ts",
33
+ "import": "./dist/help/index.js"
34
+ },
35
+ "./runtime": {
36
+ "types": "./dist/runtime/index.d.ts",
37
+ "import": "./dist/runtime/index.js"
38
+ },
39
+ "./schema": {
40
+ "types": "./dist/schema/index.d.ts",
41
+ "import": "./dist/schema/index.js"
42
+ },
43
+ "./errors": {
44
+ "types": "./dist/errors/index.d.ts",
45
+ "import": "./dist/errors/index.js"
46
+ },
47
+ "./output": {
48
+ "types": "./dist/output/index.d.ts",
49
+ "import": "./dist/output/index.js"
50
+ },
51
+ "./mutation": {
52
+ "types": "./dist/mutation/index.d.ts",
53
+ "import": "./dist/mutation/index.js"
54
+ },
55
+ "./terminal": {
56
+ "types": "./dist/terminal/index.d.ts",
57
+ "import": "./dist/terminal/index.js"
58
+ },
59
+ "./prompts": {
60
+ "types": "./dist/prompts/index.d.ts",
61
+ "import": "./dist/prompts/index.js"
62
+ },
63
+ "./redaction": {
64
+ "types": "./dist/redaction/index.d.ts",
65
+ "import": "./dist/redaction/index.js"
66
+ },
67
+ "./testing": {
68
+ "types": "./dist/testing/index.d.ts",
69
+ "import": "./dist/testing/index.js"
70
+ }
71
+ },
72
+ "files": [
73
+ "dist"
74
+ ],
75
+ "engines": {
76
+ "node": ">=24.0.0",
77
+ "pnpm": ">=11.0.0"
78
+ },
79
+ "packageManager": "pnpm@11.0.4",
80
+ "scripts": {
81
+ "build:examples": "tsc -p examples/read-only-consumer/tsconfig.json && tsc -p examples/mutating-consumer/tsconfig.json",
82
+ "build": "pnpm run clean && tsc -p tsconfig.build.json",
83
+ "clean": "node scripts/clean.mjs",
84
+ "package-dry-run": "pnpm run build && node scripts/assert-pack-contents.mjs",
85
+ "test": "pnpm run build && pnpm run build:examples && node --test \"tests/*.test.mjs\"",
86
+ "typecheck": "tsc -p tsconfig.json --noEmit",
87
+ "verify": "pnpm run typecheck && pnpm test && pnpm run package-dry-run"
88
+ },
89
+ "keywords": [
90
+ "cli",
91
+ "typescript",
92
+ "toolkit",
93
+ "oclif"
94
+ ],
95
+ "dependencies": {
96
+ "@clack/prompts": "1.1.0",
97
+ "@oclif/core": "4.8.0"
98
+ },
99
+ "devDependencies": {
100
+ "@types/node": "24.12.2",
101
+ "typescript": "6.0.3"
102
+ },
103
+ "publishConfig": {
104
+ "access": "public",
105
+ "provenance": true
106
+ }
107
+ }