is-kit 1.7.0 → 1.7.2
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/index.d.mts +154 -153
- package/dist/index.d.ts +154 -153
- package/dist/index.js +176 -168
- package/dist/index.mjs +176 -168
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,16 +1,137 @@
|
|
|
1
|
+
// src/core/assert.ts
|
|
2
|
+
var DEFAULT_ASSERT_MESSAGE = "Assertion failed";
|
|
3
|
+
function assert(fn, value, message) {
|
|
4
|
+
if (fn(value)) return;
|
|
5
|
+
throw new Error(message ?? DEFAULT_ASSERT_MESSAGE);
|
|
6
|
+
}
|
|
7
|
+
|
|
1
8
|
// src/core/define.ts
|
|
2
9
|
function define(fn) {
|
|
3
10
|
return (value) => !!fn(value);
|
|
4
11
|
}
|
|
5
12
|
|
|
6
|
-
// src/
|
|
7
|
-
var
|
|
13
|
+
// src/utils/object-tags.ts
|
|
14
|
+
var objectToString = Object.prototype.toString;
|
|
15
|
+
var OBJECT_TAG_DATE = "[object Date]";
|
|
16
|
+
var OBJECT_TAG_REGEXP = "[object RegExp]";
|
|
17
|
+
var OBJECT_TAG_MAP = "[object Map]";
|
|
18
|
+
var OBJECT_TAG_SET = "[object Set]";
|
|
19
|
+
var OBJECT_TAG_WEAK_MAP = "[object WeakMap]";
|
|
20
|
+
var OBJECT_TAG_WEAK_SET = "[object WeakSet]";
|
|
21
|
+
var OBJECT_TAG_ARRAY_BUFFER = "[object ArrayBuffer]";
|
|
22
|
+
var OBJECT_TAG_DATA_VIEW = "[object DataView]";
|
|
23
|
+
var OBJECT_TAG_ERROR = "[object Error]";
|
|
24
|
+
var getTag = (value) => objectToString.call(value);
|
|
8
25
|
|
|
9
|
-
// src/core/
|
|
10
|
-
var
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
|
|
26
|
+
// src/core/object.ts
|
|
27
|
+
var defineOptionalInstanceGuard = (constructor) => constructor === void 0 ? define(() => false) : define(
|
|
28
|
+
(value) => typeof constructor === "function" && value instanceof constructor
|
|
29
|
+
);
|
|
30
|
+
var isFunction = define(
|
|
31
|
+
(value) => typeof value === "function"
|
|
32
|
+
);
|
|
33
|
+
var isObject = define(
|
|
34
|
+
(value) => typeof value === "object" && value !== null
|
|
35
|
+
);
|
|
36
|
+
var readObjectProperty = (value, key) => {
|
|
37
|
+
if (!isObject(value) && !isFunction(value)) return void 0;
|
|
38
|
+
return value[key];
|
|
39
|
+
};
|
|
40
|
+
var isPlainObject = define((value) => {
|
|
41
|
+
if (!isObject(value)) return false;
|
|
42
|
+
const proto = Object.getPrototypeOf(value);
|
|
43
|
+
return proto === null || Object.getPrototypeOf(proto) === null;
|
|
44
|
+
});
|
|
45
|
+
var isArray = define(Array.isArray);
|
|
46
|
+
var isDate = define(
|
|
47
|
+
(value) => getTag(value) === OBJECT_TAG_DATE && !Number.isNaN(value.getTime())
|
|
48
|
+
);
|
|
49
|
+
var isRegExp = define(
|
|
50
|
+
(value) => getTag(value) === OBJECT_TAG_REGEXP
|
|
51
|
+
);
|
|
52
|
+
var isMap = define(
|
|
53
|
+
(value) => getTag(value) === OBJECT_TAG_MAP
|
|
54
|
+
);
|
|
55
|
+
var isSet = define(
|
|
56
|
+
(value) => getTag(value) === OBJECT_TAG_SET
|
|
57
|
+
);
|
|
58
|
+
var isWeakMap = define(
|
|
59
|
+
(value) => getTag(value) === OBJECT_TAG_WEAK_MAP
|
|
60
|
+
);
|
|
61
|
+
var isWeakSet = define(
|
|
62
|
+
(value) => getTag(value) === OBJECT_TAG_WEAK_SET
|
|
63
|
+
);
|
|
64
|
+
var isPromiseLike = define(
|
|
65
|
+
(value) => isFunction(readObjectProperty(value, "then"))
|
|
66
|
+
);
|
|
67
|
+
var isIterable = define(
|
|
68
|
+
(value) => isFunction(readObjectProperty(value, Symbol.iterator))
|
|
69
|
+
);
|
|
70
|
+
var isAsyncIterable = define(
|
|
71
|
+
(value) => isFunction(readObjectProperty(value, Symbol.asyncIterator))
|
|
72
|
+
);
|
|
73
|
+
var isArrayBuffer = define(
|
|
74
|
+
(value) => getTag(value) === OBJECT_TAG_ARRAY_BUFFER
|
|
75
|
+
);
|
|
76
|
+
var isDataView = define(
|
|
77
|
+
(value) => getTag(value) === OBJECT_TAG_DATA_VIEW
|
|
78
|
+
);
|
|
79
|
+
var isTypedArray = define(
|
|
80
|
+
(value) => ArrayBuffer.isView(value) && getTag(value) !== OBJECT_TAG_DATA_VIEW
|
|
81
|
+
);
|
|
82
|
+
var isError = define(
|
|
83
|
+
(value) => value instanceof Error || getTag(value) === OBJECT_TAG_ERROR
|
|
84
|
+
);
|
|
85
|
+
var isURL = defineOptionalInstanceGuard(
|
|
86
|
+
typeof URL === "undefined" ? void 0 : URL
|
|
87
|
+
);
|
|
88
|
+
var isBlob = defineOptionalInstanceGuard(
|
|
89
|
+
typeof Blob === "undefined" ? void 0 : Blob
|
|
90
|
+
);
|
|
91
|
+
var isInstanceOf = (constructor) => define((value) => value instanceof constructor);
|
|
92
|
+
|
|
93
|
+
// src/core/equals.ts
|
|
94
|
+
var guardedBy = (guard) => define((input) => guard(input));
|
|
95
|
+
function equals(target) {
|
|
96
|
+
return define((input) => Object.is(input, target));
|
|
97
|
+
}
|
|
98
|
+
function equalsBy(guard, selector) {
|
|
99
|
+
const matchesGuard = guardedBy(guard);
|
|
100
|
+
const createComparator = (selectorFn) => (target) => define((input) => {
|
|
101
|
+
if (!matchesGuard(input)) return false;
|
|
102
|
+
return Object.is(selectorFn(input), target);
|
|
103
|
+
});
|
|
104
|
+
if (selector) {
|
|
105
|
+
return createComparator(selector);
|
|
106
|
+
}
|
|
107
|
+
return (selectorFn) => createComparator(selectorFn);
|
|
108
|
+
}
|
|
109
|
+
function equalsKey(key, target) {
|
|
110
|
+
const hasMatchingKey = define((input) => {
|
|
111
|
+
return isObject(input) && Object.hasOwn(input, key) && Object.is(input[key], target);
|
|
112
|
+
});
|
|
113
|
+
return (input) => hasMatchingKey(input);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// src/core/key.ts
|
|
117
|
+
var hasKey = (key) => define(
|
|
118
|
+
(input) => isObject(input) && Object.hasOwn(input, key)
|
|
119
|
+
);
|
|
120
|
+
var hasKeys = (...keys) => {
|
|
121
|
+
if (keys.length === 0) {
|
|
122
|
+
return define(() => false);
|
|
123
|
+
}
|
|
124
|
+
return define(
|
|
125
|
+
(input) => isObject(input) && keys.every((key) => Object.hasOwn(input, key))
|
|
126
|
+
);
|
|
127
|
+
};
|
|
128
|
+
function narrowKeyTo(guard, key) {
|
|
129
|
+
return (target) => {
|
|
130
|
+
const keyEquals = equalsKey(key, target);
|
|
131
|
+
return define(
|
|
132
|
+
(input) => guard(input) && keyEquals(input)
|
|
133
|
+
);
|
|
134
|
+
};
|
|
14
135
|
}
|
|
15
136
|
|
|
16
137
|
// src/utils/guard-collections.ts
|
|
@@ -103,101 +224,6 @@ function required(fn) {
|
|
|
103
224
|
return requireWhen((value) => value === void 0, fn);
|
|
104
225
|
}
|
|
105
226
|
|
|
106
|
-
// src/utils/object-tags.ts
|
|
107
|
-
var objectToString = Object.prototype.toString;
|
|
108
|
-
var OBJECT_TAG_DATE = "[object Date]";
|
|
109
|
-
var OBJECT_TAG_REGEXP = "[object RegExp]";
|
|
110
|
-
var OBJECT_TAG_MAP = "[object Map]";
|
|
111
|
-
var OBJECT_TAG_SET = "[object Set]";
|
|
112
|
-
var OBJECT_TAG_WEAK_MAP = "[object WeakMap]";
|
|
113
|
-
var OBJECT_TAG_WEAK_SET = "[object WeakSet]";
|
|
114
|
-
var OBJECT_TAG_ARRAY_BUFFER = "[object ArrayBuffer]";
|
|
115
|
-
var OBJECT_TAG_DATA_VIEW = "[object DataView]";
|
|
116
|
-
var OBJECT_TAG_ERROR = "[object Error]";
|
|
117
|
-
var getTag = (value) => objectToString.call(value);
|
|
118
|
-
|
|
119
|
-
// src/core/object.ts
|
|
120
|
-
var isFunction = define(
|
|
121
|
-
(value) => typeof value === "function"
|
|
122
|
-
);
|
|
123
|
-
var isObject = define(
|
|
124
|
-
(value) => typeof value === "object" && value !== null
|
|
125
|
-
);
|
|
126
|
-
var isPlainObject = define((value) => {
|
|
127
|
-
if (!isObject(value)) return false;
|
|
128
|
-
const proto = Object.getPrototypeOf(value);
|
|
129
|
-
return proto === null || Object.getPrototypeOf(proto) === null;
|
|
130
|
-
});
|
|
131
|
-
var isArray = define(Array.isArray);
|
|
132
|
-
var isDate = define(
|
|
133
|
-
(value) => getTag(value) === OBJECT_TAG_DATE && !Number.isNaN(value.getTime())
|
|
134
|
-
);
|
|
135
|
-
var isRegExp = define(
|
|
136
|
-
(value) => getTag(value) === OBJECT_TAG_REGEXP
|
|
137
|
-
);
|
|
138
|
-
var isMap = define(
|
|
139
|
-
(value) => getTag(value) === OBJECT_TAG_MAP
|
|
140
|
-
);
|
|
141
|
-
var isSet = define(
|
|
142
|
-
(value) => getTag(value) === OBJECT_TAG_SET
|
|
143
|
-
);
|
|
144
|
-
var isWeakMap = define(
|
|
145
|
-
(value) => getTag(value) === OBJECT_TAG_WEAK_MAP
|
|
146
|
-
);
|
|
147
|
-
var isWeakSet = define(
|
|
148
|
-
(value) => getTag(value) === OBJECT_TAG_WEAK_SET
|
|
149
|
-
);
|
|
150
|
-
var isPromiseLike = define((value) => {
|
|
151
|
-
if (!isObject(value) && !isFunction(value)) return false;
|
|
152
|
-
return isFunction(value.then);
|
|
153
|
-
});
|
|
154
|
-
var isIterable = define((value) => {
|
|
155
|
-
if (!isObject(value) && !isFunction(value)) return false;
|
|
156
|
-
return isFunction(value[Symbol.iterator]);
|
|
157
|
-
});
|
|
158
|
-
var isAsyncIterable = define((value) => {
|
|
159
|
-
if (!isObject(value) && !isFunction(value)) return false;
|
|
160
|
-
return isFunction(value[Symbol.asyncIterator]);
|
|
161
|
-
});
|
|
162
|
-
var isArrayBuffer = define(
|
|
163
|
-
(value) => getTag(value) === OBJECT_TAG_ARRAY_BUFFER
|
|
164
|
-
);
|
|
165
|
-
var isDataView = define(
|
|
166
|
-
(value) => getTag(value) === OBJECT_TAG_DATA_VIEW
|
|
167
|
-
);
|
|
168
|
-
var isTypedArray = define(
|
|
169
|
-
(value) => ArrayBuffer.isView(value) && getTag(value) !== OBJECT_TAG_DATA_VIEW
|
|
170
|
-
);
|
|
171
|
-
var isError = define(
|
|
172
|
-
(value) => value instanceof Error || getTag(value) === OBJECT_TAG_ERROR
|
|
173
|
-
);
|
|
174
|
-
var isURL = typeof URL !== "undefined" ? define((value) => value instanceof URL) : define(() => false);
|
|
175
|
-
var isBlob = typeof Blob !== "undefined" ? define((value) => value instanceof Blob) : define(() => false);
|
|
176
|
-
var isInstanceOf = (constructor) => define((value) => value instanceof constructor);
|
|
177
|
-
|
|
178
|
-
// src/core/equals.ts
|
|
179
|
-
var guardedBy = (guard) => define((input) => guard(input));
|
|
180
|
-
function equals(target) {
|
|
181
|
-
return define((input) => Object.is(input, target));
|
|
182
|
-
}
|
|
183
|
-
function equalsBy(guard, selector) {
|
|
184
|
-
const matchesGuard = guardedBy(guard);
|
|
185
|
-
const createComparator = (selectorFn) => (target) => define((input) => {
|
|
186
|
-
if (!matchesGuard(input)) return false;
|
|
187
|
-
return Object.is(selectorFn(input), target);
|
|
188
|
-
});
|
|
189
|
-
if (selector) {
|
|
190
|
-
return createComparator(selector);
|
|
191
|
-
}
|
|
192
|
-
return (selectorFn) => createComparator(selectorFn);
|
|
193
|
-
}
|
|
194
|
-
function equalsKey(key, target) {
|
|
195
|
-
const hasMatchingKey = define((input) => {
|
|
196
|
-
return isObject(input) && Object.hasOwn(input, key) && Object.is(input[key], target);
|
|
197
|
-
});
|
|
198
|
-
return (input) => hasMatchingKey(input);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
227
|
// src/core/parse.ts
|
|
202
228
|
function safeParse(fn, value) {
|
|
203
229
|
const valid = fn(value);
|
|
@@ -207,6 +233,9 @@ function safeParseWith(fn) {
|
|
|
207
233
|
return (value) => safeParse(fn, value);
|
|
208
234
|
}
|
|
209
235
|
|
|
236
|
+
// src/core/predicate.ts
|
|
237
|
+
var predicateToRefine = (fn) => (value) => fn(value);
|
|
238
|
+
|
|
210
239
|
// src/core/primitive.ts
|
|
211
240
|
var isString = define((value) => typeof value === "string");
|
|
212
241
|
var isNumberPrimitive = define(
|
|
@@ -260,13 +289,6 @@ function nonEmptyArrayOf(elementGuard) {
|
|
|
260
289
|
);
|
|
261
290
|
}
|
|
262
291
|
|
|
263
|
-
// src/core/combinators/set.ts
|
|
264
|
-
function setOf(valueGuard) {
|
|
265
|
-
return define(
|
|
266
|
-
(input) => isSet(input) && everySetValue(input, valueGuard)
|
|
267
|
-
);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
292
|
// src/core/combinators/map.ts
|
|
271
293
|
function mapOf(keyGuard, valueGuard) {
|
|
272
294
|
return define(
|
|
@@ -274,18 +296,46 @@ function mapOf(keyGuard, valueGuard) {
|
|
|
274
296
|
);
|
|
275
297
|
}
|
|
276
298
|
|
|
277
|
-
// src/core/combinators/tuple.ts
|
|
278
|
-
function tupleOf(...guards) {
|
|
279
|
-
return define(
|
|
280
|
-
(input) => Array.isArray(input) && everyTupleValue(input, guards)
|
|
281
|
-
);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
299
|
// src/core/combinators/one-of.ts
|
|
285
300
|
function oneOf(...guards) {
|
|
286
301
|
return or(...guards);
|
|
287
302
|
}
|
|
288
303
|
|
|
304
|
+
// src/core/combinators/one-of-values.ts
|
|
305
|
+
var ONE_OF_VALUES_LINEAR_SCAN_MAX = 8;
|
|
306
|
+
var isSingleArrayArg = define(
|
|
307
|
+
(value) => Array.isArray(value) && value.length === 1 && Array.isArray(value[0])
|
|
308
|
+
);
|
|
309
|
+
var normalizeValues = (args) => isSingleArrayArg(args) ? args[0] : args;
|
|
310
|
+
var createLinearPredicate = (items) => {
|
|
311
|
+
return define((input) => {
|
|
312
|
+
return items.some((value) => Object.is(value, input));
|
|
313
|
+
});
|
|
314
|
+
};
|
|
315
|
+
var createSetPredicate = (items) => {
|
|
316
|
+
let hasPositiveZero = false;
|
|
317
|
+
let hasNegativeZero = false;
|
|
318
|
+
const valueSet = /* @__PURE__ */ new Set();
|
|
319
|
+
for (const literalValue of items) {
|
|
320
|
+
if (isZero(literalValue)) {
|
|
321
|
+
if (Object.is(literalValue, -0)) hasNegativeZero = true;
|
|
322
|
+
else hasPositiveZero = true;
|
|
323
|
+
} else {
|
|
324
|
+
valueSet.add(literalValue);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return define((input) => {
|
|
328
|
+
if (isZero(input)) {
|
|
329
|
+
return Object.is(input, -0) ? hasNegativeZero : hasPositiveZero;
|
|
330
|
+
}
|
|
331
|
+
return valueSet.has(input);
|
|
332
|
+
});
|
|
333
|
+
};
|
|
334
|
+
function oneOfValues(...args) {
|
|
335
|
+
const items = normalizeValues(args);
|
|
336
|
+
return items.length <= ONE_OF_VALUES_LINEAR_SCAN_MAX ? createLinearPredicate(items) : createSetPredicate(items);
|
|
337
|
+
}
|
|
338
|
+
|
|
289
339
|
// src/core/combinators/record.ts
|
|
290
340
|
function recordOf(keyFunction, valueFunction) {
|
|
291
341
|
return define(
|
|
@@ -293,6 +343,13 @@ function recordOf(keyFunction, valueFunction) {
|
|
|
293
343
|
);
|
|
294
344
|
}
|
|
295
345
|
|
|
346
|
+
// src/core/combinators/set.ts
|
|
347
|
+
function setOf(valueGuard) {
|
|
348
|
+
return define(
|
|
349
|
+
(input) => isSet(input) && everySetValue(input, valueGuard)
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
|
|
296
353
|
// src/core/combinators/struct.ts
|
|
297
354
|
var isOptionalSchemaField = define(
|
|
298
355
|
// WHY: Optional fields are represented as a small tagged object so `struct`
|
|
@@ -336,60 +393,11 @@ function struct(schema, options) {
|
|
|
336
393
|
});
|
|
337
394
|
}
|
|
338
395
|
|
|
339
|
-
// src/core/combinators/
|
|
340
|
-
|
|
341
|
-
var isSingleArrayArg = define(
|
|
342
|
-
(value) => Array.isArray(value) && value.length === 1 && Array.isArray(value[0])
|
|
343
|
-
);
|
|
344
|
-
var normalizeValues = (args) => isSingleArrayArg(args) ? args[0] : args;
|
|
345
|
-
var createLinearPredicate = (items) => {
|
|
346
|
-
return define((input) => {
|
|
347
|
-
return items.some((value) => Object.is(value, input));
|
|
348
|
-
});
|
|
349
|
-
};
|
|
350
|
-
var createSetPredicate = (items) => {
|
|
351
|
-
let hasPositiveZero = false;
|
|
352
|
-
let hasNegativeZero = false;
|
|
353
|
-
const valueSet = /* @__PURE__ */ new Set();
|
|
354
|
-
for (const literalValue of items) {
|
|
355
|
-
if (isZero(literalValue)) {
|
|
356
|
-
if (Object.is(literalValue, -0)) hasNegativeZero = true;
|
|
357
|
-
else hasPositiveZero = true;
|
|
358
|
-
} else {
|
|
359
|
-
valueSet.add(literalValue);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
return define((input) => {
|
|
363
|
-
if (isZero(input)) {
|
|
364
|
-
return Object.is(input, -0) ? hasNegativeZero : hasPositiveZero;
|
|
365
|
-
}
|
|
366
|
-
return valueSet.has(input);
|
|
367
|
-
});
|
|
368
|
-
};
|
|
369
|
-
function oneOfValues(...args) {
|
|
370
|
-
const items = normalizeValues(args);
|
|
371
|
-
return items.length <= ONE_OF_VALUES_LINEAR_SCAN_MAX ? createLinearPredicate(items) : createSetPredicate(items);
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
// src/core/key.ts
|
|
375
|
-
var hasKey = (key) => define(
|
|
376
|
-
(input) => isObject(input) && Object.hasOwn(input, key)
|
|
377
|
-
);
|
|
378
|
-
var hasKeys = (...keys) => {
|
|
379
|
-
if (keys.length === 0) {
|
|
380
|
-
return define(() => false);
|
|
381
|
-
}
|
|
396
|
+
// src/core/combinators/tuple.ts
|
|
397
|
+
function tupleOf(...guards) {
|
|
382
398
|
return define(
|
|
383
|
-
(input) =>
|
|
399
|
+
(input) => Array.isArray(input) && everyTupleValue(input, guards)
|
|
384
400
|
);
|
|
385
|
-
};
|
|
386
|
-
function narrowKeyTo(guard, key) {
|
|
387
|
-
return (target) => {
|
|
388
|
-
const keyEquals = equalsKey(key, target);
|
|
389
|
-
return define(
|
|
390
|
-
(input) => guard(input) && keyEquals(input)
|
|
391
|
-
);
|
|
392
|
-
};
|
|
393
401
|
}
|
|
394
402
|
export {
|
|
395
403
|
and,
|