@velarscript/web 0.27.4 → 0.28.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.
@@ -569,6 +569,7 @@ ${errorHostRuntime}
569
569
  const __velarRuntimeKey = Symbol.for(${JSON.stringify(VELAR_RUNTIME_REGISTRY_KEY)});
570
570
  const __velarFoundationReflectApply = Object.getOwnPropertyDescriptor(Reflect, "apply")?.value;
571
571
  const __velarFoundationQueueMicrotask = globalThis.queueMicrotask;
572
+ const __velarFoundationSetTimeout = globalThis.setTimeout;
572
573
  const __velarFoundationDate = globalThis.Date;
573
574
  const __velarFoundationDateNow = typeof __velarFoundationDate === "function"
574
575
  ? Object.getOwnPropertyDescriptor(__velarFoundationDate, "now")?.value
@@ -680,12 +681,120 @@ function __velarNextObserverSequence() {
680
681
  return __velarObserverSequenceCell[0];
681
682
  }
682
683
 
683
- // The identity a flush stamps its run counts with, carried by an overrun into
684
- // the flush it schedules and consumed by the first flush that starts.
685
- let __velarOverflowToken = null;
684
+ // D114 W/A1, as narrowed by W2: the identity a flush stamps its run counts
685
+ // with, and the budget those runs spend. They belong to one host *task* -- but
686
+ // the window follows work an observer started, and nothing else.
687
+ //
688
+ // A cycle that crosses a microtask boundary -- 'watch x: detach step()', where
689
+ // 'step' awaits an already-resolved Promise and then writes 'x' -- is a fresh
690
+ // flush every round, so a budget that reset per flush never saw it: two
691
+ // observer runs, well inside 100,000, forever. Flushes chained through
692
+ // microtasks therefore share one token, one budget and one leaders list, and
693
+ // the macrotask sentinel below closes the window. Work that resumes after a
694
+ // timer, an event or network I/O is a new task and opens a fresh window, which
695
+ // is what keeps an animation that writes state every frame from being stopped.
696
+ //
697
+ // W2: a flush continues the open window only once an observer run inside it has
698
+ // started asynchronous work -- a 'detach' statement, or an 'action' call, made
699
+ // while an observer was running. Those are the two ways a synchronous observer
700
+ // body reaches a later microtask, so they are the only ways the ring above can
701
+ // be closed; a chain of flushes with none of them in it has no cycle to find. A
702
+ // bulk import loop that writes a progress counter and awaits promise-only work
703
+ // per row runs millions of observers in one uninterrupted task and is not a
704
+ // runaway, so each of its flushes gets the fresh budget it had before W. The
705
+ // sentinel still closes every window at the task boundary, so the animation
706
+ // case is protected either way.
707
+ //
708
+ // The overrun's carried token is the same rule seen from one flush earlier: an
709
+ // overrun schedules its continuation as a microtask, so that continuation is
710
+ // this same task and continues these same counts by construction. It carries
711
+ // them whether or not an observer started anything, because the continuation is
712
+ // the overrun's own unfinished work rather than a new write.
713
+ const __velarFlushBudgetPerTask = 100000;
714
+ let __velarFlushToken = null;
715
+ let __velarFlushBudget = 0;
716
+ // One-shot, consumed by the next settle: the flush an overrun scheduled
717
+ // continues the window it was scheduled from, whatever that window recorded.
718
+ let __velarFlushCarried = false;
719
+ // One sentinel is enough for a window: the first one to fire closes it, and
720
+ // arming a second on every flush would leave a timer per flush behind.
721
+ let __velarTaskSentinelArmed = false;
722
+
723
+ // The two facts W2 needs live on one global slot, for the same reason the
724
+ // observer sequence above does: every emitted module carries its own copy of
725
+ // this runtime, and the two ends of the question are in different copies. The
726
+ // settle that asks it belongs to whichever copy created the registry -- in an
727
+ // application that imports velar/app, that is velar/app's -- while the places
728
+ // that answer it, a 'detach' statement's detached-task helper and an action's
729
+ // run, are emitted into the application module. Two module-scope variables
730
+ // would never meet.
731
+ //
732
+ // Slot 0 is how deep the settle currently is inside 'observer.run()'. It is a
733
+ // depth rather than a flag because an observer created by a running one runs
734
+ // nested. '__velarRuntime.activeObserver' cannot stand in for it: a watch body
735
+ // runs untracked, precisely so its own reads do not become dependencies of the
736
+ // watched expression, so the active observer is null exactly where the 'detach'
737
+ // that closes a cycle is written.
738
+ //
739
+ // Slot 1 is the fact recorded on the open window: an observer run in it started
740
+ // asynchronous work.
741
+ const __velarAsyncWorkKey = Symbol.for("velar.web.observer.asyncwork.v1");
742
+ const __velarAsyncWorkCell = (() => {
743
+ const descriptor = __velarGraphOwnDescriptor(globalThis, __velarAsyncWorkKey);
744
+ if (descriptor) {
745
+ if (!("value" in descriptor) || descriptor.enumerable || descriptor.configurable || descriptor.writable
746
+ || !__velarGraphIsList(descriptor.value)) {
747
+ throw new TypeError("VelarScript Web observer async-work ownership is invalid");
748
+ }
749
+ return descriptor.value;
750
+ }
751
+ const cell = [0, false];
752
+ __velarGraphDefine(globalThis, __velarAsyncWorkKey, {
753
+ value: cell,
754
+ enumerable: false,
755
+ configurable: false,
756
+ writable: false,
757
+ });
758
+ return cell;
759
+ })();
760
+
761
+ // What the two compiler-owned lowering points call: the detached-task helper a
762
+ // 'detach' statement lowers to, where a detached Promise enters the runtime,
763
+ // and an action's run, where an action call does. Outside an observer run there
764
+ // is nothing to record -- an action a handler or '@main' starts is the host
765
+ // task's own work, not a ring an observer closed -- so the same unconditional
766
+ // call is correct at both sites.
767
+ function __velarNoteAsyncWork() {
768
+ if (__velarAsyncWorkCell[0] > 0) __velarAsyncWorkCell[1] = true;
769
+ return null;
770
+ }
771
+
772
+ function __velarCloseTaskWindow() {
773
+ __velarTaskSentinelArmed = false;
774
+ __velarFlushToken = null;
775
+ __velarAsyncWorkCell[1] = false;
776
+ return null;
777
+ }
778
+
779
+ // The macrotask boundary the run-count window ends at. 'setTimeout' is the one
780
+ // scheduling operation every host this runtime supports publishes -- page,
781
+ // worker, and the Node process a 'velar test' run drives the emitted runtime
782
+ // in -- and it is captured at module initialization like every other ambient
783
+ // operation here. A host that publishes none is not left without a gate: the
784
+ // window then closes as soon as the flush chain comes to rest, which is the
785
+ // per-flush budget this runtime had before, so the synchronous cycles stay
786
+ // covered and only the asynchronous one goes back to being invisible.
787
+ function __velarArmTaskSentinel() {
788
+ if (__velarTaskSentinelArmed) return true;
789
+ if (typeof __velarFoundationSetTimeout !== "function" || typeof __velarFoundationReflectApply !== "function") return false;
790
+ __velarTaskSentinelArmed = true;
791
+ try { __velarFoundationReflectApply(__velarFoundationSetTimeout, globalThis, [__velarCloseTaskWindow, 0]); }
792
+ catch { __velarTaskSentinelArmed = false; return false; }
793
+ return true;
794
+ }
686
795
 
