callman-core 1.5.2 → 1.6.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.
@@ -1,3 +1,10 @@
1
- import type { ExecuteRequestResult, TestResult } from "../types/index.js";
1
+ import type { ContractRule, ExecuteRequestResult, TestResult } from "../types/index.js";
2
+ import { type ResolvedCandidate } from "./pathResolver.js";
3
+ export interface ContractCandidateOutcome {
4
+ status: "PASS" | "FAIL";
5
+ message?: string;
6
+ }
7
+ export declare const evaluateContractCandidate: (contract: ContractRule, candidate: ResolvedCandidate, path: string) => ContractCandidateOutcome;
8
+ export declare const normalizeContractRule: (contract: unknown) => ContractRule | null;
2
9
  export declare const validateContracts: (contracts: any[] | undefined, response: ExecuteRequestResult) => TestResult[];
3
10
  //# sourceMappingURL=contractValidator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contractValidator.d.ts","sourceRoot":"","sources":["../../src/contract/contractValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,oBAAoB,EACpB,UAAU,EACX,MAAM,mBAAmB,CAAC;AA+P3B,eAAO,MAAM,iBAAiB,GAC5B,WAAW,GAAG,EAAE,GAAG,SAAS,EAC5B,UAAU,oBAAoB,KAC7B,UAAU,EA+DZ,CAAC"}
