@nisli/core 0.56.0 → 0.57.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.
Files changed (114) hide show
  1. package/README.md +70 -9
  2. package/dist/bundler/component.js +409 -0
  3. package/dist/bundler/component.js.map +7 -0
  4. package/dist/bundler/context.js +27 -0
  5. package/dist/bundler/context.js.map +7 -0
  6. package/dist/bundler/diagnostics.js +55 -0
  7. package/dist/bundler/diagnostics.js.map +7 -0
  8. package/dist/bundler/disposable.js +9 -0
  9. package/dist/bundler/disposable.js.map +7 -0
  10. package/dist/bundler/element-context.js +47 -0
  11. package/dist/bundler/element-context.js.map +7 -0
  12. package/dist/bundler/emitter.js +70 -0
  13. package/dist/bundler/emitter.js.map +7 -0
  14. package/dist/bundler/hmr/registry.js +72 -0
  15. package/dist/bundler/hmr/registry.js.map +7 -0
  16. package/dist/bundler/hmr/transform.js +30 -0
  17. package/dist/bundler/hmr/transform.js.map +7 -0
  18. package/dist/bundler/index.js +103 -0
  19. package/dist/bundler/index.js.map +7 -0
  20. package/dist/bundler/injector.js +75 -0
  21. package/dist/bundler/injector.js.map +7 -0
  22. package/dist/bundler/lifecycle.js +56 -0
  23. package/dist/bundler/lifecycle.js.map +7 -0
  24. package/dist/bundler/projection.js +92 -0
  25. package/dist/bundler/projection.js.map +7 -0
  26. package/dist/bundler/query.js +302 -0
  27. package/dist/bundler/query.js.map +7 -0
  28. package/dist/bundler/ref.js +16 -0
  29. package/dist/bundler/ref.js.map +7 -0
  30. package/dist/bundler/resource.js +99 -0
  31. package/dist/bundler/resource.js.map +7 -0
  32. package/dist/bundler/settle.js +43 -0
  33. package/dist/bundler/settle.js.map +7 -0
  34. package/dist/bundler/signal.js +403 -0
  35. package/dist/bundler/signal.js.map +7 -0
  36. package/dist/bundler/template-audit.js +162 -0
  37. package/dist/bundler/template-audit.js.map +7 -0
  38. package/dist/bundler/template.js +922 -0
  39. package/dist/bundler/template.js.map +7 -0
  40. package/dist/bundler/view-transition.js +20 -0
  41. package/dist/bundler/view-transition.js.map +7 -0
  42. package/dist/bundler/vite-hmr/plugin.js +32 -0
  43. package/dist/bundler/vite-hmr/plugin.js.map +7 -0
  44. package/dist/bundler/vite-hmr/runtime.js +8 -0
  45. package/dist/bundler/vite-hmr/runtime.js.map +7 -0
  46. package/dist/index.js +2682 -47
  47. package/dist/index.js.map +7 -1
  48. package/dist/index.production.js +2 -0
  49. package/dist/index.production.js.map +6 -0
  50. package/dist/{diagnostics.d.ts → types/diagnostics.d.ts} +8 -15
  51. package/dist/{template-audit.d.ts → types/template-audit.d.ts} +4 -5
  52. package/dist/{template.d.ts → types/template.d.ts} +2 -1
  53. package/package.json +15 -10
  54. package/dist/component.js +0 -633
  55. package/dist/component.js.map +0 -1
  56. package/dist/context.js +0 -55
  57. package/dist/context.js.map +0 -1
  58. package/dist/diagnostics.js +0 -118
  59. package/dist/diagnostics.js.map +0 -1
  60. package/dist/disposable.js +0 -8
  61. package/dist/disposable.js.map +0 -1
  62. package/dist/element-context.js +0 -108
  63. package/dist/element-context.js.map +0 -1
  64. package/dist/emitter.js +0 -91
  65. package/dist/emitter.js.map +0 -1
  66. package/dist/hmr/registry.js +0 -136
  67. package/dist/hmr/registry.js.map +0 -1
  68. package/dist/hmr/transform.js +0 -52
  69. package/dist/hmr/transform.js.map +0 -1
  70. package/dist/injector.js +0 -118
  71. package/dist/injector.js.map +0 -1
  72. package/dist/lifecycle.js +0 -117
  73. package/dist/lifecycle.js.map +0 -1
  74. package/dist/projection.js +0 -179
  75. package/dist/projection.js.map +0 -1
  76. package/dist/query.js +0 -429
  77. package/dist/query.js.map +0 -1
  78. package/dist/ref.js +0 -43
  79. package/dist/ref.js.map +0 -1
  80. package/dist/resource.js +0 -129
  81. package/dist/resource.js.map +0 -1
  82. package/dist/settle.js +0 -106
  83. package/dist/settle.js.map +0 -1
  84. package/dist/signal.js +0 -645
  85. package/dist/signal.js.map +0 -1
  86. package/dist/template-audit.js +0 -246
  87. package/dist/template-audit.js.map +0 -1
  88. package/dist/template.js +0 -1244
  89. package/dist/template.js.map +0 -1
  90. package/dist/view-transition.js +0 -98
  91. package/dist/view-transition.js.map +0 -1
  92. package/dist/vite-hmr/plugin.js +0 -62
  93. package/dist/vite-hmr/plugin.js.map +0 -1
  94. package/dist/vite-hmr/runtime.js +0 -17
  95. package/dist/vite-hmr/runtime.js.map +0 -1
  96. /package/dist/{component.d.ts → types/component.d.ts} +0 -0
  97. /package/dist/{context.d.ts → types/context.d.ts} +0 -0
  98. /package/dist/{disposable.d.ts → types/disposable.d.ts} +0 -0
  99. /package/dist/{element-context.d.ts → types/element-context.d.ts} +0 -0
  100. /package/dist/{emitter.d.ts → types/emitter.d.ts} +0 -0
  101. /package/dist/{hmr → types/hmr}/registry.d.ts +0 -0
  102. /package/dist/{hmr → types/hmr}/transform.d.ts +0 -0
  103. /package/dist/{index.d.ts → types/index.d.ts} +0 -0
  104. /package/dist/{injector.d.ts → types/injector.d.ts} +0 -0
  105. /package/dist/{lifecycle.d.ts → types/lifecycle.d.ts} +0 -0
  106. /package/dist/{projection.d.ts → types/projection.d.ts} +0 -0
  107. /package/dist/{query.d.ts → types/query.d.ts} +0 -0
  108. /package/dist/{ref.d.ts → types/ref.d.ts} +0 -0
  109. /package/dist/{resource.d.ts → types/resource.d.ts} +0 -0
  110. /package/dist/{settle.d.ts → types/settle.d.ts} +0 -0
  111. /package/dist/{signal.d.ts → types/signal.d.ts} +0 -0
  112. /package/dist/{view-transition.d.ts → types/view-transition.d.ts} +0 -0
  113. /package/dist/{vite-hmr → types/vite-hmr}/plugin.d.ts +0 -0
  114. /package/dist/{vite-hmr → types/vite-hmr}/runtime.d.ts +0 -0
