1 |
- {"version":3,"file":"comments-comments-app.js?v=99ad0732a4dc660e42c4","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/node_modules/pinia/dist/pinia.mjs","webpack:///nextcloud/node_modules/vue-observe-visibility/dist/vue-observe-visibility.esm.js","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue?vue&type=script&lang=js","webpack://nextcloud/./node_modules/vue-material-design-icons/MessageReplyText.vue?2121","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue?vue&type=template&id=5b37a4cf","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue?vue&type=script&lang=js","webpack://nextcloud/./node_modules/vue-material-design-icons/Refresh.vue?0940","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue?vue&type=template&id=7301d745","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/esm/assert-valid-pattern.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/esm/brace-expressions.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/esm/unescape.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/esm/ast.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/esm/index.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/headers.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/esm/escape.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/dav.js","webpack:///nextcloud/node_modules/layerr/dist/layerr.js","webpack:///nextcloud/apps/comments/src/utils/davUtils.js","webpack:///nextcloud/apps/comments/src/services/DavClient.js","webpack:///nextcloud/apps/comments/src/services/GetComments.ts","webpack:///nextcloud/node_modules/webdav/dist/node/response.js","webpack://nextcloud/./apps/comments/src/components/Comment.vue?d1f7","webpack:///nextcloud/apps/comments/src/utils/decodeHtmlEntities.js","webpack:///nextcloud/apps/comments/src/store/deletedCommentLimbo.js","webpack:///nextcloud/apps/comments/src/logger.js","webpack:///nextcloud/apps/comments/src/mixins/CommentMixin.js","webpack:///nextcloud/apps/comments/src/services/EditComment.js","webpack:///nextcloud/apps/comments/src/services/DeleteComment.js","webpack:///nextcloud/apps/comments/src/services/NewComment.js","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/comments/src/components/Comment.vue","webpack://nextcloud/./apps/comments/src/components/Comment.vue?d12f","webpack://nextcloud/./apps/comments/src/components/Comment.vue?7f26","webpack:///nextcloud/apps/comments/src/mixins/CommentView.ts","webpack:///nextcloud/apps/comments/src/views/Comments.vue","webpack:///nextcloud/apps/comments/src/views/Comments.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/comments/src/services/ReadComments.ts","webpack:///nextcloud/apps/comments/src/utils/cancelableRequest.js","webpack://nextcloud/./apps/comments/src/views/Comments.vue?2e2c","webpack://nextcloud/./apps/comments/src/views/Comments.vue?f45b","webpack://nextcloud/./apps/comments/src/views/Comments.vue?0e41","webpack:///nextcloud/apps/comments/src/services/CommentsInstance.js","webpack:///nextcloud/apps/comments/src/comments-app.js","webpack:///nextcloud/node_modules/balanced-match/index.js","webpack:///nextcloud/node_modules/brace-expansion/index.js","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=style&index=0&id=6f6ef97e&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/comments/src/views/Comments.vue?vue&type=style&index=0&id=222c65b2&prod&lang=scss&scoped=true","webpack:///nextcloud/node_modules/fast-xml-parser/src/fxp.js","webpack:///nextcloud/node_modules/nested-property/dist/nested-property.js","webpack:///nextcloud/node_modules/path-posix/index.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/*!\n * pinia v2.2.6\n * (c) 2024 Eduardo San Martin Morote\n * @license MIT\n */\nimport { hasInjectionContext, inject, toRaw, watch, unref, markRaw, effectScope, ref, isVue2, isRef, isReactive, set, getCurrentScope, onScopeDispose, getCurrentInstance, reactive, toRef, del, nextTick, computed, toRefs } from 'vue-demi';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\n/**\n * setActivePinia must be called to handle SSR at the top of functions like\n * `fetch`, `setup`, `serverPrefetch` and others\n */\nlet activePinia;\n/**\n * Sets or unsets the active pinia. Used in SSR and internally when calling\n * actions and getters\n *\n * @param pinia - Pinia instance\n */\n// @ts-expect-error: cannot constrain the type of the return\nconst setActivePinia = (pinia) => (activePinia = pinia);\n/**\n * Get the currently active pinia if there is any.\n */\nconst getActivePinia = () => (hasInjectionContext() && inject(piniaSymbol)) || activePinia;\nconst piniaSymbol = ((process.env.NODE_ENV !== 'production') ? Symbol('pinia') : /* istanbul ignore next */ Symbol());\n\nfunction isPlainObject(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\no) {\n return (o &&\n typeof o === 'object' &&\n Object.prototype.toString.call(o) === '[object Object]' &&\n typeof o.toJSON !== 'function');\n}\n// type DeepReadonly<T> = { readonly [P in keyof T]: DeepReadonly<T[P]> }\n// TODO: can we change these to numbers?\n/**\n * Possible types for SubscriptionCallback\n */\nvar MutationType;\n(function (MutationType) {\n /**\n * Direct mutation of the state:\n *\n * - `store.name = 'new name'`\n * - `store.$state.name = 'new name'`\n * - `store.list.push('new item')`\n */\n MutationType[\"direct\"] = \"direct\";\n /**\n * Mutated the state with `$patch` and an object\n *\n * - `store.$patch({ name: 'newName' })`\n */\n MutationType[\"patchObject\"] = \"patch object\";\n /**\n * Mutated the state with `$patch` and a function\n *\n * - `store.$patch(state => state.name = 'newName')`\n */\n MutationType[\"patchFunction\"] = \"patch function\";\n // maybe reset? for $state = {} and $reset\n})(MutationType || (MutationType = {}));\n\nconst IS_CLIENT = typeof window !== 'undefined';\n\n/*\n * FileSaver.js A saveAs() FileSaver implementation.\n *\n * Originally by Eli Grey, adapted as an ESM module by Eduardo San Martin\n * Morote.\n *\n * License : MIT\n */\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nconst _global = /*#__PURE__*/ (() => typeof window === 'object' && window.window === window\n ? window\n : typeof self === 'object' && self.self === self\n ? self\n : typeof global === 'object' && global.global === global\n ? global\n : typeof globalThis === 'object'\n ? globalThis\n : { HTMLElement: null })();\nfunction bom(blob, { autoBom = false } = {}) {\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (autoBom &&\n /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n }\n return blob;\n}\nfunction download(url, name, opts) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n xhr.onload = function () {\n saveAs(xhr.response, name, opts);\n };\n xhr.onerror = function () {\n console.error('could not download file');\n };\n xhr.send();\n}\nfunction corsEnabled(url) {\n const xhr = new XMLHttpRequest();\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false);\n try {\n xhr.send();\n }\n catch (e) { }\n return xhr.status >= 200 && xhr.status <= 299;\n}\n// `a.click()` doesn't work for all browsers (#465)\nfunction click(node) {\n try {\n node.dispatchEvent(new MouseEvent('click'));\n }\n catch (e) {\n const evt = document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);\n node.dispatchEvent(evt);\n }\n}\nconst _navigator = typeof navigator === 'object' ? navigator : { userAgent: '' };\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nconst isMacOSWebView = /*#__PURE__*/ (() => /Macintosh/.test(_navigator.userAgent) &&\n /AppleWebKit/.test(_navigator.userAgent) &&\n !/Safari/.test(_navigator.userAgent))();\nconst saveAs = !IS_CLIENT\n ? () => { } // noop\n : // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program\n typeof HTMLAnchorElement !== 'undefined' &&\n 'download' in HTMLAnchorElement.prototype &&\n !isMacOSWebView\n ? downloadSaveAs\n : // Use msSaveOrOpenBlob as a second approach\n 'msSaveOrOpenBlob' in _navigator\n ? msSaveAs\n : // Fallback to using FileReader and a popup\n fileSaverSaveAs;\nfunction downloadSaveAs(blob, name = 'download', opts) {\n const a = document.createElement('a');\n a.download = name;\n a.rel = 'noopener'; // tabnabbing\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob;\n if (a.origin !== location.origin) {\n if (corsEnabled(a.href)) {\n download(blob, name, opts);\n }\n else {\n a.target = '_blank';\n click(a);\n }\n }\n else {\n click(a);\n }\n }\n else {\n // Support blobs\n a.href = URL.createObjectURL(blob);\n setTimeout(function () {\n URL.revokeObjectURL(a.href);\n }, 4e4); // 40s\n setTimeout(function () {\n click(a);\n }, 0);\n }\n}\nfunction msSaveAs(blob, name = 'download', opts) {\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts);\n }\n else {\n const a = document.createElement('a');\n a.href = blob;\n a.target = '_blank';\n setTimeout(function () {\n click(a);\n });\n }\n }\n else {\n // @ts-ignore: works on windows\n navigator.msSaveOrOpenBlob(bom(blob, opts), name);\n }\n}\nfunction fileSaverSaveAs(blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank');\n if (popup) {\n popup.document.title = popup.document.body.innerText = 'downloading...';\n }\n if (typeof blob === 'string')\n return download(blob, name, opts);\n const force = blob.type === 'application/octet-stream';\n const isSafari = /constructor/i.test(String(_global.HTMLElement)) || 'safari' in _global;\n const isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) &&\n typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n const reader = new FileReader();\n reader.onloadend = function () {\n let url = reader.result;\n if (typeof url !== 'string') {\n popup = null;\n throw new Error('Wrong reader.result type');\n }\n url = isChromeIOS\n ? url\n : url.replace(/^data:[^;]*;/, 'data:attachment/file;');\n if (popup) {\n popup.location.href = url;\n }\n else {\n location.assign(url);\n }\n popup = null; // reverse-tabnabbing #460\n };\n reader.readAsDataURL(blob);\n }\n else {\n const url = URL.createObjectURL(blob);\n if (popup)\n popup.location.assign(url);\n else\n location.href = url;\n popup = null; // reverse-tabnabbing #460\n setTimeout(function () {\n URL.revokeObjectURL(url);\n }, 4e4); // 40s\n }\n}\n\n/**\n * Shows a toast or console.log\n *\n * @param message - message to log\n * @param type - different color of the tooltip\n */\nfunction toastMessage(message, type) {\n const piniaMessage = '🍍 ' + message;\n if (typeof __VUE_DEVTOOLS_TOAST__ === 'function') {\n // No longer available :(\n __VUE_DEVTOOLS_TOAST__(piniaMessage, type);\n }\n else if (type === 'error') {\n console.error(piniaMessage);\n }\n else if (type === 'warn') {\n console.warn(piniaMessage);\n }\n else {\n console.log(piniaMessage);\n }\n}\nfunction isPinia(o) {\n return '_a' in o && 'install' in o;\n}\n\n/**\n * This file contain devtools actions, they are not Pinia actions.\n */\n// ---\nfunction checkClipboardAccess() {\n if (!('clipboard' in navigator)) {\n toastMessage(`Your browser doesn't support the Clipboard API`, 'error');\n return true;\n }\n}\nfunction checkNotFocusedError(error) {\n if (error instanceof Error &&\n error.message.toLowerCase().includes('document is not focused')) {\n toastMessage('You need to activate the \"Emulate a focused page\" setting in the \"Rendering\" panel of devtools.', 'warn');\n return true;\n }\n return false;\n}\nasync function actionGlobalCopyState(pinia) {\n if (checkClipboardAccess())\n return;\n try {\n await navigator.clipboard.writeText(JSON.stringify(pinia.state.value));\n toastMessage('Global state copied to clipboard.');\n }\n catch (error) {\n if (checkNotFocusedError(error))\n return;\n toastMessage(`Failed to serialize the state. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nasync function actionGlobalPasteState(pinia) {\n if (checkClipboardAccess())\n return;\n try {\n loadStoresState(pinia, JSON.parse(await navigator.clipboard.readText()));\n toastMessage('Global state pasted from clipboard.');\n }\n catch (error) {\n if (checkNotFocusedError(error))\n return;\n toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nasync function actionGlobalSaveState(pinia) {\n try {\n saveAs(new Blob([JSON.stringify(pinia.state.value)], {\n type: 'text/plain;charset=utf-8',\n }), 'pinia-state.json');\n }\n catch (error) {\n toastMessage(`Failed to export the state as JSON. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nlet fileInput;\nfunction getFileOpener() {\n if (!fileInput) {\n fileInput = document.createElement('input');\n fileInput.type = 'file';\n fileInput.accept = '.json';\n }\n function openFile() {\n return new Promise((resolve, reject) => {\n fileInput.onchange = async () => {\n const files = fileInput.files;\n if (!files)\n return resolve(null);\n const file = files.item(0);\n if (!file)\n return resolve(null);\n return resolve({ text: await file.text(), file });\n };\n // @ts-ignore: TODO: changed from 4.3 to 4.4\n fileInput.oncancel = () => resolve(null);\n fileInput.onerror = reject;\n fileInput.click();\n });\n }\n return openFile;\n}\nasync function actionGlobalOpenStateFile(pinia) {\n try {\n const open = getFileOpener();\n const result = await open();\n if (!result)\n return;\n const { text, file } = result;\n loadStoresState(pinia, JSON.parse(text));\n toastMessage(`Global state imported from \"${file.name}\".`);\n }\n catch (error) {\n toastMessage(`Failed to import the state from JSON. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nfunction loadStoresState(pinia, state) {\n for (const key in state) {\n const storeState = pinia.state.value[key];\n // store is already instantiated, patch it\n if (storeState) {\n Object.assign(storeState, state[key]);\n }\n else {\n // store is not instantiated, set the initial state\n pinia.state.value[key] = state[key];\n }\n }\n}\n\nfunction formatDisplay(display) {\n return {\n _custom: {\n display,\n },\n };\n}\nconst PINIA_ROOT_LABEL = '🍍 Pinia (root)';\nconst PINIA_ROOT_ID = '_root';\nfunction formatStoreForInspectorTree(store) {\n return isPinia(store)\n ? {\n id: PINIA_ROOT_ID,\n label: PINIA_ROOT_LABEL,\n }\n : {\n id: store.$id,\n label: store.$id,\n };\n}\nfunction formatStoreForInspectorState(store) {\n if (isPinia(store)) {\n const storeNames = Array.from(store._s.keys());\n const storeMap = store._s;\n const state = {\n state: storeNames.map((storeId) => ({\n editable: true,\n key: storeId,\n value: store.state.value[storeId],\n })),\n getters: storeNames\n .filter((id) => storeMap.get(id)._getters)\n .map((id) => {\n const store = storeMap.get(id);\n return {\n editable: false,\n key: id,\n value: store._getters.reduce((getters, key) => {\n getters[key] = store[key];\n return getters;\n }, {}),\n };\n }),\n };\n return state;\n }\n const state = {\n state: Object.keys(store.$state).map((key) => ({\n editable: true,\n key,\n value: store.$state[key],\n })),\n };\n // avoid adding empty getters\n if (store._getters && store._getters.length) {\n state.getters = store._getters.map((getterName) => ({\n editable: false,\n key: getterName,\n value: store[getterName],\n }));\n }\n if (store._customProperties.size) {\n state.customProperties = Array.from(store._customProperties).map((key) => ({\n editable: true,\n key,\n value: store[key],\n }));\n }\n return state;\n}\nfunction formatEventData(events) {\n if (!events)\n return {};\n if (Array.isArray(events)) {\n // TODO: handle add and delete for arrays and objects\n return events.reduce((data, event) => {\n data.keys.push(event.key);\n data.operations.push(event.type);\n data.oldValue[event.key] = event.oldValue;\n data.newValue[event.key] = event.newValue;\n return data;\n }, {\n oldValue: {},\n keys: [],\n operations: [],\n newValue: {},\n });\n }\n else {\n return {\n operation: formatDisplay(events.type),\n key: formatDisplay(events.key),\n oldValue: events.oldValue,\n newValue: events.newValue,\n };\n }\n}\nfunction formatMutationType(type) {\n switch (type) {\n case MutationType.direct:\n return 'mutation';\n case MutationType.patchFunction:\n return '$patch';\n case MutationType.patchObject:\n return '$patch';\n default:\n return 'unknown';\n }\n}\n\n// timeline can be paused when directly changing the state\nlet isTimelineActive = true;\nconst componentStateTypes = [];\nconst MUTATIONS_LAYER_ID = 'pinia:mutations';\nconst INSPECTOR_ID = 'pinia';\nconst { assign: assign$1 } = Object;\n/**\n * Gets the displayed name of a store in devtools\n *\n * @param id - id of the store\n * @returns a formatted string\n */\nconst getStoreType = (id) => '🍍 ' + id;\n/**\n * Add the pinia plugin without any store. Allows displaying a Pinia plugin tab\n * as soon as it is added to the application.\n *\n * @param app - Vue application\n * @param pinia - pinia instance\n */\nfunction registerPiniaDevtools(app, pinia) {\n setupDevtoolsPlugin({\n id: 'dev.esm.pinia',\n label: 'Pinia 🍍',\n logo: 'https://pinia.vuejs.org/logo.svg',\n packageName: 'pinia',\n homepage: 'https://pinia.vuejs.org',\n componentStateTypes,\n app,\n }, (api) => {\n if (typeof api.now !== 'function') {\n toastMessage('You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.');\n }\n api.addTimelineLayer({\n id: MUTATIONS_LAYER_ID,\n label: `Pinia 🍍`,\n color: 0xe5df88,\n });\n api.addInspector({\n id: INSPECTOR_ID,\n label: 'Pinia 🍍',\n icon: 'storage',\n treeFilterPlaceholder: 'Search stores',\n actions: [\n {\n icon: 'content_copy',\n action: () => {\n actionGlobalCopyState(pinia);\n },\n tooltip: 'Serialize and copy the state',\n },\n {\n icon: 'content_paste',\n action: async () => {\n await actionGlobalPasteState(pinia);\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n },\n tooltip: 'Replace the state with the content of your clipboard',\n },\n {\n icon: 'save',\n action: () => {\n actionGlobalSaveState(pinia);\n },\n tooltip: 'Save the state as a JSON file',\n },\n {\n icon: 'folder_open',\n action: async () => {\n await actionGlobalOpenStateFile(pinia);\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n },\n tooltip: 'Import the state from a JSON file',\n },\n ],\n nodeActions: [\n {\n icon: 'restore',\n tooltip: 'Reset the state (with \"$reset\")',\n action: (nodeId) => {\n const store = pinia._s.get(nodeId);\n if (!store) {\n toastMessage(`Cannot reset \"${nodeId}\" store because it wasn't found.`, 'warn');\n }\n else if (typeof store.$reset !== 'function') {\n toastMessage(`Cannot reset \"${nodeId}\" store because it doesn't have a \"$reset\" method implemented.`, 'warn');\n }\n else {\n store.$reset();\n toastMessage(`Store \"${nodeId}\" reset.`);\n }\n },\n },\n ],\n });\n api.on.inspectComponent((payload, ctx) => {\n const proxy = (payload.componentInstance &&\n payload.componentInstance.proxy);\n if (proxy && proxy._pStores) {\n const piniaStores = payload.componentInstance.proxy._pStores;\n Object.values(piniaStores).forEach((store) => {\n payload.instanceData.state.push({\n type: getStoreType(store.$id),\n key: 'state',\n editable: true,\n value: store._isOptionsAPI\n ? {\n _custom: {\n value: toRaw(store.$state),\n actions: [\n {\n icon: 'restore',\n tooltip: 'Reset the state of this store',\n action: () => store.$reset(),\n },\n ],\n },\n }\n : // NOTE: workaround to unwrap transferred refs\n Object.keys(store.$state).reduce((state, key) => {\n state[key] = store.$state[key];\n return state;\n }, {}),\n });\n if (store._getters && store._getters.length) {\n payload.instanceData.state.push({\n type: getStoreType(store.$id),\n key: 'getters',\n editable: false,\n value: store._getters.reduce((getters, key) => {\n try {\n getters[key] = store[key];\n }\n catch (error) {\n // @ts-expect-error: we just want to show it in devtools\n getters[key] = error;\n }\n return getters;\n }, {}),\n });\n }\n });\n }\n });\n api.on.getInspectorTree((payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n let stores = [pinia];\n stores = stores.concat(Array.from(pinia._s.values()));\n payload.rootNodes = (payload.filter\n ? stores.filter((store) => '$id' in store\n ? store.$id\n .toLowerCase()\n .includes(payload.filter.toLowerCase())\n : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase()))\n : stores).map(formatStoreForInspectorTree);\n }\n });\n // Expose pinia instance as $pinia to window\n globalThis.$pinia = pinia;\n api.on.getInspectorState((payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n const inspectedStore = payload.nodeId === PINIA_ROOT_ID\n ? pinia\n : pinia._s.get(payload.nodeId);\n if (!inspectedStore) {\n // this could be the selected store restored for a different project\n // so it's better not to say anything here\n return;\n }\n if (inspectedStore) {\n // Expose selected store as $store to window\n if (payload.nodeId !== PINIA_ROOT_ID)\n globalThis.$store = toRaw(inspectedStore);\n payload.state = formatStoreForInspectorState(inspectedStore);\n }\n }\n });\n api.on.editInspectorState((payload, ctx) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n const inspectedStore = payload.nodeId === PINIA_ROOT_ID\n ? pinia\n : pinia._s.get(payload.nodeId);\n if (!inspectedStore) {\n return toastMessage(`store \"${payload.nodeId}\" not found`, 'error');\n }\n const { path } = payload;\n if (!isPinia(inspectedStore)) {\n // access only the state\n if (path.length !== 1 ||\n !inspectedStore._customProperties.has(path[0]) ||\n path[0] in inspectedStore.$state) {\n path.unshift('$state');\n }\n }\n else {\n // Root access, we can omit the `.value` because the devtools API does it for us\n path.unshift('state');\n }\n isTimelineActive = false;\n payload.set(inspectedStore, path, payload.state.value);\n isTimelineActive = true;\n }\n });\n api.on.editComponentState((payload) => {\n if (payload.type.startsWith('🍍')) {\n const storeId = payload.type.replace(/^🍍\\s*/, '');\n const store = pinia._s.get(storeId);\n if (!store) {\n return toastMessage(`store \"${storeId}\" not found`, 'error');\n }\n const { path } = payload;\n if (path[0] !== 'state') {\n return toastMessage(`Invalid path for store \"${storeId}\":\\n${path}\\nOnly state can be modified.`);\n }\n // rewrite the first entry to be able to directly set the state as\n // well as any other path\n path[0] = '$state';\n isTimelineActive = false;\n payload.set(store, path, payload.state.value);\n isTimelineActive = true;\n }\n });\n });\n}\nfunction addStoreToDevtools(app, store) {\n if (!componentStateTypes.includes(getStoreType(store.$id))) {\n componentStateTypes.push(getStoreType(store.$id));\n }\n setupDevtoolsPlugin({\n id: 'dev.esm.pinia',\n label: 'Pinia 🍍',\n logo: 'https://pinia.vuejs.org/logo.svg',\n packageName: 'pinia',\n homepage: 'https://pinia.vuejs.org',\n componentStateTypes,\n app,\n settings: {\n logStoreChanges: {\n label: 'Notify about new/deleted stores',\n type: 'boolean',\n defaultValue: true,\n },\n // useEmojis: {\n // label: 'Use emojis in messages ⚡️',\n // type: 'boolean',\n // defaultValue: true,\n // },\n },\n }, (api) => {\n // gracefully handle errors\n const now = typeof api.now === 'function' ? api.now.bind(api) : Date.now;\n store.$onAction(({ after, onError, name, args }) => {\n const groupId = runningActionId++;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🛫 ' + name,\n subtitle: 'start',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n },\n groupId,\n },\n });\n after((result) => {\n activeAction = undefined;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🛬 ' + name,\n subtitle: 'end',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n result,\n },\n groupId,\n },\n });\n });\n onError((error) => {\n activeAction = undefined;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n logType: 'error',\n title: '💥 ' + name,\n subtitle: 'end',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n error,\n },\n groupId,\n },\n });\n });\n }, true);\n store._customProperties.forEach((name) => {\n watch(() => unref(store[name]), (newValue, oldValue) => {\n api.notifyComponentUpdate();\n api.sendInspectorState(INSPECTOR_ID);\n if (isTimelineActive) {\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: 'Change',\n subtitle: name,\n data: {\n newValue,\n oldValue,\n },\n groupId: activeAction,\n },\n });\n }\n }, { deep: true });\n });\n store.$subscribe(({ events, type }, state) => {\n api.notifyComponentUpdate();\n api.sendInspectorState(INSPECTOR_ID);\n if (!isTimelineActive)\n return;\n // rootStore.state[store.id] = state\n const eventData = {\n time: now(),\n title: formatMutationType(type),\n data: assign$1({ store: formatDisplay(store.$id) }, formatEventData(events)),\n groupId: activeAction,\n };\n if (type === MutationType.patchFunction) {\n eventData.subtitle = '⤵️';\n }\n else if (type === MutationType.patchObject) {\n eventData.subtitle = '🧩';\n }\n else if (events && !Array.isArray(events)) {\n eventData.subtitle = events.type;\n }\n if (events) {\n eventData.data['rawEvent(s)'] = {\n _custom: {\n display: 'DebuggerEvent',\n type: 'object',\n tooltip: 'raw DebuggerEvent[]',\n value: events,\n },\n };\n }\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: eventData,\n });\n }, { detached: true, flush: 'sync' });\n const hotUpdate = store._hotUpdate;\n store._hotUpdate = markRaw((newStore) => {\n hotUpdate(newStore);\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🔥 ' + store.$id,\n subtitle: 'HMR update',\n data: {\n store: formatDisplay(store.$id),\n info: formatDisplay(`HMR update`),\n },\n },\n });\n // update the devtools too\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n });\n const { $dispose } = store;\n store.$dispose = () => {\n $dispose();\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n api.getSettings().logStoreChanges &&\n toastMessage(`Disposed \"${store.$id}\" store 🗑`);\n };\n // trigger an update so it can display new registered stores\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n api.getSettings().logStoreChanges &&\n toastMessage(`\"${store.$id}\" store installed 🆕`);\n });\n}\nlet runningActionId = 0;\nlet activeAction;\n/**\n * Patches a store to enable action grouping in devtools by wrapping the store with a Proxy that is passed as the\n * context of all actions, allowing us to set `runningAction` on each access and effectively associating any state\n * mutation to the action.\n *\n * @param store - store to patch\n * @param actionNames - list of actionst to patch\n */\nfunction patchActionForGrouping(store, actionNames, wrapWithProxy) {\n // original actions of the store as they are given by pinia. We are going to override them\n const actions = actionNames.reduce((storeActions, actionName) => {\n // use toRaw to avoid tracking #541\n storeActions[actionName] = toRaw(store)[actionName];\n return storeActions;\n }, {});\n for (const actionName in actions) {\n store[actionName] = function () {\n // the running action id is incremented in a before action hook\n const _actionId = runningActionId;\n const trackedStore = wrapWithProxy\n ? new Proxy(store, {\n get(...args) {\n activeAction = _actionId;\n return Reflect.get(...args);\n },\n set(...args) {\n activeAction = _actionId;\n return Reflect.set(...args);\n },\n })\n : store;\n // For Setup Stores we need https://github.com/tc39/proposal-async-context\n activeAction = _actionId;\n const retValue = actions[actionName].apply(trackedStore, arguments);\n // this is safer as async actions in Setup Stores would associate mutations done outside of the action\n activeAction = undefined;\n return retValue;\n };\n }\n}\n/**\n * pinia.use(devtoolsPlugin)\n */\nfunction devtoolsPlugin({ app, store, options }) {\n // HMR module\n if (store.$id.startsWith('__hot:')) {\n return;\n }\n // detect option api vs setup api\n store._isOptionsAPI = !!options.state;\n // Do not overwrite actions mocked by @pinia/testing (#2298)\n if (!store._p._testing) {\n patchActionForGrouping(store, Object.keys(options.actions), store._isOptionsAPI);\n // Upgrade the HMR to also update the new actions\n const originalHotUpdate = store._hotUpdate;\n toRaw(store)._hotUpdate = function (newStore) {\n originalHotUpdate.apply(this, arguments);\n patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions), !!store._isOptionsAPI);\n };\n }\n addStoreToDevtools(app, \n // FIXME: is there a way to allow the assignment from Store<Id, S, G, A> to StoreGeneric?\n store);\n}\n\n/**\n * Creates a Pinia instance to be used by the application\n */\nfunction createPinia() {\n const scope = effectScope(true);\n // NOTE: here we could check the window object for a state and directly set it\n // if there is anything like it with Vue 3 SSR\n const state = scope.run(() => ref({}));\n let _p = [];\n // plugins added before calling app.use(pinia)\n let toBeInstalled = [];\n const pinia = markRaw({\n install(app) {\n // this allows calling useStore() outside of a component setup after\n // installing pinia's plugin\n setActivePinia(pinia);\n if (!isVue2) {\n pinia._a = app;\n app.provide(piniaSymbol, pinia);\n app.config.globalProperties.$pinia = pinia;\n /* istanbul ignore else */\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n registerPiniaDevtools(app, pinia);\n }\n toBeInstalled.forEach((plugin) => _p.push(plugin));\n toBeInstalled = [];\n }\n },\n use(plugin) {\n if (!this._a && !isVue2) {\n toBeInstalled.push(plugin);\n }\n else {\n _p.push(plugin);\n }\n return this;\n },\n _p,\n // it's actually undefined here\n // @ts-expect-error\n _a: null,\n _e: scope,\n _s: new Map(),\n state,\n });\n // pinia devtools rely on dev only features so they cannot be forced unless\n // the dev build of Vue is used. Avoid old browsers like IE11.\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && typeof Proxy !== 'undefined') {\n pinia.use(devtoolsPlugin);\n }\n return pinia;\n}\n/**\n * Dispose a Pinia instance by stopping its effectScope and removing the state, plugins and stores. This is mostly\n * useful in tests, with both a testing pinia or a regular pinia and in applications that use multiple pinia instances.\n * Once disposed, the pinia instance cannot be used anymore.\n *\n * @param pinia - pinia instance\n */\nfunction disposePinia(pinia) {\n pinia._e.stop();\n pinia._s.clear();\n pinia._p.splice(0);\n pinia.state.value = {};\n // @ts-expect-error: non valid\n pinia._a = null;\n}\n\n/**\n * Checks if a function is a `StoreDefinition`.\n *\n * @param fn - object to test\n * @returns true if `fn` is a StoreDefinition\n */\nconst isUseStore = (fn) => {\n return typeof fn === 'function' && typeof fn.$id === 'string';\n};\n/**\n * Mutates in place `newState` with `oldState` to _hot update_ it. It will\n * remove any key not existing in `newState` and recursively merge plain\n * objects.\n *\n * @param newState - new state object to be patched\n * @param oldState - old state that should be used to patch newState\n * @returns - newState\n */\nfunction patchObject(newState, oldState) {\n // no need to go through symbols because they cannot be serialized anyway\n for (const key in oldState) {\n const subPatch = oldState[key];\n // skip the whole sub tree\n if (!(key in newState)) {\n continue;\n }\n const targetValue = newState[key];\n if (isPlainObject(targetValue) &&\n isPlainObject(subPatch) &&\n !isRef(subPatch) &&\n !isReactive(subPatch)) {\n newState[key] = patchObject(targetValue, subPatch);\n }\n else {\n // objects are either a bit more complex (e.g. refs) or primitives, so we\n // just set the whole thing\n if (isVue2) {\n set(newState, key, subPatch);\n }\n else {\n newState[key] = subPatch;\n }\n }\n }\n return newState;\n}\n/**\n * Creates an _accept_ function to pass to `import.meta.hot` in Vite applications.\n *\n * @example\n * ```js\n * const useUser = defineStore(...)\n * if (import.meta.hot) {\n * import.meta.hot.accept(acceptHMRUpdate(useUser, import.meta.hot))\n * }\n * ```\n *\n * @param initialUseStore - return of the defineStore to hot update\n * @param hot - `import.meta.hot`\n */\nfunction acceptHMRUpdate(initialUseStore, hot) {\n // strip as much as possible from iife.prod\n if (!(process.env.NODE_ENV !== 'production')) {\n return () => { };\n }\n return (newModule) => {\n const pinia = hot.data.pinia || initialUseStore._pinia;\n if (!pinia) {\n // this store is still not used\n return;\n }\n // preserve the pinia instance across loads\n hot.data.pinia = pinia;\n // console.log('got data', newStore)\n for (const exportName in newModule) {\n const useStore = newModule[exportName];\n // console.log('checking for', exportName)\n if (isUseStore(useStore) && pinia._s.has(useStore.$id)) {\n // console.log('Accepting update for', useStore.$id)\n const id = useStore.$id;\n if (id !== initialUseStore.$id) {\n console.warn(`The id of the store changed from \"${initialUseStore.$id}\" to \"${id}\". Reloading.`);\n // return import.meta.hot.invalidate()\n return hot.invalidate();\n }\n const existingStore = pinia._s.get(id);\n if (!existingStore) {\n console.log(`[Pinia]: skipping hmr because store doesn't exist yet`);\n return;\n }\n useStore(pinia, existingStore);\n }\n }\n };\n}\n\nconst noop = () => { };\nfunction addSubscription(subscriptions, callback, detached, onCleanup = noop) {\n subscriptions.push(callback);\n const removeSubscription = () => {\n const idx = subscriptions.indexOf(callback);\n if (idx > -1) {\n subscriptions.splice(idx, 1);\n onCleanup();\n }\n };\n if (!detached && getCurrentScope()) {\n onScopeDispose(removeSubscription);\n }\n return removeSubscription;\n}\nfunction triggerSubscriptions(subscriptions, ...args) {\n subscriptions.slice().forEach((callback) => {\n callback(...args);\n });\n}\n\nconst fallbackRunWithContext = (fn) => fn();\n/**\n * Marks a function as an action for `$onAction`\n * @internal\n */\nconst ACTION_MARKER = Symbol();\n/**\n * Action name symbol. Allows to add a name to an action after defining it\n * @internal\n */\nconst ACTION_NAME = Symbol();\nfunction mergeReactiveObjects(target, patchToApply) {\n // Handle Map instances\n if (target instanceof Map && patchToApply instanceof Map) {\n patchToApply.forEach((value, key) => target.set(key, value));\n }\n else if (target instanceof Set && patchToApply instanceof Set) {\n // Handle Set instances\n patchToApply.forEach(target.add, target);\n }\n // no need to go through symbols because they cannot be serialized anyway\n for (const key in patchToApply) {\n if (!patchToApply.hasOwnProperty(key))\n continue;\n const subPatch = patchToApply[key];\n const targetValue = target[key];\n if (isPlainObject(targetValue) &&\n isPlainObject(subPatch) &&\n target.hasOwnProperty(key) &&\n !isRef(subPatch) &&\n !isReactive(subPatch)) {\n // NOTE: here I wanted to warn about inconsistent types but it's not possible because in setup stores one might\n // start the value of a property as a certain type e.g. a Map, and then for some reason, during SSR, change that\n // to `undefined`. When trying to hydrate, we want to override the Map with `undefined`.\n target[key] = mergeReactiveObjects(targetValue, subPatch);\n }\n else {\n // @ts-expect-error: subPatch is a valid value\n target[key] = subPatch;\n }\n }\n return target;\n}\nconst skipHydrateSymbol = (process.env.NODE_ENV !== 'production')\n ? Symbol('pinia:skipHydration')\n : /* istanbul ignore next */ Symbol();\nconst skipHydrateMap = /*#__PURE__*/ new WeakMap();\n/**\n * Tells Pinia to skip the hydration process of a given object. This is useful in setup stores (only) when you return a\n * stateful object in the store but it isn't really state. e.g. returning a router instance in a setup store.\n *\n * @param obj - target object\n * @returns obj\n */\nfunction skipHydrate(obj) {\n return isVue2\n ? // in @vue/composition-api, the refs are sealed so defineProperty doesn't work...\n /* istanbul ignore next */ skipHydrateMap.set(obj, 1) && obj\n : Object.defineProperty(obj, skipHydrateSymbol, {});\n}\n/**\n * Returns whether a value should be hydrated\n *\n * @param obj - target variable\n * @returns true if `obj` should be hydrated\n */\nfunction shouldHydrate(obj) {\n return isVue2\n ? /* istanbul ignore next */ !skipHydrateMap.has(obj)\n : !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);\n}\nconst { assign } = Object;\nfunction isComputed(o) {\n return !!(isRef(o) && o.effect);\n}\nfunction createOptionsStore(id, options, pinia, hot) {\n const { state, actions, getters } = options;\n const initialState = pinia.state.value[id];\n let store;\n function setup() {\n if (!initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\n /* istanbul ignore if */\n if (isVue2) {\n set(pinia.state.value, id, state ? state() : {});\n }\n else {\n pinia.state.value[id] = state ? state() : {};\n }\n }\n // avoid creating a state in pinia.state.value\n const localState = (process.env.NODE_ENV !== 'production') && hot\n ? // use ref() to unwrap refs inside state TODO: check if this is still necessary\n toRefs(ref(state ? state() : {}).value)\n : toRefs(pinia.state.value[id]);\n return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {\n if ((process.env.NODE_ENV !== 'production') && name in localState) {\n console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with \"${name}\" in store \"${id}\".`);\n }\n computedGetters[name] = markRaw(computed(() => {\n setActivePinia(pinia);\n // it was created just before\n const store = pinia._s.get(id);\n // allow cross using stores\n /* istanbul ignore if */\n if (isVue2 && !store._r)\n return;\n // @ts-expect-error\n // return getters![name].call(context, context)\n // TODO: avoid reading the getter while assigning with a global variable\n return getters[name].call(store, store);\n }));\n return computedGetters;\n }, {}));\n }\n store = createSetupStore(id, setup, options, pinia, hot, true);\n return store;\n}\nfunction createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {\n let scope;\n const optionsForPlugin = assign({ actions: {} }, options);\n /* istanbul ignore if */\n if ((process.env.NODE_ENV !== 'production') && !pinia._e.active) {\n throw new Error('Pinia destroyed');\n }\n // watcher options for $subscribe\n const $subscribeOptions = { deep: true };\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production') && !isVue2) {\n $subscribeOptions.onTrigger = (event) => {\n /* istanbul ignore else */\n if (isListening) {\n debuggerEvents = event;\n // avoid triggering this while the store is being built and the state is being set in pinia\n }\n else if (isListening == false && !store._hotUpdating) {\n // let patch send all the events together later\n /* istanbul ignore else */\n if (Array.isArray(debuggerEvents)) {\n debuggerEvents.push(event);\n }\n else {\n console.error('🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.');\n }\n }\n };\n }\n // internal state\n let isListening; // set to true at the end\n let isSyncListening; // set to true at the end\n let subscriptions = [];\n let actionSubscriptions = [];\n let debuggerEvents;\n const initialState = pinia.state.value[$id];\n // avoid setting the state for option stores if it is set\n // by the setup\n if (!isOptionsStore && !initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\n /* istanbul ignore if */\n if (isVue2) {\n set(pinia.state.value, $id, {});\n }\n else {\n pinia.state.value[$id] = {};\n }\n }\n const hotState = ref({});\n // avoid triggering too many listeners\n // https://github.com/vuejs/pinia/issues/1129\n let activeListener;\n function $patch(partialStateOrMutator) {\n let subscriptionMutation;\n isListening = isSyncListening = false;\n // reset the debugger events since patches are sync\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n debuggerEvents = [];\n }\n if (typeof partialStateOrMutator === 'function') {\n partialStateOrMutator(pinia.state.value[$id]);\n subscriptionMutation = {\n type: MutationType.patchFunction,\n storeId: $id,\n events: debuggerEvents,\n };\n }\n else {\n mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);\n subscriptionMutation = {\n type: MutationType.patchObject,\n payload: partialStateOrMutator,\n storeId: $id,\n events: debuggerEvents,\n };\n }\n const myListenerId = (activeListener = Symbol());\n nextTick().then(() => {\n if (activeListener === myListenerId) {\n isListening = true;\n }\n });\n isSyncListening = true;\n // because we paused the watcher, we need to manually call the subscriptions\n triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);\n }\n const $reset = isOptionsStore\n ? function $reset() {\n const { state } = options;\n const newState = state ? state() : {};\n // we use a patch to group all changes into one single subscription\n this.$patch(($state) => {\n // @ts-expect-error: FIXME: shouldn't error?\n assign($state, newState);\n });\n }\n : /* istanbul ignore next */\n (process.env.NODE_ENV !== 'production')\n ? () => {\n throw new Error(`🍍: Store \"${$id}\" is built using the setup syntax and does not implement $reset().`);\n }\n : noop;\n function $dispose() {\n scope.stop();\n subscriptions = [];\n actionSubscriptions = [];\n pinia._s.delete($id);\n }\n /**\n * Helper that wraps function so it can be tracked with $onAction\n * @param fn - action to wrap\n * @param name - name of the action\n */\n const action = (fn, name = '') => {\n if (ACTION_MARKER in fn) {\n fn[ACTION_NAME] = name;\n return fn;\n }\n const wrappedAction = function () {\n setActivePinia(pinia);\n const args = Array.from(arguments);\n const afterCallbackList = [];\n const onErrorCallbackList = [];\n function after(callback) {\n afterCallbackList.push(callback);\n }\n function onError(callback) {\n onErrorCallbackList.push(callback);\n }\n // @ts-expect-error\n triggerSubscriptions(actionSubscriptions, {\n args,\n name: wrappedAction[ACTION_NAME],\n store,\n after,\n onError,\n });\n let ret;\n try {\n ret = fn.apply(this && this.$id === $id ? this : store, args);\n // handle sync errors\n }\n catch (error) {\n triggerSubscriptions(onErrorCallbackList, error);\n throw error;\n }\n if (ret instanceof Promise) {\n return ret\n .then((value) => {\n triggerSubscriptions(afterCallbackList, value);\n return value;\n })\n .catch((error) => {\n triggerSubscriptions(onErrorCallbackList, error);\n return Promise.reject(error);\n });\n }\n // trigger after callbacks\n triggerSubscriptions(afterCallbackList, ret);\n return ret;\n };\n wrappedAction[ACTION_MARKER] = true;\n wrappedAction[ACTION_NAME] = name; // will be set later\n // @ts-expect-error: we are intentionally limiting the returned type to just Fn\n // because all the added properties are internals that are exposed through `$onAction()` only\n return wrappedAction;\n };\n const _hmrPayload = /*#__PURE__*/ markRaw({\n actions: {},\n getters: {},\n state: [],\n hotState,\n });\n const partialStore = {\n _p: pinia,\n // _s: scope,\n $id,\n $onAction: addSubscription.bind(null, actionSubscriptions),\n $patch,\n $reset,\n $subscribe(callback, options = {}) {\n const removeSubscription = addSubscription(subscriptions, callback, options.detached, () => stopWatcher());\n const stopWatcher = scope.run(() => watch(() => pinia.state.value[$id], (state) => {\n if (options.flush === 'sync' ? isSyncListening : isListening) {\n callback({\n storeId: $id,\n type: MutationType.direct,\n events: debuggerEvents,\n }, state);\n }\n }, assign({}, $subscribeOptions, options)));\n return removeSubscription;\n },\n $dispose,\n };\n /* istanbul ignore if */\n if (isVue2) {\n // start as non ready\n partialStore._r = false;\n }\n const store = reactive((process.env.NODE_ENV !== 'production') || ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT)\n ? assign({\n _hmrPayload,\n _customProperties: markRaw(new Set()), // devtools custom properties\n }, partialStore\n // must be added later\n // setupStore\n )\n : partialStore);\n // store the partial store now so the setup of stores can instantiate each other before they are finished without\n // creating infinite loops.\n pinia._s.set($id, store);\n const runWithContext = (pinia._a && pinia._a.runWithContext) || fallbackRunWithContext;\n // TODO: idea create skipSerialize that marks properties as non serializable and they are skipped\n const setupStore = runWithContext(() => pinia._e.run(() => (scope = effectScope()).run(() => setup({ action }))));\n // overwrite existing actions to support $onAction\n for (const key in setupStore) {\n const prop = setupStore[key];\n if ((isRef(prop) && !isComputed(prop)) || isReactive(prop)) {\n // mark it as a piece of state to be serialized\n if ((process.env.NODE_ENV !== 'production') && hot) {\n set(hotState.value, key, toRef(setupStore, key));\n // createOptionStore directly sets the state in pinia.state.value so we\n // can just skip that\n }\n else if (!isOptionsStore) {\n // in setup stores we must hydrate the state and sync pinia state tree with the refs the user just created\n if (initialState && shouldHydrate(prop)) {\n if (isRef(prop)) {\n prop.value = initialState[key];\n }\n else {\n // probably a reactive object, lets recursively assign\n // @ts-expect-error: prop is unknown\n mergeReactiveObjects(prop, initialState[key]);\n }\n }\n // transfer the ref to the pinia state to keep everything in sync\n /* istanbul ignore if */\n if (isVue2) {\n set(pinia.state.value[$id], key, prop);\n }\n else {\n pinia.state.value[$id][key] = prop;\n }\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n _hmrPayload.state.push(key);\n }\n // action\n }\n else if (typeof prop === 'function') {\n const actionValue = (process.env.NODE_ENV !== 'production') && hot ? prop : action(prop, key);\n // this a hot module replacement store because the hotUpdate method needs\n // to do it with the right context\n /* istanbul ignore if */\n if (isVue2) {\n set(setupStore, key, actionValue);\n }\n else {\n // @ts-expect-error\n setupStore[key] = actionValue;\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n _hmrPayload.actions[key] = prop;\n }\n // list actions so they can be used in plugins\n // @ts-expect-error\n optionsForPlugin.actions[key] = prop;\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n // add getters for devtools\n if (isComputed(prop)) {\n _hmrPayload.getters[key] = isOptionsStore\n ? // @ts-expect-error\n options.getters[key]\n : prop;\n if (IS_CLIENT) {\n const getters = setupStore._getters ||\n // @ts-expect-error: same\n (setupStore._getters = markRaw([]));\n getters.push(key);\n }\n }\n }\n }\n // add the state, getters, and action properties\n /* istanbul ignore if */\n if (isVue2) {\n Object.keys(setupStore).forEach((key) => {\n set(store, key, setupStore[key]);\n });\n }\n else {\n assign(store, setupStore);\n // allows retrieving reactive objects with `storeToRefs()`. Must be called after assigning to the reactive object.\n // Make `storeToRefs()` work with `reactive()` #799\n assign(toRaw(store), setupStore);\n }\n // use this instead of a computed with setter to be able to create it anywhere\n // without linking the computed lifespan to wherever the store is first\n // created.\n Object.defineProperty(store, '$state', {\n get: () => ((process.env.NODE_ENV !== 'production') && hot ? hotState.value : pinia.state.value[$id]),\n set: (state) => {\n /* istanbul ignore if */\n if ((process.env.NODE_ENV !== 'production') && hot) {\n throw new Error('cannot set hotState');\n }\n $patch(($state) => {\n // @ts-expect-error: FIXME: shouldn't error?\n assign($state, state);\n });\n },\n });\n // add the hotUpdate before plugins to allow them to override it\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n store._hotUpdate = markRaw((newStore) => {\n store._hotUpdating = true;\n newStore._hmrPayload.state.forEach((stateKey) => {\n if (stateKey in store.$state) {\n const newStateTarget = newStore.$state[stateKey];\n const oldStateSource = store.$state[stateKey];\n if (typeof newStateTarget === 'object' &&\n isPlainObject(newStateTarget) &&\n isPlainObject(oldStateSource)) {\n patchObject(newStateTarget, oldStateSource);\n }\n else {\n // transfer the ref\n newStore.$state[stateKey] = oldStateSource;\n }\n }\n // patch direct access properties to allow store.stateProperty to work as\n // store.$state.stateProperty\n set(store, stateKey, toRef(newStore.$state, stateKey));\n });\n // remove deleted state properties\n Object.keys(store.$state).forEach((stateKey) => {\n if (!(stateKey in newStore.$state)) {\n del(store, stateKey);\n }\n });\n // avoid devtools logging this as a mutation\n isListening = false;\n isSyncListening = false;\n pinia.state.value[$id] = toRef(newStore._hmrPayload, 'hotState');\n isSyncListening = true;\n nextTick().then(() => {\n isListening = true;\n });\n for (const actionName in newStore._hmrPayload.actions) {\n const actionFn = newStore[actionName];\n set(store, actionName, action(actionFn, actionName));\n }\n // TODO: does this work in both setup and option store?\n for (const getterName in newStore._hmrPayload.getters) {\n const getter = newStore._hmrPayload.getters[getterName];\n const getterValue = isOptionsStore\n ? // special handling of options api\n computed(() => {\n setActivePinia(pinia);\n return getter.call(store, store);\n })\n : getter;\n set(store, getterName, getterValue);\n }\n // remove deleted getters\n Object.keys(store._hmrPayload.getters).forEach((key) => {\n if (!(key in newStore._hmrPayload.getters)) {\n del(store, key);\n }\n });\n // remove old actions\n Object.keys(store._hmrPayload.actions).forEach((key) => {\n if (!(key in newStore._hmrPayload.actions)) {\n del(store, key);\n }\n });\n // update the values used in devtools and to allow deleting new properties later on\n store._hmrPayload = newStore._hmrPayload;\n store._getters = newStore._getters;\n store._hotUpdating = false;\n });\n }\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n const nonEnumerable = {\n writable: true,\n configurable: true,\n // avoid warning on devtools trying to display this property\n enumerable: false,\n };\n ['_p', '_hmrPayload', '_getters', '_customProperties'].forEach((p) => {\n Object.defineProperty(store, p, assign({ value: store[p] }, nonEnumerable));\n });\n }\n /* istanbul ignore if */\n if (isVue2) {\n // mark the store as ready before plugins\n store._r = true;\n }\n // apply all plugins\n pinia._p.forEach((extender) => {\n /* istanbul ignore else */\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n const extensions = scope.run(() => extender({\n store: store,\n app: pinia._a,\n pinia,\n options: optionsForPlugin,\n }));\n Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));\n assign(store, extensions);\n }\n else {\n assign(store, scope.run(() => extender({\n store: store,\n app: pinia._a,\n pinia,\n options: optionsForPlugin,\n })));\n }\n });\n if ((process.env.NODE_ENV !== 'production') &&\n store.$state &&\n typeof store.$state === 'object' &&\n typeof store.$state.constructor === 'function' &&\n !store.$state.constructor.toString().includes('[native code]')) {\n console.warn(`[🍍]: The \"state\" must be a plain object. It cannot be\\n` +\n `\\tstate: () => new MyClass()\\n` +\n `Found in store \"${store.$id}\".`);\n }\n // only apply hydrate to option stores with an initial state in pinia\n if (initialState &&\n isOptionsStore &&\n options.hydrate) {\n options.hydrate(store.$state, initialState);\n }\n isListening = true;\n isSyncListening = true;\n return store;\n}\n// allows unused stores to be tree shaken\n/*! #__NO_SIDE_EFFECTS__ */\nfunction defineStore(\n// TODO: add proper types from above\nidOrOptions, setup, setupOptions) {\n let id;\n let options;\n const isSetupStore = typeof setup === 'function';\n if (typeof idOrOptions === 'string') {\n id = idOrOptions;\n // the option store setup will contain the actual options in this case\n options = isSetupStore ? setupOptions : setup;\n }\n else {\n options = idOrOptions;\n id = idOrOptions.id;\n if ((process.env.NODE_ENV !== 'production') && typeof id !== 'string') {\n throw new Error(`[🍍]: \"defineStore()\" must be passed a store id as its first argument.`);\n }\n }\n function useStore(pinia, hot) {\n const hasContext = hasInjectionContext();\n pinia =\n // in test mode, ignore the argument provided as we can always retrieve a\n // pinia instance with getActivePinia()\n ((process.env.NODE_ENV === 'test') && activePinia && activePinia._testing ? null : pinia) ||\n (hasContext ? inject(piniaSymbol, null) : null);\n if (pinia)\n setActivePinia(pinia);\n if ((process.env.NODE_ENV !== 'production') && !activePinia) {\n throw new Error(`[🍍]: \"getActivePinia()\" was called but there was no active Pinia. Are you trying to use a store before calling \"app.use(pinia)\"?\\n` +\n `See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.\\n` +\n `This will fail in production.`);\n }\n pinia = activePinia;\n if (!pinia._s.has(id)) {\n // creating the store registers it in `pinia._s`\n if (isSetupStore) {\n createSetupStore(id, setup, options, pinia);\n }\n else {\n createOptionsStore(id, options, pinia);\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n // @ts-expect-error: not the right inferred type\n useStore._pinia = pinia;\n }\n }\n const store = pinia._s.get(id);\n if ((process.env.NODE_ENV !== 'production') && hot) {\n const hotId = '__hot:' + id;\n const newStore = isSetupStore\n ? createSetupStore(hotId, setup, options, pinia, true)\n : createOptionsStore(hotId, assign({}, options), pinia, true);\n hot._hotUpdate(newStore);\n // cleanup the state properties and the store from the cache\n delete pinia.state.value[hotId];\n pinia._s.delete(hotId);\n }\n if ((process.env.NODE_ENV !== 'production') && IS_CLIENT) {\n const currentInstance = getCurrentInstance();\n // save stores in instances to access them devtools\n if (currentInstance &&\n currentInstance.proxy &&\n // avoid adding stores that are just built for hot module replacement\n !hot) {\n const vm = currentInstance.proxy;\n const cache = '_pStores' in vm ? vm._pStores : (vm._pStores = {});\n cache[id] = store;\n }\n }\n // StoreGeneric cannot be casted towards Store\n return store;\n }\n useStore.$id = id;\n return useStore;\n}\n\nlet mapStoreSuffix = 'Store';\n/**\n * Changes the suffix added by `mapStores()`. Can be set to an empty string.\n * Defaults to `\"Store\"`. Make sure to extend the MapStoresCustomization\n * interface if you are using TypeScript.\n *\n * @param suffix - new suffix\n */\nfunction setMapStoreSuffix(suffix // could be 'Store' but that would be annoying for JS\n) {\n mapStoreSuffix = suffix;\n}\n/**\n * Allows using stores without the composition API (`setup()`) by generating an\n * object to be spread in the `computed` field of a component. It accepts a list\n * of store definitions.\n *\n * @example\n * ```js\n * export default {\n * computed: {\n * // other computed properties\n * ...mapStores(useUserStore, useCartStore)\n * },\n *\n * created() {\n * this.userStore // store with id \"user\"\n * this.cartStore // store with id \"cart\"\n * }\n * }\n * ```\n *\n * @param stores - list of stores to map to an object\n */\nfunction mapStores(...stores) {\n if ((process.env.NODE_ENV !== 'production') && Array.isArray(stores[0])) {\n console.warn(`[🍍]: Directly pass all stores to \"mapStores()\" without putting them in an array:\\n` +\n `Replace\\n` +\n `\\tmapStores([useAuthStore, useCartStore])\\n` +\n `with\\n` +\n `\\tmapStores(useAuthStore, useCartStore)\\n` +\n `This will fail in production if not fixed.`);\n stores = stores[0];\n }\n return stores.reduce((reduced, useStore) => {\n // @ts-expect-error: $id is added by defineStore\n reduced[useStore.$id + mapStoreSuffix] = function () {\n return useStore(this.$pinia);\n };\n return reduced;\n }, {});\n}\n/**\n * Allows using state and getters from one store without using the composition\n * API (`setup()`) by generating an object to be spread in the `computed` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapState(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n reduced[key] = function () {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[key];\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function () {\n const store = useStore(this.$pinia);\n const storeKey = keysOrMapper[key];\n // for some reason TS is unable to infer the type of storeKey to be a\n // function\n return typeof storeKey === 'function'\n ? storeKey.call(this, store)\n : // @ts-expect-error: FIXME: should work?\n store[storeKey];\n };\n return reduced;\n }, {});\n}\n/**\n * Alias for `mapState()`. You should use `mapState()` instead.\n * @deprecated use `mapState()` instead.\n */\nconst mapGetters = mapState;\n/**\n * Allows directly using actions from your store without using the composition\n * API (`setup()`) by generating an object to be spread in the `methods` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapActions(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function (...args) {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[key](...args);\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function (...args) {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[keysOrMapper[key]](...args);\n };\n return reduced;\n }, {});\n}\n/**\n * Allows using state and getters from one store without using the composition\n * API (`setup()`) by generating an object to be spread in the `computed` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapWritableState(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n // @ts-ignore\n reduced[key] = {\n get() {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[key];\n },\n set(value) {\n // @ts-expect-error: FIXME: should work?\n return (useStore(this.$pinia)[key] = value);\n },\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n // @ts-ignore\n reduced[key] = {\n get() {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[keysOrMapper[key]];\n },\n set(value) {\n // @ts-expect-error: FIXME: should work?\n return (useStore(this.$pinia)[keysOrMapper[key]] = value);\n },\n };\n return reduced;\n }, {});\n}\n\n/**\n * Creates an object of references with all the state, getters, and plugin-added\n * state properties of the store. Similar to `toRefs()` but specifically\n * designed for Pinia stores so methods and non reactive properties are\n * completely ignored.\n *\n * @param store - store to extract the refs from\n */\nfunction storeToRefs(store) {\n // See https://github.com/vuejs/pinia/issues/852\n // It's easier to just use toRefs() even if it includes more stuff\n if (isVue2) {\n // @ts-expect-error: toRefs include methods and others\n return toRefs(store);\n }\n else {\n const rawStore = toRaw(store);\n const refs = {};\n for (const key in rawStore) {\n const value = rawStore[key];\n if (isRef(value) || isReactive(value)) {\n // @ts-expect-error: the key is state or getter\n refs[key] =\n // ---\n toRef(store, key);\n }\n }\n return refs;\n }\n}\n\n/**\n * Vue 2 Plugin that must be installed for pinia to work. Note **you don't need\n * this plugin if you are using Nuxt.js**. Use the `buildModule` instead:\n * https://pinia.vuejs.org/ssr/nuxt.html.\n *\n * @example\n * ```js\n * import Vue from 'vue'\n * import { PiniaVuePlugin, createPinia } from 'pinia'\n *\n * Vue.use(PiniaVuePlugin)\n * const pinia = createPinia()\n *\n * new Vue({\n * el: '#app',\n * // ...\n * pinia,\n * })\n * ```\n *\n * @param _Vue - `Vue` imported from 'vue'.\n */\nconst PiniaVuePlugin = function (_Vue) {\n // Equivalent of\n // app.config.globalProperties.$pinia = pinia\n _Vue.mixin({\n beforeCreate() {\n const options = this.$options;\n if (options.pinia) {\n const pinia = options.pinia;\n // HACK: taken from provide(): https://github.com/vuejs/composition-api/blob/main/src/apis/inject.ts#L31\n /* istanbul ignore else */\n if (!this._provided) {\n const provideCache = {};\n Object.defineProperty(this, '_provided', {\n get: () => provideCache,\n set: (v) => Object.assign(provideCache, v),\n });\n }\n this._provided[piniaSymbol] = pinia;\n // propagate the pinia instance in an SSR friendly way\n // avoid adding it to nuxt twice\n /* istanbul ignore else */\n if (!this.$pinia) {\n this.$pinia = pinia;\n }\n pinia._a = this;\n if (IS_CLIENT) {\n // this allows calling useStore() outside of a component setup after\n // installing pinia's plugin\n setActivePinia(pinia);\n }\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n registerPiniaDevtools(pinia._a, pinia);\n }\n }\n else if (!this.$pinia && options.parent && options.parent.$pinia) {\n this.$pinia = options.parent.$pinia;\n }\n },\n destroyed() {\n delete this._pStores;\n },\n });\n};\n\nexport { MutationType, PiniaVuePlugin, acceptHMRUpdate, createPinia, defineStore, disposePinia, getActivePinia, mapActions, mapGetters, mapState, mapStores, mapWritableState, setActivePinia, setMapStoreSuffix, shouldHydrate, skipHydrate, storeToRefs };\n","function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction processOptions(value) {\n var options;\n\n if (typeof value === 'function') {\n // Simple options (callback-only)\n options = {\n callback: value\n };\n } else {\n // Options object\n options = value;\n }\n\n return options;\n}\nfunction throttle(callback, delay) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var timeout;\n var lastState;\n var currentArgs;\n\n var throttled = function throttled(state) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n currentArgs = args;\n if (timeout && state === lastState) return;\n var leading = options.leading;\n\n if (typeof leading === 'function') {\n leading = leading(state, lastState);\n }\n\n if ((!timeout || state !== lastState) && leading) {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n }\n\n lastState = state;\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n timeout = 0;\n }, delay);\n };\n\n throttled._clear = function () {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return throttled;\n}\nfunction deepEqual(val1, val2) {\n if (val1 === val2) return true;\n\n if (_typeof(val1) === 'object') {\n for (var key in val1) {\n if (!deepEqual(val1[key], val2[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\nvar VisibilityState =\n/*#__PURE__*/\nfunction () {\n function VisibilityState(el, options, vnode) {\n _classCallCheck(this, VisibilityState);\n\n this.el = el;\n this.observer = null;\n this.frozen = false;\n this.createObserver(options, vnode);\n }\n\n _createClass(VisibilityState, [{\n key: \"createObserver\",\n value: function createObserver(options, vnode) {\n var _this = this;\n\n if (this.observer) {\n this.destroyObserver();\n }\n\n if (this.frozen) return;\n this.options = processOptions(options);\n\n this.callback = function (result, entry) {\n _this.options.callback(result, entry);\n\n if (result && _this.options.once) {\n _this.frozen = true;\n\n _this.destroyObserver();\n }\n }; // Throttle\n\n\n if (this.callback && this.options.throttle) {\n var _ref = this.options.throttleOptions || {},\n _leading = _ref.leading;\n\n this.callback = throttle(this.callback, this.options.throttle, {\n leading: function leading(state) {\n return _leading === 'both' || _leading === 'visible' && state || _leading === 'hidden' && !state;\n }\n });\n }\n\n this.oldResult = undefined;\n this.observer = new IntersectionObserver(function (entries) {\n var entry = entries[0];\n\n if (entries.length > 1) {\n var intersectingEntry = entries.find(function (e) {\n return e.isIntersecting;\n });\n\n if (intersectingEntry) {\n entry = intersectingEntry;\n }\n }\n\n if (_this.callback) {\n // Use isIntersecting if possible because browsers can report isIntersecting as true, but intersectionRatio as 0, when something very slowly enters the viewport.\n var result = entry.isIntersecting && entry.intersectionRatio >= _this.threshold;\n if (result === _this.oldResult) return;\n _this.oldResult = result;\n\n _this.callback(result, entry);\n }\n }, this.options.intersection); // Wait for the element to be in document\n\n vnode.context.$nextTick(function () {\n if (_this.observer) {\n _this.observer.observe(_this.el);\n }\n });\n }\n }, {\n key: \"destroyObserver\",\n value: function destroyObserver() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n } // Cancel throttled call\n\n\n if (this.callback && this.callback._clear) {\n this.callback._clear();\n\n this.callback = null;\n }\n }\n }, {\n key: \"threshold\",\n get: function get() {\n return this.options.intersection && typeof this.options.intersection.threshold === 'number' ? this.options.intersection.threshold : 0;\n }\n }]);\n\n return VisibilityState;\n}();\n\nfunction bind(el, _ref2, vnode) {\n var value = _ref2.value;\n if (!value) return;\n\n if (typeof IntersectionObserver === 'undefined') {\n console.warn('[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill');\n } else {\n var state = new VisibilityState(el, value, vnode);\n el._vue_visibilityState = state;\n }\n}\n\nfunction update(el, _ref3, vnode) {\n var value = _ref3.value,\n oldValue = _ref3.oldValue;\n if (deepEqual(value, oldValue)) return;\n var state = el._vue_visibilityState;\n\n if (!value) {\n unbind(el);\n return;\n }\n\n if (state) {\n state.createObserver(value, vnode);\n } else {\n bind(el, {\n value: value\n }, vnode);\n }\n}\n\nfunction unbind(el) {\n var state = el._vue_visibilityState;\n\n if (state) {\n state.destroyObserver();\n delete el._vue_visibilityState;\n }\n}\n\nvar ObserveVisibility = {\n bind: bind,\n update: update,\n unbind: unbind\n};\n\nfunction install(Vue) {\n Vue.directive('observe-visibility', ObserveVisibility);\n /* -- Add more components here -- */\n}\n/* -- Plugin definition & Auto-install -- */\n\n/* You shouldn't have to modify the code below */\n// Plugin\n\nvar plugin = {\n // eslint-disable-next-line no-undef\n version: \"1.0.0\",\n install: install\n};\n\nvar GlobalVue = null;\n\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue;\n}\n\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\n\nexport default plugin;\nexport { ObserveVisibility, install };\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon message-reply-text-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"MessageReplyTextIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./MessageReplyText.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./MessageReplyText.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./MessageReplyText.vue?vue&type=template&id=5b37a4cf\"\nimport script from \"./MessageReplyText.vue?vue&type=script&lang=js\"\nexport * from \"./MessageReplyText.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon message-reply-text-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon refresh-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"RefreshIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Refresh.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Refresh.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Refresh.vue?vue&type=template&id=7301d745\"\nimport script from \"./Refresh.vue?vue&type=script&lang=js\"\nexport * from \"./Refresh.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon refresh-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","const MAX_PATTERN_LENGTH = 1024 * 64;\nexport const assertValidPattern = (pattern) => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern');\n }\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long');\n }\n};\n//# sourceMappingURL=assert-valid-pattern.js.map","// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses = {\n '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n '[:cntrl:]': ['\\\\p{Cc}', true],\n '[:digit:]': ['\\\\p{Nd}', true],\n '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n '[:lower:]': ['\\\\p{Ll}', true],\n '[:print:]': ['\\\\p{C}', true],\n '[:punct:]': ['\\\\p{P}', true],\n '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n '[:upper:]': ['\\\\p{Lu}', true],\n '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n '[:xdigit:]': ['A-Fa-f0-9', false],\n};\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s) => s.replace(/[[\\]\\\\-]/g, '\\\\$&');\n// escape all regexp magic characters\nconst regexpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges) => ranges.join('');\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (glob, position) => {\n const pos = position;\n /* c8 ignore start */\n if (glob.charAt(pos) !== '[') {\n throw new Error('not in a brace expression');\n }\n /* c8 ignore stop */\n const ranges = [];\n const negs = [];\n let i = pos + 1;\n let sawStart = false;\n let uflag = false;\n let escaping = false;\n let negate = false;\n let endPos = pos;\n let rangeStart = '';\n WHILE: while (i < glob.length) {\n const c = glob.charAt(i);\n if ((c === '!' || c === '^') && i === pos + 1) {\n negate = true;\n i++;\n continue;\n }\n if (c === ']' && sawStart && !escaping) {\n endPos = i + 1;\n break;\n }\n sawStart = true;\n if (c === '\\\\') {\n if (!escaping) {\n escaping = true;\n i++;\n continue;\n }\n // escaped \\ char, fall through and treat like normal char\n }\n if (c === '[' && !escaping) {\n // either a posix class, a collation equivalent, or just a [\n for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n if (glob.startsWith(cls, i)) {\n // invalid, [a-[] is fine, but not [a-[:alpha]]\n if (rangeStart) {\n return ['$.', false, glob.length - pos, true];\n }\n i += cls.length;\n if (neg)\n negs.push(unip);\n else\n ranges.push(unip);\n uflag = uflag || u;\n continue WHILE;\n }\n }\n }\n // now it's just a normal character, effectively\n escaping = false;\n if (rangeStart) {\n // throw this range away if it's not valid, but others\n // can still match.\n if (c > rangeStart) {\n ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));\n }\n else if (c === rangeStart) {\n ranges.push(braceEscape(c));\n }\n rangeStart = '';\n i++;\n continue;\n }\n // now might be the start of a range.\n // can be either c-d or c-] or c<more...>] or c] at this point\n if (glob.startsWith('-]', i + 1)) {\n ranges.push(braceEscape(c + '-'));\n i += 2;\n continue;\n }\n if (glob.startsWith('-', i + 1)) {\n rangeStart = c;\n i += 2;\n continue;\n }\n // not the start of a range, just a single character\n ranges.push(braceEscape(c));\n i++;\n }\n if (endPos < i) {\n // didn't see the end of the class, not a valid class,\n // but might still be valid as a literal match.\n return ['', false, 0, false];\n }\n // if we got no ranges and no negates, then we have a range that\n // cannot possibly match anything, and that poisons the whole glob\n if (!ranges.length && !negs.length) {\n return ['$.', false, glob.length - pos, true];\n }\n // if we got one positive range, and it's a single character, then that's\n // not actually a magic pattern, it's just that one literal character.\n // we should not treat that as \"magic\", we should just return the literal\n // character. [_] is a perfectly valid way to escape glob magic chars.\n if (negs.length === 0 &&\n ranges.length === 1 &&\n /^\\\\?.$/.test(ranges[0]) &&\n !negate) {\n const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];\n return [regexpEscape(r), false, endPos - pos, false];\n }\n const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';\n const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';\n const comb = ranges.length && negs.length\n ? '(' + sranges + '|' + snegs + ')'\n : ranges.length\n ? sranges\n : snegs;\n return [comb, uflag, endPos - pos, true];\n};\n//# sourceMappingURL=brace-expressions.js.map","/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes. For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (s, { windowsPathsNoEscape = false, } = {}) => {\n return windowsPathsNoEscape\n ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1');\n};\n//# sourceMappingURL=unescape.js.map","// parse a single path portion\nimport { parseClass } from './brace-expressions.js';\nimport { unescape } from './unescape.js';\nconst types = new Set(['!', '?', '+', '*', '@']);\nconst isExtglobType = (c) => types.has(c);\n// Patterns that get prepended to bind to the start of either the\n// entire string, or just a single path portion, to prevent dots\n// and/or traversal patterns, when needed.\n// Exts don't need the ^ or / bit, because the root binds that already.\nconst startNoTraversal = '(?!(?:^|/)\\\\.\\\\.?(?:$|/))';\nconst startNoDot = '(?!\\\\.)';\n// characters that indicate a start of pattern needs the \"no dots\" bit,\n// because a dot *might* be matched. ( is not in the list, because in\n// the case of a child extglob, it will handle the prevention itself.\nconst addPatternStart = new Set(['[', '.']);\n// cases where traversal is A-OK, no dot prevention needed\nconst justDots = new Set(['..', '.']);\nconst reSpecials = new Set('().*{}+?[]^$\\\\!');\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// any single thing other than /\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// use + when we need to ensure that *something* matches, because the * is\n// the only thing in the path portion.\nconst starNoEmpty = qmark + '+?';\n// remove the \\ chars that we added if we end up doing a nonmagic compare\n// const deslash = (s: string) => s.replace(/\\\\(.)/g, '$1')\nexport class AST {\n type;\n #root;\n #hasMagic;\n #uflag = false;\n #parts = [];\n #parent;\n #parentIndex;\n #negs;\n #filledNegs = false;\n #options;\n #toString;\n // set to true if it's an extglob with no children\n // (which really means one child of '')\n #emptyExt = false;\n constructor(type, parent, options = {}) {\n this.type = type;\n // extglobs are inherently magical\n if (type)\n this.#hasMagic = true;\n this.#parent = parent;\n this.#root = this.#parent ? this.#parent.#root : this;\n this.#options = this.#root === this ? options : this.#root.#options;\n this.#negs = this.#root === this ? [] : this.#root.#negs;\n if (type === '!' && !this.#root.#filledNegs)\n this.#negs.push(this);\n this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;\n }\n get hasMagic() {\n /* c8 ignore start */\n if (this.#hasMagic !== undefined)\n return this.#hasMagic;\n /* c8 ignore stop */\n for (const p of this.#parts) {\n if (typeof p === 'string')\n continue;\n if (p.type || p.hasMagic)\n return (this.#hasMagic = true);\n }\n // note: will be undefined until we generate the regexp src and find out\n return this.#hasMagic;\n }\n // reconstructs the pattern\n toString() {\n if (this.#toString !== undefined)\n return this.#toString;\n if (!this.type) {\n return (this.#toString = this.#parts.map(p => String(p)).join(''));\n }\n else {\n return (this.#toString =\n this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')');\n }\n }\n #fillNegs() {\n /* c8 ignore start */\n if (this !== this.#root)\n throw new Error('should only call on root');\n if (this.#filledNegs)\n return this;\n /* c8 ignore stop */\n // call toString() once to fill this out\n this.toString();\n this.#filledNegs = true;\n let n;\n while ((n = this.#negs.pop())) {\n if (n.type !== '!')\n continue;\n // walk up the tree, appending everthing that comes AFTER parentIndex\n let p = n;\n let pp = p.#parent;\n while (pp) {\n for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {\n for (const part of n.#parts) {\n /* c8 ignore start */\n if (typeof part === 'string') {\n throw new Error('string part in extglob AST??');\n }\n /* c8 ignore stop */\n part.copyIn(pp.#parts[i]);\n }\n }\n p = pp;\n pp = p.#parent;\n }\n }\n return this;\n }\n push(...parts) {\n for (const p of parts) {\n if (p === '')\n continue;\n /* c8 ignore start */\n if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {\n throw new Error('invalid part: ' + p);\n }\n /* c8 ignore stop */\n this.#parts.push(p);\n }\n }\n toJSON() {\n const ret = this.type === null\n ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))\n : [this.type, ...this.#parts.map(p => p.toJSON())];\n if (this.isStart() && !this.type)\n ret.unshift([]);\n if (this.isEnd() &&\n (this === this.#root ||\n (this.#root.#filledNegs && this.#parent?.type === '!'))) {\n ret.push({});\n }\n return ret;\n }\n isStart() {\n if (this.#root === this)\n return true;\n // if (this.type) return !!this.#parent?.isStart()\n if (!this.#parent?.isStart())\n return false;\n if (this.#parentIndex === 0)\n return true;\n // if everything AHEAD of this is a negation, then it's still the \"start\"\n const p = this.#parent;\n for (let i = 0; i < this.#parentIndex; i++) {\n const pp = p.#parts[i];\n if (!(pp instanceof AST && pp.type === '!')) {\n return false;\n }\n }\n return true;\n }\n isEnd() {\n if (this.#root === this)\n return true;\n if (this.#parent?.type === '!')\n return true;\n if (!this.#parent?.isEnd())\n return false;\n if (!this.type)\n return this.#parent?.isEnd();\n // if not root, it'll always have a parent\n /* c8 ignore start */\n const pl = this.#parent ? this.#parent.#parts.length : 0;\n /* c8 ignore stop */\n return this.#parentIndex === pl - 1;\n }\n copyIn(part) {\n if (typeof part === 'string')\n this.push(part);\n else\n this.push(part.clone(this));\n }\n clone(parent) {\n const c = new AST(this.type, parent);\n for (const p of this.#parts) {\n c.copyIn(p);\n }\n return c;\n }\n static #parseAST(str, ast, pos, opt) {\n let escaping = false;\n let inBrace = false;\n let braceStart = -1;\n let braceNeg = false;\n if (ast.type === null) {\n // outside of a extglob, append until we find a start\n let i = pos;\n let acc = '';\n while (i < str.length) {\n const c = str.charAt(i++);\n // still accumulate escapes at this point, but we do ignore\n // starts that are escaped\n if (escaping || c === '\\\\') {\n escaping = !escaping;\n acc += c;\n continue;\n }\n if (inBrace) {\n if (i === braceStart + 1) {\n if (c === '^' || c === '!') {\n braceNeg = true;\n }\n }\n else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n inBrace = false;\n }\n acc += c;\n continue;\n }\n else if (c === '[') {\n inBrace = true;\n braceStart = i;\n braceNeg = false;\n acc += c;\n continue;\n }\n if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {\n ast.push(acc);\n acc = '';\n const ext = new AST(c, ast);\n i = AST.#parseAST(str, ext, i, opt);\n ast.push(ext);\n continue;\n }\n acc += c;\n }\n ast.push(acc);\n return i;\n }\n // some kind of extglob, pos is at the (\n // find the next | or )\n let i = pos + 1;\n let part = new AST(null, ast);\n const parts = [];\n let acc = '';\n while (i < str.length) {\n const c = str.charAt(i++);\n // still accumulate escapes at this point, but we do ignore\n // starts that are escaped\n if (escaping || c === '\\\\') {\n escaping = !escaping;\n acc += c;\n continue;\n }\n if (inBrace) {\n if (i === braceStart + 1) {\n if (c === '^' || c === '!') {\n braceNeg = true;\n }\n }\n else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n inBrace = false;\n }\n acc += c;\n continue;\n }\n else if (c === '[') {\n inBrace = true;\n braceStart = i;\n braceNeg = false;\n acc += c;\n continue;\n }\n if (isExtglobType(c) && str.charAt(i) === '(') {\n part.push(acc);\n acc = '';\n const ext = new AST(c, part);\n part.push(ext);\n i = AST.#parseAST(str, ext, i, opt);\n continue;\n }\n if (c === '|') {\n part.push(acc);\n acc = '';\n parts.push(part);\n part = new AST(null, ast);\n continue;\n }\n if (c === ')') {\n if (acc === '' && ast.#parts.length === 0) {\n ast.#emptyExt = true;\n }\n part.push(acc);\n acc = '';\n ast.push(...parts, part);\n return i;\n }\n acc += c;\n }\n // unfinished extglob\n // if we got here, it was a malformed extglob! not an extglob, but\n // maybe something else in there.\n ast.type = null;\n ast.#hasMagic = undefined;\n ast.#parts = [str.substring(pos - 1)];\n return i;\n }\n static fromGlob(pattern, options = {}) {\n const ast = new AST(null, undefined, options);\n AST.#parseAST(pattern, ast, 0, options);\n return ast;\n }\n // returns the regular expression if there's magic, or the unescaped\n // string if not.\n toMMPattern() {\n // should only be called on root\n /* c8 ignore start */\n if (this !== this.#root)\n return this.#root.toMMPattern();\n /* c8 ignore stop */\n const glob = this.toString();\n const [re, body, hasMagic, uflag] = this.toRegExpSource();\n // if we're in nocase mode, and not nocaseMagicOnly, then we do\n // still need a regular expression if we have to case-insensitively\n // match capital/lowercase characters.\n const anyMagic = hasMagic ||\n this.#hasMagic ||\n (this.#options.nocase &&\n !this.#options.nocaseMagicOnly &&\n glob.toUpperCase() !== glob.toLowerCase());\n if (!anyMagic) {\n return body;\n }\n const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '');\n return Object.assign(new RegExp(`^${re}$`, flags), {\n _src: re,\n _glob: glob,\n });\n }\n get options() {\n return this.#options;\n }\n // returns the string match, the regexp source, whether there's magic\n // in the regexp (so a regular expression is required) and whether or\n // not the uflag is needed for the regular expression (for posix classes)\n // TODO: instead of injecting the start/end at this point, just return\n // the BODY of the regexp, along with the start/end portions suitable\n // for binding the start/end in either a joined full-path makeRe context\n // (where we bind to (^|/), or a standalone matchPart context (where\n // we bind to ^, and not /). Otherwise slashes get duped!\n //\n // In part-matching mode, the start is:\n // - if not isStart: nothing\n // - if traversal possible, but not allowed: ^(?!\\.\\.?$)\n // - if dots allowed or not possible: ^\n // - if dots possible and not allowed: ^(?!\\.)\n // end is:\n // - if not isEnd(): nothing\n // - else: $\n //\n // In full-path matching mode, we put the slash at the START of the\n // pattern, so start is:\n // - if first pattern: same as part-matching mode\n // - if not isStart(): nothing\n // - if traversal possible, but not allowed: /(?!\\.\\.?(?:$|/))\n // - if dots allowed or not possible: /\n // - if dots possible and not allowed: /(?!\\.)\n // end is:\n // - if last pattern, same as part-matching mode\n // - else nothing\n //\n // Always put the (?:$|/) on negated tails, though, because that has to be\n // there to bind the end of the negated pattern portion, and it's easier to\n // just stick it in now rather than try to inject it later in the middle of\n // the pattern.\n //\n // We can just always return the same end, and leave it up to the caller\n // to know whether it's going to be used joined or in parts.\n // And, if the start is adjusted slightly, can do the same there:\n // - if not isStart: nothing\n // - if traversal possible, but not allowed: (?:/|^)(?!\\.\\.?$)\n // - if dots allowed or not possible: (?:/|^)\n // - if dots possible and not allowed: (?:/|^)(?!\\.)\n //\n // But it's better to have a simpler binding without a conditional, for\n // performance, so probably better to return both start options.\n //\n // Then the caller just ignores the end if it's not the first pattern,\n // and the start always gets applied.\n //\n // But that's always going to be $ if it's the ending pattern, or nothing,\n // so the caller can just attach $ at the end of the pattern when building.\n //\n // So the todo is:\n // - better detect what kind of start is needed\n // - return both flavors of starting pattern\n // - attach $ at the end of the pattern when creating the actual RegExp\n //\n // Ah, but wait, no, that all only applies to the root when the first pattern\n // is not an extglob. If the first pattern IS an extglob, then we need all\n // that dot prevention biz to live in the extglob portions, because eg\n // +(*|.x*) can match .xy but not .yx.\n //\n // So, return the two flavors if it's #root and the first child is not an\n // AST, otherwise leave it to the child AST to handle it, and there,\n // use the (?:^|/) style of start binding.\n //\n // Even simplified further:\n // - Since the start for a join is eg /(?!\\.) and the start for a part\n // is ^(?!\\.), we can just prepend (?!\\.) to the pattern (either root\n // or start or whatever) and prepend ^ or / at the Regexp construction.\n toRegExpSource(allowDot) {\n const dot = allowDot ?? !!this.#options.dot;\n if (this.#root === this)\n this.#fillNegs();\n if (!this.type) {\n const noEmpty = this.isStart() && this.isEnd();\n const src = this.#parts\n .map(p => {\n const [re, _, hasMagic, uflag] = typeof p === 'string'\n ? AST.#parseGlob(p, this.#hasMagic, noEmpty)\n : p.toRegExpSource(allowDot);\n this.#hasMagic = this.#hasMagic || hasMagic;\n this.#uflag = this.#uflag || uflag;\n return re;\n })\n .join('');\n let start = '';\n if (this.isStart()) {\n if (typeof this.#parts[0] === 'string') {\n // this is the string that will match the start of the pattern,\n // so we need to protect against dots and such.\n // '.' and '..' cannot match unless the pattern is that exactly,\n // even if it starts with . or dot:true is set.\n const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);\n if (!dotTravAllowed) {\n const aps = addPatternStart;\n // check if we have a possibility of matching . or ..,\n // and prevent that.\n const needNoTrav = \n // dots are allowed, and the pattern starts with [ or .\n (dot && aps.has(src.charAt(0))) ||\n // the pattern starts with \\., and then [ or .\n (src.startsWith('\\\\.') && aps.has(src.charAt(2))) ||\n // the pattern starts with \\.\\., and then [ or .\n (src.startsWith('\\\\.\\\\.') && aps.has(src.charAt(4)));\n // no need to prevent dots if it can't match a dot, or if a\n // sub-pattern will be preventing it anyway.\n const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));\n start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : '';\n }\n }\n }\n // append the \"end of path portion\" pattern to negation tails\n let end = '';\n if (this.isEnd() &&\n this.#root.#filledNegs &&\n this.#parent?.type === '!') {\n end = '(?:$|\\\\/)';\n }\n const final = start + src + end;\n return [\n final,\n unescape(src),\n (this.#hasMagic = !!this.#hasMagic),\n this.#uflag,\n ];\n }\n // We need to calculate the body *twice* if it's a repeat pattern\n // at the start, once in nodot mode, then again in dot mode, so a\n // pattern like *(?) can match 'x.y'\n const repeated = this.type === '*' || this.type === '+';\n // some kind of extglob\n const start = this.type === '!' ? '(?:(?!(?:' : '(?:';\n let body = this.#partsToRegExp(dot);\n if (this.isStart() && this.isEnd() && !body && this.type !== '!') {\n // invalid extglob, has to at least be *something* present, if it's\n // the entire path portion.\n const s = this.toString();\n this.#parts = [s];\n this.type = null;\n this.#hasMagic = undefined;\n return [s, unescape(this.toString()), false, false];\n }\n // XXX abstract out this map method\n let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot\n ? ''\n : this.#partsToRegExp(true);\n if (bodyDotAllowed === body) {\n bodyDotAllowed = '';\n }\n if (bodyDotAllowed) {\n body = `(?:${body})(?:${bodyDotAllowed})*?`;\n }\n // an empty !() is exactly equivalent to a starNoEmpty\n let final = '';\n if (this.type === '!' && this.#emptyExt) {\n final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty;\n }\n else {\n const close = this.type === '!'\n ? // !() must match something,but !(x) can match ''\n '))' +\n (this.isStart() && !dot && !allowDot ? startNoDot : '') +\n star +\n ')'\n : this.type === '@'\n ? ')'\n : this.type === '?'\n ? ')?'\n : this.type === '+' && bodyDotAllowed\n ? ')'\n : this.type === '*' && bodyDotAllowed\n ? `)?`\n : `)${this.type}`;\n final = start + body + close;\n }\n return [\n final,\n unescape(body),\n (this.#hasMagic = !!this.#hasMagic),\n this.#uflag,\n ];\n }\n #partsToRegExp(dot) {\n return this.#parts\n .map(p => {\n // extglob ASTs should only contain parent ASTs\n /* c8 ignore start */\n if (typeof p === 'string') {\n throw new Error('string type in extglob ast??');\n }\n /* c8 ignore stop */\n // can ignore hasMagic, because extglobs are already always magic\n const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);\n this.#uflag = this.#uflag || uflag;\n return re;\n })\n .filter(p => !(this.isStart() && this.isEnd()) || !!p)\n .join('|');\n }\n static #parseGlob(glob, hasMagic, noEmpty = false) {\n let escaping = false;\n let re = '';\n let uflag = false;\n for (let i = 0; i < glob.length; i++) {\n const c = glob.charAt(i);\n if (escaping) {\n escaping = false;\n re += (reSpecials.has(c) ? '\\\\' : '') + c;\n continue;\n }\n if (c === '\\\\') {\n if (i === glob.length - 1) {\n re += '\\\\\\\\';\n }\n else {\n escaping = true;\n }\n continue;\n }\n if (c === '[') {\n const [src, needUflag, consumed, magic] = parseClass(glob, i);\n if (consumed) {\n re += src;\n uflag = uflag || needUflag;\n i += consumed - 1;\n hasMagic = hasMagic || magic;\n continue;\n }\n }\n if (c === '*') {\n if (noEmpty && glob === '*')\n re += starNoEmpty;\n else\n re += star;\n hasMagic = true;\n continue;\n }\n if (c === '?') {\n re += qmark;\n hasMagic = true;\n continue;\n }\n re += regExpEscape(c);\n }\n return [re, unescape(glob), !!hasMagic, uflag];\n }\n}\n//# sourceMappingURL=ast.js.map","import expand from 'brace-expansion';\nimport { assertValidPattern } from './assert-valid-pattern.js';\nimport { AST } from './ast.js';\nimport { escape } from './escape.js';\nimport { unescape } from './unescape.js';\nexport const minimatch = (p, pattern, options = {}) => {\n assertValidPattern(pattern);\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false;\n }\n return new Minimatch(pattern, options).match(p);\n};\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/;\nconst starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);\nconst starDotExtTestDot = (ext) => (f) => f.endsWith(ext);\nconst starDotExtTestNocase = (ext) => {\n ext = ext.toLowerCase();\n return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);\n};\nconst starDotExtTestNocaseDot = (ext) => {\n ext = ext.toLowerCase();\n return (f) => f.toLowerCase().endsWith(ext);\n};\nconst starDotStarRE = /^\\*+\\.\\*+$/;\nconst starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');\nconst starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');\nconst dotStarRE = /^\\.\\*+$/;\nconst dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');\nconst starRE = /^\\*+$/;\nconst starTest = (f) => f.length !== 0 && !f.startsWith('.');\nconst starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/;\nconst qmarksTestNocase = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestNocaseDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTest = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTestNoExt = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && !f.startsWith('.');\n};\nconst qmarksTestNoExtDot = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && f !== '.' && f !== '..';\n};\n/* c8 ignore start */\nconst defaultPlatform = (typeof process === 'object' && process\n ? (typeof process.env === 'object' &&\n process.env &&\n process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n process.platform\n : 'posix');\nconst path = {\n win32: { sep: '\\\\' },\n posix: { sep: '/' },\n};\n/* c8 ignore stop */\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;\nminimatch.sep = sep;\nexport const GLOBSTAR = Symbol('globstar **');\nminimatch.GLOBSTAR = GLOBSTAR;\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?';\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?';\nexport const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);\nminimatch.filter = filter;\nconst ext = (a, b = {}) => Object.assign({}, a, b);\nexport const defaults = (def) => {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch;\n }\n const orig = minimatch;\n const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));\n return Object.assign(m, {\n Minimatch: class Minimatch extends orig.Minimatch {\n constructor(pattern, options = {}) {\n super(pattern, ext(def, options));\n }\n static defaults(options) {\n return orig.defaults(ext(def, options)).Minimatch;\n }\n },\n AST: class AST extends orig.AST {\n /* c8 ignore start */\n constructor(type, parent, options = {}) {\n super(type, parent, ext(def, options));\n }\n /* c8 ignore stop */\n static fromGlob(pattern, options = {}) {\n return orig.AST.fromGlob(pattern, ext(def, options));\n }\n },\n unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),\n escape: (s, options = {}) => orig.escape(s, ext(def, options)),\n filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),\n defaults: (options) => orig.defaults(ext(def, options)),\n makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),\n braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),\n match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),\n sep: orig.sep,\n GLOBSTAR: GLOBSTAR,\n });\n};\nminimatch.defaults = defaults;\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (pattern, options = {}) => {\n assertValidPattern(pattern);\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern];\n }\n return expand(pattern);\n};\nminimatch.braceExpand = braceExpand;\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nexport const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();\nminimatch.makeRe = makeRe;\nexport const match = (list, pattern, options = {}) => {\n const mm = new Minimatch(pattern, options);\n list = list.filter(f => mm.match(f));\n if (mm.options.nonull && !list.length) {\n list.push(pattern);\n }\n return list;\n};\nminimatch.match = match;\n// replace stuff like \\* with *\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/;\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\nexport class Minimatch {\n options;\n set;\n pattern;\n windowsPathsNoEscape;\n nonegate;\n negate;\n comment;\n empty;\n preserveMultipleSlashes;\n partial;\n globSet;\n globParts;\n nocase;\n isWindows;\n platform;\n windowsNoMagicRoot;\n regexp;\n constructor(pattern, options = {}) {\n assertValidPattern(pattern);\n options = options || {};\n this.options = options;\n this.pattern = pattern;\n this.platform = options.platform || defaultPlatform;\n this.isWindows = this.platform === 'win32';\n this.windowsPathsNoEscape =\n !!options.windowsPathsNoEscape || options.allowWindowsEscape === false;\n if (this.windowsPathsNoEscape) {\n this.pattern = this.pattern.replace(/\\\\/g, '/');\n }\n this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;\n this.regexp = null;\n this.negate = false;\n this.nonegate = !!options.nonegate;\n this.comment = false;\n this.empty = false;\n this.partial = !!options.partial;\n this.nocase = !!this.options.nocase;\n this.windowsNoMagicRoot =\n options.windowsNoMagicRoot !== undefined\n ? options.windowsNoMagicRoot\n : !!(this.isWindows && this.nocase);\n this.globSet = [];\n this.globParts = [];\n this.set = [];\n // make the set of regexps etc.\n this.make();\n }\n hasMagic() {\n if (this.options.magicalBraces && this.set.length > 1) {\n return true;\n }\n for (const pattern of this.set) {\n for (const part of pattern) {\n if (typeof part !== 'string')\n return true;\n }\n }\n return false;\n }\n debug(..._) { }\n make() {\n const pattern = this.pattern;\n const options = this.options;\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true;\n return;\n }\n if (!pattern) {\n this.empty = true;\n return;\n }\n // step 1: figure out negation, etc.\n this.parseNegate();\n // step 2: expand braces\n this.globSet = [...new Set(this.braceExpand())];\n if (options.debug) {\n this.debug = (...args) => console.error(...args);\n }\n this.debug(this.pattern, this.globSet);\n // step 3: now we have a set, so turn each one into a series of\n // path-portion matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n //\n // First, we preprocess to make the glob pattern sets a bit simpler\n // and deduped. There are some perf-killing patterns that can cause\n // problems with a glob walk, but we can simplify them down a bit.\n const rawGlobParts = this.globSet.map(s => this.slashSplit(s));\n this.globParts = this.preprocess(rawGlobParts);\n this.debug(this.pattern, this.globParts);\n // glob --> regexps\n let set = this.globParts.map((s, _, __) => {\n if (this.isWindows && this.windowsNoMagicRoot) {\n // check if it's a drive or unc path.\n const isUNC = s[0] === '' &&\n s[1] === '' &&\n (s[2] === '?' || !globMagic.test(s[2])) &&\n !globMagic.test(s[3]);\n const isDrive = /^[a-z]:/i.test(s[0]);\n if (isUNC) {\n return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))];\n }\n else if (isDrive) {\n return [s[0], ...s.slice(1).map(ss => this.parse(ss))];\n }\n }\n return s.map(ss => this.parse(ss));\n });\n this.debug(this.pattern, set);\n // filter out everything that didn't compile properly.\n this.set = set.filter(s => s.indexOf(false) === -1);\n // do not treat the ? in UNC paths as magic\n if (this.isWindows) {\n for (let i = 0; i < this.set.length; i++) {\n const p = this.set[i];\n if (p[0] === '' &&\n p[1] === '' &&\n this.globParts[i][2] === '?' &&\n typeof p[3] === 'string' &&\n /^[a-z]:$/i.test(p[3])) {\n p[2] = '?';\n }\n }\n }\n this.debug(this.pattern, this.set);\n }\n // various transforms to equivalent pattern sets that are\n // faster to process in a filesystem walk. The goal is to\n // eliminate what we can, and push all ** patterns as far\n // to the right as possible, even if it increases the number\n // of patterns that we have to process.\n preprocess(globParts) {\n // if we're not in globstar mode, then turn all ** into *\n if (this.options.noglobstar) {\n for (let i = 0; i < globParts.length; i++) {\n for (let j = 0; j < globParts[i].length; j++) {\n if (globParts[i][j] === '**') {\n globParts[i][j] = '*';\n }\n }\n }\n }\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n // aggressive optimization for the purpose of fs walking\n globParts = this.firstPhasePreProcess(globParts);\n globParts = this.secondPhasePreProcess(globParts);\n }\n else if (optimizationLevel >= 1) {\n // just basic optimizations to remove some .. parts\n globParts = this.levelOneOptimize(globParts);\n }\n else {\n // just collapse multiple ** portions into one\n globParts = this.adjascentGlobstarOptimize(globParts);\n }\n return globParts;\n }\n // just get rid of adjascent ** portions\n adjascentGlobstarOptimize(globParts) {\n return globParts.map(parts => {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let i = gs;\n while (parts[i + 1] === '**') {\n i++;\n }\n if (i !== gs) {\n parts.splice(gs, i - gs);\n }\n }\n return parts;\n });\n }\n // get rid of adjascent ** and resolve .. portions\n levelOneOptimize(globParts) {\n return globParts.map(parts => {\n parts = parts.reduce((set, part) => {\n const prev = set[set.length - 1];\n if (part === '**' && prev === '**') {\n return set;\n }\n if (part === '..') {\n if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n set.pop();\n return set;\n }\n }\n set.push(part);\n return set;\n }, []);\n return parts.length === 0 ? [''] : parts;\n });\n }\n levelTwoFileOptimize(parts) {\n if (!Array.isArray(parts)) {\n parts = this.slashSplit(parts);\n }\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n parts.splice(dd - 1, 2);\n dd -= 2;\n }\n }\n } while (didSomething);\n return parts.length === 0 ? [''] : parts;\n }\n // First phase: single-pattern processing\n // <pre> is 1 or more portions\n // <rest> is 1 or more portions\n // <p> is any portion other than ., .., '', or **\n // <e> is . or ''\n //\n // **/.. is *brutal* for filesystem walking performance, because\n // it effectively resets the recursive walk each time it occurs,\n // and ** cannot be reduced out by a .. pattern part like a regexp\n // or most strings (other than .., ., and '') can be.\n //\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n // <pre>/<e>/<rest> -> <pre>/<rest>\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n // **/**/<rest> -> **/<rest>\n //\n // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n // this WOULD be allowed if ** did follow symlinks, or * didn't\n firstPhasePreProcess(globParts) {\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n for (let parts of globParts) {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let gss = gs;\n while (parts[gss + 1] === '**') {\n // <pre>/**/**/<rest> -> <pre>/**/<rest>\n gss++;\n }\n // eg, if gs is 2 and gss is 4, that means we have 3 **\n // parts, and can remove 2 of them.\n if (gss > gs) {\n parts.splice(gs + 1, gss - gs);\n }\n let next = parts[gs + 1];\n const p = parts[gs + 2];\n const p2 = parts[gs + 3];\n if (next !== '..')\n continue;\n if (!p ||\n p === '.' ||\n p === '..' ||\n !p2 ||\n p2 === '.' ||\n p2 === '..') {\n continue;\n }\n didSomething = true;\n // edit parts in place, and push the new one\n parts.splice(gs, 1);\n const other = parts.slice(0);\n other[gs] = '**';\n globParts.push(other);\n gs--;\n }\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n const needDot = dd === 1 && parts[dd + 1] === '**';\n const splin = needDot ? ['.'] : [];\n parts.splice(dd - 1, 2, ...splin);\n if (parts.length === 0)\n parts.push('');\n dd -= 2;\n }\n }\n }\n } while (didSomething);\n return globParts;\n }\n // second phase: multi-pattern dedupes\n // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n //\n // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n // ^-- not valid because ** doens't follow symlinks\n secondPhasePreProcess(globParts) {\n for (let i = 0; i < globParts.length - 1; i++) {\n for (let j = i + 1; j < globParts.length; j++) {\n const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);\n if (matched) {\n globParts[i] = [];\n globParts[j] = matched;\n break;\n }\n }\n }\n return globParts.filter(gs => gs.length);\n }\n partsMatch(a, b, emptyGSMatch = false) {\n let ai = 0;\n let bi = 0;\n let result = [];\n let which = '';\n while (ai < a.length && bi < b.length) {\n if (a[ai] === b[bi]) {\n result.push(which === 'b' ? b[bi] : a[ai]);\n ai++;\n bi++;\n }\n else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n result.push(a[ai]);\n ai++;\n }\n else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n result.push(b[bi]);\n bi++;\n }\n else if (a[ai] === '*' &&\n b[bi] &&\n (this.options.dot || !b[bi].startsWith('.')) &&\n b[bi] !== '**') {\n if (which === 'b')\n return false;\n which = 'a';\n result.push(a[ai]);\n ai++;\n bi++;\n }\n else if (b[bi] === '*' &&\n a[ai] &&\n (this.options.dot || !a[ai].startsWith('.')) &&\n a[ai] !== '**') {\n if (which === 'a')\n return false;\n which = 'b';\n result.push(b[bi]);\n ai++;\n bi++;\n }\n else {\n return false;\n }\n }\n // if we fall out of the loop, it means they two are identical\n // as long as their lengths match\n return a.length === b.length && result;\n }\n parseNegate() {\n if (this.nonegate)\n return;\n const pattern = this.pattern;\n let negate = false;\n let negateOffset = 0;\n for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n negate = !negate;\n negateOffset++;\n }\n if (negateOffset)\n this.pattern = pattern.slice(negateOffset);\n this.negate = negate;\n }\n // set partial to true to test if, for example,\n // \"/a/b\" matches the start of \"/*/b/*/d\"\n // Partial means, if you run out of file before you run\n // out of pattern, then that's fine, as long as all\n // the parts match.\n matchOne(file, pattern, partial = false) {\n const options = this.options;\n // UNC paths like //?/X:/... can match X:/... and vice versa\n // Drive letters in absolute drive or unc paths are always compared\n // case-insensitively.\n if (this.isWindows) {\n const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0]);\n const fileUNC = !fileDrive &&\n file[0] === '' &&\n file[1] === '' &&\n file[2] === '?' &&\n /^[a-z]:$/i.test(file[3]);\n const patternDrive = typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0]);\n const patternUNC = !patternDrive &&\n pattern[0] === '' &&\n pattern[1] === '' &&\n pattern[2] === '?' &&\n typeof pattern[3] === 'string' &&\n /^[a-z]:$/i.test(pattern[3]);\n const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined;\n const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined;\n if (typeof fdi === 'number' && typeof pdi === 'number') {\n const [fd, pd] = [file[fdi], pattern[pdi]];\n if (fd.toLowerCase() === pd.toLowerCase()) {\n pattern[pdi] = fd;\n if (pdi > fdi) {\n pattern = pattern.slice(pdi);\n }\n else if (fdi > pdi) {\n file = file.slice(fdi);\n }\n }\n }\n }\n // resolve and reduce . and .. portions in the file as well.\n // dont' need to do the second phase, because it's only one string[]\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n file = this.levelTwoFileOptimize(file);\n }\n this.debug('matchOne', this, { file, pattern });\n this.debug('matchOne', file.length, pattern.length);\n for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {\n this.debug('matchOne loop');\n var p = pattern[pi];\n var f = file[fi];\n this.debug(pattern, p, f);\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* c8 ignore start */\n if (p === false) {\n return false;\n }\n /* c8 ignore stop */\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f]);\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi;\n var pr = pi + 1;\n if (pr === pl) {\n this.debug('** at the end');\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' ||\n file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.'))\n return false;\n }\n return true;\n }\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr];\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee);\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee);\n // found a match.\n return true;\n }\n else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' ||\n swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr);\n break;\n }\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue');\n fr++;\n }\n }\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n /* c8 ignore start */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr);\n if (fr === fl) {\n return true;\n }\n }\n /* c8 ignore stop */\n return false;\n }\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n let hit;\n if (typeof p === 'string') {\n hit = f === p;\n this.debug('string match', p, f, hit);\n }\n else {\n hit = p.test(f);\n this.debug('pattern match', p, f, hit);\n }\n if (!hit)\n return false;\n }\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true;\n }\n else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial;\n }\n else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return fi === fl - 1 && file[fi] === '';\n /* c8 ignore start */\n }\n else {\n // should be unreachable.\n throw new Error('wtf?');\n }\n /* c8 ignore stop */\n }\n braceExpand() {\n return braceExpand(this.pattern, this.options);\n }\n parse(pattern) {\n assertValidPattern(pattern);\n const options = this.options;\n // shortcuts\n if (pattern === '**')\n return GLOBSTAR;\n if (pattern === '')\n return '';\n // far and away, the most common glob pattern parts are\n // *, *.*, and *.<ext> Add a fast check method for those.\n let m;\n let fastTest = null;\n if ((m = pattern.match(starRE))) {\n fastTest = options.dot ? starTestDot : starTest;\n }\n else if ((m = pattern.match(starDotExtRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? starDotExtTestNocaseDot\n : starDotExtTestNocase\n : options.dot\n ? starDotExtTestDot\n : starDotExtTest)(m[1]);\n }\n else if ((m = pattern.match(qmarksRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? qmarksTestNocaseDot\n : qmarksTestNocase\n : options.dot\n ? qmarksTestDot\n : qmarksTest)(m);\n }\n else if ((m = pattern.match(starDotStarRE))) {\n fastTest = options.dot ? starDotStarTestDot : starDotStarTest;\n }\n else if ((m = pattern.match(dotStarRE))) {\n fastTest = dotStarTest;\n }\n const re = AST.fromGlob(pattern, this.options).toMMPattern();\n if (fastTest && typeof re === 'object') {\n // Avoids overriding in frozen environments\n Reflect.defineProperty(re, 'test', { value: fastTest });\n }\n return re;\n }\n makeRe() {\n if (this.regexp || this.regexp === false)\n return this.regexp;\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n const set = this.set;\n if (!set.length) {\n this.regexp = false;\n return this.regexp;\n }\n const options = this.options;\n const twoStar = options.noglobstar\n ? star\n : options.dot\n ? twoStarDot\n : twoStarNoDot;\n const flags = new Set(options.nocase ? ['i'] : []);\n // regexpify non-globstar patterns\n // if ** is only item, then we just do one twoStar\n // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n // if ** is last, append (\\/twoStar|) to previous\n // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n // then filter out GLOBSTAR symbols\n let re = set\n .map(pattern => {\n const pp = pattern.map(p => {\n if (p instanceof RegExp) {\n for (const f of p.flags.split(''))\n flags.add(f);\n }\n return typeof p === 'string'\n ? regExpEscape(p)\n : p === GLOBSTAR\n ? GLOBSTAR\n : p._src;\n });\n pp.forEach((p, i) => {\n const next = pp[i + 1];\n const prev = pp[i - 1];\n if (p !== GLOBSTAR || prev === GLOBSTAR) {\n return;\n }\n if (prev === undefined) {\n if (next !== undefined && next !== GLOBSTAR) {\n pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next;\n }\n else {\n pp[i] = twoStar;\n }\n }\n else if (next === undefined) {\n pp[i - 1] = prev + '(?:\\\\/|' + twoStar + ')?';\n }\n else if (next !== GLOBSTAR) {\n pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next;\n pp[i + 1] = GLOBSTAR;\n }\n });\n return pp.filter(p => p !== GLOBSTAR).join('/');\n })\n .join('|');\n // need to wrap in parens if we had more than one thing with |,\n // otherwise only the first will be anchored to ^ and the last to $\n const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', ''];\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^' + open + re + close + '$';\n // can match anything, as long as it's not this.\n if (this.negate)\n re = '^(?!' + re + ').+$';\n try {\n this.regexp = new RegExp(re, [...flags].join(''));\n /* c8 ignore start */\n }\n catch (ex) {\n // should be impossible\n this.regexp = false;\n }\n /* c8 ignore stop */\n return this.regexp;\n }\n slashSplit(p) {\n // if p starts with // on windows, we preserve that\n // so that UNC paths aren't broken. Otherwise, any number of\n // / characters are coalesced into one, unless\n // preserveMultipleSlashes is set to true.\n if (this.preserveMultipleSlashes) {\n return p.split('/');\n }\n else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n // add an extra '' for the one we lose\n return ['', ...p.split(/\\/+/)];\n }\n else {\n return p.split(/\\/+/);\n }\n }\n match(f, partial = this.partial) {\n this.debug('match', f, this.pattern);\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) {\n return false;\n }\n if (this.empty) {\n return f === '';\n }\n if (f === '/' && partial) {\n return true;\n }\n const options = this.options;\n // windows: need to use /, not \\\n if (this.isWindows) {\n f = f.split('\\\\').join('/');\n }\n // treat the test path as a set of pathparts.\n const ff = this.slashSplit(f);\n this.debug(this.pattern, 'split', ff);\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n const set = this.set;\n this.debug(this.pattern, 'set', set);\n // Find the basename of the path by looking for the last non-empty segment\n let filename = ff[ff.length - 1];\n if (!filename) {\n for (let i = ff.length - 2; !filename && i >= 0; i--) {\n filename = ff[i];\n }\n }\n for (let i = 0; i < set.length; i++) {\n const pattern = set[i];\n let file = ff;\n if (options.matchBase && pattern.length === 1) {\n file = [filename];\n }\n const hit = this.matchOne(file, pattern, partial);\n if (hit) {\n if (options.flipNegate) {\n return true;\n }\n return !this.negate;\n }\n }\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) {\n return false;\n }\n return this.negate;\n }\n static defaults(def) {\n return minimatch.defaults(def).Minimatch;\n }\n}\n/* c8 ignore start */\nexport { AST } from './ast.js';\nexport { escape } from './escape.js';\nexport { unescape } from './unescape.js';\n/* c8 ignore stop */\nminimatch.AST = AST;\nminimatch.Minimatch = Minimatch;\nminimatch.escape = escape;\nminimatch.unescape = unescape;\n//# sourceMappingURL=index.js.map","export function convertResponseHeaders(headers) {\n const output = {};\n for (const key of headers.keys()) {\n output[key] = headers.get(key);\n }\n return output;\n}\nexport function mergeHeaders(...headerPayloads) {\n if (headerPayloads.length === 0)\n return {};\n const headerKeys = {};\n return headerPayloads.reduce((output, headers) => {\n Object.keys(headers).forEach(header => {\n const lowerHeader = header.toLowerCase();\n if (headerKeys.hasOwnProperty(lowerHeader)) {\n output[headerKeys[lowerHeader]] = headers[header];\n }\n else {\n headerKeys[lowerHeader] = header;\n output[header] = headers[header];\n }\n });\n return output;\n }, {});\n}\n","/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character. In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (s, { windowsPathsNoEscape = false, } = {}) => {\n // don't need to escape +@! because we escape the parens\n // that make those magic, and escaping ! as [!] isn't valid,\n // because [!]] is a valid glob class meaning not ']'.\n return windowsPathsNoEscape\n ? s.replace(/[?*()[\\]]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&');\n};\n//# sourceMappingURL=escape.js.map","import path from \"path-posix\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport nestedProp from \"nested-property\";\nimport { encodePath, normalisePath } from \"./path.js\";\nvar PropertyType;\n(function (PropertyType) {\n PropertyType[\"Array\"] = \"array\";\n PropertyType[\"Object\"] = \"object\";\n PropertyType[\"Original\"] = \"original\";\n})(PropertyType || (PropertyType = {}));\nfunction getParser() {\n return new XMLParser({\n removeNSPrefix: true,\n numberParseOptions: {\n hex: true,\n leadingZeros: false\n }\n // We don't use the processors here as decoding is done manually\n // later on - decoding early would break some path checks.\n });\n}\nfunction getPropertyOfType(obj, prop, type = PropertyType.Original) {\n const val = nestedProp.get(obj, prop);\n if (type === \"array\" && Array.isArray(val) === false) {\n return [val];\n }\n else if (type === \"object\" && Array.isArray(val)) {\n return val[0];\n }\n return val;\n}\nfunction normaliseResponse(response) {\n const output = Object.assign({}, response);\n // Only either status OR propstat is allowed\n if (output.status) {\n nestedProp.set(output, \"status\", getPropertyOfType(output, \"status\", PropertyType.Object));\n }\n else {\n nestedProp.set(output, \"propstat\", getPropertyOfType(output, \"propstat\", PropertyType.Object));\n nestedProp.set(output, \"propstat.prop\", getPropertyOfType(output, \"propstat.prop\", PropertyType.Object));\n }\n return output;\n}\nfunction normaliseResult(result) {\n const { multistatus } = result;\n if (multistatus === \"\") {\n return {\n multistatus: {\n response: []\n }\n };\n }\n if (!multistatus) {\n throw new Error(\"Invalid response: No root multistatus found\");\n }\n const output = {\n multistatus: Array.isArray(multistatus) ? multistatus[0] : multistatus\n };\n nestedProp.set(output, \"multistatus.response\", getPropertyOfType(output, \"multistatus.response\", PropertyType.Array));\n nestedProp.set(output, \"multistatus.response\", nestedProp.get(output, \"multistatus.response\").map(response => normaliseResponse(response)));\n return output;\n}\n/**\n * Parse an XML response from a WebDAV service,\n * converting it to an internal DAV result\n * @param xml The raw XML string\n * @returns A parsed and processed DAV result\n */\nexport function parseXML(xml) {\n return new Promise(resolve => {\n const result = getParser().parse(xml);\n resolve(normaliseResult(result));\n });\n}\n/**\n * Get a file stat result from given DAV properties\n * @param props DAV properties\n * @param filename The filename for the file stat\n * @param isDetailed Whether or not the raw props of the resource should be returned\n * @returns A file stat result\n */\nexport function prepareFileFromProps(props, filename, isDetailed = false) {\n // Last modified time, raw size, item type and mime\n const { getlastmodified: lastMod = null, getcontentlength: rawSize = \"0\", resourcetype: resourceType = null, getcontenttype: mimeType = null, getetag: etag = null } = props;\n const type = resourceType &&\n typeof resourceType === \"object\" &&\n typeof resourceType.collection !== \"undefined\"\n ? \"directory\"\n : \"file\";\n const stat = {\n filename,\n basename: path.basename(filename),\n lastmod: lastMod,\n size: parseInt(rawSize, 10),\n type,\n etag: typeof etag === \"string\" ? etag.replace(/\"/g, \"\") : null\n };\n if (type === \"file\") {\n stat.mime = mimeType && typeof mimeType === \"string\" ? mimeType.split(\";\")[0] : \"\";\n }\n if (isDetailed) {\n // The XML parser tries to interpret values, but the display name is required to be a string\n if (typeof props.displayname !== \"undefined\") {\n props.displayname = String(props.displayname);\n }\n stat.props = props;\n }\n return stat;\n}\n/**\n * Parse a DAV result for file stats\n * @param result The resulting DAV response\n * @param filename The filename that was stat'd\n * @param isDetailed Whether or not the raw props of\n * the resource should be returned\n * @returns A file stat result\n */\nexport function parseStat(result, filename, isDetailed = false) {\n let responseItem = null;\n try {\n // should be a propstat response, if not the if below will throw an error\n if (result.multistatus.response[0].propstat) {\n responseItem = result.multistatus.response[0];\n }\n }\n catch (e) {\n /* ignore */\n }\n if (!responseItem) {\n throw new Error(\"Failed getting item stat: bad response\");\n }\n const { propstat: { prop: props, status: statusLine } } = responseItem;\n // As defined in https://tools.ietf.org/html/rfc2068#section-6.1\n const [_, statusCodeStr, statusText] = statusLine.split(\" \", 3);\n const statusCode = parseInt(statusCodeStr, 10);\n if (statusCode >= 400) {\n const err = new Error(`Invalid response: ${statusCode} ${statusText}`);\n err.status = statusCode;\n throw err;\n }\n const filePath = normalisePath(filename);\n return prepareFileFromProps(props, filePath, isDetailed);\n}\n/**\n * Parse a DAV result for a search request\n *\n * @param result The resulting DAV response\n * @param searchArbiter The collection path that was searched\n * @param isDetailed Whether or not the raw props of the resource should be returned\n */\nexport function parseSearch(result, searchArbiter, isDetailed) {\n const response = {\n truncated: false,\n results: []\n };\n response.truncated = result.multistatus.response.some(v => {\n return ((v.status || v.propstat?.status).split(\" \", 3)?.[1] === \"507\" &&\n v.href.replace(/\\/$/, \"\").endsWith(encodePath(searchArbiter).replace(/\\/$/, \"\")));\n });\n result.multistatus.response.forEach(result => {\n if (result.propstat === undefined) {\n return;\n }\n const filename = result.href.split(\"/\").map(decodeURIComponent).join(\"/\");\n response.results.push(prepareFileFromProps(result.propstat.prop, filename, isDetailed));\n });\n return response;\n}\n/**\n * Translate a disk quota indicator to a recognised\n * value (includes \"unlimited\" and \"unknown\")\n * @param value The quota indicator, eg. \"-3\"\n * @returns The value in bytes, or another indicator\n */\nexport function translateDiskSpace(value) {\n switch (String(value)) {\n case \"-3\":\n return \"unlimited\";\n case \"-2\":\n /* falls-through */\n case \"-1\":\n // -1 is non-computed\n return \"unknown\";\n default:\n return parseInt(String(value), 10);\n }\n}\n","import { assertError, isError } from \"./error.js\";\nimport { getGlobalName } from \"./global.js\";\nimport { parseArguments } from \"./tools.js\";\nexport class Layerr extends Error {\n constructor(errorOptionsOrMessage, messageText) {\n const args = [...arguments];\n const { options, shortMessage } = parseArguments(args);\n let message = shortMessage;\n if (options.cause) {\n message = `${message}: ${options.cause.message}`;\n }\n super(message);\n this.message = message;\n if (options.name && typeof options.name === \"string\") {\n this.name = options.name;\n }\n else {\n this.name = getGlobalName();\n }\n if (options.cause) {\n Object.defineProperty(this, \"_cause\", { value: options.cause });\n }\n Object.defineProperty(this, \"_info\", { value: {} });\n if (options.info && typeof options.info === \"object\") {\n Object.assign(this._info, options.info);\n }\n if (Error.captureStackTrace) {\n const ctor = options.constructorOpt || this.constructor;\n Error.captureStackTrace(this, ctor);\n }\n }\n static cause(err) {\n assertError(err);\n if (!err._cause)\n return null;\n return isError(err._cause)\n ? err._cause\n : null;\n }\n static fullStack(err) {\n assertError(err);\n const cause = Layerr.cause(err);\n if (cause) {\n return `${err.stack}\\ncaused by: ${Layerr.fullStack(cause)}`;\n }\n return err.stack ?? \"\";\n }\n static info(err) {\n assertError(err);\n const output = {};\n const cause = Layerr.cause(err);\n if (cause) {\n Object.assign(output, Layerr.info(cause));\n }\n if (err._info) {\n Object.assign(output, err._info);\n }\n return output;\n }\n toString() {\n let output = this.name ||\n this.constructor.name ||\n this.constructor.prototype.name;\n if (this.message) {\n output = `${output}: ${this.message}`;\n }\n return output;\n }\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\n\nconst getRootPath = function() {\n\treturn generateRemoteUrl('dav/comments')\n}\n\nexport { getRootPath }\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { createClient } from 'webdav'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'\n\n// init webdav client\nconst client = createClient(getRootPath())\n\n// set CSRF token header\nconst setHeaders = (token) => {\n client.setHeaders({\n // Add this so the server knows it is an request from the browser\n 'X-Requested-With': 'XMLHttpRequest',\n // Inject user auth\n requesttoken: token ?? '',\n })\n}\n\n// refresh headers when request token changes\nonRequestTokenUpdate(setHeaders)\nsetHeaders(getRequestToken())\n\nexport default client\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { parseXML } from 'webdav';\n// https://github.com/perry-mitchell/webdav-client/issues/339\nimport { processResponsePayload } from 'webdav/dist/node/response.js';\nimport { prepareFileFromProps } from 'webdav/dist/node/tools/dav.js';\nimport client from './DavClient.js';\nexport const DEFAULT_LIMIT = 20;\n/**\n * Retrieve the comments list\n *\n * @param {object} data destructuring object\n * @param {string} data.resourceType the resource type\n * @param {number} data.resourceId the resource ID\n * @param {object} [options] optional options for axios\n * @param {number} [options.offset] the pagination offset\n * @param {number} [options.limit] the pagination limit, defaults to 20\n * @param {Date} [options.datetime] optional date to query\n * @return {{data: object[]}} the comments list\n */\nexport const getComments = async function ({ resourceType, resourceId }, options) {\n const resourcePath = ['', resourceType, resourceId].join('/');\n const datetime = options.datetime ? `<oc:datetime>${options.datetime.toISOString()}</oc:datetime>` : '';\n const response = await client.customRequest(resourcePath, Object.assign({\n method: 'REPORT',\n data: `<?xml version=\"1.0\"?>\n\t\t\t<oc:filter-comments\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<oc:limit>${options.limit ?? DEFAULT_LIMIT}</oc:limit>\n\t\t\t\t<oc:offset>${options.offset || 0}</oc:offset>\n\t\t\t\t${datetime}\n\t\t\t</oc:filter-comments>`,\n }, options));\n const responseData = await response.text();\n const result = await parseXML(responseData);\n const stat = getDirectoryFiles(result, true);\n return processResponsePayload(response, stat, true);\n};\n// https://github.com/perry-mitchell/webdav-client/blob/8d9694613c978ce7404e26a401c39a41f125f87f/source/operations/directoryContents.ts\nconst getDirectoryFiles = function (result, isDetailed = false) {\n // Extract the response items (directory contents)\n const { multistatus: { response: responseItems }, } = result;\n // Map all items to a consistent output structure (results)\n return responseItems.map(item => {\n // Each item should contain a stat object\n const props = item.propstat.prop;\n return prepareFileFromProps(props, props.id.toString(), isDetailed);\n });\n};\n","import { minimatch } from \"minimatch\";\nimport { convertResponseHeaders } from \"./tools/headers.js\";\nexport function createErrorFromResponse(response, prefix = \"\") {\n const err = new Error(`${prefix}Invalid response: ${response.status} ${response.statusText}`);\n err.status = response.status;\n err.response = response;\n return err;\n}\nexport function handleResponseCode(context, response) {\n const { status } = response;\n if (status === 401 && context.digest)\n return response;\n if (status >= 400) {\n const err = createErrorFromResponse(response);\n throw err;\n }\n return response;\n}\nexport function processGlobFilter(files, glob) {\n return files.filter(file => minimatch(file.filename, glob, { matchBase: true }));\n}\n/**\n * Process a response payload (eg. from `customRequest`) and\n * prepare it for further processing. Exposed for custom\n * request handling.\n * @param response The response for a request\n * @param data The data returned\n * @param isDetailed Whether or not a detailed result is\n * requested\n * @returns The response data, or a detailed response object\n * if required\n */\nexport function processResponsePayload(response, data, isDetailed = false) {\n return isDetailed\n ? {\n data,\n headers: response.headers ? convertResponseHeaders(response.headers) : {},\n status: response.status,\n statusText: response.statusText\n }\n : data;\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.tag,{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.deleted && !_vm.isLimbo),expression:\"!deleted && !isLimbo\"}],tag:\"component\",staticClass:\"comment\",class:{'comment--loading': _vm.loading}},[_c('div',{staticClass:\"comment__side\"},[_c('NcAvatar',{staticClass:\"comment__avatar\",attrs:{\"display-name\":_vm.actorDisplayName,\"user\":_vm.actorId,\"size\":32}})],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__body\"},[_c('div',{staticClass:\"comment__header\"},[_c('span',{staticClass:\"comment__author\"},[_vm._v(_vm._s(_vm.actorDisplayName))]),_vm._v(\" \"),(_vm.isOwnComment && _vm.id && !_vm.loading)?_c('NcActions',{staticClass:\"comment__actions\"},[(!_vm.editing)?[_c('NcActionButton',{attrs:{\"close-after-click\":\"\"},on:{\"click\":_vm.onEdit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconEdit',{attrs:{\"size\":20}})]},proxy:true}],null,false,649782975)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Edit comment'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":\"\"},on:{\"click\":_vm.onDeleteWithUndo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconDelete',{attrs:{\"size\":20}})]},proxy:true}],null,false,881161434)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Delete comment'))+\"\\n\\t\\t\\t\\t\\t\")])]:_c('NcActionButton',{on:{\"click\":_vm.onEditCancel},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconClose',{attrs:{\"size\":20}})]},proxy:true}],null,false,2888946197)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Cancel edit'))+\"\\n\\t\\t\\t\\t\")])],2):_vm._e(),_vm._v(\" \"),(_vm.id && _vm.loading)?_c('div',{staticClass:\"comment_loading icon-loading-small\"}):(_vm.creationDateTime)?_c('NcDateTime',{staticClass:\"comment__timestamp\",attrs:{\"timestamp\":_vm.timestamp,\"ignore-seconds\":true}}):_vm._e()],1),_vm._v(\" \"),(_vm.editor || _vm.editing)?_c('form',{staticClass:\"comment__editor\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('div',{staticClass:\"comment__editor-group\"},[_c('NcRichContenteditable',{ref:\"editor\",attrs:{\"auto-complete\":_vm.autoComplete,\"contenteditable\":!_vm.loading,\"label\":_vm.editor ? _vm.t('comments', 'New comment') : _vm.t('comments', 'Edit comment'),\"placeholder\":_vm.t('comments', 'Write a comment …'),\"value\":_vm.localMessage,\"user-data\":_vm.userData,\"aria-describedby\":\"tab-comments__editor-description\"},on:{\"update:value\":_vm.updateLocalMessage,\"submit\":_vm.onSubmit}}),_vm._v(\" \"),_c('div',{staticClass:\"comment__submit\"},[_c('NcButton',{attrs:{\"type\":\"tertiary-no-background\",\"native-type\":\"submit\",\"aria-label\":_vm.t('comments', 'Post comment'),\"disabled\":_vm.isEmptyMessage},on:{\"click\":_vm.onSubmit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('NcLoadingIcon'):_c('IconArrowRight',{attrs:{\"size\":20}})]},proxy:true}],null,false,758946661)})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__editor-description\",attrs:{\"id\":\"tab-comments__editor-description\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', '@ for mentions, : for emoji, / for smart picker'))+\"\\n\\t\\t\\t\")])]):_c('div',{staticClass:\"comment__message\",class:{'comment__message--expanded': _vm.expanded},domProps:{\"innerHTML\":_vm._s(_vm.renderedContent)},on:{\"click\":_vm.onExpand}})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2021 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * @param {any} value -\n * @param {any} passes -\n */\nexport function decodeHtmlEntities(value, passes = 1) {\n\tconst parser = new DOMParser()\n\tlet decoded = value\n\tfor (let i = 0; i < passes; i++) {\n\t\tdecoded = parser.parseFromString(decoded, 'text/html').documentElement.textContent\n\t}\n\treturn decoded\n}\n","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { defineStore } from 'pinia'\n\nexport const useDeletedCommentLimbo = defineStore('deletedCommentLimbo', {\n\tstate: () => ({\n\t\tidsInLimbo: [],\n\t}),\n\tactions: {\n\t\taddId(id) {\n\t\t\tthis.idsInLimbo.push(id)\n\t\t},\n\n\t\tremoveId(id) {\n\t\t\tconst index = this.idsInLimbo.indexOf(id)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.idsInLimbo.splice(index, 1)\n\t\t\t}\n\t\t},\n\n\t\tcheckForId(id) {\n\t\t\tthis.idsInLimbo.includes(id)\n\t\t},\n\t},\n})\n","/**\n * @copyright Copyright (c) 2023 Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @author Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('comments')\n\t.detectUser()\n\t.build()\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { showError, showUndo, TOAST_UNDO_TIMEOUT } from '@nextcloud/dialogs'\nimport NewComment from '../services/NewComment.js'\nimport DeleteComment from '../services/DeleteComment.js'\nimport EditComment from '../services/EditComment.js'\nimport { mapStores } from 'pinia'\nimport { useDeletedCommentLimbo } from '../store/deletedCommentLimbo.js'\nimport logger from '../logger.js'\n\nexport default {\n\tprops: {\n\t\tid: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tresourceId: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tresourceType: {\n\t\t\ttype: String,\n\t\t\tdefault: 'files',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdeleted: false,\n\t\t\tediting: false,\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t...mapStores(useDeletedCommentLimbo),\n\t},\n\n\tmethods: {\n\t\t// EDITION\n\t\tonEdit() {\n\t\t\tthis.editing = true\n\t\t},\n\t\tonEditCancel() {\n\t\t\tthis.editing = false\n\t\t\t// Restore original value\n\t\t\tthis.updateLocalMessage(this.message)\n\t\t},\n\t\tasync onEditComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait EditComment(this.resourceType, this.resourceId, this.id, message)\n\t\t\t\tlogger.debug('Comment edited', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id, message })\n\t\t\t\tthis.$emit('update:message', message)\n\t\t\t\tthis.editing = false\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to edit the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t// DELETION\n\t\tonDeleteWithUndo() {\n\t\t\tthis.$emit('delete')\n\t\t\tthis.deleted = true\n\t\t\tthis.deletedCommentLimboStore.addId(this.id)\n\t\t\tconst timeOutDelete = setTimeout(this.onDelete, TOAST_UNDO_TIMEOUT)\n\t\t\tshowUndo(t('comments', 'Comment deleted'), () => {\n\t\t\t\tclearTimeout(timeOutDelete)\n\t\t\t\tthis.deleted = false\n\t\t\t\tthis.deletedCommentLimboStore.removeId(this.id)\n\t\t\t})\n\t\t},\n\t\tasync onDelete() {\n\t\t\ttry {\n\t\t\t\tawait DeleteComment(this.resourceType, this.resourceId, this.id)\n\t\t\t\tlogger.debug('Comment deleted', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id })\n\t\t\t\tthis.$emit('delete', this.id)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to delete the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t\tthis.deleted = false\n\t\t\t\tthis.deletedCommentLimboStore.removeId(this.id)\n\t\t\t}\n\t\t},\n\n\t\t// CREATION\n\t\tasync onNewComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst newComment = await NewComment(this.resourceType, this.resourceId, message)\n\t\t\t\tlogger.debug('New comment posted', { resourceType: this.resourceType, resourceId: this.resourceId, newComment })\n\t\t\t\tthis.$emit('new', newComment)\n\n\t\t\t\t// Clear old content\n\t\t\t\tthis.$emit('update:message', '')\n\t\t\t\tthis.localMessage = ''\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to create the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Edit an existing comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n * @param {string} message the message content\n */\nexport default async function(resourceType, resourceId, commentId, message) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\treturn await client.customRequest(commentPath, Object.assign({\n\t\tmethod: 'PROPPATCH',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:message>${message}</oc:message>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n\t}))\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Delete a comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n */\nexport default async function(resourceType, resourceId, commentId) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\t// Fetch newly created comment data\n\tawait client.deleteFile(commentPath)\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { decodeHtmlEntities } from '../utils/decodeHtmlEntities.js'\nimport axios from '@nextcloud/axios'\nimport client from './DavClient.js'\n\n/**\n * Retrieve the comments list\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {string} message the message\n * @return {object} the new comment\n */\nexport default async function(resourceType, resourceId, message) {\n\tconst resourcePath = ['', resourceType, resourceId].join('/')\n\n\tconst response = await axios.post(getRootPath() + resourcePath, {\n\t\tactorDisplayName: getCurrentUser().displayName,\n\t\tactorId: getCurrentUser().uid,\n\t\tactorType: 'users',\n\t\tcreationDateTime: (new Date()).toUTCString(),\n\t\tmessage,\n\t\tobjectType: resourceType,\n\t\tverb: 'comment',\n\t})\n\n\t// Retrieve comment id from resource location\n\tconst commentId = parseInt(response.headers['content-location'].split('/').pop())\n\tconst commentPath = resourcePath + '/' + commentId\n\n\t// Fetch newly created comment data\n\tconst comment = await client.stat(commentPath, {\n\t\tdetails: true,\n\t})\n\n\tconst props = comment.data.props\n\t// Decode twice to handle potentially double-encoded entities\n\t// FIXME Remove this once https://github.com/nextcloud/server/issues/29306\n\t// is resolved\n\tprops.actorDisplayName = decodeHtmlEntities(props.actorDisplayName, 2)\n\tprops.message = decodeHtmlEntities(props.message, 2)\n\n\treturn comment.data\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"","<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<component :is=\"tag\"\n\t\tv-show=\"!deleted && !isLimbo\"\n\t\t:class=\"{'comment--loading': loading}\"\n\t\tclass=\"comment\">\n\t\t<!-- Comment header toolbar -->\n\t\t<div class=\"comment__side\">\n\t\t\t<!-- Author -->\n\t\t\t<NcAvatar class=\"comment__avatar\"\n\t\t\t\t:display-name=\"actorDisplayName\"\n\t\t\t\t:user=\"actorId\"\n\t\t\t\t:size=\"32\" />\n\t\t</div>\n\t\t<div class=\"comment__body\">\n\t\t\t<div class=\"comment__header\">\n\t\t\t\t<span class=\"comment__author\">{{ actorDisplayName }}</span>\n\n\t\t\t\t<!-- Comment actions,\n\t\t\t\t\tshow if we have a message id and current user is author -->\n\t\t\t\t<NcActions v-if=\"isOwnComment && id && !loading\" class=\"comment__actions\">\n\t\t\t\t\t<template v-if=\"!editing\">\n\t\t\t\t\t\t<NcActionButton close-after-click\n\t\t\t\t\t\t\t@click=\"onEdit\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconEdit :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('comments', 'Edit comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionSeparator />\n\t\t\t\t\t\t<NcActionButton close-after-click\n\t\t\t\t\t\t\t@click=\"onDeleteWithUndo\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconDelete :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('comments', 'Delete comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<NcActionButton v-else @click=\"onEditCancel\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconClose :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('comments', 'Cancel edit') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\n\t\t\t\t<!-- Show loading if we're editing or deleting, not on new ones -->\n\t\t\t\t<div v-if=\"id && loading\" class=\"comment_loading icon-loading-small\" />\n\n\t\t\t\t<!-- Relative time to the comment creation -->\n\t\t\t\t<NcDateTime v-else-if=\"creationDateTime\"\n\t\t\t\t\tclass=\"comment__timestamp\"\n\t\t\t\t\t:timestamp=\"timestamp\"\n\t\t\t\t\t:ignore-seconds=\"true\" />\n\t\t\t</div>\n\n\t\t\t<!-- Message editor -->\n\t\t\t<form v-if=\"editor || editing\" class=\"comment__editor\" @submit.prevent>\n\t\t\t\t<div class=\"comment__editor-group\">\n\t\t\t\t\t<NcRichContenteditable ref=\"editor\"\n\t\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t\t:contenteditable=\"!loading\"\n\t\t\t\t\t\t:label=\"editor ? t('comments', 'New comment') : t('comments', 'Edit comment')\"\n\t\t\t\t\t\t:placeholder=\"t('comments', 'Write a comment …')\"\n\t\t\t\t\t\t:value=\"localMessage\"\n\t\t\t\t\t\t:user-data=\"userData\"\n\t\t\t\t\t\taria-describedby=\"tab-comments__editor-description\"\n\t\t\t\t\t\t@update:value=\"updateLocalMessage\"\n\t\t\t\t\t\t@submit=\"onSubmit\" />\n\t\t\t\t\t<div class=\"comment__submit\">\n\t\t\t\t\t\t<NcButton type=\"tertiary-no-background\"\n\t\t\t\t\t\t\tnative-type=\"submit\"\n\t\t\t\t\t\t\t:aria-label=\"t('comments', 'Post comment')\"\n\t\t\t\t\t\t\t:disabled=\"isEmptyMessage\"\n\t\t\t\t\t\t\t@click=\"onSubmit\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcLoadingIcon v-if=\"loading\" />\n\t\t\t\t\t\t\t\t<IconArrowRight v-else :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"tab-comments__editor-description\" class=\"comment__editor-description\">\n\t\t\t\t\t{{ t('comments', '@ for mentions, : for emoji, / for smart picker') }}\n\t\t\t\t</div>\n\t\t\t</form>\n\n\t\t\t<!-- Message content -->\n\t\t\t<!-- The html is escaped and sanitized before rendering -->\n\t\t\t<!-- eslint-disable vue/no-v-html-->\n\t\t\t<div v-else\n\t\t\t\t:class=\"{'comment__message--expanded': expanded}\"\n\t\t\t\tclass=\"comment__message\"\n\t\t\t\t@click=\"onExpand\"\n\t\t\t\tv-html=\"renderedContent\" />\n\t\t\t<!-- eslint-enable vue/no-v-html-->\n\t\t</div>\n\t</component>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\n\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator.js'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcDateTime from '@nextcloud/vue/dist/Components/NcDateTime.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport RichEditorMixin from '@nextcloud/vue/dist/Mixins/richEditor.js'\n\nimport IconArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport IconClose from 'vue-material-design-icons/Close.vue'\nimport IconDelete from 'vue-material-design-icons/Delete.vue'\nimport IconEdit from 'vue-material-design-icons/Pencil.vue'\n\nimport CommentMixin from '../mixins/CommentMixin.js'\nimport { mapStores } from 'pinia'\nimport { useDeletedCommentLimbo } from '../store/deletedCommentLimbo.js'\n\n// Dynamic loading\nconst NcRichContenteditable = () => import('@nextcloud/vue/dist/Components/NcRichContenteditable.js')\n\nexport default {\n\tname: 'Comment',\n\n\tcomponents: {\n\t\tIconArrowRight,\n\t\tIconClose,\n\t\tIconDelete,\n\t\tIconEdit,\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcActionSeparator,\n\t\tNcAvatar,\n\t\tNcButton,\n\t\tNcDateTime,\n\t\tNcLoadingIcon,\n\t\tNcRichContenteditable,\n\t},\n\tmixins: [RichEditorMixin, CommentMixin],\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tactorDisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactorId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcreationDateTime: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Force the editor display\n\t\t */\n\t\teditor: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Provide the autocompletion data\n\t\t */\n\t\tautoComplete: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\n\t\ttag: {\n\t\t\ttype: String,\n\t\t\tdefault: 'div',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\texpanded: false,\n\t\t\t// Only change data locally and update the original\n\t\t\t// parent data when the request is sent and resolved\n\t\t\tlocalMessage: '',\n\t\t\tsubmitted: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t...mapStores(useDeletedCommentLimbo),\n\n\t\t/**\n\t\t * Is the current user the author of this comment\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisOwnComment() {\n\t\t\treturn getCurrentUser().uid === this.actorId\n\t\t},\n\n\t\t/**\n\t\t * Rendered content as html string\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\trenderedContent() {\n\t\t\tif (this.isEmptyMessage) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn this.renderContent(this.localMessage)\n\t\t},\n\n\t\tisEmptyMessage() {\n\t\t\treturn !this.localMessage || this.localMessage.trim() === ''\n\t\t},\n\n\t\t/**\n\t\t * Timestamp of the creation time (in ms UNIX time)\n\t\t */\n\t\ttimestamp() {\n\t\t\treturn Date.parse(this.creationDateTime)\n\t\t},\n\n\t\tisLimbo() {\n\t\t\treturn this.deletedCommentLimboStore.checkForId(this.id)\n\t\t},\n\t},\n\n\twatch: {\n\t\t// If the data change, update the local value\n\t\tmessage(message) {\n\t\t\tthis.updateLocalMessage(message)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// Init localMessage\n\t\tthis.updateLocalMessage(this.message)\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * Update local Message on outer change\n\t\t *\n\t\t * @param {string} message the message to set\n\t\t */\n\t\tupdateLocalMessage(message) {\n\t\t\tthis.localMessage = message.toString()\n\t\t\tthis.submitted = false\n\t\t},\n\n\t\t/**\n\t\t * Dispatch message between edit and create\n\t\t */\n\t\tonSubmit() {\n\t\t\t// Do not submit if message is empty\n\t\t\tif (this.localMessage.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.editor) {\n\t\t\t\tthis.onNewComment(this.localMessage.trim())\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// Focus the editor again\n\t\t\t\t\tthis.$refs.editor.$el.focus()\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onEditComment(this.localMessage.trim())\n\t\t},\n\n\t\tonExpand() {\n\t\t\tthis.expanded = true\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"sass:math\";\n\n$comment-padding: 10px;\n\n.comment {\n\tdisplay: flex;\n\tgap: 8px;\n\tpadding: 5px $comment-padding;\n\n\t&__side {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tpadding-top: 6px;\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-direction: column;\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmin-height: 44px;\n\t}\n\n\t&__actions {\n\t\tmargin-left: $comment-padding !important;\n\t}\n\n\t&__author {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&_loading,\n\t&__timestamp {\n\t\tmargin-left: auto;\n\t\ttext-align: right;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__editor-group {\n\t\tposition: relative;\n\t}\n\n\t&__editor-description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-block: var(--default-grid-baseline);\n\t}\n\n\t&__submit {\n\t\tposition: absolute !important;\n\t\tbottom: 5px;\n\t\tright: 0;\n\t}\n\n\t&__message {\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 70px;\n\t\toverflow: hidden;\n\t\tmargin-top: -6px;\n\t\t&--expanded {\n\t\t\tmax-height: none;\n\t\t\toverflow: visible;\n\t\t}\n\t}\n}\n\n.rich-contenteditable__input {\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: $comment-padding;\n}\n\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=6f6ef97e&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=6f6ef97e&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comment.vue?vue&type=template&id=6f6ef97e&scoped=true\"\nimport script from \"./Comment.vue?vue&type=script&lang=js\"\nexport * from \"./Comment.vue?vue&type=script&lang=js\"\nimport style0 from \"./Comment.vue?vue&type=style&index=0&id=6f6ef97e&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6f6ef97e\",\n null\n \n)\n\nexport default component.exports","import axios from '@nextcloud/axios';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { loadState } from '@nextcloud/initial-state';\nimport { generateOcsUrl } from '@nextcloud/router';\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n props: {\n resourceId: {\n type: Number,\n required: true,\n },\n resourceType: {\n type: String,\n default: 'files',\n },\n },\n data() {\n return {\n editorData: {\n actorDisplayName: getCurrentUser().displayName,\n actorId: getCurrentUser().uid,\n key: 'editor',\n },\n userData: {},\n };\n },\n methods: {\n /**\n * Autocomplete @mentions\n *\n * @param {string} search the query\n * @param {Function} callback the callback to process the results with\n */\n async autoComplete(search, callback) {\n const { data } = await axios.get(generateOcsUrl('core/autocomplete/get'), {\n params: {\n search,\n itemType: 'files',\n itemId: this.resourceId,\n sorter: 'commenters|share-recipients',\n limit: loadState('comments', 'maxAutoCompleteResults'),\n },\n });\n // Save user data so it can be used by the editor to replace mentions\n data.ocs.data.forEach(user => { this.userData[user.id] = user; });\n return callback(Object.values(this.userData));\n },\n /**\n * Make sure we have all mentions as Array of objects\n *\n * @param mentions the mentions list\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n genMentionsData(mentions) {\n Object.values(mentions)\n .flat()\n .forEach(mention => {\n this.userData[mention.mentionId] = {\n // TODO: support groups\n icon: 'icon-user',\n id: mention.mentionId,\n label: mention.mentionDisplayName,\n source: 'users',\n primary: getCurrentUser()?.uid === mention.mentionId,\n };\n });\n return this.userData;\n },\n },\n});\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Richard Steinmetz <richard@steinmetz.cloud>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div v-observe-visibility=\"onVisibilityChange\"\n\t\tclass=\"comments\"\n\t\t:class=\"{ 'icon-loading': isFirstLoading }\">\n\t\t<!-- Editor -->\n\t\t<Comment v-bind=\"editorData\"\n\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t:resource-type=\"resourceType\"\n\t\t\t:editor=\"true\"\n\t\t\t:user-data=\"userData\"\n\t\t\t:resource-id=\"currentResourceId\"\n\t\t\tclass=\"comments__writer\"\n\t\t\t@new=\"onNewComment\" />\n\n\t\t<template v-if=\"!isFirstLoading\">\n\t\t\t<NcEmptyContent v-if=\"!hasComments && done\"\n\t\t\t\tclass=\"comments__empty\"\n\t\t\t\t:name=\"t('comments', 'No comments yet, start the conversation!')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<MessageReplyTextIcon />\n\t\t\t\t</template>\n\t\t\t</NcEmptyContent>\n\t\t\t<ul v-else>\n\t\t\t\t<!-- Comments -->\n\t\t\t\t<Comment v-for=\"comment in comments\"\n\t\t\t\t\t:key=\"comment.props.id\"\n\t\t\t\t\ttag=\"li\"\n\t\t\t\t\tv-bind=\"comment.props\"\n\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t:resource-type=\"resourceType\"\n\t\t\t\t\t:message.sync=\"comment.props.message\"\n\t\t\t\t\t:resource-id=\"currentResourceId\"\n\t\t\t\t\t:user-data=\"genMentionsData(comment.props.mentions)\"\n\t\t\t\t\tclass=\"comments__list\"\n\t\t\t\t\t@delete=\"onDelete\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Loading more message -->\n\t\t\t<div v-if=\"loading && !isFirstLoading\" class=\"comments__info icon-loading\" />\n\n\t\t\t<div v-else-if=\"hasComments && done\" class=\"comments__info\">\n\t\t\t\t{{ t('comments', 'No more messages') }}\n\t\t\t</div>\n\n\t\t\t<!-- Error message -->\n\t\t\t<template v-else-if=\"error\">\n\t\t\t\t<NcEmptyContent class=\"comments__error\" :name=\"error\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<AlertCircleOutlineIcon />\n\t\t\t\t\t</template>\n\t\t\t\t</NcEmptyContent>\n\t\t\t\t<NcButton class=\"comments__retry\" @click=\"getComments\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<RefreshIcon />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('comments', 'Retry') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport { translate as t } from '@nextcloud/l10n'\nimport { vElementVisibility as elementVisibility } from '@vueuse/components'\nimport VTooltip from 'v-tooltip'\nimport Vue from 'vue'\nimport VueObserveVisibility from 'vue-observe-visibility'\n\nimport AlertCircleOutlineIcon from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport MessageReplyTextIcon from 'vue-material-design-icons/MessageReplyText.vue'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport RefreshIcon from 'vue-material-design-icons/Refresh.vue'\n\nimport { getComments, DEFAULT_LIMIT } from '../services/GetComments.ts'\nimport { markCommentsAsRead } from '../services/ReadComments.ts'\nimport cancelableRequest from '../utils/cancelableRequest.js'\nimport Comment from '../components/Comment.vue'\nimport CommentView from '../mixins/CommentView'\n\nVue.use(VTooltip)\nVue.use(VueObserveVisibility)\n\nexport default {\n\tname: 'Comments',\n\n\tcomponents: {\n\t\tComment,\n\t\tNcEmptyContent,\n\t\tNcButton,\n\t\tRefreshIcon,\n\t\tMessageReplyTextIcon,\n\t\tAlertCircleOutlineIcon,\n\t},\n\n\tdirectives: {\n\t\telementVisibility,\n\t},\n\n\tmixins: [CommentView],\n\n\tdata() {\n\t\treturn {\n\t\t\terror: '',\n\t\t\tloading: false,\n\t\t\tdone: false,\n\n\t\t\tcurrentResourceId: this.resourceId,\n\t\t\toffset: 0,\n\t\t\tcomments: [],\n\n\t\t\tcancelRequest: () => {},\n\n\t\t\tComment,\n\t\t\tuserData: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\thasComments() {\n\t\t\treturn this.comments.length > 0\n\t\t},\n\t\tisFirstLoading() {\n\t\t\treturn this.loading && this.offset === 0\n\t\t},\n\t},\n\n\twatch: {\n\t\tresourceId() {\n\t\t\tthis.currentResourceId = this.resourceId\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\tasync onVisibilityChange(isVisible) {\n\t\t\tif (isVisible) {\n\t\t\t\ttry {\n\t\t\t\t\tawait markCommentsAsRead(this.resourceType, this.currentResourceId, new Date())\n\t\t\t\t} catch (e) {\n\t\t\t\t\tshowError(e.message || t('comments', 'Failed to mark comments as read'))\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update current resourceId and fetch new data\n\t\t *\n\t\t * @param {number} resourceId the current resourceId (fileId...)\n\t\t */\n\t\tasync update(resourceId) {\n\t\t\tthis.currentResourceId = resourceId\n\t\t\tthis.resetState()\n\t\t\tthis.getComments()\n\t\t},\n\n\t\t/**\n\t\t * Ran when the bottom of the tab is reached\n\t\t */\n\t\tonScrollBottomReached() {\n\t\t\t/**\n\t\t\t * Do not fetch more if we:\n\t\t\t * - are showing an error\n\t\t\t * - already fetched everything\n\t\t\t * - are currently loading\n\t\t\t */\n\t\t\tif (this.error || this.done || this.loading) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.getComments()\n\t\t},\n\n\t\t/**\n\t\t * Get the existing shares infos\n\t\t */\n\t\tasync getComments() {\n\t\t\t// Cancel any ongoing request\n\t\t\tthis.cancelRequest('cancel')\n\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.error = ''\n\n\t\t\t\t// Init cancellable request\n\t\t\t\tconst { request, abort } = cancelableRequest(getComments)\n\t\t\t\tthis.cancelRequest = abort\n\n\t\t\t\t// Fetch comments\n\t\t\t\tconst { data: comments } = await request({\n\t\t\t\t\tresourceType: this.resourceType,\n\t\t\t\t\tresourceId: this.currentResourceId,\n\t\t\t\t}, { offset: this.offset }) || { data: [] }\n\n\t\t\t\tthis.logger.debug(`Processed ${comments.length} comments`, { comments })\n\n\t\t\t\t// We received less than the requested amount,\n\t\t\t\t// we're done fetching comments\n\t\t\t\tif (comments.length < DEFAULT_LIMIT) {\n\t\t\t\t\tthis.done = true\n\t\t\t\t}\n\n\t\t\t\t// Insert results\n\t\t\t\tthis.comments.push(...comments)\n\n\t\t\t\t// Increase offset for next fetch\n\t\t\t\tthis.offset += DEFAULT_LIMIT\n\t\t\t} catch (error) {\n\t\t\t\tif (error.message === 'cancel') {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.error = t('comments', 'Unable to load the comments list')\n\t\t\t\tconsole.error('Error loading the comments list', error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add newly created comment to the list\n\t\t *\n\t\t * @param {object} comment the new comment\n\t\t */\n\t\tonNewComment(comment) {\n\t\t\tthis.comments.unshift(comment)\n\t\t},\n\n\t\t/**\n\t\t * Remove deleted comment from the list\n\t\t *\n\t\t * @param {number} id the deleted comment\n\t\t */\n\t\tonDelete(id) {\n\t\t\tconst index = this.comments.findIndex(comment => comment.props.id === id)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.comments.splice(index, 1)\n\t\t\t} else {\n\t\t\t\tconsole.error('Could not find the deleted comment in the list', id)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the current view to its default state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.error = ''\n\t\t\tthis.loading = false\n\t\t\tthis.done = false\n\t\t\tthis.offset = 0\n\t\t\tthis.comments = []\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.comments {\n\tmin-height: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&__empty,\n\t&__error {\n\t\tflex: 1 0;\n\t}\n\n\t&__retry {\n\t\tmargin: 0 auto;\n\t}\n\n\t&__info {\n\t\theight: 60px;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\ttext-align: center;\n\t\tline-height: 60px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=script&lang=js\"","/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport client from './DavClient.js';\n/**\n * Mark comments older than the date timestamp as read\n *\n * @param resourceType the resource type\n * @param resourceId the resource ID\n * @param date the date object\n */\nexport const markCommentsAsRead = (resourceType, resourceId, date) => {\n const resourcePath = ['', resourceType, resourceId].join('/');\n const readMarker = date.toUTCString();\n return client.customRequest(resourcePath, {\n method: 'PROPPATCH',\n data: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:readMarker>${readMarker}</oc:readMarker>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n });\n};\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Creates a cancelable axios 'request object'.\n *\n * @param {Function} request the axios promise request\n * @return {object}\n */\nconst cancelableRequest = function(request) {\n\tconst controller = new AbortController()\n\tconst signal = controller.signal\n\n\t/**\n\t * Execute the request\n\t *\n\t * @param {string} url the url to send the request to\n\t * @param {object} [options] optional config for the request\n\t */\n\tconst fetch = async function(url, options) {\n\t\tconst response = await request(\n\t\t\turl,\n\t\t\tObject.assign({ signal }, options)\n\t\t)\n\t\treturn response\n\t}\n\n\treturn {\n\t\trequest: fetch,\n\t\tabort: () => controller.abort(),\n\t}\n}\n\nexport default cancelableRequest\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=style&index=0&id=222c65b2&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=style&index=0&id=222c65b2&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comments.vue?vue&type=template&id=222c65b2&scoped=true\"\nimport script from \"./Comments.vue?vue&type=script&lang=js\"\nexport * from \"./Comments.vue?vue&type=script&lang=js\"\nimport style0 from \"./Comments.vue?vue&type=style&index=0&id=222c65b2&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"222c65b2\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"observe-visibility\",rawName:\"v-observe-visibility\",value:(_vm.onVisibilityChange),expression:\"onVisibilityChange\"}],staticClass:\"comments\",class:{ 'icon-loading': _vm.isFirstLoading }},[_c('Comment',_vm._b({staticClass:\"comments__writer\",attrs:{\"auto-complete\":_vm.autoComplete,\"resource-type\":_vm.resourceType,\"editor\":true,\"user-data\":_vm.userData,\"resource-id\":_vm.currentResourceId},on:{\"new\":_vm.onNewComment}},'Comment',_vm.editorData,false)),_vm._v(\" \"),(!_vm.isFirstLoading)?[(!_vm.hasComments && _vm.done)?_c('NcEmptyContent',{staticClass:\"comments__empty\",attrs:{\"name\":_vm.t('comments', 'No comments yet, start the conversation!')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('MessageReplyTextIcon')]},proxy:true}],null,false,1033639148)}):_c('ul',_vm._l((_vm.comments),function(comment){return _c('Comment',_vm._b({key:comment.props.id,staticClass:\"comments__list\",attrs:{\"tag\":\"li\",\"auto-complete\":_vm.autoComplete,\"resource-type\":_vm.resourceType,\"message\":comment.props.message,\"resource-id\":_vm.currentResourceId,\"user-data\":_vm.genMentionsData(comment.props.mentions)},on:{\"update:message\":function($event){return _vm.$set(comment.props, \"message\", $event)},\"delete\":_vm.onDelete}},'Comment',comment.props,false))}),1),_vm._v(\" \"),(_vm.loading && !_vm.isFirstLoading)?_c('div',{staticClass:\"comments__info icon-loading\"}):(_vm.hasComments && _vm.done)?_c('div',{staticClass:\"comments__info\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('comments', 'No more messages'))+\"\\n\\t\\t\")]):(_vm.error)?[_c('NcEmptyContent',{staticClass:\"comments__error\",attrs:{\"name\":_vm.error},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AlertCircleOutlineIcon')]},proxy:true}],null,false,66050004)}),_vm._v(\" \"),_c('NcButton',{staticClass:\"comments__retry\",on:{\"click\":_vm.getComments},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('RefreshIcon')]},proxy:true}],null,false,3924573781)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Retry'))+\"\\n\\t\\t\\t\")])]:_vm._e()]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getRequestToken } from '@nextcloud/auth'\nimport { t, n } from '@nextcloud/l10n'\nimport { PiniaVuePlugin, createPinia } from 'pinia'\nimport Vue from 'vue'\nimport CommentsApp from '../views/Comments.vue'\nimport logger from '../logger.js'\n\nVue.use(PiniaVuePlugin)\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\n// Add translates functions\nVue.mixin({\n\tdata() {\n\t\treturn {\n\t\t\tlogger,\n\t\t}\n\t},\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\nexport default class CommentInstance {\n\n\t/**\n\t * Initialize a new Comments instance for the desired type\n\t *\n\t * @param {string} resourceType the comments endpoint type\n\t * @param {object} options the vue options (propsData, parent, el...)\n\t */\n\tconstructor(resourceType = 'files', options = {}) {\n\t\tconst pinia = createPinia()\n\n\t\t// Merge options and set `resourceType` property\n\t\toptions = {\n\t\t\t...options,\n\t\t\tpropsData: {\n\t\t\t\t...(options.propsData ?? {}),\n\t\t\t\tresourceType,\n\t\t\t},\n\t\t\tpinia,\n\t\t}\n\t\t// Init Comments component\n\t\tconst View = Vue.extend(CommentsApp)\n\t\treturn new View(options)\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport CommentsInstance from './services/CommentsInstance.js'\n\n// Init Comments\nif (window.OCA && !window.OCA.Comments) {\n\tObject.assign(window.OCA, { Comments: {} })\n}\n\n// Init Comments App view\nObject.assign(window.OCA.Comments, { View: CommentsInstance })\nconsole.debug('OCA.Comments.View initialized')\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","var balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m) return [str];\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n if (/\\$$/.test(m.pre)) { \n for (var k = 0; k < post.length; k++) {\n var expansion = pre+ '{' + m.body + '}' + post[k];\n expansions.push(expansion);\n }\n } else {\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = [];\n\n for (var j = 0; j < n.length; j++) {\n N.push.apply(N, expand(n[j], false));\n }\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n }\n\n return expansions;\n}\n\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.comment[data-v-6f6ef97e]{display:flex;gap:8px;padding:5px 10px}.comment__side[data-v-6f6ef97e]{display:flex;align-items:flex-start;padding-top:6px}.comment__body[data-v-6f6ef97e]{display:flex;flex-grow:1;flex-direction:column}.comment__header[data-v-6f6ef97e]{display:flex;align-items:center;min-height:44px}.comment__actions[data-v-6f6ef97e]{margin-left:10px !important}.comment__author[data-v-6f6ef97e]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text-maxcontrast)}.comment_loading[data-v-6f6ef97e],.comment__timestamp[data-v-6f6ef97e]{margin-left:auto;text-align:right;white-space:nowrap;color:var(--color-text-maxcontrast)}.comment__editor-group[data-v-6f6ef97e]{position:relative}.comment__editor-description[data-v-6f6ef97e]{color:var(--color-text-maxcontrast);padding-block:var(--default-grid-baseline)}.comment__submit[data-v-6f6ef97e]{position:absolute !important;bottom:5px;right:0}.comment__message[data-v-6f6ef97e]{white-space:pre-wrap;word-break:break-word;max-height:70px;overflow:hidden;margin-top:-6px}.comment__message--expanded[data-v-6f6ef97e]{max-height:none;overflow:visible}.rich-contenteditable__input[data-v-6f6ef97e]{min-height:44px;margin:0;padding:10px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/components/Comment.vue\"],\"names\":[],\"mappings\":\"AAKA,0BACC,YAAA,CACA,OAAA,CACA,gBAAA,CAEA,gCACC,YAAA,CACA,sBAAA,CACA,eAAA,CAGD,gCACC,YAAA,CACA,WAAA,CACA,qBAAA,CAGD,kCACC,YAAA,CACA,kBAAA,CACA,eAAA,CAGD,mCACC,2BAAA,CAGD,kCACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,mCAAA,CAGD,uEAEC,gBAAA,CACA,gBAAA,CACA,kBAAA,CACA,mCAAA,CAGD,wCACC,iBAAA,CAGD,8CACC,mCAAA,CACA,0CAAA,CAGD,kCACC,4BAAA,CACA,UAAA,CACA,OAAA,CAGD,mCACC,oBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,6CACC,eAAA,CACA,gBAAA,CAKH,8CACC,eAAA,CACA,QAAA,CACA,YA3EiB\",\"sourcesContent\":[\"\\n@use \\\"sass:math\\\";\\n\\n$comment-padding: 10px;\\n\\n.comment {\\n\\tdisplay: flex;\\n\\tgap: 8px;\\n\\tpadding: 5px $comment-padding;\\n\\n\\t&__side {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: flex-start;\\n\\t\\tpadding-top: 6px;\\n\\t}\\n\\n\\t&__body {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-grow: 1;\\n\\t\\tflex-direction: column;\\n\\t}\\n\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tmin-height: 44px;\\n\\t}\\n\\n\\t&__actions {\\n\\t\\tmargin-left: $comment-padding !important;\\n\\t}\\n\\n\\t&__author {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&_loading,\\n\\t&__timestamp {\\n\\t\\tmargin-left: auto;\\n\\t\\ttext-align: right;\\n\\t\\twhite-space: nowrap;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&__editor-group {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__editor-description {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-block: var(--default-grid-baseline);\\n\\t}\\n\\n\\t&__submit {\\n\\t\\tposition: absolute !important;\\n\\t\\tbottom: 5px;\\n\\t\\tright: 0;\\n\\t}\\n\\n\\t&__message {\\n\\t\\twhite-space: pre-wrap;\\n\\t\\tword-break: break-word;\\n\\t\\tmax-height: 70px;\\n\\t\\toverflow: hidden;\\n\\t\\tmargin-top: -6px;\\n\\t\\t&--expanded {\\n\\t\\t\\tmax-height: none;\\n\\t\\t\\toverflow: visible;\\n\\t\\t}\\n\\t}\\n}\\n\\n.rich-contenteditable__input {\\n\\tmin-height: 44px;\\n\\tmargin: 0;\\n\\tpadding: $comment-padding;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.comments[data-v-222c65b2]{min-height:100%;display:flex;flex-direction:column}.comments__empty[data-v-222c65b2],.comments__error[data-v-222c65b2]{flex:1 0}.comments__retry[data-v-222c65b2]{margin:0 auto}.comments__info[data-v-222c65b2]{height:60px;color:var(--color-text-maxcontrast);text-align:center;line-height:60px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/views/Comments.vue\"],\"names\":[],\"mappings\":\"AACA,2BACC,eAAA,CACA,YAAA,CACA,qBAAA,CAEA,oEAEC,QAAA,CAGD,kCACC,aAAA,CAGD,iCACC,WAAA,CACA,mCAAA,CACA,iBAAA,CACA,gBAAA\",\"sourcesContent\":[\"\\n.comments {\\n\\tmin-height: 100%;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\n\\t&__empty,\\n\\t&__error {\\n\\t\\tflex: 1 0;\\n\\t}\\n\\n\\t&__retry {\\n\\t\\tmargin: 0 auto;\\n\\t}\\n\\n\\t&__info {\\n\\t\\theight: 60px;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\ttext-align: center;\\n\\t\\tline-height: 60px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","'use strict';\n\nconst validator = require('./validator');\nconst XMLParser = require('./xmlparser/XMLParser');\nconst XMLBuilder = require('./xmlbuilder/json2xml');\n\nmodule.exports = {\n XMLParser: XMLParser,\n XMLValidator: validator,\n XMLBuilder: XMLBuilder\n}","/**\n* @license nested-property https://github.com/cosmosio/nested-property\n*\n* The MIT License (MIT)\n*\n* Copyright (c) 2014-2020 Olivier Scherrer <pode.fr@gmail.com>\n*/\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar ARRAY_WILDCARD = \"+\";\nvar PATH_DELIMITER = \".\";\n\nvar ObjectPrototypeMutationError = /*#__PURE__*/function (_Error) {\n _inherits(ObjectPrototypeMutationError, _Error);\n\n function ObjectPrototypeMutationError(params) {\n var _this;\n\n _classCallCheck(this, ObjectPrototypeMutationError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ObjectPrototypeMutationError).call(this, params));\n _this.name = \"ObjectPrototypeMutationError\";\n return _this;\n }\n\n return ObjectPrototypeMutationError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = {\n set: setNestedProperty,\n get: getNestedProperty,\n has: hasNestedProperty,\n hasOwn: function hasOwn(object, property, options) {\n return this.has(object, property, options || {\n own: true\n });\n },\n isIn: isInNestedProperty,\n ObjectPrototypeMutationError: ObjectPrototypeMutationError\n};\n/**\n * Get the property of an object nested in one or more objects or array\n * Given an object such as a.b.c.d = 5, getNestedProperty(a, \"b.c.d\") will return 5.\n * It also works through arrays. Given a nested array such as a[0].b = 5, getNestedProperty(a, \"0.b\") will return 5.\n * For accessing nested properties through all items in an array, you may use the array wildcard \"+\".\n * For instance, getNestedProperty([{a:1}, {a:2}, {a:3}], \"+.a\") will return [1, 2, 3]\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns the object or the the property value if found\n */\n\nfunction getNestedProperty(object, property) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n return object[property];\n }\n\n try {\n return traverse(object, property, function _getNestedProperty(currentObject, currentProperty) {\n return currentObject[currentProperty];\n });\n } catch (err) {\n return object;\n }\n}\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, \"b.c.d\") will return true.\n * It also returns true if the property is in the prototype chain.\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @param {Object} options:\n * - own: set to reject properties from the prototype\n * @returns true if has (property in object), false otherwise\n */\n\n\nfunction hasNestedProperty(object, property) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n if (typeof property == \"number\") {\n return property in object;\n }\n\n try {\n var has = false;\n traverse(object, property, function _hasNestedProperty(currentObject, currentProperty, segments, index) {\n if (isLastSegment(segments, index)) {\n if (options.own) {\n has = currentObject.hasOwnProperty(currentProperty);\n } else {\n has = currentProperty in currentObject;\n }\n } else {\n return currentObject && currentObject[currentProperty];\n }\n });\n return has;\n } catch (err) {\n return false;\n }\n}\n/**\n * Set the property of an object nested in one or more objects\n * If the property doesn't exist, it gets created.\n * @param {Object} object\n * @param {String} property\n * @param value the value to set\n * @returns object if no assignment was made or the value if the assignment was made\n */\n\n\nfunction setNestedProperty(object, property, value) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n object[property] = value;\n return object[property];\n }\n\n try {\n return traverse(object, property, function _setNestedProperty(currentObject, currentProperty, segments, index) {\n if (currentObject === Reflect.getPrototypeOf({})) {\n throw new ObjectPrototypeMutationError(\"Attempting to mutate Object.prototype\");\n }\n\n if (!currentObject[currentProperty]) {\n var nextPropIsNumber = Number.isInteger(Number(segments[index + 1]));\n var nextPropIsArrayWildcard = segments[index + 1] === ARRAY_WILDCARD;\n\n if (nextPropIsNumber || nextPropIsArrayWildcard) {\n currentObject[currentProperty] = [];\n } else {\n currentObject[currentProperty] = {};\n }\n }\n\n if (isLastSegment(segments, index)) {\n currentObject[currentProperty] = value;\n }\n\n return currentObject[currentProperty];\n });\n } catch (err) {\n if (err instanceof ObjectPrototypeMutationError) {\n // rethrow\n throw err;\n } else {\n return object;\n }\n }\n}\n/**\n * Tell if an object is on the path to a nested property\n * If the object is on the path, and the path exists, it returns true, and false otherwise.\n * @param {Object} object to get the nested property from\n * @param {String} property name of the nested property\n * @param {Object} objectInPath the object to check\n * @param {Object} options:\n * - validPath: return false if the path is invalid, even if the object is in the path\n * @returns {boolean} true if the object is on the path\n */\n\n\nfunction isInNestedProperty(object, property, objectInPath) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n try {\n var isIn = false,\n pathExists = false;\n traverse(object, property, function _isInNestedProperty(currentObject, currentProperty, segments, index) {\n isIn = isIn || currentObject === objectInPath || !!currentObject && currentObject[currentProperty] === objectInPath;\n pathExists = isLastSegment(segments, index) && _typeof(currentObject) === \"object\" && currentProperty in currentObject;\n return currentObject && currentObject[currentProperty];\n });\n\n if (options.validPath) {\n return isIn && pathExists;\n } else {\n return isIn;\n }\n } catch (err) {\n return false;\n }\n}\n\nfunction traverse(object, path) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n var segments = path.split(PATH_DELIMITER);\n var length = segments.length;\n\n var _loop = function _loop(idx) {\n var currentSegment = segments[idx];\n\n if (!object) {\n return {\n v: void 0\n };\n }\n\n if (currentSegment === ARRAY_WILDCARD) {\n if (Array.isArray(object)) {\n return {\n v: object.map(function (value, index) {\n var remainingSegments = segments.slice(idx + 1);\n\n if (remainingSegments.length > 0) {\n return traverse(value, remainingSegments.join(PATH_DELIMITER), callback);\n } else {\n return callback(object, index, segments, idx);\n }\n })\n };\n } else {\n var pathToHere = segments.slice(0, idx).join(PATH_DELIMITER);\n throw new Error(\"Object at wildcard (\".concat(pathToHere, \") is not an array\"));\n }\n } else {\n object = callback(object, currentSegment, segments, idx);\n }\n };\n\n for (var idx = 0; idx < length; idx++) {\n var _ret = _loop(idx);\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n\n return object;\n}\n\nfunction isLastSegment(segments, index) {\n return segments.length === index + 1;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\nvar util = require('util');\nvar isString = function (x) {\n return typeof x === 'string';\n};\n\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n var res = [];\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i];\n\n // ignore empty parts\n if (!p || p === '.')\n continue;\n\n if (p === '..') {\n if (res.length && res[res.length - 1] !== '..') {\n res.pop();\n } else if (allowAboveRoot) {\n res.push('..');\n }\n } else {\n res.push(p);\n }\n }\n\n return res;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar posix = {};\n\n\nfunction posixSplitPath(filename) {\n return splitPathRe.exec(filename).slice(1);\n}\n\n\n// path.resolve([from ...], to)\n// posix version\nposix.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (!isString(path)) {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(resolvedPath.split('/'),\n !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nposix.normalize = function(path) {\n var isAbsolute = posix.isAbsolute(path),\n trailingSlash = path.substr(-1) === '/';\n\n // Normalize the path\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nposix.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nposix.join = function() {\n var path = '';\n for (var i = 0; i < arguments.length; i++) {\n var segment = arguments[i];\n if (!isString(segment)) {\n throw new TypeError('Arguments to path.join must be strings');\n }\n if (segment) {\n if (!path) {\n path += segment;\n } else {\n path += '/' + segment;\n }\n }\n }\n return posix.normalize(path);\n};\n\n\n// path.relative(from, to)\n// posix version\nposix.relative = function(from, to) {\n from = posix.resolve(from).substr(1);\n to = posix.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\n\nposix._makeLong = function(path) {\n return path;\n};\n\n\nposix.dirname = function(path) {\n var result = posixSplitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nposix.basename = function(path, ext) {\n var f = posixSplitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nposix.extname = function(path) {\n return posixSplitPath(path)[3];\n};\n\n\nposix.format = function(pathObject) {\n if (!util.isObject(pathObject)) {\n throw new TypeError(\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\n );\n }\n\n var root = pathObject.root || '';\n\n if (!isString(root)) {\n throw new TypeError(\n \"'pathObject.root' must be a string or undefined, not \" +\n typeof pathObject.root\n );\n }\n\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\n var base = pathObject.base || '';\n return dir + base;\n};\n\n\nposix.parse = function(pathString) {\n if (!isString(pathString)) {\n throw new TypeError(\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\n );\n }\n var allParts = posixSplitPath(pathString);\n if (!allParts || allParts.length !== 4) {\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n }\n allParts[1] = allParts[1] || '';\n allParts[2] = allParts[2] || '';\n allParts[3] = allParts[3] || '';\n\n return {\n root: allParts[0],\n dir: allParts[0] + allParts[1].slice(0, allParts[1].length - 1),\n base: allParts[2],\n ext: allParts[3],\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\n };\n};\n\n\nposix.sep = '/';\nposix.delimiter = ':';\n\n module.exports = posix;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-\" + chunkId + \".js?v=\" + {\"1957\":\"96a4d042dd15d21b005b\",\"4473\":\"6009e669b1a0737a2378\",\"5528\":\"231caad2efb966b857ef\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 7062;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t7062: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(87861)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","activePinia","setActivePinia","pinia","piniaSymbol","Symbol","isPlainObject","o","Object","prototype","toString","call","toJSON","MutationType","IS_CLIENT","window","_global","self","global","globalThis","HTMLElement","download","url","name","opts","xhr","XMLHttpRequest","open","responseType","onload","saveAs","response","onerror","console","error","send","corsEnabled","e","status","click","node","dispatchEvent","MouseEvent","evt","document","createEvent","initMouseEvent","_navigator","navigator","userAgent","isMacOSWebView","test","HTMLAnchorElement","blob","a","createElement","rel","href","origin","location","target","URL","createObjectURL","setTimeout","revokeObjectURL","msSaveOrOpenBlob","autoBom","type","Blob","String","fromCharCode","bom","popup","title","body","innerText","force","isSafari","isChromeIOS","FileReader","reader","onloadend","result","Error","replace","assign","readAsDataURL","toastMessage","message","piniaMessage","__VUE_DEVTOOLS_TOAST__","warn","log","isPinia","checkClipboardAccess","checkNotFocusedError","toLowerCase","includes","fileInput","loadStoresState","state","key","storeState","value","formatDisplay","display","_custom","PINIA_ROOT_LABEL","PINIA_ROOT_ID","formatStoreForInspectorTree","store","id","label","$id","formatEventData","events","Array","isArray","reduce","data","event","keys","push","operations","oldValue","newValue","operation","formatMutationType","direct","patchFunction","patchObject","isTimelineActive","componentStateTypes","MUTATIONS_LAYER_ID","INSPECTOR_ID","assign$1","getStoreType","registerPiniaDevtools","app","logo","packageName","homepage","api","now","addTimelineLayer","color","addInspector","icon","treeFilterPlaceholder","actions","action","async","clipboard","writeText","JSON","stringify","actionGlobalCopyState","tooltip","parse","readText","actionGlobalPasteState","sendInspectorTree","sendInspectorState","actionGlobalSaveState","accept","Promise","resolve","reject","onchange","files","file","item","text","oncancel","actionGlobalOpenStateFile","nodeActions","nodeId","_s","get","$reset","on","inspectComponent","payload","ctx","proxy","componentInstance","_pStores","piniaStores","values","forEach","instanceData","editable","_isOptionsAPI","$state","_getters","length","getters","getInspectorTree","inspectorId","stores","concat","from","rootNodes","filter","map","$pinia","getInspectorState","inspectedStore","$store","storeNames","storeMap","storeId","getterName","_customProperties","size","customProperties","formatStoreForInspectorState","editInspectorState","path","unshift","has","set","editComponentState","startsWith","activeAction","runningActionId","patchActionForGrouping","actionNames","wrapWithProxy","storeActions","actionName","_actionId","trackedStore","Proxy","args","Reflect","retValue","apply","arguments","undefined","devtoolsPlugin","options","_p","_testing","originalHotUpdate","_hotUpdate","newStore","this","_hmrPayload","settings","logStoreChanges","defaultValue","bind","Date","$onAction","after","onError","groupId","addTimelineEvent","layerId","time","subtitle","logType","notifyComponentUpdate","deep","$subscribe","eventData","detached","flush","hotUpdate","info","$dispose","getSettings","addStoreToDevtools","noop","addSubscription","subscriptions","callback","onCleanup","removeSubscription","idx","indexOf","splice","triggerSubscriptions","slice","fallbackRunWithContext","fn","ACTION_MARKER","ACTION_NAME","mergeReactiveObjects","patchToApply","Map","Set","add","hasOwnProperty","subPatch","targetValue","skipHydrateSymbol","skipHydrateMap","WeakMap","createSetupStore","setup","hot","isOptionsStore","scope","optionsForPlugin","$subscribeOptions","isListening","isSyncListening","debuggerEvents","actionSubscriptions","initialState","hotState","activeListener","$patch","partialStateOrMutator","subscriptionMutation","myListenerId","then","newState","wrappedAction","afterCallbackList","onErrorCallbackList","ret","catch","partialStore","stopWatcher","run","stop","delete","_r","__VUE_PROD_DEVTOOLS__","setupStore","_a","runWithContext","_e","prop","effect","obj","actionValue","defineProperty","nonEnumerable","writable","configurable","enumerable","p","extender","extensions","hydrate","mapStores","reduced","useStore","_typeof","iterator","constructor","_defineProperties","props","i","descriptor","_toConsumableArray","arr","arr2","_arrayWithoutHoles","iter","_iterableToArray","TypeError","_nonIterableSpread","deepEqual","val1","val2","VisibilityState","el","vnode","instance","Constructor","_classCallCheck","observer","frozen","createObserver","protoProps","_this","destroyObserver","entry","once","throttle","_leading","throttleOptions","leading","delay","timeout","lastState","currentArgs","throttled","_len","_key","clearTimeout","_clear","oldResult","IntersectionObserver","entries","intersectingEntry","find","isIntersecting","intersectionRatio","threshold","intersection","context","$nextTick","observe","disconnect","_ref2","_vue_visibilityState","unbind","ObserveVisibility","update","_ref3","version","install","Vue","directive","GlobalVue","g","use","emits","fillColor","default","Number","_vm","_c","_self","_b","staticClass","attrs","$event","$emit","$attrs","_v","assertValidPattern","pattern","posixClasses","braceEscape","s","rangesToString","ranges","join","parseClass","glob","position","pos","charAt","negs","sawStart","uflag","escaping","negate","endPos","rangeStart","WHILE","c","cls","unip","u","neg","sranges","snegs","windowsPathsNoEscape","types","isExtglobType","startNoDot","addPatternStart","justDots","reSpecials","qmark","star","starNoEmpty","AST","parent","hasMagic","n","pop","pp","part","copyIn","parts","isStart","isEnd","pl","clone","str","ast","opt","inBrace","braceStart","braceNeg","acc","noext","ext","substring","fromGlob","toMMPattern","re","toRegExpSource","nocase","nocaseMagicOnly","toUpperCase","flags","RegExp","_src","_glob","allowDot","dot","noEmpty","src","_","start","aps","needNoTrav","needNoDot","end","repeated","bodyDotAllowed","final","_hasMagic","needUflag","consumed","magic","nocomment","Minimatch","match","starDotExtRE","starDotExtTest","f","endsWith","starDotExtTestDot","starDotExtTestNocase","starDotExtTestNocaseDot","starDotStarRE","starDotStarTest","starDotStarTestDot","dotStarRE","dotStarTest","starRE","starTest","starTestDot","qmarksRE","qmarksTestNocase","$0","qmarksTestNoExt","qmarksTestNocaseDot","qmarksTestNoExtDot","qmarksTestDot","qmarksTest","len","defaultPlatform","process","env","__MINIMATCH_TESTING_PLATFORM__","platform","sep","GLOBSTAR","b","defaults","def","orig","super","unescape","escape","makeRe","braceExpand","list","nobrace","mm","nonull","globMagic","nonegate","comment","empty","preserveMultipleSlashes","partial","globSet","globParts","isWindows","windowsNoMagicRoot","regexp","allowWindowsEscape","make","magicalBraces","debug","parseNegate","rawGlobParts","slashSplit","preprocess","__","isUNC","isDrive","ss","noglobstar","j","optimizationLevel","firstPhasePreProcess","secondPhasePreProcess","levelOneOptimize","adjascentGlobstarOptimize","gs","prev","levelTwoFileOptimize","didSomething","dd","gss","next","p2","other","splin","matched","partsMatch","emptyGSMatch","ai","bi","which","negateOffset","matchOne","fileDrive","fileUNC","patternDrive","fdi","pdi","fd","pd","fi","pi","fl","fr","pr","swallowee","hit","m","fastTest","twoStar","split","close","ex","ff","filename","matchBase","flipNegate","convertResponseHeaders","headers","output","PropertyType","getRootPath","generateRemoteUrl","client","createClient","setHeaders","token","requesttoken","onRequestTokenUpdate","getRequestToken","getComments","_ref","_options$limit","resourceType","resourceId","resourcePath","datetime","toISOString","customRequest","method","limit","offset","responseData","parseXML","isDetailed","statusText","processResponsePayload","getDirectoryFiles","multistatus","responseItems","propstat","getlastmodified","lastMod","getcontentlength","rawSize","resourcetype","getcontenttype","mimeType","getetag","etag","collection","stat","basename","lastmod","parseInt","mime","displayname","prepareFileFromProps","decodeHtmlEntities","passes","parser","DOMParser","decoded","parseFromString","documentElement","textContent","useDeletedCommentLimbo","idOrOptions","setupOptions","isSetupStore","hasContext","localState","computedGetters","createOptionsStore","defineStore","idsInLimbo","addId","removeId","index","checkForId","getLoggerBuilder","setApp","detectUser","build","required","deleted","editing","loading","computed","methods","onEdit","onEditCancel","updateLocalMessage","onEditComment","commentId","commentPath","EditComment","logger","showError","t","onDeleteWithUndo","deletedCommentLimboStore","timeOutDelete","onDelete","TOAST_UNDO_TIMEOUT","showUndo","deleteFile","DeleteComment","onNewComment","newComment","axios","post","actorDisplayName","getCurrentUser","displayName","actorId","uid","actorType","creationDateTime","toUTCString","objectType","verb","details","NewComment","localMessage","components","IconArrowRight","IconClose","IconDelete","IconEdit","NcActionButton","NcActions","NcActionSeparator","NcAvatar","NcButton","NcDateTime","NcLoadingIcon","NcRichContenteditable","mixins","RichEditorMixin","CommentMixin","inheritAttrs","editor","Boolean","autoComplete","Function","tag","expanded","submitted","isOwnComment","renderedContent","isEmptyMessage","renderContent","trim","timestamp","isLimbo","watch","beforeMount","onSubmit","$refs","$el","focus","onExpand","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","directives","rawName","expression","class","scopedSlots","_u","preventDefault","ref","userData","domProps","defineComponent","editorData","search","generateOcsUrl","params","itemType","itemId","sorter","loadState","ocs","user","genMentionsData","mentions","flat","mention","_getCurrentUser","mentionId","mentionDisplayName","source","primary","VTooltip","VueObserveVisibility","Comment","NcEmptyContent","RefreshIcon","MessageReplyTextIcon","AlertCircleOutlineIcon","elementVisibility","CommentView","done","currentResourceId","comments","cancelRequest","hasComments","isFirstLoading","onVisibilityChange","isVisible","markCommentsAsRead","date","readMarker","resetState","onScrollBottomReached","request","abort","controller","AbortController","signal","cancelableRequest","findIndex","_l","$set","_Vue","mixin","beforeCreate","$options","_provided","provideCache","v","destroyed","__webpack_nonce__","btoa","OCA","Comments","View","_options$propsData","toBeInstalled","provide","config","globalProperties","plugin","createPinia","propsData","extend","CommentsApp","balanced","maybeMatch","r","range","pre","reg","begs","beg","left","right","module","exports","substr","expand","escSlash","escOpen","escClose","escComma","escPeriod","escapeBraces","unescapeBraces","Math","random","numeric","charCodeAt","parseCommaParts","postParts","shift","embrace","isPadded","lte","y","gte","isTop","expansions","k","expansion","N","isNumericSequence","isAlphaSequence","isSequence","isOptions","x","width","max","incr","abs","pad","some","need","z","___CSS_LOADER_EXPORT___","validator","XMLParser","XMLBuilder","XMLValidator","_wrapNativeSuper","Class","_cache","Wrapper","_construct","_getPrototypeOf","create","_setPrototypeOf","Parent","construct","sham","_isNativeReflectConstruct","setPrototypeOf","__proto__","getPrototypeOf","ObjectPrototypeMutationError","_Error","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","subClass","superClass","_inherits","traverse","object","segments","_loop","currentSegment","remainingSegments","pathToHere","_ret","isLastSegment","property","currentObject","currentProperty","nextPropIsNumber","isInteger","nextPropIsArrayWildcard","err","own","hasOwn","isIn","objectInPath","pathExists","validPath","util","isString","normalizeArray","allowAboveRoot","res","splitPathRe","posix","posixSplitPath","exec","resolvedPath","resolvedAbsolute","cwd","normalize","isAbsolute","trailingSlash","segment","relative","to","fromParts","toParts","min","samePartsLength","outputParts","_makeLong","dirname","root","dir","extname","format","pathObject","isObject","base","pathString","allParts","delimiter","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","getter","__esModule","d","definition","chunkId","all","promises","l","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","setAttribute","onScriptComplete","doneFns","parentNode","removeChild","head","appendChild","toStringTag","nmd","paths","children","scriptUrl","importScripts","currentScript","tagName","baseURI","installedChunks","installedChunkData","promise","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
|