@bodil/monkey-business 0.1.4 → 0.2.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/index.d.ts +1 -4
- package/dist/index.js +186 -233
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +1 -1
- package/dist/index.test.js.map +1 -1
- package/package.json +14 -12
- package/src/index.test.ts +2 -2
- package/src/index.ts +222 -280
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Option } from "@bodil/
|
|
1
|
+
import { Option } from "@bodil/core";
|
|
2
2
|
import { type OrderFn } from "@bodil/core/order";
|
|
3
3
|
import type { Present } from "@bodil/core/types";
|
|
4
4
|
declare global {
|
|
@@ -15,9 +15,6 @@ declare global {
|
|
|
15
15
|
*/
|
|
16
16
|
mapEntries<A, B>(obj: Record<string, A>, fn: (entry: [key: string, value: A]) => [string, B]): Record<string, B>;
|
|
17
17
|
}
|
|
18
|
-
interface ErrorConstructor {
|
|
19
|
-
isError(value: unknown): value is Error;
|
|
20
|
-
}
|
|
21
18
|
interface Map<K, V> {
|
|
22
19
|
/**
|
|
23
20
|
* If `key` exists in the map, return the value associated with it.
|
package/dist/index.js
CHANGED
|
@@ -1,254 +1,207 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-this-alias */
|
|
2
2
|
// deno-lint-ignore-file no-this-alias
|
|
3
|
-
import { None, Option, Some } from "@bodil/
|
|
3
|
+
import { None, Option, Some } from "@bodil/core";
|
|
4
4
|
import { bisectHigh, bisectLow } from "@bodil/core/order";
|
|
5
5
|
import { assert } from "@bodil/core/assert";
|
|
6
|
+
import defineProperties from "define-properties";
|
|
6
7
|
// Object
|
|
7
|
-
Object
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (!value || (typeof value !== "object" && typeof value !== "function")) {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
if (value instanceof Error || value instanceof DOMException) {
|
|
19
|
-
return true;
|
|
20
|
-
}
|
|
21
|
-
try {
|
|
22
|
-
const clone = structuredClone(value);
|
|
23
|
-
return clone instanceof Error || clone instanceof DOMException;
|
|
24
|
-
}
|
|
25
|
-
catch (e) {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
};
|
|
8
|
+
defineProperties(Object, {
|
|
9
|
+
get(obj, key) {
|
|
10
|
+
return Object.hasOwn(obj, key) ? Some(obj[key]) : None;
|
|
11
|
+
},
|
|
12
|
+
mapEntries(obj, fn) {
|
|
13
|
+
return Object.fromEntries(Object.entries(obj).map(fn));
|
|
14
|
+
},
|
|
15
|
+
});
|
|
29
16
|
// Map
|
|
30
|
-
Map.prototype
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
17
|
+
defineProperties(Map.prototype, {
|
|
18
|
+
getOrSet(key, defaultValue) {
|
|
19
|
+
const result = this.get(key);
|
|
20
|
+
if (result !== undefined) {
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
const newValue = defaultValue();
|
|
24
|
+
this.set(key, newValue);
|
|
25
|
+
return newValue;
|
|
26
|
+
},
|
|
27
|
+
});
|
|
39
28
|
// Array
|
|
40
|
-
|
|
41
|
-
remove
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
if (index > this.length || index < 0) {
|
|
80
|
-
throw new RangeError(`Array.insert: index ${index} out of bounds`);
|
|
81
|
-
}
|
|
82
|
-
this.splice(index, 0, value);
|
|
83
|
-
return this;
|
|
84
|
-
};
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
insertOrdered: {
|
|
88
|
-
enumerable: false,
|
|
89
|
-
get() {
|
|
90
|
-
return function insertOrdered(value, cmp, duplicates = "high") {
|
|
91
|
-
return this.insert(value, (duplicates === "low" ? bisectLow : bisectHigh)(cmp, this, value));
|
|
92
|
-
};
|
|
93
|
-
},
|
|
94
|
-
},
|
|
95
|
-
present: {
|
|
96
|
-
enumerable: false,
|
|
97
|
-
get() {
|
|
98
|
-
return function present() {
|
|
99
|
-
return this.filter((value) => value !== undefined);
|
|
100
|
-
};
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
nonNullable: {
|
|
104
|
-
enumerable: false,
|
|
105
|
-
get() {
|
|
106
|
-
return function nonNullable() {
|
|
107
|
-
return this.filter((value) => value !== undefined);
|
|
108
|
-
};
|
|
109
|
-
},
|
|
110
|
-
},
|
|
111
|
-
get: {
|
|
112
|
-
enumerable: false,
|
|
113
|
-
get() {
|
|
114
|
-
return function get(index) {
|
|
115
|
-
return Object.get(this, index);
|
|
116
|
-
};
|
|
117
|
-
},
|
|
29
|
+
defineProperties(Array.prototype, {
|
|
30
|
+
remove(value) {
|
|
31
|
+
return this.removeIndex(this.indexOf(value));
|
|
32
|
+
},
|
|
33
|
+
removeFn(predicate) {
|
|
34
|
+
return this.removeIndex(this.findIndex(predicate));
|
|
35
|
+
},
|
|
36
|
+
removeIndex(index) {
|
|
37
|
+
if (!Number.isInteger(index)) {
|
|
38
|
+
throw new TypeError(`Array.removeIndex(): index ${index} is not an integer`);
|
|
39
|
+
}
|
|
40
|
+
if (index < 0 || index >= this.length) {
|
|
41
|
+
return None;
|
|
42
|
+
}
|
|
43
|
+
const removed = this.splice(index, 1).pop();
|
|
44
|
+
return Option.from(removed);
|
|
45
|
+
},
|
|
46
|
+
insert(value, index) {
|
|
47
|
+
if (!Number.isInteger(index)) {
|
|
48
|
+
throw new TypeError(`Array.insert(): index ${index} is not an integer`);
|
|
49
|
+
}
|
|
50
|
+
if (index > this.length || index < 0) {
|
|
51
|
+
throw new RangeError(`Array.insert: index ${index} out of bounds`);
|
|
52
|
+
}
|
|
53
|
+
this.splice(index, 0, value);
|
|
54
|
+
return this;
|
|
55
|
+
},
|
|
56
|
+
insertOrdered(value, cmp, duplicates = "high") {
|
|
57
|
+
return this.insert(value, (duplicates === "low" ? bisectLow : bisectHigh)(cmp, this, value));
|
|
58
|
+
},
|
|
59
|
+
present() {
|
|
60
|
+
return this.filter((value) => value !== undefined);
|
|
61
|
+
},
|
|
62
|
+
nonNullable() {
|
|
63
|
+
return this.filter((value) => value !== undefined);
|
|
64
|
+
},
|
|
65
|
+
get(index) {
|
|
66
|
+
return Object.get(this, index);
|
|
118
67
|
},
|
|
119
68
|
});
|
|
120
69
|
// Iterator
|
|
121
|
-
Iterator
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
70
|
+
defineProperties(Iterator, {
|
|
71
|
+
empty() {
|
|
72
|
+
return Iterator.from([]);
|
|
73
|
+
},
|
|
74
|
+
concat(...inputs) {
|
|
75
|
+
if (inputs.length === 0) {
|
|
76
|
+
return Iterator.empty();
|
|
77
|
+
}
|
|
78
|
+
let iter = inputs[0][Symbol.iterator]();
|
|
79
|
+
let index = 0;
|
|
80
|
+
let done = false;
|
|
81
|
+
return Iterator.from({
|
|
82
|
+
next() {
|
|
83
|
+
if (!done) {
|
|
84
|
+
let result = iter.next();
|
|
85
|
+
while (result.done === true && index < inputs.length - 1) {
|
|
86
|
+
iter = inputs[++index][Symbol.iterator]();
|
|
87
|
+
result = iter.next();
|
|
88
|
+
}
|
|
89
|
+
if (result.done !== true) {
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
138
92
|
}
|
|
139
|
-
|
|
140
|
-
|
|
93
|
+
done = true;
|
|
94
|
+
return { done: true, value: undefined };
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
defineProperties(Iterator.prototype, {
|
|
100
|
+
takeOne() {
|
|
101
|
+
const result = this.next();
|
|
102
|
+
return result.done === true ? None : Some(result.value);
|
|
103
|
+
},
|
|
104
|
+
takeWhile(predicate) {
|
|
105
|
+
const iter = this;
|
|
106
|
+
let index = 0;
|
|
107
|
+
let done = false;
|
|
108
|
+
return Iterator.from({
|
|
109
|
+
next() {
|
|
110
|
+
if (!done) {
|
|
111
|
+
const result = iter.next();
|
|
112
|
+
if (result.done === true) {
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
if (predicate(result.value, index++)) {
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
141
118
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
let done = false;
|
|
156
|
-
return Iterator.from({
|
|
157
|
-
next() {
|
|
158
|
-
if (!done) {
|
|
159
|
-
const result = iter.next();
|
|
160
|
-
if (result.done === true) {
|
|
161
|
-
return result;
|
|
119
|
+
done = true;
|
|
120
|
+
return { done: true, value: undefined };
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
},
|
|
124
|
+
skipWhile(predicate) {
|
|
125
|
+
const iter = this;
|
|
126
|
+
let index = 0;
|
|
127
|
+
let skipped = false;
|
|
128
|
+
return Iterator.from({
|
|
129
|
+
next() {
|
|
130
|
+
if (skipped) {
|
|
131
|
+
return iter.next();
|
|
162
132
|
}
|
|
163
|
-
|
|
164
|
-
|
|
133
|
+
while (true) {
|
|
134
|
+
const result = iter.next();
|
|
135
|
+
if (result.done === true) {
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
if (!predicate(result.value, index++)) {
|
|
139
|
+
skipped = true;
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
165
142
|
}
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
},
|
|
146
|
+
findMap(mapFn) {
|
|
147
|
+
let index = 0;
|
|
148
|
+
while (true) {
|
|
149
|
+
const result = this.next();
|
|
150
|
+
if (result.done === true) {
|
|
151
|
+
return undefined;
|
|
166
152
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
});
|
|
171
|
-
};
|
|
172
|
-
Iterator.prototype.skipWhile = function skipWhile(predicate) {
|
|
173
|
-
const iter = this;
|
|
174
|
-
let index = 0;
|
|
175
|
-
let skipped = false;
|
|
176
|
-
return Iterator.from({
|
|
177
|
-
next() {
|
|
178
|
-
if (skipped) {
|
|
179
|
-
return iter.next();
|
|
153
|
+
const mapped = mapFn(result.value, index++);
|
|
154
|
+
if (mapped !== undefined) {
|
|
155
|
+
return mapped;
|
|
180
156
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
partition(size) {
|
|
160
|
+
const iter = this;
|
|
161
|
+
let done = false;
|
|
162
|
+
return Iterator.from({
|
|
163
|
+
next() {
|
|
164
|
+
if (done) {
|
|
165
|
+
return { done: true, value: undefined };
|
|
185
166
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
167
|
+
const part = [];
|
|
168
|
+
while (true) {
|
|
169
|
+
const result = iter.next();
|
|
170
|
+
if (result.done === true) {
|
|
171
|
+
done = true;
|
|
172
|
+
return part.length > 0
|
|
173
|
+
? { done: false, value: part }
|
|
174
|
+
: { done: true, value: undefined };
|
|
175
|
+
}
|
|
176
|
+
part.push(result.value);
|
|
177
|
+
if (part.length === size) {
|
|
178
|
+
return { done: false, value: part };
|
|
179
|
+
}
|
|
189
180
|
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const
|
|
198
|
-
if (
|
|
199
|
-
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
},
|
|
184
|
+
frontBiasedPartition(size) {
|
|
185
|
+
const input = this.toArray();
|
|
186
|
+
let inputPos = 0;
|
|
187
|
+
const firstLength = input.length % size;
|
|
188
|
+
const output = [];
|
|
189
|
+
if (firstLength > 0) {
|
|
190
|
+
output.push(input.slice(0, firstLength));
|
|
191
|
+
inputPos = firstLength;
|
|
200
192
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
193
|
+
while (inputPos < input.length) {
|
|
194
|
+
output.push(input.slice(inputPos, inputPos + size));
|
|
195
|
+
inputPos += size;
|
|
204
196
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
const part = [];
|
|
216
|
-
while (true) {
|
|
217
|
-
const result = iter.next();
|
|
218
|
-
if (result.done === true) {
|
|
219
|
-
done = true;
|
|
220
|
-
return part.length > 0
|
|
221
|
-
? { done: false, value: part }
|
|
222
|
-
: { done: true, value: undefined };
|
|
223
|
-
}
|
|
224
|
-
part.push(result.value);
|
|
225
|
-
if (part.length === size) {
|
|
226
|
-
return { done: false, value: part };
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
},
|
|
230
|
-
});
|
|
231
|
-
};
|
|
232
|
-
Iterator.prototype.frontBiasedPartition = function frontBiasedPartition(size) {
|
|
233
|
-
const input = this.toArray();
|
|
234
|
-
let inputPos = 0;
|
|
235
|
-
const firstLength = input.length % size;
|
|
236
|
-
const output = [];
|
|
237
|
-
if (firstLength > 0) {
|
|
238
|
-
output.push(input.slice(0, firstLength));
|
|
239
|
-
inputPos = firstLength;
|
|
240
|
-
}
|
|
241
|
-
while (inputPos < input.length) {
|
|
242
|
-
output.push(input.slice(inputPos, inputPos + size));
|
|
243
|
-
inputPos += size;
|
|
244
|
-
}
|
|
245
|
-
assert(inputPos === input.length);
|
|
246
|
-
return output;
|
|
247
|
-
};
|
|
248
|
-
Iterator.prototype.present = function present() {
|
|
249
|
-
return Iterator.from(this.filter((item) => item !== undefined));
|
|
250
|
-
};
|
|
251
|
-
Iterator.prototype.nonNullable = function nonNullable() {
|
|
252
|
-
return Iterator.from(this.filter((item) => item !== undefined && item !== null));
|
|
253
|
-
};
|
|
197
|
+
assert(inputPos === input.length);
|
|
198
|
+
return output;
|
|
199
|
+
},
|
|
200
|
+
present() {
|
|
201
|
+
return Iterator.from(this.filter((item) => item !== undefined));
|
|
202
|
+
},
|
|
203
|
+
nonNullable() {
|
|
204
|
+
return Iterator.from(this.filter((item) => item !== undefined && item !== null));
|
|
205
|
+
},
|
|
206
|
+
});
|
|
254
207
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sCAAsC;AAEtC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.test.js
CHANGED
package/dist/index.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bodil/monkey-business",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Let's give JS core types a polish",
|
|
5
|
+
"homepage": "https://codeberg.org/bodil/monkey-business",
|
|
5
6
|
"repository": {
|
|
6
7
|
"type": "git",
|
|
7
|
-
"url": "git
|
|
8
|
+
"url": "ssh://git@codeberg.org/bodil/monkey-business.git"
|
|
8
9
|
},
|
|
9
10
|
"license": "EUPL-1.2+",
|
|
10
11
|
"module": "dist/index.js",
|
|
@@ -25,21 +26,22 @@
|
|
|
25
26
|
"access": "public"
|
|
26
27
|
},
|
|
27
28
|
"dependencies": {
|
|
28
|
-
"@bodil/core": "^0.
|
|
29
|
-
"@
|
|
29
|
+
"@bodil/core": "^0.2.2",
|
|
30
|
+
"@types/define-properties": "^1.1.5",
|
|
31
|
+
"define-properties": "^1.2.1"
|
|
30
32
|
},
|
|
31
33
|
"devDependencies": {
|
|
32
34
|
"@bodil/opt-vitest": "^1.0.0",
|
|
33
35
|
"@eslint/eslintrc": "^3.3.1",
|
|
34
|
-
"@eslint/js": "^9.
|
|
35
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
36
|
-
"@typescript-eslint/parser": "^8.
|
|
37
|
-
"eslint": "^9.
|
|
38
|
-
"eslint-config-prettier": "^10.1.
|
|
39
|
-
"eslint-plugin-jsdoc": "^
|
|
36
|
+
"@eslint/js": "^9.33.0",
|
|
37
|
+
"@typescript-eslint/eslint-plugin": "^8.39.1",
|
|
38
|
+
"@typescript-eslint/parser": "^8.39.1",
|
|
39
|
+
"eslint": "^9.33.0",
|
|
40
|
+
"eslint-config-prettier": "^10.1.8",
|
|
41
|
+
"eslint-plugin-jsdoc": "^53.0.0",
|
|
40
42
|
"globals": "^15.15.0",
|
|
41
|
-
"typescript": "^5.
|
|
42
|
-
"vitest": "^3.
|
|
43
|
+
"typescript": "^5.9.2",
|
|
44
|
+
"vitest": "^3.2.4"
|
|
43
45
|
},
|
|
44
46
|
"scripts": {
|
|
45
47
|
"build": "tsc",
|
package/src/index.test.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-this-alias */
|
|
2
2
|
// deno-lint-ignore-file no-this-alias
|
|
3
3
|
|
|
4
|
-
import { None, Option, Some } from "@bodil/
|
|
4
|
+
import { None, Option, Some } from "@bodil/core";
|
|
5
5
|
import { type OrderFn, bisectHigh, bisectLow } from "@bodil/core/order";
|
|
6
6
|
import type { Present } from "@bodil/core/types";
|
|
7
7
|
import { assert } from "@bodil/core/assert";
|
|
8
|
+
import defineProperties from "define-properties";
|
|
8
9
|
|
|
9
10
|
declare global {
|
|
10
11
|
interface ObjectConstructor {
|
|
@@ -25,10 +26,6 @@ declare global {
|
|
|
25
26
|
): Record<string, B>;
|
|
26
27
|
}
|
|
27
28
|
|
|
28
|
-
interface ErrorConstructor {
|
|
29
|
-
isError(value: unknown): value is Error;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
29
|
interface Map<K, V> {
|
|
33
30
|
/**
|
|
34
31
|
* If `key` exists in the map, return the value associated with it.
|
|
@@ -164,308 +161,253 @@ declare global {
|
|
|
164
161
|
|
|
165
162
|
// Object
|
|
166
163
|
|
|
167
|
-
Object
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
Object.mapEntries = function mapEntries<A, B>(
|
|
172
|
-
obj: Record<string, A>,
|
|
173
|
-
fn: (entry: [key: string, value: A]) => [string, B]
|
|
174
|
-
): Record<string, B> {
|
|
175
|
-
return Object.fromEntries(Object.entries(obj).map(fn));
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
// Error
|
|
179
|
-
|
|
180
|
-
Error.isError ??= function isError(value: unknown): value is Error {
|
|
181
|
-
if (!value || (typeof value !== "object" && typeof value !== "function")) {
|
|
182
|
-
return false;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if (value instanceof Error || value instanceof DOMException) {
|
|
186
|
-
return true;
|
|
187
|
-
}
|
|
164
|
+
defineProperties(Object, {
|
|
165
|
+
get<O extends object, K extends keyof O>(obj: O, key: K): Option<O[K]> {
|
|
166
|
+
return Object.hasOwn(obj, key) ? Some(obj[key]) : None;
|
|
167
|
+
},
|
|
188
168
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
return
|
|
194
|
-
}
|
|
195
|
-
};
|
|
169
|
+
mapEntries<A, B>(
|
|
170
|
+
obj: Record<string, A>,
|
|
171
|
+
fn: (entry: [key: string, value: A]) => [string, B]
|
|
172
|
+
): Record<string, B> {
|
|
173
|
+
return Object.fromEntries(Object.entries(obj).map(fn));
|
|
174
|
+
},
|
|
175
|
+
});
|
|
196
176
|
|
|
197
177
|
// Map
|
|
198
178
|
|
|
199
|
-
Map.prototype
|
|
200
|
-
this: Map<K, NonNullable<V>>,
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
return newValue;
|
|
211
|
-
};
|
|
179
|
+
defineProperties(Map.prototype, {
|
|
180
|
+
getOrSet<K, V>(this: Map<K, NonNullable<V>>, key: K, defaultValue: () => NonNullable<V>): V {
|
|
181
|
+
const result = this.get(key);
|
|
182
|
+
if (result !== undefined) {
|
|
183
|
+
return result;
|
|
184
|
+
}
|
|
185
|
+
const newValue = defaultValue();
|
|
186
|
+
this.set(key, newValue);
|
|
187
|
+
return newValue;
|
|
188
|
+
},
|
|
189
|
+
});
|
|
212
190
|
|
|
213
191
|
// Array
|
|
214
192
|
|
|
215
|
-
|
|
216
|
-
remove: {
|
|
217
|
-
|
|
218
|
-
get() {
|
|
219
|
-
return function remove<T>(this: Array<T>, value: T): Option<T> {
|
|
220
|
-
return this.removeIndex(this.indexOf(value));
|
|
221
|
-
};
|
|
222
|
-
},
|
|
193
|
+
defineProperties(Array.prototype, {
|
|
194
|
+
remove<T>(this: Array<T>, value: T): Option<T> {
|
|
195
|
+
return this.removeIndex(this.indexOf(value));
|
|
223
196
|
},
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
): Option<T> {
|
|
231
|
-
return this.removeIndex(this.findIndex(predicate as () => boolean));
|
|
232
|
-
};
|
|
233
|
-
},
|
|
197
|
+
|
|
198
|
+
removeFn<T>(
|
|
199
|
+
this: Array<T>,
|
|
200
|
+
predicate: (value: T, index: number, obj: Array<T>) => boolean
|
|
201
|
+
): Option<T> {
|
|
202
|
+
return this.removeIndex(this.findIndex(predicate as () => boolean));
|
|
234
203
|
},
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
const removed = this.splice(index, 1).pop();
|
|
246
|
-
return Option.from(removed);
|
|
247
|
-
};
|
|
248
|
-
},
|
|
204
|
+
|
|
205
|
+
removeIndex<T>(this: Array<T>, index: number): Option<T> {
|
|
206
|
+
if (!Number.isInteger(index)) {
|
|
207
|
+
throw new TypeError(`Array.removeIndex(): index ${index} is not an integer`);
|
|
208
|
+
}
|
|
209
|
+
if (index < 0 || index >= this.length) {
|
|
210
|
+
return None;
|
|
211
|
+
}
|
|
212
|
+
const removed = this.splice(index, 1).pop();
|
|
213
|
+
return Option.from(removed);
|
|
249
214
|
},
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
this.splice(index, 0, value);
|
|
261
|
-
return this;
|
|
262
|
-
};
|
|
263
|
-
},
|
|
215
|
+
|
|
216
|
+
insert<T>(this: Array<T>, value: T, index: number): Array<T> {
|
|
217
|
+
if (!Number.isInteger(index)) {
|
|
218
|
+
throw new TypeError(`Array.insert(): index ${index} is not an integer`);
|
|
219
|
+
}
|
|
220
|
+
if (index > this.length || index < 0) {
|
|
221
|
+
throw new RangeError(`Array.insert: index ${index} out of bounds`);
|
|
222
|
+
}
|
|
223
|
+
this.splice(index, 0, value);
|
|
224
|
+
return this;
|
|
264
225
|
},
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
(duplicates === "low" ? bisectLow : bisectHigh)(cmp, this, value)
|
|
277
|
-
);
|
|
278
|
-
};
|
|
279
|
-
},
|
|
226
|
+
|
|
227
|
+
insertOrdered<T>(
|
|
228
|
+
this: Array<T>,
|
|
229
|
+
value: T,
|
|
230
|
+
cmp: OrderFn<T>,
|
|
231
|
+
duplicates: "low" | "high" = "high"
|
|
232
|
+
): Array<T> {
|
|
233
|
+
return this.insert(
|
|
234
|
+
value,
|
|
235
|
+
(duplicates === "low" ? bisectLow : bisectHigh)(cmp, this, value)
|
|
236
|
+
);
|
|
280
237
|
},
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
return function present<T>(this: Array<T>): Array<Present<T>> {
|
|
285
|
-
return this.filter((value: T): value is Present<T> => value !== undefined);
|
|
286
|
-
};
|
|
287
|
-
},
|
|
238
|
+
|
|
239
|
+
present<T>(this: Array<T>): Array<Present<T>> {
|
|
240
|
+
return this.filter((value: T): value is Present<T> => value !== undefined);
|
|
288
241
|
},
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
return function nonNullable<T>(this: Array<T>): Array<NonNullable<T>> {
|
|
293
|
-
return this.filter((value: T): value is NonNullable<T> => value !== undefined);
|
|
294
|
-
};
|
|
295
|
-
},
|
|
242
|
+
|
|
243
|
+
nonNullable<T>(this: Array<T>): Array<NonNullable<T>> {
|
|
244
|
+
return this.filter((value: T): value is NonNullable<T> => value !== undefined);
|
|
296
245
|
},
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
get()
|
|
300
|
-
return function get<T>(this: Array<T>, index: number): Option<T> {
|
|
301
|
-
return Object.get(this, index);
|
|
302
|
-
};
|
|
303
|
-
},
|
|
246
|
+
|
|
247
|
+
get<T>(this: Array<T>, index: number): Option<T> {
|
|
248
|
+
return Object.get(this, index);
|
|
304
249
|
},
|
|
305
250
|
});
|
|
306
251
|
|
|
307
252
|
// Iterator
|
|
308
253
|
|
|
309
|
-
Iterator
|
|
310
|
-
|
|
311
|
-
|
|
254
|
+
defineProperties(Iterator, {
|
|
255
|
+
empty<T>(): IteratorObject<T> {
|
|
256
|
+
return Iterator.from([]);
|
|
257
|
+
},
|
|
312
258
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
259
|
+
concat<T>(...inputs: Array<Iterable<T>>): IteratorObject<T> {
|
|
260
|
+
if (inputs.length === 0) {
|
|
261
|
+
return Iterator.empty();
|
|
262
|
+
}
|
|
263
|
+
let iter: Iterator<T> = inputs[0][Symbol.iterator]();
|
|
264
|
+
let index = 0;
|
|
265
|
+
let done = false;
|
|
266
|
+
return Iterator.from({
|
|
267
|
+
next(): IteratorResult<T, undefined> {
|
|
268
|
+
if (!done) {
|
|
269
|
+
let result = iter.next();
|
|
270
|
+
while (result.done === true && index < inputs.length - 1) {
|
|
271
|
+
iter = inputs[++index][Symbol.iterator]();
|
|
272
|
+
result = iter.next();
|
|
273
|
+
}
|
|
274
|
+
if (result.done !== true) {
|
|
275
|
+
return result;
|
|
276
|
+
}
|
|
327
277
|
}
|
|
328
|
-
|
|
329
|
-
|
|
278
|
+
done = true;
|
|
279
|
+
return { done: true, value: undefined };
|
|
280
|
+
},
|
|
281
|
+
});
|
|
282
|
+
},
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
defineProperties(Iterator.prototype, {
|
|
286
|
+
takeOne<T>(this: Iterator<T>): Option<T> {
|
|
287
|
+
const result = this.next();
|
|
288
|
+
return result.done === true ? None : Some(result.value);
|
|
289
|
+
},
|
|
290
|
+
|
|
291
|
+
takeWhile<T>(
|
|
292
|
+
this: IteratorObject<T, undefined>,
|
|
293
|
+
predicate: (value: T, index: number) => boolean
|
|
294
|
+
): IteratorObject<T, undefined> {
|
|
295
|
+
const iter = this;
|
|
296
|
+
let index = 0;
|
|
297
|
+
let done = false;
|
|
298
|
+
return Iterator.from<T>({
|
|
299
|
+
next(): IteratorResult<T, undefined> {
|
|
300
|
+
if (!done) {
|
|
301
|
+
const result = iter.next();
|
|
302
|
+
if (result.done === true) {
|
|
303
|
+
return result;
|
|
304
|
+
}
|
|
305
|
+
if (predicate(result.value, index++)) {
|
|
306
|
+
return result;
|
|
307
|
+
}
|
|
330
308
|
}
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
)
|
|
347
|
-
|
|
348
|
-
let index = 0;
|
|
349
|
-
let done = false;
|
|
350
|
-
return Iterator.from<T>({
|
|
351
|
-
next(): IteratorResult<T, undefined> {
|
|
352
|
-
if (!done) {
|
|
353
|
-
const result = iter.next();
|
|
354
|
-
if (result.done === true) {
|
|
355
|
-
return result;
|
|
309
|
+
done = true;
|
|
310
|
+
return { done: true, value: undefined };
|
|
311
|
+
},
|
|
312
|
+
});
|
|
313
|
+
},
|
|
314
|
+
|
|
315
|
+
skipWhile<T>(
|
|
316
|
+
this: IteratorObject<T, undefined>,
|
|
317
|
+
predicate: (value: T, index: number) => boolean
|
|
318
|
+
): IteratorObject<T, undefined> {
|
|
319
|
+
const iter = this;
|
|
320
|
+
let index = 0;
|
|
321
|
+
let skipped = false;
|
|
322
|
+
return Iterator.from<T>({
|
|
323
|
+
next(): IteratorResult<T, undefined> {
|
|
324
|
+
if (skipped) {
|
|
325
|
+
return iter.next();
|
|
356
326
|
}
|
|
357
|
-
|
|
358
|
-
|
|
327
|
+
while (true) {
|
|
328
|
+
const result = iter.next();
|
|
329
|
+
if (result.done === true) {
|
|
330
|
+
return result;
|
|
331
|
+
}
|
|
332
|
+
if (!predicate(result.value, index++)) {
|
|
333
|
+
skipped = true;
|
|
334
|
+
return result;
|
|
335
|
+
}
|
|
359
336
|
}
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
},
|
|
340
|
+
|
|
341
|
+
findMap<T, U>(
|
|
342
|
+
this: IteratorObject<T, undefined>,
|
|
343
|
+
mapFn: (value: T, index: number) => NonNullable<U> | undefined
|
|
344
|
+
): NonNullable<U> | undefined {
|
|
345
|
+
let index = 0;
|
|
346
|
+
while (true) {
|
|
347
|
+
const result = this.next();
|
|
348
|
+
if (result.done === true) {
|
|
349
|
+
return undefined;
|
|
360
350
|
}
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
});
|
|
365
|
-
};
|
|
366
|
-
|
|
367
|
-
Iterator.prototype.skipWhile = function skipWhile<T>(
|
|
368
|
-
this: IteratorObject<T, undefined>,
|
|
369
|
-
predicate: (value: T, index: number) => boolean
|
|
370
|
-
): IteratorObject<T, undefined> {
|
|
371
|
-
const iter = this;
|
|
372
|
-
let index = 0;
|
|
373
|
-
let skipped = false;
|
|
374
|
-
return Iterator.from<T>({
|
|
375
|
-
next(): IteratorResult<T, undefined> {
|
|
376
|
-
if (skipped) {
|
|
377
|
-
return iter.next();
|
|
351
|
+
const mapped = mapFn(result.value, index++);
|
|
352
|
+
if (mapped !== undefined) {
|
|
353
|
+
return mapped;
|
|
378
354
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
|
|
358
|
+
partition<T>(
|
|
359
|
+
this: IteratorObject<T, undefined>,
|
|
360
|
+
size: number
|
|
361
|
+
): IteratorObject<Array<T>, undefined> {
|
|
362
|
+
const iter = this;
|
|
363
|
+
let done = false;
|
|
364
|
+
return Iterator.from<Array<T>>({
|
|
365
|
+
next(): IteratorResult<Array<T>, undefined> {
|
|
366
|
+
if (done) {
|
|
367
|
+
return { done: true, value: undefined };
|
|
383
368
|
}
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
369
|
+
const part = [];
|
|
370
|
+
while (true) {
|
|
371
|
+
const result = iter.next();
|
|
372
|
+
if (result.done === true) {
|
|
373
|
+
done = true;
|
|
374
|
+
return part.length > 0
|
|
375
|
+
? { done: false, value: part }
|
|
376
|
+
: { done: true, value: undefined };
|
|
377
|
+
}
|
|
378
|
+
part.push(result.value);
|
|
379
|
+
if (part.length === size) {
|
|
380
|
+
return { done: false, value: part };
|
|
381
|
+
}
|
|
387
382
|
}
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
if (result.done === true) {
|
|
401
|
-
return undefined;
|
|
383
|
+
},
|
|
384
|
+
});
|
|
385
|
+
},
|
|
386
|
+
|
|
387
|
+
frontBiasedPartition<T>(this: IteratorObject<T, undefined>, size: number): Array<Array<T>> {
|
|
388
|
+
const input = this.toArray();
|
|
389
|
+
let inputPos = 0;
|
|
390
|
+
const firstLength = input.length % size;
|
|
391
|
+
const output: Array<Array<T>> = [];
|
|
392
|
+
if (firstLength > 0) {
|
|
393
|
+
output.push(input.slice(0, firstLength));
|
|
394
|
+
inputPos = firstLength;
|
|
402
395
|
}
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
396
|
+
while (inputPos < input.length) {
|
|
397
|
+
output.push(input.slice(inputPos, inputPos + size));
|
|
398
|
+
inputPos += size;
|
|
406
399
|
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
this: IteratorObject<T, undefined>,
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
const part = [];
|
|
422
|
-
while (true) {
|
|
423
|
-
const result = iter.next();
|
|
424
|
-
if (result.done === true) {
|
|
425
|
-
done = true;
|
|
426
|
-
return part.length > 0
|
|
427
|
-
? { done: false, value: part }
|
|
428
|
-
: { done: true, value: undefined };
|
|
429
|
-
}
|
|
430
|
-
part.push(result.value);
|
|
431
|
-
if (part.length === size) {
|
|
432
|
-
return { done: false, value: part };
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
},
|
|
436
|
-
});
|
|
437
|
-
};
|
|
438
|
-
|
|
439
|
-
Iterator.prototype.frontBiasedPartition = function frontBiasedPartition<T>(
|
|
440
|
-
this: IteratorObject<T, undefined>,
|
|
441
|
-
size: number
|
|
442
|
-
): Array<Array<T>> {
|
|
443
|
-
const input = this.toArray();
|
|
444
|
-
let inputPos = 0;
|
|
445
|
-
const firstLength = input.length % size;
|
|
446
|
-
const output: Array<Array<T>> = [];
|
|
447
|
-
if (firstLength > 0) {
|
|
448
|
-
output.push(input.slice(0, firstLength));
|
|
449
|
-
inputPos = firstLength;
|
|
450
|
-
}
|
|
451
|
-
while (inputPos < input.length) {
|
|
452
|
-
output.push(input.slice(inputPos, inputPos + size));
|
|
453
|
-
inputPos += size;
|
|
454
|
-
}
|
|
455
|
-
assert(inputPos === input.length);
|
|
456
|
-
return output;
|
|
457
|
-
};
|
|
458
|
-
|
|
459
|
-
Iterator.prototype.present = function present<T>(
|
|
460
|
-
this: IteratorObject<T, undefined>
|
|
461
|
-
): IteratorObject<Present<T>, undefined> {
|
|
462
|
-
return Iterator.from(this.filter((item): item is Present<T> => item !== undefined));
|
|
463
|
-
};
|
|
464
|
-
|
|
465
|
-
Iterator.prototype.nonNullable = function nonNullable<T>(
|
|
466
|
-
this: IteratorObject<T, undefined>
|
|
467
|
-
): IteratorObject<NonNullable<T>, undefined> {
|
|
468
|
-
return Iterator.from(
|
|
469
|
-
this.filter((item): item is NonNullable<T> => item !== undefined && item !== null)
|
|
470
|
-
);
|
|
471
|
-
};
|
|
400
|
+
assert(inputPos === input.length);
|
|
401
|
+
return output;
|
|
402
|
+
},
|
|
403
|
+
|
|
404
|
+
present<T>(this: IteratorObject<T, undefined>): IteratorObject<Present<T>, undefined> {
|
|
405
|
+
return Iterator.from(this.filter((item): item is Present<T> => item !== undefined));
|
|
406
|
+
},
|
|
407
|
+
|
|
408
|
+
nonNullable<T>(this: IteratorObject<T, undefined>): IteratorObject<NonNullable<T>, undefined> {
|
|
409
|
+
return Iterator.from(
|
|
410
|
+
this.filter((item): item is NonNullable<T> => item !== undefined && item !== null)
|
|
411
|
+
);
|
|
412
|
+
},
|
|
413
|
+
});
|