@fluixi/utils 1.0.0-alpha.53
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/LICENSE +21 -0
- package/README.md +73 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.mjs +1 -0
- package/dist/lib/array/advanced.cjs +1 -0
- package/dist/lib/array/advanced.d.ts +1116 -0
- package/dist/lib/array/advanced.d.ts.map +1 -0
- package/dist/lib/array/advanced.js +2429 -0
- package/dist/lib/array/advanced.mjs +1 -0
- package/dist/lib/array/array.cjs +1 -0
- package/dist/lib/array/array.d.ts +6 -0
- package/dist/lib/array/array.d.ts.map +1 -0
- package/dist/lib/array/array.js +31 -0
- package/dist/lib/array/array.mjs +1 -0
- package/dist/lib/array/index.cjs +1 -0
- package/dist/lib/array/index.d.ts +4 -0
- package/dist/lib/array/index.d.ts.map +1 -0
- package/dist/lib/array/index.js +3 -0
- package/dist/lib/array/index.mjs +1 -0
- package/dist/lib/array/utils.cjs +1 -0
- package/dist/lib/array/utils.d.ts +100 -0
- package/dist/lib/array/utils.d.ts.map +1 -0
- package/dist/lib/array/utils.js +165 -0
- package/dist/lib/array/utils.mjs +1 -0
- package/dist/lib/color/color.cjs +1 -0
- package/dist/lib/color/color.d.ts +366 -0
- package/dist/lib/color/color.d.ts.map +1 -0
- package/dist/lib/color/color.js +722 -0
- package/dist/lib/color/color.mjs +1 -0
- package/dist/lib/color/constants.cjs +1 -0
- package/dist/lib/color/constants.d.ts +361 -0
- package/dist/lib/color/constants.d.ts.map +1 -0
- package/dist/lib/color/constants.js +358 -0
- package/dist/lib/color/constants.mjs +1 -0
- package/dist/lib/color/conversions.cjs +1 -0
- package/dist/lib/color/conversions.d.ts +166 -0
- package/dist/lib/color/conversions.d.ts.map +1 -0
- package/dist/lib/color/conversions.js +766 -0
- package/dist/lib/color/conversions.mjs +1 -0
- package/dist/lib/color/helpers.cjs +1 -0
- package/dist/lib/color/helpers.d.ts +75 -0
- package/dist/lib/color/helpers.d.ts.map +1 -0
- package/dist/lib/color/helpers.js +419 -0
- package/dist/lib/color/helpers.mjs +1 -0
- package/dist/lib/color/index.cjs +1 -0
- package/dist/lib/color/index.d.ts +12 -0
- package/dist/lib/color/index.d.ts.map +1 -0
- package/dist/lib/color/index.js +15 -0
- package/dist/lib/color/index.mjs +1 -0
- package/dist/lib/color/types.cjs +1 -0
- package/dist/lib/color/types.d.ts +179 -0
- package/dist/lib/color/types.d.ts.map +1 -0
- package/dist/lib/color/types.js +1 -0
- package/dist/lib/color/types.mjs +0 -0
- package/dist/lib/color/utils.cjs +1 -0
- package/dist/lib/color/utils.d.ts +199 -0
- package/dist/lib/color/utils.d.ts.map +1 -0
- package/dist/lib/color/utils.js +858 -0
- package/dist/lib/color/utils.mjs +1 -0
- package/dist/lib/compare/comparators.cjs +1 -0
- package/dist/lib/compare/comparators.d.ts +65 -0
- package/dist/lib/compare/comparators.d.ts.map +1 -0
- package/dist/lib/compare/comparators.js +210 -0
- package/dist/lib/compare/comparators.mjs +1 -0
- package/dist/lib/compare/index.cjs +1 -0
- package/dist/lib/compare/index.d.ts +2 -0
- package/dist/lib/compare/index.d.ts.map +1 -0
- package/dist/lib/compare/index.js +1 -0
- package/dist/lib/compare/index.mjs +1 -0
- package/dist/lib/crypto/hash.cjs +1 -0
- package/dist/lib/crypto/hash.d.ts +6 -0
- package/dist/lib/crypto/hash.d.ts.map +1 -0
- package/dist/lib/crypto/hash.js +53 -0
- package/dist/lib/crypto/hash.mjs +1 -0
- package/dist/lib/crypto/index.cjs +1 -0
- package/dist/lib/crypto/index.d.ts +2 -0
- package/dist/lib/crypto/index.d.ts.map +1 -0
- package/dist/lib/crypto/index.js +1 -0
- package/dist/lib/crypto/index.mjs +1 -0
- package/dist/lib/dom/events.cjs +1 -0
- package/dist/lib/dom/events.d.ts +159 -0
- package/dist/lib/dom/events.d.ts.map +1 -0
- package/dist/lib/dom/events.js +50 -0
- package/dist/lib/dom/events.mjs +1 -0
- package/dist/lib/dom/index.cjs +1 -0
- package/dist/lib/dom/index.d.ts +3 -0
- package/dist/lib/dom/index.d.ts.map +1 -0
- package/dist/lib/dom/index.js +2 -0
- package/dist/lib/dom/index.mjs +1 -0
- package/dist/lib/dom/utils.cjs +1 -0
- package/dist/lib/dom/utils.d.ts +6 -0
- package/dist/lib/dom/utils.d.ts.map +1 -0
- package/dist/lib/dom/utils.js +37 -0
- package/dist/lib/dom/utils.mjs +1 -0
- package/dist/lib/functions/functions.cjs +1 -0
- package/dist/lib/functions/functions.d.ts +329 -0
- package/dist/lib/functions/functions.d.ts.map +1 -0
- package/dist/lib/functions/functions.js +585 -0
- package/dist/lib/functions/functions.mjs +1 -0
- package/dist/lib/functions/index.cjs +1 -0
- package/dist/lib/functions/index.d.ts +3 -0
- package/dist/lib/functions/index.d.ts.map +1 -0
- package/dist/lib/functions/index.js +1 -0
- package/dist/lib/functions/index.mjs +1 -0
- package/dist/lib/functions/types.cjs +1 -0
- package/dist/lib/functions/types.d.ts +2 -0
- package/dist/lib/functions/types.d.ts.map +1 -0
- package/dist/lib/functions/types.js +1 -0
- package/dist/lib/functions/types.mjs +0 -0
- package/dist/lib/helpers.cjs +1 -0
- package/dist/lib/helpers.d.ts +13 -0
- package/dist/lib/helpers.d.ts.map +1 -0
- package/dist/lib/helpers.js +66 -0
- package/dist/lib/helpers.mjs +1 -0
- package/dist/lib/index.cjs +1 -0
- package/dist/lib/index.d.ts +6 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +8 -0
- package/dist/lib/index.mjs +1 -0
- package/dist/lib/maths/constants.cjs +1 -0
- package/dist/lib/maths/constants.d.ts +84 -0
- package/dist/lib/maths/constants.d.ts.map +1 -0
- package/dist/lib/maths/constants.js +79 -0
- package/dist/lib/maths/constants.mjs +1 -0
- package/dist/lib/maths/fn/advanced.cjs +1 -0
- package/dist/lib/maths/fn/advanced.d.ts +149 -0
- package/dist/lib/maths/fn/advanced.d.ts.map +1 -0
- package/dist/lib/maths/fn/advanced.js +264 -0
- package/dist/lib/maths/fn/advanced.mjs +1 -0
- package/dist/lib/maths/fn/basic.cjs +1 -0
- package/dist/lib/maths/fn/basic.d.ts +182 -0
- package/dist/lib/maths/fn/basic.d.ts.map +1 -0
- package/dist/lib/maths/fn/basic.js +343 -0
- package/dist/lib/maths/fn/basic.mjs +1 -0
- package/dist/lib/maths/fn/complex.cjs +1 -0
- package/dist/lib/maths/fn/complex.d.ts +153 -0
- package/dist/lib/maths/fn/complex.d.ts.map +1 -0
- package/dist/lib/maths/fn/complex.js +383 -0
- package/dist/lib/maths/fn/complex.mjs +1 -0
- package/dist/lib/maths/fn/index.cjs +1 -0
- package/dist/lib/maths/fn/index.d.ts +10 -0
- package/dist/lib/maths/fn/index.d.ts.map +1 -0
- package/dist/lib/maths/fn/index.js +9 -0
- package/dist/lib/maths/fn/index.mjs +1 -0
- package/dist/lib/maths/fn/trigo.cjs +1 -0
- package/dist/lib/maths/fn/trigo.d.ts +147 -0
- package/dist/lib/maths/fn/trigo.d.ts.map +1 -0
- package/dist/lib/maths/fn/trigo.js +227 -0
- package/dist/lib/maths/fn/trigo.mjs +1 -0
- package/dist/lib/maths/fn/vector.cjs +1 -0
- package/dist/lib/maths/fn/vector.d.ts +512 -0
- package/dist/lib/maths/fn/vector.d.ts.map +1 -0
- package/dist/lib/maths/fn/vector.js +1136 -0
- package/dist/lib/maths/fn/vector.mjs +1 -0
- package/dist/lib/maths/formatter.cjs +1 -0
- package/dist/lib/maths/formatter.d.ts +35 -0
- package/dist/lib/maths/formatter.d.ts.map +1 -0
- package/dist/lib/maths/formatter.js +56 -0
- package/dist/lib/maths/formatter.mjs +1 -0
- package/dist/lib/maths/guards.cjs +1 -0
- package/dist/lib/maths/guards.d.ts +166 -0
- package/dist/lib/maths/guards.d.ts.map +1 -0
- package/dist/lib/maths/guards.js +315 -0
- package/dist/lib/maths/guards.mjs +1 -0
- package/dist/lib/maths/index.cjs +1 -0
- package/dist/lib/maths/index.d.ts +24 -0
- package/dist/lib/maths/index.d.ts.map +1 -0
- package/dist/lib/maths/index.js +29 -0
- package/dist/lib/maths/index.mjs +1 -0
- package/dist/lib/maths/parser.cjs +1 -0
- package/dist/lib/maths/parser.d.ts +20 -0
- package/dist/lib/maths/parser.d.ts.map +1 -0
- package/dist/lib/maths/parser.js +78 -0
- package/dist/lib/maths/parser.mjs +1 -0
- package/dist/lib/maths/random.cjs +1 -0
- package/dist/lib/maths/random.d.ts +27 -0
- package/dist/lib/maths/random.d.ts.map +1 -0
- package/dist/lib/maths/random.js +49 -0
- package/dist/lib/maths/random.mjs +1 -0
- package/dist/lib/maths/types/advanced.cjs +1 -0
- package/dist/lib/maths/types/advanced.d.ts +357 -0
- package/dist/lib/maths/types/advanced.d.ts.map +1 -0
- package/dist/lib/maths/types/advanced.js +5 -0
- package/dist/lib/maths/types/advanced.mjs +0 -0
- package/dist/lib/maths/types/basic.cjs +1 -0
- package/dist/lib/maths/types/basic.d.ts +95 -0
- package/dist/lib/maths/types/basic.d.ts.map +1 -0
- package/dist/lib/maths/types/basic.js +5 -0
- package/dist/lib/maths/types/basic.mjs +0 -0
- package/dist/lib/maths/types/index.cjs +1 -0
- package/dist/lib/maths/types/index.d.ts +4 -0
- package/dist/lib/maths/types/index.d.ts.map +1 -0
- package/dist/lib/maths/types/index.js +3 -0
- package/dist/lib/maths/types/index.mjs +0 -0
- package/dist/lib/maths/types/negative.cjs +1 -0
- package/dist/lib/maths/types/negative.d.ts +51 -0
- package/dist/lib/maths/types/negative.d.ts.map +1 -0
- package/dist/lib/maths/types/negative.js +5 -0
- package/dist/lib/maths/types/negative.mjs +0 -0
- package/dist/lib/maths/types/operations.cjs +1 -0
- package/dist/lib/maths/types/operations.d.ts +188 -0
- package/dist/lib/maths/types/operations.d.ts.map +1 -0
- package/dist/lib/maths/types/operations.js +6 -0
- package/dist/lib/maths/types/operations.mjs +0 -0
- package/dist/lib/object/clone.cjs +1 -0
- package/dist/lib/object/clone.d.ts +46 -0
- package/dist/lib/object/clone.d.ts.map +1 -0
- package/dist/lib/object/clone.js +104 -0
- package/dist/lib/object/clone.mjs +1 -0
- package/dist/lib/object/diff.cjs +1 -0
- package/dist/lib/object/diff.d.ts +203 -0
- package/dist/lib/object/diff.d.ts.map +1 -0
- package/dist/lib/object/diff.js +805 -0
- package/dist/lib/object/diff.mjs +1 -0
- package/dist/lib/object/getter-setter.cjs +1 -0
- package/dist/lib/object/getter-setter.d.ts +361 -0
- package/dist/lib/object/getter-setter.d.ts.map +1 -0
- package/dist/lib/object/getter-setter.js +1771 -0
- package/dist/lib/object/getter-setter.mjs +1 -0
- package/dist/lib/object/index.cjs +6 -0
- package/dist/lib/object/index.d.ts +13 -0
- package/dist/lib/object/index.d.ts.map +1 -0
- package/dist/lib/object/index.js +12 -0
- package/dist/lib/object/index.mjs +6 -0
- package/dist/lib/object/merge.cjs +1 -0
- package/dist/lib/object/merge.d.ts +93 -0
- package/dist/lib/object/merge.d.ts.map +1 -0
- package/dist/lib/object/merge.js +474 -0
- package/dist/lib/object/merge.mjs +1 -0
- package/dist/lib/object/object.cjs +1 -0
- package/dist/lib/object/object.d.ts +128 -0
- package/dist/lib/object/object.d.ts.map +1 -0
- package/dist/lib/object/object.js +432 -0
- package/dist/lib/object/object.mjs +1 -0
- package/dist/lib/object/omit.cjs +1 -0
- package/dist/lib/object/omit.d.ts +351 -0
- package/dist/lib/object/omit.d.ts.map +1 -0
- package/dist/lib/object/omit.js +656 -0
- package/dist/lib/object/omit.mjs +1 -0
- package/dist/lib/object/reconcile.cjs +1 -0
- package/dist/lib/object/reconcile.d.ts +7 -0
- package/dist/lib/object/reconcile.d.ts.map +1 -0
- package/dist/lib/object/reconcile.js +122 -0
- package/dist/lib/object/reconcile.mjs +1 -0
- package/dist/lib/object/selector.cjs +1 -0
- package/dist/lib/object/selector.d.ts +50 -0
- package/dist/lib/object/selector.d.ts.map +1 -0
- package/dist/lib/object/selector.js +371 -0
- package/dist/lib/object/selector.mjs +1 -0
- package/dist/lib/object/sort.cjs +1 -0
- package/dist/lib/object/sort.d.ts +149 -0
- package/dist/lib/object/sort.d.ts.map +1 -0
- package/dist/lib/object/sort.js +298 -0
- package/dist/lib/object/sort.mjs +1 -0
- package/dist/lib/object/transform.cjs +1 -0
- package/dist/lib/object/transform.d.ts +620 -0
- package/dist/lib/object/transform.d.ts.map +1 -0
- package/dist/lib/object/transform.js +1058 -0
- package/dist/lib/object/transform.mjs +1 -0
- package/dist/lib/object/types.cjs +1 -0
- package/dist/lib/object/types.d.ts +250 -0
- package/dist/lib/object/types.d.ts.map +1 -0
- package/dist/lib/object/types.js +1 -0
- package/dist/lib/object/types.mjs +0 -0
- package/dist/lib/object/utils.cjs +6 -0
- package/dist/lib/object/utils.d.ts +165 -0
- package/dist/lib/object/utils.d.ts.map +1 -0
- package/dist/lib/object/utils.js +444 -0
- package/dist/lib/object/utils.mjs +6 -0
- package/dist/lib/primitive/boolean/boolean.cjs +1 -0
- package/dist/lib/primitive/boolean/boolean.d.ts +276 -0
- package/dist/lib/primitive/boolean/boolean.d.ts.map +1 -0
- package/dist/lib/primitive/boolean/boolean.js +615 -0
- package/dist/lib/primitive/boolean/boolean.mjs +1 -0
- package/dist/lib/primitive/boolean/index.cjs +1 -0
- package/dist/lib/primitive/boolean/index.d.ts +3 -0
- package/dist/lib/primitive/boolean/index.d.ts.map +1 -0
- package/dist/lib/primitive/boolean/index.js +2 -0
- package/dist/lib/primitive/boolean/index.mjs +1 -0
- package/dist/lib/primitive/boolean/types.cjs +1 -0
- package/dist/lib/primitive/boolean/types.d.ts +14 -0
- package/dist/lib/primitive/boolean/types.d.ts.map +1 -0
- package/dist/lib/primitive/boolean/types.js +1 -0
- package/dist/lib/primitive/boolean/types.mjs +0 -0
- package/dist/lib/primitive/date/date.cjs +1 -0
- package/dist/lib/primitive/date/date.d.ts +641 -0
- package/dist/lib/primitive/date/date.d.ts.map +1 -0
- package/dist/lib/primitive/date/date.js +1998 -0
- package/dist/lib/primitive/date/date.mjs +1 -0
- package/dist/lib/primitive/date/index.cjs +1 -0
- package/dist/lib/primitive/date/index.d.ts +3 -0
- package/dist/lib/primitive/date/index.d.ts.map +1 -0
- package/dist/lib/primitive/date/index.js +2 -0
- package/dist/lib/primitive/date/index.mjs +1 -0
- package/dist/lib/primitive/date/types.cjs +1 -0
- package/dist/lib/primitive/date/types.d.ts +205 -0
- package/dist/lib/primitive/date/types.d.ts.map +1 -0
- package/dist/lib/primitive/date/types.js +7 -0
- package/dist/lib/primitive/date/types.mjs +0 -0
- package/dist/lib/primitive/index.cjs +5 -0
- package/dist/lib/primitive/index.d.ts +5 -0
- package/dist/lib/primitive/index.d.ts.map +1 -0
- package/dist/lib/primitive/index.js +4 -0
- package/dist/lib/primitive/index.mjs +5 -0
- package/dist/lib/primitive/string/index.cjs +5 -0
- package/dist/lib/primitive/string/index.d.ts +3 -0
- package/dist/lib/primitive/string/index.d.ts.map +1 -0
- package/dist/lib/primitive/string/index.js +2 -0
- package/dist/lib/primitive/string/index.mjs +5 -0
- package/dist/lib/primitive/string/parser-2.cjs +8 -0
- package/dist/lib/primitive/string/parser-2.d.ts +17 -0
- package/dist/lib/primitive/string/parser-2.d.ts.map +1 -0
- package/dist/lib/primitive/string/parser-2.js +656 -0
- package/dist/lib/primitive/string/parser-2.mjs +8 -0
- package/dist/lib/primitive/string/parser.cjs +3 -0
- package/dist/lib/primitive/string/parser.d.ts +9 -0
- package/dist/lib/primitive/string/parser.d.ts.map +1 -0
- package/dist/lib/primitive/string/parser.js +775 -0
- package/dist/lib/primitive/string/parser.mjs +3 -0
- package/dist/lib/primitive/string/string.cjs +5 -0
- package/dist/lib/primitive/string/string.d.ts +535 -0
- package/dist/lib/primitive/string/string.d.ts.map +1 -0
- package/dist/lib/primitive/string/string.js +1301 -0
- package/dist/lib/primitive/string/string.mjs +5 -0
- package/dist/lib/primitive/string/types.cjs +1 -0
- package/dist/lib/primitive/string/types.d.ts +318 -0
- package/dist/lib/primitive/string/types.d.ts.map +1 -0
- package/dist/lib/primitive/string/types.js +5 -0
- package/dist/lib/primitive/string/types.mjs +0 -0
- package/dist/lib/primitive/types.cjs +1 -0
- package/dist/lib/primitive/types.d.ts +27 -0
- package/dist/lib/primitive/types.d.ts.map +1 -0
- package/dist/lib/primitive/types.js +1 -0
- package/dist/lib/primitive/types.mjs +0 -0
- package/dist/lib/url/index.cjs +1 -0
- package/dist/lib/url/index.d.ts +3 -0
- package/dist/lib/url/index.d.ts.map +1 -0
- package/dist/lib/url/index.js +2 -0
- package/dist/lib/url/index.mjs +1 -0
- package/dist/lib/url/parser.cjs +1 -0
- package/dist/lib/url/parser.d.ts +216 -0
- package/dist/lib/url/parser.d.ts.map +1 -0
- package/dist/lib/url/parser.js +488 -0
- package/dist/lib/url/parser.mjs +1 -0
- package/dist/lib/url/types.cjs +1 -0
- package/dist/lib/url/types.d.ts +18 -0
- package/dist/lib/url/types.d.ts.map +1 -0
- package/dist/lib/url/types.js +1 -0
- package/dist/lib/url/types.mjs +0 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/package.json +150 -0
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if a value is an object (not array, function, date, etc.)
|
|
3
|
+
*
|
|
4
|
+
* This function determines if a value is a plain JavaScript object by excluding
|
|
5
|
+
* arrays, functions, and built-in object types like Date, RegExp, Map, etc.
|
|
6
|
+
*
|
|
7
|
+
* @param value - The value to check
|
|
8
|
+
* @returns `true` if value is a plain object; `false` otherwise
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* isObject({}); // true
|
|
13
|
+
* isObject({ key: 'value' }); // true
|
|
14
|
+
*
|
|
15
|
+
* isObject([]); // false
|
|
16
|
+
* isObject(null); // false
|
|
17
|
+
* isObject(undefined); // false
|
|
18
|
+
* isObject(new Date()); // false
|
|
19
|
+
* isObject(() => {}); // false
|
|
20
|
+
* isObject(new Map()); // false
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @category Type Checking
|
|
24
|
+
* @see isPlainObject - For stricter object type checking
|
|
25
|
+
*/
|
|
26
|
+
export const isObject = (value) => {
|
|
27
|
+
if (value == null)
|
|
28
|
+
return false;
|
|
29
|
+
if (Array.isArray(value))
|
|
30
|
+
return false;
|
|
31
|
+
if (typeof value === 'function')
|
|
32
|
+
return false;
|
|
33
|
+
if (value instanceof Date)
|
|
34
|
+
return false;
|
|
35
|
+
if (value instanceof RegExp)
|
|
36
|
+
return false;
|
|
37
|
+
if (value instanceof Map)
|
|
38
|
+
return false;
|
|
39
|
+
if (value instanceof Set)
|
|
40
|
+
return false;
|
|
41
|
+
if (value instanceof Error)
|
|
42
|
+
return false;
|
|
43
|
+
return typeof value === 'object';
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Checks if a value is a plain object (only Object.prototype or null in prototype chain)
|
|
47
|
+
*
|
|
48
|
+
* Unlike {@link isObject}, this function performs a stricter check to ensure the value
|
|
49
|
+
* is a "plain" object - created via object literal `{}` or `Object.create(null)`.
|
|
50
|
+
* This excludes objects created with custom constructors.
|
|
51
|
+
*
|
|
52
|
+
* @template T - The expected object type
|
|
53
|
+
* @param v - The value to check
|
|
54
|
+
* @returns `true` if value is a plain object; `false` otherwise
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* isPlainObject({}); // true
|
|
59
|
+
* isPlainObject(Object.create(null)); // true
|
|
60
|
+
*
|
|
61
|
+
* class Custom {}
|
|
62
|
+
* isPlainObject(new Custom()); // false
|
|
63
|
+
* isPlainObject([]); // false
|
|
64
|
+
* isPlainObject(null); // false
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* @category Type Checking
|
|
68
|
+
*/
|
|
69
|
+
export function isPlainObject(v) {
|
|
70
|
+
if (typeof v !== 'object' || v === null)
|
|
71
|
+
return false;
|
|
72
|
+
const proto = Object.getPrototypeOf(v);
|
|
73
|
+
return proto === Object.prototype || proto === null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Checks if a value is a class constructor
|
|
77
|
+
*
|
|
78
|
+
* This function determines if a value is a class constructor by checking
|
|
79
|
+
* if it's a function and if its string representation starts with the "class" keyword.
|
|
80
|
+
*
|
|
81
|
+
* @param obj - The value to check
|
|
82
|
+
* @returns `true` if value is a class constructor; `false` otherwise
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* class Example {}
|
|
87
|
+
* isClass(Example); // true
|
|
88
|
+
*
|
|
89
|
+
* function regularFn() {}
|
|
90
|
+
* isClass(regularFn); // false
|
|
91
|
+
*
|
|
92
|
+
* const arrowFn = () => {};
|
|
93
|
+
* isClass(arrowFn); // false
|
|
94
|
+
* ```
|
|
95
|
+
*
|
|
96
|
+
* @category Type Checking
|
|
97
|
+
*/
|
|
98
|
+
export function isClass(obj) {
|
|
99
|
+
return (typeof obj === 'function' &&
|
|
100
|
+
/^class\s/.test(Function.prototype.toString.call(obj)));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Checks if a value is an empty object
|
|
104
|
+
*
|
|
105
|
+
* This function determines if a value is an object with no enumerable properties.
|
|
106
|
+
* It first checks if the value is an object using {@link isObject} and then
|
|
107
|
+
* checks if it has any enumerable properties.
|
|
108
|
+
*
|
|
109
|
+
* @param value - The value to check
|
|
110
|
+
* @returns `true` if value is an object with no properties; `false` otherwise
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```ts
|
|
114
|
+
* isEmptyObject({}); // true
|
|
115
|
+
* isEmptyObject(Object.create(null)); // true
|
|
116
|
+
*
|
|
117
|
+
* isEmptyObject({a: 1}); // false
|
|
118
|
+
* isEmptyObject(null); // false
|
|
119
|
+
* isEmptyObject([]); // false (arrays are not objects in this context)
|
|
120
|
+
* ```
|
|
121
|
+
*
|
|
122
|
+
* @category Type Checking
|
|
123
|
+
* @see isObject - Used internally for type checking
|
|
124
|
+
*/
|
|
125
|
+
export const isEmptyObject = (value) => {
|
|
126
|
+
if (!isObject(value))
|
|
127
|
+
return false;
|
|
128
|
+
return Object.keys(value).length === 0;
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Traverses an object structure based on selector segments
|
|
132
|
+
*
|
|
133
|
+
* This advanced utility function traverses a data structure (object or array) based on
|
|
134
|
+
* a series of selector segments. It preserves the structure of the original data while
|
|
135
|
+
* navigating through it. The function supports various selector types including property access,
|
|
136
|
+
* array indexing, wildcards, slices, unions, filters, and recursive descent.
|
|
137
|
+
*
|
|
138
|
+
* @param current - The current object/array being traversed
|
|
139
|
+
* @param segments - An array of selector segments that define the traversal path
|
|
140
|
+
* @param depth - The current traversal depth (for recursion limits)
|
|
141
|
+
* @param maxDepth - The maximum depth to traverse (prevents infinite recursion)
|
|
142
|
+
* @returns The traversed structure or undefined if no match found
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```ts
|
|
146
|
+
* // Access nested property with a simple path
|
|
147
|
+
* const data = { users: [{ name: 'Alice', age: 30 }] };
|
|
148
|
+
* const segments = [
|
|
149
|
+
* { type: 'property', value: 'users' },
|
|
150
|
+
* { type: 'index', value: 0 },
|
|
151
|
+
* { type: 'property', value: 'name' }
|
|
152
|
+
* ];
|
|
153
|
+
* traverseStructure(data, segments, 0, 10); // { users: [{ name: 'Alice' }] }
|
|
154
|
+
* ```
|
|
155
|
+
*
|
|
156
|
+
* @internal
|
|
157
|
+
* @category Object Traversal
|
|
158
|
+
*/
|
|
159
|
+
export const traverseStructure = (current, segments, depth, maxDepth) => {
|
|
160
|
+
// console.log('traversing', current)
|
|
161
|
+
// console.log('traversing segments', segments)
|
|
162
|
+
if (depth > maxDepth)
|
|
163
|
+
return undefined;
|
|
164
|
+
if (segments.length === 0)
|
|
165
|
+
return current;
|
|
166
|
+
const segment = segments[0];
|
|
167
|
+
const remaining = segments.slice(1);
|
|
168
|
+
// Handle descendant selector
|
|
169
|
+
if (segment.type === 'descendant') {
|
|
170
|
+
// Collect all matching paths in structure
|
|
171
|
+
const result = traverseStructure(current, remaining, depth + 1, maxDepth);
|
|
172
|
+
if (result !== undefined) {
|
|
173
|
+
return result;
|
|
174
|
+
}
|
|
175
|
+
// Recursively search in all properties
|
|
176
|
+
if (current && typeof current === 'object') {
|
|
177
|
+
if (Array.isArray(current)) {
|
|
178
|
+
const arrResult = [];
|
|
179
|
+
for (let i = 0; i < current.length; i++) {
|
|
180
|
+
const itemResult = traverseStructure(current[i], segments, depth + 1, maxDepth);
|
|
181
|
+
if (itemResult !== undefined) {
|
|
182
|
+
arrResult[i] = itemResult;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return arrResult.length > 0 ? arrResult : undefined;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
const objResult = {};
|
|
189
|
+
for (const key in current) {
|
|
190
|
+
if (current.hasOwnProperty(key)) {
|
|
191
|
+
const itemResult = traverseStructure(current[key], segments, depth + 1, maxDepth);
|
|
192
|
+
if (itemResult !== undefined) {
|
|
193
|
+
objResult[key] = itemResult;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return Object.keys(objResult).length > 0 ? objResult : undefined;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
// console.log('is wildcard', segment)
|
|
203
|
+
// Handle different segment types
|
|
204
|
+
switch (segment.type) {
|
|
205
|
+
case 'property':
|
|
206
|
+
if (isObject(current) &&
|
|
207
|
+
segment.value &&
|
|
208
|
+
String(segment.value) in current) {
|
|
209
|
+
const next = current[String(segment.value)];
|
|
210
|
+
const result = traverseStructure(next, remaining, depth + 1, maxDepth);
|
|
211
|
+
if (result !== undefined) {
|
|
212
|
+
return { [String(segment.value)]: result };
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
break;
|
|
216
|
+
case 'index':
|
|
217
|
+
if (Array.isArray(current)) {
|
|
218
|
+
const index = segment.value;
|
|
219
|
+
if (index >= 0 && index < current.length) {
|
|
220
|
+
const result = traverseStructure(current[index], remaining, depth + 1, maxDepth);
|
|
221
|
+
// console.log('res', result)
|
|
222
|
+
if (result !== undefined) {
|
|
223
|
+
const arr = new Array(current.length).filter((a) => a !== undefined);
|
|
224
|
+
arr[index] = result;
|
|
225
|
+
return arr;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else if (current && typeof current === 'object') {
|
|
230
|
+
const key = String(segment.value);
|
|
231
|
+
if (key in current) {
|
|
232
|
+
const result = traverseStructure(current[key], remaining, depth + 1, maxDepth);
|
|
233
|
+
if (result !== undefined) {
|
|
234
|
+
return { [key]: result };
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
break;
|
|
239
|
+
case 'wildcard':
|
|
240
|
+
if (current && typeof current === 'object') {
|
|
241
|
+
if (Array.isArray(current)) {
|
|
242
|
+
const arrResult = [];
|
|
243
|
+
let hasResults = false;
|
|
244
|
+
for (let i = 0; i < current.length; i++) {
|
|
245
|
+
const result = traverseStructure(current[i], remaining, depth + 1, maxDepth);
|
|
246
|
+
if (result !== undefined) {
|
|
247
|
+
arrResult[i] = result;
|
|
248
|
+
hasResults = true;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return hasResults ? arrResult : undefined;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
const objResult = {};
|
|
255
|
+
let hasResults = false;
|
|
256
|
+
for (const key in current) {
|
|
257
|
+
if (current.hasOwnProperty(key)) {
|
|
258
|
+
const result = traverseStructure(current[key], remaining, depth + 1, maxDepth);
|
|
259
|
+
if (result !== undefined) {
|
|
260
|
+
objResult[key] = result;
|
|
261
|
+
hasResults = true;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return hasResults ? objResult : undefined;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
break;
|
|
269
|
+
case 'slice':
|
|
270
|
+
if (Array.isArray(current)) {
|
|
271
|
+
const [start, end] = segment.value;
|
|
272
|
+
const actualStart = Math.max(0, start);
|
|
273
|
+
const actualEnd = Math.min(current.length, end === Infinity ? current.length : end);
|
|
274
|
+
const arrResult = [];
|
|
275
|
+
let hasResults = false;
|
|
276
|
+
for (let i = actualStart; i < actualEnd; i++) {
|
|
277
|
+
const result = traverseStructure(current[i], remaining, depth + 1, maxDepth);
|
|
278
|
+
if (result !== undefined) {
|
|
279
|
+
arrResult[i] = result;
|
|
280
|
+
hasResults = true;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return hasResults ? arrResult : undefined;
|
|
284
|
+
}
|
|
285
|
+
break;
|
|
286
|
+
case 'union':
|
|
287
|
+
if (Array.isArray(current)) {
|
|
288
|
+
const indices = segment.value;
|
|
289
|
+
const arrResult = [];
|
|
290
|
+
let hasResults = false;
|
|
291
|
+
for (const index of indices) {
|
|
292
|
+
if (index >= 0 && index < current.length) {
|
|
293
|
+
const result = traverseStructure(current[index], remaining, depth + 1, maxDepth);
|
|
294
|
+
if (result !== undefined) {
|
|
295
|
+
arrResult[index] = result;
|
|
296
|
+
hasResults = true;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return hasResults ? arrResult : undefined;
|
|
301
|
+
}
|
|
302
|
+
break;
|
|
303
|
+
case 'filter':
|
|
304
|
+
if (Array.isArray(current)) {
|
|
305
|
+
const filterFn = segment.value;
|
|
306
|
+
const arrResult = [];
|
|
307
|
+
let hasResults = false;
|
|
308
|
+
for (let i = 0; i < current.length; i++) {
|
|
309
|
+
if (filterFn(current[i])) {
|
|
310
|
+
const result = traverseStructure(current[i], remaining, depth + 1, maxDepth);
|
|
311
|
+
if (result !== undefined) {
|
|
312
|
+
arrResult[i] = result;
|
|
313
|
+
hasResults = true;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return hasResults ? arrResult : undefined;
|
|
318
|
+
}
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
return undefined;
|
|
322
|
+
};
|
|
323
|
+
/**
|
|
324
|
+
* Converts a value to a JSON string with improved handling of special cases
|
|
325
|
+
*
|
|
326
|
+
* This function converts a JavaScript value to a JSON string, similar to `JSON.stringify`,
|
|
327
|
+
* but with improved handling of circular references and special character escaping.
|
|
328
|
+
*
|
|
329
|
+
* @param value - The value to convert to a JSON string
|
|
330
|
+
* @param space - The number of spaces to use for indentation (0 for no formatting)
|
|
331
|
+
* @returns The JSON string representation of the value or undefined for unsupported types
|
|
332
|
+
*
|
|
333
|
+
* @example
|
|
334
|
+
* ```ts
|
|
335
|
+
* // Basic usage
|
|
336
|
+
* toJSONString({ name: 'Alice', age: 30 });
|
|
337
|
+
* // '{"name":"Alice","age":30}'
|
|
338
|
+
*
|
|
339
|
+
* // With formatting
|
|
340
|
+
* toJSONString({ name: 'Alice', age: 30 }, 2);
|
|
341
|
+
* // '{
|
|
342
|
+
* // "name": "Alice",
|
|
343
|
+
* // "age": 30
|
|
344
|
+
* // }'
|
|
345
|
+
*
|
|
346
|
+
* // Handles circular references safely
|
|
347
|
+
* const circular = { self: null };
|
|
348
|
+
* circular.self = circular;
|
|
349
|
+
* toJSONString(circular); // throws TypeError (circular structure)
|
|
350
|
+
* ```
|
|
351
|
+
*
|
|
352
|
+
* @throws {TypeError} When encountering circular references
|
|
353
|
+
* @category Serialization
|
|
354
|
+
*/
|
|
355
|
+
export function toJSONString(value, space = 0) {
|
|
356
|
+
const seen = new WeakSet();
|
|
357
|
+
const gap = (n) => (space ? ' '.repeat(n) : '');
|
|
358
|
+
const nl = (n) => (space ? `\n${' '.repeat(n)}` : '');
|
|
359
|
+
const esc = (s) => s.replace(/[\u0000-\u001F"\\]/g, (c) => {
|
|
360
|
+
switch (c) {
|
|
361
|
+
case '"':
|
|
362
|
+
return '\\"';
|
|
363
|
+
case '\\':
|
|
364
|
+
return '\\\\';
|
|
365
|
+
case '\b':
|
|
366
|
+
return '\\b';
|
|
367
|
+
case '\f':
|
|
368
|
+
return '\\f';
|
|
369
|
+
case '\n':
|
|
370
|
+
return '\\n';
|
|
371
|
+
case '\r':
|
|
372
|
+
return '\\r';
|
|
373
|
+
case '\t':
|
|
374
|
+
return '\\t';
|
|
375
|
+
default:
|
|
376
|
+
const code = c.charCodeAt(0).toString(16).padStart(4, '0');
|
|
377
|
+
return `\\u${code}`;
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
const ser = (v, indent) => {
|
|
381
|
+
if (v === null)
|
|
382
|
+
return 'null';
|
|
383
|
+
const t = typeof v;
|
|
384
|
+
if (t === 'number')
|
|
385
|
+
return Number.isFinite(v) ? String(v) : 'null';
|
|
386
|
+
if (t === 'boolean')
|
|
387
|
+
return v ? 'true' : 'false';
|
|
388
|
+
if (t === 'string') {
|
|
389
|
+
// if(v.startsWith('icons.')){
|
|
390
|
+
// return v
|
|
391
|
+
// }else{
|
|
392
|
+
// return `"${esc(v)}"`
|
|
393
|
+
// }
|
|
394
|
+
}
|
|
395
|
+
if (t === 'bigint')
|
|
396
|
+
return `"${String(v)}"`;
|
|
397
|
+
if (t === 'function' || t === 'undefined' || t === 'symbol')
|
|
398
|
+
return undefined;
|
|
399
|
+
if (Array.isArray(v)) {
|
|
400
|
+
if (seen.has(v))
|
|
401
|
+
throw new TypeError('Converting circular structure to JSON');
|
|
402
|
+
seen.add(v);
|
|
403
|
+
const next = indent + space;
|
|
404
|
+
const parts = v.map((x) => {
|
|
405
|
+
const s = ser(x, next);
|
|
406
|
+
return s === undefined ? 'null' : s;
|
|
407
|
+
});
|
|
408
|
+
seen.delete(v);
|
|
409
|
+
if (!space)
|
|
410
|
+
return `[${parts.join(',')}]`;
|
|
411
|
+
return `[${nl(next)}${parts.join(`,${nl(next)}`)}${nl(indent)}]`;
|
|
412
|
+
}
|
|
413
|
+
if (t === 'object') {
|
|
414
|
+
if (seen.has(v))
|
|
415
|
+
throw new TypeError('Converting circular structure to JSON');
|
|
416
|
+
seen.add(v);
|
|
417
|
+
const keys = Object.keys(v);
|
|
418
|
+
const next = indent + space;
|
|
419
|
+
const parts = [];
|
|
420
|
+
// const valueOrEsc = (str: string)=>{
|
|
421
|
+
// if(str.startsWith('icon.')){
|
|
422
|
+
// return str
|
|
423
|
+
// }
|
|
424
|
+
// return
|
|
425
|
+
// }
|
|
426
|
+
for (const k of keys) {
|
|
427
|
+
const s = ser(v[k], next);
|
|
428
|
+
if (s !== undefined) {
|
|
429
|
+
if (!space)
|
|
430
|
+
parts.push(`"${esc(k)}":${s}`);
|
|
431
|
+
else
|
|
432
|
+
parts.push(`${gap(next)}"${esc(k)}": ${s}`);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
seen.delete(v);
|
|
436
|
+
if (!space)
|
|
437
|
+
return `{${parts.join(',')}}`;
|
|
438
|
+
return `{\n${parts.join(',\n')}\n${gap(indent)}}`;
|
|
439
|
+
}
|
|
440
|
+
return undefined;
|
|
441
|
+
};
|
|
442
|
+
const out = ser(value, 0);
|
|
443
|
+
return out === undefined ? undefined : out;
|
|
444
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
var A=e=>e==null||Array.isArray(e)||typeof e=="function"||e instanceof Date||e instanceof RegExp||e instanceof Map||e instanceof Set||e instanceof Error?!1:typeof e=="object";function S(e){if(typeof e!="object"||e===null)return!1;let f=Object.getPrototypeOf(e);return f===Object.prototype||f===null}function k(e){return typeof e=="function"&&/^class\s/.test(Function.prototype.toString.call(e))}var O=e=>A(e)?Object.keys(e).length===0:!1,c=(e,f,i,a)=>{if(i>a)return;if(f.length===0)return e;let u=f[0],l=f.slice(1);if(u.type==="descendant"){let s=c(e,l,i+1,a);if(s!==void 0)return s;if(e&&typeof e=="object")if(Array.isArray(e)){let t=[];for(let n=0;n<e.length;n++){let r=c(e[n],f,i+1,a);r!==void 0&&(t[n]=r)}return t.length>0?t:void 0}else{let t={};for(let n in e)if(e.hasOwnProperty(n)){let r=c(e[n],f,i+1,a);r!==void 0&&(t[n]=r)}return Object.keys(t).length>0?t:void 0}return}switch(u.type){case"property":if(A(e)&&u.value&&String(u.value)in e){let s=e[String(u.value)],t=c(s,l,i+1,a);if(t!==void 0)return{[String(u.value)]:t}}break;case"index":if(Array.isArray(e)){let s=u.value;if(s>=0&&s<e.length){let t=c(e[s],l,i+1,a);if(t!==void 0){let n=new Array(e.length).filter(r=>r!==void 0);return n[s]=t,n}}}else if(e&&typeof e=="object"){let s=String(u.value);if(s in e){let t=c(e[s],l,i+1,a);if(t!==void 0)return{[s]:t}}}break;case"wildcard":if(e&&typeof e=="object")if(Array.isArray(e)){let s=[],t=!1;for(let n=0;n<e.length;n++){let r=c(e[n],l,i+1,a);r!==void 0&&(s[n]=r,t=!0)}return t?s:void 0}else{let s={},t=!1;for(let n in e)if(e.hasOwnProperty(n)){let r=c(e[n],l,i+1,a);r!==void 0&&(s[n]=r,t=!0)}return t?s:void 0}break;case"slice":if(Array.isArray(e)){let[s,t]=u.value,n=Math.max(0,s),r=Math.min(e.length,t===1/0?e.length:t),o=[],b=!1;for(let d=n;d<r;d++){let y=c(e[d],l,i+1,a);y!==void 0&&(o[d]=y,b=!0)}return b?o:void 0}break;case"union":if(Array.isArray(e)){let s=u.value,t=[],n=!1;for(let r of s)if(r>=0&&r<e.length){let o=c(e[r],l,i+1,a);o!==void 0&&(t[r]=o,n=!0)}return n?t:void 0}break;case"filter":if(Array.isArray(e)){let s=u.value,t=[],n=!1;for(let r=0;r<e.length;r++)if(s(e[r])){let o=c(e[r],l,i+1,a);o!==void 0&&(t[r]=o,n=!0)}return n?t:void 0}break}};function R(e,f=0){let i=new WeakSet,a=n=>f?" ".repeat(n):"",u=n=>f?`
|
|
2
|
+
${" ".repeat(n)}`:"",l=n=>n.replace(/[\u0000-\u001F"\\]/g,r=>{switch(r){case'"':return'\\"';case"\\":return"\\\\";case"\b":return"\\b";case"\f":return"\\f";case`
|
|
3
|
+
`:return"\\n";case"\r":return"\\r";case" ":return"\\t";default:return`\\u${r.charCodeAt(0).toString(16).padStart(4,"0")}`}}),s=(n,r)=>{if(n===null)return"null";let o=typeof n;if(o==="number")return Number.isFinite(n)?String(n):"null";if(o==="boolean")return n?"true":"false";if(o==="bigint")return`"${String(n)}"`;if(!(o==="function"||o==="undefined"||o==="symbol")){if(Array.isArray(n)){if(i.has(n))throw new TypeError("Converting circular structure to JSON");i.add(n);let b=r+f,d=n.map(y=>{let g=s(y,b);return g===void 0?"null":g});return i.delete(n),f?`[${u(b)}${d.join(`,${u(b)}`)}${u(r)}]`:`[${d.join(",")}]`}if(o==="object"){if(i.has(n))throw new TypeError("Converting circular structure to JSON");i.add(n);let b=Object.keys(n),d=r+f,y=[];for(let g of b){let j=s(n[g],d);j!==void 0&&(f?y.push(`${a(d)}"${l(g)}": ${j}`):y.push(`"${l(g)}":${j}`))}return i.delete(n),f?`{
|
|
4
|
+
${y.join(`,
|
|
5
|
+
`)}
|
|
6
|
+
${a(r)}}`:`{${y.join(",")}}`}}},t=s(e,0);return t===void 0?void 0:t}export{k as isClass,O as isEmptyObject,A as isObject,S as isPlainObject,R as toJSONString,c as traverseStructure};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var q=Object.prototype.hasOwnProperty;var F=(r,e)=>{for(var n in e)i(r,n,{get:e[n],enumerable:!0})},K=(r,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of M(e))!q.call(r,o)&&o!==n&&i(r,o,{get:()=>e[o],enumerable:!(a=$(e,o))||a.enumerable});return r};var J=r=>K(i({},"__esModule",{value:!0}),r);var W={};F(W,{all:()=>l,any:()=>c,checkConditions:()=>A,compare:()=>b,compareBoolean:()=>R,countFalsy:()=>B,countTruthy:()=>p,createPipeline:()=>E,createToggle:()=>C,debounceBoolean:()=>j,default:()=>U,isBoolean:()=>w,isBooleanArray:()=>L,isBooleanLike:()=>f,isBooleanLikeArray:()=>O,memoizeBoolean:()=>S,nand:()=>g,none:()=>y,nor:()=>k,not:()=>h,randomBoolean:()=>N,safeToBoolean:()=>m,toBoolean:()=>u,validateBooleanConstraint:()=>T,xnor:()=>x,xor:()=>d});module.exports=J(W);var w=r=>r===!0||r===!1,f=r=>{if(r===!0||r===!1||r===0||r===1)return!0;if(typeof r=="string"){let e=r.toLowerCase().trim();return e==="true"||e==="false"||e==="0"||e==="1"}return!1},u=(r,e="strict",n=!1)=>{if(r===null&&e==="strict")throw new Error(`Cannot convert ${r} to boolean with strict strategy`);if(typeof r=="boolean")return r;switch(e){case"strict":return P(r);case"truthy":return!!r;case"falsy":return V(r);case"string":return z(r);case"number":return I(r);default:return!!r}},P=r=>{let e=typeof r=="string"?r.trim().toLowerCase():r;if(e===1||e==="1")return!0;if(e===0||e==="0")return!1;if(typeof e=="string"){let n=e.trim().toLowerCase();if(n==="true")return!0;if(n==="false")return!1;throw new Error(`Cannot convert string "${e}" to boolean with strict strategy`)}if(e===!0)return!0;if(e===!1)return!1;throw new Error(`Cannot convert ${typeof e} to boolean with strict strategy`)},V=r=>{if(typeof r=="string"){let e=r.trim().toLowerCase();return!(e===""||e==="0"||e==="false"||e==="null"||e==="undefined"||e==="nan")}return typeof r=="number"?!(r===0||isNaN(r)):!!r},z=r=>{if(typeof r!="string")throw new Error(`String strategy requires string input, got ${typeof r}`);let e=r.trim().toLowerCase();if(["true","yes","y","on","1","enabled","enable","active"].includes(e))return!0;if(["false","no","n","off","0","disabled","disable","inactive"].includes(e))return!1;if(!isNaN(Number(e)))return Number(e)!==0;throw new Error(`Cannot convert string "${r}" to boolean`)},I=r=>{if(typeof r!="number")throw new Error(`Number strategy requires number input, got ${typeof r}`);return isNaN(r)||r===0?!1:r===1?!0:r!==0},m=(r,e)=>{try{return u(r,"strict")}catch{return e!==void 0?e:!1}},l=r=>{if(!Array.isArray(r)||r.length===0)return!1;for(let e of r)if(!e)return!1;return!0},c=r=>{if(!Array.isArray(r)||r.length===0)return!1;for(let e of r)if(e)return!0;return!1},y=r=>!c(r),h=r=>!r,d=r=>{if(!Array.isArray(r))return!1;let e=0;for(let n of r)if(n&&(e++,e>1))return!1;return e===1},g=r=>!l(r),k=r=>y(r),x=r=>{if(!Array.isArray(r)||r.length===0)return!0;let e=!!r[0];for(let n=1;n<r.length;n++)if(!!r[n]!==e)return!1;return!0},p=r=>{if(!Array.isArray(r))return 0;let e=0;for(let n of r)n&&e++;return e},B=r=>Array.isArray(r)?r.length-p(r):0,C=(r=!1)=>{let e=r;return()=>(e=!e,e)},b=(r,e,n="===")=>{switch(n){case"==":return r==e;case"===":return r===e;case"!=":return r!=e;case"!==":return r!==e;case">":return r>e;case"<":return r<e;case">=":return r>=e;case"<=":return r<=e;default:throw new Error(`Unsupported operator: ${n}`)}},A=(r,e)=>{for(let n of e)if(!b(r,n.value,n.operator))return!1;return!0},T=(r,e)=>{switch(e){case"required":return r===!0;case"optional":return r===!0||r===!1;case"true":return r===!0;case"false":return r===!1;case"truthy":return!!r;case"falsy":return!r;default:return!1}},N=(r=.5)=>{if(r<0||r>1)throw new Error("Probability must be between 0 and 1");return r===0?!1:Math.random()<=r},j=(r,e)=>{let n,a;return(...o)=>(n&&clearTimeout(n),n=setTimeout(()=>{a=r(...o)},e),a)},S=r=>{let e=new WeakMap;return((...n)=>{let a=null,o="";for(let t=0;t<n.length;t++)if(n[t]!==null&&typeof n[t]=="object"){a=n[t];break}if(o=JSON.stringify(n),a){let t=e.get(a);if(t||(t=new Map,e.set(a,t)),t.has(o))return t.get(o);let s=r(...n);return t.set(o,s),s}else{let t=e.get(Object.prototype)||new Map;if(e.has(Object.prototype)||e.set(Object.prototype,t),t.has(o))return t.get(o);let s=r(...n);return t.set(o,s),s}})},E=r=>e=>{for(let n of r)if(!n(e))return!1;return!0},L=r=>Array.isArray(r)&&r.every(e=>e===!0||e===!1),O=r=>Array.isArray(r)&&r.every(e=>f(e)),R=(r,e)=>{let n=u(r),a=u(e);return n!==a},U={isBoolean:w,isBooleanLike:f,toBoolean:u,safeToBoolean:m,all:l,any:c,none:y,not:h,xor:d,nand:g,nor:k,xnor:x,countTruthy:p,countFalsy:B,createToggle:C,compare:b,checkConditions:A,validateBooleanConstraint:T,randomBoolean:N,debounceBoolean:j,memoizeBoolean:S,createPipeline:E,isBooleanArray:L,isBooleanLikeArray:O};
|