informa 3.1.1 → 4.0.1
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/README.md +171 -184
- package/dist/EnumerableWeakSet.d.ts +10 -0
- package/dist/EnumerableWeakSet.d.ts.map +1 -0
- package/dist/EnumerableWeakSet.js +44 -0
- package/dist/EnumerableWeakSet.js.map +1 -0
- package/dist/high.d.ts +2 -3
- package/dist/high.d.ts.map +1 -1
- package/dist/high.js +1 -2
- package/dist/high.js.map +1 -1
- package/dist/internals.d.ts +3 -0
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +4 -1
- package/dist/internals.js.map +1 -1
- package/dist/low.d.ts +16 -0
- package/dist/low.d.ts.map +1 -1
- package/dist/low.js +150 -0
- package/dist/low.js.map +1 -1
- package/dist/quirks/array.d.ts +4 -3
- package/dist/quirks/array.d.ts.map +1 -1
- package/dist/quirks/array.js +163 -75
- package/dist/quirks/array.js.map +1 -1
- package/dist/quirks/basestatified.d.ts +24 -2
- package/dist/quirks/basestatified.d.ts.map +1 -1
- package/dist/quirks/basestatified.js +240 -91
- package/dist/quirks/basestatified.js.map +1 -1
- package/dist/quirks/basestatified.test.d.ts +9 -0
- package/dist/quirks/basestatified.test.d.ts.map +1 -0
- package/dist/quirks/basestatified.test.js +291 -0
- package/dist/quirks/basestatified.test.js.map +1 -0
- package/dist/quirks/map.d.ts.map +1 -1
- package/dist/quirks/map.js +1 -0
- package/dist/quirks/map.js.map +1 -1
- package/dist/quirks/set.d.ts.map +1 -1
- package/dist/quirks/set.js +1 -0
- package/dist/quirks/set.js.map +1 -1
- package/dist/test.js +2 -6
- package/dist/test.js.map +1 -1
- package/package.json +2 -1
- package/src/EnumerableWeakSet.ts +46 -0
- package/src/high.ts +2 -3
- package/src/internals.ts +4 -0
- package/src/low.ts +120 -1
- package/src/quirks/array.ts +168 -92
- package/src/quirks/basestatified.test.ts +375 -0
- package/src/quirks/basestatified.ts +289 -125
- package/src/quirks/map.ts +3 -1
- package/src/quirks/set.ts +3 -1
- package/src/test.ts +13 -15
package/src/quirks/array.ts
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
import { exitProxySymbol, getMetadataOf, setMetadataOf, statifySealKey, type Statify } from "../internals.js";
|
|
2
|
-
import { StateMetadata, type ExitProxyValue, type StatifiableProp } from "../low.js";
|
|
3
|
-
import { makeStatified } from "./basestatified.js";
|
|
1
|
+
import { exitProxySymbol, getGlobalStateMode, getMetadataOf, isStatifiedArrayKey, setMetadataOf, statifySealKey, type Statify } from "../internals.js";
|
|
2
|
+
import { StateMetadata, type ExitProxyValue, type StatifiableProp, type StatifiableObj } from "../low.js";
|
|
4
3
|
|
|
5
|
-
const
|
|
4
|
+
const isMutatingSym = Symbol();
|
|
6
5
|
|
|
7
6
|
export class StatifiedArray<T extends StatifiableProp>
|
|
8
|
-
extends
|
|
7
|
+
extends Array<T> implements Statify<T[]>
|
|
9
8
|
{
|
|
9
|
+
[isMutatingSym]?: boolean;
|
|
10
10
|
[statifySealKey]: true = true;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
get [exitProxySymbol](): ExitProxyValue {
|
|
12
|
+
if (getGlobalStateMode() === "extract-proxy-path") {
|
|
13
|
+
return { path: [], stateRoot: this as Statify<StatifiableObj> };
|
|
14
|
+
}
|
|
15
|
+
throw new Error("exitProxySymbol is not available in normal mode");
|
|
16
|
+
}
|
|
14
17
|
|
|
15
18
|
constructor(arrayLength: number);
|
|
16
19
|
constructor(...items: T[]);
|
|
@@ -23,56 +26,97 @@ export class StatifiedArray<T extends StatifiableProp>
|
|
|
23
26
|
super(arrayLengthOrFirstItem, ...rest);
|
|
24
27
|
}
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
const proxy = new Proxy(this, {
|
|
30
|
+
set(target, prop, newVal, recv) {
|
|
31
|
+
const had = Reflect.has(target, prop);
|
|
32
|
+
const result = Reflect.set(target, prop, newVal, recv);
|
|
33
|
+
if (!target[isMutatingSym] && result && typeof prop !== "symbol" && Number.isInteger(Number(prop))) {
|
|
34
|
+
const metadata = getMetadataOf(recv as Statify<T[]>);
|
|
35
|
+
if (had) {
|
|
36
|
+
metadata.emit("replaceElement", newVal, Number(prop));
|
|
37
|
+
} else {
|
|
38
|
+
metadata.emit("spliceInElement", newVal, Number(prop));
|
|
39
|
+
metadata.emit("lengthChanged");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
setMetadataOf(proxy as Statify<T[]>, new StateMetadata());
|
|
47
|
+
return proxy;
|
|
27
48
|
}
|
|
28
49
|
|
|
29
50
|
push(...items: T[]): number {
|
|
30
|
-
|
|
51
|
+
this[isMutatingSym] = true;
|
|
52
|
+
try {
|
|
53
|
+
const metadata = getMetadataOf(this as unknown as Statify<T[]>);
|
|
54
|
+
const result = super.push(...items);
|
|
31
55
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
56
|
+
for (let i = result - items.length; i < result; i += 1) {
|
|
57
|
+
metadata.emit("spliceInElement", this[i]!, i);
|
|
58
|
+
}
|
|
35
59
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
60
|
+
if (items.length > 0) {
|
|
61
|
+
metadata.emit("lengthChanged");
|
|
62
|
+
}
|
|
39
63
|
|
|
40
|
-
|
|
64
|
+
return result;
|
|
65
|
+
} finally {
|
|
66
|
+
this[isMutatingSym] = false;
|
|
67
|
+
}
|
|
41
68
|
}
|
|
42
69
|
unshift(...items: T[]): number {
|
|
43
|
-
|
|
70
|
+
this[isMutatingSym] = true;
|
|
71
|
+
try {
|
|
72
|
+
const metadata = getMetadataOf(this as unknown as Statify<T[]>);
|
|
73
|
+
const result = super.unshift(...items);
|
|
44
74
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
75
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
76
|
+
metadata.emit("spliceInElement", this[i]!, i);
|
|
77
|
+
}
|
|
48
78
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
79
|
+
if (items.length > 0) {
|
|
80
|
+
metadata.emit("lengthChanged");
|
|
81
|
+
}
|
|
52
82
|
|
|
53
|
-
|
|
83
|
+
return result;
|
|
84
|
+
} finally {
|
|
85
|
+
this[isMutatingSym] = false;
|
|
86
|
+
}
|
|
54
87
|
}
|
|
55
88
|
|
|
56
89
|
pop(): T | undefined {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
90
|
+
this[isMutatingSym] = true;
|
|
91
|
+
try {
|
|
92
|
+
if (this.length > 0) {
|
|
93
|
+
const metadata = getMetadataOf(this as unknown as Statify<T[]>);
|
|
94
|
+
const result = super.pop();
|
|
95
|
+
|
|
96
|
+
metadata.emit("spliceOutElement", result, super.length);
|
|
97
|
+
metadata.emit("lengthChanged");
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
return undefined;
|
|
101
|
+
} finally {
|
|
102
|
+
this[isMutatingSym] = false;
|
|
63
103
|
}
|
|
64
|
-
|
|
65
|
-
return undefined;
|
|
66
104
|
}
|
|
67
105
|
shift(): T | undefined {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
106
|
+
this[isMutatingSym] = true;
|
|
107
|
+
try {
|
|
108
|
+
if (this.length > 0) {
|
|
109
|
+
const metadata = getMetadataOf(this as unknown as Statify<T[]>);
|
|
110
|
+
const result = super.shift();
|
|
111
|
+
|
|
112
|
+
metadata.emit("spliceOutElement", result, 0);
|
|
113
|
+
metadata.emit("lengthChanged");
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
return undefined;
|
|
117
|
+
} finally {
|
|
118
|
+
this[isMutatingSym] = false;
|
|
74
119
|
}
|
|
75
|
-
return undefined;
|
|
76
120
|
}
|
|
77
121
|
|
|
78
122
|
#normalizeSplice(start: number, deleteCount?: number, ...items: T[]): [number, number, T[]] {
|
|
@@ -99,29 +143,35 @@ export class StatifiedArray<T extends StatifiableProp>
|
|
|
99
143
|
return [start, deleteCount, items];
|
|
100
144
|
}
|
|
101
145
|
splice(start: number, deleteCount?: number, ...items: T[]): T[] {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
146
|
+
this[isMutatingSym] = true;
|
|
147
|
+
try {
|
|
148
|
+
const metadata = getMetadataOf(this as unknown as Statify<T[]>);
|
|
149
|
+
const [startNormed, deleteCountNormed, itemsNormed] = arguments.length === 1
|
|
150
|
+
? this.#normalizeSplice(start)
|
|
151
|
+
: this.#normalizeSplice(start, deleteCount, ...items);
|
|
105
152
|
|
|
106
|
-
|
|
153
|
+
const result = super.splice(startNormed, deleteCountNormed, ...itemsNormed);
|
|
107
154
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
155
|
+
for (let i = startNormed + deleteCountNormed; i > startNormed + itemsNormed.length; i -= 1) {
|
|
156
|
+
metadata.emit("spliceOutElement", result[i - startNormed], i);
|
|
157
|
+
}
|
|
111
158
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
159
|
+
for (let i = startNormed; i < startNormed + Math.min(itemsNormed.length, deleteCountNormed); i += 1) {
|
|
160
|
+
metadata.emit("replaceElement", this[i], i);
|
|
161
|
+
}
|
|
115
162
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
163
|
+
for (let i = startNormed + deleteCountNormed; i < startNormed + itemsNormed.length; i += 1) {
|
|
164
|
+
metadata.emit("spliceInElement", this[i], i);
|
|
165
|
+
}
|
|
119
166
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
167
|
+
if (itemsNormed.length !== deleteCountNormed) {
|
|
168
|
+
metadata.emit("lengthChanged");
|
|
169
|
+
}
|
|
123
170
|
|
|
124
|
-
|
|
171
|
+
return result;
|
|
172
|
+
} finally {
|
|
173
|
+
this[isMutatingSym] = false;
|
|
174
|
+
}
|
|
125
175
|
}
|
|
126
176
|
|
|
127
177
|
#normalizeStartEnd(start?: number, end?: number): [number, number] {
|
|
@@ -156,56 +206,82 @@ export class StatifiedArray<T extends StatifiableProp>
|
|
|
156
206
|
return [start, end];
|
|
157
207
|
}
|
|
158
208
|
fill(value: T, start?: number, end?: number): this {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
209
|
+
this[isMutatingSym] = true;
|
|
210
|
+
try {
|
|
211
|
+
const metadata = getMetadataOf(this as unknown as Statify<T[]>);
|
|
212
|
+
const [startNormed, endNormed] = arguments.length === 1
|
|
213
|
+
? this.#normalizeStartEnd()
|
|
214
|
+
: arguments.length === 2
|
|
215
|
+
? this.#normalizeStartEnd(start)
|
|
216
|
+
: this.#normalizeStartEnd(start, end);
|
|
217
|
+
|
|
218
|
+
const result = super.fill(value, startNormed, endNormed);
|
|
219
|
+
|
|
220
|
+
for (let i = startNormed; i < endNormed; i += 1) {
|
|
221
|
+
metadata.emit("replaceElement", this[i], i);
|
|
222
|
+
}
|
|
166
223
|
|
|
167
|
-
|
|
168
|
-
|
|
224
|
+
return result;
|
|
225
|
+
} finally {
|
|
226
|
+
this[isMutatingSym] = false;
|
|
169
227
|
}
|
|
170
|
-
|
|
171
|
-
return result;
|
|
172
228
|
}
|
|
173
229
|
copyWithin(target: number, start: number, end?: number): this {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
230
|
+
this[isMutatingSym] = true;
|
|
231
|
+
try {
|
|
232
|
+
const metadata = getMetadataOf(this as unknown as Statify<T[]>);
|
|
233
|
+
const [startNormed, endNormed] = arguments.length === 2
|
|
234
|
+
? this.#normalizeStartEnd(start)
|
|
235
|
+
: this.#normalizeStartEnd(start, end);
|
|
177
236
|
|
|
178
|
-
|
|
237
|
+
const result = super.copyWithin(target, startNormed, endNormed);
|
|
179
238
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
239
|
+
for (let i = target; i < target + endNormed - startNormed; i += 1) {
|
|
240
|
+
metadata.emit("replaceElement", this[i], i);
|
|
241
|
+
}
|
|
183
242
|
|
|
184
|
-
|
|
243
|
+
return result;
|
|
244
|
+
} finally {
|
|
245
|
+
this[isMutatingSym] = false;
|
|
246
|
+
}
|
|
185
247
|
}
|
|
186
248
|
|
|
187
249
|
reverse(): T[] {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
250
|
+
this[isMutatingSym] = true;
|
|
251
|
+
try {
|
|
252
|
+
const metadata = getMetadataOf(this as unknown as Statify<T[]>);
|
|
253
|
+
const result = super.reverse();
|
|
254
|
+
|
|
255
|
+
const parity = this.length % 2;
|
|
256
|
+
const half = (this.length / 2) | 0;
|
|
257
|
+
for (let i = 0; i < this.length - parity; i += 1) {
|
|
258
|
+
if (i > half) {
|
|
259
|
+
metadata.emit("replaceElement", this[i], i + parity);
|
|
260
|
+
} else {
|
|
261
|
+
metadata.emit("replaceElement", this[i], i);
|
|
262
|
+
}
|
|
197
263
|
}
|
|
198
|
-
}
|
|
199
264
|
|
|
200
|
-
|
|
265
|
+
return result;
|
|
266
|
+
} finally {
|
|
267
|
+
this[isMutatingSym] = false;
|
|
268
|
+
}
|
|
201
269
|
}
|
|
202
270
|
sort(compareFn?: ((a: T, b: T) => number) | undefined): this {
|
|
203
|
-
|
|
271
|
+
this[isMutatingSym] = true;
|
|
272
|
+
try {
|
|
273
|
+
const metadata = getMetadataOf(this as unknown as Statify<T[]>);
|
|
274
|
+
const result = super.sort(compareFn);
|
|
204
275
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
276
|
+
for (let i = 0; i < this.length; i += 1) {
|
|
277
|
+
metadata.emit("replaceElement", this[i], i);
|
|
278
|
+
}
|
|
208
279
|
|
|
209
|
-
|
|
280
|
+
return result;
|
|
281
|
+
} finally {
|
|
282
|
+
this[isMutatingSym] = false;
|
|
283
|
+
}
|
|
210
284
|
}
|
|
211
285
|
}
|
|
286
|
+
|
|
287
|
+
(StatifiedArray.prototype as any)[isStatifiedArrayKey] = true;
|