reactivity.global.js 38 KB

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