687
- // The three observers that have run most in the settle running now, kept as
688
- // the run counts are stamped rather than reconstructed afterwards: the queue at
796
+ // The three observers that have run most in the task window running now, kept
797
+ // as the run counts are stamped rather than reconstructed afterwards: the queue at
689
798
  // the moment the budget runs out holds only whichever half of a cycle has not
690
799
  // just run, so it cannot name the ring on its own. An observer that has run
691
800
  // once is not a candidate, which is every observer of an ordinary flush.
@@ -741,7 +850,7 @@ function __velarFlushRunaway(stalled, token) {
741
850
  const named = observer.mode === "watch" && typeof observer.label === "string" && observer.label !== ""
742
851
  ? "the watch on '" + observer.label + "'"
743
852
  : "a " + observer.mode + " observer";
744
- detail += (detail === "" ? "Ran most in this flush: " : ", ") + named
853
+ detail += (detail === "" ? "Ran most in this task: " : ", ") + named
745
854
  + " (" + observer.flushRuns + (observer.flushRuns === 1 ? " run)" : " runs)");
746
855
  if (component === "" && typeof observer.component === "string") component = observer.component;
747
856
  }
@@ -794,12 +903,17 @@ function __velarFlushOverflow(token) {
794
903
  requeued = true;
795
904
  }
