@glubean/sdk 0.8.4 → 0.9.1
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/contract-http/adapter.d.ts +9 -1
- package/dist/contract-http/adapter.d.ts.map +1 -1
- package/dist/contract-http/adapter.js +142 -6
- package/dist/contract-http/adapter.js.map +1 -1
- package/dist/contract-http/openapi.d.ts +37 -0
- package/dist/contract-http/openapi.d.ts.map +1 -1
- package/dist/contract-http/openapi.js +83 -2
- package/dist/contract-http/openapi.js.map +1 -1
- package/dist/contract-types.d.ts +5 -0
- package/dist/contract-types.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/load/artifact.d.ts +40 -2
- package/dist/load/artifact.d.ts.map +1 -1
- package/dist/load/artifact.js +0 -12
- package/dist/load/artifact.js.map +1 -1
- package/dist/load/context.d.ts +5 -1
- package/dist/load/context.d.ts.map +1 -1
- package/dist/load/events.d.ts +11 -0
- package/dist/load/events.d.ts.map +1 -1
- package/dist/load/index.d.ts +3 -1
- package/dist/load/index.d.ts.map +1 -1
- package/dist/load/index.js +1 -0
- package/dist/load/index.js.map +1 -1
- package/dist/load/metrics.d.ts +71 -0
- package/dist/load/metrics.d.ts.map +1 -0
- package/dist/load/metrics.js +42 -0
- package/dist/load/metrics.js.map +1 -0
- package/dist/load/runner.d.ts +19 -1
- package/dist/load/runner.d.ts.map +1 -1
- package/dist/load/runner.js.map +1 -1
- package/dist/test/each-builder.d.ts.map +1 -1
- package/dist/test/each-builder.js +3 -1
- package/dist/test/each-builder.js.map +1 -1
- package/dist/test/extend.d.ts.map +1 -1
- package/dist/test/extend.js +4 -1
- package/dist/test/extend.js.map +1 -1
- package/dist/test/utils.d.ts +33 -1
- package/dist/test/utils.d.ts.map +1 -1
- package/dist/test/utils.js +100 -5
- package/dist/test/utils.js.map +1 -1
- package/dist/types.d.ts +133 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"each-builder.d.ts","sourceRoot":"","sources":["../../src/test/each-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EACV,WAAW,EAGX,QAAQ,EAER,IAAI,EACJ,WAAW,EACX,QAAQ,EACT,MAAM,aAAa,CAAC;AAKrB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,WAAW,GAAG,WAAW,IAAI,CAC1E,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,CAAC,EACR,GAAG,EAAE,CAAC,KACH,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAEvB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,WAAW,GAAG,WAAW,IAAI,CAC3E,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,CAAC,KACH,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhB;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,oBAAoB,CAC9B,CAAC,EACD,CAAC,EACD,GAAG,SAAS,WAAW,GAAG,WAAW,IACnC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,WAAW,CACtB,CAAC,GAAG,OAAO,EACX,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,GAAG,SAAS,WAAW,GAAG,WAAW;IAErC,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAC,CAA+B;IAC9C,OAAO,CAAC,SAAS,CAAC,CAAkC;IAEpD,OAAO,CAAC,MAAM,CAA+D;IAC7E,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAU;IAE3B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7C;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAG,cAAc,CAAU;gBAGhD,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,EAC3C,QAAQ,UAAQ;IAUlB;;;;;;;;;OASG;IACH,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAKxD;;;OAGG;IACH,IAAI,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAK9B;;;OAGG;IACH,IAAI,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAK9B;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,IAAI,EACR,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GACtC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;IAK5B;;;;;;;;;;;;OAYG;IACH,QAAQ,CACN,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAChD,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAKzB;;;;;;;;;;;OAWG;IACH,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAChD,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACzB;;OAEG;IACH,IAAI,CAAC,IAAI,EACP,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAChD,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;IAC5B;;OAEG;IACH,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC/B,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAChD,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACzB;;OAEG;IACH,IAAI,CAAC,IAAI,EACP,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC/B,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAChD,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;IAmB5B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,GAAG,CAAC,IAAI,EACN,EAAE,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GACjE,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;IAI5B;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CAAC,IAAI,EACR,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GACjE,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;IAS5B,gBAAgB;IAChB,OAAO,CAAC,cAAc;IAMtB,gBAAgB;IAChB,OAAO,CAAC,WAAW;IAYnB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"each-builder.d.ts","sourceRoot":"","sources":["../../src/test/each-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { registerTest } from "../internal.js";
|
|
2
2
|
import { toArray } from "../data.js";
|
|
3
|
-
import { interpolateTemplate } from "./utils.js";
|
|
3
|
+
import { buildEachRowMeta, interpolateTemplate } from "./utils.js";
|
|
4
4
|
/**
|
|
5
5
|
* Builder for data-driven tests with multi-step workflow support.
|
|
6
6
|
*
|
|
@@ -225,6 +225,7 @@ export class EachBuilder {
|
|
|
225
225
|
hasSetup: !!this._setup,
|
|
226
226
|
hasTeardown: !!this._teardown,
|
|
227
227
|
rowIndex: i,
|
|
228
|
+
each: buildEachRowMeta(this._baseMeta.id, row, i),
|
|
228
229
|
...(hasGroup ? { groupId: this._baseMeta.id } : {}),
|
|
229
230
|
...(this._parallel ? { parallel: true } : {}),
|
|
230
231
|
});
|
|
@@ -262,6 +263,7 @@ export class EachBuilder {
|
|
|
262
263
|
meta: s.meta,
|
|
263
264
|
fn: ((ctx, state) => s.fn(ctx, state, row)),
|
|
264
265
|
})),
|
|
266
|
+
each: buildEachRowMeta(this._baseMeta.id, row, index),
|
|
265
267
|
...(this._fixtures ? { fixtures: this._fixtures } : {}),
|
|
266
268
|
};
|
|
267
269
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"each-builder.js","sourceRoot":"","sources":["../../src/test/each-builder.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"each-builder.js","sourceRoot":"","sources":["../../src/test/each-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extend.d.ts","sourceRoot":"","sources":["../../src/test/extend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EAEjB,IAAI,EACJ,WAAW,EACX,QAAQ,EACT,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,aAAuC,CAAC;AAEzE;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY,CAAC,GAAG,SAAS,WAAW;IACnD,+DAA+D;IAC/D,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrE,4DAA4D;IAC5D,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEhE;;;OAGG;IACH,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,EACnD,UAAU,EAAE,CAAC,GACZ,YAAY,CAAC,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,gDAAgD;IAChD,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,OAAO,CAAC,EAAE,WAAW,GACpB;QACD,CACE,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAC3B,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GACvC,IAAI,EAAE,CAAC;QACV,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;KAC7D,CAAC;IAEF,sDAAsD;IACtD,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAC3B,KAAK,CAAC,EAAE,MAAM,GACb;QACD,CACE,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAC3B,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAC3D,IAAI,EAAE,CAAC;QACV,CACE,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAC1B,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,GAAG,CAAC,CAAC;KACrD,CAAC;CACH;AAED,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,SAAS,WAAW,EACxD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,GAC5C,YAAY,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"extend.d.ts","sourceRoot":"","sources":["../../src/test/extend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EAEjB,IAAI,EACJ,WAAW,EACX,QAAQ,EACT,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,aAAuC,CAAC;AAEzE;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY,CAAC,GAAG,SAAS,WAAW;IACnD,+DAA+D;IAC/D,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrE,4DAA4D;IAC5D,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEhE;;;OAGG;IACH,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,EACnD,UAAU,EAAE,CAAC,GACZ,YAAY,CAAC,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,gDAAgD;IAChD,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,OAAO,CAAC,EAAE,WAAW,GACpB;QACD,CACE,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAC3B,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GACvC,IAAI,EAAE,CAAC;QACV,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;KAC7D,CAAC;IAEF,sDAAsD;IACtD,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAC3B,KAAK,CAAC,EAAE,MAAM,GACb;QACD,CACE,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAC3B,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAC3D,IAAI,EAAE,CAAC;QACV,CACE,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAC1B,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,GAAG,CAAC,CAAC;KACrD,CAAC;CACH;AAED,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,SAAS,WAAW,EACxD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,GAC5C,YAAY,CAAC,GAAG,CAAC,CAoInB"}
|
package/dist/test/extend.js
CHANGED
|
@@ -2,7 +2,7 @@ import { registerTest } from "../internal.js";
|
|
|
2
2
|
import { toArray } from "../data.js";
|
|
3
3
|
import { TestBuilder } from "./builder.js";
|
|
4
4
|
import { EachBuilder } from "./each-builder.js";
|
|
5
|
-
import { normalizeEachTable, resolveBaseMeta, interpolateTemplate, selectPickExamples } from "./utils.js";
|
|
5
|
+
import { normalizeEachTable, resolveBaseMeta, interpolateTemplate, buildEachRowMeta, selectPickExamples } from "./utils.js";
|
|
6
6
|
/** Keys that cannot be used as extension names (they shadow core TestContext). */
|
|
7
7
|
export const EXTEND_RESERVED_KEYS = new Set(["vars", "secrets", "http"]);
|
|
8
8
|
/**
|
|
@@ -84,11 +84,13 @@ export function createExtendedTest(allFixtures) {
|
|
|
84
84
|
tags: allTags.length > 0 ? allTags : undefined,
|
|
85
85
|
rowIndex: index,
|
|
86
86
|
};
|
|
87
|
+
const eachMeta = buildEachRowMeta(baseMeta.id, row, index);
|
|
87
88
|
const testDef = {
|
|
88
89
|
meta,
|
|
89
90
|
type: "simple",
|
|
90
91
|
fn: (async (ctx) => await fn(ctx, row)),
|
|
91
92
|
fixtures: allFixtures,
|
|
93
|
+
each: eachMeta,
|
|
92
94
|
};
|
|
93
95
|
registerTest({
|
|
94
96
|
id: meta.id,
|
|
@@ -97,6 +99,7 @@ export function createExtendedTest(allFixtures) {
|
|
|
97
99
|
tags: allTags.length > 0 ? allTags : undefined,
|
|
98
100
|
description: meta.description,
|
|
99
101
|
rowIndex: index,
|
|
102
|
+
each: eachMeta,
|
|
100
103
|
...(hasGroup ? { groupId: baseMeta.id } : {}),
|
|
101
104
|
...(parallel ? { parallel: true } : {}),
|
|
102
105
|
});
|
package/dist/test/extend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extend.js","sourceRoot":"","sources":["../../src/test/extend.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"extend.js","sourceRoot":"","sources":["../../src/test/extend.ts"],"names":[],"mappings":"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"}
|
package/dist/test/utils.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* - `selectPickExamples` — picks examples from a named map (respects `GLUBEAN_PICK` env)
|
|
10
10
|
* - `globToRegExp` — converts `*` glob patterns to RegExp (used by selectPickExamples)
|
|
11
11
|
*/
|
|
12
|
-
import type { TestMeta } from "../types.js";
|
|
12
|
+
import type { EachRowMeta, TestMeta } from "../types.js";
|
|
13
13
|
/**
|
|
14
14
|
* Interpolate `$key` placeholders in a template string with data values.
|
|
15
15
|
* Supports `$index` for the row index and `$key` for any key in the data object.
|
|
@@ -17,6 +17,38 @@ import type { TestMeta } from "../types.js";
|
|
|
17
17
|
* @internal
|
|
18
18
|
*/
|
|
19
19
|
export declare function interpolateTemplate(template: string, data: Record<string, unknown>, index: number): string;
|
|
20
|
+
/**
|
|
21
|
+
* True when an id/name template references the positional `$index` placeholder.
|
|
22
|
+
* `$index` makes the interpolated id reorder-unstable; this is the SDK's
|
|
23
|
+
* authoritative check (it owns interpolation, where the reserved `$index`
|
|
24
|
+
* shadows a data field literally named `index`). Word-boundary checked so
|
|
25
|
+
* `$indexed` (a data placeholder) does NOT count — mirrors the tokenizer.
|
|
26
|
+
*
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
export declare function templateUsesIndex(template: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Build the reorder-stable per-row key: `interpolateTemplate` with the data
|
|
32
|
+
* fields ONLY, leaving the positional `$index` placeholder literal so an
|
|
33
|
+
* `$index`-based template stays detectable downstream. Same tokenizer as
|
|
34
|
+
* `interpolateTemplate` (a data field named `index` is shadowed by the
|
|
35
|
+
* reserved `$index` placeholder), minus the index substitution — so for a
|
|
36
|
+
* template that never references `$index`, `rowKey === id` exactly.
|
|
37
|
+
*
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
export declare function interpolateRowKey(template: string, data: Record<string, unknown>): string;
|
|
41
|
+
/**
|
|
42
|
+
* Build the data-driven row provenance (`EachRowMeta`) for one generated
|
|
43
|
+
* per-row test — `idTemplate` + a reorder-stable `rowKey` + the `$index`
|
|
44
|
+
* stability flag — so Cloud derive can resolve a stable cross-run identity
|
|
45
|
+
* instead of only the final interpolated id. Shared by `test.each`,
|
|
46
|
+
* `test.pick`, and `EachBuilder`. `index` MUST be the same row index passed to
|
|
47
|
+
* `interpolateTemplate` for this row (i.e. the index into the filtered table).
|
|
48
|
+
*
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
export declare function buildEachRowMeta(idTemplate: string, data: Record<string, unknown>, index: number): EachRowMeta;
|
|
20
52
|
/**
|
|
21
53
|
* Resolve baseMeta from string or TestMeta input.
|
|
22
54
|
* @internal
|
package/dist/test/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA+DzD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,GACZ,MAAM,CAER;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAER;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,GACZ,WAAW,CAOb;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAErE;AAQD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GACtC,CAAC,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAM5B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAalF;AAaD,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAC3B,KAAK,EAAE,MAAM,GACZ,CAAC,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAuB3B"}
|
package/dist/test/utils.js
CHANGED
|
@@ -1,3 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-pass `$placeholder` tokenizer shared by `interpolateTemplate` and
|
|
3
|
+
* `interpolateRowKey` so the interpolated id and the row key NEVER disagree on
|
|
4
|
+
* how a data field is substituted (the `rowKey === id` contract for stable
|
|
5
|
+
* templates depends on this).
|
|
6
|
+
*
|
|
7
|
+
* Semantics (matching the documented template contract, but collision-safe):
|
|
8
|
+
* - The reserved positional `$index` placeholder wins at every `$` position
|
|
9
|
+
* where the placeholder word is EXACTLY `index` (word-boundary checked, so
|
|
10
|
+
* `$indexed` is a normal data placeholder). It shadows a data field
|
|
11
|
+
* literally named `index`. `index === undefined` leaves it literal (the
|
|
12
|
+
* row-key mode).
|
|
13
|
+
* - Data keys match LONGEST-FIRST, so a key that is a prefix of another
|
|
14
|
+
* (`$id` vs `$id2`) or of a later placeholder can never corrupt it.
|
|
15
|
+
* - Substituted values are emitted verbatim in one pass — a value containing
|
|
16
|
+
* `$something` is never re-scanned (no value injection).
|
|
17
|
+
* - A `$` matching nothing stays literal.
|
|
18
|
+
*/
|
|
19
|
+
/** Placeholder-name character class — used only to word-boundary the reserved
|
|
20
|
+
* `$index` token (data keys themselves may contain any characters). */
|
|
21
|
+
const PLACEHOLDER_WORD = /[A-Za-z0-9_]/;
|
|
22
|
+
function interpolatePlaceholders(template, data, index) {
|
|
23
|
+
// Longest-first so a key that prefixes another key never wins the match.
|
|
24
|
+
const keys = Object.keys(data)
|
|
25
|
+
.filter((k) => k.length > 0 && k !== "index")
|
|
26
|
+
.sort((a, b) => b.length - a.length);
|
|
27
|
+
let out = "";
|
|
28
|
+
let i = 0;
|
|
29
|
+
while (i < template.length) {
|
|
30
|
+
const ch = template[i];
|
|
31
|
+
if (ch !== "$") {
|
|
32
|
+
out += ch;
|
|
33
|
+
i++;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const rest = template.slice(i + 1);
|
|
37
|
+
// Reserved positional placeholder — wins over data keys (documented
|
|
38
|
+
// shadowing), but only when the placeholder word is exactly `index`
|
|
39
|
+
// (word-boundary: `$indexed` is a data placeholder, not `$index` + "ed").
|
|
40
|
+
if (rest.startsWith("index") && !PLACEHOLDER_WORD.test(rest.charAt("index".length))) {
|
|
41
|
+
out += index === undefined ? "$index" : String(index);
|
|
42
|
+
i += "$index".length;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const key = keys.find((k) => rest.startsWith(k));
|
|
46
|
+
if (key !== undefined) {
|
|
47
|
+
out += String(data[key]);
|
|
48
|
+
i += 1 + key.length;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
out += "$";
|
|
52
|
+
i++;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
1
57
|
/**
|
|
2
58
|
* Interpolate `$key` placeholders in a template string with data values.
|
|
3
59
|
* Supports `$index` for the row index and `$key` for any key in the data object.
|
|
@@ -5,11 +61,50 @@
|
|
|
5
61
|
* @internal
|
|
6
62
|
*/
|
|
7
63
|
export function interpolateTemplate(template, data, index) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
64
|
+
return interpolatePlaceholders(template, data, index);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* True when an id/name template references the positional `$index` placeholder.
|
|
68
|
+
* `$index` makes the interpolated id reorder-unstable; this is the SDK's
|
|
69
|
+
* authoritative check (it owns interpolation, where the reserved `$index`
|
|
70
|
+
* shadows a data field literally named `index`). Word-boundary checked so
|
|
71
|
+
* `$indexed` (a data placeholder) does NOT count — mirrors the tokenizer.
|
|
72
|
+
*
|
|
73
|
+
* @internal
|
|
74
|
+
*/
|
|
75
|
+
export function templateUsesIndex(template) {
|
|
76
|
+
return /\$index(?![A-Za-z0-9_])/.test(template);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Build the reorder-stable per-row key: `interpolateTemplate` with the data
|
|
80
|
+
* fields ONLY, leaving the positional `$index` placeholder literal so an
|
|
81
|
+
* `$index`-based template stays detectable downstream. Same tokenizer as
|
|
82
|
+
* `interpolateTemplate` (a data field named `index` is shadowed by the
|
|
83
|
+
* reserved `$index` placeholder), minus the index substitution — so for a
|
|
84
|
+
* template that never references `$index`, `rowKey === id` exactly.
|
|
85
|
+
*
|
|
86
|
+
* @internal
|
|
87
|
+
*/
|
|
88
|
+
export function interpolateRowKey(template, data) {
|
|
89
|
+
return interpolatePlaceholders(template, data, undefined);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Build the data-driven row provenance (`EachRowMeta`) for one generated
|
|
93
|
+
* per-row test — `idTemplate` + a reorder-stable `rowKey` + the `$index`
|
|
94
|
+
* stability flag — so Cloud derive can resolve a stable cross-run identity
|
|
95
|
+
* instead of only the final interpolated id. Shared by `test.each`,
|
|
96
|
+
* `test.pick`, and `EachBuilder`. `index` MUST be the same row index passed to
|
|
97
|
+
* `interpolateTemplate` for this row (i.e. the index into the filtered table).
|
|
98
|
+
*
|
|
99
|
+
* @internal
|
|
100
|
+
*/
|
|
101
|
+
export function buildEachRowMeta(idTemplate, data, index) {
|
|
102
|
+
return {
|
|
103
|
+
idTemplate,
|
|
104
|
+
index,
|
|
105
|
+
rowKey: interpolateRowKey(idTemplate, data),
|
|
106
|
+
stable: !templateUsesIndex(idTemplate),
|
|
107
|
+
};
|
|
13
108
|
}
|
|
14
109
|
/**
|
|
15
110
|
* Resolve baseMeta from string or TestMeta input.
|
package/dist/test/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"AAaA
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -907,10 +907,10 @@ export interface TestContext {
|
|
|
907
907
|
* @example
|
|
908
908
|
* ```ts
|
|
909
909
|
* const { vars, secrets, http } = configure({
|
|
910
|
-
* vars: { baseUrl: "BASE_URL", orgId: "ORG_ID" },
|
|
911
|
-
* secrets: { apiKey: "API_KEY" },
|
|
910
|
+
* vars: { baseUrl: "{{BASE_URL}}", orgId: "{{ORG_ID}}" },
|
|
911
|
+
* secrets: { apiKey: "{{API_KEY}}" },
|
|
912
912
|
* http: {
|
|
913
|
-
* prefixUrl: "BASE_URL",
|
|
913
|
+
* prefixUrl: "{{BASE_URL}}",
|
|
914
914
|
* headers: { Authorization: "Bearer {{API_KEY}}" },
|
|
915
915
|
* },
|
|
916
916
|
* });
|
|
@@ -918,28 +918,28 @@ export interface TestContext {
|
|
|
918
918
|
*/
|
|
919
919
|
export interface ConfigureOptions {
|
|
920
920
|
/**
|
|
921
|
-
* Map of friendly property names to
|
|
921
|
+
* Map of friendly property names to `{{key}}` templates.
|
|
922
922
|
* Each key becomes a property on the returned `vars` object.
|
|
923
923
|
* All declared vars are **required** — missing values throw at runtime.
|
|
924
924
|
*
|
|
925
925
|
* @example
|
|
926
926
|
* ```ts
|
|
927
927
|
* const { vars } = configure({
|
|
928
|
-
* vars: { baseUrl: "BASE_URL", orgId: "ORG_ID" },
|
|
928
|
+
* vars: { baseUrl: "{{BASE_URL}}", orgId: "{{ORG_ID}}" },
|
|
929
929
|
* });
|
|
930
930
|
* vars.baseUrl; // string (required, never undefined)
|
|
931
931
|
* ```
|
|
932
932
|
*/
|
|
933
933
|
vars?: Record<string, string>;
|
|
934
934
|
/**
|
|
935
|
-
* Map of friendly property names to
|
|
935
|
+
* Map of friendly property names to `{{key}}` templates.
|
|
936
936
|
* Each key becomes a property on the returned `secrets` object.
|
|
937
937
|
* All declared secrets are **required** — missing values throw at runtime.
|
|
938
938
|
*
|
|
939
939
|
* @example
|
|
940
940
|
* ```ts
|
|
941
941
|
* const { secrets } = configure({
|
|
942
|
-
* secrets: { apiKey: "API_KEY" },
|
|
942
|
+
* secrets: { apiKey: "{{API_KEY}}" },
|
|
943
943
|
* });
|
|
944
944
|
* secrets.apiKey; // string (required, never undefined)
|
|
945
945
|
* ```
|
|
@@ -948,7 +948,7 @@ export interface ConfigureOptions {
|
|
|
948
948
|
/**
|
|
949
949
|
* Pre-configure an HTTP client with shared defaults.
|
|
950
950
|
*
|
|
951
|
-
* - `prefixUrl`:
|
|
951
|
+
* - `prefixUrl`: Can use `{{key}}` syntax to interpolate a var/secret as the base URL.
|
|
952
952
|
* - `headers`: Header values can use `{{key}}` syntax to interpolate secrets.
|
|
953
953
|
* - `timeout`, `retry`, `throwHttpErrors`: Passed through to ky.
|
|
954
954
|
*
|
|
@@ -959,7 +959,7 @@ export interface ConfigureOptions {
|
|
|
959
959
|
* ```ts
|
|
960
960
|
* const { http } = configure({
|
|
961
961
|
* http: {
|
|
962
|
-
* prefixUrl: "base_url",
|
|
962
|
+
* prefixUrl: "{{base_url}}",
|
|
963
963
|
* headers: { Authorization: "Bearer {{api_key}}" },
|
|
964
964
|
* },
|
|
965
965
|
* });
|
|
@@ -978,10 +978,10 @@ export interface ConfigureOptions {
|
|
|
978
978
|
* import { graphql } from "@glubean/graphql";
|
|
979
979
|
*
|
|
980
980
|
* const { http, graphql: gql } = configure({
|
|
981
|
-
* http: { prefixUrl: "base_url" },
|
|
981
|
+
* http: { prefixUrl: "{{base_url}}" },
|
|
982
982
|
* plugins: {
|
|
983
983
|
* graphql: graphql({
|
|
984
|
-
* endpoint: "graphql_url",
|
|
984
|
+
* endpoint: "{{graphql_url}}",
|
|
985
985
|
* headers: { Authorization: "Bearer {{api_key}}" },
|
|
986
986
|
* }),
|
|
987
987
|
* },
|
|
@@ -993,16 +993,21 @@ export interface ConfigureOptions {
|
|
|
993
993
|
/**
|
|
994
994
|
* HTTP configuration for `configure()`.
|
|
995
995
|
*
|
|
996
|
-
* `prefixUrl`
|
|
997
|
-
*
|
|
998
|
-
*
|
|
996
|
+
* `prefixUrl` goes through the same `{{key}}` template resolution as
|
|
997
|
+
* `headers` and `searchParams`: any `{{key}}` placeholders are resolved from
|
|
998
|
+
* vars + secrets + session at runtime, and a string with no placeholders is
|
|
999
|
+
* used as-is (so a literal URL works). A **bare key name** with no `{{...}}`
|
|
1000
|
+
* (e.g. `"BASE_URL"`) is NOT resolved against vars/secrets — it is used as
|
|
1001
|
+
* a literal string, which is very unlikely to be a valid URL.
|
|
999
1002
|
*/
|
|
1000
1003
|
export interface ConfigureHttpOptions {
|
|
1001
1004
|
/**
|
|
1002
|
-
*
|
|
1003
|
-
*
|
|
1005
|
+
* Base URL used as ky's `prefixUrl`. Either a literal URL, or a string
|
|
1006
|
+
* containing `{{key}}` placeholder(s) resolved from vars, secrets, or
|
|
1007
|
+
* session at runtime.
|
|
1004
1008
|
*
|
|
1005
|
-
* @example "BASE_URL" →
|
|
1009
|
+
* @example "{{BASE_URL}}" → resolves to the value of var/secret "BASE_URL"
|
|
1010
|
+
* @example "https://api.example.com" → used as-is (no placeholder to resolve)
|
|
1006
1011
|
*/
|
|
1007
1012
|
prefixUrl?: string;
|
|
1008
1013
|
/**
|
|
@@ -1068,10 +1073,10 @@ export interface ConfigureHttpOptions {
|
|
|
1068
1073
|
*
|
|
1069
1074
|
* const { http } = configure({
|
|
1070
1075
|
* http: oauth2.clientCredentials({
|
|
1071
|
-
* prefixUrl: "base_url",
|
|
1072
|
-
* tokenUrl: "token_url",
|
|
1073
|
-
* clientId: "client_id",
|
|
1074
|
-
* clientSecret: "client_secret",
|
|
1076
|
+
* prefixUrl: "{{base_url}}",
|
|
1077
|
+
* tokenUrl: "{{token_url}}",
|
|
1078
|
+
* clientId: "{{client_id}}",
|
|
1079
|
+
* clientSecret: "{{client_secret}}",
|
|
1075
1080
|
* }),
|
|
1076
1081
|
* });
|
|
1077
1082
|
* ```
|
|
@@ -1090,9 +1095,9 @@ export interface ConfigureHttpOptions {
|
|
|
1090
1095
|
* @example
|
|
1091
1096
|
* ```ts
|
|
1092
1097
|
* const { vars, secrets, http } = configure({
|
|
1093
|
-
* vars: { baseUrl: "BASE_URL" },
|
|
1094
|
-
* secrets: { apiKey: "API_KEY" },
|
|
1095
|
-
* http: { prefixUrl: "BASE_URL", headers: { Authorization: "Bearer {{API_KEY}}" } },
|
|
1098
|
+
* vars: { baseUrl: "{{BASE_URL}}" },
|
|
1099
|
+
* secrets: { apiKey: "{{API_KEY}}" },
|
|
1100
|
+
* http: { prefixUrl: "{{BASE_URL}}", headers: { Authorization: "Bearer {{API_KEY}}" } },
|
|
1096
1101
|
* });
|
|
1097
1102
|
*
|
|
1098
1103
|
* export const myTest = test("my-test", async (ctx) => {
|
|
@@ -1619,6 +1624,45 @@ export interface SchemaLike<T> {
|
|
|
1619
1624
|
};
|
|
1620
1625
|
/** Fallback — throws on failure, returns parsed value on success. */
|
|
1621
1626
|
parse?: (data: unknown) => T;
|
|
1627
|
+
/**
|
|
1628
|
+
* Optional JSON Schema companion (GLU-90). Schema-library instances (Zod
|
|
1629
|
+
* v4, Valibot, …) project via their own `toJSONSchema()` method — this
|
|
1630
|
+
* field is for **hand-rolled** `SchemaLike` objects (safeParse/parse-only,
|
|
1631
|
+
* no schema library backing them). Without it, the projector has no
|
|
1632
|
+
* structural information to derive a JSON Schema from an opaque validator
|
|
1633
|
+
* function, so the schema is recorded as unprojectable
|
|
1634
|
+
* (`ExtractedContractProjection.unprojectableSchemas`) and contract-sync /
|
|
1635
|
+
* OpenAPI generation silently drop it — the picker on Glubean Cloud then
|
|
1636
|
+
* treats the contract as incomplete.
|
|
1637
|
+
*
|
|
1638
|
+
* Declare `jsonSchema` alongside `safeParse` to document the shape your
|
|
1639
|
+
* validator enforces; it is used **verbatim** (never re-derived from
|
|
1640
|
+
* `safeParse`/`parse` by introspection or sampling) and is **not
|
|
1641
|
+
* validated** — the same trust model as authoring a plain JSON Schema
|
|
1642
|
+
* object directly for `expect.schema`. It is also consulted as a recovery
|
|
1643
|
+
* path when a schema-library instance's own `toJSONSchema()` throws
|
|
1644
|
+
* (e.g. an unrepresentable zod type), letting you supply a manual
|
|
1645
|
+
* override for shapes the library itself can't project.
|
|
1646
|
+
*
|
|
1647
|
+
* Every protocol adapter that ships with the SDK (HTTP, GraphQL, gRPC)
|
|
1648
|
+
* honors this field via its `schemaToJsonSchema()`.
|
|
1649
|
+
*
|
|
1650
|
+
* @example
|
|
1651
|
+
* ```ts
|
|
1652
|
+
* const ItemsResponse: SchemaLike<{ items: Item[]; total: number }> = {
|
|
1653
|
+
* safeParse(data) { ... },
|
|
1654
|
+
* jsonSchema: {
|
|
1655
|
+
* type: "object",
|
|
1656
|
+
* properties: {
|
|
1657
|
+
* items: { type: "array", items: { type: "object" } },
|
|
1658
|
+
* total: { type: "number" },
|
|
1659
|
+
* },
|
|
1660
|
+
* required: ["items", "total"],
|
|
1661
|
+
* },
|
|
1662
|
+
* };
|
|
1663
|
+
* ```
|
|
1664
|
+
*/
|
|
1665
|
+
jsonSchema?: Record<string, unknown>;
|
|
1622
1666
|
}
|
|
1623
1667
|
/**
|
|
1624
1668
|
* A single issue reported by schema validation.
|
|
@@ -1866,6 +1910,21 @@ export interface Trace {
|
|
|
1866
1910
|
* The load runner uses it for an exact endpoint routeKey instead of the heuristic
|
|
1867
1911
|
* URL-normalization fallback. Absent → fall back. */
|
|
1868
1912
|
routeKey?: string;
|
|
1913
|
+
/** HTTP only. The relative URL string EXACTLY as the test author wrote it (e.g.
|
|
1914
|
+
* `ctx.http.get("todos/1")` → `"todos/1"`), captured before the host resolves it
|
|
1915
|
+
* to an absolute URL. Present only when the call site passed a plain relative
|
|
1916
|
+
* string (an already-absolute string, or a `Request`/`URL` object, leaves this
|
|
1917
|
+
* unset — nothing to recover).
|
|
1918
|
+
*
|
|
1919
|
+
* Why: inside a browser Web Worker, `Request` has an IMPLICIT base — the worker
|
|
1920
|
+
* SCRIPT's own URL — so a bare relative path silently resolves against the
|
|
1921
|
+
* worker's script directory (e.g. "todos/1" → ".../assets/todos/1"), NOT the
|
|
1922
|
+
* intended API. That pollutes `url`/`target` above; `requestedUrl` is the clean
|
|
1923
|
+
* form a re-anchoring host can fall back to (GLU-81, F11 residual — see cloud
|
|
1924
|
+
* dd38fcc / GLU-46 comment). Node has no implicit base — a bare relative URL
|
|
1925
|
+
* there throws immediately (unchanged), so this field is browser/Worker-specific
|
|
1926
|
+
* in practice. */
|
|
1927
|
+
requestedUrl?: string;
|
|
1869
1928
|
/** @deprecated Use `target` and `metadata` instead. HTTP method. */
|
|
1870
1929
|
method?: string;
|
|
1871
1930
|
/** @deprecated Use `target` and `metadata` instead. Request URL. */
|
|
@@ -2381,6 +2440,15 @@ export interface Test<S = unknown> {
|
|
|
2381
2440
|
* before invoking the test function / steps.
|
|
2382
2441
|
*/
|
|
2383
2442
|
fixtures?: Record<string, ExtensionFn<any>>;
|
|
2443
|
+
/**
|
|
2444
|
+
* Data-driven row provenance (`idTemplate` + reorder-stable `rowKey` +
|
|
2445
|
+
* `$index` stability flag). Present ONLY on `test.each` / `test.pick` rows;
|
|
2446
|
+
* absent for plain `test(...)` definitions. Mirrors the registry's
|
|
2447
|
+
* {@link RegisteredTestMeta.each} on the RUNTIME test object the runner
|
|
2448
|
+
* executes, so the run path can carry it to Cloud derive's row axis (B3,
|
|
2449
|
+
* `run-evidence-identity-model.md` §7). See {@link EachRowMeta}.
|
|
2450
|
+
*/
|
|
2451
|
+
each?: EachRowMeta;
|
|
2384
2452
|
}
|
|
2385
2453
|
/**
|
|
2386
2454
|
* Factory function for a context extension (fixture).
|
|
@@ -2431,6 +2499,37 @@ export type ResolveExtension<F> = F extends (ctx: TestContext, use: (instance: i
|
|
|
2431
2499
|
export type ResolveExtensions<E> = {
|
|
2432
2500
|
[K in keyof E]: ResolveExtension<E[K]>;
|
|
2433
2501
|
};
|
|
2502
|
+
/**
|
|
2503
|
+
* Data-driven row provenance — set by `test.each` / `test.pick` for each
|
|
2504
|
+
* generated per-row test.
|
|
2505
|
+
*
|
|
2506
|
+
* Cloud derive otherwise sees only the final interpolated `id` (e.g. `user-1`,
|
|
2507
|
+
* `case-0`) and cannot tell a reorder-STABLE data-driven id from a positional
|
|
2508
|
+
* `$index`-based one: reordering the table keeps `user-$userId` pinned to its
|
|
2509
|
+
* row but shifts every `$index` id. The SDK owns id interpolation, so it is the
|
|
2510
|
+
* source of truth for whether the template referenced the positional `$index`
|
|
2511
|
+
* placeholder — this carries that truth to derive (B3 assertion-identity row
|
|
2512
|
+
* axis, `run-evidence-identity-model.md` §7).
|
|
2513
|
+
*/
|
|
2514
|
+
export interface EachRowMeta {
|
|
2515
|
+
/** Raw id template before interpolation, e.g. `"user-$userId"` or `"case-$index"`. */
|
|
2516
|
+
idTemplate: string;
|
|
2517
|
+
/** 0-based position of this row within the (filtered) data table. */
|
|
2518
|
+
index: number;
|
|
2519
|
+
/**
|
|
2520
|
+
* Reorder-stable per-row key: `idTemplate` interpolated with DATA fields only,
|
|
2521
|
+
* leaving the positional `$index` placeholder literal. For a purely
|
|
2522
|
+
* data-driven template this equals `id` and is a stable cross-run key; for a
|
|
2523
|
+
* `$index`-based template it retains the literal `$index` token (and `stable`
|
|
2524
|
+
* is `false`), so derive falls back to `index` to disambiguate rows.
|
|
2525
|
+
*/
|
|
2526
|
+
rowKey: string;
|
|
2527
|
+
/**
|
|
2528
|
+
* `true` when `idTemplate` does NOT reference `$index` — i.e. `rowKey` is a
|
|
2529
|
+
* reorder-stable cross-run identity. `false` flags a positional (unstable) id.
|
|
2530
|
+
*/
|
|
2531
|
+
stable: boolean;
|
|
2532
|
+
}
|
|
2434
2533
|
/**
|
|
2435
2534
|
* Metadata registered to the global registry (for scanning).
|
|
2436
2535
|
*/
|
|
@@ -2475,6 +2574,16 @@ export interface RegisteredTestMeta {
|
|
|
2475
2574
|
* undefined for non-each tests.
|
|
2476
2575
|
*/
|
|
2477
2576
|
rowIndex?: number;
|
|
2577
|
+
/**
|
|
2578
|
+
* Data-driven row provenance (`idTemplate` + reorder-stable `rowKey` +
|
|
2579
|
+
* `$index` stability flag). Present ONLY for tests generated by
|
|
2580
|
+
* `test.each` / `test.pick`; absent for plain `test(...)` declarations.
|
|
2581
|
+
* Lets Cloud derive resolve a stable cross-run row identity instead of only
|
|
2582
|
+
* the final interpolated `id` (B3 row axis, see {@link EachRowMeta}).
|
|
2583
|
+
* `each.index` always equals {@link rowIndex} (B2 M3 selector protocol)
|
|
2584
|
+
* when both are present.
|
|
2585
|
+
*/
|
|
2586
|
+
each?: EachRowMeta;
|
|
2478
2587
|
/** Physical capability required by this test. */
|
|
2479
2588
|
requires?: "headless" | "browser" | "out-of-band";
|
|
2480
2589
|
/** Default run policy for this test. */
|