neuron-inspector 1.2.0 → 1.3.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.
- package/dist/collections/assertions.js +11 -0
- package/dist/collections/assertions.js.map +1 -1
- package/dist/collections/dynamic-vars-core.d.ts +79 -0
- package/dist/collections/dynamic-vars-core.js +214 -0
- package/dist/collections/dynamic-vars-core.js.map +1 -0
- package/dist/collections/dynamic-vars.d.ts +2 -61
- package/dist/collections/dynamic-vars.js +6 -146
- package/dist/collections/dynamic-vars.js.map +1 -1
- package/dist/collections/encoding.d.ts +3 -0
- package/dist/collections/encoding.js +20 -0
- package/dist/collections/encoding.js.map +1 -0
- package/dist/collections/executor.d.ts +114 -5
- package/dist/collections/executor.js +315 -91
- package/dist/collections/executor.js.map +1 -1
- package/dist/collections/index.d.ts +11 -3
- package/dist/collections/index.js +7 -1
- package/dist/collections/index.js.map +1 -1
- package/dist/collections/masking.d.ts +42 -0
- package/dist/collections/masking.js +188 -0
- package/dist/collections/masking.js.map +1 -0
- package/dist/collections/resolver-core.d.ts +74 -0
- package/dist/collections/resolver-core.js +309 -0
- package/dist/collections/resolver-core.js.map +1 -0
- package/dist/collections/resolver.d.ts +9 -62
- package/dist/collections/resolver.js +21 -281
- package/dist/collections/resolver.js.map +1 -1
- package/dist/collections/scenario-run.d.ts +33 -0
- package/dist/collections/scenario-run.js +68 -0
- package/dist/collections/scenario-run.js.map +1 -0
- package/dist/collections/script-api.d.ts +18 -0
- package/dist/collections/script-api.js +208 -0
- package/dist/collections/script-api.js.map +1 -0
- package/dist/collections/scripts.d.ts +1 -8
- package/dist/collections/scripts.js +6 -196
- package/dist/collections/scripts.js.map +1 -1
- package/dist/collections/slug.d.ts +2 -0
- package/dist/collections/slug.js +8 -0
- package/dist/collections/slug.js.map +1 -0
- package/dist/collections/store.d.ts +5 -2
- package/dist/collections/store.js +6 -6
- package/dist/collections/store.js.map +1 -1
- package/dist/collections/tools.d.ts +8 -1
- package/dist/collections/tools.js +253 -90
- package/dist/collections/tools.js.map +1 -1
- package/dist/collections/types.d.ts +42 -3
- package/dist/correlation.js +10 -0
- package/dist/correlation.js.map +1 -1
- package/dist/extension-slot.d.ts +45 -0
- package/dist/extension-slot.js +81 -0
- package/dist/extension-slot.js.map +1 -0
- package/dist/monitor.d.ts +5 -0
- package/dist/monitor.js +7 -2
- package/dist/monitor.js.map +1 -1
- package/dist/server.js +197 -42
- package/dist/server.js.map +1 -1
- package/dist/tools.js +1 -1
- package/dist/tools.js.map +1 -1
- package/package.json +3 -2
- package/dist/collections/__tests__/assertions.test.d.ts +0 -1
- package/dist/collections/__tests__/assertions.test.js +0 -203
- package/dist/collections/__tests__/assertions.test.js.map +0 -1
- package/dist/collections/__tests__/dynamic-vars.test.d.ts +0 -1
- package/dist/collections/__tests__/dynamic-vars.test.js +0 -169
- package/dist/collections/__tests__/dynamic-vars.test.js.map +0 -1
- package/dist/collections/__tests__/execution.test.d.ts +0 -1
- package/dist/collections/__tests__/execution.test.js +0 -271
- package/dist/collections/__tests__/execution.test.js.map +0 -1
- package/dist/collections/__tests__/integration.test.d.ts +0 -1
- package/dist/collections/__tests__/integration.test.js +0 -478
- package/dist/collections/__tests__/integration.test.js.map +0 -1
- package/dist/collections/__tests__/merge.test.d.ts +0 -1
- package/dist/collections/__tests__/merge.test.js +0 -411
- package/dist/collections/__tests__/merge.test.js.map +0 -1
- package/dist/collections/__tests__/resolver.test.d.ts +0 -1
- package/dist/collections/__tests__/resolver.test.js +0 -282
- package/dist/collections/__tests__/resolver.test.js.map +0 -1
- package/dist/collections/__tests__/scenario.test.d.ts +0 -1
- package/dist/collections/__tests__/scenario.test.js +0 -367
- package/dist/collections/__tests__/scenario.test.js.map +0 -1
- package/dist/collections/__tests__/scripts.test.d.ts +0 -1
- package/dist/collections/__tests__/scripts.test.js +0 -245
- package/dist/collections/__tests__/scripts.test.js.map +0 -1
- package/dist/collections/__tests__/store.test.d.ts +0 -1
- package/dist/collections/__tests__/store.test.js +0 -313
- package/dist/collections/__tests__/store.test.js.map +0 -1
|
@@ -64,7 +64,18 @@ const builtinOperators = {
|
|
|
64
64
|
return typeof expected === "number" && len < expected;
|
|
65
65
|
},
|
|
66
66
|
type: (actual, expected) => typeof actual === expected,
|
|
67
|
+
/** expect is an array; passes when actual equals any member. */
|
|
68
|
+
in: (actual, expected) => Array.isArray(expected) && expected.some((e) => sameValue(actual, e)),
|
|
69
|
+
not_in: (actual, expected) => Array.isArray(expected) && !expected.some((e) => sameValue(actual, e)),
|
|
67
70
|
};
|
|
71
|
+
function sameValue(a, b) {
|
|
72
|
+
if (a === b)
|
|
73
|
+
return true;
|
|
74
|
+
if (typeof a === "object" && a !== null && typeof b === "object" && b !== null) {
|
|
75
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
68
79
|
// ── OperatorRegistry ────────────────────────────────────────────
|
|
69
80
|
export class OperatorRegistry {
|
|
70
81
|
operators = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../src/collections/assertions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../src/collections/assertions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { DynamicVarProvider, ResolverContext } from "./types.js";
|
|
2
|
+
export declare class DynamicVarRegistry {
|
|
3
|
+
private providers;
|
|
4
|
+
register(provider: DynamicVarProvider): void;
|
|
5
|
+
resolve(ref: string, context: ResolverContext): string | undefined;
|
|
6
|
+
}
|
|
7
|
+
export declare function parseArgs(ref: string): {
|
|
8
|
+
name: string;
|
|
9
|
+
args: string[];
|
|
10
|
+
};
|
|
11
|
+
export declare class UuidProvider implements DynamicVarProvider {
|
|
12
|
+
canHandle(ref: string): boolean;
|
|
13
|
+
generate(_ref: string, _ctx: ResolverContext): string;
|
|
14
|
+
}
|
|
15
|
+
export declare class TimestampProvider implements DynamicVarProvider {
|
|
16
|
+
canHandle(ref: string): boolean;
|
|
17
|
+
generate(_ref: string, _ctx: ResolverContext): string;
|
|
18
|
+
}
|
|
19
|
+
export declare class IsoTimestampProvider implements DynamicVarProvider {
|
|
20
|
+
canHandle(ref: string): boolean;
|
|
21
|
+
generate(_ref: string, _ctx: ResolverContext): string;
|
|
22
|
+
}
|
|
23
|
+
export declare class RandomIntProvider implements DynamicVarProvider {
|
|
24
|
+
canHandle(ref: string): boolean;
|
|
25
|
+
generate(ref: string, _ctx: ResolverContext): string;
|
|
26
|
+
}
|
|
27
|
+
export declare class RandomEmailProvider implements DynamicVarProvider {
|
|
28
|
+
canHandle(ref: string): boolean;
|
|
29
|
+
generate(_ref: string, _ctx: ResolverContext): string;
|
|
30
|
+
}
|
|
31
|
+
export declare class RandomNameProvider implements DynamicVarProvider {
|
|
32
|
+
canHandle(ref: string): boolean;
|
|
33
|
+
generate(_ref: string, _ctx: ResolverContext): string;
|
|
34
|
+
}
|
|
35
|
+
export declare class RandomPhoneProvider implements DynamicVarProvider {
|
|
36
|
+
canHandle(ref: string): boolean;
|
|
37
|
+
generate(_ref: string, _ctx: ResolverContext): string;
|
|
38
|
+
}
|
|
39
|
+
export declare class RandomStringProvider implements DynamicVarProvider {
|
|
40
|
+
canHandle(ref: string): boolean;
|
|
41
|
+
generate(ref: string, _ctx: ResolverContext): string;
|
|
42
|
+
}
|
|
43
|
+
export declare class Base64Provider implements DynamicVarProvider {
|
|
44
|
+
canHandle(ref: string): boolean;
|
|
45
|
+
generate(ref: string, _ctx: ResolverContext): string;
|
|
46
|
+
}
|
|
47
|
+
/** Throws a clear error for anything Intl doesn't know. */
|
|
48
|
+
export declare function assertTimeZone(tz: string): void;
|
|
49
|
+
export declare function formatInZone(date: Date, format: string, tz?: string): string;
|
|
50
|
+
export declare function formatUtc(date: Date, format: string): string;
|
|
51
|
+
/** {{$now}} → ISO 8601 (UTC, unchanged by timezone). {{$now(+1h)}}, {{$now(,YYYY-MM-DD HH:mm)}} (in the zone). */
|
|
52
|
+
export declare class NowProvider implements DynamicVarProvider {
|
|
53
|
+
canHandle(ref: string): boolean;
|
|
54
|
+
generate(ref: string, ctx: ResolverContext): string;
|
|
55
|
+
}
|
|
56
|
+
/** {{$today}} → date YYYY-MM-DD in the zone (UTC unless set). {{$today(-1d)}}, {{$today(DD/MM/YYYY)}}, {{$today(,,Africa/Lagos)}}. */
|
|
57
|
+
export declare class TodayProvider implements DynamicVarProvider {
|
|
58
|
+
canHandle(ref: string): boolean;
|
|
59
|
+
generate(ref: string, ctx: ResolverContext): string;
|
|
60
|
+
}
|
|
61
|
+
export declare class AiPlaceholderProvider implements DynamicVarProvider {
|
|
62
|
+
canHandle(ref: string): boolean;
|
|
63
|
+
generate(ref: string, _ctx: ResolverContext): string;
|
|
64
|
+
}
|
|
65
|
+
export declare class FakerPlaceholderProvider implements DynamicVarProvider {
|
|
66
|
+
canHandle(ref: string): boolean;
|
|
67
|
+
generate(ref: string, _ctx: ResolverContext): string;
|
|
68
|
+
}
|
|
69
|
+
export declare class PreviousResponseProvider implements DynamicVarProvider {
|
|
70
|
+
canHandle(ref: string): boolean;
|
|
71
|
+
generate(_ref: string, _ctx: ResolverContext): string;
|
|
72
|
+
}
|
|
73
|
+
export declare class CollectionStatsProvider implements DynamicVarProvider {
|
|
74
|
+
canHandle(ref: string): boolean;
|
|
75
|
+
generate(_ref: string, _ctx: ResolverContext): string;
|
|
76
|
+
}
|
|
77
|
+
/** Same providers and order as the bridge's default registry, minus $hmac / $env / $file. */
|
|
78
|
+
export declare function buildCoreRegistry(): DynamicVarRegistry;
|
|
79
|
+
export declare function registerCoreProviders(registry: DynamicVarRegistry): void;
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { toBase64 } from "./encoding.js";
|
|
2
|
+
const randomUUID = () => globalThis.crypto.randomUUID();
|
|
3
|
+
// ── Provider registry ───────────────────────────────────────────
|
|
4
|
+
export class DynamicVarRegistry {
|
|
5
|
+
providers = [];
|
|
6
|
+
register(provider) {
|
|
7
|
+
this.providers.push(provider);
|
|
8
|
+
}
|
|
9
|
+
resolve(ref, context) {
|
|
10
|
+
for (const provider of this.providers) {
|
|
11
|
+
if (provider.canHandle(ref)) {
|
|
12
|
+
return provider.generate(ref, context);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// ── Helper: parse function-style refs like $randomInt(1,100) ────
|
|
19
|
+
export function parseArgs(ref) {
|
|
20
|
+
const parenIdx = ref.indexOf("(");
|
|
21
|
+
if (parenIdx < 0)
|
|
22
|
+
return { name: ref, args: [] };
|
|
23
|
+
const name = ref.slice(0, parenIdx);
|
|
24
|
+
const argsStr = ref.slice(parenIdx + 1, -1); // strip parens
|
|
25
|
+
return { name, args: argsStr.split(",").map((a) => a.trim()) };
|
|
26
|
+
}
|
|
27
|
+
// ── Built-in providers ──────────────────────────────────────────
|
|
28
|
+
export class UuidProvider {
|
|
29
|
+
canHandle(ref) { return ref === "$uuid"; }
|
|
30
|
+
generate(_ref, _ctx) { return randomUUID(); }
|
|
31
|
+
}
|
|
32
|
+
export class TimestampProvider {
|
|
33
|
+
canHandle(ref) { return ref === "$timestamp"; }
|
|
34
|
+
generate(_ref, _ctx) { return String(Math.floor(Date.now() / 1000)); }
|
|
35
|
+
}
|
|
36
|
+
export class IsoTimestampProvider {
|
|
37
|
+
canHandle(ref) { return ref === "$isoTimestamp"; }
|
|
38
|
+
generate(_ref, _ctx) { return new Date().toISOString(); }
|
|
39
|
+
}
|
|
40
|
+
export class RandomIntProvider {
|
|
41
|
+
canHandle(ref) { return ref.startsWith("$randomInt("); }
|
|
42
|
+
generate(ref, _ctx) {
|
|
43
|
+
const { args } = parseArgs(ref);
|
|
44
|
+
const min = parseInt(args[0] ?? "0", 10);
|
|
45
|
+
const max = parseInt(args[1] ?? "100", 10);
|
|
46
|
+
return String(Math.floor(Math.random() * (max - min + 1)) + min);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export class RandomEmailProvider {
|
|
50
|
+
canHandle(ref) { return ref === "$randomEmail"; }
|
|
51
|
+
generate(_ref, _ctx) {
|
|
52
|
+
const id = randomUUID().slice(0, 8);
|
|
53
|
+
const domains = ["example.com", "test.org", "mail.dev"];
|
|
54
|
+
return `user-${id}@${domains[Math.floor(Math.random() * domains.length)]}`;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class RandomNameProvider {
|
|
58
|
+
canHandle(ref) { return ref === "$randomName"; }
|
|
59
|
+
generate(_ref, _ctx) {
|
|
60
|
+
const firsts = ["Ade", "Bola", "Chidi", "Dayo", "Emeka", "Funke", "Gbenga", "Halima", "Ikenna", "Jumoke"];
|
|
61
|
+
const lasts = ["Okafor", "Adeyemi", "Ibrahim", "Nwosu", "Bakare", "Olumide", "Chukwu", "Abubakar", "Obi", "Lawal"];
|
|
62
|
+
return `${firsts[Math.floor(Math.random() * firsts.length)]} ${lasts[Math.floor(Math.random() * lasts.length)]}`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export class RandomPhoneProvider {
|
|
66
|
+
canHandle(ref) { return ref === "$randomPhone"; }
|
|
67
|
+
generate(_ref, _ctx) {
|
|
68
|
+
const prefix = "+234";
|
|
69
|
+
const number = String(Math.floor(Math.random() * 9_000_000_000) + 1_000_000_000);
|
|
70
|
+
return `${prefix}${number}`;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export class RandomStringProvider {
|
|
74
|
+
canHandle(ref) { return ref.startsWith("$randomString("); }
|
|
75
|
+
generate(ref, _ctx) {
|
|
76
|
+
const { args } = parseArgs(ref);
|
|
77
|
+
const len = parseInt(args[0] || "16", 10) || 16;
|
|
78
|
+
const chars = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
79
|
+
let result = "";
|
|
80
|
+
for (let i = 0; i < len; i++) {
|
|
81
|
+
result += chars[Math.floor(Math.random() * chars.length)];
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export class Base64Provider {
|
|
87
|
+
canHandle(ref) { return ref.startsWith("$base64("); }
|
|
88
|
+
generate(ref, _ctx) {
|
|
89
|
+
const { args } = parseArgs(ref);
|
|
90
|
+
return toBase64(args[0] ?? "");
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const OFFSET = /^([+-]?\d+)(ms|s|m|h|d)$/;
|
|
94
|
+
const OFFSET_MS = { ms: 1, s: 1000, m: 60_000, h: 3_600_000, d: 86_400_000 };
|
|
95
|
+
/** Throws a clear error for anything Intl doesn't know. */
|
|
96
|
+
export function assertTimeZone(tz) {
|
|
97
|
+
try {
|
|
98
|
+
new Intl.DateTimeFormat("en-US", { timeZone: tz });
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
throw new Error(`Unknown timezone '${tz}'. Use an IANA name like 'Africa/Lagos' or 'UTC'.`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Args for the date providers: `(offset)`, `(offset, format)`, `(format)`, plus an
|
|
106
|
+
* optional third `timezone`. offset like +1d / -2h / 30m; format tokens
|
|
107
|
+
* YYYY MM DD HH mm ss SSS. The zone comes from the arg, else the environment's
|
|
108
|
+
* `timezone`, else `defaults.timezone`, else UTC.
|
|
109
|
+
*/
|
|
110
|
+
function dateArgs(ref, ctx) {
|
|
111
|
+
const { args } = parseArgs(ref);
|
|
112
|
+
let date = new Date();
|
|
113
|
+
let format;
|
|
114
|
+
const [a0 = "", a1 = "", a2 = ""] = args;
|
|
115
|
+
const m = a0.match(OFFSET);
|
|
116
|
+
if (m)
|
|
117
|
+
date = new Date(date.getTime() + parseInt(m[1], 10) * (OFFSET_MS[m[2]] ?? 0));
|
|
118
|
+
else if (a0)
|
|
119
|
+
format = a0;
|
|
120
|
+
if (a1)
|
|
121
|
+
format = a1;
|
|
122
|
+
const tz = a2 || ctx.environment?.timezone || ctx.collection?.defaults?.timezone || "UTC";
|
|
123
|
+
assertTimeZone(tz);
|
|
124
|
+
return { date, format, tz };
|
|
125
|
+
}
|
|
126
|
+
export function formatInZone(date, format, tz = "UTC") {
|
|
127
|
+
const parts = Object.fromEntries(new Intl.DateTimeFormat("en-US", {
|
|
128
|
+
timeZone: tz,
|
|
129
|
+
hourCycle: "h23",
|
|
130
|
+
year: "numeric",
|
|
131
|
+
month: "2-digit",
|
|
132
|
+
day: "2-digit",
|
|
133
|
+
hour: "2-digit",
|
|
134
|
+
minute: "2-digit",
|
|
135
|
+
second: "2-digit",
|
|
136
|
+
}).formatToParts(date).map((p) => [p.type, p.value]));
|
|
137
|
+
const tokens = {
|
|
138
|
+
YYYY: parts.year,
|
|
139
|
+
MM: parts.month,
|
|
140
|
+
DD: parts.day,
|
|
141
|
+
HH: parts.hour,
|
|
142
|
+
mm: parts.minute,
|
|
143
|
+
ss: parts.second,
|
|
144
|
+
SSS: String(date.getUTCMilliseconds()).padStart(3, "0"),
|
|
145
|
+
};
|
|
146
|
+
return format.replace(/YYYY|SSS|MM|DD|HH|mm|ss/g, (t) => tokens[t]);
|
|
147
|
+
}
|
|
148
|
+
export function formatUtc(date, format) {
|
|
149
|
+
return formatInZone(date, format, "UTC");
|
|
150
|
+
}
|
|
151
|
+
/** {{$now}} → ISO 8601 (UTC, unchanged by timezone). {{$now(+1h)}}, {{$now(,YYYY-MM-DD HH:mm)}} (in the zone). */
|
|
152
|
+
export class NowProvider {
|
|
153
|
+
canHandle(ref) { return ref === "$now" || ref.startsWith("$now("); }
|
|
154
|
+
generate(ref, ctx) {
|
|
155
|
+
const { date, format, tz } = dateArgs(ref, ctx);
|
|
156
|
+
return format ? formatInZone(date, format, tz) : date.toISOString();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/** {{$today}} → date YYYY-MM-DD in the zone (UTC unless set). {{$today(-1d)}}, {{$today(DD/MM/YYYY)}}, {{$today(,,Africa/Lagos)}}. */
|
|
160
|
+
export class TodayProvider {
|
|
161
|
+
canHandle(ref) { return ref === "$today" || ref.startsWith("$today("); }
|
|
162
|
+
generate(ref, ctx) {
|
|
163
|
+
const { date, format, tz } = dateArgs(ref, ctx);
|
|
164
|
+
return formatInZone(date, format ?? "YYYY-MM-DD", tz);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// ── AI-native placeholders ──────────────────────────────────────
|
|
168
|
+
export class AiPlaceholderProvider {
|
|
169
|
+
canHandle(ref) { return ref.startsWith("$ai("); }
|
|
170
|
+
generate(ref, _ctx) {
|
|
171
|
+
const { args } = parseArgs(ref);
|
|
172
|
+
return `[AI not configured: ${args[0] ?? ref}]`;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
export class FakerPlaceholderProvider {
|
|
176
|
+
canHandle(ref) { return ref.startsWith("$faker("); }
|
|
177
|
+
generate(ref, _ctx) {
|
|
178
|
+
const { args } = parseArgs(ref);
|
|
179
|
+
return `[faker not configured: ${args[0] ?? ref}]`;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
export class PreviousResponseProvider {
|
|
183
|
+
canHandle(ref) { return ref === "$previous.response"; }
|
|
184
|
+
generate(_ref, _ctx) { return "[previous.response: use in scenario context]"; }
|
|
185
|
+
}
|
|
186
|
+
export class CollectionStatsProvider {
|
|
187
|
+
canHandle(ref) { return ref === "$collection.stats"; }
|
|
188
|
+
generate(_ref, _ctx) { return "[collection.stats: use in scenario context]"; }
|
|
189
|
+
}
|
|
190
|
+
// ── Factory (Node-free providers only) ─────────────────────────
|
|
191
|
+
/** Same providers and order as the bridge's default registry, minus $hmac / $env / $file. */
|
|
192
|
+
export function buildCoreRegistry() {
|
|
193
|
+
const registry = new DynamicVarRegistry();
|
|
194
|
+
registerCoreProviders(registry);
|
|
195
|
+
return registry;
|
|
196
|
+
}
|
|
197
|
+
export function registerCoreProviders(registry) {
|
|
198
|
+
registry.register(new UuidProvider());
|
|
199
|
+
registry.register(new TimestampProvider());
|
|
200
|
+
registry.register(new IsoTimestampProvider());
|
|
201
|
+
registry.register(new RandomIntProvider());
|
|
202
|
+
registry.register(new RandomEmailProvider());
|
|
203
|
+
registry.register(new RandomNameProvider());
|
|
204
|
+
registry.register(new RandomPhoneProvider());
|
|
205
|
+
registry.register(new RandomStringProvider());
|
|
206
|
+
registry.register(new Base64Provider());
|
|
207
|
+
registry.register(new NowProvider());
|
|
208
|
+
registry.register(new TodayProvider());
|
|
209
|
+
registry.register(new AiPlaceholderProvider());
|
|
210
|
+
registry.register(new FakerPlaceholderProvider());
|
|
211
|
+
registry.register(new PreviousResponseProvider());
|
|
212
|
+
registry.register(new CollectionStatsProvider());
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=dynamic-vars-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-vars-core.js","sourceRoot":"","sources":["../../src/collections/dynamic-vars-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,53 +1,10 @@
|
|
|
1
1
|
import type { DynamicVarProvider, ResolverContext } from "./types.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
register(provider: DynamicVarProvider): void;
|
|
5
|
-
resolve(ref: string, context: ResolverContext): string | undefined;
|
|
6
|
-
}
|
|
7
|
-
export declare class UuidProvider implements DynamicVarProvider {
|
|
8
|
-
canHandle(ref: string): boolean;
|
|
9
|
-
generate(_ref: string, _ctx: ResolverContext): string;
|
|
10
|
-
}
|
|
11
|
-
export declare class TimestampProvider implements DynamicVarProvider {
|
|
12
|
-
canHandle(ref: string): boolean;
|
|
13
|
-
generate(_ref: string, _ctx: ResolverContext): string;
|
|
14
|
-
}
|
|
15
|
-
export declare class IsoTimestampProvider implements DynamicVarProvider {
|
|
16
|
-
canHandle(ref: string): boolean;
|
|
17
|
-
generate(_ref: string, _ctx: ResolverContext): string;
|
|
18
|
-
}
|
|
19
|
-
export declare class RandomIntProvider implements DynamicVarProvider {
|
|
20
|
-
canHandle(ref: string): boolean;
|
|
21
|
-
generate(ref: string, _ctx: ResolverContext): string;
|
|
22
|
-
}
|
|
23
|
-
export declare class RandomEmailProvider implements DynamicVarProvider {
|
|
24
|
-
canHandle(ref: string): boolean;
|
|
25
|
-
generate(_ref: string, _ctx: ResolverContext): string;
|
|
26
|
-
}
|
|
27
|
-
export declare class RandomNameProvider implements DynamicVarProvider {
|
|
28
|
-
canHandle(ref: string): boolean;
|
|
29
|
-
generate(_ref: string, _ctx: ResolverContext): string;
|
|
30
|
-
}
|
|
31
|
-
export declare class RandomPhoneProvider implements DynamicVarProvider {
|
|
32
|
-
canHandle(ref: string): boolean;
|
|
33
|
-
generate(_ref: string, _ctx: ResolverContext): string;
|
|
34
|
-
}
|
|
35
|
-
export declare class RandomStringProvider implements DynamicVarProvider {
|
|
36
|
-
canHandle(ref: string): boolean;
|
|
37
|
-
generate(ref: string, _ctx: ResolverContext): string;
|
|
38
|
-
}
|
|
2
|
+
import { DynamicVarRegistry } from "./dynamic-vars-core.js";
|
|
3
|
+
export * from "./dynamic-vars-core.js";
|
|
39
4
|
export declare class HmacProvider implements DynamicVarProvider {
|
|
40
5
|
canHandle(ref: string): boolean;
|
|
41
6
|
generate(ref: string, context: ResolverContext): string;
|
|
42
7
|
}
|
|
43
|
-
export declare class Base64Provider implements DynamicVarProvider {
|
|
44
|
-
canHandle(ref: string): boolean;
|
|
45
|
-
generate(ref: string, _ctx: ResolverContext): string;
|
|
46
|
-
}
|
|
47
|
-
export declare class NowProvider implements DynamicVarProvider {
|
|
48
|
-
canHandle(ref: string): boolean;
|
|
49
|
-
generate(ref: string, _ctx: ResolverContext): string;
|
|
50
|
-
}
|
|
51
8
|
export declare class EnvProvider implements DynamicVarProvider {
|
|
52
9
|
canHandle(ref: string): boolean;
|
|
53
10
|
generate(ref: string, _ctx: ResolverContext): string;
|
|
@@ -56,20 +13,4 @@ export declare class FileProvider implements DynamicVarProvider {
|
|
|
56
13
|
canHandle(ref: string): boolean;
|
|
57
14
|
generate(ref: string, _ctx: ResolverContext): string;
|
|
58
15
|
}
|
|
59
|
-
export declare class AiPlaceholderProvider implements DynamicVarProvider {
|
|
60
|
-
canHandle(ref: string): boolean;
|
|
61
|
-
generate(ref: string, _ctx: ResolverContext): string;
|
|
62
|
-
}
|
|
63
|
-
export declare class FakerPlaceholderProvider implements DynamicVarProvider {
|
|
64
|
-
canHandle(ref: string): boolean;
|
|
65
|
-
generate(ref: string, _ctx: ResolverContext): string;
|
|
66
|
-
}
|
|
67
|
-
export declare class PreviousResponseProvider implements DynamicVarProvider {
|
|
68
|
-
canHandle(ref: string): boolean;
|
|
69
|
-
generate(_ref: string, _ctx: ResolverContext): string;
|
|
70
|
-
}
|
|
71
|
-
export declare class CollectionStatsProvider implements DynamicVarProvider {
|
|
72
|
-
canHandle(ref: string): boolean;
|
|
73
|
-
generate(_ref: string, _ctx: ResolverContext): string;
|
|
74
|
-
}
|
|
75
16
|
export declare function buildDefaultRegistry(): DynamicVarRegistry;
|
|
@@ -1,88 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHmac } from "node:crypto";
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
this.providers.push(provider);
|
|
8
|
-
}
|
|
9
|
-
resolve(ref, context) {
|
|
10
|
-
for (const provider of this.providers) {
|
|
11
|
-
if (provider.canHandle(ref)) {
|
|
12
|
-
return provider.generate(ref, context);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return undefined;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
// ── Helper: parse function-style refs like $randomInt(1,100) ────
|
|
19
|
-
function parseArgs(ref) {
|
|
20
|
-
const parenIdx = ref.indexOf("(");
|
|
21
|
-
if (parenIdx < 0)
|
|
22
|
-
return { name: ref, args: [] };
|
|
23
|
-
const name = ref.slice(0, parenIdx);
|
|
24
|
-
const argsStr = ref.slice(parenIdx + 1, -1); // strip parens
|
|
25
|
-
return { name, args: argsStr.split(",").map((a) => a.trim()) };
|
|
26
|
-
}
|
|
27
|
-
// ── Built-in providers ──────────────────────────────────────────
|
|
28
|
-
export class UuidProvider {
|
|
29
|
-
canHandle(ref) { return ref === "$uuid"; }
|
|
30
|
-
generate(_ref, _ctx) { return randomUUID(); }
|
|
31
|
-
}
|
|
32
|
-
export class TimestampProvider {
|
|
33
|
-
canHandle(ref) { return ref === "$timestamp"; }
|
|
34
|
-
generate(_ref, _ctx) { return String(Math.floor(Date.now() / 1000)); }
|
|
35
|
-
}
|
|
36
|
-
export class IsoTimestampProvider {
|
|
37
|
-
canHandle(ref) { return ref === "$isoTimestamp"; }
|
|
38
|
-
generate(_ref, _ctx) { return new Date().toISOString(); }
|
|
39
|
-
}
|
|
40
|
-
export class RandomIntProvider {
|
|
41
|
-
canHandle(ref) { return ref.startsWith("$randomInt("); }
|
|
42
|
-
generate(ref, _ctx) {
|
|
43
|
-
const { args } = parseArgs(ref);
|
|
44
|
-
const min = parseInt(args[0] ?? "0", 10);
|
|
45
|
-
const max = parseInt(args[1] ?? "100", 10);
|
|
46
|
-
return String(Math.floor(Math.random() * (max - min + 1)) + min);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
export class RandomEmailProvider {
|
|
50
|
-
canHandle(ref) { return ref === "$randomEmail"; }
|
|
51
|
-
generate(_ref, _ctx) {
|
|
52
|
-
const id = randomUUID().slice(0, 8);
|
|
53
|
-
const domains = ["example.com", "test.org", "mail.dev"];
|
|
54
|
-
return `user-${id}@${domains[Math.floor(Math.random() * domains.length)]}`;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
export class RandomNameProvider {
|
|
58
|
-
canHandle(ref) { return ref === "$randomName"; }
|
|
59
|
-
generate(_ref, _ctx) {
|
|
60
|
-
const firsts = ["Ade", "Bola", "Chidi", "Dayo", "Emeka", "Funke", "Gbenga", "Halima", "Ikenna", "Jumoke"];
|
|
61
|
-
const lasts = ["Okafor", "Adeyemi", "Ibrahim", "Nwosu", "Bakare", "Olumide", "Chukwu", "Abubakar", "Obi", "Lawal"];
|
|
62
|
-
return `${firsts[Math.floor(Math.random() * firsts.length)]} ${lasts[Math.floor(Math.random() * lasts.length)]}`;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
export class RandomPhoneProvider {
|
|
66
|
-
canHandle(ref) { return ref === "$randomPhone"; }
|
|
67
|
-
generate(_ref, _ctx) {
|
|
68
|
-
const prefix = "+234";
|
|
69
|
-
const number = String(Math.floor(Math.random() * 9_000_000_000) + 1_000_000_000);
|
|
70
|
-
return `${prefix}${number}`;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
export class RandomStringProvider {
|
|
74
|
-
canHandle(ref) { return ref.startsWith("$randomString("); }
|
|
75
|
-
generate(ref, _ctx) {
|
|
76
|
-
const { args } = parseArgs(ref);
|
|
77
|
-
const len = parseInt(args[0] || "16", 10) || 16;
|
|
78
|
-
const chars = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
79
|
-
let result = "";
|
|
80
|
-
for (let i = 0; i < len; i++) {
|
|
81
|
-
result += chars[Math.floor(Math.random() * chars.length)];
|
|
82
|
-
}
|
|
83
|
-
return result;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
3
|
+
import { DynamicVarRegistry, parseArgs, registerCoreProviders } from "./dynamic-vars-core.js";
|
|
4
|
+
// Node-only providers ($hmac, $env, $file) + the bridge's default registry.
|
|
5
|
+
// The Node-free ones live in dynamic-vars-core.ts.
|
|
6
|
+
export * from "./dynamic-vars-core.js";
|
|
86
7
|
export class HmacProvider {
|
|
87
8
|
canHandle(ref) { return ref.startsWith("$hmac("); }
|
|
88
9
|
generate(ref, context) {
|
|
@@ -94,31 +15,6 @@ export class HmacProvider {
|
|
|
94
15
|
return createHmac("sha256", resolvedKey).update(data).digest("hex");
|
|
95
16
|
}
|
|
96
17
|
}
|
|
97
|
-
export class Base64Provider {
|
|
98
|
-
canHandle(ref) { return ref.startsWith("$base64("); }
|
|
99
|
-
generate(ref, _ctx) {
|
|
100
|
-
const { args } = parseArgs(ref);
|
|
101
|
-
return Buffer.from(args[0] ?? "").toString("base64");
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
export class NowProvider {
|
|
105
|
-
canHandle(ref) { return ref === "$now" || ref.startsWith("$now("); }
|
|
106
|
-
generate(ref, _ctx) {
|
|
107
|
-
const { args } = parseArgs(ref);
|
|
108
|
-
const offset = args[0] ?? "";
|
|
109
|
-
let date = new Date();
|
|
110
|
-
if (offset) {
|
|
111
|
-
const match = offset.match(/^([+-]?\d+)(ms|s|m|h|d)$/);
|
|
112
|
-
if (match) {
|
|
113
|
-
const val = parseInt(match[1], 10);
|
|
114
|
-
const unit = match[2];
|
|
115
|
-
const ms = { ms: 1, s: 1000, m: 60_000, h: 3_600_000, d: 86_400_000 }[unit] ?? 0;
|
|
116
|
-
date = new Date(date.getTime() + val * ms);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return date.toISOString();
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
18
|
export class EnvProvider {
|
|
123
19
|
canHandle(ref) { return ref.startsWith("$env("); }
|
|
124
20
|
generate(ref, _ctx) {
|
|
@@ -139,49 +35,13 @@ export class FileProvider {
|
|
|
139
35
|
}
|
|
140
36
|
}
|
|
141
37
|
}
|
|
142
|
-
// ── AI-native placeholders ──────────────────────────────────────
|
|
143
|
-
export class AiPlaceholderProvider {
|
|
144
|
-
canHandle(ref) { return ref.startsWith("$ai("); }
|
|
145
|
-
generate(ref, _ctx) {
|
|
146
|
-
const { args } = parseArgs(ref);
|
|
147
|
-
return `[AI not configured: ${args[0] ?? ref}]`;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
export class FakerPlaceholderProvider {
|
|
151
|
-
canHandle(ref) { return ref.startsWith("$faker("); }
|
|
152
|
-
generate(ref, _ctx) {
|
|
153
|
-
const { args } = parseArgs(ref);
|
|
154
|
-
return `[faker not configured: ${args[0] ?? ref}]`;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
export class PreviousResponseProvider {
|
|
158
|
-
canHandle(ref) { return ref === "$previous.response"; }
|
|
159
|
-
generate(_ref, _ctx) { return "[previous.response: use in scenario context]"; }
|
|
160
|
-
}
|
|
161
|
-
export class CollectionStatsProvider {
|
|
162
|
-
canHandle(ref) { return ref === "$collection.stats"; }
|
|
163
|
-
generate(_ref, _ctx) { return "[collection.stats: use in scenario context]"; }
|
|
164
|
-
}
|
|
165
38
|
// ── Factory ─────────────────────────────────────────────────────
|
|
166
39
|
export function buildDefaultRegistry() {
|
|
167
40
|
const registry = new DynamicVarRegistry();
|
|
168
|
-
registry
|
|
169
|
-
registry.register(new TimestampProvider());
|
|
170
|
-
registry.register(new IsoTimestampProvider());
|
|
171
|
-
registry.register(new RandomIntProvider());
|
|
172
|
-
registry.register(new RandomEmailProvider());
|
|
173
|
-
registry.register(new RandomNameProvider());
|
|
174
|
-
registry.register(new RandomPhoneProvider());
|
|
175
|
-
registry.register(new RandomStringProvider());
|
|
41
|
+
registerCoreProviders(registry);
|
|
176
42
|
registry.register(new HmacProvider());
|
|
177
|
-
registry.register(new Base64Provider());
|
|
178
|
-
registry.register(new NowProvider());
|
|
179
43
|
registry.register(new EnvProvider());
|
|
180
44
|
registry.register(new FileProvider());
|
|
181
|
-
registry.register(new AiPlaceholderProvider());
|
|
182
|
-
registry.register(new FakerPlaceholderProvider());
|
|
183
|
-
registry.register(new PreviousResponseProvider());
|
|
184
|
-
registry.register(new CollectionStatsProvider());
|
|
185
45
|
return registry;
|
|
186
46
|
}
|
|
187
47
|
//# sourceMappingURL=dynamic-vars.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-vars.js","sourceRoot":"","sources":["../../src/collections/dynamic-vars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"dynamic-vars.js","sourceRoot":"","sources":["../../src/collections/dynamic-vars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE9F,4EAA4E;AAC5E,mDAAmD;AACnD,cAAc,wBAAwB,CAAC;AAEvC,MAAM,OAAO,YAAY;IACvB,SAAS,CAAC,GAAW,IAAa,OAAO,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpE,QAAQ,CAAC,GAAW,EAAE,OAAwB;QAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1B,iEAAiE;QACjE,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QACjF,OAAO,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;CACF;AAED,MAAM,OAAO,WAAW;IACtB,SAAS,CAAC,GAAW,IAAa,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,GAAW,EAAE,IAAqB;QACzC,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IACvB,SAAS,CAAC,GAAW,IAAa,OAAO,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpE,QAAQ,CAAC,GAAW,EAAE,IAAqB;QACzC,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,oBAAoB,IAAI,GAAG,CAAC;QACrC,CAAC;IACH,CAAC;CACF;AAGD,mEAAmE;AAEnE,MAAM,UAAU,oBAAoB;IAClC,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAC1C,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;IACtC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Base64 that works the same in Node and in the browser (no Buffer), UTF-8 safe.
|
|
2
|
+
export function toBase64(text) {
|
|
3
|
+
const bytes = new TextEncoder().encode(text);
|
|
4
|
+
let binary = "";
|
|
5
|
+
for (let i = 0; i < bytes.length; i += 0x8000) {
|
|
6
|
+
binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000));
|
|
7
|
+
}
|
|
8
|
+
return btoa(binary);
|
|
9
|
+
}
|
|
10
|
+
/** Lenient like Buffer: missing padding is fine. Throws on characters outside the alphabet. */
|
|
11
|
+
export function fromBase64(encoded) {
|
|
12
|
+
const clean = encoded.replace(/\s+/g, "");
|
|
13
|
+
const padded = clean + "=".repeat((4 - (clean.length % 4)) % 4);
|
|
14
|
+
const binary = atob(padded);
|
|
15
|
+
const bytes = new Uint8Array(binary.length);
|
|
16
|
+
for (let i = 0; i < binary.length; i++)
|
|
17
|
+
bytes[i] = binary.charCodeAt(i);
|
|
18
|
+
return new TextDecoder().decode(bytes);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=encoding.js.map
|