@markless/runtime 0.8.0 → 0.10.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.
@@ -99,56 +99,51 @@ function readComputedNode(computed, readGraph, path, reconcile) {
99
99
  }
100
100
  return readPath(computed.value, path);
101
101
  }
102
- function markComputedDirty(input) {
103
- if (input.visited.has(input.graphNodeId)) return;
104
- input.visited.add(input.graphNodeId);
105
- const computed = input.computedNodes.get(input.graphNodeId);
106
- if (!computed?.compute) return;
107
- computed.dirty = true;
108
- if (input.reconcile) input.reconcile.invalidateComputed(computed);
109
- else input.dirtyPaths.push({
110
- graphNodeId: input.graphNodeId,
111
- path: []
112
- });
113
- for (const dependent of input.computedNodes.values()) {
114
- if (!dependent.compute) continue;
115
- if (dependent.dependencies.some((dependency) => dependency.graphNodeId === input.graphNodeId)) markComputedDirty({
116
- ...input,
117
- graphNodeId: dependent.graphNodeId
118
- });
119
- }
120
- for (const dependent of input.asyncComputedNodes.values()) if (dependent.dependencies.some((dependency) => dependency.graphNodeId === input.graphNodeId)) input.invalidateAsyncComputed(dependent);
102
+ function indexRuntimeDependents(computedNodes, asyncComputedNodes) {
103
+ const index = /* @__PURE__ */ new Map();
104
+ const add = (node, isAsync) => {
105
+ for (const dependency of node.dependencies) {
106
+ let readers = index.get(dependency.graphNodeId);
107
+ if (!readers) index.set(dependency.graphNodeId, readers = []);
108
+ readers.push([
109
+ node,
110
+ dependency.path ?? [],
111
+ isAsync
112
+ ]);
113
+ }
114
+ };
115
+ for (const computed of computedNodes.values()) if (computed.compute) add(computed, false);
116
+ for (const asyncComputed of asyncComputedNodes.values()) add(asyncComputed, true);
117
+ return index;
121
118
  }
122
- function markDirtyComputedDependencies(input) {
123
- for (const computed of input.computedNodes.values()) {
124
- if (!computed.compute) continue;
125
- if (computed.dependencies.some((dependency) => dependency.graphNodeId === input.graphNodeId && pathsIntersect(input.path, dependency.path ?? []))) markComputedDirty({
126
- ...input,
127
- graphNodeId: computed.graphNodeId,
128
- visited: /* @__PURE__ */ new Set()
129
- });
130
- }
131
- for (const asyncComputed of input.asyncComputedNodes.values()) if (asyncComputed.dependencies.some((dependency) => dependency.graphNodeId === input.graphNodeId && pathsIntersect(input.path, dependency.path ?? []))) input.invalidateAsyncComputed(asyncComputed);
119
+ function markDirtyComputedDependencies(graphNodeId, path, dependents, dirtyPaths, reconcile, invalidateAsyncComputed) {
120
+ const visited = /* @__PURE__ */ new Set();
121
+ const invalidated = /* @__PURE__ */ new Set();
122
+ const mark = (sourceId, sourcePath) => {
123
+ for (const [node, dependencyPath, isAsync] of dependents.get(sourceId) ?? []) {
124
+ if (sourcePath && !pathsIntersect(sourcePath, dependencyPath)) continue;
125
+ if (isAsync) invalidated.add(node);
126
+ else if (!visited.has(node)) {
127
+ const computed = node;
128
+ visited.add(computed);
129
+ computed.dirty = true;
130
+ if (reconcile) reconcile.invalidateComputed(computed);
131
+ else dirtyPaths.push({
132
+ graphNodeId: computed.graphNodeId,
133
+ path: []
134
+ });
135
+ mark(computed.graphNodeId);
136
+ }
137
+ }
138
+ };
139
+ mark(graphNodeId, path);
140
+ for (const asyncComputed of invalidated) invalidateAsyncComputed(asyncComputed);
132
141
  }
133
142
  //#endregion
134
143
  //#region src/graph-scheduler.ts
135
144
  function appendJournalResult(journal, result) {
136
- if (!result) return;
137
- if (isDomJournalEntryArray(result)) {
138
- journal.push(...result);
139
- return;
140
- }
141
- journal.push(result);
142
- }
143
- function scheduleMicrotask(callback) {
144
- if (typeof queueMicrotask === "function") {
145
- queueMicrotask(callback);
146
- return;
147
- }
148
- Promise.resolve().then(callback);
149
- }
150
- function isDomJournalEntryArray(result) {
151
- return Array.isArray(result);
145
+ if (Array.isArray(result)) journal.push(...result);
146
+ else if (result) journal.push(result);
152
147
  }
153
148
  //#endregion
154
149
  //#region src/graph-shared.ts
@@ -250,7 +245,10 @@ function createRuntimeGraph(input) {
250
245
  const readInitializers = /* @__PURE__ */ new Map();
251
246
  const computedNodes = createRuntimeComputedNodes(input.computed);
252
247
  const asyncComputedNodes = createRuntimeAsyncComputedNodes(input.asyncComputed);
253
- const subscriptions = [];
248
+ let dependents = indexRuntimeDependents(computedNodes, asyncComputedNodes);
249
+ const subscriptionsByNode = /* @__PURE__ */ new Map();
250
+ const subscriptionOrder = /* @__PURE__ */ new Map();
251
+ let subscriptionSequence = 0;
254
252
  const writeObservers = [];
255
253
  const journalListeners = [];
256
254
  const dirtyPaths = [];
@@ -275,11 +273,7 @@ function createRuntimeGraph(input) {
275
273
  const current = cells.get(graphNodeId);
276
274
  try {
277
275
  const value = initialize();
278
- if (!Object.is(current, value)) {
279
- cells.set(graphNodeId, value);
280
- markDirtyPath(graphNodeId, dirtyPathForGraphWrite(current, []));
281
- scheduleFlush();
282
- }
276
+ if (!Object.is(current, value)) commitCell(graphNodeId, [], value);
283
277
  } catch {}
284
278
  }
285
279
  return readPath(cells.get(graphNodeId), path);
@@ -290,16 +284,14 @@ function createRuntimeGraph(input) {
290
284
  path
291
285
  });
292
286
  plane?.recordWrite(graphNodeId, path);
293
- markDirtyComputedDependencies({
294
- graphNodeId,
295
- path,
296
- computedNodes,
297
- asyncComputedNodes,
298
- dirtyPaths,
299
- reconcile: plane,
300
- invalidateAsyncComputed: invalidateAsyncComputed$1
301
- });
287
+ markDirtyComputedDependencies(graphNodeId, path, dependents, dirtyPaths, plane, invalidateAsyncComputed$1);
302
288
  notifyWriteObservers(graphNodeId, path);
289
+ scheduleFlush();
290
+ };
291
+ const commitCell = (graphNodeId, path, value) => {
292
+ const current = cells.get(graphNodeId);
293
+ cells.set(graphNodeId, writePath(current, path, value));
294
+ markDirtyPath(graphNodeId, dirtyPathForGraphWrite(current, path));
303
295
  };
304
296
  /**
305
297
  * Whether `graphNodeId` is derived, however deeply, from the written path.
@@ -326,6 +318,7 @@ function createRuntimeGraph(input) {
326
318
  graphNodeId,
327
319
  path
328
320
  };
321
+ if (passWaitsOnCode()) return;
329
322
  notifyingWrite = true;
330
323
  try {
331
324
  for (const observer of writeObservers.slice()) if (observer.graphNodeId === graphNodeId ? pathsIntersect(path, observer.path ?? []) : derivesFromWrite(observer.graphNodeId, write, /* @__PURE__ */ new Set())) observer.run();
