229 lines
5.7 KiB
JavaScript
229 lines
5.7 KiB
JavaScript
var ReactiveFlags = /* @__PURE__ */ ((ReactiveFlags2) => {
|
|
ReactiveFlags2[ReactiveFlags2["None"] = 0] = "None";
|
|
ReactiveFlags2[ReactiveFlags2["Mutable"] = 1] = "Mutable";
|
|
ReactiveFlags2[ReactiveFlags2["Watching"] = 2] = "Watching";
|
|
ReactiveFlags2[ReactiveFlags2["RecursedCheck"] = 4] = "RecursedCheck";
|
|
ReactiveFlags2[ReactiveFlags2["Recursed"] = 8] = "Recursed";
|
|
ReactiveFlags2[ReactiveFlags2["Dirty"] = 16] = "Dirty";
|
|
ReactiveFlags2[ReactiveFlags2["Pending"] = 32] = "Pending";
|
|
return ReactiveFlags2;
|
|
})(ReactiveFlags || {});
|
|
// @__NO_SIDE_EFFECTS__
|
|
function createReactiveSystem({
|
|
update,
|
|
notify,
|
|
unwatched
|
|
}) {
|
|
return {
|
|
link,
|
|
unlink,
|
|
propagate,
|
|
checkDirty,
|
|
shallowPropagate
|
|
};
|
|
function link(dep, sub, version) {
|
|
const prevDep = sub.depsTail;
|
|
if (prevDep !== void 0 && prevDep.dep === dep) {
|
|
return;
|
|
}
|
|
const nextDep = prevDep !== void 0 ? prevDep.nextDep : sub.deps;
|
|
if (nextDep !== void 0 && nextDep.dep === dep) {
|
|
nextDep.version = version;
|
|
sub.depsTail = nextDep;
|
|
return;
|
|
}
|
|
const prevSub = dep.subsTail;
|
|
if (prevSub !== void 0 && prevSub.version === version && prevSub.sub === sub) {
|
|
return;
|
|
}
|
|
const newLink = sub.depsTail = dep.subsTail = {
|
|
version,
|
|
dep,
|
|
sub,
|
|
prevDep,
|
|
nextDep,
|
|
prevSub,
|
|
nextSub: void 0
|
|
};
|
|
if (nextDep !== void 0) {
|
|
nextDep.prevDep = newLink;
|
|
}
|
|
if (prevDep !== void 0) {
|
|
prevDep.nextDep = newLink;
|
|
} else {
|
|
sub.deps = newLink;
|
|
}
|
|
if (prevSub !== void 0) {
|
|
prevSub.nextSub = newLink;
|
|
} else {
|
|
dep.subs = newLink;
|
|
}
|
|
}
|
|
function unlink(link2, sub = link2.sub) {
|
|
const dep = link2.dep;
|
|
const prevDep = link2.prevDep;
|
|
const nextDep = link2.nextDep;
|
|
const nextSub = link2.nextSub;
|
|
const prevSub = link2.prevSub;
|
|
if (nextDep !== void 0) {
|
|
nextDep.prevDep = prevDep;
|
|
} else {
|
|
sub.depsTail = prevDep;
|
|
}
|
|
if (prevDep !== void 0) {
|
|
prevDep.nextDep = nextDep;
|
|
} else {
|
|
sub.deps = nextDep;
|
|
}
|
|
if (nextSub !== void 0) {
|
|
nextSub.prevSub = prevSub;
|
|
} else {
|
|
dep.subsTail = prevSub;
|
|
}
|
|
if (prevSub !== void 0) {
|
|
prevSub.nextSub = nextSub;
|
|
} else if ((dep.subs = nextSub) === void 0) {
|
|
unwatched(dep);
|
|
}
|
|
return nextDep;
|
|
}
|
|
function propagate(link2) {
|
|
let next = link2.nextSub;
|
|
let stack;
|
|
top: do {
|
|
const sub = link2.sub;
|
|
let flags = sub.flags;
|
|
if (!(flags & (4 | 8 | 16 | 32))) {
|
|
sub.flags = flags | 32;
|
|
} else if (!(flags & (4 | 8))) {
|
|
flags = 0;
|
|
} else if (!(flags & 4)) {
|
|
sub.flags = flags & -9 | 32;
|
|
} else if (!(flags & (16 | 32)) && isValidLink(link2, sub)) {
|
|
sub.flags = flags | (8 | 32);
|
|
flags &= 1;
|
|
} else {
|
|
flags = 0;
|
|
}
|
|
if (flags & 2) {
|
|
notify(sub);
|
|
}
|
|
if (flags & 1) {
|
|
const subSubs = sub.subs;
|
|
if (subSubs !== void 0) {
|
|
const nextSub = (link2 = subSubs).nextSub;
|
|
if (nextSub !== void 0) {
|
|
stack = { value: next, prev: stack };
|
|
next = nextSub;
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
if ((link2 = next) !== void 0) {
|
|
next = link2.nextSub;
|
|
continue;
|
|
}
|
|
while (stack !== void 0) {
|
|
link2 = stack.value;
|
|
stack = stack.prev;
|
|
if (link2 !== void 0) {
|
|
next = link2.nextSub;
|
|
continue top;
|
|
}
|
|
}
|
|
break;
|
|
} while (true);
|
|
}
|
|
function checkDirty(link2, sub) {
|
|
let stack;
|
|
let checkDepth = 0;
|
|
let dirty = false;
|
|
top: do {
|
|
const dep = link2.dep;
|
|
const flags = dep.flags;
|
|
if (sub.flags & 16) {
|
|
dirty = true;
|
|
} else if ((flags & (1 | 16)) === (1 | 16)) {
|
|
if (update(dep)) {
|
|
const subs = dep.subs;
|
|
if (subs.nextSub !== void 0) {
|
|
shallowPropagate(subs);
|
|
}
|
|
dirty = true;
|
|
}
|
|
} else if ((flags & (1 | 32)) === (1 | 32)) {
|
|
if (link2.nextSub !== void 0 || link2.prevSub !== void 0) {
|
|
stack = { value: link2, prev: stack };
|
|
}
|
|
link2 = dep.deps;
|
|
sub = dep;
|
|
++checkDepth;
|
|
continue;
|
|
}
|
|
if (!dirty) {
|
|
const nextDep = link2.nextDep;
|
|
if (nextDep !== void 0) {
|
|
link2 = nextDep;
|
|
continue;
|
|
}
|
|
}
|
|
while (checkDepth--) {
|
|
const firstSub = sub.subs;
|
|
const hasMultipleSubs = firstSub.nextSub !== void 0;
|
|
if (hasMultipleSubs) {
|
|
link2 = stack.value;
|
|
stack = stack.prev;
|
|
} else {
|
|
link2 = firstSub;
|
|
}
|
|
if (dirty) {
|
|
if (update(sub)) {
|
|
if (hasMultipleSubs) {
|
|
shallowPropagate(firstSub);
|
|
}
|
|
sub = link2.sub;
|
|
continue;
|
|
}
|
|
dirty = false;
|
|
} else {
|
|
sub.flags &= -33;
|
|
}
|
|
sub = link2.sub;
|
|
const nextDep = link2.nextDep;
|
|
if (nextDep !== void 0) {
|
|
link2 = nextDep;
|
|
continue top;
|
|
}
|
|
}
|
|
return dirty;
|
|
} while (true);
|
|
}
|
|
function shallowPropagate(link2) {
|
|
do {
|
|
const sub = link2.sub;
|
|
const flags = sub.flags;
|
|
if ((flags & (32 | 16)) === 32) {
|
|
sub.flags = flags | 16;
|
|
if ((flags & (2 | 4)) === 2) {
|
|
notify(sub);
|
|
}
|
|
}
|
|
} while ((link2 = link2.nextSub) !== void 0);
|
|
}
|
|
function isValidLink(checkLink, sub) {
|
|
let link2 = sub.depsTail;
|
|
while (link2 !== void 0) {
|
|
if (link2 === checkLink) {
|
|
return true;
|
|
}
|
|
link2 = link2.prevDep;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
export {
|
|
ReactiveFlags,
|
|
createReactiveSystem
|
|
};
|
|
//# sourceMappingURL=alien.js.map
|