@glubean/cli 0.2.4 → 0.2.6

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.
@@ -0,0 +1,516 @@
1
+ import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
2
+ import { createRequire } from "node:module";
3
+ import { basename, dirname, extname, join, relative, resolve } from "node:path";
4
+ async function loadTypeScript(rootDir) {
5
+ // Try the project's own `typescript` first — a globally or npx-installed
6
+ // `glubean` would otherwise resolve to the CLI package itself, missing the
7
+ // version the project uses (or failing entirely if the project has TS but
8
+ // the CLI doesn't carry it as a dependency).
9
+ const candidates = [
10
+ // Project-local: resolves from the project being migrated
11
+ () => createRequire(join(rootDir, "package.json")).resolve("typescript"),
12
+ // CLI-local fallback: bare `require` is undefined in ESM; use createRequire rooted at this file
13
+ () => createRequire(import.meta.url).resolve("typescript"),
14
+ ];
15
+ for (const candidate of candidates) {
16
+ try {
17
+ const resolved = candidate();
18
+ return (await import(resolved)).default;
19
+ }
20
+ catch {
21
+ // try next
22
+ }
23
+ }
24
+ throw new Error("glubean migrate requires the `typescript` package. Run `npm install -D typescript` (or pnpm/yarn equivalent) and retry.");
25
+ }
26
+ const colors = {
27
+ reset: "\x1b[0m",
28
+ bold: "\x1b[1m",
29
+ dim: "\x1b[2m",
30
+ green: "\x1b[32m",
31
+ yellow: "\x1b[33m",
32
+ cyan: "\x1b[36m",
33
+ };
34
+ const IGNORED_DIRS = new Set([
35
+ ".git",
36
+ ".glubean",
37
+ "coverage",
38
+ "dist",
39
+ "node_modules",
40
+ "out",
41
+ ]);
42
+ const CONTRACT_PLUGIN_IMPORTS = {
43
+ "@glubean/grpc": { packageName: "@glubean/grpc", localName: "grpcPlugin" },
44
+ "@glubean/graphql": { packageName: "@glubean/graphql", localName: "graphqlPlugin" },
45
+ };
46
+ export async function migrateCommand(options = {}) {
47
+ const rootDir = resolve(options.dir ?? ".");
48
+ const apply = options.apply === true;
49
+ const plan = await planMigration(rootDir);
50
+ const changedFiles = plan.files.filter((file) => file.original !== file.next);
51
+ const fixes = plan.files.flatMap((file) => file.fixes);
52
+ const manual = plan.files.flatMap((file) => file.manual);
53
+ console.log(`${colors.bold}Glubean migrate${colors.reset} v0.1.x -> v10`);
54
+ console.log(`${colors.dim}Mode: ${apply ? "apply" : "dry-run"}${colors.reset}`);
55
+ console.log("");
56
+ if (fixes.length === 0 && manual.length === 0) {
57
+ console.log(`${colors.green}No legacy patterns found.${colors.reset}`);
58
+ return;
59
+ }
60
+ if (fixes.length > 0) {
61
+ console.log(`${colors.bold}Automatic changes${colors.reset}`);
62
+ for (const fix of fixes) {
63
+ console.log(` ${colors.cyan}${relative(rootDir, fix.file)}:${fix.line}${colors.reset} ${fix.message}`);
64
+ }
65
+ console.log("");
66
+ }
67
+ if (manual.length > 0) {
68
+ console.log(`${colors.bold}Manual review${colors.reset}`);
69
+ for (const item of manual) {
70
+ console.log(` ${colors.yellow}${relative(rootDir, item.file)}:${item.line}${colors.reset} ${item.message}`);
71
+ }
72
+ console.log("");
73
+ }
74
+ if (changedFiles.length > 0) {
75
+ console.log(`${colors.bold}Preview diff${colors.reset}`);
76
+ for (const file of changedFiles) {
77
+ process.stdout.write(renderDiff(relative(rootDir, file.file), file.original, file.next));
78
+ }
79
+ console.log("");
80
+ }
81
+ if (apply) {
82
+ for (const file of changedFiles) {
83
+ await mkdir(dirname(file.file), { recursive: true });
84
+ await writeFile(file.file, file.next, "utf-8");
85
+ }
86
+ console.log(`${colors.green}Applied${colors.reset} ${changedFiles.length} file(s).`);
87
+ }
88
+ else if (changedFiles.length > 0) {
89
+ console.log(`${colors.dim}Run ${colors.cyan}glubean migrate --apply${colors.dim} to write these changes.${colors.reset}`);
90
+ }
91
+ }
92
+ export async function planMigration(rootDir) {
93
+ const ts = await loadTypeScript(rootDir);
94
+ const files = await collectTypeScriptFiles(rootDir);
95
+ const filePlans = [];
96
+ const setupPlugins = new Set();
97
+ for (const file of files) {
98
+ const source = await readFile(file, "utf-8");
99
+ const plan = planFileMigration(ts, rootDir, file, source);
100
+ for (const plugin of plan.setupPlugins)
101
+ setupPlugins.add(plugin);
102
+ filePlans.push({
103
+ file,
104
+ original: source,
105
+ next: applyReplacements(source, plan.replacements),
106
+ fixes: plan.fixes,
107
+ manual: plan.manual,
108
+ });
109
+ }
110
+ if (setupPlugins.size > 0) {
111
+ const setupPath = resolve(rootDir, "glubean.setup.ts");
112
+ const existing = filePlans.find((file) => file.file === setupPath);
113
+ if (existing) {
114
+ const next = ensureSetupInstalls(existing.next, setupPlugins);
115
+ if (next !== existing.next) {
116
+ existing.fixes.push({
117
+ file: setupPath,
118
+ line: 1,
119
+ message: "Install contract plugin manifests from glubean.setup.ts.",
120
+ });
121
+ existing.next = next;
122
+ }
123
+ }
124
+ else {
125
+ const source = ensureSetupInstalls("", setupPlugins);
126
+ filePlans.push({
127
+ file: setupPath,
128
+ original: "",
129
+ next: source,
130
+ fixes: [
131
+ {
132
+ file: setupPath,
133
+ line: 1,
134
+ message: "Create glubean.setup.ts with contract plugin manifests.",
135
+ },
136
+ ],
137
+ manual: [],
138
+ });
139
+ }
140
+ }
141
+ return { rootDir, files: filePlans, setupPlugins };
142
+ }
143
+ function planFileMigration(ts, rootDir, file, source) {
144
+ const sourceFile = ts.createSourceFile(file, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
145
+ const replacements = [];
146
+ const fixes = [];
147
+ const manual = [];
148
+ const setupPlugins = new Set();
149
+ const legacyHttpCalls = [];
150
+ const removedImports = new Set();
151
+ // Track the LOCAL binding names bound to `@glubean/sdk`'s `definePlugin`.
152
+ // Using a Set handles `import { definePlugin as glubeanPlugin }` aliases —
153
+ // the old single-flag approach only checked for a callee named literally
154
+ // "definePlugin", so aliases were missed and unrelated `definePlugin` from
155
+ // other libraries could still be false-positived when the file also imported
156
+ // the SDK symbol under an alias.
157
+ const definePluginLocals = new Set();
158
+ // Detect whether the file already declares its own scoped HTTP instance via
159
+ // `contract.http.with(...)`. If so, the user is past the trivial-bare-call
160
+ // pattern and an empty `contract.http.with("<stem>", {})` synthesised by
161
+ // migrate would clobber meaningful local config. Refuse the auto-rewrite —
162
+ // surface a manual review instead.
163
+ let hasExistingHttpWith = false;
164
+ const visit = (node) => {
165
+ if (ts.isImportDeclaration(node)) {
166
+ const specifier = stringLiteralText(ts, node.moduleSpecifier);
167
+ if (!node.importClause && specifier && CONTRACT_PLUGIN_IMPORTS[specifier]) {
168
+ setupPlugins.add(specifier);
169
+ removedImports.add(node);
170
+ replacements.push(removeStatementReplacement(source, node));
171
+ fixes.push({
172
+ file,
173
+ line: lineOf(ts, sourceFile, node),
174
+ message: `Move ${specifier} side-effect plugin import to glubean.setup.ts installPlugin(...).`,
175
+ });
176
+ }
177
+ if (specifier === "@glubean/sdk" && node.importClause?.namedBindings && ts.isNamedImports(node.importClause.namedBindings)) {
178
+ for (const element of node.importClause.namedBindings.elements) {
179
+ // Track the LOCAL name (after `as`) so aliased imports are caught:
180
+ // `import { definePlugin as dp } from "@glubean/sdk"` → locals has "dp"
181
+ const original = element.propertyName?.text ?? element.name.text;
182
+ if (original === "definePlugin") {
183
+ definePluginLocals.add(element.name.text);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ if (ts.isCallExpression(node)) {
189
+ if (isLegacyHttpCall(ts, node)) {
190
+ legacyHttpCalls.push(node);
191
+ }
192
+ if (isExistingHttpWithCall(ts, node)) {
193
+ hasExistingHttpWith = true;
194
+ }
195
+ if (definePluginLocals.size > 0 && isLegacyDefinePluginCall(ts, node, definePluginLocals)) {
196
+ manual.push({
197
+ file,
198
+ line: lineOf(ts, sourceFile, node),
199
+ code: "legacy-plugin",
200
+ message: "definePlugin((runtime) => ...) was removed; migrate to definePlugin({ matchers, protocols, setup }).",
201
+ });
202
+ }
203
+ }
204
+ if (ts.isObjectLiteralExpression(node)) {
205
+ collectCaseFindings(ts, sourceFile, file, node, manual);
206
+ }
207
+ ts.forEachChild(node, visit);
208
+ };
209
+ visit(sourceFile);
210
+ if (legacyHttpCalls.length > 0) {
211
+ if (hasExistingHttpWith) {
212
+ // Bail on the auto-rewrite — the file already has a scoped HTTP instance,
213
+ // so the synthesised `migratedHttp = contract.http.with("<stem>", {})`
214
+ // would either collide with an existing identifier or contradict the
215
+ // user's intentional local setup. Report each legacy call as manual.
216
+ for (const call of legacyHttpCalls) {
217
+ manual.push({
218
+ file,
219
+ line: lineOf(ts, sourceFile, call),
220
+ code: "legacy-http-bare",
221
+ message: 'Bare contract.http("id", spec) call found alongside an existing contract.http.with(...) instance. Rebind manually onto the scoped instance to preserve your client/baseUrl config.',
222
+ });
223
+ }
224
+ }
225
+ else {
226
+ const instanceName = uniqueIdentifier(source, "migratedHttp");
227
+ const importEnd = findImportInsertionOffset(ts, sourceFile, removedImports);
228
+ const instanceLabel = scopedInstanceLabel(file, rootDir);
229
+ replacements.push({
230
+ start: importEnd,
231
+ end: importEnd,
232
+ text: `${source[importEnd - 1] === "\n" ? "" : "\n"}\nconst ${instanceName} = contract.http.with("${instanceLabel}", {});\n`,
233
+ });
234
+ for (const call of legacyHttpCalls) {
235
+ replacements.push({
236
+ start: call.expression.getStart(sourceFile),
237
+ end: call.expression.getEnd(),
238
+ text: instanceName,
239
+ });
240
+ fixes.push({
241
+ file,
242
+ line: lineOf(ts, sourceFile, call),
243
+ message: 'Rewrite contract.http("id", spec) to a scoped contract.http.with(...) instance.',
244
+ });
245
+ }
246
+ // Always surface the synthesised instance config for review — the empty
247
+ // `{}` is a placeholder. If the user previously relied on plugin-level
248
+ // HTTP defaults (a global client manifest), this is fine. If they were
249
+ // bringing per-file http config they will need to add it here.
250
+ manual.push({
251
+ file,
252
+ line: lineOf(ts, sourceFile, legacyHttpCalls[0]),
253
+ code: "legacy-http-bare",
254
+ message: `Created ${instanceName} = contract.http.with("${instanceLabel}", {}). Review the empty options object and add client/baseUrl/headers as needed.`,
255
+ });
256
+ }
257
+ }
258
+ return { replacements, fixes, manual, setupPlugins };
259
+ }
260
+ function collectCaseFindings(ts, sourceFile, file, object, manual) {
261
+ for (const property of object.properties) {
262
+ if (!ts.isPropertyAssignment(property))
263
+ continue;
264
+ if (propertyName(ts, property.name) !== "cases")
265
+ continue;
266
+ if (!ts.isObjectLiteralExpression(property.initializer))
267
+ continue;
268
+ for (const caseProp of property.initializer.properties) {
269
+ if (!ts.isPropertyAssignment(caseProp))
270
+ continue;
271
+ const value = caseProp.initializer;
272
+ if (ts.isCallExpression(value) && ts.isIdentifier(value.expression) && value.expression.text === "defineHttpCase") {
273
+ continue;
274
+ }
275
+ if (!ts.isObjectLiteralExpression(value))
276
+ continue;
277
+ for (const field of value.properties) {
278
+ if (!ts.isPropertyAssignment(field))
279
+ continue;
280
+ const name = propertyName(ts, field.name);
281
+ if (name === "setup" || name === "teardown") {
282
+ manual.push({
283
+ file,
284
+ line: lineOf(ts, sourceFile, field),
285
+ code: "legacy-lifecycle",
286
+ message: `Case-level ${name} was removed; extract lifecycle work into a bootstrap overlay or session.`,
287
+ });
288
+ }
289
+ if (name === "needs") {
290
+ manual.push({
291
+ file,
292
+ line: lineOf(ts, sourceFile, field),
293
+ code: "needs-factory",
294
+ message: "Case has needs; wrap the case in defineHttpCase<Needs>(...) to preserve body/input typing.",
295
+ });
296
+ }
297
+ }
298
+ }
299
+ }
300
+ }
301
+ function isLegacyHttpCall(ts, node) {
302
+ const expression = node.expression;
303
+ if (!ts.isPropertyAccessExpression(expression))
304
+ return false;
305
+ if (expression.name.text !== "http")
306
+ return false;
307
+ return ts.isIdentifier(expression.expression) && expression.expression.text === "contract";
308
+ }
309
+ /**
310
+ * Match `contract.http.with(...)` — the v10 scoped instance constructor.
311
+ * Used to detect "user already declared a scoped http instance in this file"
312
+ * so we don't auto-rewrite over their config.
313
+ */
314
+ function isExistingHttpWithCall(ts, node) {
315
+ const expression = node.expression;
316
+ if (!ts.isPropertyAccessExpression(expression))
317
+ return false;
318
+ if (expression.name.text !== "with")
319
+ return false;
320
+ if (!ts.isPropertyAccessExpression(expression.expression))
321
+ return false;
322
+ if (expression.expression.name.text !== "http")
323
+ return false;
324
+ return ts.isIdentifier(expression.expression.expression) && expression.expression.expression.text === "contract";
325
+ }
326
+ function isLegacyDefinePluginCall(ts, node, locals) {
327
+ if (!ts.isIdentifier(node.expression) || !locals.has(node.expression.text))
328
+ return false;
329
+ const first = node.arguments[0];
330
+ return !!first && (ts.isArrowFunction(first) || ts.isFunctionExpression(first));
331
+ }
332
+ async function collectTypeScriptFiles(rootDir) {
333
+ const files = [];
334
+ async function walk(dir) {
335
+ let entries;
336
+ try {
337
+ entries = await readdir(dir, { withFileTypes: true });
338
+ }
339
+ catch {
340
+ return;
341
+ }
342
+ for (const entry of entries) {
343
+ const path = join(dir, entry.name);
344
+ if (entry.isDirectory()) {
345
+ if (!IGNORED_DIRS.has(entry.name))
346
+ await walk(path);
347
+ continue;
348
+ }
349
+ if (!entry.isFile())
350
+ continue;
351
+ if (!isMigratableTsFile(path))
352
+ continue;
353
+ files.push(path);
354
+ }
355
+ }
356
+ await walk(rootDir);
357
+ files.sort();
358
+ return files;
359
+ }
360
+ function isMigratableTsFile(path) {
361
+ if (!path.endsWith(".ts") || path.endsWith(".d.ts"))
362
+ return false;
363
+ const name = basename(path);
364
+ // Migratable file conventions:
365
+ // - `glubean.setup.ts` — for installPlugin manifest rewrites
366
+ // - `*.contract.ts` / `*.flow.ts` — contract-layer files
367
+ // - `*.test.ts` / `*.spec.ts` — tests that may import contract surfaces
368
+ // - `*.plugin.ts` / `*.plugins.ts` — plugin authoring (legacy `definePlugin`).
369
+ // Pre-fix used `name.includes("plugin")` which over-matched any file
370
+ // whose name happened to contain "plugin" (e.g. `eslint-plugin.ts`,
371
+ // `plugin-utils.ts`). Now we only match a `.plugin.ts` / `.plugins.ts`
372
+ // suffix — the conventional Glubean plugin naming.
373
+ return name === "glubean.setup.ts" ||
374
+ name.endsWith(".contract.ts") ||
375
+ name.endsWith(".flow.ts") ||
376
+ name.endsWith(".test.ts") ||
377
+ name.endsWith(".spec.ts") ||
378
+ name.endsWith(".plugin.ts") ||
379
+ name.endsWith(".plugins.ts");
380
+ }
381
+ function ensureSetupInstalls(source, plugins) {
382
+ const specs = [...plugins].filter((plugin) => CONTRACT_PLUGIN_IMPORTS[plugin]);
383
+ if (specs.length === 0)
384
+ return source;
385
+ const trimmed = source.trim().length > 0 ? source : "";
386
+ const linesToPrepend = [];
387
+ if (!/from\s+["']@glubean\/sdk["']/.test(source) || !/\binstallPlugin\b/.test(source)) {
388
+ linesToPrepend.push('import { installPlugin } from "@glubean/sdk";');
389
+ }
390
+ const pluginNames = [];
391
+ for (const spec of specs) {
392
+ const plugin = CONTRACT_PLUGIN_IMPORTS[spec];
393
+ if (!new RegExp(`import\\s+${plugin.localName}\\s+from\\s+["']${escapeRegExp(plugin.packageName)}["']`).test(source)) {
394
+ linesToPrepend.push(`import ${plugin.localName} from "${plugin.packageName}";`);
395
+ }
396
+ pluginNames.push(plugin.localName);
397
+ }
398
+ const missingPluginNames = pluginNames.filter((name) => !new RegExp(`installPlugin\\([^)]*\\b${name}\\b`, "s").test(source));
399
+ const installLine = missingPluginNames.length > 0 ? `await installPlugin(${missingPluginNames.join(", ")});` : "";
400
+ const prefix = linesToPrepend.length > 0 ? `${linesToPrepend.join("\n")}\n${trimmed ? "\n" : ""}` : "";
401
+ const body = trimmed ? ensureTrailingNewline(trimmed) : "";
402
+ const suffix = installLine ? `${body && !body.endsWith("\n\n") ? "\n" : ""}${installLine}\n` : "";
403
+ return prefix + body + suffix;
404
+ }
405
+ function applyReplacements(source, replacements) {
406
+ if (replacements.length === 0)
407
+ return source;
408
+ const sorted = [...replacements].sort((a, b) => b.start - a.start);
409
+ let next = source;
410
+ let lastStart = Number.POSITIVE_INFINITY;
411
+ for (const replacement of sorted) {
412
+ if (replacement.end > lastStart) {
413
+ throw new Error("Internal migrate error: overlapping replacements");
414
+ }
415
+ next = next.slice(0, replacement.start) + replacement.text + next.slice(replacement.end);
416
+ lastStart = replacement.start;
417
+ }
418
+ return next;
419
+ }
420
+ function renderDiff(file, oldText, newText) {
421
+ if (oldText === newText)
422
+ return "";
423
+ const oldLines = splitLines(oldText);
424
+ const newLines = splitLines(newText);
425
+ let prefix = 0;
426
+ while (prefix < oldLines.length && prefix < newLines.length && oldLines[prefix] === newLines[prefix]) {
427
+ prefix++;
428
+ }
429
+ let suffix = 0;
430
+ while (suffix < oldLines.length - prefix &&
431
+ suffix < newLines.length - prefix &&
432
+ oldLines[oldLines.length - 1 - suffix] === newLines[newLines.length - 1 - suffix]) {
433
+ suffix++;
434
+ }
435
+ const contextBefore = Math.max(0, prefix - 3);
436
+ const oldEnd = oldLines.length - suffix;
437
+ const newEnd = newLines.length - suffix;
438
+ const contextAfterOld = Math.min(oldLines.length, oldEnd + 3);
439
+ const contextAfterNew = Math.min(newLines.length, newEnd + 3);
440
+ const out = [
441
+ `--- ${file}\n`,
442
+ `+++ ${file}\n`,
443
+ `@@ -${contextBefore + 1},${contextAfterOld - contextBefore} +${contextBefore + 1},${contextAfterNew - contextBefore} @@\n`,
444
+ ];
445
+ for (let i = contextBefore; i < prefix; i++)
446
+ out.push(` ${oldLines[i]}`);
447
+ for (let i = prefix; i < oldEnd; i++)
448
+ out.push(`-${oldLines[i]}`);
449
+ for (let i = prefix; i < newEnd; i++)
450
+ out.push(`+${newLines[i]}`);
451
+ for (let i = oldEnd; i < contextAfterOld; i++)
452
+ out.push(` ${oldLines[i]}`);
453
+ return out.join("");
454
+ }
455
+ function splitLines(text) {
456
+ if (text.length === 0)
457
+ return [];
458
+ const lines = text.match(/.*(?:\n|$)/g) ?? [];
459
+ return lines.filter((line) => line.length > 0);
460
+ }
461
+ function findImportInsertionOffset(ts, sourceFile, skip) {
462
+ let offset = 0;
463
+ for (const statement of sourceFile.statements) {
464
+ if (ts.isImportDeclaration(statement) && !skip.has(statement)) {
465
+ offset = statement.end;
466
+ }
467
+ }
468
+ return offset;
469
+ }
470
+ function removeStatementReplacement(source, node) {
471
+ let end = node.end;
472
+ if (source[end] === "\r" && source[end + 1] === "\n")
473
+ end += 2;
474
+ else if (source[end] === "\n")
475
+ end += 1;
476
+ return { start: node.getStart(), end, text: "" };
477
+ }
478
+ function stringLiteralText(ts, node) {
479
+ return ts.isStringLiteral(node) ? node.text : undefined;
480
+ }
481
+ function propertyName(ts, name) {
482
+ if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name))
483
+ return name.text;
484
+ return undefined;
485
+ }
486
+ function lineOf(_ts, sourceFile, node) {
487
+ return sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1;
488
+ }
489
+ function uniqueIdentifier(source, base) {
490
+ if (!new RegExp(`\\b${escapeRegExp(base)}\\b`).test(source))
491
+ return base;
492
+ for (let i = 2; i < 100; i++) {
493
+ const candidate = `${base}${i}`;
494
+ if (!new RegExp(`\\b${escapeRegExp(candidate)}\\b`).test(source))
495
+ return candidate;
496
+ }
497
+ throw new Error(`Unable to find a free identifier for ${base}`);
498
+ }
499
+ function scopedInstanceLabel(file, rootDir) {
500
+ const rel = relative(rootDir, file);
501
+ const base = basename(rel)
502
+ .replace(/\.contract\.ts$/, "")
503
+ .replace(/\.flow\.ts$/, "")
504
+ .replace(/\.test\.ts$/, "")
505
+ .replace(/\.spec\.ts$/, "")
506
+ .replace(extname(rel), "");
507
+ const cleaned = base.replace(/[^a-zA-Z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
508
+ return cleaned || "migrated-http";
509
+ }
510
+ function ensureTrailingNewline(text) {
511
+ return text.endsWith("\n") ? text : `${text}\n`;
512
+ }
513
+ function escapeRegExp(value) {
514
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
515
+ }
516
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AA0CA,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4EAA4E;IAC5E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAyID,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAkG/E;AAoED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAw4Cf"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AA+CA,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4EAA4E;IAC5E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAyID,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAkG/E;AA+ED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA44Cf"}
@@ -8,7 +8,7 @@ import { resolveEnvFileName } from "../lib/active_env.js";
8
8
  import { shouldSkipTest } from "../lib/skip.js";
9
9
  import { CLI_VERSION } from "../version.js";
10
10
  import { extractContractCases, extractFromSource } from "@glubean/scanner/static";
11
- import { extractContractFromFile, loadProjectOverlays } from "@glubean/scanner";
11
+ import { extractContractFromFile, findTemplateMatch, loadProjectOverlays, matchesTemplateFilter, } from "@glubean/scanner";
12
12
  import { applyEnvTemplating } from "@glubean/runner";
13
13
  // ANSI color codes for pretty output
14
14
  const colors = {
@@ -203,14 +203,14 @@ export async function discoverTests(filePath) {
203
203
  timeout: m.timeout,
204
204
  skip: m.skip,
205
205
  only: m.only,
206
- groupId: m.groupId,
206
+ groupId: m.groupId ?? (m.variant === "pick" || m.parallel ? m.id : undefined),
207
207
  parallel: m.parallel,
208
208
  },
209
209
  }));
210
210
  }
211
211
  function matchesFilter(testItem, filter) {
212
212
  const lowerFilter = filter.toLowerCase();
213
- if (testItem.meta.id.toLowerCase().includes(lowerFilter))
213
+ if (matchesTemplateFilter(testItem.meta.id, lowerFilter))
214
214
  return true;
215
215
  if (testItem.meta.name?.toLowerCase().includes(lowerFilter))
216
216
  return true;
@@ -229,6 +229,10 @@ function getLogFilePath(testFilePath) {
229
229
  return testFilePath + ".log";
230
230
  return testFilePath.slice(0, lastDot) + ".log";
231
231
  }
232
+ function findFileTestByRuntimeId(tests, runtimeId) {
233
+ const match = findTemplateMatch(tests.map((ft) => ({ id: ft.test.meta.id, ft })), runtimeId);
234
+ return match?.ft;
235
+ }
232
236
  function resolveOutputPath(userPath, cwd) {
233
237
  if (isAbsolute(userPath)) {
234
238
  return resolve(userPath);
@@ -676,6 +680,7 @@ export async function runCommand(target, options = {}) {
676
680
  // "start" event inside file:event handlers.
677
681
  let currentGroupFilePath = "";
678
682
  let currentTestMap;
683
+ let currentTestItems;
679
684
  let testId = "";
680
685
  let testName = "";
681
686
  let testItem = null;
@@ -881,6 +886,7 @@ export async function runCommand(target, options = {}) {
881
886
  currentGroupFilePath = ev.filePath;
882
887
  startedFiles.add(ev.filePath);
883
888
  const runnable = runnableByFile.get(ev.filePath) ?? [];
889
+ currentTestItems = runnable;
884
890
  currentTestMap = new Map(runnable.map((ft) => [ft.test.meta.id, ft]));
885
891
  if (isMultiFile) {
886
892
  const relPath = relative(process.cwd(), ev.filePath);
@@ -913,7 +919,8 @@ export async function runCommand(target, options = {}) {
913
919
  const event = ev.event;
914
920
  switch (event.type) {
915
921
  case "start": {
916
- const entry = currentTestMap?.get(event.id);
922
+ const entry = currentTestMap?.get(event.id) ??
923
+ (currentTestItems ? findFileTestByRuntimeId(currentTestItems, event.id) : undefined);
917
924
  testId = event.id;
918
925
  testName = entry?.test.meta.name || event.name || event.id;
919
926
  testItem = entry?.test || null;