reactivity.global.js 37 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321
  1. var VueReactivity = (function (exports) {
  2. 'use strict';
  3. function makeMap(str, expectsLowerCase) {
  4. const map = /* @__PURE__ */ Object.create(null);
  5. const list = str.split(",");
  6. for (let i = 0; i < list.length; i++) {
  7. map[list[i]] = true;
  8. }
  9. return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[val];
  10. }
  11. const extend = Object.assign;
  12. const hasOwnProperty$1 = Object.prototype.hasOwnProperty;
  13. const hasOwn = (val, key) => hasOwnProperty$1.call(val, key);
  14. const isArray = Array.isArray;
  15. const isMap = (val) => toTypeString(val) === "[object Map]";
  16. const isFunction = (val) => typeof val === "function";
  17. const isString = (val) => typeof val === "string";
  18. const isSymbol = (val) => typeof val === "symbol";
  19. const isObject = (val) => val !== null && typeof val === "object";
  20. const objectToString = Object.prototype.toString;
  21. const toTypeString = (value) => objectToString.call(value);
  22. const toRawType = (value) => {
  23. return toTypeString(value).slice(8, -1);
  24. };
  25. const isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key;
  26. const cacheStringFunction = (fn) => {
  27. const cache = /* @__PURE__ */ Object.create(null);
  28. return (str) => {
  29. const hit = cache[str];
  30. return hit || (cache[str] = fn(str));
  31. };
  32. };
  33. const capitalize = cacheStringFunction(
  34. (str) => str.charAt(0).toUpperCase() + str.slice(1)
  35. );
  36. const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
  37. const def = (obj, key, value) => {
  38. Object.defineProperty(obj, key, {
  39. configurable: true,
  40. enumerable: false,
  41. value
  42. });
  43. };
  44. function warn(msg, ...args) {
  45. console.warn(`[Vue warn] ${msg}`, ...args);
  46. }
  47. let activeEffectScope;
  48. class EffectScope {
  49. constructor(detached = false) {
  50. this.detached = detached;
  51. /**
  52. * @internal
  53. */
  54. this._active = true;
  55. /**
  56. * @internal
  57. */
  58. this.effects = [];
  59. /**
  60. * @internal
  61. */
  62. this.cleanups = [];
  63. this.parent = activeEffectScope;
  64. if (!detached && activeEffectScope) {
  65. this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(
  66. this
  67. ) - 1;
  68. }
  69. }
  70. get active() {
  71. return this._active;
  72. }
  73. run(fn) {
  74. if (this._active) {
  75. const currentEffectScope = activeEffectScope;
  76. try {
  77. activeEffectScope = this;
  78. return fn();
  79. } finally {
  80. activeEffectScope = currentEffectScope;
  81. }
  82. } else {
  83. warn(`cannot run an inactive effect scope.`);
  84. }
  85. }
  86. /**
  87. * This should only be called on non-detached scopes
  88. * @internal
  89. */
  90. on() {
  91. activeEffectScope = this;
  92. }
  93. /**
  94. * This should only be called on non-detached scopes
  95. * @internal
  96. */
  97. off() {
  98. activeEffectScope = this.parent;
  99. }
  100. stop(fromParent) {
  101. if (this._active) {
  102. let i, l;
  103. for (i = 0, l = this.effects.length; i < l; i++) {
  104. this.effects[i].stop();
  105. }
  106. for (i = 0, l = this.cleanups.length; i < l; i++) {
  107. this.cleanups[i]();
  108. }
  109. if (this.scopes) {
  110. for (i = 0, l = this.scopes.length; i < l; i++) {
  111. this.scopes[i].stop(true);
  112. }
  113. }
  114. if (!this.detached && this.parent && !fromParent) {
  115. const last = this.parent.scopes.pop();
  116. if (last && last !== this) {
  117. this.parent.scopes[this.index] = last;
  118. last.index = this.index;
  119. }
  120. }
  121. this.parent = void 0;
  122. this._active = false;
  123. }
  124. }
  125. }
  126. function effectScope(detached) {
  127. return new EffectScope(detached);
  128. }
  129. function recordEffectScope(effect, scope = activeEffectScope) {
  130. if (scope && scope.active) {
  131. scope.effects.push(effect);
  132. }
  133. }
  134. function getCurrentScope() {
  135. return activeEffectScope;
  136. }
  137. function onScopeDispose(fn) {
  138. if (activeEffectScope) {
  139. activeEffectScope.cleanups.push(fn);
  140. } else {
  141. warn(
  142. `onScopeDispose() is called when there is no active effect scope to be associated with.`
  143. );
  144. }
  145. }
  146. const createDep = (effects) => {
  147. const dep = new Set(effects);
  148. dep.w = 0;
  149. dep.n = 0;
  150. return dep;
  151. };
  152. const wasTracked = (dep) => (dep.w & trackOpBit) > 0;
  153. const newTracked = (dep) => (dep.n & trackOpBit) > 0;
  154. const initDepMarkers = ({ deps }) => {
  155. if (deps.length) {
  156. for (let i = 0; i < deps.length; i++) {
  157. deps[i].w |= trackOpBit;
  158. }
  159. }
  160. };
  161. const finalizeDepMarkers = (effect) => {
  162. const { deps } = effect;
  163. if (deps.length) {
  164. let ptr = 0;
  165. for (let i = 0; i < deps.length; i++) {
  166. const dep = deps[i];
  167. if (wasTracked(dep) && !newTracked(dep)) {
  168. dep.delete(effect);
  169. } else {
  170. deps[ptr++] = dep;
  171. }
  172. dep.w &= ~trackOpBit;
  173. dep.n &= ~trackOpBit;
  174. }
  175. deps.length = ptr;
  176. }
  177. };
  178. const targetMap = /* @__PURE__ */ new WeakMap();
  179. let effectTrackDepth = 0;
  180. let trackOpBit = 1;
  181. const maxMarkerBits = 30;
  182. let activeEffect;
  183. const ITERATE_KEY = Symbol("iterate" );
  184. const MAP_KEY_ITERATE_KEY = Symbol("Map key iterate" );
  185. class ReactiveEffect {
  186. constructor(fn, scheduler = null, scope) {
  187. this.fn = fn;
  188. this.scheduler = scheduler;
  189. this.active = true;
  190. this.deps = [];
  191. this.parent = void 0;
  192. recordEffectScope(this, scope);
  193. }
  194. run() {
  195. if (!this.active) {
  196. return this.fn();
  197. }
  198. let parent = activeEffect;
  199. let lastShouldTrack = shouldTrack;
  200. while (parent) {
  201. if (parent === this) {
  202. return;
  203. }
  204. parent = parent.parent;
  205. }
  206. try {
  207. this.parent = activeEffect;
  208. activeEffect = this;
  209. shouldTrack = true;
  210. trackOpBit = 1 << ++effectTrackDepth;
  211. if (effectTrackDepth <= maxMarkerBits) {
  212. initDepMarkers(this);
  213. } else {
  214. cleanupEffect(this);
  215. }
  216. return this.fn();
  217. } finally {
  218. if (effectTrackDepth <= maxMarkerBits) {
  219. finalizeDepMarkers(this);
  220. }
  221. trackOpBit = 1 << --effectTrackDepth;
  222. activeEffect = this.parent;
  223. shouldTrack = lastShouldTrack;
  224. this.parent = void 0;
  225. if (this.deferStop) {
  226. this.stop();
  227. }
  228. }
  229. }
  230. stop() {
  231. if (activeEffect === this) {
  232. this.deferStop = true;
  233. } else if (this.active) {
  234. cleanupEffect(this);
  235. if (this.onStop) {
  236. this.onStop();
  237. }
  238. this.active = false;
  239. }
  240. }
  241. }
  242. function cleanupEffect(effect2) {
  243. const { deps } = effect2;
  244. if (deps.length) {
  245. for (let i = 0; i < deps.length; i++) {
  246. deps[i].delete(effect2);
  247. }
  248. deps.length = 0;
  249. }
  250. }
  251. function effect(fn, options) {
  252. if (fn.effect) {
  253. fn = fn.effect.fn;
  254. }
  255. const _effect = new ReactiveEffect(fn);
  256. if (options) {
  257. extend(_effect, options);
  258. if (options.scope)
  259. recordEffectScope(_effect, options.scope);
  260. }
  261. if (!options || !options.lazy) {
  262. _effect.run();
  263. }
  264. const runner = _effect.run.bind(_effect);
  265. runner.effect = _effect;
  266. return runner;
  267. }
  268. function stop(runner) {
  269. runner.effect.stop();
  270. }
  271. let shouldTrack = true;
  272. const trackStack = [];
  273. function pauseTracking() {
  274. trackStack.push(shouldTrack);
  275. shouldTrack = false;
  276. }
  277. function enableTracking() {
  278. trackStack.push(shouldTrack);
  279. shouldTrack = true;
  280. }
  281. function resetTracking() {
  282. const last = trackStack.pop();
  283. shouldTrack = last === void 0 ? true : last;
  284. }
  285. function track(target, type, key) {
  286. if (shouldTrack && activeEffect) {
  287. let depsMap = targetMap.get(target);
  288. if (!depsMap) {
  289. targetMap.set(target, depsMap = /* @__PURE__ */ new Map());
  290. }
  291. let dep = depsMap.get(key);
  292. if (!dep) {
  293. depsMap.set(key, dep = createDep());
  294. }
  295. const eventInfo = { effect: activeEffect, target, type, key } ;
  296. trackEffects(dep, eventInfo);
  297. }
  298. }
  299. function trackEffects(dep, debuggerEventExtraInfo) {
  300. let shouldTrack2 = false;
  301. if (effectTrackDepth <= maxMarkerBits) {
  302. if (!newTracked(dep)) {
  303. dep.n |= trackOpBit;
  304. shouldTrack2 = !wasTracked(dep);
  305. }
  306. } else {
  307. shouldTrack2 = !dep.has(activeEffect);
  308. }
  309. if (shouldTrack2) {
  310. dep.add(activeEffect);
  311. activeEffect.deps.push(dep);
  312. if (activeEffect.onTrack) {
  313. activeEffect.onTrack(
  314. extend(
  315. {
  316. effect: activeEffect
  317. },
  318. debuggerEventExtraInfo
  319. )
  320. );
  321. }
  322. }
  323. }
  324. function trigger(target, type, key, newValue, oldValue, oldTarget) {
  325. const depsMap = targetMap.get(target);
  326. if (!depsMap) {
  327. return;
  328. }
  329. let deps = [];
  330. if (type === "clear") {
  331. deps = [...depsMap.values()];
  332. } else if (key === "length" && isArray(target)) {
  333. const newLength = Number(newValue);
  334. depsMap.forEach((dep, key2) => {
  335. if (key2 === "length" || key2 >= newLength) {
  336. deps.push(dep);
  337. }
  338. });
  339. } else {
  340. if (key !== void 0) {
  341. deps.push(depsMap.get(key));
  342. }
  343. switch (type) {
  344. case "add":
  345. if (!isArray(target)) {
  346. deps.push(depsMap.get(ITERATE_KEY));
  347. if (isMap(target)) {
  348. deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
  349. }
  350. } else if (isIntegerKey(key)) {
  351. deps.push(depsMap.get("length"));
  352. }
  353. break;
  354. case "delete":
  355. if (!isArray(target)) {
  356. deps.push(depsMap.get(ITERATE_KEY));
  357. if (isMap(target)) {
  358. deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
  359. }
  360. }
  361. break;
  362. case "set":
  363. if (isMap(target)) {
  364. deps.push(depsMap.get(ITERATE_KEY));
  365. }
  366. break;
  367. }
  368. }
  369. const eventInfo = { target, type, key, newValue, oldValue, oldTarget } ;
  370. if (deps.length === 1) {
  371. if (deps[0]) {
  372. {
  373. triggerEffects(deps[0], eventInfo);
  374. }
  375. }
  376. } else {
  377. const effects = [];
  378. for (const dep of deps) {
  379. if (dep) {
  380. effects.push(...dep);
  381. }
  382. }
  383. {
  384. triggerEffects(createDep(effects), eventInfo);
  385. }
  386. }
  387. }
  388. function triggerEffects(dep, debuggerEventExtraInfo) {
  389. const effects = isArray(dep) ? dep : [...dep];
  390. for (const effect2 of effects) {
  391. if (effect2.computed) {
  392. triggerEffect(effect2, debuggerEventExtraInfo);
  393. }
  394. }
  395. for (const effect2 of effects) {
  396. if (!effect2.computed) {
  397. triggerEffect(effect2, debuggerEventExtraInfo);
  398. }
  399. }
  400. }
  401. function triggerEffect(effect2, debuggerEventExtraInfo) {
  402. if (effect2 !== activeEffect || effect2.allowRecurse) {
  403. if (effect2.onTrigger) {
  404. effect2.onTrigger(extend({ effect: effect2 }, debuggerEventExtraInfo));
  405. }
  406. if (effect2.scheduler) {
  407. effect2.scheduler();
  408. } else {
  409. effect2.run();
  410. }
  411. }
  412. }
  413. function getDepFromReactive(object, key) {
  414. var _a;
  415. return (_a = targetMap.get(object)) == null ? void 0 : _a.get(key);
  416. }
  417. const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);
  418. const builtInSymbols = new Set(
  419. /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol)
  420. );
  421. const get$1 = /* @__PURE__ */ createGetter();
  422. const shallowGet = /* @__PURE__ */ createGetter(false, true);
  423. const readonlyGet = /* @__PURE__ */ createGetter(true);
  424. const shallowReadonlyGet = /* @__PURE__ */ createGetter(true, true);
  425. const arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();
  426. function createArrayInstrumentations() {
  427. const instrumentations = {};
  428. ["includes", "indexOf", "lastIndexOf"].forEach((key) => {
  429. instrumentations[key] = function(...args) {
  430. const arr = toRaw(this);
  431. for (let i = 0, l = this.length; i < l; i++) {
  432. track(arr, "get", i + "");
  433. }
  434. const res = arr[key](...args);
  435. if (res === -1 || res === false) {
  436. return arr[key](...args.map(toRaw));
  437. } else {
  438. return res;
  439. }
  440. };
  441. });
  442. ["push", "pop", "shift", "unshift", "splice"].forEach((key) => {
  443. instrumentations[key] = function(...args) {
  444. pauseTracking();
  445. const res = toRaw(this)[key].apply(this, args);
  446. resetTracking();
  447. return res;
  448. };
  449. });
  450. return instrumentations;
  451. }
  452. function hasOwnProperty(key) {
  453. const obj = toRaw(this);
  454. track(obj, "has", key);
  455. return obj.hasOwnProperty(key);
  456. }
  457. function createGetter(isReadonly2 = false, shallow = false) {
  458. return function get2(target, key, receiver) {
  459. if (key === "__v_isReactive") {
  460. return !isReadonly2;
  461. } else if (key === "__v_isReadonly") {
  462. return isReadonly2;
  463. } else if (key === "__v_isShallow") {
  464. return shallow;
  465. } else if (key === "__v_raw" && receiver === (isReadonly2 ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) {
  466. return target;
  467. }
  468. const targetIsArray = isArray(target);
  469. if (!isReadonly2) {
  470. if (targetIsArray && hasOwn(arrayInstrumentations, key)) {
  471. return Reflect.get(arrayInstrumentations, key, receiver);
  472. }
  473. if (key === "hasOwnProperty") {
  474. return hasOwnProperty;
  475. }
  476. }
  477. const res = Reflect.get(target, key, receiver);
  478. if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
  479. return res;
  480. }
  481. if (!isReadonly2) {
  482. track(target, "get", key);
  483. }
  484. if (shallow) {
  485. return res;
  486. }
  487. if (isRef(res)) {
  488. return targetIsArray && isIntegerKey(key) ? res : res.value;
  489. }
  490. if (isObject(res)) {
  491. return isReadonly2 ? readonly(res) : reactive(res);
  492. }
  493. return res;
  494. };
  495. }
  496. const set$1 = /* @__PURE__ */ createSetter();
  497. const shallowSet = /* @__PURE__ */ createSetter(true);
  498. function createSetter(shallow = false) {
  499. return function set2(target, key, value, receiver) {
  500. let oldValue = target[key];
  501. if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {
  502. return false;
  503. }
  504. if (!shallow) {
  505. if (!isShallow(value) && !isReadonly(value)) {
  506. oldValue = toRaw(oldValue);
  507. value = toRaw(value);
  508. }
  509. if (!isArray(target) && isRef(oldValue) && !isRef(value)) {
  510. oldValue.value = value;
  511. return true;
  512. }
  513. }
  514. const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);
  515. const result = Reflect.set(target, key, value, receiver);
  516. if (target === toRaw(receiver)) {
  517. if (!hadKey) {
  518. trigger(target, "add", key, value);
  519. } else if (hasChanged(value, oldValue)) {
  520. trigger(target, "set", key, value, oldValue);
  521. }
  522. }
  523. return result;
  524. };
  525. }
  526. function deleteProperty(target, key) {
  527. const hadKey = hasOwn(target, key);
  528. const oldValue = target[key];
  529. const result = Reflect.deleteProperty(target, key);
  530. if (result && hadKey) {
  531. trigger(target, "delete", key, void 0, oldValue);
  532. }
  533. return result;
  534. }
  535. function has$1(target, key) {
  536. const result = Reflect.has(target, key);
  537. if (!isSymbol(key) || !builtInSymbols.has(key)) {
  538. track(target, "has", key);
  539. }
  540. return result;
  541. }
  542. function ownKeys(target) {
  543. track(target, "iterate", isArray(target) ? "length" : ITERATE_KEY);
  544. return Reflect.ownKeys(target);
  545. }
  546. const mutableHandlers = {
  547. get: get$1,
  548. set: set$1,
  549. deleteProperty,
  550. has: has$1,
  551. ownKeys
  552. };
  553. const readonlyHandlers = {
  554. get: readonlyGet,
  555. set(target, key) {
  556. {
  557. warn(
  558. `Set operation on key "${String(key)}" failed: target is readonly.`,
  559. target
  560. );
  561. }
  562. return true;
  563. },
  564. deleteProperty(target, key) {
  565. {
  566. warn(
  567. `Delete operation on key "${String(key)}" failed: target is readonly.`,
  568. target
  569. );
  570. }
  571. return true;
  572. }
  573. };
  574. const shallowReactiveHandlers = /* @__PURE__ */ extend(
  575. {},
  576. mutableHandlers,
  577. {
  578. get: shallowGet,
  579. set: shallowSet
  580. }
  581. );
  582. const shallowReadonlyHandlers = /* @__PURE__ */ extend(
  583. {},
  584. readonlyHandlers,
  585. {
  586. get: shallowReadonlyGet
  587. }
  588. );
  589. const toShallow = (value) => value;
  590. const getProto = (v) => Reflect.getPrototypeOf(v);
  591. function get(target, key, isReadonly = false, isShallow = false) {
  592. target = target["__v_raw"];
  593. const rawTarget = toRaw(target);
  594. const rawKey = toRaw(key);
  595. if (!isReadonly) {
  596. if (key !== rawKey) {
  597. track(rawTarget, "get", key);
  598. }
  599. track(rawTarget, "get", rawKey);
  600. }
  601. const { has: has2 } = getProto(rawTarget);
  602. const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
  603. if (has2.call(rawTarget, key)) {
  604. return wrap(target.get(key));
  605. } else if (has2.call(rawTarget, rawKey)) {
  606. return wrap(target.get(rawKey));
  607. } else if (target !== rawTarget) {
  608. target.get(key);
  609. }
  610. }
  611. function has(key, isReadonly = false) {
  612. const target = this["__v_raw"];
  613. const rawTarget = toRaw(target);
  614. const rawKey = toRaw(key);
  615. if (!isReadonly) {
  616. if (key !== rawKey) {
  617. track(rawTarget, "has", key);
  618. }
  619. track(rawTarget, "has", rawKey);
  620. }
  621. return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);
  622. }
  623. function size(target, isReadonly = false) {
  624. target = target["__v_raw"];
  625. !isReadonly && track(toRaw(target), "iterate", ITERATE_KEY);
  626. return Reflect.get(target, "size", target);
  627. }
  628. function add(value) {
  629. value = toRaw(value);
  630. const target = toRaw(this);
  631. const proto = getProto(target);
  632. const hadKey = proto.has.call(target, value);
  633. if (!hadKey) {
  634. target.add(value);
  635. trigger(target, "add", value, value);
  636. }
  637. return this;
  638. }
  639. function set(key, value) {
  640. value = toRaw(value);
  641. const target = toRaw(this);
  642. const { has: has2, get: get2 } = getProto(target);
  643. let hadKey = has2.call(target, key);
  644. if (!hadKey) {
  645. key = toRaw(key);
  646. hadKey = has2.call(target, key);
  647. } else {
  648. checkIdentityKeys(target, has2, key);
  649. }
  650. const oldValue = get2.call(target, key);
  651. target.set(key, value);
  652. if (!hadKey) {
  653. trigger(target, "add", key, value);
  654. } else if (hasChanged(value, oldValue)) {
  655. trigger(target, "set", key, value, oldValue);
  656. }
  657. return this;
  658. }
  659. function deleteEntry(key) {
  660. const target = toRaw(this);
  661. const { has: has2, get: get2 } = getProto(target);
  662. let hadKey = has2.call(target, key);
  663. if (!hadKey) {
  664. key = toRaw(key);
  665. hadKey = has2.call(target, key);
  666. } else {
  667. checkIdentityKeys(target, has2, key);
  668. }
  669. const oldValue = get2 ? get2.call(target, key) : void 0;
  670. const result = target.delete(key);
  671. if (hadKey) {
  672. trigger(target, "delete", key, void 0, oldValue);
  673. }
  674. return result;
  675. }
  676. function clear() {
  677. const target = toRaw(this);
  678. const hadItems = target.size !== 0;
  679. const oldTarget = isMap(target) ? new Map(target) : new Set(target) ;
  680. const result = target.clear();
  681. if (hadItems) {
  682. trigger(target, "clear", void 0, void 0, oldTarget);
  683. }
  684. return result;
  685. }
  686. function createForEach(isReadonly, isShallow) {
  687. return function forEach(callback, thisArg) {
  688. const observed = this;
  689. const target = observed["__v_raw"];
  690. const rawTarget = toRaw(target);
  691. const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
  692. !isReadonly && track(rawTarget, "iterate", ITERATE_KEY);
  693. return target.forEach((value, key) => {
  694. return callback.call(thisArg, wrap(value), wrap(key), observed);
  695. });
  696. };
  697. }
  698. function createIterableMethod(method, isReadonly, isShallow) {
  699. return function(...args) {
  700. const target = this["__v_raw"];
  701. const rawTarget = toRaw(target);
  702. const targetIsMap = isMap(rawTarget);
  703. const isPair = method === "entries" || method === Symbol.iterator && targetIsMap;
  704. const isKeyOnly = method === "keys" && targetIsMap;
  705. const innerIterator = target[method](...args);
  706. const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
  707. !isReadonly && track(
  708. rawTarget,
  709. "iterate",
  710. isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY
  711. );
  712. return {
  713. // iterator protocol
  714. next() {
  715. const { value, done } = innerIterator.next();
  716. return done ? { value, done } : {
  717. value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),
  718. done
  719. };
  720. },
  721. // iterable protocol
  722. [Symbol.iterator]() {
  723. return this;
  724. }
  725. };
  726. };
  727. }
  728. function createReadonlyMethod(type) {
  729. return function(...args) {
  730. {
  731. const key = args[0] ? `on key "${args[0]}" ` : ``;
  732. console.warn(
  733. `${capitalize(type)} operation ${key}failed: target is readonly.`,
  734. toRaw(this)
  735. );
  736. }
  737. return type === "delete" ? false : this;
  738. };
  739. }
  740. function createInstrumentations() {
  741. const mutableInstrumentations2 = {
  742. get(key) {
  743. return get(this, key);
  744. },
  745. get size() {
  746. return size(this);
  747. },
  748. has,
  749. add,
  750. set,
  751. delete: deleteEntry,
  752. clear,
  753. forEach: createForEach(false, false)
  754. };
  755. const shallowInstrumentations2 = {
  756. get(key) {
  757. return get(this, key, false, true);
  758. },
  759. get size() {
  760. return size(this);
  761. },
  762. has,
  763. add,
  764. set,
  765. delete: deleteEntry,
  766. clear,
  767. forEach: createForEach(false, true)
  768. };
  769. const readonlyInstrumentations2 = {
  770. get(key) {
  771. return get(this, key, true);
  772. },
  773. get size() {
  774. return size(this, true);
  775. },
  776. has(key) {
  777. return has.call(this, key, true);
  778. },
  779. add: createReadonlyMethod("add"),
  780. set: createReadonlyMethod("set"),
  781. delete: createReadonlyMethod("delete"),
  782. clear: createReadonlyMethod("clear"),
  783. forEach: createForEach(true, false)
  784. };
  785. const shallowReadonlyInstrumentations2 = {
  786. get(key) {
  787. return get(this, key, true, true);
  788. },
  789. get size() {
  790. return size(this, true);
  791. },
  792. has(key) {
  793. return has.call(this, key, true);
  794. },
  795. add: createReadonlyMethod("add"),
  796. set: createReadonlyMethod("set"),
  797. delete: createReadonlyMethod("delete"),
  798. clear: createReadonlyMethod("clear"),
  799. forEach: createForEach(true, true)
  800. };
  801. const iteratorMethods = ["keys", "values", "entries", Symbol.iterator];
  802. iteratorMethods.forEach((method) => {
  803. mutableInstrumentations2[method] = createIterableMethod(
  804. method,
  805. false,
  806. false
  807. );
  808. readonlyInstrumentations2[method] = createIterableMethod(
  809. method,
  810. true,
  811. false
  812. );
  813. shallowInstrumentations2[method] = createIterableMethod(
  814. method,
  815. false,
  816. true
  817. );
  818. shallowReadonlyInstrumentations2[method] = createIterableMethod(
  819. method,
  820. true,
  821. true
  822. );
  823. });
  824. return [
  825. mutableInstrumentations2,
  826. readonlyInstrumentations2,
  827. shallowInstrumentations2,
  828. shallowReadonlyInstrumentations2
  829. ];
  830. }
  831. const [
  832. mutableInstrumentations,
  833. readonlyInstrumentations,
  834. shallowInstrumentations,
  835. shallowReadonlyInstrumentations
  836. ] = /* @__PURE__ */ createInstrumentations();
  837. function createInstrumentationGetter(isReadonly, shallow) {
  838. const instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations;
  839. return (target, key, receiver) => {
  840. if (key === "__v_isReactive") {
  841. return !isReadonly;
  842. } else if (key === "__v_isReadonly") {
  843. return isReadonly;
  844. } else if (key === "__v_raw") {
  845. return target;
  846. }
  847. return Reflect.get(
  848. hasOwn(instrumentations, key) && key in target ? instrumentations : target,
  849. key,
  850. receiver
  851. );
  852. };
  853. }
  854. const mutableCollectionHandlers = {
  855. get: /* @__PURE__ */ createInstrumentationGetter(false, false)
  856. };
  857. const shallowCollectionHandlers = {
  858. get: /* @__PURE__ */ createInstrumentationGetter(false, true)
  859. };
  860. const readonlyCollectionHandlers = {
  861. get: /* @__PURE__ */ createInstrumentationGetter(true, false)
  862. };
  863. const shallowReadonlyCollectionHandlers = {
  864. get: /* @__PURE__ */ createInstrumentationGetter(true, true)
  865. };
  866. function checkIdentityKeys(target, has2, key) {
  867. const rawKey = toRaw(key);
  868. if (rawKey !== key && has2.call(target, rawKey)) {
  869. const type = toRawType(target);
  870. console.warn(
  871. `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`
  872. );
  873. }
  874. }
  875. const reactiveMap = /* @__PURE__ */ new WeakMap();
  876. const shallowReactiveMap = /* @__PURE__ */ new WeakMap();
  877. const readonlyMap = /* @__PURE__ */ new WeakMap();
  878. const shallowReadonlyMap = /* @__PURE__ */ new WeakMap();
  879. function targetTypeMap(rawType) {
  880. switch (rawType) {
  881. case "Object":
  882. case "Array":
  883. return 1 /* COMMON */;
  884. case "Map":
  885. case "Set":
  886. case "WeakMap":
  887. case "WeakSet":
  888. return 2 /* COLLECTION */;
  889. default:
  890. return 0 /* INVALID */;
  891. }
  892. }
  893. function getTargetType(value) {
  894. return value["__v_skip"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));
  895. }
  896. function reactive(target) {
  897. if (isReadonly(target)) {
  898. return target;
  899. }
  900. return createReactiveObject(
  901. target,
  902. false,
  903. mutableHandlers,
  904. mutableCollectionHandlers,
  905. reactiveMap
  906. );
  907. }
  908. function shallowReactive(target) {
  909. return createReactiveObject(
  910. target,
  911. false,
  912. shallowReactiveHandlers,
  913. shallowCollectionHandlers,
  914. shallowReactiveMap
  915. );
  916. }
  917. function readonly(target) {
  918. return createReactiveObject(
  919. target,
  920. true,
  921. readonlyHandlers,
  922. readonlyCollectionHandlers,
  923. readonlyMap
  924. );
  925. }
  926. function shallowReadonly(target) {
  927. return createReactiveObject(
  928. target,
  929. true,
  930. shallowReadonlyHandlers,
  931. shallowReadonlyCollectionHandlers,
  932. shallowReadonlyMap
  933. );
  934. }
  935. function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {
  936. if (!isObject(target)) {
  937. {
  938. console.warn(`value cannot be made reactive: ${String(target)}`);
  939. }
  940. return target;
  941. }
  942. if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) {
  943. return target;
  944. }
  945. const existingProxy = proxyMap.get(target);
  946. if (existingProxy) {
  947. return existingProxy;
  948. }
  949. const targetType = getTargetType(target);
  950. if (targetType === 0 /* INVALID */) {
  951. return target;
  952. }
  953. const proxy = new Proxy(
  954. target,
  955. targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers
  956. );
  957. proxyMap.set(target, proxy);
  958. return proxy;
  959. }
  960. function isReactive(value) {
  961. if (isReadonly(value)) {
  962. return isReactive(value["__v_raw"]);
  963. }
  964. return !!(value && value["__v_isReactive"]);
  965. }
  966. function isReadonly(value) {
  967. return !!(value && value["__v_isReadonly"]);
  968. }
  969. function isShallow(value) {
  970. return !!(value && value["__v_isShallow"]);
  971. }
  972. function isProxy(value) {
  973. return isReactive(value) || isReadonly(value);
  974. }
  975. function toRaw(observed) {
  976. const raw = observed && observed["__v_raw"];
  977. return raw ? toRaw(raw) : observed;
  978. }
  979. function markRaw(value) {
  980. def(value, "__v_skip", true);
  981. return value;
  982. }
  983. const toReactive = (value) => isObject(value) ? reactive(value) : value;
  984. const toReadonly = (value) => isObject(value) ? readonly(value) : value;
  985. function trackRefValue(ref2) {
  986. if (shouldTrack && activeEffect) {
  987. ref2 = toRaw(ref2);
  988. {
  989. trackEffects(ref2.dep || (ref2.dep = createDep()), {
  990. target: ref2,
  991. type: "get",
  992. key: "value"
  993. });
  994. }
  995. }
  996. }
  997. function triggerRefValue(ref2, newVal) {
  998. ref2 = toRaw(ref2);
  999. const dep = ref2.dep;
  1000. if (dep) {
  1001. {
  1002. triggerEffects(dep, {
  1003. target: ref2,
  1004. type: "set",
  1005. key: "value",
  1006. newValue: newVal
  1007. });
  1008. }
  1009. }
  1010. }
  1011. function isRef(r) {
  1012. return !!(r && r.__v_isRef === true);
  1013. }
  1014. function ref(value) {
  1015. return createRef(value, false);
  1016. }
  1017. function shallowRef(value) {
  1018. return createRef(value, true);
  1019. }
  1020. function createRef(rawValue, shallow) {
  1021. if (isRef(rawValue)) {
  1022. return rawValue;
  1023. }
  1024. return new RefImpl(rawValue, shallow);
  1025. }
  1026. class RefImpl {
  1027. constructor(value, __v_isShallow) {
  1028. this.__v_isShallow = __v_isShallow;
  1029. this.dep = void 0;
  1030. this.__v_isRef = true;
  1031. this._rawValue = __v_isShallow ? value : toRaw(value);
  1032. this._value = __v_isShallow ? value : toReactive(value);
  1033. }
  1034. get value() {
  1035. trackRefValue(this);
  1036. return this._value;
  1037. }
  1038. set value(newVal) {
  1039. const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);
  1040. newVal = useDirectValue ? newVal : toRaw(newVal);
  1041. if (hasChanged(newVal, this._rawValue)) {
  1042. this._rawValue = newVal;
  1043. this._value = useDirectValue ? newVal : toReactive(newVal);
  1044. triggerRefValue(this, newVal);
  1045. }
  1046. }
  1047. }
  1048. function triggerRef(ref2) {
  1049. triggerRefValue(ref2, ref2.value );
  1050. }
  1051. function unref(ref2) {
  1052. return isRef(ref2) ? ref2.value : ref2;
  1053. }
  1054. function toValue(source) {
  1055. return isFunction(source) ? source() : unref(source);
  1056. }
  1057. const shallowUnwrapHandlers = {
  1058. get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
  1059. set: (target, key, value, receiver) => {
  1060. const oldValue = target[key];
  1061. if (isRef(oldValue) && !isRef(value)) {
  1062. oldValue.value = value;
  1063. return true;
  1064. } else {
  1065. return Reflect.set(target, key, value, receiver);
  1066. }
  1067. }
  1068. };
  1069. function proxyRefs(objectWithRefs) {
  1070. return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);
  1071. }
  1072. class CustomRefImpl {
  1073. constructor(factory) {
  1074. this.dep = void 0;
  1075. this.__v_isRef = true;
  1076. const { get, set } = factory(
  1077. () => trackRefValue(this),
  1078. () => triggerRefValue(this)
  1079. );
  1080. this._get = get;
  1081. this._set = set;
  1082. }
  1083. get value() {
  1084. return this._get();
  1085. }
  1086. set value(newVal) {
  1087. this._set(newVal);
  1088. }
  1089. }
  1090. function customRef(factory) {
  1091. return new CustomRefImpl(factory);
  1092. }
  1093. function toRefs(object) {
  1094. if (!isProxy(object)) {
  1095. console.warn(`toRefs() expects a reactive object but received a plain one.`);
  1096. }
  1097. const ret = isArray(object) ? new Array(object.length) : {};
  1098. for (const key in object) {
  1099. ret[key] = propertyToRef(object, key);
  1100. }
  1101. return ret;
  1102. }
  1103. class ObjectRefImpl {
  1104. constructor(_object, _key, _defaultValue) {
  1105. this._object = _object;
  1106. this._key = _key;
  1107. this._defaultValue = _defaultValue;
  1108. this.__v_isRef = true;
  1109. }
  1110. get value() {
  1111. const val = this._object[this._key];
  1112. return val === void 0 ? this._defaultValue : val;
  1113. }
  1114. set value(newVal) {
  1115. this._object[this._key] = newVal;
  1116. }
  1117. get dep() {
  1118. return getDepFromReactive(toRaw(this._object), this._key);
  1119. }
  1120. }
  1121. class GetterRefImpl {
  1122. constructor(_getter) {
  1123. this._getter = _getter;
  1124. this.__v_isRef = true;
  1125. this.__v_isReadonly = true;
  1126. }
  1127. get value() {
  1128. return this._getter();
  1129. }
  1130. }
  1131. function toRef(source, key, defaultValue) {
  1132. if (isRef(source)) {
  1133. return source;
  1134. } else if (isFunction(source)) {
  1135. return new GetterRefImpl(source);
  1136. } else if (isObject(source) && arguments.length > 1) {
  1137. return propertyToRef(source, key, defaultValue);
  1138. } else {
  1139. return ref(source);
  1140. }
  1141. }
  1142. function propertyToRef(source, key, defaultValue) {
  1143. const val = source[key];
  1144. return isRef(val) ? val : new ObjectRefImpl(
  1145. source,
  1146. key,
  1147. defaultValue
  1148. );
  1149. }
  1150. class ComputedRefImpl {
  1151. constructor(getter, _setter, isReadonly, isSSR) {
  1152. this._setter = _setter;
  1153. this.dep = void 0;
  1154. this.__v_isRef = true;
  1155. this["__v_isReadonly"] = false;
  1156. this._dirty = true;
  1157. this.effect = new ReactiveEffect(getter, () => {
  1158. if (!this._dirty) {
  1159. this._dirty = true;
  1160. triggerRefValue(this);
  1161. }
  1162. });
  1163. this.effect.computed = this;
  1164. this.effect.active = this._cacheable = !isSSR;
  1165. this["__v_isReadonly"] = isReadonly;
  1166. }
  1167. get value() {
  1168. const self = toRaw(this);
  1169. trackRefValue(self);
  1170. if (self._dirty || !self._cacheable) {
  1171. self._dirty = false;
  1172. self._value = self.effect.run();
  1173. }
  1174. return self._value;
  1175. }
  1176. set value(newValue) {
  1177. this._setter(newValue);
  1178. }
  1179. }
  1180. function computed(getterOrOptions, debugOptions, isSSR = false) {
  1181. let getter;
  1182. let setter;
  1183. const onlyGetter = isFunction(getterOrOptions);
  1184. if (onlyGetter) {
  1185. getter = getterOrOptions;
  1186. setter = () => {
  1187. console.warn("Write operation failed: computed value is readonly");
  1188. } ;
  1189. } else {
  1190. getter = getterOrOptions.get;
  1191. setter = getterOrOptions.set;
  1192. }
  1193. const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
  1194. if (debugOptions && !isSSR) {
  1195. cRef.effect.onTrack = debugOptions.onTrack;
  1196. cRef.effect.onTrigger = debugOptions.onTrigger;
  1197. }
  1198. return cRef;
  1199. }
  1200. const tick = /* @__PURE__ */ Promise.resolve();
  1201. const queue = [];
  1202. let queued = false;
  1203. const scheduler = (fn) => {
  1204. queue.push(fn);
  1205. if (!queued) {
  1206. queued = true;
  1207. tick.then(flush);
  1208. }
  1209. };
  1210. const flush = () => {
  1211. for (let i = 0; i < queue.length; i++) {
  1212. queue[i]();
  1213. }
  1214. queue.length = 0;
  1215. queued = false;
  1216. };
  1217. class DeferredComputedRefImpl {
  1218. constructor(getter) {
  1219. this.dep = void 0;
  1220. this._dirty = true;
  1221. this.__v_isRef = true;
  1222. this["__v_isReadonly"] = true;
  1223. let compareTarget;
  1224. let hasCompareTarget = false;
  1225. let scheduled = false;
  1226. this.effect = new ReactiveEffect(getter, (computedTrigger) => {
  1227. if (this.dep) {
  1228. if (computedTrigger) {
  1229. compareTarget = this._value;
  1230. hasCompareTarget = true;
  1231. } else if (!scheduled) {
  1232. const valueToCompare = hasCompareTarget ? compareTarget : this._value;
  1233. scheduled = true;
  1234. hasCompareTarget = false;
  1235. scheduler(() => {
  1236. if (this.effect.active && this._get() !== valueToCompare) {
  1237. triggerRefValue(this);
  1238. }
  1239. scheduled = false;
  1240. });
  1241. }
  1242. for (const e of this.dep) {
  1243. if (e.computed instanceof DeferredComputedRefImpl) {
  1244. e.scheduler(
  1245. true
  1246. /* computedTrigger */
  1247. );
  1248. }
  1249. }
  1250. }
  1251. this._dirty = true;
  1252. });
  1253. this.effect.computed = this;
  1254. }
  1255. _get() {
  1256. if (this._dirty) {
  1257. this._dirty = false;
  1258. return this._value = this.effect.run();
  1259. }
  1260. return this._value;
  1261. }
  1262. get value() {
  1263. trackRefValue(this);
  1264. return toRaw(this)._get();
  1265. }
  1266. }
  1267. function deferredComputed(getter) {
  1268. return new DeferredComputedRefImpl(getter);
  1269. }
  1270. exports.EffectScope = EffectScope;
  1271. exports.ITERATE_KEY = ITERATE_KEY;
  1272. exports.ReactiveEffect = ReactiveEffect;
  1273. exports.computed = computed;
  1274. exports.customRef = customRef;
  1275. exports.deferredComputed = deferredComputed;
  1276. exports.effect = effect;
  1277. exports.effectScope = effectScope;
  1278. exports.enableTracking = enableTracking;
  1279. exports.getCurrentScope = getCurrentScope;
  1280. exports.isProxy = isProxy;
  1281. exports.isReactive = isReactive;
  1282. exports.isReadonly = isReadonly;
  1283. exports.isRef = isRef;
  1284. exports.isShallow = isShallow;
  1285. exports.markRaw = markRaw;
  1286. exports.onScopeDispose = onScopeDispose;
  1287. exports.pauseTracking = pauseTracking;
  1288. exports.proxyRefs = proxyRefs;
  1289. exports.reactive = reactive;
  1290. exports.readonly = readonly;
  1291. exports.ref = ref;
  1292. exports.resetTracking = resetTracking;
  1293. exports.shallowReactive = shallowReactive;
  1294. exports.shallowReadonly = shallowReadonly;
  1295. exports.shallowRef = shallowRef;
  1296. exports.stop = stop;
  1297. exports.toRaw = toRaw;
  1298. exports.toRef = toRef;
  1299. exports.toRefs = toRefs;
  1300. exports.toValue = toValue;
  1301. exports.track = track;
  1302. exports.trigger = trigger;
  1303. exports.triggerRef = triggerRef;
  1304. exports.unref = unref;
  1305. return exports;
  1306. })({});