is-kit 1.1.3 → 1.1.5
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 +7 -4
- package/dist/index.d.ts +7 -4
- package/dist/index.js +23 -6
- package/dist/index.mjs +23 -6
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -136,8 +136,8 @@ declare function equals<const T>(target: T): Predicate<T>;
|
|
|
136
136
|
* @param selector Optional selector to project the comparable key; if omitted, returns a function to supply it later.
|
|
137
137
|
* @returns Function that accepts a target and returns a predicate over the original value.
|
|
138
138
|
*/
|
|
139
|
-
declare function equalsBy<F extends
|
|
140
|
-
declare function equalsBy<F extends
|
|
139
|
+
declare function equalsBy<F extends Predicate<unknown>>(guard: F): <K>(selector: (value: GuardedOf<F>) => K) => <const T extends K>(target: T) => Predicate<GuardedOf<F>>;
|
|
140
|
+
declare function equalsBy<F extends Predicate<unknown>, K>(guard: F, selector: (value: GuardedOf<F>) => K): <const T extends K>(target: T) => Predicate<GuardedOf<F>>;
|
|
141
141
|
/**
|
|
142
142
|
* Creates a guard that matches objects having a key equal to the target value.
|
|
143
143
|
*
|
|
@@ -278,12 +278,15 @@ declare function struct<S extends Schema>(schema: S, options?: {
|
|
|
278
278
|
|
|
279
279
|
/**
|
|
280
280
|
* Creates a guard that matches when the input is one of the provided literal values.
|
|
281
|
-
* Uses `Object.is` for exact value semantics.
|
|
281
|
+
* Uses `Object.is` for exact value semantics. For large sets, keeps O(1) lookups while
|
|
282
|
+
* preserving `+0` vs `-0` by tracking zero variants explicitly in addition to a `Set`.
|
|
282
283
|
*
|
|
283
|
-
* @param values Literal primitives to compare against.
|
|
284
|
+
* @param values Literal primitives to compare against (varargs or single readonly tuple array).
|
|
284
285
|
* @returns Predicate narrowing to the union of the provided literal values.
|
|
285
286
|
*/
|
|
286
287
|
declare function oneOfValues<const T extends ReadonlyArray<Primitive>>(...values: T): Predicate<T[number]>;
|
|
288
|
+
declare function oneOfValues<const T extends ReadonlyArray<Primitive>>(values: T): Predicate<T[number]>;
|
|
289
|
+
declare function oneOfValues<const T extends ReadonlyArray<Primitive>>(...valuesOrArray: T | [T]): Predicate<T[number]>;
|
|
287
290
|
|
|
288
291
|
/**
|
|
289
292
|
* Checks whether a value is a function.
|
package/dist/index.d.ts
CHANGED
|
@@ -136,8 +136,8 @@ declare function equals<const T>(target: T): Predicate<T>;
|
|
|
136
136
|
* @param selector Optional selector to project the comparable key; if omitted, returns a function to supply it later.
|
|
137
137
|
* @returns Function that accepts a target and returns a predicate over the original value.
|
|
138
138
|
*/
|
|
139
|
-
declare function equalsBy<F extends
|
|
140
|
-
declare function equalsBy<F extends
|
|
139
|
+
declare function equalsBy<F extends Predicate<unknown>>(guard: F): <K>(selector: (value: GuardedOf<F>) => K) => <const T extends K>(target: T) => Predicate<GuardedOf<F>>;
|
|
140
|
+
declare function equalsBy<F extends Predicate<unknown>, K>(guard: F, selector: (value: GuardedOf<F>) => K): <const T extends K>(target: T) => Predicate<GuardedOf<F>>;
|
|
141
141
|
/**
|
|
142
142
|
* Creates a guard that matches objects having a key equal to the target value.
|
|
143
143
|
*
|
|
@@ -278,12 +278,15 @@ declare function struct<S extends Schema>(schema: S, options?: {
|
|
|
278
278
|
|
|
279
279
|
/**
|
|
280
280
|
* Creates a guard that matches when the input is one of the provided literal values.
|
|
281
|
-
* Uses `Object.is` for exact value semantics.
|
|
281
|
+
* Uses `Object.is` for exact value semantics. For large sets, keeps O(1) lookups while
|
|
282
|
+
* preserving `+0` vs `-0` by tracking zero variants explicitly in addition to a `Set`.
|
|
282
283
|
*
|
|
283
|
-
* @param values Literal primitives to compare against.
|
|
284
|
+
* @param values Literal primitives to compare against (varargs or single readonly tuple array).
|
|
284
285
|
* @returns Predicate narrowing to the union of the provided literal values.
|
|
285
286
|
*/
|
|
286
287
|
declare function oneOfValues<const T extends ReadonlyArray<Primitive>>(...values: T): Predicate<T[number]>;
|
|
288
|
+
declare function oneOfValues<const T extends ReadonlyArray<Primitive>>(values: T): Predicate<T[number]>;
|
|
289
|
+
declare function oneOfValues<const T extends ReadonlyArray<Primitive>>(...valuesOrArray: T | [T]): Predicate<T[number]>;
|
|
287
290
|
|
|
288
291
|
/**
|
|
289
292
|
* Checks whether a value is a function.
|
package/dist/index.js
CHANGED
|
@@ -85,7 +85,7 @@ function define(fn) {
|
|
|
85
85
|
// src/core/predicate.ts
|
|
86
86
|
var predicateToRefine = (fn) => (value) => fn(value);
|
|
87
87
|
|
|
88
|
-
// src/utils/
|
|
88
|
+
// src/utils/to-boolean-predicates.ts
|
|
89
89
|
var toBooleanPredicates = (guards) => guards;
|
|
90
90
|
|
|
91
91
|
// src/core/logic.ts
|
|
@@ -269,7 +269,7 @@ function tupleOf(...guards) {
|
|
|
269
269
|
};
|
|
270
270
|
}
|
|
271
271
|
|
|
272
|
-
// src/core/combinators/one.ts
|
|
272
|
+
// src/core/combinators/one-of.ts
|
|
273
273
|
function oneOf(...guards) {
|
|
274
274
|
return (input) => guards.some((guard) => guard(input));
|
|
275
275
|
}
|
|
@@ -311,15 +311,32 @@ function struct(schema, options) {
|
|
|
311
311
|
|
|
312
312
|
// src/core/combinators/one-of-values.ts
|
|
313
313
|
var ONE_OF_VALUES_LINEAR_SCAN_MAX = 8;
|
|
314
|
-
function oneOfValues(...
|
|
315
|
-
|
|
316
|
-
|
|
314
|
+
function oneOfValues(...args) {
|
|
315
|
+
const isSingleArrayArg = define((value) => {
|
|
316
|
+
if (!Array.isArray(value)) return false;
|
|
317
|
+
return value.length === 1 && Array.isArray(value[0]);
|
|
318
|
+
});
|
|
319
|
+
const items = isSingleArrayArg(args) ? args[0] : args;
|
|
320
|
+
if (items.length <= ONE_OF_VALUES_LINEAR_SCAN_MAX) {
|
|
317
321
|
return function(input) {
|
|
318
322
|
return items.some((value) => Object.is(value, input));
|
|
319
323
|
};
|
|
320
324
|
}
|
|
321
|
-
|
|
325
|
+
let hasPositiveZero = false;
|
|
326
|
+
let hasNegativeZero = false;
|
|
327
|
+
const valueSet = /* @__PURE__ */ new Set();
|
|
328
|
+
for (const literalValue of items) {
|
|
329
|
+
if (typeof literalValue === "number" && (Object.is(literalValue, 0) || Object.is(literalValue, -0))) {
|
|
330
|
+
if (Object.is(literalValue, -0)) hasNegativeZero = true;
|
|
331
|
+
else hasPositiveZero = true;
|
|
332
|
+
} else {
|
|
333
|
+
valueSet.add(literalValue);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
322
336
|
return function(input) {
|
|
337
|
+
if (typeof input === "number" && (Object.is(input, 0) || Object.is(input, -0))) {
|
|
338
|
+
return Object.is(input, -0) ? hasNegativeZero : hasPositiveZero;
|
|
339
|
+
}
|
|
323
340
|
return valueSet.has(input);
|
|
324
341
|
};
|
|
325
342
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -6,7 +6,7 @@ function define(fn) {
|
|
|
6
6
|
// src/core/predicate.ts
|
|
7
7
|
var predicateToRefine = (fn) => (value) => fn(value);
|
|
8
8
|
|
|
9
|
-
// src/utils/
|
|
9
|
+
// src/utils/to-boolean-predicates.ts
|
|
10
10
|
var toBooleanPredicates = (guards) => guards;
|
|
11
11
|
|
|
12
12
|
// src/core/logic.ts
|
|
@@ -190,7 +190,7 @@ function tupleOf(...guards) {
|
|
|
190
190
|
};
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
-
// src/core/combinators/one.ts
|
|
193
|
+
// src/core/combinators/one-of.ts
|
|
194
194
|
function oneOf(...guards) {
|
|
195
195
|
return (input) => guards.some((guard) => guard(input));
|
|
196
196
|
}
|
|
@@ -232,15 +232,32 @@ function struct(schema, options) {
|
|
|
232
232
|
|
|
233
233
|
// src/core/combinators/one-of-values.ts
|
|
234
234
|
var ONE_OF_VALUES_LINEAR_SCAN_MAX = 8;
|
|
235
|
-
function oneOfValues(...
|
|
236
|
-
|
|
237
|
-
|
|
235
|
+
function oneOfValues(...args) {
|
|
236
|
+
const isSingleArrayArg = define((value) => {
|
|
237
|
+
if (!Array.isArray(value)) return false;
|
|
238
|
+
return value.length === 1 && Array.isArray(value[0]);
|
|
239
|
+
});
|
|
240
|
+
const items = isSingleArrayArg(args) ? args[0] : args;
|
|
241
|
+
if (items.length <= ONE_OF_VALUES_LINEAR_SCAN_MAX) {
|
|
238
242
|
return function(input) {
|
|
239
243
|
return items.some((value) => Object.is(value, input));
|
|
240
244
|
};
|
|
241
245
|
}
|
|
242
|
-
|
|
246
|
+
let hasPositiveZero = false;
|
|
247
|
+
let hasNegativeZero = false;
|
|
248
|
+
const valueSet = /* @__PURE__ */ new Set();
|
|
249
|
+
for (const literalValue of items) {
|
|
250
|
+
if (typeof literalValue === "number" && (Object.is(literalValue, 0) || Object.is(literalValue, -0))) {
|
|
251
|
+
if (Object.is(literalValue, -0)) hasNegativeZero = true;
|
|
252
|
+
else hasPositiveZero = true;
|
|
253
|
+
} else {
|
|
254
|
+
valueSet.add(literalValue);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
243
257
|
return function(input) {
|
|
258
|
+
if (typeof input === "number" && (Object.is(input, 0) || Object.is(input, -0))) {
|
|
259
|
+
return Object.is(input, -0) ? hasNegativeZero : hasPositiveZero;
|
|
260
|
+
}
|
|
244
261
|
return valueSet.has(input);
|
|
245
262
|
};
|
|
246
263
|
}
|