bupkis 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/commonjs/assertion/assertion.d.ts +0 -13
- package/dist/commonjs/assertion/assertion.d.ts.map +1 -1
- package/dist/commonjs/assertion/assertion.js +42 -27
- package/dist/commonjs/assertion/assertion.js.map +1 -1
- package/dist/commonjs/assertion/create.d.ts +2 -0
- package/dist/commonjs/assertion/create.d.ts.map +1 -1
- package/dist/commonjs/assertion/create.js +7 -4
- package/dist/commonjs/assertion/create.js.map +1 -1
- package/dist/commonjs/assertion/impl/assertion-util.d.ts +2 -0
- package/dist/commonjs/assertion/impl/assertion-util.d.ts.map +1 -1
- package/dist/commonjs/assertion/impl/assertion-util.js +13 -2
- package/dist/commonjs/assertion/impl/assertion-util.js.map +1 -1
- package/dist/commonjs/assertion/impl/sync-basic.d.ts.map +1 -1
- package/dist/commonjs/assertion/impl/sync-basic.js +2 -3
- package/dist/commonjs/assertion/impl/sync-basic.js.map +1 -1
- package/dist/commonjs/assertion/impl/sync-collection.d.ts.map +1 -1
- package/dist/commonjs/assertion/impl/sync-collection.js +24 -14
- package/dist/commonjs/assertion/impl/sync-collection.js.map +1 -1
- package/dist/commonjs/assertion/impl/sync-esoteric.d.ts +1 -5
- package/dist/commonjs/assertion/impl/sync-esoteric.d.ts.map +1 -1
- package/dist/commonjs/assertion/impl/sync-esoteric.js +11 -13
- package/dist/commonjs/assertion/impl/sync-esoteric.js.map +1 -1
- package/dist/commonjs/assertion/impl/sync-parametric.d.ts.map +1 -1
- package/dist/commonjs/assertion/impl/sync-parametric.js +4 -2
- package/dist/commonjs/assertion/impl/sync-parametric.js.map +1 -1
- package/dist/commonjs/assertion/impl/sync.d.ts +2 -10
- package/dist/commonjs/assertion/impl/sync.d.ts.map +1 -1
- package/dist/commonjs/assertion/slotify.d.ts +1 -0
- package/dist/commonjs/assertion/slotify.d.ts.map +1 -1
- package/dist/commonjs/assertion/slotify.js +1 -0
- package/dist/commonjs/assertion/slotify.js.map +1 -1
- package/dist/commonjs/bootstrap.d.ts +1 -5
- package/dist/commonjs/bootstrap.d.ts.map +1 -1
- package/dist/commonjs/bootstrap.js +1 -0
- package/dist/commonjs/bootstrap.js.map +1 -1
- package/dist/commonjs/diff.d.ts +51 -0
- package/dist/commonjs/diff.d.ts.map +1 -0
- package/dist/commonjs/diff.js +279 -0
- package/dist/commonjs/diff.js.map +1 -0
- package/dist/commonjs/error.d.ts +17 -0
- package/dist/commonjs/error.d.ts.map +1 -1
- package/dist/commonjs/error.js +17 -7
- package/dist/commonjs/error.js.map +1 -1
- package/dist/commonjs/expect.d.ts.map +1 -1
- package/dist/commonjs/expect.js +13 -0
- package/dist/commonjs/expect.js.map +1 -1
- package/dist/commonjs/guards.d.ts +12 -8
- package/dist/commonjs/guards.d.ts.map +1 -1
- package/dist/commonjs/guards.js +24 -14
- package/dist/commonjs/guards.js.map +1 -1
- package/dist/commonjs/index.d.ts +1 -5
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/schema.d.ts.map +1 -1
- package/dist/commonjs/schema.js +3 -2
- package/dist/commonjs/schema.js.map +1 -1
- package/dist/commonjs/use.js +22 -8
- package/dist/commonjs/use.js.map +1 -1
- package/dist/commonjs/util.d.ts +1 -0
- package/dist/commonjs/util.d.ts.map +1 -1
- package/dist/commonjs/util.js +14 -10
- package/dist/commonjs/util.js.map +1 -1
- package/dist/commonjs/value-to-schema.d.ts +1 -0
- package/dist/commonjs/value-to-schema.d.ts.map +1 -1
- package/dist/commonjs/value-to-schema.js +17 -10
- package/dist/commonjs/value-to-schema.js.map +1 -1
- package/dist/esm/assertion/assertion.d.ts +0 -13
- package/dist/esm/assertion/assertion.d.ts.map +1 -1
- package/dist/esm/assertion/assertion.js +42 -27
- package/dist/esm/assertion/assertion.js.map +1 -1
- package/dist/esm/assertion/create.d.ts +2 -0
- package/dist/esm/assertion/create.d.ts.map +1 -1
- package/dist/esm/assertion/create.js +7 -4
- package/dist/esm/assertion/create.js.map +1 -1
- package/dist/esm/assertion/impl/assertion-util.d.ts +2 -0
- package/dist/esm/assertion/impl/assertion-util.d.ts.map +1 -1
- package/dist/esm/assertion/impl/assertion-util.js +13 -2
- package/dist/esm/assertion/impl/assertion-util.js.map +1 -1
- package/dist/esm/assertion/impl/sync-basic.d.ts.map +1 -1
- package/dist/esm/assertion/impl/sync-basic.js +2 -3
- package/dist/esm/assertion/impl/sync-basic.js.map +1 -1
- package/dist/esm/assertion/impl/sync-collection.d.ts.map +1 -1
- package/dist/esm/assertion/impl/sync-collection.js +24 -14
- package/dist/esm/assertion/impl/sync-collection.js.map +1 -1
- package/dist/esm/assertion/impl/sync-esoteric.d.ts +1 -5
- package/dist/esm/assertion/impl/sync-esoteric.d.ts.map +1 -1
- package/dist/esm/assertion/impl/sync-esoteric.js +11 -13
- package/dist/esm/assertion/impl/sync-esoteric.js.map +1 -1
- package/dist/esm/assertion/impl/sync-parametric.d.ts.map +1 -1
- package/dist/esm/assertion/impl/sync-parametric.js +4 -2
- package/dist/esm/assertion/impl/sync-parametric.js.map +1 -1
- package/dist/esm/assertion/impl/sync.d.ts +2 -10
- package/dist/esm/assertion/impl/sync.d.ts.map +1 -1
- package/dist/esm/assertion/slotify.d.ts +1 -0
- package/dist/esm/assertion/slotify.d.ts.map +1 -1
- package/dist/esm/assertion/slotify.js +1 -0
- package/dist/esm/assertion/slotify.js.map +1 -1
- package/dist/esm/bootstrap.d.ts +1 -5
- package/dist/esm/bootstrap.d.ts.map +1 -1
- package/dist/esm/bootstrap.js +1 -0
- package/dist/esm/bootstrap.js.map +1 -1
- package/dist/esm/diff.d.ts +51 -0
- package/dist/esm/diff.d.ts.map +1 -0
- package/dist/esm/diff.js +273 -0
- package/dist/esm/diff.js.map +1 -0
- package/dist/esm/error.d.ts +17 -0
- package/dist/esm/error.d.ts.map +1 -1
- package/dist/esm/error.js +17 -7
- package/dist/esm/error.js.map +1 -1
- package/dist/esm/expect.d.ts.map +1 -1
- package/dist/esm/expect.js +13 -0
- package/dist/esm/expect.js.map +1 -1
- package/dist/esm/guards.d.ts +12 -8
- package/dist/esm/guards.d.ts.map +1 -1
- package/dist/esm/guards.js +23 -12
- package/dist/esm/guards.js.map +1 -1
- package/dist/esm/index.d.ts +1 -5
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/schema.d.ts.map +1 -1
- package/dist/esm/schema.js +3 -2
- package/dist/esm/schema.js.map +1 -1
- package/dist/esm/use.js +19 -6
- package/dist/esm/use.js.map +1 -1
- package/dist/esm/util.d.ts +1 -0
- package/dist/esm/util.d.ts.map +1 -1
- package/dist/esm/util.js +14 -10
- package/dist/esm/util.js.map +1 -1
- package/dist/esm/value-to-schema.d.ts +1 -0
- package/dist/esm/value-to-schema.d.ts.map +1 -1
- package/dist/esm/value-to-schema.js +17 -10
- package/dist/esm/value-to-schema.js.map +1 -1
- package/package.json +22 -6
- package/src/assertion/assertion.ts +47 -28
- package/src/assertion/create.ts +8 -8
- package/src/assertion/impl/assertion-util.ts +27 -16
- package/src/assertion/impl/sync-basic.ts +3 -3
- package/src/assertion/impl/sync-collection.ts +34 -14
- package/src/assertion/impl/sync-esoteric.ts +17 -13
- package/src/assertion/impl/sync-parametric.ts +5 -2
- package/src/assertion/slotify.ts +1 -0
- package/src/bootstrap.ts +1 -0
- package/src/diff.ts +343 -0
- package/src/error.ts +35 -7
- package/src/expect.ts +13 -0
- package/src/guards.ts +27 -15
- package/src/schema.ts +4 -2
- package/src/use.ts +21 -7
- package/src/util.ts +15 -12
- package/src/value-to-schema.ts +18 -10
package/dist/esm/guards.js
CHANGED
|
@@ -17,30 +17,35 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { z } from 'zod/v4';
|
|
19
19
|
import { kExpectIt } from './constant.js';
|
|
20
|
+
const { isArray } = Array;
|
|
20
21
|
export function isZodType(value, type) {
|
|
21
22
|
const isValid = isObject(value) &&
|
|
22
23
|
'def' in value &&
|
|
23
24
|
!!value.def &&
|
|
24
25
|
typeof value.def === 'object' &&
|
|
25
26
|
'type' in value.def;
|
|
26
|
-
if (!isValid)
|
|
27
|
+
if (!isValid) {
|
|
27
28
|
return false;
|
|
28
|
-
|
|
29
|
+
}
|
|
30
|
+
if (type === undefined) {
|
|
29
31
|
return true;
|
|
32
|
+
}
|
|
30
33
|
return value.def.type === type;
|
|
31
34
|
}
|
|
32
35
|
/**
|
|
33
36
|
* Type guard for a plain object.
|
|
34
37
|
*
|
|
38
|
+
* @function
|
|
35
39
|
* @param value Value to test
|
|
36
40
|
* @returns `true` if the value is a plain object, `false` otherwise
|
|
37
41
|
*/
|
|
38
42
|
export const isObject = (value) => {
|
|
39
|
-
return typeof value === 'object' && value !== null && !
|
|
43
|
+
return typeof value === 'object' && value !== null && !isArray(value);
|
|
40
44
|
};
|
|
41
45
|
/**
|
|
42
46
|
* Returns `true` if the given value is a {@link z.ZodPromise} schema.
|
|
43
47
|
*
|
|
48
|
+
* @function
|
|
44
49
|
* @param value - Value to test
|
|
45
50
|
* @returns `true` if the value is a `ZodPromise` schema; `false` otherwise
|
|
46
51
|
*/
|
|
@@ -48,6 +53,7 @@ export const isZodPromise = (value) => isZodType(value, 'promise');
|
|
|
48
53
|
/**
|
|
49
54
|
* Checks if a value is "promise-like", meaning it is a "thenable" object.
|
|
50
55
|
*
|
|
56
|
+
* @function
|
|
51
57
|
* @param value - Value to test
|
|
52
58
|
* @returns `true` if the value is promise-like, `false` otherwise
|
|
53
59
|
*/
|
|
@@ -67,6 +73,7 @@ export const isPromiseLike = (value) => isObject(value) &&
|
|
|
67
73
|
* This may be the only way we can determine, at runtime, if a function is a
|
|
68
74
|
* constructor without actually calling it. I am unsure if this only works for
|
|
69
75
|
* classes.
|
|
76
|
+
* @function
|
|
70
77
|
* @param fn - Function to test
|
|
71
78
|
* @returns Whether the function is constructable
|
|
72
79
|
*/
|
|
@@ -76,7 +83,7 @@ export const isConstructible = (fn) => {
|
|
|
76
83
|
}
|
|
77
84
|
try {
|
|
78
85
|
// this will throw if there is no `[[construct]]` slot.. or so I've heard.
|
|
79
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
86
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, custom/require-function-tag-in-arrow-functions
|
|
80
87
|
new new Proxy(fn, { construct: () => ({}) })();
|
|
81
88
|
return true;
|
|
82
89
|
}
|
|
@@ -87,6 +94,7 @@ export const isConstructible = (fn) => {
|
|
|
87
94
|
/**
|
|
88
95
|
* Type guard for a boolean value
|
|
89
96
|
*
|
|
97
|
+
* @function
|
|
90
98
|
* @param value Value to check
|
|
91
99
|
* @returns `true` if the value is a boolean, `false` otherwise
|
|
92
100
|
*/
|
|
@@ -94,6 +102,7 @@ export const isBoolean = (value) => typeof value === 'boolean';
|
|
|
94
102
|
/**
|
|
95
103
|
* Type guard for a function value
|
|
96
104
|
*
|
|
105
|
+
* @function
|
|
97
106
|
* @param value Value to check
|
|
98
107
|
* @returns `true` if the value is a function, `false` otherwise
|
|
99
108
|
*/
|
|
@@ -115,6 +124,7 @@ const AssertionFailureSchema = z.object({
|
|
|
115
124
|
/**
|
|
116
125
|
* Type guard for a {@link AssertionFailure} object
|
|
117
126
|
*
|
|
127
|
+
* @function
|
|
118
128
|
* @param value Value to check
|
|
119
129
|
* @returns `true` if the value is an `AssertionFailure`, `false` otherwise
|
|
120
130
|
* @internal
|
|
@@ -123,6 +133,7 @@ export const isAssertionFailure = (value) => AssertionFailureSchema.safeParse(va
|
|
|
123
133
|
/**
|
|
124
134
|
* Type guard for a string value
|
|
125
135
|
*
|
|
136
|
+
* @function
|
|
126
137
|
* @param value Value to check
|
|
127
138
|
* @returns `true` if the value is a string, `false` otherwise
|
|
128
139
|
*/
|
|
@@ -130,23 +141,18 @@ export const isString = (value) => typeof value === 'string';
|
|
|
130
141
|
/**
|
|
131
142
|
* Type guard for a non-null object value
|
|
132
143
|
*
|
|
144
|
+
* @function
|
|
133
145
|
* @param value Value to check
|
|
134
146
|
* @returns `true` if the value is an object and not null, `false` otherwise
|
|
135
147
|
*/
|
|
136
148
|
export const isNonNullObject = (value) => typeof value === 'object' && value !== null;
|
|
137
|
-
/**
|
|
138
|
-
* Type guard for a null or non-object value
|
|
139
|
-
*
|
|
140
|
-
* @param value Value to check
|
|
141
|
-
* @returns `true` if the value is null or not an object, `false` otherwise
|
|
142
|
-
*/
|
|
143
|
-
export const isNullOrNonObject = (value) => typeof value !== 'object' || value === null;
|
|
144
149
|
/**
|
|
145
150
|
* Type guard for a valid WeakKey (object, function, or symbol).
|
|
146
151
|
*
|
|
147
152
|
* WeakMaps and WeakSets can only use objects (including functions) or symbols
|
|
148
153
|
* as keys, not primitives like strings, numbers, booleans, null, or undefined.
|
|
149
154
|
*
|
|
155
|
+
* @function
|
|
150
156
|
* @param value Value to check
|
|
151
157
|
* @returns `true` if the value is a valid WeakKey (object, function, or
|
|
152
158
|
* symbol), `false` otherwise
|
|
@@ -157,15 +163,17 @@ export const isWeakKey = (value) => (typeof value === 'object' && value !== null
|
|
|
157
163
|
/**
|
|
158
164
|
* Type guard for a {@link PhraseLiteralChoice}, which is a tuple of strings.
|
|
159
165
|
*
|
|
166
|
+
* @function
|
|
160
167
|
* @param value Assertion part to check
|
|
161
168
|
* @returns `true` if the part is a `PhraseLiteralChoice`, `false` otherwise
|
|
162
169
|
* @internal
|
|
163
170
|
*/
|
|
164
|
-
export const isPhraseLiteralChoice = (value) =>
|
|
171
|
+
export const isPhraseLiteralChoice = (value) => isArray(value) && value.every(isPhraseLiteral);
|
|
165
172
|
/**
|
|
166
173
|
* Type guard for a {@link PhraseLiteral}, which is just a string that does not
|
|
167
174
|
* begin with `not `.
|
|
168
175
|
*
|
|
176
|
+
* @function
|
|
169
177
|
* @param value Assertion part to check
|
|
170
178
|
* @returns `true` if the part is a `PhraseLiteral`, `false` otherwise
|
|
171
179
|
* @internal
|
|
@@ -190,6 +198,7 @@ export const isPhraseLiteral = (value) => isString(value) && !value.startsWith('
|
|
|
190
198
|
* ```
|
|
191
199
|
*
|
|
192
200
|
* @template T - The constructor type to check against
|
|
201
|
+
* @function
|
|
193
202
|
* @param value - Value to test
|
|
194
203
|
* @param ctor - Constructor function to check instanceof
|
|
195
204
|
* @returns `true` if the value is an instance of the constructor, `false`
|
|
@@ -218,6 +227,7 @@ export const isA = (value, ctor) => {
|
|
|
218
227
|
* }
|
|
219
228
|
* ```
|
|
220
229
|
*
|
|
230
|
+
* @function
|
|
221
231
|
* @param value - Value to test
|
|
222
232
|
* @returns `true` if the value is an Error instance, `false` otherwise
|
|
223
233
|
*/
|
|
@@ -243,6 +253,7 @@ export const isError = (value) => isA(value, Error);
|
|
|
243
253
|
* ```
|
|
244
254
|
*
|
|
245
255
|
* @template Subject - The subject type that the executor function operates on
|
|
256
|
+
* @function
|
|
246
257
|
* @param value - Value to test
|
|
247
258
|
* @returns `true` if the value is an ExpectItExecutor function, `false`
|
|
248
259
|
* otherwise
|
package/dist/esm/guards.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -211,11 +211,7 @@ use: import("./types.js").UseFn<readonly [import("./types.js").AssertionFunction
|
|
|
211
211
|
actual: boolean;
|
|
212
212
|
expected: boolean;
|
|
213
213
|
message: string;
|
|
214
|
-
} | undefined, readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodSymbol]>, import("./types.js").PhraseLiteralSlot<"to be an enumerable property of">, z.ZodNonOptional<z.ZodUnknown>]>, import("./types.js").AssertionFunctionSync<readonly [z.ZodNonOptional<z.ZodUnknown>, "to have enumerable property", z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodSymbol]>], (
|
|
215
|
-
actual: boolean;
|
|
216
|
-
expected: boolean;
|
|
217
|
-
message: string;
|
|
218
|
-
} | undefined, readonly [z.ZodNonOptional<z.ZodUnknown>, import("./types.js").PhraseLiteralSlot<"to have enumerable property">, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodSymbol]>]>, import("./types.js").AssertionSchemaSync<readonly ["to be sealed"], import("./types.js").AssertionImplSchemaSync<readonly ["to be sealed"]>, never>, import("./types.js").AssertionSchemaSync<readonly ["to be extensible"], import("./types.js").AssertionImplSchemaSync<readonly ["to be extensible"]>, never>], readonly [import("./types.js").AssertionFunctionAsync<readonly [z.ZodCustom<(...args: import("./types.js").MutableOrReadonly<unknown[]>) => unknown, (...args: import("./types.js").MutableOrReadonly<unknown[]>) => unknown>, readonly ["to resolve", "to fulfill"]], (subject: (...args: import("./types.js").MutableOrReadonly<unknown[]>) => unknown) => Promise<{
|
|
214
|
+
} | undefined, readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodSymbol]>, import("./types.js").PhraseLiteralSlot<"to be an enumerable property of">, z.ZodNonOptional<z.ZodUnknown>]>, import("./types.js").AssertionFunctionSync<readonly [z.ZodNonOptional<z.ZodUnknown>, "to have enumerable property", z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodSymbol]>], (_subject: unknown, key: string | number | symbol) => z.ZodCustom<unknown, unknown>, readonly [z.ZodNonOptional<z.ZodUnknown>, import("./types.js").PhraseLiteralSlot<"to have enumerable property">, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodSymbol]>]>, import("./types.js").AssertionSchemaSync<readonly ["to be sealed"], import("./types.js").AssertionImplSchemaSync<readonly ["to be sealed"]>, never>, import("./types.js").AssertionSchemaSync<readonly ["to be extensible"], import("./types.js").AssertionImplSchemaSync<readonly ["to be extensible"]>, never>], readonly [import("./types.js").AssertionFunctionAsync<readonly [z.ZodCustom<(...args: import("./types.js").MutableOrReadonly<unknown[]>) => unknown, (...args: import("./types.js").MutableOrReadonly<unknown[]>) => unknown>, readonly ["to resolve", "to fulfill"]], (subject: (...args: import("./types.js").MutableOrReadonly<unknown[]>) => unknown) => Promise<{
|
|
219
215
|
actual: string;
|
|
220
216
|
expected: string;
|
|
221
217
|
message: string;
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrD,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC;;;;;;;;;GASG;AACH,YAAY,KAAK,KAAK,MAAM,YAAY,CAAC;AAEzC;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,CAAC;AAEb;;GAEG;AACH,YAAY,EACV,gBAAgB,EAChB,MAAM,EACN,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,EACN,WAAW,EACX,QAAQ,EACR,aAAa,EACb,MAAM,EACN,OAAO,EACP,KAAK,GACN,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC5D,QAAA;AACE;;;;;;;;;GASG;AACH,eAAe;AACf;;;;;;;;;GASG;AACH,oBAAoB;AACpB;;;;;;GAMG;AACH,IAAI;AACJ;;;;;;GAMG;AACH,GAAG
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrD,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC;;;;;;;;;GASG;AACH,YAAY,KAAK,KAAK,MAAM,YAAY,CAAC;AAEzC;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,CAAC;AAEb;;GAEG;AACH,YAAY,EACV,gBAAgB,EAChB,MAAM,EACN,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,EACN,WAAW,EACX,QAAQ,EACR,aAAa,EACb,MAAM,EACN,OAAO,EACP,KAAK,GACN,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC5D,QAAA;AACE;;;;;;;;;GASG;AACH,eAAe;AACf;;;;;;;;;GASG;AACH,oBAAoB;AACpB;;;;;;GAMG;AACH,IAAI;AACJ;;;;;;GAMG;AACH,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sUAEgB,CAAC"}
|
package/dist/esm/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAU3B,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAU3B,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAIpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,eAAO,MAAM,mBAAmB,uCAGK,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,cAAc,wBACP,iBAAiB,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,YAAxC,iBAAiB,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAIjC,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,yBAAyB,wDACjB,GAAG,EAAE,KAAK,GAAG,6CAAb,GAAG,EAAE,KAAK,GAAG,EASc,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,iBAAiB,8DAGuB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAIG,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,wBAAwB,yDAKe,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,eAAO,MAAM,gBAAgB,yEAKsB,CAAC;AAEpD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,yEAAmB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,eAAO,MAAM,mBAAmB,wBAjTZ,iBAAiB,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,YAAxC,iBAAiB,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAqTL,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,YAAY,4BAOrB,CAAC;AAEL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,WAAW,yBAKsB,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,eAAO,MAAM,eAAe,oHAWsB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,eAAO,MAAM,eAAe;;mBASxB,CAAC;AAEL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,YAAY,6BAGsB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,wBAAwB,UAIuB,CAAC"}
|
package/dist/esm/schema.js
CHANGED
|
@@ -37,6 +37,7 @@ import { z } from 'zod/v4';
|
|
|
37
37
|
import { KEYPATH_REGEX } from './constant.js';
|
|
38
38
|
import { isConstructible, isFunction, isNonNullObject, isPromiseLike, } from './guards.js';
|
|
39
39
|
import { BupkisRegistry } from './metadata.js';
|
|
40
|
+
const { getPrototypeOf, prototype: objectPrototype } = Object;
|
|
40
41
|
/**
|
|
41
42
|
* A Zod schema that validates JavaScript constructible functions.
|
|
42
43
|
*
|
|
@@ -360,7 +361,7 @@ export const WrappedPromiseLikeSchema = z
|
|
|
360
361
|
* @group Schema
|
|
361
362
|
*/
|
|
362
363
|
export const DictionarySchema = z
|
|
363
|
-
.custom((value) => isNonNullObject(value) &&
|
|
364
|
+
.custom((value) => isNonNullObject(value) && getPrototypeOf(value) === null)
|
|
364
365
|
.describe('Object with null prototype')
|
|
365
366
|
.register(BupkisRegistry, { name: 'dictionary' });
|
|
366
367
|
/**
|
|
@@ -420,7 +421,7 @@ export const NullProtoObjectSchema = DictionarySchema;
|
|
|
420
421
|
*
|
|
421
422
|
* @group Schema
|
|
422
423
|
*/
|
|
423
|
-
export const AsyncFunctionSchema = FunctionSchema.refine((value) =>
|
|
424
|
+
export const AsyncFunctionSchema = FunctionSchema.refine((value) => objectPrototype.toString.call(value) === '[object AsyncFunction]')
|
|
424
425
|
.describe('Function declared with the `async` keyword')
|
|
425
426
|
.register(BupkisRegistry, { name: 'async-function' });
|
|
426
427
|
/**
|
package/dist/esm/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,UAAU,EACV,eAAe,EACf,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAO/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAc,eAAe,CAAC;KACpC,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;KACnD,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,CAAqD,UAAU,CAAC;KACtE,QAAQ,CAAC,cAAc,EAAE;IACxB,IAAI,EAAE,UAAU;CACjB,CAAC;KACD,QAAQ,CAAC,cAAc,CAAC,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC;KACvC,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC;IACnB,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC;IACnB,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC;IACvB,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,CAC1B;KACA,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;KAC3D,QAAQ,CAAC,mCAAmC,CAAC,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KAC3C,QAAQ,CAAC,gCAAgC,CAAC;KAC1C,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,CAAC,MAAM,aAAa,GAAuB,CAAC;KAC/C,MAAM,EAAE;KACR,KAAK,CAAC,aAAa,CAAC;KACpB,QAAQ,CAAC,+CAA+C,CAAC;KACzD,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAuB,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC7D,QAAQ,CACP,qEAAqE,CACtE;KACA,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/use.js
CHANGED
|
@@ -8,6 +8,7 @@ import { BupkisAssertionAsync } from './assertion/assertion-async.js';
|
|
|
8
8
|
import { BupkisAssertionSync } from './assertion/assertion-sync.js';
|
|
9
9
|
import { kExpectIt } from './constant.js';
|
|
10
10
|
import { createBaseExpect, createExpectAsyncFunction, createExpectSyncFunction, } from './expect.js';
|
|
11
|
+
const { assign } = Object;
|
|
11
12
|
/**
|
|
12
13
|
* Creates an `expect.it()` factory function for generating embeddable assertion
|
|
13
14
|
* executors.
|
|
@@ -41,6 +42,7 @@ import { createBaseExpect, createExpectAsyncFunction, createExpectSyncFunction,
|
|
|
41
42
|
*
|
|
42
43
|
* @template SyncAssertions - Array of synchronous assertion objects that define
|
|
43
44
|
* the available assertion logic for the embeddable functions
|
|
45
|
+
* @function
|
|
44
46
|
* @param expect - The underlying expect function that will execute the
|
|
45
47
|
* assertions when the returned executors are called
|
|
46
48
|
* @returns A factory function that creates {@link ExpectItExecutor} instances
|
|
@@ -51,8 +53,11 @@ import { createBaseExpect, createExpectAsyncFunction, createExpectSyncFunction,
|
|
|
51
53
|
* @see {@link kExpectIt} for the internal marking symbol
|
|
52
54
|
*/
|
|
53
55
|
const createExpectIt = (expect) => {
|
|
56
|
+
/**
|
|
57
|
+
* @function
|
|
58
|
+
*/
|
|
54
59
|
const expectIt = (...args) => {
|
|
55
|
-
const func =
|
|
60
|
+
const func = assign((subject) => {
|
|
56
61
|
const allArgs = [subject, ...args];
|
|
57
62
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
58
63
|
expect(...allArgs);
|
|
@@ -96,6 +101,7 @@ const createExpectIt = (expect) => {
|
|
|
96
101
|
*
|
|
97
102
|
* @template AsyncAssertions - Array of asynchronous assertion objects that
|
|
98
103
|
* define the available assertion logic for the embeddable async functions
|
|
104
|
+
* @function
|
|
99
105
|
* @param expectAsync - The underlying expectAsync function that will execute
|
|
100
106
|
* the assertions when the returned executors are called
|
|
101
107
|
* @returns A factory function that creates {@link ExpectItExecutorAsync}
|
|
@@ -107,8 +113,11 @@ const createExpectIt = (expect) => {
|
|
|
107
113
|
* @see {@link createExpectIt} for the synchronous equivalent
|
|
108
114
|
*/
|
|
109
115
|
const createExpectItAsync = (expectAsync) => {
|
|
116
|
+
/**
|
|
117
|
+
* @function
|
|
118
|
+
*/
|
|
110
119
|
const expectItAsync = (...args) => {
|
|
111
|
-
const func =
|
|
120
|
+
const func = assign(async (subject) => {
|
|
112
121
|
const allArgs = [subject, ...args];
|
|
113
122
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
114
123
|
await expectAsync(...allArgs);
|
|
@@ -179,6 +188,7 @@ const createExpectItAsync = (expectAsync) => {
|
|
|
179
188
|
* available in the composed functions
|
|
180
189
|
* @template AsyncAssertions - Array of base asynchronous assertions that will
|
|
181
190
|
* be available in the composed functions
|
|
191
|
+
* @function
|
|
182
192
|
* @param syncAssertions - Base synchronous assertions to include in all
|
|
183
193
|
* composed expect functions
|
|
184
194
|
* @param asyncAssertions - Base asynchronous assertions to include in all
|
|
@@ -192,9 +202,12 @@ const createExpectItAsync = (expectAsync) => {
|
|
|
192
202
|
* @see {@link FilterAsyncAssertions} for how async assertions are extracted
|
|
193
203
|
* @see {@link Concat} for how assertion arrays are combined
|
|
194
204
|
*/
|
|
195
|
-
export
|
|
205
|
+
export const createUse = (syncAssertions, asyncAssertions) => {
|
|
196
206
|
const syncAssertionsIn = syncAssertions ?? [];
|
|
197
207
|
const asyncAssertionsIn = asyncAssertions ?? [];
|
|
208
|
+
/**
|
|
209
|
+
* @function
|
|
210
|
+
*/
|
|
198
211
|
const use = (assertions) => {
|
|
199
212
|
const newSyncAssertions = assertions.filter((a) => a instanceof BupkisAssertionSync);
|
|
200
213
|
const newAsyncAssertions = assertions.filter((a) => a instanceof BupkisAssertionAsync);
|
|
@@ -208,8 +221,8 @@ export function createUse(syncAssertions, asyncAssertions) {
|
|
|
208
221
|
];
|
|
209
222
|
const expectFunction = createExpectSyncFunction(allSyncAssertions);
|
|
210
223
|
const expectAsyncFunction = createExpectAsyncFunction(allAsyncAssertions);
|
|
211
|
-
const expect =
|
|
212
|
-
const expectAsync =
|
|
224
|
+
const expect = assign(expectFunction, createBaseExpect(allSyncAssertions, allAsyncAssertions, 'sync'), { it: createExpectIt(expectFunction) });
|
|
225
|
+
const expectAsync = assign(expectAsyncFunction, createBaseExpect(allSyncAssertions, allAsyncAssertions, 'async'), { it: createExpectItAsync(expectAsyncFunction) });
|
|
213
226
|
return {
|
|
214
227
|
expect,
|
|
215
228
|
expectAsync,
|
|
@@ -219,5 +232,5 @@ export function createUse(syncAssertions, asyncAssertions) {
|
|
|
219
232
|
};
|
|
220
233
|
};
|
|
221
234
|
return use;
|
|
222
|
-
}
|
|
235
|
+
};
|
|
223
236
|
//# sourceMappingURL=use.js.map
|
package/dist/esm/use.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use.js","sourceRoot":"","sources":["../../src/use.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAMpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAUrB
|
|
1
|
+
{"version":3,"file":"use.js","sourceRoot":"","sources":["../../src/use.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/util.d.ts
CHANGED
|
@@ -185,6 +185,7 @@ export declare const keyBy: <const T extends readonly Record<PropertyKey, any>[]
|
|
|
185
185
|
* parseKeypath("arr[10]['spam']"); // ['arr', 10, 'spam']
|
|
186
186
|
* ```
|
|
187
187
|
*
|
|
188
|
+
* @function
|
|
188
189
|
* @param keypath The keypath string to parse, using dot and/or bracket
|
|
189
190
|
* notation.
|
|
190
191
|
* @returns An array of keys, where each key is a string or number. Bracketed
|
package/dist/esm/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,cAAc,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,cAAc,sBAAsB,CAAC;AAMrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,GAAG,GAAI,CAAC,GAAG,OAAO,EAC7B,KAAK,OAAO,EACZ,SAAS,OAAO,EAChB,eAAe,CAAC,KACf,CAAC,GAAG,SA4BN,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,GAAG,GAAI,KAAK,OAAO,EAAE,SAAS,OAAO,KAAG,OA2BpD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,UAAU,GACrB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,yBAA+B,KAC9B,OAiCF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,YAAY,GACvB,KAAK,OAAO,EACZ,OAAO,OAAO,EACd,yBAA+B,KAC9B,OAiDF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,GAChB,KAAK,CAAC,CAAC,SAAS,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EACnD,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAEhC,YAAY,CAAC,EACb,KAAK,CAAC,KACL,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAe1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,MAAM,GAAG,MAAM,EACpD,SAAS,OAAO,CAAC,CAAC,CAAC,KAClB,CAAC,MAAM,GAAG,MAAM,CAAC,EAgDnB,CAAC"}
|
package/dist/esm/util.js
CHANGED
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
* @packageDocumentation
|
|
12
12
|
*/
|
|
13
13
|
export * from './value-to-schema.js';
|
|
14
|
+
const { hasOwn, keys, values } = Object;
|
|
15
|
+
const { isInteger, isNaN } = Number;
|
|
16
|
+
const { isArray } = Array;
|
|
14
17
|
/**
|
|
15
18
|
* Retrieves the value at a given keypath from an object using dot or bracket
|
|
16
19
|
* notation.
|
|
@@ -158,10 +161,10 @@ export const hasKeyDeep = (obj, key, visited = new WeakSet()) => {
|
|
|
158
161
|
}
|
|
159
162
|
visited.add(obj);
|
|
160
163
|
try {
|
|
161
|
-
if (
|
|
164
|
+
if (hasOwn(obj, key)) {
|
|
162
165
|
return true;
|
|
163
166
|
}
|
|
164
|
-
if (
|
|
167
|
+
if (isArray(obj)) {
|
|
165
168
|
for (const item of obj) {
|
|
166
169
|
if (hasKeyDeep(item, key, visited)) {
|
|
167
170
|
return true;
|
|
@@ -169,7 +172,7 @@ export const hasKeyDeep = (obj, key, visited = new WeakSet()) => {
|
|
|
169
172
|
}
|
|
170
173
|
}
|
|
171
174
|
else {
|
|
172
|
-
for (const propValue of
|
|
175
|
+
for (const propValue of values(obj)) {
|
|
173
176
|
if (hasKeyDeep(propValue, key, visited)) {
|
|
174
177
|
return true;
|
|
175
178
|
}
|
|
@@ -215,12 +218,12 @@ export const hasValueDeep = (obj, value, visited = new WeakSet()) => {
|
|
|
215
218
|
}
|
|
216
219
|
if (typeof obj === 'object' &&
|
|
217
220
|
obj !== null &&
|
|
218
|
-
!
|
|
221
|
+
!isArray(obj) &&
|
|
219
222
|
typeof value === 'object' &&
|
|
220
223
|
value !== null &&
|
|
221
|
-
!
|
|
222
|
-
const objKeys =
|
|
223
|
-
const valueKeys =
|
|
224
|
+
!isArray(value)) {
|
|
225
|
+
const objKeys = keys(obj);
|
|
226
|
+
const valueKeys = keys(value);
|
|
224
227
|
if (objKeys.length === 0 && valueKeys.length === 0) {
|
|
225
228
|
return true;
|
|
226
229
|
}
|
|
@@ -233,7 +236,7 @@ export const hasValueDeep = (obj, value, visited = new WeakSet()) => {
|
|
|
233
236
|
}
|
|
234
237
|
visited.add(obj);
|
|
235
238
|
try {
|
|
236
|
-
if (
|
|
239
|
+
if (isArray(obj)) {
|
|
237
240
|
for (const item of obj) {
|
|
238
241
|
if (hasValueDeep(item, value, visited)) {
|
|
239
242
|
return true;
|
|
@@ -241,7 +244,7 @@ export const hasValueDeep = (obj, value, visited = new WeakSet()) => {
|
|
|
241
244
|
}
|
|
242
245
|
}
|
|
243
246
|
else {
|
|
244
|
-
for (const propValue of
|
|
247
|
+
for (const propValue of values(obj)) {
|
|
245
248
|
if (hasValueDeep(propValue, value, visited)) {
|
|
246
249
|
return true;
|
|
247
250
|
}
|
|
@@ -308,6 +311,7 @@ export const keyBy = (collection, key) => {
|
|
|
308
311
|
* parseKeypath("arr[10]['spam']"); // ['arr', 10, 'spam']
|
|
309
312
|
* ```
|
|
310
313
|
*
|
|
314
|
+
* @function
|
|
311
315
|
* @param keypath The keypath string to parse, using dot and/or bracket
|
|
312
316
|
* notation.
|
|
313
317
|
* @returns An array of keys, where each key is a string or number. Bracketed
|
|
@@ -339,7 +343,7 @@ export const parseKeypath = (keypath) => {
|
|
|
339
343
|
}
|
|
340
344
|
i++;
|
|
341
345
|
const numKey = Number(key);
|
|
342
|
-
keys.push(
|
|
346
|
+
keys.push(isInteger(numKey) && !isNaN(numKey) ? numKey : key);
|
|
343
347
|
}
|
|
344
348
|
else if (keypath[i] === '.') {
|
|
345
349
|
i++;
|
package/dist/esm/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,cAAc,sBAAsB,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CACjB,GAAY,EACZ,OAAgB,EAChB,YAAgB,EACD,EAAE;IACjB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC3E,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACnD,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,UAAU,GAAG,OAAuC,CAAC;QAE3D,IAAI,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;YACzB,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,OAAY,CAAC;AACtB,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,GAAY,EAAE,OAAgB,EAAW,EAAE;IAC7D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,OAAuC,CAAC;QAE3D,IAAI,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,GAAY,EACZ,GAAgB,EAChB,UAAU,IAAI,OAAO,EAAU,EACtB,EAAE;IACX,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEjB,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,7 @@ import { z } from 'zod/v4';
|
|
|
29
29
|
* // z.object({ users: z.array(z.object({ name: z.string() })) })
|
|
30
30
|
* ```
|
|
31
31
|
*
|
|
32
|
+
* @function
|
|
32
33
|
* @param value - The value to convert to a schema
|
|
33
34
|
* @param options - Configuration options for schema generation
|
|
34
35
|
* @param visited - Internal WeakSet for circular reference detection
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-to-schema.d.ts","sourceRoot":"","sources":["../../src/value-to-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"value-to-schema.d.ts","sourceRoot":"","sources":["../../src/value-to-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAiB3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,eAAO,MAAM,aAAa,GACxB,OAAO,OAAO,EACd,UAAS,oBAAyB,EAClC,yBAA+B,KAC9B,CAAC,CAAC,OAAO,CAAC,GAAG,CA8Uf,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IAQnC;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC;;;;;;EAMH,CAAC;AAE3C;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC;;;;;;EAMH,CAAC"}
|
|
@@ -2,6 +2,9 @@ import { z } from 'zod/v4';
|
|
|
2
2
|
import { ValueToSchemaError } from './error.js';
|
|
3
3
|
import { isExpectItExecutor, isNonNullObject, isObject, isPromiseLike, isString, isZodType, } from './guards.js';
|
|
4
4
|
import { RegExpSchema, WrappedPromiseLikeSchema } from './schema.js';
|
|
5
|
+
const { isNaN } = Number;
|
|
6
|
+
const { entries, freeze, hasOwn, keys } = Object;
|
|
7
|
+
const { isArray } = Array;
|
|
5
8
|
/**
|
|
6
9
|
* Recursively converts an arbitrary value to a Zod v4 schema that would
|
|
7
10
|
* validate values with the same structure.
|
|
@@ -32,6 +35,7 @@ import { RegExpSchema, WrappedPromiseLikeSchema } from './schema.js';
|
|
|
32
35
|
* // z.object({ users: z.array(z.object({ name: z.string() })) })
|
|
33
36
|
* ```
|
|
34
37
|
*
|
|
38
|
+
* @function
|
|
35
39
|
* @param value - The value to convert to a schema
|
|
36
40
|
* @param options - Configuration options for schema generation
|
|
37
41
|
* @param visited - Internal WeakSet for circular reference detection
|
|
@@ -56,7 +60,7 @@ export const valueToSchema = (value, options = {}, visited = new WeakSet()) => {
|
|
|
56
60
|
})
|
|
57
61
|
: z.undefined();
|
|
58
62
|
}
|
|
59
|
-
if (
|
|
63
|
+
if (isNaN(value)) {
|
|
60
64
|
return z.nan();
|
|
61
65
|
}
|
|
62
66
|
if (value === Infinity || value === -Infinity) {
|
|
@@ -107,7 +111,7 @@ export const valueToSchema = (value, options = {}, visited = new WeakSet()) => {
|
|
|
107
111
|
visited.add(value);
|
|
108
112
|
try {
|
|
109
113
|
// Check for objects with own __proto__ property - these can cause unexpected behavior
|
|
110
|
-
if (
|
|
114
|
+
if (hasOwn(value, '__proto__')) {
|
|
111
115
|
throw new ValueToSchemaError('Objects with an own "__proto__" property are not supported by valueToSchema');
|
|
112
116
|
}
|
|
113
117
|
// Handle built-in object types
|
|
@@ -146,7 +150,7 @@ export const valueToSchema = (value, options = {}, visited = new WeakSet()) => {
|
|
|
146
150
|
return WrappedPromiseLikeSchema;
|
|
147
151
|
}
|
|
148
152
|
// Handle arrays
|
|
149
|
-
if (
|
|
153
|
+
if (isArray(value)) {
|
|
150
154
|
// For arrays, we need to preserve undefined values while allowing
|
|
151
155
|
// other elements to use the original literalPrimitives setting
|
|
152
156
|
const filteredValue = value; // Always process all elements
|
|
@@ -173,6 +177,9 @@ export const valueToSchema = (value, options = {}, visited = new WeakSet()) => {
|
|
|
173
177
|
}
|
|
174
178
|
if (!noMixedArrays) {
|
|
175
179
|
// Helper function to generate structural keys for schemas
|
|
180
|
+
/**
|
|
181
|
+
* @function
|
|
182
|
+
*/
|
|
176
183
|
const getSchemaKey = (zodType) => {
|
|
177
184
|
const schema = zodType;
|
|
178
185
|
if (isZodType(schema, 'literal')) {
|
|
@@ -187,7 +194,7 @@ export const valueToSchema = (value, options = {}, visited = new WeakSet()) => {
|
|
|
187
194
|
// For objects, create a key based on the property keys and their types
|
|
188
195
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
189
196
|
const shape = schema.def.shape;
|
|
190
|
-
const shapeKeys =
|
|
197
|
+
const shapeKeys = keys(shape)
|
|
191
198
|
.sort()
|
|
192
199
|
.map((key) => {
|
|
193
200
|
const propSchema = shape[key];
|
|
@@ -230,7 +237,7 @@ export const valueToSchema = (value, options = {}, visited = new WeakSet()) => {
|
|
|
230
237
|
if (isNonNullObject(value)) {
|
|
231
238
|
const schemaShape = {};
|
|
232
239
|
const undefinedKeys = [];
|
|
233
|
-
for (const [key, val] of
|
|
240
|
+
for (const [key, val] of entries(value)) {
|
|
234
241
|
if (isString(key)) {
|
|
235
242
|
// Skip undefined values unless we're in literalPrimitives mode
|
|
236
243
|
// This prevents objects with only undefined values from matching any object
|
|
@@ -266,7 +273,7 @@ export const valueToSchema = (value, options = {}, visited = new WeakSet()) => {
|
|
|
266
273
|
}
|
|
267
274
|
const obj = data;
|
|
268
275
|
for (const key of undefinedKeys) {
|
|
269
|
-
if (!
|
|
276
|
+
if (!hasOwn(obj, key)) {
|
|
270
277
|
ctx.addIssue({
|
|
271
278
|
code: z.ZodIssueCode.custom,
|
|
272
279
|
message: `Expected property "${key}" to exist with value undefined`,
|
|
@@ -277,9 +284,9 @@ export const valueToSchema = (value, options = {}, visited = new WeakSet()) => {
|
|
|
277
284
|
});
|
|
278
285
|
}
|
|
279
286
|
// Check if this is an empty object and literalEmptyObjects is enabled
|
|
280
|
-
if (
|
|
287
|
+
if (keys(schemaShape).length === 0 && literalEmptyObjects) {
|
|
281
288
|
// Create a schema that only matches empty objects
|
|
282
|
-
return z.custom((val) => isObject(val) &&
|
|
289
|
+
return z.custom((val) => isObject(val) && keys(val).length === 0, {
|
|
283
290
|
message: 'Expected an empty object with no own properties',
|
|
284
291
|
});
|
|
285
292
|
}
|
|
@@ -302,7 +309,7 @@ export const valueToSchema = (value, options = {}, visited = new WeakSet()) => {
|
|
|
302
309
|
* Uses literal primitives and tuples for exact matching while allowing extra
|
|
303
310
|
* properties.
|
|
304
311
|
*/
|
|
305
|
-
export const valueToSchemaOptionsForSatisfies =
|
|
312
|
+
export const valueToSchemaOptionsForSatisfies = freeze({
|
|
306
313
|
literalEmptyObjects: true,
|
|
307
314
|
literalPrimitives: true,
|
|
308
315
|
literalRegExp: false,
|
|
@@ -316,7 +323,7 @@ export const valueToSchemaOptionsForSatisfies = Object.freeze({
|
|
|
316
323
|
* Uses literal primitives, regexp, and tuples with strict validation for exact
|
|
317
324
|
* matching.
|
|
318
325
|
*/
|
|
319
|
-
export const valueToSchemaOptionsForDeepEqual =
|
|
326
|
+
export const valueToSchemaOptionsForDeepEqual = freeze({
|
|
320
327
|
literalEmptyObjects: true,
|
|
321
328
|
literalPrimitives: true,
|
|
322
329
|
literalRegExp: true,
|