@smoothbricks/lmao 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ts/bun/trace-preload.d.ts +2 -1
- package/dist/ts/bun/trace-preload.d.ts.map +1 -1
- package/dist/ts/bun/trace-preload.js +16 -19
- package/dist/ts/lib/opContext/spanContextTypes.d.ts +14 -1
- package/dist/ts/lib/opContext/spanContextTypes.d.ts.map +1 -1
- package/dist/ts/lib/spanContext.d.ts.map +1 -1
- package/dist/ts/lib/spanContext.js +7 -4
- package/dist/ts/lib/testing/bun-harness.d.ts +18 -13
- package/dist/ts/lib/testing/bun-harness.d.ts.map +1 -1
- package/dist/ts/lib/testing/bun-harness.js +22 -32
- package/dist/ts/lib/testing/consumer-package.d.ts +30 -0
- package/dist/ts/lib/testing/consumer-package.d.ts.map +1 -0
- package/dist/ts/lib/testing/consumer-package.js +92 -0
- package/package.json +1 -1
- package/src/bun/trace-preload.ts +17 -21
- package/src/lib/__tests__/span-lifecycle.test.ts +79 -0
- package/src/lib/opContext/spanContextTypes.ts +14 -1
- package/src/lib/spanContext.ts +22 -12
- package/src/lib/testing/__tests__/consumer-package.test.ts +106 -0
- package/src/lib/testing/bun-harness.ts +32 -37
- package/src/lib/testing/consumer-package.ts +93 -0
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Bun test tracing preload.
|
|
3
3
|
*
|
|
4
4
|
* Registers LMAO SQLite-backed test tracing after the Typia preload has already
|
|
5
|
-
* been registered in bunfig.
|
|
5
|
+
* been registered in bunfig. Wiring-only: consumer resolution lives in
|
|
6
|
+
* `../lib/testing/consumer-package.js`.
|
|
6
7
|
*/
|
|
7
8
|
export {};
|
|
8
9
|
//# sourceMappingURL=trace-preload.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-preload.d.ts","sourceRoot":"","sources":["../../../src/bun/trace-preload.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"trace-preload.d.ts","sourceRoot":"","sources":["../../../src/bun/trace-preload.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -2,26 +2,23 @@
|
|
|
2
2
|
* Bun test tracing preload.
|
|
3
3
|
*
|
|
4
4
|
* Registers LMAO SQLite-backed test tracing after the Typia preload has already
|
|
5
|
-
* been registered in bunfig.
|
|
5
|
+
* been registered in bunfig. Wiring-only: consumer resolution lives in
|
|
6
|
+
* `../lib/testing/consumer-package.js`.
|
|
6
7
|
*/
|
|
7
|
-
import { existsSync } from 'node:fs';
|
|
8
|
-
import { dirname, join, resolve } from 'node:path';
|
|
9
8
|
import { autoSetupBunTestTracing } from '../lib/testing/bun-harness.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if (existsSync(join(packagesDir, 'lmao', 'package.json'))) {
|
|
15
|
-
return packagesDir;
|
|
16
|
-
}
|
|
17
|
-
const parent = dirname(directory);
|
|
18
|
-
if (parent === directory) {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
directory = parent;
|
|
22
|
-
}
|
|
9
|
+
import { resolveConsumerTarget } from '../lib/testing/consumer-package.js';
|
|
10
|
+
const target = resolveConsumerTarget(process.cwd());
|
|
11
|
+
if (target.kind === 'package') {
|
|
12
|
+
await autoSetupBunTestTracing({ packageRoot: target.packageRoot });
|
|
23
13
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
14
|
+
else if (target.kind === 'workspace-root') {
|
|
15
|
+
await autoSetupBunTestTracing({ workspaceRoot: target.workspaceRoot, packageRoots: target.packageRoots });
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
// WHY loud: this preload is only ever loaded on purpose (bunfig `preload`),
|
|
19
|
+
// so failing to install tracing must never be a silent no-op — that is how
|
|
20
|
+
// stale .trace-results.db databases go unnoticed for months.
|
|
21
|
+
console.error(`[lmao] trace-preload: no package.json found above ${process.cwd()} ` +
|
|
22
|
+
`(searched: ${target.searched.join(', ')}). Test tracing is DISABLED for this run — ` +
|
|
23
|
+
'run bun test from inside a package.');
|
|
27
24
|
}
|
|
@@ -178,8 +178,21 @@ export type SpanFn<Ctx extends OpContext> = {
|
|
|
178
178
|
*
|
|
179
179
|
* Use when the callback is guaranteed sync and should return immediately
|
|
180
180
|
* with a Result envelope.
|
|
181
|
+
*
|
|
182
|
+
* WHY: mirrors SpanFn's dual dispatch. An Op carries its own frozen callsite
|
|
183
|
+
* plan; an inline closure borrows the enclosing span's plan, so a sync callback
|
|
184
|
+
* that captures locals does not need a module-level Op just to be traced.
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* const result = ctx.spanSync('validate', (childCtx) => {
|
|
188
|
+
* childCtx.tag.step('validation');
|
|
189
|
+
* return childCtx.ok({ valid: true });
|
|
190
|
+
* });
|
|
181
191
|
*/
|
|
182
|
-
export type SpanSyncFn<Ctx extends OpContext> =
|
|
192
|
+
export type SpanSyncFn<Ctx extends OpContext> = {
|
|
193
|
+
<S, E>(name: string, op: Op<Ctx, [], S, E>): Result<S, E>;
|
|
194
|
+
<S, E>(name: string, fn: (ctx: SpanContext<Ctx>) => Result<S, E>): Result<S, E>;
|
|
195
|
+
};
|
|
183
196
|
/**
|
|
184
197
|
* SpanContext - what op functions receive.
|
|
185
198
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spanContextTypes.d.ts","sourceRoot":"","sources":["../../../../src/lib/opContext/spanContextTypes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"spanContextTypes.d.ts","sourceRoot":"","sources":["../../../../src/lib/opContext/spanContextTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spanContext.d.ts","sourceRoot":"","sources":["../../../src/lib/spanContext.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,kCAAkC,CAAC;AAI1C,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAkC,MAAM,sBAAsB,CAAC;AAC/G,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAWjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAO/G,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAiB,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAUxE;;;GAGG;AACH,eAAO,MAAM,mBAAmB,eAAiC,CAAC;AAOlE;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,SAAS,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;IACxE;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACjD;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;CACjF,CAAC;
|
|
1
|
+
{"version":3,"file":"spanContext.d.ts","sourceRoot":"","sources":["../../../src/lib/spanContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -506,10 +506,13 @@ export function createSpanContextClass(_schemaOnly, logBinding, capabilities = R
|
|
|
506
506
|
}
|
|
507
507
|
};
|
|
508
508
|
this.span = span;
|
|
509
|
-
this.spanSync = function spanSync(name,
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
509
|
+
this.spanSync = function spanSync(name, opOrFn) {
|
|
510
|
+
// WHY: spanSync mirrors span()'s dual dispatch. resolveSpanTarget yields the Op's own
|
|
511
|
+
// frozen callsite plan, or the enclosing span's plan when the target is an inline
|
|
512
|
+
// closure, so a sync callback that captures locals needs no module-level Op.
|
|
513
|
+
const target = resolveSpanTarget(opOrFn, self._physicalLayoutPlan, self._spanBuffer._opMetadata);
|
|
514
|
+
const childCtx = asSpanContextInstance(target.callsitePlan.newCtx0(self));
|
|
515
|
+
return self.spanSync0(0, name, childCtx, target.callsitePlan, target.fn);
|
|
513
516
|
};
|
|
514
517
|
}
|
|
515
518
|
//#endregion smoo/lmao!n/context-flow-span-promise
|
|
@@ -127,18 +127,23 @@ export declare namespace it {
|
|
|
127
127
|
var todo: bunTest.Test<[]>;
|
|
128
128
|
}
|
|
129
129
|
export { _afterAll as afterAll, _afterEach as afterEach, _beforeAll as beforeAll, _beforeEach as beforeEach, _expect as expect, };
|
|
130
|
-
export type
|
|
131
|
-
/**
|
|
132
|
-
|
|
130
|
+
export type AutoSetupTarget = {
|
|
131
|
+
/** Root of the single consumer package whose tests are running. */
|
|
132
|
+
readonly packageRoot: string;
|
|
133
|
+
} | {
|
|
134
|
+
/** Workspace root for a cross-package run, with its member package roots. */
|
|
135
|
+
readonly workspaceRoot: string;
|
|
136
|
+
readonly packageRoots: readonly string[];
|
|
133
137
|
};
|
|
134
138
|
/**
|
|
135
|
-
*
|
|
136
|
-
*
|
|
139
|
+
* Create the root tracer for the current bun test run from a resolved consumer
|
|
140
|
+
* target (see `resolveConsumerTarget` in `./consumer-package.js`).
|
|
137
141
|
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
* merged-schema behavior
|
|
142
|
+
* A package target imports that package's own `src/test-suite-tracer.ts` (if
|
|
143
|
+
* present) and writes `.trace-results.db` at the package root. A
|
|
144
|
+
* workspace-root target scans the member packages' tracer modules so
|
|
145
|
+
* cross-package runs keep the merged-schema behavior, writing the DB at the
|
|
146
|
+
* workspace root.
|
|
142
147
|
*
|
|
143
148
|
* Per-package `useTestSpan()` delegates to the global `useTestSpan()` from this
|
|
144
149
|
* module which checks `_activeSuiteTracer` — set by the root preload via
|
|
@@ -146,10 +151,10 @@ export type AutoSetupOptions = {
|
|
|
146
151
|
*
|
|
147
152
|
* @example
|
|
148
153
|
* ```ts
|
|
149
|
-
* //
|
|
150
|
-
*
|
|
151
|
-
* await autoSetupBunTestTracing({
|
|
154
|
+
* // bun trace preload
|
|
155
|
+
* const target = resolveConsumerTarget(process.cwd());
|
|
156
|
+
* if (target.kind === 'package') await autoSetupBunTestTracing({ packageRoot: target.packageRoot });
|
|
152
157
|
* ```
|
|
153
158
|
*/
|
|
154
|
-
export declare function autoSetupBunTestTracing(
|
|
159
|
+
export declare function autoSetupBunTestTracing(target: AutoSetupTarget): Promise<boolean>;
|
|
155
160
|
//# sourceMappingURL=bun-harness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-harness.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/bun-harness.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC;AACpC,OAAO,EACL,QAAQ,IAAI,SAAS,EACrB,SAAS,IAAI,UAAU,EACvB,SAAS,IAAI,UAAU,EACvB,UAAU,IAAI,WAAW,EACzB,QAAQ,IAAI,SAAS,EACrB,MAAM,IAAI,OAAO,EACjB,EAAE,IAAI,GAAG,EAEV,MAAM,UAAU,CAAC;AAKlB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAA4C,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrH,OAAO,EAAE,CAAC,EAAE,MAAM,sBAAsB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA8B3C,KAAK,kBAAkB,CAAC,CAAC,SAAS,gBAAgB,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,KAAK,sBAAsB,GAAG;IAAE,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAA;CAAE,CAAC;AAC1E,KAAK,aAAa,CAAC,IAAI,SAAS,YAAY,IAAI,sBAAsB,GAAG,IAAI,CAAC;AAC9E,KAAK,WAAW,GAAG,OAAO,SAAS,CAAC;AACpC,KAAK,KAAK,GAAG,OAAO,GAAG,CAAC;AAOxB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,WAAW,CAAC;IACtB,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,KAAK,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AASD,KAAK,sBAAsB,CAAC,CAAC,SAAS,gBAAgB,EAAE,IAAI,SAAS,YAAY,IAC/E,CAAC,SAAS,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,IAAI,EAAE,MAAM,OAAO,CAAC,GACpE,gBAAgB,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,GACzG,KAAK,CAAC;AAEZ,MAAM,MAAM,mBAAmB,CAAC,IAAI,SAAS,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI;IAClF;;;;OAIG;IACH,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,IAAI,CAAC;CACzB,CAAC;AAsLF,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,gBAAgB;IAC/D,KAAK,IAAI,IAAI,CAAC;IACd,WAAW,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACrC,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,iBAAiB,CAAC,OAAO,SAAS,kBAAkB,EAAE,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC;CACxF;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,gBAAgB;IAC5D,aAAa,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACxC,WAAW,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACrC,wBAAwB,IAAI,IAAI,CAAC;CAClC;AAED,MAAM,MAAM,yBAAyB,CACnC,CAAC,SAAS,gBAAgB,EAC1B,IAAI,SAAS,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAC9C,qBAAqB,CAAC,sBAAsB,CAAC,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE1E,MAAM,MAAM,UAAU,CACpB,CAAC,SAAS,gBAAgB,EAC1B,IAAI,SAAS,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAC9C,yBAAyB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAEvC,MAAM,WAAW,mBAAmB;IAClC,KAAK,IAAI,IAAI,CAAC;IACd,WAAW,IAAI,OAAO,CAAC;IACvB,SAAS,IAAI,OAAO,CAAC;IACrB,iBAAiB,CAAC,OAAO,SAAS,kBAAkB,EAAE,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC;CACxF;AAID,iGAAiG;AACjG,wBAAgB,oBAAoB,IAAI,mBAAmB,GAAG,IAAI,CAEjE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAIvE;AAED,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,gBAAgB,EAC/D,OAAO,EAAE,CAAC,EACV,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,GACtD,kBAAkB,CAAC,sBAAsB,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC;AACzE,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,gBAAgB,EAAE,IAAI,SAAS,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EACjH,OAAO,EAAE,CAAC,EACV,OAAO,CAAC,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAClC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAatE;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,EACzD,OAAO,EAAE,CAAC,EACV,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,YAAY,CAAA;CAAE,GAC5C;IACD,WAAW,EAAE,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,SAAS,EAAE,CAAC,CAAC;IACb,gBAAgB,EAAE,YAAY,GAAG,SAAS,CAAC;CAC5C,CAMA;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,gBAAgB,EACvD,OAAO,EAAE,CAAC,EACV,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,GACtD,qBAAqB,CAAC,sBAAsB,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC;AAC5E,wBAAgB,cAAc,CAAC,CAAC,SAAS,gBAAgB,EAAE,IAAI,SAAS,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EACzG,OAAO,EAAE,CAAC,EACV,OAAO,CAAC,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAClC,qBAAqB,CAAC,sBAAsB,CAAC,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AA6OzE,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAoE9G;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,kBAAkB,EAAE,aAAa,EAAE,OAAO,GAAG,OAAO,CAwErG;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,gBAAgB,KAAK,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAevF;;;;;;GAMG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAWpD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,QASpD;yBATe,QAAQ;;;;AA6ExB,4EAA4E;AAC5E,wBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAerE;yBAfe,EAAE;;;;AAyBlB,OAAO,EACL,SAAS,IAAI,QAAQ,EACrB,UAAU,IAAI,SAAS,EACvB,UAAU,IAAI,SAAS,EACvB,WAAW,IAAI,UAAU,EACzB,OAAO,IAAI,MAAM,GAClB,CAAC;AAMF,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"bun-harness.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/bun-harness.ts"],"names":[],"mappings":"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"}
|
|
@@ -690,13 +690,14 @@ assignOptionalBoundTestFunction(it, 'if', _it, _it);
|
|
|
690
690
|
// Re-export everything else unchanged
|
|
691
691
|
export { _afterAll as afterAll, _afterEach as afterEach, _beforeAll as beforeAll, _beforeEach as beforeEach, _expect as expect, };
|
|
692
692
|
/**
|
|
693
|
-
*
|
|
694
|
-
*
|
|
693
|
+
* Create the root tracer for the current bun test run from a resolved consumer
|
|
694
|
+
* target (see `resolveConsumerTarget` in `./consumer-package.js`).
|
|
695
695
|
*
|
|
696
|
-
*
|
|
697
|
-
*
|
|
698
|
-
*
|
|
699
|
-
* merged-schema behavior
|
|
696
|
+
* A package target imports that package's own `src/test-suite-tracer.ts` (if
|
|
697
|
+
* present) and writes `.trace-results.db` at the package root. A
|
|
698
|
+
* workspace-root target scans the member packages' tracer modules so
|
|
699
|
+
* cross-package runs keep the merged-schema behavior, writing the DB at the
|
|
700
|
+
* workspace root.
|
|
700
701
|
*
|
|
701
702
|
* Per-package `useTestSpan()` delegates to the global `useTestSpan()` from this
|
|
702
703
|
* module which checks `_activeSuiteTracer` — set by the root preload via
|
|
@@ -704,48 +705,37 @@ export { _afterAll as afterAll, _afterEach as afterEach, _beforeAll as beforeAll
|
|
|
704
705
|
*
|
|
705
706
|
* @example
|
|
706
707
|
* ```ts
|
|
707
|
-
* //
|
|
708
|
-
*
|
|
709
|
-
* await autoSetupBunTestTracing({
|
|
708
|
+
* // bun trace preload
|
|
709
|
+
* const target = resolveConsumerTarget(process.cwd());
|
|
710
|
+
* if (target.kind === 'package') await autoSetupBunTestTracing({ packageRoot: target.packageRoot });
|
|
710
711
|
* ```
|
|
711
712
|
*/
|
|
712
|
-
export async function autoSetupBunTestTracing(
|
|
713
|
-
const { join
|
|
714
|
-
const { existsSync
|
|
715
|
-
const
|
|
716
|
-
if (!existsSync(packagesDir))
|
|
717
|
-
return false;
|
|
718
|
-
const installSuite = (opContext, mergedSchema) => {
|
|
713
|
+
export async function autoSetupBunTestTracing(target) {
|
|
714
|
+
const { join } = await import('node:path');
|
|
715
|
+
const { existsSync } = await import('node:fs');
|
|
716
|
+
const installSuite = (opContext, mergedSchema, dbDir) => {
|
|
719
717
|
const hasCustomSchema = Object.keys(mergedSchema).length > 0;
|
|
720
718
|
const suite = makeBunTestSuiteTracer(opContext, {
|
|
721
|
-
sqlite: { dbPath: '.trace-results.db' },
|
|
719
|
+
sqlite: { dbPath: join(dbDir, '.trace-results.db') },
|
|
722
720
|
extraTestColumns: hasCustomSchema && isSchemaFieldsRecord(mergedSchema) ? mergedSchema : undefined,
|
|
723
721
|
});
|
|
724
722
|
suite.setupBunTestSuiteTracing();
|
|
725
723
|
return true;
|
|
726
724
|
};
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
const isPackageLocalRun = relativeToPackagesDir !== '' &&
|
|
730
|
-
!relativeToPackagesDir.startsWith('..') &&
|
|
731
|
-
!relativeToPackagesDir.startsWith(`.${sep}`);
|
|
732
|
-
if (isPackageLocalRun) {
|
|
733
|
-
const [packageName] = relativeToPackagesDir.split(sep);
|
|
734
|
-
const tracerPath = join(packagesDir, packageName, 'src', 'test-suite-tracer.ts');
|
|
725
|
+
if ('packageRoot' in target) {
|
|
726
|
+
const tracerPath = join(target.packageRoot, 'src', 'test-suite-tracer.ts');
|
|
735
727
|
if (!existsSync(tracerPath)) {
|
|
736
|
-
return installSuite(defaultAutoSetupOpContext, {});
|
|
728
|
+
return installSuite(defaultAutoSetupOpContext, {}, target.packageRoot);
|
|
737
729
|
}
|
|
738
730
|
const mod = await import(tracerPath);
|
|
739
731
|
const mergedSchema = isSchemaFieldsRecord(mod.extraTestColumns) ? mod.extraTestColumns : {};
|
|
740
732
|
const opContext = isOpContextBindingLike(mod.opContext) ? mod.opContext : defaultAutoSetupOpContext;
|
|
741
|
-
return installSuite(opContext, mergedSchema);
|
|
733
|
+
return installSuite(opContext, mergedSchema, target.packageRoot);
|
|
742
734
|
}
|
|
743
735
|
const mergedSchema = {};
|
|
744
736
|
let opContext = null;
|
|
745
|
-
for (const
|
|
746
|
-
|
|
747
|
-
continue;
|
|
748
|
-
const tracerPath = join(packagesDir, entry.name, 'src', 'test-suite-tracer.ts');
|
|
737
|
+
for (const packageRoot of target.packageRoots) {
|
|
738
|
+
const tracerPath = join(packageRoot, 'src', 'test-suite-tracer.ts');
|
|
749
739
|
if (!existsSync(tracerPath))
|
|
750
740
|
continue;
|
|
751
741
|
const mod = await import(tracerPath);
|
|
@@ -758,5 +748,5 @@ export async function autoSetupBunTestTracing(options) {
|
|
|
758
748
|
opContext = mod.opContext;
|
|
759
749
|
}
|
|
760
750
|
}
|
|
761
|
-
return installSuite(opContext ?? defaultAutoSetupOpContext, mergedSchema);
|
|
751
|
+
return installSuite(opContext ?? defaultAutoSetupOpContext, mergedSchema, target.workspaceRoot);
|
|
762
752
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the consumer package whose tests are running.
|
|
3
|
+
*
|
|
4
|
+
* WHY nearest-package.json, anchored on cwd: standard resolution semantics
|
|
5
|
+
* identify "the package whose tests are running" identically in every layout —
|
|
6
|
+
* a monorepo checkout, a consumer of the Bun isolated store
|
|
7
|
+
* (`node_modules/.bun/…`), or plain node_modules. This module ships inside an
|
|
8
|
+
* installed dependency, so nothing may ever be derived from its own file
|
|
9
|
+
* location; the test process cwd is the only truthful anchor.
|
|
10
|
+
*/
|
|
11
|
+
export type ConsumerTarget = {
|
|
12
|
+
readonly kind: 'package';
|
|
13
|
+
readonly packageRoot: string;
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: 'workspace-root';
|
|
16
|
+
readonly workspaceRoot: string;
|
|
17
|
+
readonly packageRoots: readonly string[];
|
|
18
|
+
} | {
|
|
19
|
+
readonly kind: 'not-found';
|
|
20
|
+
readonly searched: readonly string[];
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Walk up from `startDir` to the nearest directory holding a `package.json`.
|
|
24
|
+
* A nearest package.json that declares `workspaces` is a workspace-root run
|
|
25
|
+
* (cwd sits at or under the root but inside no member package — a member's own
|
|
26
|
+
* package.json would have been nearer); its members are expanded for the
|
|
27
|
+
* cross-package tracer scan.
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveConsumerTarget(startDir: string): ConsumerTarget;
|
|
30
|
+
//# sourceMappingURL=consumer-package.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-package.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/consumer-package.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC7G;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AA6CzE;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAuBtE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the consumer package whose tests are running.
|
|
3
|
+
*
|
|
4
|
+
* WHY nearest-package.json, anchored on cwd: standard resolution semantics
|
|
5
|
+
* identify "the package whose tests are running" identically in every layout —
|
|
6
|
+
* a monorepo checkout, a consumer of the Bun isolated store
|
|
7
|
+
* (`node_modules/.bun/…`), or plain node_modules. This module ships inside an
|
|
8
|
+
* installed dependency, so nothing may ever be derived from its own file
|
|
9
|
+
* location; the test process cwd is the only truthful anchor.
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
12
|
+
import { dirname, join, resolve } from 'node:path';
|
|
13
|
+
/**
|
|
14
|
+
* WHY a hand-rolled structural probe instead of Typia: this runs on the
|
|
15
|
+
* preload bootstrap path, before the validation toolchain is guaranteed to be
|
|
16
|
+
* registered, and a malformed package.json must degrade to "plain package
|
|
17
|
+
* root", never to a crash that disables tracing.
|
|
18
|
+
*/
|
|
19
|
+
function readWorkspacePatterns(packageJsonPath) {
|
|
20
|
+
try {
|
|
21
|
+
const parsed = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
22
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
23
|
+
return null;
|
|
24
|
+
const workspaces = Reflect.get(parsed, 'workspaces');
|
|
25
|
+
const patterns = Array.isArray(workspaces) ? workspaces : null;
|
|
26
|
+
if (!patterns)
|
|
27
|
+
return null;
|
|
28
|
+
return patterns.filter((entry) => typeof entry === 'string');
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Expand workspace member patterns to existing package roots. Supports the
|
|
36
|
+
* forms Bun workspaces support in practice: a literal directory and a single
|
|
37
|
+
* trailing `/*` glob.
|
|
38
|
+
*/
|
|
39
|
+
function expandWorkspaceMembers(workspaceRoot, patterns) {
|
|
40
|
+
const roots = [];
|
|
41
|
+
for (const pattern of patterns) {
|
|
42
|
+
if (pattern.endsWith('/*')) {
|
|
43
|
+
const parent = join(workspaceRoot, pattern.slice(0, -2));
|
|
44
|
+
if (!existsSync(parent))
|
|
45
|
+
continue;
|
|
46
|
+
for (const entry of readdirSync(parent, { withFileTypes: true })) {
|
|
47
|
+
if (!entry.isDirectory())
|
|
48
|
+
continue;
|
|
49
|
+
const candidate = join(parent, entry.name);
|
|
50
|
+
if (existsSync(join(candidate, 'package.json')))
|
|
51
|
+
roots.push(candidate);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
const candidate = join(workspaceRoot, pattern);
|
|
56
|
+
if (existsSync(join(candidate, 'package.json')))
|
|
57
|
+
roots.push(candidate);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return roots;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Walk up from `startDir` to the nearest directory holding a `package.json`.
|
|
64
|
+
* A nearest package.json that declares `workspaces` is a workspace-root run
|
|
65
|
+
* (cwd sits at or under the root but inside no member package — a member's own
|
|
66
|
+
* package.json would have been nearer); its members are expanded for the
|
|
67
|
+
* cross-package tracer scan.
|
|
68
|
+
*/
|
|
69
|
+
export function resolveConsumerTarget(startDir) {
|
|
70
|
+
const searched = [];
|
|
71
|
+
let directory = resolve(startDir);
|
|
72
|
+
while (true) {
|
|
73
|
+
const packageJsonPath = join(directory, 'package.json');
|
|
74
|
+
searched.push(packageJsonPath);
|
|
75
|
+
if (existsSync(packageJsonPath)) {
|
|
76
|
+
const workspacePatterns = readWorkspacePatterns(packageJsonPath);
|
|
77
|
+
if (workspacePatterns !== null) {
|
|
78
|
+
return {
|
|
79
|
+
kind: 'workspace-root',
|
|
80
|
+
workspaceRoot: directory,
|
|
81
|
+
packageRoots: expandWorkspaceMembers(directory, workspacePatterns),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return { kind: 'package', packageRoot: directory };
|
|
85
|
+
}
|
|
86
|
+
const parent = dirname(directory);
|
|
87
|
+
if (parent === directory) {
|
|
88
|
+
return { kind: 'not-found', searched };
|
|
89
|
+
}
|
|
90
|
+
directory = parent;
|
|
91
|
+
}
|
|
92
|
+
}
|
package/package.json
CHANGED
package/src/bun/trace-preload.ts
CHANGED
|
@@ -2,29 +2,25 @@
|
|
|
2
2
|
* Bun test tracing preload.
|
|
3
3
|
*
|
|
4
4
|
* Registers LMAO SQLite-backed test tracing after the Typia preload has already
|
|
5
|
-
* been registered in bunfig.
|
|
5
|
+
* been registered in bunfig. Wiring-only: consumer resolution lives in
|
|
6
|
+
* `../lib/testing/consumer-package.js`.
|
|
6
7
|
*/
|
|
7
8
|
|
|
8
|
-
import { existsSync } from 'node:fs';
|
|
9
|
-
import { dirname, join, resolve } from 'node:path';
|
|
10
9
|
import { autoSetupBunTestTracing } from '../lib/testing/bun-harness.js';
|
|
10
|
+
import { resolveConsumerTarget } from '../lib/testing/consumer-package.js';
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const packagesDir = findWorkspacePackagesDir(process.cwd());
|
|
28
|
-
if (packagesDir) {
|
|
29
|
-
await autoSetupBunTestTracing({ packagesDir });
|
|
12
|
+
const target = resolveConsumerTarget(process.cwd());
|
|
13
|
+
if (target.kind === 'package') {
|
|
14
|
+
await autoSetupBunTestTracing({ packageRoot: target.packageRoot });
|
|
15
|
+
} else if (target.kind === 'workspace-root') {
|
|
16
|
+
await autoSetupBunTestTracing({ workspaceRoot: target.workspaceRoot, packageRoots: target.packageRoots });
|
|
17
|
+
} else {
|
|
18
|
+
// WHY loud: this preload is only ever loaded on purpose (bunfig `preload`),
|
|
19
|
+
// so failing to install tracing must never be a silent no-op — that is how
|
|
20
|
+
// stale .trace-results.db databases go unnoticed for months.
|
|
21
|
+
console.error(
|
|
22
|
+
`[lmao] trace-preload: no package.json found above ${process.cwd()} ` +
|
|
23
|
+
`(searched: ${target.searched.join(', ')}). Test tracing is DISABLED for this run — ` +
|
|
24
|
+
'run bun test from inside a package.',
|
|
25
|
+
);
|
|
30
26
|
}
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
} from '../schema/systemSchema.js';
|
|
21
21
|
import { createSpanBuffer } from '../spanBuffer.js';
|
|
22
22
|
import { TestTracer } from '../tracers/TestTracer.js';
|
|
23
|
+
import { iterateSpanChildren } from '../traceTopology.js';
|
|
23
24
|
import type { AnySpanBuffer, SpanBuffer } from '../types.js';
|
|
24
25
|
import { createTestOpMetadata, createTestTraceRoot, createTestTracerOptions } from './test-helpers.js';
|
|
25
26
|
|
|
@@ -151,6 +152,84 @@ describe('Span Lifecycle', () => {
|
|
|
151
152
|
|
|
152
153
|
expect(result.success).toBe(true);
|
|
153
154
|
});
|
|
155
|
+
|
|
156
|
+
it('should support spanSync with an inline sync closure', async () => {
|
|
157
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
158
|
+
const captured = 'closure-local';
|
|
159
|
+
|
|
160
|
+
const result = await tracer.trace('root-task', async (rootCtx) => {
|
|
161
|
+
const childResult = rootCtx.spanSync('sync-closure', (childCtx) => {
|
|
162
|
+
childCtx.tag.spanName('sync-closure');
|
|
163
|
+
return childCtx.ok(captured);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
expect(childResult).not.toBeInstanceOf(Promise);
|
|
167
|
+
expect(childResult.success).toBe(true);
|
|
168
|
+
if (!childResult.success) throw new Error('expected closure child to succeed');
|
|
169
|
+
expect(childResult.value).toBe(captured);
|
|
170
|
+
return rootCtx.ok('root-ok');
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
expect(result.success).toBe(true);
|
|
174
|
+
|
|
175
|
+
const rootBuffer = tracer.rootBuffers[0];
|
|
176
|
+
if (!rootBuffer) throw new Error('expected a root buffer');
|
|
177
|
+
expect(Array.from(iterateSpanChildren(rootBuffer))).toHaveLength(1);
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it('should return Err synchronously from a spanSync closure', async () => {
|
|
181
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
182
|
+
|
|
183
|
+
const result = await tracer.trace('root-task', async (rootCtx) => {
|
|
184
|
+
const childResult = rootCtx.spanSync('sync-closure-err', (childCtx) =>
|
|
185
|
+
childCtx.err(VALIDATION_ERROR({ field: 'email', message: 'Invalid email' })),
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
expect(childResult).not.toBeInstanceOf(Promise);
|
|
189
|
+
expect(childResult.success).toBe(false);
|
|
190
|
+
if (childResult.success) throw new Error('expected closure child to fail');
|
|
191
|
+
expect(childResult.error.code).toBe('VALIDATION_ERROR');
|
|
192
|
+
expect(childResult.error.field).toBe('email');
|
|
193
|
+
return rootCtx.ok('root-ok');
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
expect(result.success).toBe(true);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it('should give a spanSync closure its own child context and nest further spans under it', async () => {
|
|
200
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
201
|
+
|
|
202
|
+
const result = await tracer.trace('root-task', async (rootCtx) => {
|
|
203
|
+
const childResult = rootCtx.spanSync('sync-parent', (childCtx) => {
|
|
204
|
+
// WHY: a closure target must still receive a fresh child span context, not the
|
|
205
|
+
// enclosing one, otherwise nested spans would attach to the wrong parent.
|
|
206
|
+
expect(childCtx).not.toBe(rootCtx);
|
|
207
|
+
|
|
208
|
+
const grandchildResult = childCtx.spanSync('sync-grandchild', (grandchildCtx) => {
|
|
209
|
+
expect(grandchildCtx).not.toBe(childCtx);
|
|
210
|
+
expect(grandchildCtx).not.toBe(rootCtx);
|
|
211
|
+
return grandchildCtx.ok('grandchild-ok');
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
if (!grandchildResult.success) throw new Error('expected grandchild to succeed');
|
|
215
|
+
return childCtx.ok(grandchildResult.value);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
if (!childResult.success) throw new Error('expected child to succeed');
|
|
219
|
+
expect(childResult.value).toBe('grandchild-ok');
|
|
220
|
+
return rootCtx.ok('root-ok');
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
expect(result.success).toBe(true);
|
|
224
|
+
|
|
225
|
+
const rootBuffer = tracer.rootBuffers[0];
|
|
226
|
+
if (!rootBuffer) throw new Error('expected a root buffer');
|
|
227
|
+
const children = Array.from(iterateSpanChildren(rootBuffer));
|
|
228
|
+
expect(children).toHaveLength(1);
|
|
229
|
+
const childBuffer = children[0];
|
|
230
|
+
if (!childBuffer) throw new Error('expected a child buffer');
|
|
231
|
+
expect(Array.from(iterateSpanChildren(childBuffer))).toHaveLength(1);
|
|
232
|
+
});
|
|
154
233
|
});
|
|
155
234
|
|
|
156
235
|
describe('Fluent Result API', () => {
|
|
@@ -229,8 +229,21 @@ export type SpanFn<Ctx extends OpContext> = {
|
|
|
229
229
|
*
|
|
230
230
|
* Use when the callback is guaranteed sync and should return immediately
|
|
231
231
|
* with a Result envelope.
|
|
232
|
+
*
|
|
233
|
+
* WHY: mirrors SpanFn's dual dispatch. An Op carries its own frozen callsite
|
|
234
|
+
* plan; an inline closure borrows the enclosing span's plan, so a sync callback
|
|
235
|
+
* that captures locals does not need a module-level Op just to be traced.
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* const result = ctx.spanSync('validate', (childCtx) => {
|
|
239
|
+
* childCtx.tag.step('validation');
|
|
240
|
+
* return childCtx.ok({ valid: true });
|
|
241
|
+
* });
|
|
232
242
|
*/
|
|
233
|
-
export type SpanSyncFn<Ctx extends OpContext> =
|
|
243
|
+
export type SpanSyncFn<Ctx extends OpContext> = {
|
|
244
|
+
<S, E>(name: string, op: Op<Ctx, [], S, E>): Result<S, E>;
|
|
245
|
+
<S, E>(name: string, fn: (ctx: SpanContext<Ctx>) => Result<S, E>): Result<S, E>;
|
|
246
|
+
};
|
|
234
247
|
|
|
235
248
|
// =============================================================================
|
|
236
249
|
// SPAN CONTEXT TYPE
|
package/src/lib/spanContext.ts
CHANGED
|
@@ -103,10 +103,10 @@ type SpanDispatchFn<Ctx extends OpContext, Args extends unknown[] = unknown[], S
|
|
|
103
103
|
...args: Args
|
|
104
104
|
) => Result<S, E> | Promise<Result<S, E>>;
|
|
105
105
|
|
|
106
|
-
type SpanDispatchTarget<Ctx extends OpContext> = {
|
|
106
|
+
type SpanDispatchTarget<Ctx extends OpContext, S = unknown, E = unknown> = {
|
|
107
107
|
readonly callsitePlan: CallsitePlan<Ctx['logSchema'], Ctx>;
|
|
108
108
|
readonly opMetadata: OpMetadata;
|
|
109
|
-
readonly fn: SpanDispatchFn<Ctx>;
|
|
109
|
+
readonly fn: SpanDispatchFn<Ctx, unknown[], S, E>;
|
|
110
110
|
};
|
|
111
111
|
|
|
112
112
|
function isOpLike(value: unknown): value is Op<OpContext, unknown[], unknown, unknown> {
|
|
@@ -119,14 +119,18 @@ function isOpLike(value: unknown): value is Op<OpContext, unknown[], unknown, un
|
|
|
119
119
|
);
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
function isOpInstance<Ctx extends OpContext
|
|
122
|
+
function isOpInstance<Ctx extends OpContext, S = unknown, E = unknown>(
|
|
123
|
+
value: unknown,
|
|
124
|
+
): value is Op<Ctx, unknown[], S, E> {
|
|
123
125
|
return isOpLike(value);
|
|
124
126
|
}
|
|
125
127
|
|
|
126
128
|
// WHY: resolveSpanTarget() accepts either an Op instance or a raw span
|
|
127
129
|
// function. TypeScript needs an explicit predicate here to preserve the call
|
|
128
130
|
// signature when the non-Op branch passes `value` through as `fn`.
|
|
129
|
-
function isSpanDispatchFn<Ctx extends OpContext
|
|
131
|
+
function isSpanDispatchFn<Ctx extends OpContext, S = unknown, E = unknown>(
|
|
132
|
+
value: unknown,
|
|
133
|
+
): value is SpanDispatchFn<Ctx, unknown[], S, E> {
|
|
130
134
|
return typeof value === 'function';
|
|
131
135
|
}
|
|
132
136
|
|
|
@@ -156,12 +160,12 @@ function readStringArgument(args: IArguments, index: number, label: string): str
|
|
|
156
160
|
return value;
|
|
157
161
|
}
|
|
158
162
|
|
|
159
|
-
function resolveSpanTarget<Ctx extends OpContext>(
|
|
163
|
+
function resolveSpanTarget<Ctx extends OpContext, S = unknown, E = unknown>(
|
|
160
164
|
value: unknown,
|
|
161
165
|
fallbackPlan: CallsitePlan<Ctx['logSchema'], Ctx>,
|
|
162
166
|
fallbackMetadata: OpMetadata,
|
|
163
|
-
): SpanDispatchTarget<Ctx> {
|
|
164
|
-
if (isOpInstance<Ctx>(value)) {
|
|
167
|
+
): SpanDispatchTarget<Ctx, S, E> {
|
|
168
|
+
if (isOpInstance<Ctx, S, E>(value)) {
|
|
165
169
|
return {
|
|
166
170
|
callsitePlan: value.callsitePlan,
|
|
167
171
|
opMetadata: value.metadata,
|
|
@@ -169,7 +173,7 @@ function resolveSpanTarget<Ctx extends OpContext>(
|
|
|
169
173
|
};
|
|
170
174
|
}
|
|
171
175
|
|
|
172
|
-
if (!isSpanDispatchFn<Ctx>(value)) {
|
|
176
|
+
if (!isSpanDispatchFn<Ctx, S, E>(value)) {
|
|
173
177
|
throw new TypeError('span() expects an Op or function');
|
|
174
178
|
}
|
|
175
179
|
|
|
@@ -1042,10 +1046,16 @@ export function createSpanContextClass<Ctx extends OpContext>(
|
|
|
1042
1046
|
};
|
|
1043
1047
|
this.span = span;
|
|
1044
1048
|
|
|
1045
|
-
this.spanSync = function spanSync<S, E>(
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
+
this.spanSync = function spanSync<S, E>(
|
|
1050
|
+
name: string,
|
|
1051
|
+
opOrFn: Op<Ctx, [], S, E> | ((ctx: SpanContext<Ctx>) => Result<S, E>),
|
|
1052
|
+
): Result<S, E> {
|
|
1053
|
+
// WHY: spanSync mirrors span()'s dual dispatch. resolveSpanTarget yields the Op's own
|
|
1054
|
+
// frozen callsite plan, or the enclosing span's plan when the target is an inline
|
|
1055
|
+
// closure, so a sync callback that captures locals needs no module-level Op.
|
|
1056
|
+
const target = resolveSpanTarget<Ctx, S, E>(opOrFn, self._physicalLayoutPlan, self._spanBuffer._opMetadata);
|
|
1057
|
+
const childCtx = asSpanContextInstance<Ctx>(target.callsitePlan.newCtx0(self));
|
|
1058
|
+
return self.spanSync0(0, name, childCtx, target.callsitePlan, target.fn);
|
|
1049
1059
|
};
|
|
1050
1060
|
}
|
|
1051
1061
|
//#endregion smoo/lmao!n/context-flow-span-promise
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for consumer-package resolution.
|
|
3
|
+
*
|
|
4
|
+
* The resolver must identify "the package whose tests are running" by standard
|
|
5
|
+
* resolution semantics — nearest package.json above cwd — identically in every
|
|
6
|
+
* layout: a monorepo checkout, a consumer of the Bun isolated store, or plain
|
|
7
|
+
* node_modules. The regression this guards: resolution anchored on the
|
|
8
|
+
* library's own file location left consumer repos' .trace-results.db silently
|
|
9
|
+
* stale.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { afterEach, describe, expect, it } from 'bun:test';
|
|
13
|
+
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
14
|
+
import { tmpdir } from 'node:os';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { resolveConsumerTarget } from '../consumer-package.js';
|
|
17
|
+
|
|
18
|
+
const roots: string[] = [];
|
|
19
|
+
|
|
20
|
+
function makeTree(dirs: readonly string[], files: Readonly<Record<string, string>>): string {
|
|
21
|
+
const root = mkdtempSync(join(tmpdir(), 'lmao-consumer-'));
|
|
22
|
+
roots.push(root);
|
|
23
|
+
for (const dir of dirs) mkdirSync(join(root, dir), { recursive: true });
|
|
24
|
+
for (const [path, content] of Object.entries(files)) writeFileSync(join(root, path), content);
|
|
25
|
+
return root;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
for (const root of roots.splice(0)) rmSync(root, { recursive: true, force: true });
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
describe('resolveConsumerTarget', () => {
|
|
33
|
+
it('resolves the nearest package.json as the consumer package root', () => {
|
|
34
|
+
const root = makeTree(['repo/packages/some-app/src/deep'], {
|
|
35
|
+
'repo/package.json': '{"workspaces":["packages/*"]}',
|
|
36
|
+
'repo/packages/some-app/package.json': '{}',
|
|
37
|
+
});
|
|
38
|
+
const target = resolveConsumerTarget(join(root, 'repo', 'packages', 'some-app', 'src', 'deep'));
|
|
39
|
+
expect(target.kind).toBe('package');
|
|
40
|
+
if (target.kind === 'package') expect(target.packageRoot).toBe(join(root, 'repo', 'packages', 'some-app'));
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('resolves in a foreign consumer workspace regardless of where the library is installed', () => {
|
|
44
|
+
// Consumer repo whose lmao copy lives under the Bun isolated store — the
|
|
45
|
+
// resolver must anchor on cwd, never on any path related to the store.
|
|
46
|
+
const root = makeTree(
|
|
47
|
+
[
|
|
48
|
+
'repo/packages/consumer-pkg',
|
|
49
|
+
'repo/node_modules/.bun/@smoothbricks+lmao@0.0.0+cafebabe/node_modules/@smoothbricks/lmao',
|
|
50
|
+
],
|
|
51
|
+
{
|
|
52
|
+
'repo/package.json': '{"workspaces":["packages/*"]}',
|
|
53
|
+
'repo/packages/consumer-pkg/package.json': '{}',
|
|
54
|
+
},
|
|
55
|
+
);
|
|
56
|
+
const target = resolveConsumerTarget(join(root, 'repo', 'packages', 'consumer-pkg'));
|
|
57
|
+
expect(target.kind).toBe('package');
|
|
58
|
+
if (target.kind === 'package') expect(target.packageRoot).toBe(join(root, 'repo', 'packages', 'consumer-pkg'));
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('treats a nearest package.json with workspaces as a workspace-root run and expands members', () => {
|
|
62
|
+
const root = makeTree(['repo/packages/a', 'repo/packages/b', 'repo/packages/not-a-pkg', 'repo/tools/standalone'], {
|
|
63
|
+
'repo/package.json': '{"workspaces":["packages/*","tools/standalone"]}',
|
|
64
|
+
'repo/packages/a/package.json': '{}',
|
|
65
|
+
'repo/packages/b/package.json': '{}',
|
|
66
|
+
'repo/tools/standalone/package.json': '{}',
|
|
67
|
+
});
|
|
68
|
+
const target = resolveConsumerTarget(join(root, 'repo'));
|
|
69
|
+
expect(target.kind).toBe('workspace-root');
|
|
70
|
+
if (target.kind === 'workspace-root') {
|
|
71
|
+
expect(target.workspaceRoot).toBe(join(root, 'repo'));
|
|
72
|
+
expect([...target.packageRoots].sort()).toEqual([
|
|
73
|
+
join(root, 'repo', 'packages', 'a'),
|
|
74
|
+
join(root, 'repo', 'packages', 'b'),
|
|
75
|
+
join(root, 'repo', 'tools', 'standalone'),
|
|
76
|
+
]);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it('prefers a member package over the workspace root when cwd is inside the member', () => {
|
|
81
|
+
const root = makeTree(['repo/packages/member'], {
|
|
82
|
+
'repo/package.json': '{"workspaces":["packages/*"]}',
|
|
83
|
+
'repo/packages/member/package.json': '{}',
|
|
84
|
+
});
|
|
85
|
+
const target = resolveConsumerTarget(join(root, 'repo', 'packages', 'member'));
|
|
86
|
+
expect(target.kind).toBe('package');
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('classifies a workspace-root run from a non-member subdirectory', () => {
|
|
90
|
+
const root = makeTree(['repo/scripts', 'repo/packages/a'], {
|
|
91
|
+
'repo/package.json': '{"workspaces":["packages/*"]}',
|
|
92
|
+
'repo/packages/a/package.json': '{}',
|
|
93
|
+
});
|
|
94
|
+
const target = resolveConsumerTarget(join(root, 'repo', 'scripts'));
|
|
95
|
+
expect(target.kind).toBe('workspace-root');
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('degrades malformed package.json to a plain package root instead of crashing', () => {
|
|
99
|
+
const root = makeTree(['repo/pkg'], {
|
|
100
|
+
'repo/pkg/package.json': '{not json',
|
|
101
|
+
});
|
|
102
|
+
const target = resolveConsumerTarget(join(root, 'repo', 'pkg'));
|
|
103
|
+
expect(target.kind).toBe('package');
|
|
104
|
+
if (target.kind === 'package') expect(target.packageRoot).toBe(join(root, 'repo', 'pkg'));
|
|
105
|
+
});
|
|
106
|
+
});
|
|
@@ -972,19 +972,26 @@ export {
|
|
|
972
972
|
// Auto-discovery preload
|
|
973
973
|
// =============================================================================
|
|
974
974
|
|
|
975
|
-
export type
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
975
|
+
export type AutoSetupTarget =
|
|
976
|
+
| {
|
|
977
|
+
/** Root of the single consumer package whose tests are running. */
|
|
978
|
+
readonly packageRoot: string;
|
|
979
|
+
}
|
|
980
|
+
| {
|
|
981
|
+
/** Workspace root for a cross-package run, with its member package roots. */
|
|
982
|
+
readonly workspaceRoot: string;
|
|
983
|
+
readonly packageRoots: readonly string[];
|
|
984
|
+
};
|
|
979
985
|
|
|
980
986
|
/**
|
|
981
|
-
*
|
|
982
|
-
*
|
|
987
|
+
* Create the root tracer for the current bun test run from a resolved consumer
|
|
988
|
+
* target (see `resolveConsumerTarget` in `./consumer-package.js`).
|
|
983
989
|
*
|
|
984
|
-
*
|
|
985
|
-
*
|
|
986
|
-
*
|
|
987
|
-
* merged-schema behavior
|
|
990
|
+
* A package target imports that package's own `src/test-suite-tracer.ts` (if
|
|
991
|
+
* present) and writes `.trace-results.db` at the package root. A
|
|
992
|
+
* workspace-root target scans the member packages' tracer modules so
|
|
993
|
+
* cross-package runs keep the merged-schema behavior, writing the DB at the
|
|
994
|
+
* workspace root.
|
|
988
995
|
*
|
|
989
996
|
* Per-package `useTestSpan()` delegates to the global `useTestSpan()` from this
|
|
990
997
|
* module which checks `_activeSuiteTracer` — set by the root preload via
|
|
@@ -992,22 +999,19 @@ export type AutoSetupOptions = {
|
|
|
992
999
|
*
|
|
993
1000
|
* @example
|
|
994
1001
|
* ```ts
|
|
995
|
-
* //
|
|
996
|
-
*
|
|
997
|
-
* await autoSetupBunTestTracing({
|
|
1002
|
+
* // bun trace preload
|
|
1003
|
+
* const target = resolveConsumerTarget(process.cwd());
|
|
1004
|
+
* if (target.kind === 'package') await autoSetupBunTestTracing({ packageRoot: target.packageRoot });
|
|
998
1005
|
* ```
|
|
999
1006
|
*/
|
|
1000
|
-
export async function autoSetupBunTestTracing(
|
|
1001
|
-
const { join
|
|
1002
|
-
const { existsSync
|
|
1007
|
+
export async function autoSetupBunTestTracing(target: AutoSetupTarget): Promise<boolean> {
|
|
1008
|
+
const { join } = await import('node:path');
|
|
1009
|
+
const { existsSync } = await import('node:fs');
|
|
1003
1010
|
|
|
1004
|
-
const
|
|
1005
|
-
if (!existsSync(packagesDir)) return false;
|
|
1006
|
-
|
|
1007
|
-
const installSuite = (opContext: OpContextBinding, mergedSchema: Record<string, unknown>): boolean => {
|
|
1011
|
+
const installSuite = (opContext: OpContextBinding, mergedSchema: Record<string, unknown>, dbDir: string): boolean => {
|
|
1008
1012
|
const hasCustomSchema = Object.keys(mergedSchema).length > 0;
|
|
1009
1013
|
const suite = makeBunTestSuiteTracer(opContext, {
|
|
1010
|
-
sqlite: { dbPath: '.trace-results.db' },
|
|
1014
|
+
sqlite: { dbPath: join(dbDir, '.trace-results.db') },
|
|
1011
1015
|
extraTestColumns: hasCustomSchema && isSchemaFieldsRecord(mergedSchema) ? mergedSchema : undefined,
|
|
1012
1016
|
});
|
|
1013
1017
|
|
|
@@ -1015,34 +1019,25 @@ export async function autoSetupBunTestTracing(options: AutoSetupOptions): Promis
|
|
|
1015
1019
|
return true;
|
|
1016
1020
|
};
|
|
1017
1021
|
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
const isPackageLocalRun =
|
|
1021
|
-
relativeToPackagesDir !== '' &&
|
|
1022
|
-
!relativeToPackagesDir.startsWith('..') &&
|
|
1023
|
-
!relativeToPackagesDir.startsWith(`.${sep}`);
|
|
1024
|
-
|
|
1025
|
-
if (isPackageLocalRun) {
|
|
1026
|
-
const [packageName] = relativeToPackagesDir.split(sep);
|
|
1027
|
-
const tracerPath = join(packagesDir, packageName, 'src', 'test-suite-tracer.ts');
|
|
1022
|
+
if ('packageRoot' in target) {
|
|
1023
|
+
const tracerPath = join(target.packageRoot, 'src', 'test-suite-tracer.ts');
|
|
1028
1024
|
|
|
1029
1025
|
if (!existsSync(tracerPath)) {
|
|
1030
|
-
return installSuite(defaultAutoSetupOpContext, {});
|
|
1026
|
+
return installSuite(defaultAutoSetupOpContext, {}, target.packageRoot);
|
|
1031
1027
|
}
|
|
1032
1028
|
|
|
1033
1029
|
const mod = await import(tracerPath);
|
|
1034
1030
|
const mergedSchema = isSchemaFieldsRecord(mod.extraTestColumns) ? mod.extraTestColumns : {};
|
|
1035
1031
|
const opContext = isOpContextBindingLike(mod.opContext) ? mod.opContext : defaultAutoSetupOpContext;
|
|
1036
1032
|
|
|
1037
|
-
return installSuite(opContext, mergedSchema);
|
|
1033
|
+
return installSuite(opContext, mergedSchema, target.packageRoot);
|
|
1038
1034
|
}
|
|
1039
1035
|
|
|
1040
1036
|
const mergedSchema: Record<string, unknown> = {};
|
|
1041
1037
|
let opContext: OpContextBinding | null = null;
|
|
1042
1038
|
|
|
1043
|
-
for (const
|
|
1044
|
-
|
|
1045
|
-
const tracerPath = join(packagesDir, entry.name, 'src', 'test-suite-tracer.ts');
|
|
1039
|
+
for (const packageRoot of target.packageRoots) {
|
|
1040
|
+
const tracerPath = join(packageRoot, 'src', 'test-suite-tracer.ts');
|
|
1046
1041
|
if (!existsSync(tracerPath)) continue;
|
|
1047
1042
|
|
|
1048
1043
|
const mod = await import(tracerPath);
|
|
@@ -1058,5 +1053,5 @@ export async function autoSetupBunTestTracing(options: AutoSetupOptions): Promis
|
|
|
1058
1053
|
}
|
|
1059
1054
|
}
|
|
1060
1055
|
|
|
1061
|
-
return installSuite(opContext ?? defaultAutoSetupOpContext, mergedSchema);
|
|
1056
|
+
return installSuite(opContext ?? defaultAutoSetupOpContext, mergedSchema, target.workspaceRoot);
|
|
1062
1057
|
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the consumer package whose tests are running.
|
|
3
|
+
*
|
|
4
|
+
* WHY nearest-package.json, anchored on cwd: standard resolution semantics
|
|
5
|
+
* identify "the package whose tests are running" identically in every layout —
|
|
6
|
+
* a monorepo checkout, a consumer of the Bun isolated store
|
|
7
|
+
* (`node_modules/.bun/…`), or plain node_modules. This module ships inside an
|
|
8
|
+
* installed dependency, so nothing may ever be derived from its own file
|
|
9
|
+
* location; the test process cwd is the only truthful anchor.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
13
|
+
import { dirname, join, resolve } from 'node:path';
|
|
14
|
+
|
|
15
|
+
export type ConsumerTarget =
|
|
16
|
+
| { readonly kind: 'package'; readonly packageRoot: string }
|
|
17
|
+
| { readonly kind: 'workspace-root'; readonly workspaceRoot: string; readonly packageRoots: readonly string[] }
|
|
18
|
+
| { readonly kind: 'not-found'; readonly searched: readonly string[] };
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* WHY a hand-rolled structural probe instead of Typia: this runs on the
|
|
22
|
+
* preload bootstrap path, before the validation toolchain is guaranteed to be
|
|
23
|
+
* registered, and a malformed package.json must degrade to "plain package
|
|
24
|
+
* root", never to a crash that disables tracing.
|
|
25
|
+
*/
|
|
26
|
+
function readWorkspacePatterns(packageJsonPath: string): readonly string[] | null {
|
|
27
|
+
try {
|
|
28
|
+
const parsed: unknown = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
29
|
+
if (typeof parsed !== 'object' || parsed === null) return null;
|
|
30
|
+
const workspaces: unknown = Reflect.get(parsed, 'workspaces');
|
|
31
|
+
const patterns = Array.isArray(workspaces) ? workspaces : null;
|
|
32
|
+
if (!patterns) return null;
|
|
33
|
+
return patterns.filter((entry): entry is string => typeof entry === 'string');
|
|
34
|
+
} catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Expand workspace member patterns to existing package roots. Supports the
|
|
41
|
+
* forms Bun workspaces support in practice: a literal directory and a single
|
|
42
|
+
* trailing `/*` glob.
|
|
43
|
+
*/
|
|
44
|
+
function expandWorkspaceMembers(workspaceRoot: string, patterns: readonly string[]): readonly string[] {
|
|
45
|
+
const roots: string[] = [];
|
|
46
|
+
for (const pattern of patterns) {
|
|
47
|
+
if (pattern.endsWith('/*')) {
|
|
48
|
+
const parent = join(workspaceRoot, pattern.slice(0, -2));
|
|
49
|
+
if (!existsSync(parent)) continue;
|
|
50
|
+
for (const entry of readdirSync(parent, { withFileTypes: true })) {
|
|
51
|
+
if (!entry.isDirectory()) continue;
|
|
52
|
+
const candidate = join(parent, entry.name);
|
|
53
|
+
if (existsSync(join(candidate, 'package.json'))) roots.push(candidate);
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
const candidate = join(workspaceRoot, pattern);
|
|
57
|
+
if (existsSync(join(candidate, 'package.json'))) roots.push(candidate);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return roots;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Walk up from `startDir` to the nearest directory holding a `package.json`.
|
|
65
|
+
* A nearest package.json that declares `workspaces` is a workspace-root run
|
|
66
|
+
* (cwd sits at or under the root but inside no member package — a member's own
|
|
67
|
+
* package.json would have been nearer); its members are expanded for the
|
|
68
|
+
* cross-package tracer scan.
|
|
69
|
+
*/
|
|
70
|
+
export function resolveConsumerTarget(startDir: string): ConsumerTarget {
|
|
71
|
+
const searched: string[] = [];
|
|
72
|
+
let directory = resolve(startDir);
|
|
73
|
+
while (true) {
|
|
74
|
+
const packageJsonPath = join(directory, 'package.json');
|
|
75
|
+
searched.push(packageJsonPath);
|
|
76
|
+
if (existsSync(packageJsonPath)) {
|
|
77
|
+
const workspacePatterns = readWorkspacePatterns(packageJsonPath);
|
|
78
|
+
if (workspacePatterns !== null) {
|
|
79
|
+
return {
|
|
80
|
+
kind: 'workspace-root',
|
|
81
|
+
workspaceRoot: directory,
|
|
82
|
+
packageRoots: expandWorkspaceMembers(directory, workspacePatterns),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return { kind: 'package', packageRoot: directory };
|
|
86
|
+
}
|
|
87
|
+
const parent = dirname(directory);
|
|
88
|
+
if (parent === directory) {
|
|
89
|
+
return { kind: 'not-found', searched };
|
|
90
|
+
}
|
|
91
|
+
directory = parent;
|
|
92
|
+
}
|
|
93
|
+
}
|