@fluixi/reactive 1.0.0-alpha.100
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/LICENSE +21 -0
- package/README.md +280 -0
- package/dist/cdn/reactive.cjs +2803 -0
- package/dist/cdn/reactive.d.ts +11 -0
- package/dist/cdn/reactive.d.ts.map +1 -0
- package/dist/cdn/reactive.global.js +2 -0
- package/dist/cdn/reactive.js +10 -0
- package/dist/cdn/reactive.mjs +2787 -0
- package/dist/cdn/signal.cjs +299 -0
- package/dist/cdn/signal.d.ts +19 -0
- package/dist/cdn/signal.d.ts.map +1 -0
- package/dist/cdn/signal.global.js +2 -0
- package/dist/cdn/signal.js +18 -0
- package/dist/cdn/signal.mjs +276 -0
- package/dist/index.cjs +2803 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.mjs +2787 -0
- package/dist/lib/index.cjs +2804 -0
- package/dist/lib/index.d.ts +8 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +11 -0
- package/dist/lib/index.mjs +2789 -0
- package/dist/lib/observable/index.cjs +386 -0
- package/dist/lib/observable/index.d.ts +4 -0
- package/dist/lib/observable/index.d.ts.map +1 -0
- package/dist/lib/observable/index.js +3 -0
- package/dist/lib/observable/index.mjs +364 -0
- package/dist/lib/observable/observable.cjs +384 -0
- package/dist/lib/observable/observable.d.ts +246 -0
- package/dist/lib/observable/observable.d.ts.map +1 -0
- package/dist/lib/observable/observable.js +268 -0
- package/dist/lib/observable/observable.mjs +361 -0
- package/dist/lib/observable/subscription.cjs +180 -0
- package/dist/lib/observable/subscription.d.ts +58 -0
- package/dist/lib/observable/subscription.d.ts.map +1 -0
- package/dist/lib/observable/subscription.js +177 -0
- package/dist/lib/observable/subscription.mjs +157 -0
- package/dist/lib/observable/types.cjs +18 -0
- package/dist/lib/observable/types.d.ts +44 -0
- package/dist/lib/observable/types.d.ts.map +1 -0
- package/dist/lib/observable/types.js +1 -0
- package/dist/lib/observable/types.mjs +0 -0
- package/dist/lib/predicates.cjs +44 -0
- package/dist/lib/predicates.d.ts +37 -0
- package/dist/lib/predicates.d.ts.map +1 -0
- package/dist/lib/predicates.js +62 -0
- package/dist/lib/predicates.mjs +23 -0
- package/dist/lib/signal/api.cjs +592 -0
- package/dist/lib/signal/api.d.ts +227 -0
- package/dist/lib/signal/api.d.ts.map +1 -0
- package/dist/lib/signal/api.js +228 -0
- package/dist/lib/signal/api.mjs +569 -0
- package/dist/lib/signal/cached-resource.cjs +726 -0
- package/dist/lib/signal/cached-resource.d.ts +86 -0
- package/dist/lib/signal/cached-resource.d.ts.map +1 -0
- package/dist/lib/signal/cached-resource.js +250 -0
- package/dist/lib/signal/cached-resource.mjs +704 -0
- package/dist/lib/signal/graph/children.cjs +326 -0
- package/dist/lib/signal/graph/children.d.ts +2 -0
- package/dist/lib/signal/graph/children.d.ts.map +1 -0
- package/dist/lib/signal/graph/children.js +30 -0
- package/dist/lib/signal/graph/children.mjs +303 -0
- package/dist/lib/signal/graph/compat.cjs +590 -0
- package/dist/lib/signal/graph/compat.d.ts +66 -0
- package/dist/lib/signal/graph/compat.d.ts.map +1 -0
- package/dist/lib/signal/graph/compat.js +197 -0
- package/dist/lib/signal/graph/compat.mjs +568 -0
- package/dist/lib/signal/graph/core.cjs +295 -0
- package/dist/lib/signal/graph/core.d.ts +99 -0
- package/dist/lib/signal/graph/core.d.ts.map +1 -0
- package/dist/lib/signal/graph/core.js +268 -0
- package/dist/lib/signal/graph/core.mjs +273 -0
- package/dist/lib/signal/graph/debounced.cjs +680 -0
- package/dist/lib/signal/graph/debounced.d.ts +67 -0
- package/dist/lib/signal/graph/debounced.d.ts.map +1 -0
- package/dist/lib/signal/graph/debounced.js +92 -0
- package/dist/lib/signal/graph/debounced.mjs +657 -0
- package/dist/lib/signal/graph/derived.cjs +508 -0
- package/dist/lib/signal/graph/derived.d.ts +14 -0
- package/dist/lib/signal/graph/derived.d.ts.map +1 -0
- package/dist/lib/signal/graph/derived.js +65 -0
- package/dist/lib/signal/graph/derived.mjs +485 -0
- package/dist/lib/signal/graph/detect.cjs +66 -0
- package/dist/lib/signal/graph/detect.d.ts +17 -0
- package/dist/lib/signal/graph/detect.d.ts.map +1 -0
- package/dist/lib/signal/graph/detect.js +39 -0
- package/dist/lib/signal/graph/detect.mjs +45 -0
- package/dist/lib/signal/graph/error-boundary.cjs +313 -0
- package/dist/lib/signal/graph/error-boundary.d.ts +16 -0
- package/dist/lib/signal/graph/error-boundary.d.ts.map +1 -0
- package/dist/lib/signal/graph/error-boundary.js +34 -0
- package/dist/lib/signal/graph/error-boundary.mjs +290 -0
- package/dist/lib/signal/graph/index.cjs +305 -0
- package/dist/lib/signal/graph/index.d.ts +22 -0
- package/dist/lib/signal/graph/index.d.ts.map +1 -0
- package/dist/lib/signal/graph/index.js +21 -0
- package/dist/lib/signal/graph/index.mjs +283 -0
- package/dist/lib/signal/graph/observe.cjs +198 -0
- package/dist/lib/signal/graph/observe.d.ts +185 -0
- package/dist/lib/signal/graph/observe.d.ts.map +1 -0
- package/dist/lib/signal/graph/observe.js +198 -0
- package/dist/lib/signal/graph/observe.mjs +175 -0
- package/dist/lib/signal/graph/resource.cjs +632 -0
- package/dist/lib/signal/graph/resource.d.ts +39 -0
- package/dist/lib/signal/graph/resource.d.ts.map +1 -0
- package/dist/lib/signal/graph/resource.js +165 -0
- package/dist/lib/signal/graph/resource.mjs +609 -0
- package/dist/lib/signal/graph/runtime.cjs +522 -0
- package/dist/lib/signal/graph/runtime.d.ts +80 -0
- package/dist/lib/signal/graph/runtime.d.ts.map +1 -0
- package/dist/lib/signal/graph/runtime.js +358 -0
- package/dist/lib/signal/graph/runtime.mjs +499 -0
- package/dist/lib/signal/graph/signal-next.cjs +1249 -0
- package/dist/lib/signal/graph/signal-next.d.ts +38 -0
- package/dist/lib/signal/graph/signal-next.d.ts.map +1 -0
- package/dist/lib/signal/graph/signal-next.js +44 -0
- package/dist/lib/signal/graph/signal-next.mjs +1227 -0
- package/dist/lib/signal/graph/ssr-hooks.cjs +89 -0
- package/dist/lib/signal/graph/ssr-hooks.d.ts +51 -0
- package/dist/lib/signal/graph/ssr-hooks.d.ts.map +1 -0
- package/dist/lib/signal/graph/ssr-hooks.js +80 -0
- package/dist/lib/signal/graph/ssr-hooks.mjs +68 -0
- package/dist/lib/signal/graph/state.cjs +72 -0
- package/dist/lib/signal/graph/state.d.ts +76 -0
- package/dist/lib/signal/graph/state.d.ts.map +1 -0
- package/dist/lib/signal/graph/state.js +99 -0
- package/dist/lib/signal/graph/state.mjs +49 -0
- package/dist/lib/signal/graph/suspense.cjs +313 -0
- package/dist/lib/signal/graph/suspense.d.ts +13 -0
- package/dist/lib/signal/graph/suspense.d.ts.map +1 -0
- package/dist/lib/signal/graph/suspense.js +36 -0
- package/dist/lib/signal/graph/suspense.mjs +290 -0
- package/dist/lib/signal/index-legacy.cjs +2582 -0
- package/dist/lib/signal/index-legacy.d.ts +12 -0
- package/dist/lib/signal/index-legacy.d.ts.map +1 -0
- package/dist/lib/signal/index-legacy.js +11 -0
- package/dist/lib/signal/index-legacy.mjs +2560 -0
- package/dist/lib/signal/index.cjs +1350 -0
- package/dist/lib/signal/index.d.ts +19 -0
- package/dist/lib/signal/index.d.ts.map +1 -0
- package/dist/lib/signal/index.js +19 -0
- package/dist/lib/signal/index.mjs +1328 -0
- package/dist/lib/signal/list.cjs +561 -0
- package/dist/lib/signal/list.d.ts +39 -0
- package/dist/lib/signal/list.d.ts.map +1 -0
- package/dist/lib/signal/list.js +172 -0
- package/dist/lib/signal/list.mjs +538 -0
- package/dist/lib/signal/resource-api.cjs +638 -0
- package/dist/lib/signal/resource-api.d.ts +19 -0
- package/dist/lib/signal/resource-api.d.ts.map +1 -0
- package/dist/lib/signal/resource-api.js +27 -0
- package/dist/lib/signal/resource-api.mjs +615 -0
- package/dist/lib/signal/signal.cjs +2035 -0
- package/dist/lib/signal/signal.d.ts +303 -0
- package/dist/lib/signal/signal.d.ts.map +1 -0
- package/dist/lib/signal/signal.js +1233 -0
- package/dist/lib/signal/signal.mjs +2012 -0
- package/dist/lib/signal/types.cjs +38 -0
- package/dist/lib/signal/types.d.ts +133 -0
- package/dist/lib/signal/types.d.ts.map +1 -0
- package/dist/lib/signal/types.js +38 -0
- package/dist/lib/signal/types.mjs +17 -0
- package/dist/lib/signal/utilities.cjs +1024 -0
- package/dist/lib/signal/utilities.d.ts +247 -0
- package/dist/lib/signal/utilities.d.ts.map +1 -0
- package/dist/lib/signal/utilities.js +346 -0
- package/dist/lib/signal/utilities.mjs +1002 -0
- package/dist/lib/store/api.cjs +662 -0
- package/dist/lib/store/api.d.ts +40 -0
- package/dist/lib/store/api.d.ts.map +1 -0
- package/dist/lib/store/api.js +63 -0
- package/dist/lib/store/api.mjs +646 -0
- package/dist/lib/store/index.cjs +741 -0
- package/dist/lib/store/index.d.ts +16 -0
- package/dist/lib/store/index.d.ts.map +1 -0
- package/dist/lib/store/index.js +13 -0
- package/dist/lib/store/index.mjs +726 -0
- package/dist/lib/store/setter.types.cjs +18 -0
- package/dist/lib/store/setter.types.d.ts +131 -0
- package/dist/lib/store/setter.types.d.ts.map +1 -0
- package/dist/lib/store/setter.types.js +65 -0
- package/dist/lib/store/setter.types.mjs +0 -0
- package/dist/lib/store/store.cjs +708 -0
- package/dist/lib/store/store.d.ts +142 -0
- package/dist/lib/store/store.d.ts.map +1 -0
- package/dist/lib/store/store.js +812 -0
- package/dist/lib/store/store.mjs +694 -0
- package/dist/lib/store/types.cjs +18 -0
- package/dist/lib/store/types.d.ts +57 -0
- package/dist/lib/store/types.d.ts.map +1 -0
- package/dist/lib/store/types.js +1 -0
- package/dist/lib/store/types.mjs +0 -0
- package/dist/lib/store/utils.cjs +43 -0
- package/dist/lib/store/utils.d.ts +13 -0
- package/dist/lib/store/utils.d.ts.map +1 -0
- package/dist/lib/store/utils.js +29 -0
- package/dist/lib/store/utils.mjs +22 -0
- package/dist/lib/subject.cjs +450 -0
- package/dist/lib/subject.d.ts +14 -0
- package/dist/lib/subject.d.ts.map +1 -0
- package/dist/lib/subject.js +81 -0
- package/dist/lib/subject.mjs +427 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/dist/version.generated.cjs +27 -0
- package/dist/version.generated.d.ts +3 -0
- package/dist/version.generated.d.ts.map +1 -0
- package/dist/version.generated.js +3 -0
- package/dist/version.generated.mjs +7 -0
- package/package.json +115 -0
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/lib/signal/graph/runtime.ts
|
|
21
|
+
var runtime_exports = {};
|
|
22
|
+
__export(runtime_exports, {
|
|
23
|
+
afterWrite: () => afterWrite,
|
|
24
|
+
batch: () => batch,
|
|
25
|
+
createChildOwner: () => createChildOwner,
|
|
26
|
+
createContext: () => createContext,
|
|
27
|
+
createRoot: () => createRoot,
|
|
28
|
+
disposeScope: () => disposeScope,
|
|
29
|
+
effect: () => effect,
|
|
30
|
+
flushSync: () => flushSync,
|
|
31
|
+
getOwner: () => getOwner,
|
|
32
|
+
isOwnerDisposed: () => isOwnerDisposed,
|
|
33
|
+
onCleanup: () => onCleanup,
|
|
34
|
+
provide: () => provide,
|
|
35
|
+
readContextFrom: () => readContextFrom,
|
|
36
|
+
reportSuspend: () => reportSuspend,
|
|
37
|
+
runWithOwner: () => runWithOwner,
|
|
38
|
+
setErrorHandler: () => setErrorHandler,
|
|
39
|
+
setOwner: () => setOwner,
|
|
40
|
+
setScheduler: () => setScheduler,
|
|
41
|
+
setSuspendHandler: () => setSuspendHandler,
|
|
42
|
+
useContext: () => useContext
|
|
43
|
+
});
|
|
44
|
+
module.exports = __toCommonJS(runtime_exports);
|
|
45
|
+
|
|
46
|
+
// src/version.generated.ts
|
|
47
|
+
var VERSION = "1.0.0-alpha.100";
|
|
48
|
+
|
|
49
|
+
// src/lib/signal/graph/state.ts
|
|
50
|
+
var MAJOR = VERSION.split(".")[0];
|
|
51
|
+
var KEY = `__fluixi_signal_state_v${MAJOR}__`;
|
|
52
|
+
var VERSIONS_KEY = `__fluixi_signal_builds_v${MAJOR}__`;
|
|
53
|
+
var defaultSchedule = (run) => {
|
|
54
|
+
if (typeof queueMicrotask === "function") queueMicrotask(run);
|
|
55
|
+
else void Promise.resolve().then(run);
|
|
56
|
+
};
|
|
57
|
+
function defaults() {
|
|
58
|
+
return {
|
|
59
|
+
consumer: null,
|
|
60
|
+
untracked: false,
|
|
61
|
+
owner: null,
|
|
62
|
+
queue: [],
|
|
63
|
+
scheduled: false,
|
|
64
|
+
flushing: false,
|
|
65
|
+
batchDepth: 0,
|
|
66
|
+
hostSchedule: defaultSchedule,
|
|
67
|
+
onSuspend: null,
|
|
68
|
+
onError: null,
|
|
69
|
+
observer: null
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
var realm = globalThis;
|
|
73
|
+
function backfillState(existing) {
|
|
74
|
+
const fresh = defaults();
|
|
75
|
+
const target = existing;
|
|
76
|
+
for (const field of Object.keys(fresh)) {
|
|
77
|
+
if (!(field in existing)) target[field] = fresh[field];
|
|
78
|
+
}
|
|
79
|
+
return existing;
|
|
80
|
+
}
|
|
81
|
+
function claim() {
|
|
82
|
+
const existing = realm[KEY];
|
|
83
|
+
return existing ? backfillState(existing) : realm[KEY] = defaults();
|
|
84
|
+
}
|
|
85
|
+
var G = claim();
|
|
86
|
+
(realm[VERSIONS_KEY] ??= []).push(VERSION);
|
|
87
|
+
|
|
88
|
+
// src/lib/signal/graph/observe.ts
|
|
89
|
+
function observeReactiveNodes(next) {
|
|
90
|
+
G.observer = next;
|
|
91
|
+
return () => {
|
|
92
|
+
if (G.observer === next) G.observer = null;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
var running = [];
|
|
96
|
+
var origin;
|
|
97
|
+
var currentScope;
|
|
98
|
+
function reportReactiveNode(report) {
|
|
99
|
+
const observer = G.observer;
|
|
100
|
+
if (observer) {
|
|
101
|
+
observer.created(
|
|
102
|
+
report.parents === void 0 ? { ...report, parents: running, origin: report.origin ?? origin, scope: report.scope ?? currentScope } : { ...report, scope: report.scope ?? currentScope }
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function enterReactiveRun(node) {
|
|
107
|
+
if (!G.observer) return false;
|
|
108
|
+
running.push(node);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
function exitReactiveRun() {
|
|
112
|
+
running.pop();
|
|
113
|
+
}
|
|
114
|
+
function reportReactiveRun(node) {
|
|
115
|
+
G.observer?.ran?.(node);
|
|
116
|
+
}
|
|
117
|
+
function reportReactiveContextCreated(id) {
|
|
118
|
+
G.observer?.contextCreated?.(id);
|
|
119
|
+
}
|
|
120
|
+
function reportReactiveContext(id, kind, value) {
|
|
121
|
+
const observer = G.observer;
|
|
122
|
+
if (!observer?.context || !running.length) return;
|
|
123
|
+
observer.context(running[running.length - 1], id, kind, value);
|
|
124
|
+
}
|
|
125
|
+
function reportReactiveDispose(node) {
|
|
126
|
+
G.observer?.disposed?.(node);
|
|
127
|
+
}
|
|
128
|
+
var HOOK = "__FLUIXI_DEVTOOLS_HOOK__";
|
|
129
|
+
var hook = globalThis[HOOK];
|
|
130
|
+
if (typeof hook?.inject === "function") {
|
|
131
|
+
try {
|
|
132
|
+
hook.inject({ observeReactiveNodes, version: VERSION });
|
|
133
|
+
} catch {
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// src/lib/signal/graph/core.ts
|
|
138
|
+
var CLEAN = 0;
|
|
139
|
+
var CHECK = 1;
|
|
140
|
+
var DIRTY = 2;
|
|
141
|
+
var Source = class {
|
|
142
|
+
constructor() {
|
|
143
|
+
/** Computeds, and watched leaves, that read this node. */
|
|
144
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
145
|
+
this.observers = null;
|
|
146
|
+
/** Watchers eagerly observing this node, which is how `runtime.ts` schedules effects. */
|
|
147
|
+
this.watchers = null;
|
|
148
|
+
/** Bumped whenever this node's value actually changes (equality-gated). */
|
|
149
|
+
this.version = 0;
|
|
150
|
+
}
|
|
151
|
+
/** Settle this node so a reader sees a current value/version. Overridden by Computed. */
|
|
152
|
+
updateIfNecessary() {
|
|
153
|
+
}
|
|
154
|
+
/** Link the current consumer (if any) as an observer of this node. */
|
|
155
|
+
track() {
|
|
156
|
+
if (G.untracked) return;
|
|
157
|
+
const consumer = G.consumer;
|
|
158
|
+
if (!consumer) return;
|
|
159
|
+
(this.observers ??= /* @__PURE__ */ new Set()).add(consumer);
|
|
160
|
+
(consumer.sources ??= /* @__PURE__ */ new Set()).add(this);
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
var Computed = class extends Source {
|
|
164
|
+
constructor(fn, options) {
|
|
165
|
+
super();
|
|
166
|
+
this._threw = false;
|
|
167
|
+
this._initialized = false;
|
|
168
|
+
this.state = DIRTY;
|
|
169
|
+
/** Nodes this computation read on its last run. Rebuilt on every run. */
|
|
170
|
+
this.sources = null;
|
|
171
|
+
this._fn = fn;
|
|
172
|
+
this._equals = options?.equals === false ? () => false : options?.equals ?? Object.is;
|
|
173
|
+
}
|
|
174
|
+
get() {
|
|
175
|
+
if (G.consumer === this) {
|
|
176
|
+
throw new Error("Signal.Computed cannot read itself");
|
|
177
|
+
}
|
|
178
|
+
this.track();
|
|
179
|
+
this.updateIfNecessary();
|
|
180
|
+
if (this._threw) throw this._error;
|
|
181
|
+
return this._value;
|
|
182
|
+
}
|
|
183
|
+
/** Settle, if CHECK, verify sources; if DIRTY (or never run), recompute. */
|
|
184
|
+
updateIfNecessary() {
|
|
185
|
+
if (this.state === CHECK) {
|
|
186
|
+
if (this.sources) {
|
|
187
|
+
for (const s of this.sources) {
|
|
188
|
+
s.updateIfNecessary();
|
|
189
|
+
if (this.state === DIRTY) break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (this.state === DIRTY || !this._initialized) this.recompute();
|
|
194
|
+
this.state = CLEAN;
|
|
195
|
+
}
|
|
196
|
+
recompute() {
|
|
197
|
+
if (this.sources) {
|
|
198
|
+
for (const s of this.sources) s.observers?.delete(this);
|
|
199
|
+
this.sources.clear();
|
|
200
|
+
}
|
|
201
|
+
const prevConsumer = G.consumer;
|
|
202
|
+
const prevUntracked = G.untracked;
|
|
203
|
+
const watched = enterReactiveRun(this);
|
|
204
|
+
G.consumer = this;
|
|
205
|
+
G.untracked = false;
|
|
206
|
+
let next;
|
|
207
|
+
let threw = false;
|
|
208
|
+
let err;
|
|
209
|
+
try {
|
|
210
|
+
next = this._fn();
|
|
211
|
+
} catch (e) {
|
|
212
|
+
threw = true;
|
|
213
|
+
err = e;
|
|
214
|
+
next = this._value;
|
|
215
|
+
} finally {
|
|
216
|
+
G.consumer = prevConsumer;
|
|
217
|
+
G.untracked = prevUntracked;
|
|
218
|
+
if (watched) exitReactiveRun();
|
|
219
|
+
}
|
|
220
|
+
const changed = !this._initialized || this._threw !== threw || (threw ? err !== this._error : !this._equals(this._value, next));
|
|
221
|
+
this._initialized = true;
|
|
222
|
+
this._threw = threw;
|
|
223
|
+
this._error = err;
|
|
224
|
+
this._value = next;
|
|
225
|
+
reportReactiveRun(this);
|
|
226
|
+
if (changed) {
|
|
227
|
+
this.version++;
|
|
228
|
+
if (this.observers) for (const o of [...this.observers]) o.markDirty(DIRTY);
|
|
229
|
+
notifyWatchers(this);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Push a maybe-dirty mark. A direct observer of a changed node gets DIRTY; its
|
|
234
|
+
* own observers get CHECK (recurse), stopping where already marked, so the
|
|
235
|
+
* push is O(newly-dirtied) and never recomputes.
|
|
236
|
+
*/
|
|
237
|
+
markDirty(level) {
|
|
238
|
+
if (this.state >= level) return;
|
|
239
|
+
const wasClean = this.state === CLEAN;
|
|
240
|
+
this.state = level;
|
|
241
|
+
if (wasClean) {
|
|
242
|
+
if (this.observers) for (const o of [...this.observers]) o.markDirty(CHECK);
|
|
243
|
+
notifyWatchers(this);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
peek() {
|
|
247
|
+
this.updateIfNecessary();
|
|
248
|
+
if (this._threw) throw this._error;
|
|
249
|
+
return this._value;
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
function notifyWatchers(node) {
|
|
253
|
+
if (!node.watchers) return;
|
|
254
|
+
for (const w of [...node.watchers]) w._notify(node);
|
|
255
|
+
}
|
|
256
|
+
var Watcher = class {
|
|
257
|
+
constructor(notify) {
|
|
258
|
+
this._watched = /* @__PURE__ */ new Set();
|
|
259
|
+
this._pending = /* @__PURE__ */ new Set();
|
|
260
|
+
this._notifyFn = notify;
|
|
261
|
+
}
|
|
262
|
+
watch(...nodes) {
|
|
263
|
+
for (const n of nodes) {
|
|
264
|
+
this._watched.add(n);
|
|
265
|
+
(n.watchers ??= /* @__PURE__ */ new Set()).add(this);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
unwatch(...nodes) {
|
|
269
|
+
for (const n of nodes) {
|
|
270
|
+
this._watched.delete(n);
|
|
271
|
+
n.watchers?.delete(this);
|
|
272
|
+
this._pending.delete(n);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/** Watched nodes that may have changed since the last getPending(). */
|
|
276
|
+
getPending() {
|
|
277
|
+
const out = [...this._pending];
|
|
278
|
+
this._pending.clear();
|
|
279
|
+
return out;
|
|
280
|
+
}
|
|
281
|
+
/** @internal, a watched node became non-clean. Edge-triggered: notify once. */
|
|
282
|
+
_notify(node) {
|
|
283
|
+
if (!this._watched.has(node) || this._pending.has(node)) return;
|
|
284
|
+
const wasEmpty = this._pending.size === 0;
|
|
285
|
+
this._pending.add(node);
|
|
286
|
+
if (wasEmpty) this._notifyFn();
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
function untrack(fn) {
|
|
290
|
+
if (G.untracked) return fn();
|
|
291
|
+
G.untracked = true;
|
|
292
|
+
try {
|
|
293
|
+
return fn();
|
|
294
|
+
} finally {
|
|
295
|
+
G.untracked = false;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// src/lib/signal/graph/runtime.ts
|
|
300
|
+
function createChildOwner(parent) {
|
|
301
|
+
const owner = makeOwner(parent);
|
|
302
|
+
if (parent) (parent.owned ??= []).push(owner);
|
|
303
|
+
return owner;
|
|
304
|
+
}
|
|
305
|
+
function disposeScope(owner, final = true) {
|
|
306
|
+
disposeOwner(owner, final);
|
|
307
|
+
}
|
|
308
|
+
function isOwnerDisposed(owner) {
|
|
309
|
+
return !!owner && owner.disposed === true;
|
|
310
|
+
}
|
|
311
|
+
function makeOwner(parent) {
|
|
312
|
+
return { cleanups: null, owned: null, parent, contexts: null };
|
|
313
|
+
}
|
|
314
|
+
function createContext(defaultValue, name) {
|
|
315
|
+
const id = Symbol(name ?? "context");
|
|
316
|
+
reportReactiveContextCreated(id);
|
|
317
|
+
const Provider = (props) => {
|
|
318
|
+
reportReactiveContext(id, "provide", props.value);
|
|
319
|
+
const parent = G.owner;
|
|
320
|
+
const owner = makeOwner(parent);
|
|
321
|
+
(owner.contexts = /* @__PURE__ */ new Map()).set(id, props.value);
|
|
322
|
+
if (parent) (parent.owned ??= []).push(owner);
|
|
323
|
+
G.owner = owner;
|
|
324
|
+
try {
|
|
325
|
+
return props.children;
|
|
326
|
+
} finally {
|
|
327
|
+
G.owner = parent;
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
return { id, defaultValue, Provider };
|
|
331
|
+
}
|
|
332
|
+
function useContext(context) {
|
|
333
|
+
let o = G.owner;
|
|
334
|
+
while (o) {
|
|
335
|
+
if (o.contexts && o.contexts.has(context.id)) {
|
|
336
|
+
const found = o.contexts.get(context.id);
|
|
337
|
+
reportReactiveContext(context.id, "read", found);
|
|
338
|
+
return found;
|
|
339
|
+
}
|
|
340
|
+
o = o.parent;
|
|
341
|
+
}
|
|
342
|
+
reportReactiveContext(context.id, "read", context.defaultValue);
|
|
343
|
+
return context.defaultValue;
|
|
344
|
+
}
|
|
345
|
+
function readContextFrom(owner, context) {
|
|
346
|
+
let o = owner;
|
|
347
|
+
while (o) {
|
|
348
|
+
if (o.contexts && o.contexts.has(context.id)) return o.contexts.get(context.id);
|
|
349
|
+
o = o.parent;
|
|
350
|
+
}
|
|
351
|
+
return context.defaultValue;
|
|
352
|
+
}
|
|
353
|
+
function provide(context, value, fn) {
|
|
354
|
+
const owner = makeOwner(G.owner);
|
|
355
|
+
(owner.contexts = /* @__PURE__ */ new Map()).set(context.id, value);
|
|
356
|
+
if (G.owner) (G.owner.owned ??= []).push(owner);
|
|
357
|
+
const prev = G.owner;
|
|
358
|
+
G.owner = owner;
|
|
359
|
+
try {
|
|
360
|
+
return fn();
|
|
361
|
+
} finally {
|
|
362
|
+
G.owner = prev;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
function setSuspendHandler(fn) {
|
|
366
|
+
G.onSuspend = fn;
|
|
367
|
+
}
|
|
368
|
+
function reportSuspend(promise) {
|
|
369
|
+
if (G.onSuspend) {
|
|
370
|
+
G.onSuspend(promise, G.owner);
|
|
371
|
+
return true;
|
|
372
|
+
}
|
|
373
|
+
return false;
|
|
374
|
+
}
|
|
375
|
+
function setErrorHandler(fn) {
|
|
376
|
+
G.onError = fn;
|
|
377
|
+
}
|
|
378
|
+
function getOwner() {
|
|
379
|
+
return G.owner;
|
|
380
|
+
}
|
|
381
|
+
function setOwner(owner) {
|
|
382
|
+
const prev = G.owner;
|
|
383
|
+
G.owner = owner;
|
|
384
|
+
return prev;
|
|
385
|
+
}
|
|
386
|
+
function runWithOwner(owner, fn) {
|
|
387
|
+
const prev = G.owner;
|
|
388
|
+
G.owner = owner;
|
|
389
|
+
try {
|
|
390
|
+
return fn();
|
|
391
|
+
} finally {
|
|
392
|
+
G.owner = prev;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
function onCleanup(fn) {
|
|
396
|
+
if (!G.owner) return;
|
|
397
|
+
if (G.owner.disposed) {
|
|
398
|
+
fn();
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
(G.owner.cleanups ??= []).push(fn);
|
|
402
|
+
}
|
|
403
|
+
function disposeOwner(owner, final = true) {
|
|
404
|
+
if (owner.disposed) return;
|
|
405
|
+
if (owner.owned) {
|
|
406
|
+
for (let i = owner.owned.length - 1; i >= 0; i--) disposeOwner(owner.owned[i]);
|
|
407
|
+
owner.owned = null;
|
|
408
|
+
}
|
|
409
|
+
if (owner.cleanups) {
|
|
410
|
+
for (let i = owner.cleanups.length - 1; i >= 0; i--) owner.cleanups[i]();
|
|
411
|
+
owner.cleanups = null;
|
|
412
|
+
}
|
|
413
|
+
if (final) owner.disposed = true;
|
|
414
|
+
}
|
|
415
|
+
function createRoot(fn) {
|
|
416
|
+
const owner = makeOwner(G.owner);
|
|
417
|
+
if (G.owner) (G.owner.owned ??= []).push(owner);
|
|
418
|
+
const prev = G.owner;
|
|
419
|
+
G.owner = owner;
|
|
420
|
+
try {
|
|
421
|
+
return untrack(() => fn(() => disposeOwner(owner)));
|
|
422
|
+
} finally {
|
|
423
|
+
G.owner = prev;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
function setScheduler(fn) {
|
|
427
|
+
G.hostSchedule = fn ?? ((run) => void Promise.resolve().then(run));
|
|
428
|
+
}
|
|
429
|
+
function enqueue(e) {
|
|
430
|
+
if (e.queued) return;
|
|
431
|
+
e.queued = true;
|
|
432
|
+
G.queue.push(e);
|
|
433
|
+
if (!G.scheduled && G.batchDepth === 0) {
|
|
434
|
+
G.scheduled = true;
|
|
435
|
+
G.hostSchedule(flushSync);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
function flushSync() {
|
|
439
|
+
G.scheduled = false;
|
|
440
|
+
if (G.flushing) return;
|
|
441
|
+
G.flushing = true;
|
|
442
|
+
let guard = 0;
|
|
443
|
+
let failed = false;
|
|
444
|
+
let first;
|
|
445
|
+
try {
|
|
446
|
+
while (G.queue.length) {
|
|
447
|
+
if (++guard > 1e5) throw new Error("[fluixi] effect flush did not settle (cycle?)");
|
|
448
|
+
const batchOf = G.queue;
|
|
449
|
+
G.queue = [];
|
|
450
|
+
for (const e of batchOf) {
|
|
451
|
+
e.queued = false;
|
|
452
|
+
if (e.disposed) continue;
|
|
453
|
+
try {
|
|
454
|
+
e.run();
|
|
455
|
+
} catch (error) {
|
|
456
|
+
if (!failed) {
|
|
457
|
+
failed = true;
|
|
458
|
+
first = error;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
} finally {
|
|
464
|
+
G.flushing = false;
|
|
465
|
+
}
|
|
466
|
+
if (failed) throw first;
|
|
467
|
+
}
|
|
468
|
+
function afterWrite() {
|
|
469
|
+
if (G.batchDepth === 0) flushSync();
|
|
470
|
+
}
|
|
471
|
+
function batch(fn) {
|
|
472
|
+
G.batchDepth++;
|
|
473
|
+
try {
|
|
474
|
+
return fn();
|
|
475
|
+
} finally {
|
|
476
|
+
if (--G.batchDepth === 0) flushSync();
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
var EffectNode = class {
|
|
480
|
+
constructor(fn, report = false, name) {
|
|
481
|
+
this.queued = false;
|
|
482
|
+
this.disposed = false;
|
|
483
|
+
this.owner = makeOwner(G.owner);
|
|
484
|
+
if (G.owner) (G.owner.cleanups ??= []).push(() => this.dispose());
|
|
485
|
+
this.computed = new Computed(() => {
|
|
486
|
+
disposeOwner(this.owner, false);
|
|
487
|
+
runWithOwner(this.owner, () => {
|
|
488
|
+
const r = fn();
|
|
489
|
+
if (typeof r === "function") (this.owner.cleanups ??= []).push(r);
|
|
490
|
+
});
|
|
491
|
+
});
|
|
492
|
+
reportReactiveNode({ kind: "effect", node: this.computed, handle: this, internal: !report, ...name ? { name } : {} });
|
|
493
|
+
this.watcher = new Watcher(() => enqueue(this));
|
|
494
|
+
this.run();
|
|
495
|
+
this.watcher.watch(this.computed);
|
|
496
|
+
}
|
|
497
|
+
run() {
|
|
498
|
+
if (this.disposed) return;
|
|
499
|
+
this.watcher.getPending();
|
|
500
|
+
try {
|
|
501
|
+
this.computed.get();
|
|
502
|
+
} catch (e) {
|
|
503
|
+
if (e && typeof e.then === "function" && G.onSuspend) {
|
|
504
|
+
G.onSuspend(e, this.owner);
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
if (G.onError && G.onError(e, this.owner)) return;
|
|
508
|
+
throw e;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
dispose() {
|
|
512
|
+
if (this.disposed) return;
|
|
513
|
+
this.disposed = true;
|
|
514
|
+
reportReactiveDispose(this.computed);
|
|
515
|
+
this.watcher.unwatch(this.computed);
|
|
516
|
+
disposeOwner(this.owner);
|
|
517
|
+
}
|
|
518
|
+
};
|
|
519
|
+
function effect(fn, report = false, name) {
|
|
520
|
+
const node = new EffectNode(fn, report, name);
|
|
521
|
+
return () => node.dispose();
|
|
522
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export interface Owner {
|
|
2
|
+
cleanups: Array<() => void> | null;
|
|
3
|
+
owned: Owner[] | null;
|
|
4
|
+
parent: Owner | null;
|
|
5
|
+
/** Context values provided at this scope: useContext walks up the parent chain. */
|
|
6
|
+
contexts: Map<symbol, unknown> | null;
|
|
7
|
+
/** Set once disposeOwner has torn this scope down; guards deferred work (e.g. a
|
|
8
|
+
* queued onMount) from running against, and resurrecting, a dead owner. */
|
|
9
|
+
disposed?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A child scope of `parent`, attached so the parent's teardown disposes it too.
|
|
13
|
+
*
|
|
14
|
+
* For a derivation that re-runs: context still resolves up the chain from the
|
|
15
|
+
* creation-time owner, while anything registered during a run belongs to this
|
|
16
|
+
* scope and can be torn down before the next one: instead of accumulating on
|
|
17
|
+
* the enclosing scope and only running when that finally dies.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createChildOwner(parent: Owner | null): Owner;
|
|
20
|
+
/**
|
|
21
|
+
* Tear down a scope's children and cleanups.
|
|
22
|
+
*
|
|
23
|
+
* `final: false` keeps the scope itself alive and reusable, what a re-running
|
|
24
|
+
* derivation needs between runs.
|
|
25
|
+
*/
|
|
26
|
+
export declare function disposeScope(owner: Owner, final?: boolean): void;
|
|
27
|
+
/** True once `owner` has been disposed. Deferred work should bail rather than run. */
|
|
28
|
+
export declare function isOwnerDisposed(owner: Owner | null): boolean;
|
|
29
|
+
export interface Context<T> {
|
|
30
|
+
id: symbol;
|
|
31
|
+
defaultValue: T | undefined;
|
|
32
|
+
/** Component that stamps `value` for descendants: `<Ctx.Provider value={...}>children</Ctx.Provider>`. */
|
|
33
|
+
Provider: (props: {
|
|
34
|
+
value: T;
|
|
35
|
+
children?: unknown;
|
|
36
|
+
debug?: boolean;
|
|
37
|
+
}) => any;
|
|
38
|
+
}
|
|
39
|
+
export declare function createContext<T>(defaultValue?: T, name?: string): Context<T>;
|
|
40
|
+
/** Read the nearest provided value for `context`, or its default. */
|
|
41
|
+
export declare function useContext<T>(context: {
|
|
42
|
+
id: symbol;
|
|
43
|
+
defaultValue?: T;
|
|
44
|
+
}): T | undefined;
|
|
45
|
+
/** Read `context` starting from a specific owner chain (not the current scope). */
|
|
46
|
+
export declare function readContextFrom<T>(owner: Owner | null, context: Context<T>): T | undefined;
|
|
47
|
+
/** Run `fn` in a child scope that provides `value` for `context`. */
|
|
48
|
+
export declare function provide<T, R>(context: Context<T>, value: T, fn: () => R): R;
|
|
49
|
+
/** Register how a thrown promise (a suspended read) is reported to a boundary. */
|
|
50
|
+
export declare function setSuspendHandler(fn: ((promise: Promise<unknown>, owner: Owner | null) => void) | null): void;
|
|
51
|
+
/** Report a suspended read (thrown promise) to the nearest boundary from the current owner. */
|
|
52
|
+
export declare function reportSuspend(promise: Promise<unknown>): boolean;
|
|
53
|
+
/** Register how a thrown error is routed to an error boundary. Return true if handled. */
|
|
54
|
+
export declare function setErrorHandler(fn: ((error: unknown, owner: Owner | null) => boolean) | null): void;
|
|
55
|
+
export declare function getOwner(): Owner | null;
|
|
56
|
+
/** Set the current owner directly, returning the previous one. (Framework render glue.) */
|
|
57
|
+
export declare function setOwner(owner: Owner | null): Owner | null;
|
|
58
|
+
export declare function runWithOwner<T>(owner: Owner | null, fn: () => T): T;
|
|
59
|
+
/** Register a teardown for the current owner scope. */
|
|
60
|
+
export declare function onCleanup(fn: () => void): void;
|
|
61
|
+
/**
|
|
62
|
+
* Create a root reactive scope with explicit disposal (TC39 has no ownership). Untracked: what
|
|
63
|
+
* runs in it belongs to it, so the computation that created it does not depend on its reads.
|
|
64
|
+
*/
|
|
65
|
+
export declare function createRoot<T>(fn: (dispose: () => void) => T): T;
|
|
66
|
+
export declare function setScheduler(fn: ((run: () => void) => void) | null): void;
|
|
67
|
+
/** Drain all pending effects now (synchronously). */
|
|
68
|
+
export declare function flushSync(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Run pending effects after a write completes, but only at the top level (not
|
|
71
|
+
* inside a batch). A single write thus marks the whole graph dirty first, then
|
|
72
|
+
* flushes once (legacy-equivalent synchronous effects, glitch-free). The `G.flushing`
|
|
73
|
+
* guard makes a write inside an effect a no-op here (the running loop drains it).
|
|
74
|
+
*/
|
|
75
|
+
export declare function afterWrite(): void;
|
|
76
|
+
/** Group writes so dependent effects flush once, at the end. */
|
|
77
|
+
export declare function batch<T>(fn: () => T): T;
|
|
78
|
+
/** A re-running side effect. Runs once now, then again (G.scheduled) when deps change. */
|
|
79
|
+
export declare function effect(fn: () => void | (() => void), report?: boolean, name?: string): () => void;
|
|
80
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/lib/signal/graph/runtime.ts"],"names":[],"mappings":"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"}
|