@esportsplus/reactivity 0.31.1 → 0.31.2
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/build/reactive/array.js +2 -1
- package/package.json +6 -6
- package/src/reactive/array.ts +3 -1
- package/tests/array.ts +31 -7
- package/tests/tsconfig.json +1 -2
package/build/reactive/array.js
CHANGED
|
@@ -28,8 +28,9 @@ class ReactiveArray extends Array {
|
|
|
28
28
|
if (prev === value) {
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
31
|
+
let length = this.length;
|
|
31
32
|
this[i] = value;
|
|
32
|
-
if (i >=
|
|
33
|
+
if (i >= length) {
|
|
33
34
|
write(this._length, i + 1);
|
|
34
35
|
}
|
|
35
36
|
this.dispatch('set', { index: i, item: value });
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"author": "ICJR",
|
|
3
3
|
"dependencies": {
|
|
4
|
-
"@esportsplus/utilities": "^0.27.
|
|
4
|
+
"@esportsplus/utilities": "^0.27.3"
|
|
5
5
|
},
|
|
6
6
|
"devDependencies": {
|
|
7
|
-
"@esportsplus/typescript": "^0.29.
|
|
8
|
-
"@types/node": "^25.0
|
|
9
|
-
"vite": "^
|
|
10
|
-
"vitest": "^4.
|
|
7
|
+
"@esportsplus/typescript": "^0.29.1",
|
|
8
|
+
"@types/node": "^25.6.0",
|
|
9
|
+
"vite": "^8.0.8",
|
|
10
|
+
"vitest": "^4.1.4"
|
|
11
11
|
},
|
|
12
12
|
"exports": {
|
|
13
13
|
".": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
},
|
|
37
37
|
"type": "module",
|
|
38
38
|
"types": "build/index.d.ts",
|
|
39
|
-
"version": "0.31.
|
|
39
|
+
"version": "0.31.2",
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build": "tsc",
|
|
42
42
|
"build:test": "pnpm build && vite build --config test/vite.config.ts",
|
package/src/reactive/array.ts
CHANGED
package/tests/array.ts
CHANGED
|
@@ -91,14 +91,12 @@ describe('ReactiveArray', () => {
|
|
|
91
91
|
arr.$set(5, 99);
|
|
92
92
|
await Promise.resolve();
|
|
93
93
|
|
|
94
|
-
// Native .length is 6, but reactive _length check runs after
|
|
95
|
-
// this[i] = value so i >= this.length is false — _length not updated
|
|
96
94
|
expect(arr.length).toBe(6);
|
|
97
95
|
expect(arr[5]).toBe(99);
|
|
98
|
-
expect(lengths).toEqual([3]);
|
|
96
|
+
expect(lengths).toEqual([3, 6]);
|
|
99
97
|
});
|
|
100
98
|
|
|
101
|
-
it('$set creates sparse array
|
|
99
|
+
it('$set creates sparse array and updates reactive $length', async () => {
|
|
102
100
|
let arr = new ReactiveArray<number>(),
|
|
103
101
|
lengths: number[] = [];
|
|
104
102
|
|
|
@@ -117,15 +115,41 @@ describe('ReactiveArray', () => {
|
|
|
117
115
|
// Native length becomes 101 via Array behavior
|
|
118
116
|
expect(arr.length).toBe(101);
|
|
119
117
|
|
|
120
|
-
// Reactive $length
|
|
121
|
-
|
|
122
|
-
expect(lengths).toEqual([0]);
|
|
118
|
+
// Reactive $length updated correctly
|
|
119
|
+
expect(lengths).toEqual([0, 101]);
|
|
123
120
|
|
|
124
121
|
// Intermediate indices are empty (sparse)
|
|
125
122
|
expect(arr[0]).toBe(undefined);
|
|
126
123
|
expect(arr[50]).toBe(undefined);
|
|
127
124
|
expect(arr[99]).toBe(undefined);
|
|
128
125
|
});
|
|
126
|
+
|
|
127
|
+
it('$set with negative index does not affect length', () => {
|
|
128
|
+
let arr = new ReactiveArray(1, 2, 3);
|
|
129
|
+
|
|
130
|
+
arr.$set(-1 as any, 42);
|
|
131
|
+
|
|
132
|
+
expect(arr.length).toBe(3);
|
|
133
|
+
expect(arr.$length).toBe(3);
|
|
134
|
+
expect((arr as any)[-1]).toBe(42);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('$set at large index updates $length', async () => {
|
|
138
|
+
let arr = new ReactiveArray(1, 2, 3),
|
|
139
|
+
lengths: number[] = [];
|
|
140
|
+
|
|
141
|
+
effect(() => {
|
|
142
|
+
lengths.push(arr.$length);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
expect(lengths).toEqual([3]);
|
|
146
|
+
|
|
147
|
+
arr.$set(10000, 99);
|
|
148
|
+
await Promise.resolve();
|
|
149
|
+
|
|
150
|
+
expect(arr.length).toBe(10001);
|
|
151
|
+
expect(lengths).toEqual([3, 10001]);
|
|
152
|
+
});
|
|
129
153
|
});
|
|
130
154
|
|
|
131
155
|
|