package/dist/settle.js DELETED
@@ -1,106 +0,0 @@
1
- /**
2
- * settle.ts — Awaitable async quiescence (ADR 0030.2 T2).
3
- *
4
- * `await settle()` resolves when every framework-started logical async
5
- * request has TERMINATED and the reactive graph is quiescent. Query runs
6
- * (query.ts) and resource loads (resource.ts) enroll here when they start
7
- * and deregister at *termination* — commit, terminal error after retries,
8
- * or abort — never at raw promise settlement. An abort-ignoring fetcher
9
- * whose run was superseded therefore cannot wedge `settle()`: the run's
10
- * registry entry closed at the abort even though the underlying promise
11
- * never resolves.
12
- *
13
- * ```ts
14
- * mount(app);
15
- * await settle();
16
- * expect(screen.textContent).toContain('loaded'); // no waitFor polling
17
- * ```
18
- *
19
- * Contract and bounds:
20
- * - This is a **test/verify primitive** (and the SSG pre-snapshot barrier).
21
- * Awaiting it in a live app with continuous background refetch/polling is
22
- * unbounded *by design* — each commit may legally schedule the next
23
- * request. A scope argument waits for a second consumer (ADR 0030.2 §8).
24
- * - Each iteration awaits the pending registry, then `tick()` (signal.ts's
25
- * bounded microtask-drain contract). Timer-scheduled work is NOT awaited
26
- * beyond what a pending logical request itself spans.
27
- * - Iteration-capped at 50 like `tick()`; hitting the cap emits diagnostic
28
- * N603 and resolves — never a silent hang, never an unbounded loop.
29
- *
30
- * MERGE ITEM: `__resetPending()` should be folded into `resetInjector()`
31
- * (injector.ts is owned by another worktree); until then test teardown
32
- * calls it directly.
33
- */
34
- import { tick } from './signal.js';
35
- // ── Pending logical-request registry ────────────────────────────────
36
- /**
37
- * One entry per in-flight logical request. The promise is a *termination*
38
- * promise resolved by the enroller's `done()` callback — deliberately not
39
- * the fetcher/loader promise itself (see module doc).
40
- */
41
- const pending = new Set();
42
- /**
43
- * Enroll a logical async request. Returns its `done()` terminator: call it
44
- * at commit, terminal error, or abort. Idempotent — a superseded run whose
45
- * terminator was already invoked by the superseding path may safely call
46
- * it again from its own settlement branch.
47
- *
48
- * @internal — called by query.ts runs and resource.ts loader generations.
49
- */
50
- export function __enrollPending() {
51
- let resolve;
52
- const entry = new Promise((res) => { resolve = res; });
53
- pending.add(entry);
54
- let done = false;
55
- return () => {
56
- if (done)
57
- return;
58
- done = true;
59
- pending.delete(entry);
60
- resolve();
61
- };
62
- }
63
- /**
64
- * Reset the registry. Test-teardown escape hatch: entries orphaned by a
65
- * test that never terminated its fetchers would otherwise leak into the
66
- * next test's `settle()`.
67
- *
68
- * @internal
69
- */
70
- export function __resetPending() {
71
- pending.clear();
72
- }
73
- /** Current number of enrolled (unterminated) logical requests. @internal */
74
- export function __pendingCount() {
75
- return pending.size;
76
- }
77
- // ── Diagnostics + test isolation ────────────────────────────────────
78
- // Reporting goes through the core diagnostics leaf. The pending registry
79
- // self-registers with resetInjector() so test teardown clears it without
80
- // an upside-down import (settle → injector, never the reverse).
81
- import { diag, isDev } from './diagnostics.js';
82
- import { registerResetHook } from './injector.js';
83
- registerResetHook(__resetPending);
84
- // ── settle() ────────────────────────────────────────────────────────
85
- /**
86
- * Await async quiescence: loop `tick()` → `Promise.allSettled(pending)`
87
- * until a full `tick()` leaves the pending registry empty.
88
- *
89
- * The `tick()` *first* ordering matters: observer effects created since
90
- * the last flush are what *start* runs (and enroll them) — the registry
91
- * can only be trusted empty after the reactive graph has flushed.
92
- */
93
- export async function settle() {
94
- for (let i = 0; i < 50; i++) {
95
- await tick();
96
- if (pending.size === 0)
97
- return;
98
- await Promise.allSettled([...pending]);
99
- }
100
- if (isDev())
101
- diag('N603', 'settle() did not reach quiescence within 50 iterations — something '
102
- + 'keeps scheduling new async work (a self-invalidating query or a '
103
- + 'polling loop?). settle() is a test/verify primitive; under live '
104
- + 'background refetch it is unbounded by design. Returning anyway.');
105
- }
106
- //# sourceMappingURL=settle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settle.js","sourceRoot":"","sources":["../src/settle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,uEAAuE;AAEvE;;;;GAIG;AACH,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAoB,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,GAAG,EAAE;QACV,IAAI,IAAI;YAAE,OAAO;QACjB,IAAI,GAAG,IAAI,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC;AAED,uEAAuE;AACvE,yEAAyE;AACzE,yEAAyE;AACzE,gEAAgE;AAChE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,iBAAiB,CAAC,cAAc,CAAC,CAAC;AAElC,uEAAuE;AAEvE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAC/B,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,KAAK,EAAE;QAAE,IAAI,CACf,MAAM,EACN,qEAAqE;cACnE,kEAAkE;cAClE,kEAAkE;cAClE,iEAAiE,CACpE,CAAC;AACJ,CAAC"}