@ls-stack/utils 3.42.0 → 3.44.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/dist/cache.cjs +24 -2
- package/dist/cache.d.cts +8 -1
- package/dist/cache.d.ts +8 -1
- package/dist/cache.js +10 -208
- package/dist/chunk-OIAGLRII.js +236 -0
- package/dist/concurrentCalls.js +3 -3
- package/dist/matchPath.cjs +148 -0
- package/dist/matchPath.d.cts +53 -0
- package/dist/matchPath.d.ts +53 -0
- package/dist/matchPath.js +107 -0
- package/dist/partialEqual.cjs +289 -0
- package/dist/partialEqual.d.cts +71 -0
- package/dist/partialEqual.d.ts +71 -0
- package/dist/partialEqual.js +201 -0
- package/dist/typingFnUtils.d.cts +7 -0
- package/dist/typingFnUtils.d.ts +7 -0
- package/package.json +9 -1
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import {
|
|
2
|
+
deepEqual
|
|
3
|
+
} from "./chunk-JQFUKJU5.js";
|
|
4
|
+
|
|
5
|
+
// src/partialEqual.ts
|
|
6
|
+
var has = Object.prototype.hasOwnProperty;
|
|
7
|
+
var Comparisons = class {
|
|
8
|
+
type;
|
|
9
|
+
constructor(type) {
|
|
10
|
+
this.type = type;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
var match = {
|
|
14
|
+
hasType: {
|
|
15
|
+
string: new Comparisons(["hasType", "string"]),
|
|
16
|
+
number: new Comparisons(["hasType", "number"]),
|
|
17
|
+
boolean: new Comparisons(["hasType", "boolean"]),
|
|
18
|
+
object: new Comparisons(["hasType", "object"]),
|
|
19
|
+
array: new Comparisons(["hasType", "array"]),
|
|
20
|
+
function: new Comparisons(["hasType", "function"])
|
|
21
|
+
},
|
|
22
|
+
isInstanceOf: (constructor) => new Comparisons(["isInstanceOf", constructor]),
|
|
23
|
+
str: {
|
|
24
|
+
contains: (substring) => new Comparisons(["strContains", substring]),
|
|
25
|
+
startsWith: (substring) => new Comparisons(["strStartsWith", substring]),
|
|
26
|
+
endsWith: (substring) => new Comparisons(["strEndsWith", substring]),
|
|
27
|
+
matchesRegex: (regex) => new Comparisons(["strMatchesRegex", regex])
|
|
28
|
+
},
|
|
29
|
+
num: {
|
|
30
|
+
isGreaterThan: (value) => new Comparisons(["numIsGreaterThan", value]),
|
|
31
|
+
isGreaterThanOrEqual: (value) => new Comparisons(["numIsGreaterThanOrEqual", value]),
|
|
32
|
+
isLessThan: (value) => new Comparisons(["numIsLessThan", value]),
|
|
33
|
+
isLessThanOrEqual: (value) => new Comparisons(["numIsLessThanOrEqual", value]),
|
|
34
|
+
isInRange: (value) => new Comparisons(["numIsInRange", value])
|
|
35
|
+
},
|
|
36
|
+
jsonString: {
|
|
37
|
+
hasPartial: (value) => new Comparisons(["jsonStringHasPartial", value])
|
|
38
|
+
},
|
|
39
|
+
equal: (value) => new Comparisons(["deepEqual", value]),
|
|
40
|
+
partialEqual: (value) => new Comparisons(["partialEqual", value]),
|
|
41
|
+
custom: (isEqual) => new Comparisons(["custom", isEqual]),
|
|
42
|
+
not: {
|
|
43
|
+
hasType: {
|
|
44
|
+
string: new Comparisons(["not", ["hasType", "string"]]),
|
|
45
|
+
number: new Comparisons(["not", ["hasType", "number"]]),
|
|
46
|
+
boolean: new Comparisons(["not", ["hasType", "boolean"]]),
|
|
47
|
+
object: new Comparisons(["not", ["hasType", "object"]]),
|
|
48
|
+
array: new Comparisons(["not", ["hasType", "array"]]),
|
|
49
|
+
function: new Comparisons(["not", ["hasType", "function"]])
|
|
50
|
+
},
|
|
51
|
+
isInstanceOf: (constructor) => new Comparisons(["not", ["isInstanceOf", constructor]]),
|
|
52
|
+
str: {
|
|
53
|
+
contains: (substring) => new Comparisons(["not", ["strContains", substring]]),
|
|
54
|
+
startsWith: (substring) => new Comparisons(["not", ["strStartsWith", substring]]),
|
|
55
|
+
endsWith: (substring) => new Comparisons(["not", ["strEndsWith", substring]]),
|
|
56
|
+
matchesRegex: (regex) => new Comparisons(["not", ["strMatchesRegex", regex]])
|
|
57
|
+
},
|
|
58
|
+
num: {
|
|
59
|
+
isGreaterThan: (value) => new Comparisons(["not", ["numIsGreaterThan", value]]),
|
|
60
|
+
isGreaterThanOrEqual: (value) => new Comparisons(["not", ["numIsGreaterThanOrEqual", value]]),
|
|
61
|
+
isLessThan: (value) => new Comparisons(["not", ["numIsLessThan", value]]),
|
|
62
|
+
isLessThanOrEqual: (value) => new Comparisons(["not", ["numIsLessThanOrEqual", value]]),
|
|
63
|
+
isInRange: (value) => new Comparisons(["not", ["numIsInRange", value]])
|
|
64
|
+
},
|
|
65
|
+
jsonString: {
|
|
66
|
+
hasPartial: (value) => new Comparisons(["not", ["jsonStringHasPartial", value]])
|
|
67
|
+
},
|
|
68
|
+
equal: (value) => new Comparisons(["not", ["deepEqual", value]]),
|
|
69
|
+
partialEqual: (value) => new Comparisons(["not", ["partialEqual", value]]),
|
|
70
|
+
custom: (value) => new Comparisons(["not", ["custom", value]])
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
function find(iter, tar) {
|
|
74
|
+
for (const key of iter.keys()) {
|
|
75
|
+
if (partialEqual(key, tar)) return key;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function executeComparison(target, comparison) {
|
|
79
|
+
const [type, value] = comparison;
|
|
80
|
+
switch (type) {
|
|
81
|
+
case "hasType":
|
|
82
|
+
switch (value) {
|
|
83
|
+
case "string":
|
|
84
|
+
return typeof target === "string";
|
|
85
|
+
case "number":
|
|
86
|
+
return typeof target === "number";
|
|
87
|
+
case "boolean":
|
|
88
|
+
return typeof target === "boolean";
|
|
89
|
+
case "function":
|
|
90
|
+
return typeof target === "function";
|
|
91
|
+
case "array":
|
|
92
|
+
return Array.isArray(target);
|
|
93
|
+
case "object":
|
|
94
|
+
return typeof target === "object" && target !== null && !Array.isArray(target);
|
|
95
|
+
default:
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
case "isInstanceOf":
|
|
99
|
+
return target instanceof value;
|
|
100
|
+
case "strStartsWith":
|
|
101
|
+
return typeof target === "string" && target.startsWith(value);
|
|
102
|
+
case "strEndsWith":
|
|
103
|
+
return typeof target === "string" && target.endsWith(value);
|
|
104
|
+
case "strContains":
|
|
105
|
+
return typeof target === "string" && target.includes(value);
|
|
106
|
+
case "strMatchesRegex":
|
|
107
|
+
return typeof target === "string" && value.test(target);
|
|
108
|
+
case "numIsGreaterThan":
|
|
109
|
+
return typeof target === "number" && target > value;
|
|
110
|
+
case "numIsGreaterThanOrEqual":
|
|
111
|
+
return typeof target === "number" && target >= value;
|
|
112
|
+
case "numIsLessThan":
|
|
113
|
+
return typeof target === "number" && target < value;
|
|
114
|
+
case "numIsLessThanOrEqual":
|
|
115
|
+
return typeof target === "number" && target <= value;
|
|
116
|
+
case "numIsInRange":
|
|
117
|
+
return typeof target === "number" && target >= value[0] && target <= value[1];
|
|
118
|
+
case "jsonStringHasPartial":
|
|
119
|
+
if (typeof target !== "string") return false;
|
|
120
|
+
try {
|
|
121
|
+
const parsed = JSON.parse(target);
|
|
122
|
+
return partialEqual(parsed, value);
|
|
123
|
+
} catch {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
case "deepEqual":
|
|
127
|
+
return deepEqual(target, value);
|
|
128
|
+
case "partialEqual":
|
|
129
|
+
return partialEqual(target, value);
|
|
130
|
+
case "custom":
|
|
131
|
+
return value(target);
|
|
132
|
+
case "not":
|
|
133
|
+
return !executeComparison(target, value);
|
|
134
|
+
default:
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function partialEqual(target, sub) {
|
|
139
|
+
if (sub === target) return true;
|
|
140
|
+
if (sub instanceof Comparisons) {
|
|
141
|
+
return executeComparison(target, sub.type);
|
|
142
|
+
}
|
|
143
|
+
if (sub && target && sub.constructor === target.constructor) {
|
|
144
|
+
const ctor = sub.constructor;
|
|
145
|
+
if (ctor === Date) {
|
|
146
|
+
return sub.getTime() === target.getTime();
|
|
147
|
+
}
|
|
148
|
+
if (ctor === RegExp) {
|
|
149
|
+
return sub.toString() === target.toString();
|
|
150
|
+
}
|
|
151
|
+
if (ctor === Array) {
|
|
152
|
+
if (sub.length > target.length) return false;
|
|
153
|
+
for (let i = 0; i < sub.length; i++) {
|
|
154
|
+
if (!partialEqual(target[i], sub[i])) return false;
|
|
155
|
+
}
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
if (ctor === Set) {
|
|
159
|
+
if (sub.size > target.size) return false;
|
|
160
|
+
for (const value of sub) {
|
|
161
|
+
let found = false;
|
|
162
|
+
if (value && typeof value === "object") {
|
|
163
|
+
found = !!find(target, value);
|
|
164
|
+
} else {
|
|
165
|
+
found = target.has(value);
|
|
166
|
+
}
|
|
167
|
+
if (!found) return false;
|
|
168
|
+
}
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
if (ctor === Map) {
|
|
172
|
+
if (sub.size > target.size) return false;
|
|
173
|
+
for (const [key, value] of sub) {
|
|
174
|
+
let targetKey = key;
|
|
175
|
+
if (key && typeof key === "object") {
|
|
176
|
+
targetKey = find(target, key);
|
|
177
|
+
if (!targetKey) return false;
|
|
178
|
+
}
|
|
179
|
+
if (!target.has(targetKey) || !partialEqual(target.get(targetKey), value)) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
if (!ctor || typeof sub === "object") {
|
|
186
|
+
for (const key in sub) {
|
|
187
|
+
if (has.call(sub, key)) {
|
|
188
|
+
if (!has.call(target, key) || !partialEqual(target[key], sub[key])) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return sub !== sub && target !== target;
|
|
197
|
+
}
|
|
198
|
+
export {
|
|
199
|
+
match,
|
|
200
|
+
partialEqual
|
|
201
|
+
};
|
package/dist/typingFnUtils.d.cts
CHANGED
|
@@ -86,6 +86,13 @@ type NonEmptyArray<T> = [T, ...T[]];
|
|
|
86
86
|
* @returns True if the array is non-empty, false otherwise
|
|
87
87
|
*/
|
|
88
88
|
declare function isNonEmptyArray<T>(array: T[]): array is NonEmptyArray<T>;
|
|
89
|
+
/**
|
|
90
|
+
* Type guard to check if an object has a specific key and narrow its type.
|
|
91
|
+
*
|
|
92
|
+
* @param obj - The object to check
|
|
93
|
+
* @param key - The key to check for
|
|
94
|
+
* @returns True if the object has the key, false otherwise
|
|
95
|
+
*/
|
|
89
96
|
declare function objectHasKey<T extends string>(obj: object, key: T): obj is object & {
|
|
90
97
|
[K in T]: unknown;
|
|
91
98
|
};
|
package/dist/typingFnUtils.d.ts
CHANGED
|
@@ -86,6 +86,13 @@ type NonEmptyArray<T> = [T, ...T[]];
|
|
|
86
86
|
* @returns True if the array is non-empty, false otherwise
|
|
87
87
|
*/
|
|
88
88
|
declare function isNonEmptyArray<T>(array: T[]): array is NonEmptyArray<T>;
|
|
89
|
+
/**
|
|
90
|
+
* Type guard to check if an object has a specific key and narrow its type.
|
|
91
|
+
*
|
|
92
|
+
* @param obj - The object to check
|
|
93
|
+
* @param key - The key to check for
|
|
94
|
+
* @returns True if the object has the key, false otherwise
|
|
95
|
+
*/
|
|
89
96
|
declare function objectHasKey<T extends string>(obj: object, key: T): obj is object & {
|
|
90
97
|
[K in T]: unknown;
|
|
91
98
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ls-stack/utils",
|
|
3
3
|
"description": "Universal TypeScript utilities for browser and Node.js",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.44.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
@@ -116,6 +116,10 @@
|
|
|
116
116
|
"import": "./dist/levenshtein.js",
|
|
117
117
|
"require": "./dist/levenshtein.cjs"
|
|
118
118
|
},
|
|
119
|
+
"./matchPath": {
|
|
120
|
+
"import": "./dist/matchPath.js",
|
|
121
|
+
"require": "./dist/matchPath.cjs"
|
|
122
|
+
},
|
|
119
123
|
"./mathUtils": {
|
|
120
124
|
"import": "./dist/mathUtils.js",
|
|
121
125
|
"require": "./dist/mathUtils.cjs"
|
|
@@ -132,6 +136,10 @@
|
|
|
132
136
|
"import": "./dist/parallelAsyncCalls.js",
|
|
133
137
|
"require": "./dist/parallelAsyncCalls.cjs"
|
|
134
138
|
},
|
|
139
|
+
"./partialEqual": {
|
|
140
|
+
"import": "./dist/partialEqual.js",
|
|
141
|
+
"require": "./dist/partialEqual.cjs"
|
|
142
|
+
},
|
|
135
143
|
"./promiseUtils": {
|
|
136
144
|
"import": "./dist/promiseUtils.js",
|
|
137
145
|
"require": "./dist/promiseUtils.cjs"
|