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