1
+ {"version":3,"file":"contractValidator.d.ts","sourceRoot":"","sources":["../../src/contract/contractValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAEZ,oBAAoB,EACpB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAoRhF,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD,eAAO,MAAM,yBAAyB,GACpC,UAAU,YAAY,EACtB,WAAW,iBAAiB,EAC5B,MAAM,MAAM,KACX,wBAAwE,CAAC;AAM5E,eAAO,MAAM,qBAAqB,GAChC,UAAU,OAAO,KAChB,YAAY,GAAG,IAAmC,CAAC;AAyHtD,eAAO,MAAM,iBAAiB,GAC5B,WAAW,GAAG,EAAE,GAAG,SAAS,EAC5B,UAAU,oBAAoB,KAC7B,UAAU,EA+EZ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { safeGet } from "../utils/get.js";
1
+ import { resolveContractPath } from "./pathResolver.js";
2
2
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3
3
  const getValueType = (value) => {
4
4
  if (value === null) {
@@ -174,59 +174,199 @@ const validateExtendedRules = (path, value, contract) => {
174
174
  }
175
175
  return null;
176
176
  };
177
- const resolveContractTarget = (response, path) => {
177
+ const toSerializableValue = (value) => {
178
+ if (value === undefined || typeof value === "function" || typeof value === "symbol") {
179
+ return null;
180
+ }
181
+ if (value === null ||
182
+ typeof value === "string" ||
183
+ typeof value === "number" ||
184
+ typeof value === "boolean") {
185
+ return value;
186
+ }
187
+ try {
188
+ return JSON.parse(JSON.stringify(value));
189
+ }
190
+ catch {
191
+ return String(value);
192
+ }
193
+ };
194
+ // Resolve a contract path against the response, fanning out across
195
+ // `[]` wildcard segments. `response.foo` paths probe the full
196
+ // response envelope (status/data/headers/duration); other paths probe
197
+ // `response.data` first and fall back to the envelope.
198
+ const resolveContractCandidates = (response, path) => {
178
199
  if (path.startsWith("response.")) {
179
- return safeGet({ response }, path);
200
+ return resolveContractPath({ response }, path);
201
+ }
202
+ const dataCandidates = resolveContractPath(response.data, path);
203
+ const anyExists = dataCandidates.some((candidate) => candidate.exists);
204
+ if (anyExists) {
205
+ return dataCandidates;
206
+ }
207
+ const envelopeCandidates = resolveContractPath(response, path);
208
+ const envelopeFound = envelopeCandidates.some((candidate) => candidate.exists);
209
+ // Return the candidate set that has the most chance of being meaningful.
210
+ // If neither set found data, prefer `data` candidates so error
211
+ // messages cite the canonical body location.
212
+ return envelopeFound ? envelopeCandidates : dataCandidates;
213
+ };
214
+ // Evaluate a single resolved candidate against a normalised contract.
215
+ // Public so callers that need per-candidate results (e.g. the desktop
216
+ // backend that highlights specific failing indices in the response
217
+ // viewer) can iterate the candidates themselves while still sharing
218
+ // the rule semantics with the validator below.
219
+ export const evaluateContractCandidate = (contract, candidate, path) => evaluateCandidate(contract, candidate, path);
220
+ // Public wrapper around `normalizeContract` so external consumers can
221
+ // reuse the same input-shape coercion (rules.required vs top-level
222
+ // required, equals vs value, etc.) before invoking
223
+ // `evaluateContractCandidate`.
224
+ export const normalizeContractRule = (contract) => normalizeContract(contract);
225
+ const evaluateCandidate = (contract, candidate, path) => {
226
+ const shouldExist = contract.exists ?? contract.required ?? true;
227
+ const failureLabel = candidate.actualPath || path;
228
+ if (candidate.traversalError === "expected_array") {
229
+ return {
230
+ status: "FAIL",
231
+ message: `${failureLabel} expected array but got ${getValueType(candidate.value)}`,
232
+ };
233
+ }
234
+ if (shouldExist && !candidate.exists) {
235
+ return { status: "FAIL", message: `${failureLabel} is missing` };
236
+ }
237
+ if (!shouldExist && candidate.exists) {
238
+ return { status: "FAIL", message: `${failureLabel} exists` };
239
+ }
240
+ if (!candidate.exists) {
241
+ return { status: "PASS" };
242
+ }
243
+ if (contract.type) {
244
+ const actualType = getValueType(candidate.value);
245
+ if (actualType !== contract.type) {
246
+ return {
247
+ status: "FAIL",
248
+ message: `${failureLabel} expected ${contract.type} but got ${actualType}`,
249
+ };
250
+ }
251
+ }
252
+ const extendedRulesMessage = validateExtendedRules(failureLabel, candidate.value, contract);
253
+ if (extendedRulesMessage) {
254
+ return { status: "FAIL", message: extendedRulesMessage };
180
255
  }
181
- const dataResult = safeGet(response.data, path);
182
- if (dataResult.exists) {
183
- return dataResult;
256
+ if (Object.prototype.hasOwnProperty.call(contract, "equals")) {
257
+ if (!isDeepEqual(candidate.value, contract.equals)) {
258
+ return {
259
+ status: "FAIL",
260
+ message: `${failureLabel} expected ${formatValue(contract.equals)} but got ${formatValue(candidate.value)}`,
261
+ };
262
+ }
263
+ }
264
+ return { status: "PASS" };
265
+ };
266
+ const buildResult = ({ name, status, message, ruleId, path, candidate, }) => {
267
+ const result = { name, status, path };
268
+ if (message) {
269
+ result.message = message;
270
+ }
271
+ if (ruleId) {
272
+ result.ruleId = ruleId;
273
+ }
274
+ if (candidate) {
275
+ result.actualPath = candidate.actualPath;
276
+ result.actualValue = toSerializableValue(candidate.value);
277
+ result.actualType = getValueType(candidate.value);
278
+ }
279
+ return result;
280
+ };
281
+ // Compute a human-readable label of the rule's expected type for use
282
+ // in PASS messages. Mirrors the backend engine's `getExpectedTypeLabel`
283
+ // so desktop / CLI / scenario reports all read the same way.
284
+ const getExpectedTypeLabel = (contract) => {
285
+ if (contract.type)
286
+ return contract.type;
287
+ const rules = contract.rules ?? {};
288
+ if (rules.min !== undefined || rules.max !== undefined)
289
+ return "number";
290
+ if (rules.minItems !== undefined || rules.maxItems !== undefined)
291
+ return "array";
292
+ if (rules.minLength !== undefined ||
293
+ rules.maxLength !== undefined ||
294
+ rules.pattern !== undefined ||
295
+ rules.enumValues !== undefined ||
296
+ rules.contains !== undefined) {
297
+ return "string";
184
298
  }
185
- return safeGet(response, path);
299
+ return "value";
186
300
  };
187
- const buildResult = (name, status, message) => ({
188
- name,
189
- status,
190
- ...(message ? { message } : {}),
191
- });
192
301
  export const validateContracts = (contracts, response) => {
193
302
  if (!contracts || contracts.length === 0) {
194
303
  return [];
195
304
  }
196
- return contracts.map((rawContract, index) => {
305
+ // Per-candidate aggregation. For wildcard rules like `users[].id`
306
+ // we emit ONE TestResult per resolved candidate (one per array
307
+ // element). This keeps CLI / scenario reports aligned with the
308
+ // desktop response panel, which has always rendered per-index
309
+ // entries via the backend `validateResponse` engine. Concrete-path
310
+ // rules continue to produce exactly one entry.
311
+ return contracts.flatMap((rawContract, index) => {
197
312
  const contract = normalizeContract(rawContract);
313
+ const rawRuleId = isRecord(rawContract) && typeof rawContract.id === "string"
314
+ ? rawContract.id
315
+ : undefined;
198
316
  if (!contract?.path) {
199
- return buildResult(`Contract ${index + 1}`, "FAIL", "Contract must define a path or field");
317
+ return [
318
+ buildResult({
319
+ name: `Contract ${index + 1}`,
320
+ status: "FAIL",
321
+ message: "Contract must define a path or field",
322
+ ruleId: rawRuleId,
323
+ path: "",
324
+ }),
325
+ ];
200
326
  }
201
327
  const path = contract.path;
202
- const name = contract.name ?? `Contract: ${path}`;
203
- const target = resolveContractTarget(response, path);
204
- const shouldExist = contract.exists ?? contract.required ?? true;
205
- if (shouldExist && !target.exists) {
206
- return buildResult(name, "FAIL", `${path} is missing`);
207
- }
208
- if (!shouldExist && target.exists) {
209
- return buildResult(name, "FAIL", `${path} exists`);
210
- }
211
- if (!target.exists) {
212
- return buildResult(name, "PASS");
213
- }
214
- if (contract.type) {
215
- const actualType = getValueType(target.value);
216
- if (actualType !== contract.type) {
217
- return buildResult(name, "FAIL", `${path} expected ${contract.type} but got ${actualType}`);
218
- }
328
+ const candidates = resolveContractCandidates(response, path);
329
+ if (candidates.length === 0) {
330
+ return [
331
+ buildResult({
332
+ name: `Contract: ${path}`,
333
+ status: "FAIL",
334
+ message: `${path} is missing`,
335
+ ruleId: rawRuleId,
336
+ path,
337
+ }),
338
+ ];
219
339
  }
220
- const extendedRulesMessage = validateExtendedRules(path, target.value, contract);
221
- if (extendedRulesMessage) {
222
- return buildResult(name, "FAIL", extendedRulesMessage);
223
- }
224
- if (Object.prototype.hasOwnProperty.call(contract, "equals")) {
225
- if (!isDeepEqual(target.value, contract.equals)) {
226
- return buildResult(name, "FAIL", `${path} expected ${formatValue(contract.equals)} but got ${formatValue(target.value)}`);
340
+ const expectedTypeLabel = getExpectedTypeLabel(contract);
341
+ return candidates.map((candidate) => {
342
+ const outcome = evaluateCandidate(contract, candidate, path);
343
+ // Per-candidate `name` uses the actual concrete path so each
344
+ // row in the report ("Contract: data[0].id", "Contract:
345
+ // data[1].id") is uniquely identifiable.
346
+ const labelPath = candidate.actualPath || path;
347
+ const name = contract.name ?? `Contract: ${labelPath}`;
348
+ if (outcome.status === "FAIL") {
349
+ return buildResult({
350
+ name,
351
+ status: "FAIL",
352
+ message: outcome.message,
353
+ ruleId: rawRuleId,
354
+ path,
355
+ candidate,
356
+ });
227
357
  }
228
- }
229
- return buildResult(name, "PASS");
358
+ // PASS message format mirrors the backend engine — "data[0].id
359
+ // matches expected string". Stays consistent across all three
360
+ // execution surfaces.
361
+ return buildResult({
362
+ name,
363
+ status: "PASS",
364
+ message: `${labelPath} matches expected ${expectedTypeLabel}`,
365
+ ruleId: rawRuleId,
366
+ path,
367
+ candidate,
368
+ });
369
+ });
230
370
  });
231
371
  };
232
372
  //# sourceMappingURL=contractValidator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contractValidator.js","sourceRoot":"","sources":["../../src/contract/contractValidator.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CACpE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAM,YAAY,GAAG,CAAC,KAAc,EAAqB,EAAE;IACzD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,OAAO,KAA0B,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAa,EAAE,KAAc,EAAW,EAAE;IAC7D,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YACjC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAErC,OAAO,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YACzC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CACrB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;gBAChD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CACnC,CAAC;IACN,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAGF,MAAM,WAAW,GAAG,CAAC,KAAc,EAAU,EAAE;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,KAAK,GAAG,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAAa,EAAuB,EAAE;IAC/D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,kBAAkB,GAAiB;QACvC,IAAI,EAAE,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACnE,IAAI,EACF,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;YAC/B,CAAC,CAAC,QAAQ,CAAC,IAAI;YACf,CAAC,CAAC,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ;gBAClC,CAAC,CAAC,QAAQ,CAAC,KAAK;gBAChB,CAAC,CAAC,SAAS;QACjB,MAAM,EACJ,OAAO,QAAQ,CAAC,MAAM,KAAK,SAAS;YAClC,CAAC,CAAC,QAAQ,CAAC,MAAM;YACjB,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS;gBACjC,CAAC,CAAC,KAAK,CAAC,MAAM;gBACd,CAAC,CAAC,SAAS;QACjB,QAAQ,EACN,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS;YACpC,CAAC,CAAC,QAAQ,CAAC,QAAQ;YACnB,CAAC,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;gBACnC,CAAC,CAAC,KAAK,CAAC,QAAQ;gBAChB,CAAC,CAAC,SAAS;QACjB,IAAI,EACF,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;YAC/B,CAAC,CAAC,QAAQ,CAAC,IAAyB;YACpC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAC9B,CAAC,CAAC,KAAK,CAAC,IAAyB;gBACjC,CAAC,CAAC,SAAS;QACjB,KAAK,EAAE;YACL,QAAQ,EAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC1E,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;YAC1D,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;YAC1D,SAAS,EAAE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC5E,SAAS,EAAE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC5E,QAAQ,EAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACzE,QAAQ,EAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACzE,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;gBACzC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChD,CAAC,CAAC,SAAS;YACb,OAAO,EAAE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACtE,QAAQ,EAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SAC1E;KACF,CAAC;IAEF,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC7D,kBAAkB,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC9C,CAAC;SAAM,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QACnE,kBAAkB,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7C,CAAC;SAAM,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;QACjE,kBAAkB,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3C,CAAC;SAAM,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QAChE,kBAAkB,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1C,CAAC;IAED,OAAO,kBAAkB,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,KAAc,EAAiB,EAAE;IACvE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,GAAG,IAAI,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,IAAI,oBAAoB,CAAC;IACrC,CAAC;IAED,IACE,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC,MAAM,KAAK,CAAC,EAC1D,CAAC;QACD,OAAO,GAAG,IAAI,oBAAoB,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC5B,IAAY,EACZ,KAAc,EACd,QAAsB,EACP,EAAE;IACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE9C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO,GAAG,IAAI,4BAA4B,UAAU,EAAE,CAAC;QACzD,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YACjD,OAAO,GAAG,IAAI,sBAAsB,KAAK,CAAC,GAAG,SAAS,KAAK,EAAE,CAAC;QAChE,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YACjD,OAAO,GAAG,IAAI,qBAAqB,KAAK,CAAC,GAAG,SAAS,KAAK,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,IACE,KAAK,CAAC,SAAS,KAAK,SAAS;QAC7B,KAAK,CAAC,SAAS,KAAK,SAAS;QAC7B,KAAK,CAAC,OAAO,KAAK,SAAS;QAC3B,KAAK,CAAC,UAAU,KAAK,SAAS;QAC9B,KAAK,CAAC,QAAQ,KAAK,SAAS,EAC5B,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,GAAG,IAAI,4BAA4B,UAAU,EAAE,CAAC;QACzD,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACpE,OAAO,GAAG,IAAI,6BAA6B,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,MAAM,EAAE,CAAC;QACpF,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACpE,OAAO,GAAG,IAAI,4BAA4B,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,MAAM,EAAE,CAAC;QACnF,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpE,OAAO,GAAG,IAAI,kBAAkB,KAAK,CAAC,QAAQ,GAAG,CAAC;QACpD,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO,GAAG,IAAI,qBAAqB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;QAClF,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAExC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,GAAG,IAAI,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,GAAG,IAAI,2BAA2B,UAAU,EAAE,CAAC;QACxD,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAClE,OAAO,GAAG,IAAI,6BAA6B,KAAK,CAAC,QAAQ,SAAS,KAAK,CAAC,MAAM,EAAE,CAAC;QACnF,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAClE,OAAO,GAAG,IAAI,4BAA4B,KAAK,CAAC,QAAQ,SAAS,KAAK,CAAC,MAAM,EAAE,CAAC;QAClF,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC5B,QAA8B,EAC9B,IAAY,EACZ,EAAE;IACF,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEhD,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAClB,IAAY,EACZ,MAA4B,EAC5B,OAAgB,EACJ,EAAE,CAAC,CAAC;IAChB,IAAI;IACJ,MAAM;IACN,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAChC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,SAA4B,EAC5B,QAA8B,EAChB,EAAE;IAChB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;QAC1C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;YACpB,OAAO,WAAW,CAChB,YAAY,KAAK,GAAG,CAAC,EAAE,EACvB,MAAM,EACN,sCAAsC,CACvC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,aAAa,IAAI,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC;QAEjE,IAAI,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE9C,IAAI,UAAU,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACjC,OAAO,WAAW,CAChB,IAAI,EACJ,MAAM,EACN,GAAG,IAAI,aAAa,QAAQ,CAAC,IAAI,YAAY,UAAU,EAAE,CAC1D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEjF,IAAI,oBAAoB,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChD,OAAO,WAAW,CAChB,IAAI,EACJ,MAAM,EACN,GAAG,IAAI,aAAa,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACxF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
1
+ {"version":3,"file":"contractValidator.js","sourceRoot":"","sources":["../../src/contract/contractValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface ResolvedCandidate {
2
+ actualPath: string;
3
+ exists: boolean;
4
+ value: unknown;
5
+ traversalError?: "expected_array";
6
+ }
7
+ declare const isPlainObject: (value: unknown) => value is Record<string, unknown>;
8
+ export declare const resolveContractPath: (source: unknown, path: string) => ResolvedCandidate[];
9
+ export declare const summariseCandidates: (candidates: ResolvedCandidate[]) => {
10
+ allExist: boolean;
11
+ firstMissing: ResolvedCandidate | null;
12
+ };
13
+ export { isPlainObject };
14
+ export declare const generalizeContractPath: (path: string) => string;
15
+ export declare const normalizeContractPathKey: (path: string) => string;
16
+ //# sourceMappingURL=pathResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathResolver.d.ts","sourceRoot":"","sources":["../../src/contract/pathResolver.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC;AAiFD,QAAA,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CACD,CAAC;AAkHvE,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,OAAO,EACf,MAAM,MAAM,KACX,iBAAiB,EAcnB,CAAC;AAQF,eAAO,MAAM,mBAAmB,GAC9B,YAAY,iBAAiB,EAAE,KAC9B;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAM7D,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC;AAUzB,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,KAAG,MACtB,CAAC;AAEjC,eAAO,MAAM,wBAAwB,GAAI,MAAM,MAAM,KAAG,MACnB,CAAC"}
@@ -0,0 +1,199 @@
1
+ // Wildcard-aware path resolver for contract assertions.
2
+ //
3
+ // Contract rule paths can contain `[]` segments that fan out across
4
+ // every element of an array, e.g. `users[].profile.email` against
5
+ // `{ users: [{ profile: { email: "a" } }, { profile: { email: "b" } }] }`
6
+ // resolves to two candidates (`users[0].profile.email`,
7
+ // `users[1].profile.email`). The desktop UI normalises hover-created
8
+ // rules via `generalizeContractPath` so concrete index paths become
9
+ // wildcards by the time they hit storage, meaning anything that
10
+ // validates rules MUST understand `[]`.
11
+ //
12
+ // Historically the backend `contract-rule.engine.ts` shipped its own
13
+ // wildcard-aware resolver while the shared `callman-core` validator
14
+ // used the simpler `safeGet` (concrete-index only). That divergence
15
+ // caused desktop-green rules to silently fail in scenario / CLI runs.
16
+ // This module is the single source of truth — backend engine, scenario
17
+ // adapter, and CLI runner all funnel through `resolveContractPath`.
18
+ const appendPath = (base, key) => base ? `${base}.${key}` : key;
19
+ // Parse a dotted path with optional `[]` wildcard and `[N]` concrete
20
+ // index suffixes. Each `.`-separated segment can have at most one
21
+ // bracket suffix; nested brackets (e.g. `matrix[0][1]`) are expanded
22
+ // into multiple internal segments. Examples:
23
+ // "users[].name" → [{users, wildcard}, {name}]
24
+ // "users[0].name" → [{users, index:0}, {name}]
25
+ // "matrix[0][1]" → [{matrix, index:0}, {"", index:1}]
26
+ // "items[]" → [{items, wildcard}]
27
+ // "[]" → [{"", wildcard}]
28
+ const parsePath = (path) => {
29
+ const segments = [];
30
+ for (const rawSegment of path.split(".")) {
31
+ if (!rawSegment) {
32
+ continue;
33
+ }
34
+ let remaining = rawSegment;
35
+ let key = "";
36
+ const headMatch = remaining.match(/^([^[]+)/);
37
+ if (headMatch) {
38
+ key = headMatch[1];
39
+ remaining = remaining.slice(key.length);
40
+ }
41
+ // No bracket suffix → plain key access.
42
+ if (remaining.length === 0) {
43
+ segments.push({ key, arrayWildcard: false, arrayIndex: null });
44
+ continue;
45
+ }
46
+ // First bracket attaches to `key` itself; subsequent brackets
47
+ // become standalone segments (no key) so they apply against the
48
+ // previously-resolved value.
49
+ let isFirstBracket = true;
50
+ while (remaining.length > 0) {
51
+ const bracketMatch = remaining.match(/^\[(\d*)\]/);
52
+ if (!bracketMatch) {
53
+ // Unrecognised suffix — treat the raw chunk as a literal key.
54
+ segments.push({
55
+ key: isFirstBracket ? key + remaining : remaining,
56
+ arrayWildcard: false,
57
+ arrayIndex: null,
58
+ });
59
+ remaining = "";
60
+ break;
61
+ }
62
+ const inside = bracketMatch[1];
63
+ const arrayWildcard = inside === "";
64
+ const arrayIndex = arrayWildcard ? null : Number(inside);
65
+ segments.push({
66
+ key: isFirstBracket ? key : "",
67
+ arrayWildcard,
68
+ arrayIndex,
69
+ });
70
+ remaining = remaining.slice(bracketMatch[0].length);
71
+ isFirstBracket = false;
72
+ }
73
+ }
74
+ return segments;
75
+ };
76
+ const isPlainObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
77
+ const resolveInternal = (currentValue, segments, currentPath) => {
78
+ if (segments.length === 0) {
79
+ return [
80
+ {
81
+ actualPath: currentPath,
82
+ exists: currentValue !== undefined,
83
+ value: currentValue,
84
+ },
85
+ ];
86
+ }
87
+ const [segment, ...rest] = segments;
88
+ const nextPath = segment.key ? appendPath(currentPath, segment.key) : currentPath;
89
+ // Pure bracket segment (no key) — `users[0]` parses to a key
90
+ // segment followed by a keyless segment when chained as
91
+ // `matrix[0][1]`. Applies the bracket operation against the
92
+ // already-resolved value.
93
+ if (!segment.key && (segment.arrayWildcard || segment.arrayIndex !== null)) {
94
+ return applyBracketSegment(currentValue, segment, rest, nextPath);
95
+ }
96
+ if (currentValue === undefined ||
97
+ currentValue === null ||
98
+ (typeof currentValue !== "object" && !Array.isArray(currentValue))) {
99
+ return [
100
+ {
101
+ actualPath: nextPath,
102
+ exists: false,
103
+ value: undefined,
104
+ },
105
+ ];
106
+ }
107
+ const container = currentValue;
108
+ if (!Object.prototype.hasOwnProperty.call(container, segment.key)) {
109
+ return [
110
+ {
111
+ actualPath: nextPath,
112
+ exists: false,
113
+ value: undefined,
114
+ },
115
+ ];
116
+ }
117
+ const segmentValue = container[segment.key];
118
+ if (!segment.arrayWildcard && segment.arrayIndex === null) {
119
+ return resolveInternal(segmentValue, rest, nextPath);
120
+ }
121
+ return applyBracketSegment(segmentValue, segment, rest, nextPath);
122
+ };
123
+ // Apply a bracket suffix (`[]` or `[N]`) against an already-resolved
124
+ // value. Used by both `key[...]` segments and standalone `[...]`
125
+ // segments (e.g. inside `matrix[0][1]`).
126
+ const applyBracketSegment = (segmentValue, segment, rest, nextPath) => {
127
+ if (!Array.isArray(segmentValue)) {
128
+ return [
129
+ {
130
+ actualPath: nextPath || "[]",
131
+ exists: segmentValue !== undefined,
132
+ value: segmentValue,
133
+ traversalError: "expected_array",
134
+ },
135
+ ];
136
+ }
137
+ if (segment.arrayWildcard) {
138
+ if (segmentValue.length === 0) {
139
+ return [
140
+ {
141
+ actualPath: nextPath || "[]",
142
+ exists: false,
143
+ value: undefined,
144
+ },
145
+ ];
146
+ }
147
+ return segmentValue.flatMap((item, index) => resolveInternal(item, rest, `${nextPath}[${index}]`));
148
+ }
149
+ // Concrete index — `arrayIndex` is non-null by precondition.
150
+ const index = segment.arrayIndex;
151
+ if (index < 0 || index >= segmentValue.length) {
152
+ return [
153
+ {
154
+ actualPath: `${nextPath}[${index}]`,
155
+ exists: false,
156
+ value: undefined,
157
+ },
158
+ ];
159
+ }
160
+ return resolveInternal(segmentValue[index], rest, `${nextPath}[${index}]`);
161
+ };
162
+ export const resolveContractPath = (source, path) => {
163
+ const trimmed = path.trim();
164
+ if (!trimmed) {
165
+ return [
166
+ {
167
+ actualPath: "",
168
+ exists: source !== undefined,
169
+ value: source,
170
+ },
171
+ ];
172
+ }
173
+ return resolveInternal(source, parsePath(trimmed), "");
174
+ };
175
+ // Convenience wrapper: validators frequently want a single "did this
176
+ // resolve successfully" answer. Returns the first failing candidate if
177
+ // any (so error messages can cite the concrete failing index) or the
178
+ // last successful one. Validators that need every candidate (e.g. to
179
+ // run the rule across all array members) should call
180
+ // `resolveContractPath` directly.
181
+ export const summariseCandidates = (candidates) => {
182
+ const firstMissing = candidates.find((candidate) => !candidate.exists) ?? null;
183
+ return {
184
+ allExist: firstMissing === null,
185
+ firstMissing,
186
+ };
187
+ };
188
+ export { isPlainObject };
189
+ // Canonical form for a contract rule path. The desktop UI lets users
190
+ // click on a concrete response field (e.g. `users[0].name`); to make
191
+ // the rule apply across every array element, we strip concrete
192
+ // indices into the `[]` wildcard form (`users[].name`). Shared by
193
+ // frontend rule-creation flows and any backend / CLI tooling that
194
+ // re-derives paths from telemetry, so all three runtimes (desktop
195
+ // validation, scenario adapter, CLI runner) agree on what
196
+ // `users[0].name` means once stored.
197
+ export const generalizeContractPath = (path) => path.replace(/\[\d+\]/g, "[]");
198
+ export const normalizeContractPathKey = (path) => generalizeContractPath(path.trim());
199
+ //# sourceMappingURL=pathResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathResolver.js","sourceRoot":"","sources":["../../src/contract/pathResolver.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,oEAAoE;AACpE,kEAAkE;AAClE,0EAA0E;AAC1E,wDAAwD;AACxD,qEAAqE;AACrE,oEAAoE;AACpE,gEAAgE;AAChE,wCAAwC;AACxC,EAAE;AACF,qEAAqE;AACrE,oEAAoE;AACpE,oEAAoE;AACpE,sEAAsE;AACtE,uEAAuE;AACvE,oEAAoE;AAkBpE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,GAAW,EAAU,EAAE,CACvD,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAEhC,qEAAqE;AACrE,kEAAkE;AAClE,qEAAqE;AACrE,6CAA6C;AAC7C,sDAAsD;AACtD,qDAAqD;AACrD,6DAA6D;AAC7D,8CAA8C;AAC9C,2CAA2C;AAC3C,MAAM,SAAS,GAAG,CAAC,IAAY,EAAiB,EAAE;IAChD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IAEnC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QAED,IAAI,SAAS,GAAG,UAAU,CAAC;QAC3B,IAAI,GAAG,GAAG,EAAE,CAAC;QAEb,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACnB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAED,wCAAwC;QACxC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,SAAS;QACX,CAAC;QAED,8DAA8D;QAC9D,gEAAgE;QAChE,6BAA6B;QAC7B,IAAI,cAAc,GAAG,IAAI,CAAC;QAC1B,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACnD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,8DAA8D;gBAC9D,QAAQ,CAAC,IAAI,CAAC;oBACZ,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS;oBACjD,aAAa,EAAE,KAAK;oBACpB,UAAU,EAAE,IAAI;iBACjB,CAAC,CAAC;gBACH,SAAS,GAAG,EAAE,CAAC;gBACf,MAAM;YACR,CAAC;YAED,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,aAAa,GAAG,MAAM,KAAK,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAEzD,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC9B,aAAa;gBACb,UAAU;aACX,CAAC,CAAC;YAEH,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACpD,cAAc,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,KAAc,EAAoC,EAAE,CACzE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAM,eAAe,GAAG,CACtB,YAAqB,EACrB,QAAuB,EACvB,WAAmB,EACE,EAAE;IACvB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL;gBACE,UAAU,EAAE,WAAW;gBACvB,MAAM,EAAE,YAAY,KAAK,SAAS;gBAClC,KAAK,EAAE,YAAY;aACpB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAElF,6DAA6D;IAC7D,wDAAwD;IACxD,4DAA4D;IAC5D,0BAA0B;IAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3E,OAAO,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpE,CAAC;IAED,IACE,YAAY,KAAK,SAAS;QAC1B,YAAY,KAAK,IAAI;QACrB,CAAC,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAClE,CAAC;QACD,OAAO;YACL;gBACE,UAAU,EAAE,QAAQ;gBACpB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,SAAS;aACjB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,YAAuC,CAAC;IAE1D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO;YACL;gBACE,UAAU,EAAE,QAAQ;gBACpB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,SAAS;aACjB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC1D,OAAO,eAAe,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpE,CAAC,CAAC;AAEF,qEAAqE;AACrE,iEAAiE;AACjE,yCAAyC;AACzC,MAAM,mBAAmB,GAAG,CAC1B,YAAqB,EACrB,OAAoB,EACpB,IAAmB,EACnB,QAAgB,EACK,EAAE;IACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO;YACL;gBACE,UAAU,EAAE,QAAQ,IAAI,IAAI;gBAC5B,MAAM,EAAE,YAAY,KAAK,SAAS;gBAClC,KAAK,EAAE,YAAY;gBACnB,cAAc,EAAE,gBAAgB;aACjC;SACF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL;oBACE,UAAU,EAAE,QAAQ,IAAI,IAAI;oBAC5B,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,SAAS;iBACjB;aACF,CAAC;QACJ,CAAC;QAED,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC1C,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,QAAQ,IAAI,KAAK,GAAG,CAAC,CACrD,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,UAAoB,CAAC;IAC3C,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;QAC9C,OAAO;YACL;gBACE,UAAU,EAAE,GAAG,QAAQ,IAAI,KAAK,GAAG;gBACnC,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,SAAS;aACjB;SACF,CAAC;IACJ,CAAC;IAED,OAAO,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAe,EACf,IAAY,EACS,EAAE;IACvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL;gBACE,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,MAAM,KAAK,SAAS;gBAC5B,KAAK,EAAE,MAAM;aACd;SACF,CAAC;IACJ,CAAC;IAED,OAAO,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,qEAAqE;AACrE,uEAAuE;AACvE,qEAAqE;AACrE,qEAAqE;AACrE,qDAAqD;AACrD,kCAAkC;AAClC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAA+B,EACgC,EAAE;IACjE,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IAC/E,OAAO;QACL,QAAQ,EAAE,YAAY,KAAK,IAAI;QAC/B,YAAY;KACb,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,qEAAqE;AACrE,qEAAqE;AACrE,+DAA+D;AAC/D,kEAAkE;AAClE,kEAAkE;AAClE,kEAAkE;AAClE,0DAA0D;AAC1D,qCAAqC;AACrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAU,EAAE,CAC7D,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAEjC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,IAAY,EAAU,EAAE,CAC/D,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -9,7 +9,8 @@ export type { CounterSnapshotEntry, ExecuteScriptInput, ExecuteScriptResult, Scr
9
9
  export { PmAssertion, createExpectApi } from "./script/features/assertions.js";
10
10
  export { PendingKafkaDependencyError, isPendingKafkaValue, } from "./script/features/kafka.js";
11
11
  export { DisabledFeatureDependencyError, isDisabledFeatureValue, } from "./script/features/feature-policy.js";
12
- export { validateContracts } from "./contract/contractValidator.js";
12
+ export { validateContracts, evaluateContractCandidate, normalizeContractRule, type ContractCandidateOutcome, } from "./contract/contractValidator.js";
13
+ export { resolveContractPath, generalizeContractPath, normalizeContractPathKey, type ResolvedCandidate, } from "./contract/pathResolver.js";
13
14
  export * from "./scenario-runner/index.js";
14
15
  export * from "./types/index.js";
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,wBAAwB,GAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -8,7 +8,8 @@ export { executeScript, validateScript } from "./script/executor.js";
8
8
  export { PmAssertion, createExpectApi } from "./script/features/assertions.js";
9
9
  export { PendingKafkaDependencyError, isPendingKafkaValue, } from "./script/features/kafka.js";
10
10
  export { DisabledFeatureDependencyError, isDisabledFeatureValue, } from "./script/features/feature-policy.js";
11
- export { validateContracts } from "./contract/contractValidator.js";
11
+ export { validateContracts, evaluateContractCandidate, normalizeContractRule, } from "./contract/contractValidator.js";
12
+ export { resolveContractPath, generalizeContractPath, normalizeContractPathKey, } from "./contract/pathResolver.js";
12
13
  export * from "./scenario-runner/index.js";
13
14
  export * from "./types/index.js";
14
15
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAuBrE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAuBrE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,GAEtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"templateResolver.d.ts","sourceRoot":"","sources":["../../src/scenario-runner/templateResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AAMpB,KAAK,0BAA0B,GAC3B,UAAU,GACV,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,GAAG,GACH,GAAG,CAAC;AAER,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACzC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACzC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IAC5D,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,0BAA0B,CAAC;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB;AAkWD,eAAO,MAAM,2BAA2B,GACtC,OAAO,YAAY,EAAE,EACrB,OAAO,YAAY,EAAE,KACpB,sBAkCF,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,8GASzC,4BAA4B,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CA0CtD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,YAAY,MAAM,EAClB,gBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACrC,4BAiBF,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,OAAO,MAAM,EACb,gBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACrC,MA+BF,CAAC;AAEF,eAAO,MAAM,8CAA8C,GAAI,OAAO,MAAM,KAAG,MAqD9E,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,OAAO,MAAM,EACb,gBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACrC,MA6DF,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAI,6CAI3C;IACD,KAAK,EAAE,sBAAsB,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;CACtD,KAAG,GAAG,CAAC,MAAM,CAoCb,CAAC"}
1
+ {"version":3,"file":"templateResolver.d.ts","sourceRoot":"","sources":["../../src/scenario-runner/templateResolver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AASpB,KAAK,0BAA0B,GAC3B,UAAU,GACV,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,GAAG,GACH,GAAG,CAAC;AAER,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACzC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACzC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IAC5D,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,0BAA0B,CAAC;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB;AAiYD,eAAO,MAAM,2BAA2B,GACtC,OAAO,YAAY,EAAE,EACrB,OAAO,YAAY,EAAE,KACpB,sBAkCF,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,8GASzC,4BAA4B,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CA0CtD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,YAAY,MAAM,EAClB,gBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACrC,4BAiBF,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,OAAO,MAAM,EACb,gBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACrC,MA+BF,CAAC;AAEF,eAAO,MAAM,8CAA8C,GAAI,OAAO,MAAM,KAAG,MAqD9E,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,OAAO,MAAM,EACb,gBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACrC,MA6DF,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAI,6CAI3C;IACD,KAAK,EAAE,sBAAsB,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;CACtD,KAAG,GAAG,CAAC,MAAM,CAoCb,CAAC"}