callman-core 1.0.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.
Files changed (51) hide show
  1. package/dist/contract/contractValidator.d.ts +3 -0
  2. package/dist/contract/contractValidator.d.ts.map +1 -0
  3. package/dist/contract/contractValidator.js +232 -0
  4. package/dist/contract/contractValidator.js.map +1 -0
  5. package/dist/index.d.ts +9 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +9 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/request/executeRequest.d.ts +3 -0
  10. package/dist/request/executeRequest.d.ts.map +1 -0
  11. package/dist/request/executeRequest.js +26 -0
  12. package/dist/request/executeRequest.js.map +1 -0
  13. package/dist/runner/requestRunner.d.ts +3 -0
  14. package/dist/runner/requestRunner.d.ts.map +1 -0
  15. package/dist/runner/requestRunner.js +98 -0
  16. package/dist/runner/requestRunner.js.map +1 -0
  17. package/dist/runner/runCollection.d.ts +3 -0
  18. package/dist/runner/runCollection.d.ts.map +1 -0
  19. package/dist/runner/runCollection.js +48 -0
  20. package/dist/runner/runCollection.js.map +1 -0
  21. package/dist/script/pmApi.d.ts +88 -0
  22. package/dist/script/pmApi.d.ts.map +1 -0
  23. package/dist/script/pmApi.js +347 -0
  24. package/dist/script/pmApi.js.map +1 -0
  25. package/dist/script/scriptEngine.d.ts +3 -0
  26. package/dist/script/scriptEngine.d.ts.map +1 -0
  27. package/dist/script/scriptEngine.js +106 -0
  28. package/dist/script/scriptEngine.js.map +1 -0
  29. package/dist/types/index.d.ts +118 -0
  30. package/dist/types/index.d.ts.map +1 -0
  31. package/dist/types/index.js +2 -0
  32. package/dist/types/index.js.map +1 -0
  33. package/dist/utils/get.d.ts +8 -0
  34. package/dist/utils/get.d.ts.map +1 -0
  35. package/dist/utils/get.js +46 -0
  36. package/dist/utils/get.js.map +1 -0
  37. package/dist/utils/random.d.ts +6 -0
  38. package/dist/utils/random.d.ts.map +1 -0
  39. package/dist/utils/random.js +79 -0
  40. package/dist/utils/random.js.map +1 -0
  41. package/dist/variables/envStore.d.ts +8 -0
  42. package/dist/variables/envStore.d.ts.map +1 -0
  43. package/dist/variables/envStore.js +20 -0
  44. package/dist/variables/envStore.js.map +1 -0
  45. package/dist/variables/resolver.d.ts +4 -0
  46. package/dist/variables/resolver.d.ts.map +1 -0
  47. package/dist/variables/resolver.js +90 -0
  48. package/dist/variables/resolver.js.map +1 -0
  49. package/package.json +17 -0
  50. package/samples/runSample.mjs +128 -0
  51. package/tsconfig.json +18 -0
