@noego/wood 0.4.1 → 0.4.2
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/README.md +100 -2
- package/dist/client/global_polyfill.d.cts +1 -2
- package/dist/client/global_polyfill.d.ts +1 -2
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.d.cts +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/index.cjs +0 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/testing/browser.cjs +188 -34
- package/dist/testing/browser.cjs.map +1 -1
- package/dist/testing/browser.d.cts +6 -2
- package/dist/testing/browser.d.ts +6 -2
- package/dist/testing/browser.js +188 -35
- package/dist/testing/browser.js.map +1 -1
- package/dist/testing/create_controller_harness.cjs +3 -1
- package/dist/testing/create_controller_harness.cjs.map +1 -1
- package/dist/testing/create_controller_harness.d.cts +4 -2
- package/dist/testing/create_controller_harness.d.ts +4 -2
- package/dist/testing/create_controller_harness.js +3 -1
- package/dist/testing/create_controller_harness.js.map +1 -1
- package/dist/testing/index.cjs +3 -3
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.d.cts +5 -3
- package/dist/testing/index.d.ts +5 -3
- package/dist/testing/index.js +2 -2
- package/dist/testing/index.js.map +1 -1
- package/dist/trace-testing/index.cjs +3 -3
- package/dist/trace-testing/index.cjs.map +1 -1
- package/dist/trace-testing/index.d.cts +2 -3
- package/dist/trace-testing/index.d.ts +2 -3
- package/dist/trace-testing/index.js +3 -3
- package/dist/trace-testing/index.js.map +1 -1
- package/dist/trace-testing/trace_assertions.cjs +2 -46
- package/dist/trace-testing/trace_assertions.cjs.map +1 -1
- package/dist/trace-testing/trace_assertions.d.cts +1 -15
- package/dist/trace-testing/trace_assertions.d.ts +1 -15
- package/dist/trace-testing/trace_assertions.js +3 -45
- package/dist/trace-testing/trace_assertions.js.map +1 -1
- package/dist/trace-testing/trace_query.cjs +4 -115
- package/dist/trace-testing/trace_query.cjs.map +1 -1
- package/dist/trace-testing/trace_query.d.cts +1 -24
- package/dist/trace-testing/trace_query.d.ts +1 -24
- package/dist/trace-testing/trace_query.js +5 -112
- package/dist/trace-testing/trace_query.js.map +1 -1
- package/dist/trace-testing/trace_recorder.cjs +50 -0
- package/dist/trace-testing/trace_recorder.cjs.map +1 -0
- package/dist/trace-testing/trace_recorder.d.cts +12 -0
- package/dist/trace-testing/trace_recorder.d.ts +12 -0
- package/dist/trace-testing/trace_recorder.js +32 -0
- package/dist/trace-testing/trace_recorder.js.map +1 -0
- package/dist/tracing/index.cjs +0 -4
- package/dist/tracing/index.cjs.map +1 -1
- package/dist/tracing/index.d.cts +1 -1
- package/dist/tracing/index.d.ts +1 -1
- package/dist/tracing/index.js +1 -5
- package/dist/tracing/index.js.map +1 -1
- package/dist/tracing/trace_hub.cjs +0 -84
- package/dist/tracing/trace_hub.cjs.map +1 -1
- package/dist/tracing/trace_hub.d.cts +1 -16
- package/dist/tracing/trace_hub.d.ts +1 -16
- package/dist/tracing/trace_hub.js +0 -72
- package/dist/tracing/trace_hub.js.map +1 -1
- package/dist/tracing/trace_provider.cjs +0 -6
- package/dist/tracing/trace_provider.cjs.map +1 -1
- package/dist/tracing/trace_provider.d.cts +1 -3
- package/dist/tracing/trace_provider.d.ts +1 -3
- package/dist/tracing/trace_provider.js +0 -7
- package/dist/tracing/trace_provider.js.map +1 -1
- package/docs/browser-testing.md +84 -0
- package/package.json +2 -1
- package/dist/trace-testing/trace_scenario.cjs +0 -61
- package/dist/trace-testing/trace_scenario.cjs.map +0 -1
- package/dist/trace-testing/trace_scenario.d.cts +0 -27
- package/dist/trace-testing/trace_scenario.d.ts +0 -27
- package/dist/trace-testing/trace_scenario.js +0 -37
- package/dist/trace-testing/trace_scenario.js.map +0 -1
|
@@ -18,21 +18,21 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var trace_testing_exports = {};
|
|
20
20
|
__export(trace_testing_exports, {
|
|
21
|
+
TraceRecorder: () => import_trace_recorder.TraceRecorder,
|
|
21
22
|
createTraceAssertions: () => import_trace_assertions.createTraceAssertions,
|
|
22
23
|
createTraceQuery: () => import_trace_query.createTraceQuery,
|
|
23
|
-
createTraceScenario: () => import_trace_scenario.createTraceScenario,
|
|
24
24
|
matchesTrace: () => import_trace_query.matchesTrace,
|
|
25
25
|
readPath: () => import_trace_query.readPath
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(trace_testing_exports);
|
|
28
28
|
var import_trace_query = require("./trace_query.js");
|
|
29
29
|
var import_trace_assertions = require("./trace_assertions.js");
|
|
30
|
-
var
|
|
30
|
+
var import_trace_recorder = require("./trace_recorder.js");
|
|
31
31
|
// Annotate the CommonJS export names for ESM import in node:
|
|
32
32
|
0 && (module.exports = {
|
|
33
|
+
TraceRecorder,
|
|
33
34
|
createTraceAssertions,
|
|
34
35
|
createTraceQuery,
|
|
35
|
-
createTraceScenario,
|
|
36
36
|
matchesTrace,
|
|
37
37
|
readPath
|
|
38
38
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/trace-testing/index.ts"],"sourcesContent":["export {\n createTraceQuery,\n matchesTrace,\n readPath,\n type TraceCountSummary,\n type TraceFilter,\n type TraceQuery,\n} from './trace_query.js';\n\nexport {\n createTraceAssertions,\n type TraceAssertions,\n} from './trace_assertions.js';\n\nexport {\n
|
|
1
|
+
{"version":3,"sources":["../../src/trace-testing/index.ts"],"sourcesContent":["export {\n createTraceQuery,\n matchesTrace,\n readPath,\n type TraceCountSummary,\n type TraceFilter,\n type TraceQuery,\n} from './trace_query.js';\n\nexport {\n createTraceAssertions,\n type TraceAssertions,\n} from './trace_assertions.js';\n\nexport {\n TraceRecorder,\n type TraceRecorderEnableOptions,\n} from './trace_recorder.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAOO;AAEP,8BAGO;AAEP,4BAGO;","names":[]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export { TraceCountSummary, TraceFilter, TraceQuery, createTraceQuery, matchesTrace, readPath } from '
|
|
2
|
-
export {
|
|
3
|
-
export { TraceScenario, TraceScenarioOptions, TraceScenarioRunContext, createTraceScenario } from './trace_scenario.cjs';
|
|
1
|
+
export { TraceAssertions, TraceCountSummary, TraceFilter, TraceQuery, TraceRecorderEnableOptions, createTraceAssertions, createTraceQuery, matchesTrace, readPath } from '@noego/trace/testing';
|
|
2
|
+
export { TraceRecorder } from './trace_recorder.cjs';
|
|
4
3
|
import '../tracing/trace_hub.cjs';
|
|
5
4
|
import 'rxjs';
|
|
6
5
|
import '../tracing/trace_provider.cjs';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export { TraceCountSummary, TraceFilter, TraceQuery, createTraceQuery, matchesTrace, readPath } from '
|
|
2
|
-
export {
|
|
3
|
-
export { TraceScenario, TraceScenarioOptions, TraceScenarioRunContext, createTraceScenario } from './trace_scenario.js';
|
|
1
|
+
export { TraceAssertions, TraceCountSummary, TraceFilter, TraceQuery, TraceRecorderEnableOptions, createTraceAssertions, createTraceQuery, matchesTrace, readPath } from '@noego/trace/testing';
|
|
2
|
+
export { TraceRecorder } from './trace_recorder.js';
|
|
4
3
|
import '../tracing/trace_hub.js';
|
|
5
4
|
import 'rxjs';
|
|
6
5
|
import '../tracing/trace_provider.js';
|
|
@@ -7,12 +7,12 @@ import {
|
|
|
7
7
|
createTraceAssertions
|
|
8
8
|
} from "./trace_assertions.js";
|
|
9
9
|
import {
|
|
10
|
-
|
|
11
|
-
} from "./
|
|
10
|
+
TraceRecorder
|
|
11
|
+
} from "./trace_recorder.js";
|
|
12
12
|
export {
|
|
13
|
+
TraceRecorder,
|
|
13
14
|
createTraceAssertions,
|
|
14
15
|
createTraceQuery,
|
|
15
|
-
createTraceScenario,
|
|
16
16
|
matchesTrace,
|
|
17
17
|
readPath
|
|
18
18
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/trace-testing/index.ts"],"sourcesContent":["export {\n createTraceQuery,\n matchesTrace,\n readPath,\n type TraceCountSummary,\n type TraceFilter,\n type TraceQuery,\n} from './trace_query.js';\n\nexport {\n createTraceAssertions,\n type TraceAssertions,\n} from './trace_assertions.js';\n\nexport {\n
|
|
1
|
+
{"version":3,"sources":["../../src/trace-testing/index.ts"],"sourcesContent":["export {\n createTraceQuery,\n matchesTrace,\n readPath,\n type TraceCountSummary,\n type TraceFilter,\n type TraceQuery,\n} from './trace_query.js';\n\nexport {\n createTraceAssertions,\n type TraceAssertions,\n} from './trace_assertions.js';\n\nexport {\n TraceRecorder,\n type TraceRecorderEnableOptions,\n} from './trace_recorder.js';\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAEP;AAAA,EACE;AAAA,OAEK;AAEP;AAAA,EACE;AAAA,OAEK;","names":[]}
|
|
@@ -18,54 +18,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var trace_assertions_exports = {};
|
|
20
20
|
__export(trace_assertions_exports, {
|
|
21
|
-
createTraceAssertions: () => createTraceAssertions
|
|
21
|
+
createTraceAssertions: () => import_testing.createTraceAssertions
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(trace_assertions_exports);
|
|
24
|
-
var
|
|
25
|
-
function createTraceAssertions(source) {
|
|
26
|
-
const query = (0, import_trace_query.createTraceQuery)(source);
|
|
27
|
-
return {
|
|
28
|
-
...query,
|
|
29
|
-
expectCount(filter, expectedCount) {
|
|
30
|
-
const actual = query.count(filter);
|
|
31
|
-
if (actual !== expectedCount) {
|
|
32
|
-
throw new Error(`Expected ${expectedCount} trace events for ${formatFilter(filter)}, found ${actual}.`);
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
expectNone(filter) {
|
|
36
|
-
const actual = query.count(filter);
|
|
37
|
-
if (actual !== 0) {
|
|
38
|
-
throw new Error(`Expected no trace events for ${formatFilter(filter)}, found ${actual}.`);
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
expectOnce(filter) {
|
|
42
|
-
const actual = query.count(filter);
|
|
43
|
-
if (actual !== 1) {
|
|
44
|
-
throw new Error(`Expected one trace event for ${formatFilter(filter)}, found ${actual}.`);
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
expectSequence(filters) {
|
|
48
|
-
if (!query.sequence(filters)) {
|
|
49
|
-
throw new Error(`Expected trace sequence ${formatFilter(filters)}.`);
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
expectUniqueBy(filter, path) {
|
|
53
|
-
if (!query.uniqueBy(filter, path)) {
|
|
54
|
-
throw new Error(`Expected trace values at "${path}" to be unique for ${formatFilter(filter)}.`);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
function formatFilter(value) {
|
|
60
|
-
if (typeof value === "function") {
|
|
61
|
-
return "[predicate]";
|
|
62
|
-
}
|
|
63
|
-
try {
|
|
64
|
-
return JSON.stringify(value);
|
|
65
|
-
} catch {
|
|
66
|
-
return String(value);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
24
|
+
var import_testing = require("@noego/trace/testing");
|
|
69
25
|
// Annotate the CommonJS export names for ESM import in node:
|
|
70
26
|
0 && (module.exports = {
|
|
71
27
|
createTraceAssertions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/trace-testing/trace_assertions.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/trace-testing/trace_assertions.ts"],"sourcesContent":["export {\n createTraceAssertions,\n type TraceAssertions,\n} from '@noego/trace/testing';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAGO;","names":[]}
|
|
@@ -1,15 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { TraceQuery, TraceFilter } from './trace_query.cjs';
|
|
3
|
-
import 'rxjs';
|
|
4
|
-
|
|
5
|
-
type TraceAssertions = TraceQuery & {
|
|
6
|
-
expectCount(filter: TraceFilter, expectedCount: number): void;
|
|
7
|
-
expectNone(filter: TraceFilter): void;
|
|
8
|
-
expectOnce(filter: TraceFilter): void;
|
|
9
|
-
expectSequence(filters: TraceFilter[]): void;
|
|
10
|
-
expectUniqueBy(filter: TraceFilter, path: string): void;
|
|
11
|
-
};
|
|
12
|
-
type TraceSource = TraceEvent[] | (() => TraceEvent[]);
|
|
13
|
-
declare function createTraceAssertions(source: TraceSource): TraceAssertions;
|
|
14
|
-
|
|
15
|
-
export { type TraceAssertions, createTraceAssertions };
|
|
1
|
+
export { TraceAssertions, createTraceAssertions } from '@noego/trace/testing';
|
|
@@ -1,15 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { TraceQuery, TraceFilter } from './trace_query.js';
|
|
3
|
-
import 'rxjs';
|
|
4
|
-
|
|
5
|
-
type TraceAssertions = TraceQuery & {
|
|
6
|
-
expectCount(filter: TraceFilter, expectedCount: number): void;
|
|
7
|
-
expectNone(filter: TraceFilter): void;
|
|
8
|
-
expectOnce(filter: TraceFilter): void;
|
|
9
|
-
expectSequence(filters: TraceFilter[]): void;
|
|
10
|
-
expectUniqueBy(filter: TraceFilter, path: string): void;
|
|
11
|
-
};
|
|
12
|
-
type TraceSource = TraceEvent[] | (() => TraceEvent[]);
|
|
13
|
-
declare function createTraceAssertions(source: TraceSource): TraceAssertions;
|
|
14
|
-
|
|
15
|
-
export { type TraceAssertions, createTraceAssertions };
|
|
1
|
+
export { TraceAssertions, createTraceAssertions } from '@noego/trace/testing';
|
|
@@ -1,48 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
return {
|
|
5
|
-
...query,
|
|
6
|
-
expectCount(filter, expectedCount) {
|
|
7
|
-
const actual = query.count(filter);
|
|
8
|
-
if (actual !== expectedCount) {
|
|
9
|
-
throw new Error(`Expected ${expectedCount} trace events for ${formatFilter(filter)}, found ${actual}.`);
|
|
10
|
-
}
|
|
11
|
-
},
|
|
12
|
-
expectNone(filter) {
|
|
13
|
-
const actual = query.count(filter);
|
|
14
|
-
if (actual !== 0) {
|
|
15
|
-
throw new Error(`Expected no trace events for ${formatFilter(filter)}, found ${actual}.`);
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
expectOnce(filter) {
|
|
19
|
-
const actual = query.count(filter);
|
|
20
|
-
if (actual !== 1) {
|
|
21
|
-
throw new Error(`Expected one trace event for ${formatFilter(filter)}, found ${actual}.`);
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
expectSequence(filters) {
|
|
25
|
-
if (!query.sequence(filters)) {
|
|
26
|
-
throw new Error(`Expected trace sequence ${formatFilter(filters)}.`);
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
expectUniqueBy(filter, path) {
|
|
30
|
-
if (!query.uniqueBy(filter, path)) {
|
|
31
|
-
throw new Error(`Expected trace values at "${path}" to be unique for ${formatFilter(filter)}.`);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
function formatFilter(value) {
|
|
37
|
-
if (typeof value === "function") {
|
|
38
|
-
return "[predicate]";
|
|
39
|
-
}
|
|
40
|
-
try {
|
|
41
|
-
return JSON.stringify(value);
|
|
42
|
-
} catch {
|
|
43
|
-
return String(value);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
createTraceAssertions
|
|
3
|
+
} from "@noego/trace/testing";
|
|
46
4
|
export {
|
|
47
5
|
createTraceAssertions
|
|
48
6
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/trace-testing/trace_assertions.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/trace-testing/trace_assertions.ts"],"sourcesContent":["export {\n createTraceAssertions,\n type TraceAssertions,\n} from '@noego/trace/testing';\n"],"mappings":"AAAA;AAAA,EACE;AAAA,OAEK;","names":[]}
|
|
@@ -18,123 +18,12 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var trace_query_exports = {};
|
|
20
20
|
__export(trace_query_exports, {
|
|
21
|
-
createTraceQuery: () => createTraceQuery,
|
|
22
|
-
matchesTrace: () => matchesTrace,
|
|
23
|
-
readPath: () => readPath
|
|
21
|
+
createTraceQuery: () => import_testing.createTraceQuery,
|
|
22
|
+
matchesTrace: () => import_testing.matchesTrace,
|
|
23
|
+
readPath: () => import_testing.readPath
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(trace_query_exports);
|
|
26
|
-
|
|
27
|
-
const readEvents = () => Array.isArray(source) ? source.slice() : source().slice();
|
|
28
|
-
return {
|
|
29
|
-
all: () => readEvents(),
|
|
30
|
-
filter: (filter) => readEvents().filter((event) => matchesTrace(event, filter)),
|
|
31
|
-
count: (filter) => readEvents().filter((event) => matchesTrace(event, filter)).length,
|
|
32
|
-
countByType: (types) => countTracesByType(readEvents(), types),
|
|
33
|
-
payloads: (filter) => readEvents().filter((event) => matchesTrace(event, filter)).map((event) => event.payload).filter((payload) => isRecord(payload)),
|
|
34
|
-
first: (filter) => readEvents().find((event) => matchesTrace(event, filter)) ?? null,
|
|
35
|
-
last: (filter) => findLastTrace(readEvents(), filter),
|
|
36
|
-
sequence: (filters) => includesTraceSequence(readEvents(), filters),
|
|
37
|
-
none: (filter) => readEvents().every((event) => !matchesTrace(event, filter)),
|
|
38
|
-
once: (filter) => readEvents().filter((event) => matchesTrace(event, filter)).length === 1,
|
|
39
|
-
uniqueBy: (filter, path) => valuesAtPathAreUnique(readEvents(), filter, path)
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
function matchesTrace(event, filter) {
|
|
43
|
-
if (typeof filter === "function") {
|
|
44
|
-
return filter(event);
|
|
45
|
-
}
|
|
46
|
-
for (const [path, expected] of Object.entries(filter)) {
|
|
47
|
-
const actual = readPath(event, path);
|
|
48
|
-
if (!matchesValue(actual, expected)) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
function readPath(value, path) {
|
|
55
|
-
let current = value;
|
|
56
|
-
for (const segment of path.split(".")) {
|
|
57
|
-
if (!isRecord(current)) {
|
|
58
|
-
return void 0;
|
|
59
|
-
}
|
|
60
|
-
current = current[segment];
|
|
61
|
-
}
|
|
62
|
-
return current;
|
|
63
|
-
}
|
|
64
|
-
function countTracesByType(traces, types) {
|
|
65
|
-
const allowedTypes = types ? new Set(types) : null;
|
|
66
|
-
const counts = {};
|
|
67
|
-
for (const trace of traces) {
|
|
68
|
-
if (allowedTypes && !allowedTypes.has(trace.type)) {
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
counts[trace.type] = (counts[trace.type] ?? 0) + 1;
|
|
72
|
-
}
|
|
73
|
-
return counts;
|
|
74
|
-
}
|
|
75
|
-
function findLastTrace(traces, filter) {
|
|
76
|
-
for (let index = traces.length - 1; index >= 0; index -= 1) {
|
|
77
|
-
const trace = traces[index];
|
|
78
|
-
if (trace && matchesTrace(trace, filter)) {
|
|
79
|
-
return trace;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
function includesTraceSequence(traces, filters) {
|
|
85
|
-
let filterIndex = 0;
|
|
86
|
-
if (filters.length === 0) {
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
for (const trace of traces) {
|
|
90
|
-
const filter = filters[filterIndex];
|
|
91
|
-
if (!filter || !matchesTrace(trace, filter)) {
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
filterIndex += 1;
|
|
95
|
-
if (filterIndex === filters.length) {
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
function valuesAtPathAreUnique(traces, filter, path) {
|
|
102
|
-
const seen = /* @__PURE__ */ new Set();
|
|
103
|
-
for (const trace of traces) {
|
|
104
|
-
if (!matchesTrace(trace, filter)) {
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
const value = readPath(trace, path);
|
|
108
|
-
if (seen.has(value)) {
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
seen.add(value);
|
|
112
|
-
}
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
function matchesValue(actual, expected) {
|
|
116
|
-
if (expected instanceof RegExp) {
|
|
117
|
-
return typeof actual === "string" && expected.test(actual);
|
|
118
|
-
}
|
|
119
|
-
if (typeof expected === "function") {
|
|
120
|
-
return Boolean(expected(actual));
|
|
121
|
-
}
|
|
122
|
-
if (isRecord(expected)) {
|
|
123
|
-
return isRecord(actual) && objectContains(actual, expected);
|
|
124
|
-
}
|
|
125
|
-
return Object.is(actual, expected);
|
|
126
|
-
}
|
|
127
|
-
function objectContains(actual, expected) {
|
|
128
|
-
for (const [key, value] of Object.entries(expected)) {
|
|
129
|
-
if (!matchesValue(actual[key], value)) {
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
function isRecord(value) {
|
|
136
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
137
|
-
}
|
|
26
|
+
var import_testing = require("@noego/trace/testing");
|
|
138
27
|
// Annotate the CommonJS export names for ESM import in node:
|
|
139
28
|
0 && (module.exports = {
|
|
140
29
|
createTraceQuery,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/trace-testing/trace_query.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/trace-testing/trace_query.ts"],"sourcesContent":["export {\n createTraceQuery,\n matchesTrace,\n readPath,\n type TraceCountSummary,\n type TraceFilter,\n type TraceQuery,\n type TraceRecord,\n type TraceSource,\n} from '@noego/trace/testing';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBASO;","names":[]}
|
|
@@ -1,24 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import 'rxjs';
|
|
3
|
-
|
|
4
|
-
type TraceFilter = ((event: TraceEvent) => boolean) | Record<string, unknown>;
|
|
5
|
-
type TraceCountSummary = Record<string, number>;
|
|
6
|
-
type TraceQuery = {
|
|
7
|
-
all(): TraceEvent[];
|
|
8
|
-
filter(filter: TraceFilter): TraceEvent[];
|
|
9
|
-
count(filter: TraceFilter): number;
|
|
10
|
-
countByType(types?: string[]): TraceCountSummary;
|
|
11
|
-
payloads(filter: TraceFilter): Record<string, unknown>[];
|
|
12
|
-
first(filter: TraceFilter): TraceEvent | null;
|
|
13
|
-
last(filter: TraceFilter): TraceEvent | null;
|
|
14
|
-
sequence(filters: TraceFilter[]): boolean;
|
|
15
|
-
none(filter: TraceFilter): boolean;
|
|
16
|
-
once(filter: TraceFilter): boolean;
|
|
17
|
-
uniqueBy(filter: TraceFilter, path: string): boolean;
|
|
18
|
-
};
|
|
19
|
-
type TraceSource = TraceEvent[] | (() => TraceEvent[]);
|
|
20
|
-
declare function createTraceQuery(source: TraceSource): TraceQuery;
|
|
21
|
-
declare function matchesTrace(event: TraceEvent, filter: TraceFilter): boolean;
|
|
22
|
-
declare function readPath(value: unknown, path: string): unknown;
|
|
23
|
-
|
|
24
|
-
export { type TraceCountSummary, type TraceFilter, type TraceQuery, createTraceQuery, matchesTrace, readPath };
|
|
1
|
+
export { TraceCountSummary, TraceFilter, TraceQuery, TraceRecord, TraceSource, createTraceQuery, matchesTrace, readPath } from '@noego/trace/testing';
|
|
@@ -1,24 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import 'rxjs';
|
|
3
|
-
|
|
4
|
-
type TraceFilter = ((event: TraceEvent) => boolean) | Record<string, unknown>;
|
|
5
|
-
type TraceCountSummary = Record<string, number>;
|
|
6
|
-
type TraceQuery = {
|
|
7
|
-
all(): TraceEvent[];
|
|
8
|
-
filter(filter: TraceFilter): TraceEvent[];
|
|
9
|
-
count(filter: TraceFilter): number;
|
|
10
|
-
countByType(types?: string[]): TraceCountSummary;
|
|
11
|
-
payloads(filter: TraceFilter): Record<string, unknown>[];
|
|
12
|
-
first(filter: TraceFilter): TraceEvent | null;
|
|
13
|
-
last(filter: TraceFilter): TraceEvent | null;
|
|
14
|
-
sequence(filters: TraceFilter[]): boolean;
|
|
15
|
-
none(filter: TraceFilter): boolean;
|
|
16
|
-
once(filter: TraceFilter): boolean;
|
|
17
|
-
uniqueBy(filter: TraceFilter, path: string): boolean;
|
|
18
|
-
};
|
|
19
|
-
type TraceSource = TraceEvent[] | (() => TraceEvent[]);
|
|
20
|
-
declare function createTraceQuery(source: TraceSource): TraceQuery;
|
|
21
|
-
declare function matchesTrace(event: TraceEvent, filter: TraceFilter): boolean;
|
|
22
|
-
declare function readPath(value: unknown, path: string): unknown;
|
|
23
|
-
|
|
24
|
-
export { type TraceCountSummary, type TraceFilter, type TraceQuery, createTraceQuery, matchesTrace, readPath };
|
|
1
|
+
export { TraceCountSummary, TraceFilter, TraceQuery, TraceRecord, TraceSource, createTraceQuery, matchesTrace, readPath } from '@noego/trace/testing';
|
|
@@ -1,115 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
count: (filter) => readEvents().filter((event) => matchesTrace(event, filter)).length,
|
|
7
|
-
countByType: (types) => countTracesByType(readEvents(), types),
|
|
8
|
-
payloads: (filter) => readEvents().filter((event) => matchesTrace(event, filter)).map((event) => event.payload).filter((payload) => isRecord(payload)),
|
|
9
|
-
first: (filter) => readEvents().find((event) => matchesTrace(event, filter)) ?? null,
|
|
10
|
-
last: (filter) => findLastTrace(readEvents(), filter),
|
|
11
|
-
sequence: (filters) => includesTraceSequence(readEvents(), filters),
|
|
12
|
-
none: (filter) => readEvents().every((event) => !matchesTrace(event, filter)),
|
|
13
|
-
once: (filter) => readEvents().filter((event) => matchesTrace(event, filter)).length === 1,
|
|
14
|
-
uniqueBy: (filter, path) => valuesAtPathAreUnique(readEvents(), filter, path)
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
function matchesTrace(event, filter) {
|
|
18
|
-
if (typeof filter === "function") {
|
|
19
|
-
return filter(event);
|
|
20
|
-
}
|
|
21
|
-
for (const [path, expected] of Object.entries(filter)) {
|
|
22
|
-
const actual = readPath(event, path);
|
|
23
|
-
if (!matchesValue(actual, expected)) {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
function readPath(value, path) {
|
|
30
|
-
let current = value;
|
|
31
|
-
for (const segment of path.split(".")) {
|
|
32
|
-
if (!isRecord(current)) {
|
|
33
|
-
return void 0;
|
|
34
|
-
}
|
|
35
|
-
current = current[segment];
|
|
36
|
-
}
|
|
37
|
-
return current;
|
|
38
|
-
}
|
|
39
|
-
function countTracesByType(traces, types) {
|
|
40
|
-
const allowedTypes = types ? new Set(types) : null;
|
|
41
|
-
const counts = {};
|
|
42
|
-
for (const trace of traces) {
|
|
43
|
-
if (allowedTypes && !allowedTypes.has(trace.type)) {
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
counts[trace.type] = (counts[trace.type] ?? 0) + 1;
|
|
47
|
-
}
|
|
48
|
-
return counts;
|
|
49
|
-
}
|
|
50
|
-
function findLastTrace(traces, filter) {
|
|
51
|
-
for (let index = traces.length - 1; index >= 0; index -= 1) {
|
|
52
|
-
const trace = traces[index];
|
|
53
|
-
if (trace && matchesTrace(trace, filter)) {
|
|
54
|
-
return trace;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
function includesTraceSequence(traces, filters) {
|
|
60
|
-
let filterIndex = 0;
|
|
61
|
-
if (filters.length === 0) {
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
for (const trace of traces) {
|
|
65
|
-
const filter = filters[filterIndex];
|
|
66
|
-
if (!filter || !matchesTrace(trace, filter)) {
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
69
|
-
filterIndex += 1;
|
|
70
|
-
if (filterIndex === filters.length) {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
function valuesAtPathAreUnique(traces, filter, path) {
|
|
77
|
-
const seen = /* @__PURE__ */ new Set();
|
|
78
|
-
for (const trace of traces) {
|
|
79
|
-
if (!matchesTrace(trace, filter)) {
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
const value = readPath(trace, path);
|
|
83
|
-
if (seen.has(value)) {
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
seen.add(value);
|
|
87
|
-
}
|
|
88
|
-
return true;
|
|
89
|
-
}
|
|
90
|
-
function matchesValue(actual, expected) {
|
|
91
|
-
if (expected instanceof RegExp) {
|
|
92
|
-
return typeof actual === "string" && expected.test(actual);
|
|
93
|
-
}
|
|
94
|
-
if (typeof expected === "function") {
|
|
95
|
-
return Boolean(expected(actual));
|
|
96
|
-
}
|
|
97
|
-
if (isRecord(expected)) {
|
|
98
|
-
return isRecord(actual) && objectContains(actual, expected);
|
|
99
|
-
}
|
|
100
|
-
return Object.is(actual, expected);
|
|
101
|
-
}
|
|
102
|
-
function objectContains(actual, expected) {
|
|
103
|
-
for (const [key, value] of Object.entries(expected)) {
|
|
104
|
-
if (!matchesValue(actual[key], value)) {
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
function isRecord(value) {
|
|
111
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
112
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
createTraceQuery,
|
|
3
|
+
matchesTrace,
|
|
4
|
+
readPath
|
|
5
|
+
} from "@noego/trace/testing";
|
|
113
6
|
export {
|
|
114
7
|
createTraceQuery,
|
|
115
8
|
matchesTrace,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/trace-testing/trace_query.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/trace-testing/trace_query.ts"],"sourcesContent":["export {\n createTraceQuery,\n matchesTrace,\n readPath,\n type TraceCountSummary,\n type TraceFilter,\n type TraceQuery,\n type TraceRecord,\n type TraceSource,\n} from '@noego/trace/testing';\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAMK;","names":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
20
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
21
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
22
|
+
if (decorator = decorators[i])
|
|
23
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
24
|
+
if (kind && result) __defProp(target, key, result);
|
|
25
|
+
return result;
|
|
26
|
+
};
|
|
27
|
+
var __decorateParam = (index, decorator) => (target, key) => decorator(target, key, index);
|
|
28
|
+
var trace_recorder_exports = {};
|
|
29
|
+
__export(trace_recorder_exports, {
|
|
30
|
+
TraceRecorder: () => TraceRecorder
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(trace_recorder_exports);
|
|
33
|
+
var import_ioc = require("@noego/ioc");
|
|
34
|
+
var import_testing = require("@noego/trace/testing");
|
|
35
|
+
var import_tracing = require("../tracing/index.js");
|
|
36
|
+
var import_trace_hub = require("../tracing/trace_hub.js");
|
|
37
|
+
let TraceRecorder = class extends import_testing.TraceRecorder {
|
|
38
|
+
constructor(traceProvider) {
|
|
39
|
+
super(traceProvider ?? (0, import_trace_hub.getTraceEvents$)());
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
TraceRecorder = __decorateClass([
|
|
43
|
+
(0, import_ioc.Component)({ scope: import_ioc.LoadAs.Singleton }),
|
|
44
|
+
__decorateParam(0, (0, import_ioc.Inject)(import_tracing.TraceProvider))
|
|
45
|
+
], TraceRecorder);
|
|
46
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
47
|
+
0 && (module.exports = {
|
|
48
|
+
TraceRecorder
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=trace_recorder.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/trace-testing/trace_recorder.ts"],"sourcesContent":["import { Component, Inject, LoadAs } from '@noego/ioc';\nimport {\n TraceRecorder as BaseTraceRecorder,\n type TraceObservableSource,\n type TraceRecorderEnableOptions,\n type TraceRecorderSource,\n type TraceWaitOptions,\n} from '@noego/trace/testing';\nimport {\n TraceProvider,\n type FrameworkTracer,\n type TraceEvent,\n} from '../tracing/index.js';\nimport { getTraceEvents$ } from '../tracing/trace_hub.js';\n\n@Component({ scope: LoadAs.Singleton })\nexport class TraceRecorder extends BaseTraceRecorder<TraceEvent> {\n constructor(\n @Inject(TraceProvider) traceProvider?: FrameworkTracer,\n ) {\n super(traceProvider ?? getTraceEvents$());\n }\n}\n\nexport type {\n TraceObservableSource,\n TraceRecorderEnableOptions,\n TraceRecorderSource,\n TraceWaitOptions,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAA0C;AAC1C,qBAMO;AACP,qBAIO;AACP,uBAAgC;AAGzB,IAAM,gBAAN,cAA4B,eAAAA,cAA8B;AAAA,EAC/D,YACyB,eACvB;AACA,UAAM,qBAAiB,kCAAgB,CAAC;AAAA,EAC1C;AACF;AANa,gBAAN;AAAA,MADN,sBAAU,EAAE,OAAO,kBAAO,UAAU,CAAC;AAAA,EAGjC,0CAAO,4BAAa;AAAA,GAFZ;","names":["BaseTraceRecorder"]}
|