796
905
  const runaway = __velarFlushRunaway(stalled, token);
797
- __velarRuntime.report(new RangeError("Reactive updates cannot run more than 100000 observers in one flush"),
906
+ // The window keeps its token and its run counts -- the requeued flush is one
907
+ // more flush of the same task, and the pool of observers it has not reached
908
+ // yet only shrinks -- but the budget is granted again. Without that, the
909
+ // exhausted count would trip the very next flush of the same task, and the
910
+ // observers stopped for it would be whatever was queued at that moment: the
911
+ // innocent ones this overrun just put back, or an unrelated later write.
912
+ __velarFlushBudget = __velarFlushBudgetPerTask;
913
+ __velarFlushCarried = requeued;
914
+ __velarRuntime.report(new RangeError("Reactive updates cannot run more than " + __velarFlushBudgetPerTask + " observers in one task"),
798
915
  { phase: "update", detail: runaway.detail, component: runaway.component, unhandled: true });
799
- if (requeued) {
800
- __velarOverflowToken = token;
801
- __velarScheduleFlush();
802
- }
916
+ if (requeued) __velarScheduleFlush();
803
917
  }
804
918
 
805
919
  // The one entry point: the microtask __velarScheduleFlush enqueues, and the
@@ -807,8 +921,18 @@ function __velarFlushOverflow(token) {
807
921
  // R1-a-scope's flush-scoped writer registry around the settle; R21 deleted the
808
922
  // registry with the referee that read it, so the name is all that remains and
809
923
  // it remains because __velarEnqueue and tick() both hold it.
924
+ //
925
+ // D114 W/A1: it is also where the task window is closed or handed on. Both
926
+ // entries pass through here, including tick()'s drain, so the sentinel is armed
927
+ // once per window however the flush was reached, and a host without a timer
928
+ // falls back to closing the window here, one flush at a time.
810
929
  function __velarFlush() {
811
- __velarFlushSettle();
930
+ try { __velarFlushSettle(); }
931
+ // Without a timer the window closes as soon as the chain comes to rest,
932
+ // which is the per-flush budget this runtime had before -- except that a
933
+ // flush already scheduled keeps it open, so an overrun's carried counts and
934
+ // the queues a settle could not finish reach the flush that continues them.
935
+ finally { if (!__velarArmTaskSentinel() && !__velarRuntime.flushPending) __velarCloseTaskWindow(); }
812
936
  }
813
937
 
814
938
  // Glitch-free order: every derived value and every watch settles to a fixed
@@ -828,25 +952,42 @@ function __velarFlush() {
828
952
  // queue in the order the action wrote the states. So each pass takes the queue
829
953
  // as it stands and runs it by sequence number. Watches queued by this pass are
830
954
  // picked up by the next one, in their own order.
955
+ //
956
+ // D114 W/A1, narrowed by W2: a flush that starts while the task window is still
957
+ // open continues it -- the same token, so flushRuns keeps accumulating on every
958
+ // observer, the same leaders, and the same remaining budget -- but only when an
959
+ // observer run in that window started asynchronous work, or when the overrun
960
+ // itself scheduled this flush. Every other flush opens a new window, which is
961
+ // the per-flush budget this runtime had before W.
831
962
  function __velarFlushSettle() {
832
963
  __velarRuntime.flushPending = false;
833
- const token = __velarOverflowToken === null ? {} : __velarOverflowToken;
834
- __velarOverflowToken = null;
835
- __velarFlushLeaders.length = 0;
836
- let budget = 100000;
964
+ const carried = __velarFlushCarried;
965
+ __velarFlushCarried = false;
966
+ if (__velarFlushToken === null || !(carried || __velarAsyncWorkCell[1])) {
967
+ __velarFlushToken = {};
968
+ __velarFlushBudget = __velarFlushBudgetPerTask;
969
+ __velarFlushLeaders.length = 0;
970
+ __velarAsyncWorkCell[1] = false;
971
+ }
972
+ const token = __velarFlushToken;
837
973
  const step = (observer) => {
838
974
  __velarGraphSetRemove(observer.mode === "watch" ? __velarRuntime.watchQueue : __velarRuntime.domQueue, observer);
839
975
  if (observer.flushToken === token) observer.flushRuns += 1;
840
976
  else { observer.flushToken = token; observer.flushRuns = 1; }
841
977
  if (observer.flushRuns > 1) __velarFlushLead(observer);
842
- observer.run();
978
+ // The span the two lowering points ask about. It is the run itself rather
979
+ // than the whole settle: work started by the flush's own bookkeeping is
980
+ // not an observer's, and a nested observer created by a running one is.
981
+ __velarAsyncWorkCell[0] += 1;
982
+ try { observer.run(); }
983
+ finally { __velarAsyncWorkCell[0] -= 1; }
843
984
  };
844
985
  while (__velarGraphSetCount(__velarRuntime.domQueue) || __velarGraphSetCount(__velarRuntime.watchQueue)) {
845
986
  while (true) {
846
987
  let ran = false;
847
988
  for (const observer of __velarGraphSetItems(__velarRuntime.domQueue)) {
848
989
  if (observer.mode !== "computed") continue;
849
- if ((budget -= 1) < 0) { __velarFlushOverflow(token); return; }
990
+ if ((__velarFlushBudget -= 1) < 0) { __velarFlushOverflow(token); return; }
850
991
  step(observer);
851
992
  ran = true;
852
993
  }
@@ -860,7 +1001,7 @@ function __velarFlushSettle() {
860
1001
  // snapshot is a plan, and the queue is what says whether it still owes
861
1002
  // a run.
862
1003
  if (observer.stopped || !__velarGraphSetContains(__velarRuntime.watchQueue, observer)) continue;
863
- if ((budget -= 1) < 0) { __velarFlushOverflow(token); return; }
1004
+ if ((__velarFlushBudget -= 1) < 0) { __velarFlushOverflow(token); return; }
864
1005
  step(observer);
865
1006
  ran = true;
866
1007
  }
@@ -868,7 +1009,7 @@ function __velarFlushSettle() {
868
1009
  }
869
1010
  for (const observer of __velarGraphSetItems(__velarRuntime.domQueue)) {
870
1011
  if (observer.mode === "computed") break;
871
- if ((budget -= 1) < 0) { __velarFlushOverflow(token); return; }
1012
+ if ((__velarFlushBudget -= 1) < 0) { __velarFlushOverflow(token); return; }
872
1013
  step(observer);
873
1014
  }
874
1015
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-foundation.js","sourceRoot":"","sources":["../src/runtime-foundation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-foundation.js","sourceRoot":"","sources":["../src/runtime-foundation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velarscript/web",
3
- "version": "0.27.4",
3
+ "version": "0.28.1",
4
4
  "description": "The official VelarScript Web framework contract and browser runtime.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -33,7 +33,7 @@
33
33
  }
34
34
  },
35
35
  "dependencies": {
36
- "@velarscript/compiler": "0.27.4"
36
+ "@velarscript/compiler": "0.28.1"
37
37
  },
38
38
  "exports": {
39
39
  ".": {