@@ -0,0 +1,347 @@
1
+ import { safeGet } from "../utils/get.js";
2
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3
+ const formatValue = (value) => {
4
+ if (typeof value === "string") {
5
+ return `"${value}"`;
6
+ }
7
+ if (value === undefined) {
8
+ return "undefined";
9
+ }
10
+ try {
11
+ return JSON.stringify(value);
12
+ }
13
+ catch {
14
+ return String(value);
15
+ }
16
+ };
17
+ const getValueType = (value) => {
18
+ if (value === null) {
19
+ return "null";
20
+ }
21
+ if (Array.isArray(value)) {
22
+ return "array";
23
+ }
24
+ return typeof value;
25
+ };
26
+ const isDeepEqual = (left, right) => {
27
+ if (Object.is(left, right)) {
28
+ return true;
29
+ }
30
+ if (Array.isArray(left) && Array.isArray(right)) {
31
+ return left.length === right.length &&
32
+ left.every((value, index) => isDeepEqual(value, right[index]));
33
+ }
34
+ if (isRecord(left) && isRecord(right)) {
35
+ const leftKeys = Object.keys(left);
36
+ const rightKeys = Object.keys(right);
37
+ return leftKeys.length === rightKeys.length &&
38
+ leftKeys.every((key) => Object.prototype.hasOwnProperty.call(right, key) &&
39
+ isDeepEqual(left[key], right[key]));
40
+ }
41
+ return false;
42
+ };
43
+ export class PmAssertion {
44
+ actual;
45
+ constructor(actual) {
46
+ this.actual = actual;
47
+ }
48
+ get to() {
49
+ return this;
50
+ }
51
+ get be() {
52
+ return this;
53
+ }
54
+ get been() {
55
+ return this;
56
+ }
57
+ get is() {
58
+ return this;
59
+ }
60
+ get that() {
61
+ return this;
62
+ }
63
+ get which() {
64
+ return this;
65
+ }
66
+ get and() {
67
+ return this;
68
+ }
69
+ get has() {
70
+ return this;
71
+ }
72
+ get have() {
73
+ return this;
74
+ }
75
+ get with() {
76
+ return this;
77
+ }
78
+ get same() {
79
+ return this;
80
+ }
81
+ get deep() {
82
+ return this;
83
+ }
84
+ get ok() {
85
+ return this.toBeTruthy();
86
+ }
87
+ get true() {
88
+ if (this.actual !== true) {
89
+ throw new Error(`Expected ${formatValue(this.actual)} to be true`);
90
+ }
91
+ return this;
92
+ }
93
+ get false() {
94
+ if (this.actual !== false) {
95
+ throw new Error(`Expected ${formatValue(this.actual)} to be false`);
96
+ }
97
+ return this;
98
+ }
99
+ get exist() {
100
+ if (this.actual === null || this.actual === undefined) {
101
+ throw new Error(`Expected ${formatValue(this.actual)} to exist`);
102
+ }
103
+ return this;
104
+ }
105
+ equal(expected) {
106
+ if (!Object.is(this.actual, expected)) {
107
+ throw new Error(`Expected ${formatValue(this.actual)} to equal ${formatValue(expected)}`);
108
+ }
109
+ return this;
110
+ }
111
+ toBe(expected) {
112
+ return this.equal(expected);
113
+ }
114
+ toBeDefined() {
115
+ if (this.actual === undefined) {
116
+ throw new Error(`Expected ${formatValue(this.actual)} to be defined`);
117
+ }
118
+ return this;
119
+ }
120
+ equals(expected) {
121
+ return this.equal(expected);
122
+ }
123
+ eql(expected) {
124
+ return this.toEqual(expected);
125
+ }
126
+ toEqual(expected) {
127
+ if (!isDeepEqual(this.actual, expected)) {
128
+ throw new Error(`Expected ${formatValue(this.actual)} to deeply equal ${formatValue(expected)}`);
129
+ }
130
+ return this;
131
+ }
132
+ a(expectedType) {
133
+ const actualType = getValueType(this.actual);
134
+ const normalizedExpectedType = expectedType.trim().toLowerCase();
135
+ if (actualType !== normalizedExpectedType) {
136
+ throw new Error(`Expected type ${normalizedExpectedType} but got ${actualType}`);
137
+ }
138
+ return this;
139
+ }
140
+ an(expectedType) {
141
+ return this.a(expectedType);
142
+ }
143
+ property(key, expectedValue) {
144
+ const property = safeGet(this.actual, key);
145
+ if (!property.exists) {
146
+ throw new Error(`Expected ${formatValue(this.actual)} to have property "${key}"`);
147
+ }
148
+ const nextAssertion = new PmAssertion(property.value);
149
+ if (arguments.length > 1) {
150
+ nextAssertion.toEqual(expectedValue);
151
+ }
152
+ return nextAssertion;
153
+ }
154
+ contain(expected) {
155
+ return this.toContain(expected);
156
+ }
157
+ include(expected) {
158
+ return this.toContain(expected);
159
+ }
160
+ toContain(expected) {
161
+ if (typeof this.actual === "string") {
162
+ if (!this.actual.includes(String(expected))) {
163
+ throw new Error(`Expected ${formatValue(this.actual)} to contain ${formatValue(expected)}`);
164
+ }
165
+ return this;
166
+ }
167
+ if (Array.isArray(this.actual)) {
168
+ if (!this.actual.some((entry) => isDeepEqual(entry, expected))) {
169
+ throw new Error(`Expected ${formatValue(this.actual)} to contain ${formatValue(expected)}`);
170
+ }
171
+ return this;
172
+ }
173
+ throw new Error("toContain supports only strings and arrays");
174
+ }
175
+ match(pattern) {
176
+ if (typeof this.actual !== "string") {
177
+ throw new Error(`Expected ${formatValue(this.actual)} to be a string`);
178
+ }
179
+ const matcher = typeof pattern === "string" ? new RegExp(pattern) : pattern;
180
+ if (!matcher.test(this.actual)) {
181
+ throw new Error(`Expected ${formatValue(this.actual)} to match ${String(matcher)}`);
182
+ }
183
+ return this;
184
+ }
185
+ status(expected) {
186
+ return this.property("status", expected);
187
+ }
188
+ header(name, expectedValue) {
189
+ const headers = safeGet(this.actual, "headers");
190
+ if (!headers.exists || !isRecord(headers.value)) {
191
+ throw new Error("Expected a response-like object with headers");
192
+ }
193
+ const normalizedName = name.toLowerCase();
194
+ const entry = Object.entries(headers.value).find(([key]) => key.toLowerCase() === normalizedName);
195
+ if (!entry) {
196
+ throw new Error(`Expected response headers to contain "${name}"`);
197
+ }
198
+ const nextAssertion = new PmAssertion(entry[1]);
199
+ if (arguments.length > 1) {
200
+ nextAssertion.toEqual(expectedValue);
201
+ }
202
+ return nextAssertion;
203
+ }
204
+ greaterThan(expected) {
205
+ return this.toBeGreaterThan(expected);
206
+ }
207
+ lessThan(expected) {
208
+ return this.toBeLessThan(expected);
209
+ }
210
+ toBeGreaterThan(expected) {
211
+ const actualNumber = Number(this.actual);
212
+ const expectedNumber = Number(expected);
213
+ if (!Number.isFinite(actualNumber) || !Number.isFinite(expectedNumber)) {
214
+ throw new Error("toBeGreaterThan supports only finite numbers");
215
+ }
216
+ if (actualNumber <= expectedNumber) {
217
+ throw new Error(`Expected ${formatValue(this.actual)} to be greater than ${formatValue(expected)}`);
218
+ }
219
+ return this;
220
+ }
221
+ toBeLessThan(expected) {
222
+ const actualNumber = Number(this.actual);
223
+ const expectedNumber = Number(expected);
224
+ if (!Number.isFinite(actualNumber) || !Number.isFinite(expectedNumber)) {
225
+ throw new Error("toBeLessThan supports only finite numbers");
226
+ }
227
+ if (actualNumber >= expectedNumber) {
228
+ throw new Error(`Expected ${formatValue(this.actual)} to be less than ${formatValue(expected)}`);
229
+ }
230
+ return this;
231
+ }
232
+ toBeTruthy() {
233
+ if (!this.actual) {
234
+ throw new Error(`Expected ${formatValue(this.actual)} to be truthy`);
235
+ }
236
+ return this;
237
+ }
238
+ toBeFalsy() {
239
+ if (this.actual) {
240
+ throw new Error(`Expected ${formatValue(this.actual)} to be falsy`);
241
+ }
242
+ return this;
243
+ }
244
+ }
245
+ export const createExpectApi = () => {
246
+ const expect = ((actual) => new PmAssertion(actual));
247
+ expect.fail = (message) => {
248
+ throw new Error(message === undefined || message === null ? "Expectation failed" : String(message));
249
+ };
250
+ return expect;
251
+ };
252
+ const createResponseApi = (response) => {
253
+ if (!response) {
254
+ return null;
255
+ }
256
+ return {
257
+ status: response.status,
258
+ code: response.status,
259
+ headers: response.headers,
260
+ data: response.data,
261
+ body: response.data,
262
+ responseTime: response.duration,
263
+ duration: response.duration,
264
+ json: () => {
265
+ if (typeof response.data === "string") {
266
+ return JSON.parse(response.data);
267
+ }
268
+ return response.data;
269
+ },
270
+ text: () => typeof response.data === "string"
271
+ ? response.data
272
+ : JSON.stringify(response.data ?? null),
273
+ };
274
+ };
275
+ const createRequestApi = (request) => {
276
+ if (!request) {
277
+ return null;
278
+ }
279
+ const headers = { ...(request.headers ?? {}) };
280
+ return {
281
+ method: request.method,
282
+ url: request.url,
283
+ headers,
284
+ body: request.body,
285
+ getHeader: (key) => headers[key],
286
+ setHeader: (key, value) => {
287
+ const normalizedKey = key.trim();
288
+ if (!normalizedKey) {
289
+ return;
290
+ }
291
+ headers[normalizedKey] = value === undefined || value === null ? "" : String(value);
292
+ },
293
+ };
294
+ };
295
+ export const createPmApi = (context, collector) => {
296
+ const expect = createExpectApi();
297
+ const response = createResponseApi(context.response);
298
+ const request = createRequestApi(context.request);
299
+ const environment = {
300
+ values: context.env.all(),
301
+ get: (key) => context.env.get(String(key ?? "")),
302
+ set: (key, value) => {
303
+ context.env.set(String(key ?? ""), value);
304
+ environment.values = context.env.all();
305
+ },
306
+ };
307
+ const test = (name, fn) => {
308
+ const normalizedName = String(name ?? "").trim() || "Unnamed test";
309
+ const task = Promise.resolve()
310
+ .then(async () => {
311
+ if (typeof fn !== "function") {
312
+ throw new Error("pm.test requires a callback function");
313
+ }
314
+ await fn();
315
+ collector.addResult({
316
+ name: normalizedName,
317
+ status: "PASS",
318
+ });
319
+ })
320
+ .catch((error) => {
321
+ collector.addResult({
322
+ name: normalizedName,
323
+ status: "FAIL",
324
+ message: error instanceof Error ? error.message : String(error),
325
+ });
326
+ });
327
+ collector.addPending(task);
328
+ return task;
329
+ };
330
+ const pm = {
331
+ request,
332
+ response,
333
+ environment,
334
+ env: environment,
335
+ test,
336
+ expect,
337
+ };
338
+ if (response) {
339
+ Object.assign(response, {
340
+ to: new PmAssertion(response),
341
+ be: new PmAssertion(response),
342
+ have: new PmAssertion(response),
343
+ });
344
+ }
345
+ return pm;
346
+ };
347
+ //# sourceMappingURL=pmApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pmApi.js","sourceRoot":"","sources":["../../src/script/pmApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ScriptRunContext, TestResult } from "../types/index.js";
2
+ export declare const runScript: (script: string | undefined, context: ScriptRunContext) => Promise<TestResult[]>;
3
+ //# sourceMappingURL=scriptEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scriptEngine.d.ts","sourceRoot":"","sources":["../../src/script/scriptEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA8EtE,eAAO,MAAM,SAAS,GACpB,QAAQ,MAAM,GAAG,SAAS,EAC1B,SAAS,gBAAgB,KACxB,OAAO,CAAC,UAAU,EAAE,CAuCtB,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { createPmApi } from "./pmApi.js";
2
+ const AsyncFunction = Object.getPrototypeOf(async function () {
3
+ return undefined;
4
+ }).constructor;
5
+ const noopConsole = {
6
+ log: () => undefined,
7
+ info: () => undefined,
8
+ warn: () => undefined,
9
+ error: () => undefined,
10
+ debug: () => undefined,
11
+ };
12
+ const buildScriptScope = (pm) => {
13
+ const scopeTarget = {
14
+ pm,
15
+ request: pm.request,
16
+ response: pm.response,
17
+ test: pm.test,
18
+ expect: pm.expect,
19
+ environment: pm.environment,
20
+ JSON,
21
+ Math,
22
+ Number,
23
+ String,
24
+ Boolean,
25
+ Array,
26
+ Object,
27
+ Date,
28
+ RegExp,
29
+ Promise,
30
+ parseInt,
31
+ parseFloat,
32
+ encodeURIComponent,
33
+ decodeURIComponent,
34
+ URL,
35
+ URLSearchParams,
36
+ setTimeout: undefined,
37
+ clearTimeout: undefined,
38
+ setInterval: undefined,
39
+ clearInterval: undefined,
40
+ fetch: undefined,
41
+ XMLHttpRequest: undefined,
42
+ WebSocket: undefined,
43
+ Worker: undefined,
44
+ Function: undefined,
45
+ eval: undefined,
46
+ console: noopConsole,
47
+ window: undefined,
48
+ document: undefined,
49
+ self: undefined,
50
+ globalThis: undefined,
51
+ global: undefined,
52
+ process: undefined,
53
+ require: undefined,
54
+ module: undefined,
55
+ exports: undefined,
56
+ navigator: undefined,
57
+ };
58
+ return new Proxy(scopeTarget, {
59
+ has: () => true,
60
+ get(target, property) {
61
+ if (property === Symbol.unscopables) {
62
+ return undefined;
63
+ }
64
+ return target[property];
65
+ },
66
+ set(target, property, value) {
67
+ target[property] = value;
68
+ return true;
69
+ },
70
+ });
71
+ };
72
+ export const runScript = async (script, context) => {
73
+ if (!script?.trim()) {
74
+ return [];
75
+ }
76
+ const results = [];
77
+ const pendingTests = [];
78
+ const pm = createPmApi(context, {
79
+ addResult: (result) => {
80
+ results.push(result);
81
+ },
82
+ addPending: (promise) => {
83
+ pendingTests.push(promise);
84
+ },
85
+ });
86
+ const scope = buildScriptScope(pm);
87
+ const runner = new AsyncFunction("scope", "context", `return (async function () {
88
+ with (scope) {
89
+ ${script}
90
+ }
91
+ }).call(context);
92
+ //# sourceURL=callman-script.js`);
93
+ try {
94
+ await runner(scope, Object.create(null));
95
+ }
96
+ catch (error) {
97
+ results.push({
98
+ name: "Script execution",
99
+ status: "FAIL",
100
+ message: error instanceof Error ? error.message : String(error),
101
+ });
102
+ }
103
+ await Promise.allSettled(pendingTests);
104
+ return results;
105
+ };
106
+ //# sourceMappingURL=scriptEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scriptEngine.js","sourceRoot":"","sources":["../../src/script/scriptEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import type { EnvStore } from "../variables/envStore.js";
2
+ export interface Collection {
3
+ name: string;
4
+ requests: RequestItem[];
5
+ }
6
+ export interface RequestItem {
7
+ id: string;
8
+ name: string;
9
+ method: string;
10
+ url: string;
11
+ headers?: Record<string, string>;
12
+ query?: Record<string, string>;
13
+ body?: any;
14
+ tests?: string;
15
+ contracts?: any[];
16
+ }
17
+ export interface ExecutionResult {
18
+ requestId: string;
19
+ requestName?: string;
20
+ status: number;
21
+ duration: number;
22
+ response: any;
23
+ request?: ExecuteRequestInput;
24
+ scriptResults: TestResult[];
25
+ contractResults: TestResult[];
26
+ }
27
+ export interface TestResult {
28
+ name: string;
29
+ status: "PASS" | "FAIL";
30
+ message?: string;
31
+ }
32
+ export interface ExecuteRequestInput {
33
+ method: string;
34
+ url: string;
35
+ headers?: Record<string, string>;
36
+ query?: Record<string, string>;
37
+ body?: any;
38
+ timeoutMs?: number;
39
+ }
40
+ export interface ExecuteRequestResult {
41
+ status: number;
42
+ data: any;
43
+ headers: Record<string, string>;
44
+ duration: number;
45
+ }
46
+ export interface ResolveTemplateContext {
47
+ env?: EnvStore | Record<string, any>;
48
+ response?: any;
49
+ request?: any;
50
+ }
51
+ export interface RunRequestInput {
52
+ request: RequestItem;
53
+ env: EnvStore;
54
+ previousResponse?: ExecuteRequestResult | null;
55
+ }
56
+ export interface RunRequestResult {
57
+ result: ExecutionResult;
58
+ response: ExecuteRequestResult | null;
59
+ }
60
+ export interface RunCollectionInput {
61
+ collection: Collection;
62
+ env?: EnvStore | Record<string, any>;
63
+ onRequestStart?: (input: {
64
+ request: RequestItem;
65
+ index: number;
66
+ total: number;
67
+ }) => void;
68
+ onRequestComplete?: (input: {
69
+ request: RequestItem;
70
+ index: number;
71
+ total: number;
72
+ result: ExecutionResult;
73
+ }) => void;
74
+ }
75
+ export interface RunCollectionSummary {
76
+ total: number;
77
+ passed: number;
78
+ failed: number;
79
+ }
80
+ export interface RunCollectionResult {
81
+ results: ExecutionResult[];
82
+ summary: RunCollectionSummary;
83
+ }
84
+ export type ContractValueType = "string" | "number" | "boolean" | "object" | "array" | "null" | "undefined";
85
+ export interface ContractRule {
86
+ name?: string;
87
+ path?: string;
88
+ field?: string;
89
+ exists?: boolean;
90
+ required?: boolean;
91
+ type?: ContractValueType;
92
+ equals?: any;
93
+ value?: any;
94
+ enabled?: boolean;
95
+ rules?: {
96
+ exists?: boolean;
97
+ required?: boolean;
98
+ type?: ContractValueType;
99
+ equals?: any;
100
+ value?: any;
101
+ notEmpty?: boolean;
102
+ min?: number;
103
+ max?: number;
104
+ minLength?: number;
105
+ maxLength?: number;
106
+ minItems?: number;
107
+ maxItems?: number;
108
+ enumValues?: string[];
109
+ pattern?: string;
110
+ contains?: string;
111
+ };
112
+ }
113
+ export interface ScriptRunContext {
114
+ env: EnvStore;
115
+ response?: ExecuteRequestResult | null;
116
+ request?: ExecuteRequestInput | RequestItem;
117
+ }
118
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ export interface SafeGetResult {
2
+ exists: boolean;
3
+ value: unknown;
4
+ }
5
+ export declare const parsePath: (path: string) => string[];
6
+ export declare const safeGet: (source: unknown, path: string) => SafeGetResult;
7
+ export declare const get: <T = unknown>(source: unknown, path: string, fallback?: T) => T | unknown;
8
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/utils/get.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAID,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,EAa9C,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,QAAQ,OAAO,EAAE,MAAM,MAAM,KAAG,aAkCvD,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,CAAC,GAAG,OAAO,EAC7B,QAAQ,OAAO,EACf,MAAM,MAAM,EACZ,WAAW,CAAC,KACX,CAAC,GAAG,OAGN,CAAC"}
@@ -0,0 +1,46 @@
1
+ const PATH_TOKEN_PATTERN = /[^.[\]]+|\[(\d+)\]/g;
2
+ export const parsePath = (path) => {
3
+ const tokens = [];
4
+ const normalizedPath = path.trim();
5
+ if (!normalizedPath) {
6
+ return tokens;
7
+ }
8
+ for (const match of normalizedPath.matchAll(PATH_TOKEN_PATTERN)) {
9
+ tokens.push(match[1] ?? match[0]);
10
+ }
11
+ return tokens;
12
+ };
13
+ export const safeGet = (source, path) => {
14
+ if (!path.trim()) {
15
+ return {
16
+ exists: source !== undefined,
17
+ value: source,
18
+ };
19
+ }
20
+ let currentValue = source;
21
+ for (const token of parsePath(path)) {
22
+ if (currentValue === null || currentValue === undefined) {
23
+ return {
24
+ exists: false,
25
+ value: undefined,
26
+ };
27
+ }
28
+ const container = currentValue;
29
+ if (!Object.prototype.hasOwnProperty.call(container, token)) {
30
+ return {
31
+ exists: false,
32
+ value: undefined,
33
+ };
34
+ }
35
+ currentValue = container[token];
36
+ }
37
+ return {
38
+ exists: true,
39
+ value: currentValue,
40
+ };
41
+ };
42
+ export const get = (source, path, fallback) => {
43
+ const result = safeGet(source, path);
44
+ return result.exists ? result.value : fallback;
45
+ };
46
+ //# sourceMappingURL=get.js.map