@pilates/core 1.1.0 → 2.0.0

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.
Files changed (53) hide show
  1. package/dist/algorithm/cache.d.ts +7 -19
  2. package/dist/algorithm/cache.d.ts.map +1 -1
  3. package/dist/algorithm/cache.js +31 -27
  4. package/dist/algorithm/cache.js.map +1 -1
  5. package/dist/algorithm/index.js +22 -14
  6. package/dist/algorithm/index.js.map +1 -1
  7. package/dist/algorithm/round.d.ts.map +1 -1
  8. package/dist/algorithm/round.js +19 -19
  9. package/dist/algorithm/round.js.map +1 -1
  10. package/dist/algorithm/spineless/classify.d.ts +47 -0
  11. package/dist/algorithm/spineless/classify.d.ts.map +1 -0
  12. package/dist/algorithm/spineless/classify.js +109 -0
  13. package/dist/algorithm/spineless/classify.js.map +1 -0
  14. package/dist/algorithm/spineless/field-id-pool.d.ts +28 -0
  15. package/dist/algorithm/spineless/field-id-pool.d.ts.map +1 -0
  16. package/dist/algorithm/spineless/field-id-pool.js +35 -0
  17. package/dist/algorithm/spineless/field-id-pool.js.map +1 -0
  18. package/dist/algorithm/spineless/flex-grammar.d.ts.map +1 -1
  19. package/dist/algorithm/spineless/flex-grammar.js +194 -58
  20. package/dist/algorithm/spineless/flex-grammar.js.map +1 -1
  21. package/dist/algorithm/spineless/grammar.d.ts +6 -0
  22. package/dist/algorithm/spineless/grammar.d.ts.map +1 -1
  23. package/dist/algorithm/spineless/grammar.js +2 -1
  24. package/dist/algorithm/spineless/grammar.js.map +1 -1
  25. package/dist/algorithm/spineless/layout.d.ts +52 -15
  26. package/dist/algorithm/spineless/layout.d.ts.map +1 -1
  27. package/dist/algorithm/spineless/layout.js +450 -312
  28. package/dist/algorithm/spineless/layout.js.map +1 -1
  29. package/dist/algorithm/spineless/order-maintenance.d.ts +9 -0
  30. package/dist/algorithm/spineless/order-maintenance.d.ts.map +1 -1
  31. package/dist/algorithm/spineless/order-maintenance.js +6 -0
  32. package/dist/algorithm/spineless/order-maintenance.js.map +1 -1
  33. package/dist/algorithm/spineless/runtime.d.ts +61 -8
  34. package/dist/algorithm/spineless/runtime.d.ts.map +1 -1
  35. package/dist/algorithm/spineless/runtime.js +201 -50
  36. package/dist/algorithm/spineless/runtime.js.map +1 -1
  37. package/dist/dirty-flags.d.ts +30 -0
  38. package/dist/dirty-flags.d.ts.map +1 -0
  39. package/dist/dirty-flags.js +35 -0
  40. package/dist/dirty-flags.js.map +1 -0
  41. package/dist/index.d.ts +2 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +4 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/layout-pool.d.ts +49 -0
  46. package/dist/layout-pool.d.ts.map +1 -0
  47. package/dist/layout-pool.js +75 -0
  48. package/dist/layout-pool.js.map +1 -0
  49. package/dist/node.d.ts +20 -3
  50. package/dist/node.d.ts.map +1 -1
  51. package/dist/node.js +63 -42
  52. package/dist/node.js.map +1 -1
  53. 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
