🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@caron/reactive

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@caron/reactive - npm Package Compare versions

Comparing version
0.0.1
to
0.0.2
+12
dist/caron.reactive.all.d.ts
declare function observable<T extends object>(target: T): T;
type PropertyKey = string | number | symbol;
type Reaction = ((...args: any[]) => any) & {
_reactionsSet?: Set<ReactionsMap>;
_name?: string;
};
type ReactionsMap = Map<PropertyKey, Set<Reaction>>;
declare const autorun: (tracker: Reaction, name: "AutoRun") => () => void;
export { autorun, observable };
declare function observable<T extends object>(target: T): T;
type PropertyKey = string | number | symbol;
type Reaction = ((...args: any[]) => any) & {
_reactionsSet?: Set<ReactionsMap>;
_name?: string;
};
type ReactionsMap = Map<PropertyKey, Set<Reaction>>;
declare const autorun: (tracker: Reaction, name: "AutoRun") => () => void;
export { autorun, observable };
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define('caron.reactive', ['exports'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.Caron = global.Caron || {}, global.Caron.Reactive = {})));
})(this, (function (exports) { 'use strict';
(function() {
const env = {"NODE_ENV":"development"};
try {
if (process) {
process.env = Object.assign({}, process.env);
Object.assign(process.env, env);
return;
}
} catch (e) {} // avoid ReferenceError: process is not defined
globalThis.process = { env:env };
})();
var ProxyRaw = new WeakMap();
var RawProxy = new WeakMap();
var RawShallowProxy = new WeakMap();
var ObModelSymbol = Symbol("ObModelSymbol");
var RawNode = new WeakMap();
var RawReactionMap = new WeakMap();
var ReactionStack = [];
var toString = Object.prototype.toString;
var isSet = function (val) {
return val && val instanceof Set;
};
var isMap = function (val) {
return val && val instanceof Map;
};
var isWeakMap = function (val) {
return val && val instanceof WeakMap;
};
var isWeakSet = function (val) {
return val && val instanceof WeakSet;
};
var isValid = function (val) { return val !== null && val !== undefined; };
var isArr = Array.isArray;
var isFn = function (val) {
return typeof val === "function";
};
var isPlainObject = function (val) {
return toString.call(val) === "[object Object]";
};
var isNormalType = function (target) {
return isPlainObject(target) || isArr(target);
};
var isCollectionType = function (target) {
return (isSet(target) || isMap(target) || isWeakMap(target) || isWeakSet(target));
};
var RAW_TYPE = Symbol("RAW_TYPE");
var OBSERVABLE_TYPE = Symbol("OBSERVABLE_TYPE");
var isObservable = function (target) {
return ProxyRaw.get(target) || !!(target === null || target === void 0 ? void 0 : target[ObModelSymbol]);
};
var isSupportObservable = function (target) {
if (!isValid(target))
return false;
if (isArr(target))
return true;
if (isPlainObject(target)) {
// 如果已经是observable对象,直接返回
if (target[RAW_TYPE]) {
return false;
}
//
if (target[OBSERVABLE_TYPE]) {
return true;
}
if (isFn(target["toJSON"]) || isFn(target["toJS"])) {
return false;
}
return true;
}
if (isCollectionType(target))
return true;
return false;
};
var getRaw = function (target) {
if (target === null || target === void 0 ? void 0 : target[ObModelSymbol])
return target[ObModelSymbol];
return ProxyRaw.get(target) || target;
};
var ITERATION_KEY = Symbol("iteration key");
var bindTargetKeyWithCurrentReaction = function (operation) {
var target = operation.target, key = operation.key, type = operation.type;
if (type === "iterate") {
key = ITERATION_KEY;
}
var reactionLen = ReactionStack.length;
if (reactionLen === 0)
return;
var current = ReactionStack[reactionLen - 1];
if (current) {
addReactionsMapToReaction(current, addRawReactionsMap(target, key, current));
}
};
var runReactionsFromTargetKey = function (operation) {
var key = operation.key, type = operation.type, target = operation.target;
runReactions(target, key);
// 影响到了数组的长度或者对象的key
if (type === "add" || type === "delete" || type === "clear") {
var newKey = Array.isArray(target) ? "length" : ITERATION_KEY;
runReactions(target, newKey);
}
};
var runReactions = function (target, key) {
var reactions = getReactionsFromTargetKey(target, key);
for (var i = 0, len = reactions.length; i < len; i++) {
var reaction = reactions[i];
reaction();
}
};
var getReactionsFromTargetKey = function (target, key) {
var reactionsMap = RawReactionMap.get(target);
var reactions = [];
if (reactionsMap) {
var map = reactionsMap.get(key);
map.forEach(function (reaction) {
if (reactions.indexOf(reaction) === -1) {
reactions.push(reaction);
}
});
}
return reactions;
};
var addReactionsMapToReaction = function (reaction, reactionsMap) {
var bindSet = reaction._reactionsSet;
if (bindSet) {
bindSet.add(reactionsMap);
}
else {
reaction._reactionsSet = new Set([reactionsMap]);
}
return bindSet;
};
// 将当前的reaction添加到reactionsMap中
var addRawReactionsMap = function (target, key, reaction) {
var reactionsMap = RawReactionMap.get(target);
if (reactionsMap) {
var reactions = reactionsMap.get(key);
if (reactions) {
reactions.add(reaction);
}
else {
reactionsMap.set(key, new Set([reaction]));
}
return reactionsMap;
}
else {
var reactionsMap_1 = new Map([[key, new Set([reaction])]]);
RawReactionMap.set(target, reactionsMap_1);
return reactionsMap_1;
}
};
// 重新绑定reaction
var releaseBindingReactions = function (reaction) {
var _a;
(_a = reaction._reactionsSet) === null || _a === void 0 ? void 0 : _a.forEach(function (reactionsMap) {
reactionsMap.forEach(function (reactions) {
reactions.delete(reaction);
});
});
delete reaction._reactionsSet;
};
var disposeBindingReactions = function (reaction) {
releaseBindingReactions(reaction);
};
var hasOwnProperty = Object.prototype.hasOwnProperty;
var baseHandlers = {
get: function (target, key, reciver) {
if (!key)
return;
var result = target[key];
if (typeof key === "symbol" && wellKnownSymbols.has(key))
return result;
// 将当前的target和key绑定到当前的reaction中
bindTargetKeyWithCurrentReaction({
target: target,
key: key,
reciver: reciver,
type: "get",
});
var observableResult = RawProxy.get(result);
if (observableResult) {
return observableResult;
}
if (!isObservable(result) && isSupportObservable(result)) {
var descriptor = Object.getOwnPropertyDescriptor(target, key);
if (!descriptor ||
!(descriptor.value === false && descriptor.configurable === false)) {
return createObservable(target, key, result);
}
}
return result;
},
has: function (target, key) {
var result = Reflect.has(target, key);
bindTargetKeyWithCurrentReaction({
target: target,
key: key,
type: "has",
});
return result;
},
ownKeys: function (target) {
var result = Reflect.ownKeys(target);
bindTargetKeyWithCurrentReaction({
target: target,
type: "iterate",
});
return result;
},
set: function (target, key, value, reciver) {
var hadKey = hasOwnProperty.call(target, key);
var newValue = createObservable(target, key, value);
var oldValue = target[key];
target[key] = newValue;
if (!hadKey) {
runReactionsFromTargetKey({
target: target,
key: key,
value: newValue,
oldValue: oldValue,
reciver: reciver,
type: "add",
});
}
else if (value !== oldValue) {
runReactionsFromTargetKey({
target: target,
key: key,
value: newValue,
oldValue: oldValue,
reciver: reciver,
type: "set",
});
}
return true;
},
deleteProperty: function (target, key) {
var oldValue = target[key];
delete target[key];
runReactionsFromTargetKey({
target: target,
key: key,
oldValue: oldValue,
type: "delete",
});
return true;
},
};
// 对于map、set、weakmap、weakset的处理来说,需要对其进行特殊的处理
var collectionHandlers = {
// 这些类型都是通过内部的函数来进行操作的,所以需要对这些函数进行拦截
get: function (target, key, reciver) {
target = hasOwnProperty.call(instrumentations, key)
? instrumentations
: target;
return Reflect.get(target, key, reciver);
},
};
var instrumentations = {
has: function (key) {
var target = ProxyRaw.get(this);
bindTargetKeyWithCurrentReaction({
target: target,
key: key,
type: "has",
});
return target.has(key);
},
};
var wellKnownSymbols = new Set(Object.getOwnPropertyNames(Symbol).reduce(function (act, key) {
if (key === "arguments")
return act;
if (key === "caller")
return act;
var value = Symbol[key];
if (typeof value === "symbol")
act.push(value);
return act;
}, []));
var buildDataTree = function (target, key, value) {
var raw = getRaw(value);
var currentNode = getDataNode(raw);
if (currentNode)
return currentNode;
setDataNode(raw, new DataNode(target, key, value));
};
var DataNode = /** @class */ (function () {
function DataNode(target, key, value) {
this.target = target;
this.key = key;
this.value = value;
}
Object.defineProperty(DataNode.prototype, "path", {
get: function () {
if (!this.parent)
return this.key ? [this.key] : [];
return this.parent.path.concat(this.key);
},
enumerable: false,
configurable: true
});
Object.defineProperty(DataNode.prototype, "targetRaw", {
get: function () {
return getRaw(this.target);
},
enumerable: false,
configurable: true
});
Object.defineProperty(DataNode.prototype, "parent", {
get: function () {
if (!this.target)
return;
return getDataNode(this.targetRaw);
},
enumerable: false,
configurable: true
});
return DataNode;
}());
var setDataNode = function (raw, node) {
if (raw === null || raw === void 0 ? void 0 : raw[ObModelSymbol]) {
raw[ObModelSymbol] = node;
return;
}
RawNode.set(raw, node);
};
var getDataNode = function (raw) {
if (raw === null || raw === void 0 ? void 0 : raw[ObModelSymbol]) {
return raw[ObModelSymbol];
}
return RawNode.get(raw);
};
var createObservable = function (target, key, value, shallow) {
// 非object类型直接返回
if (typeof value !== "object")
return value;
if (!isSupportObservable(value))
return value;
if (target) {
var parentRaw = ProxyRaw.get(target) || target;
var isShallowParent = RawShallowProxy.get(parentRaw);
if (isShallowParent)
return value;
}
buildDataTree(target, key, value);
if (shallow)
return createShallowProxy(value);
if (isNormalType(value))
return createNormalProxy(value);
if (isCollectionType(value))
return createCollectionProxy(value);
return value;
};
var createShallowProxy = function (target) {
if (isNormalType(target))
return createNormalProxy(target, true);
if (isCollectionType(target))
return createCollectionProxy(target, true);
// never reach
return target;
};
var createNormalProxy = function (target, shallow) {
var proxy = new Proxy(target, baseHandlers);
ProxyRaw.set(proxy, target);
if (shallow) {
RawShallowProxy.set(target, proxy);
}
else {
RawProxy.set(target, proxy);
}
return proxy;
};
var createCollectionProxy = function (target, shallow) {
var proxy = new Proxy(target, collectionHandlers);
ProxyRaw.set(proxy, target);
if (shallow) {
RawShallowProxy.set(target, proxy);
}
else {
RawProxy.set(target, proxy);
}
return proxy;
};
function observable(target) {
return createObservable(null, null, target);
}
var autorun = function (tracker, name) {
var reaction = function () {
if (!isFn(tracker))
return;
if (ReactionStack.indexOf(reaction) === -1) {
releaseBindingReactions(reaction);
try {
// 将当前的reaction添加到栈中, 用于后续的依赖收集
ReactionStack.push(reaction);
tracker();
}
finally {
ReactionStack.pop();
}
}
};
reaction._name = name;
reaction();
return function () {
disposeBindingReactions(reaction);
};
};
exports.autorun = autorun;
exports.observable = observable;
}));
//# sourceMappingURL=caron.reactive.umd.development.js.map
{"version":3,"file":"caron.reactive.umd.development.js","sources":["../src/enviroment.ts","../src/checker.ts","../src/externals.ts","../src/reaction.ts","../src/handlers.ts","../src/tree.ts","../src/internals.ts","../src/observable.ts","../src/autorun.ts"],"sourcesContent":["import { DataNode } from \"./tree\";\r\nimport { Reaction, ReactionsMap } from \"./types\";\r\n\r\nexport const ProxyRaw = new WeakMap();\r\nexport const RawProxy = new WeakMap();\r\nexport const RawShallowProxy = new WeakMap();\r\nexport const ObModelSymbol = Symbol(\"ObModelSymbol\");\r\nexport const RawNode = new WeakMap<object, DataNode>();\r\nexport const RawReactionMap = new WeakMap<object, ReactionsMap>();\r\n\r\nexport const ReactionStack: Reaction[] = [];\r\n","const toString = Object.prototype.toString;\r\n\r\nexport const isSet = (val: unknown): val is Set<any> =>\r\n val && val instanceof Set;\r\nexport const isMap = (val: unknown): val is Map<any, any> =>\r\n val && val instanceof Map;\r\nexport const isWeakMap = (val: unknown): val is WeakMap<any, any> =>\r\n val && val instanceof WeakMap;\r\nexport const isWeakSet = (val: unknown): val is WeakSet<any> =>\r\n val && val instanceof WeakSet;\r\nexport const isValid = (val: unknown) => val !== null && val !== undefined;\r\nexport const isArr = Array.isArray;\r\nexport const isFn = (val: unknown): val is () => any =>\r\n typeof val === \"function\";\r\n\r\nexport const isPlainObject = (val: unknown) =>\r\n toString.call(val) === \"[object Object]\";\r\n\r\nexport const isNormalType = (target: any) => {\r\n return isPlainObject(target) || isArr(target);\r\n};\r\n\r\nexport const isCollectionType = (target: any) => {\r\n return (\r\n isSet(target) || isMap(target) || isWeakMap(target) || isWeakSet(target)\r\n );\r\n};\r\n","import {\r\n isArr,\r\n isCollectionType,\r\n isFn,\r\n isPlainObject,\r\n isValid,\r\n} from \"./checker\";\r\nimport { ObModelSymbol, ProxyRaw } from \"./enviroment\";\r\n\r\nconst RAW_TYPE = Symbol(\"RAW_TYPE\");\r\nconst OBSERVABLE_TYPE = Symbol(\"OBSERVABLE_TYPE\");\r\n\r\nexport const isObservable = (target: any) => {\r\n return ProxyRaw.get(target) || !!target?.[ObModelSymbol];\r\n};\r\n\r\nexport const isSupportObservable = (target: any) => {\r\n if (!isValid(target)) return false;\r\n if (isArr(target)) return true;\r\n if (isPlainObject(target)) {\r\n // 如果已经是observable对象,直接返回\r\n if (target[RAW_TYPE]) {\r\n return false;\r\n }\r\n\r\n //\r\n if (target[OBSERVABLE_TYPE]) {\r\n return true;\r\n }\r\n\r\n if (isFn(target[\"toJSON\"]) || isFn(target[\"toJS\"])) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n if (isCollectionType(target)) return true;\r\n\r\n return false;\r\n};\r\n\r\nexport const getRaw = <T>(target: T): T => {\r\n if (target?.[ObModelSymbol]) return target[ObModelSymbol];\r\n return ProxyRaw.get(target as any) || target;\r\n};\r\n","import { RawReactionMap, ReactionStack } from \"./enviroment\";\r\nimport { IOperation, PropertyKey, Reaction, ReactionsMap } from \"./types\";\r\n\r\nconst ITERATION_KEY = Symbol(\"iteration key\");\r\n\r\nexport const bindTargetKeyWithCurrentReaction = (operation: IOperation) => {\r\n let { target, key, type } = operation;\r\n if (type === \"iterate\") {\r\n key = ITERATION_KEY;\r\n }\r\n const reactionLen = ReactionStack.length;\r\n if (reactionLen === 0) return;\r\n const current = ReactionStack[reactionLen - 1];\r\n\r\n if (current) {\r\n addReactionsMapToReaction(\r\n current,\r\n addRawReactionsMap(target, key, current)\r\n );\r\n }\r\n};\r\n\r\nexport const runReactionsFromTargetKey = (operation: IOperation) => {\r\n let { key, type, target } = operation;\r\n runReactions(target, key);\r\n\r\n // 影响到了数组的长度或者对象的key\r\n if (type === \"add\" || type === \"delete\" || type === \"clear\") {\r\n const newKey = Array.isArray(target) ? \"length\" : ITERATION_KEY;\r\n runReactions(target, newKey);\r\n }\r\n};\r\n\r\nconst runReactions = (target: any, key: PropertyKey) => {\r\n const reactions = getReactionsFromTargetKey(target, key);\r\n for (let i = 0, len = reactions.length; i < len; i++) {\r\n const reaction = reactions[i];\r\n reaction();\r\n }\r\n};\r\n\r\nconst getReactionsFromTargetKey = (target: any, key: PropertyKey) => {\r\n const reactionsMap = RawReactionMap.get(target);\r\n const reactions = [];\r\n if (reactionsMap) {\r\n const map = reactionsMap.get(key);\r\n map.forEach((reaction) => {\r\n if (reactions.indexOf(reaction) === -1) {\r\n reactions.push(reaction);\r\n }\r\n });\r\n }\r\n return reactions;\r\n};\r\n\r\nconst addReactionsMapToReaction = (\r\n reaction: Reaction,\r\n reactionsMap: ReactionsMap\r\n) => {\r\n const bindSet = reaction._reactionsSet;\r\n if (bindSet) {\r\n bindSet.add(reactionsMap);\r\n } else {\r\n reaction._reactionsSet = new Set([reactionsMap]);\r\n }\r\n return bindSet;\r\n};\r\n\r\n// 将当前的reaction添加到reactionsMap中\r\nconst addRawReactionsMap = (\r\n target: any,\r\n key: PropertyKey,\r\n reaction: Reaction\r\n) => {\r\n const reactionsMap = RawReactionMap.get(target);\r\n if (reactionsMap) {\r\n const reactions = reactionsMap.get(key);\r\n if (reactions) {\r\n reactions.add(reaction);\r\n } else {\r\n reactionsMap.set(key, new Set([reaction]));\r\n }\r\n return reactionsMap;\r\n } else {\r\n const reactionsMap: ReactionsMap = new Map([[key, new Set([reaction])]]);\r\n RawReactionMap.set(target, reactionsMap);\r\n return reactionsMap;\r\n }\r\n};\r\n\r\n// 重新绑定reaction\r\nexport const releaseBindingReactions = (reaction: Reaction) => {\r\n reaction._reactionsSet?.forEach((reactionsMap) => {\r\n reactionsMap.forEach((reactions) => {\r\n reactions.delete(reaction);\r\n });\r\n });\r\n delete reaction._reactionsSet;\r\n};\r\n\r\nexport const disposeBindingReactions = (reaction: Reaction) => {\r\n releaseBindingReactions(reaction);\r\n};\r\n","import { ProxyRaw, RawProxy } from \"./enviroment\";\r\nimport { isObservable, isSupportObservable } from \"./externals\";\r\nimport { createObservable } from \"./internals\";\r\nimport {\r\n bindTargetKeyWithCurrentReaction,\r\n runReactionsFromTargetKey,\r\n} from \"./reaction\";\r\n\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nexport const baseHandlers: ProxyHandler<any> = {\r\n get(target, key, reciver) {\r\n if (!key) return;\r\n const result = target[key];\r\n if (typeof key === \"symbol\" && wellKnownSymbols.has(key)) return result;\r\n // 将当前的target和key绑定到当前的reaction中\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n key,\r\n reciver,\r\n type: \"get\",\r\n });\r\n const observableResult = RawProxy.get(result);\r\n if (observableResult) {\r\n return observableResult;\r\n }\r\n if (!isObservable(result) && isSupportObservable(result)) {\r\n const descriptor = Object.getOwnPropertyDescriptor(target, key);\r\n if (\r\n !descriptor ||\r\n !(descriptor.value === false && descriptor.configurable === false)\r\n ) {\r\n return createObservable(target, key, result);\r\n }\r\n }\r\n return result;\r\n },\r\n has(target, key) {\r\n const result = Reflect.has(target, key);\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n key,\r\n type: \"has\",\r\n });\r\n return result;\r\n },\r\n ownKeys(target) {\r\n const result = Reflect.ownKeys(target);\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n type: \"iterate\",\r\n });\r\n return result;\r\n },\r\n set(target, key, value, reciver) {\r\n const hadKey = hasOwnProperty.call(target, key);\r\n const newValue = createObservable(target, key, value);\r\n const oldValue = target[key];\r\n target[key] = newValue;\r\n if (!hadKey) {\r\n runReactionsFromTargetKey({\r\n target,\r\n key,\r\n value: newValue,\r\n oldValue,\r\n reciver,\r\n type: \"add\",\r\n });\r\n } else if (value !== oldValue) {\r\n runReactionsFromTargetKey({\r\n target,\r\n key,\r\n value: newValue,\r\n oldValue,\r\n reciver,\r\n type: \"set\",\r\n });\r\n }\r\n return true;\r\n },\r\n deleteProperty(target, key) {\r\n const oldValue = target[key];\r\n delete target[key];\r\n runReactionsFromTargetKey({\r\n target,\r\n key,\r\n oldValue,\r\n type: \"delete\",\r\n });\r\n return true;\r\n },\r\n};\r\n\r\n// 对于map、set、weakmap、weakset的处理来说,需要对其进行特殊的处理\r\nexport const collectionHandlers = {\r\n // 这些类型都是通过内部的函数来进行操作的,所以需要对这些函数进行拦截\r\n get(target: any, key: PropertyKey, reciver: any) {\r\n target = hasOwnProperty.call(instrumentations, key)\r\n ? instrumentations\r\n : target;\r\n return Reflect.get(target, key, reciver);\r\n },\r\n};\r\n\r\nconst instrumentations = {\r\n has(key: PropertyKey) {\r\n const target = ProxyRaw.get(this);\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n key,\r\n type: \"has\",\r\n });\r\n return target.has(key);\r\n },\r\n};\r\n\r\nconst wellKnownSymbols = new Set(\r\n Object.getOwnPropertyNames(Symbol).reduce((act: symbol[], key) => {\r\n if (key === \"arguments\") return act;\r\n if (key === \"caller\") return act;\r\n const value = (Symbol as any)[key];\r\n if (typeof value === \"symbol\") act.push(value);\r\n return act;\r\n }, [])\r\n);\r\n","import { ObModelSymbol, RawNode } from \"./enviroment\";\r\nimport { getRaw } from \"./externals\";\r\nimport { PropertyKey } from \"./types\";\r\n\r\nexport const buildDataTree = (target: any, key: PropertyKey, value: any) => {\r\n const raw = getRaw(value);\r\n const currentNode = getDataNode(raw);\r\n if (currentNode) return currentNode;\r\n setDataNode(raw, new DataNode(target, key, value));\r\n};\r\n\r\nexport class DataNode {\r\n target: any;\r\n key: PropertyKey;\r\n value: any;\r\n\r\n constructor(target: any, key: PropertyKey, value: any) {\r\n this.target = target;\r\n this.key = key;\r\n this.value = value;\r\n }\r\n\r\n get path() {\r\n if (!this.parent) return this.key ? [this.key] : [];\r\n return this.parent.path.concat(this.key);\r\n }\r\n\r\n get targetRaw() {\r\n return getRaw(this.target);\r\n }\r\n\r\n get parent() {\r\n if (!this.target) return;\r\n return getDataNode(this.targetRaw);\r\n }\r\n}\r\n\r\nexport const setDataNode = (raw: any, node: DataNode) => {\r\n if (raw?.[ObModelSymbol]) {\r\n raw[ObModelSymbol] = node;\r\n return;\r\n }\r\n RawNode.set(raw, node);\r\n};\r\n\r\nexport const getDataNode = (raw: any) => {\r\n if (raw?.[ObModelSymbol]) {\r\n return raw[ObModelSymbol];\r\n }\r\n return RawNode.get(raw);\r\n};\r\n","import { ProxyRaw, RawProxy, RawShallowProxy } from \"./enviroment\";\r\nimport { isSupportObservable } from \"./externals\";\r\nimport { baseHandlers, collectionHandlers } from \"./handlers\";\r\nimport { buildDataTree } from \"./tree\";\r\nimport { PropertyKey } from \"./types\";\r\nimport { isCollectionType, isNormalType } from \"./checker\";\r\n\r\nexport const createObservable = (\r\n target?: any,\r\n key?: PropertyKey,\r\n value?: any,\r\n shallow?: boolean\r\n) => {\r\n // 非object类型直接返回\r\n if (typeof value !== \"object\") return value;\r\n\r\n if (!isSupportObservable(value)) return value;\r\n\r\n if (target) {\r\n const parentRaw = ProxyRaw.get(target) || target;\r\n const isShallowParent = RawShallowProxy.get(parentRaw);\r\n if (isShallowParent) return value;\r\n }\r\n\r\n buildDataTree(target, key, value);\r\n if (shallow) return createShallowProxy(value);\r\n if (isNormalType(value)) return createNormalProxy(value);\r\n if (isCollectionType(value)) return createCollectionProxy(value);\r\n return value;\r\n};\r\n\r\nconst createShallowProxy = (target: any) => {\r\n if (isNormalType(target)) return createNormalProxy(target, true);\r\n if (isCollectionType(target)) return createCollectionProxy(target, true);\r\n // never reach\r\n return target;\r\n};\r\n\r\nconst createNormalProxy = (target: any, shallow?: boolean) => {\r\n const proxy = new Proxy(target, baseHandlers);\r\n ProxyRaw.set(proxy, target);\r\n if (shallow) {\r\n RawShallowProxy.set(target, proxy);\r\n } else {\r\n RawProxy.set(target, proxy);\r\n }\r\n return proxy;\r\n};\r\n\r\nconst createCollectionProxy = (target: any, shallow?: boolean) => {\r\n const proxy = new Proxy(target, collectionHandlers);\r\n ProxyRaw.set(proxy, target);\r\n if (shallow) {\r\n RawShallowProxy.set(target, proxy);\r\n } else {\r\n RawProxy.set(target, proxy);\r\n }\r\n return proxy;\r\n};\r\n","import { createObservable } from \"./internals\";\r\n\r\nexport function observable<T extends object>(target: T): T {\r\n return createObservable(null, null, target);\r\n}\r\n","import { isFn } from \"./checker\";\r\nimport { ReactionStack } from \"./enviroment\";\r\nimport { disposeBindingReactions, releaseBindingReactions } from \"./reaction\";\r\nimport { Reaction } from \"./types\";\r\n\r\nexport const autorun = (tracker: Reaction, name: \"AutoRun\") => {\r\n const reaction: Reaction = () => {\r\n if (!isFn(tracker)) return;\r\n if (ReactionStack.indexOf(reaction) === -1) {\r\n releaseBindingReactions(reaction);\r\n try {\r\n // 将当前的reaction添加到栈中, 用于后续的依赖收集\r\n ReactionStack.push(reaction);\r\n tracker();\r\n } finally {\r\n ReactionStack.pop();\r\n }\r\n }\r\n };\r\n reaction._name = name;\r\n reaction();\r\n return () => {\r\n disposeBindingReactions(reaction);\r\n };\r\n};\r\n"],"names":[],"mappings":"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"}
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define("caron.reactive",["exports"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).Caron=e.Caron||{},e.Caron.Reactive={}))}(this,(function(e){"use strict";!function(){const e={NODE_ENV:"development"};try{if(process)return process.env=Object.assign({},process.env),void Object.assign(process.env,e)}catch(e){}globalThis.process={env:e}}();var t=new WeakMap,n=new WeakMap,r=new WeakMap,o=Symbol("ObModelSymbol"),a=new WeakMap,i=new WeakMap,u=[],c=Object.prototype.toString,f=Array.isArray,s=function(e){return"function"==typeof e},l=function(e){return"[object Object]"===c.call(e)},p=function(e){return l(e)||f(e)},y=function(e){return(t=e)&&t instanceof Set||function(e){return e&&e instanceof Map}(e)||function(e){return e&&e instanceof WeakMap}(e)||function(e){return e&&e instanceof WeakSet}(e);var t},v=Symbol("RAW_TYPE"),g=Symbol("OBSERVABLE_TYPE"),d=function(e){return null!=e&&(!!f(e)||(l(e)?!e[v]&&(!!e[g]||!s(e.toJSON)&&!s(e.toJS)):!!y(e)))},h=function(e){return(null==e?void 0:e[o])?e[o]:t.get(e)||e},b=Symbol("iteration key"),S=function(e){var t=e.target,n=e.key;"iterate"===e.type&&(n=b);var r=u.length;if(0!==r){var o=u[r-1];o&&m(o,j(t,n,o))}},k=function(e){var t=e.key,n=e.type,r=e.target;if(w(r,t),"add"===n||"delete"===n||"clear"===n){var o=Array.isArray(r)?"length":b;w(r,o)}},w=function(e,t){for(var n=O(e,t),r=0,o=n.length;r<o;r++){(0,n[r])()}},O=function(e,t){var n=i.get(e),r=[];n&&n.get(t).forEach((function(e){-1===r.indexOf(e)&&r.push(e)}));return r},m=function(e,t){var n=e._reactionsSet;return n?n.add(t):e._reactionsSet=new Set([t]),n},j=function(e,t,n){var r=i.get(e);if(r){var o=r.get(t);return o?o.add(n):r.set(t,new Set([n])),r}var a=new Map([[t,new Set([n])]]);return i.set(e,a),a},P=function(e){var t;null===(t=e._reactionsSet)||void 0===t||t.forEach((function(t){t.forEach((function(t){t.delete(e)}))})),delete e._reactionsSet},E=Object.prototype.hasOwnProperty,M={get:function(e,r,a){if(r){var i=e[r];if("symbol"==typeof r&&_.has(r))return i;S({target:e,key:r,reciver:a,type:"get"});var u=n.get(i);if(u)return u;if(!function(e){return t.get(e)||!!(null==e?void 0:e[o])}(i)&&d(i)){var c=Object.getOwnPropertyDescriptor(e,r);if(!c||!1!==c.value||!1!==c.configurable)return V(e,r,i)}return i}},has:function(e,t){var n=Reflect.has(e,t);return S({target:e,key:t,type:"has"}),n},ownKeys:function(e){var t=Reflect.ownKeys(e);return S({target:e,type:"iterate"}),t},set:function(e,t,n,r){var o=E.call(e,t),a=V(e,t,n),i=e[t];return e[t]=a,o?n!==i&&k({target:e,key:t,value:a,oldValue:i,reciver:r,type:"set"}):k({target:e,key:t,value:a,oldValue:i,reciver:r,type:"add"}),!0},deleteProperty:function(e,t){var n=e[t];return delete e[t],k({target:e,key:t,oldValue:n,type:"delete"}),!0}},R={get:function(e,t,n){return e=E.call(W,t)?W:e,Reflect.get(e,t,n)}},W={has:function(e){var n=t.get(this);return S({target:n,key:e,type:"has"}),n.has(e)}},_=new Set(Object.getOwnPropertyNames(Symbol).reduce((function(e,t){if("arguments"===t)return e;if("caller"===t)return e;var n=Symbol[t];return"symbol"==typeof n&&e.push(n),e}),[])),x=function(){function e(e,t,n){this.target=e,this.key=t,this.value=n}return Object.defineProperty(e.prototype,"path",{get:function(){return this.parent?this.parent.path.concat(this.key):this.key?[this.key]:[]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"targetRaw",{get:function(){return h(this.target)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"parent",{get:function(){if(this.target)return T(this.targetRaw)},enumerable:!1,configurable:!0}),e}(),A=function(e,t){(null==e?void 0:e[o])?e[o]=t:a.set(e,t)},T=function(e){return(null==e?void 0:e[o])?e[o]:a.get(e)},V=function(e,n,o,a){if("object"!=typeof o)return o;if(!d(o))return o;if(e){var i=t.get(e)||e;if(r.get(i))return o}return function(e,t,n){var r=h(n),o=T(r);if(o)return o;A(r,new x(e,t,n))}(e,n,o),a?N(o):p(o)?C(o):y(o)?B(o):o},N=function(e){return p(e)?C(e,!0):y(e)?B(e,!0):e},C=function(e,o){var a=new Proxy(e,M);return t.set(a,e),o?r.set(e,a):n.set(e,a),a},B=function(e,o){var a=new Proxy(e,R);return t.set(a,e),o?r.set(e,a):n.set(e,a),a};e.autorun=function(e,t){var n=function(){if(s(e)&&-1===u.indexOf(n)){P(n);try{u.push(n),e()}finally{u.pop()}}};return n._name=t,n(),function(){!function(e){P(e)}(n)}},e.observable=function(e){return V(null,null,e)}}));
//# sourceMappingURL=caron.reactive.umd.production.js.map
{"version":3,"file":"caron.reactive.umd.production.js","sources":["../src/enviroment.ts","../src/checker.ts","../src/externals.ts","../src/reaction.ts","../src/handlers.ts","../src/tree.ts","../src/internals.ts","../src/autorun.ts","../src/observable.ts"],"sourcesContent":["import { DataNode } from \"./tree\";\r\nimport { Reaction, ReactionsMap } from \"./types\";\r\n\r\nexport const ProxyRaw = new WeakMap();\r\nexport const RawProxy = new WeakMap();\r\nexport const RawShallowProxy = new WeakMap();\r\nexport const ObModelSymbol = Symbol(\"ObModelSymbol\");\r\nexport const RawNode = new WeakMap<object, DataNode>();\r\nexport const RawReactionMap = new WeakMap<object, ReactionsMap>();\r\n\r\nexport const ReactionStack: Reaction[] = [];\r\n","const toString = Object.prototype.toString;\r\n\r\nexport const isSet = (val: unknown): val is Set<any> =>\r\n val && val instanceof Set;\r\nexport const isMap = (val: unknown): val is Map<any, any> =>\r\n val && val instanceof Map;\r\nexport const isWeakMap = (val: unknown): val is WeakMap<any, any> =>\r\n val && val instanceof WeakMap;\r\nexport const isWeakSet = (val: unknown): val is WeakSet<any> =>\r\n val && val instanceof WeakSet;\r\nexport const isValid = (val: unknown) => val !== null && val !== undefined;\r\nexport const isArr = Array.isArray;\r\nexport const isFn = (val: unknown): val is () => any =>\r\n typeof val === \"function\";\r\n\r\nexport const isPlainObject = (val: unknown) =>\r\n toString.call(val) === \"[object Object]\";\r\n\r\nexport const isNormalType = (target: any) => {\r\n return isPlainObject(target) || isArr(target);\r\n};\r\n\r\nexport const isCollectionType = (target: any) => {\r\n return (\r\n isSet(target) || isMap(target) || isWeakMap(target) || isWeakSet(target)\r\n );\r\n};\r\n","import {\r\n isArr,\r\n isCollectionType,\r\n isFn,\r\n isPlainObject,\r\n isValid,\r\n} from \"./checker\";\r\nimport { ObModelSymbol, ProxyRaw } from \"./enviroment\";\r\n\r\nconst RAW_TYPE = Symbol(\"RAW_TYPE\");\r\nconst OBSERVABLE_TYPE = Symbol(\"OBSERVABLE_TYPE\");\r\n\r\nexport const isObservable = (target: any) => {\r\n return ProxyRaw.get(target) || !!target?.[ObModelSymbol];\r\n};\r\n\r\nexport const isSupportObservable = (target: any) => {\r\n if (!isValid(target)) return false;\r\n if (isArr(target)) return true;\r\n if (isPlainObject(target)) {\r\n // 如果已经是observable对象,直接返回\r\n if (target[RAW_TYPE]) {\r\n return false;\r\n }\r\n\r\n //\r\n if (target[OBSERVABLE_TYPE]) {\r\n return true;\r\n }\r\n\r\n if (isFn(target[\"toJSON\"]) || isFn(target[\"toJS\"])) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n if (isCollectionType(target)) return true;\r\n\r\n return false;\r\n};\r\n\r\nexport const getRaw = <T>(target: T): T => {\r\n if (target?.[ObModelSymbol]) return target[ObModelSymbol];\r\n return ProxyRaw.get(target as any) || target;\r\n};\r\n","import { RawReactionMap, ReactionStack } from \"./enviroment\";\r\nimport { IOperation, PropertyKey, Reaction, ReactionsMap } from \"./types\";\r\n\r\nconst ITERATION_KEY = Symbol(\"iteration key\");\r\n\r\nexport const bindTargetKeyWithCurrentReaction = (operation: IOperation) => {\r\n let { target, key, type } = operation;\r\n if (type === \"iterate\") {\r\n key = ITERATION_KEY;\r\n }\r\n const reactionLen = ReactionStack.length;\r\n if (reactionLen === 0) return;\r\n const current = ReactionStack[reactionLen - 1];\r\n\r\n if (current) {\r\n addReactionsMapToReaction(\r\n current,\r\n addRawReactionsMap(target, key, current)\r\n );\r\n }\r\n};\r\n\r\nexport const runReactionsFromTargetKey = (operation: IOperation) => {\r\n let { key, type, target } = operation;\r\n runReactions(target, key);\r\n\r\n // 影响到了数组的长度或者对象的key\r\n if (type === \"add\" || type === \"delete\" || type === \"clear\") {\r\n const newKey = Array.isArray(target) ? \"length\" : ITERATION_KEY;\r\n runReactions(target, newKey);\r\n }\r\n};\r\n\r\nconst runReactions = (target: any, key: PropertyKey) => {\r\n const reactions = getReactionsFromTargetKey(target, key);\r\n for (let i = 0, len = reactions.length; i < len; i++) {\r\n const reaction = reactions[i];\r\n reaction();\r\n }\r\n};\r\n\r\nconst getReactionsFromTargetKey = (target: any, key: PropertyKey) => {\r\n const reactionsMap = RawReactionMap.get(target);\r\n const reactions = [];\r\n if (reactionsMap) {\r\n const map = reactionsMap.get(key);\r\n map.forEach((reaction) => {\r\n if (reactions.indexOf(reaction) === -1) {\r\n reactions.push(reaction);\r\n }\r\n });\r\n }\r\n return reactions;\r\n};\r\n\r\nconst addReactionsMapToReaction = (\r\n reaction: Reaction,\r\n reactionsMap: ReactionsMap\r\n) => {\r\n const bindSet = reaction._reactionsSet;\r\n if (bindSet) {\r\n bindSet.add(reactionsMap);\r\n } else {\r\n reaction._reactionsSet = new Set([reactionsMap]);\r\n }\r\n return bindSet;\r\n};\r\n\r\n// 将当前的reaction添加到reactionsMap中\r\nconst addRawReactionsMap = (\r\n target: any,\r\n key: PropertyKey,\r\n reaction: Reaction\r\n) => {\r\n const reactionsMap = RawReactionMap.get(target);\r\n if (reactionsMap) {\r\n const reactions = reactionsMap.get(key);\r\n if (reactions) {\r\n reactions.add(reaction);\r\n } else {\r\n reactionsMap.set(key, new Set([reaction]));\r\n }\r\n return reactionsMap;\r\n } else {\r\n const reactionsMap: ReactionsMap = new Map([[key, new Set([reaction])]]);\r\n RawReactionMap.set(target, reactionsMap);\r\n return reactionsMap;\r\n }\r\n};\r\n\r\n// 重新绑定reaction\r\nexport const releaseBindingReactions = (reaction: Reaction) => {\r\n reaction._reactionsSet?.forEach((reactionsMap) => {\r\n reactionsMap.forEach((reactions) => {\r\n reactions.delete(reaction);\r\n });\r\n });\r\n delete reaction._reactionsSet;\r\n};\r\n\r\nexport const disposeBindingReactions = (reaction: Reaction) => {\r\n releaseBindingReactions(reaction);\r\n};\r\n","import { ProxyRaw, RawProxy } from \"./enviroment\";\r\nimport { isObservable, isSupportObservable } from \"./externals\";\r\nimport { createObservable } from \"./internals\";\r\nimport {\r\n bindTargetKeyWithCurrentReaction,\r\n runReactionsFromTargetKey,\r\n} from \"./reaction\";\r\n\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nexport const baseHandlers: ProxyHandler<any> = {\r\n get(target, key, reciver) {\r\n if (!key) return;\r\n const result = target[key];\r\n if (typeof key === \"symbol\" && wellKnownSymbols.has(key)) return result;\r\n // 将当前的target和key绑定到当前的reaction中\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n key,\r\n reciver,\r\n type: \"get\",\r\n });\r\n const observableResult = RawProxy.get(result);\r\n if (observableResult) {\r\n return observableResult;\r\n }\r\n if (!isObservable(result) && isSupportObservable(result)) {\r\n const descriptor = Object.getOwnPropertyDescriptor(target, key);\r\n if (\r\n !descriptor ||\r\n !(descriptor.value === false && descriptor.configurable === false)\r\n ) {\r\n return createObservable(target, key, result);\r\n }\r\n }\r\n return result;\r\n },\r\n has(target, key) {\r\n const result = Reflect.has(target, key);\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n key,\r\n type: \"has\",\r\n });\r\n return result;\r\n },\r\n ownKeys(target) {\r\n const result = Reflect.ownKeys(target);\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n type: \"iterate\",\r\n });\r\n return result;\r\n },\r\n set(target, key, value, reciver) {\r\n const hadKey = hasOwnProperty.call(target, key);\r\n const newValue = createObservable(target, key, value);\r\n const oldValue = target[key];\r\n target[key] = newValue;\r\n if (!hadKey) {\r\n runReactionsFromTargetKey({\r\n target,\r\n key,\r\n value: newValue,\r\n oldValue,\r\n reciver,\r\n type: \"add\",\r\n });\r\n } else if (value !== oldValue) {\r\n runReactionsFromTargetKey({\r\n target,\r\n key,\r\n value: newValue,\r\n oldValue,\r\n reciver,\r\n type: \"set\",\r\n });\r\n }\r\n return true;\r\n },\r\n deleteProperty(target, key) {\r\n const oldValue = target[key];\r\n delete target[key];\r\n runReactionsFromTargetKey({\r\n target,\r\n key,\r\n oldValue,\r\n type: \"delete\",\r\n });\r\n return true;\r\n },\r\n};\r\n\r\n// 对于map、set、weakmap、weakset的处理来说,需要对其进行特殊的处理\r\nexport const collectionHandlers = {\r\n // 这些类型都是通过内部的函数来进行操作的,所以需要对这些函数进行拦截\r\n get(target: any, key: PropertyKey, reciver: any) {\r\n target = hasOwnProperty.call(instrumentations, key)\r\n ? instrumentations\r\n : target;\r\n return Reflect.get(target, key, reciver);\r\n },\r\n};\r\n\r\nconst instrumentations = {\r\n has(key: PropertyKey) {\r\n const target = ProxyRaw.get(this);\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n key,\r\n type: \"has\",\r\n });\r\n return target.has(key);\r\n },\r\n};\r\n\r\nconst wellKnownSymbols = new Set(\r\n Object.getOwnPropertyNames(Symbol).reduce((act: symbol[], key) => {\r\n if (key === \"arguments\") return act;\r\n if (key === \"caller\") return act;\r\n const value = (Symbol as any)[key];\r\n if (typeof value === \"symbol\") act.push(value);\r\n return act;\r\n }, [])\r\n);\r\n","import { ObModelSymbol, RawNode } from \"./enviroment\";\r\nimport { getRaw } from \"./externals\";\r\nimport { PropertyKey } from \"./types\";\r\n\r\nexport const buildDataTree = (target: any, key: PropertyKey, value: any) => {\r\n const raw = getRaw(value);\r\n const currentNode = getDataNode(raw);\r\n if (currentNode) return currentNode;\r\n setDataNode(raw, new DataNode(target, key, value));\r\n};\r\n\r\nexport class DataNode {\r\n target: any;\r\n key: PropertyKey;\r\n value: any;\r\n\r\n constructor(target: any, key: PropertyKey, value: any) {\r\n this.target = target;\r\n this.key = key;\r\n this.value = value;\r\n }\r\n\r\n get path() {\r\n if (!this.parent) return this.key ? [this.key] : [];\r\n return this.parent.path.concat(this.key);\r\n }\r\n\r\n get targetRaw() {\r\n return getRaw(this.target);\r\n }\r\n\r\n get parent() {\r\n if (!this.target) return;\r\n return getDataNode(this.targetRaw);\r\n }\r\n}\r\n\r\nexport const setDataNode = (raw: any, node: DataNode) => {\r\n if (raw?.[ObModelSymbol]) {\r\n raw[ObModelSymbol] = node;\r\n return;\r\n }\r\n RawNode.set(raw, node);\r\n};\r\n\r\nexport const getDataNode = (raw: any) => {\r\n if (raw?.[ObModelSymbol]) {\r\n return raw[ObModelSymbol];\r\n }\r\n return RawNode.get(raw);\r\n};\r\n","import { ProxyRaw, RawProxy, RawShallowProxy } from \"./enviroment\";\r\nimport { isSupportObservable } from \"./externals\";\r\nimport { baseHandlers, collectionHandlers } from \"./handlers\";\r\nimport { buildDataTree } from \"./tree\";\r\nimport { PropertyKey } from \"./types\";\r\nimport { isCollectionType, isNormalType } from \"./checker\";\r\n\r\nexport const createObservable = (\r\n target?: any,\r\n key?: PropertyKey,\r\n value?: any,\r\n shallow?: boolean\r\n) => {\r\n // 非object类型直接返回\r\n if (typeof value !== \"object\") return value;\r\n\r\n if (!isSupportObservable(value)) return value;\r\n\r\n if (target) {\r\n const parentRaw = ProxyRaw.get(target) || target;\r\n const isShallowParent = RawShallowProxy.get(parentRaw);\r\n if (isShallowParent) return value;\r\n }\r\n\r\n buildDataTree(target, key, value);\r\n if (shallow) return createShallowProxy(value);\r\n if (isNormalType(value)) return createNormalProxy(value);\r\n if (isCollectionType(value)) return createCollectionProxy(value);\r\n return value;\r\n};\r\n\r\nconst createShallowProxy = (target: any) => {\r\n if (isNormalType(target)) return createNormalProxy(target, true);\r\n if (isCollectionType(target)) return createCollectionProxy(target, true);\r\n // never reach\r\n return target;\r\n};\r\n\r\nconst createNormalProxy = (target: any, shallow?: boolean) => {\r\n const proxy = new Proxy(target, baseHandlers);\r\n ProxyRaw.set(proxy, target);\r\n if (shallow) {\r\n RawShallowProxy.set(target, proxy);\r\n } else {\r\n RawProxy.set(target, proxy);\r\n }\r\n return proxy;\r\n};\r\n\r\nconst createCollectionProxy = (target: any, shallow?: boolean) => {\r\n const proxy = new Proxy(target, collectionHandlers);\r\n ProxyRaw.set(proxy, target);\r\n if (shallow) {\r\n RawShallowProxy.set(target, proxy);\r\n } else {\r\n RawProxy.set(target, proxy);\r\n }\r\n return proxy;\r\n};\r\n","import { isFn } from \"./checker\";\r\nimport { ReactionStack } from \"./enviroment\";\r\nimport { disposeBindingReactions, releaseBindingReactions } from \"./reaction\";\r\nimport { Reaction } from \"./types\";\r\n\r\nexport const autorun = (tracker: Reaction, name: \"AutoRun\") => {\r\n const reaction: Reaction = () => {\r\n if (!isFn(tracker)) return;\r\n if (ReactionStack.indexOf(reaction) === -1) {\r\n releaseBindingReactions(reaction);\r\n try {\r\n // 将当前的reaction添加到栈中, 用于后续的依赖收集\r\n ReactionStack.push(reaction);\r\n tracker();\r\n } finally {\r\n ReactionStack.pop();\r\n }\r\n }\r\n };\r\n reaction._name = name;\r\n reaction();\r\n return () => {\r\n disposeBindingReactions(reaction);\r\n };\r\n};\r\n","import { createObservable } from \"./internals\";\r\n\r\nexport function observable<T extends object>(target: T): T {\r\n return createObservable(null, null, target);\r\n}\r\n"],"names":["ProxyRaw","WeakMap","RawProxy","RawShallowProxy","ObModelSymbol","Symbol","RawNode","RawReactionMap","ReactionStack","toString","Object","prototype","isArr","Array","isArray","isFn","val","isPlainObject","call","isNormalType","target","isCollectionType","Set","Map","isMap","isWeakMap","WeakSet","isWeakSet","RAW_TYPE","OBSERVABLE_TYPE","isSupportObservable","getRaw","get","ITERATION_KEY","bindTargetKeyWithCurrentReaction","operation","key","reactionLen","length","current","addReactionsMapToReaction","addRawReactionsMap","runReactionsFromTargetKey","type","runReactions","newKey","reactions","getReactionsFromTargetKey","i","len","reaction","reactionsMap","forEach","indexOf","push","bindSet","_reactionsSet","add","set","reactionsMap_1","releaseBindingReactions","_a","delete","hasOwnProperty","baseHandlers","reciver","result","wellKnownSymbols","has","observableResult","isObservable","descriptor","getOwnPropertyDescriptor","value","configurable","createObservable","Reflect","ownKeys","hadKey","newValue","oldValue","deleteProperty","collectionHandlers","instrumentations","this","getOwnPropertyNames","reduce","act","DataNode","defineProperty","parent","path","concat","getDataNode","targetRaw","setDataNode","raw","node","shallow","parentRaw","currentNode","buildDataTree","createShallowProxy","createNormalProxy","createCollectionProxy","proxy","Proxy","tracker","name","pop","_name","disposeBindingReactions"],"mappings":"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"}
+1
-1
{
"name": "@caron/reactive",
"version": "0.0.1",
"version": "0.0.2",
"description": "",

@@ -5,0 +5,0 @@ "main": "lib",

declare function observable<T extends object>(target: T): T;
type PropertyKey = string | number | symbol;
type Reaction = ((...args: any[]) => any) & {
_reactionsSet?: Set<ReactionsMap>;
_name?: string;
};
type ReactionsMap = Map<PropertyKey, Set<Reaction>>;
declare const autorun: (tracker: Reaction, name: "AutoRun") => () => void;
export { autorun, observable };
declare function observable<T extends object>(target: T): T;
type PropertyKey = string | number | symbol;
type Reaction = ((...args: any[]) => any) & {
_reactionsSet?: Set<ReactionsMap>;
_name?: string;
};
type ReactionsMap = Map<PropertyKey, Set<Reaction>>;
declare const autorun: (tracker: Reaction, name: "AutoRun") => () => void;
export { autorun, observable };
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define('formly.reactive', ['exports'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.Formly = global.Formly || {}, global.Formly.Reactive = {})));
})(this, (function (exports) { 'use strict';
(function() {
const env = {"NODE_ENV":"development"};
try {
if (process) {
process.env = Object.assign({}, process.env);
Object.assign(process.env, env);
return;
}
} catch (e) {} // avoid ReferenceError: process is not defined
globalThis.process = { env:env };
})();
var ProxyRaw = new WeakMap();
var RawProxy = new WeakMap();
var RawShallowProxy = new WeakMap();
var ObModelSymbol = Symbol("ObModelSymbol");
var RawNode = new WeakMap();
var RawReactionMap = new WeakMap();
var ReactionStack = [];
var toString = Object.prototype.toString;
var isSet = function (val) {
return val && val instanceof Set;
};
var isMap = function (val) {
return val && val instanceof Map;
};
var isWeakMap = function (val) {
return val && val instanceof WeakMap;
};
var isWeakSet = function (val) {
return val && val instanceof WeakSet;
};
var isValid = function (val) { return val !== null && val !== undefined; };
var isArr = Array.isArray;
var isFn = function (val) {
return typeof val === "function";
};
var isPlainObject = function (val) {
return toString.call(val) === "[object Object]";
};
var isNormalType = function (target) {
return isPlainObject(target) || isArr(target);
};
var isCollectionType = function (target) {
return (isSet(target) || isMap(target) || isWeakMap(target) || isWeakSet(target));
};
var RAW_TYPE = Symbol("RAW_TYPE");
var OBSERVABLE_TYPE = Symbol("OBSERVABLE_TYPE");
var isObservable = function (target) {
return ProxyRaw.get(target) || !!(target === null || target === void 0 ? void 0 : target[ObModelSymbol]);
};
var isSupportObservable = function (target) {
if (!isValid(target))
return false;
if (isArr(target))
return true;
if (isPlainObject(target)) {
// 如果已经是observable对象,直接返回
if (target[RAW_TYPE]) {
return false;
}
//
if (target[OBSERVABLE_TYPE]) {
return true;
}
if (isFn(target["toJSON"]) || isFn(target["toJS"])) {
return false;
}
return true;
}
if (isCollectionType(target))
return true;
return false;
};
var getRaw = function (target) {
if (target === null || target === void 0 ? void 0 : target[ObModelSymbol])
return target[ObModelSymbol];
return ProxyRaw.get(target) || target;
};
var ITERATION_KEY = Symbol("iteration key");
var bindTargetKeyWithCurrentReaction = function (operation) {
var target = operation.target, key = operation.key, type = operation.type;
if (type === "iterate") {
key = ITERATION_KEY;
}
var reactionLen = ReactionStack.length;
if (reactionLen === 0)
return;
var current = ReactionStack[reactionLen - 1];
if (current) {
addReactionsMapToReaction(current, addRawReactionsMap(target, key, current));
}
};
var runReactionsFromTargetKey = function (operation) {
var key = operation.key, type = operation.type, target = operation.target;
runReactions(target, key);
// 影响到了数组的长度或者对象的key
if (type === "add" || type === "delete" || type === "clear") {
var newKey = Array.isArray(target) ? "length" : ITERATION_KEY;
runReactions(target, newKey);
}
};
var runReactions = function (target, key) {
var reactions = getReactionsFromTargetKey(target, key);
for (var i = 0, len = reactions.length; i < len; i++) {
var reaction = reactions[i];
reaction();
}
};
var getReactionsFromTargetKey = function (target, key) {
var reactionsMap = RawReactionMap.get(target);
var reactions = [];
if (reactionsMap) {
var map = reactionsMap.get(key);
map.forEach(function (reaction) {
if (reactions.indexOf(reaction) === -1) {
reactions.push(reaction);
}
});
}
return reactions;
};
var addReactionsMapToReaction = function (reaction, reactionsMap) {
var bindSet = reaction._reactionsSet;
if (bindSet) {
bindSet.add(reactionsMap);
}
else {
reaction._reactionsSet = new Set([reactionsMap]);
}
return bindSet;
};
// 将当前的reaction添加到reactionsMap中
var addRawReactionsMap = function (target, key, reaction) {
var reactionsMap = RawReactionMap.get(target);
if (reactionsMap) {
var reactions = reactionsMap.get(key);
if (reactions) {
reactions.add(reaction);
}
else {
reactionsMap.set(key, new Set([reaction]));
}
return reactionsMap;
}
else {
var reactionsMap_1 = new Map([[key, new Set([reaction])]]);
RawReactionMap.set(target, reactionsMap_1);
return reactionsMap_1;
}
};
// 重新绑定reaction
var releaseBindingReactions = function (reaction) {
var _a;
(_a = reaction._reactionsSet) === null || _a === void 0 ? void 0 : _a.forEach(function (reactionsMap) {
reactionsMap.forEach(function (reactions) {
reactions.delete(reaction);
});
});
delete reaction._reactionsSet;
};
var disposeBindingReactions = function (reaction) {
releaseBindingReactions(reaction);
};
var hasOwnProperty = Object.prototype.hasOwnProperty;
var baseHandlers = {
get: function (target, key, reciver) {
if (!key)
return;
var result = target[key];
if (typeof key === "symbol" && wellKnownSymbols.has(key))
return result;
// 将当前的target和key绑定到当前的reaction中
bindTargetKeyWithCurrentReaction({
target: target,
key: key,
reciver: reciver,
type: "get",
});
var observableResult = RawProxy.get(result);
if (observableResult) {
return observableResult;
}
if (!isObservable(result) && isSupportObservable(result)) {
var descriptor = Object.getOwnPropertyDescriptor(target, key);
if (!descriptor ||
!(descriptor.value === false && descriptor.configurable === false)) {
return createObservable(target, key, result);
}
}
return result;
},
has: function (target, key) {
var result = Reflect.has(target, key);
bindTargetKeyWithCurrentReaction({
target: target,
key: key,
type: "has",
});
return result;
},
ownKeys: function (target) {
var result = Reflect.ownKeys(target);
bindTargetKeyWithCurrentReaction({
target: target,
type: "iterate",
});
return result;
},
set: function (target, key, value, reciver) {
var hadKey = hasOwnProperty.call(target, key);
var newValue = createObservable(target, key, value);
var oldValue = target[key];
target[key] = newValue;
if (!hadKey) {
runReactionsFromTargetKey({
target: target,
key: key,
value: newValue,
oldValue: oldValue,
reciver: reciver,
type: "add",
});
}
else if (value !== oldValue) {
runReactionsFromTargetKey({
target: target,
key: key,
value: newValue,
oldValue: oldValue,
reciver: reciver,
type: "set",
});
}
return true;
},
deleteProperty: function (target, key) {
var oldValue = target[key];
delete target[key];
runReactionsFromTargetKey({
target: target,
key: key,
oldValue: oldValue,
type: "delete",
});
return true;
},
};
// 对于map、set、weakmap、weakset的处理来说,需要对其进行特殊的处理
var collectionHandlers = {
// 这些类型都是通过内部的函数来进行操作的,所以需要对这些函数进行拦截
get: function (target, key, reciver) {
target = hasOwnProperty.call(instrumentations, key)
? instrumentations
: target;
return Reflect.get(target, key, reciver);
},
};
var instrumentations = {
has: function (key) {
var target = ProxyRaw.get(this);
bindTargetKeyWithCurrentReaction({
target: target,
key: key,
type: "has",
});
return target.has(key);
},
};
var wellKnownSymbols = new Set(Object.getOwnPropertyNames(Symbol).reduce(function (act, key) {
if (key === "arguments")
return act;
if (key === "caller")
return act;
var value = Symbol[key];
if (typeof value === "symbol")
act.push(value);
return act;
}, []));
var buildDataTree = function (target, key, value) {
var raw = getRaw(value);
var currentNode = getDataNode(raw);
if (currentNode)
return currentNode;
setDataNode(raw, new DataNode(target, key, value));
};
var DataNode = /** @class */ (function () {
function DataNode(target, key, value) {
this.target = target;
this.key = key;
this.value = value;
}
Object.defineProperty(DataNode.prototype, "path", {
get: function () {
if (!this.parent)
return this.key ? [this.key] : [];
return this.parent.path.concat(this.key);
},
enumerable: false,
configurable: true
});
Object.defineProperty(DataNode.prototype, "targetRaw", {
get: function () {
return getRaw(this.target);
},
enumerable: false,
configurable: true
});
Object.defineProperty(DataNode.prototype, "parent", {
get: function () {
if (!this.target)
return;
return getDataNode(this.targetRaw);
},
enumerable: false,
configurable: true
});
return DataNode;
}());
var setDataNode = function (raw, node) {
if (raw === null || raw === void 0 ? void 0 : raw[ObModelSymbol]) {
raw[ObModelSymbol] = node;
return;
}
RawNode.set(raw, node);
};
var getDataNode = function (raw) {
if (raw === null || raw === void 0 ? void 0 : raw[ObModelSymbol]) {
return raw[ObModelSymbol];
}
return RawNode.get(raw);
};
var createObservable = function (target, key, value, shallow) {
// 非object类型直接返回
if (typeof value !== "object")
return value;
if (!isSupportObservable(value))
return value;
if (target) {
var parentRaw = ProxyRaw.get(target) || target;
var isShallowParent = RawShallowProxy.get(parentRaw);
if (isShallowParent)
return value;
}
buildDataTree(target, key, value);
if (shallow)
return createShallowProxy(value);
if (isNormalType(value))
return createNormalProxy(value);
if (isCollectionType(value))
return createCollectionProxy(value);
return value;
};
var createShallowProxy = function (target) {
if (isNormalType(target))
return createNormalProxy(target, true);
if (isCollectionType(target))
return createCollectionProxy(target, true);
// never reach
return target;
};
var createNormalProxy = function (target, shallow) {
var proxy = new Proxy(target, baseHandlers);
ProxyRaw.set(proxy, target);
if (shallow) {
RawShallowProxy.set(target, proxy);
}
else {
RawProxy.set(target, proxy);
}
return proxy;
};
var createCollectionProxy = function (target, shallow) {
var proxy = new Proxy(target, collectionHandlers);
ProxyRaw.set(proxy, target);
if (shallow) {
RawShallowProxy.set(target, proxy);
}
else {
RawProxy.set(target, proxy);
}
return proxy;
};
function observable(target) {
return createObservable(null, null, target);
}
var autorun = function (tracker, name) {
var reaction = function () {
if (!isFn(tracker))
return;
if (ReactionStack.indexOf(reaction) === -1) {
releaseBindingReactions(reaction);
try {
// 将当前的reaction添加到栈中, 用于后续的依赖收集
ReactionStack.push(reaction);
tracker();
}
finally {
ReactionStack.pop();
}
}
};
reaction._name = name;
reaction();
return function () {
disposeBindingReactions(reaction);
};
};
exports.autorun = autorun;
exports.observable = observable;
}));
//# sourceMappingURL=formly.reactive.umd.development.js.map
{"version":3,"file":"formly.reactive.umd.development.js","sources":["../src/enviroment.ts","../src/checker.ts","../src/externals.ts","../src/reaction.ts","../src/handlers.ts","../src/tree.ts","../src/internals.ts","../src/observable.ts","../src/autorun.ts"],"sourcesContent":["import { DataNode } from \"./tree\";\r\nimport { Reaction, ReactionsMap } from \"./types\";\r\n\r\nexport const ProxyRaw = new WeakMap();\r\nexport const RawProxy = new WeakMap();\r\nexport const RawShallowProxy = new WeakMap();\r\nexport const ObModelSymbol = Symbol(\"ObModelSymbol\");\r\nexport const RawNode = new WeakMap<object, DataNode>();\r\nexport const RawReactionMap = new WeakMap<object, ReactionsMap>();\r\n\r\nexport const ReactionStack: Reaction[] = [];\r\n","const toString = Object.prototype.toString;\r\n\r\nexport const isSet = (val: unknown): val is Set<any> =>\r\n val && val instanceof Set;\r\nexport const isMap = (val: unknown): val is Map<any, any> =>\r\n val && val instanceof Map;\r\nexport const isWeakMap = (val: unknown): val is WeakMap<any, any> =>\r\n val && val instanceof WeakMap;\r\nexport const isWeakSet = (val: unknown): val is WeakSet<any> =>\r\n val && val instanceof WeakSet;\r\nexport const isValid = (val: unknown) => val !== null && val !== undefined;\r\nexport const isArr = Array.isArray;\r\nexport const isFn = (val: unknown): val is () => any =>\r\n typeof val === \"function\";\r\n\r\nexport const isPlainObject = (val: unknown) =>\r\n toString.call(val) === \"[object Object]\";\r\n\r\nexport const isNormalType = (target: any) => {\r\n return isPlainObject(target) || isArr(target);\r\n};\r\n\r\nexport const isCollectionType = (target: any) => {\r\n return (\r\n isSet(target) || isMap(target) || isWeakMap(target) || isWeakSet(target)\r\n );\r\n};\r\n","import {\r\n isArr,\r\n isCollectionType,\r\n isFn,\r\n isPlainObject,\r\n isValid,\r\n} from \"./checker\";\r\nimport { ObModelSymbol, ProxyRaw } from \"./enviroment\";\r\n\r\nconst RAW_TYPE = Symbol(\"RAW_TYPE\");\r\nconst OBSERVABLE_TYPE = Symbol(\"OBSERVABLE_TYPE\");\r\n\r\nexport const isObservable = (target: any) => {\r\n return ProxyRaw.get(target) || !!target?.[ObModelSymbol];\r\n};\r\n\r\nexport const isSupportObservable = (target: any) => {\r\n if (!isValid(target)) return false;\r\n if (isArr(target)) return true;\r\n if (isPlainObject(target)) {\r\n // 如果已经是observable对象,直接返回\r\n if (target[RAW_TYPE]) {\r\n return false;\r\n }\r\n\r\n //\r\n if (target[OBSERVABLE_TYPE]) {\r\n return true;\r\n }\r\n\r\n if (isFn(target[\"toJSON\"]) || isFn(target[\"toJS\"])) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n if (isCollectionType(target)) return true;\r\n\r\n return false;\r\n};\r\n\r\nexport const getRaw = <T>(target: T): T => {\r\n if (target?.[ObModelSymbol]) return target[ObModelSymbol];\r\n return ProxyRaw.get(target as any) || target;\r\n};\r\n","import { RawReactionMap, ReactionStack } from \"./enviroment\";\r\nimport { IOperation, PropertyKey, Reaction, ReactionsMap } from \"./types\";\r\n\r\nconst ITERATION_KEY = Symbol(\"iteration key\");\r\n\r\nexport const bindTargetKeyWithCurrentReaction = (operation: IOperation) => {\r\n let { target, key, type } = operation;\r\n if (type === \"iterate\") {\r\n key = ITERATION_KEY;\r\n }\r\n const reactionLen = ReactionStack.length;\r\n if (reactionLen === 0) return;\r\n const current = ReactionStack[reactionLen - 1];\r\n\r\n if (current) {\r\n addReactionsMapToReaction(\r\n current,\r\n addRawReactionsMap(target, key, current)\r\n );\r\n }\r\n};\r\n\r\nexport const runReactionsFromTargetKey = (operation: IOperation) => {\r\n let { key, type, target } = operation;\r\n runReactions(target, key);\r\n\r\n // 影响到了数组的长度或者对象的key\r\n if (type === \"add\" || type === \"delete\" || type === \"clear\") {\r\n const newKey = Array.isArray(target) ? \"length\" : ITERATION_KEY;\r\n runReactions(target, newKey);\r\n }\r\n};\r\n\r\nconst runReactions = (target: any, key: PropertyKey) => {\r\n const reactions = getReactionsFromTargetKey(target, key);\r\n for (let i = 0, len = reactions.length; i < len; i++) {\r\n const reaction = reactions[i];\r\n reaction();\r\n }\r\n};\r\n\r\nconst getReactionsFromTargetKey = (target: any, key: PropertyKey) => {\r\n const reactionsMap = RawReactionMap.get(target);\r\n const reactions = [];\r\n if (reactionsMap) {\r\n const map = reactionsMap.get(key);\r\n map.forEach((reaction) => {\r\n if (reactions.indexOf(reaction) === -1) {\r\n reactions.push(reaction);\r\n }\r\n });\r\n }\r\n return reactions;\r\n};\r\n\r\nconst addReactionsMapToReaction = (\r\n reaction: Reaction,\r\n reactionsMap: ReactionsMap\r\n) => {\r\n const bindSet = reaction._reactionsSet;\r\n if (bindSet) {\r\n bindSet.add(reactionsMap);\r\n } else {\r\n reaction._reactionsSet = new Set([reactionsMap]);\r\n }\r\n return bindSet;\r\n};\r\n\r\n// 将当前的reaction添加到reactionsMap中\r\nconst addRawReactionsMap = (\r\n target: any,\r\n key: PropertyKey,\r\n reaction: Reaction\r\n) => {\r\n const reactionsMap = RawReactionMap.get(target);\r\n if (reactionsMap) {\r\n const reactions = reactionsMap.get(key);\r\n if (reactions) {\r\n reactions.add(reaction);\r\n } else {\r\n reactionsMap.set(key, new Set([reaction]));\r\n }\r\n return reactionsMap;\r\n } else {\r\n const reactionsMap: ReactionsMap = new Map([[key, new Set([reaction])]]);\r\n RawReactionMap.set(target, reactionsMap);\r\n return reactionsMap;\r\n }\r\n};\r\n\r\n// 重新绑定reaction\r\nexport const releaseBindingReactions = (reaction: Reaction) => {\r\n reaction._reactionsSet?.forEach((reactionsMap) => {\r\n reactionsMap.forEach((reactions) => {\r\n reactions.delete(reaction);\r\n });\r\n });\r\n delete reaction._reactionsSet;\r\n};\r\n\r\nexport const disposeBindingReactions = (reaction: Reaction) => {\r\n releaseBindingReactions(reaction);\r\n};\r\n","import { ProxyRaw, RawProxy } from \"./enviroment\";\r\nimport { isObservable, isSupportObservable } from \"./externals\";\r\nimport { createObservable } from \"./internals\";\r\nimport {\r\n bindTargetKeyWithCurrentReaction,\r\n runReactionsFromTargetKey,\r\n} from \"./reaction\";\r\n\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nexport const baseHandlers: ProxyHandler<any> = {\r\n get(target, key, reciver) {\r\n if (!key) return;\r\n const result = target[key];\r\n if (typeof key === \"symbol\" && wellKnownSymbols.has(key)) return result;\r\n // 将当前的target和key绑定到当前的reaction中\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n key,\r\n reciver,\r\n type: \"get\",\r\n });\r\n const observableResult = RawProxy.get(result);\r\n if (observableResult) {\r\n return observableResult;\r\n }\r\n if (!isObservable(result) && isSupportObservable(result)) {\r\n const descriptor = Object.getOwnPropertyDescriptor(target, key);\r\n if (\r\n !descriptor ||\r\n !(descriptor.value === false && descriptor.configurable === false)\r\n ) {\r\n return createObservable(target, key, result);\r\n }\r\n }\r\n return result;\r\n },\r\n has(target, key) {\r\n const result = Reflect.has(target, key);\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n key,\r\n type: \"has\",\r\n });\r\n return result;\r\n },\r\n ownKeys(target) {\r\n const result = Reflect.ownKeys(target);\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n type: \"iterate\",\r\n });\r\n return result;\r\n },\r\n set(target, key, value, reciver) {\r\n const hadKey = hasOwnProperty.call(target, key);\r\n const newValue = createObservable(target, key, value);\r\n const oldValue = target[key];\r\n target[key] = newValue;\r\n if (!hadKey) {\r\n runReactionsFromTargetKey({\r\n target,\r\n key,\r\n value: newValue,\r\n oldValue,\r\n reciver,\r\n type: \"add\",\r\n });\r\n } else if (value !== oldValue) {\r\n runReactionsFromTargetKey({\r\n target,\r\n key,\r\n value: newValue,\r\n oldValue,\r\n reciver,\r\n type: \"set\",\r\n });\r\n }\r\n return true;\r\n },\r\n deleteProperty(target, key) {\r\n const oldValue = target[key];\r\n delete target[key];\r\n runReactionsFromTargetKey({\r\n target,\r\n key,\r\n oldValue,\r\n type: \"delete\",\r\n });\r\n return true;\r\n },\r\n};\r\n\r\n// 对于map、set、weakmap、weakset的处理来说,需要对其进行特殊的处理\r\nexport const collectionHandlers = {\r\n // 这些类型都是通过内部的函数来进行操作的,所以需要对这些函数进行拦截\r\n get(target: any, key: PropertyKey, reciver: any) {\r\n target = hasOwnProperty.call(instrumentations, key)\r\n ? instrumentations\r\n : target;\r\n return Reflect.get(target, key, reciver);\r\n },\r\n};\r\n\r\nconst instrumentations = {\r\n has(key: PropertyKey) {\r\n const target = ProxyRaw.get(this);\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n key,\r\n type: \"has\",\r\n });\r\n return target.has(key);\r\n },\r\n};\r\n\r\nconst wellKnownSymbols = new Set(\r\n Object.getOwnPropertyNames(Symbol).reduce((act: symbol[], key) => {\r\n if (key === \"arguments\") return act;\r\n if (key === \"caller\") return act;\r\n const value = (Symbol as any)[key];\r\n if (typeof value === \"symbol\") act.push(value);\r\n return act;\r\n }, [])\r\n);\r\n","import { ObModelSymbol, RawNode } from \"./enviroment\";\r\nimport { getRaw } from \"./externals\";\r\nimport { PropertyKey } from \"./types\";\r\n\r\nexport const buildDataTree = (target: any, key: PropertyKey, value: any) => {\r\n const raw = getRaw(value);\r\n const currentNode = getDataNode(raw);\r\n if (currentNode) return currentNode;\r\n setDataNode(raw, new DataNode(target, key, value));\r\n};\r\n\r\nexport class DataNode {\r\n target: any;\r\n key: PropertyKey;\r\n value: any;\r\n\r\n constructor(target: any, key: PropertyKey, value: any) {\r\n this.target = target;\r\n this.key = key;\r\n this.value = value;\r\n }\r\n\r\n get path() {\r\n if (!this.parent) return this.key ? [this.key] : [];\r\n return this.parent.path.concat(this.key);\r\n }\r\n\r\n get targetRaw() {\r\n return getRaw(this.target);\r\n }\r\n\r\n get parent() {\r\n if (!this.target) return;\r\n return getDataNode(this.targetRaw);\r\n }\r\n}\r\n\r\nexport const setDataNode = (raw: any, node: DataNode) => {\r\n if (raw?.[ObModelSymbol]) {\r\n raw[ObModelSymbol] = node;\r\n return;\r\n }\r\n RawNode.set(raw, node);\r\n};\r\n\r\nexport const getDataNode = (raw: any) => {\r\n if (raw?.[ObModelSymbol]) {\r\n return raw[ObModelSymbol];\r\n }\r\n return RawNode.get(raw);\r\n};\r\n","import { ProxyRaw, RawProxy, RawShallowProxy } from \"./enviroment\";\r\nimport { isSupportObservable } from \"./externals\";\r\nimport { baseHandlers, collectionHandlers } from \"./handlers\";\r\nimport { buildDataTree } from \"./tree\";\r\nimport { PropertyKey } from \"./types\";\r\nimport { isCollectionType, isNormalType } from \"./checker\";\r\n\r\nexport const createObservable = (\r\n target?: any,\r\n key?: PropertyKey,\r\n value?: any,\r\n shallow?: boolean\r\n) => {\r\n // 非object类型直接返回\r\n if (typeof value !== \"object\") return value;\r\n\r\n if (!isSupportObservable(value)) return value;\r\n\r\n if (target) {\r\n const parentRaw = ProxyRaw.get(target) || target;\r\n const isShallowParent = RawShallowProxy.get(parentRaw);\r\n if (isShallowParent) return value;\r\n }\r\n\r\n buildDataTree(target, key, value);\r\n if (shallow) return createShallowProxy(value);\r\n if (isNormalType(value)) return createNormalProxy(value);\r\n if (isCollectionType(value)) return createCollectionProxy(value);\r\n return value;\r\n};\r\n\r\nconst createShallowProxy = (target: any) => {\r\n if (isNormalType(target)) return createNormalProxy(target, true);\r\n if (isCollectionType(target)) return createCollectionProxy(target, true);\r\n // never reach\r\n return target;\r\n};\r\n\r\nconst createNormalProxy = (target: any, shallow?: boolean) => {\r\n const proxy = new Proxy(target, baseHandlers);\r\n ProxyRaw.set(proxy, target);\r\n if (shallow) {\r\n RawShallowProxy.set(target, proxy);\r\n } else {\r\n RawProxy.set(target, proxy);\r\n }\r\n return proxy;\r\n};\r\n\r\nconst createCollectionProxy = (target: any, shallow?: boolean) => {\r\n const proxy = new Proxy(target, collectionHandlers);\r\n ProxyRaw.set(proxy, target);\r\n if (shallow) {\r\n RawShallowProxy.set(target, proxy);\r\n } else {\r\n RawProxy.set(target, proxy);\r\n }\r\n return proxy;\r\n};\r\n","import { createObservable } from \"./internals\";\r\n\r\nexport function observable<T extends object>(target: T): T {\r\n return createObservable(null, null, target);\r\n}\r\n","import { isFn } from \"./checker\";\r\nimport { ReactionStack } from \"./enviroment\";\r\nimport { disposeBindingReactions, releaseBindingReactions } from \"./reaction\";\r\nimport { Reaction } from \"./types\";\r\n\r\nexport const autorun = (tracker: Reaction, name: \"AutoRun\") => {\r\n const reaction: Reaction = () => {\r\n if (!isFn(tracker)) return;\r\n if (ReactionStack.indexOf(reaction) === -1) {\r\n releaseBindingReactions(reaction);\r\n try {\r\n // 将当前的reaction添加到栈中, 用于后续的依赖收集\r\n ReactionStack.push(reaction);\r\n tracker();\r\n } finally {\r\n ReactionStack.pop();\r\n }\r\n }\r\n };\r\n reaction._name = name;\r\n reaction();\r\n return () => {\r\n disposeBindingReactions(reaction);\r\n };\r\n};\r\n"],"names":[],"mappings":"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"}
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define("formly.reactive",["exports"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).Formly=e.Formly||{},e.Formly.Reactive={}))}(this,(function(e){"use strict";!function(){const e={NODE_ENV:"development"};try{if(process)return process.env=Object.assign({},process.env),void Object.assign(process.env,e)}catch(e){}globalThis.process={env:e}}();var t=new WeakMap,n=new WeakMap,r=new WeakMap,o=Symbol("ObModelSymbol"),a=new WeakMap,i=new WeakMap,u=[],c=Object.prototype.toString,f=Array.isArray,l=function(e){return"function"==typeof e},s=function(e){return"[object Object]"===c.call(e)},y=function(e){return s(e)||f(e)},p=function(e){return(t=e)&&t instanceof Set||function(e){return e&&e instanceof Map}(e)||function(e){return e&&e instanceof WeakMap}(e)||function(e){return e&&e instanceof WeakSet}(e);var t},v=Symbol("RAW_TYPE"),g=Symbol("OBSERVABLE_TYPE"),d=function(e){return null!=e&&(!!f(e)||(s(e)?!e[v]&&(!!e[g]||!l(e.toJSON)&&!l(e.toJS)):!!p(e)))},h=function(e){return(null==e?void 0:e[o])?e[o]:t.get(e)||e},b=Symbol("iteration key"),m=function(e){var t=e.target,n=e.key;"iterate"===e.type&&(n=b);var r=u.length;if(0!==r){var o=u[r-1];o&&O(o,j(t,n,o))}},S=function(e){var t=e.key,n=e.type,r=e.target;if(k(r,t),"add"===n||"delete"===n||"clear"===n){var o=Array.isArray(r)?"length":b;k(r,o)}},k=function(e,t){for(var n=w(e,t),r=0,o=n.length;r<o;r++){(0,n[r])()}},w=function(e,t){var n=i.get(e),r=[];n&&n.get(t).forEach((function(e){-1===r.indexOf(e)&&r.push(e)}));return r},O=function(e,t){var n=e._reactionsSet;return n?n.add(t):e._reactionsSet=new Set([t]),n},j=function(e,t,n){var r=i.get(e);if(r){var o=r.get(t);return o?o.add(n):r.set(t,new Set([n])),r}var a=new Map([[t,new Set([n])]]);return i.set(e,a),a},P=function(e){var t;null===(t=e._reactionsSet)||void 0===t||t.forEach((function(t){t.forEach((function(t){t.delete(e)}))})),delete e._reactionsSet},E=Object.prototype.hasOwnProperty,M={get:function(e,r,a){if(r){var i=e[r];if("symbol"==typeof r&&_.has(r))return i;m({target:e,key:r,reciver:a,type:"get"});var u=n.get(i);if(u)return u;if(!function(e){return t.get(e)||!!(null==e?void 0:e[o])}(i)&&d(i)){var c=Object.getOwnPropertyDescriptor(e,r);if(!c||!1!==c.value||!1!==c.configurable)return V(e,r,i)}return i}},has:function(e,t){var n=Reflect.has(e,t);return m({target:e,key:t,type:"has"}),n},ownKeys:function(e){var t=Reflect.ownKeys(e);return m({target:e,type:"iterate"}),t},set:function(e,t,n,r){var o=E.call(e,t),a=V(e,t,n),i=e[t];return e[t]=a,o?n!==i&&S({target:e,key:t,value:a,oldValue:i,reciver:r,type:"set"}):S({target:e,key:t,value:a,oldValue:i,reciver:r,type:"add"}),!0},deleteProperty:function(e,t){var n=e[t];return delete e[t],S({target:e,key:t,oldValue:n,type:"delete"}),!0}},R={get:function(e,t,n){return e=E.call(W,t)?W:e,Reflect.get(e,t,n)}},W={has:function(e){var n=t.get(this);return m({target:n,key:e,type:"has"}),n.has(e)}},_=new Set(Object.getOwnPropertyNames(Symbol).reduce((function(e,t){if("arguments"===t)return e;if("caller"===t)return e;var n=Symbol[t];return"symbol"==typeof n&&e.push(n),e}),[])),x=function(){function e(e,t,n){this.target=e,this.key=t,this.value=n}return Object.defineProperty(e.prototype,"path",{get:function(){return this.parent?this.parent.path.concat(this.key):this.key?[this.key]:[]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"targetRaw",{get:function(){return h(this.target)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"parent",{get:function(){if(this.target)return T(this.targetRaw)},enumerable:!1,configurable:!0}),e}(),A=function(e,t){(null==e?void 0:e[o])?e[o]=t:a.set(e,t)},T=function(e){return(null==e?void 0:e[o])?e[o]:a.get(e)},V=function(e,n,o,a){if("object"!=typeof o)return o;if(!d(o))return o;if(e){var i=t.get(e)||e;if(r.get(i))return o}return function(e,t,n){var r=h(n),o=T(r);if(o)return o;A(r,new x(e,t,n))}(e,n,o),a?N(o):y(o)?F(o):p(o)?B(o):o},N=function(e){return y(e)?F(e,!0):p(e)?B(e,!0):e},F=function(e,o){var a=new Proxy(e,M);return t.set(a,e),o?r.set(e,a):n.set(e,a),a},B=function(e,o){var a=new Proxy(e,R);return t.set(a,e),o?r.set(e,a):n.set(e,a),a};e.autorun=function(e,t){var n=function(){if(l(e)&&-1===u.indexOf(n)){P(n);try{u.push(n),e()}finally{u.pop()}}};return n._name=t,n(),function(){!function(e){P(e)}(n)}},e.observable=function(e){return V(null,null,e)}}));
//# sourceMappingURL=formly.reactive.umd.production.js.map
{"version":3,"file":"formly.reactive.umd.production.js","sources":["../src/enviroment.ts","../src/checker.ts","../src/externals.ts","../src/reaction.ts","../src/handlers.ts","../src/tree.ts","../src/internals.ts","../src/autorun.ts","../src/observable.ts"],"sourcesContent":["import { DataNode } from \"./tree\";\r\nimport { Reaction, ReactionsMap } from \"./types\";\r\n\r\nexport const ProxyRaw = new WeakMap();\r\nexport const RawProxy = new WeakMap();\r\nexport const RawShallowProxy = new WeakMap();\r\nexport const ObModelSymbol = Symbol(\"ObModelSymbol\");\r\nexport const RawNode = new WeakMap<object, DataNode>();\r\nexport const RawReactionMap = new WeakMap<object, ReactionsMap>();\r\n\r\nexport const ReactionStack: Reaction[] = [];\r\n","const toString = Object.prototype.toString;\r\n\r\nexport const isSet = (val: unknown): val is Set<any> =>\r\n val && val instanceof Set;\r\nexport const isMap = (val: unknown): val is Map<any, any> =>\r\n val && val instanceof Map;\r\nexport const isWeakMap = (val: unknown): val is WeakMap<any, any> =>\r\n val && val instanceof WeakMap;\r\nexport const isWeakSet = (val: unknown): val is WeakSet<any> =>\r\n val && val instanceof WeakSet;\r\nexport const isValid = (val: unknown) => val !== null && val !== undefined;\r\nexport const isArr = Array.isArray;\r\nexport const isFn = (val: unknown): val is () => any =>\r\n typeof val === \"function\";\r\n\r\nexport const isPlainObject = (val: unknown) =>\r\n toString.call(val) === \"[object Object]\";\r\n\r\nexport const isNormalType = (target: any) => {\r\n return isPlainObject(target) || isArr(target);\r\n};\r\n\r\nexport const isCollectionType = (target: any) => {\r\n return (\r\n isSet(target) || isMap(target) || isWeakMap(target) || isWeakSet(target)\r\n );\r\n};\r\n","import {\r\n isArr,\r\n isCollectionType,\r\n isFn,\r\n isPlainObject,\r\n isValid,\r\n} from \"./checker\";\r\nimport { ObModelSymbol, ProxyRaw } from \"./enviroment\";\r\n\r\nconst RAW_TYPE = Symbol(\"RAW_TYPE\");\r\nconst OBSERVABLE_TYPE = Symbol(\"OBSERVABLE_TYPE\");\r\n\r\nexport const isObservable = (target: any) => {\r\n return ProxyRaw.get(target) || !!target?.[ObModelSymbol];\r\n};\r\n\r\nexport const isSupportObservable = (target: any) => {\r\n if (!isValid(target)) return false;\r\n if (isArr(target)) return true;\r\n if (isPlainObject(target)) {\r\n // 如果已经是observable对象,直接返回\r\n if (target[RAW_TYPE]) {\r\n return false;\r\n }\r\n\r\n //\r\n if (target[OBSERVABLE_TYPE]) {\r\n return true;\r\n }\r\n\r\n if (isFn(target[\"toJSON\"]) || isFn(target[\"toJS\"])) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n if (isCollectionType(target)) return true;\r\n\r\n return false;\r\n};\r\n\r\nexport const getRaw = <T>(target: T): T => {\r\n if (target?.[ObModelSymbol]) return target[ObModelSymbol];\r\n return ProxyRaw.get(target as any) || target;\r\n};\r\n","import { RawReactionMap, ReactionStack } from \"./enviroment\";\r\nimport { IOperation, PropertyKey, Reaction, ReactionsMap } from \"./types\";\r\n\r\nconst ITERATION_KEY = Symbol(\"iteration key\");\r\n\r\nexport const bindTargetKeyWithCurrentReaction = (operation: IOperation) => {\r\n let { target, key, type } = operation;\r\n if (type === \"iterate\") {\r\n key = ITERATION_KEY;\r\n }\r\n const reactionLen = ReactionStack.length;\r\n if (reactionLen === 0) return;\r\n const current = ReactionStack[reactionLen - 1];\r\n\r\n if (current) {\r\n addReactionsMapToReaction(\r\n current,\r\n addRawReactionsMap(target, key, current)\r\n );\r\n }\r\n};\r\n\r\nexport const runReactionsFromTargetKey = (operation: IOperation) => {\r\n let { key, type, target } = operation;\r\n runReactions(target, key);\r\n\r\n // 影响到了数组的长度或者对象的key\r\n if (type === \"add\" || type === \"delete\" || type === \"clear\") {\r\n const newKey = Array.isArray(target) ? \"length\" : ITERATION_KEY;\r\n runReactions(target, newKey);\r\n }\r\n};\r\n\r\nconst runReactions = (target: any, key: PropertyKey) => {\r\n const reactions = getReactionsFromTargetKey(target, key);\r\n for (let i = 0, len = reactions.length; i < len; i++) {\r\n const reaction = reactions[i];\r\n reaction();\r\n }\r\n};\r\n\r\nconst getReactionsFromTargetKey = (target: any, key: PropertyKey) => {\r\n const reactionsMap = RawReactionMap.get(target);\r\n const reactions = [];\r\n if (reactionsMap) {\r\n const map = reactionsMap.get(key);\r\n map.forEach((reaction) => {\r\n if (reactions.indexOf(reaction) === -1) {\r\n reactions.push(reaction);\r\n }\r\n });\r\n }\r\n return reactions;\r\n};\r\n\r\nconst addReactionsMapToReaction = (\r\n reaction: Reaction,\r\n reactionsMap: ReactionsMap\r\n) => {\r\n const bindSet = reaction._reactionsSet;\r\n if (bindSet) {\r\n bindSet.add(reactionsMap);\r\n } else {\r\n reaction._reactionsSet = new Set([reactionsMap]);\r\n }\r\n return bindSet;\r\n};\r\n\r\n// 将当前的reaction添加到reactionsMap中\r\nconst addRawReactionsMap = (\r\n target: any,\r\n key: PropertyKey,\r\n reaction: Reaction\r\n) => {\r\n const reactionsMap = RawReactionMap.get(target);\r\n if (reactionsMap) {\r\n const reactions = reactionsMap.get(key);\r\n if (reactions) {\r\n reactions.add(reaction);\r\n } else {\r\n reactionsMap.set(key, new Set([reaction]));\r\n }\r\n return reactionsMap;\r\n } else {\r\n const reactionsMap: ReactionsMap = new Map([[key, new Set([reaction])]]);\r\n RawReactionMap.set(target, reactionsMap);\r\n return reactionsMap;\r\n }\r\n};\r\n\r\n// 重新绑定reaction\r\nexport const releaseBindingReactions = (reaction: Reaction) => {\r\n reaction._reactionsSet?.forEach((reactionsMap) => {\r\n reactionsMap.forEach((reactions) => {\r\n reactions.delete(reaction);\r\n });\r\n });\r\n delete reaction._reactionsSet;\r\n};\r\n\r\nexport const disposeBindingReactions = (reaction: Reaction) => {\r\n releaseBindingReactions(reaction);\r\n};\r\n","import { ProxyRaw, RawProxy } from \"./enviroment\";\r\nimport { isObservable, isSupportObservable } from \"./externals\";\r\nimport { createObservable } from \"./internals\";\r\nimport {\r\n bindTargetKeyWithCurrentReaction,\r\n runReactionsFromTargetKey,\r\n} from \"./reaction\";\r\n\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nexport const baseHandlers: ProxyHandler<any> = {\r\n get(target, key, reciver) {\r\n if (!key) return;\r\n const result = target[key];\r\n if (typeof key === \"symbol\" && wellKnownSymbols.has(key)) return result;\r\n // 将当前的target和key绑定到当前的reaction中\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n key,\r\n reciver,\r\n type: \"get\",\r\n });\r\n const observableResult = RawProxy.get(result);\r\n if (observableResult) {\r\n return observableResult;\r\n }\r\n if (!isObservable(result) && isSupportObservable(result)) {\r\n const descriptor = Object.getOwnPropertyDescriptor(target, key);\r\n if (\r\n !descriptor ||\r\n !(descriptor.value === false && descriptor.configurable === false)\r\n ) {\r\n return createObservable(target, key, result);\r\n }\r\n }\r\n return result;\r\n },\r\n has(target, key) {\r\n const result = Reflect.has(target, key);\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n key,\r\n type: \"has\",\r\n });\r\n return result;\r\n },\r\n ownKeys(target) {\r\n const result = Reflect.ownKeys(target);\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n type: \"iterate\",\r\n });\r\n return result;\r\n },\r\n set(target, key, value, reciver) {\r\n const hadKey = hasOwnProperty.call(target, key);\r\n const newValue = createObservable(target, key, value);\r\n const oldValue = target[key];\r\n target[key] = newValue;\r\n if (!hadKey) {\r\n runReactionsFromTargetKey({\r\n target,\r\n key,\r\n value: newValue,\r\n oldValue,\r\n reciver,\r\n type: \"add\",\r\n });\r\n } else if (value !== oldValue) {\r\n runReactionsFromTargetKey({\r\n target,\r\n key,\r\n value: newValue,\r\n oldValue,\r\n reciver,\r\n type: \"set\",\r\n });\r\n }\r\n return true;\r\n },\r\n deleteProperty(target, key) {\r\n const oldValue = target[key];\r\n delete target[key];\r\n runReactionsFromTargetKey({\r\n target,\r\n key,\r\n oldValue,\r\n type: \"delete\",\r\n });\r\n return true;\r\n },\r\n};\r\n\r\n// 对于map、set、weakmap、weakset的处理来说,需要对其进行特殊的处理\r\nexport const collectionHandlers = {\r\n // 这些类型都是通过内部的函数来进行操作的,所以需要对这些函数进行拦截\r\n get(target: any, key: PropertyKey, reciver: any) {\r\n target = hasOwnProperty.call(instrumentations, key)\r\n ? instrumentations\r\n : target;\r\n return Reflect.get(target, key, reciver);\r\n },\r\n};\r\n\r\nconst instrumentations = {\r\n has(key: PropertyKey) {\r\n const target = ProxyRaw.get(this);\r\n bindTargetKeyWithCurrentReaction({\r\n target,\r\n key,\r\n type: \"has\",\r\n });\r\n return target.has(key);\r\n },\r\n};\r\n\r\nconst wellKnownSymbols = new Set(\r\n Object.getOwnPropertyNames(Symbol).reduce((act: symbol[], key) => {\r\n if (key === \"arguments\") return act;\r\n if (key === \"caller\") return act;\r\n const value = (Symbol as any)[key];\r\n if (typeof value === \"symbol\") act.push(value);\r\n return act;\r\n }, [])\r\n);\r\n","import { ObModelSymbol, RawNode } from \"./enviroment\";\r\nimport { getRaw } from \"./externals\";\r\nimport { PropertyKey } from \"./types\";\r\n\r\nexport const buildDataTree = (target: any, key: PropertyKey, value: any) => {\r\n const raw = getRaw(value);\r\n const currentNode = getDataNode(raw);\r\n if (currentNode) return currentNode;\r\n setDataNode(raw, new DataNode(target, key, value));\r\n};\r\n\r\nexport class DataNode {\r\n target: any;\r\n key: PropertyKey;\r\n value: any;\r\n\r\n constructor(target: any, key: PropertyKey, value: any) {\r\n this.target = target;\r\n this.key = key;\r\n this.value = value;\r\n }\r\n\r\n get path() {\r\n if (!this.parent) return this.key ? [this.key] : [];\r\n return this.parent.path.concat(this.key);\r\n }\r\n\r\n get targetRaw() {\r\n return getRaw(this.target);\r\n }\r\n\r\n get parent() {\r\n if (!this.target) return;\r\n return getDataNode(this.targetRaw);\r\n }\r\n}\r\n\r\nexport const setDataNode = (raw: any, node: DataNode) => {\r\n if (raw?.[ObModelSymbol]) {\r\n raw[ObModelSymbol] = node;\r\n return;\r\n }\r\n RawNode.set(raw, node);\r\n};\r\n\r\nexport const getDataNode = (raw: any) => {\r\n if (raw?.[ObModelSymbol]) {\r\n return raw[ObModelSymbol];\r\n }\r\n return RawNode.get(raw);\r\n};\r\n","import { ProxyRaw, RawProxy, RawShallowProxy } from \"./enviroment\";\r\nimport { isSupportObservable } from \"./externals\";\r\nimport { baseHandlers, collectionHandlers } from \"./handlers\";\r\nimport { buildDataTree } from \"./tree\";\r\nimport { PropertyKey } from \"./types\";\r\nimport { isCollectionType, isNormalType } from \"./checker\";\r\n\r\nexport const createObservable = (\r\n target?: any,\r\n key?: PropertyKey,\r\n value?: any,\r\n shallow?: boolean\r\n) => {\r\n // 非object类型直接返回\r\n if (typeof value !== \"object\") return value;\r\n\r\n if (!isSupportObservable(value)) return value;\r\n\r\n if (target) {\r\n const parentRaw = ProxyRaw.get(target) || target;\r\n const isShallowParent = RawShallowProxy.get(parentRaw);\r\n if (isShallowParent) return value;\r\n }\r\n\r\n buildDataTree(target, key, value);\r\n if (shallow) return createShallowProxy(value);\r\n if (isNormalType(value)) return createNormalProxy(value);\r\n if (isCollectionType(value)) return createCollectionProxy(value);\r\n return value;\r\n};\r\n\r\nconst createShallowProxy = (target: any) => {\r\n if (isNormalType(target)) return createNormalProxy(target, true);\r\n if (isCollectionType(target)) return createCollectionProxy(target, true);\r\n // never reach\r\n return target;\r\n};\r\n\r\nconst createNormalProxy = (target: any, shallow?: boolean) => {\r\n const proxy = new Proxy(target, baseHandlers);\r\n ProxyRaw.set(proxy, target);\r\n if (shallow) {\r\n RawShallowProxy.set(target, proxy);\r\n } else {\r\n RawProxy.set(target, proxy);\r\n }\r\n return proxy;\r\n};\r\n\r\nconst createCollectionProxy = (target: any, shallow?: boolean) => {\r\n const proxy = new Proxy(target, collectionHandlers);\r\n ProxyRaw.set(proxy, target);\r\n if (shallow) {\r\n RawShallowProxy.set(target, proxy);\r\n } else {\r\n RawProxy.set(target, proxy);\r\n }\r\n return proxy;\r\n};\r\n","import { isFn } from \"./checker\";\r\nimport { ReactionStack } from \"./enviroment\";\r\nimport { disposeBindingReactions, releaseBindingReactions } from \"./reaction\";\r\nimport { Reaction } from \"./types\";\r\n\r\nexport const autorun = (tracker: Reaction, name: \"AutoRun\") => {\r\n const reaction: Reaction = () => {\r\n if (!isFn(tracker)) return;\r\n if (ReactionStack.indexOf(reaction) === -1) {\r\n releaseBindingReactions(reaction);\r\n try {\r\n // 将当前的reaction添加到栈中, 用于后续的依赖收集\r\n ReactionStack.push(reaction);\r\n tracker();\r\n } finally {\r\n ReactionStack.pop();\r\n }\r\n }\r\n };\r\n reaction._name = name;\r\n reaction();\r\n return () => {\r\n disposeBindingReactions(reaction);\r\n };\r\n};\r\n","import { createObservable } from \"./internals\";\r\n\r\nexport function observable<T extends object>(target: T): T {\r\n return createObservable(null, null, target);\r\n}\r\n"],"names":["ProxyRaw","WeakMap","RawProxy","RawShallowProxy","ObModelSymbol","Symbol","RawNode","RawReactionMap","ReactionStack","toString","Object","prototype","isArr","Array","isArray","isFn","val","isPlainObject","call","isNormalType","target","isCollectionType","Set","Map","isMap","isWeakMap","WeakSet","isWeakSet","RAW_TYPE","OBSERVABLE_TYPE","isSupportObservable","getRaw","get","ITERATION_KEY","bindTargetKeyWithCurrentReaction","operation","key","reactionLen","length","current","addReactionsMapToReaction","addRawReactionsMap","runReactionsFromTargetKey","type","runReactions","newKey","reactions","getReactionsFromTargetKey","i","len","reaction","reactionsMap","forEach","indexOf","push","bindSet","_reactionsSet","add","set","reactionsMap_1","releaseBindingReactions","_a","delete","hasOwnProperty","baseHandlers","reciver","result","wellKnownSymbols","has","observableResult","isObservable","descriptor","getOwnPropertyDescriptor","value","configurable","createObservable","Reflect","ownKeys","hadKey","newValue","oldValue","deleteProperty","collectionHandlers","instrumentations","this","getOwnPropertyNames","reduce","act","DataNode","defineProperty","parent","path","concat","getDataNode","targetRaw","setDataNode","raw","node","shallow","parentRaw","currentNode","buildDataTree","createShallowProxy","createNormalProxy","createCollectionProxy","proxy","Proxy","tracker","name","pop","_name","disposeBindingReactions"],"mappings":"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"}