@pilates/core 1.1.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/algorithm/cache.d.ts +7 -19
- package/dist/algorithm/cache.d.ts.map +1 -1
- package/dist/algorithm/cache.js +31 -27
- package/dist/algorithm/cache.js.map +1 -1
- package/dist/algorithm/index.js +22 -14
- package/dist/algorithm/index.js.map +1 -1
- package/dist/algorithm/round.d.ts.map +1 -1
- package/dist/algorithm/round.js +19 -19
- package/dist/algorithm/round.js.map +1 -1
- package/dist/algorithm/spineless/classify.d.ts +47 -0
- package/dist/algorithm/spineless/classify.d.ts.map +1 -0
- package/dist/algorithm/spineless/classify.js +109 -0
- package/dist/algorithm/spineless/classify.js.map +1 -0
- package/dist/algorithm/spineless/field-id-pool.d.ts +28 -0
- package/dist/algorithm/spineless/field-id-pool.d.ts.map +1 -0
- package/dist/algorithm/spineless/field-id-pool.js +35 -0
- package/dist/algorithm/spineless/field-id-pool.js.map +1 -0
- package/dist/algorithm/spineless/flex-grammar.d.ts.map +1 -1
- package/dist/algorithm/spineless/flex-grammar.js +194 -58
- package/dist/algorithm/spineless/flex-grammar.js.map +1 -1
- package/dist/algorithm/spineless/grammar.d.ts +6 -0
- package/dist/algorithm/spineless/grammar.d.ts.map +1 -1
- package/dist/algorithm/spineless/grammar.js +2 -1
- package/dist/algorithm/spineless/grammar.js.map +1 -1
- package/dist/algorithm/spineless/layout.d.ts +52 -15
- package/dist/algorithm/spineless/layout.d.ts.map +1 -1
- package/dist/algorithm/spineless/layout.js +450 -312
- package/dist/algorithm/spineless/layout.js.map +1 -1
- package/dist/algorithm/spineless/order-maintenance.d.ts +9 -0
- package/dist/algorithm/spineless/order-maintenance.d.ts.map +1 -1
- package/dist/algorithm/spineless/order-maintenance.js +6 -0
- package/dist/algorithm/spineless/order-maintenance.js.map +1 -1
- package/dist/algorithm/spineless/runtime.d.ts +61 -8
- package/dist/algorithm/spineless/runtime.d.ts.map +1 -1
- package/dist/algorithm/spineless/runtime.js +201 -50
- package/dist/algorithm/spineless/runtime.js.map +1 -1
- package/dist/algorithm/spineless/style-dirty.d.ts +8 -6
- package/dist/algorithm/spineless/style-dirty.d.ts.map +1 -1
- package/dist/algorithm/spineless/style-dirty.js +10 -11
- package/dist/algorithm/spineless/style-dirty.js.map +1 -1
- package/dist/dirty-flags.d.ts +30 -0
- package/dist/dirty-flags.d.ts.map +1 -0
- package/dist/dirty-flags.js +35 -0
- package/dist/dirty-flags.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/layout-pool.d.ts +49 -0
- package/dist/layout-pool.d.ts.map +1 -0
- package/dist/layout-pool.js +75 -0
- package/dist/layout-pool.js.map +1 -0
- package/dist/node.d.ts +20 -3
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +63 -42
- package/dist/node.js.map +1 -1
- package/package.json +1 -1
|
@@ -84,22 +84,81 @@
|
|
|
84
84
|
*
|
|
85
85
|
* @internal
|
|
86
86
|
*/
|
|
87
|
+
import { fieldIdCount } from './field-id-pool.js';
|
|
87
88
|
import { BenderOrderMaintenance } from './order-maintenance.js';
|
|
88
89
|
import { OmPriorityQueue } from './priority-queue.js';
|
|
90
|
+
/**
|
|
91
|
+
* A `ReadFn` for zero-dependency rules — they declare no deps, so their
|
|
92
|
+
* `compute` must never call `read`. If one does, this throws (a grammar
|
|
93
|
+
* bug), mirroring the undeclared-dependency error in the normal path.
|
|
94
|
+
*/
|
|
95
|
+
const NEVER_READ = (dep) => {
|
|
96
|
+
throw new Error(`[spineless-runtime] a zero-dependency rule called read("${dep.name}") — it did not declare it as a dependency`);
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Cache of the declared-deps Set for each rule. Keyed by the rule object
|
|
100
|
+
* (FieldRule is immutable after creation); when a rule is replaced via
|
|
101
|
+
* `rebindRule`, the new rule object gets a fresh WeakMap miss — no manual
|
|
102
|
+
* invalidation needed.
|
|
103
|
+
*/
|
|
104
|
+
const depSetCache = new WeakMap();
|
|
89
105
|
/**
|
|
90
106
|
* @internal
|
|
91
107
|
*/
|
|
92
108
|
export class SpinelessRuntime {
|
|
93
|
-
grammar;
|
|
94
109
|
rootFields;
|
|
95
110
|
om;
|
|
96
111
|
pq;
|
|
97
|
-
/**
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
112
|
+
/**
|
|
113
|
+
* External Grammar map reference — kept so that callers holding the
|
|
114
|
+
* same map reference (e.g. layout.ts's `output.grammar`) see mutations
|
|
115
|
+
* made by `graft` / `rebindRule` / `detach`. All internal HOT-PATH
|
|
116
|
+
* reads use `rulesArr` (O(1) array index) instead.
|
|
117
|
+
*/
|
|
118
|
+
grammar;
|
|
119
|
+
/**
|
|
120
|
+
* Field rules indexed by field.id — the fast-path mirror of `grammar`.
|
|
121
|
+
* Updated in lockstep with every `grammar.set` / `grammar.delete`.
|
|
122
|
+
* Plain array; auto-grows on out-of-range assignment (JS semantics).
|
|
123
|
+
*/
|
|
124
|
+
rulesArr = [];
|
|
125
|
+
/**
|
|
126
|
+
* Fast path: numeric field values indexed by field.id.
|
|
127
|
+
* valuePresent[id] === 1 means the value is stored here as a number.
|
|
128
|
+
*/
|
|
129
|
+
valuesArr;
|
|
130
|
+
/**
|
|
131
|
+
* Presence / storage-kind bitset, indexed by field.id:
|
|
132
|
+
* 0 = absent (not yet computed or detached)
|
|
133
|
+
* 1 = computed, value is a number stored in valuesArr[id]
|
|
134
|
+
* 2 = computed, value is a non-number object stored in valuesMap
|
|
135
|
+
*/
|
|
136
|
+
valuePresent;
|
|
137
|
+
/**
|
|
138
|
+
* Fallback for non-number field values (e.g. Field<MainAxisDistribution>).
|
|
139
|
+
* Only populated when valuePresent[id] === 2.
|
|
140
|
+
*/
|
|
141
|
+
valuesMap = new Map();
|
|
142
|
+
/**
|
|
143
|
+
* OM nodes indexed by field.id — replaces the former `omNodes: Map<Field, OMNode>`.
|
|
144
|
+
* Plain array; auto-grows on out-of-range assignment (JS semantics).
|
|
145
|
+
* undefined slot = field not integrated (or detached).
|
|
146
|
+
*/
|
|
147
|
+
omNodesArr = [];
|
|
148
|
+
/**
|
|
149
|
+
* Authoritative list of all fields ever registered with this runtime
|
|
150
|
+
* (in integration order). Used for iteration in `markAllDirty` — slots
|
|
151
|
+
* whose `omNodesArr[field.id]` is `undefined` (detached) are skipped.
|
|
152
|
+
* Dead entries are never removed; the skip is O(1) per slot.
|
|
153
|
+
*/
|
|
154
|
+
fieldRoster = [];
|
|
155
|
+
/**
|
|
156
|
+
* Reverse-dependency lists indexed by field.id — replaces the former
|
|
157
|
+
* `dependents: Map<Field, Field[]>`. `dependentsArr[id]` is the array
|
|
158
|
+
* of fields that read field-id. undefined = no dependents recorded yet
|
|
159
|
+
* (or field detached). Plain array; auto-grows on assignment.
|
|
160
|
+
*/
|
|
161
|
+
dependentsArr = [];
|
|
103
162
|
/** The OM node at the topological tail — where `graft` appends. */
|
|
104
163
|
lastOm = null;
|
|
105
164
|
initDone = false;
|
|
@@ -123,6 +182,33 @@ export class SpinelessRuntime {
|
|
|
123
182
|
this.rootFields = rootFields;
|
|
124
183
|
this.om = om;
|
|
125
184
|
this.pq = new OmPriorityQueue(om);
|
|
185
|
+
// Mirror the public Grammar map into rulesArr (indexed by field.id)
|
|
186
|
+
// so the hot path can do O(1) array reads instead of Map lookups.
|
|
187
|
+
for (const [f, rule] of grammar) {
|
|
188
|
+
this.rulesArr[f.id] = rule;
|
|
189
|
+
}
|
|
190
|
+
// Initialise value arrays to cover all IDs allocated so far.
|
|
191
|
+
// ensureFieldCapacity() grows them on demand as new fields arrive.
|
|
192
|
+
const initialCap = Math.max(fieldIdCount(), 1024);
|
|
193
|
+
this.valuesArr = new Float64Array(initialCap);
|
|
194
|
+
this.valuePresent = new Uint8Array(initialCap);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Grow `valuesArr` and `valuePresent` so that `id` is a valid index.
|
|
198
|
+
* Doubles capacity until sufficient, copying forward (LayoutPool pattern).
|
|
199
|
+
*/
|
|
200
|
+
ensureFieldCapacity(id) {
|
|
201
|
+
if (id < this.valuesArr.length)
|
|
202
|
+
return;
|
|
203
|
+
let cap = this.valuesArr.length;
|
|
204
|
+
while (id >= cap)
|
|
205
|
+
cap *= 2;
|
|
206
|
+
const newArr = new Float64Array(cap);
|
|
207
|
+
const newPresent = new Uint8Array(cap);
|
|
208
|
+
newArr.set(this.valuesArr);
|
|
209
|
+
newPresent.set(this.valuePresent);
|
|
210
|
+
this.valuesArr = newArr;
|
|
211
|
+
this.valuePresent = newPresent;
|
|
126
212
|
}
|
|
127
213
|
/**
|
|
128
214
|
* Walk the grammar in topological order, allocate an OM node per
|
|
@@ -154,9 +240,10 @@ export class SpinelessRuntime {
|
|
|
154
240
|
throw new Error('[spineless-runtime] graft called before init()');
|
|
155
241
|
}
|
|
156
242
|
for (const [f, rule] of additions) {
|
|
157
|
-
if (this.
|
|
243
|
+
if (this.omNodesArr[f.id] !== undefined) {
|
|
158
244
|
throw new Error(`[spineless-runtime] graft: field "${f.name}" already exists — graft integrates NEW fields only`);
|
|
159
245
|
}
|
|
246
|
+
this.rulesArr[f.id] = rule;
|
|
160
247
|
this.grammar.set(f, rule);
|
|
161
248
|
}
|
|
162
249
|
this.integrate(newRoots);
|
|
@@ -183,6 +270,11 @@ export class SpinelessRuntime {
|
|
|
183
270
|
* That makes the caller's removed set just the subtree's own
|
|
184
271
|
* fields — orphan input fields, e.g. the previous last child's
|
|
185
272
|
* now-unread main-end margin, need not be enumerated.
|
|
273
|
+
*
|
|
274
|
+
* @returns The set of every field actually removed — both the
|
|
275
|
+
* explicit `fields` argument AND any orphan-cleaned surviving deps.
|
|
276
|
+
* Callers can use this to maintain a `Set<Field>` index in O(|dropped|)
|
|
277
|
+
* rather than scanning all tracked fields.
|
|
186
278
|
*/
|
|
187
279
|
detach(fields) {
|
|
188
280
|
if (!this.initDone) {
|
|
@@ -192,7 +284,7 @@ export class SpinelessRuntime {
|
|
|
192
284
|
// Precondition: the removed set must be closed under "is read by"
|
|
193
285
|
// — no surviving field may depend on a removed one.
|
|
194
286
|
for (const f of removing) {
|
|
195
|
-
const revs = this.
|
|
287
|
+
const revs = this.dependentsArr[f.id];
|
|
196
288
|
if (revs === undefined)
|
|
197
289
|
continue;
|
|
198
290
|
for (const d of revs) {
|
|
@@ -204,22 +296,31 @@ export class SpinelessRuntime {
|
|
|
204
296
|
// Surviving fields the removed set read — candidates for orphan
|
|
205
297
|
// cleanup once their reverse-dependency lists are pruned.
|
|
206
298
|
const survivingDeps = new Set();
|
|
299
|
+
const dropped = new Set();
|
|
300
|
+
const removedOmNodes = new Set();
|
|
207
301
|
const drop = (f) => {
|
|
208
|
-
|
|
209
|
-
|
|
302
|
+
dropped.add(f);
|
|
303
|
+
const omNode = this.omNodesArr[f.id];
|
|
304
|
+
if (omNode !== undefined) {
|
|
210
305
|
this.om.delete(omNode);
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
this.
|
|
306
|
+
removedOmNodes.add(omNode);
|
|
307
|
+
}
|
|
308
|
+
this.omNodesArr[f.id] = undefined;
|
|
309
|
+
if (f.id < this.valuePresent.length && this.valuePresent[f.id] === 2) {
|
|
310
|
+
this.valuesMap.delete(f);
|
|
311
|
+
}
|
|
312
|
+
this.valuePresent[f.id] = 0;
|
|
313
|
+
this.dependentsArr[f.id] = undefined;
|
|
314
|
+
this.rulesArr[f.id] = undefined;
|
|
214
315
|
this.grammar.delete(f);
|
|
215
316
|
};
|
|
216
317
|
for (const f of removing) {
|
|
217
318
|
// Prune `f` from the reverse-dependency list of each field it
|
|
218
319
|
// read (a surviving dep must forget this removed dependent).
|
|
219
|
-
const rule = this.
|
|
320
|
+
const rule = this.rulesArr[f.id];
|
|
220
321
|
if (rule !== undefined) {
|
|
221
322
|
for (const dep of rule.deps) {
|
|
222
|
-
const revs = this.
|
|
323
|
+
const revs = this.dependentsArr[dep.id];
|
|
223
324
|
if (revs !== undefined) {
|
|
224
325
|
const i = revs.indexOf(f);
|
|
225
326
|
if (i !== -1)
|
|
@@ -234,22 +335,25 @@ export class SpinelessRuntime {
|
|
|
234
335
|
// Orphan cleanup: a surviving dep with no dependents left, whose
|
|
235
336
|
// own rule is a leaf (no dependencies), is now dead weight.
|
|
236
337
|
for (const dep of survivingDeps) {
|
|
237
|
-
const revs = this.
|
|
338
|
+
const revs = this.dependentsArr[dep.id];
|
|
238
339
|
if (revs !== undefined && revs.length > 0)
|
|
239
340
|
continue;
|
|
240
|
-
const rule = this.
|
|
341
|
+
const rule = this.rulesArr[dep.id];
|
|
241
342
|
if (rule === undefined || rule.deps.length > 0)
|
|
242
343
|
continue;
|
|
243
344
|
drop(dep);
|
|
244
345
|
}
|
|
245
|
-
// The OM tail may have been among the removed fields
|
|
246
|
-
//
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
346
|
+
// The OM tail may have been among the removed fields. If so, walk
|
|
347
|
+
// back through predecessors (skipping just-removed nodes) to find
|
|
348
|
+
// the new tail — O(removed) instead of O(total live nodes).
|
|
349
|
+
if (this.lastOm !== null && removedOmNodes.has(this.lastOm)) {
|
|
350
|
+
let candidate = this.lastOm;
|
|
351
|
+
while (candidate !== null && removedOmNodes.has(candidate)) {
|
|
352
|
+
candidate = this.om.predecessor(candidate);
|
|
251
353
|
}
|
|
354
|
+
this.lastOm = candidate;
|
|
252
355
|
}
|
|
356
|
+
return dropped;
|
|
253
357
|
}
|
|
254
358
|
/**
|
|
255
359
|
* Replace the rule of an already-integrated field (phase 5c) — for
|
|
@@ -271,17 +375,17 @@ export class SpinelessRuntime {
|
|
|
271
375
|
if (!this.initDone) {
|
|
272
376
|
throw new Error('[spineless-runtime] rebindRule called before init()');
|
|
273
377
|
}
|
|
274
|
-
if (
|
|
378
|
+
if (this.omNodesArr[field.id] === undefined) {
|
|
275
379
|
throw new Error(`[spineless-runtime] rebindRule: field "${field.name}" is not in this runtime`);
|
|
276
380
|
}
|
|
277
|
-
const oldRule = this.
|
|
381
|
+
const oldRule = this.rulesArr[field.id];
|
|
278
382
|
const oldDeps = new Set(oldRule?.deps ?? []);
|
|
279
383
|
const newDeps = new Set(newRule.deps);
|
|
280
384
|
// Deps no longer read: drop `field` from their dependents list.
|
|
281
385
|
for (const d of oldDeps) {
|
|
282
386
|
if (newDeps.has(d))
|
|
283
387
|
continue;
|
|
284
|
-
const revs = this.
|
|
388
|
+
const revs = this.dependentsArr[d.id];
|
|
285
389
|
if (revs !== undefined) {
|
|
286
390
|
const i = revs.indexOf(field);
|
|
287
391
|
if (i !== -1)
|
|
@@ -292,16 +396,17 @@ export class SpinelessRuntime {
|
|
|
292
396
|
for (const d of newDeps) {
|
|
293
397
|
if (oldDeps.has(d))
|
|
294
398
|
continue;
|
|
295
|
-
if (
|
|
399
|
+
if (this.omNodesArr[d.id] === undefined) {
|
|
296
400
|
throw new Error(`[spineless-runtime] rebindRule: new dependency "${d.name}" of "${field.name}" is not integrated`);
|
|
297
401
|
}
|
|
298
|
-
let revs = this.
|
|
402
|
+
let revs = this.dependentsArr[d.id];
|
|
299
403
|
if (revs === undefined) {
|
|
300
404
|
revs = [];
|
|
301
|
-
this.
|
|
405
|
+
this.dependentsArr[d.id] = revs;
|
|
302
406
|
}
|
|
303
407
|
revs.push(field);
|
|
304
408
|
}
|
|
409
|
+
this.rulesArr[field.id] = newRule;
|
|
305
410
|
this.grammar.set(field, newRule);
|
|
306
411
|
this.markDirty(field);
|
|
307
412
|
}
|
|
@@ -317,24 +422,24 @@ export class SpinelessRuntime {
|
|
|
317
422
|
const visiting = new Set();
|
|
318
423
|
const visit = (f) => {
|
|
319
424
|
// A field has an OM node exactly once it is integrated, so
|
|
320
|
-
//
|
|
321
|
-
// existing fields natural boundaries during a graft.
|
|
322
|
-
if (this.
|
|
425
|
+
// the omNodesArr slot doubles as the "already done" marker — which
|
|
426
|
+
// makes existing fields natural boundaries during a graft.
|
|
427
|
+
if (this.omNodesArr[f.id] !== undefined)
|
|
323
428
|
return;
|
|
324
429
|
if (visiting.has(f)) {
|
|
325
430
|
throw new Error(`[spineless-runtime] cycle detected: field "${f.name}" depends on itself transitively`);
|
|
326
431
|
}
|
|
327
432
|
visiting.add(f);
|
|
328
|
-
const rule = this.
|
|
433
|
+
const rule = this.rulesArr[f.id];
|
|
329
434
|
if (rule === undefined) {
|
|
330
435
|
throw new Error(`[spineless-runtime] no rule for field "${f.name}". Register it in the grammar or remove the dep edge.`);
|
|
331
436
|
}
|
|
332
437
|
for (const dep of rule.deps) {
|
|
333
438
|
visit(dep);
|
|
334
|
-
let revs = this.
|
|
439
|
+
let revs = this.dependentsArr[dep.id];
|
|
335
440
|
if (revs === undefined) {
|
|
336
441
|
revs = [];
|
|
337
|
-
this.
|
|
442
|
+
this.dependentsArr[dep.id] = revs;
|
|
338
443
|
}
|
|
339
444
|
revs.push(f);
|
|
340
445
|
}
|
|
@@ -342,10 +447,20 @@ export class SpinelessRuntime {
|
|
|
342
447
|
// before the very first field, then chains insertAfter.
|
|
343
448
|
const omNode = this.lastOm === null ? this.om.init() : this.om.insertAfter(this.lastOm);
|
|
344
449
|
this.lastOm = omNode;
|
|
345
|
-
this.
|
|
450
|
+
this.omNodesArr[f.id] = omNode;
|
|
451
|
+
this.fieldRoster.push(f);
|
|
346
452
|
this.stats.initFields++;
|
|
347
453
|
// Compute and cache.
|
|
348
|
-
this.
|
|
454
|
+
this.ensureFieldCapacity(f.id);
|
|
455
|
+
const initVal = this.runCompute(f, rule);
|
|
456
|
+
if (typeof initVal === 'number') {
|
|
457
|
+
this.valuesArr[f.id] = initVal;
|
|
458
|
+
this.valuePresent[f.id] = 1;
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
this.valuesMap.set(f, initVal);
|
|
462
|
+
this.valuePresent[f.id] = 2;
|
|
463
|
+
}
|
|
349
464
|
visiting.delete(f);
|
|
350
465
|
};
|
|
351
466
|
for (const root of roots)
|
|
@@ -357,10 +472,14 @@ export class SpinelessRuntime {
|
|
|
357
472
|
* exists).
|
|
358
473
|
*/
|
|
359
474
|
evaluate(field) {
|
|
360
|
-
|
|
475
|
+
const id = field.id;
|
|
476
|
+
const kind = id < this.valuePresent.length ? this.valuePresent[id] : 0;
|
|
477
|
+
if (kind === 0) {
|
|
361
478
|
throw new Error(`[spineless-runtime] field "${field.name}" was not computed in init() — it isn't reachable from any root`);
|
|
362
479
|
}
|
|
363
|
-
|
|
480
|
+
if (kind === 1)
|
|
481
|
+
return this.valuesArr[id];
|
|
482
|
+
return this.valuesMap.get(field);
|
|
364
483
|
}
|
|
365
484
|
/**
|
|
366
485
|
* Whether `field` is currently tracked by the runtime — integrated
|
|
@@ -369,7 +488,7 @@ export class SpinelessRuntime {
|
|
|
369
488
|
* this before `markDirty`.
|
|
370
489
|
*/
|
|
371
490
|
isTracked(field) {
|
|
372
|
-
return this.
|
|
491
|
+
return this.omNodesArr[field.id] !== undefined;
|
|
373
492
|
}
|
|
374
493
|
/**
|
|
375
494
|
* Mark every field tracked by this runtime as dirty. Useful as an
|
|
@@ -384,7 +503,10 @@ export class SpinelessRuntime {
|
|
|
384
503
|
if (!this.initDone) {
|
|
385
504
|
throw new Error('[spineless-runtime] markAllDirty called before init()');
|
|
386
505
|
}
|
|
387
|
-
for (const
|
|
506
|
+
for (const field of this.fieldRoster) {
|
|
507
|
+
const omNode = this.omNodesArr[field.id];
|
|
508
|
+
if (omNode === undefined)
|
|
509
|
+
continue; // detached — skip
|
|
388
510
|
this.pq.push(field, omNode);
|
|
389
511
|
}
|
|
390
512
|
}
|
|
@@ -400,7 +522,7 @@ export class SpinelessRuntime {
|
|
|
400
522
|
if (!this.initDone) {
|
|
401
523
|
throw new Error('[spineless-runtime] markDirty called before init()');
|
|
402
524
|
}
|
|
403
|
-
const om = this.
|
|
525
|
+
const om = this.omNodesArr[field.id];
|
|
404
526
|
if (om === undefined) {
|
|
405
527
|
throw new Error(`[spineless-runtime] field "${field.name}" is not in this runtime — call markDirty only on fields reachable from a root at init`);
|
|
406
528
|
}
|
|
@@ -426,17 +548,28 @@ export class SpinelessRuntime {
|
|
|
426
548
|
const f = this.pq.popMin();
|
|
427
549
|
this.stats.recomputeVisited++;
|
|
428
550
|
this.stats.totalVisited++;
|
|
429
|
-
const rule = this.
|
|
430
|
-
const
|
|
551
|
+
const rule = this.rulesArr[f.id];
|
|
552
|
+
const id = f.id;
|
|
553
|
+
const kind = this.valuePresent[id];
|
|
554
|
+
const prev = kind === 1 ? this.valuesArr[id] : this.valuesMap.get(f);
|
|
431
555
|
const next = this.runCompute(f, rule);
|
|
432
556
|
if (!Object.is(prev, next)) {
|
|
433
|
-
|
|
557
|
+
if (typeof next === 'number') {
|
|
558
|
+
this.valuesArr[id] = next;
|
|
559
|
+
this.valuePresent[id] = 1;
|
|
560
|
+
if (kind === 2)
|
|
561
|
+
this.valuesMap.delete(f);
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
this.valuesMap.set(f, next);
|
|
565
|
+
this.valuePresent[id] = 2;
|
|
566
|
+
}
|
|
434
567
|
this.stats.recomputeChanged++;
|
|
435
568
|
changed.push(f);
|
|
436
|
-
const deps = this.
|
|
569
|
+
const deps = this.dependentsArr[f.id];
|
|
437
570
|
if (deps !== undefined) {
|
|
438
571
|
for (const d of deps) {
|
|
439
|
-
const om = this.
|
|
572
|
+
const om = this.omNodesArr[d.id];
|
|
440
573
|
this.pq.push(d, om);
|
|
441
574
|
}
|
|
442
575
|
}
|
|
@@ -445,12 +578,30 @@ export class SpinelessRuntime {
|
|
|
445
578
|
return changed;
|
|
446
579
|
}
|
|
447
580
|
runCompute(field, rule) {
|
|
448
|
-
|
|
581
|
+
// Zero-dep fields (leaf inputs, constants) can't read anything —
|
|
582
|
+
// skip the per-compute Set allocation + validating closure.
|
|
583
|
+
if (rule.deps.length === 0) {
|
|
584
|
+
return rule.compute(NEVER_READ);
|
|
585
|
+
}
|
|
586
|
+
// Look up the cached declared-deps Set for this rule object.
|
|
587
|
+
// Build and store on first call; reuse on every subsequent call.
|
|
588
|
+
// `rebindRule` installs a NEW rule object → WeakMap miss → fresh Set.
|
|
589
|
+
// No manual invalidation needed.
|
|
590
|
+
const ruleAsUnknown = rule;
|
|
591
|
+
let declaredDeps = depSetCache.get(ruleAsUnknown);
|
|
592
|
+
if (declaredDeps === undefined) {
|
|
593
|
+
declaredDeps = new Set(rule.deps);
|
|
594
|
+
depSetCache.set(ruleAsUnknown, declaredDeps);
|
|
595
|
+
}
|
|
449
596
|
const read = (dep) => {
|
|
450
597
|
if (!declaredDeps.has(dep)) {
|
|
451
598
|
throw new Error(`[spineless-runtime] rule for "${field.name}" reads "${dep.name}" but did not declare it as a dependency`);
|
|
452
599
|
}
|
|
453
|
-
|
|
600
|
+
const depId = dep.id;
|
|
601
|
+
const depKind = this.valuePresent[depId];
|
|
602
|
+
if (depKind === 1)
|
|
603
|
+
return this.valuesArr[depId];
|
|
604
|
+
return this.valuesMap.get(dep);
|
|
454
605
|
};
|
|
455
606
|
return rule.compute(read);
|
|
456
607
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/algorithm/spineless/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/algorithm/spineless/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,12 +52,14 @@ export interface StyleDirtier {
|
|
|
52
52
|
* `buildFlexGrammar` output that produced its grammar into a
|
|
53
53
|
* `StyleDirtier`.
|
|
54
54
|
*
|
|
55
|
-
* The returned callback
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
55
|
+
* The returned callback is a no-op when the grammar emits no input
|
|
56
|
+
* Field for the `(node, prop)` — including the case where the grammar
|
|
57
|
+
* emits no input Field at all for `node` (every style input folded to
|
|
58
|
+
* a default-valued constant by phase 17; the `styleInputs` map then
|
|
59
|
+
* has no entry for the node). In all these cases, marking nothing is
|
|
60
|
+
* the correct precise behaviour because no layout field can move from
|
|
61
|
+
* the mutation. The callback throws only if an edge prop is called
|
|
62
|
+
* without an edge index.
|
|
61
63
|
*
|
|
62
64
|
* @internal
|
|
63
65
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style-dirty.d.ts","sourceRoot":"","sources":["../../../src/algorithm/spineless/style-dirty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,qDAAqD;AACrD,MAAM,MAAM,eAAe,GACvB,OAAO,GACP,QAAQ,GACR,WAAW,GACX,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,WAAW,GACX,UAAU,GACV,WAAW,GACX,UAAU,GACV,WAAW,CAAC;AAEhB,mEAAmE;AACnE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IAC1C,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvD;AAED
|
|
1
|
+
{"version":3,"file":"style-dirty.d.ts","sourceRoot":"","sources":["../../../src/algorithm/spineless/style-dirty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,qDAAqD;AACrD,MAAM,MAAM,eAAe,GACvB,OAAO,GACP,QAAQ,GACR,WAAW,GACX,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,WAAW,GACX,UAAU,GACV,WAAW,GACX,UAAU,GACV,WAAW,CAAC;AAEhB,mEAAmE;AACnE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IAC1C,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,GAC1C,YAAY,CAyBd"}
|
|
@@ -35,30 +35,29 @@
|
|
|
35
35
|
* `buildFlexGrammar` output that produced its grammar into a
|
|
36
36
|
* `StyleDirtier`.
|
|
37
37
|
*
|
|
38
|
-
* The returned callback
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
38
|
+
* The returned callback is a no-op when the grammar emits no input
|
|
39
|
+
* Field for the `(node, prop)` — including the case where the grammar
|
|
40
|
+
* emits no input Field at all for `node` (every style input folded to
|
|
41
|
+
* a default-valued constant by phase 17; the `styleInputs` map then
|
|
42
|
+
* has no entry for the node). In all these cases, marking nothing is
|
|
43
|
+
* the correct precise behaviour because no layout field can move from
|
|
44
|
+
* the mutation. The callback throws only if an edge prop is called
|
|
45
|
+
* without an edge index.
|
|
44
46
|
*
|
|
45
47
|
* @internal
|
|
46
48
|
*/
|
|
47
49
|
export function createStyleDirtier(runtime, styleInputs) {
|
|
48
50
|
return (node, prop, edge) => {
|
|
49
51
|
const entry = styleInputs.get(node);
|
|
50
|
-
if (entry === undefined) {
|
|
51
|
-
throw new Error('[spineless] markStyleDirty: node has no style inputs in this grammar — pass a node from the same buildFlexGrammar() tree');
|
|
52
|
-
}
|
|
53
52
|
let f;
|
|
54
53
|
if (prop === 'padding' || prop === 'margin') {
|
|
55
54
|
if (edge === undefined) {
|
|
56
55
|
throw new Error(`[spineless] markStyleDirty: '${prop}' requires an edge index`);
|
|
57
56
|
}
|
|
58
|
-
f = entry[prop]?.[edge];
|
|
57
|
+
f = entry?.[prop]?.[edge];
|
|
59
58
|
}
|
|
60
59
|
else {
|
|
61
|
-
f = entry[prop];
|
|
60
|
+
f = entry?.[prop];
|
|
62
61
|
}
|
|
63
62
|
// Marking nothing is the correct, precise behaviour when the
|
|
64
63
|
// mutation cannot move any layout field. That is the case both
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style-dirty.js","sourceRoot":"","sources":["../../../src/algorithm/spineless/style-dirty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAmCH
|
|
1
|
+
{"version":3,"file":"style-dirty.js","sourceRoot":"","sources":["../../../src/algorithm/spineless/style-dirty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAmCH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAyB,EACzB,WAA2C;IAE3C,OAAO,CAAC,IAAU,EAAE,IAAqC,EAAE,IAAa,EAAQ,EAAE;QAChF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAA4B,CAAC;QACjC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,0BAA0B,CAAC,CAAC;YAClF,CAAC;YACD,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,6DAA6D;QAC7D,+DAA+D;QAC/D,+DAA+D;QAC/D,+DAA+D;QAC/D,6DAA6D;QAC7D,8DAA8D;QAC9D,qDAAqD;QACrD,IAAI,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAmB,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,SAAS,CAAC,CAAmB,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-property dirty bits. Each mutation on a `Node` marks specific
|
|
3
|
+
* flags rather than a generic boolean. Cache layers and incremental
|
|
4
|
+
* engines consume these to skip invalidation when their inputs
|
|
5
|
+
* didn't actually change.
|
|
6
|
+
*
|
|
7
|
+
* The flag set is intentionally small (one word fits in V8's SMI
|
|
8
|
+
* representation); broad enough to cover every public Node setter
|
|
9
|
+
* but no broader.
|
|
10
|
+
*
|
|
11
|
+
* Used by `Node._dirtyFlags`, `Node.markDirtyFlag()`, and the cache
|
|
12
|
+
* + incremental layers consuming these flags in subsequent phases.
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
/** Layout-shape mutations (flexDirection, wrap, justify, align, display, ...). */
|
|
17
|
+
export declare const DIRTY_STYLE_SIG: number;
|
|
18
|
+
/** Explicit-dimension values (width, height, margin, padding, border, position). */
|
|
19
|
+
export declare const DIRTY_STYLE_VALUE: number;
|
|
20
|
+
/** Flex-distribution parameters (flexGrow, flexShrink, flexBasis). */
|
|
21
|
+
export declare const DIRTY_FLEX_DISTRIBUTION: number;
|
|
22
|
+
/** Measure function attached or detached. */
|
|
23
|
+
export declare const DIRTY_MEASURE: number;
|
|
24
|
+
/** Manual measure-cache invalidation (consumer-driven). */
|
|
25
|
+
export declare const DIRTY_MEASURE_CONTENT: number;
|
|
26
|
+
/** Children list mutation (insert / remove / reorder). */
|
|
27
|
+
export declare const DIRTY_CHILDREN: number;
|
|
28
|
+
/** All flags ORed together. Used by back-compat `markDirty()`. */
|
|
29
|
+
export declare const DIRTY_ANY: number;
|
|
30
|
+
//# sourceMappingURL=dirty-flags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dirty-flags.d.ts","sourceRoot":"","sources":["../src/dirty-flags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,kFAAkF;AAClF,eAAO,MAAM,eAAe,QAAS,CAAC;AAEtC,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,6CAA6C;AAC7C,eAAO,MAAM,aAAa,QAAS,CAAC;AAEpC,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C,0DAA0D;AAC1D,eAAO,MAAM,cAAc,QAAS,CAAC;AAErC,kEAAkE;AAClE,eAAO,MAAM,SAAS,QAMN,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-property dirty bits. Each mutation on a `Node` marks specific
|
|
3
|
+
* flags rather than a generic boolean. Cache layers and incremental
|
|
4
|
+
* engines consume these to skip invalidation when their inputs
|
|
5
|
+
* didn't actually change.
|
|
6
|
+
*
|
|
7
|
+
* The flag set is intentionally small (one word fits in V8's SMI
|
|
8
|
+
* representation); broad enough to cover every public Node setter
|
|
9
|
+
* but no broader.
|
|
10
|
+
*
|
|
11
|
+
* Used by `Node._dirtyFlags`, `Node.markDirtyFlag()`, and the cache
|
|
12
|
+
* + incremental layers consuming these flags in subsequent phases.
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
/** Layout-shape mutations (flexDirection, wrap, justify, align, display, ...). */
|
|
17
|
+
export const DIRTY_STYLE_SIG = 1 << 0;
|
|
18
|
+
/** Explicit-dimension values (width, height, margin, padding, border, position). */
|
|
19
|
+
export const DIRTY_STYLE_VALUE = 1 << 1;
|
|
20
|
+
/** Flex-distribution parameters (flexGrow, flexShrink, flexBasis). */
|
|
21
|
+
export const DIRTY_FLEX_DISTRIBUTION = 1 << 2;
|
|
22
|
+
/** Measure function attached or detached. */
|
|
23
|
+
export const DIRTY_MEASURE = 1 << 3;
|
|
24
|
+
/** Manual measure-cache invalidation (consumer-driven). */
|
|
25
|
+
export const DIRTY_MEASURE_CONTENT = 1 << 4;
|
|
26
|
+
/** Children list mutation (insert / remove / reorder). */
|
|
27
|
+
export const DIRTY_CHILDREN = 1 << 5;
|
|
28
|
+
/** All flags ORed together. Used by back-compat `markDirty()`. */
|
|
29
|
+
export const DIRTY_ANY = DIRTY_STYLE_SIG |
|
|
30
|
+
DIRTY_STYLE_VALUE |
|
|
31
|
+
DIRTY_FLEX_DISTRIBUTION |
|
|
32
|
+
DIRTY_MEASURE |
|
|
33
|
+
DIRTY_MEASURE_CONTENT |
|
|
34
|
+
DIRTY_CHILDREN;
|
|
35
|
+
//# sourceMappingURL=dirty-flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dirty-flags.js","sourceRoot":"","sources":["../src/dirty-flags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,CAAC;AAEtC,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,CAAC;AAExC,sEAAsE;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAI,CAAC,CAAC;AAE9C,6CAA6C;AAC7C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC;AAEpC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAI,CAAC,CAAC;AAE5C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC;AAErC,kEAAkE;AAClE,MAAM,CAAC,MAAM,SAAS,GACpB,eAAe;IACf,iBAAiB;IACjB,uBAAuB;IACvB,aAAa;IACb,qBAAqB;IACrB,cAAc,CAAC"}
|