ripple 0.2.46 → 0.2.47
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/package.json +1 -1
- package/src/compiler/phases/1-parse/index.js +2 -2
- package/src/compiler/phases/2-analyze/index.js +640 -667
- package/src/compiler/phases/3-transform/index.js +1873 -1880
- package/src/compiler/phases/3-transform/segments.js +2 -2
- package/src/compiler/utils.js +596 -551
- package/src/jsx-runtime.js +12 -12
- package/src/runtime/array.js +611 -609
- package/src/runtime/index.js +29 -17
- package/src/runtime/internal/client/array.js +121 -121
- package/src/runtime/internal/client/blocks.js +206 -206
- package/src/runtime/internal/client/constants.js +2 -2
- package/src/runtime/internal/client/context.js +40 -40
- package/src/runtime/internal/client/events.js +191 -191
- package/src/runtime/internal/client/for.js +355 -355
- package/src/runtime/internal/client/if.js +25 -25
- package/src/runtime/internal/client/index.js +57 -56
- package/src/runtime/internal/client/operations.js +32 -32
- package/src/runtime/internal/client/portal.js +19 -19
- package/src/runtime/internal/client/render.js +132 -132
- package/src/runtime/internal/client/runtime.js +838 -835
- package/src/runtime/internal/client/template.js +36 -36
- package/src/runtime/internal/client/try.js +113 -113
- package/src/runtime/internal/client/types.d.ts +10 -10
- package/src/runtime/internal/client/utils.js +5 -5
- package/src/runtime/map.js +139 -139
- package/src/runtime/set.js +130 -130
- package/src/utils/ast.js +189 -189
- package/src/utils/builders.js +244 -244
- package/src/utils/sanitize_template_string.js +1 -1
- package/tests/__snapshots__/composite.test.ripple.snap +1 -1
- package/tests/accessors-props.test.ripple +9 -9
- package/tests/basic.test.ripple +4 -4
- package/tests/boundaries.test.ripple +17 -17
- package/tests/composite.test.ripple +43 -72
- package/types/index.d.ts +6 -2
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
/** @import { Block, Component, Dependency,
|
|
1
|
+
/** @import { Block, Component, Dependency, Derived, Tracked } from '#client' */
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
destroy_block,
|
|
5
|
+
destroy_non_branch_children,
|
|
6
|
+
effect,
|
|
7
|
+
is_destroyed,
|
|
8
|
+
render,
|
|
9
9
|
} from './blocks.js';
|
|
10
10
|
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
11
|
+
ASYNC_BLOCK,
|
|
12
|
+
BLOCK_HAS_RUN,
|
|
13
|
+
BRANCH_BLOCK,
|
|
14
|
+
DERIVED,
|
|
15
|
+
COMPUTED_PROPERTY,
|
|
16
|
+
CONTAINS_TEARDOWN,
|
|
17
|
+
CONTAINS_UPDATE,
|
|
18
|
+
DEFERRED,
|
|
19
|
+
DESTROYED,
|
|
20
|
+
EFFECT_BLOCK,
|
|
21
|
+
PAUSED,
|
|
22
|
+
ROOT_BLOCK,
|
|
23
|
+
SPREAD_OBJECT,
|
|
24
|
+
TRACKED,
|
|
25
|
+
TRACKED_OBJECT,
|
|
26
|
+
TRY_BLOCK,
|
|
27
|
+
UNINITIALIZED,
|
|
28
|
+
REF_PROP,
|
|
29
|
+
ARRAY_SET_INDEX_AT,
|
|
30
30
|
} from './constants';
|
|
31
31
|
import { capture, suspend } from './try.js';
|
|
32
32
|
import { define_property, get_descriptor, is_ripple_array, is_positive_integer } from './utils';
|
|
33
33
|
import {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
object_keys as original_object_keys,
|
|
35
|
+
object_values as original_object_values,
|
|
36
|
+
object_entries as original_object_entries,
|
|
37
|
+
structured_clone as original_structured_clone,
|
|
38
38
|
} from './utils.js';
|
|
39
39
|
|
|
40
40
|
const FLUSH_MICROTASK = 0;
|
|
@@ -42,7 +42,7 @@ const FLUSH_SYNC = 1;
|
|
|
42
42
|
|
|
43
43
|
/** @type {null | Block} */
|
|
44
44
|
export let active_block = null;
|
|
45
|
-
/** @type {null | Block |
|
|
45
|
+
/** @type {null | Block | Derived} */
|
|
46
46
|
export let active_reaction = null;
|
|
47
47
|
/** @type {null | Block} */
|
|
48
48
|
export let active_scope = null;
|
|
@@ -68,124 +68,124 @@ export let tracking = false;
|
|
|
68
68
|
export let teardown = false;
|
|
69
69
|
|
|
70
70
|
function increment_clock() {
|
|
71
|
-
|
|
71
|
+
return ++clock;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
75
|
* @param {Block | null} block
|
|
76
76
|
*/
|
|
77
77
|
export function set_active_block(block) {
|
|
78
|
-
|
|
78
|
+
active_block = block;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
/**
|
|
82
82
|
* @param {Block | null} reaction
|
|
83
83
|
*/
|
|
84
84
|
export function set_active_reaction(reaction) {
|
|
85
|
-
|
|
85
|
+
active_reaction = reaction;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
89
|
* @param {Component | null} component
|
|
90
90
|
*/
|
|
91
91
|
export function set_active_component(component) {
|
|
92
|
-
|
|
92
|
+
active_component = component;
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
/**
|
|
96
96
|
* @param {boolean} value
|
|
97
97
|
*/
|
|
98
98
|
export function set_tracking(value) {
|
|
99
|
-
|
|
99
|
+
tracking = value;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
/**
|
|
103
103
|
* @param {Block} block
|
|
104
104
|
*/
|
|
105
105
|
export function run_teardown(block) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
106
|
+
var fn = block.t;
|
|
107
|
+
if (fn !== null) {
|
|
108
|
+
var previous_block = active_block;
|
|
109
|
+
var previous_reaction = active_reaction;
|
|
110
|
+
var previous_tracking = tracking;
|
|
111
|
+
var previous_teardown = teardown;
|
|
112
|
+
|
|
113
|
+
try {
|
|
114
|
+
active_block = null;
|
|
115
|
+
active_reaction = null;
|
|
116
|
+
tracking = false;
|
|
117
|
+
teardown = true;
|
|
118
|
+
fn.call(null);
|
|
119
|
+
} finally {
|
|
120
|
+
active_block = previous_block;
|
|
121
|
+
active_reaction = previous_reaction;
|
|
122
|
+
tracking = previous_tracking;
|
|
123
|
+
teardown = previous_teardown;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
/**
|
|
129
|
-
* @param {
|
|
129
|
+
* @param {Derived} computed
|
|
130
130
|
*/
|
|
131
|
-
function
|
|
132
|
-
|
|
131
|
+
function update_derived(computed) {
|
|
132
|
+
var value = computed.v;
|
|
133
133
|
|
|
134
|
-
|
|
135
|
-
|
|
134
|
+
if (value === UNINITIALIZED || is_tracking_dirty(computed.d)) {
|
|
135
|
+
value = run_derived(computed);
|
|
136
136
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
137
|
+
if (value !== computed.v) {
|
|
138
|
+
computed.v = value;
|
|
139
|
+
computed.c = increment_clock();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
/**
|
|
145
|
-
* @param {
|
|
145
|
+
* @param {Derived} computed
|
|
146
146
|
*/
|
|
147
147
|
function destroy_computed_children(computed) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
148
|
+
var blocks = computed.blocks;
|
|
149
|
+
|
|
150
|
+
if (blocks !== null) {
|
|
151
|
+
computed.blocks = null;
|
|
152
|
+
for (var i = 0; i < blocks.length; i++) {
|
|
153
|
+
destroy_block(blocks[i]);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
/**
|
|
159
|
-
* @param {
|
|
159
|
+
* @param {Derived} computed
|
|
160
160
|
*/
|
|
161
|
-
function
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
161
|
+
function run_derived(computed) {
|
|
162
|
+
var previous_block = active_block;
|
|
163
|
+
var previous_reaction = active_reaction;
|
|
164
|
+
var previous_tracking = tracking;
|
|
165
|
+
var previous_dependency = active_dependency;
|
|
166
|
+
var previous_component = active_component;
|
|
167
|
+
|
|
168
|
+
try {
|
|
169
|
+
active_block = computed.b;
|
|
170
|
+
active_reaction = computed;
|
|
171
|
+
tracking = true;
|
|
172
|
+
active_dependency = null;
|
|
173
|
+
active_component = active_block.c;
|
|
174
|
+
|
|
175
|
+
destroy_computed_children(computed);
|
|
176
|
+
|
|
177
|
+
var value = computed.fn();
|
|
178
|
+
|
|
179
|
+
computed.d = active_dependency;
|
|
180
|
+
|
|
181
|
+
return value;
|
|
182
|
+
} finally {
|
|
183
|
+
active_block = previous_block;
|
|
184
|
+
active_reaction = previous_reaction;
|
|
185
|
+
tracking = previous_tracking;
|
|
186
|
+
active_dependency = previous_dependency;
|
|
187
|
+
active_component = previous_component;
|
|
188
|
+
}
|
|
189
189
|
}
|
|
190
190
|
|
|
191
191
|
/**
|
|
@@ -193,64 +193,64 @@ function run_computed(computed) {
|
|
|
193
193
|
* @param {Block} block
|
|
194
194
|
*/
|
|
195
195
|
export function handle_error(error, block) {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
196
|
+
/** @type {Block | null} */
|
|
197
|
+
var current = block;
|
|
198
|
+
|
|
199
|
+
while (current !== null) {
|
|
200
|
+
var state = current.s;
|
|
201
|
+
if ((current.f & TRY_BLOCK) !== 0 && state.c !== null) {
|
|
202
|
+
state.c(error);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
current = current.p;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
throw error;
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
/**
|
|
212
212
|
* @param {Block} block
|
|
213
213
|
*/
|
|
214
214
|
export function run_block(block) {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
215
|
+
var previous_block = active_block;
|
|
216
|
+
var previous_reaction = active_reaction;
|
|
217
|
+
var previous_tracking = tracking;
|
|
218
|
+
var previous_dependency = active_dependency;
|
|
219
|
+
var previous_component = active_component;
|
|
220
|
+
|
|
221
|
+
try {
|
|
222
|
+
active_block = block;
|
|
223
|
+
active_reaction = block;
|
|
224
|
+
active_component = block.c;
|
|
225
|
+
|
|
226
|
+
destroy_non_branch_children(block);
|
|
227
|
+
run_teardown(block);
|
|
228
|
+
|
|
229
|
+
tracking = (block.f & (ROOT_BLOCK | BRANCH_BLOCK)) === 0;
|
|
230
|
+
active_dependency = null;
|
|
231
|
+
var res = block.fn();
|
|
232
|
+
|
|
233
|
+
if (typeof res === 'function') {
|
|
234
|
+
block.t = res;
|
|
235
|
+
/** @type {Block | null} */
|
|
236
|
+
let current = block;
|
|
237
|
+
|
|
238
|
+
while (current !== null && (current.f & CONTAINS_TEARDOWN) === 0) {
|
|
239
|
+
current.f ^= CONTAINS_TEARDOWN;
|
|
240
|
+
current = current.p;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
block.d = active_dependency;
|
|
245
|
+
} catch (error) {
|
|
246
|
+
handle_error(error, block);
|
|
247
|
+
} finally {
|
|
248
|
+
active_block = previous_block;
|
|
249
|
+
active_reaction = previous_reaction;
|
|
250
|
+
tracking = previous_tracking;
|
|
251
|
+
active_dependency = previous_dependency;
|
|
252
|
+
active_component = previous_component;
|
|
253
|
+
}
|
|
254
254
|
}
|
|
255
255
|
|
|
256
256
|
/**
|
|
@@ -260,30 +260,30 @@ export function run_block(block) {
|
|
|
260
260
|
* @returns {Tracked}
|
|
261
261
|
*/
|
|
262
262
|
export function tracked(v, b) {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
263
|
+
// TODO: now we expose tracked, we should likely block access in DEV somehow
|
|
264
|
+
return {
|
|
265
|
+
b,
|
|
266
|
+
c: 0,
|
|
267
|
+
f: TRACKED,
|
|
268
|
+
v,
|
|
269
|
+
};
|
|
270
270
|
}
|
|
271
271
|
|
|
272
272
|
/**
|
|
273
273
|
* @param {any} fn
|
|
274
274
|
* @param {any} block
|
|
275
|
-
* @returns {
|
|
275
|
+
* @returns {Derived}
|
|
276
276
|
*/
|
|
277
|
-
export function
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
277
|
+
export function derived(fn, block) {
|
|
278
|
+
return {
|
|
279
|
+
b: block,
|
|
280
|
+
blocks: null,
|
|
281
|
+
c: 0,
|
|
282
|
+
d: null,
|
|
283
|
+
f: TRACKED | DERIVED,
|
|
284
|
+
fn,
|
|
285
|
+
v: UNINITIALIZED,
|
|
286
|
+
};
|
|
287
287
|
}
|
|
288
288
|
|
|
289
289
|
/**
|
|
@@ -291,439 +291,439 @@ export function computed(fn, block) {
|
|
|
291
291
|
* @returns {Dependency}
|
|
292
292
|
*/
|
|
293
293
|
function create_dependency(tracked) {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
294
|
+
var reaction = /** @type {Derived | Block} **/ (active_reaction);
|
|
295
|
+
var existing = reaction.d;
|
|
296
|
+
|
|
297
|
+
// Recycle tracking entries
|
|
298
|
+
if (existing !== null) {
|
|
299
|
+
reaction.d = existing.n;
|
|
300
|
+
existing.c = tracked.c;
|
|
301
|
+
existing.t = tracked;
|
|
302
|
+
existing.n = null;
|
|
303
|
+
return existing;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return {
|
|
307
|
+
c: tracked.c,
|
|
308
|
+
t: tracked,
|
|
309
|
+
n: null,
|
|
310
|
+
};
|
|
311
311
|
}
|
|
312
312
|
|
|
313
313
|
/**
|
|
314
314
|
* @param {Dependency | null} tracking
|
|
315
315
|
*/
|
|
316
316
|
function is_tracking_dirty(tracking) {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
317
|
+
if (tracking === null) {
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
while (tracking !== null) {
|
|
321
|
+
var tracked = tracking.t;
|
|
322
|
+
|
|
323
|
+
if ((tracked.f & DERIVED) !== 0) {
|
|
324
|
+
update_derived(/** @type {Derived} **/ (tracked));
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
if (tracked.c > tracking.c) {
|
|
328
|
+
return true;
|
|
329
|
+
}
|
|
330
|
+
tracking = tracking.n;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
return false;
|
|
334
334
|
}
|
|
335
335
|
|
|
336
336
|
/**
|
|
337
337
|
* @param {Block} block
|
|
338
338
|
*/
|
|
339
339
|
export function is_block_dirty(block) {
|
|
340
|
-
|
|
340
|
+
var flags = block.f;
|
|
341
341
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
342
|
+
if ((flags & (ROOT_BLOCK | BRANCH_BLOCK)) !== 0) {
|
|
343
|
+
return false;
|
|
344
|
+
}
|
|
345
|
+
if ((flags & BLOCK_HAS_RUN) === 0) {
|
|
346
|
+
block.f ^= BLOCK_HAS_RUN;
|
|
347
|
+
return true;
|
|
348
|
+
}
|
|
349
349
|
|
|
350
|
-
|
|
350
|
+
return is_tracking_dirty(block.d);
|
|
351
351
|
}
|
|
352
352
|
|
|
353
353
|
export function async_computed(fn, block) {
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
354
|
+
let parent = active_reaction;
|
|
355
|
+
var t = tracked(UNINITIALIZED, block);
|
|
356
|
+
var promise;
|
|
357
|
+
var new_values = new Map();
|
|
358
|
+
|
|
359
|
+
render(() => {
|
|
360
|
+
var [current, deferred] = capture_deferred(() => (promise = fn()));
|
|
361
|
+
|
|
362
|
+
var restore = capture();
|
|
363
|
+
var unuspend;
|
|
364
|
+
|
|
365
|
+
if (deferred === null) {
|
|
366
|
+
unuspend = suspend();
|
|
367
|
+
} else {
|
|
368
|
+
for (var i = 0; i < deferred.length; i++) {
|
|
369
|
+
var tracked = deferred[i];
|
|
370
|
+
new_values.set(tracked, { v: tracked.v, c: tracked.c });
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
promise.then((v) => {
|
|
375
|
+
if (is_destroyed(parent)) {
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
if (promise === current && t.v !== v) {
|
|
379
|
+
restore();
|
|
380
|
+
|
|
381
|
+
if (t.v === UNINITIALIZED) {
|
|
382
|
+
t.v = v;
|
|
383
|
+
} else {
|
|
384
|
+
set(t, v, block);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
if (deferred === null) {
|
|
389
|
+
unuspend();
|
|
390
|
+
} else if (promise === current) {
|
|
391
|
+
for (var i = 0; i < deferred.length; i++) {
|
|
392
|
+
var tracked = deferred[i];
|
|
393
|
+
var { v, c } = new_values.get(tracked);
|
|
394
|
+
tracked.v = v;
|
|
395
|
+
tracked.c = c;
|
|
396
|
+
schedule_update(tracked.b);
|
|
397
|
+
}
|
|
398
|
+
new_values.clear();
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
}, ASYNC_BLOCK);
|
|
402
|
+
|
|
403
|
+
return new Promise(async (resolve) => {
|
|
404
|
+
var p;
|
|
405
|
+
while (p !== (p = promise)) await p;
|
|
406
|
+
return resolve(t);
|
|
407
|
+
});
|
|
408
408
|
}
|
|
409
409
|
|
|
410
410
|
export function deferred(fn) {
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
411
|
+
var parent = active_block;
|
|
412
|
+
var block = active_scope;
|
|
413
|
+
var res = [UNINITIALIZED];
|
|
414
|
+
// TODO implement DEFERRED flag on tracked
|
|
415
|
+
var t = tracked(UNINITIALIZED, block, DEFERRED);
|
|
416
|
+
var tracked_properties = [t];
|
|
417
|
+
var prev_value = UNINITIALIZED;
|
|
418
|
+
|
|
419
|
+
define_property(res, TRACKED_OBJECT, {
|
|
420
|
+
value: tracked_properties,
|
|
421
|
+
enumerable: false,
|
|
422
|
+
});
|
|
423
|
+
|
|
424
|
+
render(() => {
|
|
425
|
+
if (prev_value !== UNINITIALIZED) {
|
|
426
|
+
t.v = prev_value;
|
|
427
|
+
} else {
|
|
428
|
+
prev_value = t.v;
|
|
429
|
+
}
|
|
430
|
+
var prev_version = t.c;
|
|
431
|
+
var value = fn();
|
|
432
|
+
|
|
433
|
+
res[0] = value;
|
|
434
|
+
old_set_property(res, 0, value, block);
|
|
435
|
+
|
|
436
|
+
if (prev_value !== UNINITIALIZED) {
|
|
437
|
+
if ((t.f & DEFERRED) === 0) {
|
|
438
|
+
t.f ^= DEFERRED;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
var is_awaited = flush_deferred_upodates(parent);
|
|
442
|
+
if ((t.f & DEFERRED) !== 0) {
|
|
443
|
+
t.f ^= DEFERRED;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
if (is_awaited) {
|
|
447
|
+
t.c = prev_version;
|
|
448
|
+
t.v = prev_value;
|
|
449
|
+
prev_value = value;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
return res;
|
|
455
455
|
}
|
|
456
456
|
|
|
457
457
|
function capture_deferred(fn) {
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
458
|
+
var value = fn();
|
|
459
|
+
var deferred = null;
|
|
460
|
+
var depedency = active_dependency;
|
|
461
|
+
|
|
462
|
+
while (depedency !== null) {
|
|
463
|
+
var tracked = depedency.t;
|
|
464
|
+
if ((tracked.f & DEFERRED) !== 0) {
|
|
465
|
+
deferred ??= [];
|
|
466
|
+
deferred.push(tracked);
|
|
467
|
+
break;
|
|
468
|
+
}
|
|
469
|
+
depedency = depedency.n;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
return [value, deferred];
|
|
473
473
|
}
|
|
474
474
|
|
|
475
475
|
/**
|
|
476
476
|
* @param {Block} block
|
|
477
477
|
*/
|
|
478
478
|
function flush_deferred_upodates(block) {
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
479
|
+
var current = block.first;
|
|
480
|
+
var is_awaited = false;
|
|
481
|
+
|
|
482
|
+
main_loop: while (current !== null) {
|
|
483
|
+
var flags = current.f;
|
|
484
|
+
|
|
485
|
+
if ((flags & ASYNC_BLOCK) !== 0 && is_block_dirty(current)) {
|
|
486
|
+
is_awaited = true;
|
|
487
|
+
run_block(current);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
var parent = current.p;
|
|
491
|
+
current = current.next;
|
|
492
|
+
|
|
493
|
+
while (current === null && parent !== null) {
|
|
494
|
+
if (parent === block) {
|
|
495
|
+
break main_loop;
|
|
496
|
+
}
|
|
497
|
+
current = parent.next;
|
|
498
|
+
parent = parent.p;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
return is_awaited;
|
|
503
503
|
}
|
|
504
504
|
|
|
505
505
|
/**
|
|
506
506
|
* @param {Block} root_block
|
|
507
507
|
*/
|
|
508
508
|
function flush_updates(root_block) {
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
509
|
+
/** @type {Block | null} */
|
|
510
|
+
var current = root_block;
|
|
511
|
+
var containing_update = null;
|
|
512
|
+
var effects = [];
|
|
513
|
+
|
|
514
|
+
while (current !== null) {
|
|
515
|
+
var flags = current.f;
|
|
516
|
+
|
|
517
|
+
if ((flags & CONTAINS_UPDATE) !== 0) {
|
|
518
|
+
current.f ^= CONTAINS_UPDATE;
|
|
519
|
+
containing_update = current;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
if ((flags & PAUSED) === 0 && containing_update !== null) {
|
|
523
|
+
if ((flags & EFFECT_BLOCK) !== 0) {
|
|
524
|
+
effects.push(current);
|
|
525
|
+
} else {
|
|
526
|
+
try {
|
|
527
|
+
if (is_block_dirty(current)) {
|
|
528
|
+
run_block(current);
|
|
529
|
+
}
|
|
530
|
+
} catch (error) {
|
|
531
|
+
handle_error(error, current);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
/** @type {Block | null} */
|
|
535
|
+
var child = current.first;
|
|
536
|
+
|
|
537
|
+
if (child !== null) {
|
|
538
|
+
current = child;
|
|
539
|
+
continue;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/** @type {Block | null} */
|
|
544
|
+
var parent = current.p;
|
|
545
|
+
current = current.next;
|
|
546
|
+
|
|
547
|
+
while (current === null && parent !== null) {
|
|
548
|
+
if (parent === containing_update) {
|
|
549
|
+
containing_update = null;
|
|
550
|
+
}
|
|
551
|
+
current = parent.next;
|
|
552
|
+
parent = parent.p;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
var length = effects.length;
|
|
557
|
+
|
|
558
|
+
for (var i = 0; i < length; i++) {
|
|
559
|
+
var effect = effects[i];
|
|
560
|
+
var flags = effect.f;
|
|
561
|
+
|
|
562
|
+
try {
|
|
563
|
+
if ((flags & (PAUSED | DESTROYED)) === 0 && is_block_dirty(effect)) {
|
|
564
|
+
run_block(effect);
|
|
565
|
+
}
|
|
566
|
+
} catch (error) {
|
|
567
|
+
handle_error(error, effect);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
570
|
}
|
|
571
571
|
|
|
572
572
|
/**
|
|
573
573
|
* @param {Block[]} root_blocks
|
|
574
574
|
*/
|
|
575
575
|
function flush_queued_root_blocks(root_blocks) {
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
576
|
+
for (let i = 0; i < root_blocks.length; i++) {
|
|
577
|
+
flush_updates(root_blocks[i]);
|
|
578
|
+
}
|
|
579
579
|
}
|
|
580
580
|
|
|
581
581
|
function flush_microtasks() {
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
582
|
+
is_micro_task_queued = false;
|
|
583
|
+
|
|
584
|
+
if (queued_microtasks.length > 0) {
|
|
585
|
+
var microtasks = queued_microtasks;
|
|
586
|
+
queued_microtasks = [];
|
|
587
|
+
for (var i = 0; i < microtasks.length; i++) {
|
|
588
|
+
microtasks[i]();
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
if (flush_count > 1001) {
|
|
593
|
+
return;
|
|
594
|
+
}
|
|
595
|
+
var previous_queued_root_blocks = queued_root_blocks;
|
|
596
|
+
queued_root_blocks = [];
|
|
597
|
+
flush_queued_root_blocks(previous_queued_root_blocks);
|
|
598
|
+
|
|
599
|
+
if (!is_micro_task_queued) {
|
|
600
|
+
flush_count = 0;
|
|
601
|
+
}
|
|
602
|
+
old_values.clear();
|
|
603
603
|
}
|
|
604
604
|
|
|
605
605
|
/**
|
|
606
606
|
* @param { (() => void) } [fn]
|
|
607
607
|
*/
|
|
608
608
|
export function queue_microtask(fn) {
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
609
|
+
if (!is_micro_task_queued) {
|
|
610
|
+
is_micro_task_queued = true;
|
|
611
|
+
queueMicrotask(flush_microtasks);
|
|
612
|
+
}
|
|
613
|
+
if (fn !== undefined) {
|
|
614
|
+
queued_microtasks.push(fn);
|
|
615
|
+
}
|
|
616
616
|
}
|
|
617
617
|
|
|
618
618
|
/**
|
|
619
619
|
* @param {Block} block
|
|
620
620
|
*/
|
|
621
621
|
export function schedule_update(block) {
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
622
|
+
if (scheduler_mode === FLUSH_MICROTASK) {
|
|
623
|
+
queue_microtask();
|
|
624
|
+
}
|
|
625
|
+
let current = block;
|
|
626
|
+
|
|
627
|
+
while (current !== null) {
|
|
628
|
+
var flags = current.f;
|
|
629
|
+
if ((flags & CONTAINS_UPDATE) !== 0) return;
|
|
630
|
+
current.f ^= CONTAINS_UPDATE;
|
|
631
|
+
if ((flags & ROOT_BLOCK) !== 0) {
|
|
632
|
+
break;
|
|
633
|
+
}
|
|
634
|
+
current = /** @type {Block} */ (current.p);
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
queued_root_blocks.push(current);
|
|
638
638
|
}
|
|
639
639
|
|
|
640
640
|
/**
|
|
641
641
|
* @param {Tracked} tracked
|
|
642
642
|
*/
|
|
643
643
|
function register_dependency(tracked) {
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
644
|
+
var dependency = active_dependency;
|
|
645
|
+
|
|
646
|
+
if (dependency === null) {
|
|
647
|
+
dependency = create_dependency(tracked);
|
|
648
|
+
active_dependency = dependency;
|
|
649
|
+
} else {
|
|
650
|
+
var current = dependency;
|
|
651
|
+
|
|
652
|
+
while (current !== null) {
|
|
653
|
+
if (current.t === tracked) {
|
|
654
|
+
current.c = tracked.c;
|
|
655
|
+
return;
|
|
656
|
+
}
|
|
657
|
+
var next = current.n;
|
|
658
|
+
if (next === null) {
|
|
659
|
+
break;
|
|
660
|
+
}
|
|
661
|
+
current = next;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
dependency = create_dependency(tracked);
|
|
665
|
+
current.n = dependency;
|
|
666
|
+
}
|
|
667
667
|
}
|
|
668
668
|
|
|
669
669
|
/**
|
|
670
|
-
* @param {
|
|
670
|
+
* @param {Derived} computed
|
|
671
671
|
*/
|
|
672
|
-
export function
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
672
|
+
export function get_derived(computed) {
|
|
673
|
+
update_derived(computed);
|
|
674
|
+
if (tracking) {
|
|
675
|
+
register_dependency(computed);
|
|
676
|
+
}
|
|
677
677
|
|
|
678
|
-
|
|
678
|
+
return computed.v;
|
|
679
679
|
}
|
|
680
680
|
|
|
681
681
|
/**
|
|
682
|
-
* @param {
|
|
682
|
+
* @param {Derived | Tracked} tracked
|
|
683
683
|
*/
|
|
684
684
|
export function get(tracked) {
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
685
|
+
return (tracked.f & DERIVED) !== 0
|
|
686
|
+
? get_derived(/** @type {Derived} */ (tracked))
|
|
687
|
+
: get_tracked(tracked);
|
|
688
688
|
}
|
|
689
689
|
|
|
690
690
|
/**
|
|
691
691
|
* @param {Tracked} tracked
|
|
692
692
|
*/
|
|
693
693
|
export function get_tracked(tracked) {
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
694
|
+
var value = tracked.v;
|
|
695
|
+
if (tracking) {
|
|
696
|
+
register_dependency(tracked);
|
|
697
|
+
}
|
|
698
|
+
if (teardown && old_values.has(tracked)) {
|
|
699
|
+
return old_values.get(tracked);
|
|
700
|
+
}
|
|
701
|
+
return value;
|
|
702
702
|
}
|
|
703
703
|
|
|
704
704
|
/**
|
|
705
|
-
* @param {
|
|
705
|
+
* @param {Derived | Tracked} tracked
|
|
706
706
|
* @param {any} value
|
|
707
707
|
* @param {Block} block
|
|
708
708
|
*/
|
|
709
709
|
export function set(tracked, value, block) {
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
710
|
+
var old_value = tracked.v;
|
|
711
|
+
|
|
712
|
+
if (value !== old_value) {
|
|
713
|
+
var tracked_block = tracked.b;
|
|
714
|
+
|
|
715
|
+
if ((block.f & CONTAINS_TEARDOWN) !== 0) {
|
|
716
|
+
if (teardown) {
|
|
717
|
+
old_values.set(tracked, value);
|
|
718
|
+
} else {
|
|
719
|
+
old_values.set(tracked, old_value);
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
tracked.v = value;
|
|
724
|
+
tracked.c = increment_clock();
|
|
725
|
+
schedule_update(tracked_block);
|
|
726
|
+
}
|
|
727
727
|
}
|
|
728
728
|
|
|
729
729
|
/**
|
|
@@ -732,16 +732,16 @@ export function set(tracked, value, block) {
|
|
|
732
732
|
* @returns {T}
|
|
733
733
|
*/
|
|
734
734
|
export function untrack(fn) {
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
735
|
+
var previous_tracking = tracking;
|
|
736
|
+
var previous_dependency = active_dependency;
|
|
737
|
+
tracking = false;
|
|
738
|
+
active_dependency = null;
|
|
739
|
+
try {
|
|
740
|
+
return fn();
|
|
741
|
+
} finally {
|
|
742
|
+
tracking = previous_tracking;
|
|
743
|
+
active_dependency = previous_dependency;
|
|
744
|
+
}
|
|
745
745
|
}
|
|
746
746
|
|
|
747
747
|
/**
|
|
@@ -750,32 +750,32 @@ export function untrack(fn) {
|
|
|
750
750
|
* @returns {T}
|
|
751
751
|
*/
|
|
752
752
|
export function flush_sync(fn) {
|
|
753
|
-
|
|
754
|
-
|
|
753
|
+
var previous_scheduler_mode = scheduler_mode;
|
|
754
|
+
var previous_queued_root_blocks = queued_root_blocks;
|
|
755
755
|
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
756
|
+
try {
|
|
757
|
+
/** @type {Block[]} */
|
|
758
|
+
var root_blocks = [];
|
|
759
759
|
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
760
|
+
scheduler_mode = FLUSH_SYNC;
|
|
761
|
+
queued_root_blocks = root_blocks;
|
|
762
|
+
is_micro_task_queued = false;
|
|
763
763
|
|
|
764
|
-
|
|
764
|
+
flush_queued_root_blocks(previous_queued_root_blocks);
|
|
765
765
|
|
|
766
|
-
|
|
766
|
+
var result = fn?.();
|
|
767
767
|
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
768
|
+
if (queued_root_blocks.length > 0 || root_blocks.length > 0) {
|
|
769
|
+
flush_sync();
|
|
770
|
+
}
|
|
771
771
|
|
|
772
|
-
|
|
772
|
+
flush_count = 0;
|
|
773
773
|
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
774
|
+
return /** @type {T} */ (result);
|
|
775
|
+
} finally {
|
|
776
|
+
scheduler_mode = previous_scheduler_mode;
|
|
777
|
+
queued_root_blocks = previous_queued_root_blocks;
|
|
778
|
+
}
|
|
779
779
|
}
|
|
780
780
|
|
|
781
781
|
/**
|
|
@@ -783,14 +783,14 @@ export function flush_sync(fn) {
|
|
|
783
783
|
* @returns {Object}
|
|
784
784
|
*/
|
|
785
785
|
export function tracked_spread_object(fn) {
|
|
786
|
-
|
|
786
|
+
var obj = fn();
|
|
787
787
|
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
788
|
+
define_property(obj, SPREAD_OBJECT, {
|
|
789
|
+
value: fn,
|
|
790
|
+
enumerable: false,
|
|
791
|
+
});
|
|
792
792
|
|
|
793
|
-
|
|
793
|
+
return obj;
|
|
794
794
|
}
|
|
795
795
|
|
|
796
796
|
/**
|
|
@@ -800,50 +800,50 @@ export function tracked_spread_object(fn) {
|
|
|
800
800
|
* @returns {object}
|
|
801
801
|
*/
|
|
802
802
|
export function tracked_object(obj, properties, block) {
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
803
|
+
/** @type {Record<string, Tracked | Derived>} */
|
|
804
|
+
var tracked_properties = obj[TRACKED_OBJECT];
|
|
805
|
+
|
|
806
|
+
if (tracked_properties === undefined) {
|
|
807
|
+
tracked_properties = {};
|
|
808
|
+
define_property(obj, TRACKED_OBJECT, {
|
|
809
|
+
value: tracked_properties,
|
|
810
|
+
enumerable: false,
|
|
811
|
+
});
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
for (var i = 0; i < properties.length; i++) {
|
|
815
|
+
var property = properties[i];
|
|
816
|
+
/** @type {Tracked | Derived} */
|
|
817
|
+
var tracked_property;
|
|
818
|
+
|
|
819
|
+
// accessor passed in, to avoid an expensive get_descriptor call in the fast path
|
|
820
|
+
if (property[0] === '#') {
|
|
821
|
+
property = property.slice(1);
|
|
822
|
+
var descriptor = /** @type {PropertyDescriptor} */ (get_descriptor(obj, property));
|
|
823
|
+
var desc_get = descriptor.get;
|
|
824
|
+
tracked_property = derived(desc_get, block);
|
|
825
|
+
/** @type {any} */
|
|
826
|
+
var initial = run_derived(/** @type {Derived} */ (tracked_property));
|
|
827
|
+
// If there's a setter, we need to set the initial value
|
|
828
|
+
if (descriptor.set !== undefined) {
|
|
829
|
+
obj[property] = initial;
|
|
830
|
+
}
|
|
831
|
+
} else {
|
|
832
|
+
var initial = obj[property];
|
|
833
|
+
|
|
834
|
+
if (typeof initial === 'function' && initial[COMPUTED_PROPERTY] === true) {
|
|
835
|
+
tracked_property = derived(initial, block);
|
|
836
|
+
initial = run_derived(/** @type {Derived} */ (tracked_property));
|
|
837
|
+
obj[property] = initial;
|
|
838
|
+
} else {
|
|
839
|
+
tracked_property = tracked(initial, block);
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
tracked_properties[property] = tracked_property;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
return obj;
|
|
847
847
|
}
|
|
848
848
|
|
|
849
849
|
/**
|
|
@@ -852,11 +852,11 @@ export function tracked_object(obj, properties, block) {
|
|
|
852
852
|
* @returns {() => T}
|
|
853
853
|
*/
|
|
854
854
|
export function computed_property(fn) {
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
855
|
+
define_property(fn, COMPUTED_PROPERTY, {
|
|
856
|
+
value: true,
|
|
857
|
+
enumerable: false,
|
|
858
|
+
});
|
|
859
|
+
return fn;
|
|
860
860
|
}
|
|
861
861
|
|
|
862
862
|
/**
|
|
@@ -868,17 +868,17 @@ export function computed_property(fn) {
|
|
|
868
868
|
* @returns {any}
|
|
869
869
|
*/
|
|
870
870
|
export function call_property(obj, property, chain_obj, chain_prop, ...args) {
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
871
|
+
// don't swallow errors if either the object or property is nullish,
|
|
872
|
+
// respect optional chaining as provided
|
|
873
|
+
if (!chain_obj && !chain_prop) {
|
|
874
|
+
return obj[property].call(obj, ...args);
|
|
875
|
+
} else if (chain_obj && chain_prop) {
|
|
876
|
+
return obj?.[property]?.call(obj, ...args);
|
|
877
|
+
} else if (chain_obj) {
|
|
878
|
+
return obj?.[property].call(obj, ...args);
|
|
879
|
+
} else if (chain_prop) {
|
|
880
|
+
return obj[property]?.call(obj, ...args);
|
|
881
|
+
}
|
|
882
882
|
}
|
|
883
883
|
|
|
884
884
|
/**
|
|
@@ -888,11 +888,14 @@ export function call_property(obj, property, chain_obj, chain_prop, ...args) {
|
|
|
888
888
|
* @returns {any}
|
|
889
889
|
*/
|
|
890
890
|
export function get_property(obj, property, chain = false) {
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
891
|
+
if (chain && obj == null) {
|
|
892
|
+
return undefined;
|
|
893
|
+
}
|
|
894
|
+
var tracked = obj[property];
|
|
895
|
+
if (tracked == null) {
|
|
896
|
+
return tracked;
|
|
897
|
+
}
|
|
898
|
+
return get(tracked);
|
|
896
899
|
}
|
|
897
900
|
|
|
898
901
|
/**
|
|
@@ -902,32 +905,32 @@ export function get_property(obj, property, chain = false) {
|
|
|
902
905
|
* @returns {any}
|
|
903
906
|
*/
|
|
904
907
|
export function old_get_property(obj, property, chain = false) {
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
908
|
+
if (chain && obj == null) {
|
|
909
|
+
return undefined;
|
|
910
|
+
}
|
|
911
|
+
var value = obj[property];
|
|
912
|
+
var tracked_properties = obj[TRACKED_OBJECT];
|
|
913
|
+
var tracked_property = tracked_properties?.[property];
|
|
914
|
+
|
|
915
|
+
if (tracked_property !== undefined) {
|
|
916
|
+
value = get(tracked_property);
|
|
917
|
+
if (obj[property] !== value) {
|
|
918
|
+
obj[property] = value;
|
|
919
|
+
}
|
|
920
|
+
} else if (SPREAD_OBJECT in obj) {
|
|
921
|
+
var spread_fn = obj[SPREAD_OBJECT];
|
|
922
|
+
var properties = spread_fn();
|
|
923
|
+
return old_get_property(properties, property, chain);
|
|
924
|
+
} else if (is_ripple_array(obj)) {
|
|
925
|
+
obj.$length;
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
return value;
|
|
926
929
|
}
|
|
927
930
|
|
|
928
931
|
export function set_property(obj, property, value, block) {
|
|
929
|
-
|
|
930
|
-
|
|
932
|
+
var tracked = obj[property];
|
|
933
|
+
set(tracked, value, block);
|
|
931
934
|
}
|
|
932
935
|
|
|
933
936
|
/**
|
|
@@ -938,31 +941,31 @@ export function set_property(obj, property, value, block) {
|
|
|
938
941
|
* @returns {any}
|
|
939
942
|
*/
|
|
940
943
|
export function old_set_property(obj, property, value, block) {
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
944
|
+
var tracked_properties = obj[TRACKED_OBJECT];
|
|
945
|
+
var rip_arr = is_ripple_array(obj);
|
|
946
|
+
var tracked = !(rip_arr && property === 'length') ? tracked_properties?.[property] : undefined;
|
|
947
|
+
|
|
948
|
+
if (tracked === undefined) {
|
|
949
|
+
// Handle computed assignments to arrays
|
|
950
|
+
if (rip_arr) {
|
|
951
|
+
if (property === 'length') {
|
|
952
|
+
// overriding `length` in RippleArray class doesn't work
|
|
953
|
+
// placing it here instead
|
|
954
|
+
throw new Error('Cannot set length on RippleArray, use $length instead');
|
|
955
|
+
} else if (is_positive_integer(property)) {
|
|
956
|
+
// for any other type we use obj[property] = value below as per native JS
|
|
957
|
+
return with_scope(block, () => {
|
|
958
|
+
obj[ARRAY_SET_INDEX_AT](property, value);
|
|
959
|
+
});
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
return (obj[property] = value);
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
obj[property] = value;
|
|
967
|
+
|
|
968
|
+
set(tracked, value, block);
|
|
966
969
|
}
|
|
967
970
|
|
|
968
971
|
/**
|
|
@@ -972,10 +975,10 @@ export function old_set_property(obj, property, value, block) {
|
|
|
972
975
|
* @returns {number}
|
|
973
976
|
*/
|
|
974
977
|
export function update(tracked, block, d = 1) {
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
978
|
+
var value = get(tracked);
|
|
979
|
+
var result = d === 1 ? value++ : value--;
|
|
980
|
+
set(tracked, value, block);
|
|
981
|
+
return result;
|
|
979
982
|
}
|
|
980
983
|
|
|
981
984
|
/**
|
|
@@ -984,7 +987,7 @@ export function update(tracked, block, d = 1) {
|
|
|
984
987
|
* @returns {void}
|
|
985
988
|
*/
|
|
986
989
|
export function increment(tracked, block) {
|
|
987
|
-
|
|
990
|
+
set(tracked, tracked.v + 1, block);
|
|
988
991
|
}
|
|
989
992
|
|
|
990
993
|
/**
|
|
@@ -993,7 +996,7 @@ export function increment(tracked, block) {
|
|
|
993
996
|
* @returns {void}
|
|
994
997
|
*/
|
|
995
998
|
export function decrement(tracked, block) {
|
|
996
|
-
|
|
999
|
+
set(tracked, tracked.v - 1, block);
|
|
997
1000
|
}
|
|
998
1001
|
|
|
999
1002
|
/**
|
|
@@ -1003,18 +1006,18 @@ export function decrement(tracked, block) {
|
|
|
1003
1006
|
* @returns {number}
|
|
1004
1007
|
*/
|
|
1005
1008
|
export function update_pre(tracked, block, d = 1) {
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1009
|
+
var value = get(tracked);
|
|
1010
|
+
var new_value = d === 1 ? ++value : --value;
|
|
1011
|
+
set(tracked, new_value, block);
|
|
1012
|
+
return new_value;
|
|
1010
1013
|
}
|
|
1011
1014
|
|
|
1012
1015
|
export function update_property(obj, property, block, d = 1) {
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1016
|
+
var tracked = obj[property];
|
|
1017
|
+
var value = get(tracked);
|
|
1018
|
+
var new_value = d === 1 ? value++ : value++;
|
|
1019
|
+
set(tracked, value, block);
|
|
1020
|
+
return new_value;
|
|
1018
1021
|
}
|
|
1019
1022
|
|
|
1020
1023
|
/**
|
|
@@ -1025,34 +1028,34 @@ export function update_property(obj, property, block, d = 1) {
|
|
|
1025
1028
|
* @returns {number}
|
|
1026
1029
|
*/
|
|
1027
1030
|
export function old_update_property(obj, property, block, d = 1) {
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1031
|
+
var tracked_properties = obj[TRACKED_OBJECT];
|
|
1032
|
+
var tracked = tracked_properties?.[property];
|
|
1033
|
+
var tracked_exists = tracked !== undefined;
|
|
1034
|
+
var value = tracked_exists ? get(tracked) : obj[property];
|
|
1035
|
+
|
|
1036
|
+
if (d === 1) {
|
|
1037
|
+
value++;
|
|
1038
|
+
if (tracked_exists) {
|
|
1039
|
+
increment(tracked, block);
|
|
1040
|
+
}
|
|
1041
|
+
} else {
|
|
1042
|
+
value--;
|
|
1043
|
+
if (tracked_exists) {
|
|
1044
|
+
decrement(tracked, block);
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
obj[property] = value;
|
|
1049
|
+
|
|
1050
|
+
return value;
|
|
1048
1051
|
}
|
|
1049
1052
|
|
|
1050
1053
|
export function update_pre_property(obj, property, block, d = 1) {
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1054
|
+
var tracked = obj[property];
|
|
1055
|
+
var value = get(tracked);
|
|
1056
|
+
var new_value = d === 1 ? ++value : --value;
|
|
1057
|
+
set(tracked, new_value, block);
|
|
1058
|
+
return new_value;
|
|
1056
1059
|
}
|
|
1057
1060
|
|
|
1058
1061
|
/**
|
|
@@ -1063,26 +1066,26 @@ export function update_pre_property(obj, property, block, d = 1) {
|
|
|
1063
1066
|
* @returns {number}
|
|
1064
1067
|
*/
|
|
1065
1068
|
export function old_update_pre_property(obj, property, block, d = 1) {
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1069
|
+
var tracked_properties = obj[TRACKED_OBJECT];
|
|
1070
|
+
var tracked = tracked_properties?.[property];
|
|
1071
|
+
var tracked_exists = tracked !== undefined;
|
|
1072
|
+
var value = tracked_exists ? get(tracked) : obj[property];
|
|
1073
|
+
|
|
1074
|
+
if (d === 1) {
|
|
1075
|
+
++value;
|
|
1076
|
+
if (tracked_exists) {
|
|
1077
|
+
increment(tracked, block);
|
|
1078
|
+
}
|
|
1079
|
+
} else {
|
|
1080
|
+
--value;
|
|
1081
|
+
if (tracked_exists) {
|
|
1082
|
+
decrement(tracked, block);
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
obj[property] = value;
|
|
1087
|
+
|
|
1088
|
+
return value;
|
|
1086
1089
|
}
|
|
1087
1090
|
|
|
1088
1091
|
/**
|
|
@@ -1091,79 +1094,79 @@ export function old_update_pre_property(obj, property, block, d = 1) {
|
|
|
1091
1094
|
* @returns {any}
|
|
1092
1095
|
*/
|
|
1093
1096
|
export function structured_clone(val, options) {
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1097
|
+
if (typeof val === 'object' && val !== null) {
|
|
1098
|
+
var tracked_properties = val[TRACKED_OBJECT];
|
|
1099
|
+
if (tracked_properties !== undefined) {
|
|
1100
|
+
if (is_ripple_array(val)) {
|
|
1101
|
+
val.$length;
|
|
1102
|
+
}
|
|
1103
|
+
return structured_clone(object_values(val), options);
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1106
|
+
return original_structured_clone(val, options);
|
|
1104
1107
|
}
|
|
1105
1108
|
|
|
1106
1109
|
export function object_keys(obj) {
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1110
|
+
if (is_ripple_array(obj)) {
|
|
1111
|
+
obj.$length;
|
|
1112
|
+
}
|
|
1113
|
+
return original_object_keys(obj);
|
|
1111
1114
|
}
|
|
1112
1115
|
|
|
1113
1116
|
export function object_values(obj) {
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1117
|
+
var tracked_properties = obj[TRACKED_OBJECT];
|
|
1118
|
+
|
|
1119
|
+
if (tracked_properties === undefined) {
|
|
1120
|
+
return original_object_values(obj);
|
|
1121
|
+
}
|
|
1122
|
+
if (is_ripple_array(obj)) {
|
|
1123
|
+
obj.$length;
|
|
1124
|
+
}
|
|
1125
|
+
var keys = original_object_keys(obj);
|
|
1126
|
+
var values = [];
|
|
1127
|
+
|
|
1128
|
+
for (var i = 0; i < keys.length; i++) {
|
|
1129
|
+
values.push(old_get_property(obj, keys[i]));
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
return values;
|
|
1130
1133
|
}
|
|
1131
1134
|
|
|
1132
1135
|
export function object_entries(obj) {
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1136
|
+
var tracked_properties = obj[TRACKED_OBJECT];
|
|
1137
|
+
|
|
1138
|
+
if (tracked_properties === undefined) {
|
|
1139
|
+
return original_object_entries(obj);
|
|
1140
|
+
}
|
|
1141
|
+
if (is_ripple_array(obj)) {
|
|
1142
|
+
obj.$length;
|
|
1143
|
+
}
|
|
1144
|
+
var keys = original_object_keys(obj);
|
|
1145
|
+
var entries = [];
|
|
1146
|
+
|
|
1147
|
+
for (var i = 0; i < keys.length; i++) {
|
|
1148
|
+
var key = keys[i];
|
|
1149
|
+
entries.push([key, old_get_property(obj, key)]);
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
return entries;
|
|
1150
1153
|
}
|
|
1151
1154
|
|
|
1152
1155
|
export function spread_object(obj) {
|
|
1153
|
-
|
|
1156
|
+
var tracked_properties = obj[TRACKED_OBJECT];
|
|
1154
1157
|
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1158
|
+
if (tracked_properties === undefined) {
|
|
1159
|
+
return { ...obj };
|
|
1160
|
+
}
|
|
1161
|
+
var keys = original_object_keys(obj);
|
|
1162
|
+
var values = {};
|
|
1160
1163
|
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1164
|
+
for (var i = 0; i < keys.length; i++) {
|
|
1165
|
+
var key = keys[i];
|
|
1166
|
+
values[key] = old_get_property(obj, key);
|
|
1167
|
+
}
|
|
1165
1168
|
|
|
1166
|
-
|
|
1169
|
+
return values;
|
|
1167
1170
|
}
|
|
1168
1171
|
|
|
1169
1172
|
/**
|
|
@@ -1173,20 +1176,20 @@ export function spread_object(obj) {
|
|
|
1173
1176
|
* @returns {T}
|
|
1174
1177
|
*/
|
|
1175
1178
|
export function with_scope(block, fn) {
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1179
|
+
var previous_scope = active_scope;
|
|
1180
|
+
try {
|
|
1181
|
+
active_scope = block;
|
|
1182
|
+
return fn();
|
|
1183
|
+
} finally {
|
|
1184
|
+
active_scope = previous_scope;
|
|
1185
|
+
}
|
|
1183
1186
|
}
|
|
1184
1187
|
|
|
1185
1188
|
/**
|
|
1186
1189
|
* @returns {Block | null}
|
|
1187
1190
|
*/
|
|
1188
1191
|
export function scope() {
|
|
1189
|
-
|
|
1192
|
+
return active_scope;
|
|
1190
1193
|
}
|
|
1191
1194
|
|
|
1192
1195
|
/**
|
|
@@ -1194,49 +1197,49 @@ export function scope() {
|
|
|
1194
1197
|
* @returns {Block | never}
|
|
1195
1198
|
*/
|
|
1196
1199
|
export function safe_scope(err = 'Cannot access outside of a component context') {
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
+
if (active_scope === null) {
|
|
1201
|
+
throw new Error(err);
|
|
1202
|
+
}
|
|
1200
1203
|
|
|
1201
|
-
|
|
1204
|
+
return /** @type {Block} */ (active_scope);
|
|
1202
1205
|
}
|
|
1203
1206
|
|
|
1204
1207
|
export function push_component() {
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1208
|
+
var component = {
|
|
1209
|
+
c: null,
|
|
1210
|
+
e: null,
|
|
1211
|
+
m: false,
|
|
1212
|
+
p: active_component,
|
|
1213
|
+
};
|
|
1214
|
+
active_component = component;
|
|
1212
1215
|
}
|
|
1213
1216
|
|
|
1214
1217
|
export function pop_component() {
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1218
|
+
var component = /** @type {Component} */ (active_component);
|
|
1219
|
+
component.m = true;
|
|
1220
|
+
var effects = component.e;
|
|
1221
|
+
if (effects !== null) {
|
|
1222
|
+
var length = effects.length;
|
|
1223
|
+
for (var i = 0; i < length; i++) {
|
|
1224
|
+
var { b: block, fn, r: reaction } = effects[i];
|
|
1225
|
+
var previous_block = active_block;
|
|
1226
|
+
var previous_reaction = active_reaction;
|
|
1227
|
+
|
|
1228
|
+
try {
|
|
1229
|
+
active_block = block;
|
|
1230
|
+
active_reaction = reaction;
|
|
1231
|
+
effect(fn);
|
|
1232
|
+
} finally {
|
|
1233
|
+
active_block = previous_block;
|
|
1234
|
+
active_reaction = previous_reaction;
|
|
1235
|
+
}
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
active_component = component.p;
|
|
1236
1239
|
}
|
|
1237
1240
|
|
|
1238
1241
|
export function ref_prop() {
|
|
1239
|
-
|
|
1242
|
+
return Symbol(REF_PROP);
|
|
1240
1243
|
}
|
|
1241
1244
|
|
|
1242
1245
|
/**
|
|
@@ -1246,7 +1249,7 @@ export function ref_prop() {
|
|
|
1246
1249
|
* @returns {T}
|
|
1247
1250
|
*/
|
|
1248
1251
|
export function fallback(value, fallback) {
|
|
1249
|
-
|
|
1252
|
+
return value === undefined ? fallback : value;
|
|
1250
1253
|
}
|
|
1251
1254
|
|
|
1252
1255
|
/**
|
|
@@ -1255,10 +1258,10 @@ export function fallback(value, fallback) {
|
|
|
1255
1258
|
* @returns {Record<string, unknown>}
|
|
1256
1259
|
*/
|
|
1257
1260
|
export function exclude_from_object(obj, keys) {
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1261
|
+
obj = { ...obj };
|
|
1262
|
+
let key;
|
|
1263
|
+
for (key of keys) {
|
|
1264
|
+
delete obj[key];
|
|
1265
|
+
}
|
|
1266
|
+
return obj;
|
|
1264
1267
|
}
|