From cbb5da9cd6e51f6a63ef3ecba33222c71ca8e567 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=95=B7=EF=B8=8F?= <3756473+zendive@users.noreply.github.com> Date: Fri, 14 Jul 2023 01:34:43 +0300 Subject: [PATCH 01/14] wip --- .prettierignore | 2 +- .vscode/extensions.json | 3 + {src => bundle}/img/panel-icon128.png | Bin {src => bundle}/img/panel-icon28.png | Bin {src => bundle}/img/panel-icon64.png | Bin bundle/js/jsdiff-console.js | 34 + bundle/js/jsdiff-devtools.js | 144 + bundle/js/jsdiff-panel.js | 18034 +++++++++++++++++++++++ bundle/js/jsdiff-proxy.js | 29 + {src => bundle}/jsdiff-devtools.html | 2 +- {src => bundle}/jsdiff-panel.html | 2 +- manifest.json | 25 +- package.json | 2 +- src/@types/index.d.ts | 35 + src/api/clone.ts | 0 src/api/console.ts | 109 + src/{js/view => }/api/formatter-dom.ts | 0 src/{js/view => }/api/search.ts | 7 - src/{js/view => }/api/time.ts | 0 src/{js/view => }/api/toolkit.ts | 0 src/js/bundle/jsdiff-panel.js | 1 - src/js/jsdiff-devtools.js | 188 - src/js/jsdiff-proxy.js | 14 - src/jsdiff-console.ts | 26 + src/jsdiff-devtools.ts | 129 + src/jsdiff-proxy.ts | 21 + src/{js => }/view/app.js | 2 +- src/{js => }/view/panel.vue | 39 +- tsconfig.json | 10 +- webpack.config.js | 11 +- 30 files changed, 18628 insertions(+), 241 deletions(-) create mode 100644 .vscode/extensions.json rename {src => bundle}/img/panel-icon128.png (100%) rename {src => bundle}/img/panel-icon28.png (100%) rename {src => bundle}/img/panel-icon64.png (100%) create mode 100644 bundle/js/jsdiff-console.js create mode 100644 bundle/js/jsdiff-devtools.js create mode 100644 bundle/js/jsdiff-panel.js create mode 100644 bundle/js/jsdiff-proxy.js rename {src => bundle}/jsdiff-devtools.html (63%) rename {src => bundle}/jsdiff-panel.html (68%) create mode 100644 src/@types/index.d.ts create mode 100644 src/api/clone.ts create mode 100644 src/api/console.ts rename src/{js/view => }/api/formatter-dom.ts (100%) rename src/{js/view => }/api/search.ts (95%) rename src/{js/view => }/api/time.ts (100%) rename src/{js/view => }/api/toolkit.ts (100%) delete mode 100644 src/js/bundle/jsdiff-panel.js delete mode 100644 src/js/jsdiff-devtools.js delete mode 100644 src/js/jsdiff-proxy.js create mode 100644 src/jsdiff-console.ts create mode 100644 src/jsdiff-devtools.ts create mode 100644 src/jsdiff-proxy.ts rename src/{js => }/view/app.js (70%) rename src/{js => }/view/panel.vue (89%) diff --git a/.prettierignore b/.prettierignore index 29a9314..6cba1e3 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,3 @@ -/src/js/bundle +/bundle/js .ts-built *.min.js diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..c83e263 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["esbenp.prettier-vscode"] +} diff --git a/src/img/panel-icon128.png b/bundle/img/panel-icon128.png similarity index 100% rename from src/img/panel-icon128.png rename to bundle/img/panel-icon128.png diff --git a/src/img/panel-icon28.png b/bundle/img/panel-icon28.png similarity index 100% rename from src/img/panel-icon28.png rename to bundle/img/panel-icon28.png diff --git a/src/img/panel-icon64.png b/bundle/img/panel-icon64.png similarity index 100% rename from src/img/panel-icon64.png rename to bundle/img/panel-icon64.png diff --git a/bundle/js/jsdiff-console.js b/bundle/js/jsdiff-console.js new file mode 100644 index 0000000..334862f --- /dev/null +++ b/bundle/js/jsdiff-console.js @@ -0,0 +1,34 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +var __webpack_exports__ = {}; +/*!*******************************!*\ + !*** ./src/jsdiff-console.ts ***! + \*******************************/ + +(() => { + if ('diff' in console && typeof console.diff === 'function') { + /* already injected */ + console.log('jsdiff-console.ts', 'already here', performance.now()); + return false; + } + else { + console.log('jsdiff-console.ts', performance.now()); + } + Object.assign(console, { + diff: () => { + window.postMessage({ + source: 'jsdiff-console-to-proxy', + payload: { + left: { a: 10, b: 10, c: 30 }, + right: { a: 10, b: 20, d: 30 }, + timestamp: Date.now(), + }, + }, window.location.origin); + return Date.now(); + }, + }); +})(); + +/******/ })() +; +//# sourceMappingURL=jsdiff-console.js.map \ No newline at end of file diff --git a/bundle/js/jsdiff-devtools.js b/bundle/js/jsdiff-devtools.js new file mode 100644 index 0000000..b2ece26 --- /dev/null +++ b/bundle/js/jsdiff-devtools.js @@ -0,0 +1,144 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +/*!********************************!*\ + !*** ./src/jsdiff-devtools.ts ***! + \********************************/ +__webpack_require__.r(__webpack_exports__); +// tabId may be null if user opened the devtools of the devtools +if (chrome.devtools.inspectedWindow.tabId !== null) { + chrome.devtools.panels.create('JSDiff', '/bundle/img/panel-icon28.png', '/bundle/jsdiff-panel.html', (panel) => { + panel.onSearch.addListener(async (cmd, query) => { + await chrome.runtime.sendMessage({ + source: 'jsdiff-devtools-to-panel-search', + params: { cmd, query }, + }); + }); + }); + injectScripts(chrome.devtools.inspectedWindow.tabId); + // listen on tabs page reload + chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => { + if ('complete' === changeInfo.status) { + injectScripts(tabId); + } + }); + // track api invocation - (api can be invoked prior opening of jsdiff panel) + chrome.runtime.onMessage.addListener(async (req) => { + if ('jsdiff-proxy-to-devtools' === req.source) { + const payload = req.payload; + let { lastApiReq } = await chrome.storage.local.get(['lastApiReq']); + if (!lastApiReq) { + lastApiReq = { + left: '(empty)', + right: '(empty)', + timestamp: Date.now(), + }; + } + if (Object.getOwnPropertyDescriptor(payload, 'push')) { + lastApiReq.left = lastApiReq.right; + lastApiReq.right = payload.push; + } + else { + if (Object.getOwnPropertyDescriptor(payload, 'left')) { + lastApiReq.left = payload.left; + } + if (Object.getOwnPropertyDescriptor(payload, 'right')) { + lastApiReq.right = payload.right; + } + } + lastApiReq.timestamp = payload.timestamp; + chrome.storage.local.set({ lastApiReq: lastApiReq }); + chrome.runtime.sendMessage({ + source: 'jsdiff-devtools-to-panel-compare', + payload: lastApiReq, + }); + } + }); +} +// Inject console api and messaging proxy +// us shown at: https://developer.chrome.com/extensions/devtools#content-script-to-devtools +function injectScripts(tabId) { + // chrome.scripting + // .executeScript({ + // world: 'MAIN', + // target: { + // tabId, + // allFrames: true, + // }, + // injectImmediately: true, + // files: ['/bundle/js/jsdiff-console.js'], + // }) + // .then( + // () => { + // console.log('console injected in all frames'); + // chrome.scripting + // .executeScript({ + // target: { + // tabId, + // allFrames: true, + // }, + // injectImmediately: true, + // files: ['/bundle/js/jsdiff-proxy.js'], + // }) + // .then( + // () => { + // console.log('proxy injected in all frames'); + // }, + // (error) => { + // console.error('proxy inject failed', error); + // } + // ); + // }, + // (error) => { + // console.error('console inject failed', error); + // } + // ); + // chrome.devtools.inspectedWindow.eval( + // `;(${define_console_api.toString()})();`, + // { + // useContentScriptContext: false, // default: false + // }, + // (res, error) => { + // if (res && !error) { + // chrome.scripting + // .executeScript({ + // target: { + // tabId, + // allFrames: true, + // }, + // injectImmediately: true, + // files: ['/bundle/js/jsdiff-proxy.js'], + // }) + // .then( + // () => { + // console.log('proxy injected in all frames'); + // }, + // (error) => { + // console.error('proxy inject failed', error); + // } + // ); + // } + // } + // ); +} + + +/******/ })() +; +//# sourceMappingURL=jsdiff-devtools.js.map \ No newline at end of file diff --git a/bundle/js/jsdiff-panel.js b/bundle/js/jsdiff-panel.js new file mode 100644 index 0000000..9e6e19f --- /dev/null +++ b/bundle/js/jsdiff-panel.js @@ -0,0 +1,18034 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/.pnpm/@vue+reactivity@3.3.4/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js": +/*!**************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/@vue+reactivity@3.3.4/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js ***! + \**************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ EffectScope: () => (/* binding */ EffectScope), +/* harmony export */ ITERATE_KEY: () => (/* binding */ ITERATE_KEY), +/* harmony export */ ReactiveEffect: () => (/* binding */ ReactiveEffect), +/* harmony export */ computed: () => (/* binding */ computed), +/* harmony export */ customRef: () => (/* binding */ customRef), +/* harmony export */ deferredComputed: () => (/* binding */ deferredComputed), +/* harmony export */ effect: () => (/* binding */ effect), +/* harmony export */ effectScope: () => (/* binding */ effectScope), +/* harmony export */ enableTracking: () => (/* binding */ enableTracking), +/* harmony export */ getCurrentScope: () => (/* binding */ getCurrentScope), +/* harmony export */ isProxy: () => (/* binding */ isProxy), +/* harmony export */ isReactive: () => (/* binding */ isReactive), +/* harmony export */ isReadonly: () => (/* binding */ isReadonly), +/* harmony export */ isRef: () => (/* binding */ isRef), +/* harmony export */ isShallow: () => (/* binding */ isShallow), +/* harmony export */ markRaw: () => (/* binding */ markRaw), +/* harmony export */ onScopeDispose: () => (/* binding */ onScopeDispose), +/* harmony export */ pauseTracking: () => (/* binding */ pauseTracking), +/* harmony export */ proxyRefs: () => (/* binding */ proxyRefs), +/* harmony export */ reactive: () => (/* binding */ reactive), +/* harmony export */ readonly: () => (/* binding */ readonly), +/* harmony export */ ref: () => (/* binding */ ref), +/* harmony export */ resetTracking: () => (/* binding */ resetTracking), +/* harmony export */ shallowReactive: () => (/* binding */ shallowReactive), +/* harmony export */ shallowReadonly: () => (/* binding */ shallowReadonly), +/* harmony export */ shallowRef: () => (/* binding */ shallowRef), +/* harmony export */ stop: () => (/* binding */ stop), +/* harmony export */ toRaw: () => (/* binding */ toRaw), +/* harmony export */ toRef: () => (/* binding */ toRef), +/* harmony export */ toRefs: () => (/* binding */ toRefs), +/* harmony export */ toValue: () => (/* binding */ toValue), +/* harmony export */ track: () => (/* binding */ track), +/* harmony export */ trigger: () => (/* binding */ trigger), +/* harmony export */ triggerRef: () => (/* binding */ triggerRef), +/* harmony export */ unref: () => (/* binding */ unref) +/* harmony export */ }); +/* harmony import */ var _vue_shared__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @vue/shared */ "./node_modules/.pnpm/@vue+shared@3.3.4/node_modules/@vue/shared/dist/shared.esm-bundler.js"); + + +function warn(msg, ...args) { + console.warn(`[Vue warn] ${msg}`, ...args); +} + +let activeEffectScope; +class EffectScope { + constructor(detached = false) { + this.detached = detached; + /** + * @internal + */ + this._active = true; + /** + * @internal + */ + this.effects = []; + /** + * @internal + */ + this.cleanups = []; + this.parent = activeEffectScope; + if (!detached && activeEffectScope) { + this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( + this + ) - 1; + } + } + get active() { + return this._active; + } + run(fn) { + if (this._active) { + const currentEffectScope = activeEffectScope; + try { + activeEffectScope = this; + return fn(); + } finally { + activeEffectScope = currentEffectScope; + } + } else if (true) { + warn(`cannot run an inactive effect scope.`); + } + } + /** + * This should only be called on non-detached scopes + * @internal + */ + on() { + activeEffectScope = this; + } + /** + * This should only be called on non-detached scopes + * @internal + */ + off() { + activeEffectScope = this.parent; + } + stop(fromParent) { + if (this._active) { + let i, l; + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].stop(); + } + for (i = 0, l = this.cleanups.length; i < l; i++) { + this.cleanups[i](); + } + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].stop(true); + } + } + if (!this.detached && this.parent && !fromParent) { + const last = this.parent.scopes.pop(); + if (last && last !== this) { + this.parent.scopes[this.index] = last; + last.index = this.index; + } + } + this.parent = void 0; + this._active = false; + } + } +} +function effectScope(detached) { + return new EffectScope(detached); +} +function recordEffectScope(effect, scope = activeEffectScope) { + if (scope && scope.active) { + scope.effects.push(effect); + } +} +function getCurrentScope() { + return activeEffectScope; +} +function onScopeDispose(fn) { + if (activeEffectScope) { + activeEffectScope.cleanups.push(fn); + } else if (true) { + warn( + `onScopeDispose() is called when there is no active effect scope to be associated with.` + ); + } +} + +const createDep = (effects) => { + const dep = new Set(effects); + dep.w = 0; + dep.n = 0; + return dep; +}; +const wasTracked = (dep) => (dep.w & trackOpBit) > 0; +const newTracked = (dep) => (dep.n & trackOpBit) > 0; +const initDepMarkers = ({ deps }) => { + if (deps.length) { + for (let i = 0; i < deps.length; i++) { + deps[i].w |= trackOpBit; + } + } +}; +const finalizeDepMarkers = (effect) => { + const { deps } = effect; + if (deps.length) { + let ptr = 0; + for (let i = 0; i < deps.length; i++) { + const dep = deps[i]; + if (wasTracked(dep) && !newTracked(dep)) { + dep.delete(effect); + } else { + deps[ptr++] = dep; + } + dep.w &= ~trackOpBit; + dep.n &= ~trackOpBit; + } + deps.length = ptr; + } +}; + +const targetMap = /* @__PURE__ */ new WeakMap(); +let effectTrackDepth = 0; +let trackOpBit = 1; +const maxMarkerBits = 30; +let activeEffect; +const ITERATE_KEY = Symbol( true ? "iterate" : 0); +const MAP_KEY_ITERATE_KEY = Symbol( true ? "Map key iterate" : 0); +class ReactiveEffect { + constructor(fn, scheduler = null, scope) { + this.fn = fn; + this.scheduler = scheduler; + this.active = true; + this.deps = []; + this.parent = void 0; + recordEffectScope(this, scope); + } + run() { + if (!this.active) { + return this.fn(); + } + let parent = activeEffect; + let lastShouldTrack = shouldTrack; + while (parent) { + if (parent === this) { + return; + } + parent = parent.parent; + } + try { + this.parent = activeEffect; + activeEffect = this; + shouldTrack = true; + trackOpBit = 1 << ++effectTrackDepth; + if (effectTrackDepth <= maxMarkerBits) { + initDepMarkers(this); + } else { + cleanupEffect(this); + } + return this.fn(); + } finally { + if (effectTrackDepth <= maxMarkerBits) { + finalizeDepMarkers(this); + } + trackOpBit = 1 << --effectTrackDepth; + activeEffect = this.parent; + shouldTrack = lastShouldTrack; + this.parent = void 0; + if (this.deferStop) { + this.stop(); + } + } + } + stop() { + if (activeEffect === this) { + this.deferStop = true; + } else if (this.active) { + cleanupEffect(this); + if (this.onStop) { + this.onStop(); + } + this.active = false; + } + } +} +function cleanupEffect(effect2) { + const { deps } = effect2; + if (deps.length) { + for (let i = 0; i < deps.length; i++) { + deps[i].delete(effect2); + } + deps.length = 0; + } +} +function effect(fn, options) { + if (fn.effect) { + fn = fn.effect.fn; + } + const _effect = new ReactiveEffect(fn); + if (options) { + (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.extend)(_effect, options); + if (options.scope) + recordEffectScope(_effect, options.scope); + } + if (!options || !options.lazy) { + _effect.run(); + } + const runner = _effect.run.bind(_effect); + runner.effect = _effect; + return runner; +} +function stop(runner) { + runner.effect.stop(); +} +let shouldTrack = true; +const trackStack = []; +function pauseTracking() { + trackStack.push(shouldTrack); + shouldTrack = false; +} +function enableTracking() { + trackStack.push(shouldTrack); + shouldTrack = true; +} +function resetTracking() { + const last = trackStack.pop(); + shouldTrack = last === void 0 ? true : last; +} +function track(target, type, key) { + if (shouldTrack && activeEffect) { + let depsMap = targetMap.get(target); + if (!depsMap) { + targetMap.set(target, depsMap = /* @__PURE__ */ new Map()); + } + let dep = depsMap.get(key); + if (!dep) { + depsMap.set(key, dep = createDep()); + } + const eventInfo = true ? { effect: activeEffect, target, type, key } : 0; + trackEffects(dep, eventInfo); + } +} +function trackEffects(dep, debuggerEventExtraInfo) { + let shouldTrack2 = false; + if (effectTrackDepth <= maxMarkerBits) { + if (!newTracked(dep)) { + dep.n |= trackOpBit; + shouldTrack2 = !wasTracked(dep); + } + } else { + shouldTrack2 = !dep.has(activeEffect); + } + if (shouldTrack2) { + dep.add(activeEffect); + activeEffect.deps.push(dep); + if ( true && activeEffect.onTrack) { + activeEffect.onTrack( + (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.extend)( + { + effect: activeEffect + }, + debuggerEventExtraInfo + ) + ); + } + } +} +function trigger(target, type, key, newValue, oldValue, oldTarget) { + const depsMap = targetMap.get(target); + if (!depsMap) { + return; + } + let deps = []; + if (type === "clear") { + deps = [...depsMap.values()]; + } else if (key === "length" && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target)) { + const newLength = Number(newValue); + depsMap.forEach((dep, key2) => { + if (key2 === "length" || key2 >= newLength) { + deps.push(dep); + } + }); + } else { + if (key !== void 0) { + deps.push(depsMap.get(key)); + } + switch (type) { + case "add": + if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target)) { + deps.push(depsMap.get(ITERATE_KEY)); + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isMap)(target)) { + deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isIntegerKey)(key)) { + deps.push(depsMap.get("length")); + } + break; + case "delete": + if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target)) { + deps.push(depsMap.get(ITERATE_KEY)); + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isMap)(target)) { + deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } + break; + case "set": + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isMap)(target)) { + deps.push(depsMap.get(ITERATE_KEY)); + } + break; + } + } + const eventInfo = true ? { target, type, key, newValue, oldValue, oldTarget } : 0; + if (deps.length === 1) { + if (deps[0]) { + if (true) { + triggerEffects(deps[0], eventInfo); + } else {} + } + } else { + const effects = []; + for (const dep of deps) { + if (dep) { + effects.push(...dep); + } + } + if (true) { + triggerEffects(createDep(effects), eventInfo); + } else {} + } +} +function triggerEffects(dep, debuggerEventExtraInfo) { + const effects = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(dep) ? dep : [...dep]; + for (const effect2 of effects) { + if (effect2.computed) { + triggerEffect(effect2, debuggerEventExtraInfo); + } + } + for (const effect2 of effects) { + if (!effect2.computed) { + triggerEffect(effect2, debuggerEventExtraInfo); + } + } +} +function triggerEffect(effect2, debuggerEventExtraInfo) { + if (effect2 !== activeEffect || effect2.allowRecurse) { + if ( true && effect2.onTrigger) { + effect2.onTrigger((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.extend)({ effect: effect2 }, debuggerEventExtraInfo)); + } + if (effect2.scheduler) { + effect2.scheduler(); + } else { + effect2.run(); + } + } +} +function getDepFromReactive(object, key) { + var _a; + return (_a = targetMap.get(object)) == null ? void 0 : _a.get(key); +} + +const isNonTrackableKeys = /* @__PURE__ */ (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.makeMap)(`__proto__,__v_isRef,__isVue`); +const builtInSymbols = new Set( + /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isSymbol) +); +const get$1 = /* @__PURE__ */ createGetter(); +const shallowGet = /* @__PURE__ */ createGetter(false, true); +const readonlyGet = /* @__PURE__ */ createGetter(true); +const shallowReadonlyGet = /* @__PURE__ */ createGetter(true, true); +const arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations(); +function createArrayInstrumentations() { + const instrumentations = {}; + ["includes", "indexOf", "lastIndexOf"].forEach((key) => { + instrumentations[key] = function(...args) { + const arr = toRaw(this); + for (let i = 0, l = this.length; i < l; i++) { + track(arr, "get", i + ""); + } + const res = arr[key](...args); + if (res === -1 || res === false) { + return arr[key](...args.map(toRaw)); + } else { + return res; + } + }; + }); + ["push", "pop", "shift", "unshift", "splice"].forEach((key) => { + instrumentations[key] = function(...args) { + pauseTracking(); + const res = toRaw(this)[key].apply(this, args); + resetTracking(); + return res; + }; + }); + return instrumentations; +} +function hasOwnProperty(key) { + const obj = toRaw(this); + track(obj, "has", key); + return obj.hasOwnProperty(key); +} +function createGetter(isReadonly2 = false, shallow = false) { + return function get2(target, key, receiver) { + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_isShallow") { + return shallow; + } else if (key === "__v_raw" && receiver === (isReadonly2 ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) { + return target; + } + const targetIsArray = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target); + if (!isReadonly2) { + if (targetIsArray && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasOwn)(arrayInstrumentations, key)) { + return Reflect.get(arrayInstrumentations, key, receiver); + } + if (key === "hasOwnProperty") { + return hasOwnProperty; + } + } + const res = Reflect.get(target, key, receiver); + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isSymbol)(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { + return res; + } + if (!isReadonly2) { + track(target, "get", key); + } + if (shallow) { + return res; + } + if (isRef(res)) { + return targetIsArray && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isIntegerKey)(key) ? res : res.value; + } + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isObject)(res)) { + return isReadonly2 ? readonly(res) : reactive(res); + } + return res; + }; +} +const set$1 = /* @__PURE__ */ createSetter(); +const shallowSet = /* @__PURE__ */ createSetter(true); +function createSetter(shallow = false) { + return function set2(target, key, value, receiver) { + let oldValue = target[key]; + if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) { + return false; + } + if (!shallow) { + if (!isShallow(value) && !isReadonly(value)) { + oldValue = toRaw(oldValue); + value = toRaw(value); + } + if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target) && isRef(oldValue) && !isRef(value)) { + oldValue.value = value; + return true; + } + } + const hadKey = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target) && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isIntegerKey)(key) ? Number(key) < target.length : (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasOwn)(target, key); + const result = Reflect.set(target, key, value, receiver); + if (target === toRaw(receiver)) { + if (!hadKey) { + trigger(target, "add", key, value); + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasChanged)(value, oldValue)) { + trigger(target, "set", key, value, oldValue); + } + } + return result; + }; +} +function deleteProperty(target, key) { + const hadKey = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasOwn)(target, key); + const oldValue = target[key]; + const result = Reflect.deleteProperty(target, key); + if (result && hadKey) { + trigger(target, "delete", key, void 0, oldValue); + } + return result; +} +function has$1(target, key) { + const result = Reflect.has(target, key); + if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isSymbol)(key) || !builtInSymbols.has(key)) { + track(target, "has", key); + } + return result; +} +function ownKeys(target) { + track(target, "iterate", (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target) ? "length" : ITERATE_KEY); + return Reflect.ownKeys(target); +} +const mutableHandlers = { + get: get$1, + set: set$1, + deleteProperty, + has: has$1, + ownKeys +}; +const readonlyHandlers = { + get: readonlyGet, + set(target, key) { + if (true) { + warn( + `Set operation on key "${String(key)}" failed: target is readonly.`, + target + ); + } + return true; + }, + deleteProperty(target, key) { + if (true) { + warn( + `Delete operation on key "${String(key)}" failed: target is readonly.`, + target + ); + } + return true; + } +}; +const shallowReactiveHandlers = /* @__PURE__ */ (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.extend)( + {}, + mutableHandlers, + { + get: shallowGet, + set: shallowSet + } +); +const shallowReadonlyHandlers = /* @__PURE__ */ (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.extend)( + {}, + readonlyHandlers, + { + get: shallowReadonlyGet + } +); + +const toShallow = (value) => value; +const getProto = (v) => Reflect.getPrototypeOf(v); +function get(target, key, isReadonly = false, isShallow = false) { + target = target["__v_raw"]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!isReadonly) { + if (key !== rawKey) { + track(rawTarget, "get", key); + } + track(rawTarget, "get", rawKey); + } + const { has: has2 } = getProto(rawTarget); + const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive; + if (has2.call(rawTarget, key)) { + return wrap(target.get(key)); + } else if (has2.call(rawTarget, rawKey)) { + return wrap(target.get(rawKey)); + } else if (target !== rawTarget) { + target.get(key); + } +} +function has(key, isReadonly = false) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!isReadonly) { + if (key !== rawKey) { + track(rawTarget, "has", key); + } + track(rawTarget, "has", rawKey); + } + return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); +} +function size(target, isReadonly = false) { + target = target["__v_raw"]; + !isReadonly && track(toRaw(target), "iterate", ITERATE_KEY); + return Reflect.get(target, "size", target); +} +function add(value) { + value = toRaw(value); + const target = toRaw(this); + const proto = getProto(target); + const hadKey = proto.has.call(target, value); + if (!hadKey) { + target.add(value); + trigger(target, "add", value, value); + } + return this; +} +function set(key, value) { + value = toRaw(value); + const target = toRaw(this); + const { has: has2, get: get2 } = getProto(target); + let hadKey = has2.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has2.call(target, key); + } else if (true) { + checkIdentityKeys(target, has2, key); + } + const oldValue = get2.call(target, key); + target.set(key, value); + if (!hadKey) { + trigger(target, "add", key, value); + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasChanged)(value, oldValue)) { + trigger(target, "set", key, value, oldValue); + } + return this; +} +function deleteEntry(key) { + const target = toRaw(this); + const { has: has2, get: get2 } = getProto(target); + let hadKey = has2.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has2.call(target, key); + } else if (true) { + checkIdentityKeys(target, has2, key); + } + const oldValue = get2 ? get2.call(target, key) : void 0; + const result = target.delete(key); + if (hadKey) { + trigger(target, "delete", key, void 0, oldValue); + } + return result; +} +function clear() { + const target = toRaw(this); + const hadItems = target.size !== 0; + const oldTarget = true ? (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isMap)(target) ? new Map(target) : new Set(target) : 0; + const result = target.clear(); + if (hadItems) { + trigger(target, "clear", void 0, void 0, oldTarget); + } + return result; +} +function createForEach(isReadonly, isShallow) { + return function forEach(callback, thisArg) { + const observed = this; + const target = observed["__v_raw"]; + const rawTarget = toRaw(target); + const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive; + !isReadonly && track(rawTarget, "iterate", ITERATE_KEY); + return target.forEach((value, key) => { + return callback.call(thisArg, wrap(value), wrap(key), observed); + }); + }; +} +function createIterableMethod(method, isReadonly, isShallow) { + return function(...args) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const targetIsMap = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isMap)(rawTarget); + const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; + const isKeyOnly = method === "keys" && targetIsMap; + const innerIterator = target[method](...args); + const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive; + !isReadonly && track( + rawTarget, + "iterate", + isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY + ); + return { + // iterator protocol + next() { + const { value, done } = innerIterator.next(); + return done ? { value, done } : { + value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), + done + }; + }, + // iterable protocol + [Symbol.iterator]() { + return this; + } + }; + }; +} +function createReadonlyMethod(type) { + return function(...args) { + if (true) { + const key = args[0] ? `on key "${args[0]}" ` : ``; + console.warn( + `${(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.capitalize)(type)} operation ${key}failed: target is readonly.`, + toRaw(this) + ); + } + return type === "delete" ? false : this; + }; +} +function createInstrumentations() { + const mutableInstrumentations2 = { + get(key) { + return get(this, key); + }, + get size() { + return size(this); + }, + has, + add, + set, + delete: deleteEntry, + clear, + forEach: createForEach(false, false) + }; + const shallowInstrumentations2 = { + get(key) { + return get(this, key, false, true); + }, + get size() { + return size(this); + }, + has, + add, + set, + delete: deleteEntry, + clear, + forEach: createForEach(false, true) + }; + const readonlyInstrumentations2 = { + get(key) { + return get(this, key, true); + }, + get size() { + return size(this, true); + }, + has(key) { + return has.call(this, key, true); + }, + add: createReadonlyMethod("add"), + set: createReadonlyMethod("set"), + delete: createReadonlyMethod("delete"), + clear: createReadonlyMethod("clear"), + forEach: createForEach(true, false) + }; + const shallowReadonlyInstrumentations2 = { + get(key) { + return get(this, key, true, true); + }, + get size() { + return size(this, true); + }, + has(key) { + return has.call(this, key, true); + }, + add: createReadonlyMethod("add"), + set: createReadonlyMethod("set"), + delete: createReadonlyMethod("delete"), + clear: createReadonlyMethod("clear"), + forEach: createForEach(true, true) + }; + const iteratorMethods = ["keys", "values", "entries", Symbol.iterator]; + iteratorMethods.forEach((method) => { + mutableInstrumentations2[method] = createIterableMethod( + method, + false, + false + ); + readonlyInstrumentations2[method] = createIterableMethod( + method, + true, + false + ); + shallowInstrumentations2[method] = createIterableMethod( + method, + false, + true + ); + shallowReadonlyInstrumentations2[method] = createIterableMethod( + method, + true, + true + ); + }); + return [ + mutableInstrumentations2, + readonlyInstrumentations2, + shallowInstrumentations2, + shallowReadonlyInstrumentations2 + ]; +} +const [ + mutableInstrumentations, + readonlyInstrumentations, + shallowInstrumentations, + shallowReadonlyInstrumentations +] = /* @__PURE__ */ createInstrumentations(); +function createInstrumentationGetter(isReadonly, shallow) { + const instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations; + return (target, key, receiver) => { + if (key === "__v_isReactive") { + return !isReadonly; + } else if (key === "__v_isReadonly") { + return isReadonly; + } else if (key === "__v_raw") { + return target; + } + return Reflect.get( + (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasOwn)(instrumentations, key) && key in target ? instrumentations : target, + key, + receiver + ); + }; +} +const mutableCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(false, false) +}; +const shallowCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(false, true) +}; +const readonlyCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(true, false) +}; +const shallowReadonlyCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(true, true) +}; +function checkIdentityKeys(target, has2, key) { + const rawKey = toRaw(key); + if (rawKey !== key && has2.call(target, rawKey)) { + const type = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.toRawType)(target); + console.warn( + `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.` + ); + } +} + +const reactiveMap = /* @__PURE__ */ new WeakMap(); +const shallowReactiveMap = /* @__PURE__ */ new WeakMap(); +const readonlyMap = /* @__PURE__ */ new WeakMap(); +const shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); +function targetTypeMap(rawType) { + switch (rawType) { + case "Object": + case "Array": + return 1 /* COMMON */; + case "Map": + case "Set": + case "WeakMap": + case "WeakSet": + return 2 /* COLLECTION */; + default: + return 0 /* INVALID */; + } +} +function getTargetType(value) { + return value["__v_skip"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.toRawType)(value)); +} +function reactive(target) { + if (isReadonly(target)) { + return target; + } + return createReactiveObject( + target, + false, + mutableHandlers, + mutableCollectionHandlers, + reactiveMap + ); +} +function shallowReactive(target) { + return createReactiveObject( + target, + false, + shallowReactiveHandlers, + shallowCollectionHandlers, + shallowReactiveMap + ); +} +function readonly(target) { + return createReactiveObject( + target, + true, + readonlyHandlers, + readonlyCollectionHandlers, + readonlyMap + ); +} +function shallowReadonly(target) { + return createReactiveObject( + target, + true, + shallowReadonlyHandlers, + shallowReadonlyCollectionHandlers, + shallowReadonlyMap + ); +} +function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { + if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isObject)(target)) { + if (true) { + console.warn(`value cannot be made reactive: ${String(target)}`); + } + return target; + } + if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) { + return target; + } + const existingProxy = proxyMap.get(target); + if (existingProxy) { + return existingProxy; + } + const targetType = getTargetType(target); + if (targetType === 0 /* INVALID */) { + return target; + } + const proxy = new Proxy( + target, + targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers + ); + proxyMap.set(target, proxy); + return proxy; +} +function isReactive(value) { + if (isReadonly(value)) { + return isReactive(value["__v_raw"]); + } + return !!(value && value["__v_isReactive"]); +} +function isReadonly(value) { + return !!(value && value["__v_isReadonly"]); +} +function isShallow(value) { + return !!(value && value["__v_isShallow"]); +} +function isProxy(value) { + return isReactive(value) || isReadonly(value); +} +function toRaw(observed) { + const raw = observed && observed["__v_raw"]; + return raw ? toRaw(raw) : observed; +} +function markRaw(value) { + (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.def)(value, "__v_skip", true); + return value; +} +const toReactive = (value) => (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isObject)(value) ? reactive(value) : value; +const toReadonly = (value) => (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isObject)(value) ? readonly(value) : value; + +function trackRefValue(ref2) { + if (shouldTrack && activeEffect) { + ref2 = toRaw(ref2); + if (true) { + trackEffects(ref2.dep || (ref2.dep = createDep()), { + target: ref2, + type: "get", + key: "value" + }); + } else {} + } +} +function triggerRefValue(ref2, newVal) { + ref2 = toRaw(ref2); + const dep = ref2.dep; + if (dep) { + if (true) { + triggerEffects(dep, { + target: ref2, + type: "set", + key: "value", + newValue: newVal + }); + } else {} + } +} +function isRef(r) { + return !!(r && r.__v_isRef === true); +} +function ref(value) { + return createRef(value, false); +} +function shallowRef(value) { + return createRef(value, true); +} +function createRef(rawValue, shallow) { + if (isRef(rawValue)) { + return rawValue; + } + return new RefImpl(rawValue, shallow); +} +class RefImpl { + constructor(value, __v_isShallow) { + this.__v_isShallow = __v_isShallow; + this.dep = void 0; + this.__v_isRef = true; + this._rawValue = __v_isShallow ? value : toRaw(value); + this._value = __v_isShallow ? value : toReactive(value); + } + get value() { + trackRefValue(this); + return this._value; + } + set value(newVal) { + const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal); + newVal = useDirectValue ? newVal : toRaw(newVal); + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasChanged)(newVal, this._rawValue)) { + this._rawValue = newVal; + this._value = useDirectValue ? newVal : toReactive(newVal); + triggerRefValue(this, newVal); + } + } +} +function triggerRef(ref2) { + triggerRefValue(ref2, true ? ref2.value : 0); +} +function unref(ref2) { + return isRef(ref2) ? ref2.value : ref2; +} +function toValue(source) { + return (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isFunction)(source) ? source() : unref(source); +} +const shallowUnwrapHandlers = { + get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)), + set: (target, key, value, receiver) => { + const oldValue = target[key]; + if (isRef(oldValue) && !isRef(value)) { + oldValue.value = value; + return true; + } else { + return Reflect.set(target, key, value, receiver); + } + } +}; +function proxyRefs(objectWithRefs) { + return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); +} +class CustomRefImpl { + constructor(factory) { + this.dep = void 0; + this.__v_isRef = true; + const { get, set } = factory( + () => trackRefValue(this), + () => triggerRefValue(this) + ); + this._get = get; + this._set = set; + } + get value() { + return this._get(); + } + set value(newVal) { + this._set(newVal); + } +} +function customRef(factory) { + return new CustomRefImpl(factory); +} +function toRefs(object) { + if ( true && !isProxy(object)) { + console.warn(`toRefs() expects a reactive object but received a plain one.`); + } + const ret = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(object) ? new Array(object.length) : {}; + for (const key in object) { + ret[key] = propertyToRef(object, key); + } + return ret; +} +class ObjectRefImpl { + constructor(_object, _key, _defaultValue) { + this._object = _object; + this._key = _key; + this._defaultValue = _defaultValue; + this.__v_isRef = true; + } + get value() { + const val = this._object[this._key]; + return val === void 0 ? this._defaultValue : val; + } + set value(newVal) { + this._object[this._key] = newVal; + } + get dep() { + return getDepFromReactive(toRaw(this._object), this._key); + } +} +class GetterRefImpl { + constructor(_getter) { + this._getter = _getter; + this.__v_isRef = true; + this.__v_isReadonly = true; + } + get value() { + return this._getter(); + } +} +function toRef(source, key, defaultValue) { + if (isRef(source)) { + return source; + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isFunction)(source)) { + return new GetterRefImpl(source); + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isObject)(source) && arguments.length > 1) { + return propertyToRef(source, key, defaultValue); + } else { + return ref(source); + } +} +function propertyToRef(source, key, defaultValue) { + const val = source[key]; + return isRef(val) ? val : new ObjectRefImpl( + source, + key, + defaultValue + ); +} + +class ComputedRefImpl { + constructor(getter, _setter, isReadonly, isSSR) { + this._setter = _setter; + this.dep = void 0; + this.__v_isRef = true; + this["__v_isReadonly"] = false; + this._dirty = true; + this.effect = new ReactiveEffect(getter, () => { + if (!this._dirty) { + this._dirty = true; + triggerRefValue(this); + } + }); + this.effect.computed = this; + this.effect.active = this._cacheable = !isSSR; + this["__v_isReadonly"] = isReadonly; + } + get value() { + const self = toRaw(this); + trackRefValue(self); + if (self._dirty || !self._cacheable) { + self._dirty = false; + self._value = self.effect.run(); + } + return self._value; + } + set value(newValue) { + this._setter(newValue); + } +} +function computed(getterOrOptions, debugOptions, isSSR = false) { + let getter; + let setter; + const onlyGetter = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isFunction)(getterOrOptions); + if (onlyGetter) { + getter = getterOrOptions; + setter = true ? () => { + console.warn("Write operation failed: computed value is readonly"); + } : 0; + } else { + getter = getterOrOptions.get; + setter = getterOrOptions.set; + } + const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR); + if ( true && debugOptions && !isSSR) { + cRef.effect.onTrack = debugOptions.onTrack; + cRef.effect.onTrigger = debugOptions.onTrigger; + } + return cRef; +} + +const tick = /* @__PURE__ */ Promise.resolve(); +const queue = []; +let queued = false; +const scheduler = (fn) => { + queue.push(fn); + if (!queued) { + queued = true; + tick.then(flush); + } +}; +const flush = () => { + for (let i = 0; i < queue.length; i++) { + queue[i](); + } + queue.length = 0; + queued = false; +}; +class DeferredComputedRefImpl { + constructor(getter) { + this.dep = void 0; + this._dirty = true; + this.__v_isRef = true; + this["__v_isReadonly"] = true; + let compareTarget; + let hasCompareTarget = false; + let scheduled = false; + this.effect = new ReactiveEffect(getter, (computedTrigger) => { + if (this.dep) { + if (computedTrigger) { + compareTarget = this._value; + hasCompareTarget = true; + } else if (!scheduled) { + const valueToCompare = hasCompareTarget ? compareTarget : this._value; + scheduled = true; + hasCompareTarget = false; + scheduler(() => { + if (this.effect.active && this._get() !== valueToCompare) { + triggerRefValue(this); + } + scheduled = false; + }); + } + for (const e of this.dep) { + if (e.computed instanceof DeferredComputedRefImpl) { + e.scheduler( + true + /* computedTrigger */ + ); + } + } + } + this._dirty = true; + }); + this.effect.computed = this; + } + _get() { + if (this._dirty) { + this._dirty = false; + return this._value = this.effect.run(); + } + return this._value; + } + get value() { + trackRefValue(this); + return toRaw(this)._get(); + } +} +function deferredComputed(getter) { + return new DeferredComputedRefImpl(getter); +} + + + + +/***/ }), + +/***/ "./node_modules/.pnpm/@vue+runtime-core@3.3.4/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js": +/*!********************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/@vue+runtime-core@3.3.4/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js ***! + \********************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ BaseTransition: () => (/* binding */ BaseTransition), +/* harmony export */ BaseTransitionPropsValidators: () => (/* binding */ BaseTransitionPropsValidators), +/* harmony export */ Comment: () => (/* binding */ Comment), +/* harmony export */ EffectScope: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.EffectScope), +/* harmony export */ Fragment: () => (/* binding */ Fragment), +/* harmony export */ KeepAlive: () => (/* binding */ KeepAlive), +/* harmony export */ ReactiveEffect: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.ReactiveEffect), +/* harmony export */ Static: () => (/* binding */ Static), +/* harmony export */ Suspense: () => (/* binding */ Suspense), +/* harmony export */ Teleport: () => (/* binding */ Teleport), +/* harmony export */ Text: () => (/* binding */ Text), +/* harmony export */ assertNumber: () => (/* binding */ assertNumber), +/* harmony export */ callWithAsyncErrorHandling: () => (/* binding */ callWithAsyncErrorHandling), +/* harmony export */ callWithErrorHandling: () => (/* binding */ callWithErrorHandling), +/* harmony export */ camelize: () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.camelize), +/* harmony export */ capitalize: () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.capitalize), +/* harmony export */ cloneVNode: () => (/* binding */ cloneVNode), +/* harmony export */ compatUtils: () => (/* binding */ compatUtils), +/* harmony export */ computed: () => (/* binding */ computed), +/* harmony export */ createBlock: () => (/* binding */ createBlock), +/* harmony export */ createCommentVNode: () => (/* binding */ createCommentVNode), +/* harmony export */ createElementBlock: () => (/* binding */ createElementBlock), +/* harmony export */ createElementVNode: () => (/* binding */ createBaseVNode), +/* harmony export */ createHydrationRenderer: () => (/* binding */ createHydrationRenderer), +/* harmony export */ createPropsRestProxy: () => (/* binding */ createPropsRestProxy), +/* harmony export */ createRenderer: () => (/* binding */ createRenderer), +/* harmony export */ createSlots: () => (/* binding */ createSlots), +/* harmony export */ createStaticVNode: () => (/* binding */ createStaticVNode), +/* harmony export */ createTextVNode: () => (/* binding */ createTextVNode), +/* harmony export */ createVNode: () => (/* binding */ createVNode), +/* harmony export */ customRef: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.customRef), +/* harmony export */ defineAsyncComponent: () => (/* binding */ defineAsyncComponent), +/* harmony export */ defineComponent: () => (/* binding */ defineComponent), +/* harmony export */ defineEmits: () => (/* binding */ defineEmits), +/* harmony export */ defineExpose: () => (/* binding */ defineExpose), +/* harmony export */ defineModel: () => (/* binding */ defineModel), +/* harmony export */ defineOptions: () => (/* binding */ defineOptions), +/* harmony export */ defineProps: () => (/* binding */ defineProps), +/* harmony export */ defineSlots: () => (/* binding */ defineSlots), +/* harmony export */ devtools: () => (/* binding */ devtools), +/* harmony export */ effect: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.effect), +/* harmony export */ effectScope: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.effectScope), +/* harmony export */ getCurrentInstance: () => (/* binding */ getCurrentInstance), +/* harmony export */ getCurrentScope: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope), +/* harmony export */ getTransitionRawChildren: () => (/* binding */ getTransitionRawChildren), +/* harmony export */ guardReactiveProps: () => (/* binding */ guardReactiveProps), +/* harmony export */ h: () => (/* binding */ h), +/* harmony export */ handleError: () => (/* binding */ handleError), +/* harmony export */ hasInjectionContext: () => (/* binding */ hasInjectionContext), +/* harmony export */ initCustomFormatter: () => (/* binding */ initCustomFormatter), +/* harmony export */ inject: () => (/* binding */ inject), +/* harmony export */ isMemoSame: () => (/* binding */ isMemoSame), +/* harmony export */ isProxy: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isProxy), +/* harmony export */ isReactive: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isReactive), +/* harmony export */ isReadonly: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isReadonly), +/* harmony export */ isRef: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isRef), +/* harmony export */ isRuntimeOnly: () => (/* binding */ isRuntimeOnly), +/* harmony export */ isShallow: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isShallow), +/* harmony export */ isVNode: () => (/* binding */ isVNode), +/* harmony export */ markRaw: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.markRaw), +/* harmony export */ mergeDefaults: () => (/* binding */ mergeDefaults), +/* harmony export */ mergeModels: () => (/* binding */ mergeModels), +/* harmony export */ mergeProps: () => (/* binding */ mergeProps), +/* harmony export */ nextTick: () => (/* binding */ nextTick), +/* harmony export */ normalizeClass: () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.normalizeClass), +/* harmony export */ normalizeProps: () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.normalizeProps), +/* harmony export */ normalizeStyle: () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.normalizeStyle), +/* harmony export */ onActivated: () => (/* binding */ onActivated), +/* harmony export */ onBeforeMount: () => (/* binding */ onBeforeMount), +/* harmony export */ onBeforeUnmount: () => (/* binding */ onBeforeUnmount), +/* harmony export */ onBeforeUpdate: () => (/* binding */ onBeforeUpdate), +/* harmony export */ onDeactivated: () => (/* binding */ onDeactivated), +/* harmony export */ onErrorCaptured: () => (/* binding */ onErrorCaptured), +/* harmony export */ onMounted: () => (/* binding */ onMounted), +/* harmony export */ onRenderTracked: () => (/* binding */ onRenderTracked), +/* harmony export */ onRenderTriggered: () => (/* binding */ onRenderTriggered), +/* harmony export */ onScopeDispose: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.onScopeDispose), +/* harmony export */ onServerPrefetch: () => (/* binding */ onServerPrefetch), +/* harmony export */ onUnmounted: () => (/* binding */ onUnmounted), +/* harmony export */ onUpdated: () => (/* binding */ onUpdated), +/* harmony export */ openBlock: () => (/* binding */ openBlock), +/* harmony export */ popScopeId: () => (/* binding */ popScopeId), +/* harmony export */ provide: () => (/* binding */ provide), +/* harmony export */ proxyRefs: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.proxyRefs), +/* harmony export */ pushScopeId: () => (/* binding */ pushScopeId), +/* harmony export */ queuePostFlushCb: () => (/* binding */ queuePostFlushCb), +/* harmony export */ reactive: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.reactive), +/* harmony export */ readonly: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.readonly), +/* harmony export */ ref: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.ref), +/* harmony export */ registerRuntimeCompiler: () => (/* binding */ registerRuntimeCompiler), +/* harmony export */ renderList: () => (/* binding */ renderList), +/* harmony export */ renderSlot: () => (/* binding */ renderSlot), +/* harmony export */ resolveComponent: () => (/* binding */ resolveComponent), +/* harmony export */ resolveDirective: () => (/* binding */ resolveDirective), +/* harmony export */ resolveDynamicComponent: () => (/* binding */ resolveDynamicComponent), +/* harmony export */ resolveFilter: () => (/* binding */ resolveFilter), +/* harmony export */ resolveTransitionHooks: () => (/* binding */ resolveTransitionHooks), +/* harmony export */ setBlockTracking: () => (/* binding */ setBlockTracking), +/* harmony export */ setDevtoolsHook: () => (/* binding */ setDevtoolsHook), +/* harmony export */ setTransitionHooks: () => (/* binding */ setTransitionHooks), +/* harmony export */ shallowReactive: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.shallowReactive), +/* harmony export */ shallowReadonly: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.shallowReadonly), +/* harmony export */ shallowRef: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.shallowRef), +/* harmony export */ ssrContextKey: () => (/* binding */ ssrContextKey), +/* harmony export */ ssrUtils: () => (/* binding */ ssrUtils), +/* harmony export */ stop: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.stop), +/* harmony export */ toDisplayString: () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.toDisplayString), +/* harmony export */ toHandlerKey: () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey), +/* harmony export */ toHandlers: () => (/* binding */ toHandlers), +/* harmony export */ toRaw: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toRaw), +/* harmony export */ toRef: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toRef), +/* harmony export */ toRefs: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toRefs), +/* harmony export */ toValue: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toValue), +/* harmony export */ transformVNodeArgs: () => (/* binding */ transformVNodeArgs), +/* harmony export */ triggerRef: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.triggerRef), +/* harmony export */ unref: () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.unref), +/* harmony export */ useAttrs: () => (/* binding */ useAttrs), +/* harmony export */ useModel: () => (/* binding */ useModel), +/* harmony export */ useSSRContext: () => (/* binding */ useSSRContext), +/* harmony export */ useSlots: () => (/* binding */ useSlots), +/* harmony export */ useTransitionState: () => (/* binding */ useTransitionState), +/* harmony export */ version: () => (/* binding */ version), +/* harmony export */ warn: () => (/* binding */ warn), +/* harmony export */ watch: () => (/* binding */ watch), +/* harmony export */ watchEffect: () => (/* binding */ watchEffect), +/* harmony export */ watchPostEffect: () => (/* binding */ watchPostEffect), +/* harmony export */ watchSyncEffect: () => (/* binding */ watchSyncEffect), +/* harmony export */ withAsyncContext: () => (/* binding */ withAsyncContext), +/* harmony export */ withCtx: () => (/* binding */ withCtx), +/* harmony export */ withDefaults: () => (/* binding */ withDefaults), +/* harmony export */ withDirectives: () => (/* binding */ withDirectives), +/* harmony export */ withMemo: () => (/* binding */ withMemo), +/* harmony export */ withScopeId: () => (/* binding */ withScopeId) +/* harmony export */ }); +/* harmony import */ var _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @vue/reactivity */ "./node_modules/.pnpm/@vue+reactivity@3.3.4/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js"); +/* harmony import */ var _vue_shared__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @vue/shared */ "./node_modules/.pnpm/@vue+shared@3.3.4/node_modules/@vue/shared/dist/shared.esm-bundler.js"); + + + + + +const stack = []; +function pushWarningContext(vnode) { + stack.push(vnode); +} +function popWarningContext() { + stack.pop(); +} +function warn(msg, ...args) { + if (false) + {} + (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.pauseTracking)(); + const instance = stack.length ? stack[stack.length - 1].component : null; + const appWarnHandler = instance && instance.appContext.config.warnHandler; + const trace = getComponentTrace(); + if (appWarnHandler) { + callWithErrorHandling( + appWarnHandler, + instance, + 11, + [ + msg + args.join(""), + instance && instance.proxy, + trace.map( + ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>` + ).join("\n"), + trace + ] + ); + } else { + const warnArgs = [`[Vue warn]: ${msg}`, ...args]; + if (trace.length && // avoid spamming console during tests + true) { + warnArgs.push(` +`, ...formatTrace(trace)); + } + console.warn(...warnArgs); + } + (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.resetTracking)(); +} +function getComponentTrace() { + let currentVNode = stack[stack.length - 1]; + if (!currentVNode) { + return []; + } + const normalizedStack = []; + while (currentVNode) { + const last = normalizedStack[0]; + if (last && last.vnode === currentVNode) { + last.recurseCount++; + } else { + normalizedStack.push({ + vnode: currentVNode, + recurseCount: 0 + }); + } + const parentInstance = currentVNode.component && currentVNode.component.parent; + currentVNode = parentInstance && parentInstance.vnode; + } + return normalizedStack; +} +function formatTrace(trace) { + const logs = []; + trace.forEach((entry, i) => { + logs.push(...i === 0 ? [] : [` +`], ...formatTraceEntry(entry)); + }); + return logs; +} +function formatTraceEntry({ vnode, recurseCount }) { + const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; + const isRoot = vnode.component ? vnode.component.parent == null : false; + const open = ` at <${formatComponentName( + vnode.component, + vnode.type, + isRoot + )}`; + const close = `>` + postfix; + return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close]; +} +function formatProps(props) { + const res = []; + const keys = Object.keys(props); + keys.slice(0, 3).forEach((key) => { + res.push(...formatProp(key, props[key])); + }); + if (keys.length > 3) { + res.push(` ...`); + } + return res; +} +function formatProp(key, value, raw) { + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isString)(value)) { + value = JSON.stringify(value); + return raw ? value : [`${key}=${value}`]; + } else if (typeof value === "number" || typeof value === "boolean" || value == null) { + return raw ? value : [`${key}=${value}`]; + } else if ((0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isRef)(value)) { + value = formatProp(key, (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toRaw)(value.value), true); + return raw ? value : [`${key}=Ref<`, value, `>`]; + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(value)) { + return [`${key}=fn${value.name ? `<${value.name}>` : ``}`]; + } else { + value = (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toRaw)(value); + return raw ? value : [`${key}=`, value]; + } +} +function assertNumber(val, type) { + if (false) + {} + if (val === void 0) { + return; + } else if (typeof val !== "number") { + warn(`${type} is not a valid number - got ${JSON.stringify(val)}.`); + } else if (isNaN(val)) { + warn(`${type} is NaN - the duration expression might be incorrect.`); + } +} + +const ErrorTypeStrings = { + ["sp"]: "serverPrefetch hook", + ["bc"]: "beforeCreate hook", + ["c"]: "created hook", + ["bm"]: "beforeMount hook", + ["m"]: "mounted hook", + ["bu"]: "beforeUpdate hook", + ["u"]: "updated", + ["bum"]: "beforeUnmount hook", + ["um"]: "unmounted hook", + ["a"]: "activated hook", + ["da"]: "deactivated hook", + ["ec"]: "errorCaptured hook", + ["rtc"]: "renderTracked hook", + ["rtg"]: "renderTriggered hook", + [0]: "setup function", + [1]: "render function", + [2]: "watcher getter", + [3]: "watcher callback", + [4]: "watcher cleanup function", + [5]: "native event handler", + [6]: "component event handler", + [7]: "vnode hook", + [8]: "directive hook", + [9]: "transition hook", + [10]: "app errorHandler", + [11]: "app warnHandler", + [12]: "ref function", + [13]: "async component loader", + [14]: "scheduler flush. This is likely a Vue internals bug. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core" +}; +function callWithErrorHandling(fn, instance, type, args) { + let res; + try { + res = args ? fn(...args) : fn(); + } catch (err) { + handleError(err, instance, type); + } + return res; +} +function callWithAsyncErrorHandling(fn, instance, type, args) { + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(fn)) { + const res = callWithErrorHandling(fn, instance, type, args); + if (res && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isPromise)(res)) { + res.catch((err) => { + handleError(err, instance, type); + }); + } + return res; + } + const values = []; + for (let i = 0; i < fn.length; i++) { + values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); + } + return values; +} +function handleError(err, instance, type, throwInDev = true) { + const contextVNode = instance ? instance.vnode : null; + if (instance) { + let cur = instance.parent; + const exposedInstance = instance.proxy; + const errorInfo = true ? ErrorTypeStrings[type] : 0; + while (cur) { + const errorCapturedHooks = cur.ec; + if (errorCapturedHooks) { + for (let i = 0; i < errorCapturedHooks.length; i++) { + if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { + return; + } + } + } + cur = cur.parent; + } + const appErrorHandler = instance.appContext.config.errorHandler; + if (appErrorHandler) { + callWithErrorHandling( + appErrorHandler, + null, + 10, + [err, exposedInstance, errorInfo] + ); + return; + } + } + logError(err, type, contextVNode, throwInDev); +} +function logError(err, type, contextVNode, throwInDev = true) { + if (true) { + const info = ErrorTypeStrings[type]; + if (contextVNode) { + pushWarningContext(contextVNode); + } + warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`); + if (contextVNode) { + popWarningContext(); + } + if (throwInDev) { + throw err; + } else { + console.error(err); + } + } else {} +} + +let isFlushing = false; +let isFlushPending = false; +const queue = []; +let flushIndex = 0; +const pendingPostFlushCbs = []; +let activePostFlushCbs = null; +let postFlushIndex = 0; +const resolvedPromise = /* @__PURE__ */ Promise.resolve(); +let currentFlushPromise = null; +const RECURSION_LIMIT = 100; +function nextTick(fn) { + const p = currentFlushPromise || resolvedPromise; + return fn ? p.then(this ? fn.bind(this) : fn) : p; +} +function findInsertionIndex(id) { + let start = flushIndex + 1; + let end = queue.length; + while (start < end) { + const middle = start + end >>> 1; + const middleJobId = getId(queue[middle]); + middleJobId < id ? start = middle + 1 : end = middle; + } + return start; +} +function queueJob(job) { + if (!queue.length || !queue.includes( + job, + isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex + )) { + if (job.id == null) { + queue.push(job); + } else { + queue.splice(findInsertionIndex(job.id), 0, job); + } + queueFlush(); + } +} +function queueFlush() { + if (!isFlushing && !isFlushPending) { + isFlushPending = true; + currentFlushPromise = resolvedPromise.then(flushJobs); + } +} +function invalidateJob(job) { + const i = queue.indexOf(job); + if (i > flushIndex) { + queue.splice(i, 1); + } +} +function queuePostFlushCb(cb) { + if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(cb)) { + if (!activePostFlushCbs || !activePostFlushCbs.includes( + cb, + cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex + )) { + pendingPostFlushCbs.push(cb); + } + } else { + pendingPostFlushCbs.push(...cb); + } + queueFlush(); +} +function flushPreFlushCbs(seen, i = isFlushing ? flushIndex + 1 : 0) { + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + for (; i < queue.length; i++) { + const cb = queue[i]; + if (cb && cb.pre) { + if ( true && checkRecursiveUpdates(seen, cb)) { + continue; + } + queue.splice(i, 1); + i--; + cb(); + } + } +} +function flushPostFlushCbs(seen) { + if (pendingPostFlushCbs.length) { + const deduped = [...new Set(pendingPostFlushCbs)]; + pendingPostFlushCbs.length = 0; + if (activePostFlushCbs) { + activePostFlushCbs.push(...deduped); + return; + } + activePostFlushCbs = deduped; + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + activePostFlushCbs.sort((a, b) => getId(a) - getId(b)); + for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { + if ( true && checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) { + continue; + } + activePostFlushCbs[postFlushIndex](); + } + activePostFlushCbs = null; + postFlushIndex = 0; + } +} +const getId = (job) => job.id == null ? Infinity : job.id; +const comparator = (a, b) => { + const diff = getId(a) - getId(b); + if (diff === 0) { + if (a.pre && !b.pre) + return -1; + if (b.pre && !a.pre) + return 1; + } + return diff; +}; +function flushJobs(seen) { + isFlushPending = false; + isFlushing = true; + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + queue.sort(comparator); + const check = true ? (job) => checkRecursiveUpdates(seen, job) : 0; + try { + for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex]; + if (job && job.active !== false) { + if ( true && check(job)) { + continue; + } + callWithErrorHandling(job, null, 14); + } + } + } finally { + flushIndex = 0; + queue.length = 0; + flushPostFlushCbs(seen); + isFlushing = false; + currentFlushPromise = null; + if (queue.length || pendingPostFlushCbs.length) { + flushJobs(seen); + } + } +} +function checkRecursiveUpdates(seen, fn) { + if (!seen.has(fn)) { + seen.set(fn, 1); + } else { + const count = seen.get(fn); + if (count > RECURSION_LIMIT) { + const instance = fn.ownerInstance; + const componentName = instance && getComponentName(instance.type); + warn( + `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.` + ); + return true; + } else { + seen.set(fn, count + 1); + } + } +} + +let isHmrUpdating = false; +const hmrDirtyComponents = /* @__PURE__ */ new Set(); +if (true) { + (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.getGlobalThis)().__VUE_HMR_RUNTIME__ = { + createRecord: tryWrap(createRecord), + rerender: tryWrap(rerender), + reload: tryWrap(reload) + }; +} +const map = /* @__PURE__ */ new Map(); +function registerHMR(instance) { + const id = instance.type.__hmrId; + let record = map.get(id); + if (!record) { + createRecord(id, instance.type); + record = map.get(id); + } + record.instances.add(instance); +} +function unregisterHMR(instance) { + map.get(instance.type.__hmrId).instances.delete(instance); +} +function createRecord(id, initialDef) { + if (map.has(id)) { + return false; + } + map.set(id, { + initialDef: normalizeClassComponent(initialDef), + instances: /* @__PURE__ */ new Set() + }); + return true; +} +function normalizeClassComponent(component) { + return isClassComponent(component) ? component.__vccOpts : component; +} +function rerender(id, newRender) { + const record = map.get(id); + if (!record) { + return; + } + record.initialDef.render = newRender; + [...record.instances].forEach((instance) => { + if (newRender) { + instance.render = newRender; + normalizeClassComponent(instance.type).render = newRender; + } + instance.renderCache = []; + isHmrUpdating = true; + instance.update(); + isHmrUpdating = false; + }); +} +function reload(id, newComp) { + const record = map.get(id); + if (!record) + return; + newComp = normalizeClassComponent(newComp); + updateComponentDef(record.initialDef, newComp); + const instances = [...record.instances]; + for (const instance of instances) { + const oldComp = normalizeClassComponent(instance.type); + if (!hmrDirtyComponents.has(oldComp)) { + if (oldComp !== record.initialDef) { + updateComponentDef(oldComp, newComp); + } + hmrDirtyComponents.add(oldComp); + } + instance.appContext.propsCache.delete(instance.type); + instance.appContext.emitsCache.delete(instance.type); + instance.appContext.optionsCache.delete(instance.type); + if (instance.ceReload) { + hmrDirtyComponents.add(oldComp); + instance.ceReload(newComp.styles); + hmrDirtyComponents.delete(oldComp); + } else if (instance.parent) { + queueJob(instance.parent.update); + } else if (instance.appContext.reload) { + instance.appContext.reload(); + } else if (typeof window !== "undefined") { + window.location.reload(); + } else { + console.warn( + "[HMR] Root or manually mounted instance modified. Full reload required." + ); + } + } + queuePostFlushCb(() => { + for (const instance of instances) { + hmrDirtyComponents.delete( + normalizeClassComponent(instance.type) + ); + } + }); +} +function updateComponentDef(oldComp, newComp) { + (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.extend)(oldComp, newComp); + for (const key in oldComp) { + if (key !== "__file" && !(key in newComp)) { + delete oldComp[key]; + } + } +} +function tryWrap(fn) { + return (id, arg) => { + try { + return fn(id, arg); + } catch (e) { + console.error(e); + console.warn( + `[HMR] Something went wrong during Vue component hot-reload. Full reload required.` + ); + } + }; +} + +let devtools; +let buffer = []; +let devtoolsNotInstalled = false; +function emit$1(event, ...args) { + if (devtools) { + devtools.emit(event, ...args); + } else if (!devtoolsNotInstalled) { + buffer.push({ event, args }); + } +} +function setDevtoolsHook(hook, target) { + var _a, _b; + devtools = hook; + if (devtools) { + devtools.enabled = true; + buffer.forEach(({ event, args }) => devtools.emit(event, ...args)); + buffer = []; + } else if ( + // handle late devtools injection - only do this if we are in an actual + // browser environment to avoid the timer handle stalling test runner exit + // (#4815) + typeof window !== "undefined" && // some envs mock window but not fully + window.HTMLElement && // also exclude jsdom + !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom")) + ) { + const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []; + replay.push((newHook) => { + setDevtoolsHook(newHook, target); + }); + setTimeout(() => { + if (!devtools) { + target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null; + devtoolsNotInstalled = true; + buffer = []; + } + }, 3e3); + } else { + devtoolsNotInstalled = true; + buffer = []; + } +} +function devtoolsInitApp(app, version) { + emit$1("app:init" /* APP_INIT */, app, version, { + Fragment, + Text, + Comment, + Static + }); +} +function devtoolsUnmountApp(app) { + emit$1("app:unmount" /* APP_UNMOUNT */, app); +} +const devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook( + "component:added" /* COMPONENT_ADDED */ +); +const devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook("component:updated" /* COMPONENT_UPDATED */); +const _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook( + "component:removed" /* COMPONENT_REMOVED */ +); +const devtoolsComponentRemoved = (component) => { + if (devtools && typeof devtools.cleanupBuffer === "function" && // remove the component if it wasn't buffered + !devtools.cleanupBuffer(component)) { + _devtoolsComponentRemoved(component); + } +}; +function createDevtoolsComponentHook(hook) { + return (component) => { + emit$1( + hook, + component.appContext.app, + component.uid, + component.parent ? component.parent.uid : void 0, + component + ); + }; +} +const devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook( + "perf:start" /* PERFORMANCE_START */ +); +const devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook( + "perf:end" /* PERFORMANCE_END */ +); +function createDevtoolsPerformanceHook(hook) { + return (component, type, time) => { + emit$1(hook, component.appContext.app, component.uid, component, type, time); + }; +} +function devtoolsComponentEmit(component, event, params) { + emit$1( + "component:emit" /* COMPONENT_EMIT */, + component.appContext.app, + component, + event, + params + ); +} + +function emit(instance, event, ...rawArgs) { + if (instance.isUnmounted) + return; + const props = instance.vnode.props || _vue_shared__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJ; + if (true) { + const { + emitsOptions, + propsOptions: [propsOptions] + } = instance; + if (emitsOptions) { + if (!(event in emitsOptions) && true) { + if (!propsOptions || !((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)(event) in propsOptions)) { + warn( + `Component emitted event "${event}" but it is neither declared in the emits option nor as an "${(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)(event)}" prop.` + ); + } + } else { + const validator = emitsOptions[event]; + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(validator)) { + const isValid = validator(...rawArgs); + if (!isValid) { + warn( + `Invalid event arguments: event validation failed for event "${event}".` + ); + } + } + } + } + } + let args = rawArgs; + const isModelListener = event.startsWith("update:"); + const modelArg = isModelListener && event.slice(7); + if (modelArg && modelArg in props) { + const modifiersKey = `${modelArg === "modelValue" ? "model" : modelArg}Modifiers`; + const { number, trim } = props[modifiersKey] || _vue_shared__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJ; + if (trim) { + args = rawArgs.map((a) => (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isString)(a) ? a.trim() : a); + } + if (number) { + args = rawArgs.map(_vue_shared__WEBPACK_IMPORTED_MODULE_1__.looseToNumber); + } + } + if (true) { + devtoolsComponentEmit(instance, event, args); + } + if (true) { + const lowerCaseEvent = event.toLowerCase(); + if (lowerCaseEvent !== event && props[(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)(lowerCaseEvent)]) { + warn( + `Event "${lowerCaseEvent}" is emitted in component ${formatComponentName( + instance, + instance.type + )} but the handler is registered for "${event}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hyphenate)(event)}" instead of "${event}".` + ); + } + } + let handlerName; + let handler = props[handlerName = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)(event)] || // also try camelCase event handler (#2249) + props[handlerName = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.camelize)(event))]; + if (!handler && isModelListener) { + handler = props[handlerName = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hyphenate)(event))]; + } + if (handler) { + callWithAsyncErrorHandling( + handler, + instance, + 6, + args + ); + } + const onceHandler = props[handlerName + `Once`]; + if (onceHandler) { + if (!instance.emitted) { + instance.emitted = {}; + } else if (instance.emitted[handlerName]) { + return; + } + instance.emitted[handlerName] = true; + callWithAsyncErrorHandling( + onceHandler, + instance, + 6, + args + ); + } +} +function normalizeEmitsOptions(comp, appContext, asMixin = false) { + const cache = appContext.emitsCache; + const cached = cache.get(comp); + if (cached !== void 0) { + return cached; + } + const raw = comp.emits; + let normalized = {}; + let hasExtends = false; + if ( true && !(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(comp)) { + const extendEmits = (raw2) => { + const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true); + if (normalizedFromExtend) { + hasExtends = true; + (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.extend)(normalized, normalizedFromExtend); + } + }; + if (!asMixin && appContext.mixins.length) { + appContext.mixins.forEach(extendEmits); + } + if (comp.extends) { + extendEmits(comp.extends); + } + if (comp.mixins) { + comp.mixins.forEach(extendEmits); + } + } + if (!raw && !hasExtends) { + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isObject)(comp)) { + cache.set(comp, null); + } + return null; + } + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(raw)) { + raw.forEach((key) => normalized[key] = null); + } else { + (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.extend)(normalized, raw); + } + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isObject)(comp)) { + cache.set(comp, normalized); + } + return normalized; +} +function isEmitListener(options, key) { + if (!options || !(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isOn)(key)) { + return false; + } + key = key.slice(2).replace(/Once$/, ""); + return (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(options, key[0].toLowerCase() + key.slice(1)) || (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(options, (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hyphenate)(key)) || (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(options, key); +} + +let currentRenderingInstance = null; +let currentScopeId = null; +function setCurrentRenderingInstance(instance) { + const prev = currentRenderingInstance; + currentRenderingInstance = instance; + currentScopeId = instance && instance.type.__scopeId || null; + return prev; +} +function pushScopeId(id) { + currentScopeId = id; +} +function popScopeId() { + currentScopeId = null; +} +const withScopeId = (_id) => withCtx; +function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { + if (!ctx) + return fn; + if (fn._n) { + return fn; + } + const renderFnWithContext = (...args) => { + if (renderFnWithContext._d) { + setBlockTracking(-1); + } + const prevInstance = setCurrentRenderingInstance(ctx); + let res; + try { + res = fn(...args); + } finally { + setCurrentRenderingInstance(prevInstance); + if (renderFnWithContext._d) { + setBlockTracking(1); + } + } + if (true) { + devtoolsComponentUpdated(ctx); + } + return res; + }; + renderFnWithContext._n = true; + renderFnWithContext._c = true; + renderFnWithContext._d = true; + return renderFnWithContext; +} + +let accessedAttrs = false; +function markAttrsAccessed() { + accessedAttrs = true; +} +function renderComponentRoot(instance) { + const { + type: Component, + vnode, + proxy, + withProxy, + props, + propsOptions: [propsOptions], + slots, + attrs, + emit, + render, + renderCache, + data, + setupState, + ctx, + inheritAttrs + } = instance; + let result; + let fallthroughAttrs; + const prev = setCurrentRenderingInstance(instance); + if (true) { + accessedAttrs = false; + } + try { + if (vnode.shapeFlag & 4) { + const proxyToUse = withProxy || proxy; + result = normalizeVNode( + render.call( + proxyToUse, + proxyToUse, + renderCache, + props, + setupState, + data, + ctx + ) + ); + fallthroughAttrs = attrs; + } else { + const render2 = Component; + if ( true && attrs === props) { + markAttrsAccessed(); + } + result = normalizeVNode( + render2.length > 1 ? render2( + props, + true ? { + get attrs() { + markAttrsAccessed(); + return attrs; + }, + slots, + emit + } : 0 + ) : render2( + props, + null + /* we know it doesn't need it */ + ) + ); + fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs); + } + } catch (err) { + blockStack.length = 0; + handleError(err, instance, 1); + result = createVNode(Comment); + } + let root = result; + let setRoot = void 0; + if ( true && result.patchFlag > 0 && result.patchFlag & 2048) { + [root, setRoot] = getChildRoot(result); + } + if (fallthroughAttrs && inheritAttrs !== false) { + const keys = Object.keys(fallthroughAttrs); + const { shapeFlag } = root; + if (keys.length) { + if (shapeFlag & (1 | 6)) { + if (propsOptions && keys.some(_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isModelListener)) { + fallthroughAttrs = filterModelListeners( + fallthroughAttrs, + propsOptions + ); + } + root = cloneVNode(root, fallthroughAttrs); + } else if ( true && !accessedAttrs && root.type !== Comment) { + const allAttrs = Object.keys(attrs); + const eventAttrs = []; + const extraAttrs = []; + for (let i = 0, l = allAttrs.length; i < l; i++) { + const key = allAttrs[i]; + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isOn)(key)) { + if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isModelListener)(key)) { + eventAttrs.push(key[2].toLowerCase() + key.slice(3)); + } + } else { + extraAttrs.push(key); + } + } + if (extraAttrs.length) { + warn( + `Extraneous non-props attributes (${extraAttrs.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.` + ); + } + if (eventAttrs.length) { + warn( + `Extraneous non-emits event listeners (${eventAttrs.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the "emits" option.` + ); + } + } + } + } + if (vnode.dirs) { + if ( true && !isElementRoot(root)) { + warn( + `Runtime directive used on component with non-element root node. The directives will not function as intended.` + ); + } + root = cloneVNode(root); + root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs; + } + if (vnode.transition) { + if ( true && !isElementRoot(root)) { + warn( + `Component inside renders non-element root node that cannot be animated.` + ); + } + root.transition = vnode.transition; + } + if ( true && setRoot) { + setRoot(root); + } else { + result = root; + } + setCurrentRenderingInstance(prev); + return result; +} +const getChildRoot = (vnode) => { + const rawChildren = vnode.children; + const dynamicChildren = vnode.dynamicChildren; + const childRoot = filterSingleRoot(rawChildren); + if (!childRoot) { + return [vnode, void 0]; + } + const index = rawChildren.indexOf(childRoot); + const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1; + const setRoot = (updatedRoot) => { + rawChildren[index] = updatedRoot; + if (dynamicChildren) { + if (dynamicIndex > -1) { + dynamicChildren[dynamicIndex] = updatedRoot; + } else if (updatedRoot.patchFlag > 0) { + vnode.dynamicChildren = [...dynamicChildren, updatedRoot]; + } + } + }; + return [normalizeVNode(childRoot), setRoot]; +}; +function filterSingleRoot(children) { + let singleRoot; + for (let i = 0; i < children.length; i++) { + const child = children[i]; + if (isVNode(child)) { + if (child.type !== Comment || child.children === "v-if") { + if (singleRoot) { + return; + } else { + singleRoot = child; + } + } + } else { + return; + } + } + return singleRoot; +} +const getFunctionalFallthrough = (attrs) => { + let res; + for (const key in attrs) { + if (key === "class" || key === "style" || (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isOn)(key)) { + (res || (res = {}))[key] = attrs[key]; + } + } + return res; +}; +const filterModelListeners = (attrs, props) => { + const res = {}; + for (const key in attrs) { + if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isModelListener)(key) || !(key.slice(9) in props)) { + res[key] = attrs[key]; + } + } + return res; +}; +const isElementRoot = (vnode) => { + return vnode.shapeFlag & (6 | 1) || vnode.type === Comment; +}; +function shouldUpdateComponent(prevVNode, nextVNode, optimized) { + const { props: prevProps, children: prevChildren, component } = prevVNode; + const { props: nextProps, children: nextChildren, patchFlag } = nextVNode; + const emits = component.emitsOptions; + if ( true && (prevChildren || nextChildren) && isHmrUpdating) { + return true; + } + if (nextVNode.dirs || nextVNode.transition) { + return true; + } + if (optimized && patchFlag >= 0) { + if (patchFlag & 1024) { + return true; + } + if (patchFlag & 16) { + if (!prevProps) { + return !!nextProps; + } + return hasPropsChanged(prevProps, nextProps, emits); + } else if (patchFlag & 8) { + const dynamicProps = nextVNode.dynamicProps; + for (let i = 0; i < dynamicProps.length; i++) { + const key = dynamicProps[i]; + if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) { + return true; + } + } + } + } else { + if (prevChildren || nextChildren) { + if (!nextChildren || !nextChildren.$stable) { + return true; + } + } + if (prevProps === nextProps) { + return false; + } + if (!prevProps) { + return !!nextProps; + } + if (!nextProps) { + return true; + } + return hasPropsChanged(prevProps, nextProps, emits); + } + return false; +} +function hasPropsChanged(prevProps, nextProps, emitsOptions) { + const nextKeys = Object.keys(nextProps); + if (nextKeys.length !== Object.keys(prevProps).length) { + return true; + } + for (let i = 0; i < nextKeys.length; i++) { + const key = nextKeys[i]; + if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) { + return true; + } + } + return false; +} +function updateHOCHostEl({ vnode, parent }, el) { + while (parent && parent.subTree === vnode) { + (vnode = parent.vnode).el = el; + parent = parent.parent; + } +} + +const isSuspense = (type) => type.__isSuspense; +const SuspenseImpl = { + name: "Suspense", + // In order to make Suspense tree-shakable, we need to avoid importing it + // directly in the renderer. The renderer checks for the __isSuspense flag + // on a vnode's type and calls the `process` method, passing in renderer + // internals. + __isSuspense: true, + process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) { + if (n1 == null) { + mountSuspense( + n2, + container, + anchor, + parentComponent, + parentSuspense, + isSVG, + slotScopeIds, + optimized, + rendererInternals + ); + } else { + patchSuspense( + n1, + n2, + container, + anchor, + parentComponent, + isSVG, + slotScopeIds, + optimized, + rendererInternals + ); + } + }, + hydrate: hydrateSuspense, + create: createSuspenseBoundary, + normalize: normalizeSuspenseChildren +}; +const Suspense = SuspenseImpl ; +function triggerEvent(vnode, name) { + const eventListener = vnode.props && vnode.props[name]; + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(eventListener)) { + eventListener(); + } +} +function mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) { + const { + p: patch, + o: { createElement } + } = rendererInternals; + const hiddenContainer = createElement("div"); + const suspense = vnode.suspense = createSuspenseBoundary( + vnode, + parentSuspense, + parentComponent, + container, + hiddenContainer, + anchor, + isSVG, + slotScopeIds, + optimized, + rendererInternals + ); + patch( + null, + suspense.pendingBranch = vnode.ssContent, + hiddenContainer, + null, + parentComponent, + suspense, + isSVG, + slotScopeIds + ); + if (suspense.deps > 0) { + triggerEvent(vnode, "onPending"); + triggerEvent(vnode, "onFallback"); + patch( + null, + vnode.ssFallback, + container, + anchor, + parentComponent, + null, + // fallback tree will not have suspense context + isSVG, + slotScopeIds + ); + setActiveBranch(suspense, vnode.ssFallback); + } else { + suspense.resolve(false, true); + } +} +function patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) { + const suspense = n2.suspense = n1.suspense; + suspense.vnode = n2; + n2.el = n1.el; + const newBranch = n2.ssContent; + const newFallback = n2.ssFallback; + const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense; + if (pendingBranch) { + suspense.pendingBranch = newBranch; + if (isSameVNodeType(newBranch, pendingBranch)) { + patch( + pendingBranch, + newBranch, + suspense.hiddenContainer, + null, + parentComponent, + suspense, + isSVG, + slotScopeIds, + optimized + ); + if (suspense.deps <= 0) { + suspense.resolve(); + } else if (isInFallback) { + patch( + activeBranch, + newFallback, + container, + anchor, + parentComponent, + null, + // fallback tree will not have suspense context + isSVG, + slotScopeIds, + optimized + ); + setActiveBranch(suspense, newFallback); + } + } else { + suspense.pendingId++; + if (isHydrating) { + suspense.isHydrating = false; + suspense.activeBranch = pendingBranch; + } else { + unmount(pendingBranch, parentComponent, suspense); + } + suspense.deps = 0; + suspense.effects.length = 0; + suspense.hiddenContainer = createElement("div"); + if (isInFallback) { + patch( + null, + newBranch, + suspense.hiddenContainer, + null, + parentComponent, + suspense, + isSVG, + slotScopeIds, + optimized + ); + if (suspense.deps <= 0) { + suspense.resolve(); + } else { + patch( + activeBranch, + newFallback, + container, + anchor, + parentComponent, + null, + // fallback tree will not have suspense context + isSVG, + slotScopeIds, + optimized + ); + setActiveBranch(suspense, newFallback); + } + } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { + patch( + activeBranch, + newBranch, + container, + anchor, + parentComponent, + suspense, + isSVG, + slotScopeIds, + optimized + ); + suspense.resolve(true); + } else { + patch( + null, + newBranch, + suspense.hiddenContainer, + null, + parentComponent, + suspense, + isSVG, + slotScopeIds, + optimized + ); + if (suspense.deps <= 0) { + suspense.resolve(); + } + } + } + } else { + if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { + patch( + activeBranch, + newBranch, + container, + anchor, + parentComponent, + suspense, + isSVG, + slotScopeIds, + optimized + ); + setActiveBranch(suspense, newBranch); + } else { + triggerEvent(n2, "onPending"); + suspense.pendingBranch = newBranch; + suspense.pendingId++; + patch( + null, + newBranch, + suspense.hiddenContainer, + null, + parentComponent, + suspense, + isSVG, + slotScopeIds, + optimized + ); + if (suspense.deps <= 0) { + suspense.resolve(); + } else { + const { timeout, pendingId } = suspense; + if (timeout > 0) { + setTimeout(() => { + if (suspense.pendingId === pendingId) { + suspense.fallback(newFallback); + } + }, timeout); + } else if (timeout === 0) { + suspense.fallback(newFallback); + } + } + } + } +} +let hasWarned = false; +function createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals, isHydrating = false) { + if ( true && !hasWarned) { + hasWarned = true; + console[console.info ? "info" : "log"]( + ` is an experimental feature and its API will likely change.` + ); + } + const { + p: patch, + m: move, + um: unmount, + n: next, + o: { parentNode, remove } + } = rendererInternals; + let parentSuspenseId; + const isSuspensible = isVNodeSuspensible(vnode); + if (isSuspensible) { + if (parentSuspense == null ? void 0 : parentSuspense.pendingBranch) { + parentSuspenseId = parentSuspense.pendingId; + parentSuspense.deps++; + } + } + const timeout = vnode.props ? (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toNumber)(vnode.props.timeout) : void 0; + if (true) { + assertNumber(timeout, `Suspense timeout`); + } + const suspense = { + vnode, + parent: parentSuspense, + parentComponent, + isSVG, + container, + hiddenContainer, + anchor, + deps: 0, + pendingId: 0, + timeout: typeof timeout === "number" ? timeout : -1, + activeBranch: null, + pendingBranch: null, + isInFallback: true, + isHydrating, + isUnmounted: false, + effects: [], + resolve(resume = false, sync = false) { + if (true) { + if (!resume && !suspense.pendingBranch) { + throw new Error( + `suspense.resolve() is called without a pending branch.` + ); + } + if (suspense.isUnmounted) { + throw new Error( + `suspense.resolve() is called on an already unmounted suspense boundary.` + ); + } + } + const { + vnode: vnode2, + activeBranch, + pendingBranch, + pendingId, + effects, + parentComponent: parentComponent2, + container: container2 + } = suspense; + if (suspense.isHydrating) { + suspense.isHydrating = false; + } else if (!resume) { + const delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === "out-in"; + if (delayEnter) { + activeBranch.transition.afterLeave = () => { + if (pendingId === suspense.pendingId) { + move(pendingBranch, container2, anchor2, 0); + } + }; + } + let { anchor: anchor2 } = suspense; + if (activeBranch) { + anchor2 = next(activeBranch); + unmount(activeBranch, parentComponent2, suspense, true); + } + if (!delayEnter) { + move(pendingBranch, container2, anchor2, 0); + } + } + setActiveBranch(suspense, pendingBranch); + suspense.pendingBranch = null; + suspense.isInFallback = false; + let parent = suspense.parent; + let hasUnresolvedAncestor = false; + while (parent) { + if (parent.pendingBranch) { + parent.effects.push(...effects); + hasUnresolvedAncestor = true; + break; + } + parent = parent.parent; + } + if (!hasUnresolvedAncestor) { + queuePostFlushCb(effects); + } + suspense.effects = []; + if (isSuspensible) { + if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) { + parentSuspense.deps--; + if (parentSuspense.deps === 0 && !sync) { + parentSuspense.resolve(); + } + } + } + triggerEvent(vnode2, "onResolve"); + }, + fallback(fallbackVNode) { + if (!suspense.pendingBranch) { + return; + } + const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, isSVG: isSVG2 } = suspense; + triggerEvent(vnode2, "onFallback"); + const anchor2 = next(activeBranch); + const mountFallback = () => { + if (!suspense.isInFallback) { + return; + } + patch( + null, + fallbackVNode, + container2, + anchor2, + parentComponent2, + null, + // fallback tree will not have suspense context + isSVG2, + slotScopeIds, + optimized + ); + setActiveBranch(suspense, fallbackVNode); + }; + const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === "out-in"; + if (delayEnter) { + activeBranch.transition.afterLeave = mountFallback; + } + suspense.isInFallback = true; + unmount( + activeBranch, + parentComponent2, + null, + // no suspense so unmount hooks fire now + true + // shouldRemove + ); + if (!delayEnter) { + mountFallback(); + } + }, + move(container2, anchor2, type) { + suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type); + suspense.container = container2; + }, + next() { + return suspense.activeBranch && next(suspense.activeBranch); + }, + registerDep(instance, setupRenderEffect) { + const isInPendingSuspense = !!suspense.pendingBranch; + if (isInPendingSuspense) { + suspense.deps++; + } + const hydratedEl = instance.vnode.el; + instance.asyncDep.catch((err) => { + handleError(err, instance, 0); + }).then((asyncSetupResult) => { + if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) { + return; + } + instance.asyncResolved = true; + const { vnode: vnode2 } = instance; + if (true) { + pushWarningContext(vnode2); + } + handleSetupResult(instance, asyncSetupResult, false); + if (hydratedEl) { + vnode2.el = hydratedEl; + } + const placeholder = !hydratedEl && instance.subTree.el; + setupRenderEffect( + instance, + vnode2, + // component may have been moved before resolve. + // if this is not a hydration, instance.subTree will be the comment + // placeholder. + parentNode(hydratedEl || instance.subTree.el), + // anchor will not be used if this is hydration, so only need to + // consider the comment placeholder case. + hydratedEl ? null : next(instance.subTree), + suspense, + isSVG, + optimized + ); + if (placeholder) { + remove(placeholder); + } + updateHOCHostEl(instance, vnode2.el); + if (true) { + popWarningContext(); + } + if (isInPendingSuspense && --suspense.deps === 0) { + suspense.resolve(); + } + }); + }, + unmount(parentSuspense2, doRemove) { + suspense.isUnmounted = true; + if (suspense.activeBranch) { + unmount( + suspense.activeBranch, + parentComponent, + parentSuspense2, + doRemove + ); + } + if (suspense.pendingBranch) { + unmount( + suspense.pendingBranch, + parentComponent, + parentSuspense2, + doRemove + ); + } + } + }; + return suspense; +} +function hydrateSuspense(node, vnode, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals, hydrateNode) { + const suspense = vnode.suspense = createSuspenseBoundary( + vnode, + parentSuspense, + parentComponent, + node.parentNode, + document.createElement("div"), + null, + isSVG, + slotScopeIds, + optimized, + rendererInternals, + true + /* hydrating */ + ); + const result = hydrateNode( + node, + suspense.pendingBranch = vnode.ssContent, + parentComponent, + suspense, + slotScopeIds, + optimized + ); + if (suspense.deps === 0) { + suspense.resolve(false, true); + } + return result; +} +function normalizeSuspenseChildren(vnode) { + const { shapeFlag, children } = vnode; + const isSlotChildren = shapeFlag & 32; + vnode.ssContent = normalizeSuspenseSlot( + isSlotChildren ? children.default : children + ); + vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment); +} +function normalizeSuspenseSlot(s) { + let block; + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(s)) { + const trackBlock = isBlockTreeEnabled && s._c; + if (trackBlock) { + s._d = false; + openBlock(); + } + s = s(); + if (trackBlock) { + s._d = true; + block = currentBlock; + closeBlock(); + } + } + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(s)) { + const singleChild = filterSingleRoot(s); + if ( true && !singleChild) { + warn(` slots expect a single root node.`); + } + s = singleChild; + } + s = normalizeVNode(s); + if (block && !s.dynamicChildren) { + s.dynamicChildren = block.filter((c) => c !== s); + } + return s; +} +function queueEffectWithSuspense(fn, suspense) { + if (suspense && suspense.pendingBranch) { + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(fn)) { + suspense.effects.push(...fn); + } else { + suspense.effects.push(fn); + } + } else { + queuePostFlushCb(fn); + } +} +function setActiveBranch(suspense, branch) { + suspense.activeBranch = branch; + const { vnode, parentComponent } = suspense; + const el = vnode.el = branch.el; + if (parentComponent && parentComponent.subTree === vnode) { + parentComponent.vnode.el = el; + updateHOCHostEl(parentComponent, el); + } +} +function isVNodeSuspensible(vnode) { + var _a; + return ((_a = vnode.props) == null ? void 0 : _a.suspensible) != null && vnode.props.suspensible !== false; +} + +function watchEffect(effect, options) { + return doWatch(effect, null, options); +} +function watchPostEffect(effect, options) { + return doWatch( + effect, + null, + true ? (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.extend)({}, options, { flush: "post" }) : 0 + ); +} +function watchSyncEffect(effect, options) { + return doWatch( + effect, + null, + true ? (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.extend)({}, options, { flush: "sync" }) : 0 + ); +} +const INITIAL_WATCHER_VALUE = {}; +function watch(source, cb, options) { + if ( true && !(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(cb)) { + warn( + `\`watch(fn, options?)\` signature has been moved to a separate API. Use \`watchEffect(fn, options?)\` instead. \`watch\` now only supports \`watch(source, cb, options?) signature.` + ); + } + return doWatch(source, cb, options); +} +function doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = _vue_shared__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJ) { + var _a; + if ( true && !cb) { + if (immediate !== void 0) { + warn( + `watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.` + ); + } + if (deep !== void 0) { + warn( + `watch() "deep" option is only respected when using the watch(source, callback, options?) signature.` + ); + } + } + const warnInvalidSource = (s) => { + warn( + `Invalid watch source: `, + s, + `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.` + ); + }; + const instance = (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)() === ((_a = currentInstance) == null ? void 0 : _a.scope) ? currentInstance : null; + let getter; + let forceTrigger = false; + let isMultiSource = false; + if ((0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isRef)(source)) { + getter = () => source.value; + forceTrigger = (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isShallow)(source); + } else if ((0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isReactive)(source)) { + getter = () => source; + deep = true; + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(source)) { + isMultiSource = true; + forceTrigger = source.some((s) => (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isReactive)(s) || (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isShallow)(s)); + getter = () => source.map((s) => { + if ((0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isRef)(s)) { + return s.value; + } else if ((0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isReactive)(s)) { + return traverse(s); + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(s)) { + return callWithErrorHandling(s, instance, 2); + } else { + true && warnInvalidSource(s); + } + }); + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(source)) { + if (cb) { + getter = () => callWithErrorHandling(source, instance, 2); + } else { + getter = () => { + if (instance && instance.isUnmounted) { + return; + } + if (cleanup) { + cleanup(); + } + return callWithAsyncErrorHandling( + source, + instance, + 3, + [onCleanup] + ); + }; + } + } else { + getter = _vue_shared__WEBPACK_IMPORTED_MODULE_1__.NOOP; + true && warnInvalidSource(source); + } + if (cb && deep) { + const baseGetter = getter; + getter = () => traverse(baseGetter()); + } + let cleanup; + let onCleanup = (fn) => { + cleanup = effect.onStop = () => { + callWithErrorHandling(fn, instance, 4); + }; + }; + let ssrCleanup; + if (isInSSRComponentSetup) { + onCleanup = _vue_shared__WEBPACK_IMPORTED_MODULE_1__.NOOP; + if (!cb) { + getter(); + } else if (immediate) { + callWithAsyncErrorHandling(cb, instance, 3, [ + getter(), + isMultiSource ? [] : void 0, + onCleanup + ]); + } + if (flush === "sync") { + const ctx = useSSRContext(); + ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []); + } else { + return _vue_shared__WEBPACK_IMPORTED_MODULE_1__.NOOP; + } + } + let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE; + const job = () => { + if (!effect.active) { + return; + } + if (cb) { + const newValue = effect.run(); + if (deep || forceTrigger || (isMultiSource ? newValue.some( + (v, i) => (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasChanged)(v, oldValue[i]) + ) : (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasChanged)(newValue, oldValue)) || false) { + if (cleanup) { + cleanup(); + } + callWithAsyncErrorHandling(cb, instance, 3, [ + newValue, + // pass undefined as the old value when it's changed for the first time + oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue, + onCleanup + ]); + oldValue = newValue; + } + } else { + effect.run(); + } + }; + job.allowRecurse = !!cb; + let scheduler; + if (flush === "sync") { + scheduler = job; + } else if (flush === "post") { + scheduler = () => queuePostRenderEffect(job, instance && instance.suspense); + } else { + job.pre = true; + if (instance) + job.id = instance.uid; + scheduler = () => queueJob(job); + } + const effect = new _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.ReactiveEffect(getter, scheduler); + if (true) { + effect.onTrack = onTrack; + effect.onTrigger = onTrigger; + } + if (cb) { + if (immediate) { + job(); + } else { + oldValue = effect.run(); + } + } else if (flush === "post") { + queuePostRenderEffect( + effect.run.bind(effect), + instance && instance.suspense + ); + } else { + effect.run(); + } + const unwatch = () => { + effect.stop(); + if (instance && instance.scope) { + (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.remove)(instance.scope.effects, effect); + } + }; + if (ssrCleanup) + ssrCleanup.push(unwatch); + return unwatch; +} +function instanceWatch(source, value, options) { + const publicThis = this.proxy; + const getter = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isString)(source) ? source.includes(".") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis); + let cb; + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(value)) { + cb = value; + } else { + cb = value.handler; + options = value; + } + const cur = currentInstance; + setCurrentInstance(this); + const res = doWatch(getter, cb.bind(publicThis), options); + if (cur) { + setCurrentInstance(cur); + } else { + unsetCurrentInstance(); + } + return res; +} +function createPathGetter(ctx, path) { + const segments = path.split("."); + return () => { + let cur = ctx; + for (let i = 0; i < segments.length && cur; i++) { + cur = cur[segments[i]]; + } + return cur; + }; +} +function traverse(value, seen) { + if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isObject)(value) || value["__v_skip"]) { + return value; + } + seen = seen || /* @__PURE__ */ new Set(); + if (seen.has(value)) { + return value; + } + seen.add(value); + if ((0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isRef)(value)) { + traverse(value.value, seen); + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(value)) { + for (let i = 0; i < value.length; i++) { + traverse(value[i], seen); + } + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isSet)(value) || (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isMap)(value)) { + value.forEach((v) => { + traverse(v, seen); + }); + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isPlainObject)(value)) { + for (const key in value) { + traverse(value[key], seen); + } + } + return value; +} + +function validateDirectiveName(name) { + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isBuiltInDirective)(name)) { + warn("Do not use built-in directive ids as custom directive id: " + name); + } +} +function withDirectives(vnode, directives) { + const internalInstance = currentRenderingInstance; + if (internalInstance === null) { + true && warn(`withDirectives can only be used inside render functions.`); + return vnode; + } + const instance = getExposeProxy(internalInstance) || internalInstance.proxy; + const bindings = vnode.dirs || (vnode.dirs = []); + for (let i = 0; i < directives.length; i++) { + let [dir, value, arg, modifiers = _vue_shared__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJ] = directives[i]; + if (dir) { + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(dir)) { + dir = { + mounted: dir, + updated: dir + }; + } + if (dir.deep) { + traverse(value); + } + bindings.push({ + dir, + instance, + value, + oldValue: void 0, + arg, + modifiers + }); + } + } + return vnode; +} +function invokeDirectiveHook(vnode, prevVNode, instance, name) { + const bindings = vnode.dirs; + const oldBindings = prevVNode && prevVNode.dirs; + for (let i = 0; i < bindings.length; i++) { + const binding = bindings[i]; + if (oldBindings) { + binding.oldValue = oldBindings[i].value; + } + let hook = binding.dir[name]; + if (hook) { + (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.pauseTracking)(); + callWithAsyncErrorHandling(hook, instance, 8, [ + vnode.el, + binding, + vnode, + prevVNode + ]); + (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.resetTracking)(); + } + } +} + +function useTransitionState() { + const state = { + isMounted: false, + isLeaving: false, + isUnmounting: false, + leavingVNodes: /* @__PURE__ */ new Map() + }; + onMounted(() => { + state.isMounted = true; + }); + onBeforeUnmount(() => { + state.isUnmounting = true; + }); + return state; +} +const TransitionHookValidator = [Function, Array]; +const BaseTransitionPropsValidators = { + mode: String, + appear: Boolean, + persisted: Boolean, + // enter + onBeforeEnter: TransitionHookValidator, + onEnter: TransitionHookValidator, + onAfterEnter: TransitionHookValidator, + onEnterCancelled: TransitionHookValidator, + // leave + onBeforeLeave: TransitionHookValidator, + onLeave: TransitionHookValidator, + onAfterLeave: TransitionHookValidator, + onLeaveCancelled: TransitionHookValidator, + // appear + onBeforeAppear: TransitionHookValidator, + onAppear: TransitionHookValidator, + onAfterAppear: TransitionHookValidator, + onAppearCancelled: TransitionHookValidator +}; +const BaseTransitionImpl = { + name: `BaseTransition`, + props: BaseTransitionPropsValidators, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const state = useTransitionState(); + let prevTransitionKey; + return () => { + const children = slots.default && getTransitionRawChildren(slots.default(), true); + if (!children || !children.length) { + return; + } + let child = children[0]; + if (children.length > 1) { + let hasFound = false; + for (const c of children) { + if (c.type !== Comment) { + if ( true && hasFound) { + warn( + " can only be used on a single element or component. Use for lists." + ); + break; + } + child = c; + hasFound = true; + if (false) + {} + } + } + } + const rawProps = (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toRaw)(props); + const { mode } = rawProps; + if ( true && mode && mode !== "in-out" && mode !== "out-in" && mode !== "default") { + warn(`invalid mode: ${mode}`); + } + if (state.isLeaving) { + return emptyPlaceholder(child); + } + const innerChild = getKeepAliveChild(child); + if (!innerChild) { + return emptyPlaceholder(child); + } + const enterHooks = resolveTransitionHooks( + innerChild, + rawProps, + state, + instance + ); + setTransitionHooks(innerChild, enterHooks); + const oldChild = instance.subTree; + const oldInnerChild = oldChild && getKeepAliveChild(oldChild); + let transitionKeyChanged = false; + const { getTransitionKey } = innerChild.type; + if (getTransitionKey) { + const key = getTransitionKey(); + if (prevTransitionKey === void 0) { + prevTransitionKey = key; + } else if (key !== prevTransitionKey) { + prevTransitionKey = key; + transitionKeyChanged = true; + } + } + if (oldInnerChild && oldInnerChild.type !== Comment && (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged)) { + const leavingHooks = resolveTransitionHooks( + oldInnerChild, + rawProps, + state, + instance + ); + setTransitionHooks(oldInnerChild, leavingHooks); + if (mode === "out-in") { + state.isLeaving = true; + leavingHooks.afterLeave = () => { + state.isLeaving = false; + if (instance.update.active !== false) { + instance.update(); + } + }; + return emptyPlaceholder(child); + } else if (mode === "in-out" && innerChild.type !== Comment) { + leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { + const leavingVNodesCache = getLeavingNodesForType( + state, + oldInnerChild + ); + leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; + el._leaveCb = () => { + earlyRemove(); + el._leaveCb = void 0; + delete enterHooks.delayedLeave; + }; + enterHooks.delayedLeave = delayedLeave; + }; + } + } + return child; + }; + } +}; +const BaseTransition = BaseTransitionImpl; +function getLeavingNodesForType(state, vnode) { + const { leavingVNodes } = state; + let leavingVNodesCache = leavingVNodes.get(vnode.type); + if (!leavingVNodesCache) { + leavingVNodesCache = /* @__PURE__ */ Object.create(null); + leavingVNodes.set(vnode.type, leavingVNodesCache); + } + return leavingVNodesCache; +} +function resolveTransitionHooks(vnode, props, state, instance) { + const { + appear, + mode, + persisted = false, + onBeforeEnter, + onEnter, + onAfterEnter, + onEnterCancelled, + onBeforeLeave, + onLeave, + onAfterLeave, + onLeaveCancelled, + onBeforeAppear, + onAppear, + onAfterAppear, + onAppearCancelled + } = props; + const key = String(vnode.key); + const leavingVNodesCache = getLeavingNodesForType(state, vnode); + const callHook = (hook, args) => { + hook && callWithAsyncErrorHandling( + hook, + instance, + 9, + args + ); + }; + const callAsyncHook = (hook, args) => { + const done = args[1]; + callHook(hook, args); + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(hook)) { + if (hook.every((hook2) => hook2.length <= 1)) + done(); + } else if (hook.length <= 1) { + done(); + } + }; + const hooks = { + mode, + persisted, + beforeEnter(el) { + let hook = onBeforeEnter; + if (!state.isMounted) { + if (appear) { + hook = onBeforeAppear || onBeforeEnter; + } else { + return; + } + } + if (el._leaveCb) { + el._leaveCb( + true + /* cancelled */ + ); + } + const leavingVNode = leavingVNodesCache[key]; + if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el._leaveCb) { + leavingVNode.el._leaveCb(); + } + callHook(hook, [el]); + }, + enter(el) { + let hook = onEnter; + let afterHook = onAfterEnter; + let cancelHook = onEnterCancelled; + if (!state.isMounted) { + if (appear) { + hook = onAppear || onEnter; + afterHook = onAfterAppear || onAfterEnter; + cancelHook = onAppearCancelled || onEnterCancelled; + } else { + return; + } + } + let called = false; + const done = el._enterCb = (cancelled) => { + if (called) + return; + called = true; + if (cancelled) { + callHook(cancelHook, [el]); + } else { + callHook(afterHook, [el]); + } + if (hooks.delayedLeave) { + hooks.delayedLeave(); + } + el._enterCb = void 0; + }; + if (hook) { + callAsyncHook(hook, [el, done]); + } else { + done(); + } + }, + leave(el, remove) { + const key2 = String(vnode.key); + if (el._enterCb) { + el._enterCb( + true + /* cancelled */ + ); + } + if (state.isUnmounting) { + return remove(); + } + callHook(onBeforeLeave, [el]); + let called = false; + const done = el._leaveCb = (cancelled) => { + if (called) + return; + called = true; + remove(); + if (cancelled) { + callHook(onLeaveCancelled, [el]); + } else { + callHook(onAfterLeave, [el]); + } + el._leaveCb = void 0; + if (leavingVNodesCache[key2] === vnode) { + delete leavingVNodesCache[key2]; + } + }; + leavingVNodesCache[key2] = vnode; + if (onLeave) { + callAsyncHook(onLeave, [el, done]); + } else { + done(); + } + }, + clone(vnode2) { + return resolveTransitionHooks(vnode2, props, state, instance); + } + }; + return hooks; +} +function emptyPlaceholder(vnode) { + if (isKeepAlive(vnode)) { + vnode = cloneVNode(vnode); + vnode.children = null; + return vnode; + } +} +function getKeepAliveChild(vnode) { + return isKeepAlive(vnode) ? vnode.children ? vnode.children[0] : void 0 : vnode; +} +function setTransitionHooks(vnode, hooks) { + if (vnode.shapeFlag & 6 && vnode.component) { + setTransitionHooks(vnode.component.subTree, hooks); + } else if (vnode.shapeFlag & 128) { + vnode.ssContent.transition = hooks.clone(vnode.ssContent); + vnode.ssFallback.transition = hooks.clone(vnode.ssFallback); + } else { + vnode.transition = hooks; + } +} +function getTransitionRawChildren(children, keepComment = false, parentKey) { + let ret = []; + let keyedFragmentCount = 0; + for (let i = 0; i < children.length; i++) { + let child = children[i]; + const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i); + if (child.type === Fragment) { + if (child.patchFlag & 128) + keyedFragmentCount++; + ret = ret.concat( + getTransitionRawChildren(child.children, keepComment, key) + ); + } else if (keepComment || child.type !== Comment) { + ret.push(key != null ? cloneVNode(child, { key }) : child); + } + } + if (keyedFragmentCount > 1) { + for (let i = 0; i < ret.length; i++) { + ret[i].patchFlag = -2; + } + } + return ret; +} + +function defineComponent(options, extraOptions) { + return (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(options) ? ( + // #8326: extend call and options.name access are considered side-effects + // by Rollup, so we have to wrap it in a pure-annotated IIFE. + /* @__PURE__ */ (() => (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.extend)({ name: options.name }, extraOptions, { setup: options }))() + ) : options; +} + +const isAsyncWrapper = (i) => !!i.type.__asyncLoader; +function defineAsyncComponent(source) { + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(source)) { + source = { loader: source }; + } + const { + loader, + loadingComponent, + errorComponent, + delay = 200, + timeout, + // undefined = never times out + suspensible = true, + onError: userOnError + } = source; + let pendingRequest = null; + let resolvedComp; + let retries = 0; + const retry = () => { + retries++; + pendingRequest = null; + return load(); + }; + const load = () => { + let thisRequest; + return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => { + err = err instanceof Error ? err : new Error(String(err)); + if (userOnError) { + return new Promise((resolve, reject) => { + const userRetry = () => resolve(retry()); + const userFail = () => reject(err); + userOnError(err, userRetry, userFail, retries + 1); + }); + } else { + throw err; + } + }).then((comp) => { + if (thisRequest !== pendingRequest && pendingRequest) { + return pendingRequest; + } + if ( true && !comp) { + warn( + `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.` + ); + } + if (comp && (comp.__esModule || comp[Symbol.toStringTag] === "Module")) { + comp = comp.default; + } + if ( true && comp && !(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isObject)(comp) && !(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(comp)) { + throw new Error(`Invalid async component load result: ${comp}`); + } + resolvedComp = comp; + return comp; + })); + }; + return defineComponent({ + name: "AsyncComponentWrapper", + __asyncLoader: load, + get __asyncResolved() { + return resolvedComp; + }, + setup() { + const instance = currentInstance; + if (resolvedComp) { + return () => createInnerComp(resolvedComp, instance); + } + const onError = (err) => { + pendingRequest = null; + handleError( + err, + instance, + 13, + !errorComponent + /* do not throw in dev if user provided error component */ + ); + }; + if (suspensible && instance.suspense || isInSSRComponentSetup) { + return load().then((comp) => { + return () => createInnerComp(comp, instance); + }).catch((err) => { + onError(err); + return () => errorComponent ? createVNode(errorComponent, { + error: err + }) : null; + }); + } + const loaded = (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.ref)(false); + const error = (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.ref)(); + const delayed = (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.ref)(!!delay); + if (delay) { + setTimeout(() => { + delayed.value = false; + }, delay); + } + if (timeout != null) { + setTimeout(() => { + if (!loaded.value && !error.value) { + const err = new Error( + `Async component timed out after ${timeout}ms.` + ); + onError(err); + error.value = err; + } + }, timeout); + } + load().then(() => { + loaded.value = true; + if (instance.parent && isKeepAlive(instance.parent.vnode)) { + queueJob(instance.parent.update); + } + }).catch((err) => { + onError(err); + error.value = err; + }); + return () => { + if (loaded.value && resolvedComp) { + return createInnerComp(resolvedComp, instance); + } else if (error.value && errorComponent) { + return createVNode(errorComponent, { + error: error.value + }); + } else if (loadingComponent && !delayed.value) { + return createVNode(loadingComponent); + } + }; + } + }); +} +function createInnerComp(comp, parent) { + const { ref: ref2, props, children, ce } = parent.vnode; + const vnode = createVNode(comp, props, children); + vnode.ref = ref2; + vnode.ce = ce; + delete parent.vnode.ce; + return vnode; +} + +const isKeepAlive = (vnode) => vnode.type.__isKeepAlive; +const KeepAliveImpl = { + name: `KeepAlive`, + // Marker for special handling inside the renderer. We are not using a === + // check directly on KeepAlive in the renderer, because importing it directly + // would prevent it from being tree-shaken. + __isKeepAlive: true, + props: { + include: [String, RegExp, Array], + exclude: [String, RegExp, Array], + max: [String, Number] + }, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const sharedContext = instance.ctx; + if (!sharedContext.renderer) { + return () => { + const children = slots.default && slots.default(); + return children && children.length === 1 ? children[0] : children; + }; + } + const cache = /* @__PURE__ */ new Map(); + const keys = /* @__PURE__ */ new Set(); + let current = null; + if (true) { + instance.__v_cache = cache; + } + const parentSuspense = instance.suspense; + const { + renderer: { + p: patch, + m: move, + um: _unmount, + o: { createElement } + } + } = sharedContext; + const storageContainer = createElement("div"); + sharedContext.activate = (vnode, container, anchor, isSVG, optimized) => { + const instance2 = vnode.component; + move(vnode, container, anchor, 0, parentSuspense); + patch( + instance2.vnode, + vnode, + container, + anchor, + instance2, + parentSuspense, + isSVG, + vnode.slotScopeIds, + optimized + ); + queuePostRenderEffect(() => { + instance2.isDeactivated = false; + if (instance2.a) { + (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.invokeArrayFns)(instance2.a); + } + const vnodeHook = vnode.props && vnode.props.onVnodeMounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode); + } + }, parentSuspense); + if (true) { + devtoolsComponentAdded(instance2); + } + }; + sharedContext.deactivate = (vnode) => { + const instance2 = vnode.component; + move(vnode, storageContainer, null, 1, parentSuspense); + queuePostRenderEffect(() => { + if (instance2.da) { + (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.invokeArrayFns)(instance2.da); + } + const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode); + } + instance2.isDeactivated = true; + }, parentSuspense); + if (true) { + devtoolsComponentAdded(instance2); + } + }; + function unmount(vnode) { + resetShapeFlag(vnode); + _unmount(vnode, instance, parentSuspense, true); + } + function pruneCache(filter) { + cache.forEach((vnode, key) => { + const name = getComponentName(vnode.type); + if (name && (!filter || !filter(name))) { + pruneCacheEntry(key); + } + }); + } + function pruneCacheEntry(key) { + const cached = cache.get(key); + if (!current || !isSameVNodeType(cached, current)) { + unmount(cached); + } else if (current) { + resetShapeFlag(current); + } + cache.delete(key); + keys.delete(key); + } + watch( + () => [props.include, props.exclude], + ([include, exclude]) => { + include && pruneCache((name) => matches(include, name)); + exclude && pruneCache((name) => !matches(exclude, name)); + }, + // prune post-render after `current` has been updated + { flush: "post", deep: true } + ); + let pendingCacheKey = null; + const cacheSubtree = () => { + if (pendingCacheKey != null) { + cache.set(pendingCacheKey, getInnerChild(instance.subTree)); + } + }; + onMounted(cacheSubtree); + onUpdated(cacheSubtree); + onBeforeUnmount(() => { + cache.forEach((cached) => { + const { subTree, suspense } = instance; + const vnode = getInnerChild(subTree); + if (cached.type === vnode.type && cached.key === vnode.key) { + resetShapeFlag(vnode); + const da = vnode.component.da; + da && queuePostRenderEffect(da, suspense); + return; + } + unmount(cached); + }); + }); + return () => { + pendingCacheKey = null; + if (!slots.default) { + return null; + } + const children = slots.default(); + const rawVNode = children[0]; + if (children.length > 1) { + if (true) { + warn(`KeepAlive should contain exactly one component child.`); + } + current = null; + return children; + } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) { + current = null; + return rawVNode; + } + let vnode = getInnerChild(rawVNode); + const comp = vnode.type; + const name = getComponentName( + isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp + ); + const { include, exclude, max } = props; + if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) { + current = vnode; + return rawVNode; + } + const key = vnode.key == null ? comp : vnode.key; + const cachedVNode = cache.get(key); + if (vnode.el) { + vnode = cloneVNode(vnode); + if (rawVNode.shapeFlag & 128) { + rawVNode.ssContent = vnode; + } + } + pendingCacheKey = key; + if (cachedVNode) { + vnode.el = cachedVNode.el; + vnode.component = cachedVNode.component; + if (vnode.transition) { + setTransitionHooks(vnode, vnode.transition); + } + vnode.shapeFlag |= 512; + keys.delete(key); + keys.add(key); + } else { + keys.add(key); + if (max && keys.size > parseInt(max, 10)) { + pruneCacheEntry(keys.values().next().value); + } + } + vnode.shapeFlag |= 256; + current = vnode; + return isSuspense(rawVNode.type) ? rawVNode : vnode; + }; + } +}; +const KeepAlive = KeepAliveImpl; +function matches(pattern, name) { + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(pattern)) { + return pattern.some((p) => matches(p, name)); + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isString)(pattern)) { + return pattern.split(",").includes(name); + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isRegExp)(pattern)) { + return pattern.test(name); + } + return false; +} +function onActivated(hook, target) { + registerKeepAliveHook(hook, "a", target); +} +function onDeactivated(hook, target) { + registerKeepAliveHook(hook, "da", target); +} +function registerKeepAliveHook(hook, type, target = currentInstance) { + const wrappedHook = hook.__wdc || (hook.__wdc = () => { + let current = target; + while (current) { + if (current.isDeactivated) { + return; + } + current = current.parent; + } + return hook(); + }); + injectHook(type, wrappedHook, target); + if (target) { + let current = target.parent; + while (current && current.parent) { + if (isKeepAlive(current.parent.vnode)) { + injectToKeepAliveRoot(wrappedHook, type, target, current); + } + current = current.parent; + } + } +} +function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { + const injected = injectHook( + type, + hook, + keepAliveRoot, + true + /* prepend */ + ); + onUnmounted(() => { + (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.remove)(keepAliveRoot[type], injected); + }, target); +} +function resetShapeFlag(vnode) { + vnode.shapeFlag &= ~256; + vnode.shapeFlag &= ~512; +} +function getInnerChild(vnode) { + return vnode.shapeFlag & 128 ? vnode.ssContent : vnode; +} + +function injectHook(type, hook, target = currentInstance, prepend = false) { + if (target) { + const hooks = target[type] || (target[type] = []); + const wrappedHook = hook.__weh || (hook.__weh = (...args) => { + if (target.isUnmounted) { + return; + } + (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.pauseTracking)(); + setCurrentInstance(target); + const res = callWithAsyncErrorHandling(hook, target, type, args); + unsetCurrentInstance(); + (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.resetTracking)(); + return res; + }); + if (prepend) { + hooks.unshift(wrappedHook); + } else { + hooks.push(wrappedHook); + } + return wrappedHook; + } else if (true) { + const apiName = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)(ErrorTypeStrings[type].replace(/ hook$/, "")); + warn( + `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` ) + ); + } +} +const createHook = (lifecycle) => (hook, target = currentInstance) => ( + // post-create lifecycle registrations are noops during SSR (except for serverPrefetch) + (!isInSSRComponentSetup || lifecycle === "sp") && injectHook(lifecycle, (...args) => hook(...args), target) +); +const onBeforeMount = createHook("bm"); +const onMounted = createHook("m"); +const onBeforeUpdate = createHook("bu"); +const onUpdated = createHook("u"); +const onBeforeUnmount = createHook("bum"); +const onUnmounted = createHook("um"); +const onServerPrefetch = createHook("sp"); +const onRenderTriggered = createHook( + "rtg" +); +const onRenderTracked = createHook( + "rtc" +); +function onErrorCaptured(hook, target = currentInstance) { + injectHook("ec", hook, target); +} + +const COMPONENTS = "components"; +const DIRECTIVES = "directives"; +function resolveComponent(name, maybeSelfReference) { + return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name; +} +const NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); +function resolveDynamicComponent(component) { + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isString)(component)) { + return resolveAsset(COMPONENTS, component, false) || component; + } else { + return component || NULL_DYNAMIC_COMPONENT; + } +} +function resolveDirective(name) { + return resolveAsset(DIRECTIVES, name); +} +function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { + const instance = currentRenderingInstance || currentInstance; + if (instance) { + const Component = instance.type; + if (type === COMPONENTS) { + const selfName = getComponentName( + Component, + false + /* do not include inferred name to avoid breaking existing code */ + ); + if (selfName && (selfName === name || selfName === (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.camelize)(name) || selfName === (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.capitalize)((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.camelize)(name)))) { + return Component; + } + } + const res = ( + // local registration + // check instance[type] first which is resolved for options API + resolve(instance[type] || Component[type], name) || // global registration + resolve(instance.appContext[type], name) + ); + if (!res && maybeSelfReference) { + return Component; + } + if ( true && warnMissing && !res) { + const extra = type === COMPONENTS ? ` +If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``; + warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`); + } + return res; + } else if (true) { + warn( + `resolve${(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.capitalize)(type.slice(0, -1))} can only be used in render() or setup().` + ); + } +} +function resolve(registry, name) { + return registry && (registry[name] || registry[(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.camelize)(name)] || registry[(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.capitalize)((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.camelize)(name))]); +} + +function renderList(source, renderItem, cache, index) { + let ret; + const cached = cache && cache[index]; + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(source) || (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isString)(source)) { + ret = new Array(source.length); + for (let i = 0, l = source.length; i < l; i++) { + ret[i] = renderItem(source[i], i, void 0, cached && cached[i]); + } + } else if (typeof source === "number") { + if ( true && !Number.isInteger(source)) { + warn(`The v-for range expect an integer value but got ${source}.`); + } + ret = new Array(source); + for (let i = 0; i < source; i++) { + ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]); + } + } else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isObject)(source)) { + if (source[Symbol.iterator]) { + ret = Array.from( + source, + (item, i) => renderItem(item, i, void 0, cached && cached[i]) + ); + } else { + const keys = Object.keys(source); + ret = new Array(keys.length); + for (let i = 0, l = keys.length; i < l; i++) { + const key = keys[i]; + ret[i] = renderItem(source[key], key, i, cached && cached[i]); + } + } + } else { + ret = []; + } + if (cache) { + cache[index] = ret; + } + return ret; +} + +function createSlots(slots, dynamicSlots) { + for (let i = 0; i < dynamicSlots.length; i++) { + const slot = dynamicSlots[i]; + if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(slot)) { + for (let j = 0; j < slot.length; j++) { + slots[slot[j].name] = slot[j].fn; + } + } else if (slot) { + slots[slot.name] = slot.key ? (...args) => { + const res = slot.fn(...args); + if (res) + res.key = slot.key; + return res; + } : slot.fn; + } + } + return slots; +} + +function renderSlot(slots, name, props = {}, fallback, noSlotted) { + if (currentRenderingInstance.isCE || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.isCE) { + if (name !== "default") + props.name = name; + return createVNode("slot", props, fallback && fallback()); + } + let slot = slots[name]; + if ( true && slot && slot.length > 1) { + warn( + `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.` + ); + slot = () => []; + } + if (slot && slot._c) { + slot._d = false; + } + openBlock(); + const validSlotContent = slot && ensureValidVNode(slot(props)); + const rendered = createBlock( + Fragment, + { + key: props.key || // slot content array of a dynamic conditional slot may have a branch + // key attached in the `createSlots` helper, respect that + validSlotContent && validSlotContent.key || `_${name}` + }, + validSlotContent || (fallback ? fallback() : []), + validSlotContent && slots._ === 1 ? 64 : -2 + ); + if (!noSlotted && rendered.scopeId) { + rendered.slotScopeIds = [rendered.scopeId + "-s"]; + } + if (slot && slot._c) { + slot._d = true; + } + return rendered; +} +function ensureValidVNode(vnodes) { + return vnodes.some((child) => { + if (!isVNode(child)) + return true; + if (child.type === Comment) + return false; + if (child.type === Fragment && !ensureValidVNode(child.children)) + return false; + return true; + }) ? vnodes : null; +} + +function toHandlers(obj, preserveCaseIfNecessary) { + const ret = {}; + if ( true && !(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isObject)(obj)) { + warn(`v-on with no argument expects an object value.`); + return ret; + } + for (const key in obj) { + ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)(key)] = obj[key]; + } + return ret; +} + +const getPublicInstance = (i) => { + if (!i) + return null; + if (isStatefulComponent(i)) + return getExposeProxy(i) || i.proxy; + return getPublicInstance(i.parent); +}; +const publicPropertiesMap = ( + // Move PURE marker to new line to workaround compiler discarding it + // due to type annotation + /* @__PURE__ */ (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.extend)(/* @__PURE__ */ Object.create(null), { + $: (i) => i, + $el: (i) => i.vnode.el, + $data: (i) => i.data, + $props: (i) => true ? (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.shallowReadonly)(i.props) : 0, + $attrs: (i) => true ? (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.shallowReadonly)(i.attrs) : 0, + $slots: (i) => true ? (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.shallowReadonly)(i.slots) : 0, + $refs: (i) => true ? (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.shallowReadonly)(i.refs) : 0, + $parent: (i) => getPublicInstance(i.parent), + $root: (i) => getPublicInstance(i.root), + $emit: (i) => i.emit, + $options: (i) => true ? resolveMergedOptions(i) : 0, + $forceUpdate: (i) => i.f || (i.f = () => queueJob(i.update)), + $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)), + $watch: (i) => true ? instanceWatch.bind(i) : 0 + }) +); +const isReservedPrefix = (key) => key === "_" || key === "$"; +const hasSetupBinding = (state, key) => state !== _vue_shared__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJ && !state.__isScriptSetup && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(state, key); +const PublicInstanceProxyHandlers = { + get({ _: instance }, key) { + const { ctx, setupState, data, props, accessCache, type, appContext } = instance; + if ( true && key === "__isVue") { + return true; + } + let normalizedProps; + if (key[0] !== "$") { + const n = accessCache[key]; + if (n !== void 0) { + switch (n) { + case 1 /* SETUP */: + return setupState[key]; + case 2 /* DATA */: + return data[key]; + case 4 /* CONTEXT */: + return ctx[key]; + case 3 /* PROPS */: + return props[key]; + } + } else if (hasSetupBinding(setupState, key)) { + accessCache[key] = 1 /* SETUP */; + return setupState[key]; + } else if (data !== _vue_shared__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJ && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(data, key)) { + accessCache[key] = 2 /* DATA */; + return data[key]; + } else if ( + // only cache other properties when instance has declared (thus stable) + // props + (normalizedProps = instance.propsOptions[0]) && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(normalizedProps, key) + ) { + accessCache[key] = 3 /* PROPS */; + return props[key]; + } else if (ctx !== _vue_shared__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJ && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(ctx, key)) { + accessCache[key] = 4 /* CONTEXT */; + return ctx[key]; + } else if ( false || shouldCacheAccess) { + accessCache[key] = 0 /* OTHER */; + } + } + const publicGetter = publicPropertiesMap[key]; + let cssModule, globalProperties; + if (publicGetter) { + if (key === "$attrs") { + (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.track)(instance, "get", key); + true && markAttrsAccessed(); + } else if ( true && key === "$slots") { + (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.track)(instance, "get", key); + } + return publicGetter(instance); + } else if ( + // css module (injected by vue-loader) + (cssModule = type.__cssModules) && (cssModule = cssModule[key]) + ) { + return cssModule; + } else if (ctx !== _vue_shared__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJ && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(ctx, key)) { + accessCache[key] = 4 /* CONTEXT */; + return ctx[key]; + } else if ( + // global properties + globalProperties = appContext.config.globalProperties, (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(globalProperties, key) + ) { + { + return globalProperties[key]; + } + } else if ( true && currentRenderingInstance && (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isString)(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading + // to infinite warning loop + key.indexOf("__v") !== 0)) { + if (data !== _vue_shared__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJ && isReservedPrefix(key[0]) && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(data, key)) { + warn( + `Property ${JSON.stringify( + key + )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.` + ); + } else if (instance === currentRenderingInstance) { + warn( + `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.` + ); + } + } + }, + set({ _: instance }, key, value) { + const { data, setupState, ctx } = instance; + if (hasSetupBinding(setupState, key)) { + setupState[key] = value; + return true; + } else if ( true && setupState.__isScriptSetup && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(setupState, key)) { + warn(`Cannot mutate ') : '')); + } + }, { + key: 'nodeBegin', + value: function nodeBegin(context, key, leftKey, type, nodeType) { + var nodeClass = 'jsondiffpatch-' + type + (nodeType ? ' jsondiffpatch-child-node-type-' + nodeType : ''); + context.out('
  • ' + ('
    ' + leftKey + '
    ')); + } + }, { + key: 'nodeEnd', + value: function nodeEnd(context) { + context.out('
  • '); + } + + /* jshint camelcase: false */ + /* eslint-disable camelcase */ + + }, { + key: 'format_unchanged', + value: function format_unchanged(context, delta, left) { + if (typeof left === 'undefined') { + return; + } + context.out('
    '); + this.formatValue(context, left); + context.out('
    '); + } + }, { + key: 'format_movedestination', + value: function format_movedestination(context, delta, left) { + if (typeof left === 'undefined') { + return; + } + context.out('
    '); + this.formatValue(context, left); + context.out('
    '); + } + }, { + key: 'format_node', + value: function format_node(context, delta, left) { + // recurse + var nodeType = delta._t === 'a' ? 'array' : 'object'; + context.out('
      '); + this.formatDeltaChildren(context, delta, left); + context.out('
    '); + } + }, { + key: 'format_added', + value: function format_added(context, delta) { + context.out('
    '); + this.formatValue(context, delta[0]); + context.out('
    '); + } + }, { + key: 'format_modified', + value: function format_modified(context, delta) { + context.out('
    '); + this.formatValue(context, delta[0]); + context.out('
    ' + '
    '); + this.formatValue(context, delta[1]); + context.out('
    '); + } + }, { + key: 'format_deleted', + value: function format_deleted(context, delta) { + context.out('
    '); + this.formatValue(context, delta[0]); + context.out('
    '); + } + }, { + key: 'format_moved', + value: function format_moved(context, delta) { + context.out('
    '); + this.formatValue(context, delta[0]); + context.out('
    ' + delta[1] + '
    '); + + // draw an SVG arrow from here to move destination + context.out( + /* jshint multistr: true */ + '
    \n \n \n \n \n \n \n \n \n
    '); + context.hasArrows = true; + } + }, { + key: 'format_textdiff', + value: function format_textdiff(context, delta) { + context.out('
    '); + this.formatTextDiffString(context, delta[0]); + context.out('
    '); + } + }]); + return HtmlFormatter; +}(BaseFormatter); + +function htmlEscape(text) { + var html = text; + var replacements = [[/&/g, '&'], [//g, '>'], [/'/g, '''], [/"/g, '"']]; + for (var i = 0; i < replacements.length; i++) { + html = html.replace(replacements[i][0], replacements[i][1]); + } + return html; +} + +var adjustArrows = function jsondiffpatchHtmlFormatterAdjustArrows(nodeArg) { + var node = nodeArg || document; + var getElementText = function getElementText(_ref) { + var textContent = _ref.textContent, + innerText = _ref.innerText; + return textContent || innerText; + }; + var eachByQuery = function eachByQuery(el, query, fn) { + var elems = el.querySelectorAll(query); + for (var i = 0, l = elems.length; i < l; i++) { + fn(elems[i]); + } + }; + var eachChildren = function eachChildren(_ref2, fn) { + var children = _ref2.children; + + for (var i = 0, l = children.length; i < l; i++) { + fn(children[i], i); + } + }; + eachByQuery(node, '.jsondiffpatch-arrow', function (_ref3) { + var parentNode = _ref3.parentNode, + children = _ref3.children, + style = _ref3.style; + + var arrowParent = parentNode; + var svg = children[0]; + var path = svg.children[1]; + svg.style.display = 'none'; + var destination = getElementText(arrowParent.querySelector('.jsondiffpatch-moved-destination')); + var container = arrowParent.parentNode; + var destinationElem = void 0; + eachChildren(container, function (child) { + if (child.getAttribute('data-key') === destination) { + destinationElem = child; + } + }); + if (!destinationElem) { + return; + } + try { + var distance = destinationElem.offsetTop - arrowParent.offsetTop; + svg.setAttribute('height', Math.abs(distance) + 6); + style.top = -8 + (distance > 0 ? 0 : distance) + 'px'; + var curve = distance > 0 ? 'M30,0 Q-10,' + Math.round(distance / 2) + ' 26,' + (distance - 4) : 'M30,' + -distance + ' Q-10,' + Math.round(-distance / 2) + ' 26,4'; + path.setAttribute('d', curve); + svg.style.display = ''; + } catch (err) {} + }); +}; + +/* jshint camelcase: true */ +/* eslint-enable camelcase */ + +var showUnchanged = function showUnchanged(show, node, delay) { + var el = node || document.body; + var prefix = 'jsondiffpatch-unchanged-'; + var classes = { + showing: prefix + 'showing', + hiding: prefix + 'hiding', + visible: prefix + 'visible', + hidden: prefix + 'hidden' + }; + var list = el.classList; + if (!list) { + return; + } + if (!delay) { + list.remove(classes.showing); + list.remove(classes.hiding); + list.remove(classes.visible); + list.remove(classes.hidden); + if (show === false) { + list.add(classes.hidden); + } + return; + } + if (show === false) { + list.remove(classes.showing); + list.add(classes.visible); + setTimeout(function () { + list.add(classes.hiding); + }, 10); + } else { + list.remove(classes.hiding); + list.add(classes.showing); + list.remove(classes.hidden); + } + var intervalId = setInterval(function () { + adjustArrows(el); + }, 100); + setTimeout(function () { + list.remove(classes.showing); + list.remove(classes.hiding); + if (show === false) { + list.add(classes.hidden); + list.remove(classes.visible); + } else { + list.add(classes.visible); + list.remove(classes.hidden); + } + setTimeout(function () { + list.remove(classes.visible); + clearInterval(intervalId); + }, delay + 400); + }, delay); +}; + +var hideUnchanged = function hideUnchanged(node, delay) { + return showUnchanged(false, node, delay); +}; + +var defaultInstance = void 0; + +function format(delta, left) { + if (!defaultInstance) { + defaultInstance = new HtmlFormatter(); + } + return defaultInstance.format(delta, left); +} + + + +var html = Object.freeze({ + showUnchanged: showUnchanged, + hideUnchanged: hideUnchanged, + default: HtmlFormatter, + format: format +}); + +var AnnotatedFormatter = function (_BaseFormatter) { + inherits(AnnotatedFormatter, _BaseFormatter); + + function AnnotatedFormatter() { + classCallCheck(this, AnnotatedFormatter); + + var _this = possibleConstructorReturn(this, (AnnotatedFormatter.__proto__ || Object.getPrototypeOf(AnnotatedFormatter)).call(this)); + + _this.includeMoveDestinations = false; + return _this; + } + + createClass(AnnotatedFormatter, [{ + key: 'prepareContext', + value: function prepareContext(context) { + get(AnnotatedFormatter.prototype.__proto__ || Object.getPrototypeOf(AnnotatedFormatter.prototype), 'prepareContext', this).call(this, context); + context.indent = function (levels) { + this.indentLevel = (this.indentLevel || 0) + (typeof levels === 'undefined' ? 1 : levels); + this.indentPad = new Array(this.indentLevel + 1).join('  '); + }; + context.row = function (json, htmlNote) { + context.out('' + '
    ');
    +        context.out(context.indentPad);
    +        context.out('
    ');
    +        context.out(json);
    +        context.out('
    '); + context.out(htmlNote); + context.out('
    '); + }; + } + }, { + key: 'typeFormattterErrorFormatter', + value: function typeFormattterErrorFormatter(context, err) { + context.row('', '
    ' + err + '
    '); + } + }, { + key: 'formatTextDiffString', + value: function formatTextDiffString(context, value) { + var lines = this.parseTextDiff(value); + context.out('
      '); + for (var i = 0, l = lines.length; i < l; i++) { + var line = lines[i]; + context.out('
    • ' + ('' + line.location.line + '' + line.location.chr + '
      ')); + var pieces = line.pieces; + for (var pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) { + var piece = pieces[pieceIndex]; + context.out('' + piece.text + ''); + } + context.out('
    • '); + } + context.out('
    '); + } + }, { + key: 'rootBegin', + value: function rootBegin(context, type, nodeType) { + context.out(''); + if (type === 'node') { + context.row('{'); + context.indent(); + } + if (nodeType === 'array') { + context.row('"_t": "a",', 'Array delta (member names indicate array indices)'); + } + } + }, { + key: 'rootEnd', + value: function rootEnd(context, type) { + if (type === 'node') { + context.indent(-1); + context.row('}'); + } + context.out('
    '); + } + }, { + key: 'nodeBegin', + value: function nodeBegin(context, key, leftKey, type, nodeType) { + context.row('"' + key + '": {'); + if (type === 'node') { + context.indent(); + } + if (nodeType === 'array') { + context.row('"_t": "a",', 'Array delta (member names indicate array indices)'); + } + } + }, { + key: 'nodeEnd', + value: function nodeEnd(context, key, leftKey, type, nodeType, isLast) { + if (type === 'node') { + context.indent(-1); + } + context.row('}' + (isLast ? '' : ',')); + } + + /* jshint camelcase: false */ + + /* eslint-disable camelcase */ + + }, { + key: 'format_unchanged', + value: function format_unchanged() {} + }, { + key: 'format_movedestination', + value: function format_movedestination() {} + }, { + key: 'format_node', + value: function format_node(context, delta, left) { + // recurse + this.formatDeltaChildren(context, delta, left); + } + }]); + return AnnotatedFormatter; +}(BaseFormatter); + +/* eslint-enable camelcase */ + +var wrapPropertyName = function wrapPropertyName(name) { + return '
    "' + name + '"
    '; +}; + +var deltaAnnotations = { + added: function added(delta, left, key, leftKey) { + var formatLegend = '
    ([newValue])
    '; + if (typeof leftKey === 'undefined') { + return 'new value' + formatLegend; + } + if (typeof leftKey === 'number') { + return 'insert at index ' + leftKey + formatLegend; + } + return 'add property ' + wrapPropertyName(leftKey) + formatLegend; + }, + modified: function modified(delta, left, key, leftKey) { + var formatLegend = '
    ([previousValue, newValue])
    '; + if (typeof leftKey === 'undefined') { + return 'modify value' + formatLegend; + } + if (typeof leftKey === 'number') { + return 'modify at index ' + leftKey + formatLegend; + } + return 'modify property ' + wrapPropertyName(leftKey) + formatLegend; + }, + deleted: function deleted(delta, left, key, leftKey) { + var formatLegend = '
    ([previousValue, 0, 0])
    '; + if (typeof leftKey === 'undefined') { + return 'delete value' + formatLegend; + } + if (typeof leftKey === 'number') { + return 'remove index ' + leftKey + formatLegend; + } + return 'delete property ' + wrapPropertyName(leftKey) + formatLegend; + }, + moved: function moved(delta, left, key, leftKey) { + return 'move from ' + ('index ' + leftKey + ' to index ' + delta[1] + ''); + }, + textdiff: function textdiff(delta, left, key, leftKey) { + var location = typeof leftKey === 'undefined' ? '' : typeof leftKey === 'number' ? ' at index ' + leftKey : ' at property ' + wrapPropertyName(leftKey); + return 'text diff' + location + ', format is a variation of Unidiff'; + } +}; + +var formatAnyChange = function formatAnyChange(context, delta) { + var deltaType = this.getDeltaType(delta); + var annotator = deltaAnnotations[deltaType]; + var htmlNote = annotator && annotator.apply(annotator, Array.prototype.slice.call(arguments, 1)); + var json = JSON.stringify(delta, null, 2); + if (deltaType === 'textdiff') { + // split text diffs lines + json = json.split('\\n').join('\\n"+\n "'); + } + context.indent(); + context.row(json, htmlNote); + context.indent(-1); +}; + +/* eslint-disable camelcase */ +AnnotatedFormatter.prototype.format_added = formatAnyChange; +AnnotatedFormatter.prototype.format_modified = formatAnyChange; +AnnotatedFormatter.prototype.format_deleted = formatAnyChange; +AnnotatedFormatter.prototype.format_moved = formatAnyChange; +AnnotatedFormatter.prototype.format_textdiff = formatAnyChange; +var defaultInstance$1 = void 0; + +function format$1(delta, left) { + if (!defaultInstance$1) { + defaultInstance$1 = new AnnotatedFormatter(); + } + return defaultInstance$1.format(delta, left); +} + + + +var annotated = Object.freeze({ + default: AnnotatedFormatter, + format: format$1 +}); + +var OPERATIONS = { + add: 'add', + remove: 'remove', + replace: 'replace', + move: 'move' +}; + +var JSONFormatter = function (_BaseFormatter) { + inherits(JSONFormatter, _BaseFormatter); + + function JSONFormatter() { + classCallCheck(this, JSONFormatter); + + var _this = possibleConstructorReturn(this, (JSONFormatter.__proto__ || Object.getPrototypeOf(JSONFormatter)).call(this)); + + _this.includeMoveDestinations = true; + return _this; + } + + createClass(JSONFormatter, [{ + key: 'prepareContext', + value: function prepareContext(context) { + get(JSONFormatter.prototype.__proto__ || Object.getPrototypeOf(JSONFormatter.prototype), 'prepareContext', this).call(this, context); + context.result = []; + context.path = []; + context.pushCurrentOp = function (obj) { + var op = obj.op, + value = obj.value; + + var val = { + op: op, + path: this.currentPath() + }; + if (typeof value !== 'undefined') { + val.value = value; + } + this.result.push(val); + }; + + context.pushMoveOp = function (to) { + var from = this.currentPath(); + this.result.push({ + op: OPERATIONS.move, + from: from, + path: this.toPath(to) + }); + }; + + context.currentPath = function () { + return '/' + this.path.join('/'); + }; + + context.toPath = function (toPath) { + var to = this.path.slice(); + to[to.length - 1] = toPath; + return '/' + to.join('/'); + }; + } + }, { + key: 'typeFormattterErrorFormatter', + value: function typeFormattterErrorFormatter(context, err) { + context.out('[ERROR] ' + err); + } + }, { + key: 'rootBegin', + value: function rootBegin() {} + }, { + key: 'rootEnd', + value: function rootEnd() {} + }, { + key: 'nodeBegin', + value: function nodeBegin(_ref, key, leftKey) { + var path = _ref.path; + + path.push(leftKey); + } + }, { + key: 'nodeEnd', + value: function nodeEnd(_ref2) { + var path = _ref2.path; + + path.pop(); + } + + /* jshint camelcase: false */ + /* eslint-disable camelcase */ + + }, { + key: 'format_unchanged', + value: function format_unchanged() {} + }, { + key: 'format_movedestination', + value: function format_movedestination() {} + }, { + key: 'format_node', + value: function format_node(context, delta, left) { + this.formatDeltaChildren(context, delta, left); + } + }, { + key: 'format_added', + value: function format_added(context, delta) { + context.pushCurrentOp({ op: OPERATIONS.add, value: delta[0] }); + } + }, { + key: 'format_modified', + value: function format_modified(context, delta) { + context.pushCurrentOp({ op: OPERATIONS.replace, value: delta[1] }); + } + }, { + key: 'format_deleted', + value: function format_deleted(context) { + context.pushCurrentOp({ op: OPERATIONS.remove }); + } + }, { + key: 'format_moved', + value: function format_moved(context, delta) { + var to = delta[1]; + context.pushMoveOp(to); + } + }, { + key: 'format_textdiff', + value: function format_textdiff() { + throw new Error('Not implemented'); + } + }, { + key: 'format', + value: function format(delta, left) { + var context = {}; + this.prepareContext(context); + this.recurse(context, delta, left); + return context.result; + } + }]); + return JSONFormatter; +}(BaseFormatter); + +var last = function last(arr) { + return arr[arr.length - 1]; +}; + +var sortBy = function sortBy(arr, pred) { + arr.sort(pred); + return arr; +}; + +var compareByIndexDesc = function compareByIndexDesc(indexA, indexB) { + var lastA = parseInt(indexA, 10); + var lastB = parseInt(indexB, 10); + if (!(isNaN(lastA) || isNaN(lastB))) { + return lastB - lastA; + } else { + return 0; + } +}; + +var opsByDescendingOrder = function opsByDescendingOrder(removeOps) { + return sortBy(removeOps, function (a, b) { + var splitA = a.path.split('/'); + var splitB = b.path.split('/'); + if (splitA.length !== splitB.length) { + return splitA.length - splitB.length; + } else { + return compareByIndexDesc(last(splitA), last(splitB)); + } + }); +}; + +var partitionOps = function partitionOps(arr, fns) { + var initArr = Array(fns.length + 1).fill().map(function () { + return []; + }); + return arr.map(function (item) { + var position = fns.map(function (fn) { + return fn(item); + }).indexOf(true); + if (position < 0) { + position = fns.length; + } + return { item: item, position: position }; + }).reduce(function (acc, item) { + acc[item.position].push(item.item); + return acc; + }, initArr); +}; +var isMoveOp = function isMoveOp(_ref3) { + var op = _ref3.op; + return op === 'move'; +}; +var isRemoveOp = function isRemoveOp(_ref4) { + var op = _ref4.op; + return op === 'remove'; +}; + +var reorderOps = function reorderOps(diff) { + var _partitionOps = partitionOps(diff, [isMoveOp, isRemoveOp]), + _partitionOps2 = slicedToArray(_partitionOps, 3), + moveOps = _partitionOps2[0], + removedOps = _partitionOps2[1], + restOps = _partitionOps2[2]; + + var removeOpsReverse = opsByDescendingOrder(removedOps); + return [].concat(toConsumableArray(removeOpsReverse), toConsumableArray(moveOps), toConsumableArray(restOps)); +}; + +var defaultInstance$2 = void 0; + +var format$2 = function format(delta, left) { + if (!defaultInstance$2) { + defaultInstance$2 = new JSONFormatter(); + } + return reorderOps(defaultInstance$2.format(delta, left)); +}; + +var log = function log(delta, left) { + console.log(format$2(delta, left)); +}; + + + +var jsonpatch = Object.freeze({ + default: JSONFormatter, + partitionOps: partitionOps, + format: format$2, + log: log +}); + +function chalkColor(name) { + return chalk && chalk[name] || function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return args; + }; +} + +var colors = { + added: chalkColor('green'), + deleted: chalkColor('red'), + movedestination: chalkColor('gray'), + moved: chalkColor('yellow'), + unchanged: chalkColor('gray'), + error: chalkColor('white.bgRed'), + textDiffLine: chalkColor('gray') +}; + +var ConsoleFormatter = function (_BaseFormatter) { + inherits(ConsoleFormatter, _BaseFormatter); + + function ConsoleFormatter() { + classCallCheck(this, ConsoleFormatter); + + var _this = possibleConstructorReturn(this, (ConsoleFormatter.__proto__ || Object.getPrototypeOf(ConsoleFormatter)).call(this)); + + _this.includeMoveDestinations = false; + return _this; + } + + createClass(ConsoleFormatter, [{ + key: 'prepareContext', + value: function prepareContext(context) { + get(ConsoleFormatter.prototype.__proto__ || Object.getPrototypeOf(ConsoleFormatter.prototype), 'prepareContext', this).call(this, context); + context.indent = function (levels) { + this.indentLevel = (this.indentLevel || 0) + (typeof levels === 'undefined' ? 1 : levels); + this.indentPad = new Array(this.indentLevel + 1).join(' '); + this.outLine(); + }; + context.outLine = function () { + this.buffer.push('\n' + (this.indentPad || '')); + }; + context.out = function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + for (var i = 0, l = args.length; i < l; i++) { + var lines = args[i].split('\n'); + var text = lines.join('\n' + (this.indentPad || '')); + if (this.color && this.color[0]) { + text = this.color[0](text); + } + this.buffer.push(text); + } + }; + context.pushColor = function (color) { + this.color = this.color || []; + this.color.unshift(color); + }; + context.popColor = function () { + this.color = this.color || []; + this.color.shift(); + }; + } + }, { + key: 'typeFormattterErrorFormatter', + value: function typeFormattterErrorFormatter(context, err) { + context.pushColor(colors.error); + context.out('[ERROR]' + err); + context.popColor(); + } + }, { + key: 'formatValue', + value: function formatValue(context, value) { + context.out(JSON.stringify(value, null, 2)); + } + }, { + key: 'formatTextDiffString', + value: function formatTextDiffString(context, value) { + var lines = this.parseTextDiff(value); + context.indent(); + for (var i = 0, l = lines.length; i < l; i++) { + var line = lines[i]; + context.pushColor(colors.textDiffLine); + context.out(line.location.line + ',' + line.location.chr + ' '); + context.popColor(); + var pieces = line.pieces; + for (var pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) { + var piece = pieces[pieceIndex]; + context.pushColor(colors[piece.type]); + context.out(piece.text); + context.popColor(); + } + if (i < l - 1) { + context.outLine(); + } + } + context.indent(-1); + } + }, { + key: 'rootBegin', + value: function rootBegin(context, type, nodeType) { + context.pushColor(colors[type]); + if (type === 'node') { + context.out(nodeType === 'array' ? '[' : '{'); + context.indent(); + } + } + }, { + key: 'rootEnd', + value: function rootEnd(context, type, nodeType) { + if (type === 'node') { + context.indent(-1); + context.out(nodeType === 'array' ? ']' : '}'); + } + context.popColor(); + } + }, { + key: 'nodeBegin', + value: function nodeBegin(context, key, leftKey, type, nodeType) { + context.pushColor(colors[type]); + context.out(leftKey + ': '); + if (type === 'node') { + context.out(nodeType === 'array' ? '[' : '{'); + context.indent(); + } + } + }, { + key: 'nodeEnd', + value: function nodeEnd(context, key, leftKey, type, nodeType, isLast) { + if (type === 'node') { + context.indent(-1); + context.out(nodeType === 'array' ? ']' : '}' + (isLast ? '' : ',')); + } + if (!isLast) { + context.outLine(); + } + context.popColor(); + } + + /* jshint camelcase: false */ + /* eslint-disable camelcase */ + + }, { + key: 'format_unchanged', + value: function format_unchanged(context, delta, left) { + if (typeof left === 'undefined') { + return; + } + this.formatValue(context, left); + } + }, { + key: 'format_movedestination', + value: function format_movedestination(context, delta, left) { + if (typeof left === 'undefined') { + return; + } + this.formatValue(context, left); + } + }, { + key: 'format_node', + value: function format_node(context, delta, left) { + // recurse + this.formatDeltaChildren(context, delta, left); + } + }, { + key: 'format_added', + value: function format_added(context, delta) { + this.formatValue(context, delta[0]); + } + }, { + key: 'format_modified', + value: function format_modified(context, delta) { + context.pushColor(colors.deleted); + this.formatValue(context, delta[0]); + context.popColor(); + context.out(' => '); + context.pushColor(colors.added); + this.formatValue(context, delta[1]); + context.popColor(); + } + }, { + key: 'format_deleted', + value: function format_deleted(context, delta) { + this.formatValue(context, delta[0]); + } + }, { + key: 'format_moved', + value: function format_moved(context, delta) { + context.out('==> ' + delta[1]); + } + }, { + key: 'format_textdiff', + value: function format_textdiff(context, delta) { + this.formatTextDiffString(context, delta[0]); + } + }]); + return ConsoleFormatter; +}(BaseFormatter); + +var defaultInstance$3 = void 0; + +var format$3 = function format(delta, left) { + if (!defaultInstance$3) { + defaultInstance$3 = new ConsoleFormatter(); + } + return defaultInstance$3.format(delta, left); +}; + +function log$1(delta, left) { + console.log(format$3(delta, left)); +} + + + +var console$1 = Object.freeze({ + default: ConsoleFormatter, + format: format$3, + log: log$1 +}); + + + +var index = Object.freeze({ + base: base, + html: html, + annotated: annotated, + jsonpatch: jsonpatch, + console: console$1 +}); + +// use as 2nd parameter for JSON.parse to revive Date instances +function dateReviver(key, value) { + var parts = void 0; + if (typeof value === 'string') { + // eslint-disable-next-line max-len + parts = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d*))?(Z|([+-])(\d{2}):(\d{2}))$/.exec(value); + if (parts) { + return new Date(Date.UTC(+parts[1], +parts[2] - 1, +parts[3], +parts[4], +parts[5], +parts[6], +(parts[7] || 0))); + } + } + return value; +} + +function create(options) { + return new DiffPatcher(options); +} + +var defaultInstance$4 = void 0; + +function diff() { + if (!defaultInstance$4) { + defaultInstance$4 = new DiffPatcher(); + } + return defaultInstance$4.diff.apply(defaultInstance$4, arguments); +} + +function patch() { + if (!defaultInstance$4) { + defaultInstance$4 = new DiffPatcher(); + } + return defaultInstance$4.patch.apply(defaultInstance$4, arguments); +} + +function unpatch() { + if (!defaultInstance$4) { + defaultInstance$4 = new DiffPatcher(); + } + return defaultInstance$4.unpatch.apply(defaultInstance$4, arguments); +} + +function reverse() { + if (!defaultInstance$4) { + defaultInstance$4 = new DiffPatcher(); + } + return defaultInstance$4.reverse.apply(defaultInstance$4, arguments); +} + +function clone$1() { + if (!defaultInstance$4) { + defaultInstance$4 = new DiffPatcher(); + } + return defaultInstance$4.clone.apply(defaultInstance$4, arguments); +} + +exports.DiffPatcher = DiffPatcher; +exports.formatters = index; +exports.console = console$1; +exports.create = create; +exports.dateReviver = dateReviver; +exports.diff = diff; +exports.patch = patch; +exports.unpatch = unpatch; +exports.reverse = reverse; +exports.clone = clone$1; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + + +/***/ }), + +/***/ "./node_modules/.pnpm/jsondiffpatch@0.4.1/node_modules/jsondiffpatch/dist/formatters-styles/html.css": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/.pnpm/jsondiffpatch@0.4.1/node_modules/jsondiffpatch/dist/formatters-styles/html.css ***! + \***********************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../../style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); +/* harmony import */ var _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../../style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleDomAPI.js"); +/* harmony import */ var _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertBySelector.js"); +/* harmony import */ var _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../../style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); +/* harmony import */ var _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../../style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertStyleElement.js"); +/* harmony import */ var _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../../style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleTagTransform.js"); +/* harmony import */ var _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_html_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../../css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!../../../../../sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./html.css */ "./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./node_modules/.pnpm/jsondiffpatch@0.4.1/node_modules/jsondiffpatch/dist/formatters-styles/html.css"); + + + + + + + + + + + +var options = {}; + +options.styleTagTransform = (_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); +options.setAttributes = (_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); + + options.insert = _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); + +options.domAPI = (_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); +options.insertStyleElement = (_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); + +var update = _style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_html_css__WEBPACK_IMPORTED_MODULE_6__["default"], options); + + + + + /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_html_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_html_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_html_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); + + +/***/ }), + +/***/ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/cjs.js!./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/panel.vue?vue&type=style&index=0&id=273e49b3&lang=scss": +/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/cjs.js!./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/panel.vue?vue&type=style&index=0&id=273e49b3&lang=scss ***! + \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleDomAPI.js"); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertBySelector.js"); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertStyleElement.js"); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleTagTransform.js"); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_style_index_0_id_273e49b3_lang_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!../../node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./panel.vue?vue&type=style&index=0&id=273e49b3&lang=scss */ "./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/panel.vue?vue&type=style&index=0&id=273e49b3&lang=scss"); + + + + + + + + + + + +var options = {}; + +options.styleTagTransform = (_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); +options.setAttributes = (_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); + + options.insert = _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); + +options.domAPI = (_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); +options.insertStyleElement = (_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); + +var update = _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_style_index_0_id_273e49b3_lang_scss__WEBPACK_IMPORTED_MODULE_6__["default"], options); + + + + + /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_style_index_0_id_273e49b3_lang_scss__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_style_index_0_id_273e49b3_lang_scss__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_style_index_0_id_273e49b3_lang_scss__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); + + +/***/ }), + +/***/ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": +/*!*********************************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! + \*********************************************************************************************************************************/ +/***/ ((module) => { + +"use strict"; + + +var stylesInDOM = []; +function getIndexByIdentifier(identifier) { + var result = -1; + for (var i = 0; i < stylesInDOM.length; i++) { + if (stylesInDOM[i].identifier === identifier) { + result = i; + break; + } + } + return result; +} +function modulesToDom(list, options) { + var idCountMap = {}; + var identifiers = []; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + var id = options.base ? item[0] + options.base : item[0]; + var count = idCountMap[id] || 0; + var identifier = "".concat(id, " ").concat(count); + idCountMap[id] = count + 1; + var indexByIdentifier = getIndexByIdentifier(identifier); + var obj = { + css: item[1], + media: item[2], + sourceMap: item[3], + supports: item[4], + layer: item[5] + }; + if (indexByIdentifier !== -1) { + stylesInDOM[indexByIdentifier].references++; + stylesInDOM[indexByIdentifier].updater(obj); + } else { + var updater = addElementStyle(obj, options); + options.byIndex = i; + stylesInDOM.splice(i, 0, { + identifier: identifier, + updater: updater, + references: 1 + }); + } + identifiers.push(identifier); + } + return identifiers; +} +function addElementStyle(obj, options) { + var api = options.domAPI(options); + api.update(obj); + var updater = function updater(newObj) { + if (newObj) { + if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) { + return; + } + api.update(obj = newObj); + } else { + api.remove(); + } + }; + return updater; +} +module.exports = function (list, options) { + options = options || {}; + list = list || []; + var lastIdentifiers = modulesToDom(list, options); + return function update(newList) { + newList = newList || []; + for (var i = 0; i < lastIdentifiers.length; i++) { + var identifier = lastIdentifiers[i]; + var index = getIndexByIdentifier(identifier); + stylesInDOM[index].references--; + } + var newLastIdentifiers = modulesToDom(newList, options); + for (var _i = 0; _i < lastIdentifiers.length; _i++) { + var _identifier = lastIdentifiers[_i]; + var _index = getIndexByIdentifier(_identifier); + if (stylesInDOM[_index].references === 0) { + stylesInDOM[_index].updater(); + stylesInDOM.splice(_index, 1); + } + } + lastIdentifiers = newLastIdentifiers; + }; +}; + +/***/ }), + +/***/ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertBySelector.js": +/*!*************************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertBySelector.js ***! + \*************************************************************************************************************************/ +/***/ ((module) => { + +"use strict"; + + +var memo = {}; + +/* istanbul ignore next */ +function getTarget(target) { + if (typeof memo[target] === "undefined") { + var styleTarget = document.querySelector(target); + + // Special case to return head of iframe instead of iframe itself + if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { + try { + // This will throw an exception if access to iframe is blocked + // due to cross-origin restrictions + styleTarget = styleTarget.contentDocument.head; + } catch (e) { + // istanbul ignore next + styleTarget = null; + } + } + memo[target] = styleTarget; + } + return memo[target]; +} + +/* istanbul ignore next */ +function insertBySelector(insert, style) { + var target = getTarget(insert); + if (!target) { + throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); + } + target.appendChild(style); +} +module.exports = insertBySelector; + +/***/ }), + +/***/ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertStyleElement.js": +/*!***************************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertStyleElement.js ***! + \***************************************************************************************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* istanbul ignore next */ +function insertStyleElement(options) { + var element = document.createElement("style"); + options.setAttributes(element, options.attributes); + options.insert(element, options.options); + return element; +} +module.exports = insertStyleElement; + +/***/ }), + +/***/ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js": +/*!***************************************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***! + \***************************************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +/* istanbul ignore next */ +function setAttributesWithoutAttributes(styleElement) { + var nonce = true ? __webpack_require__.nc : 0; + if (nonce) { + styleElement.setAttribute("nonce", nonce); + } +} +module.exports = setAttributesWithoutAttributes; + +/***/ }), + +/***/ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleDomAPI.js": +/*!********************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleDomAPI.js ***! + \********************************************************************************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* istanbul ignore next */ +function apply(styleElement, options, obj) { + var css = ""; + if (obj.supports) { + css += "@supports (".concat(obj.supports, ") {"); + } + if (obj.media) { + css += "@media ".concat(obj.media, " {"); + } + var needLayer = typeof obj.layer !== "undefined"; + if (needLayer) { + css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {"); + } + css += obj.css; + if (needLayer) { + css += "}"; + } + if (obj.media) { + css += "}"; + } + if (obj.supports) { + css += "}"; + } + var sourceMap = obj.sourceMap; + if (sourceMap && typeof btoa !== "undefined") { + css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); + } + + // For old IE + /* istanbul ignore if */ + options.styleTagTransform(css, styleElement, options.options); +} +function removeStyleElement(styleElement) { + // istanbul ignore if + if (styleElement.parentNode === null) { + return false; + } + styleElement.parentNode.removeChild(styleElement); +} + +/* istanbul ignore next */ +function domAPI(options) { + if (typeof document === "undefined") { + return { + update: function update() {}, + remove: function remove() {} + }; + } + var styleElement = options.insertStyleElement(options); + return { + update: function update(obj) { + apply(styleElement, options, obj); + }, + remove: function remove() { + removeStyleElement(styleElement); + } + }; +} +module.exports = domAPI; + +/***/ }), + +/***/ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleTagTransform.js": +/*!**************************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleTagTransform.js ***! + \**************************************************************************************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* istanbul ignore next */ +function styleTagTransform(css, styleElement) { + if (styleElement.styleSheet) { + styleElement.styleSheet.cssText = css; + } else { + while (styleElement.firstChild) { + styleElement.removeChild(styleElement.firstChild); + } + styleElement.appendChild(document.createTextNode(css)); + } +} +module.exports = styleTagTransform; + +/***/ }), + +/***/ "./node_modules/.pnpm/ts-loader@9.4.3_typescript@5.1.3_webpack@5.86.0/node_modules/ts-loader/index.js??clonedRuleSet-1!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/panel.vue?vue&type=script&setup=true&lang=ts": +/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/ts-loader@9.4.3_typescript@5.1.3_webpack@5.86.0/node_modules/ts-loader/index.js??clonedRuleSet-1!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/panel.vue?vue&type=script&setup=true&lang=ts ***! + \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/.pnpm/vue@3.3.4/node_modules/vue/dist/vue.runtime.esm-bundler.js"); +/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/../package.json */ "./package.json"); +/* harmony import */ var jsondiffpatch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jsondiffpatch */ "./node_modules/.pnpm/jsondiffpatch@0.4.1/node_modules/jsondiffpatch/dist/jsondiffpatch.umd.js"); +/* harmony import */ var jsondiffpatch__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jsondiffpatch__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var jsondiffpatch_dist_formatters_styles_html_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! jsondiffpatch/dist/formatters-styles/html.css */ "./node_modules/.pnpm/jsondiffpatch@0.4.1/node_modules/jsondiffpatch/dist/formatters-styles/html.css"); +/* harmony import */ var _api_time__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/api/time */ "./src/api/time.ts"); +/* harmony import */ var _api_formatter_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/api/formatter-dom */ "./src/api/formatter-dom.ts"); +/* harmony import */ var _api_search__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/api/search */ "./src/api/search.ts"); +/* harmony import */ var _api_toolkit__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/api/toolkit */ "./src/api/toolkit.ts"); + + + + + + + + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.defineComponent)({ + __name: 'panel', + setup(__props, { expose: __expose }) { + __expose(); + const formatters = jsondiffpatch__WEBPACK_IMPORTED_MODULE_2__.formatters; + const deltaEl = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(null); + const appStartTimestamp = Date.now(); + const state = (0,vue__WEBPACK_IMPORTED_MODULE_0__.reactive)({ + version: _package_json__WEBPACK_IMPORTED_MODULE_1__.version, + git: { + self: 'https://github.com/zendive/jsdiff', + diffApi: 'https://github.com/benjamine/jsondiffpatch', + }, + codeExample: 'console.diff({a:1,b:1,c:3}, {a:1,b:2,d:3});', + showUnchanged: true, + now: appStartTimestamp, + }); + const compare = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)({ + timestamp: 0, + left: undefined, + right: undefined, + }); + let timer; + const lastUpdated = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => compare.value.timestamp ? (0,_api_time__WEBPACK_IMPORTED_MODULE_4__.timeFromNow)(compare.value.timestamp, state.now) : ''); + const hasBothSides = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => (0,_api_toolkit__WEBPACK_IMPORTED_MODULE_7__.hasValue)(compare.value.left) && (0,_api_toolkit__WEBPACK_IMPORTED_MODULE_7__.hasValue)(compare.value.right)); + const deltaObj = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => jsondiffpatch__WEBPACK_IMPORTED_MODULE_2__.diff(compare.value.left, compare.value.right)); + const deltaHtml = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => { + try { + if (deltaObj.value) { + return formatters.html.format(deltaObj.value, compare.value.left); + } + else { + return ''; + } + } + catch (bug) { + return JSON.stringify(bug); + } + }); + (0,vue__WEBPACK_IMPORTED_MODULE_0__.onMounted)(async () => { + const { lastApiReq } = await chrome.storage.local.get(['lastApiReq']); + if ((0,_api_toolkit__WEBPACK_IMPORTED_MODULE_7__.hasValue)(lastApiReq)) { + $_onDiffRequest(lastApiReq); + } + chrome.runtime.onMessage.addListener($_onRuntimeMessage); + }); + (0,vue__WEBPACK_IMPORTED_MODULE_0__.onUnmounted)(() => { + window.clearInterval(timer); + chrome.runtime.onMessage.removeListener($_onRuntimeMessage); + }); + const onToggleUnchanged = () => { + if ((0,_api_toolkit__WEBPACK_IMPORTED_MODULE_7__.hasValue)(deltaEl.value)) { + state.showUnchanged = !state.showUnchanged; + formatters.html.showUnchanged(state.showUnchanged, deltaEl.value); + (0,_api_formatter_dom__WEBPACK_IMPORTED_MODULE_5__.postDiffRender)(deltaEl.value); + } + }; + const onCopyDelta = async () => { + const sDiff = JSON.stringify(deltaObj.value, null, 2); + await navigator.clipboard.writeText(sDiff); + }; + const onClearResults = async () => { + await chrome.storage.local.clear(); + compare.value = { left: undefined, right: undefined, timestamp: 0 }; + }; + function $_onRuntimeMessage(req) { + if ('jsdiff-devtools-to-panel-compare' === req.source && req.payload) { + $_onDiffRequest(req.payload); + } + else if ('jsdiff-devtools-to-panel-search' === req.source && + deltaEl.value && + req.params) { + (0,_api_search__WEBPACK_IMPORTED_MODULE_6__.searchQueryInDom)(deltaEl.value, req.params); + } + } + function $_restartLastUpdated() { + window.clearInterval(timer); + timer = window.setInterval(() => { + state.now = Date.now(); + }, _api_time__WEBPACK_IMPORTED_MODULE_4__.SECOND); + } + function $_onDiffRequest({ left, right, timestamp }) { + compare.value = { + left, + right, + timestamp: timestamp || Date.now(), + }; + $_restartLastUpdated(); + (0,_api_formatter_dom__WEBPACK_IMPORTED_MODULE_5__.postDiffRender)(deltaEl.value); + } + const __returned__ = { formatters, deltaEl, appStartTimestamp, state, compare, get timer() { return timer; }, set timer(v) { timer = v; }, lastUpdated, hasBothSides, deltaObj, deltaHtml, onToggleUnchanged, onCopyDelta, onClearResults, $_onRuntimeMessage, $_restartLastUpdated, $_onDiffRequest }; + Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true }); + return __returned__; + } +})); + + +/***/ }), + +/***/ "./node_modules/.pnpm/ts-loader@9.4.3_typescript@5.1.3_webpack@5.86.0/node_modules/ts-loader/index.js??clonedRuleSet-1!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/panel.vue?vue&type=template&id=273e49b3&ts=true": +/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/ts-loader@9.4.3_typescript@5.1.3_webpack@5.86.0/node_modules/ts-loader/index.js??clonedRuleSet-1!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/panel.vue?vue&type=template&id=273e49b3&ts=true ***! + \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/.pnpm/vue@3.3.4/node_modules/vue/dist/vue.runtime.esm-bundler.js"); + +const _hoisted_1 = { class: "jsdiff-panel" }; +const _hoisted_2 = { class: "-header" }; +const _hoisted_3 = { + key: 0, + class: "-toolbox" +}; +const _hoisted_4 = { class: "-last-updated" }; +const _hoisted_5 = /*#__PURE__*/ (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", { textContent: 'Last updated ' }, null, -1 /* HOISTED */); +const _hoisted_6 = ["textContent"]; +const _hoisted_7 = { class: "-badge" }; +const _hoisted_8 = ["textContent"]; +const _hoisted_9 = ["href", "title"]; +const _hoisted_10 = /*#__PURE__*/ (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("img", { + src: "/bundle/img/panel-icon64.png", + alt: "JSDiff" +}, null, -1 /* HOISTED */); +const _hoisted_11 = [ + _hoisted_10 +]; +const _hoisted_12 = { + key: 0, + class: "-match" +}; +const _hoisted_13 = { + ref: "deltaEl", + class: "-center" +}; +const _hoisted_14 = { key: 1 }; +const _hoisted_15 = ["innerHTML"]; +const _hoisted_16 = { + key: 2, + class: "-empty" +}; +const _hoisted_17 = { class: "-center" }; +const _hoisted_18 = ["textContent"]; +const _hoisted_19 = { class: "-links" }; +const _hoisted_20 = ["href"]; +const _hoisted_21 = ["href"]; +function render(_ctx, _cache, $props, $setup, $data, $options) { + return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("section", _hoisted_1, [ + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("section", _hoisted_2, [ + ($setup.hasBothSides) + ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_3, [ + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", { + class: "btn", + title: "Hide/Show unchanged properties", + onClick: $setup.onToggleUnchanged, + textContent: 'Toggle Unchanged' + }), + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", { + class: "btn", + title: "Copy delta as json object", + onClick: $setup.onCopyDelta, + textContent: 'Copy' + }), + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", { + class: "btn", + title: "Clear results", + onClick: $setup.onClearResults, + textContent: 'Clear' + }), + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_4, [ + _hoisted_5, + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", { + class: "-value", + textContent: (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.lastUpdated) + }, null, 8 /* PROPS */, _hoisted_6) + ]) + ])) + : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true), + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_7, [ + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { + class: "-version", + textContent: (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.state.version) + }, null, 8 /* PROPS */, _hoisted_8), + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", { + class: "-icon", + href: $setup.state.git.self, + target: "_blank", + title: $setup.state.git.self + }, _hoisted_11, 8 /* PROPS */, _hoisted_9) + ]) + ]), + ($setup.hasBothSides && !$setup.deltaObj) + ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("section", _hoisted_12, [ + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_13, "match", 512 /* NEED_PATCH */) + ])) + : ($setup.hasBothSides && $setup.deltaObj) + ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("section", _hoisted_14, [ + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { + ref: "deltaEl", + class: "-delta", + innerHTML: $setup.deltaHtml + }, null, 8 /* PROPS */, _hoisted_15) + ])) + : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true), + (!$setup.hasBothSides) + ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("section", _hoisted_16, [ + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_17, [ + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("code", { + textContent: (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.state.codeExample) + }, null, 8 /* PROPS */, _hoisted_18), + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_19, [ + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", { + href: $setup.state.git.diffApi, + target: "_blank", + textContent: 'benjamine/jsondiffpatch' + }, null, 8 /* PROPS */, _hoisted_20), + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(", "), + (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", { + href: $setup.state.git.self, + target: "_blank", + textContent: 'zendive/jsdiff' + }, null, 8 /* PROPS */, _hoisted_21) + ]) + ]) + ])) + : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true) + ])); +} + + +/***/ }), + +/***/ "./src/api/formatter-dom.ts": +/*!**********************************!*\ + !*** ./src/api/formatter-dom.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ postDiffRender: () => (/* binding */ postDiffRender) +/* harmony export */ }); +function getElementText(_ref) { + return _ref ? _ref.textContent || _ref.innerText : ''; +} +function eachByQuery(el, query, fn) { + const elems = el.querySelectorAll(query); + for (let i = 0, l = elems.length; i < l; i++) { + fn(elems[i]); + } +} +function eachChildren(_ref2, fn) { + if (_ref2) { + const children = _ref2.children; + for (let i = 0, l = children.length; i < l; i++) { + fn(children[i], i); + } + } +} +const postDiffRender = (nodeArg) => { + setTimeout(function jsondiffpatchHtmlFormatterAdjustArrows() { + const node = nodeArg || document; + eachByQuery(node, '.jsondiffpatch-arrow', function (_ref3) { + const parentNode = _ref3.parentNode; + const children = _ref3.children; + const style = _ref3.style; + const arrowParent = parentNode; + const svg = children[0]; + const path = svg.children[1]; + svg.style.display = 'none'; + if (arrowParent instanceof HTMLElement) { + const destination = getElementText(arrowParent.querySelector('.jsondiffpatch-moved-destination')); + const container = arrowParent.parentNode; + let destinationElem; + eachChildren(container, function (child) { + if (child.getAttribute('data-key') === destination) { + destinationElem = child; + } + }); + if (destinationElem instanceof HTMLElement) { + try { + const distance = destinationElem.offsetTop - arrowParent.offsetTop; + svg.setAttribute('height', `${Math.abs(distance) + 6}`); + style.top = -8 + (distance > 0 ? 0 : distance) + 'px'; + const curve = distance > 0 + ? 'M30,0 Q-10,' + + Math.round(distance / 2) + + ' 26,' + + (distance - 4) + : 'M30,' + + -distance + + ' Q-10,' + + Math.round(-distance / 2) + + ' 26,4'; + path.setAttribute('d', curve); + svg.style.display = ''; + } + catch (ignore) { } + } + } + }); + }, 10); +}; + + +/***/ }), + +/***/ "./src/api/search.ts": +/*!***************************!*\ + !*** ./src/api/search.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ searchQueryInDom: () => (/* binding */ searchQueryInDom) +/* harmony export */ }); +const searchState = { + foundEls: [], + query: '', + currentIndex: -1, + clear() { + this.foundEls.splice(0); + this.query = ''; + this.currentIndex = -1; + }, +}; +const CLASS_FOUND = 'jsdiff-found'; +const CLASS_FOUND_THIS = 'jsdiff-found-this'; +const uppercasePattern = /\p{Lu}/u; // 'u' flag enables Unicode matching +function hasUppercaseCharacter(str) { + for (let n = 0, N = str.length; n < N; n++) { + if (uppercasePattern.test(str.charAt(n))) { + return true; + } + } + return false; +} +function highlightElements(container, query, foundEls) { + const containerNodes = container.childNodes; + if (containerNodes.length) { + const firstChild = containerNodes[0]; + if (containerNodes.length === 1 && firstChild.nodeType === Node.TEXT_NODE) { + const text = firstChild.textContent || firstChild.innerText; + const found = hasUppercaseCharacter(query) + ? text.includes(query) // case-sensitive + : text.toLocaleLowerCase().includes(query); // case-insensitive + const isHidden = container.closest('.jsondiffpatch-unchanged-hidden') && + container.closest('.jsondiffpatch-unchanged'); + if (found && !isHidden) { + container.classList.add('jsdiff-found'); + foundEls.push(container); + } + } + else { + for (let n = 0, N = containerNodes.length; n < N; n++) { + const child = containerNodes[n]; + if (child.nodeType === Node.ELEMENT_NODE) { + highlightElements(child, query, foundEls); // recursion + } + } + } + } +} +function clearHighlight(container) { + const allFound = container.querySelectorAll(`.${CLASS_FOUND}`); + for (let n = allFound.length - 1; n >= 0; n--) { + allFound[n].classList.remove(CLASS_FOUND, CLASS_FOUND_THIS); + } +} +function highlightCurrentResult(searchState) { + searchState.currentIndex++; + searchState.currentIndex %= searchState.foundEls.length; + const el = searchState.foundEls[searchState.currentIndex]; + el.classList.add(CLASS_FOUND_THIS); + el.scrollIntoView({ + behavior: 'smooth', + block: 'nearest', + inline: 'nearest', + }); +} +function searchQueryInDom(el, { cmd, query }) { + query = (typeof query === 'string' && query.trim()) || ''; + // console.log('🔦', cmd, query); + if ('performSearch' === cmd) { + searchState.query = query; + if (!query) { + searchState.clear(); + clearHighlight(el); + } + } + else if ('nextSearchResult' === cmd && searchState.query) { + clearHighlight(el); + searchState.foundEls.splice(0); + highlightElements(el, searchState.query, searchState.foundEls); + if (searchState.foundEls.length) { + highlightCurrentResult(searchState); + } + else { + searchState.clear(); + clearHighlight(el); + } + } + else if ('cancelSearch' === cmd) { + searchState.clear(); + clearHighlight(el); + } +} + + +/***/ }), + +/***/ "./src/api/time.ts": +/*!*************************!*\ + !*** ./src/api/time.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DAY: () => (/* binding */ DAY), +/* harmony export */ HOUR: () => (/* binding */ HOUR), +/* harmony export */ MINUTE: () => (/* binding */ MINUTE), +/* harmony export */ MONTH: () => (/* binding */ MONTH), +/* harmony export */ SECOND: () => (/* binding */ SECOND), +/* harmony export */ WEEK: () => (/* binding */ WEEK), +/* harmony export */ YEAR: () => (/* binding */ YEAR), +/* harmony export */ timeFromNow: () => (/* binding */ timeFromNow) +/* harmony export */ }); +const SECOND = 1000; +const MINUTE = 60 * SECOND; +const HOUR = 60 * MINUTE; +const DAY = 24 * HOUR; +const WEEK = 7 * DAY; +const MONTH = 30 * DAY; +const YEAR = 365 * DAY; +const intervals = [ + { ge: YEAR, divisor: YEAR, unit: 'year' }, + { ge: MONTH, divisor: MONTH, unit: 'month' }, + { ge: WEEK, divisor: WEEK, unit: 'week' }, + { ge: DAY, divisor: DAY, unit: 'day' }, + { ge: HOUR, divisor: HOUR, unit: 'hour' }, + { ge: MINUTE, divisor: MINUTE, unit: 'minute' }, + { ge: SECOND, divisor: SECOND, unit: 'seconds' }, + { ge: 0, divisor: 1, text: 'now' }, +]; +const rtf = new Intl.RelativeTimeFormat(undefined, { numeric: 'auto' }); +/** + * @param test {number} + * @param [now] {number} + * @return {string} + */ +function timeFromNow(test, now) { + const delta = now - test; + const absDelta = Math.abs(delta); + let rv = ''; + for (const interval of intervals) { + if (absDelta >= interval.ge) { + const time = Math.trunc(delta / interval.divisor); + rv = interval.unit + ? rtf.format(-time, interval.unit) + : interval.text || ''; + break; + } + } + return rv; +} + + +/***/ }), + +/***/ "./src/api/toolkit.ts": +/*!****************************!*\ + !*** ./src/api/toolkit.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ hasValue: () => (/* binding */ hasValue) +/* harmony export */ }); +function hasValue(o) { + return undefined !== o && null !== o; +} + + +/***/ }), + +/***/ "./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/exportHelper.js": +/*!********************************************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/exportHelper.js ***! + \********************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// runtime helper for setting properties on components +// in a tree-shakable way +exports["default"] = (sfc, props) => { + const target = sfc.__vccOpts || sfc; + for (const [key, val] of props) { + target[key] = val; + } + return target; +}; + + +/***/ }), + +/***/ "./src/view/panel.vue": +/*!****************************!*\ + !*** ./src/view/panel.vue ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _panel_vue_vue_type_template_id_273e49b3_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./panel.vue?vue&type=template&id=273e49b3&ts=true */ "./src/view/panel.vue?vue&type=template&id=273e49b3&ts=true"); +/* harmony import */ var _panel_vue_vue_type_script_setup_true_lang_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./panel.vue?vue&type=script&setup=true&lang=ts */ "./src/view/panel.vue?vue&type=script&setup=true&lang=ts"); +/* harmony import */ var _panel_vue_vue_type_style_index_0_id_273e49b3_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./panel.vue?vue&type=style&index=0&id=273e49b3&lang=scss */ "./src/view/panel.vue?vue&type=style&index=0&id=273e49b3&lang=scss"); +/* harmony import */ var _node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/exportHelper.js"); + + + + +; + + +const __exports__ = /*#__PURE__*/(0,_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_panel_vue_vue_type_script_setup_true_lang_ts__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_panel_vue_vue_type_template_id_273e49b3_ts_true__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"src/view/panel.vue"]]) +/* hot reload */ +if (false) {} + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__); + +/***/ }), + +/***/ "./src/view/panel.vue?vue&type=style&index=0&id=273e49b3&lang=scss": +/*!*************************************************************************!*\ + !*** ./src/view/panel.vue?vue&type=style&index=0&id=273e49b3&lang=scss ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_cjs_js_node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_style_index_0_id_273e49b3_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/cjs.js!../../node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!../../node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./panel.vue?vue&type=style&index=0&id=273e49b3&lang=scss */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/cjs.js!./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/panel.vue?vue&type=style&index=0&id=273e49b3&lang=scss"); + + +/***/ }), + +/***/ "./src/view/panel.vue?vue&type=script&setup=true&lang=ts": +/*!***************************************************************!*\ + !*** ./src/view/panel.vue?vue&type=script&setup=true&lang=ts ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* reexport safe */ _node_modules_pnpm_ts_loader_9_4_3_typescript_5_1_3_webpack_5_86_0_node_modules_ts_loader_index_js_clonedRuleSet_1_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_script_setup_true_lang_ts__WEBPACK_IMPORTED_MODULE_0__["default"]) +/* harmony export */ }); +/* harmony import */ var _node_modules_pnpm_ts_loader_9_4_3_typescript_5_1_3_webpack_5_86_0_node_modules_ts_loader_index_js_clonedRuleSet_1_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_script_setup_true_lang_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/.pnpm/ts-loader@9.4.3_typescript@5.1.3_webpack@5.86.0/node_modules/ts-loader/index.js??clonedRuleSet-1!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./panel.vue?vue&type=script&setup=true&lang=ts */ "./node_modules/.pnpm/ts-loader@9.4.3_typescript@5.1.3_webpack@5.86.0/node_modules/ts-loader/index.js??clonedRuleSet-1!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/panel.vue?vue&type=script&setup=true&lang=ts"); + + +/***/ }), + +/***/ "./src/view/panel.vue?vue&type=template&id=273e49b3&ts=true": +/*!******************************************************************!*\ + !*** ./src/view/panel.vue?vue&type=template&id=273e49b3&ts=true ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* reexport safe */ _node_modules_pnpm_ts_loader_9_4_3_typescript_5_1_3_webpack_5_86_0_node_modules_ts_loader_index_js_clonedRuleSet_1_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_template_id_273e49b3_ts_true__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ }); +/* harmony import */ var _node_modules_pnpm_ts_loader_9_4_3_typescript_5_1_3_webpack_5_86_0_node_modules_ts_loader_index_js_clonedRuleSet_1_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_template_id_273e49b3_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/.pnpm/ts-loader@9.4.3_typescript@5.1.3_webpack@5.86.0/node_modules/ts-loader/index.js??clonedRuleSet-1!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./panel.vue?vue&type=template&id=273e49b3&ts=true */ "./node_modules/.pnpm/ts-loader@9.4.3_typescript@5.1.3_webpack@5.86.0/node_modules/ts-loader/index.js??clonedRuleSet-1!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/panel.vue?vue&type=template&id=273e49b3&ts=true"); + + +/***/ }), + +/***/ "./node_modules/.pnpm/vue@3.3.4/node_modules/vue/dist/vue.runtime.esm-bundler.js": +/*!***************************************************************************************!*\ + !*** ./node_modules/.pnpm/vue@3.3.4/node_modules/vue/dist/vue.runtime.esm-bundler.js ***! + \***************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ BaseTransition: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.BaseTransition), +/* harmony export */ BaseTransitionPropsValidators: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.BaseTransitionPropsValidators), +/* harmony export */ Comment: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.Comment), +/* harmony export */ EffectScope: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.EffectScope), +/* harmony export */ Fragment: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.Fragment), +/* harmony export */ KeepAlive: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.KeepAlive), +/* harmony export */ ReactiveEffect: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.ReactiveEffect), +/* harmony export */ Static: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.Static), +/* harmony export */ Suspense: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.Suspense), +/* harmony export */ Teleport: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.Teleport), +/* harmony export */ Text: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.Text), +/* harmony export */ Transition: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.Transition), +/* harmony export */ TransitionGroup: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.TransitionGroup), +/* harmony export */ VueElement: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.VueElement), +/* harmony export */ assertNumber: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.assertNumber), +/* harmony export */ callWithAsyncErrorHandling: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.callWithAsyncErrorHandling), +/* harmony export */ callWithErrorHandling: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.callWithErrorHandling), +/* harmony export */ camelize: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.camelize), +/* harmony export */ capitalize: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.capitalize), +/* harmony export */ cloneVNode: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.cloneVNode), +/* harmony export */ compatUtils: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.compatUtils), +/* harmony export */ compile: () => (/* binding */ compile), +/* harmony export */ computed: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.computed), +/* harmony export */ createApp: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createApp), +/* harmony export */ createBlock: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createBlock), +/* harmony export */ createCommentVNode: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode), +/* harmony export */ createElementBlock: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createElementBlock), +/* harmony export */ createElementVNode: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createElementVNode), +/* harmony export */ createHydrationRenderer: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createHydrationRenderer), +/* harmony export */ createPropsRestProxy: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createPropsRestProxy), +/* harmony export */ createRenderer: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createRenderer), +/* harmony export */ createSSRApp: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createSSRApp), +/* harmony export */ createSlots: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createSlots), +/* harmony export */ createStaticVNode: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createStaticVNode), +/* harmony export */ createTextVNode: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createTextVNode), +/* harmony export */ createVNode: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.createVNode), +/* harmony export */ customRef: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.customRef), +/* harmony export */ defineAsyncComponent: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.defineAsyncComponent), +/* harmony export */ defineComponent: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.defineComponent), +/* harmony export */ defineCustomElement: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.defineCustomElement), +/* harmony export */ defineEmits: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.defineEmits), +/* harmony export */ defineExpose: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.defineExpose), +/* harmony export */ defineModel: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.defineModel), +/* harmony export */ defineOptions: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.defineOptions), +/* harmony export */ defineProps: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.defineProps), +/* harmony export */ defineSSRCustomElement: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.defineSSRCustomElement), +/* harmony export */ defineSlots: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.defineSlots), +/* harmony export */ devtools: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.devtools), +/* harmony export */ effect: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.effect), +/* harmony export */ effectScope: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.effectScope), +/* harmony export */ getCurrentInstance: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.getCurrentInstance), +/* harmony export */ getCurrentScope: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope), +/* harmony export */ getTransitionRawChildren: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.getTransitionRawChildren), +/* harmony export */ guardReactiveProps: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps), +/* harmony export */ h: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.h), +/* harmony export */ handleError: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.handleError), +/* harmony export */ hasInjectionContext: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.hasInjectionContext), +/* harmony export */ hydrate: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.hydrate), +/* harmony export */ initCustomFormatter: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.initCustomFormatter), +/* harmony export */ initDirectivesForSSR: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.initDirectivesForSSR), +/* harmony export */ inject: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.inject), +/* harmony export */ isMemoSame: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.isMemoSame), +/* harmony export */ isProxy: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.isProxy), +/* harmony export */ isReactive: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.isReactive), +/* harmony export */ isReadonly: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.isReadonly), +/* harmony export */ isRef: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.isRef), +/* harmony export */ isRuntimeOnly: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.isRuntimeOnly), +/* harmony export */ isShallow: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.isShallow), +/* harmony export */ isVNode: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.isVNode), +/* harmony export */ markRaw: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.markRaw), +/* harmony export */ mergeDefaults: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.mergeDefaults), +/* harmony export */ mergeModels: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.mergeModels), +/* harmony export */ mergeProps: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.mergeProps), +/* harmony export */ nextTick: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.nextTick), +/* harmony export */ normalizeClass: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.normalizeClass), +/* harmony export */ normalizeProps: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.normalizeProps), +/* harmony export */ normalizeStyle: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.normalizeStyle), +/* harmony export */ onActivated: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onActivated), +/* harmony export */ onBeforeMount: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onBeforeMount), +/* harmony export */ onBeforeUnmount: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onBeforeUnmount), +/* harmony export */ onBeforeUpdate: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onBeforeUpdate), +/* harmony export */ onDeactivated: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onDeactivated), +/* harmony export */ onErrorCaptured: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onErrorCaptured), +/* harmony export */ onMounted: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onMounted), +/* harmony export */ onRenderTracked: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onRenderTracked), +/* harmony export */ onRenderTriggered: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onRenderTriggered), +/* harmony export */ onScopeDispose: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onScopeDispose), +/* harmony export */ onServerPrefetch: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onServerPrefetch), +/* harmony export */ onUnmounted: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onUnmounted), +/* harmony export */ onUpdated: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.onUpdated), +/* harmony export */ openBlock: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.openBlock), +/* harmony export */ popScopeId: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.popScopeId), +/* harmony export */ provide: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.provide), +/* harmony export */ proxyRefs: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.proxyRefs), +/* harmony export */ pushScopeId: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.pushScopeId), +/* harmony export */ queuePostFlushCb: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.queuePostFlushCb), +/* harmony export */ reactive: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.reactive), +/* harmony export */ readonly: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.readonly), +/* harmony export */ ref: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.ref), +/* harmony export */ registerRuntimeCompiler: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.registerRuntimeCompiler), +/* harmony export */ render: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.render), +/* harmony export */ renderList: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.renderList), +/* harmony export */ renderSlot: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.renderSlot), +/* harmony export */ resolveComponent: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.resolveComponent), +/* harmony export */ resolveDirective: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.resolveDirective), +/* harmony export */ resolveDynamicComponent: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.resolveDynamicComponent), +/* harmony export */ resolveFilter: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.resolveFilter), +/* harmony export */ resolveTransitionHooks: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.resolveTransitionHooks), +/* harmony export */ setBlockTracking: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.setBlockTracking), +/* harmony export */ setDevtoolsHook: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.setDevtoolsHook), +/* harmony export */ setTransitionHooks: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.setTransitionHooks), +/* harmony export */ shallowReactive: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.shallowReactive), +/* harmony export */ shallowReadonly: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.shallowReadonly), +/* harmony export */ shallowRef: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.shallowRef), +/* harmony export */ ssrContextKey: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.ssrContextKey), +/* harmony export */ ssrUtils: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.ssrUtils), +/* harmony export */ stop: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.stop), +/* harmony export */ toDisplayString: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.toDisplayString), +/* harmony export */ toHandlerKey: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.toHandlerKey), +/* harmony export */ toHandlers: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.toHandlers), +/* harmony export */ toRaw: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.toRaw), +/* harmony export */ toRef: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.toRef), +/* harmony export */ toRefs: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.toRefs), +/* harmony export */ toValue: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.toValue), +/* harmony export */ transformVNodeArgs: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.transformVNodeArgs), +/* harmony export */ triggerRef: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.triggerRef), +/* harmony export */ unref: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.unref), +/* harmony export */ useAttrs: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.useAttrs), +/* harmony export */ useCssModule: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.useCssModule), +/* harmony export */ useCssVars: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.useCssVars), +/* harmony export */ useModel: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.useModel), +/* harmony export */ useSSRContext: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.useSSRContext), +/* harmony export */ useSlots: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.useSlots), +/* harmony export */ useTransitionState: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.useTransitionState), +/* harmony export */ vModelCheckbox: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.vModelCheckbox), +/* harmony export */ vModelDynamic: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.vModelDynamic), +/* harmony export */ vModelRadio: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.vModelRadio), +/* harmony export */ vModelSelect: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.vModelSelect), +/* harmony export */ vModelText: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.vModelText), +/* harmony export */ vShow: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.vShow), +/* harmony export */ version: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.version), +/* harmony export */ warn: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.warn), +/* harmony export */ watch: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.watch), +/* harmony export */ watchEffect: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.watchEffect), +/* harmony export */ watchPostEffect: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.watchPostEffect), +/* harmony export */ watchSyncEffect: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.watchSyncEffect), +/* harmony export */ withAsyncContext: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.withAsyncContext), +/* harmony export */ withCtx: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.withCtx), +/* harmony export */ withDefaults: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.withDefaults), +/* harmony export */ withDirectives: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.withDirectives), +/* harmony export */ withKeys: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.withKeys), +/* harmony export */ withMemo: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.withMemo), +/* harmony export */ withModifiers: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.withModifiers), +/* harmony export */ withScopeId: () => (/* reexport safe */ _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__.withScopeId) +/* harmony export */ }); +/* harmony import */ var _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @vue/runtime-dom */ "./node_modules/.pnpm/@vue+runtime-core@3.3.4/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js"); +/* harmony import */ var _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @vue/runtime-dom */ "./node_modules/.pnpm/@vue+runtime-dom@3.3.4/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js"); + + + +function initDev() { + { + (0,_vue_runtime_dom__WEBPACK_IMPORTED_MODULE_1__.initCustomFormatter)(); + } +} + +if (true) { + initDev(); +} +const compile = () => { + if (true) { + (0,_vue_runtime_dom__WEBPACK_IMPORTED_MODULE_1__.warn)( + `Runtime compilation is not supported in this build of Vue.` + (` Configure your bundler to alias "vue" to "vue/dist/vue.esm-bundler.js".` ) + /* should not happen */ + ); + } +}; + + + + +/***/ }), + +/***/ "./package.json": +/*!**********************!*\ + !*** ./package.json ***! + \**********************/ +/***/ ((module) => { + +"use strict"; +module.exports = JSON.parse('{"name":"jsdiff","version":"3.0.1","description":"![jsdiff](./src/img/panel-icon64.png) --- Chrome devtools extension intended to display result of in-memory object comparisons with the help of dedicated commands invoked via console.","private":true,"scripts":{"test":"echo \\"no test\\" && exit 1","dev":"webpack --progress --watch --mode=development","prod":"NODE_ENV=production webpack --mode=production","format":"prettier . --write"},"repository":{"type":"git","url":"git+https://github.com/zendive/jsdiff.git"},"keywords":["devtools","chrome","extension"],"author":"Block Alexander","license":"proprietary","bugs":{"url":"https://github.com/zendive/jsdiff/issues"},"homepage":"https://github.com/zendive/jsdiff#readme","type":"module","devDependencies":{"@types/chrome":"^0.0.237","@vue/compiler-sfc":"^3.3.4","clean-webpack-plugin":"~4.0.0","css-loader":"~6.8.1","jsondiffpatch":"~0.4.1","prettier":"^2.8.8","sass":"^1.63.3","sass-loader":"~13.3.2","style-loader":"~3.3.3","ts-loader":"^9.4.3","typescript":"^5.1.3","vue":"~3.3.4","vue-loader":"~17.2.2","webpack":"~5.86.0","webpack-bundle-analyzer":"^4.9.0","webpack-cli":"~5.1.4"}}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ id: moduleId, +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/nonce */ +/******/ (() => { +/******/ __webpack_require__.nc = undefined; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!*************************!*\ + !*** ./src/view/app.js ***! + \*************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/.pnpm/vue@3.3.4/node_modules/vue/dist/vue.runtime.esm-bundler.js"); +/* harmony import */ var _view_panel_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/view/panel.vue */ "./src/view/panel.vue"); + + + +const app = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createApp)(_view_panel_vue__WEBPACK_IMPORTED_MODULE_1__["default"]); +app.mount('#jsdiff-app'); + +})(); + +/******/ })() +; +//# sourceMappingURL=jsdiff-panel.js.map \ No newline at end of file diff --git a/bundle/js/jsdiff-proxy.js b/bundle/js/jsdiff-proxy.js new file mode 100644 index 0000000..3169b76 --- /dev/null +++ b/bundle/js/jsdiff-proxy.js @@ -0,0 +1,29 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +var __webpack_exports__ = {}; +/*!*****************************!*\ + !*** ./src/jsdiff-proxy.ts ***! + \*****************************/ + +window.addEventListener('message', (e) => { + if (e.origin === window.location.origin && + e.source === window && + typeof e.data === 'object' && + e.data !== null && + e.data.source === 'jsdiff-console-to-proxy') { + // TODO: move shifter of storage to here from the devtools + // TODO: store to localStorage and don't pass to panel any data + // - just signal it, panel then would read it from localStorage + // TODO: rundomize source messages values, + // so at runtime source name can't be guessed in advance + // use random id + namespace + chrome.runtime.sendMessage({ + source: 'jsdiff-proxy-to-devtools', + payload: e.data.payload, + }); + } +}); + +/******/ })() +; +//# sourceMappingURL=jsdiff-proxy.js.map \ No newline at end of file diff --git a/src/jsdiff-devtools.html b/bundle/jsdiff-devtools.html similarity index 63% rename from src/jsdiff-devtools.html rename to bundle/jsdiff-devtools.html index 58cd529..e41df68 100644 --- a/src/jsdiff-devtools.html +++ b/bundle/jsdiff-devtools.html @@ -2,7 +2,7 @@ - + diff --git a/src/jsdiff-panel.html b/bundle/jsdiff-panel.html similarity index 68% rename from src/jsdiff-panel.html rename to bundle/jsdiff-panel.html index cf3e4da..6cdbdb7 100644 --- a/src/jsdiff-panel.html +++ b/bundle/jsdiff-panel.html @@ -5,6 +5,6 @@
    - + diff --git a/manifest.json b/manifest.json index 819dc20..b38369a 100644 --- a/manifest.json +++ b/manifest.json @@ -1,14 +1,29 @@ { "name": "console.diff(...)", "description": "Compare in-memory objects and see the result inside devtools panel with a set of console.diff functions.", - "version": "3.0.0", + "version": "3.0.1", "manifest_version": 3, + "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlCx2Bl0li+3idvfrH9cQL/MzphafGFqMUA2P+0vbyhwxsxWl0llOaGQbkirX5qCoAVHoUCPqu3hCjpVCv35igPbfqDs5bdLZZmXt2F0HjEQnWI/eZKd9IKcKYMplEeL2BodmpU02VrP1UnUzQHZeeMWk9ybgWOqCimkwliILVubRj5dxNB9AidLwO4Z5iGq/OvW9AJMYdxKxrLP2lF6/GGNcCBg+iCJZwlQOhFB9LbUjytT4ws3bIEX4b5zmWLqGKR1NiZfGug2eCWXt9oEKg2WkbXmBBzFKqxnM/bBUrVR29N9qNgx0f42qnyhsW3Bo4kPzE3d0asXCV5nofLTLEwIDAQAB", "minimum_chrome_version": "88.0", - "devtools_page": "src/jsdiff-devtools.html", + "devtools_page": "bundle/jsdiff-devtools.html", + "content_scripts": [ + { + "world": "MAIN", + "js": ["/bundle/js/jsdiff-console.js"], + "matches": [""], + "match_origin_as_fallback": true, + "run_at": "document_start" + },{ + "js": ["/bundle/js/jsdiff-proxy.js"], + "matches": [""], + "match_origin_as_fallback": true, + "run_at": "document_start" + } + ], "icons": { - "28": "src/img/panel-icon28.png", - "64": "src/img/panel-icon64.png", - "128": "src/img/panel-icon128.png" + "28": "bundle/img/panel-icon28.png", + "64": "bundle/img/panel-icon64.png", + "128": "bundle/img/panel-icon128.png" }, "permissions": ["storage", "scripting", "clipboardWrite"], "host_permissions": ["*://*/*"] diff --git a/package.json b/package.json index 8b15a58..78f0849 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jsdiff", - "version": "3.0.0", + "version": "3.0.1", "description": "![jsdiff](./src/img/panel-icon64.png) --- Chrome devtools extension intended to display result of in-memory object comparisons with the help of dedicated commands invoked via console.", "private": true, "scripts": { diff --git a/src/@types/index.d.ts b/src/@types/index.d.ts new file mode 100644 index 0000000..3b04cc9 --- /dev/null +++ b/src/@types/index.d.ts @@ -0,0 +1,35 @@ +export {}; + +declare global { + interface ICompareState { + timestamp: number; + left?: unknown; + right?: unknown; + } + + interface ICompareMessagePayload { + push?: unknown; + left?: unknown; + right?: unknown; + timestamp: number; + [key: string]: unknown; + } + + interface ICompareMessage { + source: string; + payload: ICompareMessagePayload; + } + + type TSearchCommands = 'performSearch' | 'nextSearchResult' | 'cancelSearch'; + + interface ISearchOptions { + cmd: TSearchCommands; + query: string | null; + } + + interface IRuntimeMessageOptions { + source: string; + payload?: ICompareState; + params?: ISearchOptions; + } +} diff --git a/src/api/clone.ts b/src/api/clone.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/api/console.ts b/src/api/console.ts new file mode 100644 index 0000000..da0b7a2 --- /dev/null +++ b/src/api/console.ts @@ -0,0 +1,109 @@ +/** + * @returns {boolean} injected or not injected + */ +export function define_console_api(): boolean { + function nativeClone(value: unknown) { + function nativeClonePostDataAdapter( + set: Set, + key: string | Symbol, + value: unknown + ) { + try { + if (value instanceof Element || value instanceof Document) { + return undefined; + } else if (typeof value === 'function') { + return value.toString(); + } else if (value instanceof Object || typeof value === 'object') { + if (set.has(value)) { + return undefined; + } + set.add(value); + } + + return value; + } catch (ignore) { + return undefined; + } + } + + let set: Set | null = new Set(); + const rv = JSON.parse( + JSON.stringify(value, nativeClonePostDataAdapter.bind(null, set)) + ); + + set.clear(); + set = null; + + return rv; + } + + function post(payload: ICompareMessagePayload) { + try { + ['push', 'left', 'right'].forEach((key) => { + if (Reflect.has(payload, key)) { + const value = payload[key]; + + if (value === undefined) { + payload[key] = '(undefined)'; + } else if (value === null) { + payload[key] = '(null)'; + } else { + payload[key] = nativeClone(value); + } + } + }); + + window.postMessage( + { + source: 'jsdiff-console-to-proxy', + payload, + }, + window.location.origin + ); + } catch (e) { + console.error( + '%cconsole.diff()', + ` + font-weight: 700; + color: #000; + background-color: #ffbbbb; + padding: 2px 4px; + border: 1px solid #bbb; + border-radius: 4px; + `, + e + ); + } + } + + if ('diff' in console && typeof console.diff === 'function') { + /* already injected */ + return false; + } else { + Object.assign(console, { + diff: (...args: unknown[]) => + post( + args.length === 1 + ? { push: args[0], timestamp: Date.now() } + : { left: args[0], right: args[1], timestamp: Date.now() } + ), + diffLeft: (left: unknown) => post({ left, timestamp: Date.now() }), + diffRight: (right: unknown) => post({ right, timestamp: Date.now() }), + diffPush: (push: unknown) => post({ push, timestamp: Date.now() }), + }); + + console.debug( + '%c✚ console.diff()', + ` + font-weight: 700; + color: #000; + background-color: yellow; + padding: 2px 4px; + border: 1px solid #bbb; + border-radius: 4px; + ` + ); + + return true; + } +} diff --git a/src/js/view/api/formatter-dom.ts b/src/api/formatter-dom.ts similarity index 100% rename from src/js/view/api/formatter-dom.ts rename to src/api/formatter-dom.ts diff --git a/src/js/view/api/search.ts b/src/api/search.ts similarity index 95% rename from src/js/view/api/search.ts rename to src/api/search.ts index 5cbe1ab..34d28d9 100644 --- a/src/js/view/api/search.ts +++ b/src/api/search.ts @@ -1,10 +1,3 @@ -type TSearchCommands = 'performSearch' | 'nextSearchResult' | 'cancelSearch'; - -export interface ISearchOptions { - cmd: TSearchCommands; - query: string | null; -} - interface ISearchState { foundEls: HTMLElement[]; query: string; diff --git a/src/js/view/api/time.ts b/src/api/time.ts similarity index 100% rename from src/js/view/api/time.ts rename to src/api/time.ts diff --git a/src/js/view/api/toolkit.ts b/src/api/toolkit.ts similarity index 100% rename from src/js/view/api/toolkit.ts rename to src/api/toolkit.ts diff --git a/src/js/bundle/jsdiff-panel.js b/src/js/bundle/jsdiff-panel.js deleted file mode 100644 index ed38a5f..0000000 --- a/src/js/bundle/jsdiff-panel.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{var e={842:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(49),i=n.n(r),o=n(538),s=n.n(o)()(i());s.push([e.id,'.jsondiffpatch-delta{font-family:"Bitstream Vera Sans Mono","DejaVu Sans Mono",Monaco,Courier,monospace;font-size:12px;margin:0;padding:0 0 0 12px;display:inline-block}.jsondiffpatch-delta pre{font-family:"Bitstream Vera Sans Mono","DejaVu Sans Mono",Monaco,Courier,monospace;font-size:12px;margin:0;padding:0;display:inline-block}ul.jsondiffpatch-delta{list-style-type:none;padding:0 0 0 20px;margin:0}.jsondiffpatch-delta ul{list-style-type:none;padding:0 0 0 20px;margin:0}.jsondiffpatch-added .jsondiffpatch-property-name,.jsondiffpatch-added .jsondiffpatch-value pre,.jsondiffpatch-modified .jsondiffpatch-right-value pre,.jsondiffpatch-textdiff-added{background:#bfb}.jsondiffpatch-deleted .jsondiffpatch-property-name,.jsondiffpatch-deleted pre,.jsondiffpatch-modified .jsondiffpatch-left-value pre,.jsondiffpatch-textdiff-deleted{background:#fbb;text-decoration:line-through}.jsondiffpatch-unchanged,.jsondiffpatch-movedestination{color:gray}.jsondiffpatch-unchanged,.jsondiffpatch-movedestination>.jsondiffpatch-value{transition:all .5s;-webkit-transition:all .5s;overflow-y:hidden}.jsondiffpatch-unchanged-showing .jsondiffpatch-unchanged,.jsondiffpatch-unchanged-showing .jsondiffpatch-movedestination>.jsondiffpatch-value{max-height:100px}.jsondiffpatch-unchanged-hidden .jsondiffpatch-unchanged,.jsondiffpatch-unchanged-hidden .jsondiffpatch-movedestination>.jsondiffpatch-value{max-height:0}.jsondiffpatch-unchanged-hiding .jsondiffpatch-movedestination>.jsondiffpatch-value,.jsondiffpatch-unchanged-hidden .jsondiffpatch-movedestination>.jsondiffpatch-value{display:block}.jsondiffpatch-unchanged-visible .jsondiffpatch-unchanged,.jsondiffpatch-unchanged-visible .jsondiffpatch-movedestination>.jsondiffpatch-value{max-height:100px}.jsondiffpatch-unchanged-hiding .jsondiffpatch-unchanged,.jsondiffpatch-unchanged-hiding .jsondiffpatch-movedestination>.jsondiffpatch-value{max-height:0}.jsondiffpatch-unchanged-showing .jsondiffpatch-arrow,.jsondiffpatch-unchanged-hiding .jsondiffpatch-arrow{display:none}.jsondiffpatch-value{display:inline-block}.jsondiffpatch-property-name{display:inline-block;padding-right:5px;vertical-align:top}.jsondiffpatch-property-name:after{content:": "}.jsondiffpatch-child-node-type-array>.jsondiffpatch-property-name:after{content:": ["}.jsondiffpatch-child-node-type-array:after{content:"],"}div.jsondiffpatch-child-node-type-array:before{content:"["}div.jsondiffpatch-child-node-type-array:after{content:"]"}.jsondiffpatch-child-node-type-object>.jsondiffpatch-property-name:after{content:": {"}.jsondiffpatch-child-node-type-object:after{content:"},"}div.jsondiffpatch-child-node-type-object:before{content:"{"}div.jsondiffpatch-child-node-type-object:after{content:"}"}.jsondiffpatch-value pre:after{content:","}li:last-child>.jsondiffpatch-value pre:after,.jsondiffpatch-modified>.jsondiffpatch-left-value pre:after{content:""}.jsondiffpatch-modified .jsondiffpatch-value{display:inline-block}.jsondiffpatch-modified .jsondiffpatch-right-value{margin-left:5px}.jsondiffpatch-moved .jsondiffpatch-value{display:none}.jsondiffpatch-moved .jsondiffpatch-moved-destination{display:inline-block;background:#ffb;color:#888}.jsondiffpatch-moved .jsondiffpatch-moved-destination:before{content:" => "}ul.jsondiffpatch-textdiff{padding:0}.jsondiffpatch-textdiff-location{color:#bbb;display:inline-block;min-width:60px}.jsondiffpatch-textdiff-line{display:inline-block}.jsondiffpatch-textdiff-line-number:after{content:","}.jsondiffpatch-error{background:red;color:#fff;font-weight:bold}',""]);const a=s},891:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(49),i=n.n(r),o=n(538),s=n.n(o)()(i());s.push([e.id,":root{--colour-background: #fff;--colour-text: #000;--colour-found: 0, 191, 255;--height-header: 1.625rem}body{margin:0;padding:0}.jsdiff-panel{height:100vh;background-color:var(--colour-background);color:var(--colour-text)}.jsdiff-panel .btn{height:var(--height-header);cursor:pointer;border:none;border-radius:0;outline:none;background-color:rgba(0,0,0,.03)}.jsdiff-panel .btn:hover{background-color:rgba(0,0,0,.3)}.jsdiff-panel .-header{border-bottom:1px solid #bbb;box-shadow:1px 2px 5px #bbb;display:flex;align-items:center;height:var(--height-header);margin-bottom:12px;min-width:512px}.jsdiff-panel .-header .-toolbox{display:flex;justify-content:center;align-items:center;padding-left:10px}.jsdiff-panel .-header .-toolbox .btn{margin:0 2px}.jsdiff-panel .-header .-toolbox .-last-updated{margin-left:10px;color:#bbb}.jsdiff-panel .-header .-toolbox .-last-updated .-value{font-weight:bold}.jsdiff-panel .-header .-badge{position:fixed;top:0;right:0;display:flex;flex-direction:column;align-items:center;padding:4px 4px}.jsdiff-panel .-header .-badge .-version{font-family:monospace}.jsdiff-panel .-header .-badge .-icon img{width:32px}.jsdiff-panel .-center{margin:0 auto;text-align:center}.jsdiff-panel .-match{display:flex;align-items:center;height:100%}.jsdiff-panel .-match .-center{font-size:26px;color:#bbb}.jsdiff-panel .-empty{display:flex;height:calc(100vh - var(--height-header));justify-content:center;align-items:center}.jsdiff-panel .-empty .-links{margin-top:16px;font-size:11px}.jsdiff-panel .-empty .-center{font-size:26px;color:#bbb}.jsdiff-panel .-delta{padding-top:10px}.jsdiff-panel .-delta .jsdiff-found{outline:1px solid rgba(var(--colour-found), 0.6);outline-offset:-1px}.jsdiff-panel .-delta .jsdiff-found.jsdiff-found-this{outline:2px solid rgb(var(--colour-found));outline-offset:-2px;animation:found_this 1s infinite}@keyframes found_this{0%{background-color:rgba(0,0,0,0)}50%{background-color:rgba(var(--colour-found), 0.2)}}",""]);const a=s},538:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,i,o){"string"==typeof e&&(e=[[null,e,void 0]]);var s={};if(r)for(var a=0;a0?" ".concat(f[5]):""," {").concat(f[1],"}")),f[5]=o),n&&(f[2]?(f[1]="@media ".concat(f[2]," {").concat(f[1],"}"),f[2]=n):f[2]=n),i&&(f[4]?(f[1]="@supports (".concat(f[4],") {").concat(f[1],"}"),f[4]=i):f[4]="".concat(i)),t.push(f))}},t}},49:e=>{"use strict";e.exports=function(e){return e[1]}},931:()=>{},908:function(e,t,n){!function(e,t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},i=function(){function e(e,t){for(var n=0;ne[i-1][o]?--o:--i;return s}(o,e,t,i);return"string"==typeof e&&"string"==typeof t&&(s.sequence=s.sequence.join("")),s},M="function"==typeof Array.isArray?Array.isArray:function(e){return e instanceof Array},T="function"==typeof Array.prototype.indexOf?function(e,t){return e.indexOf(t)}:function(e,t){for(var n=e.length,r=0;r0&&f>0&&!t.objectHash&&"boolean"!=typeof t.matchByPosition&&(t.matchByPosition=!function(e,t,n,r){for(var i=0;i0)for(var j=0;j=0;t--){var l=r["_"+(n=o[t])],c=i.splice(n,1)[0];3===l[2]&&s.push({index:l[1],value:c})}var f=(s=s.sort(F("index"))).length;for(t=0;t0)for(t=0;tr?r++:s>=r&&at.length?e:t,a=e.length>t.length?t:e,l=s.indexOf(a);if(-1!=l)return o=[[1,s.substring(0,l)],[0,a],[1,s.substring(l+a.length)]],e.length>t.length&&(o[0][0]=o[2][0]=n),o;if(1==a.length)return[[n,e],[1,t]];var c=this.diff_halfMatch_(e,t);if(c){var f=c[0],u=c[1],d=c[2],h=c[3],p=c[4],v=this.diff_main(f,d,r,i),g=this.diff_main(u,h,r,i);return v.concat([[0,p]],g)}return r&&e.length>100&&t.length>100?this.diff_lineMode_(e,t,i):this.diff_bisect_(e,t,i)},t.prototype.diff_lineMode_=function(e,t,r){e=(u=this.diff_linesToChars_(e,t)).chars1,t=u.chars2;var i=u.lineArray,o=this.diff_main(e,t,!1,r);this.diff_charsToLines_(o,i),this.diff_cleanupSemantic(o),o.push([0,""]);for(var s=0,a=0,l=0,c="",f="";s=1&&l>=1){o.splice(s-a-l,a+l),s=s-a-l;for(var u,d=(u=this.diff_main(c,f,!1,r)).length-1;d>=0;d--)o.splice(s,0,u[d]);s+=u.length}l=0,a=0,c="",f=""}s++}return o.pop(),o},t.prototype.diff_bisect_=function(e,t,r){for(var i=e.length,o=t.length,s=Math.ceil((i+o)/2),a=s,l=2*s,c=new Array(l),f=new Array(l),u=0;ur);y++){for(var _=-y+p;_<=y-v;_+=2){for(var b=a+_,x=(A=_==-y||_!=y&&c[b-1]i)v+=2;else if(x>o)p+=2;else if(h&&(k=a+d-_)>=0&&k=(j=i-f[k]))return this.diff_bisectSplit_(e,t,A,x,r)}for(var w=-y+g;w<=y-m;w+=2){for(var j,k=a+w,C=(j=w==-y||w!=y&&f[k-1]i)m+=2;else if(C>o)g+=2;else if(!h){var A;if((b=a+d-w)>=0&&b=(j=i-j)))return this.diff_bisectSplit_(e,t,A,x,r)}}}return[[n,e],[1,t]]},t.prototype.diff_bisectSplit_=function(e,t,n,r,i){var o=e.substring(0,n),s=t.substring(0,r),a=e.substring(n),l=t.substring(r),c=this.diff_main(o,s,!1,i),f=this.diff_main(a,l,!1,i);return c.concat(f)},t.prototype.diff_linesToChars_=function(e,t){var n=[],r={};function i(e){for(var t="",i=0,o=-1,s=n.length;or?e=e.substring(n-r):nt.length?e:t,r=e.length>t.length?t:e;if(n.length<4||2*r.length=e.length?[r,o,s,a,f]:null}var s,a,l,c,f,u=o(n,r,Math.ceil(n.length/4)),d=o(n,r,Math.ceil(n.length/2));return u||d?(s=d?u&&u[4].length>d[4].length?u:d:u,e.length>t.length?(a=s[0],l=s[1],c=s[2],f=s[3]):(c=s[0],f=s[1],a=s[2],l=s[3]),[a,l,c,f,s[4]]):null},t.prototype.diff_cleanupSemantic=function(e){for(var t=!1,r=[],i=0,o=null,s=0,a=0,l=0,c=0,f=0;s0?r[i-1]:-1,a=0,l=0,c=0,f=0,o=null,t=!0)),s++;for(t&&this.diff_cleanupMerge(e),this.diff_cleanupSemanticLossless(e),s=1;s=p?(h>=u.length/2||h>=d.length/2)&&(e.splice(s,0,[0,d.substring(0,h)]),e[s-1][1]=u.substring(0,u.length-h),e[s+1][1]=d.substring(h),s++):(p>=u.length/2||p>=d.length/2)&&(e.splice(s,0,[0,u.substring(0,p)]),e[s-1][0]=1,e[s-1][1]=d.substring(0,d.length-p),e[s+1][0]=n,e[s+1][1]=u.substring(p),s++),s++}s++}},t.prototype.diff_cleanupSemanticLossless=function(e){function n(e,n){if(!e||!n)return 6;var r=e.charAt(e.length-1),i=n.charAt(0),o=r.match(t.nonAlphaNumericRegex_),s=i.match(t.nonAlphaNumericRegex_),a=o&&r.match(t.whitespaceRegex_),l=s&&i.match(t.whitespaceRegex_),c=a&&r.match(t.linebreakRegex_),f=l&&i.match(t.linebreakRegex_),u=c&&e.match(t.blanklineEndRegex_),d=f&&n.match(t.blanklineStartRegex_);return u||d?5:c||f?4:o&&!a&&l?3:a||l?2:o||s?1:0}for(var r=1;r=d&&(d=h,c=i,f=o,u=s)}e[r-1][1]!=c&&(c?e[r-1][1]=c:(e.splice(r-1,1),r--),e[r][1]=f,u?e[r+1][1]=u:(e.splice(r+1,1),r--))}r++}},t.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/,t.whitespaceRegex_=/\s/,t.linebreakRegex_=/[\r\n]/,t.blanklineEndRegex_=/\n\r?\n$/,t.blanklineStartRegex_=/^\r?\n\r?\n/,t.prototype.diff_cleanupEfficiency=function(e){for(var t=!1,r=[],i=0,o=null,s=0,a=!1,l=!1,c=!1,f=!1;s0?r[i-1]:-1,c=f=!1),t=!0)),s++;t&&this.diff_cleanupMerge(e)},t.prototype.diff_cleanupMerge=function(e){e.push([0,""]);for(var t,r=0,i=0,o=0,s="",a="";r1?(0!==i&&0!==o&&(0!==(t=this.diff_commonPrefix(a,s))&&(r-i-o>0&&0==e[r-i-o-1][0]?e[r-i-o-1][1]+=a.substring(0,t):(e.splice(0,0,[0,a.substring(0,t)]),r++),a=a.substring(t),s=s.substring(t)),0!==(t=this.diff_commonSuffix(a,s))&&(e[r][1]=a.substring(a.length-t)+e[r][1],a=a.substring(0,a.length-t),s=s.substring(0,s.length-t))),0===i?e.splice(r-o,i+o,[1,a]):0===o?e.splice(r-i,i+o,[n,s]):e.splice(r-i-o,i+o,[n,s],[1,a]),r=r-i-o+(i?1:0)+(o?1:0)+1):0!==r&&0==e[r-1][0]?(e[r-1][1]+=e[r][1],e.splice(r,1)):r++,o=0,i=0,s="",a=""}""===e[e.length-1][1]&&e.pop();var l=!1;for(r=1;rt));r++)s=i,a=o;return e.length!=r&&e[r][0]===n?a:a+(t-s)},t.prototype.diff_prettyHtml=function(e){for(var t=[],r=/&/g,i=//g,s=/\n/g,a=0;a");switch(l){case 1:t[a]=''+c+"";break;case n:t[a]=''+c+"";break;case 0:t[a]=""+c+""}}return t.join("")},t.prototype.diff_text1=function(e){for(var t=[],n=0;nthis.Match_MaxBits)throw new Error("Pattern too long for this browser.");var r=this.match_alphabet_(t),i=this;function o(e,r){var o=e/t.length,s=Math.abs(n-r);return i.Match_Distance?o+s/i.Match_Distance:s?1:o}var s=this.Match_Threshold,a=e.indexOf(t,n);-1!=a&&(s=Math.min(o(0,a),s),-1!=(a=e.lastIndexOf(t,n+t.length))&&(s=Math.min(o(0,a),s)));var l,c,f=1<=p;m--){var y=r[e.charAt(m-1)];if(g[m]=0===h?(g[m+1]<<1|1)&y:(g[m+1]<<1|1)&y|(u[m+1]|u[m])<<1|1|u[m+1],g[m]&f){var _=o(h,m-1);if(_<=s){if(s=_,!((a=m-1)>n))break;p=Math.max(1,2*n-a)}}}if(o(h+1,n)>s)break;u=g}return a},t.prototype.match_alphabet_=function(e){for(var t={},n=0;n2&&(this.diff_cleanupSemantic(s),this.diff_cleanupEfficiency(s));else if(e&&"object"==typeof e&&void 0===r&&void 0===i)s=e,o=this.diff_text1(s);else if("string"==typeof e&&r&&"object"==typeof r&&void 0===i)o=e,s=r;else{if("string"!=typeof e||"string"!=typeof r||!i||"object"!=typeof i)throw new Error("Unknown call format to patch_make.");o=e,s=i}if(0===s.length)return[];for(var a=[],l=new t.patch_obj,c=0,f=0,u=0,d=o,h=o,p=0;p=2*this.Patch_Margin&&c&&(this.patch_addContext_(l,d),a.push(l),l=new t.patch_obj,c=0,d=h,f=u)}1!==v&&(f+=g.length),v!==n&&(u+=g.length)}return c&&(this.patch_addContext_(l,d),a.push(l)),a},t.prototype.patch_deepCopy=function(e){for(var n=[],r=0;rthis.Match_MaxBits?-1!=(a=this.match_main(t,f.substring(0,this.Match_MaxBits),c))&&(-1==(u=this.match_main(t,f.substring(f.length-this.Match_MaxBits),c+f.length-this.Match_MaxBits))||a>=u)&&(a=-1):a=this.match_main(t,f,c),-1==a)o[s]=!1,i-=e[s].length2-e[s].length1;else if(o[s]=!0,i=a-c,f==(l=-1==u?t.substring(a,a+f.length):t.substring(a,u+this.Match_MaxBits)))t=t.substring(0,a)+this.diff_text2(e[s].diffs)+t.substring(a+f.length);else{var d=this.diff_main(f,l,!1);if(f.length>this.Match_MaxBits&&this.diff_levenshtein(d)/f.length>this.Patch_DeleteThreshold)o[s]=!1;else{this.diff_cleanupSemanticLossless(d);for(var h,p=0,v=0;vo[0][1].length){var s=t-o[0][1].length;o[0][1]=n.substring(o[0][1].length)+o[0][1],i.start1-=s,i.start2-=s,i.length1+=s,i.length2+=s}return 0==(o=(i=e[e.length-1]).diffs).length||0!=o[o.length-1][0]?(o.push([0,n]),i.length1+=t,i.length2+=t):t>o[o.length-1][1].length&&(s=t-o[o.length-1][1].length,o[o.length-1][1]+=n.substring(0,s),i.length1+=s,i.length2+=s),n},t.prototype.patch_splitMax=function(e){for(var r=this.Match_MaxBits,i=0;i2*r?(c.length1+=d.length,s+=d.length,f=!1,c.diffs.push([u,d]),o.diffs.shift()):(d=d.substring(0,r-c.length1-this.Patch_Margin),c.length1+=d.length,s+=d.length,0===u?(c.length2+=d.length,a+=d.length):f=!1,c.diffs.push([u,d]),d==o.diffs[0][1]?o.diffs.shift():o.diffs[0][1]=o.diffs[0][1].substring(d.length))}l=(l=this.diff_text2(c.diffs)).substring(l.length-this.Patch_Margin);var h=this.diff_text1(o.diffs).substring(0,this.Patch_Margin);""!==h&&(c.length1+=h.length,c.length2+=h.length,0!==c.diffs.length&&0===c.diffs[c.diffs.length-1][0]?c.diffs[c.diffs.length-1][1]+=h:c.diffs.push([0,h])),f||e.splice(++i,0,c)}}},t.prototype.patch_toText=function(e){for(var t=[],n=0;n'+t+"")}},{key:"formatValue",value:function(e,t){e.out("
    "+oe(JSON.stringify(t,null,2))+"
    ")}},{key:"formatTextDiffString",value:function(e,t){var n=this.parseTextDiff(t);e.out('
      ');for(var r=0,i=n.length;r
      '+o.location.line+''+o.location.chr+'
      ');for(var s=o.pieces,a=0,l=s.length;a'+oe(decodeURI(c.text))+"")}e.out("
      ")}e.out("
    ")}},{key:"rootBegin",value:function(e,t,n){var r="jsondiffpatch-"+t+(n?" jsondiffpatch-child-node-type-"+n:"");e.out('
    ')}},{key:"rootEnd",value:function(e){e.out("
    "+(e.hasArrows?' @@ -228,6 +234,7 @@ body { } .-last-updated { + cursor: default; margin-left: 10px; color: #bbbbbb; From db3d70d47c8403e77f69d9d03025188fa40c7bf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=95=B7?= <3756473+zendive@users.noreply.github.com> Date: Sat, 22 Jul 2023 23:01:59 +0300 Subject: [PATCH 03/14] add customClone --- bundle/js/jsdiff-console.js | 326 ++++++++++++++++++++++++-------- bundle/js/jsdiff-panel.js | 324 ++++++++++++++++++++++++++----- bundle/js/jsdiff-proxy.js | 53 ++++-- manifest.json | 2 +- src/@types/index.d.ts | 26 ++- src/api/clone.ts | 272 +++++++++++++++++++------- src/api/const.ts | 14 +- src/api/formatter-dom.ts | 95 +++++----- src/api/proxy.ts | 41 ++-- src/api/toolkit.ts | 11 ++ src/jsdiff-console.ts | 54 ++++-- src/jsdiff-proxy.ts | 11 +- src/view/panel.vue | 18 +- src/view/progress-indicator.vue | 54 ++++++ 14 files changed, 995 insertions(+), 306 deletions(-) create mode 100644 src/view/progress-indicator.vue diff --git a/bundle/js/jsdiff-console.js b/bundle/js/jsdiff-console.js index f1298bc..8fbfc6d 100644 --- a/bundle/js/jsdiff-console.js +++ b/bundle/js/jsdiff-console.js @@ -14,7 +14,164 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ nativeClone: () => (/* binding */ nativeClone) /* harmony export */ }); /* harmony import */ var _api_const__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/api/const */ "./src/api/const.ts"); +/* harmony import */ var _toolkit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./toolkit */ "./src/api/toolkit.ts"); +var __classPrivateFieldSet = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Catalog_instances, _Catalog_instances_1, _Catalog_instanceCounter, _Catalog_symbols, _Catalog_symbolCounter, _Catalog_counterToString; + +async function nativeClone(value) { + let set = new Set(); + const rv = JSON.parse(JSON.stringify(value, nativeClonePostDataAdapter.bind(null, set))); + set = set.clear(); + return rv; +} +class Catalog { + constructor() { + _Catalog_instances.add(this); + _Catalog_instances_1.set(this, void 0); + _Catalog_instanceCounter.set(this, 0); + _Catalog_symbols.set(this, void 0); + _Catalog_symbolCounter.set(this, 0); + __classPrivateFieldSet(this, _Catalog_instances_1, new WeakMap(), "f"); + __classPrivateFieldSet(this, _Catalog_symbols, new Map(), "f"); + } + clear() { + __classPrivateFieldGet(this, _Catalog_symbols, "f").clear(); + } + getRecurringName(value, instanceBadge) { + var _a; + let instanceId = __classPrivateFieldGet(this, _Catalog_instances_1, "f").get(value); + if (instanceId) { + return instanceBadge(instanceId); + } + else { + __classPrivateFieldSet(this, _Catalog_instanceCounter, (_a = __classPrivateFieldGet(this, _Catalog_instanceCounter, "f"), ++_a), "f"); + instanceId = __classPrivateFieldGet(this, _Catalog_instances, "m", _Catalog_counterToString).call(this, __classPrivateFieldGet(this, _Catalog_instanceCounter, "f")); + __classPrivateFieldGet(this, _Catalog_instances_1, "f").set(value, instanceId); + return null; + } + } + getSymbolName(value, symbolBage) { + var _a; + let symbolId = __classPrivateFieldGet(this, _Catalog_symbols, "f").get(value); + if (!symbolId) { + __classPrivateFieldSet(this, _Catalog_symbolCounter, (_a = __classPrivateFieldGet(this, _Catalog_symbolCounter, "f"), ++_a), "f"); + symbolId = __classPrivateFieldGet(this, _Catalog_instances, "m", _Catalog_counterToString).call(this, __classPrivateFieldGet(this, _Catalog_symbolCounter, "f")); + __classPrivateFieldGet(this, _Catalog_symbols, "f").set(value, symbolId); + } + return symbolBage(value.toString(), symbolId); + } +} +_Catalog_instances_1 = new WeakMap(), _Catalog_instanceCounter = new WeakMap(), _Catalog_symbols = new WeakMap(), _Catalog_symbolCounter = new WeakMap(), _Catalog_instances = new WeakSet(), _Catalog_counterToString = function _Catalog_counterToString(counter) { + return counter.toString(16).padStart(4, '0'); +}; +async function customClone(value) { + let catalog = new Catalog(); + const rv = await recursiveClone(catalog, value); + catalog.clear(); + catalog = null; + return rv; +} +async function recursiveClone(catalog, value) { + let rv = value; + if (isNonSerializable(value)) { + rv = undefined; + } + else if (isFunction(value)) { + return await serializeFunction(value); + } + else if (isSymbol(value)) { + rv = catalog.getSymbolName(value, _api_const__WEBPACK_IMPORTED_MODULE_0__.TAG.IS_SYMBOL); + } + else if (isArray(value)) { + const recurringName = catalog.getRecurringName(value, _api_const__WEBPACK_IMPORTED_MODULE_0__.TAG.VALUE_IS_REOCCURING_ARRAY); + if (recurringName) { + rv = recurringName; + } + else { + const arr = []; + for (const v of value) { + arr.push(await recursiveClone(catalog, v)); + } + rv = arr; + } + } + // TODO: Map, Set + else if (isObject(value)) { + const recurringName = catalog.getRecurringName(value, _api_const__WEBPACK_IMPORTED_MODULE_0__.TAG.VALUE_IS_REOCCURING_OBJECT); + if (recurringName) { + rv = recurringName; + } + else { + if (isSelfSerializableObject(value)) { + rv = serializeSelfSerializable(value); + if (typeof rv !== 'string') { + rv = await recursiveClone(catalog, rv); + } + } + else { + const obj = {}; + const ownKeys = Reflect.ownKeys(value); + for (const key of ownKeys) { + let newKey; + let newValue; + if (isSymbol(key)) { + newKey = catalog.getSymbolName(key, _api_const__WEBPACK_IMPORTED_MODULE_0__.TAG.IS_SYMBOL); + } + else { + newKey = key; + } + try { + // accessing value by key may throw + newValue = await recursiveClone(catalog, value[key]); + } + catch (error) { + newValue = stringifyError(error); + } + obj[newKey] = newValue; + } + rv = obj; + } + } + } + return rv; +} +async function serializeFunction(value) { + const fnBody = value.toString(); + if (fnBody.endsWith('{ [native code] }')) { + return _api_const__WEBPACK_IMPORTED_MODULE_0__.TAG.VALUE_IS_NATIVE_FUNCTION; + } + else { + const hash = await (0,_toolkit__WEBPACK_IMPORTED_MODULE_1__.SHA256)(fnBody); + return _api_const__WEBPACK_IMPORTED_MODULE_0__.TAG.VALUE_IS_FUCNTION(hash); + } +} +function serializeSelfSerializable(value) { + let rv = undefined; + try { + // rogue object may throw + rv = value.toJSON(); + } + catch (error) { + rv = stringifyError(error); + } + return rv; +} +function stringifyError(error) { + return typeof error?.toString === 'function' + ? _api_const__WEBPACK_IMPORTED_MODULE_0__.TAG.VALUE_HAD_EXCEPTION(error.toString()) + : _api_const__WEBPACK_IMPORTED_MODULE_0__.TAG.EXCEPTION; +} function nativeClonePostDataAdapter(set, key, value) { try { if (isNonSerializable(value)) { @@ -23,25 +180,20 @@ function nativeClonePostDataAdapter(set, key, value) { else if (isFunction(value)) { return value.toString(); } - else if (value instanceof Object || typeof value === 'object') { + else if (isObject(value)) { if (set.has(value)) { return undefined; } - set.add(value); + else { + set.add(value); + } } return value; } - catch (ignore) { - return undefined; + catch (error) { + return stringifyError(error); } } -function nativeClone(value) { - let set = new Set(); - const rv = JSON.parse(JSON.stringify(value, nativeClonePostDataAdapter.bind(null, set))); - set.clear(); - set = null; - return rv; -} function isArray(that) { return (that instanceof Array || that instanceof Uint8Array || @@ -52,7 +204,9 @@ function isArray(that) { that instanceof Int8Array || that instanceof Int16Array || that instanceof Int32Array || - that instanceof BigInt64Array); + that instanceof BigInt64Array || + that instanceof Float32Array || + that instanceof Float64Array); } function isFunction(that) { return (typeof that === 'function' && @@ -60,60 +214,28 @@ function isFunction(that) { typeof that.toString === 'function'); } function isSelfSerializableObject(that) { - return (that !== null && - typeof that === 'object' && - 'toJSON' in that && - typeof that.toJSON === 'function'); + let rv; + try { + rv = + that !== null && + typeof that === 'object' && + 'toJSON' in that && + typeof that.toJSON === 'function'; + } + catch (ignore) { + rv = false; + } + return rv; } function isNonSerializable(that) { - return that instanceof Element || that instanceof Document; + return (that instanceof Element || that instanceof Document //||that instanceof Promise + ); } function isSymbol(that) { return typeof that === 'symbol'; } function isObject(that) { - return that instanceof Object || typeof that === 'object'; -} -function clone(weakSet, value) { - let rv; - if (isNonSerializable(value)) { - rv = undefined; - } - else if (isArray(value)) { - rv = []; - for (const v of value) { - rv.push(clone(weakSet, v)); // recursion - } - } - else if (isSymbol(value)) { - rv = value.toString(); - } - else if (isObject(value)) { - if (isSelfSerializableObject(value)) { - try { - // rogue object may throw - rv = value.toJSON(); - } - catch (error) { - rv = - typeof error?.toString === 'function' - ? error.toString() - : _api_const__WEBPACK_IMPORTED_MODULE_0__.TAG.EXCEPTION; - } - } - else { - rv = {}; - const ownKeys = Reflect.ownKeys(value); - // TODO: ... - } - } - return rv; -} -function customClone(value) { - let ws = new WeakSet(); - const rv = clone(ws, value); - ws = null; - return rv; + return that instanceof Object || (that !== null && typeof that === 'object'); } @@ -130,13 +252,46 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ TAG: () => (/* binding */ TAG) /* harmony export */ }); const TAG = { - EXCEPTION: '👉️exception👈️', - VALUE_IS_EMPTY: '👉️empty👈️', - VALUE_IS_UNDEFINED: '👉️undefined👈️', - VALUE_IS_NULL: '👉️null👈️', + EXCEPTION: '⁉️(exception)', + VALUE_HAD_EXCEPTION: (str) => `⁉️(${str})`, + VALUE_IS_EMPTY: '(empty)', + VALUE_IS_UNDEFINED: '(undefined)', + VALUE_IS_NULL: '(null)', + VALUE_IS_REOCCURING_ARRAY: (id) => `♻️(recurring [0x${id}])`, + VALUE_IS_REOCCURING_OBJECT: (id) => `♻️(recurring {0x${id}})`, + IS_SYMBOL: (name, id) => `${name} 0x${id}`, + VALUE_IS_NATIVE_FUNCTION: '𝑓(native)', + VALUE_IS_FUCNTION: (hash) => `𝑓(${hash})`, }; +/***/ }), + +/***/ "./src/api/toolkit.ts": +/*!****************************!*\ + !*** ./src/api/toolkit.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SHA256: () => (/* binding */ SHA256), +/* harmony export */ hasValue: () => (/* binding */ hasValue) +/* harmony export */ }); +function hasValue(o) { + return undefined !== o && null !== o; +} +async function SHA256(data) { + const textAsBuffer = new TextEncoder().encode(data); + const hashBuffer = await window.crypto.subtle.digest('SHA-256', textAsBuffer); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + const digest = hashArray + .map((b) => b.toString(16).padStart(2, '0').toUpperCase()) + .join(''); + return digest; +} + + /***/ }) /******/ }); @@ -206,9 +361,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _api_const__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/api/const */ "./src/api/const.ts"); -function post(cloneFn, payload) { +async function post(cloneFn, payload) { + window.postMessage({ source: 'jsdiff-console-to-proxy-inprogress', on: true }, window.location.origin); try { - ['push', 'left', 'right'].forEach((key) => { + for (const key of ['push', 'left', 'right']) { if (Reflect.has(payload, key)) { const value = payload[key]; if (value === undefined) { @@ -218,16 +374,14 @@ function post(cloneFn, payload) { payload[key] = _api_const__WEBPACK_IMPORTED_MODULE_1__.TAG.VALUE_IS_NULL; } else { - payload[key] = cloneFn(value); + payload[key] = await cloneFn(value); } } - }); - window.postMessage({ - source: 'jsdiff-console-to-proxy', - payload, - }, window.location.origin); + } + window.postMessage({ source: 'jsdiff-console-to-proxy-compare', payload }, window.location.origin); } catch (e) { + window.postMessage({ source: 'jsdiff-console-to-proxy-inprogress', on: false }, window.location.origin); console.error('%cconsole.diff()', ` font-weight: 700; color: #000; @@ -239,16 +393,26 @@ function post(cloneFn, payload) { } } Object.assign(console, { - /** experimental */ - diffX: (...args) => post(_api_clone__WEBPACK_IMPORTED_MODULE_0__.customClone, args.length === 1 - ? { push: args[0], timestamp: Date.now() } - : { left: args[0], right: args[1], timestamp: Date.now() }), - diff: (...args) => post(_api_clone__WEBPACK_IMPORTED_MODULE_0__.nativeClone, args.length === 1 - ? { push: args[0], timestamp: Date.now() } - : { left: args[0], right: args[1], timestamp: Date.now() }), - diffLeft: (left) => post(_api_clone__WEBPACK_IMPORTED_MODULE_0__.nativeClone, { left, timestamp: Date.now() }), - diffRight: (right) => post(_api_clone__WEBPACK_IMPORTED_MODULE_0__.nativeClone, { right, timestamp: Date.now() }), - diffPush: (push) => post(_api_clone__WEBPACK_IMPORTED_MODULE_0__.nativeClone, { push, timestamp: Date.now() }), + /** diffX experimental custom clone */ + diffX: (...args) => { + post(_api_clone__WEBPACK_IMPORTED_MODULE_0__.customClone, args.length === 1 + ? { push: args[0], timestamp: Date.now() } + : { left: args[0], right: args[1], timestamp: Date.now() }); + }, + diff: (...args) => { + post(_api_clone__WEBPACK_IMPORTED_MODULE_0__.nativeClone, args.length === 1 + ? { push: args[0], timestamp: Date.now() } + : { left: args[0], right: args[1], timestamp: Date.now() }); + }, + diffLeft: (left) => { + post(_api_clone__WEBPACK_IMPORTED_MODULE_0__.nativeClone, { left, timestamp: Date.now() }); + }, + diffRight: (right) => { + post(_api_clone__WEBPACK_IMPORTED_MODULE_0__.nativeClone, { right, timestamp: Date.now() }); + }, + diffPush: (push) => { + post(_api_clone__WEBPACK_IMPORTED_MODULE_0__.nativeClone, { push, timestamp: Date.now() }); + }, }); console.debug('%c✚ console.diff()', ` font-weight: 700; diff --git a/bundle/js/jsdiff-panel.js b/bundle/js/jsdiff-panel.js index 2b87a04..61b8b36 100644 --- a/bundle/js/jsdiff-panel.js +++ b/bundle/js/jsdiff-panel.js @@ -11657,6 +11657,67 @@ body { /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); +/***/ }), + +/***/ "./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/progress-indicator.vue?vue&type=style&index=0&id=a2d10060&lang=scss&scoped=true": +/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/progress-indicator.vue?vue&type=style&index=0&id=a2d10060&lang=scss&scoped=true ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.progress-indicator[data-v-a2d10060] { + background-color: transparent; + height: 2px; + width: 100%; + overflow: hidden; + position: fixed; + top: 0; + display: block; +} +.progress-indicator > .-eye[data-v-a2d10060] { + background-image: linear-gradient(to right, rgba(179, 7, 247, 0) 15%, lime 50%, rgba(179, 7, 247, 0) 85%); + color: transparent; + height: 100%; + width: 20%; + animation: wt-scanning-eye-animation-a2d10060 1s linear infinite alternate,wt-scanning-eye-animation-blink-a2d10060 1.25s linear infinite alternate; +} +@keyframes wt-scanning-eye-animation-a2d10060 { +from { + transform: translateX(-100%); +} +to { + transform: translateX(500%); +} +} +@keyframes wt-scanning-eye-animation-blink-a2d10060 { +0% { + filter: hue-rotate(0deg); +} +80% { + filter: hue-rotate(0deg); +} +100% { + filter: hue-rotate(360deg); +} +}`, "",{"version":3,"sources":["webpack://./src/view/progress-indicator.vue","webpack://./progress-indicator.vue"],"names":[],"mappings":"AACA;EACE,6BAAA;EACA,WAAA;EACA,WAAA;EACA,gBAAA;EACA,eAAA;EACA,MAAA;EACA,cAAA;ACAF;ADEE;EACE,yGAAA;EAMA,kBAAA;EACA,YAAA;EACA,UAAA;EACA,mJAAA;ACLJ;ADSE;AACE;IACE,4BAAA;ACPJ;ADSE;IACE,2BAAA;ACPJ;AACF;ADUE;AACE;IACE,wBAAA;ACRJ;ADUE;IACE,wBAAA;ACRJ;ADUE;IACE,0BAAA;ACRJ;AACF","sourcesContent":["\n.progress-indicator {\n background-color: transparent;\n height: 2px;\n width: 100%;\n overflow: hidden;\n position: fixed;\n top: 0;\n display: block;\n\n & > .-eye {\n background-image: linear-gradient(\n to right,\n #b307f700 15%,\n #00ff00ff 50%,\n #b307f700 85%\n );\n color: transparent;\n height: 100%;\n width: 20%;\n animation: wt-scanning-eye-animation 1s linear infinite alternate,\n wt-scanning-eye-animation-blink 1.25s linear infinite alternate;\n }\n\n @keyframes wt-scanning-eye-animation {\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(500%);\n }\n }\n\n @keyframes wt-scanning-eye-animation-blink {\n 0% {\n filter: hue-rotate(0deg);\n }\n 80% {\n filter: hue-rotate(0deg);\n }\n 100% {\n filter: hue-rotate(360deg);\n }\n }\n}\n",".progress-indicator {\n background-color: transparent;\n height: 2px;\n width: 100%;\n overflow: hidden;\n position: fixed;\n top: 0;\n display: block;\n}\n.progress-indicator > .-eye {\n background-image: linear-gradient(to right, rgba(179, 7, 247, 0) 15%, lime 50%, rgba(179, 7, 247, 0) 85%);\n color: transparent;\n height: 100%;\n width: 20%;\n animation: wt-scanning-eye-animation 1s linear infinite alternate, wt-scanning-eye-animation-blink 1.25s linear infinite alternate;\n}\n@keyframes wt-scanning-eye-animation {\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(500%);\n }\n}\n@keyframes wt-scanning-eye-animation-blink {\n 0% {\n filter: hue-rotate(0deg);\n }\n 80% {\n filter: hue-rotate(0deg);\n }\n 100% {\n filter: hue-rotate(360deg);\n }\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + /***/ }), /***/ "./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/runtime/api.js": @@ -16826,6 +16887,61 @@ var update = _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_s /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_style_index_0_id_273e49b3_lang_scss__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_style_index_0_id_273e49b3_lang_scss__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_style_index_0_id_273e49b3_lang_scss__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); +/***/ }), + +/***/ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/cjs.js!./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/progress-indicator.vue?vue&type=style&index=0&id=a2d10060&lang=scss&scoped=true": +/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/cjs.js!./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/progress-indicator.vue?vue&type=style&index=0&id=a2d10060&lang=scss&scoped=true ***! + \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleDomAPI.js"); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertBySelector.js"); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/insertStyleElement.js"); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/styleTagTransform.js"); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_progress_indicator_vue_vue_type_style_index_0_id_a2d10060_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!../../node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./progress-indicator.vue?vue&type=style&index=0&id=a2d10060&lang=scss&scoped=true */ "./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/progress-indicator.vue?vue&type=style&index=0&id=a2d10060&lang=scss&scoped=true"); + + + + + + + + + + + +var options = {}; + +options.styleTagTransform = (_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); +options.setAttributes = (_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); + + options.insert = _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); + +options.domAPI = (_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); +options.insertStyleElement = (_node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); + +var update = _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_progress_indicator_vue_vue_type_style_index_0_id_a2d10060_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_6__["default"], options); + + + + + /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_progress_indicator_vue_vue_type_style_index_0_id_a2d10060_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_progress_indicator_vue_vue_type_style_index_0_id_a2d10060_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_progress_indicator_vue_vue_type_style_index_0_id_a2d10060_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); + + /***/ }), /***/ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": @@ -17121,6 +17237,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _api_formatter_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/api/formatter-dom */ "./src/api/formatter-dom.ts"); /* harmony import */ var _api_search__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/api/search */ "./src/api/search.ts"); /* harmony import */ var _api_toolkit__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/api/toolkit */ "./src/api/toolkit.ts"); +/* harmony import */ var _view_progress_indicator_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/view/progress-indicator.vue */ "./src/view/progress-indicator.vue"); + @@ -17146,6 +17264,7 @@ __webpack_require__.r(__webpack_exports__); codeExample: 'console.diff({a:1,b:1,c:3}, {a:1,b:2,d:3});', showUnchanged: true, now: appStartTimestamp, + inprogress: false, }); const compare = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)({ timestamp: 0, @@ -17195,9 +17314,14 @@ __webpack_require__.r(__webpack_exports__); const onClearResults = async () => { await chrome.storage.local.clear(); compare.value = { left: undefined, right: undefined, timestamp: 0 }; + state.inprogress = false; }; async function $_onRuntimeMessage(req) { - if ('jsdiff-proxy-to-panel' === req.source) { + if ('jsdiff-proxy-to-panel-inprogress' === req.source && + typeof req.on === 'boolean') { + state.inprogress = req.on; + } + else if ('jsdiff-proxy-to-panel-compare' === req.source) { const { lastApiReq } = await chrome.storage.local.get(['lastApiReq']); if ((0,_api_toolkit__WEBPACK_IMPORTED_MODULE_7__.hasValue)(lastApiReq)) { $_onDiffRequest(lastApiReq); @@ -17222,9 +17346,11 @@ __webpack_require__.r(__webpack_exports__); timestamp: timestamp || Date.now(), }; $_restartElapsedTime(); - (0,_api_formatter_dom__WEBPACK_IMPORTED_MODULE_5__.postDiffRender)(deltaEl.value); + (0,_api_formatter_dom__WEBPACK_IMPORTED_MODULE_5__.postDiffRender)(deltaEl.value).then(() => { + state.inprogress = false; + }); } - const __returned__ = { formatters, deltaEl, appStartTimestamp, state, compare, get timer() { return timer; }, set timer(v) { timer = v; }, elapsedTime, envokedTime, hasBothSides, deltaObj, deltaHtml, onToggleUnchanged, onCopyDelta, onClearResults, $_onRuntimeMessage, $_restartElapsedTime, $_onDiffRequest }; + const __returned__ = { formatters, deltaEl, appStartTimestamp, state, compare, get timer() { return timer; }, set timer(v) { timer = v; }, elapsedTime, envokedTime, hasBothSides, deltaObj, deltaHtml, onToggleUnchanged, onCopyDelta, onClearResults, $_onRuntimeMessage, $_restartElapsedTime, $_onDiffRequest, progressIndicator: _view_progress_indicator_vue__WEBPACK_IMPORTED_MODULE_8__["default"] }; Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true }); return __returned__; } @@ -17269,17 +17395,17 @@ const _hoisted_11 = [ _hoisted_10 ]; const _hoisted_12 = { - key: 0, + key: 1, class: "-match" }; const _hoisted_13 = { ref: "deltaEl", class: "-center" }; -const _hoisted_14 = { key: 1 }; +const _hoisted_14 = { key: 2 }; const _hoisted_15 = ["innerHTML"]; const _hoisted_16 = { - key: 2, + key: 3, class: "-empty" }; const _hoisted_17 = { class: "-center" }; @@ -17289,6 +17415,9 @@ const _hoisted_20 = ["href"]; const _hoisted_21 = ["href"]; function render(_ctx, _cache, $props, $setup, $data, $options) { return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("section", _hoisted_1, [ + ($setup.state.inprogress) + ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup["progressIndicator"], { key: 0 })) + : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("section", _hoisted_2, [ ($setup.hasBothSides) ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_3, [ @@ -17404,49 +17533,55 @@ function eachChildren(_ref2, fn) { } } const postDiffRender = (nodeArg) => { - setTimeout(function jsondiffpatchHtmlFormatterAdjustArrows() { - const node = nodeArg || document; - eachByQuery(node, '.jsondiffpatch-arrow', function (_ref3) { - const parentNode = _ref3.parentNode; - const children = _ref3.children; - const style = _ref3.style; - const arrowParent = parentNode; - const svg = children[0]; - const path = svg.children[1]; - svg.style.display = 'none'; - if (arrowParent instanceof HTMLElement) { - const destination = getElementText(arrowParent.querySelector('.jsondiffpatch-moved-destination')); - const container = arrowParent.parentNode; - let destinationElem; - eachChildren(container, function (child) { - if (child.getAttribute('data-key') === destination) { - destinationElem = child; - } - }); - if (destinationElem instanceof HTMLElement) { - try { - const distance = destinationElem.offsetTop - arrowParent.offsetTop; - svg.setAttribute('height', `${Math.abs(distance) + 6}`); - style.top = -8 + (distance > 0 ? 0 : distance) + 'px'; - const curve = distance > 0 - ? 'M30,0 Q-10,' + - Math.round(distance / 2) + - ' 26,' + - (distance - 4) - : 'M30,' + - -distance + - ' Q-10,' + - Math.round(-distance / 2) + - ' 26,4'; - path.setAttribute('d', curve); - svg.style.display = ''; - } - catch (ignore) { } + return new Promise((resolve) => { + setTimeout(() => { + jsondiffpatchHtmlFormatterAdjustArrows(nodeArg); + resolve(); + }, 10); + }); +}; +function jsondiffpatchHtmlFormatterAdjustArrows(nodeArg) { + const node = nodeArg || document; + eachByQuery(node, '.jsondiffpatch-arrow', function (_ref3) { + const parentNode = _ref3.parentNode; + const children = _ref3.children; + const style = _ref3.style; + const arrowParent = parentNode; + const svg = children[0]; + const path = svg.children[1]; + svg.style.display = 'none'; + if (arrowParent instanceof HTMLElement) { + const destination = getElementText(arrowParent.querySelector('.jsondiffpatch-moved-destination')); + const container = arrowParent.parentNode; + let destinationElem; + eachChildren(container, function (child) { + if (child.getAttribute('data-key') === destination) { + destinationElem = child; + } + }); + if (destinationElem instanceof HTMLElement) { + try { + const distance = destinationElem.offsetTop - arrowParent.offsetTop; + svg.setAttribute('height', `${Math.abs(distance) + 6}`); + style.top = -8 + (distance > 0 ? 0 : distance) + 'px'; + const curve = distance > 0 + ? 'M30,0 Q-10,' + + Math.round(distance / 2) + + ' 26,' + + (distance - 4) + : 'M30,' + + -distance + + ' Q-10,' + + Math.round(-distance / 2) + + ' 26,4'; + path.setAttribute('d', curve); + svg.style.display = ''; } + catch (ignore) { } } - }); - }, 10); -}; + } + }); +} /***/ }), @@ -17634,11 +17769,21 @@ function timeToString(time) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SHA256: () => (/* binding */ SHA256), /* harmony export */ hasValue: () => (/* binding */ hasValue) /* harmony export */ }); function hasValue(o) { return undefined !== o && null !== o; } +async function SHA256(data) { + const textAsBuffer = new TextEncoder().encode(data); + const hashBuffer = await window.crypto.subtle.digest('SHA-256', textAsBuffer); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + const digest = hashArray + .map((b) => b.toString(16).padStart(2, '0').toUpperCase()) + .join(''); + return digest; +} /***/ }), @@ -17692,6 +17837,35 @@ const __exports__ = /*#__PURE__*/(0,_node_modules_pnpm_vue_loader_17_2_2_vue_com if (false) {} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__); + +/***/ }), + +/***/ "./src/view/progress-indicator.vue": +/*!*****************************************!*\ + !*** ./src/view/progress-indicator.vue ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _progress_indicator_vue_vue_type_template_id_a2d10060_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./progress-indicator.vue?vue&type=template&id=a2d10060&scoped=true */ "./src/view/progress-indicator.vue?vue&type=template&id=a2d10060&scoped=true"); +/* harmony import */ var _progress_indicator_vue_vue_type_style_index_0_id_a2d10060_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./progress-indicator.vue?vue&type=style&index=0&id=a2d10060&lang=scss&scoped=true */ "./src/view/progress-indicator.vue?vue&type=style&index=0&id=a2d10060&lang=scss&scoped=true"); +/* harmony import */ var _node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/exportHelper.js"); + +const script = {} + +; + + +const __exports__ = /*#__PURE__*/(0,_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"])(script, [['render',_progress_indicator_vue_vue_type_template_id_a2d10060_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',"data-v-a2d10060"],['__file',"src/view/progress-indicator.vue"]]) +/* hot reload */ +if (false) {} + + /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__); /***/ }), @@ -17707,6 +17881,19 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_cjs_js_node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_style_index_0_id_273e49b3_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/cjs.js!../../node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!../../node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./panel.vue?vue&type=style&index=0&id=273e49b3&lang=scss */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/cjs.js!./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/panel.vue?vue&type=style&index=0&id=273e49b3&lang=scss"); +/***/ }), + +/***/ "./src/view/progress-indicator.vue?vue&type=style&index=0&id=a2d10060&lang=scss&scoped=true": +/*!**************************************************************************************************!*\ + !*** ./src/view/progress-indicator.vue?vue&type=style&index=0&id=a2d10060&lang=scss&scoped=true ***! + \**************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_pnpm_style_loader_3_3_3_webpack_5_86_0_node_modules_style_loader_dist_cjs_js_node_modules_pnpm_css_loader_6_8_1_webpack_5_86_0_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_pnpm_sass_loader_13_3_2_sass_1_63_3_webpack_5_86_0_node_modules_sass_loader_dist_cjs_js_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_progress_indicator_vue_vue_type_style_index_0_id_a2d10060_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/cjs.js!../../node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!../../node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./progress-indicator.vue?vue&type=style&index=0&id=a2d10060&lang=scss&scoped=true */ "./node_modules/.pnpm/style-loader@3.3.3_webpack@5.86.0/node_modules/style-loader/dist/cjs.js!./node_modules/.pnpm/css-loader@6.8.1_webpack@5.86.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/sass-loader@13.3.2_sass@1.63.3_webpack@5.86.0/node_modules/sass-loader/dist/cjs.js!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/progress-indicator.vue?vue&type=style&index=0&id=a2d10060&lang=scss&scoped=true"); + + /***/ }), /***/ "./src/view/panel.vue?vue&type=script&setup=true&lang=ts": @@ -17739,6 +17926,49 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_pnpm_ts_loader_9_4_3_typescript_5_1_3_webpack_5_86_0_node_modules_ts_loader_index_js_clonedRuleSet_1_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_panel_vue_vue_type_template_id_273e49b3_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/.pnpm/ts-loader@9.4.3_typescript@5.1.3_webpack@5.86.0/node_modules/ts-loader/index.js??clonedRuleSet-1!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./panel.vue?vue&type=template&id=273e49b3&ts=true */ "./node_modules/.pnpm/ts-loader@9.4.3_typescript@5.1.3_webpack@5.86.0/node_modules/ts-loader/index.js??clonedRuleSet-1!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/panel.vue?vue&type=template&id=273e49b3&ts=true"); +/***/ }), + +/***/ "./src/view/progress-indicator.vue?vue&type=template&id=a2d10060&scoped=true": +/*!***********************************************************************************!*\ + !*** ./src/view/progress-indicator.vue?vue&type=template&id=a2d10060&scoped=true ***! + \***********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* reexport safe */ _node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_progress_indicator_vue_vue_type_template_id_a2d10060_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ }); +/* harmony import */ var _node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_pnpm_vue_loader_17_2_2_vue_compiler_sfc_3_3_4_vue_3_3_4_webpack_5_86_0_node_modules_vue_loader_dist_index_js_ruleSet_1_rules_6_use_0_progress_indicator_vue_vue_type_template_id_a2d10060_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./progress-indicator.vue?vue&type=template&id=a2d10060&scoped=true */ "./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/progress-indicator.vue?vue&type=template&id=a2d10060&scoped=true"); + + +/***/ }), + +/***/ "./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/progress-indicator.vue?vue&type=template&id=a2d10060&scoped=true": +/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/.pnpm/vue-loader@17.2.2_@vue+compiler-sfc@3.3.4_vue@3.3.4_webpack@5.86.0/node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/view/progress-indicator.vue?vue&type=template&id=a2d10060&scoped=true ***! + \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ render: () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/.pnpm/vue@3.3.4/node_modules/vue/dist/vue.runtime.esm-bundler.js"); + + +const _withScopeId = n => ((0,vue__WEBPACK_IMPORTED_MODULE_0__.pushScopeId)("data-v-a2d10060"),n=n(),(0,vue__WEBPACK_IMPORTED_MODULE_0__.popScopeId)(),n) +const _hoisted_1 = { class: "progress-indicator" } +const _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { class: "-eye" }, null, -1 /* HOISTED */)) +const _hoisted_3 = [ + _hoisted_2 +] + +function render(_ctx, _cache) { + return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("aside", _hoisted_1, _hoisted_3)) +} + /***/ }), /***/ "./node_modules/.pnpm/vue@3.3.4/node_modules/vue/dist/vue.runtime.esm-bundler.js": diff --git a/bundle/js/jsdiff-proxy.js b/bundle/js/jsdiff-proxy.js index a205153..0ec6108 100644 --- a/bundle/js/jsdiff-proxy.js +++ b/bundle/js/jsdiff-proxy.js @@ -13,10 +13,16 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ TAG: () => (/* binding */ TAG) /* harmony export */ }); const TAG = { - EXCEPTION: '👉️exception👈️', - VALUE_IS_EMPTY: '👉️empty👈️', - VALUE_IS_UNDEFINED: '👉️undefined👈️', - VALUE_IS_NULL: '👉️null👈️', + EXCEPTION: '⁉️(exception)', + VALUE_HAD_EXCEPTION: (str) => `⁉️(${str})`, + VALUE_IS_EMPTY: '(empty)', + VALUE_IS_UNDEFINED: '(undefined)', + VALUE_IS_NULL: '(null)', + VALUE_IS_REOCCURING_ARRAY: (id) => `♻️(recurring [0x${id}])`, + VALUE_IS_REOCCURING_OBJECT: (id) => `♻️(recurring {0x${id}})`, + IS_SYMBOL: (name, id) => `${name} 0x${id}`, + VALUE_IS_NATIVE_FUNCTION: '𝑓(native)', + VALUE_IS_FUCNTION: (hash) => `𝑓(${hash})`, }; @@ -30,22 +36,40 @@ const TAG = { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ proxyMessageGate: () => (/* binding */ proxyMessageGate), -/* harmony export */ proxyMessageHandler: () => (/* binding */ proxyMessageHandler) +/* harmony export */ proxyCompareHandler: () => (/* binding */ proxyCompareHandler), +/* harmony export */ proxyInprogressHandler: () => (/* binding */ proxyInprogressHandler), +/* harmony export */ proxyMessageGate: () => (/* binding */ proxyMessageGate) /* harmony export */ }); /* harmony import */ var _api_const__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/api/const */ "./src/api/const.ts"); -function proxyMessageGate(callback) { +function proxyMessageGate(callbackInprogress, callbackCompare) { return function (e) { if (e.origin === window.location.origin && e.source === window && typeof e.data === 'object' && - e.data !== null && - e.data.source === 'jsdiff-console-to-proxy') { - callback(e); + e.data !== null) { + if ('jsdiff-console-to-proxy-inprogress' === e.data.source) { + callbackInprogress(e); + } + else if ('jsdiff-console-to-proxy-compare' === e.data.source) { + callbackCompare(e); + } } }; } +async function proxyCompareHandler(e) { + const current = e.data.payload; + const { lastApiReq: old } = await chrome.storage.local.get(['lastApiReq']); + const next = processComparisonObject(old, current); + await chrome.storage.local.set({ lastApiReq: next }); + chrome.runtime.sendMessage({ source: 'jsdiff-proxy-to-panel-compare' }); +} +function proxyInprogressHandler(e) { + chrome.runtime.sendMessage({ + source: 'jsdiff-proxy-to-panel-inprogress', + on: e.data.on, + }); +} function processComparisonObject(old, next) { if (!old) { old = { @@ -70,13 +94,6 @@ function processComparisonObject(old, next) { rv.timestamp = next.timestamp; return rv; } -async function proxyMessageHandler(e) { - const current = e.data.payload; - const { lastApiReq: old } = await chrome.storage.local.get(['lastApiReq']); - const next = processComparisonObject(old, current); - await chrome.storage.local.set({ lastApiReq: next }); - chrome.runtime.sendMessage({ source: 'jsdiff-proxy-to-panel' }); -} /***/ }) @@ -146,7 +163,7 @@ var __webpack_exports__ = {}; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _api_proxy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/api/proxy */ "./src/api/proxy.ts"); -window.addEventListener('message', (0,_api_proxy__WEBPACK_IMPORTED_MODULE_0__.proxyMessageGate)(_api_proxy__WEBPACK_IMPORTED_MODULE_0__.proxyMessageHandler)); +window.addEventListener('message', (0,_api_proxy__WEBPACK_IMPORTED_MODULE_0__.proxyMessageGate)(_api_proxy__WEBPACK_IMPORTED_MODULE_0__.proxyInprogressHandler, _api_proxy__WEBPACK_IMPORTED_MODULE_0__.proxyCompareHandler)); })(); diff --git a/manifest.json b/manifest.json index 0f27d1f..fe51d90 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "description": "Compare in-memory objects and see the result inside devtools panel with a set of console.diff functions.", "version": "3.0.1", "manifest_version": 3, - "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlCx2Bl0li+3idvfrH9cQL/MzphafGFqMUA2P+0vbyhwxsxWl0llOaGQbkirX5qCoAVHoUCPqu3hCjpVCv35igPbfqDs5bdLZZmXt2F0HjEQnWI/eZKd9IKcKYMplEeL2BodmpU02VrP1UnUzQHZeeMWk9ybgWOqCimkwliILVubRj5dxNB9AidLwO4Z5iGq/OvW9AJMYdxKxrLP2lF6/GGNcCBg+iCJZwlQOhFB9LbUjytT4ws3bIEX4b5zmWLqGKR1NiZfGug2eCWXt9oEKg2WkbXmBBzFKqxnM/bBUrVR29N9qNgx0f42qnyhsW3Bo4kPzE3d0asXCV5nofLTLEwIDAQAB", + "__key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlCx2Bl0li+3idvfrH9cQL/MzphafGFqMUA2P+0vbyhwxsxWl0llOaGQbkirX5qCoAVHoUCPqu3hCjpVCv35igPbfqDs5bdLZZmXt2F0HjEQnWI/eZKd9IKcKYMplEeL2BodmpU02VrP1UnUzQHZeeMWk9ybgWOqCimkwliILVubRj5dxNB9AidLwO4Z5iGq/OvW9AJMYdxKxrLP2lF6/GGNcCBg+iCJZwlQOhFB9LbUjytT4ws3bIEX4b5zmWLqGKR1NiZfGug2eCWXt9oEKg2WkbXmBBzFKqxnM/bBUrVR29N9qNgx0f42qnyhsW3Bo4kPzE3d0asXCV5nofLTLEwIDAQAB", "minimum_chrome_version": "100.0", "devtools_page": "bundle/jsdiff-devtools.html", "content_scripts": [ diff --git a/src/@types/index.d.ts b/src/@types/index.d.ts index 3b04cc9..542fbae 100644 --- a/src/@types/index.d.ts +++ b/src/@types/index.d.ts @@ -15,11 +15,26 @@ declare global { [key: string]: unknown; } + type TMessages = + | 'jsdiff-proxy-to-panel-compare' + | 'jsdiff-proxy-to-panel-inprogress' + | 'jsdiff-devtools-to-panel-search'; + interface ICompareMessage { - source: string; + source: TMessages; payload: ICompareMessagePayload; } + interface IProgressMessage { + source: TMessages; + on: boolean; + } + + interface ISearchMessage { + source: TMessages; + params: ISearchOptions; + } + type TSearchCommands = 'performSearch' | 'nextSearchResult' | 'cancelSearch'; interface ISearchOptions { @@ -27,9 +42,8 @@ declare global { query: string | null; } - interface IRuntimeMessageOptions { - source: string; - payload?: ICompareState; - params?: ISearchOptions; - } + interface IRuntimeMessageOptions + extends ICompareMessage, + IProgressMessage, + ISearchMessage {} } diff --git a/src/api/clone.ts b/src/api/clone.ts index 0fbdcc2..8ad007e 100644 --- a/src/api/clone.ts +++ b/src/api/clone.ts @@ -1,4 +1,185 @@ import { TAG } from '@/api/const'; +import { SHA256 } from './toolkit'; + +export async function nativeClone(value: unknown): Promise { + let set: Set | void = new Set(); + const rv = JSON.parse( + JSON.stringify(value, nativeClonePostDataAdapter.bind(null, set)) + ); + + set = set.clear(); + + return rv; +} + +class Catalog { + #instances: WeakMap; + #instanceCounter = 0; + #symbols: Map; + #symbolCounter = 0; + + constructor() { + this.#instances = new WeakMap(); + this.#symbols = new Map(); + } + + clear() { + this.#symbols.clear(); + } + + #counterToString(counter: number): string { + return counter.toString(16).padStart(4, '0'); + } + + getRecurringName(value: object, instanceBadge: (id: string) => string) { + let instanceId = this.#instances.get(value); + + if (instanceId) { + return instanceBadge(instanceId); + } else { + ++this.#instanceCounter; + instanceId = this.#counterToString(this.#instanceCounter); + this.#instances.set(value, instanceId); + + return null; + } + } + + getSymbolName( + value: Symbol, + symbolBage: (symbolName: string, symbolId: string) => string + ): string { + let symbolId = this.#symbols.get(value); + + if (!symbolId) { + ++this.#symbolCounter; + symbolId = this.#counterToString(this.#symbolCounter); + this.#symbols.set(value, symbolId); + } + + return symbolBage(value.toString(), symbolId); + } +} + +export async function customClone(value: unknown): Promise { + let catalog: Catalog | null = new Catalog(); + const rv = await recursiveClone(catalog, value); + + catalog.clear(); + catalog = null; + + return rv; +} + +async function recursiveClone( + catalog: Catalog, + value: unknown +): Promise { + let rv = value; + + if (isNonSerializable(value)) { + rv = undefined; + } else if (isFunction(value)) { + return await serializeFunction(value); + } else if (isSymbol(value)) { + rv = catalog.getSymbolName(value, TAG.IS_SYMBOL); + } else if (isArray(value)) { + const recurringName = catalog.getRecurringName( + value, + TAG.VALUE_IS_REOCCURING_ARRAY + ); + + if (recurringName) { + rv = recurringName; + } else { + const arr = []; + for (const v of value) { + arr.push(await recursiveClone(catalog, v)); + } + rv = arr; + } + } + // TODO: Map, Set + else if (isObject(value)) { + const recurringName = catalog.getRecurringName( + value, + TAG.VALUE_IS_REOCCURING_OBJECT + ); + + if (recurringName) { + rv = recurringName; + } else { + if (isSelfSerializableObject(value)) { + rv = serializeSelfSerializable(value); + + if (typeof rv !== 'string') { + rv = await recursiveClone(catalog, rv); + } + } else { + const obj = {} as ISerializeToObject; + const ownKeys = Reflect.ownKeys(value); + + for (const key of ownKeys) { + let newKey; + let newValue; + + if (isSymbol(key)) { + newKey = catalog.getSymbolName(key, TAG.IS_SYMBOL); + } else { + newKey = key; + } + + try { + // accessing value by key may throw + newValue = await recursiveClone(catalog, (value as any)[key]); + } catch (error) { + newValue = stringifyError(error); + } + + obj[newKey] = newValue; + } + + rv = obj; + } + } + } + + return rv; +} + +async function serializeFunction(value: IHasToString): Promise { + const fnBody = value.toString(); + + if (fnBody.endsWith('{ [native code] }')) { + return TAG.VALUE_IS_NATIVE_FUNCTION; + } else { + const hash = await SHA256(fnBody); + return TAG.VALUE_IS_FUCNTION(hash); + } +} + +interface ISerializeToObject { + [key: string]: any; +} + +function serializeSelfSerializable(value: IHasToJSON) { + let rv = undefined; + + try { + // rogue object may throw + rv = value.toJSON(); + } catch (error) { + rv = stringifyError(error); + } + + return rv; +} + +function stringifyError(error: unknown) { + return typeof error?.toString === 'function' + ? TAG.VALUE_HAD_EXCEPTION(error.toString()) + : TAG.EXCEPTION; +} function nativeClonePostDataAdapter( set: Set, @@ -10,31 +191,20 @@ function nativeClonePostDataAdapter( return undefined; } else if (isFunction(value)) { return value.toString(); - } else if (value instanceof Object || typeof value === 'object') { + } else if (isObject(value)) { if (set.has(value)) { return undefined; + } else { + set.add(value); } - set.add(value); } return value; - } catch (ignore) { - return undefined; + } catch (error) { + return stringifyError(error); } } -export function nativeClone(value: unknown): unknown { - let set: Set | null = new Set(); - const rv = JSON.parse( - JSON.stringify(value, nativeClonePostDataAdapter.bind(null, set)) - ); - - set.clear(); - set = null; - - return rv; -} - function isArray(that: unknown): that is unknown[] { return ( that instanceof Array || @@ -46,7 +216,9 @@ function isArray(that: unknown): that is unknown[] { that instanceof Int8Array || that instanceof Int16Array || that instanceof Int32Array || - that instanceof BigInt64Array + that instanceof BigInt64Array || + that instanceof Float32Array || + that instanceof Float64Array ); } @@ -67,16 +239,25 @@ function isFunction(that: unknown): that is IHasToString { } function isSelfSerializableObject(that: unknown): that is IHasToJSON { - return ( - that !== null && - typeof that === 'object' && - 'toJSON' in that && - typeof that.toJSON === 'function' - ); + let rv; + + try { + rv = + that !== null && + typeof that === 'object' && + 'toJSON' in that && + typeof that.toJSON === 'function'; + } catch (ignore) { + rv = false; + } + + return rv; } function isNonSerializable(that: unknown): boolean { - return that instanceof Element || that instanceof Document; + return ( + that instanceof Element || that instanceof Document //||that instanceof Promise + ); } function isSymbol(that: unknown): that is Symbol { @@ -84,46 +265,5 @@ function isSymbol(that: unknown): that is Symbol { } function isObject(that: unknown): that is object { - return that instanceof Object || typeof that === 'object'; -} - -function clone(weakSet: WeakSet, value: unknown): unknown { - let rv; - - if (isNonSerializable(value)) { - rv = undefined; - } else if (isArray(value)) { - rv = []; - for (const v of value) { - rv.push(clone(weakSet, v)); // recursion - } - } else if (isSymbol(value)) { - rv = value.toString(); - } else if (isObject(value)) { - if (isSelfSerializableObject(value)) { - try { - // rogue object may throw - rv = value.toJSON(); - } catch (error) { - rv = - typeof error?.toString === 'function' - ? error.toString() - : TAG.EXCEPTION; - } - } else { - rv = {}; - const ownKeys = Reflect.ownKeys(value); - - // TODO: ... - } - } - - return rv; -} - -export function customClone(value: unknown): unknown { - let ws: WeakSet | null = new WeakSet(); - const rv = clone(ws, value); - ws = null; - return rv; + return that instanceof Object || (that !== null && typeof that === 'object'); } diff --git a/src/api/const.ts b/src/api/const.ts index 30692f5..3028212 100644 --- a/src/api/const.ts +++ b/src/api/const.ts @@ -1,6 +1,12 @@ export const TAG = { - EXCEPTION: '👉️exception👈️', - VALUE_IS_EMPTY: '👉️empty👈️', - VALUE_IS_UNDEFINED: '👉️undefined👈️', - VALUE_IS_NULL: '👉️null👈️', + EXCEPTION: '⁉️(exception)', + VALUE_HAD_EXCEPTION: (str: string) => `⁉️(${str})`, + VALUE_IS_EMPTY: '(empty)', + VALUE_IS_UNDEFINED: '(undefined)', + VALUE_IS_NULL: '(null)', + VALUE_IS_REOCCURING_ARRAY: (id: string) => `♻️(recurring [0x${id}])`, + VALUE_IS_REOCCURING_OBJECT: (id: string) => `♻️(recurring {0x${id}})`, + IS_SYMBOL: (name: string, id: string) => `${name} 0x${id}`, + VALUE_IS_NATIVE_FUNCTION: '𝑓(native)', + VALUE_IS_FUCNTION: (hash: string) => `𝑓(${hash})`, }; diff --git a/src/api/formatter-dom.ts b/src/api/formatter-dom.ts index efade49..813e35c 100644 --- a/src/api/formatter-dom.ts +++ b/src/api/formatter-dom.ts @@ -26,54 +26,61 @@ function eachChildren( } } -export const postDiffRender = (nodeArg: HTMLElement | null) => { - setTimeout(function jsondiffpatchHtmlFormatterAdjustArrows() { - const node = nodeArg || document; +export const postDiffRender = (nodeArg: HTMLElement | null): Promise => { + return new Promise((resolve) => { + setTimeout(() => { + jsondiffpatchHtmlFormatterAdjustArrows(nodeArg); + resolve(); + }, 10); + }); +}; - eachByQuery(node, '.jsondiffpatch-arrow', function (_ref3) { - const parentNode = _ref3.parentNode; - const children = _ref3.children; - const style = _ref3.style; - const arrowParent = parentNode; - const svg = children[0] as HTMLElement; - const path = svg.children[1]; +function jsondiffpatchHtmlFormatterAdjustArrows(nodeArg: HTMLElement | null) { + const node = nodeArg || document; - svg.style.display = 'none'; + eachByQuery(node, '.jsondiffpatch-arrow', function (_ref3) { + const parentNode = _ref3.parentNode; + const children = _ref3.children; + const style = _ref3.style; + const arrowParent = parentNode; + const svg = children[0] as HTMLElement; + const path = svg.children[1]; - if (arrowParent instanceof HTMLElement) { - const destination = getElementText( - arrowParent.querySelector('.jsondiffpatch-moved-destination') - ); - const container = arrowParent.parentNode; - let destinationElem: unknown; + svg.style.display = 'none'; - eachChildren(container, function (child) { - if (child.getAttribute('data-key') === destination) { - destinationElem = child; - } - }); + if (arrowParent instanceof HTMLElement) { + const destination = getElementText( + arrowParent.querySelector('.jsondiffpatch-moved-destination') + ); + const container = arrowParent.parentNode; + let destinationElem: unknown; - if (destinationElem instanceof HTMLElement) { - try { - const distance = destinationElem.offsetTop - arrowParent.offsetTop; - svg.setAttribute('height', `${Math.abs(distance) + 6}`); - style.top = -8 + (distance > 0 ? 0 : distance) + 'px'; - const curve = - distance > 0 - ? 'M30,0 Q-10,' + - Math.round(distance / 2) + - ' 26,' + - (distance - 4) - : 'M30,' + - -distance + - ' Q-10,' + - Math.round(-distance / 2) + - ' 26,4'; - path.setAttribute('d', curve); - svg.style.display = ''; - } catch (ignore) {} + eachChildren(container, function (child) { + if (child.getAttribute('data-key') === destination) { + destinationElem = child; } + }); + + if (destinationElem instanceof HTMLElement) { + try { + const distance = destinationElem.offsetTop - arrowParent.offsetTop; + svg.setAttribute('height', `${Math.abs(distance) + 6}`); + style.top = -8 + (distance > 0 ? 0 : distance) + 'px'; + const curve = + distance > 0 + ? 'M30,0 Q-10,' + + Math.round(distance / 2) + + ' 26,' + + (distance - 4) + : 'M30,' + + -distance + + ' Q-10,' + + Math.round(-distance / 2) + + ' 26,4'; + path.setAttribute('d', curve); + svg.style.display = ''; + } catch (ignore) {} } - }); - }, 10); -}; + } + }); +} diff --git a/src/api/proxy.ts b/src/api/proxy.ts index f09ac47..09446b3 100644 --- a/src/api/proxy.ts +++ b/src/api/proxy.ts @@ -1,21 +1,45 @@ import { TAG } from '@/api/const'; export function proxyMessageGate( - callback: (e: T) => void + callbackInprogress: (e: T) => void, + callbackCompare: (e: T) => Promise ) { return function (e: T) { if ( e.origin === window.location.origin && e.source === window && typeof e.data === 'object' && - e.data !== null && - e.data.source === 'jsdiff-console-to-proxy' + e.data !== null ) { - callback(e); + if ('jsdiff-console-to-proxy-inprogress' === e.data.source) { + callbackInprogress(e); + } else if ('jsdiff-console-to-proxy-compare' === e.data.source) { + callbackCompare(e); + } } }; } +export async function proxyCompareHandler( + e: MessageEvent +): Promise { + const current = e.data.payload; + const { lastApiReq: old } = await chrome.storage.local.get(['lastApiReq']); + const next = processComparisonObject(old, current); + + await chrome.storage.local.set({ lastApiReq: next }); + chrome.runtime.sendMessage({ source: 'jsdiff-proxy-to-panel-compare' }); +} + +export function proxyInprogressHandler( + e: MessageEvent +): void { + chrome.runtime.sendMessage({ + source: 'jsdiff-proxy-to-panel-inprogress', + on: e.data.on, + }); +} + function processComparisonObject( old: ICompareMessagePayload, next: ICompareMessagePayload @@ -46,12 +70,3 @@ function processComparisonObject( return rv; } - -export async function proxyMessageHandler(e: MessageEvent) { - const current = e.data.payload; - const { lastApiReq: old } = await chrome.storage.local.get(['lastApiReq']); - const next = processComparisonObject(old, current); - - await chrome.storage.local.set({ lastApiReq: next }); - chrome.runtime.sendMessage({ source: 'jsdiff-proxy-to-panel' }); -} diff --git a/src/api/toolkit.ts b/src/api/toolkit.ts index 359c844..979b5f5 100644 --- a/src/api/toolkit.ts +++ b/src/api/toolkit.ts @@ -1,3 +1,14 @@ export function hasValue(o: unknown): boolean { return undefined !== o && null !== o; } + +export async function SHA256(data: string): Promise { + const textAsBuffer = new TextEncoder().encode(data); + const hashBuffer = await window.crypto.subtle.digest('SHA-256', textAsBuffer); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + const digest = hashArray + .map((b) => b.toString(16).padStart(2, '0').toUpperCase()) + .join(''); + + return digest; +} diff --git a/src/jsdiff-console.ts b/src/jsdiff-console.ts index 2aa6aae..edd79d4 100644 --- a/src/jsdiff-console.ts +++ b/src/jsdiff-console.ts @@ -1,12 +1,17 @@ import { customClone, nativeClone } from '@/api/clone'; import { TAG } from '@/api/const'; -function post( - cloneFn: (value: unknown) => unknown, +async function post( + cloneFn: (value: unknown) => Promise, payload: ICompareMessagePayload -) { +): Promise { + window.postMessage( + { source: 'jsdiff-console-to-proxy-inprogress', on: true }, + window.location.origin + ); + try { - ['push', 'left', 'right'].forEach((key) => { + for (const key of ['push', 'left', 'right']) { if (Reflect.has(payload, key)) { const value = payload[key]; @@ -15,19 +20,21 @@ function post( } else if (value === null) { payload[key] = TAG.VALUE_IS_NULL; } else { - payload[key] = cloneFn(value); + payload[key] = await cloneFn(value); } } - }); + } window.postMessage( - { - source: 'jsdiff-console-to-proxy', - payload, - }, + { source: 'jsdiff-console-to-proxy-compare', payload }, window.location.origin ); } catch (e) { + window.postMessage( + { source: 'jsdiff-console-to-proxy-inprogress', on: false }, + window.location.origin + ); + console.error( '%cconsole.diff()', ` @@ -44,27 +51,32 @@ function post( } Object.assign(console, { - /** experimental */ - diffX: (...args: unknown[]) => + /** diffX experimental custom clone */ + diffX: (...args: unknown[]) => { post( customClone, args.length === 1 ? { push: args[0], timestamp: Date.now() } : { left: args[0], right: args[1], timestamp: Date.now() } - ), - diff: (...args: unknown[]) => + ); + }, + diff: (...args: unknown[]) => { post( nativeClone, args.length === 1 ? { push: args[0], timestamp: Date.now() } : { left: args[0], right: args[1], timestamp: Date.now() } - ), - diffLeft: (left: unknown) => - post(nativeClone, { left, timestamp: Date.now() }), - diffRight: (right: unknown) => - post(nativeClone, { right, timestamp: Date.now() }), - diffPush: (push: unknown) => - post(nativeClone, { push, timestamp: Date.now() }), + ); + }, + diffLeft: (left: unknown) => { + post(nativeClone, { left, timestamp: Date.now() }); + }, + diffRight: (right: unknown) => { + post(nativeClone, { right, timestamp: Date.now() }); + }, + diffPush: (push: unknown) => { + post(nativeClone, { push, timestamp: Date.now() }); + }, }); console.debug( diff --git a/src/jsdiff-proxy.ts b/src/jsdiff-proxy.ts index 27c3997..3097ecf 100644 --- a/src/jsdiff-proxy.ts +++ b/src/jsdiff-proxy.ts @@ -1,3 +1,10 @@ -import { proxyMessageGate, proxyMessageHandler } from '@/api/proxy'; +import { + proxyMessageGate, + proxyInprogressHandler, + proxyCompareHandler, +} from '@/api/proxy'; -window.addEventListener('message', proxyMessageGate(proxyMessageHandler)); +window.addEventListener( + 'message', + proxyMessageGate(proxyInprogressHandler, proxyCompareHandler) +); diff --git a/src/view/panel.vue b/src/view/panel.vue index b2ce162..d43adcc 100644 --- a/src/view/panel.vue +++ b/src/view/panel.vue @@ -1,5 +1,7 @@