@@ -333,23 +326,31 @@ function createRuntimeGraph(input) {
333
326
  notifyingWrite = false;
334
327
  }
335
328
  };
329
+ const passWaitsOnCode = () => dirtyPaths.some(({ graphNodeId, path }) => subscriptionsByNode.get(graphNodeId)?.some((subscription) => subscription.ready?.() === false && pathsIntersect(path, subscription.path ?? [])));
336
330
  const scheduleFlush = () => {
337
331
  if (flushScheduled || flushing) return;
338
332
  flushScheduled = true;
339
- scheduleMicrotask(runScheduledFlush);
333
+ queueMicrotask(runScheduledFlush);
340
334
  };
341
335
  const runScheduledFlush = () => {
342
336
  if (!flushHolds) flush();
343
337
  };
344
- const plane = input.reconcile?.({
338
+ const internals = {
345
339
  cells,
346
340
  computedNodes,
347
- subscriptions,
348
341
  dirtyPaths,
349
342
  readGraph,
350
343
  markDirtyPath,
351
- scheduleFlush
352
- });
344
+ scheduleFlush,
345
+ hasSubscription: (graphNodeId) => !!subscriptionsByNode.get(graphNodeId)?.length,
346
+ addSubscription(subscription) {
347
+ let bucket = subscriptionsByNode.get(subscription.graphNodeId);
348
+ if (!bucket) subscriptionsByNode.set(subscription.graphNodeId, bucket = []);
349
+ bucket.push(subscription);
350
+ subscriptionOrder.set(subscription, subscriptionSequence++);
351
+ }
352
+ };
353
+ const plane = input.reconcile?.(internals);
353
354
  const asyncComputedInput = () => ({
354
355
  computedNodes,
355
356
  asyncComputedNodes,
@@ -376,7 +377,9 @@ function createRuntimeGraph(input) {
376
377
  });
377
378
  const flush = () => {
378
379
  if (activeFlush) return activeFlush;
379
- activeFlush = runFlush();
380
+ let settle;
381
+ activeFlush = new Promise((resolve) => settle = resolve);
382
+ settle(runFlush());
380
383
  return activeFlush;
381
384
  };
382
385
  const runFlush = async () => {
@@ -389,11 +392,11 @@ function createRuntimeGraph(input) {
389
392
  const pending = dirtyPaths.splice(0);
390
393
  const ranSubscriptions = /* @__PURE__ */ new Set();
391
394
  const commits = [];
392
- for (const subscription of subscriptions) {
393
- const subscriptionPath = subscription.path ?? [];
394
- if (!pending.some((path) => path.graphNodeId === subscription.graphNodeId && pathsIntersect(path.path, subscriptionPath)) || ranSubscriptions.has(subscription.id)) continue;
395
+ for (let floor = 0, ceiling; floor < (ceiling = subscriptionSequence); floor = ceiling) for (const subscription of dueSubscriptions(pending, floor, ceiling)) {
396
+ if (!subscriptionOrder.has(subscription) || ranSubscriptions.has(subscription.id)) continue;
395
397
  ranSubscriptions.add(subscription.id);
396
- const entries = await subscription.run(readGraph(subscription.graphNodeId, subscriptionPath));
398
+ const ran = subscription.run(readGraph(subscription.graphNodeId, subscription.path ?? []));
399
+ const entries = typeof ran?.then === "function" ? await ran : ran;
397
400
  if (typeof entries === "function") commits.push(entries);
398
401
  else appendJournalResult(journal, entries);
399
402
  }
@@ -414,6 +417,14 @@ function createRuntimeGraph(input) {
414
417
  if (dirtyPaths.length > 0) scheduleFlush();
415
418
  }
416
419
  };
420
+ const dueSubscriptions = (pending, floor, ceiling) => {
421
+ const due = /* @__PURE__ */ new Set();
422
+ for (const { graphNodeId, path } of pending) for (const subscription of subscriptionsByNode.get(graphNodeId) ?? []) {
423
+ const order = subscriptionOrder.get(subscription);
424
+ if (order >= floor && order < ceiling && pathsIntersect(path, subscription.path ?? [])) due.add(subscription);
425
+ }
426
+ return [...due].sort((left, right) => subscriptionOrder.get(left) - subscriptionOrder.get(right));
427
+ };
417
428
  const notifyJournalListeners = async () => {
418
429
  if (journalListeners.length === 0 || journal.length === 0) return;
419
430
  const entries = journal.splice(0);
@@ -431,23 +442,14 @@ function createRuntimeGraph(input) {
431
442
  write(write) {
432
443
  const path = write.path ?? [];
433
444
  const current = cells.get(write.graphNodeId);
434
- const seeded = cells.has(write.graphNodeId);
435
- if (seeded && plane?.commitDerived(write, path)) return;
436
- if (seeded && Object.is(readPath(current, path), write.value)) return;
437
- cells.set(write.graphNodeId, writePath(current, path, write.value));
438
- markDirtyPath(write.graphNodeId, dirtyPathForGraphWrite(current, path));
439
- scheduleFlush();
445
+ if (!cells.has(write.graphNodeId) || !(plane?.commitDerived(write, path) || Object.is(readPath(current, path), write.value))) commitCell(write.graphNodeId, path, write.value);
446
+ return write.value;
440
447
  },
441
448
  update(update) {
442
449
  const path = update.path ?? [];
443
450
  const currentValue = readPath(cells.get(update.graphNodeId), path);
444
451
  const nextValue = update.update(currentValue);
445
- if (!Object.is(currentValue, nextValue)) {
446
- const current = cells.get(update.graphNodeId);
447
- cells.set(update.graphNodeId, writePath(current, path, nextValue));
448
- markDirtyPath(update.graphNodeId, dirtyPathForGraphWrite(current, path));
449
- scheduleFlush();
450
- }
452
+ if (!Object.is(currentValue, nextValue)) commitCell(update.graphNodeId, path, nextValue);
451
453
  if (update.returnValue === "previous") return currentValue;
452
454
  if (update.returnValue === "next") return nextValue;
453
455
  },
@@ -456,25 +458,29 @@ function createRuntimeGraph(input) {
456
458
  const target = readPath(cells.get(call.graphNodeId), path);
457
459
  const beforeMutation = collectionMutationSnapshot(target, call.method, call.args ?? []);
458
460
  const result = applyCollectionCall(target, call.method, call.args ?? []);
459
- if (collectionCallMutated(call.method, result, beforeMutation)) {
460
- markDirtyPath(call.graphNodeId, path);
461
- scheduleFlush();
462
- }
461
+ if (collectionCallMutated(call.method, result, beforeMutation)) markDirtyPath(call.graphNodeId, path);
463
462
  return result;
464
463
  },
465
464
  delete(deletion) {
466
465
  const outcome = deletePath(cells.get(deletion.graphNodeId), deletion.path);
467
- if (outcome.mutated) {
468
- markDirtyPath(deletion.graphNodeId, deletion.path);
469
- scheduleFlush();
470
- }
466
+ if (outcome.mutated) markDirtyPath(deletion.graphNodeId, deletion.path);
471
467
  return outcome.result;
472
468
  },
469
+ defineAsyncComputed(asyncComputed) {
470
+ const id = asyncComputed.graphNodeId;
471
+ if (asyncComputedNodes.has(id) || cells.has(id)) return false;
472
+ asyncComputedNodes.set(id, createRuntimeAsyncComputedNodes([asyncComputed]).get(id));
473
+ dependents = indexRuntimeDependents(computedNodes, asyncComputedNodes);
474
+ return true;
475
+ },
473
476
  subscribe(subscription) {
474
- subscriptions.push(subscription);
477
+ internals.addSubscription(subscription);
475
478
  return () => {
476
- const index = subscriptions.indexOf(subscription);
477
- if (index >= 0) subscriptions.splice(index, 1);
479
+ const bucket = subscriptionsByNode.get(subscription.graphNodeId);
480
+ const index = bucket.indexOf(subscription);
481
+ if (index < 0) return;
482
+ bucket.splice(index, 1);
483
+ subscriptionOrder.delete(subscription);
478
484
  };
479
485
  },
480
486
  subscribeWrite(observer) {
@@ -488,7 +494,7 @@ function createRuntimeGraph(input) {
488
494
  holdFlush() {
489
495
  flushHolds++;
490
496
  return () => {
491
- if (!--flushHolds && flushScheduled) scheduleMicrotask(runScheduledFlush);
497
+ if (!--flushHolds && flushScheduled) queueMicrotask(runScheduledFlush);
492
498
  };
493
499
  },
494
500
  settleWriteObservers() {
@@ -133,6 +133,8 @@ type RuntimeGraphSubscription = {
133
133
  readonly graphNodeId: string;
134
134
  readonly path?: ReadonlyArray<string>;
135
135
  readonly run: (value: unknown) => DomJournalResult | RuntimeGraphCommit | void | Promise<DomJournalResult | RuntimeGraphCommit | void>;
136
+ /** False while `run` still has code to load; a write observer then leaves its DOM to the pass, so the task's writes land together. */
137
+ readonly ready?: () => boolean;
136
138
  };
137
139
  /**
138
140
  * Told about a write the moment it lands, before the flush that write schedules.
@@ -175,11 +177,14 @@ type RuntimeGraph = {
175
177
  readonly listSharedDefinitions: () => NonNullable<ProtocolStatePayload['sharedDefinitions']>;
176
178
  readonly takeSharedPatches: () => RuntimeGraphSharedPatch[];
177
179
  readonly applySharedPatch: (patch: RuntimeGraphSharedPatch) => boolean;
178
- readonly write: (write: RuntimeGraphWrite) => void;
180
+ /** Answers the value written, as the assignment it lowers from does. */
181
+ readonly write: (write: RuntimeGraphWrite) => unknown;
179
182
  readonly update: (update: RuntimeGraphUpdate) => unknown;
180
183
  readonly call: (call: RuntimeGraphCall) => unknown;
181
184
  readonly delete: (deletion: RuntimeGraphDelete) => boolean;
182
185
  readonly subscribe: (subscription: RuntimeGraphSubscription) => () => void;
186
+ /** Adds an async computed a component rendered after the graph was built; false when the node already exists. */
187
+ readonly defineAsyncComputed?: (asyncComputed: RuntimeGraphAsyncComputed) => boolean;
183
188
  /**
184
189
  * Optional so a facade over a subset of this contract stays a `RuntimeGraph`;
185
190
  * a caller without it gets the flush-time answer it always had.
@@ -298,7 +303,9 @@ declare function samePath(a: ReadonlyArray<string>, b: ReadonlyArray<string>): b
298
303
  type DerivedReconcileInternals = {
299
304
  readonly cells: Map<string, unknown>;
300
305
  readonly computedNodes: ReadonlyMap<string, RuntimeComputedNode>;
301
- readonly subscriptions: ReadonlyArray<RuntimeGraphSubscription>;
306
+ readonly hasSubscription: (graphNodeId: string) => boolean;
307
+ /** Registers a subscription; a wrapper installed before the first subscribe sees each one. */
308
+ addSubscription: (subscription: RuntimeGraphSubscription) => void;
302
309
  readonly dirtyPaths: DirtyPath[];
303
310
  readonly readGraph: RuntimeGraphRead;
304
311
  readonly markDirtyPath: (graphNodeId: string, path: ReadonlyArray<string>) => void;
@@ -1,2 +1,2 @@
1
- import { a as RuntimeGraphReconcileKey, c as createDerivedReconcilePlane, d as samePath, i as DiffDerivedValueInput, l as diffDerivedValue, n as DerivedReconcilePlane, o as RuntimeGraphReconcileOptions, r as DerivedReconcilePlaneFactory, s as WriteTouchedRecord, t as DerivedReconcileInternals, u as isDiffableContainer } from "./graph-reconcile-lpU0ZJNo.js";
1
+ import { a as RuntimeGraphReconcileKey, c as createDerivedReconcilePlane, d as samePath, i as DiffDerivedValueInput, l as diffDerivedValue, n as DerivedReconcilePlane, o as RuntimeGraphReconcileOptions, r as DerivedReconcilePlaneFactory, s as WriteTouchedRecord, t as DerivedReconcileInternals, u as isDiffableContainer } from "./graph-reconcile-DTpmb2VG.js";
2
2
  export { DerivedReconcileInternals, DerivedReconcilePlane, DerivedReconcilePlaneFactory, DiffDerivedValueInput, RuntimeGraphReconcileKey, RuntimeGraphReconcileOptions, WriteTouchedRecord, createDerivedReconcilePlane, diffDerivedValue, isDiffableContainer, samePath };
@@ -194,7 +194,7 @@ function samePath(a, b) {
194
194
  return a.length === b.length && a.every((segment, index) => b[index] === segment);
195
195
  }
196
196
  const createDerivedReconcilePlane = (internals) => {
197
- const { cells, computedNodes, subscriptions, dirtyPaths } = internals;
197
+ const { cells, computedNodes, hasSubscription, dirtyPaths } = internals;
198
198
  const { readGraph, markDirtyPath, scheduleFlush } = internals;
199
199
  const writeTouched = /* @__PURE__ */ new Map();
200
200
  const dirtyComputed = /* @__PURE__ */ new Set();
@@ -260,7 +260,7 @@ const createDerivedReconcilePlane = (internals) => {
260
260
  dirtyComputed.delete(computed);
261
261
  continue;
262
262
  }
263
- if (!subscriptions.some((subscription) => subscription.graphNodeId === computed.graphNodeId)) continue;
263
+ if (!hasSubscription(computed.graphNodeId)) continue;
264
264
  dirtyComputed.delete(computed);
265
265
  readGraph(computed.graphNodeId);
266
266
  }
package/dist/graph.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as RuntimeGraphSubscription, C as RuntimeGraphComputedDependencyNode, D as RuntimeGraphSharedPatch, E as RuntimeGraphRead, M as RuntimeGraphWrite, N as RuntimeGraphWriteObserver, O as RuntimeGraphSharedPatchOperation, P as createRuntimeGraph, S as RuntimeGraphComputedDependency, T as RuntimeGraphInput, _ as RuntimeGraphAsyncSnapshot, a as RuntimeGraphReconcileKey, b as RuntimeGraphCommit, f as DomJournalEntry, g as RuntimeGraphAsyncComputed, h as RuntimeGraph, i as DiffDerivedValueInput, j as RuntimeGraphUpdate, k as RuntimeGraphSharedWrite, m as DomJournalResult, n as DerivedReconcilePlane, o as RuntimeGraphReconcileOptions, p as DomJournalListener, r as DerivedReconcilePlaneFactory, s as WriteTouchedRecord, t as DerivedReconcileInternals, v as RuntimeGraphCall, w as RuntimeGraphDelete, x as RuntimeGraphComputed, y as RuntimeGraphCell } from "./graph-reconcile-lpU0ZJNo.js";
1
+ import { A as RuntimeGraphSubscription, C as RuntimeGraphComputedDependencyNode, D as RuntimeGraphSharedPatch, E as RuntimeGraphRead, M as RuntimeGraphWrite, N as RuntimeGraphWriteObserver, O as RuntimeGraphSharedPatchOperation, P as createRuntimeGraph, S as RuntimeGraphComputedDependency, T as RuntimeGraphInput, _ as RuntimeGraphAsyncSnapshot, a as RuntimeGraphReconcileKey, b as RuntimeGraphCommit, f as DomJournalEntry, g as RuntimeGraphAsyncComputed, h as RuntimeGraph, i as DiffDerivedValueInput, j as RuntimeGraphUpdate, k as RuntimeGraphSharedWrite, m as DomJournalResult, n as DerivedReconcilePlane, o as RuntimeGraphReconcileOptions, p as DomJournalListener, r as DerivedReconcilePlaneFactory, s as WriteTouchedRecord, t as DerivedReconcileInternals, v as RuntimeGraphCall, w as RuntimeGraphDelete, x as RuntimeGraphComputed, y as RuntimeGraphCell } from "./graph-reconcile-DTpmb2VG.js";
2
2
  export { type DerivedReconcileInternals, type DerivedReconcilePlane, type DerivedReconcilePlaneFactory, type DiffDerivedValueInput, DomJournalEntry, DomJournalListener, DomJournalResult, RuntimeGraph, RuntimeGraphAsyncComputed, RuntimeGraphAsyncSnapshot, RuntimeGraphCall, RuntimeGraphCell, RuntimeGraphCommit, RuntimeGraphComputed, RuntimeGraphComputedDependency, RuntimeGraphComputedDependencyNode, RuntimeGraphDelete, RuntimeGraphInput, RuntimeGraphRead, type RuntimeGraphReconcileKey, type RuntimeGraphReconcileOptions, RuntimeGraphSharedPatch, RuntimeGraphSharedPatchOperation, RuntimeGraphSharedWrite, RuntimeGraphSubscription, RuntimeGraphUpdate, RuntimeGraphWrite, RuntimeGraphWriteObserver, type WriteTouchedRecord, createRuntimeGraph };
package/dist/graph.js CHANGED
@@ -1 +1 @@
1
- export { t as createRuntimeGraph } from "./graph-B3y0SeX_.js";
1
+ export { t as createRuntimeGraph } from "./graph-DO969AnQ.js";
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as RuntimeGraphSubscription, C as RuntimeGraphComputedDependencyNode, D as RuntimeGraphSharedPatch, E as RuntimeGraphRead, M as RuntimeGraphWrite, N as RuntimeGraphWriteObserver, O as RuntimeGraphSharedPatchOperation, P as createRuntimeGraph, S as RuntimeGraphComputedDependency, T as RuntimeGraphInput, _ as RuntimeGraphAsyncSnapshot, a as RuntimeGraphReconcileKey, b as RuntimeGraphCommit, f as DomJournalEntry, g as RuntimeGraphAsyncComputed, h as RuntimeGraph, i as DiffDerivedValueInput, j as RuntimeGraphUpdate, k as RuntimeGraphSharedWrite, m as DomJournalResult, n as DerivedReconcilePlane, o as RuntimeGraphReconcileOptions, p as DomJournalListener, r as DerivedReconcilePlaneFactory, s as WriteTouchedRecord, t as DerivedReconcileInternals, v as RuntimeGraphCall, w as RuntimeGraphDelete, x as RuntimeGraphComputed, y as RuntimeGraphCell } from "./graph-reconcile-lpU0ZJNo.js";
1
+ import { A as RuntimeGraphSubscription, C as RuntimeGraphComputedDependencyNode, D as RuntimeGraphSharedPatch, E as RuntimeGraphRead, M as RuntimeGraphWrite, N as RuntimeGraphWriteObserver, O as RuntimeGraphSharedPatchOperation, P as createRuntimeGraph, S as RuntimeGraphComputedDependency, T as RuntimeGraphInput, _ as RuntimeGraphAsyncSnapshot, a as RuntimeGraphReconcileKey, b as RuntimeGraphCommit, f as DomJournalEntry, g as RuntimeGraphAsyncComputed, h as RuntimeGraph, i as DiffDerivedValueInput, j as RuntimeGraphUpdate, k as RuntimeGraphSharedWrite, m as DomJournalResult, n as DerivedReconcilePlane, o as RuntimeGraphReconcileOptions, p as DomJournalListener, r as DerivedReconcilePlaneFactory, s as WriteTouchedRecord, t as DerivedReconcileInternals, v as RuntimeGraphCall, w as RuntimeGraphDelete, x as RuntimeGraphComputed, y as RuntimeGraphCell } from "./graph-reconcile-DTpmb2VG.js";
2
2
  export { type DerivedReconcileInternals, type DerivedReconcilePlane, type DerivedReconcilePlaneFactory, type DiffDerivedValueInput, DomJournalEntry, DomJournalListener, DomJournalResult, RuntimeGraph, RuntimeGraphAsyncComputed, RuntimeGraphAsyncSnapshot, RuntimeGraphCall, RuntimeGraphCell, RuntimeGraphCommit, RuntimeGraphComputed, RuntimeGraphComputedDependency, RuntimeGraphComputedDependencyNode, RuntimeGraphDelete, RuntimeGraphInput, RuntimeGraphRead, type RuntimeGraphReconcileKey, type RuntimeGraphReconcileOptions, RuntimeGraphSharedPatch, RuntimeGraphSharedPatchOperation, RuntimeGraphSharedWrite, RuntimeGraphSubscription, RuntimeGraphUpdate, RuntimeGraphWrite, RuntimeGraphWriteObserver, type WriteTouchedRecord, createRuntimeGraph };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export { t as createRuntimeGraph } from "./graph-B3y0SeX_.js";
1
+ export { t as createRuntimeGraph } from "./graph-DO969AnQ.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markless/runtime",
3
- "version": "0.8.0",
3
+ "version": "0.10.0",
4
4
  "description": "Markless state graph runtime: reads, writes, computed invalidation, flush journal.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -29,7 +29,7 @@
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@markless/serializer": "0.8.0"
32
+ "@markless/serializer": "0.10.0"
33
33
  },
34
34
  "files": [
35
35
  "dist"