@feasibleone/blong-chain 1.9.0 → 1.10.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.
@@ -0,0 +1,379 @@
1
+ import nodeAssert from 'node:assert';
2
+ declare module 'node:assert' {
3
+ function snapshot(value?: unknown, name?: string, opts?: {
4
+ mask?: string[];
5
+ }): void;
6
+ }
7
+ /**
8
+ * Type definitions for the Blong parallel test framework
9
+ */
10
+ /** Minimal logger interface compatible with the framework's ILogger */
11
+ export interface ITestLogger {
12
+ trace?: (...args: unknown[]) => void;
13
+ debug?: (...args: unknown[]) => void;
14
+ info?: (...args: unknown[]) => void;
15
+ warn?: (...args: unknown[]) => void;
16
+ error?: (...args: unknown[]) => void;
17
+ fatal?: (...args: unknown[]) => void;
18
+ }
19
+ /**
20
+ * Context object passed to test step functions.
21
+ * All properties except $meta are thenable proxies that must be awaited.
22
+ */
23
+ export interface ITestContext {
24
+ /** Meta information - always available directly (not a thenable proxy) */
25
+ $meta: IMeta;
26
+ /** Dynamic properties added by completed steps - accessed via thenable proxies */
27
+ [key: string]: unknown;
28
+ }
29
+ /**
30
+ * A single test step function
31
+ * @param assert - Assertion functions from node:assert or tap
32
+ * @param context - Test context with $meta and outputs from previous steps
33
+ * @returns The output to be stored in context under the function's name
34
+ */
35
+ export type StepFunction = (assert: typeof nodeAssert, context: ITestContext) => unknown | Promise<unknown>;
36
+ /**
37
+ * A snapshot marker — an array of step-name strings placed inside the
38
+ * steps array. At runtime, when the executor encounters it the relevant steps
39
+ * are awaited and their results snapshotted into the TAP context.
40
+ *
41
+ * - `['*']` — snapshot ALL completed steps' results into one context object
42
+ * - `['step1', 'step2']` — snapshot only those specific steps
43
+ * - `[]` — sync barrier only, no snapshot (the empty array is the spelling;
44
+ * there is no symbol for it, because inventing one would touch every
45
+ * call site for no gain)
46
+ *
47
+ * The array may carry an optional `.name` to give the snapshot a stable name:
48
+ * ```
49
+ * const marker = Object.assign(['*'], {name: 'provisioning-complete'});
50
+ * ```
51
+ */
52
+ export type SnapshotMarker = string[] & {
53
+ name?: string;
54
+ };
55
+ /**
56
+ * Array of test steps. May contain step functions, nested step groups, or
57
+ * snapshot markers (string arrays; `[]` being a sync barrier).
58
+ */
59
+ export type StepArray = (StepFunction | StepArray | SnapshotMarker)[] & {
60
+ name?: string;
61
+ };
62
+ /**
63
+ * Meta information passed through test execution
64
+ */
65
+ export interface IMeta {
66
+ /** Optional concurrency limit for parallel step execution */
67
+ concurrency?: number;
68
+ /** Additional metadata properties */
69
+ [key: string]: unknown;
70
+ }
71
+ /**
72
+ * Test framework context (e.g., from node:test or tap)
73
+ * Enables nested test output with automatic indentation
74
+ */
75
+ export interface ITestFrameworkContext {
76
+ /** Creates a nested test scope for proper indentation */
77
+ test: (name: string, fn: (t: unknown) => void | Promise<void>) => unknown;
78
+ /** Captures a snapshot of a value under the given name */
79
+ matchSnapshot?: (value: unknown, name: string) => void;
80
+ }
81
+ /**
82
+ * A thenable proxy that acts as both a Promise and supports property access.
83
+ * Used for automatic dependency detection in test steps.
84
+ *
85
+ * Note: This is a conceptual type. The actual implementation uses Proxy objects
86
+ * that intercept property access. TypeScript cannot perfectly represent this pattern.
87
+ */
88
+ export type IThenableProxy<T = unknown> = Promise<T> & {
89
+ /** Access nested properties, returning more thenable proxies */
90
+ [key: string]: IThenableProxy<unknown>;
91
+ };
92
+ /**
93
+ * Promise resolution tracking for a specific context path
94
+ */
95
+ export interface IPromiseEntry<T = unknown> {
96
+ /** The actual promise that resolves when the step completes */
97
+ promise: Promise<T>;
98
+ /** Function to resolve the promise with a value */
99
+ resolve: (value: T) => void;
100
+ /** Function to reject the promise with an error */
101
+ reject: (error: Error) => void;
102
+ }
103
+ /**
104
+ * Complete definition of a test step including metadata
105
+ */
106
+ export interface IStepDefinition {
107
+ /** The step function to execute */
108
+ fn: StepFunction;
109
+ /** The step's display name (function name or custom name) */
110
+ name: string;
111
+ /** Source code location where this step was defined */
112
+ sourceLocation: ISourceLocation;
113
+ /** Parent group hierarchy */
114
+ groupPath: string[];
115
+ }
116
+ /**
117
+ * Source code location information
118
+ */
119
+ export interface ISourceLocation {
120
+ /** Absolute file path */
121
+ file: string;
122
+ /** Line number (1-indexed) */
123
+ line: number;
124
+ /** Column number (1-indexed) */
125
+ column: number;
126
+ /** Optional code snippet for context */
127
+ snippet?: string;
128
+ }
129
+ /**
130
+ * Graph structure tracking dependencies between test steps
131
+ */
132
+ export interface IDependencyGraph {
133
+ /** All steps in the test as graph nodes */
134
+ nodes: Map<string, IDependencyNode>;
135
+ /** Dependency relationships between steps */
136
+ edges: IDependencyEdge[];
137
+ }
138
+ /**
139
+ * A single node in the dependency graph
140
+ */
141
+ export interface IDependencyNode {
142
+ /** Step name (unique identifier) */
143
+ stepName: string;
144
+ /** Hierarchy of group names this step belongs to */
145
+ groupPath: string[];
146
+ /** When step execution started (timestamp) */
147
+ startTime?: number;
148
+ /** When step execution finished (timestamp) */
149
+ endTime?: number;
150
+ /** Current execution status */
151
+ status: 'pending' | 'running' | 'completed' | 'failed';
152
+ /** Error if step failed */
153
+ error?: Error;
154
+ }
155
+ /**
156
+ * An edge representing a dependency relationship
157
+ */
158
+ export interface IDependencyEdge {
159
+ /** Step that depends on another step */
160
+ from: string;
161
+ /** Step being depended on */
162
+ to: string;
163
+ /** Which context property/path was accessed */
164
+ property: string;
165
+ }
166
+ /**
167
+ * Overall test execution progress
168
+ */
169
+ export interface ITestProgress {
170
+ /** Test name */
171
+ testName: string;
172
+ /** Test start time */
173
+ startTime: number;
174
+ /** Test end time (when all steps complete) */
175
+ endTime?: number;
176
+ /** Overall test status */
177
+ status: 'pending' | 'running' | 'completed' | 'failed';
178
+ /** Total number of steps in the test */
179
+ totalSteps: number;
180
+ /** Number of completed steps */
181
+ completedSteps: number;
182
+ /** Number of failed steps */
183
+ failedSteps: number;
184
+ /** Progress details for each step */
185
+ steps: Map<string, IStepProgress>;
186
+ /** Group hierarchy information */
187
+ groups: IGroupProgress[];
188
+ }
189
+ /**
190
+ * Progress information for a single step
191
+ */
192
+ export interface IStepProgress {
193
+ /** Step name */
194
+ stepName: string;
195
+ /** Display name (may differ from stepName for reused tests) */
196
+ displayName: string;
197
+ /** Group hierarchy path */
198
+ groupPath: string[];
199
+ /** Current step status */
200
+ status: 'pending' | 'running' | 'completed' | 'failed';
201
+ /** When step started executing */
202
+ startTime?: number;
203
+ /** When step finished executing */
204
+ endTime?: number;
205
+ /** Total duration (end - start) */
206
+ duration?: number;
207
+ /** Time spent waiting in queue before execution */
208
+ queueTime?: number;
209
+ /** Time spent actually executing the step function */
210
+ executionTime?: number;
211
+ /** Time spent waiting for dependencies to resolve */
212
+ waitTime?: number;
213
+ /** Steps this step depends on */
214
+ dependencies: string[];
215
+ /** Steps that depend on this step */
216
+ dependents: string[];
217
+ /** Source code location */
218
+ sourceLocation?: ISourceLocation;
219
+ /** Step output/result */
220
+ result?: unknown;
221
+ /** Error information if step failed */
222
+ error?: IStepError;
223
+ }
224
+ /**
225
+ * Error information with enhanced context
226
+ */
227
+ export interface IStepError {
228
+ /** Error message */
229
+ message: string;
230
+ /** Stack trace */
231
+ stack: string;
232
+ /** Context snapshot at time of failure */
233
+ context: Record<string, unknown>;
234
+ }
235
+ /**
236
+ * Progress information for a group of steps
237
+ */
238
+ export interface IGroupProgress {
239
+ /** Group name */
240
+ groupName: string;
241
+ /** Hierarchy path */
242
+ path: string[];
243
+ /** Group status */
244
+ status: 'pending' | 'running' | 'completed' | 'failed';
245
+ /** Step names in this group */
246
+ steps: string[];
247
+ /** Total steps in group */
248
+ totalSteps: number;
249
+ /** Completed steps in group */
250
+ completedSteps: number;
251
+ }
252
+ /**
253
+ * Detailed timing information for a step
254
+ */
255
+ export interface IStepLatency {
256
+ /** Step name */
257
+ stepName: string;
258
+ /** When step was added to queue */
259
+ queuedAt: number;
260
+ /** When step execution started */
261
+ startedAt?: number;
262
+ /** When step execution completed */
263
+ completedAt?: number;
264
+ /** Time from queue entry to execution start */
265
+ queueTime: number;
266
+ /** Time spent waiting for dependencies */
267
+ waitTime: number;
268
+ /** Actual execution time (excludes wait time) */
269
+ executionTime: number;
270
+ /** Total time from queue to completion */
271
+ totalTime: number;
272
+ }
273
+ /**
274
+ * Aggregate latency metrics for entire test
275
+ */
276
+ export interface ITestLatency {
277
+ /** Test name */
278
+ testName: string;
279
+ /** Total wall-clock duration */
280
+ totalDuration: number;
281
+ /** Latency details for each step */
282
+ steps: Map<string, IStepLatency>;
283
+ /** Steps on the critical path (longest dependency chain) */
284
+ criticalPath: string[];
285
+ /** Ratio of parallel efficiency (total step time / wall clock time) */
286
+ parallelEfficiency: number;
287
+ /** Steps that blocked the most other steps */
288
+ bottlenecks: Array<{
289
+ stepName: string;
290
+ executionTime: number;
291
+ blockedSteps: string[];
292
+ }>;
293
+ }
294
+ /**
295
+ * Event emitter interface for progress notifications
296
+ */
297
+ export interface ITestEvents {
298
+ 'test:start': (progress: ITestProgress) => void;
299
+ 'test:end': (progress: ITestProgress) => void;
300
+ 'step:start': (stepName: string, progress: IStepProgress) => void;
301
+ 'step:end': (stepName: string, progress: IStepProgress) => void;
302
+ 'step:error': (stepName: string, error: Error, progress: IStepProgress) => void;
303
+ }
304
+ /**
305
+ * Configuration for the parallel test executor
306
+ */
307
+ export interface ITestExecutorConfig {
308
+ /** Maximum number of steps to run in parallel */
309
+ concurrency?: number;
310
+ /** Whether to capture stack traces (performance impact) */
311
+ captureStackTraces?: boolean;
312
+ /** Test framework to use (tap, node:test, etc.) */
313
+ framework?: unknown;
314
+ /** Logger instance for reporting step failures */
315
+ log?: ITestLogger;
316
+ /**
317
+ * Chain-level mask paths. Applied to ALL snapshot operations in this chain:
318
+ * `autoSnapshot`, `assert.snapshot()`, and snapshot markers.
319
+ *
320
+ * Supports:
321
+ * - Simple name: `'id'` — masks the `id` field in the snapshotted value
322
+ * - Dot-path: `'user.id'` — masks a nested field
323
+ * - Wildcard prefix: `'*.id'` — masks `id` inside every direct child of the
324
+ * snapshotted object (useful for context-level snapshots where each child
325
+ * is a step result)
326
+ *
327
+ * Per-call `{mask: [...]}` options are merged on top of this chain-level mask.
328
+ */
329
+ mask?: string[];
330
+ /**
331
+ * When `true`, automatically snapshot every step's return value under the
332
+ * step's function name after it completes. The chain-level `mask` is applied
333
+ * before snapshotting. No `assert.snapshot()` calls are needed in step
334
+ * functions — the framework captures everything automatically.
335
+ *
336
+ * Requires a TAP (or compatible) test context to be passed to `execute()`.
337
+ */
338
+ autoSnapshot?: boolean;
339
+ /**
340
+ * @deprecated Use `mask` (string array) instead.
341
+ * Custom masking function for advanced scenarios not covered by `mask`.
342
+ * When both are provided, `maskFn` is used and `mask` is passed to it.
343
+ */
344
+ maskFn?: (value: unknown, paths: string[]) => unknown;
345
+ /**
346
+ * Automatic rerun configuration for failing steps (Phase 1).
347
+ *
348
+ * When enabled, a step that throws an error is retried up to `maxRetries`
349
+ * times before being reported as failed. This is useful for flaky tests
350
+ * caused by race conditions or transient network issues.
351
+ *
352
+ * Phase 2 (diagnostic attachment) is not yet implemented.
353
+ */
354
+ rerun?: {
355
+ /** Whether to enable the retry mechanism (default: false) */
356
+ enabled?: boolean;
357
+ /**
358
+ * Maximum number of retry attempts per failing step (default: 1).
359
+ * Set to 0 to detect failures without retrying.
360
+ */
361
+ maxRetries?: number;
362
+ };
363
+ }
364
+ /**
365
+ * Test executor interface
366
+ */
367
+ export interface ITestExecutor {
368
+ /** Execute test steps */
369
+ execute(steps: StepArray, $meta: IMeta, testContext?: ITestFrameworkContext): Promise<void>;
370
+ /** Get current progress snapshot */
371
+ getProgress(): ITestProgress;
372
+ /** Get dependency graph */
373
+ getDependencyGraph(): IDependencyGraph;
374
+ /** Get latency metrics */
375
+ getLatencyReport(): ITestLatency;
376
+ /** Register event listener */
377
+ on<E extends keyof ITestEvents>(event: E, handler: ITestEvents[E]): void;
378
+ }
379
+ //# sourceMappingURL=test-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-types.d.ts","sourceRoot":"","sources":["../test-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-types.js","sourceRoot":"","sources":["../test-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=timing-analysis.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing-analysis.test.d.ts","sourceRoot":"","sources":["../timing-analysis.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing-analysis.test.js","sourceRoot":"","sources":["../timing-analysis.test.ts"],"names":[],"mappings":"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"}
package/index.ts CHANGED
@@ -371,7 +371,7 @@ function captureSourceLocation(): ISourceLocation {
371
371
  const DEFAULT_MAX_RETRIES = 1;
372
372
 
373
373
  // ============================================================================
374
- // Masking helpers (also used by assert.snapshot and checkpoint snapshots)
374
+ // Masking helpers (also used by assert.snapshot and snapshot markers)
375
375
  // ============================================================================
376
376
 
377
377
  /**
@@ -542,13 +542,13 @@ export class TestExecutor extends EventEmitter {
542
542
  ): Promise<void> {
543
543
  const stepPromises: Promise<void>[] = [];
544
544
  const namedPromises = new Map<string, Promise<void>>();
545
- let checkpointIndex = 0;
545
+ let snapshotIndex = 0;
546
546
 
547
547
  for (const step of steps) {
548
548
  if (Array.isArray(step)) {
549
549
  // Distinguish by element type:
550
550
  // [] empty array → sync barrier (existing behaviour)
551
- // ['*'] / ['s1','s2'] → snapshot checkpoint (new)
551
+ // ['*'] / ['s1','s2'] → snapshot marker
552
552
  // [fn, ...] nested → nested step group (existing behaviour)
553
553
  if (step.length === 0) {
554
554
  // Sync barrier — wait for all parallel steps in this batch
@@ -558,37 +558,35 @@ export class TestExecutor extends EventEmitter {
558
558
  }
559
559
 
560
560
  if (step.every(s => typeof s === 'string')) {
561
- // Snapshot checkpoint: await relevant steps, then snapshot
562
- const checkpoint = step as unknown as string[];
561
+ // Snapshot marker: await the relevant steps, then snapshot
562
+ const marker = step as unknown as string[];
563
563
 
564
- if (checkpoint.length === 1 && checkpoint[0] === '*') {
564
+ if (marker.length === 1 && marker[0] === '*') {
565
565
  // ['*'] — wait for entire current batch
566
566
  await Promise.all(stepPromises);
567
567
  stepPromises.length = 0;
568
568
  } else {
569
569
  // ['step1','step2'] — wait only for the named steps
570
- const namedToWait = checkpoint
570
+ const namedToWait = marker
571
571
  .map(name => namedPromises.get(name))
572
572
  .filter((p): p is Promise<void> => p !== undefined);
573
573
  await Promise.all(namedToWait);
574
574
  // stepPromises is NOT cleared — other steps keep running
575
575
  }
576
576
  const cpName =
577
- (checkpoint as {name?: string}).name ??
578
- (checkpoint.length === 1 && checkpoint[0] === '*'
579
- ? `context`
580
- : checkpoint.join('-'));
577
+ (marker as {name?: string}).name ??
578
+ (marker.length === 1 && marker[0] === '*' ? `context` : marker.join('-'));
581
579
  // Disambiguate when the same name is used more than once
582
580
  const snapshotName =
583
- checkpointIndex === 0 ? cpName : `${cpName}-${checkpointIndex}`;
584
- checkpointIndex++;
581
+ snapshotIndex === 0 ? cpName : `${cpName}-${snapshotIndex}`;
582
+ snapshotIndex++;
585
583
 
586
584
  const stepsToSnapshot =
587
- checkpoint.length === 1 && checkpoint[0] === '*'
585
+ marker.length === 1 && marker[0] === '*'
588
586
  ? [...this.progress.steps.entries()]
589
587
  .filter(([, s]) => s.status === 'completed')
590
588
  .map(([name]) => name)
591
- : checkpoint.filter(name =>
589
+ : marker.filter(name =>
592
590
  Object.prototype.hasOwnProperty.call(this.realContext, name),
593
591
  );
594
592
 
@@ -940,7 +938,7 @@ export class TestExecutor extends EventEmitter {
940
938
 
941
939
  for (const step of steps) {
942
940
  if (Array.isArray(step)) {
943
- // Skip checkpoint markers (string-only arrays) — they are not steps
941
+ // Skip snapshot markers (string-only arrays) — they are not steps
944
942
  if (step.every(s => typeof s === 'string')) continue;
945
943
  // Recursively collect from nested step groups
946
944
  const nested = this._collectStepNames(step as StepArray);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feasibleone/blong-chain",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "Parallel testing with automatic dependencies",
5
5
  "keywords": [
6
6
  "blong",
@@ -24,7 +24,7 @@
24
24
  "@types/node": "^24",
25
25
  "tap": "^21.6.3",
26
26
  "typescript": "^6.0.3",
27
- "@feasibleone/blong-dev": "1.4.0"
27
+ "@feasibleone/blong-dev": "1.6.0"
28
28
  },
29
29
  "scripts": {
30
30
  "build": "heft build --clean",
@@ -33,7 +33,7 @@
33
33
  "ci-lint": "blong-dev lint",
34
34
  "ci-publish": "node ../../common/scripts/install-run-rush-pnpm.js publish --access public --provenance",
35
35
  "ci-test": "blong-dev test '*.test.ts';./test-examples-ci.sh",
36
- "test": "tap *.test.ts",
36
+ "test": "blong-dev test '*.test.ts';./test-examples-ci.sh",
37
37
  "test:examples": "node --test dist/examples/*.test.js"
38
38
  }
39
39
  }
package/test-types.ts CHANGED
@@ -49,26 +49,28 @@ export type StepFunction = (
49
49
  ) => unknown | Promise<unknown>;
50
50
 
51
51
  /**
52
- * A snapshot checkpoint — an array of step-name strings placed inside the
53
- * steps array. At runtime, when the executor encounters it the current batch
54
- * is awaited and the listed step results are snapshotted into the TAP context.
52
+ * A snapshot marker — an array of step-name strings placed inside the
53
+ * steps array. At runtime, when the executor encounters it the relevant steps
54
+ * are awaited and their results snapshotted into the TAP context.
55
55
  *
56
56
  * - `['*']` — snapshot ALL completed steps' results into one context object
57
57
  * - `['step1', 'step2']` — snapshot only those specific steps
58
- * - `[]` — sync barrier only, no snapshot (existing behaviour)
58
+ * - `[]` — sync barrier only, no snapshot (the empty array is the spelling;
59
+ * there is no symbol for it, because inventing one would touch every
60
+ * call site for no gain)
59
61
  *
60
62
  * The array may carry an optional `.name` to give the snapshot a stable name:
61
63
  * ```
62
- * const cp = Object.assign(['*'], {name: 'provisioning-complete'});
64
+ * const marker = Object.assign(['*'], {name: 'provisioning-complete'});
63
65
  * ```
64
66
  */
65
- export type CheckpointMarker = string[] & {name?: string};
67
+ export type SnapshotMarker = string[] & {name?: string};
66
68
 
67
69
  /**
68
70
  * Array of test steps. May contain step functions, nested step groups, or
69
- * checkpoint markers (string arrays).
71
+ * snapshot markers (string arrays; `[]` being a sync barrier).
70
72
  */
71
- export type StepArray = (StepFunction | StepArray | CheckpointMarker)[] & {name?: string};
73
+ export type StepArray = (StepFunction | StepArray | SnapshotMarker)[] & {name?: string};
72
74
 
73
75
  /**
74
76
  * Meta information passed through test execution
@@ -370,7 +372,7 @@ export interface ITestExecutorConfig {
370
372
  log?: ITestLogger;
371
373
  /**
372
374
  * Chain-level mask paths. Applied to ALL snapshot operations in this chain:
373
- * `autoSnapshot`, `assert.snapshot()`, and checkpoint snapshots.
375
+ * `autoSnapshot`, `assert.snapshot()`, and snapshot markers.
374
376
  *
375
377
  * Supports:
376
378
  * - Simple name: `'id'` — masks the `id` field in the snapshotted value