- /** field -> cached value */
98
- values = new Map();
99
- /** field -> its OM timestamp (allocated in topo order at init) */
100
- omNodes = new Map();
101
- /** field -> fields that read this field (reverse of `rule.deps`) */
102
- dependents = new Map();
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.omNodes.has(f)) {
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.dependents.get(f);
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
- const omNode = this.omNodes.get(f);
209
- if (omNode !== undefined)
302
+ dropped.add(f);
303
+ const omNode = this.omNodesArr[f.id];
304
+ if (omNode !== undefined) {
210
305
  this.om.delete(omNode);
211
- this.omNodes.delete(f);
212
- this.values.delete(f);
213
- this.dependents.delete(f);
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.grammar.get(f);
320
+ const rule = this.rulesArr[f.id];
220
321
  if (rule !== undefined) {
221
322
  for (const dep of rule.deps) {
222
- const revs = this.dependents.get(dep);
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.dependents.get(dep);
338
+ const revs = this.dependentsArr[dep.id];
238
339
  if (revs !== undefined && revs.length > 0)
239
340
  continue;
240
- const rule = this.grammar.get(dep);
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; recompute
246
- // it so a later `graft` still appends after every surviving node.
247
- this.lastOm = null;
248
- for (const omNode of this.omNodes.values()) {
249
- if (this.lastOm === null || this.om.compare(omNode, this.lastOm) > 0) {
250
- this.lastOm = omNode;
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 (!this.omNodes.has(field)) {
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.grammar.get(field);
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.dependents.get(d);
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 (!this.omNodes.has(d)) {
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.dependents.get(d);
402
+ let revs = this.dependentsArr[d.id];
299
403
  if (revs === undefined) {
300
404
  revs = [];
301
- this.dependents.set(d, revs);
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
- // `omNodes` doubles as the "already done" marker — which makes
321
- // existing fields natural boundaries during a graft.
322
- if (this.omNodes.has(f))
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.grammar.get(f);
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.dependents.get(dep);
439
+ let revs = this.dependentsArr[dep.id];
335
440
  if (revs === undefined) {
336
441
  revs = [];
337
- this.dependents.set(dep, revs);
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.omNodes.set(f, omNode);
450
+ this.omNodesArr[f.id] = omNode;
451
+ this.fieldRoster.push(f);
346
452
  this.stats.initFields++;
347
453
  // Compute and cache.
348
- this.values.set(f, this.runCompute(f, rule));
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
- if (!this.values.has(field)) {
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
- return this.values.get(field);
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.omNodes.has(field);
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 [field, omNode] of this.omNodes) {
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.omNodes.get(field);
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.grammar.get(f);
430
- const prev = this.values.get(f);
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
- this.values.set(f, next);
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.dependents.get(f);
569
+ const deps = this.dependentsArr[f.id];
437
570
  if (deps !== undefined) {
438
571
  for (const d of deps) {
439
- const om = this.omNodes.get(d);
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
- const declaredDeps = new Set(rule.deps);
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
- return this.values.get(dep);
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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"}
@@ -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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const VERSION = "1.1.0";
1
+ export declare const VERSION = "2.0.0";
2
2
  export { Node } from './node.js';
3
3
  export { Edge } from './edge.js';
4
4
  export type { Align, Display, FlexDirection, FlexWrap, Justify, Length, Overflow, PositionType, Style, } from './style.js';
@@ -6,6 +6,7 @@ export { MeasureMode } from './measure-func.js';
6
6
  export type { MeasureFunc, MeasureSize } from './measure-func.js';
7
7
  export type { ComputedLayout } from './layout.js';
8
8
  export { setLayoutProfiler, type LayoutProfiler, type LayoutTrace } from './algorithm/index.js';
9
+ export { DIRTY_ANY, DIRTY_CHILDREN, DIRTY_FLEX_DISTRIBUTION, DIRTY_MEASURE, DIRTY_MEASURE_CONTENT, DIRTY_STYLE_SIG, DIRTY_STYLE_VALUE, } from './dirty-flags.js';
9
10
  export { inspectLayout } from './inspect.js';
10
11
  export { cellWidth, graphemes, stringWidth, stripAnsi, type Grapheme } from './measure/index.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EACV,KAAK,EACL,OAAO,EACP,aAAa,EACb,QAAQ,EACR,OAAO,EACP,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,KAAK,GACN,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGlE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGhG,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EACV,KAAK,EACL,OAAO,EACP,aAAa,EACb,QAAQ,EACR,OAAO,EACP,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,KAAK,GACN,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGlE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIhG,OAAO,EACL,SAAS,EACT,cAAc,EACd,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export const VERSION = '1.1.0';
1
+ export const VERSION = '2.0.0';
2
2
  // Tree
3
3
  export { Node } from './node.js';
4
4
  // Style values
@@ -8,6 +8,9 @@ export { MeasureMode } from './measure-func.js';
8
8
  // Layout profiling — observe what the incremental engine did per
9
9
  // `calculateLayout` call (phase 9).
10
10
  export { setLayoutProfiler } from './algorithm/index.js';
11
+ // Per-property dirty flags (phase 15B). @internal — consumed by the
12
+ // algorithm + spineless layers; not part of the public API surface.
13
+ export { DIRTY_ANY, DIRTY_CHILDREN, DIRTY_FLEX_DISTRIBUTION, DIRTY_MEASURE, DIRTY_MEASURE_CONTENT, DIRTY_STYLE_SIG, DIRTY_STYLE_VALUE, } from './dirty-flags.js';
11
14
  // Layout inspection — a console dump of a computed-layout subtree.
12
15
  export { inspectLayout } from './inspect.js';
13
16
  // Text measurement (re-exported from the measure module so consumers can
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,OAAO;AACP,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,eAAe;AACf,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAajC,mBAAmB;AACnB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,iEAAiE;AACjE,oCAAoC;AACpC,OAAO,EAAE,iBAAiB,EAAyC,MAAM,sBAAsB,CAAC;AAEhG,mEAAmE;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,yEAAyE;AACzE,uDAAuD;AACvD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAiB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,OAAO;AACP,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,eAAe;AACf,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAajC,mBAAmB;AACnB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,iEAAiE;AACjE,oCAAoC;AACpC,OAAO,EAAE,iBAAiB,EAAyC,MAAM,sBAAsB,CAAC;AAEhG,oEAAoE;AACpE,oEAAoE;AACpE,OAAO,EACL,SAAS,EACT,cAAc,EACd,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,mEAAmE;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,yEAAyE;AACzE,uDAAuD;AACvD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAiB,MAAM,oBAAoB,CAAC"}