From c96274c52aa254384378099a21f2f03eaa61087a Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Thu, 8 Aug 2024 01:41:11 +0200 Subject: [PATCH 1/3] fix(systemtags): Make inline tags list fully accessible 1. The label was wrong it mentioned the first and last tag, so the information was duplicated 2. It only mentioned the first and last but not all other 3. All other tags were only added as `title` which is not accessible Signed-off-by: Ferdinand Thiessen --- .../inlineSystemTagsAction.spec.ts | 25 ++++--------- .../inlineSystemTagsAction.ts | 36 +++++++++++-------- .../src/files_views/systemtagsView.ts | 30 ++++++++++++++++ apps/systemtags/src/init.ts | 26 ++++---------- 4 files changed, 64 insertions(+), 53 deletions(-) rename apps/systemtags/src/{actions => files_actions}/inlineSystemTagsAction.spec.ts (75%) rename apps/systemtags/src/{actions => files_actions}/inlineSystemTagsAction.ts (63%) create mode 100644 apps/systemtags/src/files_views/systemtagsView.ts diff --git a/apps/systemtags/src/actions/inlineSystemTagsAction.spec.ts b/apps/systemtags/src/files_actions/inlineSystemTagsAction.spec.ts similarity index 75% rename from apps/systemtags/src/actions/inlineSystemTagsAction.spec.ts rename to apps/systemtags/src/files_actions/inlineSystemTagsAction.spec.ts index 4d7d33792adc7..61353d098d74f 100644 --- a/apps/systemtags/src/actions/inlineSystemTagsAction.spec.ts +++ b/apps/systemtags/src/files_actions/inlineSystemTagsAction.spec.ts @@ -79,10 +79,8 @@ describe('Inline system tags action render tests', () => { const result = await action.renderInline!(file, view) expect(result).toBeInstanceOf(HTMLElement) - expect(result!.outerHTML).toBe( - '', + expect(result!.outerHTML).toMatchInlineSnapshot( + '""', ) }) @@ -95,21 +93,15 @@ describe('Inline system tags action render tests', () => { permissions: Permission.ALL, attributes: { 'system-tags': { - 'system-tag': [ - 'Important', - 'Confidential', - ], + 'system-tag': ['Important', 'Confidential'], }, }, }) const result = await action.renderInline!(file, view) expect(result).toBeInstanceOf(HTMLElement) - expect(result!.outerHTML).toBe( - '', + expect(result!.outerHTML).toMatchInlineSnapshot( + '""', ) }) @@ -134,11 +126,8 @@ describe('Inline system tags action render tests', () => { const result = await action.renderInline!(file, view) expect(result).toBeInstanceOf(HTMLElement) - expect(result!.outerHTML).toBe( - '', + expect(result!.outerHTML).toMatchInlineSnapshot( + '""', ) }) }) diff --git a/apps/systemtags/src/actions/inlineSystemTagsAction.ts b/apps/systemtags/src/files_actions/inlineSystemTagsAction.ts similarity index 63% rename from apps/systemtags/src/actions/inlineSystemTagsAction.ts rename to apps/systemtags/src/files_actions/inlineSystemTagsAction.ts index 9954435dd349f..46b483129be94 100644 --- a/apps/systemtags/src/actions/inlineSystemTagsAction.ts +++ b/apps/systemtags/src/files_actions/inlineSystemTagsAction.ts @@ -2,7 +2,8 @@ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { FileAction, Node, registerDavProperty, registerFileAction } from '@nextcloud/files' +import type { Node } from '@nextcloud/files' +import { FileAction } from '@nextcloud/files' import { translate as t } from '@nextcloud/l10n' import '../css/fileEntryInlineSystemTags.scss' @@ -63,22 +64,30 @@ export const action = new FileAction({ const systemTagsElement = document.createElement('ul') systemTagsElement.classList.add('files-list__system-tags') - - if (tags.length === 1) { - systemTagsElement.setAttribute('aria-label', t('files', 'This file has the tag {tag}', { tag: tags[0] })) - } else { - const firstTags = tags.slice(0, -1).join(', ') - const lastTag = tags[tags.length - 1] - systemTagsElement.setAttribute('aria-label', t('files', 'This file has the tags {firstTags} and {lastTag}', { firstTags, lastTag })) - } + systemTagsElement.setAttribute('aria-label', t('files', 'Assigned collaborative tags')) systemTagsElement.append(renderTag(tags[0])) - - // More tags than the one we're showing - if (tags.length > 1) { + if (tags.length === 2) { + // Special case only two tags: + // the overflow fake tag would take the same space as this, so render it + systemTagsElement.append(renderTag(tags[1])) + } else if (tags.length > 1) { + // More tags than the one we're showing + // So we add a overflow element indicating there are more tags const moreTagElement = renderTag('+' + (tags.length - 1), true) moreTagElement.setAttribute('title', tags.slice(1).join(', ')) + // because the title is not accessible we hide this element for screen readers (see alternative below) + moreTagElement.setAttribute('aria-hidden', 'true') + moreTagElement.setAttribute('role', 'presentation') systemTagsElement.append(moreTagElement) + + // For accessibility the tags are listed, as the title is not accessible + // but those tags are visually hidden + for (const tag of tags.slice(1)) { + const tagElement = renderTag(tag) + tagElement.classList.add('hidden-visually') + systemTagsElement.append(tagElement) + } } return systemTagsElement @@ -86,6 +95,3 @@ export const action = new FileAction({ order: 0, }) - -registerDavProperty('nc:system-tags') -registerFileAction(action) diff --git a/apps/systemtags/src/files_views/systemtagsView.ts b/apps/systemtags/src/files_views/systemtagsView.ts new file mode 100644 index 0000000000000..9012e5e8c6b95 --- /dev/null +++ b/apps/systemtags/src/files_views/systemtagsView.ts @@ -0,0 +1,30 @@ +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { translate as t } from '@nextcloud/l10n' +import { View, getNavigation } from '@nextcloud/files' +import { getContents } from '../services/systemtags.js' + +import svgTagMultiple from '@mdi/svg/svg/tag-multiple.svg?raw' + +/** + * Register the system tags files view + */ +export function registerSystemTagsView() { + const Navigation = getNavigation() + Navigation.register(new View({ + id: 'tags', + name: t('systemtags', 'Tags'), + caption: t('systemtags', 'List of tags and their associated files and folders.'), + + emptyTitle: t('systemtags', 'No tags found'), + emptyCaption: t('systemtags', 'Tags you have created will show up here.'), + + icon: svgTagMultiple, + order: 25, + + getContents, + })) +} diff --git a/apps/systemtags/src/init.ts b/apps/systemtags/src/init.ts index 04b974e37d12f..04dd8088001f0 100644 --- a/apps/systemtags/src/init.ts +++ b/apps/systemtags/src/init.ts @@ -2,25 +2,11 @@ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -import './actions/inlineSystemTagsAction.js' +import { registerDavProperty, registerFileAction } from '@nextcloud/files' +import { action as inlineSystemTagsAction } from './files_actions/inlineSystemTagsAction.js' +import { registerSystemTagsView } from './files_views/systemtagsView.js' -import { translate as t } from '@nextcloud/l10n' -import { View, getNavigation } from '@nextcloud/files' -import TagMultipleSvg from '@mdi/svg/svg/tag-multiple.svg?raw' +registerDavProperty('nc:system-tags') +registerFileAction(inlineSystemTagsAction) -import { getContents } from './services/systemtags.js' - -const Navigation = getNavigation() -Navigation.register(new View({ - id: 'tags', - name: t('systemtags', 'Tags'), - caption: t('systemtags', 'List of tags and their associated files and folders.'), - - emptyTitle: t('systemtags', 'No tags found'), - emptyCaption: t('systemtags', 'Tags you have created will show up here.'), - - icon: TagMultipleSvg, - order: 25, - - getContents, -})) +registerSystemTagsView() From a8d3046886166471e8a340e183940acbb4d68421 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Thu, 8 Aug 2024 01:44:28 +0200 Subject: [PATCH 2/3] test: Added e2e tests for inline system tags file action Signed-off-by: Ferdinand Thiessen --- .../e2e/systemtags/files-inline-action.cy.ts | 155 ++++++++++++++++++ cypress/e2e/systemtags/files-sidebar.cy.ts | 44 +++++ 2 files changed, 199 insertions(+) create mode 100644 cypress/e2e/systemtags/files-inline-action.cy.ts create mode 100644 cypress/e2e/systemtags/files-sidebar.cy.ts diff --git a/cypress/e2e/systemtags/files-inline-action.cy.ts b/cypress/e2e/systemtags/files-inline-action.cy.ts new file mode 100644 index 0000000000000..f439a64ee7f3a --- /dev/null +++ b/cypress/e2e/systemtags/files-inline-action.cy.ts @@ -0,0 +1,155 @@ +/* eslint-disable no-unused-expressions */ +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +import type { User } from '@nextcloud/cypress' +import { randomBytes } from 'crypto' +import { closeSidebar, getRowForFile, triggerActionForFile } from '../files/FilesUtils.ts' + +describe('Systemtags: Files integration', { testIsolation: true }, () => { + let user: User + + beforeEach(() => cy.createRandomUser().then(($user) => { + user = $user + + cy.mkdir(user, '/folder') + cy.uploadContent(user, new Blob([]), 'text/plain', '/file.txt') + cy.login(user) + cy.visit('/apps/files') + })) + + it('See first assigned tag in the file list', () => { + const tag = randomBytes(8).toString('base64') + + getRowForFile('file.txt').should('be.visible') + triggerActionForFile('file.txt', 'details') + + cy.get('[data-cy-sidebar]') + .should('be.visible') + .findByRole('button', { name: 'Actions' }) + .should('be.visible') + .click() + + cy.findByRole('menuitem', { name: 'Tags' }) + .should('be.visible') + .click() + + cy.intercept('PUT', '**/remote.php/dav/systemtags-relations/files/**').as('assignTag') + cy.get('[data-cy-sidebar]') + .findByRole('combobox', { name: /collaborative tags/i }) + .should('be.visible') + .type(`${tag}{enter}`) + cy.wait('@assignTag') + closeSidebar() + + cy.reload() + + getRowForFile('file.txt') + .findByRole('list', { name: /collaborative tags/i }) + .findByRole('listitem') + .should('be.visible') + .and('contain.text', tag) + }) + + it('See two assigned tags are also shown in the file list', () => { + const tag1 = randomBytes(5).toString('base64') + const tag2 = randomBytes(5).toString('base64') + + getRowForFile('file.txt').should('be.visible') + triggerActionForFile('file.txt', 'details') + + cy.get('[data-cy-sidebar]') + .should('be.visible') + .findByRole('button', { name: 'Actions' }) + .should('be.visible') + .click() + + cy.findByRole('menuitem', { name: 'Tags' }) + .should('be.visible') + .click() + + cy.intercept('PUT', '**/remote.php/dav/systemtags-relations/files/**').as('assignTag') + cy.get('[data-cy-sidebar]').within(() => { + cy.findByRole('combobox', { name: /collaborative tags/i }) + .should('be.visible') + .type(`${tag1}{enter}`) + cy.wait('@assignTag') + cy.findByRole('combobox', { name: /collaborative tags/i }) + .should('be.visible') + .type(`${tag2}{enter}`) + cy.wait('@assignTag') + }) + + closeSidebar() + cy.reload() + + getRowForFile('file.txt') + .findByRole('list', { name: /collaborative tags/i }) + .children() + .should('have.length', 2) + .should('contain.text', tag1) + .should('contain.text', tag2) + }) + + it.only('See three assigned tags result in overflow entry', () => { + const tag1 = randomBytes(4).toString('base64') + const tag2 = randomBytes(4).toString('base64') + const tag3 = randomBytes(4).toString('base64') + + getRowForFile('file.txt').should('be.visible') + + cy.intercept('PROPFIND', '**/remote.php/dav/**').as('sidebarLoaded') + triggerActionForFile('file.txt', 'details') + cy.wait('@sidebarLoaded') + + cy.get('[data-cy-sidebar]') + .should('be.visible') + .findByRole('button', { name: 'Actions' }) + .should('be.visible') + .click() + + cy.findByRole('menuitem', { name: 'Tags' }) + .should('be.visible') + .click() + + cy.intercept('PUT', '**/remote.php/dav/systemtags-relations/files/**').as('assignTag') + cy.get('[data-cy-sidebar]').within(() => { + cy.findByRole('combobox', { name: /collaborative tags/i }) + .should('be.visible') + .type(`${tag1}{enter}`) + cy.wait('@assignTag') + + cy.findByRole('combobox', { name: /collaborative tags/i }) + .should('be.visible') + .type(`${tag2}{enter}`) + cy.wait('@assignTag') + + cy.findByRole('combobox', { name: /collaborative tags/i }) + .should('be.visible') + .type(`${tag3}{enter}`) + cy.wait('@assignTag') + }) + + closeSidebar() + cy.reload() + + getRowForFile('file.txt') + .findByRole('list', { name: /collaborative tags/i }) + .children() + .then(($children) => { + expect($children.length).to.eq(4) + expect($children.get(0)).be.visible + expect($children.get(1)).be.visible + // not visible - just for accessibility + expect($children.get(2)).not.be.visible + expect($children.get(3)).not.be.visible + // Text content + expect($children.get(1)).contain.text('+2') + // Remove the '+x' element + const elements = [$children.get(0), ...$children.get().slice(2)] + .map((el) => el.innerText.trim()) + expect(elements).to.have.members([tag1, tag2, tag3]) + }) + }) +}) diff --git a/cypress/e2e/systemtags/files-sidebar.cy.ts b/cypress/e2e/systemtags/files-sidebar.cy.ts new file mode 100644 index 0000000000000..c6e6fda50d452 --- /dev/null +++ b/cypress/e2e/systemtags/files-sidebar.cy.ts @@ -0,0 +1,44 @@ +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import type { User } from '@nextcloud/cypress' +import { randomBytes } from 'crypto' +import { getRowForFile, triggerActionForFile } from '../files/FilesUtils.ts' + +describe('Systemtags: Files sidebar integration', { testIsolation: true }, () => { + let user: User + + beforeEach(() => cy.createRandomUser().then(($user) => { + user = $user + + cy.mkdir(user, '/folder') + cy.uploadContent(user, new Blob([]), 'text/plain', '/file.txt') + cy.login(user) + })) + + it('Can assign tags using the sidebar', () => { + const tag = randomBytes(8).toString('base64') + cy.visit('/apps/files') + + getRowForFile('file.txt').should('be.visible') + triggerActionForFile('file.txt', 'details') + + cy.get('[data-cy-sidebar]') + .should('be.visible') + .findByRole('button', { name: 'Actions' }) + .should('be.visible') + .click() + + cy.findByRole('menuitem', { name: 'Tags' }) + .click() + + cy.intercept('PUT', '**/remote.php/dav/systemtags-relations/files/**').as('assignTag') + cy.get('[data-cy-sidebar]') + .findByRole('combobox', { name: /collaborative tags/i }) + .should('be.visible') + .type(`${tag}{enter}`) + cy.wait('@assignTag') + }) +}) From d21c2933e54b2bf5df0138a043e81cbec29f6dcc Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Thu, 8 Aug 2024 11:51:59 +0200 Subject: [PATCH 3/3] chore: Compile assets Signed-off-by: Ferdinand Thiessen --- dist/systemtags-init.js | 4 ++-- dist/systemtags-init.js.map | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/systemtags-init.js b/dist/systemtags-init.js index a3971287d721c..3d1e16649ceaf 100644 --- a/dist/systemtags-init.js +++ b/dist/systemtags-init.js @@ -1,2 +1,2 @@ -(()=>{var t,e={27560:(t,e,i)=>{"use strict";var n=i(35947),r=i(21777),s=i(43627),o=i(71225),a=i(63814),l=(i(36117),i(44719)),d=i(82680),u=(i(87485),i(53334)),c=i(380),p=i(65606),h=i(96763);const f=(0,n.YK)().setApp("@nextcloud/files").detectUser().build();var g=(t=>(t.DEFAULT="default",t.HIDDEN="hidden",t))(g||{}),m=(t=>(t[t.NONE=0]="NONE",t[t.CREATE=4]="CREATE",t[t.READ=1]="READ",t[t.UPDATE=2]="UPDATE",t[t.DELETE=8]="DELETE",t[t.SHARE=16]="SHARE",t[t.ALL=31]="ALL",t))(m||{});const E=["d:getcontentlength","d:getcontenttype","d:getetag","d:getlastmodified","d:creationdate","d:displayname","d:quota-available-bytes","d:resourcetype","nc:has-preview","nc:is-encrypted","nc:mount-type","oc:comments-unread","oc:favorite","oc:fileid","oc:owner-display-name","oc:owner-id","oc:permissions","oc:size"],w={d:"DAV:",nc:"http://nextcloud.org/ns",oc:"http://owncloud.org/ns",ocs:"http://open-collaboration-services.org/ns"};var N=(t=>(t.Folder="folder",t.File="file",t))(N||{});const v=function(t,e){return null!==t.match(e)},A=(t,e)=>{if(t.id&&"number"!=typeof t.id)throw new Error("Invalid id type of value");if(!t.source)throw new Error("Missing mandatory source");try{new URL(t.source)}catch(t){throw new Error("Invalid source format, source must be a valid URL")}if(!t.source.startsWith("http"))throw new Error("Invalid source format, only http(s) is supported");if(t.displayname&&"string"!=typeof t.displayname)throw new Error("Invalid displayname type");if(t.mtime&&!(t.mtime instanceof Date))throw new Error("Invalid mtime type");if(t.crtime&&!(t.crtime instanceof Date))throw new Error("Invalid crtime type");if(!t.mime||"string"!=typeof t.mime||!t.mime.match(/^[-\w.]+\/[-+\w.]+$/gi))throw new Error("Missing or invalid mandatory mime");if("size"in t&&"number"!=typeof t.size&&void 0!==t.size)throw new Error("Invalid size type");if("permissions"in t&&void 0!==t.permissions&&!("number"==typeof t.permissions&&t.permissions>=m.NONE&&t.permissions<=m.ALL))throw new Error("Invalid permissions");if(t.owner&&null!==t.owner&&"string"!=typeof t.owner)throw new Error("Invalid owner type");if(t.attributes&&"object"!=typeof t.attributes)throw new Error("Invalid attributes type");if(t.root&&"string"!=typeof t.root)throw new Error("Invalid root type");if(t.root&&!t.root.startsWith("/"))throw new Error("Root must start with a leading slash");if(t.root&&!t.source.includes(t.root))throw new Error("Root must be part of the source");if(t.root&&v(t.source,e)){const i=t.source.match(e)[0];if(!t.source.includes((0,s.join)(i,t.root)))throw new Error("The root must be relative to the service. e.g /files/emma")}if(t.status&&!Object.values(b).includes(t.status))throw new Error("Status must be a valid NodeStatus")};var b=(t=>(t.NEW="new",t.FAILED="failed",t.LOADING="loading",t.LOCKED="locked",t))(b||{});class x{_data;_attributes;_knownDavService=/(remote|public)\.php\/(web)?dav/i;readonlyAttributes=Object.entries(Object.getOwnPropertyDescriptors(x.prototype)).filter((t=>"function"==typeof t[1].get&&"__proto__"!==t[0])).map((t=>t[0]));handler={set:(t,e,i)=>!this.readonlyAttributes.includes(e)&&Reflect.set(t,e,i),deleteProperty:(t,e)=>!this.readonlyAttributes.includes(e)&&Reflect.deleteProperty(t,e),get:(t,e,i)=>this.readonlyAttributes.includes(e)?(f.warn(`Accessing "Node.attributes.${e}" is deprecated, access it directly on the Node instance.`),Reflect.get(this,e)):Reflect.get(t,e,i)};constructor(t,e){A(t,e||this._knownDavService),this._data={displayname:t.attributes?.displayname,...t,attributes:{}},this._attributes=new Proxy(this._data.attributes,this.handler),this.update(t.attributes??{}),e&&(this._knownDavService=e)}get source(){return this._data.source.replace(/\/$/i,"")}get encodedSource(){const{origin:t}=new URL(this.source);return t+(0,o.O0)(this.source.slice(t.length))}get basename(){return(0,s.basename)(this.source)}get displayname(){return this._data.displayname||this.basename}set displayname(t){this._data.displayname=t}get extension(){return(0,s.extname)(this.source)}get dirname(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),i=this.root.replace(/\/$/,"");return(0,s.dirname)(t.slice(e+i.length)||"/")}const t=new URL(this.source);return(0,s.dirname)(t.pathname)}get mime(){return this._data.mime}get mtime(){return this._data.mtime}set mtime(t){this._data.mtime=t}get crtime(){return this._data.crtime}get size(){return this._data.size}set size(t){this.updateMtime(),this._data.size=t}get attributes(){return this._attributes}get permissions(){return null!==this.owner||this.isDavRessource?void 0!==this._data.permissions?this._data.permissions:m.NONE:m.READ}set permissions(t){this.updateMtime(),this._data.permissions=t}get owner(){return this.isDavRessource?this._data.owner:null}get isDavRessource(){return v(this.source,this._knownDavService)}get root(){return this._data.root?this._data.root.replace(/^(.+)\/$/,"$1"):this.isDavRessource&&(0,s.dirname)(this.source).split(this._knownDavService).pop()||null}get path(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),i=this.root.replace(/\/$/,"");return t.slice(e+i.length)||"/"}return(this.dirname+"/"+this.basename).replace(/\/\//g,"/")}get fileid(){return this._data?.id}get status(){return this._data?.status}set status(t){this._data.status=t}move(t){A({...this._data,source:t},this._knownDavService);const e=this.basename;this._data.source=t,this.displayname===e&&this.basename!==e&&(this.displayname=this.basename),this.updateMtime()}rename(t){if(t.includes("/"))throw new Error("Invalid basename");this.move((0,s.dirname)(this.source)+"/"+t)}updateMtime(){this._data.mtime&&(this._data.mtime=new Date)}update(t){for(const[e,i]of Object.entries(t))try{void 0===i?delete this.attributes[e]:this.attributes[e]=i}catch(t){if(t instanceof TypeError)continue;throw t}}}class y extends x{get type(){return N.File}}class I extends x{constructor(t){super({...t,mime:"httpd/unix-directory"})}get type(){return N.Folder}get extension(){return null}get mime(){return"httpd/unix-directory"}}const _=(0,d.f)()?`/files/${(0,d.G)()}`:`/files/${(0,r.HW)()?.uid}`,O=function(){const t=(0,a.dC)("dav");return(0,d.f)()?t.replace("remote.php","public.php"):t}();Error;class T extends c.m{_views=[];_currentView=null;register(t){if(this._views.find((e=>e.id===t.id)))throw new Error(`View id ${t.id} is already registered`);this._views.push(t),this.dispatchTypedEvent("update",new CustomEvent("update"))}remove(t){const e=this._views.findIndex((e=>e.id===t));-1!==e&&(this._views.splice(e,1),this.dispatchTypedEvent("update",new CustomEvent("update")))}setActive(t){this._currentView=t;const e=new CustomEvent("updateActive",{detail:t});this.dispatchTypedEvent("updateActive",e)}get active(){return this._currentView}get views(){return this._views}}class R{_column;constructor(t){C(t),this._column=t}get id(){return this._column.id}get title(){return this._column.title}get render(){return this._column.render}get sort(){return this._column.sort}get summary(){return this._column.summary}}const C=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("A column id is required");if(!t.title||"string"!=typeof t.title)throw new Error("A column title is required");if(!t.render||"function"!=typeof t.render)throw new Error("A render function is required");if(t.sort&&"function"!=typeof t.sort)throw new Error("Column sortFunction must be a function");if(t.summary&&"function"!=typeof t.summary)throw new Error("Column summary must be a function");return!0};var L={},$={};!function(t){const e=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",i="["+e+"]["+e+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",n=new RegExp("^"+i+"$");t.isExist=function(t){return void 0!==t},t.isEmptyObject=function(t){return 0===Object.keys(t).length},t.merge=function(t,e,i){if(e){const n=Object.keys(e),r=n.length;for(let s=0;s5&&"xml"===n)return B("InvalidXml","XML declaration allowed only at the start of the document.",H(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function M(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){let i=1;for(e+=8;e"===t[e]&&(i--,0===i))break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e"===t[e+2]){e+=2;break}return e}L.validate=function(t,e){e=Object.assign({},P,e);const i=[];let n=!1,r=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(let o=0;o"!==t[o]&&" "!==t[o]&&"\t"!==t[o]&&"\n"!==t[o]&&"\r"!==t[o];o++)d+=t[o];if(d=d.trim(),"/"===d[d.length-1]&&(d=d.substring(0,d.length-1),o--),s=d,!S.isName(s)){let e;return e=0===d.trim().length?"Invalid space after '<'.":"Tag '"+d+"' is an invalid name.",B("InvalidTag",e,H(t,o))}const u=G(t,o);if(!1===u)return B("InvalidAttr","Attributes for '"+d+"' have open quote.",H(t,o));let c=u.value;if(o=u.index,"/"===c[c.length-1]){const i=o-c.length;c=c.substring(0,c.length-1);const r=U(c,e);if(!0!==r)return B(r.err.code,r.err.msg,H(t,i+r.err.line));n=!0}else if(l){if(!u.tagClosed)return B("InvalidTag","Closing tag '"+d+"' doesn't have proper closing.",H(t,o));if(c.trim().length>0)return B("InvalidTag","Closing tag '"+d+"' can't have attributes or invalid starting.",H(t,a));if(0===i.length)return B("InvalidTag","Closing tag '"+d+"' has not been opened.",H(t,a));{const e=i.pop();if(d!==e.tagName){let i=H(t,e.tagStartPos);return B("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+i.line+", col "+i.col+") instead of closing tag '"+d+"'.",H(t,a))}0==i.length&&(r=!0)}}else{const s=U(c,e);if(!0!==s)return B(s.err.code,s.err.msg,H(t,o-c.length+s.err.line));if(!0===r)return B("InvalidXml","Multiple possible root nodes found.",H(t,o));-1!==e.unpairedTags.indexOf(d)||i.push({tagName:d,tagStartPos:a}),n=!0}for(o++;o0)||B("InvalidXml","Invalid '"+JSON.stringify(i.map((t=>t.tagName)),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):B("InvalidXml","Start tag expected.",1)};const V='"',j="'";function G(t,e){let i="",n="",r=!1;for(;e"===t[e]&&""===n){r=!0;break}i+=t[e]}return""===n&&{value:i,index:e,tagClosed:r}}const k=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function U(t,e){const i=S.getAllMatches(t,k),n={};for(let t=0;t!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,i){return t}};W.buildOptions=function(t){return Object.assign({},Y,t)},W.defaultOptions=Y;const K=$;function Z(t,e){let i="";for(;e0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child})}},dt=function(t,e){const i={};if("O"!==t[e+3]||"C"!==t[e+4]||"T"!==t[e+5]||"Y"!==t[e+6]||"P"!==t[e+7]||"E"!==t[e+8])throw new Error("Invalid Tag instead of DOCTYPE");{e+=9;let n=1,r=!1,s=!1,o="";for(;e"===t[e]){if(s?"-"===t[e-1]&&"-"===t[e-2]&&(s=!1,n--):n--,0===n)break}else"["===t[e]?r=!0:o+=t[e];else{if(r&&Q(t,e))e+=7,[entityName,val,e]=Z(t,e+1),-1===val.indexOf("&")&&(i[nt(entityName)]={regx:RegExp(`&${entityName};`,"g"),val});else if(r&&tt(t,e))e+=8;else if(r&&et(t,e))e+=8;else if(r&&it(t,e))e+=9;else{if(!J)throw new Error("Invalid DOCTYPE");s=!0}n++,o=""}if(0!==n)throw new Error("Unclosed DOCTYPE")}return{entities:i,i:e}},ut=function(t,e={}){if(e=Object.assign({},ot,e),!t||"string"!=typeof t)return t;let i=t.trim();if(void 0!==e.skipLike&&e.skipLike.test(i))return t;if(e.hex&&rt.test(i))return Number.parseInt(i,16);{const r=st.exec(i);if(r){const s=r[1],o=r[2];let a=(n=r[3])&&-1!==n.indexOf(".")?("."===(n=n.replace(/0+$/,""))?n="0":"."===n[0]?n="0"+n:"."===n[n.length-1]&&(n=n.substr(0,n.length-1)),n):n;const l=r[4]||r[6];if(!e.leadingZeros&&o.length>0&&s&&"."!==i[2])return t;if(!e.leadingZeros&&o.length>0&&!s&&"."!==i[1])return t;{const n=Number(i),r=""+n;return-1!==r.search(/[eE]/)||l?e.eNotation?n:t:-1!==i.indexOf(".")?"0"===r&&""===a||r===a||s&&r==="-"+a?n:t:o?a===r||s+a===r?n:t:i===r||i===s+r?n:t}}return t}var n};function ct(t){const e=Object.keys(t);for(let i=0;i0)){o||(t=this.replaceEntitiesValue(t));const n=this.options.tagValueProcessor(e,t,i,r,s);return null==n?t:typeof n!=typeof t||n!==t?n:this.options.trimValues||t.trim()===t?yt(t,this.options.parseTagValue,this.options.numberParseOptions):t}}function ht(t){if(this.options.removeNSPrefix){const e=t.split(":"),i="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=i+e[1])}return t}const ft=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function gt(t,e,i){if(!this.options.ignoreAttributes&&"string"==typeof t){const i=at.getAllMatches(t,ft),n=i.length,r={};for(let t=0;t",s,"Closing Tag is not closed.");let o=t.substring(s+2,e).trim();if(this.options.removeNSPrefix){const t=o.indexOf(":");-1!==t&&(o=o.substr(t+1))}this.options.transformTagName&&(o=this.options.transformTagName(o)),i&&(n=this.saveTextToParentTag(n,i,r));const a=r.substring(r.lastIndexOf(".")+1);if(o&&-1!==this.options.unpairedTags.indexOf(o))throw new Error(`Unpaired tag can not be used as closing tag: `);let l=0;a&&-1!==this.options.unpairedTags.indexOf(a)?(l=r.lastIndexOf(".",r.lastIndexOf(".")-1),this.tagsNodeStack.pop()):l=r.lastIndexOf("."),r=r.substring(0,l),i=this.tagsNodeStack.pop(),n="",s=e}else if("?"===t[s+1]){let e=bt(t,s,!1,"?>");if(!e)throw new Error("Pi Tag is not closed.");if(n=this.saveTextToParentTag(n,i,r),this.options.ignoreDeclaration&&"?xml"===e.tagName||this.options.ignorePiTags);else{const t=new lt(e.tagName);t.add(this.options.textNodeName,""),e.tagName!==e.tagExp&&e.attrExpPresent&&(t[":@"]=this.buildAttributesMap(e.tagExp,r,e.tagName)),this.addChild(i,t,r)}s=e.closeIndex+1}else if("!--"===t.substr(s+1,3)){const e=At(t,"--\x3e",s+4,"Comment is not closed.");if(this.options.commentPropName){const o=t.substring(s+4,e-2);n=this.saveTextToParentTag(n,i,r),i.add(this.options.commentPropName,[{[this.options.textNodeName]:o}])}s=e}else if("!D"===t.substr(s+1,2)){const e=dt(t,s);this.docTypeEntities=e.entities,s=e.i}else if("!["===t.substr(s+1,2)){const e=At(t,"]]>",s,"CDATA is not closed.")-2,o=t.substring(s+9,e);n=this.saveTextToParentTag(n,i,r);let a=this.parseTextData(o,i.tagname,r,!0,!1,!0,!0);null==a&&(a=""),this.options.cdataPropName?i.add(this.options.cdataPropName,[{[this.options.textNodeName]:o}]):i.add(this.options.textNodeName,a),s=e+2}else{let o=bt(t,s,this.options.removeNSPrefix),a=o.tagName;const l=o.rawTagName;let d=o.tagExp,u=o.attrExpPresent,c=o.closeIndex;this.options.transformTagName&&(a=this.options.transformTagName(a)),i&&n&&"!xml"!==i.tagname&&(n=this.saveTextToParentTag(n,i,r,!1));const p=i;if(p&&-1!==this.options.unpairedTags.indexOf(p.tagname)&&(i=this.tagsNodeStack.pop(),r=r.substring(0,r.lastIndexOf("."))),a!==e.tagname&&(r+=r?"."+a:a),this.isItStopNode(this.options.stopNodes,r,a)){let e="";if(d.length>0&&d.lastIndexOf("/")===d.length-1)"/"===a[a.length-1]?(a=a.substr(0,a.length-1),r=r.substr(0,r.length-1),d=a):d=d.substr(0,d.length-1),s=o.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(a))s=o.closeIndex;else{const i=this.readStopNodeData(t,l,c+1);if(!i)throw new Error(`Unexpected end of ${l}`);s=i.i,e=i.tagContent}const n=new lt(a);a!==d&&u&&(n[":@"]=this.buildAttributesMap(d,r,a)),e&&(e=this.parseTextData(e,a,r,!0,u,!0,!0)),r=r.substr(0,r.lastIndexOf(".")),n.add(this.options.textNodeName,e),this.addChild(i,n,r)}else{if(d.length>0&&d.lastIndexOf("/")===d.length-1){"/"===a[a.length-1]?(a=a.substr(0,a.length-1),r=r.substr(0,r.length-1),d=a):d=d.substr(0,d.length-1),this.options.transformTagName&&(a=this.options.transformTagName(a));const t=new lt(a);a!==d&&u&&(t[":@"]=this.buildAttributesMap(d,r,a)),this.addChild(i,t,r),r=r.substr(0,r.lastIndexOf("."))}else{const t=new lt(a);this.tagsNodeStack.push(i),a!==d&&u&&(t[":@"]=this.buildAttributesMap(d,r,a)),this.addChild(i,t,r),i=t}n="",s=c}}else n+=t[s];return e.child};function Et(t,e,i){const n=this.options.updateTag(e.tagname,i,e[":@"]);!1===n||("string"==typeof n?(e.tagname=n,t.addChild(e)):t.addChild(e))}const wt=function(t){if(this.options.processEntities){for(let e in this.docTypeEntities){const i=this.docTypeEntities[e];t=t.replace(i.regx,i.val)}for(let e in this.lastEntities){const i=this.lastEntities[e];t=t.replace(i.regex,i.val)}if(this.options.htmlEntities)for(let e in this.htmlEntities){const i=this.htmlEntities[e];t=t.replace(i.regex,i.val)}t=t.replace(this.ampEntity.regex,this.ampEntity.val)}return t};function Nt(t,e,i,n){return t&&(void 0===n&&(n=0===Object.keys(e.child).length),void 0!==(t=this.parseTextData(t,e.tagname,i,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,n))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function vt(t,e,i){const n="*."+i;for(const i in t){const r=t[i];if(n===r||e===r)return!0}return!1}function At(t,e,i,n){const r=t.indexOf(e,i);if(-1===r)throw new Error(n);return r+e.length-1}function bt(t,e,i,n=">"){const r=function(t,e,i=">"){let n,r="";for(let s=e;s",i,`${e} is not closed`);if(t.substring(i+2,s).trim()===e&&(r--,0===r))return{tagContent:t.substring(n,i),i:s};i=s}else if("?"===t[i+1])i=At(t,"?>",i+1,"StopNode is not closed.");else if("!--"===t.substr(i+1,3))i=At(t,"--\x3e",i+3,"StopNode is not closed.");else if("!["===t.substr(i+1,2))i=At(t,"]]>",i,"StopNode is not closed.")-2;else{const n=bt(t,i,">");n&&((n&&n.tagName)===e&&"/"!==n.tagExp[n.tagExp.length-1]&&r++,i=n.closeIndex)}}function yt(t,e,i){if(e&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&ut(t,i)}return at.isExist(t)?t:""}var It={};function _t(t,e,i){let n;const r={};for(let s=0;s0&&(r[e.textNodeName]=n):void 0!==n&&(r[e.textNodeName]=n),r}function Ot(t){const e=Object.keys(t);for(let t=0;t"},lt:{regex:/&(lt|#60|#x3C);/g,val:"<"},quot:{regex:/&(quot|#34|#x22);/g,val:'"'}},this.ampEntity={regex:/&(amp|#38|#x26);/g,val:"&"},this.htmlEntities={space:{regex:/&(nbsp|#160);/g,val:" "},cent:{regex:/&(cent|#162);/g,val:"¢"},pound:{regex:/&(pound|#163);/g,val:"£"},yen:{regex:/&(yen|#165);/g,val:"¥"},euro:{regex:/&(euro|#8364);/g,val:"€"},copyright:{regex:/&(copy|#169);/g,val:"©"},reg:{regex:/&(reg|#174);/g,val:"®"},inr:{regex:/&(inr|#8377);/g,val:"₹"},num_dec:{regex:/&#([0-9]{1,7});/g,val:(t,e)=>String.fromCharCode(Number.parseInt(e,10))},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:(t,e)=>String.fromCharCode(Number.parseInt(e,16))}},this.addExternalEntities=ct,this.parseXml=mt,this.parseTextData=pt,this.resolveNameSpace=ht,this.buildAttributesMap=gt,this.isItStopNode=vt,this.replaceEntitiesValue=wt,this.readStopNodeData=xt,this.saveTextToParentTag=Nt,this.addChild=Et}},{prettify:$t}=It,St=L;function Pt(t,e,i,n){let r="",s=!1;for(let o=0;o`,s=!1;continue}if(l===e.commentPropName){r+=n+`\x3c!--${a[l][0][e.textNodeName]}--\x3e`,s=!0;continue}if("?"===l[0]){const t=Ft(a[":@"],e),i="?xml"===l?"":n;let o=a[l][0][e.textNodeName];o=0!==o.length?" "+o:"",r+=i+`<${l}${o}${t}?>`,s=!0;continue}let u=n;""!==u&&(u+=e.indentBy);const c=n+`<${l}${Ft(a[":@"],e)}`,p=Pt(a[l],e,d,u);-1!==e.unpairedTags.indexOf(l)?e.suppressUnpairedNode?r+=c+">":r+=c+"/>":p&&0!==p.length||!e.suppressEmptyNode?p&&p.endsWith(">")?r+=c+`>${p}${n}`:(r+=c+">",p&&""!==n&&(p.includes("/>")||p.includes("`):r+=c+"/>",s=!0}return r}function Dt(t){const e=Object.keys(t);for(let i=0;i0&&e.processEntities)for(let i=0;i0&&(i="\n"),Pt(t,e,"",i)},Gt={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function kt(t){this.options=Object.assign({},Gt,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=Bt),this.processTextOrObjNode=Ut,this.options.format?(this.indentate=Xt,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function Ut(t,e,i){const n=this.j2x(t,i+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,n.attrStr,i):this.buildObjectNode(n.val,e,n.attrStr,i)}function Xt(t){return this.options.indentBy.repeat(t)}function Bt(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}kt.prototype.build=function(t){return this.options.preserveOrder?jt(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0).val)},kt.prototype.j2x=function(t,e){let i="",n="";for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r))if(void 0===t[r])this.isAttribute(r)&&(n+="");else if(null===t[r])this.isAttribute(r)?n+="":"?"===r[0]?n+=this.indentate(e)+"<"+r+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+r+"/"+this.tagEndChar;else if(t[r]instanceof Date)n+=this.buildTextValNode(t[r],r,"",e);else if("object"!=typeof t[r]){const s=this.isAttribute(r);if(s)i+=this.buildAttrPairStr(s,""+t[r]);else if(r===this.options.textNodeName){let e=this.options.tagValueProcessor(r,""+t[r]);n+=this.replaceEntitiesValue(e)}else n+=this.buildTextValNode(t[r],r,"",e)}else if(Array.isArray(t[r])){const i=t[r].length;let s="";for(let o=0;o"+t+r}},kt.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(n)+"<"+e+i+"?"+this.tagEndChar;{let r=this.options.tagValueProcessor(e,t);return r=this.replaceEntitiesValue(r),""===r?this.indentate(n)+"<"+e+i+this.closeTag(e)+this.tagEndChar:this.indentate(n)+"<"+e+i+">"+r+"0&&this.options.processEntities)for(let e=0;eh.error("SEMVER",...t):()=>{},qt={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER||9007199254740991,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},Wt={exports:{}};!function(t,e){const{MAX_SAFE_COMPONENT_LENGTH:i,MAX_SAFE_BUILD_LENGTH:n,MAX_LENGTH:r}=qt,s=Ht,o=(e=t.exports={}).re=[],a=e.safeRe=[],l=e.src=[],d=e.t={};let u=0;const c="[a-zA-Z0-9-]",p=[["\\s",1],["\\d",r],[c,n]],h=(t,e,i)=>{const n=(t=>{for(const[e,i]of p)t=t.split(`${e}*`).join(`${e}{0,${i}}`).split(`${e}+`).join(`${e}{1,${i}}`);return t})(e),r=u++;s(t,r,e),d[t]=r,l[r]=e,o[r]=new RegExp(e,i?"g":void 0),a[r]=new RegExp(n,i?"g":void 0)};h("NUMERICIDENTIFIER","0|[1-9]\\d*"),h("NUMERICIDENTIFIERLOOSE","\\d+"),h("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${c}*`),h("MAINVERSION",`(${l[d.NUMERICIDENTIFIER]})\\.(${l[d.NUMERICIDENTIFIER]})\\.(${l[d.NUMERICIDENTIFIER]})`),h("MAINVERSIONLOOSE",`(${l[d.NUMERICIDENTIFIERLOOSE]})\\.(${l[d.NUMERICIDENTIFIERLOOSE]})\\.(${l[d.NUMERICIDENTIFIERLOOSE]})`),h("PRERELEASEIDENTIFIER",`(?:${l[d.NUMERICIDENTIFIER]}|${l[d.NONNUMERICIDENTIFIER]})`),h("PRERELEASEIDENTIFIERLOOSE",`(?:${l[d.NUMERICIDENTIFIERLOOSE]}|${l[d.NONNUMERICIDENTIFIER]})`),h("PRERELEASE",`(?:-(${l[d.PRERELEASEIDENTIFIER]}(?:\\.${l[d.PRERELEASEIDENTIFIER]})*))`),h("PRERELEASELOOSE",`(?:-?(${l[d.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${l[d.PRERELEASEIDENTIFIERLOOSE]})*))`),h("BUILDIDENTIFIER",`${c}+`),h("BUILD",`(?:\\+(${l[d.BUILDIDENTIFIER]}(?:\\.${l[d.BUILDIDENTIFIER]})*))`),h("FULLPLAIN",`v?${l[d.MAINVERSION]}${l[d.PRERELEASE]}?${l[d.BUILD]}?`),h("FULL",`^${l[d.FULLPLAIN]}$`),h("LOOSEPLAIN",`[v=\\s]*${l[d.MAINVERSIONLOOSE]}${l[d.PRERELEASELOOSE]}?${l[d.BUILD]}?`),h("LOOSE",`^${l[d.LOOSEPLAIN]}$`),h("GTLT","((?:<|>)?=?)"),h("XRANGEIDENTIFIERLOOSE",`${l[d.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),h("XRANGEIDENTIFIER",`${l[d.NUMERICIDENTIFIER]}|x|X|\\*`),h("XRANGEPLAIN",`[v=\\s]*(${l[d.XRANGEIDENTIFIER]})(?:\\.(${l[d.XRANGEIDENTIFIER]})(?:\\.(${l[d.XRANGEIDENTIFIER]})(?:${l[d.PRERELEASE]})?${l[d.BUILD]}?)?)?`),h("XRANGEPLAINLOOSE",`[v=\\s]*(${l[d.XRANGEIDENTIFIERLOOSE]})(?:\\.(${l[d.XRANGEIDENTIFIERLOOSE]})(?:\\.(${l[d.XRANGEIDENTIFIERLOOSE]})(?:${l[d.PRERELEASELOOSE]})?${l[d.BUILD]}?)?)?`),h("XRANGE",`^${l[d.GTLT]}\\s*${l[d.XRANGEPLAIN]}$`),h("XRANGELOOSE",`^${l[d.GTLT]}\\s*${l[d.XRANGEPLAINLOOSE]}$`),h("COERCEPLAIN",`(^|[^\\d])(\\d{1,${i}})(?:\\.(\\d{1,${i}}))?(?:\\.(\\d{1,${i}}))?`),h("COERCE",`${l[d.COERCEPLAIN]}(?:$|[^\\d])`),h("COERCEFULL",l[d.COERCEPLAIN]+`(?:${l[d.PRERELEASE]})?(?:${l[d.BUILD]})?(?:$|[^\\d])`),h("COERCERTL",l[d.COERCE],!0),h("COERCERTLFULL",l[d.COERCEFULL],!0),h("LONETILDE","(?:~>?)"),h("TILDETRIM",`(\\s*)${l[d.LONETILDE]}\\s+`,!0),e.tildeTrimReplace="$1~",h("TILDE",`^${l[d.LONETILDE]}${l[d.XRANGEPLAIN]}$`),h("TILDELOOSE",`^${l[d.LONETILDE]}${l[d.XRANGEPLAINLOOSE]}$`),h("LONECARET","(?:\\^)"),h("CARETTRIM",`(\\s*)${l[d.LONECARET]}\\s+`,!0),e.caretTrimReplace="$1^",h("CARET",`^${l[d.LONECARET]}${l[d.XRANGEPLAIN]}$`),h("CARETLOOSE",`^${l[d.LONECARET]}${l[d.XRANGEPLAINLOOSE]}$`),h("COMPARATORLOOSE",`^${l[d.GTLT]}\\s*(${l[d.LOOSEPLAIN]})$|^$`),h("COMPARATOR",`^${l[d.GTLT]}\\s*(${l[d.FULLPLAIN]})$|^$`),h("COMPARATORTRIM",`(\\s*)${l[d.GTLT]}\\s*(${l[d.LOOSEPLAIN]}|${l[d.XRANGEPLAIN]})`,!0),e.comparatorTrimReplace="$1$2$3",h("HYPHENRANGE",`^\\s*(${l[d.XRANGEPLAIN]})\\s+-\\s+(${l[d.XRANGEPLAIN]})\\s*$`),h("HYPHENRANGELOOSE",`^\\s*(${l[d.XRANGEPLAINLOOSE]})\\s+-\\s+(${l[d.XRANGEPLAINLOOSE]})\\s*$`),h("STAR","(<|>)?=?\\s*\\*"),h("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),h("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}(Wt,Wt.exports);var Yt=Wt.exports;Object.freeze({loose:!0}),Object.freeze({});const Kt=/^[0-9]+$/,Zt=(t,e)=>{const i=Kt.test(t),n=Kt.test(e);return i&&n&&(t=+t,e=+e),t===e?0:i&&!n?-1:n&&!i?1:tZt(e,t)};const{MAX_LENGTH:Qt,MAX_SAFE_INTEGER:te}=qt,{safeRe:ee,t:ie}=Yt,{compareIdentifiers:ne}=Jt;c.m;var re=i(85072),se=i.n(re),oe=i(97825),ae=i.n(oe),le=i(77659),de=i.n(le),ue=i(55056),ce=i.n(ue),pe=i(10540),he=i.n(pe),fe=i(41113),ge=i.n(fe),me=i(73911),Ee={};Ee.styleTagTransform=ge(),Ee.setAttributes=ce(),Ee.insert=de().bind(null,"head"),Ee.domAPI=ae(),Ee.insertStyleElement=he(),se()(me.A,Ee),me.A&&me.A.locals&&me.A.locals;const we=function(t){const e=t.attributes?.["system-tags"]?.["system-tag"];return void 0===e?[]:[e].flat()},Ne=function(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=document.createElement("li");return i.classList.add("files-list__system-tag"),i.textContent=t,e&&i.classList.add("files-list__system-tag--more"),i},ve=new class{_action;constructor(t){this.validateAction(t),this._action=t}get id(){return this._action.id}get displayName(){return this._action.displayName}get title(){return this._action.title}get iconSvgInline(){return this._action.iconSvgInline}get enabled(){return this._action.enabled}get exec(){return this._action.exec}get execBatch(){return this._action.execBatch}get order(){return this._action.order}get parent(){return this._action.parent}get default(){return this._action.default}get inline(){return this._action.inline}get renderInline(){return this._action.renderInline}validateAction(t){if(!t.id||"string"!=typeof t.id)throw new Error("Invalid id");if(!t.displayName||"function"!=typeof t.displayName)throw new Error("Invalid displayName function");if("title"in t&&"function"!=typeof t.title)throw new Error("Invalid title function");if(!t.iconSvgInline||"function"!=typeof t.iconSvgInline)throw new Error("Invalid iconSvgInline function");if(!t.exec||"function"!=typeof t.exec)throw new Error("Invalid exec function");if("enabled"in t&&"function"!=typeof t.enabled)throw new Error("Invalid enabled function");if("execBatch"in t&&"function"!=typeof t.execBatch)throw new Error("Invalid execBatch function");if("order"in t&&"number"!=typeof t.order)throw new Error("Invalid order");if("parent"in t&&"string"!=typeof t.parent)throw new Error("Invalid parent");if(t.default&&!Object.values(g).includes(t.default))throw new Error("Invalid default");if("inline"in t&&"function"!=typeof t.inline)throw new Error("Invalid inline function");if("renderInline"in t&&"function"!=typeof t.renderInline)throw new Error("Invalid renderInline function")}}({id:"system-tags",displayName:()=>"",iconSvgInline:()=>"",enabled(t){if(1!==t.length)return!1;const e=t[0];return 0!==we(e).length},exec:async()=>null,async renderInline(t){const e=we(t);if(0===e.length)return null;const i=document.createElement("ul");if(i.classList.add("files-list__system-tags"),1===e.length)i.setAttribute("aria-label",(0,u.Tl)("files","This file has the tag {tag}",{tag:e[0]}));else{const t=e.slice(0,-1).join(", "),n=e[e.length-1];i.setAttribute("aria-label",(0,u.Tl)("files","This file has the tags {firstTags} and {lastTag}",{firstTags:t,lastTag:n}))}if(i.append(Ne(e[0])),e.length>1){const t=Ne("+"+(e.length-1),!0);t.setAttribute("title",e.slice(1).join(", ")),i.append(t)}return i},order:0});!function(t,e={nc:"http://nextcloud.org/ns"}){void 0===window._nc_dav_properties&&(window._nc_dav_properties=[...E],window._nc_dav_namespaces={...w});const i={...window._nc_dav_namespaces,...e};window._nc_dav_properties.find((e=>e===t))?f.warn(`${t} already registered`,{prop:t}):t.startsWith("<")||2!==t.split(":").length?f.error(`${t} is not valid. See example: 'oc:fileid'`,{prop:t}):i[t.split(":")[0]]?(window._nc_dav_properties.push(t),window._nc_dav_namespaces=i):f.error(`${t} namespace unknown`,{prop:t,namespaces:i})}("nc:system-tags"),function(t){void 0===window._nc_fileactions&&(window._nc_fileactions=[],f.debug("FileActions initialized")),window._nc_fileactions.find((e=>e.id===t.id))?f.error(`FileAction ${t.id} already registered`,{action:t}):window._nc_fileactions.push(t)}(ve),i(65043);var Ae=i(60669);const be=(0,a.dC)("dav"),xe=(0,Ae.UU)(be),ye=t=>{xe.setHeaders({"X-Requested-With":"XMLHttpRequest",requesttoken:t??""})};(0,r.zo)(ye),ye((0,r.do)());var Ie=i(71654);const _e=(0,n.YK)().setApp("systemtags").detectUser().build(),Oe="/systemtags",Te=function(t=O,e={}){const i=(0,l.UU)(t,{headers:e});function n(t){i.setHeaders({...e,"X-Requested-With":"XMLHttpRequest",requesttoken:t??""})}return(0,r.zo)(n),n((0,r.do)()),(0,l.Gu)().patch("fetch",((t,e)=>{const i=e.headers;return i?.method&&(e.method=i.method,delete i.method),fetch(t,e)})),i}(),Re=t=>function(t,e=_,i=O){let n=(0,r.HW)()?.uid;if((0,d.f)())n=n??"anonymous";else if(!n)throw new Error("No user id found");const s=t.props,o=function(t=""){let e=m.NONE;return t?((t.includes("C")||t.includes("K"))&&(e|=m.CREATE),t.includes("G")&&(e|=m.READ),(t.includes("W")||t.includes("N")||t.includes("V"))&&(e|=m.UPDATE),t.includes("D")&&(e|=m.DELETE),t.includes("R")&&(e|=m.SHARE),e):e}(s?.permissions),a=String(s?.["owner-id"]||n),l=s.fileid||0,u={id:l,source:`${i}${t.filename}`,mtime:new Date(Date.parse(t.lastmod)),mime:t.mime||"application/octet-stream",displayname:void 0!==s.displayname?String(s.displayname):void 0,size:s?.size||Number.parseInt(s.getcontentlength||"0"),status:l<0?b.FAILED:void 0,permissions:o,owner:a,root:e,attributes:{...t,...s,hasPreview:s?.["has-preview"]}};return delete u.attributes?.props,"file"===t.type?new y(u):new I(u)}(t),Ce=t=>`\n`xmlns:${t}="${window._nc_dav_namespaces?.[t]}"`)).join(" ")}>\n\t\n\t\t${void 0===window._nc_dav_properties&&(window._nc_dav_properties=[...E]),window._nc_dav_properties.map((t=>`<${t} />`)).join(" ")}\n\t\n\t\n\t\t${t}\n\t\n`,Le=function(t){return new I({id:t.id,source:`${O}${Oe}/${t.id}`,owner:String((0,r.HW)()?.uid??"anonymous"),root:Oe,displayname:t.displayName,permissions:m.READ,attributes:{...t,"is-tag":!0}})};(void 0===window._nc_navigation&&(window._nc_navigation=new T,f.debug("Navigation service initialized")),window._nc_navigation).register(new class{_view;constructor(t){(function(t){if(!t.id||"string"!=typeof t.id)throw new Error("View id is required and must be a string");if(!t.name||"string"!=typeof t.name)throw new Error("View name is required and must be a string");if(t.columns&&t.columns.length>0&&(!t.caption||"string"!=typeof t.caption))throw new Error("View caption is required for top-level views and must be a string");if(!t.getContents||"function"!=typeof t.getContents)throw new Error("View getContents is required and must be a function");if(!t.icon||"string"!=typeof t.icon||!function(t){if("string"!=typeof t)throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);if(0===(t=t.trim()).length)return!1;if(!0!==zt.XMLValidator.validate(t))return!1;let e;const i=new zt.XMLParser;try{e=i.parse(t)}catch{return!1}return!!e&&!!Object.keys(e).some((t=>"svg"===t.toLowerCase()))}(t.icon))throw new Error("View icon is required and must be a valid svg string");if(!("order"in t)||"number"!=typeof t.order)throw new Error("View order is required and must be a number");if(t.columns&&t.columns.forEach((t=>{if(!(t instanceof R))throw new Error("View columns must be an array of Column. Invalid column found")})),t.emptyView&&"function"!=typeof t.emptyView)throw new Error("View emptyView must be a function");if(t.parent&&"string"!=typeof t.parent)throw new Error("View parent must be a string");if("sticky"in t&&"boolean"!=typeof t.sticky)throw new Error("View sticky must be a boolean");if("expanded"in t&&"boolean"!=typeof t.expanded)throw new Error("View expanded must be a boolean");if(t.defaultSortKey&&"string"!=typeof t.defaultSortKey)throw new Error("View defaultSortKey must be a string")})(t),this._view=t}get id(){return this._view.id}get name(){return this._view.name}get caption(){return this._view.caption}get emptyTitle(){return this._view.emptyTitle}get emptyCaption(){return this._view.emptyCaption}get getContents(){return this._view.getContents}get icon(){return this._view.icon}set icon(t){this._view.icon=t}get order(){return this._view.order}set order(t){this._view.order=t}get params(){return this._view.params}set params(t){this._view.params=t}get columns(){return this._view.columns}get emptyView(){return this._view.emptyView}get parent(){return this._view.parent}get sticky(){return this._view.sticky}get expanded(){return this._view.expanded}set expanded(t){this._view.expanded=t}get defaultSortKey(){return this._view.defaultSortKey}}({id:"tags",name:(0,u.Tl)("systemtags","Tags"),caption:(0,u.Tl)("systemtags","List of tags and their associated files and folders."),emptyTitle:(0,u.Tl)("systemtags","No tags found"),emptyCaption:(0,u.Tl)("systemtags","Tags you have created will show up here."),icon:'',order:25,getContents:async function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/";const e=(await(async()=>{try{const{data:t}=await xe.getDirectoryContents("/systemtags",{data:'\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n',details:!0,glob:"/systemtags/*"});return(t=>t.map((t=>{let{props:e}=t;return Object.fromEntries(Object.entries(e).map((t=>{let[e,i]=t;return[(0,Ie.A)(e),"displayName"===(0,Ie.A)(e)?String(i):i]})))})))(t)}catch(t){throw _e.error((0,u.Tl)("systemtags","Failed to load tags"),{error:t}),new Error((0,u.Tl)("systemtags","Failed to load tags"))}})()).filter((t=>t.userVisible));if("/"===t)return{folder:new I({id:0,source:`${O}${Oe}`,owner:(0,r.HW)()?.uid,root:Oe,permissions:m.NONE}),contents:e.map(Le)};const i=parseInt(t.split("/",2)[1]),n=e.find((t=>t.id===i));if(!n)throw new Error("Tag not found");return{folder:Le(n),contents:(await Te.getDirectoryContents(_,{details:!0,data:Ce(i),headers:{method:"REPORT"}})).data.map(Re)}}}))},73911:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var n=i(71354),r=i.n(n),s=i(76314),o=i.n(s)()(r());o.push([t.id,".files-list__system-tags{--min-size: 32px;display:none;justify-content:center;align-items:center;min-width:calc(var(--min-size)*2);max-width:300px}.files-list__system-tag{padding:5px 10px;border:1px solid;border-radius:var(--border-radius-pill);border-color:var(--color-border);color:var(--color-text-maxcontrast);height:var(--min-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:22px;text-align:center}.files-list__system-tag--more{overflow:visible;text-overflow:initial}.files-list__system-tag+.files-list__system-tag{margin-left:5px}@media(min-width: 512px){.files-list__system-tags{display:flex}}","",{version:3,sources:["webpack://./apps/systemtags/src/css/fileEntryInlineSystemTags.scss"],names:[],mappings:"AAKA,yBACC,gBAAA,CACA,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,iCAAA,CACA,eAAA,CAGD,wBACC,gBAAA,CACA,gBAAA,CACA,uCAAA,CACA,gCAAA,CACA,mCAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,gBAAA,CACA,iBAAA,CAEA,8BACC,gBAAA,CACA,qBAAA,CAID,gDACC,eAAA,CAIF,yBACC,yBACC,YAAA,CAAA",sourcesContent:["/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n.files-list__system-tags {\n\t--min-size: 32px;\n\tdisplay: none;\n\tjustify-content: center;\n\talign-items: center;\n\tmin-width: calc(var(--min-size) * 2);\n\tmax-width: 300px;\n}\n\n.files-list__system-tag {\n\tpadding: 5px 10px;\n\tborder: 1px solid;\n\tborder-radius: var(--border-radius-pill);\n\tborder-color: var(--color-border);\n\tcolor: var(--color-text-maxcontrast);\n\theight: var(--min-size);\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tline-height: 22px; // min-size - 2 * 5px padding\n\ttext-align: center;\n\n\t&--more {\n\t\toverflow: visible;\n\t\ttext-overflow: initial;\n\t}\n\n\t// Proper spacing if multiple shown\n\t& + .files-list__system-tag {\n\t\tmargin-left: 5px;\n\t}\n}\n\n@media (min-width: 512px) {\n\t.files-list__system-tags {\n\t\tdisplay: flex;\n\t}\n}\n"],sourceRoot:""}]);const a=o},42634:()=>{},63779:()=>{},77199:()=>{},59169:()=>{},86833:()=>{}},i={};function n(t){var r=i[t];if(void 0!==r)return r.exports;var s=i[t]={id:t,loaded:!1,exports:{}};return e[t].call(s.exports,s,s.exports,n),s.loaded=!0,s.exports}n.m=e,t=[],n.O=(e,i,r,s)=>{if(!i){var o=1/0;for(u=0;u=s)&&Object.keys(n.O).every((t=>n.O[t](i[l])))?i.splice(l--,1):(a=!1,s0&&t[u-1][2]>s;u--)t[u]=t[u-1];t[u]=[i,r,s]},n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.e=()=>Promise.resolve(),n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),n.j=2766,(()=>{n.b=document.baseURI||self.location.href;var t={2766:0};n.O.j=e=>0===t[e];var e=(e,i)=>{var r,s,o=i[0],a=i[1],l=i[2],d=0;if(o.some((e=>0!==t[e]))){for(r in a)n.o(a,r)&&(n.m[r]=a[r]);if(l)var u=l(n)}for(e&&e(i);dn(27560)));r=n.O(r)})(); -//# sourceMappingURL=systemtags-init.js.map?v=ce5796d56650dfd98d06 \ No newline at end of file +(()=>{var t,e={39607:(t,e,i)=>{"use strict";var n=i(35947),r=i(21777),s=i(43627),o=i(71225),a=i(63814),l=(i(36117),i(44719)),d=i(82680),u=(i(87485),i(53334)),c=i(380),p=i(65606),h=i(96763);const f=(0,n.YK)().setApp("@nextcloud/files").detectUser().build();var g=(t=>(t.DEFAULT="default",t.HIDDEN="hidden",t))(g||{}),m=(t=>(t[t.NONE=0]="NONE",t[t.CREATE=4]="CREATE",t[t.READ=1]="READ",t[t.UPDATE=2]="UPDATE",t[t.DELETE=8]="DELETE",t[t.SHARE=16]="SHARE",t[t.ALL=31]="ALL",t))(m||{});const E=["d:getcontentlength","d:getcontenttype","d:getetag","d:getlastmodified","d:creationdate","d:displayname","d:quota-available-bytes","d:resourcetype","nc:has-preview","nc:is-encrypted","nc:mount-type","oc:comments-unread","oc:favorite","oc:fileid","oc:owner-display-name","oc:owner-id","oc:permissions","oc:size"],w={d:"DAV:",nc:"http://nextcloud.org/ns",oc:"http://owncloud.org/ns",ocs:"http://open-collaboration-services.org/ns"};var N=(t=>(t.Folder="folder",t.File="file",t))(N||{});const v=function(t,e){return null!==t.match(e)},A=(t,e)=>{if(t.id&&"number"!=typeof t.id)throw new Error("Invalid id type of value");if(!t.source)throw new Error("Missing mandatory source");try{new URL(t.source)}catch(t){throw new Error("Invalid source format, source must be a valid URL")}if(!t.source.startsWith("http"))throw new Error("Invalid source format, only http(s) is supported");if(t.displayname&&"string"!=typeof t.displayname)throw new Error("Invalid displayname type");if(t.mtime&&!(t.mtime instanceof Date))throw new Error("Invalid mtime type");if(t.crtime&&!(t.crtime instanceof Date))throw new Error("Invalid crtime type");if(!t.mime||"string"!=typeof t.mime||!t.mime.match(/^[-\w.]+\/[-+\w.]+$/gi))throw new Error("Missing or invalid mandatory mime");if("size"in t&&"number"!=typeof t.size&&void 0!==t.size)throw new Error("Invalid size type");if("permissions"in t&&void 0!==t.permissions&&!("number"==typeof t.permissions&&t.permissions>=m.NONE&&t.permissions<=m.ALL))throw new Error("Invalid permissions");if(t.owner&&null!==t.owner&&"string"!=typeof t.owner)throw new Error("Invalid owner type");if(t.attributes&&"object"!=typeof t.attributes)throw new Error("Invalid attributes type");if(t.root&&"string"!=typeof t.root)throw new Error("Invalid root type");if(t.root&&!t.root.startsWith("/"))throw new Error("Root must start with a leading slash");if(t.root&&!t.source.includes(t.root))throw new Error("Root must be part of the source");if(t.root&&v(t.source,e)){const i=t.source.match(e)[0];if(!t.source.includes((0,s.join)(i,t.root)))throw new Error("The root must be relative to the service. e.g /files/emma")}if(t.status&&!Object.values(b).includes(t.status))throw new Error("Status must be a valid NodeStatus")};var b=(t=>(t.NEW="new",t.FAILED="failed",t.LOADING="loading",t.LOCKED="locked",t))(b||{});class x{_data;_attributes;_knownDavService=/(remote|public)\.php\/(web)?dav/i;readonlyAttributes=Object.entries(Object.getOwnPropertyDescriptors(x.prototype)).filter((t=>"function"==typeof t[1].get&&"__proto__"!==t[0])).map((t=>t[0]));handler={set:(t,e,i)=>!this.readonlyAttributes.includes(e)&&Reflect.set(t,e,i),deleteProperty:(t,e)=>!this.readonlyAttributes.includes(e)&&Reflect.deleteProperty(t,e),get:(t,e,i)=>this.readonlyAttributes.includes(e)?(f.warn(`Accessing "Node.attributes.${e}" is deprecated, access it directly on the Node instance.`),Reflect.get(this,e)):Reflect.get(t,e,i)};constructor(t,e){A(t,e||this._knownDavService),this._data={displayname:t.attributes?.displayname,...t,attributes:{}},this._attributes=new Proxy(this._data.attributes,this.handler),this.update(t.attributes??{}),e&&(this._knownDavService=e)}get source(){return this._data.source.replace(/\/$/i,"")}get encodedSource(){const{origin:t}=new URL(this.source);return t+(0,o.O0)(this.source.slice(t.length))}get basename(){return(0,s.basename)(this.source)}get displayname(){return this._data.displayname||this.basename}set displayname(t){this._data.displayname=t}get extension(){return(0,s.extname)(this.source)}get dirname(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),i=this.root.replace(/\/$/,"");return(0,s.dirname)(t.slice(e+i.length)||"/")}const t=new URL(this.source);return(0,s.dirname)(t.pathname)}get mime(){return this._data.mime}get mtime(){return this._data.mtime}set mtime(t){this._data.mtime=t}get crtime(){return this._data.crtime}get size(){return this._data.size}set size(t){this.updateMtime(),this._data.size=t}get attributes(){return this._attributes}get permissions(){return null!==this.owner||this.isDavRessource?void 0!==this._data.permissions?this._data.permissions:m.NONE:m.READ}set permissions(t){this.updateMtime(),this._data.permissions=t}get owner(){return this.isDavRessource?this._data.owner:null}get isDavRessource(){return v(this.source,this._knownDavService)}get root(){return this._data.root?this._data.root.replace(/^(.+)\/$/,"$1"):this.isDavRessource&&(0,s.dirname)(this.source).split(this._knownDavService).pop()||null}get path(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),i=this.root.replace(/\/$/,"");return t.slice(e+i.length)||"/"}return(this.dirname+"/"+this.basename).replace(/\/\//g,"/")}get fileid(){return this._data?.id}get status(){return this._data?.status}set status(t){this._data.status=t}move(t){A({...this._data,source:t},this._knownDavService);const e=this.basename;this._data.source=t,this.displayname===e&&this.basename!==e&&(this.displayname=this.basename),this.updateMtime()}rename(t){if(t.includes("/"))throw new Error("Invalid basename");this.move((0,s.dirname)(this.source)+"/"+t)}updateMtime(){this._data.mtime&&(this._data.mtime=new Date)}update(t){for(const[e,i]of Object.entries(t))try{void 0===i?delete this.attributes[e]:this.attributes[e]=i}catch(t){if(t instanceof TypeError)continue;throw t}}}class y extends x{get type(){return N.File}}class I extends x{constructor(t){super({...t,mime:"httpd/unix-directory"})}get type(){return N.Folder}get extension(){return null}get mime(){return"httpd/unix-directory"}}const _=(0,d.f)()?`/files/${(0,d.G)()}`:`/files/${(0,r.HW)()?.uid}`,O=function(){const t=(0,a.dC)("dav");return(0,d.f)()?t.replace("remote.php","public.php"):t}();Error;class T extends c.m{_views=[];_currentView=null;register(t){if(this._views.find((e=>e.id===t.id)))throw new Error(`View id ${t.id} is already registered`);this._views.push(t),this.dispatchTypedEvent("update",new CustomEvent("update"))}remove(t){const e=this._views.findIndex((e=>e.id===t));-1!==e&&(this._views.splice(e,1),this.dispatchTypedEvent("update",new CustomEvent("update")))}setActive(t){this._currentView=t;const e=new CustomEvent("updateActive",{detail:t});this.dispatchTypedEvent("updateActive",e)}get active(){return this._currentView}get views(){return this._views}}class R{_column;constructor(t){C(t),this._column=t}get id(){return this._column.id}get title(){return this._column.title}get render(){return this._column.render}get sort(){return this._column.sort}get summary(){return this._column.summary}}const C=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("A column id is required");if(!t.title||"string"!=typeof t.title)throw new Error("A column title is required");if(!t.render||"function"!=typeof t.render)throw new Error("A render function is required");if(t.sort&&"function"!=typeof t.sort)throw new Error("Column sortFunction must be a function");if(t.summary&&"function"!=typeof t.summary)throw new Error("Column summary must be a function");return!0};var L={},$={};!function(t){const e=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",i="["+e+"]["+e+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",n=new RegExp("^"+i+"$");t.isExist=function(t){return void 0!==t},t.isEmptyObject=function(t){return 0===Object.keys(t).length},t.merge=function(t,e,i){if(e){const n=Object.keys(e),r=n.length;for(let s=0;s5&&"xml"===n)return B("InvalidXml","XML declaration allowed only at the start of the document.",H(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function M(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){let i=1;for(e+=8;e"===t[e]&&(i--,0===i))break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e"===t[e+2]){e+=2;break}return e}L.validate=function(t,e){e=Object.assign({},P,e);const i=[];let n=!1,r=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(let o=0;o"!==t[o]&&" "!==t[o]&&"\t"!==t[o]&&"\n"!==t[o]&&"\r"!==t[o];o++)d+=t[o];if(d=d.trim(),"/"===d[d.length-1]&&(d=d.substring(0,d.length-1),o--),s=d,!S.isName(s)){let e;return e=0===d.trim().length?"Invalid space after '<'.":"Tag '"+d+"' is an invalid name.",B("InvalidTag",e,H(t,o))}const u=G(t,o);if(!1===u)return B("InvalidAttr","Attributes for '"+d+"' have open quote.",H(t,o));let c=u.value;if(o=u.index,"/"===c[c.length-1]){const i=o-c.length;c=c.substring(0,c.length-1);const r=U(c,e);if(!0!==r)return B(r.err.code,r.err.msg,H(t,i+r.err.line));n=!0}else if(l){if(!u.tagClosed)return B("InvalidTag","Closing tag '"+d+"' doesn't have proper closing.",H(t,o));if(c.trim().length>0)return B("InvalidTag","Closing tag '"+d+"' can't have attributes or invalid starting.",H(t,a));if(0===i.length)return B("InvalidTag","Closing tag '"+d+"' has not been opened.",H(t,a));{const e=i.pop();if(d!==e.tagName){let i=H(t,e.tagStartPos);return B("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+i.line+", col "+i.col+") instead of closing tag '"+d+"'.",H(t,a))}0==i.length&&(r=!0)}}else{const s=U(c,e);if(!0!==s)return B(s.err.code,s.err.msg,H(t,o-c.length+s.err.line));if(!0===r)return B("InvalidXml","Multiple possible root nodes found.",H(t,o));-1!==e.unpairedTags.indexOf(d)||i.push({tagName:d,tagStartPos:a}),n=!0}for(o++;o0)||B("InvalidXml","Invalid '"+JSON.stringify(i.map((t=>t.tagName)),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):B("InvalidXml","Start tag expected.",1)};const V='"',j="'";function G(t,e){let i="",n="",r=!1;for(;e"===t[e]&&""===n){r=!0;break}i+=t[e]}return""===n&&{value:i,index:e,tagClosed:r}}const k=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function U(t,e){const i=S.getAllMatches(t,k),n={};for(let t=0;t!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,i){return t}};W.buildOptions=function(t){return Object.assign({},Y,t)},W.defaultOptions=Y;const K=$;function Z(t,e){let i="";for(;e0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child})}},dt=function(t,e){const i={};if("O"!==t[e+3]||"C"!==t[e+4]||"T"!==t[e+5]||"Y"!==t[e+6]||"P"!==t[e+7]||"E"!==t[e+8])throw new Error("Invalid Tag instead of DOCTYPE");{e+=9;let n=1,r=!1,s=!1,o="";for(;e"===t[e]){if(s?"-"===t[e-1]&&"-"===t[e-2]&&(s=!1,n--):n--,0===n)break}else"["===t[e]?r=!0:o+=t[e];else{if(r&&Q(t,e))e+=7,[entityName,val,e]=Z(t,e+1),-1===val.indexOf("&")&&(i[nt(entityName)]={regx:RegExp(`&${entityName};`,"g"),val});else if(r&&tt(t,e))e+=8;else if(r&&et(t,e))e+=8;else if(r&&it(t,e))e+=9;else{if(!J)throw new Error("Invalid DOCTYPE");s=!0}n++,o=""}if(0!==n)throw new Error("Unclosed DOCTYPE")}return{entities:i,i:e}},ut=function(t,e={}){if(e=Object.assign({},ot,e),!t||"string"!=typeof t)return t;let i=t.trim();if(void 0!==e.skipLike&&e.skipLike.test(i))return t;if(e.hex&&rt.test(i))return Number.parseInt(i,16);{const r=st.exec(i);if(r){const s=r[1],o=r[2];let a=(n=r[3])&&-1!==n.indexOf(".")?("."===(n=n.replace(/0+$/,""))?n="0":"."===n[0]?n="0"+n:"."===n[n.length-1]&&(n=n.substr(0,n.length-1)),n):n;const l=r[4]||r[6];if(!e.leadingZeros&&o.length>0&&s&&"."!==i[2])return t;if(!e.leadingZeros&&o.length>0&&!s&&"."!==i[1])return t;{const n=Number(i),r=""+n;return-1!==r.search(/[eE]/)||l?e.eNotation?n:t:-1!==i.indexOf(".")?"0"===r&&""===a||r===a||s&&r==="-"+a?n:t:o?a===r||s+a===r?n:t:i===r||i===s+r?n:t}}return t}var n};function ct(t){const e=Object.keys(t);for(let i=0;i0)){o||(t=this.replaceEntitiesValue(t));const n=this.options.tagValueProcessor(e,t,i,r,s);return null==n?t:typeof n!=typeof t||n!==t?n:this.options.trimValues||t.trim()===t?yt(t,this.options.parseTagValue,this.options.numberParseOptions):t}}function ht(t){if(this.options.removeNSPrefix){const e=t.split(":"),i="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=i+e[1])}return t}const ft=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function gt(t,e,i){if(!this.options.ignoreAttributes&&"string"==typeof t){const i=at.getAllMatches(t,ft),n=i.length,r={};for(let t=0;t",s,"Closing Tag is not closed.");let o=t.substring(s+2,e).trim();if(this.options.removeNSPrefix){const t=o.indexOf(":");-1!==t&&(o=o.substr(t+1))}this.options.transformTagName&&(o=this.options.transformTagName(o)),i&&(n=this.saveTextToParentTag(n,i,r));const a=r.substring(r.lastIndexOf(".")+1);if(o&&-1!==this.options.unpairedTags.indexOf(o))throw new Error(`Unpaired tag can not be used as closing tag: `);let l=0;a&&-1!==this.options.unpairedTags.indexOf(a)?(l=r.lastIndexOf(".",r.lastIndexOf(".")-1),this.tagsNodeStack.pop()):l=r.lastIndexOf("."),r=r.substring(0,l),i=this.tagsNodeStack.pop(),n="",s=e}else if("?"===t[s+1]){let e=bt(t,s,!1,"?>");if(!e)throw new Error("Pi Tag is not closed.");if(n=this.saveTextToParentTag(n,i,r),this.options.ignoreDeclaration&&"?xml"===e.tagName||this.options.ignorePiTags);else{const t=new lt(e.tagName);t.add(this.options.textNodeName,""),e.tagName!==e.tagExp&&e.attrExpPresent&&(t[":@"]=this.buildAttributesMap(e.tagExp,r,e.tagName)),this.addChild(i,t,r)}s=e.closeIndex+1}else if("!--"===t.substr(s+1,3)){const e=At(t,"--\x3e",s+4,"Comment is not closed.");if(this.options.commentPropName){const o=t.substring(s+4,e-2);n=this.saveTextToParentTag(n,i,r),i.add(this.options.commentPropName,[{[this.options.textNodeName]:o}])}s=e}else if("!D"===t.substr(s+1,2)){const e=dt(t,s);this.docTypeEntities=e.entities,s=e.i}else if("!["===t.substr(s+1,2)){const e=At(t,"]]>",s,"CDATA is not closed.")-2,o=t.substring(s+9,e);n=this.saveTextToParentTag(n,i,r);let a=this.parseTextData(o,i.tagname,r,!0,!1,!0,!0);null==a&&(a=""),this.options.cdataPropName?i.add(this.options.cdataPropName,[{[this.options.textNodeName]:o}]):i.add(this.options.textNodeName,a),s=e+2}else{let o=bt(t,s,this.options.removeNSPrefix),a=o.tagName;const l=o.rawTagName;let d=o.tagExp,u=o.attrExpPresent,c=o.closeIndex;this.options.transformTagName&&(a=this.options.transformTagName(a)),i&&n&&"!xml"!==i.tagname&&(n=this.saveTextToParentTag(n,i,r,!1));const p=i;if(p&&-1!==this.options.unpairedTags.indexOf(p.tagname)&&(i=this.tagsNodeStack.pop(),r=r.substring(0,r.lastIndexOf("."))),a!==e.tagname&&(r+=r?"."+a:a),this.isItStopNode(this.options.stopNodes,r,a)){let e="";if(d.length>0&&d.lastIndexOf("/")===d.length-1)"/"===a[a.length-1]?(a=a.substr(0,a.length-1),r=r.substr(0,r.length-1),d=a):d=d.substr(0,d.length-1),s=o.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(a))s=o.closeIndex;else{const i=this.readStopNodeData(t,l,c+1);if(!i)throw new Error(`Unexpected end of ${l}`);s=i.i,e=i.tagContent}const n=new lt(a);a!==d&&u&&(n[":@"]=this.buildAttributesMap(d,r,a)),e&&(e=this.parseTextData(e,a,r,!0,u,!0,!0)),r=r.substr(0,r.lastIndexOf(".")),n.add(this.options.textNodeName,e),this.addChild(i,n,r)}else{if(d.length>0&&d.lastIndexOf("/")===d.length-1){"/"===a[a.length-1]?(a=a.substr(0,a.length-1),r=r.substr(0,r.length-1),d=a):d=d.substr(0,d.length-1),this.options.transformTagName&&(a=this.options.transformTagName(a));const t=new lt(a);a!==d&&u&&(t[":@"]=this.buildAttributesMap(d,r,a)),this.addChild(i,t,r),r=r.substr(0,r.lastIndexOf("."))}else{const t=new lt(a);this.tagsNodeStack.push(i),a!==d&&u&&(t[":@"]=this.buildAttributesMap(d,r,a)),this.addChild(i,t,r),i=t}n="",s=c}}else n+=t[s];return e.child};function Et(t,e,i){const n=this.options.updateTag(e.tagname,i,e[":@"]);!1===n||("string"==typeof n?(e.tagname=n,t.addChild(e)):t.addChild(e))}const wt=function(t){if(this.options.processEntities){for(let e in this.docTypeEntities){const i=this.docTypeEntities[e];t=t.replace(i.regx,i.val)}for(let e in this.lastEntities){const i=this.lastEntities[e];t=t.replace(i.regex,i.val)}if(this.options.htmlEntities)for(let e in this.htmlEntities){const i=this.htmlEntities[e];t=t.replace(i.regex,i.val)}t=t.replace(this.ampEntity.regex,this.ampEntity.val)}return t};function Nt(t,e,i,n){return t&&(void 0===n&&(n=0===Object.keys(e.child).length),void 0!==(t=this.parseTextData(t,e.tagname,i,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,n))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function vt(t,e,i){const n="*."+i;for(const i in t){const r=t[i];if(n===r||e===r)return!0}return!1}function At(t,e,i,n){const r=t.indexOf(e,i);if(-1===r)throw new Error(n);return r+e.length-1}function bt(t,e,i,n=">"){const r=function(t,e,i=">"){let n,r="";for(let s=e;s",i,`${e} is not closed`);if(t.substring(i+2,s).trim()===e&&(r--,0===r))return{tagContent:t.substring(n,i),i:s};i=s}else if("?"===t[i+1])i=At(t,"?>",i+1,"StopNode is not closed.");else if("!--"===t.substr(i+1,3))i=At(t,"--\x3e",i+3,"StopNode is not closed.");else if("!["===t.substr(i+1,2))i=At(t,"]]>",i,"StopNode is not closed.")-2;else{const n=bt(t,i,">");n&&((n&&n.tagName)===e&&"/"!==n.tagExp[n.tagExp.length-1]&&r++,i=n.closeIndex)}}function yt(t,e,i){if(e&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&ut(t,i)}return at.isExist(t)?t:""}var It={};function _t(t,e,i){let n;const r={};for(let s=0;s0&&(r[e.textNodeName]=n):void 0!==n&&(r[e.textNodeName]=n),r}function Ot(t){const e=Object.keys(t);for(let t=0;t"},lt:{regex:/&(lt|#60|#x3C);/g,val:"<"},quot:{regex:/&(quot|#34|#x22);/g,val:'"'}},this.ampEntity={regex:/&(amp|#38|#x26);/g,val:"&"},this.htmlEntities={space:{regex:/&(nbsp|#160);/g,val:" "},cent:{regex:/&(cent|#162);/g,val:"¢"},pound:{regex:/&(pound|#163);/g,val:"£"},yen:{regex:/&(yen|#165);/g,val:"¥"},euro:{regex:/&(euro|#8364);/g,val:"€"},copyright:{regex:/&(copy|#169);/g,val:"©"},reg:{regex:/&(reg|#174);/g,val:"®"},inr:{regex:/&(inr|#8377);/g,val:"₹"},num_dec:{regex:/&#([0-9]{1,7});/g,val:(t,e)=>String.fromCharCode(Number.parseInt(e,10))},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:(t,e)=>String.fromCharCode(Number.parseInt(e,16))}},this.addExternalEntities=ct,this.parseXml=mt,this.parseTextData=pt,this.resolveNameSpace=ht,this.buildAttributesMap=gt,this.isItStopNode=vt,this.replaceEntitiesValue=wt,this.readStopNodeData=xt,this.saveTextToParentTag=Nt,this.addChild=Et}},{prettify:$t}=It,St=L;function Pt(t,e,i,n){let r="",s=!1;for(let o=0;o`,s=!1;continue}if(l===e.commentPropName){r+=n+`\x3c!--${a[l][0][e.textNodeName]}--\x3e`,s=!0;continue}if("?"===l[0]){const t=Ft(a[":@"],e),i="?xml"===l?"":n;let o=a[l][0][e.textNodeName];o=0!==o.length?" "+o:"",r+=i+`<${l}${o}${t}?>`,s=!0;continue}let u=n;""!==u&&(u+=e.indentBy);const c=n+`<${l}${Ft(a[":@"],e)}`,p=Pt(a[l],e,d,u);-1!==e.unpairedTags.indexOf(l)?e.suppressUnpairedNode?r+=c+">":r+=c+"/>":p&&0!==p.length||!e.suppressEmptyNode?p&&p.endsWith(">")?r+=c+`>${p}${n}`:(r+=c+">",p&&""!==n&&(p.includes("/>")||p.includes("`):r+=c+"/>",s=!0}return r}function Dt(t){const e=Object.keys(t);for(let i=0;i0&&e.processEntities)for(let i=0;i0&&(i="\n"),Pt(t,e,"",i)},Gt={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function kt(t){this.options=Object.assign({},Gt,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=Bt),this.processTextOrObjNode=Ut,this.options.format?(this.indentate=Xt,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function Ut(t,e,i){const n=this.j2x(t,i+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,n.attrStr,i):this.buildObjectNode(n.val,e,n.attrStr,i)}function Xt(t){return this.options.indentBy.repeat(t)}function Bt(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}kt.prototype.build=function(t){return this.options.preserveOrder?jt(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0).val)},kt.prototype.j2x=function(t,e){let i="",n="";for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r))if(void 0===t[r])this.isAttribute(r)&&(n+="");else if(null===t[r])this.isAttribute(r)?n+="":"?"===r[0]?n+=this.indentate(e)+"<"+r+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+r+"/"+this.tagEndChar;else if(t[r]instanceof Date)n+=this.buildTextValNode(t[r],r,"",e);else if("object"!=typeof t[r]){const s=this.isAttribute(r);if(s)i+=this.buildAttrPairStr(s,""+t[r]);else if(r===this.options.textNodeName){let e=this.options.tagValueProcessor(r,""+t[r]);n+=this.replaceEntitiesValue(e)}else n+=this.buildTextValNode(t[r],r,"",e)}else if(Array.isArray(t[r])){const i=t[r].length;let s="";for(let o=0;o"+t+r}},kt.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(n)+"<"+e+i+"?"+this.tagEndChar;{let r=this.options.tagValueProcessor(e,t);return r=this.replaceEntitiesValue(r),""===r?this.indentate(n)+"<"+e+i+this.closeTag(e)+this.tagEndChar:this.indentate(n)+"<"+e+i+">"+r+"0&&this.options.processEntities)for(let e=0;e0&&(!t.caption||"string"!=typeof t.caption))throw new Error("View caption is required for top-level views and must be a string");if(!t.getContents||"function"!=typeof t.getContents)throw new Error("View getContents is required and must be a function");if(!t.icon||"string"!=typeof t.icon||!function(t){if("string"!=typeof t)throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);if(0===(t=t.trim()).length)return!1;if(!0!==zt.XMLValidator.validate(t))return!1;let e;const i=new zt.XMLParser;try{e=i.parse(t)}catch{return!1}return!!e&&!!Object.keys(e).some((t=>"svg"===t.toLowerCase()))}(t.icon))throw new Error("View icon is required and must be a valid svg string");if(!("order"in t)||"number"!=typeof t.order)throw new Error("View order is required and must be a number");if(t.columns&&t.columns.forEach((t=>{if(!(t instanceof R))throw new Error("View columns must be an array of Column. Invalid column found")})),t.emptyView&&"function"!=typeof t.emptyView)throw new Error("View emptyView must be a function");if(t.parent&&"string"!=typeof t.parent)throw new Error("View parent must be a string");if("sticky"in t&&"boolean"!=typeof t.sticky)throw new Error("View sticky must be a boolean");if("expanded"in t&&"boolean"!=typeof t.expanded)throw new Error("View expanded must be a boolean");if(t.defaultSortKey&&"string"!=typeof t.defaultSortKey)throw new Error("View defaultSortKey must be a string");return!0};var qt="object"==typeof p&&p.env&&p.env.NODE_DEBUG&&/\bsemver\b/i.test(p.env.NODE_DEBUG)?(...t)=>h.error("SEMVER",...t):()=>{},Wt={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER||9007199254740991,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},Yt={exports:{}};!function(t,e){const{MAX_SAFE_COMPONENT_LENGTH:i,MAX_SAFE_BUILD_LENGTH:n,MAX_LENGTH:r}=Wt,s=qt,o=(e=t.exports={}).re=[],a=e.safeRe=[],l=e.src=[],d=e.t={};let u=0;const c="[a-zA-Z0-9-]",p=[["\\s",1],["\\d",r],[c,n]],h=(t,e,i)=>{const n=(t=>{for(const[e,i]of p)t=t.split(`${e}*`).join(`${e}{0,${i}}`).split(`${e}+`).join(`${e}{1,${i}}`);return t})(e),r=u++;s(t,r,e),d[t]=r,l[r]=e,o[r]=new RegExp(e,i?"g":void 0),a[r]=new RegExp(n,i?"g":void 0)};h("NUMERICIDENTIFIER","0|[1-9]\\d*"),h("NUMERICIDENTIFIERLOOSE","\\d+"),h("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${c}*`),h("MAINVERSION",`(${l[d.NUMERICIDENTIFIER]})\\.(${l[d.NUMERICIDENTIFIER]})\\.(${l[d.NUMERICIDENTIFIER]})`),h("MAINVERSIONLOOSE",`(${l[d.NUMERICIDENTIFIERLOOSE]})\\.(${l[d.NUMERICIDENTIFIERLOOSE]})\\.(${l[d.NUMERICIDENTIFIERLOOSE]})`),h("PRERELEASEIDENTIFIER",`(?:${l[d.NUMERICIDENTIFIER]}|${l[d.NONNUMERICIDENTIFIER]})`),h("PRERELEASEIDENTIFIERLOOSE",`(?:${l[d.NUMERICIDENTIFIERLOOSE]}|${l[d.NONNUMERICIDENTIFIER]})`),h("PRERELEASE",`(?:-(${l[d.PRERELEASEIDENTIFIER]}(?:\\.${l[d.PRERELEASEIDENTIFIER]})*))`),h("PRERELEASELOOSE",`(?:-?(${l[d.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${l[d.PRERELEASEIDENTIFIERLOOSE]})*))`),h("BUILDIDENTIFIER",`${c}+`),h("BUILD",`(?:\\+(${l[d.BUILDIDENTIFIER]}(?:\\.${l[d.BUILDIDENTIFIER]})*))`),h("FULLPLAIN",`v?${l[d.MAINVERSION]}${l[d.PRERELEASE]}?${l[d.BUILD]}?`),h("FULL",`^${l[d.FULLPLAIN]}$`),h("LOOSEPLAIN",`[v=\\s]*${l[d.MAINVERSIONLOOSE]}${l[d.PRERELEASELOOSE]}?${l[d.BUILD]}?`),h("LOOSE",`^${l[d.LOOSEPLAIN]}$`),h("GTLT","((?:<|>)?=?)"),h("XRANGEIDENTIFIERLOOSE",`${l[d.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),h("XRANGEIDENTIFIER",`${l[d.NUMERICIDENTIFIER]}|x|X|\\*`),h("XRANGEPLAIN",`[v=\\s]*(${l[d.XRANGEIDENTIFIER]})(?:\\.(${l[d.XRANGEIDENTIFIER]})(?:\\.(${l[d.XRANGEIDENTIFIER]})(?:${l[d.PRERELEASE]})?${l[d.BUILD]}?)?)?`),h("XRANGEPLAINLOOSE",`[v=\\s]*(${l[d.XRANGEIDENTIFIERLOOSE]})(?:\\.(${l[d.XRANGEIDENTIFIERLOOSE]})(?:\\.(${l[d.XRANGEIDENTIFIERLOOSE]})(?:${l[d.PRERELEASELOOSE]})?${l[d.BUILD]}?)?)?`),h("XRANGE",`^${l[d.GTLT]}\\s*${l[d.XRANGEPLAIN]}$`),h("XRANGELOOSE",`^${l[d.GTLT]}\\s*${l[d.XRANGEPLAINLOOSE]}$`),h("COERCEPLAIN",`(^|[^\\d])(\\d{1,${i}})(?:\\.(\\d{1,${i}}))?(?:\\.(\\d{1,${i}}))?`),h("COERCE",`${l[d.COERCEPLAIN]}(?:$|[^\\d])`),h("COERCEFULL",l[d.COERCEPLAIN]+`(?:${l[d.PRERELEASE]})?(?:${l[d.BUILD]})?(?:$|[^\\d])`),h("COERCERTL",l[d.COERCE],!0),h("COERCERTLFULL",l[d.COERCEFULL],!0),h("LONETILDE","(?:~>?)"),h("TILDETRIM",`(\\s*)${l[d.LONETILDE]}\\s+`,!0),e.tildeTrimReplace="$1~",h("TILDE",`^${l[d.LONETILDE]}${l[d.XRANGEPLAIN]}$`),h("TILDELOOSE",`^${l[d.LONETILDE]}${l[d.XRANGEPLAINLOOSE]}$`),h("LONECARET","(?:\\^)"),h("CARETTRIM",`(\\s*)${l[d.LONECARET]}\\s+`,!0),e.caretTrimReplace="$1^",h("CARET",`^${l[d.LONECARET]}${l[d.XRANGEPLAIN]}$`),h("CARETLOOSE",`^${l[d.LONECARET]}${l[d.XRANGEPLAINLOOSE]}$`),h("COMPARATORLOOSE",`^${l[d.GTLT]}\\s*(${l[d.LOOSEPLAIN]})$|^$`),h("COMPARATOR",`^${l[d.GTLT]}\\s*(${l[d.FULLPLAIN]})$|^$`),h("COMPARATORTRIM",`(\\s*)${l[d.GTLT]}\\s*(${l[d.LOOSEPLAIN]}|${l[d.XRANGEPLAIN]})`,!0),e.comparatorTrimReplace="$1$2$3",h("HYPHENRANGE",`^\\s*(${l[d.XRANGEPLAIN]})\\s+-\\s+(${l[d.XRANGEPLAIN]})\\s*$`),h("HYPHENRANGELOOSE",`^\\s*(${l[d.XRANGEPLAINLOOSE]})\\s+-\\s+(${l[d.XRANGEPLAINLOOSE]})\\s*$`),h("STAR","(<|>)?=?\\s*\\*"),h("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),h("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}(Yt,Yt.exports);var Kt=Yt.exports;Object.freeze({loose:!0}),Object.freeze({});const Zt=/^[0-9]+$/,Jt=(t,e)=>{const i=Zt.test(t),n=Zt.test(e);return i&&n&&(t=+t,e=+e),t===e?0:i&&!n?-1:n&&!i?1:tJt(e,t)};const{MAX_LENGTH:te,MAX_SAFE_INTEGER:ee}=Wt,{safeRe:ie,t:ne}=Kt,{compareIdentifiers:re}=Qt;c.m;var se=i(85072),oe=i.n(se),ae=i(97825),le=i.n(ae),de=i(77659),ue=i.n(de),ce=i(55056),pe=i.n(ce),he=i(10540),fe=i.n(he),ge=i(41113),me=i.n(ge),Ee=i(73911),we={};we.styleTagTransform=me(),we.setAttributes=pe(),we.insert=ue().bind(null,"head"),we.domAPI=le(),we.insertStyleElement=fe(),oe()(Ee.A,we),Ee.A&&Ee.A.locals&&Ee.A.locals;const Ne=function(t){const e=t.attributes?.["system-tags"]?.["system-tag"];return void 0===e?[]:[e].flat()},ve=function(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=document.createElement("li");return i.classList.add("files-list__system-tag"),i.textContent=t,e&&i.classList.add("files-list__system-tag--more"),i},Ae=new class{_action;constructor(t){this.validateAction(t),this._action=t}get id(){return this._action.id}get displayName(){return this._action.displayName}get title(){return this._action.title}get iconSvgInline(){return this._action.iconSvgInline}get enabled(){return this._action.enabled}get exec(){return this._action.exec}get execBatch(){return this._action.execBatch}get order(){return this._action.order}get parent(){return this._action.parent}get default(){return this._action.default}get inline(){return this._action.inline}get renderInline(){return this._action.renderInline}validateAction(t){if(!t.id||"string"!=typeof t.id)throw new Error("Invalid id");if(!t.displayName||"function"!=typeof t.displayName)throw new Error("Invalid displayName function");if("title"in t&&"function"!=typeof t.title)throw new Error("Invalid title function");if(!t.iconSvgInline||"function"!=typeof t.iconSvgInline)throw new Error("Invalid iconSvgInline function");if(!t.exec||"function"!=typeof t.exec)throw new Error("Invalid exec function");if("enabled"in t&&"function"!=typeof t.enabled)throw new Error("Invalid enabled function");if("execBatch"in t&&"function"!=typeof t.execBatch)throw new Error("Invalid execBatch function");if("order"in t&&"number"!=typeof t.order)throw new Error("Invalid order");if("parent"in t&&"string"!=typeof t.parent)throw new Error("Invalid parent");if(t.default&&!Object.values(g).includes(t.default))throw new Error("Invalid default");if("inline"in t&&"function"!=typeof t.inline)throw new Error("Invalid inline function");if("renderInline"in t&&"function"!=typeof t.renderInline)throw new Error("Invalid renderInline function")}}({id:"system-tags",displayName:()=>"",iconSvgInline:()=>"",enabled(t){if(1!==t.length)return!1;const e=t[0];return 0!==Ne(e).length},exec:async()=>null,async renderInline(t){const e=Ne(t);if(0===e.length)return null;const i=document.createElement("ul");if(i.classList.add("files-list__system-tags"),i.setAttribute("aria-label",(0,u.Tl)("files","Assigned collaborative tags")),i.append(ve(e[0])),2===e.length)i.append(ve(e[1]));else if(e.length>1){const t=ve("+"+(e.length-1),!0);t.setAttribute("title",e.slice(1).join(", ")),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),i.append(t);for(const t of e.slice(1)){const e=ve(t);e.classList.add("hidden-visually"),i.append(e)}}return i},order:0});i(65043);var be=i(60669);const xe=(0,a.dC)("dav"),ye=(0,be.UU)(xe),Ie=t=>{ye.setHeaders({"X-Requested-With":"XMLHttpRequest",requesttoken:t??""})};(0,r.zo)(Ie),Ie((0,r.do)());var _e=i(71654);const Oe=(0,n.YK)().setApp("systemtags").detectUser().build(),Te="/systemtags",Re=function(t=O,e={}){const i=(0,l.UU)(t,{headers:e});function n(t){i.setHeaders({...e,"X-Requested-With":"XMLHttpRequest",requesttoken:t??""})}return(0,r.zo)(n),n((0,r.do)()),(0,l.Gu)().patch("fetch",((t,e)=>{const i=e.headers;return i?.method&&(e.method=i.method,delete i.method),fetch(t,e)})),i}(),Ce=t=>function(t,e=_,i=O){let n=(0,r.HW)()?.uid;if((0,d.f)())n=n??"anonymous";else if(!n)throw new Error("No user id found");const s=t.props,o=function(t=""){let e=m.NONE;return t?((t.includes("C")||t.includes("K"))&&(e|=m.CREATE),t.includes("G")&&(e|=m.READ),(t.includes("W")||t.includes("N")||t.includes("V"))&&(e|=m.UPDATE),t.includes("D")&&(e|=m.DELETE),t.includes("R")&&(e|=m.SHARE),e):e}(s?.permissions),a=String(s?.["owner-id"]||n),l=s.fileid||0,u={id:l,source:`${i}${t.filename}`,mtime:new Date(Date.parse(t.lastmod)),mime:t.mime||"application/octet-stream",displayname:void 0!==s.displayname?String(s.displayname):void 0,size:s?.size||Number.parseInt(s.getcontentlength||"0"),status:l<0?b.FAILED:void 0,permissions:o,owner:a,root:e,attributes:{...t,...s,hasPreview:s?.["has-preview"]}};return delete u.attributes?.props,"file"===t.type?new y(u):new I(u)}(t),Le=t=>`\n`xmlns:${t}="${window._nc_dav_namespaces?.[t]}"`)).join(" ")}>\n\t\n\t\t${void 0===window._nc_dav_properties&&(window._nc_dav_properties=[...E]),window._nc_dav_properties.map((t=>`<${t} />`)).join(" ")}\n\t\n\t\n\t\t${t}\n\t\n`,$e=function(t){return new I({id:t.id,source:`${O}${Te}/${t.id}`,owner:String((0,r.HW)()?.uid??"anonymous"),root:Te,displayname:t.displayName,permissions:m.READ,attributes:{...t,"is-tag":!0}})};!function(t,e={nc:"http://nextcloud.org/ns"}){void 0===window._nc_dav_properties&&(window._nc_dav_properties=[...E],window._nc_dav_namespaces={...w});const i={...window._nc_dav_namespaces,...e};window._nc_dav_properties.find((e=>e===t))?f.warn(`${t} already registered`,{prop:t}):t.startsWith("<")||2!==t.split(":").length?f.error(`${t} is not valid. See example: 'oc:fileid'`,{prop:t}):i[t.split(":")[0]]?(window._nc_dav_properties.push(t),window._nc_dav_namespaces=i):f.error(`${t} namespace unknown`,{prop:t,namespaces:i})}("nc:system-tags"),function(t){void 0===window._nc_fileactions&&(window._nc_fileactions=[],f.debug("FileActions initialized")),window._nc_fileactions.find((e=>e.id===t.id))?f.error(`FileAction ${t.id} already registered`,{action:t}):window._nc_fileactions.push(t)}(Ae),(void 0===window._nc_navigation&&(window._nc_navigation=new T,f.debug("Navigation service initialized")),window._nc_navigation).register(new class{_view;constructor(t){Ht(t),this._view=t}get id(){return this._view.id}get name(){return this._view.name}get caption(){return this._view.caption}get emptyTitle(){return this._view.emptyTitle}get emptyCaption(){return this._view.emptyCaption}get getContents(){return this._view.getContents}get icon(){return this._view.icon}set icon(t){this._view.icon=t}get order(){return this._view.order}set order(t){this._view.order=t}get params(){return this._view.params}set params(t){this._view.params=t}get columns(){return this._view.columns}get emptyView(){return this._view.emptyView}get parent(){return this._view.parent}get sticky(){return this._view.sticky}get expanded(){return this._view.expanded}set expanded(t){this._view.expanded=t}get defaultSortKey(){return this._view.defaultSortKey}}({id:"tags",name:(0,u.Tl)("systemtags","Tags"),caption:(0,u.Tl)("systemtags","List of tags and their associated files and folders."),emptyTitle:(0,u.Tl)("systemtags","No tags found"),emptyCaption:(0,u.Tl)("systemtags","Tags you have created will show up here."),icon:'',order:25,getContents:async function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/";const e=(await(async()=>{try{const{data:t}=await ye.getDirectoryContents("/systemtags",{data:'\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n',details:!0,glob:"/systemtags/*"});return(t=>t.map((t=>{let{props:e}=t;return Object.fromEntries(Object.entries(e).map((t=>{let[e,i]=t;return[(0,_e.A)(e),"displayName"===(0,_e.A)(e)?String(i):i]})))})))(t)}catch(t){throw Oe.error((0,u.Tl)("systemtags","Failed to load tags"),{error:t}),new Error((0,u.Tl)("systemtags","Failed to load tags"))}})()).filter((t=>t.userVisible));if("/"===t)return{folder:new I({id:0,source:`${O}${Te}`,owner:(0,r.HW)()?.uid,root:Te,permissions:m.NONE}),contents:e.map($e)};const i=parseInt(t.split("/",2)[1]),n=e.find((t=>t.id===i));if(!n)throw new Error("Tag not found");return{folder:$e(n),contents:(await Re.getDirectoryContents(_,{details:!0,data:Le(i),headers:{method:"REPORT"}})).data.map(Ce)}}}))},73911:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var n=i(71354),r=i.n(n),s=i(76314),o=i.n(s)()(r());o.push([t.id,".files-list__system-tags{--min-size: 32px;display:none;justify-content:center;align-items:center;min-width:calc(var(--min-size)*2);max-width:300px}.files-list__system-tag{padding:5px 10px;border:1px solid;border-radius:var(--border-radius-pill);border-color:var(--color-border);color:var(--color-text-maxcontrast);height:var(--min-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:22px;text-align:center}.files-list__system-tag--more{overflow:visible;text-overflow:initial}.files-list__system-tag+.files-list__system-tag{margin-left:5px}@media(min-width: 512px){.files-list__system-tags{display:flex}}","",{version:3,sources:["webpack://./apps/systemtags/src/css/fileEntryInlineSystemTags.scss"],names:[],mappings:"AAKA,yBACC,gBAAA,CACA,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,iCAAA,CACA,eAAA,CAGD,wBACC,gBAAA,CACA,gBAAA,CACA,uCAAA,CACA,gCAAA,CACA,mCAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,gBAAA,CACA,iBAAA,CAEA,8BACC,gBAAA,CACA,qBAAA,CAID,gDACC,eAAA,CAIF,yBACC,yBACC,YAAA,CAAA",sourcesContent:["/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n.files-list__system-tags {\n\t--min-size: 32px;\n\tdisplay: none;\n\tjustify-content: center;\n\talign-items: center;\n\tmin-width: calc(var(--min-size) * 2);\n\tmax-width: 300px;\n}\n\n.files-list__system-tag {\n\tpadding: 5px 10px;\n\tborder: 1px solid;\n\tborder-radius: var(--border-radius-pill);\n\tborder-color: var(--color-border);\n\tcolor: var(--color-text-maxcontrast);\n\theight: var(--min-size);\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tline-height: 22px; // min-size - 2 * 5px padding\n\ttext-align: center;\n\n\t&--more {\n\t\toverflow: visible;\n\t\ttext-overflow: initial;\n\t}\n\n\t// Proper spacing if multiple shown\n\t& + .files-list__system-tag {\n\t\tmargin-left: 5px;\n\t}\n}\n\n@media (min-width: 512px) {\n\t.files-list__system-tags {\n\t\tdisplay: flex;\n\t}\n}\n"],sourceRoot:""}]);const a=o},42634:()=>{},63779:()=>{},77199:()=>{},59169:()=>{},86833:()=>{}},i={};function n(t){var r=i[t];if(void 0!==r)return r.exports;var s=i[t]={id:t,loaded:!1,exports:{}};return e[t].call(s.exports,s,s.exports,n),s.loaded=!0,s.exports}n.m=e,t=[],n.O=(e,i,r,s)=>{if(!i){var o=1/0;for(u=0;u=s)&&Object.keys(n.O).every((t=>n.O[t](i[l])))?i.splice(l--,1):(a=!1,s0&&t[u-1][2]>s;u--)t[u]=t[u-1];t[u]=[i,r,s]},n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.e=()=>Promise.resolve(),n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),n.j=2766,(()=>{n.b=document.baseURI||self.location.href;var t={2766:0};n.O.j=e=>0===t[e];var e=(e,i)=>{var r,s,o=i[0],a=i[1],l=i[2],d=0;if(o.some((e=>0!==t[e]))){for(r in a)n.o(a,r)&&(n.m[r]=a[r]);if(l)var u=l(n)}for(e&&e(i);dn(39607)));r=n.O(r)})(); +//# sourceMappingURL=systemtags-init.js.map?v=df5b06d5e4e3c4ef167a \ No newline at end of file diff --git a/dist/systemtags-init.js.map b/dist/systemtags-init.js.map index 197402195c009..b2a47204af277 100644 --- a/dist/systemtags-init.js.map +++ b/dist/systemtags-init.js.map @@ -1 +1 @@ -{"version":3,"file":"systemtags-init.js?v=ce5796d56650dfd98d06","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.mjs","webpack://nextcloud/./apps/systemtags/src/css/fileEntryInlineSystemTags.scss?0a01","webpack:///nextcloud/apps/systemtags/src/actions/inlineSystemTagsAction.ts","webpack:///nextcloud/apps/systemtags/src/services/davClient.ts","webpack:///nextcloud/apps/systemtags/src/utils.ts","webpack:///nextcloud/apps/systemtags/src/logger.ts","webpack:///nextcloud/apps/systemtags/src/services/systemtags.ts","webpack:///nextcloud/apps/systemtags/src/init.ts","webpack:///nextcloud/apps/systemtags/src/services/api.ts","webpack:///nextcloud/apps/systemtags/src/css/fileEntryInlineSystemTags.scss","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/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/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};","import { getLoggerBuilder } from \"@nextcloud/logger\";\nimport { getCurrentUser, onRequestTokenUpdate, getRequestToken } from \"@nextcloud/auth\";\nimport { join, basename, extname, dirname } from \"path\";\nimport { encodePath } from \"@nextcloud/paths\";\nimport { generateRemoteUrl } from \"@nextcloud/router\";\nimport { CancelablePromise } from \"cancelable-promise\";\nimport { createClient, getPatcher } from \"webdav\";\nimport { isPublicShare, getSharingToken } from \"@nextcloud/sharing/public\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { getCanonicalLocale, getLanguage } from \"@nextcloud/l10n\";\nimport { TypedEventTarget } from \"typescript-event-target\";\nconst logger = getLoggerBuilder().setApp(\"@nextcloud/files\").detectUser().build();\nvar NewMenuEntryCategory = /* @__PURE__ */ ((NewMenuEntryCategory2) => {\n NewMenuEntryCategory2[NewMenuEntryCategory2[\"UploadFromDevice\"] = 0] = \"UploadFromDevice\";\n NewMenuEntryCategory2[NewMenuEntryCategory2[\"CreateNew\"] = 1] = \"CreateNew\";\n NewMenuEntryCategory2[NewMenuEntryCategory2[\"Other\"] = 2] = \"Other\";\n return NewMenuEntryCategory2;\n})(NewMenuEntryCategory || {});\nclass NewFileMenu {\n _entries = [];\n registerEntry(entry) {\n this.validateEntry(entry);\n entry.category = entry.category ?? 1;\n this._entries.push(entry);\n }\n unregisterEntry(entry) {\n const entryIndex = typeof entry === \"string\" ? this.getEntryIndex(entry) : this.getEntryIndex(entry.id);\n if (entryIndex === -1) {\n logger.warn(\"Entry not found, nothing removed\", { entry, entries: this.getEntries() });\n return;\n }\n this._entries.splice(entryIndex, 1);\n }\n /**\n * Get the list of registered entries\n *\n * @param {Folder} context the creation context. Usually the current folder\n */\n getEntries(context) {\n if (context) {\n return this._entries.filter((entry) => typeof entry.enabled === \"function\" ? entry.enabled(context) : true);\n }\n return this._entries;\n }\n getEntryIndex(id) {\n return this._entries.findIndex((entry) => entry.id === id);\n }\n validateEntry(entry) {\n if (!entry.id || !entry.displayName || !(entry.iconSvgInline || entry.iconClass) || !entry.handler) {\n throw new Error(\"Invalid entry\");\n }\n if (typeof entry.id !== \"string\" || typeof entry.displayName !== \"string\") {\n throw new Error(\"Invalid id or displayName property\");\n }\n if (entry.iconClass && typeof entry.iconClass !== \"string\" || entry.iconSvgInline && typeof entry.iconSvgInline !== \"string\") {\n throw new Error(\"Invalid icon provided\");\n }\n if (entry.enabled !== void 0 && typeof entry.enabled !== \"function\") {\n throw new Error(\"Invalid enabled property\");\n }\n if (typeof entry.handler !== \"function\") {\n throw new Error(\"Invalid handler property\");\n }\n if (\"order\" in entry && typeof entry.order !== \"number\") {\n throw new Error(\"Invalid order property\");\n }\n if (this.getEntryIndex(entry.id) !== -1) {\n throw new Error(\"Duplicate entry\");\n }\n }\n}\nconst getNewFileMenu = function() {\n if (typeof window._nc_newfilemenu === \"undefined\") {\n window._nc_newfilemenu = new NewFileMenu();\n logger.debug(\"NewFileMenu initialized\");\n }\n return window._nc_newfilemenu;\n};\nvar DefaultType = /* @__PURE__ */ ((DefaultType2) => {\n DefaultType2[\"DEFAULT\"] = \"default\";\n DefaultType2[\"HIDDEN\"] = \"hidden\";\n return DefaultType2;\n})(DefaultType || {});\nclass FileAction {\n _action;\n constructor(action) {\n this.validateAction(action);\n this._action = action;\n }\n get id() {\n return this._action.id;\n }\n get displayName() {\n return this._action.displayName;\n }\n get title() {\n return this._action.title;\n }\n get iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\n }\n get execBatch() {\n return this._action.execBatch;\n }\n get order() {\n return this._action.order;\n }\n get parent() {\n return this._action.parent;\n }\n get default() {\n return this._action.default;\n }\n get inline() {\n return this._action.inline;\n }\n get renderInline() {\n return this._action.renderInline;\n }\n validateAction(action) {\n if (!action.id || typeof action.id !== \"string\") {\n throw new Error(\"Invalid id\");\n }\n if (!action.displayName || typeof action.displayName !== \"function\") {\n throw new Error(\"Invalid displayName function\");\n }\n if (\"title\" in action && typeof action.title !== \"function\") {\n throw new Error(\"Invalid title function\");\n }\n if (!action.iconSvgInline || typeof action.iconSvgInline !== \"function\") {\n throw new Error(\"Invalid iconSvgInline function\");\n }\n if (!action.exec || typeof action.exec !== \"function\") {\n throw new Error(\"Invalid exec function\");\n }\n if (\"enabled\" in action && typeof action.enabled !== \"function\") {\n throw new Error(\"Invalid enabled function\");\n }\n if (\"execBatch\" in action && typeof action.execBatch !== \"function\") {\n throw new Error(\"Invalid execBatch function\");\n }\n if (\"order\" in action && typeof action.order !== \"number\") {\n throw new Error(\"Invalid order\");\n }\n if (\"parent\" in action && typeof action.parent !== \"string\") {\n throw new Error(\"Invalid parent\");\n }\n if (action.default && !Object.values(DefaultType).includes(action.default)) {\n throw new Error(\"Invalid default\");\n }\n if (\"inline\" in action && typeof action.inline !== \"function\") {\n throw new Error(\"Invalid inline function\");\n }\n if (\"renderInline\" in action && typeof action.renderInline !== \"function\") {\n throw new Error(\"Invalid renderInline function\");\n }\n }\n}\nconst registerFileAction = function(action) {\n if (typeof window._nc_fileactions === \"undefined\") {\n window._nc_fileactions = [];\n logger.debug(\"FileActions initialized\");\n }\n if (window._nc_fileactions.find((search) => search.id === action.id)) {\n logger.error(`FileAction ${action.id} already registered`, { action });\n return;\n }\n window._nc_fileactions.push(action);\n};\nconst getFileActions = function() {\n if (typeof window._nc_fileactions === \"undefined\") {\n window._nc_fileactions = [];\n logger.debug(\"FileActions initialized\");\n }\n return window._nc_fileactions;\n};\nclass Header {\n _header;\n constructor(header) {\n this.validateHeader(header);\n this._header = header;\n }\n get id() {\n return this._header.id;\n }\n get order() {\n return this._header.order;\n }\n get enabled() {\n return this._header.enabled;\n }\n get render() {\n return this._header.render;\n }\n get updated() {\n return this._header.updated;\n }\n validateHeader(header) {\n if (!header.id || !header.render || !header.updated) {\n throw new Error(\"Invalid header: id, render and updated are required\");\n }\n if (typeof header.id !== \"string\") {\n throw new Error(\"Invalid id property\");\n }\n if (header.enabled !== void 0 && typeof header.enabled !== \"function\") {\n throw new Error(\"Invalid enabled property\");\n }\n if (header.render && typeof header.render !== \"function\") {\n throw new Error(\"Invalid render property\");\n }\n if (header.updated && typeof header.updated !== \"function\") {\n throw new Error(\"Invalid updated property\");\n }\n }\n}\nconst registerFileListHeaders = function(header) {\n if (typeof window._nc_filelistheader === \"undefined\") {\n window._nc_filelistheader = [];\n logger.debug(\"FileListHeaders initialized\");\n }\n if (window._nc_filelistheader.find((search) => search.id === header.id)) {\n logger.error(`Header ${header.id} already registered`, { header });\n return;\n }\n window._nc_filelistheader.push(header);\n};\nconst getFileListHeaders = function() {\n if (typeof window._nc_filelistheader === \"undefined\") {\n window._nc_filelistheader = [];\n logger.debug(\"FileListHeaders initialized\");\n }\n return window._nc_filelistheader;\n};\nvar Permission = /* @__PURE__ */ ((Permission2) => {\n Permission2[Permission2[\"NONE\"] = 0] = \"NONE\";\n Permission2[Permission2[\"CREATE\"] = 4] = \"CREATE\";\n Permission2[Permission2[\"READ\"] = 1] = \"READ\";\n Permission2[Permission2[\"UPDATE\"] = 2] = \"UPDATE\";\n Permission2[Permission2[\"DELETE\"] = 8] = \"DELETE\";\n Permission2[Permission2[\"SHARE\"] = 16] = \"SHARE\";\n Permission2[Permission2[\"ALL\"] = 31] = \"ALL\";\n return Permission2;\n})(Permission || {});\nconst defaultDavProperties = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:creationdate\",\n \"d:displayname\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:size\"\n];\nconst defaultDavNamespaces = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n};\nconst registerDavProperty = function(prop, namespace = { nc: \"http://nextcloud.org/ns\" }) {\n if (typeof window._nc_dav_properties === \"undefined\") {\n window._nc_dav_properties = [...defaultDavProperties];\n window._nc_dav_namespaces = { ...defaultDavNamespaces };\n }\n const namespaces = { ...window._nc_dav_namespaces, ...namespace };\n if (window._nc_dav_properties.find((search) => search === prop)) {\n logger.warn(`${prop} already registered`, { prop });\n return false;\n }\n if (prop.startsWith(\"<\") || prop.split(\":\").length !== 2) {\n logger.error(`${prop} is not valid. See example: 'oc:fileid'`, { prop });\n return false;\n }\n const ns = prop.split(\":\")[0];\n if (!namespaces[ns]) {\n logger.error(`${prop} namespace unknown`, { prop, namespaces });\n return false;\n }\n window._nc_dav_properties.push(prop);\n window._nc_dav_namespaces = namespaces;\n return true;\n};\nconst getDavProperties = function() {\n if (typeof window._nc_dav_properties === \"undefined\") {\n window._nc_dav_properties = [...defaultDavProperties];\n }\n return window._nc_dav_properties.map((prop) => `<${prop} />`).join(\" \");\n};\nconst getDavNameSpaces = function() {\n if (typeof window._nc_dav_namespaces === \"undefined\") {\n window._nc_dav_namespaces = { ...defaultDavNamespaces };\n }\n return Object.keys(window._nc_dav_namespaces).map((ns) => `xmlns:${ns}=\"${window._nc_dav_namespaces?.[ns]}\"`).join(\" \");\n};\nconst davGetDefaultPropfind = function() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t`;\n};\nconst davGetFavoritesReport = function() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\t\n\t\t\t\t1\n\t\t\t\n\t\t`;\n};\nconst davGetRecentSearch = function(lastModified) {\n return `\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t/files/${getCurrentUser()?.uid}/\n\t\t\t\tinfinity\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\thttpd/unix-directory\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t0\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${lastModified}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t100\n\t\t\t0\n\t\t\n\t\n`;\n};\nconst davParsePermissions = function(permString = \"\") {\n let permissions = Permission.NONE;\n if (!permString) {\n return permissions;\n }\n if (permString.includes(\"C\") || permString.includes(\"K\")) {\n permissions |= Permission.CREATE;\n }\n if (permString.includes(\"G\")) {\n permissions |= Permission.READ;\n }\n if (permString.includes(\"W\") || permString.includes(\"N\") || permString.includes(\"V\")) {\n permissions |= Permission.UPDATE;\n }\n if (permString.includes(\"D\")) {\n permissions |= Permission.DELETE;\n }\n if (permString.includes(\"R\")) {\n permissions |= Permission.SHARE;\n }\n return permissions;\n};\nvar FileType = /* @__PURE__ */ ((FileType2) => {\n FileType2[\"Folder\"] = \"folder\";\n FileType2[\"File\"] = \"file\";\n return FileType2;\n})(FileType || {});\nconst isDavRessource = function(source, davService) {\n return source.match(davService) !== null;\n};\nconst validateData = (data, davService) => {\n if (data.id && typeof data.id !== \"number\") {\n throw new Error(\"Invalid id type of value\");\n }\n if (!data.source) {\n throw new Error(\"Missing mandatory source\");\n }\n try {\n new URL(data.source);\n } catch (e) {\n throw new Error(\"Invalid source format, source must be a valid URL\");\n }\n if (!data.source.startsWith(\"http\")) {\n throw new Error(\"Invalid source format, only http(s) is supported\");\n }\n if (data.displayname && typeof data.displayname !== \"string\") {\n throw new Error(\"Invalid displayname type\");\n }\n if (data.mtime && !(data.mtime instanceof Date)) {\n throw new Error(\"Invalid mtime type\");\n }\n if (data.crtime && !(data.crtime instanceof Date)) {\n throw new Error(\"Invalid crtime type\");\n }\n if (!data.mime || typeof data.mime !== \"string\" || !data.mime.match(/^[-\\w.]+\\/[-+\\w.]+$/gi)) {\n throw new Error(\"Missing or invalid mandatory mime\");\n }\n if (\"size\" in data && typeof data.size !== \"number\" && data.size !== void 0) {\n throw new Error(\"Invalid size type\");\n }\n if (\"permissions\" in data && data.permissions !== void 0 && !(typeof data.permissions === \"number\" && data.permissions >= Permission.NONE && data.permissions <= Permission.ALL)) {\n throw new Error(\"Invalid permissions\");\n }\n if (data.owner && data.owner !== null && typeof data.owner !== \"string\") {\n throw new Error(\"Invalid owner type\");\n }\n if (data.attributes && typeof data.attributes !== \"object\") {\n throw new Error(\"Invalid attributes type\");\n }\n if (data.root && typeof data.root !== \"string\") {\n throw new Error(\"Invalid root type\");\n }\n if (data.root && !data.root.startsWith(\"/\")) {\n throw new Error(\"Root must start with a leading slash\");\n }\n if (data.root && !data.source.includes(data.root)) {\n throw new Error(\"Root must be part of the source\");\n }\n if (data.root && isDavRessource(data.source, davService)) {\n const service = data.source.match(davService)[0];\n if (!data.source.includes(join(service, data.root))) {\n throw new Error(\"The root must be relative to the service. e.g /files/emma\");\n }\n }\n if (data.status && !Object.values(NodeStatus).includes(data.status)) {\n throw new Error(\"Status must be a valid NodeStatus\");\n }\n};\nvar NodeStatus = /* @__PURE__ */ ((NodeStatus2) => {\n NodeStatus2[\"NEW\"] = \"new\";\n NodeStatus2[\"FAILED\"] = \"failed\";\n NodeStatus2[\"LOADING\"] = \"loading\";\n NodeStatus2[\"LOCKED\"] = \"locked\";\n return NodeStatus2;\n})(NodeStatus || {});\nclass Node {\n _data;\n _attributes;\n _knownDavService = /(remote|public)\\.php\\/(web)?dav/i;\n readonlyAttributes = Object.entries(Object.getOwnPropertyDescriptors(Node.prototype)).filter((e) => typeof e[1].get === \"function\" && e[0] !== \"__proto__\").map((e) => e[0]);\n handler = {\n set: (target, prop, value) => {\n if (this.readonlyAttributes.includes(prop)) {\n return false;\n }\n return Reflect.set(target, prop, value);\n },\n deleteProperty: (target, prop) => {\n if (this.readonlyAttributes.includes(prop)) {\n return false;\n }\n return Reflect.deleteProperty(target, prop);\n },\n // TODO: This is deprecated and only needed for files v3\n get: (target, prop, receiver) => {\n if (this.readonlyAttributes.includes(prop)) {\n logger.warn(`Accessing \"Node.attributes.${prop}\" is deprecated, access it directly on the Node instance.`);\n return Reflect.get(this, prop);\n }\n return Reflect.get(target, prop, receiver);\n }\n };\n constructor(data, davService) {\n validateData(data, davService || this._knownDavService);\n this._data = {\n // TODO: Remove with next major release, this is just for compatibility\n displayname: data.attributes?.displayname,\n ...data,\n attributes: {}\n };\n this._attributes = new Proxy(this._data.attributes, this.handler);\n this.update(data.attributes ?? {});\n if (davService) {\n this._knownDavService = davService;\n }\n }\n /**\n * Get the source url to this object\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get source() {\n return this._data.source.replace(/\\/$/i, \"\");\n }\n /**\n * Get the encoded source url to this object for requests purposes\n */\n get encodedSource() {\n const { origin } = new URL(this.source);\n return origin + encodePath(this.source.slice(origin.length));\n }\n /**\n * Get this object name\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get basename() {\n return basename(this.source);\n }\n /**\n * The nodes displayname\n * By default the display name and the `basename` are identical,\n * but it is possible to have a different name. This happens\n * on the files app for example for shared folders.\n */\n get displayname() {\n return this._data.displayname || this.basename;\n }\n /**\n * Set the displayname\n */\n set displayname(displayname) {\n this._data.displayname = displayname;\n }\n /**\n * Get this object's extension\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get extension() {\n return extname(this.source);\n }\n /**\n * Get the directory path leading to this object\n * Will use the relative path to root if available\n *\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get dirname() {\n if (this.root) {\n let source = this.source;\n if (this.isDavRessource) {\n source = source.split(this._knownDavService).pop();\n }\n const firstMatch = source.indexOf(this.root);\n const root = this.root.replace(/\\/$/, \"\");\n return dirname(source.slice(firstMatch + root.length) || \"/\");\n }\n const url = new URL(this.source);\n return dirname(url.pathname);\n }\n /**\n * Get the file mime\n * There is no setter as the mime is not meant to be changed\n */\n get mime() {\n return this._data.mime;\n }\n /**\n * Get the file modification time\n */\n get mtime() {\n return this._data.mtime;\n }\n /**\n * Set the file modification time\n */\n set mtime(mtime) {\n this._data.mtime = mtime;\n }\n /**\n * Get the file creation time\n * There is no setter as the creation time is not meant to be changed\n */\n get crtime() {\n return this._data.crtime;\n }\n /**\n * Get the file size\n */\n get size() {\n return this._data.size;\n }\n /**\n * Set the file size\n */\n set size(size) {\n this.updateMtime();\n this._data.size = size;\n }\n /**\n * Get the file attribute\n * This contains all additional attributes not provided by the Node class\n */\n get attributes() {\n return this._attributes;\n }\n /**\n * Get the file permissions\n */\n get permissions() {\n if (this.owner === null && !this.isDavRessource) {\n return Permission.READ;\n }\n return this._data.permissions !== void 0 ? this._data.permissions : Permission.NONE;\n }\n /**\n * Set the file permissions\n */\n set permissions(permissions) {\n this.updateMtime();\n this._data.permissions = permissions;\n }\n /**\n * Get the file owner\n * There is no setter as the owner is not meant to be changed\n */\n get owner() {\n if (!this.isDavRessource) {\n return null;\n }\n return this._data.owner;\n }\n /**\n * Is this a dav-related ressource ?\n */\n get isDavRessource() {\n return isDavRessource(this.source, this._knownDavService);\n }\n /**\n * Get the dav root of this object\n * There is no setter as the root is not meant to be changed\n */\n get root() {\n if (this._data.root) {\n return this._data.root.replace(/^(.+)\\/$/, \"$1\");\n }\n if (this.isDavRessource) {\n const root = dirname(this.source);\n return root.split(this._knownDavService).pop() || null;\n }\n return null;\n }\n /**\n * Get the absolute path of this object relative to the root\n */\n get path() {\n if (this.root) {\n let source = this.source;\n if (this.isDavRessource) {\n source = source.split(this._knownDavService).pop();\n }\n const firstMatch = source.indexOf(this.root);\n const root = this.root.replace(/\\/$/, \"\");\n return source.slice(firstMatch + root.length) || \"/\";\n }\n return (this.dirname + \"/\" + this.basename).replace(/\\/\\//g, \"/\");\n }\n /**\n * Get the node id if defined.\n * There is no setter as the fileid is not meant to be changed\n */\n get fileid() {\n return this._data?.id;\n }\n /**\n * Get the node status.\n */\n get status() {\n return this._data?.status;\n }\n /**\n * Set the node status.\n */\n set status(status) {\n this._data.status = status;\n }\n /**\n * Move the node to a new destination\n *\n * @param {string} destination the new source.\n * e.g. https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg\n */\n move(destination) {\n validateData({ ...this._data, source: destination }, this._knownDavService);\n const oldBasename = this.basename;\n this._data.source = destination;\n if (this.displayname === oldBasename && this.basename !== oldBasename) {\n this.displayname = this.basename;\n }\n this.updateMtime();\n }\n /**\n * Rename the node\n * This aliases the move method for easier usage\n *\n * @param basename The new name of the node\n */\n rename(basename2) {\n if (basename2.includes(\"/\")) {\n throw new Error(\"Invalid basename\");\n }\n this.move(dirname(this.source) + \"/\" + basename2);\n }\n /**\n * Update the mtime if exists\n */\n updateMtime() {\n if (this._data.mtime) {\n this._data.mtime = /* @__PURE__ */ new Date();\n }\n }\n /**\n * Update the attributes of the node\n * Warning, updating attributes will NOT automatically update the mtime.\n *\n * @param attributes The new attributes to update on the Node attributes\n */\n update(attributes) {\n for (const [name, value] of Object.entries(attributes)) {\n try {\n if (value === void 0) {\n delete this.attributes[name];\n } else {\n this.attributes[name] = value;\n }\n } catch (e) {\n if (e instanceof TypeError) {\n continue;\n }\n throw e;\n }\n }\n }\n}\nclass File extends Node {\n get type() {\n return FileType.File;\n }\n}\nclass Folder extends Node {\n constructor(data) {\n super({\n ...data,\n mime: \"httpd/unix-directory\"\n });\n }\n get type() {\n return FileType.Folder;\n }\n get extension() {\n return null;\n }\n get mime() {\n return \"httpd/unix-directory\";\n }\n}\nfunction davGetRootPath() {\n if (isPublicShare()) {\n return `/files/${getSharingToken()}`;\n }\n return `/files/${getCurrentUser()?.uid}`;\n}\nconst davRootPath = davGetRootPath();\nfunction davGetRemoteURL() {\n const url = generateRemoteUrl(\"dav\");\n if (isPublicShare()) {\n return url.replace(\"remote.php\", \"public.php\");\n }\n return url;\n}\nconst davRemoteURL = davGetRemoteURL();\nconst davGetClient = function(remoteURL = davRemoteURL, headers = {}) {\n const client = createClient(remoteURL, { headers });\n function setHeaders(token) {\n client.setHeaders({\n ...headers,\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 onRequestTokenUpdate(setHeaders);\n setHeaders(getRequestToken());\n const patcher = getPatcher();\n patcher.patch(\"fetch\", (url, options) => {\n const headers2 = options.headers;\n if (headers2?.method) {\n options.method = headers2.method;\n delete headers2.method;\n }\n return fetch(url, options);\n });\n return client;\n};\nconst getFavoriteNodes = (davClient, path = \"/\", davRoot = davRootPath) => {\n const controller = new AbortController();\n return new CancelablePromise(async (resolve, reject, onCancel) => {\n onCancel(() => controller.abort());\n try {\n const contentsResponse = await davClient.getDirectoryContents(`${davRoot}${path}`, {\n signal: controller.signal,\n details: true,\n data: davGetFavoritesReport(),\n headers: {\n // see davGetClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: true\n });\n const nodes = contentsResponse.data.filter((node) => node.filename !== path).map((result) => davResultToNode(result, davRoot));\n resolve(nodes);\n } catch (error) {\n reject(error);\n }\n });\n};\nconst davResultToNode = function(node, filesRoot = davRootPath, remoteURL = davRemoteURL) {\n let userId = getCurrentUser()?.uid;\n if (isPublicShare()) {\n userId = userId ?? \"anonymous\";\n } else if (!userId) {\n throw new Error(\"No user id found\");\n }\n const props = node.props;\n const permissions = davParsePermissions(props?.permissions);\n const owner = String(props?.[\"owner-id\"] || userId);\n const id = props.fileid || 0;\n const nodeData = {\n id,\n source: `${remoteURL}${node.filename}`,\n mtime: new Date(Date.parse(node.lastmod)),\n mime: node.mime || \"application/octet-stream\",\n // Manually cast to work around for https://github.com/perry-mitchell/webdav-client/pull/380\n displayname: props.displayname !== void 0 ? String(props.displayname) : void 0,\n size: props?.size || Number.parseInt(props.getcontentlength || \"0\"),\n // The fileid is set to -1 for failed requests\n status: id < 0 ? NodeStatus.FAILED : void 0,\n permissions,\n owner,\n root: filesRoot,\n attributes: {\n ...node,\n ...props,\n hasPreview: props?.[\"has-preview\"]\n }\n };\n delete nodeData.attributes?.props;\n return node.type === \"file\" ? new File(nodeData) : new Folder(nodeData);\n};\nvar InvalidFilenameErrorReason = /* @__PURE__ */ ((InvalidFilenameErrorReason2) => {\n InvalidFilenameErrorReason2[\"ReservedName\"] = \"reserved name\";\n InvalidFilenameErrorReason2[\"Character\"] = \"character\";\n InvalidFilenameErrorReason2[\"Extension\"] = \"extension\";\n return InvalidFilenameErrorReason2;\n})(InvalidFilenameErrorReason || {});\nclass InvalidFilenameError extends Error {\n constructor(options) {\n super(`Invalid ${options.reason} '${options.segment}' in filename '${options.filename}'`, { cause: options });\n }\n /**\n * The filename that was validated\n */\n get filename() {\n return this.cause.filename;\n }\n /**\n * Reason why the validation failed\n */\n get reason() {\n return this.cause.reason;\n }\n /**\n * Part of the filename that caused this error\n */\n get segment() {\n return this.cause.segment;\n }\n}\nfunction validateFilename(filename) {\n const capabilities = getCapabilities().files;\n const forbiddenCharacters = capabilities.forbidden_filename_characters ?? window._oc_config?.forbidden_filenames_characters ?? [\"/\", \"\\\\\"];\n for (const character of forbiddenCharacters) {\n if (filename.includes(character)) {\n throw new InvalidFilenameError({ segment: character, reason: \"character\", filename });\n }\n }\n filename = filename.toLocaleLowerCase();\n const forbiddenFilenames = capabilities.forbidden_filenames ?? [\".htaccess\"];\n if (forbiddenFilenames.includes(filename)) {\n throw new InvalidFilenameError({\n filename,\n segment: filename,\n reason: \"reserved name\"\n /* ReservedName */\n });\n }\n const endOfBasename = filename.indexOf(\".\", 1);\n const basename2 = filename.substring(0, endOfBasename === -1 ? void 0 : endOfBasename);\n const forbiddenFilenameBasenames = capabilities.forbidden_filename_basenames ?? [];\n if (forbiddenFilenameBasenames.includes(basename2)) {\n throw new InvalidFilenameError({\n filename,\n segment: basename2,\n reason: \"reserved name\"\n /* ReservedName */\n });\n }\n const forbiddenFilenameExtensions = capabilities.forbidden_filename_extensions ?? [\".part\", \".filepart\"];\n for (const extension of forbiddenFilenameExtensions) {\n if (filename.length > extension.length && filename.endsWith(extension)) {\n throw new InvalidFilenameError({ segment: extension, reason: \"extension\", filename });\n }\n }\n}\nfunction isFilenameValid(filename) {\n try {\n validateFilename(filename);\n return true;\n } catch (error) {\n if (error instanceof InvalidFilenameError) {\n return false;\n }\n throw error;\n }\n}\nfunction getUniqueName(name, otherNames, options) {\n const opts = {\n suffix: (n) => `(${n})`,\n ignoreFileExtension: false,\n ...options\n };\n let newName = name;\n let i = 1;\n while (otherNames.includes(newName)) {\n const ext = opts.ignoreFileExtension ? \"\" : extname(name);\n const base = basename(name, ext);\n newName = `${base} ${opts.suffix(i++)}${ext}`;\n }\n return newName;\n}\nconst humanList = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"];\nconst humanListBinary = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"];\nfunction formatFileSize(size, skipSmallSizes = false, binaryPrefixes = false, base1000 = false) {\n binaryPrefixes = binaryPrefixes && !base1000;\n if (typeof size === \"string\") {\n size = Number(size);\n }\n let order = size > 0 ? Math.floor(Math.log(size) / Math.log(base1000 ? 1e3 : 1024)) : 0;\n order = Math.min((binaryPrefixes ? humanListBinary.length : humanList.length) - 1, order);\n const readableFormat = binaryPrefixes ? humanListBinary[order] : humanList[order];\n let relativeSize = (size / Math.pow(base1000 ? 1e3 : 1024, order)).toFixed(1);\n if (skipSmallSizes === true && order === 0) {\n return (relativeSize !== \"0.0\" ? \"< 1 \" : \"0 \") + (binaryPrefixes ? humanListBinary[1] : humanList[1]);\n }\n if (order < 2) {\n relativeSize = parseFloat(relativeSize).toFixed(0);\n } else {\n relativeSize = parseFloat(relativeSize).toLocaleString(getCanonicalLocale());\n }\n return relativeSize + \" \" + readableFormat;\n}\nfunction parseFileSize(value, forceBinary = false) {\n try {\n value = `${value}`.toLocaleLowerCase().replaceAll(/\\s+/g, \"\").replaceAll(\",\", \".\");\n } catch (e) {\n return null;\n }\n const match = value.match(/^([0-9]*(\\.[0-9]*)?)([kmgtp]?)(i?)b?$/);\n if (match === null || match[1] === \".\" || match[1] === \"\") {\n return null;\n }\n const bytesArray = {\n \"\": 0,\n k: 1,\n m: 2,\n g: 3,\n t: 4,\n p: 5,\n e: 6\n };\n const decimalString = `${match[1]}`;\n const base = match[4] === \"i\" || forceBinary ? 1024 : 1e3;\n return Math.round(Number.parseFloat(decimalString) * base ** bytesArray[match[3]]);\n}\nfunction stringify(value) {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return String(value);\n}\nfunction orderBy(collection, identifiers2, orders) {\n identifiers2 = identifiers2 ?? [(value) => value];\n orders = orders ?? [];\n const sorting = identifiers2.map((_, index) => (orders[index] ?? \"asc\") === \"asc\" ? 1 : -1);\n const collator = Intl.Collator(\n [getLanguage(), getCanonicalLocale()],\n {\n // handle 10 as ten and not as one-zero\n numeric: true,\n usage: \"sort\"\n }\n );\n return [...collection].sort((a, b) => {\n for (const [index, identifier] of identifiers2.entries()) {\n const value = collator.compare(stringify(identifier(a)), stringify(identifier(b)));\n if (value !== 0) {\n return value * sorting[index];\n }\n }\n return 0;\n });\n}\nvar FilesSortingMode = /* @__PURE__ */ ((FilesSortingMode2) => {\n FilesSortingMode2[\"Name\"] = \"basename\";\n FilesSortingMode2[\"Modified\"] = \"mtime\";\n FilesSortingMode2[\"Size\"] = \"size\";\n return FilesSortingMode2;\n})(FilesSortingMode || {});\nfunction sortNodes(nodes, options = {}) {\n const sortingOptions = {\n // Default to sort by name\n sortingMode: \"basename\",\n // Default to sort ascending\n sortingOrder: \"asc\",\n ...options\n };\n const basename2 = (name) => name.lastIndexOf(\".\") > 0 ? name.slice(0, name.lastIndexOf(\".\")) : name;\n const identifiers2 = [\n // 1: Sort favorites first if enabled\n ...sortingOptions.sortFavoritesFirst ? [(v) => v.attributes?.favorite !== 1] : [],\n // 2: Sort folders first if sorting by name\n ...sortingOptions.sortFoldersFirst ? [(v) => v.type !== \"folder\"] : [],\n // 3: Use sorting mode if NOT basename (to be able to use display name too)\n ...sortingOptions.sortingMode !== \"basename\" ? [(v) => v[sortingOptions.sortingMode]] : [],\n // 4: Use display name if available, fallback to name\n (v) => basename2(v.attributes?.displayname || v.basename),\n // 5: Finally, use basename if all previous sorting methods failed\n (v) => v.basename\n ];\n const orders = [\n // (for 1): always sort favorites before normal files\n ...sortingOptions.sortFavoritesFirst ? [\"asc\"] : [],\n // (for 2): always sort folders before files\n ...sortingOptions.sortFoldersFirst ? [\"asc\"] : [],\n // (for 3): Reverse if sorting by mtime as mtime higher means edited more recent -> lower\n ...sortingOptions.sortingMode === \"mtime\" ? [sortingOptions.sortingOrder === \"asc\" ? \"desc\" : \"asc\"] : [],\n // (also for 3 so make sure not to conflict with 2 and 3)\n ...sortingOptions.sortingMode !== \"mtime\" && sortingOptions.sortingMode !== \"basename\" ? [sortingOptions.sortingOrder] : [],\n // for 4: use configured sorting direction\n sortingOptions.sortingOrder,\n // for 5: use configured sorting direction\n sortingOptions.sortingOrder\n ];\n return orderBy(nodes, identifiers2, orders);\n}\nclass Navigation extends TypedEventTarget {\n _views = [];\n _currentView = null;\n /**\n * Register a new view on the navigation\n * @param view The view to register\n * @throws `Error` is thrown if a view with the same id is already registered\n */\n register(view) {\n if (this._views.find((search) => search.id === view.id)) {\n throw new Error(`View id ${view.id} is already registered`);\n }\n this._views.push(view);\n this.dispatchTypedEvent(\"update\", new CustomEvent(\"update\"));\n }\n /**\n * Remove a registered view\n * @param id The id of the view to remove\n */\n remove(id) {\n const index = this._views.findIndex((view) => view.id === id);\n if (index !== -1) {\n this._views.splice(index, 1);\n this.dispatchTypedEvent(\"update\", new CustomEvent(\"update\"));\n }\n }\n /**\n * Set the currently active view\n * @fires UpdateActiveViewEvent\n * @param view New active view\n */\n setActive(view) {\n this._currentView = view;\n const event = new CustomEvent(\"updateActive\", { detail: view });\n this.dispatchTypedEvent(\"updateActive\", event);\n }\n /**\n * The currently active files view\n */\n get active() {\n return this._currentView;\n }\n /**\n * All registered views\n */\n get views() {\n return this._views;\n }\n}\nconst getNavigation = function() {\n if (typeof window._nc_navigation === \"undefined\") {\n window._nc_navigation = new Navigation();\n logger.debug(\"Navigation service initialized\");\n }\n return window._nc_navigation;\n};\nclass Column {\n _column;\n constructor(column) {\n isValidColumn(column);\n this._column = column;\n }\n get id() {\n return this._column.id;\n }\n get title() {\n return this._column.title;\n }\n get render() {\n return this._column.render;\n }\n get sort() {\n return this._column.sort;\n }\n get summary() {\n return this._column.summary;\n }\n}\nconst isValidColumn = function(column) {\n if (!column.id || typeof column.id !== \"string\") {\n throw new Error(\"A column id is required\");\n }\n if (!column.title || typeof column.title !== \"string\") {\n throw new Error(\"A column title is required\");\n }\n if (!column.render || typeof column.render !== \"function\") {\n throw new Error(\"A render function is required\");\n }\n if (column.sort && typeof column.sort !== \"function\") {\n throw new Error(\"Column sortFunction must be a function\");\n }\n if (column.summary && typeof column.summary !== \"function\") {\n throw new Error(\"Column summary must be a function\");\n }\n return true;\n};\nfunction getDefaultExportFromCjs(x) {\n return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n}\nvar validator$2 = {};\nvar util$3 = {};\n(function(exports) {\n const nameStartChar = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n const nameChar = nameStartChar + \"\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n const nameRegexp = \"[\" + nameStartChar + \"][\" + nameChar + \"]*\";\n const regexName = new RegExp(\"^\" + nameRegexp + \"$\");\n const getAllMatches = function(string, regex) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches = [];\n allmatches.startIndex = regex.lastIndex - match[0].length;\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n };\n const isName = function(string) {\n const match = regexName.exec(string);\n return !(match === null || typeof match === \"undefined\");\n };\n exports.isExist = function(v) {\n return typeof v !== \"undefined\";\n };\n exports.isEmptyObject = function(obj) {\n return Object.keys(obj).length === 0;\n };\n exports.merge = function(target, a, arrayMode) {\n if (a) {\n const keys = Object.keys(a);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n if (arrayMode === \"strict\") {\n target[keys[i]] = [a[keys[i]]];\n } else {\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n };\n exports.getValue = function(v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return \"\";\n }\n };\n exports.isName = isName;\n exports.getAllMatches = getAllMatches;\n exports.nameRegexp = nameRegexp;\n})(util$3);\nconst util$2 = util$3;\nconst defaultOptions$2 = {\n allowBooleanAttributes: false,\n //A tag can have attributes without any value\n unpairedTags: []\n};\nvalidator$2.validate = function(xmlData, options) {\n options = Object.assign({}, defaultOptions$2, options);\n const tags = [];\n let tagFound = false;\n let reachedRoot = false;\n if (xmlData[0] === \"\\uFEFF\") {\n xmlData = xmlData.substr(1);\n }\n for (let i = 0; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\" && xmlData[i + 1] === \"?\") {\n i += 2;\n i = readPI(xmlData, i);\n if (i.err) return i;\n } else if (xmlData[i] === \"<\") {\n let tagStartPos = i;\n i++;\n if (xmlData[i] === \"!\") {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === \"/\") {\n closingTag = true;\n i++;\n }\n let tagName = \"\";\n for (; i < xmlData.length && xmlData[i] !== \">\" && xmlData[i] !== \" \" && xmlData[i] !== \"\t\" && xmlData[i] !== \"\\n\" && xmlData[i] !== \"\\r\"; i++) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substring(0, tagName.length - 1);\n i--;\n }\n if (!validateTagName(tagName)) {\n let msg;\n if (tagName.trim().length === 0) {\n msg = \"Invalid space after '<'.\";\n } else {\n msg = \"Tag '\" + tagName + \"' is an invalid name.\";\n }\n return getErrorObject(\"InvalidTag\", msg, getLineNumberForPosition(xmlData, i));\n }\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return getErrorObject(\"InvalidAttr\", \"Attributes for '\" + tagName + \"' have open quote.\", getLineNumberForPosition(xmlData, i));\n }\n let attrStr = result.value;\n i = result.index;\n if (attrStr[attrStr.length - 1] === \"/\") {\n const attrStrStart = i - attrStr.length;\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n } else {\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));\n }\n } else if (closingTag) {\n if (!result.tagClosed) {\n return getErrorObject(\"InvalidTag\", \"Closing tag '\" + tagName + \"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n } else if (attrStr.trim().length > 0) {\n return getErrorObject(\"InvalidTag\", \"Closing tag '\" + tagName + \"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else if (tags.length === 0) {\n return getErrorObject(\"InvalidTag\", \"Closing tag '\" + tagName + \"' has not been opened.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else {\n const otg = tags.pop();\n if (tagName !== otg.tagName) {\n let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);\n return getErrorObject(\n \"InvalidTag\",\n \"Expected closing tag '\" + otg.tagName + \"' (opened in line \" + openPos.line + \", col \" + openPos.col + \") instead of closing tag '\" + tagName + \"'.\",\n getLineNumberForPosition(xmlData, tagStartPos)\n );\n }\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n if (reachedRoot === true) {\n return getErrorObject(\"InvalidXml\", \"Multiple possible root nodes found.\", getLineNumberForPosition(xmlData, i));\n } else if (options.unpairedTags.indexOf(tagName) !== -1) ;\n else {\n tags.push({ tagName, tagStartPos });\n }\n tagFound = true;\n }\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"!\") {\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else if (xmlData[i + 1] === \"?\") {\n i = readPI(xmlData, ++i);\n if (i.err) return i;\n } else {\n break;\n }\n } else if (xmlData[i] === \"&\") {\n const afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1)\n return getErrorObject(\"InvalidChar\", \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n } else {\n if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {\n return getErrorObject(\"InvalidXml\", \"Extra text at the end\", getLineNumberForPosition(xmlData, i));\n }\n }\n }\n if (xmlData[i] === \"<\") {\n i--;\n }\n }\n } else {\n if (isWhiteSpace(xmlData[i])) {\n continue;\n }\n return getErrorObject(\"InvalidChar\", \"char '\" + xmlData[i] + \"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n if (!tagFound) {\n return getErrorObject(\"InvalidXml\", \"Start tag expected.\", 1);\n } else if (tags.length == 1) {\n return getErrorObject(\"InvalidTag\", \"Unclosed tag '\" + tags[0].tagName + \"'.\", getLineNumberForPosition(xmlData, tags[0].tagStartPos));\n } else if (tags.length > 0) {\n return getErrorObject(\"InvalidXml\", \"Invalid '\" + JSON.stringify(tags.map((t2) => t2.tagName), null, 4).replace(/\\r?\\n/g, \"\") + \"' found.\", { line: 1, col: 1 });\n }\n return true;\n};\nfunction isWhiteSpace(char) {\n return char === \" \" || char === \"\t\" || char === \"\\n\" || char === \"\\r\";\n}\nfunction readPI(xmlData, i) {\n const start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == \"?\" || xmlData[i] == \" \") {\n const tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === \"xml\") {\n return getErrorObject(\"InvalidXml\", \"XML declaration allowed only at the start of the document.\", getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == \"?\" && xmlData[i + 1] == \">\") {\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \"-\") {\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === \"-\" && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n } else if (xmlData.length > i + 8 && xmlData[i + 1] === \"D\" && xmlData[i + 2] === \"O\" && xmlData[i + 3] === \"C\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"Y\" && xmlData[i + 6] === \"P\" && xmlData[i + 7] === \"E\") {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n angleBracketsCount++;\n } else if (xmlData[i] === \">\") {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (xmlData.length > i + 9 && xmlData[i + 1] === \"[\" && xmlData[i + 2] === \"C\" && xmlData[i + 3] === \"D\" && xmlData[i + 4] === \"A\" && xmlData[i + 5] === \"T\" && xmlData[i + 6] === \"A\" && xmlData[i + 7] === \"[\") {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"]\" && xmlData[i + 1] === \"]\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n }\n return i;\n}\nconst doubleQuote = '\"';\nconst singleQuote = \"'\";\nfunction readAttributeStr(xmlData, i) {\n let attrStr = \"\";\n let startChar = \"\";\n let tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === \"\") {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) ;\n else {\n startChar = \"\";\n }\n } else if (xmlData[i] === \">\") {\n if (startChar === \"\") {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== \"\") {\n return false;\n }\n return {\n value: attrStr,\n index: i,\n tagClosed\n };\n}\nconst validAttrStrRegxp = new RegExp(`(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\"])(([\\\\s\\\\S])*?)\\\\5)?`, \"g\");\nfunction validateAttributeString(attrStr, options) {\n const matches = util$2.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n for (let i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + matches[i][2] + \"' has no space in starting.\", getPositionFromMatch(matches[i]));\n } else if (matches[i][3] !== void 0 && matches[i][4] === void 0) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + matches[i][2] + \"' is without value.\", getPositionFromMatch(matches[i]));\n } else if (matches[i][3] === void 0 && !options.allowBooleanAttributes) {\n return getErrorObject(\"InvalidAttr\", \"boolean attribute '\" + matches[i][2] + \"' is not allowed.\", getPositionFromMatch(matches[i]));\n }\n const attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + attrName + \"' is an invalid name.\", getPositionFromMatch(matches[i]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n attrNames[attrName] = 1;\n } else {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + attrName + \"' is repeated.\", getPositionFromMatch(matches[i]));\n }\n }\n return true;\n}\nfunction validateNumberAmpersand(xmlData, i) {\n let re2 = /\\d/;\n if (xmlData[i] === \"x\") {\n i++;\n re2 = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \";\")\n return i;\n if (!xmlData[i].match(re2))\n break;\n }\n return -1;\n}\nfunction validateAmpersand(xmlData, i) {\n i++;\n if (xmlData[i] === \";\")\n return -1;\n if (xmlData[i] === \"#\") {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n let count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i] === \";\")\n break;\n return -1;\n }\n return i;\n}\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code,\n msg: message,\n line: lineNumber.line || lineNumber,\n col: lineNumber.col\n }\n };\n}\nfunction validateAttrName(attrName) {\n return util$2.isName(attrName);\n}\nfunction validateTagName(tagname) {\n return util$2.isName(tagname);\n}\nfunction getLineNumberForPosition(xmlData, index) {\n const lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return {\n line: lines.length,\n // column number is last line's length + 1, because column numbering starts at 1:\n col: lines[lines.length - 1].length + 1\n };\n}\nfunction getPositionFromMatch(match) {\n return match.startIndex + match[1].length;\n}\nvar OptionsBuilder = {};\nconst defaultOptions$1 = {\n preserveOrder: false,\n attributeNamePrefix: \"@_\",\n attributesGroupName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n removeNSPrefix: false,\n // remove NS from tag name or attribute name if true\n allowBooleanAttributes: false,\n //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: true,\n parseAttributeValue: false,\n trimValues: true,\n //Trim string values of tag and attributes\n cdataPropName: false,\n numberParseOptions: {\n hex: true,\n leadingZeros: true,\n eNotation: true\n },\n tagValueProcessor: function(tagName, val2) {\n return val2;\n },\n attributeValueProcessor: function(attrName, val2) {\n return val2;\n },\n stopNodes: [],\n //nested tags will not be parsed even for errors\n alwaysCreateTextNode: false,\n isArray: () => false,\n commentPropName: false,\n unpairedTags: [],\n processEntities: true,\n htmlEntities: false,\n ignoreDeclaration: false,\n ignorePiTags: false,\n transformTagName: false,\n transformAttributeName: false,\n updateTag: function(tagName, jPath, attrs) {\n return tagName;\n }\n // skipEmptyListItem: false\n};\nconst buildOptions$1 = function(options) {\n return Object.assign({}, defaultOptions$1, options);\n};\nOptionsBuilder.buildOptions = buildOptions$1;\nOptionsBuilder.defaultOptions = defaultOptions$1;\nclass XmlNode {\n constructor(tagname) {\n this.tagname = tagname;\n this.child = [];\n this[\":@\"] = {};\n }\n add(key, val2) {\n if (key === \"__proto__\") key = \"#__proto__\";\n this.child.push({ [key]: val2 });\n }\n addChild(node) {\n if (node.tagname === \"__proto__\") node.tagname = \"#__proto__\";\n if (node[\":@\"] && Object.keys(node[\":@\"]).length > 0) {\n this.child.push({ [node.tagname]: node.child, [\":@\"]: node[\":@\"] });\n } else {\n this.child.push({ [node.tagname]: node.child });\n }\n }\n}\nvar xmlNode$1 = XmlNode;\nconst util$1 = util$3;\nfunction readDocType$1(xmlData, i) {\n const entities = {};\n if (xmlData[i + 3] === \"O\" && xmlData[i + 4] === \"C\" && xmlData[i + 5] === \"T\" && xmlData[i + 6] === \"Y\" && xmlData[i + 7] === \"P\" && xmlData[i + 8] === \"E\") {\n i = i + 9;\n let angleBracketsCount = 1;\n let hasBody = false, comment = false;\n let exp = \"\";\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\" && !comment) {\n if (hasBody && isEntity(xmlData, i)) {\n i += 7;\n [entityName, val, i] = readEntityExp(xmlData, i + 1);\n if (val.indexOf(\"&\") === -1)\n entities[validateEntityName(entityName)] = {\n regx: RegExp(`&${entityName};`, \"g\"),\n val\n };\n } else if (hasBody && isElement(xmlData, i)) i += 8;\n else if (hasBody && isAttlist(xmlData, i)) i += 8;\n else if (hasBody && isNotation(xmlData, i)) i += 9;\n else if (isComment) comment = true;\n else throw new Error(\"Invalid DOCTYPE\");\n angleBracketsCount++;\n exp = \"\";\n } else if (xmlData[i] === \">\") {\n if (comment) {\n if (xmlData[i - 1] === \"-\" && xmlData[i - 2] === \"-\") {\n comment = false;\n angleBracketsCount--;\n }\n } else {\n angleBracketsCount--;\n }\n if (angleBracketsCount === 0) {\n break;\n }\n } else if (xmlData[i] === \"[\") {\n hasBody = true;\n } else {\n exp += xmlData[i];\n }\n }\n if (angleBracketsCount !== 0) {\n throw new Error(`Unclosed DOCTYPE`);\n }\n } else {\n throw new Error(`Invalid Tag instead of DOCTYPE`);\n }\n return { entities, i };\n}\nfunction readEntityExp(xmlData, i) {\n let entityName2 = \"\";\n for (; i < xmlData.length && (xmlData[i] !== \"'\" && xmlData[i] !== '\"'); i++) {\n entityName2 += xmlData[i];\n }\n entityName2 = entityName2.trim();\n if (entityName2.indexOf(\" \") !== -1) throw new Error(\"External entites are not supported\");\n const startChar = xmlData[i++];\n let val2 = \"\";\n for (; i < xmlData.length && xmlData[i] !== startChar; i++) {\n val2 += xmlData[i];\n }\n return [entityName2, val2, i];\n}\nfunction isComment(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"-\" && xmlData[i + 3] === \"-\") return true;\n return false;\n}\nfunction isEntity(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"E\" && xmlData[i + 3] === \"N\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"I\" && xmlData[i + 6] === \"T\" && xmlData[i + 7] === \"Y\") return true;\n return false;\n}\nfunction isElement(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"E\" && xmlData[i + 3] === \"L\" && xmlData[i + 4] === \"E\" && xmlData[i + 5] === \"M\" && xmlData[i + 6] === \"E\" && xmlData[i + 7] === \"N\" && xmlData[i + 8] === \"T\") return true;\n return false;\n}\nfunction isAttlist(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"A\" && xmlData[i + 3] === \"T\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"L\" && xmlData[i + 6] === \"I\" && xmlData[i + 7] === \"S\" && xmlData[i + 8] === \"T\") return true;\n return false;\n}\nfunction isNotation(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"N\" && xmlData[i + 3] === \"O\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"A\" && xmlData[i + 6] === \"T\" && xmlData[i + 7] === \"I\" && xmlData[i + 8] === \"O\" && xmlData[i + 9] === \"N\") return true;\n return false;\n}\nfunction validateEntityName(name) {\n if (util$1.isName(name))\n return name;\n else\n throw new Error(`Invalid entity name ${name}`);\n}\nvar DocTypeReader = readDocType$1;\nconst hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\nconst numRegex = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\nif (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n}\nconst consider = {\n hex: true,\n leadingZeros: true,\n decimalPoint: \".\",\n eNotation: true\n //skipLike: /regex/\n};\nfunction toNumber$1(str, options = {}) {\n options = Object.assign({}, consider, options);\n if (!str || typeof str !== \"string\") return str;\n let trimmedStr = str.trim();\n if (options.skipLike !== void 0 && options.skipLike.test(trimmedStr)) return str;\n else if (options.hex && hexRegex.test(trimmedStr)) {\n return Number.parseInt(trimmedStr, 16);\n } else {\n const match = numRegex.exec(trimmedStr);\n if (match) {\n const sign = match[1];\n const leadingZeros = match[2];\n let numTrimmedByZeros = trimZeros(match[3]);\n const eNotation = match[4] || match[6];\n if (!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== \".\") return str;\n else if (!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== \".\") return str;\n else {\n const num = Number(trimmedStr);\n const numStr = \"\" + num;\n if (numStr.search(/[eE]/) !== -1) {\n if (options.eNotation) return num;\n else return str;\n } else if (eNotation) {\n if (options.eNotation) return num;\n else return str;\n } else if (trimmedStr.indexOf(\".\") !== -1) {\n if (numStr === \"0\" && numTrimmedByZeros === \"\") return num;\n else if (numStr === numTrimmedByZeros) return num;\n else if (sign && numStr === \"-\" + numTrimmedByZeros) return num;\n else return str;\n }\n if (leadingZeros) {\n if (numTrimmedByZeros === numStr) return num;\n else if (sign + numTrimmedByZeros === numStr) return num;\n else return str;\n }\n if (trimmedStr === numStr) return num;\n else if (trimmedStr === sign + numStr) return num;\n return str;\n }\n } else {\n return str;\n }\n }\n}\nfunction trimZeros(numStr) {\n if (numStr && numStr.indexOf(\".\") !== -1) {\n numStr = numStr.replace(/0+$/, \"\");\n if (numStr === \".\") numStr = \"0\";\n else if (numStr[0] === \".\") numStr = \"0\" + numStr;\n else if (numStr[numStr.length - 1] === \".\") numStr = numStr.substr(0, numStr.length - 1);\n return numStr;\n }\n return numStr;\n}\nvar strnum = toNumber$1;\nconst util = util$3;\nconst xmlNode = xmlNode$1;\nconst readDocType = DocTypeReader;\nconst toNumber = strnum;\nlet OrderedObjParser$1 = class OrderedObjParser {\n constructor(options) {\n this.options = options;\n this.currentNode = null;\n this.tagsNodeStack = [];\n this.docTypeEntities = {};\n this.lastEntities = {\n \"apos\": { regex: /&(apos|#39|#x27);/g, val: \"'\" },\n \"gt\": { regex: /&(gt|#62|#x3E);/g, val: \">\" },\n \"lt\": { regex: /&(lt|#60|#x3C);/g, val: \"<\" },\n \"quot\": { regex: /&(quot|#34|#x22);/g, val: '\"' }\n };\n this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: \"&\" };\n this.htmlEntities = {\n \"space\": { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n \"cent\": { regex: /&(cent|#162);/g, val: \"¢\" },\n \"pound\": { regex: /&(pound|#163);/g, val: \"£\" },\n \"yen\": { regex: /&(yen|#165);/g, val: \"¥\" },\n \"euro\": { regex: /&(euro|#8364);/g, val: \"€\" },\n \"copyright\": { regex: /&(copy|#169);/g, val: \"©\" },\n \"reg\": { regex: /&(reg|#174);/g, val: \"®\" },\n \"inr\": { regex: /&(inr|#8377);/g, val: \"₹\" },\n \"num_dec\": { regex: /&#([0-9]{1,7});/g, val: (_, str) => String.fromCharCode(Number.parseInt(str, 10)) },\n \"num_hex\": { regex: /&#x([0-9a-fA-F]{1,6});/g, val: (_, str) => String.fromCharCode(Number.parseInt(str, 16)) }\n };\n this.addExternalEntities = addExternalEntities;\n this.parseXml = parseXml;\n this.parseTextData = parseTextData;\n this.resolveNameSpace = resolveNameSpace;\n this.buildAttributesMap = buildAttributesMap;\n this.isItStopNode = isItStopNode;\n this.replaceEntitiesValue = replaceEntitiesValue$1;\n this.readStopNodeData = readStopNodeData;\n this.saveTextToParentTag = saveTextToParentTag;\n this.addChild = addChild;\n }\n};\nfunction addExternalEntities(externalEntities) {\n const entKeys = Object.keys(externalEntities);\n for (let i = 0; i < entKeys.length; i++) {\n const ent = entKeys[i];\n this.lastEntities[ent] = {\n regex: new RegExp(\"&\" + ent + \";\", \"g\"),\n val: externalEntities[ent]\n };\n }\n}\nfunction parseTextData(val2, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n if (val2 !== void 0) {\n if (this.options.trimValues && !dontTrim) {\n val2 = val2.trim();\n }\n if (val2.length > 0) {\n if (!escapeEntities) val2 = this.replaceEntitiesValue(val2);\n const newval = this.options.tagValueProcessor(tagName, val2, jPath, hasAttributes, isLeafNode);\n if (newval === null || newval === void 0) {\n return val2;\n } else if (typeof newval !== typeof val2 || newval !== val2) {\n return newval;\n } else if (this.options.trimValues) {\n return parseValue(val2, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n const trimmedVal = val2.trim();\n if (trimmedVal === val2) {\n return parseValue(val2, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n return val2;\n }\n }\n }\n }\n}\nfunction resolveNameSpace(tagname) {\n if (this.options.removeNSPrefix) {\n const tags = tagname.split(\":\");\n const prefix = tagname.charAt(0) === \"/\" ? \"/\" : \"\";\n if (tags[0] === \"xmlns\") {\n return \"\";\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\nconst attrsRegx = new RegExp(`([^\\\\s=]+)\\\\s*(=\\\\s*(['\"])([\\\\s\\\\S]*?)\\\\3)?`, \"gm\");\nfunction buildAttributesMap(attrStr, jPath, tagName) {\n if (!this.options.ignoreAttributes && typeof attrStr === \"string\") {\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const len = matches.length;\n const attrs = {};\n for (let i = 0; i < len; i++) {\n const attrName = this.resolveNameSpace(matches[i][1]);\n let oldVal = matches[i][4];\n let aName = this.options.attributeNamePrefix + attrName;\n if (attrName.length) {\n if (this.options.transformAttributeName) {\n aName = this.options.transformAttributeName(aName);\n }\n if (aName === \"__proto__\") aName = \"#__proto__\";\n if (oldVal !== void 0) {\n if (this.options.trimValues) {\n oldVal = oldVal.trim();\n }\n oldVal = this.replaceEntitiesValue(oldVal);\n const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);\n if (newVal === null || newVal === void 0) {\n attrs[aName] = oldVal;\n } else if (typeof newVal !== typeof oldVal || newVal !== oldVal) {\n attrs[aName] = newVal;\n } else {\n attrs[aName] = parseValue(\n oldVal,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n }\n } else if (this.options.allowBooleanAttributes) {\n attrs[aName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (this.options.attributesGroupName) {\n const attrCollection = {};\n attrCollection[this.options.attributesGroupName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\nconst parseXml = function(xmlData) {\n xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\");\n const xmlObj = new xmlNode(\"!xml\");\n let currentNode = xmlObj;\n let textData = \"\";\n let jPath = \"\";\n for (let i = 0; i < xmlData.length; i++) {\n const ch = xmlData[i];\n if (ch === \"<\") {\n if (xmlData[i + 1] === \"/\") {\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\");\n let tagName = xmlData.substring(i + 2, closeIndex).trim();\n if (this.options.removeNSPrefix) {\n const colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n }\n }\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n if (currentNode) {\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n }\n const lastTagName = jPath.substring(jPath.lastIndexOf(\".\") + 1);\n if (tagName && this.options.unpairedTags.indexOf(tagName) !== -1) {\n throw new Error(`Unpaired tag can not be used as closing tag: `);\n }\n let propIndex = 0;\n if (lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1) {\n propIndex = jPath.lastIndexOf(\".\", jPath.lastIndexOf(\".\") - 1);\n this.tagsNodeStack.pop();\n } else {\n propIndex = jPath.lastIndexOf(\".\");\n }\n jPath = jPath.substring(0, propIndex);\n currentNode = this.tagsNodeStack.pop();\n textData = \"\";\n i = closeIndex;\n } else if (xmlData[i + 1] === \"?\") {\n let tagData = readTagExp(xmlData, i, false, \"?>\");\n if (!tagData) throw new Error(\"Pi Tag is not closed.\");\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n if (this.options.ignoreDeclaration && tagData.tagName === \"?xml\" || this.options.ignorePiTags) ;\n else {\n const childNode = new xmlNode(tagData.tagName);\n childNode.add(this.options.textNodeName, \"\");\n if (tagData.tagName !== tagData.tagExp && tagData.attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n }\n i = tagData.closeIndex + 1;\n } else if (xmlData.substr(i + 1, 3) === \"!--\") {\n const endIndex = findClosingIndex(xmlData, \"-->\", i + 4, \"Comment is not closed.\");\n if (this.options.commentPropName) {\n const comment = xmlData.substring(i + 4, endIndex - 2);\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n currentNode.add(this.options.commentPropName, [{ [this.options.textNodeName]: comment }]);\n }\n i = endIndex;\n } else if (xmlData.substr(i + 1, 2) === \"!D\") {\n const result = readDocType(xmlData, i);\n this.docTypeEntities = result.entities;\n i = result.i;\n } else if (xmlData.substr(i + 1, 2) === \"![\") {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2;\n const tagExp = xmlData.substring(i + 9, closeIndex);\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n let val2 = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);\n if (val2 == void 0) val2 = \"\";\n if (this.options.cdataPropName) {\n currentNode.add(this.options.cdataPropName, [{ [this.options.textNodeName]: tagExp }]);\n } else {\n currentNode.add(this.options.textNodeName, val2);\n }\n i = closeIndex + 2;\n } else {\n let result = readTagExp(xmlData, i, this.options.removeNSPrefix);\n let tagName = result.tagName;\n const rawTagName = result.rawTagName;\n let tagExp = result.tagExp;\n let attrExpPresent = result.attrExpPresent;\n let closeIndex = result.closeIndex;\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n if (currentNode && textData) {\n if (currentNode.tagname !== \"!xml\") {\n textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n }\n }\n const lastTag = currentNode;\n if (lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1) {\n currentNode = this.tagsNodeStack.pop();\n jPath = jPath.substring(0, jPath.lastIndexOf(\".\"));\n }\n if (tagName !== xmlObj.tagname) {\n jPath += jPath ? \".\" + tagName : tagName;\n }\n if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) {\n let tagContent = \"\";\n if (tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n i = result.closeIndex;\n } else if (this.options.unpairedTags.indexOf(tagName) !== -1) {\n i = result.closeIndex;\n } else {\n const result2 = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n if (!result2) throw new Error(`Unexpected end of ${rawTagName}`);\n i = result2.i;\n tagContent = result2.tagContent;\n }\n const childNode = new xmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n if (tagContent) {\n tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);\n }\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n childNode.add(this.options.textNodeName, tagContent);\n this.addChild(currentNode, childNode, jPath);\n } else {\n if (tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n const childNode = new xmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n } else {\n const childNode = new xmlNode(tagName);\n this.tagsNodeStack.push(currentNode);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n currentNode = childNode;\n }\n textData = \"\";\n i = closeIndex;\n }\n }\n } else {\n textData += xmlData[i];\n }\n }\n return xmlObj.child;\n};\nfunction addChild(currentNode, childNode, jPath) {\n const result = this.options.updateTag(childNode.tagname, jPath, childNode[\":@\"]);\n if (result === false) ;\n else if (typeof result === \"string\") {\n childNode.tagname = result;\n currentNode.addChild(childNode);\n } else {\n currentNode.addChild(childNode);\n }\n}\nconst replaceEntitiesValue$1 = function(val2) {\n if (this.options.processEntities) {\n for (let entityName2 in this.docTypeEntities) {\n const entity = this.docTypeEntities[entityName2];\n val2 = val2.replace(entity.regx, entity.val);\n }\n for (let entityName2 in this.lastEntities) {\n const entity = this.lastEntities[entityName2];\n val2 = val2.replace(entity.regex, entity.val);\n }\n if (this.options.htmlEntities) {\n for (let entityName2 in this.htmlEntities) {\n const entity = this.htmlEntities[entityName2];\n val2 = val2.replace(entity.regex, entity.val);\n }\n }\n val2 = val2.replace(this.ampEntity.regex, this.ampEntity.val);\n }\n return val2;\n};\nfunction saveTextToParentTag(textData, currentNode, jPath, isLeafNode) {\n if (textData) {\n if (isLeafNode === void 0) isLeafNode = Object.keys(currentNode.child).length === 0;\n textData = this.parseTextData(\n textData,\n currentNode.tagname,\n jPath,\n false,\n currentNode[\":@\"] ? Object.keys(currentNode[\":@\"]).length !== 0 : false,\n isLeafNode\n );\n if (textData !== void 0 && textData !== \"\")\n currentNode.add(this.options.textNodeName, textData);\n textData = \"\";\n }\n return textData;\n}\nfunction isItStopNode(stopNodes, jPath, currentTagName) {\n const allNodesExp = \"*.\" + currentTagName;\n for (const stopNodePath in stopNodes) {\n const stopNodeExp = stopNodes[stopNodePath];\n if (allNodesExp === stopNodeExp || jPath === stopNodeExp) return true;\n }\n return false;\n}\nfunction tagExpWithClosingIndex(xmlData, i, closingChar = \">\") {\n let attrBoundary;\n let tagExp = \"\";\n for (let index = i; index < xmlData.length; index++) {\n let ch = xmlData[index];\n if (attrBoundary) {\n if (ch === attrBoundary) attrBoundary = \"\";\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === closingChar[0]) {\n if (closingChar[1]) {\n if (xmlData[index + 1] === closingChar[1]) {\n return {\n data: tagExp,\n index\n };\n }\n } else {\n return {\n data: tagExp,\n index\n };\n }\n } else if (ch === \"\t\") {\n ch = \" \";\n }\n tagExp += ch;\n }\n}\nfunction findClosingIndex(xmlData, str, i, errMsg) {\n const closingIndex = xmlData.indexOf(str, i);\n if (closingIndex === -1) {\n throw new Error(errMsg);\n } else {\n return closingIndex + str.length - 1;\n }\n}\nfunction readTagExp(xmlData, i, removeNSPrefix, closingChar = \">\") {\n const result = tagExpWithClosingIndex(xmlData, i + 1, closingChar);\n if (!result) return;\n let tagExp = result.data;\n const closeIndex = result.index;\n const separatorIndex = tagExp.search(/\\s/);\n let tagName = tagExp;\n let attrExpPresent = true;\n if (separatorIndex !== -1) {\n tagName = tagExp.substring(0, separatorIndex);\n tagExp = tagExp.substring(separatorIndex + 1).trimStart();\n }\n const rawTagName = tagName;\n if (removeNSPrefix) {\n const colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n }\n }\n return {\n tagName,\n tagExp,\n closeIndex,\n attrExpPresent,\n rawTagName\n };\n}\nfunction readStopNodeData(xmlData, tagName, i) {\n const startIndex = i;\n let openTagCount = 1;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"/\") {\n const closeIndex = findClosingIndex(xmlData, \">\", i, `${tagName} is not closed`);\n let closeTagName = xmlData.substring(i + 2, closeIndex).trim();\n if (closeTagName === tagName) {\n openTagCount--;\n if (openTagCount === 0) {\n return {\n tagContent: xmlData.substring(startIndex, i),\n i: closeIndex\n };\n }\n }\n i = closeIndex;\n } else if (xmlData[i + 1] === \"?\") {\n const closeIndex = findClosingIndex(xmlData, \"?>\", i + 1, \"StopNode is not closed.\");\n i = closeIndex;\n } else if (xmlData.substr(i + 1, 3) === \"!--\") {\n const closeIndex = findClosingIndex(xmlData, \"-->\", i + 3, \"StopNode is not closed.\");\n i = closeIndex;\n } else if (xmlData.substr(i + 1, 2) === \"![\") {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n i = closeIndex;\n } else {\n const tagData = readTagExp(xmlData, i, \">\");\n if (tagData) {\n const openTagName = tagData && tagData.tagName;\n if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length - 1] !== \"/\") {\n openTagCount++;\n }\n i = tagData.closeIndex;\n }\n }\n }\n }\n}\nfunction parseValue(val2, shouldParse, options) {\n if (shouldParse && typeof val2 === \"string\") {\n const newval = val2.trim();\n if (newval === \"true\") return true;\n else if (newval === \"false\") return false;\n else return toNumber(val2, options);\n } else {\n if (util.isExist(val2)) {\n return val2;\n } else {\n return \"\";\n }\n }\n}\nvar OrderedObjParser_1 = OrderedObjParser$1;\nvar node2json = {};\nfunction prettify$1(node, options) {\n return compress(node, options);\n}\nfunction compress(arr, options, jPath) {\n let text;\n const compressedObj = {};\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const property = propName$1(tagObj);\n let newJpath = \"\";\n if (jPath === void 0) newJpath = property;\n else newJpath = jPath + \".\" + property;\n if (property === options.textNodeName) {\n if (text === void 0) text = tagObj[property];\n else text += \"\" + tagObj[property];\n } else if (property === void 0) {\n continue;\n } else if (tagObj[property]) {\n let val2 = compress(tagObj[property], options, newJpath);\n const isLeaf = isLeafTag(val2, options);\n if (tagObj[\":@\"]) {\n assignAttributes(val2, tagObj[\":@\"], newJpath, options);\n } else if (Object.keys(val2).length === 1 && val2[options.textNodeName] !== void 0 && !options.alwaysCreateTextNode) {\n val2 = val2[options.textNodeName];\n } else if (Object.keys(val2).length === 0) {\n if (options.alwaysCreateTextNode) val2[options.textNodeName] = \"\";\n else val2 = \"\";\n }\n if (compressedObj[property] !== void 0 && compressedObj.hasOwnProperty(property)) {\n if (!Array.isArray(compressedObj[property])) {\n compressedObj[property] = [compressedObj[property]];\n }\n compressedObj[property].push(val2);\n } else {\n if (options.isArray(property, newJpath, isLeaf)) {\n compressedObj[property] = [val2];\n } else {\n compressedObj[property] = val2;\n }\n }\n }\n }\n if (typeof text === \"string\") {\n if (text.length > 0) compressedObj[options.textNodeName] = text;\n } else if (text !== void 0) compressedObj[options.textNodeName] = text;\n return compressedObj;\n}\nfunction propName$1(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key !== \":@\") return key;\n }\n}\nfunction assignAttributes(obj, attrMap, jpath, options) {\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n const atrrName = keys[i];\n if (options.isArray(atrrName, jpath + \".\" + atrrName, true, true)) {\n obj[atrrName] = [attrMap[atrrName]];\n } else {\n obj[atrrName] = attrMap[atrrName];\n }\n }\n }\n}\nfunction isLeafTag(obj, options) {\n const { textNodeName } = options;\n const propCount = Object.keys(obj).length;\n if (propCount === 0) {\n return true;\n }\n if (propCount === 1 && (obj[textNodeName] || typeof obj[textNodeName] === \"boolean\" || obj[textNodeName] === 0)) {\n return true;\n }\n return false;\n}\nnode2json.prettify = prettify$1;\nconst { buildOptions } = OptionsBuilder;\nconst OrderedObjParser2 = OrderedObjParser_1;\nconst { prettify } = node2json;\nconst validator$1 = validator$2;\nlet XMLParser$1 = class XMLParser {\n constructor(options) {\n this.externalEntities = {};\n this.options = buildOptions(options);\n }\n /**\n * Parse XML dats to JS object \n * @param {string|Buffer} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(xmlData, validationOption) {\n if (typeof xmlData === \"string\") ;\n else if (xmlData.toString) {\n xmlData = xmlData.toString();\n } else {\n throw new Error(\"XML data is accepted in String or Bytes[] form.\");\n }\n if (validationOption) {\n if (validationOption === true) validationOption = {};\n const result = validator$1.validate(xmlData, validationOption);\n if (result !== true) {\n throw Error(`${result.err.msg}:${result.err.line}:${result.err.col}`);\n }\n }\n const orderedObjParser = new OrderedObjParser2(this.options);\n orderedObjParser.addExternalEntities(this.externalEntities);\n const orderedResult = orderedObjParser.parseXml(xmlData);\n if (this.options.preserveOrder || orderedResult === void 0) return orderedResult;\n else return prettify(orderedResult, this.options);\n }\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(key, value) {\n if (value.indexOf(\"&\") !== -1) {\n throw new Error(\"Entity value can't have '&'\");\n } else if (key.indexOf(\"&\") !== -1 || key.indexOf(\";\") !== -1) {\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for ' '\");\n } else if (value === \"&\") {\n throw new Error(\"An entity with value '&' is not permitted\");\n } else {\n this.externalEntities[key] = value;\n }\n }\n};\nvar XMLParser_1 = XMLParser$1;\nconst EOL = \"\\n\";\nfunction toXml(jArray, options) {\n let indentation = \"\";\n if (options.format && options.indentBy.length > 0) {\n indentation = EOL;\n }\n return arrToStr(jArray, options, \"\", indentation);\n}\nfunction arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const tagName = propName(tagObj);\n if (tagName === void 0) continue;\n let newJPath = \"\";\n if (jPath.length === 0) newJPath = tagName;\n else newJPath = `${jPath}.${tagName}`;\n if (tagName === options.textNodeName) {\n let tagText = tagObj[tagName];\n if (!isStopNode(newJPath, options)) {\n tagText = options.tagValueProcessor(tagName, tagText);\n tagText = replaceEntitiesValue(tagText, options);\n }\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += tagText;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.cdataPropName) {\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += ``;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + ``;\n isPreviousElementTag = true;\n continue;\n } else if (tagName[0] === \"?\") {\n const attStr2 = attr_to_str(tagObj[\":@\"], options);\n const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\";\n xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr2}?>`;\n isPreviousElementTag = true;\n continue;\n }\n let newIdentation = indentation;\n if (newIdentation !== \"\") {\n newIdentation += options.indentBy;\n }\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tagStart = indentation + `<${tagName}${attStr}`;\n const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n if (options.unpairedTags.indexOf(tagName) !== -1) {\n if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n else xmlStr += tagStart + \"/>\";\n } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n xmlStr += tagStart + \"/>\";\n } else if (tagValue && tagValue.endsWith(\">\")) {\n xmlStr += tagStart + `>${tagValue}${indentation}`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"`;\n }\n isPreviousElementTag = true;\n }\n return xmlStr;\n}\nfunction propName(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (!obj.hasOwnProperty(key)) continue;\n if (key !== \":@\") return key;\n }\n}\nfunction attr_to_str(attrMap, options) {\n let attrStr = \"\";\n if (attrMap && !options.ignoreAttributes) {\n for (let attr in attrMap) {\n if (!attrMap.hasOwnProperty(attr)) continue;\n let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n attrVal = replaceEntitiesValue(attrVal, options);\n if (attrVal === true && options.suppressBooleanAttributes) {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n } else {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n }\n }\n }\n return attrStr;\n}\nfunction isStopNode(jPath, options) {\n jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n for (let index in options.stopNodes) {\n if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n }\n return false;\n}\nfunction replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i = 0; i < options.entities.length; i++) {\n const entity = options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\nvar orderedJs2Xml = toXml;\nconst buildFromOrderedJs = orderedJs2Xml;\nconst defaultOptions = {\n attributeNamePrefix: \"@_\",\n attributesGroupName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n cdataPropName: false,\n format: false,\n indentBy: \" \",\n suppressEmptyNode: false,\n suppressUnpairedNode: true,\n suppressBooleanAttributes: true,\n tagValueProcessor: function(key, a) {\n return a;\n },\n attributeValueProcessor: function(attrName, a) {\n return a;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },\n //it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"'\", \"g\"), val: \"'\" },\n { regex: new RegExp('\"', \"g\"), val: \""\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n};\nfunction Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes || this.options.attributesGroupName) {\n this.isAttribute = function() {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n this.processTextOrObjNode = processTextOrObjNode;\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = \">\\n\";\n this.newLine = \"\\n\";\n } else {\n this.indentate = function() {\n return \"\";\n };\n this.tagEndChar = \">\";\n this.newLine = \"\";\n }\n}\nBuilder.prototype.build = function(jObj) {\n if (this.options.preserveOrder) {\n return buildFromOrderedJs(jObj, this.options);\n } else {\n if (Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1) {\n jObj = {\n [this.options.arrayNodeName]: jObj\n };\n }\n return this.j2x(jObj, 0).val;\n }\n};\nBuilder.prototype.j2x = function(jObj, level) {\n let attrStr = \"\";\n let val2 = \"\";\n for (let key in jObj) {\n if (!Object.prototype.hasOwnProperty.call(jObj, key)) continue;\n if (typeof jObj[key] === \"undefined\") {\n if (this.isAttribute(key)) {\n val2 += \"\";\n }\n } else if (jObj[key] === null) {\n if (this.isAttribute(key)) {\n val2 += \"\";\n } else if (key[0] === \"?\") {\n val2 += this.indentate(level) + \"<\" + key + \"?\" + this.tagEndChar;\n } else {\n val2 += this.indentate(level) + \"<\" + key + \"/\" + this.tagEndChar;\n }\n } else if (jObj[key] instanceof Date) {\n val2 += this.buildTextValNode(jObj[key], key, \"\", level);\n } else if (typeof jObj[key] !== \"object\") {\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += this.buildAttrPairStr(attr, \"\" + jObj[key]);\n } else {\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, \"\" + jObj[key]);\n val2 += this.replaceEntitiesValue(newval);\n } else {\n val2 += this.buildTextValNode(jObj[key], key, \"\", level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n const arrLen = jObj[key].length;\n let listTagVal = \"\";\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === \"undefined\") ;\n else if (item === null) {\n if (key[0] === \"?\") val2 += this.indentate(level) + \"<\" + key + \"?\" + this.tagEndChar;\n else val2 += this.indentate(level) + \"<\" + key + \"/\" + this.tagEndChar;\n } else if (typeof item === \"object\") {\n if (this.options.oneListGroup) {\n listTagVal += this.j2x(item, level + 1).val;\n } else {\n listTagVal += this.processTextOrObjNode(item, key, level);\n }\n } else {\n listTagVal += this.buildTextValNode(item, key, \"\", level);\n }\n }\n if (this.options.oneListGroup) {\n listTagVal = this.buildObjectNode(listTagVal, key, \"\", level);\n }\n val2 += listTagVal;\n } else {\n if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += this.buildAttrPairStr(Ks[j], \"\" + jObj[key][Ks[j]]);\n }\n } else {\n val2 += this.processTextOrObjNode(jObj[key], key, level);\n }\n }\n }\n return { attrStr, val: val2 };\n};\nBuilder.prototype.buildAttrPairStr = function(attrName, val2) {\n val2 = this.options.attributeValueProcessor(attrName, \"\" + val2);\n val2 = this.replaceEntitiesValue(val2);\n if (this.options.suppressBooleanAttributes && val2 === \"true\") {\n return \" \" + attrName;\n } else return \" \" + attrName + '=\"' + val2 + '\"';\n};\nfunction processTextOrObjNode(object, key, level) {\n const result = this.j2x(object, level + 1);\n if (object[this.options.textNodeName] !== void 0 && Object.keys(object).length === 1) {\n return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n } else {\n return this.buildObjectNode(result.val, key, result.attrStr, level);\n }\n}\nBuilder.prototype.buildObjectNode = function(val2, key, attrStr, level) {\n if (val2 === \"\") {\n if (key[0] === \"?\") return this.indentate(level) + \"<\" + key + attrStr + \"?\" + this.tagEndChar;\n else {\n return this.indentate(level) + \"<\" + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }\n } else {\n let tagEndExp = \"\" + val2 + tagEndExp;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `` + this.newLine;\n } else {\n return this.indentate(level) + \"<\" + key + attrStr + piClosingChar + this.tagEndChar + val2 + this.indentate(level) + tagEndExp;\n }\n }\n};\nBuilder.prototype.closeTag = function(key) {\n let closeTag = \"\";\n if (this.options.unpairedTags.indexOf(key) !== -1) {\n if (!this.options.suppressUnpairedNode) closeTag = \"/\";\n } else if (this.options.suppressEmptyNode) {\n closeTag = \"/\";\n } else {\n closeTag = `>` + this.newLine;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `` + this.newLine;\n } else if (key[0] === \"?\") {\n return this.indentate(level) + \"<\" + key + attrStr + \"?\" + this.tagEndChar;\n } else {\n let textValue = this.options.tagValueProcessor(key, val2);\n textValue = this.replaceEntitiesValue(textValue);\n if (textValue === \"\") {\n return this.indentate(level) + \"<\" + key + attrStr + this.closeTag(key) + this.tagEndChar;\n } else {\n return this.indentate(level) + \"<\" + key + attrStr + \">\" + textValue + \" 0 && this.options.processEntities) {\n for (let i = 0; i < this.options.entities.length; i++) {\n const entity = this.options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n};\nfunction indentate(level) {\n return this.options.indentBy.repeat(level);\n}\nfunction isAttribute(name) {\n if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {\n return name.substr(this.attrPrefixLen);\n } else {\n return false;\n }\n}\nvar json2xml = Builder;\nconst validator = validator$2;\nconst XMLParser2 = XMLParser_1;\nconst XMLBuilder = json2xml;\nvar fxp = {\n XMLParser: XMLParser2,\n XMLValidator: validator,\n XMLBuilder\n};\nfunction isSvg(string) {\n if (typeof string !== \"string\") {\n throw new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n }\n string = string.trim();\n if (string.length === 0) {\n return false;\n }\n if (fxp.XMLValidator.validate(string) !== true) {\n return false;\n }\n let jsonObject;\n const parser = new fxp.XMLParser();\n try {\n jsonObject = parser.parse(string);\n } catch {\n return false;\n }\n if (!jsonObject) {\n return false;\n }\n if (!Object.keys(jsonObject).some((x) => x.toLowerCase() === \"svg\")) {\n return false;\n }\n return true;\n}\nclass View {\n _view;\n constructor(view) {\n isValidView(view);\n this._view = view;\n }\n get id() {\n return this._view.id;\n }\n get name() {\n return this._view.name;\n }\n get caption() {\n return this._view.caption;\n }\n get emptyTitle() {\n return this._view.emptyTitle;\n }\n get emptyCaption() {\n return this._view.emptyCaption;\n }\n get getContents() {\n return this._view.getContents;\n }\n get icon() {\n return this._view.icon;\n }\n set icon(icon) {\n this._view.icon = icon;\n }\n get order() {\n return this._view.order;\n }\n set order(order) {\n this._view.order = order;\n }\n get params() {\n return this._view.params;\n }\n set params(params) {\n this._view.params = params;\n }\n get columns() {\n return this._view.columns;\n }\n get emptyView() {\n return this._view.emptyView;\n }\n get parent() {\n return this._view.parent;\n }\n get sticky() {\n return this._view.sticky;\n }\n get expanded() {\n return this._view.expanded;\n }\n set expanded(expanded) {\n this._view.expanded = expanded;\n }\n get defaultSortKey() {\n return this._view.defaultSortKey;\n }\n}\nconst isValidView = function(view) {\n if (!view.id || typeof view.id !== \"string\") {\n throw new Error(\"View id is required and must be a string\");\n }\n if (!view.name || typeof view.name !== \"string\") {\n throw new Error(\"View name is required and must be a string\");\n }\n if (view.columns && view.columns.length > 0 && (!view.caption || typeof view.caption !== \"string\")) {\n throw new Error(\"View caption is required for top-level views and must be a string\");\n }\n if (!view.getContents || typeof view.getContents !== \"function\") {\n throw new Error(\"View getContents is required and must be a function\");\n }\n if (!view.icon || typeof view.icon !== \"string\" || !isSvg(view.icon)) {\n throw new Error(\"View icon is required and must be a valid svg string\");\n }\n if (!(\"order\" in view) || typeof view.order !== \"number\") {\n throw new Error(\"View order is required and must be a number\");\n }\n if (view.columns) {\n view.columns.forEach((column) => {\n if (!(column instanceof Column)) {\n throw new Error(\"View columns must be an array of Column. Invalid column found\");\n }\n });\n }\n if (view.emptyView && typeof view.emptyView !== \"function\") {\n throw new Error(\"View emptyView must be a function\");\n }\n if (view.parent && typeof view.parent !== \"string\") {\n throw new Error(\"View parent must be a string\");\n }\n if (\"sticky\" in view && typeof view.sticky !== \"boolean\") {\n throw new Error(\"View sticky must be a boolean\");\n }\n if (\"expanded\" in view && typeof view.expanded !== \"boolean\") {\n throw new Error(\"View expanded must be a boolean\");\n }\n if (view.defaultSortKey && typeof view.defaultSortKey !== \"string\") {\n throw new Error(\"View defaultSortKey must be a string\");\n }\n return true;\n};\nconst debug$1 = typeof process === \"object\" && process.env && process.env.NODE_DEBUG && /\\bsemver\\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error(\"SEMVER\", ...args) : () => {\n};\nvar debug_1 = debug$1;\nconst SEMVER_SPEC_VERSION = \"2.0.0\";\nconst MAX_LENGTH$1 = 256;\nconst MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */\n9007199254740991;\nconst MAX_SAFE_COMPONENT_LENGTH = 16;\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH$1 - 6;\nconst RELEASE_TYPES = [\n \"major\",\n \"premajor\",\n \"minor\",\n \"preminor\",\n \"patch\",\n \"prepatch\",\n \"prerelease\"\n];\nvar constants = {\n MAX_LENGTH: MAX_LENGTH$1,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 1,\n FLAG_LOOSE: 2\n};\nvar re$1 = { exports: {} };\n(function(module, exports) {\n const {\n MAX_SAFE_COMPONENT_LENGTH: MAX_SAFE_COMPONENT_LENGTH2,\n MAX_SAFE_BUILD_LENGTH: MAX_SAFE_BUILD_LENGTH2,\n MAX_LENGTH: MAX_LENGTH2\n } = constants;\n const debug2 = debug_1;\n exports = module.exports = {};\n const re2 = exports.re = [];\n const safeRe = exports.safeRe = [];\n const src = exports.src = [];\n const t2 = exports.t = {};\n let R = 0;\n const LETTERDASHNUMBER = \"[a-zA-Z0-9-]\";\n const safeRegexReplacements = [\n [\"\\\\s\", 1],\n [\"\\\\d\", MAX_LENGTH2],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH2]\n ];\n const makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);\n }\n return value;\n };\n const createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value);\n const index = R++;\n debug2(name, index, value);\n t2[name] = index;\n src[index] = value;\n re2[index] = new RegExp(value, isGlobal ? \"g\" : void 0);\n safeRe[index] = new RegExp(safe, isGlobal ? \"g\" : void 0);\n };\n createToken(\"NUMERICIDENTIFIER\", \"0|[1-9]\\\\d*\");\n createToken(\"NUMERICIDENTIFIERLOOSE\", \"\\\\d+\");\n createToken(\"NONNUMERICIDENTIFIER\", `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);\n createToken(\"MAINVERSION\", `(${src[t2.NUMERICIDENTIFIER]})\\\\.(${src[t2.NUMERICIDENTIFIER]})\\\\.(${src[t2.NUMERICIDENTIFIER]})`);\n createToken(\"MAINVERSIONLOOSE\", `(${src[t2.NUMERICIDENTIFIERLOOSE]})\\\\.(${src[t2.NUMERICIDENTIFIERLOOSE]})\\\\.(${src[t2.NUMERICIDENTIFIERLOOSE]})`);\n createToken(\"PRERELEASEIDENTIFIER\", `(?:${src[t2.NUMERICIDENTIFIER]}|${src[t2.NONNUMERICIDENTIFIER]})`);\n createToken(\"PRERELEASEIDENTIFIERLOOSE\", `(?:${src[t2.NUMERICIDENTIFIERLOOSE]}|${src[t2.NONNUMERICIDENTIFIER]})`);\n createToken(\"PRERELEASE\", `(?:-(${src[t2.PRERELEASEIDENTIFIER]}(?:\\\\.${src[t2.PRERELEASEIDENTIFIER]})*))`);\n createToken(\"PRERELEASELOOSE\", `(?:-?(${src[t2.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${src[t2.PRERELEASEIDENTIFIERLOOSE]})*))`);\n createToken(\"BUILDIDENTIFIER\", `${LETTERDASHNUMBER}+`);\n createToken(\"BUILD\", `(?:\\\\+(${src[t2.BUILDIDENTIFIER]}(?:\\\\.${src[t2.BUILDIDENTIFIER]})*))`);\n createToken(\"FULLPLAIN\", `v?${src[t2.MAINVERSION]}${src[t2.PRERELEASE]}?${src[t2.BUILD]}?`);\n createToken(\"FULL\", `^${src[t2.FULLPLAIN]}$`);\n createToken(\"LOOSEPLAIN\", `[v=\\\\s]*${src[t2.MAINVERSIONLOOSE]}${src[t2.PRERELEASELOOSE]}?${src[t2.BUILD]}?`);\n createToken(\"LOOSE\", `^${src[t2.LOOSEPLAIN]}$`);\n createToken(\"GTLT\", \"((?:<|>)?=?)\");\n createToken(\"XRANGEIDENTIFIERLOOSE\", `${src[t2.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);\n createToken(\"XRANGEIDENTIFIER\", `${src[t2.NUMERICIDENTIFIER]}|x|X|\\\\*`);\n createToken(\"XRANGEPLAIN\", `[v=\\\\s]*(${src[t2.XRANGEIDENTIFIER]})(?:\\\\.(${src[t2.XRANGEIDENTIFIER]})(?:\\\\.(${src[t2.XRANGEIDENTIFIER]})(?:${src[t2.PRERELEASE]})?${src[t2.BUILD]}?)?)?`);\n createToken(\"XRANGEPLAINLOOSE\", `[v=\\\\s]*(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:${src[t2.PRERELEASELOOSE]})?${src[t2.BUILD]}?)?)?`);\n createToken(\"XRANGE\", `^${src[t2.GTLT]}\\\\s*${src[t2.XRANGEPLAIN]}$`);\n createToken(\"XRANGELOOSE\", `^${src[t2.GTLT]}\\\\s*${src[t2.XRANGEPLAINLOOSE]}$`);\n createToken(\"COERCEPLAIN\", `${\"(^|[^\\\\d])(\\\\d{1,\"}${MAX_SAFE_COMPONENT_LENGTH2}})(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?`);\n createToken(\"COERCE\", `${src[t2.COERCEPLAIN]}(?:$|[^\\\\d])`);\n createToken(\"COERCEFULL\", src[t2.COERCEPLAIN] + `(?:${src[t2.PRERELEASE]})?(?:${src[t2.BUILD]})?(?:$|[^\\\\d])`);\n createToken(\"COERCERTL\", src[t2.COERCE], true);\n createToken(\"COERCERTLFULL\", src[t2.COERCEFULL], true);\n createToken(\"LONETILDE\", \"(?:~>?)\");\n createToken(\"TILDETRIM\", `(\\\\s*)${src[t2.LONETILDE]}\\\\s+`, true);\n exports.tildeTrimReplace = \"$1~\";\n createToken(\"TILDE\", `^${src[t2.LONETILDE]}${src[t2.XRANGEPLAIN]}$`);\n createToken(\"TILDELOOSE\", `^${src[t2.LONETILDE]}${src[t2.XRANGEPLAINLOOSE]}$`);\n createToken(\"LONECARET\", \"(?:\\\\^)\");\n createToken(\"CARETTRIM\", `(\\\\s*)${src[t2.LONECARET]}\\\\s+`, true);\n exports.caretTrimReplace = \"$1^\";\n createToken(\"CARET\", `^${src[t2.LONECARET]}${src[t2.XRANGEPLAIN]}$`);\n createToken(\"CARETLOOSE\", `^${src[t2.LONECARET]}${src[t2.XRANGEPLAINLOOSE]}$`);\n createToken(\"COMPARATORLOOSE\", `^${src[t2.GTLT]}\\\\s*(${src[t2.LOOSEPLAIN]})$|^$`);\n createToken(\"COMPARATOR\", `^${src[t2.GTLT]}\\\\s*(${src[t2.FULLPLAIN]})$|^$`);\n createToken(\"COMPARATORTRIM\", `(\\\\s*)${src[t2.GTLT]}\\\\s*(${src[t2.LOOSEPLAIN]}|${src[t2.XRANGEPLAIN]})`, true);\n exports.comparatorTrimReplace = \"$1$2$3\";\n createToken(\"HYPHENRANGE\", `^\\\\s*(${src[t2.XRANGEPLAIN]})\\\\s+-\\\\s+(${src[t2.XRANGEPLAIN]})\\\\s*$`);\n createToken(\"HYPHENRANGELOOSE\", `^\\\\s*(${src[t2.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${src[t2.XRANGEPLAINLOOSE]})\\\\s*$`);\n createToken(\"STAR\", \"(<|>)?=?\\\\s*\\\\*\");\n createToken(\"GTE0\", \"^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$\");\n createToken(\"GTE0PRE\", \"^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$\");\n})(re$1, re$1.exports);\nvar reExports = re$1.exports;\nconst looseOption = Object.freeze({ loose: true });\nconst emptyOpts = Object.freeze({});\nconst parseOptions$1 = (options) => {\n if (!options) {\n return emptyOpts;\n }\n if (typeof options !== \"object\") {\n return looseOption;\n }\n return options;\n};\nvar parseOptions_1 = parseOptions$1;\nconst numeric = /^[0-9]+$/;\nconst compareIdentifiers$1 = (a, b) => {\n const anum = numeric.test(a);\n const bnum = numeric.test(b);\n if (anum && bnum) {\n a = +a;\n b = +b;\n }\n return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;\n};\nconst rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a);\nvar identifiers = {\n compareIdentifiers: compareIdentifiers$1,\n rcompareIdentifiers\n};\nconst debug = debug_1;\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = constants;\nconst { safeRe: re, t } = reExports;\nconst parseOptions = parseOptions_1;\nconst { compareIdentifiers } = identifiers;\nlet SemVer$2 = class SemVer {\n constructor(version, options) {\n options = parseOptions(options);\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) {\n return version;\n } else {\n version = version.version;\n }\n } else if (typeof version !== \"string\") {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`);\n }\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n );\n }\n debug(\"SemVer\", version, options);\n this.options = options;\n this.loose = !!options.loose;\n this.includePrerelease = !!options.includePrerelease;\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`);\n }\n this.raw = version;\n this.major = +m[1];\n this.minor = +m[2];\n this.patch = +m[3];\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError(\"Invalid major version\");\n }\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError(\"Invalid minor version\");\n }\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError(\"Invalid patch version\");\n }\n if (!m[4]) {\n this.prerelease = [];\n } else {\n this.prerelease = m[4].split(\".\").map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id;\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num;\n }\n }\n return id;\n });\n }\n this.build = m[5] ? m[5].split(\".\") : [];\n this.format();\n }\n format() {\n this.version = `${this.major}.${this.minor}.${this.patch}`;\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join(\".\")}`;\n }\n return this.version;\n }\n toString() {\n return this.version;\n }\n compare(other) {\n debug(\"SemVer.compare\", this.version, this.options, other);\n if (!(other instanceof SemVer)) {\n if (typeof other === \"string\" && other === this.version) {\n return 0;\n }\n other = new SemVer(other, this.options);\n }\n if (other.version === this.version) {\n return 0;\n }\n return this.compareMain(other) || this.comparePre(other);\n }\n compareMain(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);\n }\n comparePre(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n if (this.prerelease.length && !other.prerelease.length) {\n return -1;\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1;\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0;\n }\n let i = 0;\n do {\n const a = this.prerelease[i];\n const b = other.prerelease[i];\n debug(\"prerelease compare\", i, a, b);\n if (a === void 0 && b === void 0) {\n return 0;\n } else if (b === void 0) {\n return 1;\n } else if (a === void 0) {\n return -1;\n } else if (a === b) {\n continue;\n } else {\n return compareIdentifiers(a, b);\n }\n } while (++i);\n }\n compareBuild(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n let i = 0;\n do {\n const a = this.build[i];\n const b = other.build[i];\n debug(\"build compare\", i, a, b);\n if (a === void 0 && b === void 0) {\n return 0;\n } else if (b === void 0) {\n return 1;\n } else if (a === void 0) {\n return -1;\n } else if (a === b) {\n continue;\n } else {\n return compareIdentifiers(a, b);\n }\n } while (++i);\n }\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc(release, identifier, identifierBase) {\n switch (release) {\n case \"premajor\":\n this.prerelease.length = 0;\n this.patch = 0;\n this.minor = 0;\n this.major++;\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"preminor\":\n this.prerelease.length = 0;\n this.patch = 0;\n this.minor++;\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"prepatch\":\n this.prerelease.length = 0;\n this.inc(\"patch\", identifier, identifierBase);\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"prerelease\":\n if (this.prerelease.length === 0) {\n this.inc(\"patch\", identifier, identifierBase);\n }\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"major\":\n if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {\n this.major++;\n }\n this.minor = 0;\n this.patch = 0;\n this.prerelease = [];\n break;\n case \"minor\":\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++;\n }\n this.patch = 0;\n this.prerelease = [];\n break;\n case \"patch\":\n if (this.prerelease.length === 0) {\n this.patch++;\n }\n this.prerelease = [];\n break;\n case \"pre\": {\n const base = Number(identifierBase) ? 1 : 0;\n if (!identifier && identifierBase === false) {\n throw new Error(\"invalid increment argument: identifier is empty\");\n }\n if (this.prerelease.length === 0) {\n this.prerelease = [base];\n } else {\n let i = this.prerelease.length;\n while (--i >= 0) {\n if (typeof this.prerelease[i] === \"number\") {\n this.prerelease[i]++;\n i = -2;\n }\n }\n if (i === -1) {\n if (identifier === this.prerelease.join(\".\") && identifierBase === false) {\n throw new Error(\"invalid increment argument: identifier already exists\");\n }\n this.prerelease.push(base);\n }\n }\n if (identifier) {\n let prerelease = [identifier, base];\n if (identifierBase === false) {\n prerelease = [identifier];\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease;\n }\n } else {\n this.prerelease = prerelease;\n }\n }\n break;\n }\n default:\n throw new Error(`invalid increment argument: ${release}`);\n }\n this.raw = this.format();\n if (this.build.length) {\n this.raw += `+${this.build.join(\".\")}`;\n }\n return this;\n }\n};\nvar semver = SemVer$2;\nconst SemVer$1 = semver;\nconst parse$1 = (version, options, throwErrors = false) => {\n if (version instanceof SemVer$1) {\n return version;\n }\n try {\n return new SemVer$1(version, options);\n } catch (er) {\n if (!throwErrors) {\n return null;\n }\n throw er;\n }\n};\nvar parse_1 = parse$1;\nconst parse = parse_1;\nconst valid = (version, options) => {\n const v = parse(version, options);\n return v ? v.version : null;\n};\nvar valid_1 = valid;\nconst valid$1 = /* @__PURE__ */ getDefaultExportFromCjs(valid_1);\nconst SemVer2 = semver;\nconst major = (a, loose) => new SemVer2(a, loose).major;\nvar major_1 = major;\nconst major$1 = /* @__PURE__ */ getDefaultExportFromCjs(major_1);\nclass ProxyBus {\n bus;\n constructor(bus2) {\n if (typeof bus2.getVersion !== \"function\" || !valid$1(bus2.getVersion())) {\n console.warn(\"Proxying an event bus with an unknown or invalid version\");\n } else if (major$1(bus2.getVersion()) !== major$1(this.getVersion())) {\n console.warn(\n \"Proxying an event bus of version \" + bus2.getVersion() + \" with \" + this.getVersion()\n );\n }\n this.bus = bus2;\n }\n getVersion() {\n return \"3.3.1\";\n }\n subscribe(name, handler) {\n this.bus.subscribe(name, handler);\n }\n unsubscribe(name, handler) {\n this.bus.unsubscribe(name, handler);\n }\n emit(name, event) {\n this.bus.emit(name, event);\n }\n}\nclass SimpleBus {\n handlers = /* @__PURE__ */ new Map();\n getVersion() {\n return \"3.3.1\";\n }\n subscribe(name, handler) {\n this.handlers.set(\n name,\n (this.handlers.get(name) || []).concat(\n handler\n )\n );\n }\n unsubscribe(name, handler) {\n this.handlers.set(\n name,\n (this.handlers.get(name) || []).filter((h) => h !== handler)\n );\n }\n emit(name, event) {\n (this.handlers.get(name) || []).forEach((h) => {\n try {\n h(event);\n } catch (e) {\n console.error(\"could not invoke event listener\", e);\n }\n });\n }\n}\nlet bus = null;\nfunction getBus() {\n if (bus !== null) {\n return bus;\n }\n if (typeof window === \"undefined\") {\n return new Proxy({}, {\n get: () => {\n return () => console.error(\n \"Window not available, EventBus can not be established!\"\n );\n }\n });\n }\n if (window.OC?._eventBus && typeof window._nc_event_bus === \"undefined\") {\n console.warn(\n \"found old event bus instance at OC._eventBus. Update your version!\"\n );\n window._nc_event_bus = window.OC._eventBus;\n }\n if (typeof window?._nc_event_bus !== \"undefined\") {\n bus = new ProxyBus(window._nc_event_bus);\n } else {\n bus = window._nc_event_bus = new SimpleBus();\n }\n return bus;\n}\nfunction emit(name, event) {\n getBus().emit(name, event);\n}\n/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nclass FileListFilter extends TypedEventTarget {\n id;\n order;\n constructor(id, order = 100) {\n super();\n this.id = id;\n this.order = order;\n }\n filter(nodes) {\n throw new Error(\"Not implemented\");\n }\n updateChips(chips) {\n this.dispatchTypedEvent(\"update:chips\", new CustomEvent(\"update:chips\", { detail: chips }));\n }\n filterUpdated() {\n this.dispatchTypedEvent(\"update:filter\", new CustomEvent(\"update:filter\"));\n }\n}\nfunction registerFileListFilter(filter) {\n if (!window._nc_filelist_filters) {\n window._nc_filelist_filters = /* @__PURE__ */ new Map();\n }\n if (window._nc_filelist_filters.has(filter.id)) {\n throw new Error(`File list filter \"${filter.id}\" already registered`);\n }\n window._nc_filelist_filters.set(filter.id, filter);\n emit(\"files:filter:added\", filter);\n}\nfunction unregisterFileListFilter(filterId) {\n if (window._nc_filelist_filters && window._nc_filelist_filters.has(filterId)) {\n window._nc_filelist_filters.delete(filterId);\n emit(\"files:filter:removed\", filterId);\n }\n}\nfunction getFileListFilters() {\n if (!window._nc_filelist_filters) {\n return [];\n }\n return [...window._nc_filelist_filters.values()];\n}\nconst addNewFileMenuEntry = function(entry) {\n const newFileMenu = getNewFileMenu();\n return newFileMenu.registerEntry(entry);\n};\nconst removeNewFileMenuEntry = function(entry) {\n const newFileMenu = getNewFileMenu();\n return newFileMenu.unregisterEntry(entry);\n};\nconst getNewFileMenuEntries = function(context) {\n const newFileMenu = getNewFileMenu();\n return newFileMenu.getEntries(context).sort((a, b) => {\n if (a.order !== void 0 && b.order !== void 0 && a.order !== b.order) {\n return a.order - b.order;\n }\n return a.displayName.localeCompare(b.displayName, void 0, { numeric: true, sensitivity: \"base\" });\n });\n};\nexport {\n Column,\n DefaultType,\n File,\n FileAction,\n FileListFilter,\n FileType,\n FilesSortingMode,\n Folder,\n Header,\n InvalidFilenameError,\n InvalidFilenameErrorReason,\n Navigation,\n NewMenuEntryCategory,\n Node,\n NodeStatus,\n Permission,\n View,\n addNewFileMenuEntry,\n davGetClient,\n davGetDefaultPropfind,\n davGetFavoritesReport,\n davGetRecentSearch,\n davGetRemoteURL,\n davGetRootPath,\n davParsePermissions,\n davRemoteURL,\n davResultToNode,\n davRootPath,\n defaultDavNamespaces,\n defaultDavProperties,\n formatFileSize,\n getDavNameSpaces,\n getDavProperties,\n getFavoriteNodes,\n getFileActions,\n getFileListFilters,\n getFileListHeaders,\n getNavigation,\n getNewFileMenuEntries,\n getUniqueName,\n isFilenameValid,\n orderBy,\n parseFileSize,\n registerDavProperty,\n registerFileAction,\n registerFileListFilter,\n registerFileListHeaders,\n removeNewFileMenuEntry,\n sortNodes,\n unregisterFileListFilter,\n validateFilename\n};\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/sass-loader/dist/cjs.js!./fileEntryInlineSystemTags.scss\";\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/sass-loader/dist/cjs.js!./fileEntryInlineSystemTags.scss\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { FileAction, Node, registerDavProperty, registerFileAction } from '@nextcloud/files';\nimport { translate as t } from '@nextcloud/l10n';\nimport '../css/fileEntryInlineSystemTags.scss';\nconst getNodeSystemTags = function (node) {\n const tags = node.attributes?.['system-tags']?.['system-tag'];\n if (tags === undefined) {\n return [];\n }\n return [tags].flat();\n};\nconst renderTag = function (tag, isMore = false) {\n const tagElement = document.createElement('li');\n tagElement.classList.add('files-list__system-tag');\n tagElement.textContent = tag;\n if (isMore) {\n tagElement.classList.add('files-list__system-tag--more');\n }\n return tagElement;\n};\nexport const action = new FileAction({\n id: 'system-tags',\n displayName: () => '',\n iconSvgInline: () => '',\n enabled(nodes) {\n // Only show the action on single nodes\n if (nodes.length !== 1) {\n return false;\n }\n const node = nodes[0];\n const tags = getNodeSystemTags(node);\n // Only show the action if the node has system tags\n if (tags.length === 0) {\n return false;\n }\n return true;\n },\n exec: async () => null,\n async renderInline(node) {\n // Ensure we have the system tags as an array\n const tags = getNodeSystemTags(node);\n if (tags.length === 0) {\n return null;\n }\n const systemTagsElement = document.createElement('ul');\n systemTagsElement.classList.add('files-list__system-tags');\n if (tags.length === 1) {\n systemTagsElement.setAttribute('aria-label', t('files', 'This file has the tag {tag}', { tag: tags[0] }));\n }\n else {\n const firstTags = tags.slice(0, -1).join(', ');\n const lastTag = tags[tags.length - 1];\n systemTagsElement.setAttribute('aria-label', t('files', 'This file has the tags {firstTags} and {lastTag}', { firstTags, lastTag }));\n }\n systemTagsElement.append(renderTag(tags[0]));\n // More tags than the one we're showing\n if (tags.length > 1) {\n const moreTagElement = renderTag('+' + (tags.length - 1), true);\n moreTagElement.setAttribute('title', tags.slice(1).join(', '));\n systemTagsElement.append(moreTagElement);\n }\n return systemTagsElement;\n },\n order: 0,\n});\nregisterDavProperty('nc:system-tags');\nregisterFileAction(action);\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { createClient } from 'webdav';\nimport { generateRemoteUrl } from '@nextcloud/router';\nimport { getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth';\n// init webdav client\nconst rootUrl = generateRemoteUrl('dav');\nexport const davClient = createClient(rootUrl);\n// set CSRF token header\nconst setHeaders = (token) => {\n davClient.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// refresh headers when request token changes\nonRequestTokenUpdate(setHeaders);\nsetHeaders(getRequestToken());\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport camelCase from 'camelcase';\nexport const defaultBaseTag = {\n userVisible: true,\n userAssignable: true,\n canAssign: true,\n};\nexport const parseTags = (tags) => {\n return tags.map(({ props }) => Object.fromEntries(Object.entries(props)\n .map(([key, value]) => [camelCase(key), camelCase(key) === 'displayName' ? String(value) : value])));\n};\n/**\n * Parse id from `Content-Location` header\n * @param url URL to parse\n */\nexport const parseIdFromLocation = (url) => {\n const queryPos = url.indexOf('?');\n if (queryPos > 0) {\n url = url.substring(0, queryPos);\n }\n const parts = url.split('/');\n let result;\n do {\n result = parts[parts.length - 1];\n parts.pop();\n // note: first result can be empty when there is a trailing slash,\n // so we take the part before that\n } while (!result && parts.length > 0);\n return Number(result);\n};\nexport const formatTag = (initialTag) => {\n if ('name' in initialTag && !('displayName' in initialTag)) {\n return { ...initialTag };\n }\n const tag = { ...initialTag };\n tag.name = tag.displayName;\n delete tag.displayName;\n return tag;\n};\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { getLoggerBuilder } from '@nextcloud/logger';\nexport const logger = getLoggerBuilder()\n .setApp('systemtags')\n .detectUser()\n .build();\n","import { getCurrentUser } from '@nextcloud/auth';\nimport { Folder, Permission, getDavNameSpaces, getDavProperties, davGetClient, davResultToNode, davRemoteURL, davRootPath } from '@nextcloud/files';\nimport { fetchTags } from './api';\nconst rootPath = '/systemtags';\nconst client = davGetClient();\nconst resultToNode = (node) => davResultToNode(node);\nconst formatReportPayload = (tagId) => `\n\n\t\n\t\t${getDavProperties()}\n\t\n\t\n\t\t${tagId}\n\t\n`;\nconst tagToNode = function (tag) {\n return new Folder({\n id: tag.id,\n source: `${davRemoteURL}${rootPath}/${tag.id}`,\n owner: String(getCurrentUser()?.uid ?? 'anonymous'),\n root: rootPath,\n displayname: tag.displayName,\n permissions: Permission.READ,\n attributes: {\n ...tag,\n 'is-tag': true,\n },\n });\n};\nexport const getContents = async (path = '/') => {\n // List tags in the root\n const tagsCache = (await fetchTags()).filter(tag => tag.userVisible);\n if (path === '/') {\n return {\n folder: new Folder({\n id: 0,\n source: `${davRemoteURL}${rootPath}`,\n owner: getCurrentUser()?.uid,\n root: rootPath,\n permissions: Permission.NONE,\n }),\n contents: tagsCache.map(tagToNode),\n };\n }\n const tagId = parseInt(path.split('/', 2)[1]);\n const tag = tagsCache.find(tag => tag.id === tagId);\n if (!tag) {\n throw new Error('Tag not found');\n }\n const folder = tagToNode(tag);\n const contentsResponse = await client.getDirectoryContents(davRootPath, {\n details: true,\n // Only filter favorites if we're at the root\n data: formatReportPayload(tagId),\n headers: {\n // Patched in WebdavClient.ts\n method: 'REPORT',\n },\n });\n return {\n folder,\n contents: contentsResponse.data.map(resultToNode),\n };\n};\n","/**\n * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport './actions/inlineSystemTagsAction.js';\nimport { translate as t } from '@nextcloud/l10n';\nimport { View, getNavigation } from '@nextcloud/files';\nimport TagMultipleSvg from '@mdi/svg/svg/tag-multiple.svg?raw';\nimport { getContents } from './services/systemtags.js';\nconst Navigation = getNavigation();\nNavigation.register(new View({\n id: 'tags',\n name: t('systemtags', 'Tags'),\n caption: t('systemtags', 'List of tags and their associated files and folders.'),\n emptyTitle: t('systemtags', 'No tags found'),\n emptyCaption: t('systemtags', 'Tags you have created will show up here.'),\n icon: TagMultipleSvg,\n order: 25,\n getContents,\n}));\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport axios from '@nextcloud/axios';\nimport { generateUrl } from '@nextcloud/router';\nimport { translate as t } from '@nextcloud/l10n';\nimport { davClient } from './davClient.js';\nimport { formatTag, parseIdFromLocation, parseTags } from '../utils';\nimport { logger } from '../logger.js';\nexport const fetchTagsPayload = `\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n`;\nexport const fetchTags = async () => {\n const path = '/systemtags';\n try {\n const { data: tags } = await davClient.getDirectoryContents(path, {\n data: fetchTagsPayload,\n details: true,\n glob: '/systemtags/*', // Filter out first empty tag\n });\n return parseTags(tags);\n }\n catch (error) {\n logger.error(t('systemtags', 'Failed to load tags'), { error });\n throw new Error(t('systemtags', 'Failed to load tags'));\n }\n};\nexport const fetchLastUsedTagIds = async () => {\n const url = generateUrl('/apps/systemtags/lastused');\n try {\n const { data: lastUsedTagIds } = await axios.get(url);\n return lastUsedTagIds.map(Number);\n }\n catch (error) {\n logger.error(t('systemtags', 'Failed to load last used tags'), { error });\n throw new Error(t('systemtags', 'Failed to load last used tags'));\n }\n};\n/**\n * @param tag\n * @return created tag id\n */\nexport const createTag = async (tag) => {\n const path = '/systemtags';\n const tagToPost = formatTag(tag);\n try {\n const { headers } = await davClient.customRequest(path, {\n method: 'POST',\n data: tagToPost,\n });\n const contentLocation = headers.get('content-location');\n if (contentLocation) {\n return parseIdFromLocation(contentLocation);\n }\n logger.error(t('systemtags', 'Missing \"Content-Location\" header'));\n throw new Error(t('systemtags', 'Missing \"Content-Location\" header'));\n }\n catch (error) {\n logger.error(t('systemtags', 'Failed to create tag'), { error });\n throw new Error(t('systemtags', 'Failed to create tag'));\n }\n};\nexport const updateTag = async (tag) => {\n const path = '/systemtags/' + tag.id;\n const data = `\n\t\n\t\t\n\t\t\t\n\t\t\t\t${tag.displayName}\n\t\t\t\t${tag.userVisible}\n\t\t\t\t${tag.userAssignable}\n\t\t\t\n\t\t\n\t`;\n try {\n await davClient.customRequest(path, {\n method: 'PROPPATCH',\n data,\n });\n }\n catch (error) {\n logger.error(t('systemtags', 'Failed to update tag'), { error });\n throw new Error(t('systemtags', 'Failed to update tag'));\n }\n};\nexport const deleteTag = async (tag) => {\n const path = '/systemtags/' + tag.id;\n try {\n await davClient.deleteFile(path);\n }\n catch (error) {\n logger.error(t('systemtags', 'Failed to delete tag'), { error });\n throw new Error(t('systemtags', 'Failed to delete tag'));\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, `.files-list__system-tags{--min-size: 32px;display:none;justify-content:center;align-items:center;min-width:calc(var(--min-size)*2);max-width:300px}.files-list__system-tag{padding:5px 10px;border:1px solid;border-radius:var(--border-radius-pill);border-color:var(--color-border);color:var(--color-text-maxcontrast);height:var(--min-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:22px;text-align:center}.files-list__system-tag--more{overflow:visible;text-overflow:initial}.files-list__system-tag+.files-list__system-tag{margin-left:5px}@media(min-width: 512px){.files-list__system-tags{display:flex}}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/systemtags/src/css/fileEntryInlineSystemTags.scss\"],\"names\":[],\"mappings\":\"AAKA,yBACC,gBAAA,CACA,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,iCAAA,CACA,eAAA,CAGD,wBACC,gBAAA,CACA,gBAAA,CACA,uCAAA,CACA,gCAAA,CACA,mCAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,gBAAA,CACA,iBAAA,CAEA,8BACC,gBAAA,CACA,qBAAA,CAID,gDACC,eAAA,CAIF,yBACC,yBACC,YAAA,CAAA\",\"sourcesContent\":[\"/**\\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\\n * SPDX-License-Identifier: AGPL-3.0-or-later\\n */\\n\\n.files-list__system-tags {\\n\\t--min-size: 32px;\\n\\tdisplay: none;\\n\\tjustify-content: center;\\n\\talign-items: center;\\n\\tmin-width: calc(var(--min-size) * 2);\\n\\tmax-width: 300px;\\n}\\n\\n.files-list__system-tag {\\n\\tpadding: 5px 10px;\\n\\tborder: 1px solid;\\n\\tborder-radius: var(--border-radius-pill);\\n\\tborder-color: var(--color-border);\\n\\tcolor: var(--color-text-maxcontrast);\\n\\theight: var(--min-size);\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n\\tline-height: 22px; // min-size - 2 * 5px padding\\n\\ttext-align: center;\\n\\n\\t&--more {\\n\\t\\toverflow: visible;\\n\\t\\ttext-overflow: initial;\\n\\t}\\n\\n\\t// Proper spacing if multiple shown\\n\\t& + .files-list__system-tag {\\n\\t\\tmargin-left: 5px;\\n\\t}\\n}\\n\\n@media (min-width: 512px) {\\n\\t.files-list__system-tags {\\n\\t\\tdisplay: flex;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\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};","// The chunk loading function for additional chunks\n// Since all referenced chunks are already included\n// in this file, this function is empty here.\n__webpack_require__.e = () => (Promise.resolve());","__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 = 2766;","__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\t2766: 0\n};\n\n// no chunk on demand loading\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__(27560)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","setApp","detectUser","build","DefaultType","DefaultType2","Permission","Permission2","defaultDavProperties","defaultDavNamespaces","d","nc","oc","ocs","FileType","FileType2","isDavRessource","source","davService","match","validateData","data","id","Error","URL","e","startsWith","displayname","mtime","Date","crtime","mime","size","permissions","NONE","ALL","owner","attributes","root","includes","service","join","status","Object","values","NodeStatus","NodeStatus2","Node","_data","_attributes","_knownDavService","readonlyAttributes","entries","getOwnPropertyDescriptors","prototype","filter","get","map","handler","set","target","prop","value","this","Reflect","deleteProperty","receiver","warn","constructor","Proxy","update","replace","encodedSource","origin","slice","length","basename","extension","extname","dirname","split","pop","firstMatch","indexOf","url","pathname","updateMtime","READ","path","fileid","move","destination","oldBasename","rename","basename2","name","TypeError","File","type","Folder","super","davRootPath","uid","davRemoteURL","davGetRemoteURL","Navigation","_views","_currentView","register","view","find","search","push","dispatchTypedEvent","CustomEvent","remove","index","findIndex","splice","setActive","event","detail","active","views","Column","_column","column","isValidColumn","title","render","sort","summary","validator$2","util$3","exports","nameStartChar","nameRegexp","regexName","RegExp","isExist","v","isEmptyObject","obj","keys","merge","a","arrayMode","len","i","getValue","isName","string","exec","getAllMatches","regex","matches","allmatches","startIndex","lastIndex","util$2","defaultOptions$2","allowBooleanAttributes","unpairedTags","isWhiteSpace","char","readPI","xmlData","start","tagname","substr","getErrorObject","getLineNumberForPosition","readCommentAndCDATA","angleBracketsCount","validate","options","assign","tags","tagFound","reachedRoot","err","tagStartPos","closingTag","tagName","trim","substring","msg","result","readAttributeStr","attrStr","attrStrStart","isValid","validateAttributeString","code","line","tagClosed","otg","openPos","col","afterAmp","validateAmpersand","JSON","stringify","t2","doubleQuote","singleQuote","startChar","validAttrStrRegxp","attrNames","getPositionFromMatch","attrName","validateAttrName","hasOwnProperty","re2","validateNumberAmpersand","count","message","lineNumber","lines","OptionsBuilder","defaultOptions$1","preserveOrder","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","removeNSPrefix","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","val2","attributeValueProcessor","stopNodes","alwaysCreateTextNode","isArray","commentPropName","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","jPath","attrs","buildOptions","defaultOptions","util$1","readEntityExp","entityName2","isComment","isEntity","isElement","isAttlist","isNotation","validateEntityName","hexRegex","numRegex","Number","parseInt","window","parseFloat","consider","decimalPoint","util","xmlNode","child","add","key","addChild","node","readDocType","entities","hasBody","comment","exp","entityName","val","regx","toNumber","str","trimmedStr","skipLike","test","sign","numTrimmedByZeros","numStr","num","addExternalEntities","externalEntities","entKeys","ent","lastEntities","parseTextData","dontTrim","hasAttributes","isLeafNode","escapeEntities","replaceEntitiesValue","newval","parseValue","resolveNameSpace","prefix","charAt","attrsRegx","buildAttributesMap","oldVal","aName","newVal","attrCollection","parseXml","xmlObj","currentNode","textData","closeIndex","findClosingIndex","colonIndex","saveTextToParentTag","lastTagName","lastIndexOf","propIndex","tagsNodeStack","tagData","readTagExp","childNode","tagExp","attrExpPresent","endIndex","docTypeEntities","rawTagName","lastTag","isItStopNode","tagContent","result2","readStopNodeData","replaceEntitiesValue$1","entity","ampEntity","currentTagName","allNodesExp","stopNodePath","stopNodeExp","errMsg","closingIndex","closingChar","attrBoundary","ch","tagExpWithClosingIndex","separatorIndex","trimStart","openTagCount","shouldParse","node2json","compress","arr","text","compressedObj","tagObj","property","propName$1","newJpath","isLeaf","isLeafTag","assignAttributes","Array","attrMap","jpath","atrrName","propCount","prettify","OrderedObjParser2","_","String","fromCharCode","validator$1","arrToStr","indentation","xmlStr","isPreviousElementTag","propName","newJPath","tagText","isStopNode","attStr2","attr_to_str","tempInd","piTextNodeName","newIdentation","indentBy","tagStart","tagValue","suppressUnpairedNode","suppressEmptyNode","endsWith","attr","attrVal","suppressBooleanAttributes","textValue","buildFromOrderedJs","jArray","format","oneListGroup","Builder","isAttribute","attrPrefixLen","processTextOrObjNode","indentate","tagEndChar","newLine","object","level","j2x","buildTextValNode","buildObjectNode","repeat","jObj","arrayNodeName","call","buildAttrPairStr","arrLen","listTagVal","j","item","Ks","L","closeTag","tagEndExp","piClosingChar","fxp","XMLParser","parse","validationOption","toString","orderedObjParser","orderedResult","addEntity","XMLValidator","XMLBuilder","debug_1","process","env","NODE_DEBUG","args","console","error","constants","MAX_LENGTH","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","MAX_LENGTH$1","MAX_SAFE_INTEGER","RELEASE_TYPES","SEMVER_SPEC_VERSION","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","re$1","module","MAX_SAFE_COMPONENT_LENGTH2","MAX_SAFE_BUILD_LENGTH2","MAX_LENGTH2","debug2","re","safeRe","src","t","R","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","safe","token","max","makeSafeRegex","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCEPLAIN","COERCE","COERCEFULL","LONETILDE","tildeTrimReplace","LONECARET","caretTrimReplace","comparatorTrimReplace","reExports","freeze","loose","numeric","compareIdentifiers$1","b","anum","bnum","identifiers","compareIdentifiers","rcompareIdentifiers","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","getNodeSystemTags","undefined","flat","renderTag","tag","isMore","arguments","tagElement","document","createElement","classList","textContent","action","_action","validateAction","displayName","iconSvgInline","enabled","execBatch","order","parent","default","inline","renderInline","nodes","async","systemTagsElement","setAttribute","firstTags","append","moreTagElement","namespace","_nc_dav_properties","_nc_dav_namespaces","namespaces","registerDavProperty","_nc_fileactions","debug","registerFileAction","rootUrl","generateRemoteUrl","davClient","createClient","setHeaders","requesttoken","onRequestTokenUpdate","getRequestToken","logger","getLoggerBuilder","rootPath","client","remoteURL","headers","patch","headers2","method","fetch","davGetClient","resultToNode","filesRoot","userId","props","permString","CREATE","UPDATE","DELETE","SHARE","davParsePermissions","nodeData","filename","lastmod","getcontentlength","FAILED","hasPreview","davResultToNode","formatReportPayload","tagId","ns","tagToNode","getCurrentUser","_nc_navigation","_view","columns","caption","getContents","icon","jsonObject","parser","some","x","toLowerCase","isSvg","forEach","emptyView","sticky","expanded","defaultSortKey","isValidView","emptyTitle","emptyCaption","params","tagsCache","getDirectoryContents","details","glob","_ref","fromEntries","_ref2","camelCase","parseTags","fetchTags","userVisible","folder","contents","___CSS_LOADER_EXPORT___","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","r","n","getter","__esModule","definition","o","defineProperty","enumerable","Promise","resolve","g","globalThis","Function","Symbol","toStringTag","nmd","paths","children","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","bind","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"systemtags-init.js?v=df5b06d5e4e3c4ef167a","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.mjs","webpack://nextcloud/./apps/systemtags/src/css/fileEntryInlineSystemTags.scss?0a01","webpack:///nextcloud/apps/systemtags/src/files_actions/inlineSystemTagsAction.ts","webpack:///nextcloud/apps/systemtags/src/services/davClient.ts","webpack:///nextcloud/apps/systemtags/src/utils.ts","webpack:///nextcloud/apps/systemtags/src/logger.ts","webpack:///nextcloud/apps/systemtags/src/services/systemtags.ts","webpack:///nextcloud/apps/systemtags/src/init.ts","webpack:///nextcloud/apps/systemtags/src/files_views/systemtagsView.ts","webpack:///nextcloud/apps/systemtags/src/services/api.ts","webpack:///nextcloud/apps/systemtags/src/css/fileEntryInlineSystemTags.scss","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/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/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};","import { getLoggerBuilder } from \"@nextcloud/logger\";\nimport { getCurrentUser, onRequestTokenUpdate, getRequestToken } from \"@nextcloud/auth\";\nimport { join, basename, extname, dirname } from \"path\";\nimport { encodePath } from \"@nextcloud/paths\";\nimport { generateRemoteUrl } from \"@nextcloud/router\";\nimport { CancelablePromise } from \"cancelable-promise\";\nimport { createClient, getPatcher } from \"webdav\";\nimport { isPublicShare, getSharingToken } from \"@nextcloud/sharing/public\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { getCanonicalLocale, getLanguage } from \"@nextcloud/l10n\";\nimport { TypedEventTarget } from \"typescript-event-target\";\nconst logger = getLoggerBuilder().setApp(\"@nextcloud/files\").detectUser().build();\nvar NewMenuEntryCategory = /* @__PURE__ */ ((NewMenuEntryCategory2) => {\n NewMenuEntryCategory2[NewMenuEntryCategory2[\"UploadFromDevice\"] = 0] = \"UploadFromDevice\";\n NewMenuEntryCategory2[NewMenuEntryCategory2[\"CreateNew\"] = 1] = \"CreateNew\";\n NewMenuEntryCategory2[NewMenuEntryCategory2[\"Other\"] = 2] = \"Other\";\n return NewMenuEntryCategory2;\n})(NewMenuEntryCategory || {});\nclass NewFileMenu {\n _entries = [];\n registerEntry(entry) {\n this.validateEntry(entry);\n entry.category = entry.category ?? 1;\n this._entries.push(entry);\n }\n unregisterEntry(entry) {\n const entryIndex = typeof entry === \"string\" ? this.getEntryIndex(entry) : this.getEntryIndex(entry.id);\n if (entryIndex === -1) {\n logger.warn(\"Entry not found, nothing removed\", { entry, entries: this.getEntries() });\n return;\n }\n this._entries.splice(entryIndex, 1);\n }\n /**\n * Get the list of registered entries\n *\n * @param {Folder} context the creation context. Usually the current folder\n */\n getEntries(context) {\n if (context) {\n return this._entries.filter((entry) => typeof entry.enabled === \"function\" ? entry.enabled(context) : true);\n }\n return this._entries;\n }\n getEntryIndex(id) {\n return this._entries.findIndex((entry) => entry.id === id);\n }\n validateEntry(entry) {\n if (!entry.id || !entry.displayName || !(entry.iconSvgInline || entry.iconClass) || !entry.handler) {\n throw new Error(\"Invalid entry\");\n }\n if (typeof entry.id !== \"string\" || typeof entry.displayName !== \"string\") {\n throw new Error(\"Invalid id or displayName property\");\n }\n if (entry.iconClass && typeof entry.iconClass !== \"string\" || entry.iconSvgInline && typeof entry.iconSvgInline !== \"string\") {\n throw new Error(\"Invalid icon provided\");\n }\n if (entry.enabled !== void 0 && typeof entry.enabled !== \"function\") {\n throw new Error(\"Invalid enabled property\");\n }\n if (typeof entry.handler !== \"function\") {\n throw new Error(\"Invalid handler property\");\n }\n if (\"order\" in entry && typeof entry.order !== \"number\") {\n throw new Error(\"Invalid order property\");\n }\n if (this.getEntryIndex(entry.id) !== -1) {\n throw new Error(\"Duplicate entry\");\n }\n }\n}\nconst getNewFileMenu = function() {\n if (typeof window._nc_newfilemenu === \"undefined\") {\n window._nc_newfilemenu = new NewFileMenu();\n logger.debug(\"NewFileMenu initialized\");\n }\n return window._nc_newfilemenu;\n};\nvar DefaultType = /* @__PURE__ */ ((DefaultType2) => {\n DefaultType2[\"DEFAULT\"] = \"default\";\n DefaultType2[\"HIDDEN\"] = \"hidden\";\n return DefaultType2;\n})(DefaultType || {});\nclass FileAction {\n _action;\n constructor(action) {\n this.validateAction(action);\n this._action = action;\n }\n get id() {\n return this._action.id;\n }\n get displayName() {\n return this._action.displayName;\n }\n get title() {\n return this._action.title;\n }\n get iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\n }\n get execBatch() {\n return this._action.execBatch;\n }\n get order() {\n return this._action.order;\n }\n get parent() {\n return this._action.parent;\n }\n get default() {\n return this._action.default;\n }\n get inline() {\n return this._action.inline;\n }\n get renderInline() {\n return this._action.renderInline;\n }\n validateAction(action) {\n if (!action.id || typeof action.id !== \"string\") {\n throw new Error(\"Invalid id\");\n }\n if (!action.displayName || typeof action.displayName !== \"function\") {\n throw new Error(\"Invalid displayName function\");\n }\n if (\"title\" in action && typeof action.title !== \"function\") {\n throw new Error(\"Invalid title function\");\n }\n if (!action.iconSvgInline || typeof action.iconSvgInline !== \"function\") {\n throw new Error(\"Invalid iconSvgInline function\");\n }\n if (!action.exec || typeof action.exec !== \"function\") {\n throw new Error(\"Invalid exec function\");\n }\n if (\"enabled\" in action && typeof action.enabled !== \"function\") {\n throw new Error(\"Invalid enabled function\");\n }\n if (\"execBatch\" in action && typeof action.execBatch !== \"function\") {\n throw new Error(\"Invalid execBatch function\");\n }\n if (\"order\" in action && typeof action.order !== \"number\") {\n throw new Error(\"Invalid order\");\n }\n if (\"parent\" in action && typeof action.parent !== \"string\") {\n throw new Error(\"Invalid parent\");\n }\n if (action.default && !Object.values(DefaultType).includes(action.default)) {\n throw new Error(\"Invalid default\");\n }\n if (\"inline\" in action && typeof action.inline !== \"function\") {\n throw new Error(\"Invalid inline function\");\n }\n if (\"renderInline\" in action && typeof action.renderInline !== \"function\") {\n throw new Error(\"Invalid renderInline function\");\n }\n }\n}\nconst registerFileAction = function(action) {\n if (typeof window._nc_fileactions === \"undefined\") {\n window._nc_fileactions = [];\n logger.debug(\"FileActions initialized\");\n }\n if (window._nc_fileactions.find((search) => search.id === action.id)) {\n logger.error(`FileAction ${action.id} already registered`, { action });\n return;\n }\n window._nc_fileactions.push(action);\n};\nconst getFileActions = function() {\n if (typeof window._nc_fileactions === \"undefined\") {\n window._nc_fileactions = [];\n logger.debug(\"FileActions initialized\");\n }\n return window._nc_fileactions;\n};\nclass Header {\n _header;\n constructor(header) {\n this.validateHeader(header);\n this._header = header;\n }\n get id() {\n return this._header.id;\n }\n get order() {\n return this._header.order;\n }\n get enabled() {\n return this._header.enabled;\n }\n get render() {\n return this._header.render;\n }\n get updated() {\n return this._header.updated;\n }\n validateHeader(header) {\n if (!header.id || !header.render || !header.updated) {\n throw new Error(\"Invalid header: id, render and updated are required\");\n }\n if (typeof header.id !== \"string\") {\n throw new Error(\"Invalid id property\");\n }\n if (header.enabled !== void 0 && typeof header.enabled !== \"function\") {\n throw new Error(\"Invalid enabled property\");\n }\n if (header.render && typeof header.render !== \"function\") {\n throw new Error(\"Invalid render property\");\n }\n if (header.updated && typeof header.updated !== \"function\") {\n throw new Error(\"Invalid updated property\");\n }\n }\n}\nconst registerFileListHeaders = function(header) {\n if (typeof window._nc_filelistheader === \"undefined\") {\n window._nc_filelistheader = [];\n logger.debug(\"FileListHeaders initialized\");\n }\n if (window._nc_filelistheader.find((search) => search.id === header.id)) {\n logger.error(`Header ${header.id} already registered`, { header });\n return;\n }\n window._nc_filelistheader.push(header);\n};\nconst getFileListHeaders = function() {\n if (typeof window._nc_filelistheader === \"undefined\") {\n window._nc_filelistheader = [];\n logger.debug(\"FileListHeaders initialized\");\n }\n return window._nc_filelistheader;\n};\nvar Permission = /* @__PURE__ */ ((Permission2) => {\n Permission2[Permission2[\"NONE\"] = 0] = \"NONE\";\n Permission2[Permission2[\"CREATE\"] = 4] = \"CREATE\";\n Permission2[Permission2[\"READ\"] = 1] = \"READ\";\n Permission2[Permission2[\"UPDATE\"] = 2] = \"UPDATE\";\n Permission2[Permission2[\"DELETE\"] = 8] = \"DELETE\";\n Permission2[Permission2[\"SHARE\"] = 16] = \"SHARE\";\n Permission2[Permission2[\"ALL\"] = 31] = \"ALL\";\n return Permission2;\n})(Permission || {});\nconst defaultDavProperties = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:creationdate\",\n \"d:displayname\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:size\"\n];\nconst defaultDavNamespaces = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n};\nconst registerDavProperty = function(prop, namespace = { nc: \"http://nextcloud.org/ns\" }) {\n if (typeof window._nc_dav_properties === \"undefined\") {\n window._nc_dav_properties = [...defaultDavProperties];\n window._nc_dav_namespaces = { ...defaultDavNamespaces };\n }\n const namespaces = { ...window._nc_dav_namespaces, ...namespace };\n if (window._nc_dav_properties.find((search) => search === prop)) {\n logger.warn(`${prop} already registered`, { prop });\n return false;\n }\n if (prop.startsWith(\"<\") || prop.split(\":\").length !== 2) {\n logger.error(`${prop} is not valid. See example: 'oc:fileid'`, { prop });\n return false;\n }\n const ns = prop.split(\":\")[0];\n if (!namespaces[ns]) {\n logger.error(`${prop} namespace unknown`, { prop, namespaces });\n return false;\n }\n window._nc_dav_properties.push(prop);\n window._nc_dav_namespaces = namespaces;\n return true;\n};\nconst getDavProperties = function() {\n if (typeof window._nc_dav_properties === \"undefined\") {\n window._nc_dav_properties = [...defaultDavProperties];\n }\n return window._nc_dav_properties.map((prop) => `<${prop} />`).join(\" \");\n};\nconst getDavNameSpaces = function() {\n if (typeof window._nc_dav_namespaces === \"undefined\") {\n window._nc_dav_namespaces = { ...defaultDavNamespaces };\n }\n return Object.keys(window._nc_dav_namespaces).map((ns) => `xmlns:${ns}=\"${window._nc_dav_namespaces?.[ns]}\"`).join(\" \");\n};\nconst davGetDefaultPropfind = function() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t`;\n};\nconst davGetFavoritesReport = function() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\t\n\t\t\t\t1\n\t\t\t\n\t\t`;\n};\nconst davGetRecentSearch = function(lastModified) {\n return `\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t/files/${getCurrentUser()?.uid}/\n\t\t\t\tinfinity\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\thttpd/unix-directory\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t0\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${lastModified}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t100\n\t\t\t0\n\t\t\n\t\n`;\n};\nconst davParsePermissions = function(permString = \"\") {\n let permissions = Permission.NONE;\n if (!permString) {\n return permissions;\n }\n if (permString.includes(\"C\") || permString.includes(\"K\")) {\n permissions |= Permission.CREATE;\n }\n if (permString.includes(\"G\")) {\n permissions |= Permission.READ;\n }\n if (permString.includes(\"W\") || permString.includes(\"N\") || permString.includes(\"V\")) {\n permissions |= Permission.UPDATE;\n }\n if (permString.includes(\"D\")) {\n permissions |= Permission.DELETE;\n }\n if (permString.includes(\"R\")) {\n permissions |= Permission.SHARE;\n }\n return permissions;\n};\nvar FileType = /* @__PURE__ */ ((FileType2) => {\n FileType2[\"Folder\"] = \"folder\";\n FileType2[\"File\"] = \"file\";\n return FileType2;\n})(FileType || {});\nconst isDavRessource = function(source, davService) {\n return source.match(davService) !== null;\n};\nconst validateData = (data, davService) => {\n if (data.id && typeof data.id !== \"number\") {\n throw new Error(\"Invalid id type of value\");\n }\n if (!data.source) {\n throw new Error(\"Missing mandatory source\");\n }\n try {\n new URL(data.source);\n } catch (e) {\n throw new Error(\"Invalid source format, source must be a valid URL\");\n }\n if (!data.source.startsWith(\"http\")) {\n throw new Error(\"Invalid source format, only http(s) is supported\");\n }\n if (data.displayname && typeof data.displayname !== \"string\") {\n throw new Error(\"Invalid displayname type\");\n }\n if (data.mtime && !(data.mtime instanceof Date)) {\n throw new Error(\"Invalid mtime type\");\n }\n if (data.crtime && !(data.crtime instanceof Date)) {\n throw new Error(\"Invalid crtime type\");\n }\n if (!data.mime || typeof data.mime !== \"string\" || !data.mime.match(/^[-\\w.]+\\/[-+\\w.]+$/gi)) {\n throw new Error(\"Missing or invalid mandatory mime\");\n }\n if (\"size\" in data && typeof data.size !== \"number\" && data.size !== void 0) {\n throw new Error(\"Invalid size type\");\n }\n if (\"permissions\" in data && data.permissions !== void 0 && !(typeof data.permissions === \"number\" && data.permissions >= Permission.NONE && data.permissions <= Permission.ALL)) {\n throw new Error(\"Invalid permissions\");\n }\n if (data.owner && data.owner !== null && typeof data.owner !== \"string\") {\n throw new Error(\"Invalid owner type\");\n }\n if (data.attributes && typeof data.attributes !== \"object\") {\n throw new Error(\"Invalid attributes type\");\n }\n if (data.root && typeof data.root !== \"string\") {\n throw new Error(\"Invalid root type\");\n }\n if (data.root && !data.root.startsWith(\"/\")) {\n throw new Error(\"Root must start with a leading slash\");\n }\n if (data.root && !data.source.includes(data.root)) {\n throw new Error(\"Root must be part of the source\");\n }\n if (data.root && isDavRessource(data.source, davService)) {\n const service = data.source.match(davService)[0];\n if (!data.source.includes(join(service, data.root))) {\n throw new Error(\"The root must be relative to the service. e.g /files/emma\");\n }\n }\n if (data.status && !Object.values(NodeStatus).includes(data.status)) {\n throw new Error(\"Status must be a valid NodeStatus\");\n }\n};\nvar NodeStatus = /* @__PURE__ */ ((NodeStatus2) => {\n NodeStatus2[\"NEW\"] = \"new\";\n NodeStatus2[\"FAILED\"] = \"failed\";\n NodeStatus2[\"LOADING\"] = \"loading\";\n NodeStatus2[\"LOCKED\"] = \"locked\";\n return NodeStatus2;\n})(NodeStatus || {});\nclass Node {\n _data;\n _attributes;\n _knownDavService = /(remote|public)\\.php\\/(web)?dav/i;\n readonlyAttributes = Object.entries(Object.getOwnPropertyDescriptors(Node.prototype)).filter((e) => typeof e[1].get === \"function\" && e[0] !== \"__proto__\").map((e) => e[0]);\n handler = {\n set: (target, prop, value) => {\n if (this.readonlyAttributes.includes(prop)) {\n return false;\n }\n return Reflect.set(target, prop, value);\n },\n deleteProperty: (target, prop) => {\n if (this.readonlyAttributes.includes(prop)) {\n return false;\n }\n return Reflect.deleteProperty(target, prop);\n },\n // TODO: This is deprecated and only needed for files v3\n get: (target, prop, receiver) => {\n if (this.readonlyAttributes.includes(prop)) {\n logger.warn(`Accessing \"Node.attributes.${prop}\" is deprecated, access it directly on the Node instance.`);\n return Reflect.get(this, prop);\n }\n return Reflect.get(target, prop, receiver);\n }\n };\n constructor(data, davService) {\n validateData(data, davService || this._knownDavService);\n this._data = {\n // TODO: Remove with next major release, this is just for compatibility\n displayname: data.attributes?.displayname,\n ...data,\n attributes: {}\n };\n this._attributes = new Proxy(this._data.attributes, this.handler);\n this.update(data.attributes ?? {});\n if (davService) {\n this._knownDavService = davService;\n }\n }\n /**\n * Get the source url to this object\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get source() {\n return this._data.source.replace(/\\/$/i, \"\");\n }\n /**\n * Get the encoded source url to this object for requests purposes\n */\n get encodedSource() {\n const { origin } = new URL(this.source);\n return origin + encodePath(this.source.slice(origin.length));\n }\n /**\n * Get this object name\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get basename() {\n return basename(this.source);\n }\n /**\n * The nodes displayname\n * By default the display name and the `basename` are identical,\n * but it is possible to have a different name. This happens\n * on the files app for example for shared folders.\n */\n get displayname() {\n return this._data.displayname || this.basename;\n }\n /**\n * Set the displayname\n */\n set displayname(displayname) {\n this._data.displayname = displayname;\n }\n /**\n * Get this object's extension\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get extension() {\n return extname(this.source);\n }\n /**\n * Get the directory path leading to this object\n * Will use the relative path to root if available\n *\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get dirname() {\n if (this.root) {\n let source = this.source;\n if (this.isDavRessource) {\n source = source.split(this._knownDavService).pop();\n }\n const firstMatch = source.indexOf(this.root);\n const root = this.root.replace(/\\/$/, \"\");\n return dirname(source.slice(firstMatch + root.length) || \"/\");\n }\n const url = new URL(this.source);\n return dirname(url.pathname);\n }\n /**\n * Get the file mime\n * There is no setter as the mime is not meant to be changed\n */\n get mime() {\n return this._data.mime;\n }\n /**\n * Get the file modification time\n */\n get mtime() {\n return this._data.mtime;\n }\n /**\n * Set the file modification time\n */\n set mtime(mtime) {\n this._data.mtime = mtime;\n }\n /**\n * Get the file creation time\n * There is no setter as the creation time is not meant to be changed\n */\n get crtime() {\n return this._data.crtime;\n }\n /**\n * Get the file size\n */\n get size() {\n return this._data.size;\n }\n /**\n * Set the file size\n */\n set size(size) {\n this.updateMtime();\n this._data.size = size;\n }\n /**\n * Get the file attribute\n * This contains all additional attributes not provided by the Node class\n */\n get attributes() {\n return this._attributes;\n }\n /**\n * Get the file permissions\n */\n get permissions() {\n if (this.owner === null && !this.isDavRessource) {\n return Permission.READ;\n }\n return this._data.permissions !== void 0 ? this._data.permissions : Permission.NONE;\n }\n /**\n * Set the file permissions\n */\n set permissions(permissions) {\n this.updateMtime();\n this._data.permissions = permissions;\n }\n /**\n * Get the file owner\n * There is no setter as the owner is not meant to be changed\n */\n get owner() {\n if (!this.isDavRessource) {\n return null;\n }\n return this._data.owner;\n }\n /**\n * Is this a dav-related ressource ?\n */\n get isDavRessource() {\n return isDavRessource(this.source, this._knownDavService);\n }\n /**\n * Get the dav root of this object\n * There is no setter as the root is not meant to be changed\n */\n get root() {\n if (this._data.root) {\n return this._data.root.replace(/^(.+)\\/$/, \"$1\");\n }\n if (this.isDavRessource) {\n const root = dirname(this.source);\n return root.split(this._knownDavService).pop() || null;\n }\n return null;\n }\n /**\n * Get the absolute path of this object relative to the root\n */\n get path() {\n if (this.root) {\n let source = this.source;\n if (this.isDavRessource) {\n source = source.split(this._knownDavService).pop();\n }\n const firstMatch = source.indexOf(this.root);\n const root = this.root.replace(/\\/$/, \"\");\n return source.slice(firstMatch + root.length) || \"/\";\n }\n return (this.dirname + \"/\" + this.basename).replace(/\\/\\//g, \"/\");\n }\n /**\n * Get the node id if defined.\n * There is no setter as the fileid is not meant to be changed\n */\n get fileid() {\n return this._data?.id;\n }\n /**\n * Get the node status.\n */\n get status() {\n return this._data?.status;\n }\n /**\n * Set the node status.\n */\n set status(status) {\n this._data.status = status;\n }\n /**\n * Move the node to a new destination\n *\n * @param {string} destination the new source.\n * e.g. https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg\n */\n move(destination) {\n validateData({ ...this._data, source: destination }, this._knownDavService);\n const oldBasename = this.basename;\n this._data.source = destination;\n if (this.displayname === oldBasename && this.basename !== oldBasename) {\n this.displayname = this.basename;\n }\n this.updateMtime();\n }\n /**\n * Rename the node\n * This aliases the move method for easier usage\n *\n * @param basename The new name of the node\n */\n rename(basename2) {\n if (basename2.includes(\"/\")) {\n throw new Error(\"Invalid basename\");\n }\n this.move(dirname(this.source) + \"/\" + basename2);\n }\n /**\n * Update the mtime if exists\n */\n updateMtime() {\n if (this._data.mtime) {\n this._data.mtime = /* @__PURE__ */ new Date();\n }\n }\n /**\n * Update the attributes of the node\n * Warning, updating attributes will NOT automatically update the mtime.\n *\n * @param attributes The new attributes to update on the Node attributes\n */\n update(attributes) {\n for (const [name, value] of Object.entries(attributes)) {\n try {\n if (value === void 0) {\n delete this.attributes[name];\n } else {\n this.attributes[name] = value;\n }\n } catch (e) {\n if (e instanceof TypeError) {\n continue;\n }\n throw e;\n }\n }\n }\n}\nclass File extends Node {\n get type() {\n return FileType.File;\n }\n}\nclass Folder extends Node {\n constructor(data) {\n super({\n ...data,\n mime: \"httpd/unix-directory\"\n });\n }\n get type() {\n return FileType.Folder;\n }\n get extension() {\n return null;\n }\n get mime() {\n return \"httpd/unix-directory\";\n }\n}\nfunction davGetRootPath() {\n if (isPublicShare()) {\n return `/files/${getSharingToken()}`;\n }\n return `/files/${getCurrentUser()?.uid}`;\n}\nconst davRootPath = davGetRootPath();\nfunction davGetRemoteURL() {\n const url = generateRemoteUrl(\"dav\");\n if (isPublicShare()) {\n return url.replace(\"remote.php\", \"public.php\");\n }\n return url;\n}\nconst davRemoteURL = davGetRemoteURL();\nconst davGetClient = function(remoteURL = davRemoteURL, headers = {}) {\n const client = createClient(remoteURL, { headers });\n function setHeaders(token) {\n client.setHeaders({\n ...headers,\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 onRequestTokenUpdate(setHeaders);\n setHeaders(getRequestToken());\n const patcher = getPatcher();\n patcher.patch(\"fetch\", (url, options) => {\n const headers2 = options.headers;\n if (headers2?.method) {\n options.method = headers2.method;\n delete headers2.method;\n }\n return fetch(url, options);\n });\n return client;\n};\nconst getFavoriteNodes = (davClient, path = \"/\", davRoot = davRootPath) => {\n const controller = new AbortController();\n return new CancelablePromise(async (resolve, reject, onCancel) => {\n onCancel(() => controller.abort());\n try {\n const contentsResponse = await davClient.getDirectoryContents(`${davRoot}${path}`, {\n signal: controller.signal,\n details: true,\n data: davGetFavoritesReport(),\n headers: {\n // see davGetClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: true\n });\n const nodes = contentsResponse.data.filter((node) => node.filename !== path).map((result) => davResultToNode(result, davRoot));\n resolve(nodes);\n } catch (error) {\n reject(error);\n }\n });\n};\nconst davResultToNode = function(node, filesRoot = davRootPath, remoteURL = davRemoteURL) {\n let userId = getCurrentUser()?.uid;\n if (isPublicShare()) {\n userId = userId ?? \"anonymous\";\n } else if (!userId) {\n throw new Error(\"No user id found\");\n }\n const props = node.props;\n const permissions = davParsePermissions(props?.permissions);\n const owner = String(props?.[\"owner-id\"] || userId);\n const id = props.fileid || 0;\n const nodeData = {\n id,\n source: `${remoteURL}${node.filename}`,\n mtime: new Date(Date.parse(node.lastmod)),\n mime: node.mime || \"application/octet-stream\",\n // Manually cast to work around for https://github.com/perry-mitchell/webdav-client/pull/380\n displayname: props.displayname !== void 0 ? String(props.displayname) : void 0,\n size: props?.size || Number.parseInt(props.getcontentlength || \"0\"),\n // The fileid is set to -1 for failed requests\n status: id < 0 ? NodeStatus.FAILED : void 0,\n permissions,\n owner,\n root: filesRoot,\n attributes: {\n ...node,\n ...props,\n hasPreview: props?.[\"has-preview\"]\n }\n };\n delete nodeData.attributes?.props;\n return node.type === \"file\" ? new File(nodeData) : new Folder(nodeData);\n};\nvar InvalidFilenameErrorReason = /* @__PURE__ */ ((InvalidFilenameErrorReason2) => {\n InvalidFilenameErrorReason2[\"ReservedName\"] = \"reserved name\";\n InvalidFilenameErrorReason2[\"Character\"] = \"character\";\n InvalidFilenameErrorReason2[\"Extension\"] = \"extension\";\n return InvalidFilenameErrorReason2;\n})(InvalidFilenameErrorReason || {});\nclass InvalidFilenameError extends Error {\n constructor(options) {\n super(`Invalid ${options.reason} '${options.segment}' in filename '${options.filename}'`, { cause: options });\n }\n /**\n * The filename that was validated\n */\n get filename() {\n return this.cause.filename;\n }\n /**\n * Reason why the validation failed\n */\n get reason() {\n return this.cause.reason;\n }\n /**\n * Part of the filename that caused this error\n */\n get segment() {\n return this.cause.segment;\n }\n}\nfunction validateFilename(filename) {\n const capabilities = getCapabilities().files;\n const forbiddenCharacters = capabilities.forbidden_filename_characters ?? window._oc_config?.forbidden_filenames_characters ?? [\"/\", \"\\\\\"];\n for (const character of forbiddenCharacters) {\n if (filename.includes(character)) {\n throw new InvalidFilenameError({ segment: character, reason: \"character\", filename });\n }\n }\n filename = filename.toLocaleLowerCase();\n const forbiddenFilenames = capabilities.forbidden_filenames ?? [\".htaccess\"];\n if (forbiddenFilenames.includes(filename)) {\n throw new InvalidFilenameError({\n filename,\n segment: filename,\n reason: \"reserved name\"\n /* ReservedName */\n });\n }\n const endOfBasename = filename.indexOf(\".\", 1);\n const basename2 = filename.substring(0, endOfBasename === -1 ? void 0 : endOfBasename);\n const forbiddenFilenameBasenames = capabilities.forbidden_filename_basenames ?? [];\n if (forbiddenFilenameBasenames.includes(basename2)) {\n throw new InvalidFilenameError({\n filename,\n segment: basename2,\n reason: \"reserved name\"\n /* ReservedName */\n });\n }\n const forbiddenFilenameExtensions = capabilities.forbidden_filename_extensions ?? [\".part\", \".filepart\"];\n for (const extension of forbiddenFilenameExtensions) {\n if (filename.length > extension.length && filename.endsWith(extension)) {\n throw new InvalidFilenameError({ segment: extension, reason: \"extension\", filename });\n }\n }\n}\nfunction isFilenameValid(filename) {\n try {\n validateFilename(filename);\n return true;\n } catch (error) {\n if (error instanceof InvalidFilenameError) {\n return false;\n }\n throw error;\n }\n}\nfunction getUniqueName(name, otherNames, options) {\n const opts = {\n suffix: (n) => `(${n})`,\n ignoreFileExtension: false,\n ...options\n };\n let newName = name;\n let i = 1;\n while (otherNames.includes(newName)) {\n const ext = opts.ignoreFileExtension ? \"\" : extname(name);\n const base = basename(name, ext);\n newName = `${base} ${opts.suffix(i++)}${ext}`;\n }\n return newName;\n}\nconst humanList = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"];\nconst humanListBinary = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"];\nfunction formatFileSize(size, skipSmallSizes = false, binaryPrefixes = false, base1000 = false) {\n binaryPrefixes = binaryPrefixes && !base1000;\n if (typeof size === \"string\") {\n size = Number(size);\n }\n let order = size > 0 ? Math.floor(Math.log(size) / Math.log(base1000 ? 1e3 : 1024)) : 0;\n order = Math.min((binaryPrefixes ? humanListBinary.length : humanList.length) - 1, order);\n const readableFormat = binaryPrefixes ? humanListBinary[order] : humanList[order];\n let relativeSize = (size / Math.pow(base1000 ? 1e3 : 1024, order)).toFixed(1);\n if (skipSmallSizes === true && order === 0) {\n return (relativeSize !== \"0.0\" ? \"< 1 \" : \"0 \") + (binaryPrefixes ? humanListBinary[1] : humanList[1]);\n }\n if (order < 2) {\n relativeSize = parseFloat(relativeSize).toFixed(0);\n } else {\n relativeSize = parseFloat(relativeSize).toLocaleString(getCanonicalLocale());\n }\n return relativeSize + \" \" + readableFormat;\n}\nfunction parseFileSize(value, forceBinary = false) {\n try {\n value = `${value}`.toLocaleLowerCase().replaceAll(/\\s+/g, \"\").replaceAll(\",\", \".\");\n } catch (e) {\n return null;\n }\n const match = value.match(/^([0-9]*(\\.[0-9]*)?)([kmgtp]?)(i?)b?$/);\n if (match === null || match[1] === \".\" || match[1] === \"\") {\n return null;\n }\n const bytesArray = {\n \"\": 0,\n k: 1,\n m: 2,\n g: 3,\n t: 4,\n p: 5,\n e: 6\n };\n const decimalString = `${match[1]}`;\n const base = match[4] === \"i\" || forceBinary ? 1024 : 1e3;\n return Math.round(Number.parseFloat(decimalString) * base ** bytesArray[match[3]]);\n}\nfunction stringify(value) {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return String(value);\n}\nfunction orderBy(collection, identifiers2, orders) {\n identifiers2 = identifiers2 ?? [(value) => value];\n orders = orders ?? [];\n const sorting = identifiers2.map((_, index) => (orders[index] ?? \"asc\") === \"asc\" ? 1 : -1);\n const collator = Intl.Collator(\n [getLanguage(), getCanonicalLocale()],\n {\n // handle 10 as ten and not as one-zero\n numeric: true,\n usage: \"sort\"\n }\n );\n return [...collection].sort((a, b) => {\n for (const [index, identifier] of identifiers2.entries()) {\n const value = collator.compare(stringify(identifier(a)), stringify(identifier(b)));\n if (value !== 0) {\n return value * sorting[index];\n }\n }\n return 0;\n });\n}\nvar FilesSortingMode = /* @__PURE__ */ ((FilesSortingMode2) => {\n FilesSortingMode2[\"Name\"] = \"basename\";\n FilesSortingMode2[\"Modified\"] = \"mtime\";\n FilesSortingMode2[\"Size\"] = \"size\";\n return FilesSortingMode2;\n})(FilesSortingMode || {});\nfunction sortNodes(nodes, options = {}) {\n const sortingOptions = {\n // Default to sort by name\n sortingMode: \"basename\",\n // Default to sort ascending\n sortingOrder: \"asc\",\n ...options\n };\n const basename2 = (name) => name.lastIndexOf(\".\") > 0 ? name.slice(0, name.lastIndexOf(\".\")) : name;\n const identifiers2 = [\n // 1: Sort favorites first if enabled\n ...sortingOptions.sortFavoritesFirst ? [(v) => v.attributes?.favorite !== 1] : [],\n // 2: Sort folders first if sorting by name\n ...sortingOptions.sortFoldersFirst ? [(v) => v.type !== \"folder\"] : [],\n // 3: Use sorting mode if NOT basename (to be able to use display name too)\n ...sortingOptions.sortingMode !== \"basename\" ? [(v) => v[sortingOptions.sortingMode]] : [],\n // 4: Use display name if available, fallback to name\n (v) => basename2(v.attributes?.displayname || v.basename),\n // 5: Finally, use basename if all previous sorting methods failed\n (v) => v.basename\n ];\n const orders = [\n // (for 1): always sort favorites before normal files\n ...sortingOptions.sortFavoritesFirst ? [\"asc\"] : [],\n // (for 2): always sort folders before files\n ...sortingOptions.sortFoldersFirst ? [\"asc\"] : [],\n // (for 3): Reverse if sorting by mtime as mtime higher means edited more recent -> lower\n ...sortingOptions.sortingMode === \"mtime\" ? [sortingOptions.sortingOrder === \"asc\" ? \"desc\" : \"asc\"] : [],\n // (also for 3 so make sure not to conflict with 2 and 3)\n ...sortingOptions.sortingMode !== \"mtime\" && sortingOptions.sortingMode !== \"basename\" ? [sortingOptions.sortingOrder] : [],\n // for 4: use configured sorting direction\n sortingOptions.sortingOrder,\n // for 5: use configured sorting direction\n sortingOptions.sortingOrder\n ];\n return orderBy(nodes, identifiers2, orders);\n}\nclass Navigation extends TypedEventTarget {\n _views = [];\n _currentView = null;\n /**\n * Register a new view on the navigation\n * @param view The view to register\n * @throws `Error` is thrown if a view with the same id is already registered\n */\n register(view) {\n if (this._views.find((search) => search.id === view.id)) {\n throw new Error(`View id ${view.id} is already registered`);\n }\n this._views.push(view);\n this.dispatchTypedEvent(\"update\", new CustomEvent(\"update\"));\n }\n /**\n * Remove a registered view\n * @param id The id of the view to remove\n */\n remove(id) {\n const index = this._views.findIndex((view) => view.id === id);\n if (index !== -1) {\n this._views.splice(index, 1);\n this.dispatchTypedEvent(\"update\", new CustomEvent(\"update\"));\n }\n }\n /**\n * Set the currently active view\n * @fires UpdateActiveViewEvent\n * @param view New active view\n */\n setActive(view) {\n this._currentView = view;\n const event = new CustomEvent(\"updateActive\", { detail: view });\n this.dispatchTypedEvent(\"updateActive\", event);\n }\n /**\n * The currently active files view\n */\n get active() {\n return this._currentView;\n }\n /**\n * All registered views\n */\n get views() {\n return this._views;\n }\n}\nconst getNavigation = function() {\n if (typeof window._nc_navigation === \"undefined\") {\n window._nc_navigation = new Navigation();\n logger.debug(\"Navigation service initialized\");\n }\n return window._nc_navigation;\n};\nclass Column {\n _column;\n constructor(column) {\n isValidColumn(column);\n this._column = column;\n }\n get id() {\n return this._column.id;\n }\n get title() {\n return this._column.title;\n }\n get render() {\n return this._column.render;\n }\n get sort() {\n return this._column.sort;\n }\n get summary() {\n return this._column.summary;\n }\n}\nconst isValidColumn = function(column) {\n if (!column.id || typeof column.id !== \"string\") {\n throw new Error(\"A column id is required\");\n }\n if (!column.title || typeof column.title !== \"string\") {\n throw new Error(\"A column title is required\");\n }\n if (!column.render || typeof column.render !== \"function\") {\n throw new Error(\"A render function is required\");\n }\n if (column.sort && typeof column.sort !== \"function\") {\n throw new Error(\"Column sortFunction must be a function\");\n }\n if (column.summary && typeof column.summary !== \"function\") {\n throw new Error(\"Column summary must be a function\");\n }\n return true;\n};\nfunction getDefaultExportFromCjs(x) {\n return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n}\nvar validator$2 = {};\nvar util$3 = {};\n(function(exports) {\n const nameStartChar = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n const nameChar = nameStartChar + \"\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n const nameRegexp = \"[\" + nameStartChar + \"][\" + nameChar + \"]*\";\n const regexName = new RegExp(\"^\" + nameRegexp + \"$\");\n const getAllMatches = function(string, regex) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches = [];\n allmatches.startIndex = regex.lastIndex - match[0].length;\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n };\n const isName = function(string) {\n const match = regexName.exec(string);\n return !(match === null || typeof match === \"undefined\");\n };\n exports.isExist = function(v) {\n return typeof v !== \"undefined\";\n };\n exports.isEmptyObject = function(obj) {\n return Object.keys(obj).length === 0;\n };\n exports.merge = function(target, a, arrayMode) {\n if (a) {\n const keys = Object.keys(a);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n if (arrayMode === \"strict\") {\n target[keys[i]] = [a[keys[i]]];\n } else {\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n };\n exports.getValue = function(v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return \"\";\n }\n };\n exports.isName = isName;\n exports.getAllMatches = getAllMatches;\n exports.nameRegexp = nameRegexp;\n})(util$3);\nconst util$2 = util$3;\nconst defaultOptions$2 = {\n allowBooleanAttributes: false,\n //A tag can have attributes without any value\n unpairedTags: []\n};\nvalidator$2.validate = function(xmlData, options) {\n options = Object.assign({}, defaultOptions$2, options);\n const tags = [];\n let tagFound = false;\n let reachedRoot = false;\n if (xmlData[0] === \"\\uFEFF\") {\n xmlData = xmlData.substr(1);\n }\n for (let i = 0; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\" && xmlData[i + 1] === \"?\") {\n i += 2;\n i = readPI(xmlData, i);\n if (i.err) return i;\n } else if (xmlData[i] === \"<\") {\n let tagStartPos = i;\n i++;\n if (xmlData[i] === \"!\") {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === \"/\") {\n closingTag = true;\n i++;\n }\n let tagName = \"\";\n for (; i < xmlData.length && xmlData[i] !== \">\" && xmlData[i] !== \" \" && xmlData[i] !== \"\t\" && xmlData[i] !== \"\\n\" && xmlData[i] !== \"\\r\"; i++) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substring(0, tagName.length - 1);\n i--;\n }\n if (!validateTagName(tagName)) {\n let msg;\n if (tagName.trim().length === 0) {\n msg = \"Invalid space after '<'.\";\n } else {\n msg = \"Tag '\" + tagName + \"' is an invalid name.\";\n }\n return getErrorObject(\"InvalidTag\", msg, getLineNumberForPosition(xmlData, i));\n }\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return getErrorObject(\"InvalidAttr\", \"Attributes for '\" + tagName + \"' have open quote.\", getLineNumberForPosition(xmlData, i));\n }\n let attrStr = result.value;\n i = result.index;\n if (attrStr[attrStr.length - 1] === \"/\") {\n const attrStrStart = i - attrStr.length;\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n } else {\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));\n }\n } else if (closingTag) {\n if (!result.tagClosed) {\n return getErrorObject(\"InvalidTag\", \"Closing tag '\" + tagName + \"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n } else if (attrStr.trim().length > 0) {\n return getErrorObject(\"InvalidTag\", \"Closing tag '\" + tagName + \"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else if (tags.length === 0) {\n return getErrorObject(\"InvalidTag\", \"Closing tag '\" + tagName + \"' has not been opened.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else {\n const otg = tags.pop();\n if (tagName !== otg.tagName) {\n let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);\n return getErrorObject(\n \"InvalidTag\",\n \"Expected closing tag '\" + otg.tagName + \"' (opened in line \" + openPos.line + \", col \" + openPos.col + \") instead of closing tag '\" + tagName + \"'.\",\n getLineNumberForPosition(xmlData, tagStartPos)\n );\n }\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n if (reachedRoot === true) {\n return getErrorObject(\"InvalidXml\", \"Multiple possible root nodes found.\", getLineNumberForPosition(xmlData, i));\n } else if (options.unpairedTags.indexOf(tagName) !== -1) ;\n else {\n tags.push({ tagName, tagStartPos });\n }\n tagFound = true;\n }\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"!\") {\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else if (xmlData[i + 1] === \"?\") {\n i = readPI(xmlData, ++i);\n if (i.err) return i;\n } else {\n break;\n }\n } else if (xmlData[i] === \"&\") {\n const afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1)\n return getErrorObject(\"InvalidChar\", \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n } else {\n if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {\n return getErrorObject(\"InvalidXml\", \"Extra text at the end\", getLineNumberForPosition(xmlData, i));\n }\n }\n }\n if (xmlData[i] === \"<\") {\n i--;\n }\n }\n } else {\n if (isWhiteSpace(xmlData[i])) {\n continue;\n }\n return getErrorObject(\"InvalidChar\", \"char '\" + xmlData[i] + \"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n if (!tagFound) {\n return getErrorObject(\"InvalidXml\", \"Start tag expected.\", 1);\n } else if (tags.length == 1) {\n return getErrorObject(\"InvalidTag\", \"Unclosed tag '\" + tags[0].tagName + \"'.\", getLineNumberForPosition(xmlData, tags[0].tagStartPos));\n } else if (tags.length > 0) {\n return getErrorObject(\"InvalidXml\", \"Invalid '\" + JSON.stringify(tags.map((t2) => t2.tagName), null, 4).replace(/\\r?\\n/g, \"\") + \"' found.\", { line: 1, col: 1 });\n }\n return true;\n};\nfunction isWhiteSpace(char) {\n return char === \" \" || char === \"\t\" || char === \"\\n\" || char === \"\\r\";\n}\nfunction readPI(xmlData, i) {\n const start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == \"?\" || xmlData[i] == \" \") {\n const tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === \"xml\") {\n return getErrorObject(\"InvalidXml\", \"XML declaration allowed only at the start of the document.\", getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == \"?\" && xmlData[i + 1] == \">\") {\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \"-\") {\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === \"-\" && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n } else if (xmlData.length > i + 8 && xmlData[i + 1] === \"D\" && xmlData[i + 2] === \"O\" && xmlData[i + 3] === \"C\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"Y\" && xmlData[i + 6] === \"P\" && xmlData[i + 7] === \"E\") {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n angleBracketsCount++;\n } else if (xmlData[i] === \">\") {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (xmlData.length > i + 9 && xmlData[i + 1] === \"[\" && xmlData[i + 2] === \"C\" && xmlData[i + 3] === \"D\" && xmlData[i + 4] === \"A\" && xmlData[i + 5] === \"T\" && xmlData[i + 6] === \"A\" && xmlData[i + 7] === \"[\") {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"]\" && xmlData[i + 1] === \"]\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n }\n return i;\n}\nconst doubleQuote = '\"';\nconst singleQuote = \"'\";\nfunction readAttributeStr(xmlData, i) {\n let attrStr = \"\";\n let startChar = \"\";\n let tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === \"\") {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) ;\n else {\n startChar = \"\";\n }\n } else if (xmlData[i] === \">\") {\n if (startChar === \"\") {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== \"\") {\n return false;\n }\n return {\n value: attrStr,\n index: i,\n tagClosed\n };\n}\nconst validAttrStrRegxp = new RegExp(`(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\"])(([\\\\s\\\\S])*?)\\\\5)?`, \"g\");\nfunction validateAttributeString(attrStr, options) {\n const matches = util$2.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n for (let i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + matches[i][2] + \"' has no space in starting.\", getPositionFromMatch(matches[i]));\n } else if (matches[i][3] !== void 0 && matches[i][4] === void 0) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + matches[i][2] + \"' is without value.\", getPositionFromMatch(matches[i]));\n } else if (matches[i][3] === void 0 && !options.allowBooleanAttributes) {\n return getErrorObject(\"InvalidAttr\", \"boolean attribute '\" + matches[i][2] + \"' is not allowed.\", getPositionFromMatch(matches[i]));\n }\n const attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + attrName + \"' is an invalid name.\", getPositionFromMatch(matches[i]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n attrNames[attrName] = 1;\n } else {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + attrName + \"' is repeated.\", getPositionFromMatch(matches[i]));\n }\n }\n return true;\n}\nfunction validateNumberAmpersand(xmlData, i) {\n let re2 = /\\d/;\n if (xmlData[i] === \"x\") {\n i++;\n re2 = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \";\")\n return i;\n if (!xmlData[i].match(re2))\n break;\n }\n return -1;\n}\nfunction validateAmpersand(xmlData, i) {\n i++;\n if (xmlData[i] === \";\")\n return -1;\n if (xmlData[i] === \"#\") {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n let count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i] === \";\")\n break;\n return -1;\n }\n return i;\n}\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code,\n msg: message,\n line: lineNumber.line || lineNumber,\n col: lineNumber.col\n }\n };\n}\nfunction validateAttrName(attrName) {\n return util$2.isName(attrName);\n}\nfunction validateTagName(tagname) {\n return util$2.isName(tagname);\n}\nfunction getLineNumberForPosition(xmlData, index) {\n const lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return {\n line: lines.length,\n // column number is last line's length + 1, because column numbering starts at 1:\n col: lines[lines.length - 1].length + 1\n };\n}\nfunction getPositionFromMatch(match) {\n return match.startIndex + match[1].length;\n}\nvar OptionsBuilder = {};\nconst defaultOptions$1 = {\n preserveOrder: false,\n attributeNamePrefix: \"@_\",\n attributesGroupName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n removeNSPrefix: false,\n // remove NS from tag name or attribute name if true\n allowBooleanAttributes: false,\n //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: true,\n parseAttributeValue: false,\n trimValues: true,\n //Trim string values of tag and attributes\n cdataPropName: false,\n numberParseOptions: {\n hex: true,\n leadingZeros: true,\n eNotation: true\n },\n tagValueProcessor: function(tagName, val2) {\n return val2;\n },\n attributeValueProcessor: function(attrName, val2) {\n return val2;\n },\n stopNodes: [],\n //nested tags will not be parsed even for errors\n alwaysCreateTextNode: false,\n isArray: () => false,\n commentPropName: false,\n unpairedTags: [],\n processEntities: true,\n htmlEntities: false,\n ignoreDeclaration: false,\n ignorePiTags: false,\n transformTagName: false,\n transformAttributeName: false,\n updateTag: function(tagName, jPath, attrs) {\n return tagName;\n }\n // skipEmptyListItem: false\n};\nconst buildOptions$1 = function(options) {\n return Object.assign({}, defaultOptions$1, options);\n};\nOptionsBuilder.buildOptions = buildOptions$1;\nOptionsBuilder.defaultOptions = defaultOptions$1;\nclass XmlNode {\n constructor(tagname) {\n this.tagname = tagname;\n this.child = [];\n this[\":@\"] = {};\n }\n add(key, val2) {\n if (key === \"__proto__\") key = \"#__proto__\";\n this.child.push({ [key]: val2 });\n }\n addChild(node) {\n if (node.tagname === \"__proto__\") node.tagname = \"#__proto__\";\n if (node[\":@\"] && Object.keys(node[\":@\"]).length > 0) {\n this.child.push({ [node.tagname]: node.child, [\":@\"]: node[\":@\"] });\n } else {\n this.child.push({ [node.tagname]: node.child });\n }\n }\n}\nvar xmlNode$1 = XmlNode;\nconst util$1 = util$3;\nfunction readDocType$1(xmlData, i) {\n const entities = {};\n if (xmlData[i + 3] === \"O\" && xmlData[i + 4] === \"C\" && xmlData[i + 5] === \"T\" && xmlData[i + 6] === \"Y\" && xmlData[i + 7] === \"P\" && xmlData[i + 8] === \"E\") {\n i = i + 9;\n let angleBracketsCount = 1;\n let hasBody = false, comment = false;\n let exp = \"\";\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\" && !comment) {\n if (hasBody && isEntity(xmlData, i)) {\n i += 7;\n [entityName, val, i] = readEntityExp(xmlData, i + 1);\n if (val.indexOf(\"&\") === -1)\n entities[validateEntityName(entityName)] = {\n regx: RegExp(`&${entityName};`, \"g\"),\n val\n };\n } else if (hasBody && isElement(xmlData, i)) i += 8;\n else if (hasBody && isAttlist(xmlData, i)) i += 8;\n else if (hasBody && isNotation(xmlData, i)) i += 9;\n else if (isComment) comment = true;\n else throw new Error(\"Invalid DOCTYPE\");\n angleBracketsCount++;\n exp = \"\";\n } else if (xmlData[i] === \">\") {\n if (comment) {\n if (xmlData[i - 1] === \"-\" && xmlData[i - 2] === \"-\") {\n comment = false;\n angleBracketsCount--;\n }\n } else {\n angleBracketsCount--;\n }\n if (angleBracketsCount === 0) {\n break;\n }\n } else if (xmlData[i] === \"[\") {\n hasBody = true;\n } else {\n exp += xmlData[i];\n }\n }\n if (angleBracketsCount !== 0) {\n throw new Error(`Unclosed DOCTYPE`);\n }\n } else {\n throw new Error(`Invalid Tag instead of DOCTYPE`);\n }\n return { entities, i };\n}\nfunction readEntityExp(xmlData, i) {\n let entityName2 = \"\";\n for (; i < xmlData.length && (xmlData[i] !== \"'\" && xmlData[i] !== '\"'); i++) {\n entityName2 += xmlData[i];\n }\n entityName2 = entityName2.trim();\n if (entityName2.indexOf(\" \") !== -1) throw new Error(\"External entites are not supported\");\n const startChar = xmlData[i++];\n let val2 = \"\";\n for (; i < xmlData.length && xmlData[i] !== startChar; i++) {\n val2 += xmlData[i];\n }\n return [entityName2, val2, i];\n}\nfunction isComment(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"-\" && xmlData[i + 3] === \"-\") return true;\n return false;\n}\nfunction isEntity(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"E\" && xmlData[i + 3] === \"N\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"I\" && xmlData[i + 6] === \"T\" && xmlData[i + 7] === \"Y\") return true;\n return false;\n}\nfunction isElement(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"E\" && xmlData[i + 3] === \"L\" && xmlData[i + 4] === \"E\" && xmlData[i + 5] === \"M\" && xmlData[i + 6] === \"E\" && xmlData[i + 7] === \"N\" && xmlData[i + 8] === \"T\") return true;\n return false;\n}\nfunction isAttlist(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"A\" && xmlData[i + 3] === \"T\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"L\" && xmlData[i + 6] === \"I\" && xmlData[i + 7] === \"S\" && xmlData[i + 8] === \"T\") return true;\n return false;\n}\nfunction isNotation(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"N\" && xmlData[i + 3] === \"O\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"A\" && xmlData[i + 6] === \"T\" && xmlData[i + 7] === \"I\" && xmlData[i + 8] === \"O\" && xmlData[i + 9] === \"N\") return true;\n return false;\n}\nfunction validateEntityName(name) {\n if (util$1.isName(name))\n return name;\n else\n throw new Error(`Invalid entity name ${name}`);\n}\nvar DocTypeReader = readDocType$1;\nconst hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\nconst numRegex = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\nif (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n}\nconst consider = {\n hex: true,\n leadingZeros: true,\n decimalPoint: \".\",\n eNotation: true\n //skipLike: /regex/\n};\nfunction toNumber$1(str, options = {}) {\n options = Object.assign({}, consider, options);\n if (!str || typeof str !== \"string\") return str;\n let trimmedStr = str.trim();\n if (options.skipLike !== void 0 && options.skipLike.test(trimmedStr)) return str;\n else if (options.hex && hexRegex.test(trimmedStr)) {\n return Number.parseInt(trimmedStr, 16);\n } else {\n const match = numRegex.exec(trimmedStr);\n if (match) {\n const sign = match[1];\n const leadingZeros = match[2];\n let numTrimmedByZeros = trimZeros(match[3]);\n const eNotation = match[4] || match[6];\n if (!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== \".\") return str;\n else if (!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== \".\") return str;\n else {\n const num = Number(trimmedStr);\n const numStr = \"\" + num;\n if (numStr.search(/[eE]/) !== -1) {\n if (options.eNotation) return num;\n else return str;\n } else if (eNotation) {\n if (options.eNotation) return num;\n else return str;\n } else if (trimmedStr.indexOf(\".\") !== -1) {\n if (numStr === \"0\" && numTrimmedByZeros === \"\") return num;\n else if (numStr === numTrimmedByZeros) return num;\n else if (sign && numStr === \"-\" + numTrimmedByZeros) return num;\n else return str;\n }\n if (leadingZeros) {\n if (numTrimmedByZeros === numStr) return num;\n else if (sign + numTrimmedByZeros === numStr) return num;\n else return str;\n }\n if (trimmedStr === numStr) return num;\n else if (trimmedStr === sign + numStr) return num;\n return str;\n }\n } else {\n return str;\n }\n }\n}\nfunction trimZeros(numStr) {\n if (numStr && numStr.indexOf(\".\") !== -1) {\n numStr = numStr.replace(/0+$/, \"\");\n if (numStr === \".\") numStr = \"0\";\n else if (numStr[0] === \".\") numStr = \"0\" + numStr;\n else if (numStr[numStr.length - 1] === \".\") numStr = numStr.substr(0, numStr.length - 1);\n return numStr;\n }\n return numStr;\n}\nvar strnum = toNumber$1;\nconst util = util$3;\nconst xmlNode = xmlNode$1;\nconst readDocType = DocTypeReader;\nconst toNumber = strnum;\nlet OrderedObjParser$1 = class OrderedObjParser {\n constructor(options) {\n this.options = options;\n this.currentNode = null;\n this.tagsNodeStack = [];\n this.docTypeEntities = {};\n this.lastEntities = {\n \"apos\": { regex: /&(apos|#39|#x27);/g, val: \"'\" },\n \"gt\": { regex: /&(gt|#62|#x3E);/g, val: \">\" },\n \"lt\": { regex: /&(lt|#60|#x3C);/g, val: \"<\" },\n \"quot\": { regex: /&(quot|#34|#x22);/g, val: '\"' }\n };\n this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: \"&\" };\n this.htmlEntities = {\n \"space\": { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n \"cent\": { regex: /&(cent|#162);/g, val: \"¢\" },\n \"pound\": { regex: /&(pound|#163);/g, val: \"£\" },\n \"yen\": { regex: /&(yen|#165);/g, val: \"¥\" },\n \"euro\": { regex: /&(euro|#8364);/g, val: \"€\" },\n \"copyright\": { regex: /&(copy|#169);/g, val: \"©\" },\n \"reg\": { regex: /&(reg|#174);/g, val: \"®\" },\n \"inr\": { regex: /&(inr|#8377);/g, val: \"₹\" },\n \"num_dec\": { regex: /&#([0-9]{1,7});/g, val: (_, str) => String.fromCharCode(Number.parseInt(str, 10)) },\n \"num_hex\": { regex: /&#x([0-9a-fA-F]{1,6});/g, val: (_, str) => String.fromCharCode(Number.parseInt(str, 16)) }\n };\n this.addExternalEntities = addExternalEntities;\n this.parseXml = parseXml;\n this.parseTextData = parseTextData;\n this.resolveNameSpace = resolveNameSpace;\n this.buildAttributesMap = buildAttributesMap;\n this.isItStopNode = isItStopNode;\n this.replaceEntitiesValue = replaceEntitiesValue$1;\n this.readStopNodeData = readStopNodeData;\n this.saveTextToParentTag = saveTextToParentTag;\n this.addChild = addChild;\n }\n};\nfunction addExternalEntities(externalEntities) {\n const entKeys = Object.keys(externalEntities);\n for (let i = 0; i < entKeys.length; i++) {\n const ent = entKeys[i];\n this.lastEntities[ent] = {\n regex: new RegExp(\"&\" + ent + \";\", \"g\"),\n val: externalEntities[ent]\n };\n }\n}\nfunction parseTextData(val2, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n if (val2 !== void 0) {\n if (this.options.trimValues && !dontTrim) {\n val2 = val2.trim();\n }\n if (val2.length > 0) {\n if (!escapeEntities) val2 = this.replaceEntitiesValue(val2);\n const newval = this.options.tagValueProcessor(tagName, val2, jPath, hasAttributes, isLeafNode);\n if (newval === null || newval === void 0) {\n return val2;\n } else if (typeof newval !== typeof val2 || newval !== val2) {\n return newval;\n } else if (this.options.trimValues) {\n return parseValue(val2, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n const trimmedVal = val2.trim();\n if (trimmedVal === val2) {\n return parseValue(val2, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n return val2;\n }\n }\n }\n }\n}\nfunction resolveNameSpace(tagname) {\n if (this.options.removeNSPrefix) {\n const tags = tagname.split(\":\");\n const prefix = tagname.charAt(0) === \"/\" ? \"/\" : \"\";\n if (tags[0] === \"xmlns\") {\n return \"\";\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\nconst attrsRegx = new RegExp(`([^\\\\s=]+)\\\\s*(=\\\\s*(['\"])([\\\\s\\\\S]*?)\\\\3)?`, \"gm\");\nfunction buildAttributesMap(attrStr, jPath, tagName) {\n if (!this.options.ignoreAttributes && typeof attrStr === \"string\") {\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const len = matches.length;\n const attrs = {};\n for (let i = 0; i < len; i++) {\n const attrName = this.resolveNameSpace(matches[i][1]);\n let oldVal = matches[i][4];\n let aName = this.options.attributeNamePrefix + attrName;\n if (attrName.length) {\n if (this.options.transformAttributeName) {\n aName = this.options.transformAttributeName(aName);\n }\n if (aName === \"__proto__\") aName = \"#__proto__\";\n if (oldVal !== void 0) {\n if (this.options.trimValues) {\n oldVal = oldVal.trim();\n }\n oldVal = this.replaceEntitiesValue(oldVal);\n const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);\n if (newVal === null || newVal === void 0) {\n attrs[aName] = oldVal;\n } else if (typeof newVal !== typeof oldVal || newVal !== oldVal) {\n attrs[aName] = newVal;\n } else {\n attrs[aName] = parseValue(\n oldVal,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n }\n } else if (this.options.allowBooleanAttributes) {\n attrs[aName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (this.options.attributesGroupName) {\n const attrCollection = {};\n attrCollection[this.options.attributesGroupName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\nconst parseXml = function(xmlData) {\n xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\");\n const xmlObj = new xmlNode(\"!xml\");\n let currentNode = xmlObj;\n let textData = \"\";\n let jPath = \"\";\n for (let i = 0; i < xmlData.length; i++) {\n const ch = xmlData[i];\n if (ch === \"<\") {\n if (xmlData[i + 1] === \"/\") {\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\");\n let tagName = xmlData.substring(i + 2, closeIndex).trim();\n if (this.options.removeNSPrefix) {\n const colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n }\n }\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n if (currentNode) {\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n }\n const lastTagName = jPath.substring(jPath.lastIndexOf(\".\") + 1);\n if (tagName && this.options.unpairedTags.indexOf(tagName) !== -1) {\n throw new Error(`Unpaired tag can not be used as closing tag: `);\n }\n let propIndex = 0;\n if (lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1) {\n propIndex = jPath.lastIndexOf(\".\", jPath.lastIndexOf(\".\") - 1);\n this.tagsNodeStack.pop();\n } else {\n propIndex = jPath.lastIndexOf(\".\");\n }\n jPath = jPath.substring(0, propIndex);\n currentNode = this.tagsNodeStack.pop();\n textData = \"\";\n i = closeIndex;\n } else if (xmlData[i + 1] === \"?\") {\n let tagData = readTagExp(xmlData, i, false, \"?>\");\n if (!tagData) throw new Error(\"Pi Tag is not closed.\");\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n if (this.options.ignoreDeclaration && tagData.tagName === \"?xml\" || this.options.ignorePiTags) ;\n else {\n const childNode = new xmlNode(tagData.tagName);\n childNode.add(this.options.textNodeName, \"\");\n if (tagData.tagName !== tagData.tagExp && tagData.attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n }\n i = tagData.closeIndex + 1;\n } else if (xmlData.substr(i + 1, 3) === \"!--\") {\n const endIndex = findClosingIndex(xmlData, \"-->\", i + 4, \"Comment is not closed.\");\n if (this.options.commentPropName) {\n const comment = xmlData.substring(i + 4, endIndex - 2);\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n currentNode.add(this.options.commentPropName, [{ [this.options.textNodeName]: comment }]);\n }\n i = endIndex;\n } else if (xmlData.substr(i + 1, 2) === \"!D\") {\n const result = readDocType(xmlData, i);\n this.docTypeEntities = result.entities;\n i = result.i;\n } else if (xmlData.substr(i + 1, 2) === \"![\") {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2;\n const tagExp = xmlData.substring(i + 9, closeIndex);\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n let val2 = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);\n if (val2 == void 0) val2 = \"\";\n if (this.options.cdataPropName) {\n currentNode.add(this.options.cdataPropName, [{ [this.options.textNodeName]: tagExp }]);\n } else {\n currentNode.add(this.options.textNodeName, val2);\n }\n i = closeIndex + 2;\n } else {\n let result = readTagExp(xmlData, i, this.options.removeNSPrefix);\n let tagName = result.tagName;\n const rawTagName = result.rawTagName;\n let tagExp = result.tagExp;\n let attrExpPresent = result.attrExpPresent;\n let closeIndex = result.closeIndex;\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n if (currentNode && textData) {\n if (currentNode.tagname !== \"!xml\") {\n textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n }\n }\n const lastTag = currentNode;\n if (lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1) {\n currentNode = this.tagsNodeStack.pop();\n jPath = jPath.substring(0, jPath.lastIndexOf(\".\"));\n }\n if (tagName !== xmlObj.tagname) {\n jPath += jPath ? \".\" + tagName : tagName;\n }\n if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) {\n let tagContent = \"\";\n if (tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n i = result.closeIndex;\n } else if (this.options.unpairedTags.indexOf(tagName) !== -1) {\n i = result.closeIndex;\n } else {\n const result2 = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n if (!result2) throw new Error(`Unexpected end of ${rawTagName}`);\n i = result2.i;\n tagContent = result2.tagContent;\n }\n const childNode = new xmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n if (tagContent) {\n tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);\n }\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n childNode.add(this.options.textNodeName, tagContent);\n this.addChild(currentNode, childNode, jPath);\n } else {\n if (tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n const childNode = new xmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n } else {\n const childNode = new xmlNode(tagName);\n this.tagsNodeStack.push(currentNode);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n currentNode = childNode;\n }\n textData = \"\";\n i = closeIndex;\n }\n }\n } else {\n textData += xmlData[i];\n }\n }\n return xmlObj.child;\n};\nfunction addChild(currentNode, childNode, jPath) {\n const result = this.options.updateTag(childNode.tagname, jPath, childNode[\":@\"]);\n if (result === false) ;\n else if (typeof result === \"string\") {\n childNode.tagname = result;\n currentNode.addChild(childNode);\n } else {\n currentNode.addChild(childNode);\n }\n}\nconst replaceEntitiesValue$1 = function(val2) {\n if (this.options.processEntities) {\n for (let entityName2 in this.docTypeEntities) {\n const entity = this.docTypeEntities[entityName2];\n val2 = val2.replace(entity.regx, entity.val);\n }\n for (let entityName2 in this.lastEntities) {\n const entity = this.lastEntities[entityName2];\n val2 = val2.replace(entity.regex, entity.val);\n }\n if (this.options.htmlEntities) {\n for (let entityName2 in this.htmlEntities) {\n const entity = this.htmlEntities[entityName2];\n val2 = val2.replace(entity.regex, entity.val);\n }\n }\n val2 = val2.replace(this.ampEntity.regex, this.ampEntity.val);\n }\n return val2;\n};\nfunction saveTextToParentTag(textData, currentNode, jPath, isLeafNode) {\n if (textData) {\n if (isLeafNode === void 0) isLeafNode = Object.keys(currentNode.child).length === 0;\n textData = this.parseTextData(\n textData,\n currentNode.tagname,\n jPath,\n false,\n currentNode[\":@\"] ? Object.keys(currentNode[\":@\"]).length !== 0 : false,\n isLeafNode\n );\n if (textData !== void 0 && textData !== \"\")\n currentNode.add(this.options.textNodeName, textData);\n textData = \"\";\n }\n return textData;\n}\nfunction isItStopNode(stopNodes, jPath, currentTagName) {\n const allNodesExp = \"*.\" + currentTagName;\n for (const stopNodePath in stopNodes) {\n const stopNodeExp = stopNodes[stopNodePath];\n if (allNodesExp === stopNodeExp || jPath === stopNodeExp) return true;\n }\n return false;\n}\nfunction tagExpWithClosingIndex(xmlData, i, closingChar = \">\") {\n let attrBoundary;\n let tagExp = \"\";\n for (let index = i; index < xmlData.length; index++) {\n let ch = xmlData[index];\n if (attrBoundary) {\n if (ch === attrBoundary) attrBoundary = \"\";\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === closingChar[0]) {\n if (closingChar[1]) {\n if (xmlData[index + 1] === closingChar[1]) {\n return {\n data: tagExp,\n index\n };\n }\n } else {\n return {\n data: tagExp,\n index\n };\n }\n } else if (ch === \"\t\") {\n ch = \" \";\n }\n tagExp += ch;\n }\n}\nfunction findClosingIndex(xmlData, str, i, errMsg) {\n const closingIndex = xmlData.indexOf(str, i);\n if (closingIndex === -1) {\n throw new Error(errMsg);\n } else {\n return closingIndex + str.length - 1;\n }\n}\nfunction readTagExp(xmlData, i, removeNSPrefix, closingChar = \">\") {\n const result = tagExpWithClosingIndex(xmlData, i + 1, closingChar);\n if (!result) return;\n let tagExp = result.data;\n const closeIndex = result.index;\n const separatorIndex = tagExp.search(/\\s/);\n let tagName = tagExp;\n let attrExpPresent = true;\n if (separatorIndex !== -1) {\n tagName = tagExp.substring(0, separatorIndex);\n tagExp = tagExp.substring(separatorIndex + 1).trimStart();\n }\n const rawTagName = tagName;\n if (removeNSPrefix) {\n const colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n }\n }\n return {\n tagName,\n tagExp,\n closeIndex,\n attrExpPresent,\n rawTagName\n };\n}\nfunction readStopNodeData(xmlData, tagName, i) {\n const startIndex = i;\n let openTagCount = 1;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"/\") {\n const closeIndex = findClosingIndex(xmlData, \">\", i, `${tagName} is not closed`);\n let closeTagName = xmlData.substring(i + 2, closeIndex).trim();\n if (closeTagName === tagName) {\n openTagCount--;\n if (openTagCount === 0) {\n return {\n tagContent: xmlData.substring(startIndex, i),\n i: closeIndex\n };\n }\n }\n i = closeIndex;\n } else if (xmlData[i + 1] === \"?\") {\n const closeIndex = findClosingIndex(xmlData, \"?>\", i + 1, \"StopNode is not closed.\");\n i = closeIndex;\n } else if (xmlData.substr(i + 1, 3) === \"!--\") {\n const closeIndex = findClosingIndex(xmlData, \"-->\", i + 3, \"StopNode is not closed.\");\n i = closeIndex;\n } else if (xmlData.substr(i + 1, 2) === \"![\") {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n i = closeIndex;\n } else {\n const tagData = readTagExp(xmlData, i, \">\");\n if (tagData) {\n const openTagName = tagData && tagData.tagName;\n if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length - 1] !== \"/\") {\n openTagCount++;\n }\n i = tagData.closeIndex;\n }\n }\n }\n }\n}\nfunction parseValue(val2, shouldParse, options) {\n if (shouldParse && typeof val2 === \"string\") {\n const newval = val2.trim();\n if (newval === \"true\") return true;\n else if (newval === \"false\") return false;\n else return toNumber(val2, options);\n } else {\n if (util.isExist(val2)) {\n return val2;\n } else {\n return \"\";\n }\n }\n}\nvar OrderedObjParser_1 = OrderedObjParser$1;\nvar node2json = {};\nfunction prettify$1(node, options) {\n return compress(node, options);\n}\nfunction compress(arr, options, jPath) {\n let text;\n const compressedObj = {};\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const property = propName$1(tagObj);\n let newJpath = \"\";\n if (jPath === void 0) newJpath = property;\n else newJpath = jPath + \".\" + property;\n if (property === options.textNodeName) {\n if (text === void 0) text = tagObj[property];\n else text += \"\" + tagObj[property];\n } else if (property === void 0) {\n continue;\n } else if (tagObj[property]) {\n let val2 = compress(tagObj[property], options, newJpath);\n const isLeaf = isLeafTag(val2, options);\n if (tagObj[\":@\"]) {\n assignAttributes(val2, tagObj[\":@\"], newJpath, options);\n } else if (Object.keys(val2).length === 1 && val2[options.textNodeName] !== void 0 && !options.alwaysCreateTextNode) {\n val2 = val2[options.textNodeName];\n } else if (Object.keys(val2).length === 0) {\n if (options.alwaysCreateTextNode) val2[options.textNodeName] = \"\";\n else val2 = \"\";\n }\n if (compressedObj[property] !== void 0 && compressedObj.hasOwnProperty(property)) {\n if (!Array.isArray(compressedObj[property])) {\n compressedObj[property] = [compressedObj[property]];\n }\n compressedObj[property].push(val2);\n } else {\n if (options.isArray(property, newJpath, isLeaf)) {\n compressedObj[property] = [val2];\n } else {\n compressedObj[property] = val2;\n }\n }\n }\n }\n if (typeof text === \"string\") {\n if (text.length > 0) compressedObj[options.textNodeName] = text;\n } else if (text !== void 0) compressedObj[options.textNodeName] = text;\n return compressedObj;\n}\nfunction propName$1(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key !== \":@\") return key;\n }\n}\nfunction assignAttributes(obj, attrMap, jpath, options) {\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n const atrrName = keys[i];\n if (options.isArray(atrrName, jpath + \".\" + atrrName, true, true)) {\n obj[atrrName] = [attrMap[atrrName]];\n } else {\n obj[atrrName] = attrMap[atrrName];\n }\n }\n }\n}\nfunction isLeafTag(obj, options) {\n const { textNodeName } = options;\n const propCount = Object.keys(obj).length;\n if (propCount === 0) {\n return true;\n }\n if (propCount === 1 && (obj[textNodeName] || typeof obj[textNodeName] === \"boolean\" || obj[textNodeName] === 0)) {\n return true;\n }\n return false;\n}\nnode2json.prettify = prettify$1;\nconst { buildOptions } = OptionsBuilder;\nconst OrderedObjParser2 = OrderedObjParser_1;\nconst { prettify } = node2json;\nconst validator$1 = validator$2;\nlet XMLParser$1 = class XMLParser {\n constructor(options) {\n this.externalEntities = {};\n this.options = buildOptions(options);\n }\n /**\n * Parse XML dats to JS object \n * @param {string|Buffer} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(xmlData, validationOption) {\n if (typeof xmlData === \"string\") ;\n else if (xmlData.toString) {\n xmlData = xmlData.toString();\n } else {\n throw new Error(\"XML data is accepted in String or Bytes[] form.\");\n }\n if (validationOption) {\n if (validationOption === true) validationOption = {};\n const result = validator$1.validate(xmlData, validationOption);\n if (result !== true) {\n throw Error(`${result.err.msg}:${result.err.line}:${result.err.col}`);\n }\n }\n const orderedObjParser = new OrderedObjParser2(this.options);\n orderedObjParser.addExternalEntities(this.externalEntities);\n const orderedResult = orderedObjParser.parseXml(xmlData);\n if (this.options.preserveOrder || orderedResult === void 0) return orderedResult;\n else return prettify(orderedResult, this.options);\n }\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(key, value) {\n if (value.indexOf(\"&\") !== -1) {\n throw new Error(\"Entity value can't have '&'\");\n } else if (key.indexOf(\"&\") !== -1 || key.indexOf(\";\") !== -1) {\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for ' '\");\n } else if (value === \"&\") {\n throw new Error(\"An entity with value '&' is not permitted\");\n } else {\n this.externalEntities[key] = value;\n }\n }\n};\nvar XMLParser_1 = XMLParser$1;\nconst EOL = \"\\n\";\nfunction toXml(jArray, options) {\n let indentation = \"\";\n if (options.format && options.indentBy.length > 0) {\n indentation = EOL;\n }\n return arrToStr(jArray, options, \"\", indentation);\n}\nfunction arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const tagName = propName(tagObj);\n if (tagName === void 0) continue;\n let newJPath = \"\";\n if (jPath.length === 0) newJPath = tagName;\n else newJPath = `${jPath}.${tagName}`;\n if (tagName === options.textNodeName) {\n let tagText = tagObj[tagName];\n if (!isStopNode(newJPath, options)) {\n tagText = options.tagValueProcessor(tagName, tagText);\n tagText = replaceEntitiesValue(tagText, options);\n }\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += tagText;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.cdataPropName) {\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += ``;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + ``;\n isPreviousElementTag = true;\n continue;\n } else if (tagName[0] === \"?\") {\n const attStr2 = attr_to_str(tagObj[\":@\"], options);\n const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\";\n xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr2}?>`;\n isPreviousElementTag = true;\n continue;\n }\n let newIdentation = indentation;\n if (newIdentation !== \"\") {\n newIdentation += options.indentBy;\n }\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tagStart = indentation + `<${tagName}${attStr}`;\n const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n if (options.unpairedTags.indexOf(tagName) !== -1) {\n if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n else xmlStr += tagStart + \"/>\";\n } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n xmlStr += tagStart + \"/>\";\n } else if (tagValue && tagValue.endsWith(\">\")) {\n xmlStr += tagStart + `>${tagValue}${indentation}`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"`;\n }\n isPreviousElementTag = true;\n }\n return xmlStr;\n}\nfunction propName(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (!obj.hasOwnProperty(key)) continue;\n if (key !== \":@\") return key;\n }\n}\nfunction attr_to_str(attrMap, options) {\n let attrStr = \"\";\n if (attrMap && !options.ignoreAttributes) {\n for (let attr in attrMap) {\n if (!attrMap.hasOwnProperty(attr)) continue;\n let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n attrVal = replaceEntitiesValue(attrVal, options);\n if (attrVal === true && options.suppressBooleanAttributes) {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n } else {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n }\n }\n }\n return attrStr;\n}\nfunction isStopNode(jPath, options) {\n jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n for (let index in options.stopNodes) {\n if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n }\n return false;\n}\nfunction replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i = 0; i < options.entities.length; i++) {\n const entity = options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\nvar orderedJs2Xml = toXml;\nconst buildFromOrderedJs = orderedJs2Xml;\nconst defaultOptions = {\n attributeNamePrefix: \"@_\",\n attributesGroupName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n cdataPropName: false,\n format: false,\n indentBy: \" \",\n suppressEmptyNode: false,\n suppressUnpairedNode: true,\n suppressBooleanAttributes: true,\n tagValueProcessor: function(key, a) {\n return a;\n },\n attributeValueProcessor: function(attrName, a) {\n return a;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },\n //it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"'\", \"g\"), val: \"'\" },\n { regex: new RegExp('\"', \"g\"), val: \""\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n};\nfunction Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes || this.options.attributesGroupName) {\n this.isAttribute = function() {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n this.processTextOrObjNode = processTextOrObjNode;\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = \">\\n\";\n this.newLine = \"\\n\";\n } else {\n this.indentate = function() {\n return \"\";\n };\n this.tagEndChar = \">\";\n this.newLine = \"\";\n }\n}\nBuilder.prototype.build = function(jObj) {\n if (this.options.preserveOrder) {\n return buildFromOrderedJs(jObj, this.options);\n } else {\n if (Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1) {\n jObj = {\n [this.options.arrayNodeName]: jObj\n };\n }\n return this.j2x(jObj, 0).val;\n }\n};\nBuilder.prototype.j2x = function(jObj, level) {\n let attrStr = \"\";\n let val2 = \"\";\n for (let key in jObj) {\n if (!Object.prototype.hasOwnProperty.call(jObj, key)) continue;\n if (typeof jObj[key] === \"undefined\") {\n if (this.isAttribute(key)) {\n val2 += \"\";\n }\n } else if (jObj[key] === null) {\n if (this.isAttribute(key)) {\n val2 += \"\";\n } else if (key[0] === \"?\") {\n val2 += this.indentate(level) + \"<\" + key + \"?\" + this.tagEndChar;\n } else {\n val2 += this.indentate(level) + \"<\" + key + \"/\" + this.tagEndChar;\n }\n } else if (jObj[key] instanceof Date) {\n val2 += this.buildTextValNode(jObj[key], key, \"\", level);\n } else if (typeof jObj[key] !== \"object\") {\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += this.buildAttrPairStr(attr, \"\" + jObj[key]);\n } else {\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, \"\" + jObj[key]);\n val2 += this.replaceEntitiesValue(newval);\n } else {\n val2 += this.buildTextValNode(jObj[key], key, \"\", level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n const arrLen = jObj[key].length;\n let listTagVal = \"\";\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === \"undefined\") ;\n else if (item === null) {\n if (key[0] === \"?\") val2 += this.indentate(level) + \"<\" + key + \"?\" + this.tagEndChar;\n else val2 += this.indentate(level) + \"<\" + key + \"/\" + this.tagEndChar;\n } else if (typeof item === \"object\") {\n if (this.options.oneListGroup) {\n listTagVal += this.j2x(item, level + 1).val;\n } else {\n listTagVal += this.processTextOrObjNode(item, key, level);\n }\n } else {\n listTagVal += this.buildTextValNode(item, key, \"\", level);\n }\n }\n if (this.options.oneListGroup) {\n listTagVal = this.buildObjectNode(listTagVal, key, \"\", level);\n }\n val2 += listTagVal;\n } else {\n if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += this.buildAttrPairStr(Ks[j], \"\" + jObj[key][Ks[j]]);\n }\n } else {\n val2 += this.processTextOrObjNode(jObj[key], key, level);\n }\n }\n }\n return { attrStr, val: val2 };\n};\nBuilder.prototype.buildAttrPairStr = function(attrName, val2) {\n val2 = this.options.attributeValueProcessor(attrName, \"\" + val2);\n val2 = this.replaceEntitiesValue(val2);\n if (this.options.suppressBooleanAttributes && val2 === \"true\") {\n return \" \" + attrName;\n } else return \" \" + attrName + '=\"' + val2 + '\"';\n};\nfunction processTextOrObjNode(object, key, level) {\n const result = this.j2x(object, level + 1);\n if (object[this.options.textNodeName] !== void 0 && Object.keys(object).length === 1) {\n return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n } else {\n return this.buildObjectNode(result.val, key, result.attrStr, level);\n }\n}\nBuilder.prototype.buildObjectNode = function(val2, key, attrStr, level) {\n if (val2 === \"\") {\n if (key[0] === \"?\") return this.indentate(level) + \"<\" + key + attrStr + \"?\" + this.tagEndChar;\n else {\n return this.indentate(level) + \"<\" + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }\n } else {\n let tagEndExp = \"\" + val2 + tagEndExp;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `` + this.newLine;\n } else {\n return this.indentate(level) + \"<\" + key + attrStr + piClosingChar + this.tagEndChar + val2 + this.indentate(level) + tagEndExp;\n }\n }\n};\nBuilder.prototype.closeTag = function(key) {\n let closeTag = \"\";\n if (this.options.unpairedTags.indexOf(key) !== -1) {\n if (!this.options.suppressUnpairedNode) closeTag = \"/\";\n } else if (this.options.suppressEmptyNode) {\n closeTag = \"/\";\n } else {\n closeTag = `>` + this.newLine;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `` + this.newLine;\n } else if (key[0] === \"?\") {\n return this.indentate(level) + \"<\" + key + attrStr + \"?\" + this.tagEndChar;\n } else {\n let textValue = this.options.tagValueProcessor(key, val2);\n textValue = this.replaceEntitiesValue(textValue);\n if (textValue === \"\") {\n return this.indentate(level) + \"<\" + key + attrStr + this.closeTag(key) + this.tagEndChar;\n } else {\n return this.indentate(level) + \"<\" + key + attrStr + \">\" + textValue + \" 0 && this.options.processEntities) {\n for (let i = 0; i < this.options.entities.length; i++) {\n const entity = this.options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n};\nfunction indentate(level) {\n return this.options.indentBy.repeat(level);\n}\nfunction isAttribute(name) {\n if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {\n return name.substr(this.attrPrefixLen);\n } else {\n return false;\n }\n}\nvar json2xml = Builder;\nconst validator = validator$2;\nconst XMLParser2 = XMLParser_1;\nconst XMLBuilder = json2xml;\nvar fxp = {\n XMLParser: XMLParser2,\n XMLValidator: validator,\n XMLBuilder\n};\nfunction isSvg(string) {\n if (typeof string !== \"string\") {\n throw new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n }\n string = string.trim();\n if (string.length === 0) {\n return false;\n }\n if (fxp.XMLValidator.validate(string) !== true) {\n return false;\n }\n let jsonObject;\n const parser = new fxp.XMLParser();\n try {\n jsonObject = parser.parse(string);\n } catch {\n return false;\n }\n if (!jsonObject) {\n return false;\n }\n if (!Object.keys(jsonObject).some((x) => x.toLowerCase() === \"svg\")) {\n return false;\n }\n return true;\n}\nclass View {\n _view;\n constructor(view) {\n isValidView(view);\n this._view = view;\n }\n get id() {\n return this._view.id;\n }\n get name() {\n return this._view.name;\n }\n get caption() {\n return this._view.caption;\n }\n get emptyTitle() {\n return this._view.emptyTitle;\n }\n get emptyCaption() {\n return this._view.emptyCaption;\n }\n get getContents() {\n return this._view.getContents;\n }\n get icon() {\n return this._view.icon;\n }\n set icon(icon) {\n this._view.icon = icon;\n }\n get order() {\n return this._view.order;\n }\n set order(order) {\n this._view.order = order;\n }\n get params() {\n return this._view.params;\n }\n set params(params) {\n this._view.params = params;\n }\n get columns() {\n return this._view.columns;\n }\n get emptyView() {\n return this._view.emptyView;\n }\n get parent() {\n return this._view.parent;\n }\n get sticky() {\n return this._view.sticky;\n }\n get expanded() {\n return this._view.expanded;\n }\n set expanded(expanded) {\n this._view.expanded = expanded;\n }\n get defaultSortKey() {\n return this._view.defaultSortKey;\n }\n}\nconst isValidView = function(view) {\n if (!view.id || typeof view.id !== \"string\") {\n throw new Error(\"View id is required and must be a string\");\n }\n if (!view.name || typeof view.name !== \"string\") {\n throw new Error(\"View name is required and must be a string\");\n }\n if (view.columns && view.columns.length > 0 && (!view.caption || typeof view.caption !== \"string\")) {\n throw new Error(\"View caption is required for top-level views and must be a string\");\n }\n if (!view.getContents || typeof view.getContents !== \"function\") {\n throw new Error(\"View getContents is required and must be a function\");\n }\n if (!view.icon || typeof view.icon !== \"string\" || !isSvg(view.icon)) {\n throw new Error(\"View icon is required and must be a valid svg string\");\n }\n if (!(\"order\" in view) || typeof view.order !== \"number\") {\n throw new Error(\"View order is required and must be a number\");\n }\n if (view.columns) {\n view.columns.forEach((column) => {\n if (!(column instanceof Column)) {\n throw new Error(\"View columns must be an array of Column. Invalid column found\");\n }\n });\n }\n if (view.emptyView && typeof view.emptyView !== \"function\") {\n throw new Error(\"View emptyView must be a function\");\n }\n if (view.parent && typeof view.parent !== \"string\") {\n throw new Error(\"View parent must be a string\");\n }\n if (\"sticky\" in view && typeof view.sticky !== \"boolean\") {\n throw new Error(\"View sticky must be a boolean\");\n }\n if (\"expanded\" in view && typeof view.expanded !== \"boolean\") {\n throw new Error(\"View expanded must be a boolean\");\n }\n if (view.defaultSortKey && typeof view.defaultSortKey !== \"string\") {\n throw new Error(\"View defaultSortKey must be a string\");\n }\n return true;\n};\nconst debug$1 = typeof process === \"object\" && process.env && process.env.NODE_DEBUG && /\\bsemver\\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error(\"SEMVER\", ...args) : () => {\n};\nvar debug_1 = debug$1;\nconst SEMVER_SPEC_VERSION = \"2.0.0\";\nconst MAX_LENGTH$1 = 256;\nconst MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */\n9007199254740991;\nconst MAX_SAFE_COMPONENT_LENGTH = 16;\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH$1 - 6;\nconst RELEASE_TYPES = [\n \"major\",\n \"premajor\",\n \"minor\",\n \"preminor\",\n \"patch\",\n \"prepatch\",\n \"prerelease\"\n];\nvar constants = {\n MAX_LENGTH: MAX_LENGTH$1,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 1,\n FLAG_LOOSE: 2\n};\nvar re$1 = { exports: {} };\n(function(module, exports) {\n const {\n MAX_SAFE_COMPONENT_LENGTH: MAX_SAFE_COMPONENT_LENGTH2,\n MAX_SAFE_BUILD_LENGTH: MAX_SAFE_BUILD_LENGTH2,\n MAX_LENGTH: MAX_LENGTH2\n } = constants;\n const debug2 = debug_1;\n exports = module.exports = {};\n const re2 = exports.re = [];\n const safeRe = exports.safeRe = [];\n const src = exports.src = [];\n const t2 = exports.t = {};\n let R = 0;\n const LETTERDASHNUMBER = \"[a-zA-Z0-9-]\";\n const safeRegexReplacements = [\n [\"\\\\s\", 1],\n [\"\\\\d\", MAX_LENGTH2],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH2]\n ];\n const makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);\n }\n return value;\n };\n const createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value);\n const index = R++;\n debug2(name, index, value);\n t2[name] = index;\n src[index] = value;\n re2[index] = new RegExp(value, isGlobal ? \"g\" : void 0);\n safeRe[index] = new RegExp(safe, isGlobal ? \"g\" : void 0);\n };\n createToken(\"NUMERICIDENTIFIER\", \"0|[1-9]\\\\d*\");\n createToken(\"NUMERICIDENTIFIERLOOSE\", \"\\\\d+\");\n createToken(\"NONNUMERICIDENTIFIER\", `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);\n createToken(\"MAINVERSION\", `(${src[t2.NUMERICIDENTIFIER]})\\\\.(${src[t2.NUMERICIDENTIFIER]})\\\\.(${src[t2.NUMERICIDENTIFIER]})`);\n createToken(\"MAINVERSIONLOOSE\", `(${src[t2.NUMERICIDENTIFIERLOOSE]})\\\\.(${src[t2.NUMERICIDENTIFIERLOOSE]})\\\\.(${src[t2.NUMERICIDENTIFIERLOOSE]})`);\n createToken(\"PRERELEASEIDENTIFIER\", `(?:${src[t2.NUMERICIDENTIFIER]}|${src[t2.NONNUMERICIDENTIFIER]})`);\n createToken(\"PRERELEASEIDENTIFIERLOOSE\", `(?:${src[t2.NUMERICIDENTIFIERLOOSE]}|${src[t2.NONNUMERICIDENTIFIER]})`);\n createToken(\"PRERELEASE\", `(?:-(${src[t2.PRERELEASEIDENTIFIER]}(?:\\\\.${src[t2.PRERELEASEIDENTIFIER]})*))`);\n createToken(\"PRERELEASELOOSE\", `(?:-?(${src[t2.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${src[t2.PRERELEASEIDENTIFIERLOOSE]})*))`);\n createToken(\"BUILDIDENTIFIER\", `${LETTERDASHNUMBER}+`);\n createToken(\"BUILD\", `(?:\\\\+(${src[t2.BUILDIDENTIFIER]}(?:\\\\.${src[t2.BUILDIDENTIFIER]})*))`);\n createToken(\"FULLPLAIN\", `v?${src[t2.MAINVERSION]}${src[t2.PRERELEASE]}?${src[t2.BUILD]}?`);\n createToken(\"FULL\", `^${src[t2.FULLPLAIN]}$`);\n createToken(\"LOOSEPLAIN\", `[v=\\\\s]*${src[t2.MAINVERSIONLOOSE]}${src[t2.PRERELEASELOOSE]}?${src[t2.BUILD]}?`);\n createToken(\"LOOSE\", `^${src[t2.LOOSEPLAIN]}$`);\n createToken(\"GTLT\", \"((?:<|>)?=?)\");\n createToken(\"XRANGEIDENTIFIERLOOSE\", `${src[t2.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);\n createToken(\"XRANGEIDENTIFIER\", `${src[t2.NUMERICIDENTIFIER]}|x|X|\\\\*`);\n createToken(\"XRANGEPLAIN\", `[v=\\\\s]*(${src[t2.XRANGEIDENTIFIER]})(?:\\\\.(${src[t2.XRANGEIDENTIFIER]})(?:\\\\.(${src[t2.XRANGEIDENTIFIER]})(?:${src[t2.PRERELEASE]})?${src[t2.BUILD]}?)?)?`);\n createToken(\"XRANGEPLAINLOOSE\", `[v=\\\\s]*(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:${src[t2.PRERELEASELOOSE]})?${src[t2.BUILD]}?)?)?`);\n createToken(\"XRANGE\", `^${src[t2.GTLT]}\\\\s*${src[t2.XRANGEPLAIN]}$`);\n createToken(\"XRANGELOOSE\", `^${src[t2.GTLT]}\\\\s*${src[t2.XRANGEPLAINLOOSE]}$`);\n createToken(\"COERCEPLAIN\", `${\"(^|[^\\\\d])(\\\\d{1,\"}${MAX_SAFE_COMPONENT_LENGTH2}})(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?`);\n createToken(\"COERCE\", `${src[t2.COERCEPLAIN]}(?:$|[^\\\\d])`);\n createToken(\"COERCEFULL\", src[t2.COERCEPLAIN] + `(?:${src[t2.PRERELEASE]})?(?:${src[t2.BUILD]})?(?:$|[^\\\\d])`);\n createToken(\"COERCERTL\", src[t2.COERCE], true);\n createToken(\"COERCERTLFULL\", src[t2.COERCEFULL], true);\n createToken(\"LONETILDE\", \"(?:~>?)\");\n createToken(\"TILDETRIM\", `(\\\\s*)${src[t2.LONETILDE]}\\\\s+`, true);\n exports.tildeTrimReplace = \"$1~\";\n createToken(\"TILDE\", `^${src[t2.LONETILDE]}${src[t2.XRANGEPLAIN]}$`);\n createToken(\"TILDELOOSE\", `^${src[t2.LONETILDE]}${src[t2.XRANGEPLAINLOOSE]}$`);\n createToken(\"LONECARET\", \"(?:\\\\^)\");\n createToken(\"CARETTRIM\", `(\\\\s*)${src[t2.LONECARET]}\\\\s+`, true);\n exports.caretTrimReplace = \"$1^\";\n createToken(\"CARET\", `^${src[t2.LONECARET]}${src[t2.XRANGEPLAIN]}$`);\n createToken(\"CARETLOOSE\", `^${src[t2.LONECARET]}${src[t2.XRANGEPLAINLOOSE]}$`);\n createToken(\"COMPARATORLOOSE\", `^${src[t2.GTLT]}\\\\s*(${src[t2.LOOSEPLAIN]})$|^$`);\n createToken(\"COMPARATOR\", `^${src[t2.GTLT]}\\\\s*(${src[t2.FULLPLAIN]})$|^$`);\n createToken(\"COMPARATORTRIM\", `(\\\\s*)${src[t2.GTLT]}\\\\s*(${src[t2.LOOSEPLAIN]}|${src[t2.XRANGEPLAIN]})`, true);\n exports.comparatorTrimReplace = \"$1$2$3\";\n createToken(\"HYPHENRANGE\", `^\\\\s*(${src[t2.XRANGEPLAIN]})\\\\s+-\\\\s+(${src[t2.XRANGEPLAIN]})\\\\s*$`);\n createToken(\"HYPHENRANGELOOSE\", `^\\\\s*(${src[t2.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${src[t2.XRANGEPLAINLOOSE]})\\\\s*$`);\n createToken(\"STAR\", \"(<|>)?=?\\\\s*\\\\*\");\n createToken(\"GTE0\", \"^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$\");\n createToken(\"GTE0PRE\", \"^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$\");\n})(re$1, re$1.exports);\nvar reExports = re$1.exports;\nconst looseOption = Object.freeze({ loose: true });\nconst emptyOpts = Object.freeze({});\nconst parseOptions$1 = (options) => {\n if (!options) {\n return emptyOpts;\n }\n if (typeof options !== \"object\") {\n return looseOption;\n }\n return options;\n};\nvar parseOptions_1 = parseOptions$1;\nconst numeric = /^[0-9]+$/;\nconst compareIdentifiers$1 = (a, b) => {\n const anum = numeric.test(a);\n const bnum = numeric.test(b);\n if (anum && bnum) {\n a = +a;\n b = +b;\n }\n return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;\n};\nconst rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a);\nvar identifiers = {\n compareIdentifiers: compareIdentifiers$1,\n rcompareIdentifiers\n};\nconst debug = debug_1;\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = constants;\nconst { safeRe: re, t } = reExports;\nconst parseOptions = parseOptions_1;\nconst { compareIdentifiers } = identifiers;\nlet SemVer$2 = class SemVer {\n constructor(version, options) {\n options = parseOptions(options);\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) {\n return version;\n } else {\n version = version.version;\n }\n } else if (typeof version !== \"string\") {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`);\n }\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n );\n }\n debug(\"SemVer\", version, options);\n this.options = options;\n this.loose = !!options.loose;\n this.includePrerelease = !!options.includePrerelease;\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`);\n }\n this.raw = version;\n this.major = +m[1];\n this.minor = +m[2];\n this.patch = +m[3];\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError(\"Invalid major version\");\n }\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError(\"Invalid minor version\");\n }\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError(\"Invalid patch version\");\n }\n if (!m[4]) {\n this.prerelease = [];\n } else {\n this.prerelease = m[4].split(\".\").map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id;\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num;\n }\n }\n return id;\n });\n }\n this.build = m[5] ? m[5].split(\".\") : [];\n this.format();\n }\n format() {\n this.version = `${this.major}.${this.minor}.${this.patch}`;\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join(\".\")}`;\n }\n return this.version;\n }\n toString() {\n return this.version;\n }\n compare(other) {\n debug(\"SemVer.compare\", this.version, this.options, other);\n if (!(other instanceof SemVer)) {\n if (typeof other === \"string\" && other === this.version) {\n return 0;\n }\n other = new SemVer(other, this.options);\n }\n if (other.version === this.version) {\n return 0;\n }\n return this.compareMain(other) || this.comparePre(other);\n }\n compareMain(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);\n }\n comparePre(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n if (this.prerelease.length && !other.prerelease.length) {\n return -1;\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1;\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0;\n }\n let i = 0;\n do {\n const a = this.prerelease[i];\n const b = other.prerelease[i];\n debug(\"prerelease compare\", i, a, b);\n if (a === void 0 && b === void 0) {\n return 0;\n } else if (b === void 0) {\n return 1;\n } else if (a === void 0) {\n return -1;\n } else if (a === b) {\n continue;\n } else {\n return compareIdentifiers(a, b);\n }\n } while (++i);\n }\n compareBuild(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n let i = 0;\n do {\n const a = this.build[i];\n const b = other.build[i];\n debug(\"build compare\", i, a, b);\n if (a === void 0 && b === void 0) {\n return 0;\n } else if (b === void 0) {\n return 1;\n } else if (a === void 0) {\n return -1;\n } else if (a === b) {\n continue;\n } else {\n return compareIdentifiers(a, b);\n }\n } while (++i);\n }\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc(release, identifier, identifierBase) {\n switch (release) {\n case \"premajor\":\n this.prerelease.length = 0;\n this.patch = 0;\n this.minor = 0;\n this.major++;\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"preminor\":\n this.prerelease.length = 0;\n this.patch = 0;\n this.minor++;\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"prepatch\":\n this.prerelease.length = 0;\n this.inc(\"patch\", identifier, identifierBase);\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"prerelease\":\n if (this.prerelease.length === 0) {\n this.inc(\"patch\", identifier, identifierBase);\n }\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"major\":\n if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {\n this.major++;\n }\n this.minor = 0;\n this.patch = 0;\n this.prerelease = [];\n break;\n case \"minor\":\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++;\n }\n this.patch = 0;\n this.prerelease = [];\n break;\n case \"patch\":\n if (this.prerelease.length === 0) {\n this.patch++;\n }\n this.prerelease = [];\n break;\n case \"pre\": {\n const base = Number(identifierBase) ? 1 : 0;\n if (!identifier && identifierBase === false) {\n throw new Error(\"invalid increment argument: identifier is empty\");\n }\n if (this.prerelease.length === 0) {\n this.prerelease = [base];\n } else {\n let i = this.prerelease.length;\n while (--i >= 0) {\n if (typeof this.prerelease[i] === \"number\") {\n this.prerelease[i]++;\n i = -2;\n }\n }\n if (i === -1) {\n if (identifier === this.prerelease.join(\".\") && identifierBase === false) {\n throw new Error(\"invalid increment argument: identifier already exists\");\n }\n this.prerelease.push(base);\n }\n }\n if (identifier) {\n let prerelease = [identifier, base];\n if (identifierBase === false) {\n prerelease = [identifier];\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease;\n }\n } else {\n this.prerelease = prerelease;\n }\n }\n break;\n }\n default:\n throw new Error(`invalid increment argument: ${release}`);\n }\n this.raw = this.format();\n if (this.build.length) {\n this.raw += `+${this.build.join(\".\")}`;\n }\n return this;\n }\n};\nvar semver = SemVer$2;\nconst SemVer$1 = semver;\nconst parse$1 = (version, options, throwErrors = false) => {\n if (version instanceof SemVer$1) {\n return version;\n }\n try {\n return new SemVer$1(version, options);\n } catch (er) {\n if (!throwErrors) {\n return null;\n }\n throw er;\n }\n};\nvar parse_1 = parse$1;\nconst parse = parse_1;\nconst valid = (version, options) => {\n const v = parse(version, options);\n return v ? v.version : null;\n};\nvar valid_1 = valid;\nconst valid$1 = /* @__PURE__ */ getDefaultExportFromCjs(valid_1);\nconst SemVer2 = semver;\nconst major = (a, loose) => new SemVer2(a, loose).major;\nvar major_1 = major;\nconst major$1 = /* @__PURE__ */ getDefaultExportFromCjs(major_1);\nclass ProxyBus {\n bus;\n constructor(bus2) {\n if (typeof bus2.getVersion !== \"function\" || !valid$1(bus2.getVersion())) {\n console.warn(\"Proxying an event bus with an unknown or invalid version\");\n } else if (major$1(bus2.getVersion()) !== major$1(this.getVersion())) {\n console.warn(\n \"Proxying an event bus of version \" + bus2.getVersion() + \" with \" + this.getVersion()\n );\n }\n this.bus = bus2;\n }\n getVersion() {\n return \"3.3.1\";\n }\n subscribe(name, handler) {\n this.bus.subscribe(name, handler);\n }\n unsubscribe(name, handler) {\n this.bus.unsubscribe(name, handler);\n }\n emit(name, event) {\n this.bus.emit(name, event);\n }\n}\nclass SimpleBus {\n handlers = /* @__PURE__ */ new Map();\n getVersion() {\n return \"3.3.1\";\n }\n subscribe(name, handler) {\n this.handlers.set(\n name,\n (this.handlers.get(name) || []).concat(\n handler\n )\n );\n }\n unsubscribe(name, handler) {\n this.handlers.set(\n name,\n (this.handlers.get(name) || []).filter((h) => h !== handler)\n );\n }\n emit(name, event) {\n (this.handlers.get(name) || []).forEach((h) => {\n try {\n h(event);\n } catch (e) {\n console.error(\"could not invoke event listener\", e);\n }\n });\n }\n}\nlet bus = null;\nfunction getBus() {\n if (bus !== null) {\n return bus;\n }\n if (typeof window === \"undefined\") {\n return new Proxy({}, {\n get: () => {\n return () => console.error(\n \"Window not available, EventBus can not be established!\"\n );\n }\n });\n }\n if (window.OC?._eventBus && typeof window._nc_event_bus === \"undefined\") {\n console.warn(\n \"found old event bus instance at OC._eventBus. Update your version!\"\n );\n window._nc_event_bus = window.OC._eventBus;\n }\n if (typeof window?._nc_event_bus !== \"undefined\") {\n bus = new ProxyBus(window._nc_event_bus);\n } else {\n bus = window._nc_event_bus = new SimpleBus();\n }\n return bus;\n}\nfunction emit(name, event) {\n getBus().emit(name, event);\n}\n/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nclass FileListFilter extends TypedEventTarget {\n id;\n order;\n constructor(id, order = 100) {\n super();\n this.id = id;\n this.order = order;\n }\n filter(nodes) {\n throw new Error(\"Not implemented\");\n }\n updateChips(chips) {\n this.dispatchTypedEvent(\"update:chips\", new CustomEvent(\"update:chips\", { detail: chips }));\n }\n filterUpdated() {\n this.dispatchTypedEvent(\"update:filter\", new CustomEvent(\"update:filter\"));\n }\n}\nfunction registerFileListFilter(filter) {\n if (!window._nc_filelist_filters) {\n window._nc_filelist_filters = /* @__PURE__ */ new Map();\n }\n if (window._nc_filelist_filters.has(filter.id)) {\n throw new Error(`File list filter \"${filter.id}\" already registered`);\n }\n window._nc_filelist_filters.set(filter.id, filter);\n emit(\"files:filter:added\", filter);\n}\nfunction unregisterFileListFilter(filterId) {\n if (window._nc_filelist_filters && window._nc_filelist_filters.has(filterId)) {\n window._nc_filelist_filters.delete(filterId);\n emit(\"files:filter:removed\", filterId);\n }\n}\nfunction getFileListFilters() {\n if (!window._nc_filelist_filters) {\n return [];\n }\n return [...window._nc_filelist_filters.values()];\n}\nconst addNewFileMenuEntry = function(entry) {\n const newFileMenu = getNewFileMenu();\n return newFileMenu.registerEntry(entry);\n};\nconst removeNewFileMenuEntry = function(entry) {\n const newFileMenu = getNewFileMenu();\n return newFileMenu.unregisterEntry(entry);\n};\nconst getNewFileMenuEntries = function(context) {\n const newFileMenu = getNewFileMenu();\n return newFileMenu.getEntries(context).sort((a, b) => {\n if (a.order !== void 0 && b.order !== void 0 && a.order !== b.order) {\n return a.order - b.order;\n }\n return a.displayName.localeCompare(b.displayName, void 0, { numeric: true, sensitivity: \"base\" });\n });\n};\nexport {\n Column,\n DefaultType,\n File,\n FileAction,\n FileListFilter,\n FileType,\n FilesSortingMode,\n Folder,\n Header,\n InvalidFilenameError,\n InvalidFilenameErrorReason,\n Navigation,\n NewMenuEntryCategory,\n Node,\n NodeStatus,\n Permission,\n View,\n addNewFileMenuEntry,\n davGetClient,\n davGetDefaultPropfind,\n davGetFavoritesReport,\n davGetRecentSearch,\n davGetRemoteURL,\n davGetRootPath,\n davParsePermissions,\n davRemoteURL,\n davResultToNode,\n davRootPath,\n defaultDavNamespaces,\n defaultDavProperties,\n formatFileSize,\n getDavNameSpaces,\n getDavProperties,\n getFavoriteNodes,\n getFileActions,\n getFileListFilters,\n getFileListHeaders,\n getNavigation,\n getNewFileMenuEntries,\n getUniqueName,\n isFilenameValid,\n orderBy,\n parseFileSize,\n registerDavProperty,\n registerFileAction,\n registerFileListFilter,\n registerFileListHeaders,\n removeNewFileMenuEntry,\n sortNodes,\n unregisterFileListFilter,\n validateFilename\n};\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/sass-loader/dist/cjs.js!./fileEntryInlineSystemTags.scss\";\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/sass-loader/dist/cjs.js!./fileEntryInlineSystemTags.scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { FileAction } from '@nextcloud/files';\nimport { translate as t } from '@nextcloud/l10n';\nimport '../css/fileEntryInlineSystemTags.scss';\nconst getNodeSystemTags = function (node) {\n const tags = node.attributes?.['system-tags']?.['system-tag'];\n if (tags === undefined) {\n return [];\n }\n return [tags].flat();\n};\nconst renderTag = function (tag, isMore = false) {\n const tagElement = document.createElement('li');\n tagElement.classList.add('files-list__system-tag');\n tagElement.textContent = tag;\n if (isMore) {\n tagElement.classList.add('files-list__system-tag--more');\n }\n return tagElement;\n};\nexport const action = new FileAction({\n id: 'system-tags',\n displayName: () => '',\n iconSvgInline: () => '',\n enabled(nodes) {\n // Only show the action on single nodes\n if (nodes.length !== 1) {\n return false;\n }\n const node = nodes[0];\n const tags = getNodeSystemTags(node);\n // Only show the action if the node has system tags\n if (tags.length === 0) {\n return false;\n }\n return true;\n },\n exec: async () => null,\n async renderInline(node) {\n // Ensure we have the system tags as an array\n const tags = getNodeSystemTags(node);\n if (tags.length === 0) {\n return null;\n }\n const systemTagsElement = document.createElement('ul');\n systemTagsElement.classList.add('files-list__system-tags');\n systemTagsElement.setAttribute('aria-label', t('files', 'Assigned collaborative tags'));\n systemTagsElement.append(renderTag(tags[0]));\n if (tags.length === 2) {\n // Special case only two tags:\n // the overflow fake tag would take the same space as this, so render it\n systemTagsElement.append(renderTag(tags[1]));\n }\n else if (tags.length > 1) {\n // More tags than the one we're showing\n // So we add a overflow element indicating there are more tags\n const moreTagElement = renderTag('+' + (tags.length - 1), true);\n moreTagElement.setAttribute('title', tags.slice(1).join(', '));\n // because the title is not accessible we hide this element for screen readers (see alternative below)\n moreTagElement.setAttribute('aria-hidden', 'true');\n moreTagElement.setAttribute('role', 'presentation');\n systemTagsElement.append(moreTagElement);\n // For accessibility the tags are listed, as the title is not accessible\n // but those tags are visually hidden\n for (const tag of tags.slice(1)) {\n const tagElement = renderTag(tag);\n tagElement.classList.add('hidden-visually');\n systemTagsElement.append(tagElement);\n }\n }\n return systemTagsElement;\n },\n order: 0,\n});\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { createClient } from 'webdav';\nimport { generateRemoteUrl } from '@nextcloud/router';\nimport { getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth';\n// init webdav client\nconst rootUrl = generateRemoteUrl('dav');\nexport const davClient = createClient(rootUrl);\n// set CSRF token header\nconst setHeaders = (token) => {\n davClient.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// refresh headers when request token changes\nonRequestTokenUpdate(setHeaders);\nsetHeaders(getRequestToken());\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport camelCase from 'camelcase';\nexport const defaultBaseTag = {\n userVisible: true,\n userAssignable: true,\n canAssign: true,\n};\nexport const parseTags = (tags) => {\n return tags.map(({ props }) => Object.fromEntries(Object.entries(props)\n .map(([key, value]) => [camelCase(key), camelCase(key) === 'displayName' ? String(value) : value])));\n};\n/**\n * Parse id from `Content-Location` header\n * @param url URL to parse\n */\nexport const parseIdFromLocation = (url) => {\n const queryPos = url.indexOf('?');\n if (queryPos > 0) {\n url = url.substring(0, queryPos);\n }\n const parts = url.split('/');\n let result;\n do {\n result = parts[parts.length - 1];\n parts.pop();\n // note: first result can be empty when there is a trailing slash,\n // so we take the part before that\n } while (!result && parts.length > 0);\n return Number(result);\n};\nexport const formatTag = (initialTag) => {\n if ('name' in initialTag && !('displayName' in initialTag)) {\n return { ...initialTag };\n }\n const tag = { ...initialTag };\n tag.name = tag.displayName;\n delete tag.displayName;\n return tag;\n};\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { getLoggerBuilder } from '@nextcloud/logger';\nexport const logger = getLoggerBuilder()\n .setApp('systemtags')\n .detectUser()\n .build();\n","import { getCurrentUser } from '@nextcloud/auth';\nimport { Folder, Permission, getDavNameSpaces, getDavProperties, davGetClient, davResultToNode, davRemoteURL, davRootPath } from '@nextcloud/files';\nimport { fetchTags } from './api';\nconst rootPath = '/systemtags';\nconst client = davGetClient();\nconst resultToNode = (node) => davResultToNode(node);\nconst formatReportPayload = (tagId) => `\n\n\t\n\t\t${getDavProperties()}\n\t\n\t\n\t\t${tagId}\n\t\n`;\nconst tagToNode = function (tag) {\n return new Folder({\n id: tag.id,\n source: `${davRemoteURL}${rootPath}/${tag.id}`,\n owner: String(getCurrentUser()?.uid ?? 'anonymous'),\n root: rootPath,\n displayname: tag.displayName,\n permissions: Permission.READ,\n attributes: {\n ...tag,\n 'is-tag': true,\n },\n });\n};\nexport const getContents = async (path = '/') => {\n // List tags in the root\n const tagsCache = (await fetchTags()).filter(tag => tag.userVisible);\n if (path === '/') {\n return {\n folder: new Folder({\n id: 0,\n source: `${davRemoteURL}${rootPath}`,\n owner: getCurrentUser()?.uid,\n root: rootPath,\n permissions: Permission.NONE,\n }),\n contents: tagsCache.map(tagToNode),\n };\n }\n const tagId = parseInt(path.split('/', 2)[1]);\n const tag = tagsCache.find(tag => tag.id === tagId);\n if (!tag) {\n throw new Error('Tag not found');\n }\n const folder = tagToNode(tag);\n const contentsResponse = await client.getDirectoryContents(davRootPath, {\n details: true,\n // Only filter favorites if we're at the root\n data: formatReportPayload(tagId),\n headers: {\n // Patched in WebdavClient.ts\n method: 'REPORT',\n },\n });\n return {\n folder,\n contents: contentsResponse.data.map(resultToNode),\n };\n};\n","/**\n * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { registerDavProperty, registerFileAction } from '@nextcloud/files';\nimport { action as inlineSystemTagsAction } from './files_actions/inlineSystemTagsAction.js';\nimport { registerSystemTagsView } from './files_views/systemtagsView.js';\nregisterDavProperty('nc:system-tags');\nregisterFileAction(inlineSystemTagsAction);\nregisterSystemTagsView();\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { translate as t } from '@nextcloud/l10n';\nimport { View, getNavigation } from '@nextcloud/files';\nimport { getContents } from '../services/systemtags.js';\nimport svgTagMultiple from '@mdi/svg/svg/tag-multiple.svg?raw';\n/**\n * Register the system tags files view\n */\nexport function registerSystemTagsView() {\n const Navigation = getNavigation();\n Navigation.register(new View({\n id: 'tags',\n name: t('systemtags', 'Tags'),\n caption: t('systemtags', 'List of tags and their associated files and folders.'),\n emptyTitle: t('systemtags', 'No tags found'),\n emptyCaption: t('systemtags', 'Tags you have created will show up here.'),\n icon: svgTagMultiple,\n order: 25,\n getContents,\n }));\n}\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport axios from '@nextcloud/axios';\nimport { generateUrl } from '@nextcloud/router';\nimport { translate as t } from '@nextcloud/l10n';\nimport { davClient } from './davClient.js';\nimport { formatTag, parseIdFromLocation, parseTags } from '../utils';\nimport { logger } from '../logger.js';\nexport const fetchTagsPayload = `\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n`;\nexport const fetchTags = async () => {\n const path = '/systemtags';\n try {\n const { data: tags } = await davClient.getDirectoryContents(path, {\n data: fetchTagsPayload,\n details: true,\n glob: '/systemtags/*', // Filter out first empty tag\n });\n return parseTags(tags);\n }\n catch (error) {\n logger.error(t('systemtags', 'Failed to load tags'), { error });\n throw new Error(t('systemtags', 'Failed to load tags'));\n }\n};\nexport const fetchLastUsedTagIds = async () => {\n const url = generateUrl('/apps/systemtags/lastused');\n try {\n const { data: lastUsedTagIds } = await axios.get(url);\n return lastUsedTagIds.map(Number);\n }\n catch (error) {\n logger.error(t('systemtags', 'Failed to load last used tags'), { error });\n throw new Error(t('systemtags', 'Failed to load last used tags'));\n }\n};\n/**\n * @param tag\n * @return created tag id\n */\nexport const createTag = async (tag) => {\n const path = '/systemtags';\n const tagToPost = formatTag(tag);\n try {\n const { headers } = await davClient.customRequest(path, {\n method: 'POST',\n data: tagToPost,\n });\n const contentLocation = headers.get('content-location');\n if (contentLocation) {\n return parseIdFromLocation(contentLocation);\n }\n logger.error(t('systemtags', 'Missing \"Content-Location\" header'));\n throw new Error(t('systemtags', 'Missing \"Content-Location\" header'));\n }\n catch (error) {\n logger.error(t('systemtags', 'Failed to create tag'), { error });\n throw new Error(t('systemtags', 'Failed to create tag'));\n }\n};\nexport const updateTag = async (tag) => {\n const path = '/systemtags/' + tag.id;\n const data = `\n\t\n\t\t\n\t\t\t\n\t\t\t\t${tag.displayName}\n\t\t\t\t${tag.userVisible}\n\t\t\t\t${tag.userAssignable}\n\t\t\t\n\t\t\n\t`;\n try {\n await davClient.customRequest(path, {\n method: 'PROPPATCH',\n data,\n });\n }\n catch (error) {\n logger.error(t('systemtags', 'Failed to update tag'), { error });\n throw new Error(t('systemtags', 'Failed to update tag'));\n }\n};\nexport const deleteTag = async (tag) => {\n const path = '/systemtags/' + tag.id;\n try {\n await davClient.deleteFile(path);\n }\n catch (error) {\n logger.error(t('systemtags', 'Failed to delete tag'), { error });\n throw new Error(t('systemtags', 'Failed to delete tag'));\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, `.files-list__system-tags{--min-size: 32px;display:none;justify-content:center;align-items:center;min-width:calc(var(--min-size)*2);max-width:300px}.files-list__system-tag{padding:5px 10px;border:1px solid;border-radius:var(--border-radius-pill);border-color:var(--color-border);color:var(--color-text-maxcontrast);height:var(--min-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:22px;text-align:center}.files-list__system-tag--more{overflow:visible;text-overflow:initial}.files-list__system-tag+.files-list__system-tag{margin-left:5px}@media(min-width: 512px){.files-list__system-tags{display:flex}}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/systemtags/src/css/fileEntryInlineSystemTags.scss\"],\"names\":[],\"mappings\":\"AAKA,yBACC,gBAAA,CACA,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,iCAAA,CACA,eAAA,CAGD,wBACC,gBAAA,CACA,gBAAA,CACA,uCAAA,CACA,gCAAA,CACA,mCAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,gBAAA,CACA,iBAAA,CAEA,8BACC,gBAAA,CACA,qBAAA,CAID,gDACC,eAAA,CAIF,yBACC,yBACC,YAAA,CAAA\",\"sourcesContent\":[\"/**\\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\\n * SPDX-License-Identifier: AGPL-3.0-or-later\\n */\\n\\n.files-list__system-tags {\\n\\t--min-size: 32px;\\n\\tdisplay: none;\\n\\tjustify-content: center;\\n\\talign-items: center;\\n\\tmin-width: calc(var(--min-size) * 2);\\n\\tmax-width: 300px;\\n}\\n\\n.files-list__system-tag {\\n\\tpadding: 5px 10px;\\n\\tborder: 1px solid;\\n\\tborder-radius: var(--border-radius-pill);\\n\\tborder-color: var(--color-border);\\n\\tcolor: var(--color-text-maxcontrast);\\n\\theight: var(--min-size);\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n\\tline-height: 22px; // min-size - 2 * 5px padding\\n\\ttext-align: center;\\n\\n\\t&--more {\\n\\t\\toverflow: visible;\\n\\t\\ttext-overflow: initial;\\n\\t}\\n\\n\\t// Proper spacing if multiple shown\\n\\t& + .files-list__system-tag {\\n\\t\\tmargin-left: 5px;\\n\\t}\\n}\\n\\n@media (min-width: 512px) {\\n\\t.files-list__system-tags {\\n\\t\\tdisplay: flex;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\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};","// The chunk loading function for additional chunks\n// Since all referenced chunks are already included\n// in this file, this function is empty here.\n__webpack_require__.e = () => (Promise.resolve());","__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 = 2766;","__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\t2766: 0\n};\n\n// no chunk on demand loading\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__(39607)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","setApp","detectUser","build","DefaultType","DefaultType2","Permission","Permission2","defaultDavProperties","defaultDavNamespaces","d","nc","oc","ocs","FileType","FileType2","isDavRessource","source","davService","match","validateData","data","id","Error","URL","e","startsWith","displayname","mtime","Date","crtime","mime","size","permissions","NONE","ALL","owner","attributes","root","includes","service","join","status","Object","values","NodeStatus","NodeStatus2","Node","_data","_attributes","_knownDavService","readonlyAttributes","entries","getOwnPropertyDescriptors","prototype","filter","get","map","handler","set","target","prop","value","this","Reflect","deleteProperty","receiver","warn","constructor","Proxy","update","replace","encodedSource","origin","slice","length","basename","extension","extname","dirname","split","pop","firstMatch","indexOf","url","pathname","updateMtime","READ","path","fileid","move","destination","oldBasename","rename","basename2","name","TypeError","File","type","Folder","super","davRootPath","uid","davRemoteURL","davGetRemoteURL","Navigation","_views","_currentView","register","view","find","search","push","dispatchTypedEvent","CustomEvent","remove","index","findIndex","splice","setActive","event","detail","active","views","Column","_column","column","isValidColumn","title","render","sort","summary","validator$2","util$3","exports","nameStartChar","nameRegexp","regexName","RegExp","isExist","v","isEmptyObject","obj","keys","merge","a","arrayMode","len","i","getValue","isName","string","exec","getAllMatches","regex","matches","allmatches","startIndex","lastIndex","util$2","defaultOptions$2","allowBooleanAttributes","unpairedTags","isWhiteSpace","char","readPI","xmlData","start","tagname","substr","getErrorObject","getLineNumberForPosition","readCommentAndCDATA","angleBracketsCount","validate","options","assign","tags","tagFound","reachedRoot","err","tagStartPos","closingTag","tagName","trim","substring","msg","result","readAttributeStr","attrStr","attrStrStart","isValid","validateAttributeString","code","line","tagClosed","otg","openPos","col","afterAmp","validateAmpersand","JSON","stringify","t2","doubleQuote","singleQuote","startChar","validAttrStrRegxp","attrNames","getPositionFromMatch","attrName","validateAttrName","hasOwnProperty","re2","validateNumberAmpersand","count","message","lineNumber","lines","OptionsBuilder","defaultOptions$1","preserveOrder","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","removeNSPrefix","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","val2","attributeValueProcessor","stopNodes","alwaysCreateTextNode","isArray","commentPropName","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","jPath","attrs","buildOptions","defaultOptions","util$1","readEntityExp","entityName2","isComment","isEntity","isElement","isAttlist","isNotation","validateEntityName","hexRegex","numRegex","Number","parseInt","window","parseFloat","consider","decimalPoint","util","xmlNode","child","add","key","addChild","node","readDocType","entities","hasBody","comment","exp","entityName","val","regx","toNumber","str","trimmedStr","skipLike","test","sign","numTrimmedByZeros","numStr","num","addExternalEntities","externalEntities","entKeys","ent","lastEntities","parseTextData","dontTrim","hasAttributes","isLeafNode","escapeEntities","replaceEntitiesValue","newval","parseValue","resolveNameSpace","prefix","charAt","attrsRegx","buildAttributesMap","oldVal","aName","newVal","attrCollection","parseXml","xmlObj","currentNode","textData","closeIndex","findClosingIndex","colonIndex","saveTextToParentTag","lastTagName","lastIndexOf","propIndex","tagsNodeStack","tagData","readTagExp","childNode","tagExp","attrExpPresent","endIndex","docTypeEntities","rawTagName","lastTag","isItStopNode","tagContent","result2","readStopNodeData","replaceEntitiesValue$1","entity","ampEntity","currentTagName","allNodesExp","stopNodePath","stopNodeExp","errMsg","closingIndex","closingChar","attrBoundary","ch","tagExpWithClosingIndex","separatorIndex","trimStart","openTagCount","shouldParse","node2json","compress","arr","text","compressedObj","tagObj","property","propName$1","newJpath","isLeaf","isLeafTag","assignAttributes","Array","attrMap","jpath","atrrName","propCount","prettify","OrderedObjParser2","_","String","fromCharCode","validator$1","arrToStr","indentation","xmlStr","isPreviousElementTag","propName","newJPath","tagText","isStopNode","attStr2","attr_to_str","tempInd","piTextNodeName","newIdentation","indentBy","tagStart","tagValue","suppressUnpairedNode","suppressEmptyNode","endsWith","attr","attrVal","suppressBooleanAttributes","textValue","buildFromOrderedJs","jArray","format","oneListGroup","Builder","isAttribute","attrPrefixLen","processTextOrObjNode","indentate","tagEndChar","newLine","object","level","j2x","buildTextValNode","buildObjectNode","repeat","jObj","arrayNodeName","call","buildAttrPairStr","arrLen","listTagVal","j","item","Ks","L","closeTag","tagEndExp","piClosingChar","fxp","XMLParser","parse","validationOption","toString","orderedObjParser","orderedResult","addEntity","XMLValidator","XMLBuilder","isValidView","columns","caption","getContents","icon","jsonObject","parser","some","x","toLowerCase","isSvg","order","forEach","emptyView","parent","sticky","expanded","defaultSortKey","debug_1","process","env","NODE_DEBUG","args","console","error","constants","MAX_LENGTH","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","MAX_LENGTH$1","MAX_SAFE_INTEGER","RELEASE_TYPES","SEMVER_SPEC_VERSION","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","re$1","module","MAX_SAFE_COMPONENT_LENGTH2","MAX_SAFE_BUILD_LENGTH2","MAX_LENGTH2","debug2","re","safeRe","src","t","R","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","safe","token","max","makeSafeRegex","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCEPLAIN","COERCE","COERCEFULL","LONETILDE","tildeTrimReplace","LONECARET","caretTrimReplace","comparatorTrimReplace","reExports","freeze","loose","numeric","compareIdentifiers$1","b","anum","bnum","identifiers","compareIdentifiers","rcompareIdentifiers","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","getNodeSystemTags","undefined","flat","renderTag","tag","isMore","arguments","tagElement","document","createElement","classList","textContent","action","_action","validateAction","displayName","iconSvgInline","enabled","execBatch","default","inline","renderInline","nodes","async","systemTagsElement","setAttribute","append","moreTagElement","rootUrl","generateRemoteUrl","davClient","createClient","setHeaders","requesttoken","onRequestTokenUpdate","getRequestToken","logger","getLoggerBuilder","rootPath","client","remoteURL","headers","patch","headers2","method","fetch","davGetClient","resultToNode","filesRoot","userId","props","permString","CREATE","UPDATE","DELETE","SHARE","davParsePermissions","nodeData","filename","lastmod","getcontentlength","FAILED","hasPreview","davResultToNode","formatReportPayload","tagId","_nc_dav_namespaces","ns","_nc_dav_properties","tagToNode","getCurrentUser","namespace","namespaces","registerDavProperty","_nc_fileactions","debug","registerFileAction","inlineSystemTagsAction","_nc_navigation","_view","emptyTitle","emptyCaption","params","tagsCache","getDirectoryContents","details","glob","_ref","fromEntries","_ref2","camelCase","parseTags","fetchTags","userVisible","folder","contents","___CSS_LOADER_EXPORT___","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","r","n","getter","__esModule","definition","o","defineProperty","enumerable","Promise","resolve","g","globalThis","Function","Symbol","toStringTag","nmd","paths","children","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","bind","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file