aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/admin_audit/lib/Actions/Versions.php10
-rw-r--r--apps/admin_audit/lib/AppInfo/Application.php3
-rw-r--r--apps/admin_audit/lib/Listener/FileEventListener.php19
-rw-r--r--apps/cloud_federation_api/lib/Config.php3
-rw-r--r--apps/cloud_federation_api/lib/Controller/RequestHandlerController.php2
-rw-r--r--apps/dav/lib/AppInfo/Application.php35
-rw-r--r--apps/dav/lib/Listener/CalendarShareUpdateListener.php2
-rw-r--r--apps/dav/lib/Listener/UserEventsListener.php9
-rw-r--r--apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php16
-rw-r--r--apps/files_reminders/l10n/ja.js2
-rw-r--r--apps/files_reminders/l10n/ja.json2
-rw-r--r--apps/files_sharing/l10n/et_EE.js5
-rw-r--r--apps/files_sharing/l10n/et_EE.json5
-rw-r--r--apps/files_sharing/l10n/fa.js1
-rw-r--r--apps/files_sharing/l10n/fa.json1
-rw-r--r--apps/files_versions/tests/VersioningTest.php18
-rw-r--r--apps/settings/l10n/pt_BR.js38
-rw-r--r--apps/settings/l10n/pt_BR.json38
-rw-r--r--apps/settings/src/store/apps.js3
-rw-r--r--apps/user_ldap/l10n/pt_BR.js4
-rw-r--r--apps/user_ldap/l10n/pt_BR.json4
-rw-r--r--apps/user_ldap/l10n/tr.js1
-rw-r--r--apps/user_ldap/l10n/tr.json1
-rw-r--r--build/integration/composer.lock12
-rw-r--r--core/Command/Config/App/Base.php14
-rw-r--r--core/Command/Config/App/DeleteConfig.php12
-rw-r--r--core/Command/Config/App/GetConfig.php7
-rw-r--r--core/Command/Config/App/SetConfig.php6
-rw-r--r--core/l10n/cs.js1
-rw-r--r--core/l10n/cs.json1
-rw-r--r--core/l10n/de.js1
-rw-r--r--core/l10n/de.json1
-rw-r--r--core/l10n/de_DE.js1
-rw-r--r--core/l10n/de_DE.json1
-rw-r--r--core/l10n/fa.js1
-rw-r--r--core/l10n/fa.json1
-rw-r--r--core/l10n/it.js20
-rw-r--r--core/l10n/it.json20
-rw-r--r--core/l10n/ja.js1
-rw-r--r--core/l10n/ja.json1
-rw-r--r--core/l10n/pt_BR.js1
-rw-r--r--core/l10n/pt_BR.json1
-rw-r--r--core/l10n/zh_CN.js1
-rw-r--r--core/l10n/zh_CN.json1
-rw-r--r--core/l10n/zh_TW.js1
-rw-r--r--core/l10n/zh_TW.json1
-rw-r--r--dist/settings-vue-settings-apps-users-management.js4
-rw-r--r--dist/settings-vue-settings-apps-users-management.js.map2
-rw-r--r--lib/l10n/uk.js1
-rw-r--r--lib/l10n/uk.json1
-rw-r--r--lib/private/Preview/Watcher.php3
-rw-r--r--lib/private/Preview/WatcherConnector.php32
-rw-r--r--lib/private/Server.php3
-rw-r--r--package-lock.json98
-rw-r--r--package.json4
-rw-r--r--tests/Core/Command/Config/App/DeleteConfigTest.php58
-rw-r--r--tests/Core/Command/Config/App/GetConfigTest.php61
-rw-r--r--tests/Core/Command/Config/App/SetConfigTest.php62
58 files changed, 336 insertions, 322 deletions
diff --git a/apps/admin_audit/lib/Actions/Versions.php b/apps/admin_audit/lib/Actions/Versions.php
index c856c994d3f..b3fdefd011d 100644
--- a/apps/admin_audit/lib/Actions/Versions.php
+++ b/apps/admin_audit/lib/Actions/Versions.php
@@ -8,16 +8,6 @@ declare(strict_types=1);
namespace OCA\AdminAudit\Actions;
class Versions extends Action {
- public function rollback(array $params): void {
- $this->log('Version "%s" of "%s" was restored.',
- [
- 'version' => $params['revision'],
- 'path' => $params['path']
- ],
- ['version', 'path']
- );
- }
-
public function delete(array $params): void {
$this->log('Version "%s" was deleted.',
['path' => $params['path']],
diff --git a/apps/admin_audit/lib/AppInfo/Application.php b/apps/admin_audit/lib/AppInfo/Application.php
index 201a8fe255a..baf73b92b0d 100644
--- a/apps/admin_audit/lib/AppInfo/Application.php
+++ b/apps/admin_audit/lib/AppInfo/Application.php
@@ -27,6 +27,7 @@ use OCA\AdminAudit\Listener\GroupManagementEventListener;
use OCA\AdminAudit\Listener\SecurityEventListener;
use OCA\AdminAudit\Listener\SharingEventListener;
use OCA\AdminAudit\Listener\UserManagementEventListener;
+use OCA\Files_Versions\Events\VersionRestoredEvent;
use OCP\App\Events\AppDisableEvent;
use OCP\App\Events\AppEnableEvent;
use OCP\App\Events\AppUpdateEvent;
@@ -110,6 +111,7 @@ class Application extends App implements IBootstrap {
// File events
$context->registerEventListener(BeforePreviewFetchedEvent::class, FileEventListener::class);
+ $context->registerEventListener(VersionRestoredEvent::class, FileEventListener::class);
// Security events
$context->registerEventListener(TwoFactorProviderChallengePassed::class, SecurityEventListener::class);
@@ -220,7 +222,6 @@ class Application extends App implements IBootstrap {
private function versionsHooks(IAuditLogger $logger): void {
$versionsActions = new Versions($logger);
- Util::connectHook('\OCP\Versions', 'rollback', $versionsActions, 'rollback');
Util::connectHook('\OCP\Versions', 'delete', $versionsActions, 'delete');
}
diff --git a/apps/admin_audit/lib/Listener/FileEventListener.php b/apps/admin_audit/lib/Listener/FileEventListener.php
index 04a106a5adf..46a4962123b 100644
--- a/apps/admin_audit/lib/Listener/FileEventListener.php
+++ b/apps/admin_audit/lib/Listener/FileEventListener.php
@@ -10,6 +10,7 @@ declare(strict_types=1);
namespace OCA\AdminAudit\Listener;
use OCA\AdminAudit\Actions\Action;
+use OCA\Files_Versions\Events\VersionRestoredEvent;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\Files\InvalidPathException;
@@ -19,12 +20,14 @@ use OCP\Server;
use Psr\Log\LoggerInterface;
/**
- * @template-implements IEventListener<BeforePreviewFetchedEvent>
+ * @template-implements IEventListener<BeforePreviewFetchedEvent|VersionRestoredEvent>
*/
class FileEventListener extends Action implements IEventListener {
public function handle(Event $event): void {
if ($event instanceof BeforePreviewFetchedEvent) {
$this->beforePreviewFetched($event);
+ } elseif ($event instanceof VersionRestoredEvent) {
+ $this->versionRestored($event);
}
}
@@ -54,4 +57,18 @@ class FileEventListener extends Action implements IEventListener {
return;
}
}
+
+ /**
+ * Logs when a version is restored
+ */
+ private function versionRestored(VersionRestoredEvent $event): void {
+ $version = $event->getVersion();
+ $this->log('Version "%s" of "%s" was restored.',
+ [
+ 'version' => $version->getRevisionId(),
+ 'path' => $version->getVersionPath()
+ ],
+ ['version', 'path']
+ );
+ }
}
diff --git a/apps/cloud_federation_api/lib/Config.php b/apps/cloud_federation_api/lib/Config.php
index cb3f4a2ae76..f7c14a75c37 100644
--- a/apps/cloud_federation_api/lib/Config.php
+++ b/apps/cloud_federation_api/lib/Config.php
@@ -6,6 +6,7 @@
namespace OCA\CloudFederationAPI;
use OCP\Federation\ICloudFederationProviderManager;
+use Psr\Log\LoggerInterface;
/**
* Class config
@@ -18,6 +19,7 @@ class Config {
public function __construct(
private ICloudFederationProviderManager $cloudFederationProviderManager,
+ private LoggerInterface $logger,
) {
}
@@ -32,6 +34,7 @@ class Config {
$provider = $this->cloudFederationProviderManager->getCloudFederationProvider($resourceType);
return $provider->getSupportedShareTypes();
} catch (\Exception $e) {
+ $this->logger->error('Failed to create federation provider', ['exception' => $e]);
return [];
}
}
diff --git a/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php b/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php
index 86af7924e6f..cbd66f52382 100644
--- a/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php
+++ b/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php
@@ -452,7 +452,7 @@ class RequestHandlerController extends Controller {
*/
private function getHostFromFederationId(string $entry): string {
if (!str_contains($entry, '@')) {
- throw new IncomingRequestException('entry ' . $entry . ' does not contains @');
+ throw new IncomingRequestException('entry ' . $entry . ' does not contain @');
}
$rightPart = substr($entry, strrpos($entry, '@') + 1);
diff --git a/apps/dav/lib/AppInfo/Application.php b/apps/dav/lib/AppInfo/Application.php
index 1c105cffca5..edf7dd1214f 100644
--- a/apps/dav/lib/AppInfo/Application.php
+++ b/apps/dav/lib/AppInfo/Application.php
@@ -9,7 +9,6 @@ declare(strict_types=1);
*/
namespace OCA\DAV\AppInfo;
-use OCA\DAV\CalDAV\Activity\Backend;
use OCA\DAV\CalDAV\AppCalendar\AppCalendarPlugin;
use OCA\DAV\CalDAV\CachedSubscriptionProvider;
use OCA\DAV\CalDAV\CalendarManager;
@@ -82,7 +81,6 @@ use OCP\Config\BeforePreferenceDeletedEvent;
use OCP\Config\BeforePreferenceSetEvent;
use OCP\Contacts\IManager as IContactsManager;
use OCP\DB\Events\AddMissingIndicesEvent;
-use OCP\EventDispatcher\IEventDispatcher;
use OCP\Federation\Events\TrustedServerRemovedEvent;
use OCP\Files\AppData\IAppDataFactory;
use OCP\IUserSession;
@@ -205,6 +203,7 @@ class Application extends App implements IBootstrap {
$context->registerEventListener(UserDeletedEvent::class, UserEventsListener::class);
$context->registerEventListener(UserCreatedEvent::class, UserEventsListener::class);
$context->registerEventListener(UserChangedEvent::class, UserEventsListener::class);
+ $context->registerEventListener(UserUpdatedEvent::class, UserEventsListener::class);
$context->registerNotifierService(Notifier::class);
@@ -228,35 +227,9 @@ class Application extends App implements IBootstrap {
// Load all dav apps
\OC_App::loadApps(['dav']);
- $context->injectFn([$this, 'registerHooks']);
- $context->injectFn([$this, 'registerContactsManager']);
- $context->injectFn([$this, 'registerCalendarManager']);
- $context->injectFn([$this, 'registerCalendarReminders']);
- }
-
- public function registerHooks(
- IEventDispatcher $dispatcher,
- IAppContainer $container,
- ): void {
- $dispatcher->addListener(UserUpdatedEvent::class, function (UserUpdatedEvent $event) use ($container): void {
- /** @var SyncService $syncService */
- $syncService = Server::get(SyncService::class);
- $syncService->updateUser($event->getUser());
- });
-
-
- $dispatcher->addListener(CalendarShareUpdatedEvent::class, function (CalendarShareUpdatedEvent $event) use ($container): void {
- /** @var Backend $backend */
- $backend = $container->query(Backend::class);
- $backend->onCalendarUpdateShares(
- $event->getCalendarData(),
- $event->getOldShares(),
- $event->getAdded(),
- $event->getRemoved()
- );
-
- // Here we should recalculate if reminders should be sent to new or old sharees
- });
+ $context->injectFn($this->registerContactsManager(...));
+ $context->injectFn($this->registerCalendarManager(...));
+ $context->injectFn($this->registerCalendarReminders(...));
}
public function registerContactsManager(IContactsManager $cm, IAppContainer $container): void {
diff --git a/apps/dav/lib/Listener/CalendarShareUpdateListener.php b/apps/dav/lib/Listener/CalendarShareUpdateListener.php
index 541b0d07736..b673d5d2e42 100644
--- a/apps/dav/lib/Listener/CalendarShareUpdateListener.php
+++ b/apps/dav/lib/Listener/CalendarShareUpdateListener.php
@@ -39,5 +39,7 @@ class CalendarShareUpdateListener implements IEventListener {
$event->getAdded(),
$event->getRemoved()
);
+
+ // Here we should recalculate if reminders should be sent to new or old sharees
}
}
diff --git a/apps/dav/lib/Listener/UserEventsListener.php b/apps/dav/lib/Listener/UserEventsListener.php
index d7ca9f3fdaa..61d945e829b 100644
--- a/apps/dav/lib/Listener/UserEventsListener.php
+++ b/apps/dav/lib/Listener/UserEventsListener.php
@@ -13,6 +13,7 @@ use OCA\DAV\CalDAV\CalDavBackend;
use OCA\DAV\CardDAV\CardDavBackend;
use OCA\DAV\CardDAV\SyncService;
use OCA\DAV\Service\DefaultContactService;
+use OCP\Accounts\UserUpdatedEvent;
use OCP\Defaults;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
@@ -29,7 +30,7 @@ use OCP\User\Events\UserIdAssignedEvent;
use OCP\User\Events\UserIdUnassignedEvent;
use Psr\Log\LoggerInterface;
-/** @template-implements IEventListener<UserFirstTimeLoggedInEvent|UserIdAssignedEvent|BeforeUserIdUnassignedEvent|UserIdUnassignedEvent|BeforeUserDeletedEvent|UserDeletedEvent|UserCreatedEvent|UserChangedEvent> */
+/** @template-implements IEventListener<UserFirstTimeLoggedInEvent|UserIdAssignedEvent|BeforeUserIdUnassignedEvent|UserIdUnassignedEvent|BeforeUserDeletedEvent|UserDeletedEvent|UserCreatedEvent|UserChangedEvent|UserUpdatedEvent> */
class UserEventsListener implements IEventListener {
/** @var IUser[] */
@@ -69,6 +70,8 @@ class UserEventsListener implements IEventListener {
$this->changeUser($event->getUser(), $event->getFeature());
} elseif ($event instanceof UserFirstTimeLoggedInEvent) {
$this->firstLogin($event->getUser());
+ } elseif ($event instanceof UserUpdatedEvent) {
+ $this->updateUser($event->getUser());
}
}
@@ -76,6 +79,10 @@ class UserEventsListener implements IEventListener {
$this->syncService->updateUser($user);
}
+ public function updateUser(IUser $user): void {
+ $this->syncService->updateUser($user);
+ }
+
public function preDeleteUser(IUser $user): void {
$uid = $user->getUID();
$userPrincipalUri = 'principals/users/' . $uid;
diff --git a/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php b/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php
index 585fb8e1d97..836b6610199 100644
--- a/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php
+++ b/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php
@@ -67,7 +67,6 @@ class CloudFederationProviderFiles implements ISignedCloudFederationProvider {
private LoggerInterface $logger,
private IFilenameValidator $filenameValidator,
private readonly IProviderFactory $shareProviderFactory,
- private TrustedServers $trustedServers,
) {
}
@@ -156,6 +155,17 @@ class CloudFederationProviderFiles implements ISignedCloudFederationProvider {
// get DisplayName about the owner of the share
$ownerDisplayName = $this->getUserDisplayName($ownerFederatedId);
+ $trustedServers = null;
+ if ($this->appManager->isEnabledForAnyone('federation')
+ && class_exists(TrustedServers::class)) {
+ try {
+ $trustedServers = Server::get(TrustedServers::class);
+ } catch (\Throwable $e) {
+ $this->logger->debug('Failed to create TrustedServers', ['exception' => $e]);
+ }
+ }
+
+
if ($shareType === IShare::TYPE_USER) {
$event = $this->activityManager->generateEvent();
$event->setApp('files_sharing')
@@ -167,7 +177,7 @@ class CloudFederationProviderFiles implements ISignedCloudFederationProvider {
$this->notifyAboutNewShare($shareWith, $shareId, $ownerFederatedId, $sharedByFederatedId, $name, $ownerDisplayName);
// If auto-accept is enabled, accept the share
- if ($this->federatedShareProvider->isFederatedTrustedShareAutoAccept() && $this->trustedServers->isTrustedServer($remote)) {
+ if ($this->federatedShareProvider->isFederatedTrustedShareAutoAccept() && $trustedServers?->isTrustedServer($remote) === true) {
$this->externalShareManager->acceptShare($shareId, $shareWith);
}
} else {
@@ -183,7 +193,7 @@ class CloudFederationProviderFiles implements ISignedCloudFederationProvider {
$this->notifyAboutNewShare($user->getUID(), $shareId, $ownerFederatedId, $sharedByFederatedId, $name, $ownerDisplayName);
// If auto-accept is enabled, accept the share
- if ($this->federatedShareProvider->isFederatedTrustedShareAutoAccept() && $this->trustedServers->isTrustedServer($remote)) {
+ if ($this->federatedShareProvider->isFederatedTrustedShareAutoAccept() && $trustedServers?->isTrustedServer($remote) === true) {
$this->externalShareManager->acceptShare($shareId, $user->getUID());
}
}
diff --git a/apps/files_reminders/l10n/ja.js b/apps/files_reminders/l10n/ja.js
index 68f100a0426..afe1b5d7371 100644
--- a/apps/files_reminders/l10n/ja.js
+++ b/apps/files_reminders/l10n/ja.js
@@ -6,6 +6,8 @@ OC.L10N.register(
"View file" : "ファイルを表示",
"View folder" : "フォルダーを表示",
"Files reminder" : "ファイル リマインダー",
+ "The \"files_reminders\" app can work properly." : "\"files_reminders\"アプリは正しく機能します。",
+ "The \"files_reminders\" app needs the notification app to work properly. You should either enable notifications or disable files_reminder." : "\"files_reminder\"アプリが正しく動作するには、通知アプリが必要です。通知を有効にするか、files_reminderを無効にしてください。",
"Set file reminders" : "ファイルのリマインダーを設定する",
"**📣 File reminders**\n\nSet file reminders.\n\nNote: to use the `File reminders` app, ensure that the `Notifications` app is installed and enabled. The `Notifications` app provides the necessary APIs for the `File reminders` app to work correctly." : "**📣 File reminders**\n\nファイルのリマインダーを設定します。\n\n注意:`File reminders`アプリを使用するには、`Notifications`アプリがインストールされ、有効になっていることを確認してください。Notifications` アプリは `File reminders` アプリが正しく動作するために必要な API を提供します。",
"Set reminder for \"{fileName}\"" : "\"{fileName}\"のリマインダーを設定",
diff --git a/apps/files_reminders/l10n/ja.json b/apps/files_reminders/l10n/ja.json
index d308e39ebb5..ac55be0c78e 100644
--- a/apps/files_reminders/l10n/ja.json
+++ b/apps/files_reminders/l10n/ja.json
@@ -4,6 +4,8 @@
"View file" : "ファイルを表示",
"View folder" : "フォルダーを表示",
"Files reminder" : "ファイル リマインダー",
+ "The \"files_reminders\" app can work properly." : "\"files_reminders\"アプリは正しく機能します。",
+ "The \"files_reminders\" app needs the notification app to work properly. You should either enable notifications or disable files_reminder." : "\"files_reminder\"アプリが正しく動作するには、通知アプリが必要です。通知を有効にするか、files_reminderを無効にしてください。",
"Set file reminders" : "ファイルのリマインダーを設定する",
"**📣 File reminders**\n\nSet file reminders.\n\nNote: to use the `File reminders` app, ensure that the `Notifications` app is installed and enabled. The `Notifications` app provides the necessary APIs for the `File reminders` app to work correctly." : "**📣 File reminders**\n\nファイルのリマインダーを設定します。\n\n注意:`File reminders`アプリを使用するには、`Notifications`アプリがインストールされ、有効になっていることを確認してください。Notifications` アプリは `File reminders` アプリが正しく動作するために必要な API を提供します。",
"Set reminder for \"{fileName}\"" : "\"{fileName}\"のリマインダーを設定",
diff --git a/apps/files_sharing/l10n/et_EE.js b/apps/files_sharing/l10n/et_EE.js
index 0f6f893c90a..be6e39964a3 100644
--- a/apps/files_sharing/l10n/et_EE.js
+++ b/apps/files_sharing/l10n/et_EE.js
@@ -10,6 +10,7 @@ OC.L10N.register(
"Removed share for group {group}" : "Eemaldas jagamise grupiga {group}",
"{actor} shared with group {group}" : "{actor} jagas grupiga {group}",
"{actor} removed share for group {group}" : "{actor} eemaldas jagamise grupiga {group}",
+ "Share for group {group} expired" : "Jagamine „{group}“ grupile aegus",
"You shared {file} with group {group}" : "Sa jagasid faili {file} grupiga {group}",
"You removed group {group} from {file}" : "Sa eemaldasid grupi {group} faili {file} jagamisest",
"{actor} shared {file} with group {group}" : "{actor} jagas faili {file} grupiga {group}",
@@ -54,6 +55,7 @@ OC.L10N.register(
"Shared link" : "Jagatud link",
"Could not delete share" : "Ei saanud jagamist eemaldada",
"Please specify a file or folder path" : "Palun määra faili või kausta rada",
+ "Wrong path, file/folder does not exist" : "Vale asukoht faili või kausta pole olemas",
"Could not create share" : "Ei saanud jagamist luua",
"Group sharing is disabled by the administrator" : "Grupiga jagamine on administraatori poolt keelatud",
"Please specify a valid group" : "Palun määra kehtiv grupp",
@@ -63,6 +65,7 @@ OC.L10N.register(
"Unknown share type" : "Tundmatu jagamise tüüp",
"Not a directory" : "Ei ole kaust",
"Public upload is only possible for publicly shared folders" : "Avalik üleslaadminie on võimalik ainult avalikult jagatud kaustades",
+ "Share must at least have READ or CREATE permissions" : "jaosmeedial peavad olema vähemalt logemis- ja loomisõigused",
"Public upload disabled by the administrator" : "Avalik üleslaadimine on administraatori poolt keelatud",
"Could not lock path" : "Ei saanud rada lukustada",
"Wrong or no update parameter given" : "Antud vale või aegunud parameeter",
@@ -116,6 +119,8 @@ OC.L10N.register(
"Cancel the file request creation" : "Katkesta failipäringu koostamine",
"Close without sending emails" : "Sulge ilma e-kirju saatmata",
"Continue" : "Jätka",
+ "Error while toggling options" : "Viga valikute sisse/välja lülitamisel",
+ "Choose a default folder for accepted shares" : "Vali vaikimisi kaust jaosmeedia vastuvõtmiseks",
"Invalid path selected" : "Vigane asukoht on valitud",
"Unknown error" : "Tundmatu viga",
"Set default folder for accepted shares" : "Määra vastuvõetava jaosmeedia jaoks vaikimisi kaust",
diff --git a/apps/files_sharing/l10n/et_EE.json b/apps/files_sharing/l10n/et_EE.json
index 2ae26d5201e..8126f506958 100644
--- a/apps/files_sharing/l10n/et_EE.json
+++ b/apps/files_sharing/l10n/et_EE.json
@@ -8,6 +8,7 @@
"Removed share for group {group}" : "Eemaldas jagamise grupiga {group}",
"{actor} shared with group {group}" : "{actor} jagas grupiga {group}",
"{actor} removed share for group {group}" : "{actor} eemaldas jagamise grupiga {group}",
+ "Share for group {group} expired" : "Jagamine „{group}“ grupile aegus",
"You shared {file} with group {group}" : "Sa jagasid faili {file} grupiga {group}",
"You removed group {group} from {file}" : "Sa eemaldasid grupi {group} faili {file} jagamisest",
"{actor} shared {file} with group {group}" : "{actor} jagas faili {file} grupiga {group}",
@@ -52,6 +53,7 @@
"Shared link" : "Jagatud link",
"Could not delete share" : "Ei saanud jagamist eemaldada",
"Please specify a file or folder path" : "Palun määra faili või kausta rada",
+ "Wrong path, file/folder does not exist" : "Vale asukoht faili või kausta pole olemas",
"Could not create share" : "Ei saanud jagamist luua",
"Group sharing is disabled by the administrator" : "Grupiga jagamine on administraatori poolt keelatud",
"Please specify a valid group" : "Palun määra kehtiv grupp",
@@ -61,6 +63,7 @@
"Unknown share type" : "Tundmatu jagamise tüüp",
"Not a directory" : "Ei ole kaust",
"Public upload is only possible for publicly shared folders" : "Avalik üleslaadminie on võimalik ainult avalikult jagatud kaustades",
+ "Share must at least have READ or CREATE permissions" : "jaosmeedial peavad olema vähemalt logemis- ja loomisõigused",
"Public upload disabled by the administrator" : "Avalik üleslaadimine on administraatori poolt keelatud",
"Could not lock path" : "Ei saanud rada lukustada",
"Wrong or no update parameter given" : "Antud vale või aegunud parameeter",
@@ -114,6 +117,8 @@
"Cancel the file request creation" : "Katkesta failipäringu koostamine",
"Close without sending emails" : "Sulge ilma e-kirju saatmata",
"Continue" : "Jätka",
+ "Error while toggling options" : "Viga valikute sisse/välja lülitamisel",
+ "Choose a default folder for accepted shares" : "Vali vaikimisi kaust jaosmeedia vastuvõtmiseks",
"Invalid path selected" : "Vigane asukoht on valitud",
"Unknown error" : "Tundmatu viga",
"Set default folder for accepted shares" : "Määra vastuvõetava jaosmeedia jaoks vaikimisi kaust",
diff --git a/apps/files_sharing/l10n/fa.js b/apps/files_sharing/l10n/fa.js
index 54743b02a52..e5a49278326 100644
--- a/apps/files_sharing/l10n/fa.js
+++ b/apps/files_sharing/l10n/fa.js
@@ -125,6 +125,7 @@ OC.L10N.register(
"Terms of service" : "شرایط و قوانین",
"Name" : "نام",
"Enter your name" : "اسمت را وارد کن",
+ "Update share" : "به‌روزرسانی هم‌رسانی",
"Read" : "خواندن",
"Create" : "ایجاد",
"Edit" : "ویرایش",
diff --git a/apps/files_sharing/l10n/fa.json b/apps/files_sharing/l10n/fa.json
index 1c1bce9b4e1..345cac57f8b 100644
--- a/apps/files_sharing/l10n/fa.json
+++ b/apps/files_sharing/l10n/fa.json
@@ -123,6 +123,7 @@
"Terms of service" : "شرایط و قوانین",
"Name" : "نام",
"Enter your name" : "اسمت را وارد کن",
+ "Update share" : "به‌روزرسانی هم‌رسانی",
"Read" : "خواندن",
"Create" : "ایجاد",
"Edit" : "ویرایش",
diff --git a/apps/files_versions/tests/VersioningTest.php b/apps/files_versions/tests/VersioningTest.php
index 13ea133097f..f294390a593 100644
--- a/apps/files_versions/tests/VersioningTest.php
+++ b/apps/files_versions/tests/VersioningTest.php
@@ -16,9 +16,11 @@ use OC\User\NoUserException;
use OCA\Files_Sharing\AppInfo\Application;
use OCA\Files_Versions\Db\VersionEntity;
use OCA\Files_Versions\Db\VersionsMapper;
+use OCA\Files_Versions\Events\VersionRestoredEvent;
use OCA\Files_Versions\Storage;
use OCA\Files_Versions\Versions\IVersionManager;
use OCP\Constants;
+use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\IMimeTypeLoader;
use OCP\IConfig;
use OCP\IUser;
@@ -804,8 +806,13 @@ class VersioningTest extends \Test\TestCase {
$this->assertEquals('test file', $this->rootView->file_get_contents($filePath));
$info1 = $this->rootView->getFileInfo($filePath);
- $params = [];
- $this->connectMockHooks('rollback', $params);
+ $eventDispatcher = Server::get(IEventDispatcher::class);
+ $eventFired = false;
+ $eventDispatcher->addListener(VersionRestoredEvent::class, function ($event) use (&$eventFired, $t2) {
+ $eventFired = true;
+ $this->assertEquals('/sub/test.txt', $event->getVersion()->getVersionPath());
+ $this->assertTrue($event->getVersion()->getRevisionId() > 0);
+ });
$versionManager = Server::get(IVersionManager::class);
$versions = $versionManager->getVersionsForFile($this->user1, $info1);
@@ -813,13 +820,8 @@ class VersioningTest extends \Test\TestCase {
return $version->getRevisionId() === $t2;
});
$this->assertTrue($versionManager->rollback(current($version)));
- $expectedParams = [
- 'path' => '/sub/test.txt',
- ];
- $this->assertEquals($expectedParams['path'], $params['path']);
- $this->assertTrue(array_key_exists('revision', $params));
- $this->assertTrue($params['revision'] > 0);
+ $this->assertTrue($eventFired, 'VersionRestoredEvent was not fired');
$this->assertEquals('version2', $this->rootView->file_get_contents($filePath));
$info2 = $this->rootView->getFileInfo($filePath);
diff --git a/apps/settings/l10n/pt_BR.js b/apps/settings/l10n/pt_BR.js
index 5f8de27d286..323080d0009 100644
--- a/apps/settings/l10n/pt_BR.js
+++ b/apps/settings/l10n/pt_BR.js
@@ -181,7 +181,7 @@ OC.L10N.register(
"You have not set or verified your email server configuration, yet. Please head over to the \"Basic settings\" in order to set them. Afterwards, use the \"Send email\" button below the form to verify your settings." : "Você ainda não definiu ou verificou a configuração do seu servidor de e-mail. Por favor, vá para as \"Configurações básicas\" para defini-las. Depois, use o botão \"Enviar e-mail\" abaixo do formulário para verificar suas configurações.",
"Transactional File Locking" : "Bloqueio de Arquivo Transacional",
"Transactional File Locking is disabled. This is not a a supported configuraton. It may lead to difficult to isolate problems including file corruption. Please remove the `'filelocking.enabled' => false` configuration entry from your `config.php` to avoid these problems." : "O Bloqueio de Arquivo Transacional está desativado. Esta não é uma configuração suportada. Isso pode dificultar o isolamento de problemas, incluindo corrupção de arquivos. Por favor remova a entrada de configuração `'filelocking.enabled' => false` do seu `config.php` para evitar esses problemas.",
- "The database is used for transactional file locking. To enhance performance, please configure memcache, if available." : "O banco de dados é usado para bloqueio de arquivos transacionais. Para melhorar o desempenho, configure o memcache, se disponível.",
+ "The database is used for transactional file locking. To enhance performance, please configure memcache, if available." : "O banco de dados é usado para bloqueio de arquivo transacional. Para melhorar o desempenho, configure o memcache, se disponível.",
"Forwarded for headers" : "Cabeçalhos Forwarded for",
"Your \"trusted_proxies\" setting is not correctly set, it should be an array." : "Sua configuração \"trusted_proxies\" não está definida corretamente; deveria ser um arranjo.",
"Your \"trusted_proxies\" setting is not correctly set, it should be an array of IP addresses - optionally with range in CIDR notation." : "Sua configuração \"trusted_proxies\" não está definida corretamente; deve ser um arranjo de endereços IP - opcionalmente com intervalo na notação CIDR.",
@@ -224,7 +224,7 @@ OC.L10N.register(
"MySQL row format" : "Formato de linhas do MySQL",
"You are not using MySQL" : "Você não está usando MySQL",
"None of your tables use ROW_FORMAT=Compressed" : "Nenhuma de suas tabelas usa ROW_FORMAT=Compressed",
- "Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s." : "Formato de linha incorreto encontrado em seu banco de dados. ROW_FORMAT=Dynamic oferece o melhor desempenho de banco de dados para o Nextcloud. Atualize o formato da linha na lista a seguir: %s.",
+ "Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s." : "Formato de linhas incorreto encontrado em seu banco de dados. ROW_FORMAT=Dynamic oferece o melhor desempenho de banco de dados para o Nextcloud. Atualize o formato de linhas na lista a seguir: %s.",
"MySQL Unicode support" : "Suporte a Unicode do MySQL",
"MySQL is used as database and does support 4-byte characters" : "MySQL é usado como banco de dados e é compatível com caracteres de 4 bytes",
"MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL." : "MySQL é usado como banco de dados, mas não suporta caracteres de 4 bytes. Para poder lidar com caracteres de 4 bytes (como emojis) sem problemas em nomes de arquivos ou comentários, por exemplo, é recomendado habilitar o suporte de 4 bytes no MySQL.",
@@ -283,15 +283,15 @@ OC.L10N.register(
"Push service" : "Serviço push",
"Valid enterprise license" : "Licença empresarial válida",
"Free push service" : "Serviço push gratuito",
- "This is the unsupported community build of Nextcloud. Given the size of this instance, performance, reliability and scalability cannot be guaranteed. Push notifications are limited to avoid overloading our free service. Learn more about the benefits of Nextcloud Enterprise at {link}." : "Esta é a construção da comunidade não suportada do Nextcloud. Dado o tamanho desta instância, o desempenho, a confiabilidade e a escalabilidade não podem ser garantidos. As notificações push são limitadas para evitar sobrecarregar nosso serviço gratuito. Saiba mais sobre os benefícios do Nextcloud Enterprise em {link}.",
+ "This is the unsupported community build of Nextcloud. Given the size of this instance, performance, reliability and scalability cannot be guaranteed. Push notifications are limited to avoid overloading our free service. Learn more about the benefits of Nextcloud Enterprise at {link}." : "Esta é a construção da comunidade não suportada do Nextcloud. Dado o tamanho desta instância, o desempenho, a confiabilidade e a escalabilidade não podem ser garantidos. As notificações push são limitadas para evitar sobrecarregar nosso serviço gratuito. Saiba mais sobre os benefícios do Nextcloud Empresarial em {link}.",
"Random generator" : "Gerador aleatório",
"No suitable source for randomness found by PHP which is highly discouraged for security reasons." : "Nenhuma fonte adequada para aleatoriedade encontrada pelo PHP, o que é altamente desencorajado por razões de segurança.",
"Secure" : "Seguro",
"Configuration file access rights" : "Direitos de acesso ao arquivo de configuração",
"The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração read-only foi ativada. Isso impede a definição de algumas configurações através da interface web. Além disso, o arquivo precisa ser gravado manualmente em cada atualização.",
"Nextcloud configuration file is writable" : "O arquivo de configuração Nextcloud é gravável",
- "Scheduling objects table size" : "Agendamento do tamanho da tabela de objetos",
- "You have more than %s rows in the scheduling objects table. Please run the expensive repair jobs via occ maintenance:repair --include-expensive." : "Você tem mais de %s linhas na tabela de objetos de agendamento. Por favor, execute os trabalhos de reparo caros via occ Maintenance:repair --include-expensive.",
+ "Scheduling objects table size" : "Tamanho da tabela de objetos de agendamento",
+ "You have more than %s rows in the scheduling objects table. Please run the expensive repair jobs via occ maintenance:repair --include-expensive." : "Você tem mais de %s linhas na tabela de objetos de agendamento. Por favor, execute os trabalhos de reparo caros via occ maintenance:repair --include-expensive.",
"Scheduling objects table size is within acceptable range." : "O tamanho da tabela de objetos de agendamento está dentro do intervalo aceitável.",
"HTTP headers" : "Cabeçalhos HTTP",
"- The `%1$s` HTTP header is not set to `%2$s`. Some features might not work correctly, as it is recommended to adjust this setting accordingly." : "- O cabeçalho HTTP `%1$s` não está definido como `%2$s`. Alguns recursos podem não funcionar corretamente, portanto, é recomendado ajustar esta configuração de acordo.",
@@ -367,7 +367,7 @@ OC.L10N.register(
"Always ask for a password" : "Sempre pedir a senha",
"Enforce password protection" : "Obrigar proteção com senha",
"Exclude groups from password requirements" : "Excluir grupos dos requisitos de senha",
- "Exclude groups from creating link shares" : "Excluir grupos da criação de compartilhamentos de links",
+ "Exclude groups from creating link shares" : "Excluir grupos da criação de compartilhamentos via links",
"Allow users to set custom share link tokens" : "Permite que os usuários definam tokens personalizados para links de compartilhamento",
"Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Compartilhamentos com tokens personalizados continuarão acessíveis mesmo após essa configuração ser desativada",
"Shares with guessable tokens may be accessed easily" : "Compartilhamentos com tokens facilmente adivinháveis podem ser acessados com facilidade",
@@ -387,7 +387,7 @@ OC.L10N.register(
"Default expiration time of remote shares in days" : "Tempo de expiração padrão de compartilhamentos remotos em dias",
"Expire remote shares after x days" : "Expirar compartilhamentos remotos após x dias",
"Set default expiration date for shares via link or mail" : "Defina a data de expiração padrão para compartilhamentos via link ou e-mail",
- "Default expiration time of shares in days" : "Tempo de expiração padrão das compartilhamentos em dias",
+ "Default expiration time of shares in days" : "Tempo de expiração padrão dos compartilhamentos em dias",
"Privacy settings for sharing" : "Configurações de privacidade para compartilhamento",
"Allow account name autocompletion in share dialog and allow access to the system address book" : "Permitir o preenchimento automático do nome da conta na caixa de diálogo de compartilhamento e permitir o acesso ao catálogo de endereços do sistema",
"If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se autocompletar \"mesmo grupo\" e \"integração do número de telefone\" estiverem habilitadas, uma correspondência em qualquer um dos dois é suficiente para mostrar o usuário.",
@@ -416,8 +416,8 @@ OC.L10N.register(
"This app is supported via your current Nextcloud subscription." : "Este aplicativo é suportado pela sua assinatura atual do Nextcloud.",
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Os aplicativos em destaque são desenvolvidos pela comunidade. Eles oferecem funcionalidade central e estão prontos para uso em produção.",
"Community rating: {score}/5" : "Avaliação da comunidade: {score}/5",
- "Disable all" : "Desativar tudo",
- "Download and enable all" : "Baixe e habilite todos",
+ "Disable all" : "Desativar todos",
+ "Download and enable all" : "Baixar e ativar todos",
"All apps are up-to-date." : "Todos os aplicativos estão com a versão mais recente.",
"Icon" : "Ícone",
"Name" : "Nome",
@@ -427,7 +427,7 @@ OC.L10N.register(
"Results from other categories" : "Resultados de outras categorias",
"No apps found for your version" : "Nenhum aplicativo encontrado para a sua versão",
"_%n app has an update available_::_%n apps have an update available_" : ["%n aplicativo tem atualização disponível","%n aplicativos tem atualização disponível","%n aplicativos tem atualização disponível"],
- "_Update_::_Update all_" : ["Atualizar","Atualize tudo","Atualize tudo"],
+ "_Update_::_Update all_" : ["Atualizar","Atualizar todos","Atualizar todos"],
"Failed to load groups" : "Falha ao carregar grupos",
"Failed to create group" : "Falha ao criar grupo",
"Creating group…" : "Criando grupo…",
@@ -464,21 +464,21 @@ OC.L10N.register(
"Mounts" : "Montagens",
"Define host folder mounts to bind to the ExApp container" : "Definir montagens de pastas do host para vincular ao contêiner do ExApp",
"Must exist on the Deploy daemon host prior to installing the ExApp" : "Deve existir no host do daemon do Deploy antes da instalação do ExApp",
- "Host path" : "Caminho do host",
- "Container path" : "Caminho do contêiner",
+ "Host path" : "Caminho no host",
+ "Container path" : "Caminho no contêiner",
"Read-only" : "Somente leitura",
"Remove mount" : "Remover montagem",
"New mount" : "Nova montagem",
"Enter path to host folder" : "Digite o caminho para a pasta do host",
"Enter path to container folder" : "Digite o caminho para a pasta do contêiner",
"Toggle read-only mode" : "Alternar o modo somente leitura",
- "Confirm adding new mount" : "Confirmar a adição de uma nova montagem",
+ "Confirm adding new mount" : "Confirmar adição da nova montagem",
"Confirm" : "Confirmar",
"Cancel adding mount" : "Cancelar a adição de montagem",
"Cancel" : "Cancelar",
"Add mount" : "Adicionar montagem",
"ExApp container mounts" : "Montagens de contêiner ExApp",
- "No mounts defined" : "Não há montagens definidas",
+ "No mounts defined" : "Nenhuma montagem definida",
"Description" : "Descrição",
"View in store" : "Ver na loja",
"Visit website" : "Visitar website",
@@ -502,9 +502,9 @@ OC.L10N.register(
"Resources" : "Recursos",
"Documentation" : "Documentação",
"Interact" : "Interagir",
- "Report a bug" : "Reportar um erro",
- "Request feature" : "Solicite uma funcionalidade",
- "Ask questions or discuss" : "Pergunte ou discuta",
+ "Report a bug" : "Relatar um erro",
+ "Request feature" : "Solicitar uma funcionalidade",
+ "Ask questions or discuss" : "Fazer perguntas ou discutir",
"Rate the app" : "Avalie o aplicativo",
"Rate" : "Avaliação",
"Changelog" : "Changelog",
@@ -526,7 +526,7 @@ OC.L10N.register(
"Rename" : "Renomear",
"Revoke" : "Revogar",
"Wipe device" : "Limpar o dispositivo",
- "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "A revogação deste token pode impedir a limpeza do seu dispositivo, caso ainda não tenha sido iniciada.",
+ "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "A revogação desse token pode impedir o apagamento do seu dispositivo se ele ainda não tiver iniciado o apagamento.",
"Device" : "Dispositivo",
"Last activity" : "Última atividade",
"Devices & sessions" : "Dispositivos & sessões",
@@ -538,7 +538,7 @@ OC.L10N.register(
"Copy app password" : "Copiar senha do aplicativo",
"Login name copied!" : "Nome de login copiado!",
"Copy login name" : "Copiar nome de login",
- "Could not copy app password. Please copy it manually." : "Não foi possível copiar a senha do aplicativo. Copie-a manualmente.",
+ "Could not copy app password. Please copy it manually." : "Não foi possível copiar a senha do aplicativo. Por favor, copie-a manualmente.",
"Could not copy login name. Please copy it manually." : "Não foi possível copiar o nome de login. Por favor, copie-o manualmente.",
"New app password" : "Nova senha de aplicativo",
"Use the credentials below to configure your app or device. For security reasons this password will only be shown once." : "Use as credenciais abaixo para configurar seu aplicativo ou dispositivo. Por motivos de segurança esta senha só será mostrada uma vez.",
diff --git a/apps/settings/l10n/pt_BR.json b/apps/settings/l10n/pt_BR.json
index c3f0dacb073..da033852b3b 100644
--- a/apps/settings/l10n/pt_BR.json
+++ b/apps/settings/l10n/pt_BR.json
@@ -179,7 +179,7 @@
"You have not set or verified your email server configuration, yet. Please head over to the \"Basic settings\" in order to set them. Afterwards, use the \"Send email\" button below the form to verify your settings." : "Você ainda não definiu ou verificou a configuração do seu servidor de e-mail. Por favor, vá para as \"Configurações básicas\" para defini-las. Depois, use o botão \"Enviar e-mail\" abaixo do formulário para verificar suas configurações.",
"Transactional File Locking" : "Bloqueio de Arquivo Transacional",
"Transactional File Locking is disabled. This is not a a supported configuraton. It may lead to difficult to isolate problems including file corruption. Please remove the `'filelocking.enabled' => false` configuration entry from your `config.php` to avoid these problems." : "O Bloqueio de Arquivo Transacional está desativado. Esta não é uma configuração suportada. Isso pode dificultar o isolamento de problemas, incluindo corrupção de arquivos. Por favor remova a entrada de configuração `'filelocking.enabled' => false` do seu `config.php` para evitar esses problemas.",
- "The database is used for transactional file locking. To enhance performance, please configure memcache, if available." : "O banco de dados é usado para bloqueio de arquivos transacionais. Para melhorar o desempenho, configure o memcache, se disponível.",
+ "The database is used for transactional file locking. To enhance performance, please configure memcache, if available." : "O banco de dados é usado para bloqueio de arquivo transacional. Para melhorar o desempenho, configure o memcache, se disponível.",
"Forwarded for headers" : "Cabeçalhos Forwarded for",
"Your \"trusted_proxies\" setting is not correctly set, it should be an array." : "Sua configuração \"trusted_proxies\" não está definida corretamente; deveria ser um arranjo.",
"Your \"trusted_proxies\" setting is not correctly set, it should be an array of IP addresses - optionally with range in CIDR notation." : "Sua configuração \"trusted_proxies\" não está definida corretamente; deve ser um arranjo de endereços IP - opcionalmente com intervalo na notação CIDR.",
@@ -222,7 +222,7 @@
"MySQL row format" : "Formato de linhas do MySQL",
"You are not using MySQL" : "Você não está usando MySQL",
"None of your tables use ROW_FORMAT=Compressed" : "Nenhuma de suas tabelas usa ROW_FORMAT=Compressed",
- "Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s." : "Formato de linha incorreto encontrado em seu banco de dados. ROW_FORMAT=Dynamic oferece o melhor desempenho de banco de dados para o Nextcloud. Atualize o formato da linha na lista a seguir: %s.",
+ "Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s." : "Formato de linhas incorreto encontrado em seu banco de dados. ROW_FORMAT=Dynamic oferece o melhor desempenho de banco de dados para o Nextcloud. Atualize o formato de linhas na lista a seguir: %s.",
"MySQL Unicode support" : "Suporte a Unicode do MySQL",
"MySQL is used as database and does support 4-byte characters" : "MySQL é usado como banco de dados e é compatível com caracteres de 4 bytes",
"MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL." : "MySQL é usado como banco de dados, mas não suporta caracteres de 4 bytes. Para poder lidar com caracteres de 4 bytes (como emojis) sem problemas em nomes de arquivos ou comentários, por exemplo, é recomendado habilitar o suporte de 4 bytes no MySQL.",
@@ -281,15 +281,15 @@
"Push service" : "Serviço push",
"Valid enterprise license" : "Licença empresarial válida",
"Free push service" : "Serviço push gratuito",
- "This is the unsupported community build of Nextcloud. Given the size of this instance, performance, reliability and scalability cannot be guaranteed. Push notifications are limited to avoid overloading our free service. Learn more about the benefits of Nextcloud Enterprise at {link}." : "Esta é a construção da comunidade não suportada do Nextcloud. Dado o tamanho desta instância, o desempenho, a confiabilidade e a escalabilidade não podem ser garantidos. As notificações push são limitadas para evitar sobrecarregar nosso serviço gratuito. Saiba mais sobre os benefícios do Nextcloud Enterprise em {link}.",
+ "This is the unsupported community build of Nextcloud. Given the size of this instance, performance, reliability and scalability cannot be guaranteed. Push notifications are limited to avoid overloading our free service. Learn more about the benefits of Nextcloud Enterprise at {link}." : "Esta é a construção da comunidade não suportada do Nextcloud. Dado o tamanho desta instância, o desempenho, a confiabilidade e a escalabilidade não podem ser garantidos. As notificações push são limitadas para evitar sobrecarregar nosso serviço gratuito. Saiba mais sobre os benefícios do Nextcloud Empresarial em {link}.",
"Random generator" : "Gerador aleatório",
"No suitable source for randomness found by PHP which is highly discouraged for security reasons." : "Nenhuma fonte adequada para aleatoriedade encontrada pelo PHP, o que é altamente desencorajado por razões de segurança.",
"Secure" : "Seguro",
"Configuration file access rights" : "Direitos de acesso ao arquivo de configuração",
"The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração read-only foi ativada. Isso impede a definição de algumas configurações através da interface web. Além disso, o arquivo precisa ser gravado manualmente em cada atualização.",
"Nextcloud configuration file is writable" : "O arquivo de configuração Nextcloud é gravável",
- "Scheduling objects table size" : "Agendamento do tamanho da tabela de objetos",
- "You have more than %s rows in the scheduling objects table. Please run the expensive repair jobs via occ maintenance:repair --include-expensive." : "Você tem mais de %s linhas na tabela de objetos de agendamento. Por favor, execute os trabalhos de reparo caros via occ Maintenance:repair --include-expensive.",
+ "Scheduling objects table size" : "Tamanho da tabela de objetos de agendamento",
+ "You have more than %s rows in the scheduling objects table. Please run the expensive repair jobs via occ maintenance:repair --include-expensive." : "Você tem mais de %s linhas na tabela de objetos de agendamento. Por favor, execute os trabalhos de reparo caros via occ maintenance:repair --include-expensive.",
"Scheduling objects table size is within acceptable range." : "O tamanho da tabela de objetos de agendamento está dentro do intervalo aceitável.",
"HTTP headers" : "Cabeçalhos HTTP",
"- The `%1$s` HTTP header is not set to `%2$s`. Some features might not work correctly, as it is recommended to adjust this setting accordingly." : "- O cabeçalho HTTP `%1$s` não está definido como `%2$s`. Alguns recursos podem não funcionar corretamente, portanto, é recomendado ajustar esta configuração de acordo.",
@@ -365,7 +365,7 @@
"Always ask for a password" : "Sempre pedir a senha",
"Enforce password protection" : "Obrigar proteção com senha",
"Exclude groups from password requirements" : "Excluir grupos dos requisitos de senha",
- "Exclude groups from creating link shares" : "Excluir grupos da criação de compartilhamentos de links",
+ "Exclude groups from creating link shares" : "Excluir grupos da criação de compartilhamentos via links",
"Allow users to set custom share link tokens" : "Permite que os usuários definam tokens personalizados para links de compartilhamento",
"Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Compartilhamentos com tokens personalizados continuarão acessíveis mesmo após essa configuração ser desativada",
"Shares with guessable tokens may be accessed easily" : "Compartilhamentos com tokens facilmente adivinháveis podem ser acessados com facilidade",
@@ -385,7 +385,7 @@
"Default expiration time of remote shares in days" : "Tempo de expiração padrão de compartilhamentos remotos em dias",
"Expire remote shares after x days" : "Expirar compartilhamentos remotos após x dias",
"Set default expiration date for shares via link or mail" : "Defina a data de expiração padrão para compartilhamentos via link ou e-mail",
- "Default expiration time of shares in days" : "Tempo de expiração padrão das compartilhamentos em dias",
+ "Default expiration time of shares in days" : "Tempo de expiração padrão dos compartilhamentos em dias",
"Privacy settings for sharing" : "Configurações de privacidade para compartilhamento",
"Allow account name autocompletion in share dialog and allow access to the system address book" : "Permitir o preenchimento automático do nome da conta na caixa de diálogo de compartilhamento e permitir o acesso ao catálogo de endereços do sistema",
"If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se autocompletar \"mesmo grupo\" e \"integração do número de telefone\" estiverem habilitadas, uma correspondência em qualquer um dos dois é suficiente para mostrar o usuário.",
@@ -414,8 +414,8 @@
"This app is supported via your current Nextcloud subscription." : "Este aplicativo é suportado pela sua assinatura atual do Nextcloud.",
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Os aplicativos em destaque são desenvolvidos pela comunidade. Eles oferecem funcionalidade central e estão prontos para uso em produção.",
"Community rating: {score}/5" : "Avaliação da comunidade: {score}/5",
- "Disable all" : "Desativar tudo",
- "Download and enable all" : "Baixe e habilite todos",
+ "Disable all" : "Desativar todos",
+ "Download and enable all" : "Baixar e ativar todos",
"All apps are up-to-date." : "Todos os aplicativos estão com a versão mais recente.",
"Icon" : "Ícone",
"Name" : "Nome",
@@ -425,7 +425,7 @@
"Results from other categories" : "Resultados de outras categorias",
"No apps found for your version" : "Nenhum aplicativo encontrado para a sua versão",
"_%n app has an update available_::_%n apps have an update available_" : ["%n aplicativo tem atualização disponível","%n aplicativos tem atualização disponível","%n aplicativos tem atualização disponível"],
- "_Update_::_Update all_" : ["Atualizar","Atualize tudo","Atualize tudo"],
+ "_Update_::_Update all_" : ["Atualizar","Atualizar todos","Atualizar todos"],
"Failed to load groups" : "Falha ao carregar grupos",
"Failed to create group" : "Falha ao criar grupo",
"Creating group…" : "Criando grupo…",
@@ -462,21 +462,21 @@
"Mounts" : "Montagens",
"Define host folder mounts to bind to the ExApp container" : "Definir montagens de pastas do host para vincular ao contêiner do ExApp",
"Must exist on the Deploy daemon host prior to installing the ExApp" : "Deve existir no host do daemon do Deploy antes da instalação do ExApp",
- "Host path" : "Caminho do host",
- "Container path" : "Caminho do contêiner",
+ "Host path" : "Caminho no host",
+ "Container path" : "Caminho no contêiner",
"Read-only" : "Somente leitura",
"Remove mount" : "Remover montagem",
"New mount" : "Nova montagem",
"Enter path to host folder" : "Digite o caminho para a pasta do host",
"Enter path to container folder" : "Digite o caminho para a pasta do contêiner",
"Toggle read-only mode" : "Alternar o modo somente leitura",
- "Confirm adding new mount" : "Confirmar a adição de uma nova montagem",
+ "Confirm adding new mount" : "Confirmar adição da nova montagem",
"Confirm" : "Confirmar",
"Cancel adding mount" : "Cancelar a adição de montagem",
"Cancel" : "Cancelar",
"Add mount" : "Adicionar montagem",
"ExApp container mounts" : "Montagens de contêiner ExApp",
- "No mounts defined" : "Não há montagens definidas",
+ "No mounts defined" : "Nenhuma montagem definida",
"Description" : "Descrição",
"View in store" : "Ver na loja",
"Visit website" : "Visitar website",
@@ -500,9 +500,9 @@
"Resources" : "Recursos",
"Documentation" : "Documentação",
"Interact" : "Interagir",
- "Report a bug" : "Reportar um erro",
- "Request feature" : "Solicite uma funcionalidade",
- "Ask questions or discuss" : "Pergunte ou discuta",
+ "Report a bug" : "Relatar um erro",
+ "Request feature" : "Solicitar uma funcionalidade",
+ "Ask questions or discuss" : "Fazer perguntas ou discutir",
"Rate the app" : "Avalie o aplicativo",
"Rate" : "Avaliação",
"Changelog" : "Changelog",
@@ -524,7 +524,7 @@
"Rename" : "Renomear",
"Revoke" : "Revogar",
"Wipe device" : "Limpar o dispositivo",
- "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "A revogação deste token pode impedir a limpeza do seu dispositivo, caso ainda não tenha sido iniciada.",
+ "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "A revogação desse token pode impedir o apagamento do seu dispositivo se ele ainda não tiver iniciado o apagamento.",
"Device" : "Dispositivo",
"Last activity" : "Última atividade",
"Devices & sessions" : "Dispositivos & sessões",
@@ -536,7 +536,7 @@
"Copy app password" : "Copiar senha do aplicativo",
"Login name copied!" : "Nome de login copiado!",
"Copy login name" : "Copiar nome de login",
- "Could not copy app password. Please copy it manually." : "Não foi possível copiar a senha do aplicativo. Copie-a manualmente.",
+ "Could not copy app password. Please copy it manually." : "Não foi possível copiar a senha do aplicativo. Por favor, copie-a manualmente.",
"Could not copy login name. Please copy it manually." : "Não foi possível copiar o nome de login. Por favor, copie-o manualmente.",
"New app password" : "Nova senha de aplicativo",
"Use the credentials below to configure your app or device. For security reasons this password will only be shown once." : "Use as credenciais abaixo para configurar seu aplicativo ou dispositivo. Por motivos de segurança esta senha só será mostrada uma vez.",
diff --git a/apps/settings/src/store/apps.js b/apps/settings/src/store/apps.js
index c58651a3cf5..e0068d3892e 100644
--- a/apps/settings/src/store/apps.js
+++ b/apps/settings/src/store/apps.js
@@ -5,6 +5,7 @@
import api from './api.js'
import Vue from 'vue'
+import axios from '@nextcloud/axios'
import { generateUrl } from '@nextcloud/router'
import { showError, showInfo } from '@nextcloud/dialogs'
import { loadState } from '@nextcloud/initial-state'
@@ -191,7 +192,7 @@ const actions = {
})
// check for server health
- return api.get(generateUrl('apps/files/'))
+ return axios.get(generateUrl('apps/files/'))
.then(() => {
if (response.data.update_required) {
showInfo(
diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js
index c3f85820b72..c78cbca2108 100644
--- a/apps/user_ldap/l10n/pt_BR.js
+++ b/apps/user_ldap/l10n/pt_BR.js
@@ -216,7 +216,7 @@ OC.L10N.register(
"Role Field" : "Campo de Função",
"User profile Role will be set from the specified attribute" : "A Função no perfil do usuário será definida a partir do atributo especificado",
"Headline Field" : "Campo do Título",
- "User profile Headline will be set from the specified attribute" : "O título do perfil do usuário será definido a partir do atributo especificado",
+ "User profile Headline will be set from the specified attribute" : "O Título do perfil do usuário será definido a partir do atributo especificado",
"Biography Field" : "Campo de Biografia",
"User profile Biography will be set from the specified attribute" : "A Biografia no perfil do usuário será definida a partir do atributo especificado",
"Birthdate Field" : "Campo de Data de Nascimento",
@@ -224,7 +224,7 @@ OC.L10N.register(
"Pronouns Field" : "Campo de Pronomes",
"User profile Pronouns will be set from the specified attribute" : "Os Pronomes no perfil do usuário serão definidos a partir do atributo especificado",
"Internal Username" : "Nome de Usuário Interno",
- "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Por padrão, o nome de usuário interno será criado a partir do atributo UUID. Ele garante que o nome de usuário seja exclusivo e os caracteres não precisem ser convertidos. O nome de usuário interno tem a restrição de que apenas esses caracteres são permitidos: [a-zA-Z0-9_.@-]. Outros caracteres são substituídos por sua correspondência ASCII ou simplesmente omitidos. Em colisões, um número será adicionado/aumentado. O nome de usuário interno é usado para identificar um usuário internamente. Também é o nome padrão para a pasta inicial do usuário. Também faz parte de URLs remotos, por exemplo, para todos os serviços DAV. Com essa configuração, o comportamento padrão pode ser substituído. As alterações terão efeito apenas em usuários LDAP recém-mapeados (adicionados). Deixe-o vazio para o comportamento padrão.",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Por padrão, o nome de usuário interno será criado a partir do atributo UUID. Isso garante que o nome de usuário seja exclusivo e os caracteres não precisem ser convertidos. O nome de usuário interno tem a restrição de que apenas esses caracteres são permitidos: [a-zA-Z0-9_.@-]. Outros caracteres são substituídos por sua correspondência ASCII ou simplesmente omitidos. Em colisões, um número será adicionado/aumentado. O nome de usuário interno é usado para identificar um usuário internamente. Também é o nome padrão para a pasta inicial do usuário. Também faz parte de URLs remotos, por exemplo, para todos os serviços DAV. Com essa configuração, o comportamento padrão pode ser substituído. As alterações terão efeito apenas em usuários LDAP recém-mapeados (adicionados). Deixe-a vazia para o comportamento padrão.",
"Internal Username Attribute:" : "Atributo Interno de Nome de Usuário:",
"Override UUID detection" : "Substituir detecção UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por padrão, o atributo UUID é detectado automaticamente. O atributo UUID é usado para identificar corretamente os usuários e grupos LDAP. Além disso, o nome de usuário interno será criado com base no UUID, se não especificado acima. Você pode substituir a configuração e passar um atributo de sua escolha. Você deve certificar-se de que o atributo de sua escolha pode ser lido tanto por usuários quanto por grupos, e que seja único. Deixe-o em branco para o comportamento padrão. As alterações terão efeito apenas para usuários e grupos LDAP recém mapeados (adicionados).",
diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json
index b0b3e2a70cc..9ea42ef697f 100644
--- a/apps/user_ldap/l10n/pt_BR.json
+++ b/apps/user_ldap/l10n/pt_BR.json
@@ -214,7 +214,7 @@
"Role Field" : "Campo de Função",
"User profile Role will be set from the specified attribute" : "A Função no perfil do usuário será definida a partir do atributo especificado",
"Headline Field" : "Campo do Título",
- "User profile Headline will be set from the specified attribute" : "O título do perfil do usuário será definido a partir do atributo especificado",
+ "User profile Headline will be set from the specified attribute" : "O Título do perfil do usuário será definido a partir do atributo especificado",
"Biography Field" : "Campo de Biografia",
"User profile Biography will be set from the specified attribute" : "A Biografia no perfil do usuário será definida a partir do atributo especificado",
"Birthdate Field" : "Campo de Data de Nascimento",
@@ -222,7 +222,7 @@
"Pronouns Field" : "Campo de Pronomes",
"User profile Pronouns will be set from the specified attribute" : "Os Pronomes no perfil do usuário serão definidos a partir do atributo especificado",
"Internal Username" : "Nome de Usuário Interno",
- "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Por padrão, o nome de usuário interno será criado a partir do atributo UUID. Ele garante que o nome de usuário seja exclusivo e os caracteres não precisem ser convertidos. O nome de usuário interno tem a restrição de que apenas esses caracteres são permitidos: [a-zA-Z0-9_.@-]. Outros caracteres são substituídos por sua correspondência ASCII ou simplesmente omitidos. Em colisões, um número será adicionado/aumentado. O nome de usuário interno é usado para identificar um usuário internamente. Também é o nome padrão para a pasta inicial do usuário. Também faz parte de URLs remotos, por exemplo, para todos os serviços DAV. Com essa configuração, o comportamento padrão pode ser substituído. As alterações terão efeito apenas em usuários LDAP recém-mapeados (adicionados). Deixe-o vazio para o comportamento padrão.",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Por padrão, o nome de usuário interno será criado a partir do atributo UUID. Isso garante que o nome de usuário seja exclusivo e os caracteres não precisem ser convertidos. O nome de usuário interno tem a restrição de que apenas esses caracteres são permitidos: [a-zA-Z0-9_.@-]. Outros caracteres são substituídos por sua correspondência ASCII ou simplesmente omitidos. Em colisões, um número será adicionado/aumentado. O nome de usuário interno é usado para identificar um usuário internamente. Também é o nome padrão para a pasta inicial do usuário. Também faz parte de URLs remotos, por exemplo, para todos os serviços DAV. Com essa configuração, o comportamento padrão pode ser substituído. As alterações terão efeito apenas em usuários LDAP recém-mapeados (adicionados). Deixe-a vazia para o comportamento padrão.",
"Internal Username Attribute:" : "Atributo Interno de Nome de Usuário:",
"Override UUID detection" : "Substituir detecção UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por padrão, o atributo UUID é detectado automaticamente. O atributo UUID é usado para identificar corretamente os usuários e grupos LDAP. Além disso, o nome de usuário interno será criado com base no UUID, se não especificado acima. Você pode substituir a configuração e passar um atributo de sua escolha. Você deve certificar-se de que o atributo de sua escolha pode ser lido tanto por usuários quanto por grupos, e que seja único. Deixe-o em branco para o comportamento padrão. As alterações terão efeito apenas para usuários e grupos LDAP recém mapeados (adicionados).",
diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js
index 14df648d625..52a58012d90 100644
--- a/apps/user_ldap/l10n/tr.js
+++ b/apps/user_ldap/l10n/tr.js
@@ -61,6 +61,7 @@ OC.L10N.register(
"No LDAP base DN was given" : "LDAP base DN değeri belirtilmemiş",
"User base DN is not a subnode of global base DN" : "Kullanıcı base DN değeri genel base DN düğümünün bir alt düğümü değil ",
"Group base DN is not a subnode of global base DN" : "Grup base DN değeri genel base DN düğümünün bir alt düğümü değil ",
+ "Login filter does not contain %s placeholder." : "Oturum açma süzgecinde %s yer belirticisi bulunmuyor",
"Please login with the new password" : "Lütfen yeni parolanız ile oturum açın",
"LDAP User backend" : "LDAP kullanıcı arka yüzü",
"Your password will expire tomorrow." : "Parolanızın geçerlilik süresi yarın dolacak.",
diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json
index 3f7546e1d13..a9e01755a8e 100644
--- a/apps/user_ldap/l10n/tr.json
+++ b/apps/user_ldap/l10n/tr.json
@@ -59,6 +59,7 @@
"No LDAP base DN was given" : "LDAP base DN değeri belirtilmemiş",
"User base DN is not a subnode of global base DN" : "Kullanıcı base DN değeri genel base DN düğümünün bir alt düğümü değil ",
"Group base DN is not a subnode of global base DN" : "Grup base DN değeri genel base DN düğümünün bir alt düğümü değil ",
+ "Login filter does not contain %s placeholder." : "Oturum açma süzgecinde %s yer belirticisi bulunmuyor",
"Please login with the new password" : "Lütfen yeni parolanız ile oturum açın",
"LDAP User backend" : "LDAP kullanıcı arka yüzü",
"Your password will expire tomorrow." : "Parolanızın geçerlilik süresi yarın dolacak.",
diff --git a/build/integration/composer.lock b/build/integration/composer.lock
index 228c98ca25e..6ec2f3da3bd 100644
--- a/build/integration/composer.lock
+++ b/build/integration/composer.lock
@@ -9,16 +9,16 @@
"packages-dev": [
{
"name": "behat/behat",
- "version": "v3.21.0",
+ "version": "v3.21.1",
"source": {
"type": "git",
"url": "https://github.com/Behat/Behat.git",
- "reference": "4b6a6cd83202619d22bea6f27a2e8b91d9a3ba8c"
+ "reference": "315970f1f0c7c65e50aac87494575cfb9c6aa9e3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Behat/Behat/zipball/4b6a6cd83202619d22bea6f27a2e8b91d9a3ba8c",
- "reference": "4b6a6cd83202619d22bea6f27a2e8b91d9a3ba8c",
+ "url": "https://api.github.com/repos/Behat/Behat/zipball/315970f1f0c7c65e50aac87494575cfb9c6aa9e3",
+ "reference": "315970f1f0c7c65e50aac87494575cfb9c6aa9e3",
"shasum": ""
},
"require": {
@@ -96,9 +96,9 @@
],
"support": {
"issues": "https://github.com/Behat/Behat/issues",
- "source": "https://github.com/Behat/Behat/tree/v3.21.0"
+ "source": "https://github.com/Behat/Behat/tree/v3.21.1"
},
- "time": "2025-04-21T07:26:35+00:00"
+ "time": "2025-04-22T17:38:51+00:00"
},
{
"name": "behat/gherkin",
diff --git a/core/Command/Config/App/Base.php b/core/Command/Config/App/Base.php
index 7d3e9a83193..07341c4faf9 100644
--- a/core/Command/Config/App/Base.php
+++ b/core/Command/Config/App/Base.php
@@ -1,15 +1,21 @@
<?php
+
+declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OC\Core\Command\Config\App;
-use OCP\IConfig;
+use OCP\IAppConfig;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
abstract class Base extends \OC\Core\Command\Base {
- protected IConfig $config;
+ public function __construct(
+ protected IAppConfig $appConfig,
+ ) {
+ parent::__construct();
+ }
/**
* @param string $argumentName
@@ -18,12 +24,12 @@ abstract class Base extends \OC\Core\Command\Base {
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'app') {
- return \OC_App::getAllApps();
+ return $this->appConfig->getApps();
}
if ($argumentName === 'name') {
$appName = $context->getWordAtIndex($context->getWordIndex() - 1);
- return $this->config->getAppKeys($appName);
+ return $this->appConfig->getKeys($appName);
}
return [];
}
diff --git a/core/Command/Config/App/DeleteConfig.php b/core/Command/Config/App/DeleteConfig.php
index 2e34197e541..5a08ecbdc42 100644
--- a/core/Command/Config/App/DeleteConfig.php
+++ b/core/Command/Config/App/DeleteConfig.php
@@ -1,5 +1,6 @@
<?php
+declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -7,19 +8,12 @@
*/
namespace OC\Core\Command\Config\App;
-use OCP\IConfig;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class DeleteConfig extends Base {
- public function __construct(
- protected IConfig $config,
- ) {
- parent::__construct();
- }
-
protected function configure() {
parent::configure();
@@ -49,12 +43,12 @@ class DeleteConfig extends Base {
$appName = $input->getArgument('app');
$configName = $input->getArgument('name');
- if ($input->hasParameterOption('--error-if-not-exists') && !in_array($configName, $this->config->getAppKeys($appName))) {
+ if ($input->hasParameterOption('--error-if-not-exists') && !in_array($configName, $this->appConfig->getKeys($appName), true)) {
$output->writeln('<error>Config ' . $configName . ' of app ' . $appName . ' could not be deleted because it did not exist</error>');
return 1;
}
- $this->config->deleteAppValue($appName, $configName);
+ $this->appConfig->deleteKey($appName, $configName);
$output->writeln('<info>Config value ' . $configName . ' of app ' . $appName . ' deleted</info>');
return 0;
}
diff --git a/core/Command/Config/App/GetConfig.php b/core/Command/Config/App/GetConfig.php
index f64efd3feaa..b68476a2e91 100644
--- a/core/Command/Config/App/GetConfig.php
+++ b/core/Command/Config/App/GetConfig.php
@@ -9,19 +9,12 @@ declare(strict_types=1);
namespace OC\Core\Command\Config\App;
use OCP\Exceptions\AppConfigUnknownKeyException;
-use OCP\IAppConfig;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class GetConfig extends Base {
- public function __construct(
- protected IAppConfig $appConfig,
- ) {
- parent::__construct();
- }
-
protected function configure() {
parent::configure();
diff --git a/core/Command/Config/App/SetConfig.php b/core/Command/Config/App/SetConfig.php
index e983d32d97e..345067cfd45 100644
--- a/core/Command/Config/App/SetConfig.php
+++ b/core/Command/Config/App/SetConfig.php
@@ -20,12 +20,6 @@ use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\Question;
class SetConfig extends Base {
- public function __construct(
- protected IAppConfig $appConfig,
- ) {
- parent::__construct();
- }
-
protected function configure() {
parent::configure();
diff --git a/core/l10n/cs.js b/core/l10n/cs.js
index 6c7c53fc3cc..7cdf7eaf76c 100644
--- a/core/l10n/cs.js
+++ b/core/l10n/cs.js
@@ -27,6 +27,7 @@ OC.L10N.register(
"Could not complete login" : "Přihlášení se nedaří dokončit",
"State token missing" : "Chybí stavový token",
"Your login token is invalid or has expired" : "Váš přihlašovací token není platný nebo jeho platnost skončila",
+ "Please use original client" : "Prosím použijte původního klienta",
"This community release of Nextcloud is unsupported and push notifications are limited." : "Toto komunitní vydání Nextcloud není podporováno a push oznámení jsou proto omezená.",
"Login" : "Přihlásit",
"Unsupported email length (>255)" : "Nepodporovaná délka e-mailu (>255)",
diff --git a/core/l10n/cs.json b/core/l10n/cs.json
index 4f8792e3539..69845966f3f 100644
--- a/core/l10n/cs.json
+++ b/core/l10n/cs.json
@@ -25,6 +25,7 @@
"Could not complete login" : "Přihlášení se nedaří dokončit",
"State token missing" : "Chybí stavový token",
"Your login token is invalid or has expired" : "Váš přihlašovací token není platný nebo jeho platnost skončila",
+ "Please use original client" : "Prosím použijte původního klienta",
"This community release of Nextcloud is unsupported and push notifications are limited." : "Toto komunitní vydání Nextcloud není podporováno a push oznámení jsou proto omezená.",
"Login" : "Přihlásit",
"Unsupported email length (>255)" : "Nepodporovaná délka e-mailu (>255)",
diff --git a/core/l10n/de.js b/core/l10n/de.js
index c79885fe5b6..dd5d042df14 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -27,6 +27,7 @@ OC.L10N.register(
"Could not complete login" : "Anmeldung konnte nicht abgeschlossen werden",
"State token missing" : "Zustandstoken fehlt",
"Your login token is invalid or has expired" : "Dein Anmelde-Token ist ungültig oder abgelaufen",
+ "Please use original client" : "Bitte den Original-Client verwenden",
"This community release of Nextcloud is unsupported and push notifications are limited." : "Diese Community-Version von Nextcloud wird nicht unterstützt und (Push-)Benachrichtigungen sind nur begrenzt verfügbar.",
"Login" : "Anmelden",
"Unsupported email length (>255)" : "Nicht unterstützte E-Mail-Adresslänge (>255)",
diff --git a/core/l10n/de.json b/core/l10n/de.json
index cdc8483b409..9e676c71499 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -25,6 +25,7 @@
"Could not complete login" : "Anmeldung konnte nicht abgeschlossen werden",
"State token missing" : "Zustandstoken fehlt",
"Your login token is invalid or has expired" : "Dein Anmelde-Token ist ungültig oder abgelaufen",
+ "Please use original client" : "Bitte den Original-Client verwenden",
"This community release of Nextcloud is unsupported and push notifications are limited." : "Diese Community-Version von Nextcloud wird nicht unterstützt und (Push-)Benachrichtigungen sind nur begrenzt verfügbar.",
"Login" : "Anmelden",
"Unsupported email length (>255)" : "Nicht unterstützte E-Mail-Adresslänge (>255)",
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index f732d3d34d5..fed024d733b 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -27,6 +27,7 @@ OC.L10N.register(
"Could not complete login" : "Anmeldung konnte nicht abgeschlossen werden",
"State token missing" : "Zustandstoken fehlt",
"Your login token is invalid or has expired" : "Ihr Anmelde-Token ist ungültig oder abgelaufen",
+ "Please use original client" : "Bitte den Original-Client verwenden",
"This community release of Nextcloud is unsupported and push notifications are limited." : "Diese Community-Version von Nextcloud wird nicht unterstützt und sofortige Benachrichtigungen sind nur begrenzt verfügbar.",
"Login" : "Anmelden",
"Unsupported email length (>255)" : "Nicht unterstützte E-Mail-Adresslänge (>255)",
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index 1953fc7f5a2..e984102a6b3 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -25,6 +25,7 @@
"Could not complete login" : "Anmeldung konnte nicht abgeschlossen werden",
"State token missing" : "Zustandstoken fehlt",
"Your login token is invalid or has expired" : "Ihr Anmelde-Token ist ungültig oder abgelaufen",
+ "Please use original client" : "Bitte den Original-Client verwenden",
"This community release of Nextcloud is unsupported and push notifications are limited." : "Diese Community-Version von Nextcloud wird nicht unterstützt und sofortige Benachrichtigungen sind nur begrenzt verfügbar.",
"Login" : "Anmelden",
"Unsupported email length (>255)" : "Nicht unterstützte E-Mail-Adresslänge (>255)",
diff --git a/core/l10n/fa.js b/core/l10n/fa.js
index 28b35178cdc..2346c06b665 100644
--- a/core/l10n/fa.js
+++ b/core/l10n/fa.js
@@ -104,6 +104,7 @@ OC.L10N.register(
"Pick start date" : "انتخاب تاریخ شروع",
"Pick end date" : "انتخاب تاریخ پایان",
"Search in date range" : "جستجو در بازه تاریخی",
+ "Clear search" : "پاک کردن جستجو",
"Searching …" : "جستجوکردن …",
"Start typing to search" : "Start typing to search",
"Today" : "امروز",
diff --git a/core/l10n/fa.json b/core/l10n/fa.json
index 4629809d7e7..22ff186321c 100644
--- a/core/l10n/fa.json
+++ b/core/l10n/fa.json
@@ -102,6 +102,7 @@
"Pick start date" : "انتخاب تاریخ شروع",
"Pick end date" : "انتخاب تاریخ پایان",
"Search in date range" : "جستجو در بازه تاریخی",
+ "Clear search" : "پاک کردن جستجو",
"Searching …" : "جستجوکردن …",
"Start typing to search" : "Start typing to search",
"Today" : "امروز",
diff --git a/core/l10n/it.js b/core/l10n/it.js
index 0af469b5aba..88d26db5786 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -27,6 +27,7 @@ OC.L10N.register(
"Could not complete login" : "Impossibile completare l'accesso",
"State token missing" : "Token di stato mancante",
"Your login token is invalid or has expired" : "Il tuo token di accesso non è valido o è scaduto",
+ "Please use original client" : "Si prega di utilizzare il client originale",
"This community release of Nextcloud is unsupported and push notifications are limited." : "Questa versione della comunità di Nextcloud non è supportata e le notifiche push sono limitate.",
"Login" : "Accedi",
"Unsupported email length (>255)" : "Lunghezza email non supportata (>255)",
@@ -146,6 +147,8 @@ OC.L10N.register(
"Account name" : "Nome account",
"Server side authentication failed!" : "Autenticazione lato server non riuscita!",
"Please contact your administrator." : "Contatta il tuo amministratore di sistema.",
+ "Session error" : "Errore di sessione",
+ "It appears your session token has expired, please refresh the page and try again." : "Sembra che il token di sessione sia scaduto. Aggiorna la pagina e riprova.",
"An internal error occurred." : "Si è verificato un errore interno.",
"Please try again or contact your administrator." : "Prova ancora o contatta il tuo amministratore.",
"Password" : "Password",
@@ -205,9 +208,25 @@ OC.L10N.register(
"Login form is disabled." : "Il modulo di accesso è disabilitato.",
"The Nextcloud login form is disabled. Use another login option if available or contact your administration." : "Il modulo di accesso a Nextcloud è disabilitato. Usa un'altra opzione di accesso, se disponibile, o contatta l'amministratore.",
"More actions" : "Altre azioni",
+ "Password is too weak" : "La password è troppo debole",
+ "Password is weak" : "La password è debole",
+ "Password is average" : "La password è mediocre",
+ "Password is strong" : "La password è forte",
+ "Password is very strong" : "La password è molto forte",
+ "Password is extremely strong" : "La password è estremamente forte",
+ "Unknown password strength" : "Sicurezza della password sconosciuta",
+ "Your data directory and files are probably accessible from the internet because the <code>.htaccess</code> file does not work." : "Probabilmente la directory dei dati e i file sono accessibili da Internet perché il file <code>.htaccess</code> non funziona.",
+ "For information how to properly configure your server, please {linkStart}see the documentation{linkEnd}" : "Per informazioni su come configurare correttamente il tuo server, {linkStart}consultare la documentazione{linkEnd}",
+ "Autoconfig file detected" : "File di configurazione automatica rilevato",
+ "The setup form below is pre-filled with the values from the config file." : "Il modulo di configurazione riportato di seguito è precompilato con i valori del file di configurazione.",
"Security warning" : "Avviso di sicurezza",
+ "Create administration account" : "Crea un account amministrazione",
+ "Administration account name" : "Nome dell'account di amministrazione",
+ "Administration account password" : "Password dell'account di amministrazione",
"Storage & database" : "Archiviazione e database",
"Data folder" : "Cartella dati",
+ "Database configuration" : "Configurazione del database",
+ "Only {firstAndOnlyDatabase} is available." : "Solo {firstAndOnlyDatabase} è disponibile.",
"Install and activate additional PHP modules to choose other database types." : "Installa e attiva i moduli PHP aggiuntivi per scegliere gli altri tipi di database.",
"For more details check out the documentation." : "Per ulteriori dettagli, leggi la documentazione.",
"Performance warning" : "Avviso di prestazioni",
@@ -220,6 +239,7 @@ OC.L10N.register(
"Database tablespace" : "Spazio delle tabelle del database",
"Please specify the port number along with the host name (e.g., localhost:5432)." : "Specifica il numero della porta insieme al nome host (ad es. localhost:5432).",
"Database host" : "Host del database",
+ "localhost" : "localhost",
"Installing …" : "Installazione …",
"Install" : "Installa",
"Need help?" : "Ti serve aiuto?",
diff --git a/core/l10n/it.json b/core/l10n/it.json
index d8f78eff15e..272938b78b0 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -25,6 +25,7 @@
"Could not complete login" : "Impossibile completare l'accesso",
"State token missing" : "Token di stato mancante",
"Your login token is invalid or has expired" : "Il tuo token di accesso non è valido o è scaduto",
+ "Please use original client" : "Si prega di utilizzare il client originale",
"This community release of Nextcloud is unsupported and push notifications are limited." : "Questa versione della comunità di Nextcloud non è supportata e le notifiche push sono limitate.",
"Login" : "Accedi",
"Unsupported email length (>255)" : "Lunghezza email non supportata (>255)",
@@ -144,6 +145,8 @@
"Account name" : "Nome account",
"Server side authentication failed!" : "Autenticazione lato server non riuscita!",
"Please contact your administrator." : "Contatta il tuo amministratore di sistema.",
+ "Session error" : "Errore di sessione",
+ "It appears your session token has expired, please refresh the page and try again." : "Sembra che il token di sessione sia scaduto. Aggiorna la pagina e riprova.",
"An internal error occurred." : "Si è verificato un errore interno.",
"Please try again or contact your administrator." : "Prova ancora o contatta il tuo amministratore.",
"Password" : "Password",
@@ -203,9 +206,25 @@
"Login form is disabled." : "Il modulo di accesso è disabilitato.",
"The Nextcloud login form is disabled. Use another login option if available or contact your administration." : "Il modulo di accesso a Nextcloud è disabilitato. Usa un'altra opzione di accesso, se disponibile, o contatta l'amministratore.",
"More actions" : "Altre azioni",
+ "Password is too weak" : "La password è troppo debole",
+ "Password is weak" : "La password è debole",
+ "Password is average" : "La password è mediocre",
+ "Password is strong" : "La password è forte",
+ "Password is very strong" : "La password è molto forte",
+ "Password is extremely strong" : "La password è estremamente forte",
+ "Unknown password strength" : "Sicurezza della password sconosciuta",
+ "Your data directory and files are probably accessible from the internet because the <code>.htaccess</code> file does not work." : "Probabilmente la directory dei dati e i file sono accessibili da Internet perché il file <code>.htaccess</code> non funziona.",
+ "For information how to properly configure your server, please {linkStart}see the documentation{linkEnd}" : "Per informazioni su come configurare correttamente il tuo server, {linkStart}consultare la documentazione{linkEnd}",
+ "Autoconfig file detected" : "File di configurazione automatica rilevato",
+ "The setup form below is pre-filled with the values from the config file." : "Il modulo di configurazione riportato di seguito è precompilato con i valori del file di configurazione.",
"Security warning" : "Avviso di sicurezza",
+ "Create administration account" : "Crea un account amministrazione",
+ "Administration account name" : "Nome dell'account di amministrazione",
+ "Administration account password" : "Password dell'account di amministrazione",
"Storage & database" : "Archiviazione e database",
"Data folder" : "Cartella dati",
+ "Database configuration" : "Configurazione del database",
+ "Only {firstAndOnlyDatabase} is available." : "Solo {firstAndOnlyDatabase} è disponibile.",
"Install and activate additional PHP modules to choose other database types." : "Installa e attiva i moduli PHP aggiuntivi per scegliere gli altri tipi di database.",
"For more details check out the documentation." : "Per ulteriori dettagli, leggi la documentazione.",
"Performance warning" : "Avviso di prestazioni",
@@ -218,6 +237,7 @@
"Database tablespace" : "Spazio delle tabelle del database",
"Please specify the port number along with the host name (e.g., localhost:5432)." : "Specifica il numero della porta insieme al nome host (ad es. localhost:5432).",
"Database host" : "Host del database",
+ "localhost" : "localhost",
"Installing …" : "Installazione …",
"Install" : "Installa",
"Need help?" : "Ti serve aiuto?",
diff --git a/core/l10n/ja.js b/core/l10n/ja.js
index 6a9ab2d5a6b..f55c04ccbab 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -27,6 +27,7 @@ OC.L10N.register(
"Could not complete login" : "ログインが完了できませんでした",
"State token missing" : "状態トークンがありません",
"Your login token is invalid or has expired" : "あなたのログイントークンは無効か期限が切れています。",
+ "Please use original client" : "オリジナルのクライアントをご利用ください",
"This community release of Nextcloud is unsupported and push notifications are limited." : "コミュニティリリースのNextcloudにサポートはなく、プッシュ通知には制限があります",
"Login" : "ログイン",
"Unsupported email length (>255)" : "メールアドレスが長すぎます (>255)",
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index b799ee2e7c6..640805c205d 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -25,6 +25,7 @@
"Could not complete login" : "ログインが完了できませんでした",
"State token missing" : "状態トークンがありません",
"Your login token is invalid or has expired" : "あなたのログイントークンは無効か期限が切れています。",
+ "Please use original client" : "オリジナルのクライアントをご利用ください",
"This community release of Nextcloud is unsupported and push notifications are limited." : "コミュニティリリースのNextcloudにサポートはなく、プッシュ通知には制限があります",
"Login" : "ログイン",
"Unsupported email length (>255)" : "メールアドレスが長すぎます (>255)",
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index c7ab8a9f87a..0408ab2c18a 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -27,6 +27,7 @@ OC.L10N.register(
"Could not complete login" : "Não foi possível concluir o login",
"State token missing" : "Falta o token de estado",
"Your login token is invalid or has expired" : "Seu token de login é inválido ou expirou",
+ "Please use original client" : "Por favor, use o cliente original",
"This community release of Nextcloud is unsupported and push notifications are limited." : "Esta versão da comunidade do Nextcloud não é compatível e as notificações por push são limitadas.",
"Login" : "Login",
"Unsupported email length (>255)" : "Comprimento de e-mail não suportado (>255)",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 4652690c5a8..ed8b6c93dc7 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -25,6 +25,7 @@
"Could not complete login" : "Não foi possível concluir o login",
"State token missing" : "Falta o token de estado",
"Your login token is invalid or has expired" : "Seu token de login é inválido ou expirou",
+ "Please use original client" : "Por favor, use o cliente original",
"This community release of Nextcloud is unsupported and push notifications are limited." : "Esta versão da comunidade do Nextcloud não é compatível e as notificações por push são limitadas.",
"Login" : "Login",
"Unsupported email length (>255)" : "Comprimento de e-mail não suportado (>255)",
diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js
index 4d15ae7500f..d8d36568f29 100644
--- a/core/l10n/zh_CN.js
+++ b/core/l10n/zh_CN.js
@@ -27,6 +27,7 @@ OC.L10N.register(
"Could not complete login" : "无法完成登录",
"State token missing" : "状态令牌丢失",
"Your login token is invalid or has expired" : "你的登录 token 无效或已过期",
+ "Please use original client" : "请使用原始客户端",
"This community release of Nextcloud is unsupported and push notifications are limited." : "这个 Nextcloud 的社区版本不受支持,推送通知功能受限。",
"Login" : "登录",
"Unsupported email length (>255)" : "不支持的电子邮箱长度(>255)",
diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json
index 859c6b65552..ff5520e1378 100644
--- a/core/l10n/zh_CN.json
+++ b/core/l10n/zh_CN.json
@@ -25,6 +25,7 @@
"Could not complete login" : "无法完成登录",
"State token missing" : "状态令牌丢失",
"Your login token is invalid or has expired" : "你的登录 token 无效或已过期",
+ "Please use original client" : "请使用原始客户端",
"This community release of Nextcloud is unsupported and push notifications are limited." : "这个 Nextcloud 的社区版本不受支持,推送通知功能受限。",
"Login" : "登录",
"Unsupported email length (>255)" : "不支持的电子邮箱长度(>255)",
diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js
index 33e81e79a65..7ec50d04d19 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -27,6 +27,7 @@ OC.L10N.register(
"Could not complete login" : "嘗試登入時發生錯誤",
"State token missing" : "狀態代符遺失",
"Your login token is invalid or has expired" : "您的登入代符無效或已過期",
+ "Please use original client" : "請使用原始客戶端",
"This community release of Nextcloud is unsupported and push notifications are limited." : "這個 Nextcloud 的社群版本沒有得到支援,而且推播通知會有所限制。",
"Login" : "登入",
"Unsupported email length (>255)" : "不支援的電子郵件長度 (>255)",
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index 83cce2dc422..c6839ca5b2f 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -25,6 +25,7 @@
"Could not complete login" : "嘗試登入時發生錯誤",
"State token missing" : "狀態代符遺失",
"Your login token is invalid or has expired" : "您的登入代符無效或已過期",
+ "Please use original client" : "請使用原始客戶端",
"This community release of Nextcloud is unsupported and push notifications are limited." : "這個 Nextcloud 的社群版本沒有得到支援,而且推播通知會有所限制。",
"Login" : "登入",
"Unsupported email length (>255)" : "不支援的電子郵件長度 (>255)",
diff --git a/dist/settings-vue-settings-apps-users-management.js b/dist/settings-vue-settings-apps-users-management.js
index b4c5d79096e..c2cbedc594a 100644
--- a/dist/settings-vue-settings-apps-users-management.js
+++ b/dist/settings-vue-settings-apps-users-management.js
@@ -1,2 +1,2 @@
-(()=>{var e,r,s,i={6028:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var s=r(65043),i=r(56760);r(51257);const n=function(e){return e.replace(/\/$/,"")},o={requireAdmin:()=>(0,i.C5)(),get:(e,t)=>s.Ay.get(n(e),t),post:(e,t)=>s.Ay.post(n(e),t),patch:(e,t)=>s.Ay.patch(n(e),t),put:(e,t)=>s.Ay.put(n(e),t),delete:(e,t)=>s.Ay.delete(n(e),{params:t})}},12836:(e,t,r)=>{"use strict";var s=r(85471),i=r(95353),n=r(80284),o=r(58723),a=r(53334),u=r(22378);const l=(0,s.pM)({__name:"SettingsApp",setup:e=>({__sfc:!0,NcContent:u.A})}),c=(0,r(14486).A)(l,(function(){var e=this,t=e._self._c;return t(e._self._setupProxy.NcContent,{attrs:{"app-name":"settings"}},[t("router-view",{attrs:{name:"navigation"}}),e._v(" "),t("router-view"),e._v(" "),t("router-view",{attrs:{name:"sidebar"}})],1)}),[],!1,null,null,null).exports;var d=r(40173),p=r(63814);const h=[{name:"users",path:"/:index(index.php/)?settings/users",components:{default:()=>Promise.all([r.e(4208),r.e(7265),r.e(3239)]).then(r.bind(r,31795)),navigation:()=>Promise.all([r.e(4208),r.e(7265),r.e(3239)]).then(r.bind(r,21437))},props:!0,children:[{path:":selectedGroup",name:"group"}]},{path:"/:index(index.php/)?settings/apps",name:"apps",redirect:{name:"apps-category",params:{category:(0,r(32981).C)("settings","appstoreEnabled",!0)?"discover":"installed"}},components:{default:()=>Promise.all([r.e(4208),r.e(7265),r.e(4529)]).then(r.bind(r,99986)),navigation:()=>Promise.all([r.e(4208),r.e(7265),r.e(4529)]).then(r.bind(r,78451)),sidebar:()=>Promise.all([r.e(4208),r.e(7265),r.e(4529)]).then(r.bind(r,84694))},children:[{path:":category",name:"apps-category",children:[{path:":id",name:"apps-details"}]}]}];s.Ay.use(d.Ay);const g=new d.Ay({mode:"history",base:(0,p.Jv)(""),linkActiveClass:"active",routes:h});var m=r(14744),f=r(21777),E=r(65899);r.nc=(0,f.aV)(),s.Ay.prototype.t=a.t,s.Ay.prototype.n=a.n,s.Ay.use(E.R2),s.Ay.use(n.Ay,{defaultHtml:!1}),s.Ay.use(i.Ay);const A=(0,m.P)();(0,o.O)(A,g);const b=(0,E.Ey)();new s.Ay({router:g,store:A,pinia:b,render:e=>e(c),el:"#content"})},14744:(e,r,s)=>{"use strict";s.d(r,{P:()=>D});var i=s(95353),n=s(59097),o=s(87485),a=s(35810),u=s(85168),l=s(63814),c=s(32981),d=s(65043),p=s(15916),h=s(53334);const g=Intl.Collator([(0,h.Z0)(),(0,h.lO)()],{numeric:!0,usage:"sort"});var m=s(6028),f=s(36620);const E=(0,c.C)("settings","usersSettings",{}),A=(0,n.c0)("settings").persist(!0).build(),b={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},I={users:[],groups:[...E.systemGroups??[]],orderBy:E.sortGroups??p.q.UserCount,minPasswordLength:0,usersOffset:0,usersLimit:25,disabledUsersOffset:0,disabledUsersLimit:25,userCount:E.userCount??0,showConfig:{showStoragePath:"true"===A.getItem("account_settings__showStoragePath"),showUserBackend:"true"===A.getItem("account_settings__showUserBackend"),showFirstLogin:"true"===A.getItem("account_settings__showFirstLogin"),showLastLogin:"true"===A.getItem("account_settings__showLastLogin"),showNewUserForm:"true"===A.getItem("account_settings__showNewUserForm"),showLanguages:"true"===A.getItem("account_settings__showLanguages")}},N={appendUsers(e,t){const r=e.users.map((e=>{let{id:t}=e;return t})),s=Object.values(t).filter((e=>{let{id:t}=e;return!r.includes(t)})),i=e.users.concat(s);e.usersOffset+=e.usersLimit,e.users=i},updateDisabledUsers(e,t){e.disabledUsersOffset+=e.disabledUsersLimit},setPasswordPolicyMinLength(e,t){e.minPasswordLength=""!==t?t:0},addGroup(e,t){try{if(void 0!==e.groups.find((e=>e.id===t.id)))return;const r=Object.assign({},b,t);e.groups.unshift(r)}catch(e){console.error("Can't create group",e)}},renameGroup(e,t){let{gid:r,displayName:s}=t;const i=e.groups.findIndex((e=>e.id===r));if(i>=0){const t=e.groups[i];t.name=s,e.groups.splice(i,1,t)}},removeGroup(e,t){const r=e.groups.findIndex((e=>e.id===t));r>=0&&e.groups.splice(r,1)},addUserGroup(e,t){let{userid:r,gid:s}=t;const i=e.groups.find((e=>e.id===s)),n=e.users.find((e=>e.id===r));i&&n.enabled&&e.userCount>0&&i.usercount++,n.groups.push(s)},removeUserGroup(e,t){let{userid:r,gid:s}=t;const i=e.groups.find((e=>e.id===s)),n=e.users.find((e=>e.id===r));i&&n.enabled&&e.userCount>0&&i.usercount--;const o=n.groups;o.splice(o.indexOf(s),1)},addUserSubAdmin(e,t){let{userid:r,gid:s}=t;e.users.find((e=>e.id===r)).subadmin.push(s)},removeUserSubAdmin(e,t){let{userid:r,gid:s}=t;const i=e.users.find((e=>e.id===r)).subadmin;i.splice(i.indexOf(s),1)},deleteUser(e,t){const r=e.users.findIndex((e=>e.id===t));this.commit("updateUserCounts",{user:e.users[r],actionType:"remove"}),e.users.splice(r,1)},addUserData(e,t){const r=t.data.ocs.data;e.users.unshift(r),this.commit("updateUserCounts",{user:r,actionType:"create"})},enableDisableUser(e,t){let{userid:r,enabled:s}=t;const i=e.users.find((e=>e.id===r));i.enabled=s,this.commit("updateUserCounts",{user:i,actionType:s?"enable":"disable"})},updateUserCounts(e,t){let{user:r,actionType:s}=t;if(0===e.userCount)return;const i=e.groups.find((e=>"__nc_internal_recent"===e.id)),n=e.groups.find((e=>"disabled"===e.id));switch(s){case"enable":case"disable":n.usercount+=r.enabled?-1:1,i.usercount+=r.enabled?1:-1,e.userCount+=r.enabled?1:-1,r.groups.forEach((t=>{const s=e.groups.find((e=>e.id===t));s&&(s.disabled+=r.enabled?-1:1)}));break;case"create":i.usercount++,e.userCount++,r.groups.forEach((t=>{const r=e.groups.find((e=>e.id===t));r&&r.usercount++}));break;case"remove":r.enabled?(i.usercount--,e.userCount--,r.groups.forEach((t=>{const r=e.groups.find((e=>e.id===t));r?r.usercount--:console.warn("User group "+t+" does not exist during user removal")}))):(n.usercount--,r.groups.forEach((t=>{const r=e.groups.find((e=>e.id===t));r&&r.disabled--})));break;default:f.A.error(`Unknown action type in updateUserCounts: '${s}'`)}},setUserData(e,t){let{userid:r,key:s,value:i}=t;if("quota"===s){const t=(0,a.lT)(i,!0);e.users.find((e=>e.id===r))[s][s]=null!==t?t:i}else e.users.find((e=>e.id===r))[s]=i},resetUsers(e){e.users=[],e.usersOffset=0,e.disabledUsersOffset=0},resetGroups(e){const t=e.groups.filter((e=>["admin","__nc_internal_recent","disabled"].includes(e.id)));e.groups=[...t]},setShowConfig(e,t){let{key:r,value:s}=t;A.setItem(`account_settings__${r}`,JSON.stringify(s)),e.showConfig[r]=s},setGroupSorting(e,r){const s=e.orderBy;e.orderBy=r,d.Ay.post((0,l.Jv)("/settings/users/preferences/group.sortBy"),{value:String(r)}).catch((r=>{e.orderBy=s,(0,u.Qg)(t("settings","Could not set group sorting")),f.A.error(r)}))}},v={getUsers:e=>e.users,getGroups:e=>e.groups,getSortedGroups(e){const t=[...e.groups];return e.orderBy===p.q.UserCount?t.sort(((e,t)=>{const r=e.usercount-e.disabled,s=t.usercount-t.disabled;return r<s?1:s<r?-1:g.compare(e.name,t.name)})):t.sort(((e,t)=>g.compare(e.name,t.name)))},getGroupSorting:e=>e.orderBy,getPasswordPolicyMinLength:e=>e.minPasswordLength,getUsersOffset:e=>e.usersOffset,getUsersLimit:e=>e.usersLimit,getDisabledUsersOffset:e=>e.disabledUsersOffset,getDisabledUsersLimit:e=>e.disabledUsersLimit,getUserCount:e=>e.userCount,getShowConfig:e=>e.showConfig},L=d.Ay.CancelToken;let y=null;const O={state:I,mutations:N,getters:v,actions:{searchUsers(e,t){let{offset:r,limit:s,search:i}=t;return i="string"==typeof i?i:"",m.A.get((0,l.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:i})).catch((t=>{d.Ay.isCancel(t)||e.commit("API_FAILURE",t)}))},getUser:(e,t)=>m.A.get((0,l.KT)(`cloud/users/${t}`)).catch((t=>{d.Ay.isCancel(t)||e.commit("API_FAILURE",t)})),getUsers(e,t){let{offset:r,limit:s,search:i,group:n}=t;return y&&y.cancel("Operation canceled by another search request."),y=L.source(),i="string"==typeof i?i:"",i=i.replace(/in:[^\s]+/g,"").trim(),n="string"==typeof n?n:"",""!==n?m.A.get((0,l.KT)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(n),offset:r,limit:s,search:i}),{cancelToken:y.token}).then((t=>{const r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((t=>{d.Ay.isCancel(t)||e.commit("API_FAILURE",t)})):m.A.get((0,l.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:i}),{cancelToken:y.token}).then((t=>{const r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((t=>{d.Ay.isCancel(t)||e.commit("API_FAILURE",t)}))},async getRecentUsers(e,t){let{offset:r,limit:s,search:i}=t;const n=(0,l.KT)("cloud/users/recent?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:i});try{const t=await m.A.get(n),r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r}catch(t){e.commit("API_FAILURE",t)}},async getDisabledUsers(e,t){let{offset:r,limit:s,search:i}=t;const n=(0,l.KT)("cloud/users/disabled?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:i});try{const t=await m.A.get(n),r=Object.keys(t.data.ocs.data.users).length;return r>0&&(e.commit("appendUsers",t.data.ocs.data.users),e.commit("updateDisabledUsers",t.data.ocs.data.users)),r}catch(t){e.commit("API_FAILURE",t)}},getGroups(e,t){let{offset:r,limit:s,search:i}=t;i="string"==typeof i?i:"";const n=-1===s?"":`&limit=${s}`;return m.A.get((0,l.KT)("cloud/groups?offset={offset}&search={search}",{offset:r,search:i})+n).then((t=>Object.keys(t.data.ocs.data.groups).length>0&&(t.data.ocs.data.groups.forEach((function(t){e.commit("addGroup",{id:t,name:t})})),!0))).catch((t=>e.commit("API_FAILURE",t)))},getUsersFromList(e,t){let{offset:r,limit:s,search:i}=t;return i="string"==typeof i?i:"",m.A.get((0,l.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:i})).then((t=>Object.keys(t.data.ocs.data.users).length>0&&(e.commit("appendUsers",t.data.ocs.data.users),!0))).catch((t=>e.commit("API_FAILURE",t)))},getUsersFromGroup(e,t){let{groupid:r,offset:s,limit:i}=t;return m.A.get((0,l.KT)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:s,limit:i})).then((t=>e.commit("getUsersFromList",t.data.ocs.data.users))).catch((t=>e.commit("API_FAILURE",t)))},getPasswordPolicyMinLength:e=>!(!(0,o.F)().password_policy||!(0,o.F)().password_policy.minLength)&&(e.commit("setPasswordPolicyMinLength",(0,o.F)().password_policy.minLength),(0,o.F)().password_policy.minLength),addGroup:(e,t)=>m.A.requireAdmin().then((r=>m.A.post((0,l.KT)("cloud/groups"),{groupid:t}).then((r=>(e.commit("addGroup",{id:t,name:t}),{gid:t,displayName:t}))).catch((e=>{throw e})))).catch((r=>{throw e.commit("API_FAILURE",{gid:t,error:r}),r})),renameGroup(e,t){let{groupid:r,displayName:s}=t;return m.A.requireAdmin().then((t=>m.A.put((0,l.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:s}).then((t=>(e.commit("renameGroup",{gid:r,displayName:s}),{groupid:r,displayName:s}))).catch((e=>{throw e})))).catch((t=>{throw e.commit("API_FAILURE",{groupid:r,error:t}),t}))},removeGroup:(e,t)=>m.A.requireAdmin().then((r=>m.A.delete((0,l.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(t)})).then((r=>e.commit("removeGroup",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{gid:t,error:r}))),addUserGroup(e,t){let{userid:r,gid:s}=t;return m.A.requireAdmin().then((t=>m.A.post((0,l.KT)("cloud/users/{userid}/groups",{userid:r}),{groupid:s}).then((t=>e.commit("addUserGroup",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},removeUserGroup(e,t){let{userid:r,gid:s}=t;return m.A.requireAdmin().then((t=>m.A.delete((0,l.KT)("cloud/users/{userid}/groups",{userid:r}),{groupid:s}).then((t=>e.commit("removeUserGroup",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>{throw e.commit("API_FAILURE",{userid:r,error:t}),t}))},addUserSubAdmin(e,t){let{userid:r,gid:s}=t;return m.A.requireAdmin().then((t=>m.A.post((0,l.KT)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:s}).then((t=>e.commit("addUserSubAdmin",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},removeUserSubAdmin(e,t){let{userid:r,gid:s}=t;return m.A.requireAdmin().then((t=>m.A.delete((0,l.KT)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:s}).then((t=>e.commit("removeUserSubAdmin",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},async wipeUserDevices(e,t){try{return await m.A.requireAdmin(),await m.A.post((0,l.KT)("cloud/users/{userid}/wipe",{userid:t}))}catch(r){return e.commit("API_FAILURE",{userid:t,error:r}),Promise.reject(new Error("Failed to wipe user devices"))}},deleteUser:(e,t)=>m.A.requireAdmin().then((r=>m.A.delete((0,l.KT)("cloud/users/{userid}",{userid:t})).then((r=>e.commit("deleteUser",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),addUser(e,t){let{commit:r,dispatch:s}=e,{userid:i,password:n,displayName:o,email:a,groups:u,subadmin:c,quota:d,language:p,manager:h}=t;return m.A.requireAdmin().then((e=>m.A.post((0,l.KT)("cloud/users"),{userid:i,password:n,displayName:o,email:a,groups:u,subadmin:c,quota:d,language:p,manager:h}).then((e=>s("addUserData",i||e.data.ocs.data.id))).catch((e=>{throw e})))).catch((e=>{throw r("API_FAILURE",{userid:i,error:e}),e}))},addUserData:(e,t)=>m.A.requireAdmin().then((r=>m.A.get((0,l.KT)("cloud/users/{userid}",{userid:t})).then((t=>e.commit("addUserData",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),enableDisableUser(e,t){let{userid:r,enabled:s=!0}=t;const i=s?"enable":"disable";return m.A.requireAdmin().then((t=>m.A.put((0,l.KT)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:i})).then((t=>e.commit("enableDisableUser",{userid:r,enabled:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},async setUserData(e,t){let{userid:r,key:s,value:i}=t;const n=["email","displayname","manager"];if(-1!==["email","language","quota","displayname","password","manager"].indexOf(s)&&"string"==typeof i&&(-1===n.indexOf(s)&&i.length>0||-1!==n.indexOf(s)))try{return await m.A.requireAdmin(),await m.A.put((0,l.KT)("cloud/users/{userid}",{userid:r}),{key:s,value:i}),e.commit("setUserData",{userid:r,key:s,value:i})}catch(t){e.commit("API_FAILURE",{userid:r,error:t})}return Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:(e,t)=>m.A.requireAdmin().then((e=>m.A.post((0,l.KT)("cloud/users/{userid}/welcome",{userid:t})).then((e=>!0)).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r})))}};var x=s(85471);const T={apps:[],bundles:(0,c.C)("settings","appstoreBundles",[]),categories:[],updateCount:(0,c.C)("settings","appstoreUpdateCount",0),loading:{},gettingCategoriesPromise:null,appApiEnabled:(0,c.C)("settings","appApiEnabled",!1)},P={APPS_API_FAILURE(e,r){(0,u.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{isHTML:!0}),console.error(e,r)},initCategories(e,t){let{categories:r,updateCount:s}=t;e.categories=r,e.updateCount=s},updateCategories(e,t){e.gettingCategoriesPromise=t},setUpdateCount(e,t){e.updateCount=t},addCategory(e,t){e.categories.push(t)},appendCategories(e,t){e.categories=t},setAllApps(e,t){e.apps=t},setError(e,t){let{appId:r,error:s}=t;Array.isArray(r)||(r=[r]),r.forEach((t=>{e.apps.find((e=>e.id===t)).error=s}))},clearError(e,t){let{appId:r,error:s}=t;e.apps.find((e=>e.id===r)).error=null},enableApp(e,t){let{appId:r,groups:s}=t;const i=e.apps.find((e=>e.id===r));i.active=!0,i.groups=s,"app_api"===i.id&&(e.appApiEnabled=!0)},setInstallState(e,t){let{appId:r,canInstall:s}=t;const i=e.apps.find((e=>e.id===r));i&&(i.canInstall=!0===s)},disableApp(e,t){const r=e.apps.find((e=>e.id===t));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0),"app_api"===r.id&&(e.appApiEnabled=!1)},uninstallApp(e,t){e.apps.find((e=>e.id===t)).active=!1,e.apps.find((e=>e.id===t)).groups=[],e.apps.find((e=>e.id===t)).needsDownload=!0,e.apps.find((e=>e.id===t)).installed=!1,e.apps.find((e=>e.id===t)).canUnInstall=!1,e.apps.find((e=>e.id===t)).canInstall=!0,"app_api"===t&&(e.appApiEnabled=!1)},updateApp(e,t){const r=e.apps.find((e=>e.id===t)),s=r.update;r.update=null,r.version=s,e.updateCount--},resetApps(e){e.apps=[]},reset(e){e.apps=[],e.categories=[],e.updateCount=0},startLoading(e,t){Array.isArray(t)?t.forEach((t=>{x.Ay.set(e.loading,t,!0)})):x.Ay.set(e.loading,t,!0)},stopLoading(e,t){Array.isArray(t)?t.forEach((t=>{x.Ay.set(e.loading,t,!1)})):x.Ay.set(e.loading,t,!1)}},R={enableApp(e,r){let s,{appId:i,groups:n}=r;return s=Array.isArray(i)?i:[i],m.A.requireAdmin().then((r=>(e.commit("startLoading",s),e.commit("startLoading","install"),m.A.post((0,l.Jv)("settings/apps/enable"),{appIds:s,groups:n}).then((r=>(e.commit("stopLoading",s),e.commit("stopLoading","install"),s.forEach((t=>{e.commit("enableApp",{appId:t,groups:n})})),m.A.get((0,l.Jv)("apps/files/")).then((()=>{r.data.update_required&&((0,u.cf)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:()=>window.location.reload(),close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((()=>{Array.isArray(i)||((0,u.Qg)(t("settings","Error: This app cannot be enabled because it makes the server unstable")),e.commit("setError",{appId:s,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")}),e.dispatch("disableApp",{appId:i}))}))))).catch((t=>{e.commit("stopLoading",s),e.commit("stopLoading","install"),e.commit("setError",{appId:s,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:i,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:i,error:t})))},forceEnableApp(e,t){let r,{appId:s,groups:i}=t;return r=Array.isArray(s)?s:[s],m.A.requireAdmin().then((()=>(e.commit("startLoading",r),e.commit("startLoading","install"),m.A.post((0,l.Jv)("settings/apps/force"),{appId:s}).then((t=>{e.commit("setInstallState",{appId:s,canInstall:!0})})).catch((t=>{e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("setError",{appId:r,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:s,error:t})})).finally((()=>{e.commit("stopLoading",r),e.commit("stopLoading","install")}))))).catch((t=>e.commit("API_FAILURE",{appId:s,error:t})))},disableApp(e,t){let r,{appId:s}=t;return r=Array.isArray(s)?s:[s],m.A.requireAdmin().then((t=>(e.commit("startLoading",r),m.A.post((0,l.Jv)("settings/apps/disable"),{appIds:r}).then((t=>(e.commit("stopLoading",r),r.forEach((t=>{e.commit("disableApp",t)})),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:s,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:s,error:t})))},uninstallApp(e,t){let{appId:r}=t;return m.A.requireAdmin().then((t=>(e.commit("startLoading",r),m.A.get((0,l.Jv)(`settings/apps/uninstall/${r}`)).then((t=>(e.commit("stopLoading",r),e.commit("uninstallApp",r),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:r,error:t})))},updateApp(e,t){let{appId:r}=t;return m.A.requireAdmin().then((t=>(e.commit("startLoading",r),e.commit("startLoading","install"),m.A.get((0,l.Jv)(`settings/apps/update/${r}`)).then((t=>(e.commit("stopLoading","install"),e.commit("stopLoading",r),e.commit("updateApp",r),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:r,error:t})))},getAllApps:e=>(e.commit("startLoading","list"),m.A.get((0,l.Jv)("settings/apps/list")).then((t=>(e.commit("setAllApps",t.data.apps),e.commit("stopLoading","list"),!0))).catch((t=>e.commit("API_FAILURE",t)))),async getCategories(e){let{shouldRefetchCategories:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t||!e.state.gettingCategoriesPromise){e.commit("startLoading","categories");try{const t=m.A.get((0,l.Jv)("settings/apps/categories"));e.commit("updateCategories",t);const r=await t;return r.data.length>0?(e.commit("appendCategories",r.data),e.commit("stopLoading","categories"),!0):(e.commit("stopLoading","categories"),!1)}catch(t){e.commit("API_FAILURE",t)}}return e.state.gettingCategoriesPromise}},w={state:T,mutations:P,getters:{isAppApiEnabled:e=>e.appApiEnabled,loading:e=>function(t){return e.loading[t]},getCategories:e=>e.categories,getAllApps:e=>e.apps,getAppBundles:e=>e.bundles,getUpdateCount:e=>e.updateCount,getCategoryById:e=>t=>e.categories.find((e=>e.id===t))},actions:R},C={serverData:(0,c.C)("settings","usersSettings",{})},U={setServerData(e,t){e.serverData=t}},_={state:C,mutations:U,getters:{getServerData:e=>e.serverData},actions:{}},$={state:{},mutations:{},getters:{},actions:{setAppConfig(e,t){let{app:r,key:s,value:i}=t;return m.A.requireAdmin().then((e=>m.A.post((0,l.KT)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:s}),{value:i}).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{app:r,key:s,value:i,error:t})))}}},S={API_FAILURE(e,r){try{const e=r.error.response.data.ocs.meta.message;(0,u.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+e,{isHTML:!0})}catch(e){(0,u.Qg)(t("settings","An error occurred during the request. Unable to proceed."))}console.error(e,r)}};let F=null;const D=()=>(null===F&&(F=new i.il({modules:{users:O,apps:w,settings:_,oc:$},strict:!1,mutations:S})),F)},15916:(e,t,r)=>{"use strict";var s;r.d(t,{q:()=>s}),function(e){e[e.UserCount=1]="UserCount",e[e.GroupName=2]="GroupName"}(s||(s={}))},35810:(e,t,r)=>{"use strict";r.d(t,{Al:()=>s.r,H4:()=>s.c,Q$:()=>s.e,R3:()=>s.n,VL:()=>s.l,lJ:()=>s.d,lT:()=>c,pt:()=>s.F,ur:()=>p,v7:()=>l});var s=r(68251),i=(r(43627),r(53334)),n=r(380),o=r(65606);Error;const a=["B","KB","MB","GB","TB","PB"],u=["B","KiB","MiB","GiB","TiB","PiB"];function l(e,t=!1,r=!1,s=!1){r=r&&!s,"string"==typeof e&&(e=Number(e));let n=e>0?Math.floor(Math.log(e)/Math.log(s?1e3:1024)):0;n=Math.min((r?u.length:a.length)-1,n);const o=r?u[n]:a[n];let l=(e/Math.pow(s?1e3:1024,n)).toFixed(1);return!0===t&&0===n?("0.0"!==l?"< 1 ":"0 ")+(r?u[1]:a[1]):(l=n<2?parseFloat(l).toFixed(0):parseFloat(l).toLocaleString((0,i.lO)()),l+" "+o)}function c(e,t=!1){try{e=`${e}`.toLocaleLowerCase().replaceAll(/\s+/g,"").replaceAll(",",".")}catch(e){return null}const r=e.match(/^([0-9]*(\.[0-9]*)?)([kmgtp]?)(i?)b?$/);if(null===r||"."===r[1]||""===r[1])return null;const s=`${r[1]}`,i="i"===r[4]||t?1024:1e3;return Math.round(Number.parseFloat(s)*i**{"":0,k:1,m:2,g:3,t:4,p:5,e:6}[r[3]])}function d(e){return e instanceof Date?e.toISOString():String(e)}function p(e,t={}){const r={sortingMode:"basename",sortingOrder:"asc",...t};return function(e,t,r){r=r??[];const s=(t=t??[e=>e]).map(((e,t)=>"asc"===(r[t]??"asc")?1:-1)),n=Intl.Collator([(0,i.Z0)(),(0,i.lO)()],{numeric:!0,usage:"sort"});return[...e].sort(((e,r)=>{for(const[i,o]of t.entries()){const t=n.compare(d(o(e)),d(o(r)));if(0!==t)return t*s[i]}return 0}))}(e,[...r.sortFavoritesFirst?[e=>1!==e.attributes?.favorite]:[],...r.sortFoldersFirst?[e=>"folder"!==e.type]:[],..."basename"!==r.sortingMode?[e=>e[r.sortingMode]]:[],e=>{return(t=e.displayname||e.attributes?.displayname||e.basename).lastIndexOf(".")>0?t.slice(0,t.lastIndexOf(".")):t;var t},e=>e.basename],[...r.sortFavoritesFirst?["asc"]:[],...r.sortFoldersFirst?["asc"]:[],..."mtime"===r.sortingMode?["asc"===r.sortingOrder?"desc":"asc"]:[],..."mtime"!==r.sortingMode&&"basename"!==r.sortingMode?[r.sortingOrder]:[],r.sortingOrder,r.sortingOrder])}var h,g,m={},f={};function E(){return h||(h=1,function(e){const t=":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",r="["+t+"]["+t+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",s=new RegExp("^"+r+"$");e.isExist=function(e){return void 0!==e},e.isEmptyObject=function(e){return 0===Object.keys(e).length},e.merge=function(e,t,r){if(t){const s=Object.keys(t),i=s.length;for(let n=0;n<i;n++)e[s[n]]="strict"===r?[t[s[n]]]:t[s[n]]}},e.getValue=function(t){return e.isExist(t)?t:""},e.isName=function(e){return!(null==s.exec(e))},e.getAllMatches=function(e,t){const r=[];let s=t.exec(e);for(;s;){const i=[];i.startIndex=t.lastIndex-s[0].length;const n=s.length;for(let e=0;e<n;e++)i.push(s[e]);r.push(i),s=t.exec(e)}return r},e.nameRegexp=r}(f)),f}function A(){if(g)return m;g=1;const e=E(),t={allowBooleanAttributes:!1,unpairedTags:[]};function r(e){return" "===e||"\t"===e||"\n"===e||"\r"===e}function s(e,t){const r=t;for(;t<e.length;t++)if("?"!=e[t]&&" "!=e[t]);else{const s=e.substr(r,t-r);if(t>5&&"xml"===s)return d("InvalidXml","XML declaration allowed only at the start of the document.",h(e,t));if("?"==e[t]&&">"==e[t+1]){t++;break}}return t}function i(e,t){if(e.length>t+5&&"-"===e[t+1]&&"-"===e[t+2]){for(t+=3;t<e.length;t++)if("-"===e[t]&&"-"===e[t+1]&&">"===e[t+2]){t+=2;break}}else if(e.length>t+8&&"D"===e[t+1]&&"O"===e[t+2]&&"C"===e[t+3]&&"T"===e[t+4]&&"Y"===e[t+5]&&"P"===e[t+6]&&"E"===e[t+7]){let r=1;for(t+=8;t<e.length;t++)if("<"===e[t])r++;else if(">"===e[t]&&(r--,0===r))break}else if(e.length>t+9&&"["===e[t+1]&&"C"===e[t+2]&&"D"===e[t+3]&&"A"===e[t+4]&&"T"===e[t+5]&&"A"===e[t+6]&&"["===e[t+7])for(t+=8;t<e.length;t++)if("]"===e[t]&&"]"===e[t+1]&&">"===e[t+2]){t+=2;break}return t}m.validate=function(n,o){o=Object.assign({},t,o);const u=[];let p=!1,g=!1;"\ufeff"===n[0]&&(n=n.substr(1));for(let t=0;t<n.length;t++)if("<"===n[t]&&"?"===n[t+1]){if(t+=2,t=s(n,t),t.err)return t}else{if("<"!==n[t]){if(r(n[t]))continue;return d("InvalidChar","char '"+n[t]+"' is not expected.",h(n,t))}{let f=t;if(t++,"!"===n[t]){t=i(n,t);continue}{let E=!1;"/"===n[t]&&(E=!0,t++);let A="";for(;t<n.length&&">"!==n[t]&&" "!==n[t]&&"\t"!==n[t]&&"\n"!==n[t]&&"\r"!==n[t];t++)A+=n[t];if(A=A.trim(),"/"===A[A.length-1]&&(A=A.substring(0,A.length-1),t--),m=A,!e.isName(m)){let e;return e=0===A.trim().length?"Invalid space after '<'.":"Tag '"+A+"' is an invalid name.",d("InvalidTag",e,h(n,t))}const b=a(n,t);if(!1===b)return d("InvalidAttr","Attributes for '"+A+"' have open quote.",h(n,t));let I=b.value;if(t=b.index,"/"===I[I.length-1]){const e=t-I.length;I=I.substring(0,I.length-1);const r=l(I,o);if(!0!==r)return d(r.err.code,r.err.msg,h(n,e+r.err.line));p=!0}else if(E){if(!b.tagClosed)return d("InvalidTag","Closing tag '"+A+"' doesn't have proper closing.",h(n,t));if(I.trim().length>0)return d("InvalidTag","Closing tag '"+A+"' can't have attributes or invalid starting.",h(n,f));if(0===u.length)return d("InvalidTag","Closing tag '"+A+"' has not been opened.",h(n,f));{const e=u.pop();if(A!==e.tagName){let t=h(n,e.tagStartPos);return d("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+t.line+", col "+t.col+") instead of closing tag '"+A+"'.",h(n,f))}0==u.length&&(g=!0)}}else{const e=l(I,o);if(!0!==e)return d(e.err.code,e.err.msg,h(n,t-I.length+e.err.line));if(!0===g)return d("InvalidXml","Multiple possible root nodes found.",h(n,t));-1!==o.unpairedTags.indexOf(A)||u.push({tagName:A,tagStartPos:f}),p=!0}for(t++;t<n.length;t++)if("<"===n[t]){if("!"===n[t+1]){t++,t=i(n,t);continue}if("?"!==n[t+1])break;if(t=s(n,++t),t.err)return t}else if("&"===n[t]){const e=c(n,t);if(-1==e)return d("InvalidChar","char '&' is not expected.",h(n,t));t=e}else if(!0===g&&!r(n[t]))return d("InvalidXml","Extra text at the end",h(n,t));"<"===n[t]&&t--}}}var m;return p?1==u.length?d("InvalidTag","Unclosed tag '"+u[0].tagName+"'.",h(n,u[0].tagStartPos)):!(u.length>0)||d("InvalidXml","Invalid '"+JSON.stringify(u.map((e=>e.tagName)),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):d("InvalidXml","Start tag expected.",1)};const n='"',o="'";function a(e,t){let r="",s="",i=!1;for(;t<e.length;t++){if(e[t]===n||e[t]===o)""===s?s=e[t]:s!==e[t]||(s="");else if(">"===e[t]&&""===s){i=!0;break}r+=e[t]}return""===s&&{value:r,index:t,tagClosed:i}}const u=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function l(t,r){const s=e.getAllMatches(t,u),i={};for(let e=0;e<s.length;e++){if(0===s[e][1].length)return d("InvalidAttr","Attribute '"+s[e][2]+"' has no space in starting.",f(s[e]));if(void 0!==s[e][3]&&void 0===s[e][4])return d("InvalidAttr","Attribute '"+s[e][2]+"' is without value.",f(s[e]));if(void 0===s[e][3]&&!r.allowBooleanAttributes)return d("InvalidAttr","boolean attribute '"+s[e][2]+"' is not allowed.",f(s[e]));const t=s[e][2];if(!p(t))return d("InvalidAttr","Attribute '"+t+"' is an invalid name.",f(s[e]));if(i.hasOwnProperty(t))return d("InvalidAttr","Attribute '"+t+"' is repeated.",f(s[e]));i[t]=1}return!0}function c(e,t){if(";"===e[++t])return-1;if("#"===e[t])return function(e,t){let r=/\d/;for("x"===e[t]&&(t++,r=/[\da-fA-F]/);t<e.length;t++){if(";"===e[t])return t;if(!e[t].match(r))break}return-1}(e,++t);let r=0;for(;t<e.length;t++,r++)if(!(e[t].match(/\w/)&&r<20)){if(";"===e[t])break;return-1}return t}function d(e,t,r){return{err:{code:e,msg:t,line:r.line||r,col:r.col}}}function p(t){return e.isName(t)}function h(e,t){const r=e.substring(0,t).split(/\r?\n/);return{line:r.length,col:r[r.length-1].length+1}}function f(e){return e.startIndex+e[1].length}return m}var b,I,N,v,L,y,O,x,T,P,R,w={};function C(){return T?x:(T=1,x=function(e){return"function"==typeof e?e:Array.isArray(e)?t=>{for(const r of e){if("string"==typeof r&&t===r)return!0;if(r instanceof RegExp&&r.test(t))return!0}}:()=>!1})}var U,_,$,S,F,D,G,k,M,j,B,V,X,q={};function K(){if(U)return q;function e(i,n,o){let a;const u={};for(let l=0;l<i.length;l++){const c=i[l],d=t(c);let p="";if(p=void 0===o?d:o+"."+d,d===n.textNodeName)void 0===a?a=c[d]:a+=""+c[d];else{if(void 0===d)continue;if(c[d]){let t=e(c[d],n,p);const i=s(t,n);c[":@"]?r(t,c[":@"],p,n):1!==Object.keys(t).length||void 0===t[n.textNodeName]||n.alwaysCreateTextNode?0===Object.keys(t).length&&(n.alwaysCreateTextNode?t[n.textNodeName]="":t=""):t=t[n.textNodeName],void 0!==u[d]&&u.hasOwnProperty(d)?(Array.isArray(u[d])||(u[d]=[u[d]]),u[d].push(t)):n.isArray(d,p,i)?u[d]=[t]:u[d]=t}}}return"string"==typeof a?a.length>0&&(u[n.textNodeName]=a):void 0!==a&&(u[n.textNodeName]=a),u}function t(e){const t=Object.keys(e);for(let e=0;e<t.length;e++){const r=t[e];if(":@"!==r)return r}}function r(e,t,r,s){if(t){const i=Object.keys(t),n=i.length;for(let o=0;o<n;o++){const n=i[o];s.isArray(n,r+"."+n,!0,!0)?e[n]=[t[n]]:e[n]=t[n]}}}function s(e,t){const{textNodeName:r}=t,s=Object.keys(e).length;return 0===s||!(1!==s||!e[r]&&"boolean"!=typeof e[r]&&0!==e[r])}return U=1,q.prettify=function(t,r){return e(t,r)},q}function H(){if($)return _;$=1;const{buildOptions:e}=function(){if(b)return w;b=1;const e={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(e,t){return t},attributeValueProcessor:function(e,t){return t},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(e,t,r){return e}};return w.buildOptions=function(t){return Object.assign({},e,t)},w.defaultOptions=e,w}(),t=function(){if(R)return P;R=1;const e=E(),t=N?I:(N=1,I=class{constructor(e){this.tagname=e,this.child=[],this[":@"]={}}add(e,t){"__proto__"===e&&(e="#__proto__"),this.child.push({[e]:t})}addChild(e){"__proto__"===e.tagname&&(e.tagname="#__proto__"),e[":@"]&&Object.keys(e[":@"]).length>0?this.child.push({[e.tagname]:e.child,":@":e[":@"]}):this.child.push({[e.tagname]:e.child})}}),r=function(){if(L)return v;L=1;const e=E();function t(e,t){let r="";for(;t<e.length&&"'"!==e[t]&&'"'!==e[t];t++)r+=e[t];if(r=r.trim(),-1!==r.indexOf(" "))throw new Error("External entites are not supported");const s=e[t++];let i="";for(;t<e.length&&e[t]!==s;t++)i+=e[t];return[r,i,t]}function r(e,t){return"!"===e[t+1]&&"E"===e[t+2]&&"N"===e[t+3]&&"T"===e[t+4]&&"I"===e[t+5]&&"T"===e[t+6]&&"Y"===e[t+7]}function s(e,t){return"!"===e[t+1]&&"E"===e[t+2]&&"L"===e[t+3]&&"E"===e[t+4]&&"M"===e[t+5]&&"E"===e[t+6]&&"N"===e[t+7]&&"T"===e[t+8]}function i(e,t){return"!"===e[t+1]&&"A"===e[t+2]&&"T"===e[t+3]&&"T"===e[t+4]&&"L"===e[t+5]&&"I"===e[t+6]&&"S"===e[t+7]&&"T"===e[t+8]}function n(e,t){return"!"===e[t+1]&&"N"===e[t+2]&&"O"===e[t+3]&&"T"===e[t+4]&&"A"===e[t+5]&&"T"===e[t+6]&&"I"===e[t+7]&&"O"===e[t+8]&&"N"===e[t+9]}function o(t){if(e.isName(t))return t;throw new Error(`Invalid entity name ${t}`)}return v=function(e,a){const u={};if("O"!==e[a+3]||"C"!==e[a+4]||"T"!==e[a+5]||"Y"!==e[a+6]||"P"!==e[a+7]||"E"!==e[a+8])throw new Error("Invalid Tag instead of DOCTYPE");{a+=9;let l=1,c=!1,d=!1,p="";for(;a<e.length;a++)if("<"!==e[a]||d)if(">"===e[a]){if(d?"-"===e[a-1]&&"-"===e[a-2]&&(d=!1,l--):l--,0===l)break}else"["===e[a]?c=!0:p+=e[a];else{if(c&&r(e,a)){let r,s;a+=7,[r,s,a]=t(e,a+1),-1===s.indexOf("&")&&(u[o(r)]={regx:RegExp(`&${r};`,"g"),val:s})}else c&&s(e,a)||c&&i(e,a)?a+=8:c&&n(e,a)?a+=9:d=!0;l++,p=""}if(0!==l)throw new Error("Unclosed DOCTYPE")}return{entities:u,i:a}}}(),s=function(){if(O)return y;O=1;const e=/^[-+]?0x[a-fA-F0-9]+$/,t=/^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/;!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);const r={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};return y=function(s,i={}){if(i=Object.assign({},r,i),!s||"string"!=typeof s)return s;let n=s.trim();if(void 0!==i.skipLike&&i.skipLike.test(n))return s;if(i.hex&&e.test(n))return Number.parseInt(n,16);{const e=t.exec(n);if(e){const t=e[1],r=e[2];let a=(o=e[3])&&-1!==o.indexOf(".")?("."===(o=o.replace(/0+$/,""))?o="0":"."===o[0]?o="0"+o:"."===o[o.length-1]&&(o=o.substr(0,o.length-1)),o):o;const u=e[4]||e[6];if(!i.leadingZeros&&r.length>0&&t&&"."!==n[2])return s;if(!i.leadingZeros&&r.length>0&&!t&&"."!==n[1])return s;{const e=Number(n),o=""+e;return-1!==o.search(/[eE]/)||u?i.eNotation?e:s:-1!==n.indexOf(".")?"0"===o&&""===a||o===a||t&&o==="-"+a?e:s:r?a===o||t+a===o?e:s:n===o||n===t+o?e:s}}return s}var o}}(),i=C();function n(e){const t=Object.keys(e);for(let r=0;r<t.length;r++){const s=t[r];this.lastEntities[s]={regex:new RegExp("&"+s+";","g"),val:e[s]}}}function o(e,t,r,s,i,n,o){if(void 0!==e&&(this.options.trimValues&&!s&&(e=e.trim()),e.length>0)){o||(e=this.replaceEntitiesValue(e));const s=this.options.tagValueProcessor(t,e,r,i,n);return null==s?e:typeof s!=typeof e||s!==e?s:this.options.trimValues||e.trim()===e?b(e,this.options.parseTagValue,this.options.numberParseOptions):e}}function a(e){if(this.options.removeNSPrefix){const t=e.split(":"),r="/"===e.charAt(0)?"/":"";if("xmlns"===t[0])return"";2===t.length&&(e=r+t[1])}return e}const u=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function l(t,r,s){if(!0!==this.options.ignoreAttributes&&"string"==typeof t){const s=e.getAllMatches(t,u),i=s.length,n={};for(let e=0;e<i;e++){const t=this.resolveNameSpace(s[e][1]);if(this.ignoreAttributesFn(t,r))continue;let i=s[e][4],o=this.options.attributeNamePrefix+t;if(t.length)if(this.options.transformAttributeName&&(o=this.options.transformAttributeName(o)),"__proto__"===o&&(o="#__proto__"),void 0!==i){this.options.trimValues&&(i=i.trim()),i=this.replaceEntitiesValue(i);const e=this.options.attributeValueProcessor(t,i,r);n[o]=null==e?i:typeof e!=typeof i||e!==i?e:b(i,this.options.parseAttributeValue,this.options.numberParseOptions)}else this.options.allowBooleanAttributes&&(n[o]=!0)}if(!Object.keys(n).length)return;if(this.options.attributesGroupName){const e={};return e[this.options.attributesGroupName]=n,e}return n}}const c=function(e){e=e.replace(/\r\n?/g,"\n");const s=new t("!xml");let i=s,n="",o="";for(let a=0;a<e.length;a++)if("<"===e[a])if("/"===e[a+1]){const t=m(e,">",a,"Closing Tag is not closed.");let r=e.substring(a+2,t).trim();if(this.options.removeNSPrefix){const e=r.indexOf(":");-1!==e&&(r=r.substr(e+1))}this.options.transformTagName&&(r=this.options.transformTagName(r)),i&&(n=this.saveTextToParentTag(n,i,o));const s=o.substring(o.lastIndexOf(".")+1);if(r&&-1!==this.options.unpairedTags.indexOf(r))throw new Error(`Unpaired tag can not be used as closing tag: </${r}>`);let u=0;s&&-1!==this.options.unpairedTags.indexOf(s)?(u=o.lastIndexOf(".",o.lastIndexOf(".")-1),this.tagsNodeStack.pop()):u=o.lastIndexOf("."),o=o.substring(0,u),i=this.tagsNodeStack.pop(),n="",a=t}else if("?"===e[a+1]){let r=f(e,a,!1,"?>");if(!r)throw new Error("Pi Tag is not closed.");if(n=this.saveTextToParentTag(n,i,o),this.options.ignoreDeclaration&&"?xml"===r.tagName||this.options.ignorePiTags);else{const e=new t(r.tagName);e.add(this.options.textNodeName,""),r.tagName!==r.tagExp&&r.attrExpPresent&&(e[":@"]=this.buildAttributesMap(r.tagExp,o,r.tagName)),this.addChild(i,e,o)}a=r.closeIndex+1}else if("!--"===e.substr(a+1,3)){const t=m(e,"--\x3e",a+4,"Comment is not closed.");if(this.options.commentPropName){const r=e.substring(a+4,t-2);n=this.saveTextToParentTag(n,i,o),i.add(this.options.commentPropName,[{[this.options.textNodeName]:r}])}a=t}else if("!D"===e.substr(a+1,2)){const t=r(e,a);this.docTypeEntities=t.entities,a=t.i}else if("!["===e.substr(a+1,2)){const t=m(e,"]]>",a,"CDATA is not closed.")-2,r=e.substring(a+9,t);n=this.saveTextToParentTag(n,i,o);let s=this.parseTextData(r,i.tagname,o,!0,!1,!0,!0);null==s&&(s=""),this.options.cdataPropName?i.add(this.options.cdataPropName,[{[this.options.textNodeName]:r}]):i.add(this.options.textNodeName,s),a=t+2}else{let r=f(e,a,this.options.removeNSPrefix),u=r.tagName;const l=r.rawTagName;let c=r.tagExp,d=r.attrExpPresent,p=r.closeIndex;this.options.transformTagName&&(u=this.options.transformTagName(u)),i&&n&&"!xml"!==i.tagname&&(n=this.saveTextToParentTag(n,i,o,!1));const h=i;if(h&&-1!==this.options.unpairedTags.indexOf(h.tagname)&&(i=this.tagsNodeStack.pop(),o=o.substring(0,o.lastIndexOf("."))),u!==s.tagname&&(o+=o?"."+u:u),this.isItStopNode(this.options.stopNodes,o,u)){let s="";if(c.length>0&&c.lastIndexOf("/")===c.length-1)"/"===u[u.length-1]?(u=u.substr(0,u.length-1),o=o.substr(0,o.length-1),c=u):c=c.substr(0,c.length-1),a=r.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(u))a=r.closeIndex;else{const t=this.readStopNodeData(e,l,p+1);if(!t)throw new Error(`Unexpected end of ${l}`);a=t.i,s=t.tagContent}const n=new t(u);u!==c&&d&&(n[":@"]=this.buildAttributesMap(c,o,u)),s&&(s=this.parseTextData(s,u,o,!0,d,!0,!0)),o=o.substr(0,o.lastIndexOf(".")),n.add(this.options.textNodeName,s),this.addChild(i,n,o)}else{if(c.length>0&&c.lastIndexOf("/")===c.length-1){"/"===u[u.length-1]?(u=u.substr(0,u.length-1),o=o.substr(0,o.length-1),c=u):c=c.substr(0,c.length-1),this.options.transformTagName&&(u=this.options.transformTagName(u));const e=new t(u);u!==c&&d&&(e[":@"]=this.buildAttributesMap(c,o,u)),this.addChild(i,e,o),o=o.substr(0,o.lastIndexOf("."))}else{const e=new t(u);this.tagsNodeStack.push(i),u!==c&&d&&(e[":@"]=this.buildAttributesMap(c,o,u)),this.addChild(i,e,o),i=e}n="",a=p}}else n+=e[a];return s.child};function d(e,t,r){const s=this.options.updateTag(t.tagname,r,t[":@"]);!1===s||("string"==typeof s?(t.tagname=s,e.addChild(t)):e.addChild(t))}const p=function(e){if(this.options.processEntities){for(let t in this.docTypeEntities){const r=this.docTypeEntities[t];e=e.replace(r.regx,r.val)}for(let t in this.lastEntities){const r=this.lastEntities[t];e=e.replace(r.regex,r.val)}if(this.options.htmlEntities)for(let t in this.htmlEntities){const r=this.htmlEntities[t];e=e.replace(r.regex,r.val)}e=e.replace(this.ampEntity.regex,this.ampEntity.val)}return e};function h(e,t,r,s){return e&&(void 0===s&&(s=0===Object.keys(t.child).length),void 0!==(e=this.parseTextData(e,t.tagname,r,!1,!!t[":@"]&&0!==Object.keys(t[":@"]).length,s))&&""!==e&&t.add(this.options.textNodeName,e),e=""),e}function g(e,t,r){const s="*."+r;for(const r in e){const i=e[r];if(s===i||t===i)return!0}return!1}function m(e,t,r,s){const i=e.indexOf(t,r);if(-1===i)throw new Error(s);return i+t.length-1}function f(e,t,r,s=">"){const i=function(e,t,r=">"){let s,i="";for(let n=t;n<e.length;n++){let t=e[n];if(s)t===s&&(s="");else if('"'===t||"'"===t)s=t;else if(t===r[0]){if(!r[1])return{data:i,index:n};if(e[n+1]===r[1])return{data:i,index:n}}else"\t"===t&&(t=" ");i+=t}}(e,t+1,s);if(!i)return;let n=i.data;const o=i.index,a=n.search(/\s/);let u=n,l=!0;-1!==a&&(u=n.substring(0,a),n=n.substring(a+1).trimStart());const c=u;if(r){const e=u.indexOf(":");-1!==e&&(u=u.substr(e+1),l=u!==i.data.substr(e+1))}return{tagName:u,tagExp:n,closeIndex:o,attrExpPresent:l,rawTagName:c}}function A(e,t,r){const s=r;let i=1;for(;r<e.length;r++)if("<"===e[r])if("/"===e[r+1]){const n=m(e,">",r,`${t} is not closed`);if(e.substring(r+2,n).trim()===t&&(i--,0===i))return{tagContent:e.substring(s,r),i:n};r=n}else if("?"===e[r+1])r=m(e,"?>",r+1,"StopNode is not closed.");else if("!--"===e.substr(r+1,3))r=m(e,"--\x3e",r+3,"StopNode is not closed.");else if("!["===e.substr(r+1,2))r=m(e,"]]>",r,"StopNode is not closed.")-2;else{const s=f(e,r,">");s&&((s&&s.tagName)===t&&"/"!==s.tagExp[s.tagExp.length-1]&&i++,r=s.closeIndex)}}function b(t,r,i){if(r&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&s(t,i)}return e.isExist(t)?t:""}return P=class{constructor(e){this.options=e,this.currentNode=null,this.tagsNodeStack=[],this.docTypeEntities={},this.lastEntities={apos:{regex:/&(apos|#39|#x27);/g,val:"'"},gt:{regex:/&(gt|#62|#x3E);/g,val:">"},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:(e,t)=>String.fromCharCode(Number.parseInt(t,10))},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:(e,t)=>String.fromCharCode(Number.parseInt(t,16))}},this.addExternalEntities=n,this.parseXml=c,this.parseTextData=o,this.resolveNameSpace=a,this.buildAttributesMap=l,this.isItStopNode=g,this.replaceEntitiesValue=p,this.readStopNodeData=A,this.saveTextToParentTag=h,this.addChild=d,this.ignoreAttributesFn=i(this.options.ignoreAttributes)}}}(),{prettify:r}=K(),s=A();return _=class{constructor(t){this.externalEntities={},this.options=e(t)}parse(e,i){if("string"==typeof e);else{if(!e.toString)throw new Error("XML data is accepted in String or Bytes[] form.");e=e.toString()}if(i){!0===i&&(i={});const t=s.validate(e,i);if(!0!==t)throw Error(`${t.err.msg}:${t.err.line}:${t.err.col}`)}const n=new t(this.options);n.addExternalEntities(this.externalEntities);const o=n.parseXml(e);return this.options.preserveOrder||void 0===o?o:r(o,this.options)}addEntity(e,t){if(-1!==t.indexOf("&"))throw new Error("Entity value can't have '&'");if(-1!==e.indexOf("&")||-1!==e.indexOf(";"))throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '&#xD;'");if("&"===t)throw new Error("An entity with value '&' is not permitted");this.externalEntities[e]=t}}}function J(){if(F)return S;function e(n,o,a,u){let l="",c=!1;for(let d=0;d<n.length;d++){const p=n[d],h=t(p);if(void 0===h)continue;let g="";if(g=0===a.length?h:`${a}.${h}`,h===o.textNodeName){let e=p[h];s(g,o)||(e=o.tagValueProcessor(h,e),e=i(e,o)),c&&(l+=u),l+=e,c=!1;continue}if(h===o.cdataPropName){c&&(l+=u),l+=`<![CDATA[${p[h][0][o.textNodeName]}]]>`,c=!1;continue}if(h===o.commentPropName){l+=u+`\x3c!--${p[h][0][o.textNodeName]}--\x3e`,c=!0;continue}if("?"===h[0]){const e=r(p[":@"],o),t="?xml"===h?"":u;let s=p[h][0][o.textNodeName];s=0!==s.length?" "+s:"",l+=t+`<${h}${s}${e}?>`,c=!0;continue}let m=u;""!==m&&(m+=o.indentBy);const f=u+`<${h}${r(p[":@"],o)}`,E=e(p[h],o,g,m);-1!==o.unpairedTags.indexOf(h)?o.suppressUnpairedNode?l+=f+">":l+=f+"/>":E&&0!==E.length||!o.suppressEmptyNode?E&&E.endsWith(">")?l+=f+`>${E}${u}</${h}>`:(l+=f+">",E&&""!==u&&(E.includes("/>")||E.includes("</"))?l+=u+o.indentBy+E+u:l+=E,l+=`</${h}>`):l+=f+"/>",c=!0}return l}function t(e){const t=Object.keys(e);for(let r=0;r<t.length;r++){const s=t[r];if(e.hasOwnProperty(s)&&":@"!==s)return s}}function r(e,t){let r="";if(e&&!t.ignoreAttributes)for(let s in e){if(!e.hasOwnProperty(s))continue;let n=t.attributeValueProcessor(s,e[s]);n=i(n,t),!0===n&&t.suppressBooleanAttributes?r+=` ${s.substr(t.attributeNamePrefix.length)}`:r+=` ${s.substr(t.attributeNamePrefix.length)}="${n}"`}return r}function s(e,t){let r=(e=e.substr(0,e.length-t.textNodeName.length-1)).substr(e.lastIndexOf(".")+1);for(let s in t.stopNodes)if(t.stopNodes[s]===e||t.stopNodes[s]==="*."+r)return!0;return!1}function i(e,t){if(e&&e.length>0&&t.processEntities)for(let r=0;r<t.entities.length;r++){const s=t.entities[r];e=e.replace(s.regex,s.val)}return e}return F=1,S=function(t,r){let s="";return r.format&&r.indentBy.length>0&&(s="\n"),e(t,r,"",s)}}function Y(){if(B)return j;B=1;const e="object"==typeof o&&o.env&&o.env.NODE_DEBUG&&/\bsemver\b/i.test(o.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};return j=e}function Z(){if(X)return V;X=1;const e=Number.MAX_SAFE_INTEGER||9007199254740991;return V={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:e,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}}!function(){if(M)return k;M=1;const e=A(),t=H(),r=function(){if(G)return D;G=1;const e=J(),t=C(),r={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(e,t){return t},attributeValueProcessor:function(e,t){return t},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&amp;"},{regex:new RegExp(">","g"),val:"&gt;"},{regex:new RegExp("<","g"),val:"&lt;"},{regex:new RegExp("'","g"),val:"&apos;"},{regex:new RegExp('"',"g"),val:"&quot;"}],processEntities:!0,stopNodes:[],oneListGroup:!1};function s(e){this.options=Object.assign({},r,e),!0===this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.ignoreAttributesFn=t(this.options.ignoreAttributes),this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=o),this.processTextOrObjNode=i,this.options.format?(this.indentate=n,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function i(e,t,r,s){const i=this.j2x(e,r+1,s.concat(t));return void 0!==e[this.options.textNodeName]&&1===Object.keys(e).length?this.buildTextValNode(e[this.options.textNodeName],t,i.attrStr,r):this.buildObjectNode(i.val,t,i.attrStr,r)}function n(e){return this.options.indentBy.repeat(e)}function o(e){return!(!e.startsWith(this.options.attributeNamePrefix)||e===this.options.textNodeName)&&e.substr(this.attrPrefixLen)}return s.prototype.build=function(t){return this.options.preserveOrder?e(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0,[]).val)},s.prototype.j2x=function(e,t,r){let s="",i="";const n=r.join(".");for(let o in e)if(Object.prototype.hasOwnProperty.call(e,o))if(void 0===e[o])this.isAttribute(o)&&(i+="");else if(null===e[o])this.isAttribute(o)?i+="":"?"===o[0]?i+=this.indentate(t)+"<"+o+"?"+this.tagEndChar:i+=this.indentate(t)+"<"+o+"/"+this.tagEndChar;else if(e[o]instanceof Date)i+=this.buildTextValNode(e[o],o,"",t);else if("object"!=typeof e[o]){const r=this.isAttribute(o);if(r&&!this.ignoreAttributesFn(r,n))s+=this.buildAttrPairStr(r,""+e[o]);else if(!r)if(o===this.options.textNodeName){let t=this.options.tagValueProcessor(o,""+e[o]);i+=this.replaceEntitiesValue(t)}else i+=this.buildTextValNode(e[o],o,"",t)}else if(Array.isArray(e[o])){const s=e[o].length;let n="",a="";for(let u=0;u<s;u++){const s=e[o][u];if(void 0===s);else if(null===s)"?"===o[0]?i+=this.indentate(t)+"<"+o+"?"+this.tagEndChar:i+=this.indentate(t)+"<"+o+"/"+this.tagEndChar;else if("object"==typeof s)if(this.options.oneListGroup){const e=this.j2x(s,t+1,r.concat(o));n+=e.val,this.options.attributesGroupName&&s.hasOwnProperty(this.options.attributesGroupName)&&(a+=e.attrStr)}else n+=this.processTextOrObjNode(s,o,t,r);else if(this.options.oneListGroup){let e=this.options.tagValueProcessor(o,s);e=this.replaceEntitiesValue(e),n+=e}else n+=this.buildTextValNode(s,o,"",t)}this.options.oneListGroup&&(n=this.buildObjectNode(n,o,a,t)),i+=n}else if(this.options.attributesGroupName&&o===this.options.attributesGroupName){const t=Object.keys(e[o]),r=t.length;for(let i=0;i<r;i++)s+=this.buildAttrPairStr(t[i],""+e[o][t[i]])}else i+=this.processTextOrObjNode(e[o],o,t,r);return{attrStr:s,val:i}},s.prototype.buildAttrPairStr=function(e,t){return t=this.options.attributeValueProcessor(e,""+t),t=this.replaceEntitiesValue(t),this.options.suppressBooleanAttributes&&"true"===t?" "+e:" "+e+'="'+t+'"'},s.prototype.buildObjectNode=function(e,t,r,s){if(""===e)return"?"===t[0]?this.indentate(s)+"<"+t+r+"?"+this.tagEndChar:this.indentate(s)+"<"+t+r+this.closeTag(t)+this.tagEndChar;{let i="</"+t+this.tagEndChar,n="";return"?"===t[0]&&(n="?",i=""),!r&&""!==r||-1!==e.indexOf("<")?!1!==this.options.commentPropName&&t===this.options.commentPropName&&0===n.length?this.indentate(s)+`\x3c!--${e}--\x3e`+this.newLine:this.indentate(s)+"<"+t+r+n+this.tagEndChar+e+this.indentate(s)+i:this.indentate(s)+"<"+t+r+n+">"+e+i}},s.prototype.closeTag=function(e){let t="";return-1!==this.options.unpairedTags.indexOf(e)?this.options.suppressUnpairedNode||(t="/"):t=this.options.suppressEmptyNode?"/":`></${e}`,t},s.prototype.buildTextValNode=function(e,t,r,s){if(!1!==this.options.cdataPropName&&t===this.options.cdataPropName)return this.indentate(s)+`<![CDATA[${e}]]>`+this.newLine;if(!1!==this.options.commentPropName&&t===this.options.commentPropName)return this.indentate(s)+`\x3c!--${e}--\x3e`+this.newLine;if("?"===t[0])return this.indentate(s)+"<"+t+r+"?"+this.tagEndChar;{let i=this.options.tagValueProcessor(t,e);return i=this.replaceEntitiesValue(i),""===i?this.indentate(s)+"<"+t+r+this.closeTag(t)+this.tagEndChar:this.indentate(s)+"<"+t+r+">"+i+"</"+t+this.tagEndChar}},s.prototype.replaceEntitiesValue=function(e){if(e&&e.length>0&&this.options.processEntities)for(let t=0;t<this.options.entities.length;t++){const r=this.options.entities[t];e=e.replace(r.regex,r.val)}return e},D=s}();k={XMLParser:t,XMLValidator:e,XMLBuilder:r}}();var z,Q,W,ee,te,re,se,ie,ne,oe,ae,ue,le,ce={exports:{}};function de(){if(se)return re;se=1;const e=Y(),{MAX_LENGTH:t,MAX_SAFE_INTEGER:r}=Z(),{safeRe:s,t:i}=(z||(z=1,function(e,t){const{MAX_SAFE_COMPONENT_LENGTH:r,MAX_SAFE_BUILD_LENGTH:s,MAX_LENGTH:i}=Z(),n=Y(),o=(t=e.exports={}).re=[],a=t.safeRe=[],u=t.src=[],l=t.t={};let c=0;const d="[a-zA-Z0-9-]",p=[["\\s",1],["\\d",i],[d,s]],h=(e,t,r)=>{const s=(e=>{for(const[t,r]of p)e=e.split(`${t}*`).join(`${t}{0,${r}}`).split(`${t}+`).join(`${t}{1,${r}}`);return e})(t),i=c++;n(e,i,t),l[e]=i,u[i]=t,o[i]=new RegExp(t,r?"g":void 0),a[i]=new RegExp(s,r?"g":void 0)};h("NUMERICIDENTIFIER","0|[1-9]\\d*"),h("NUMERICIDENTIFIERLOOSE","\\d+"),h("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${d}*`),h("MAINVERSION",`(${u[l.NUMERICIDENTIFIER]})\\.(${u[l.NUMERICIDENTIFIER]})\\.(${u[l.NUMERICIDENTIFIER]})`),h("MAINVERSIONLOOSE",`(${u[l.NUMERICIDENTIFIERLOOSE]})\\.(${u[l.NUMERICIDENTIFIERLOOSE]})\\.(${u[l.NUMERICIDENTIFIERLOOSE]})`),h("PRERELEASEIDENTIFIER",`(?:${u[l.NUMERICIDENTIFIER]}|${u[l.NONNUMERICIDENTIFIER]})`),h("PRERELEASEIDENTIFIERLOOSE",`(?:${u[l.NUMERICIDENTIFIERLOOSE]}|${u[l.NONNUMERICIDENTIFIER]})`),h("PRERELEASE",`(?:-(${u[l.PRERELEASEIDENTIFIER]}(?:\\.${u[l.PRERELEASEIDENTIFIER]})*))`),h("PRERELEASELOOSE",`(?:-?(${u[l.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${u[l.PRERELEASEIDENTIFIERLOOSE]})*))`),h("BUILDIDENTIFIER",`${d}+`),h("BUILD",`(?:\\+(${u[l.BUILDIDENTIFIER]}(?:\\.${u[l.BUILDIDENTIFIER]})*))`),h("FULLPLAIN",`v?${u[l.MAINVERSION]}${u[l.PRERELEASE]}?${u[l.BUILD]}?`),h("FULL",`^${u[l.FULLPLAIN]}$`),h("LOOSEPLAIN",`[v=\\s]*${u[l.MAINVERSIONLOOSE]}${u[l.PRERELEASELOOSE]}?${u[l.BUILD]}?`),h("LOOSE",`^${u[l.LOOSEPLAIN]}$`),h("GTLT","((?:<|>)?=?)"),h("XRANGEIDENTIFIERLOOSE",`${u[l.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),h("XRANGEIDENTIFIER",`${u[l.NUMERICIDENTIFIER]}|x|X|\\*`),h("XRANGEPLAIN",`[v=\\s]*(${u[l.XRANGEIDENTIFIER]})(?:\\.(${u[l.XRANGEIDENTIFIER]})(?:\\.(${u[l.XRANGEIDENTIFIER]})(?:${u[l.PRERELEASE]})?${u[l.BUILD]}?)?)?`),h("XRANGEPLAINLOOSE",`[v=\\s]*(${u[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${u[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${u[l.XRANGEIDENTIFIERLOOSE]})(?:${u[l.PRERELEASELOOSE]})?${u[l.BUILD]}?)?)?`),h("XRANGE",`^${u[l.GTLT]}\\s*${u[l.XRANGEPLAIN]}$`),h("XRANGELOOSE",`^${u[l.GTLT]}\\s*${u[l.XRANGEPLAINLOOSE]}$`),h("COERCEPLAIN",`(^|[^\\d])(\\d{1,${r}})(?:\\.(\\d{1,${r}}))?(?:\\.(\\d{1,${r}}))?`),h("COERCE",`${u[l.COERCEPLAIN]}(?:$|[^\\d])`),h("COERCEFULL",u[l.COERCEPLAIN]+`(?:${u[l.PRERELEASE]})?(?:${u[l.BUILD]})?(?:$|[^\\d])`),h("COERCERTL",u[l.COERCE],!0),h("COERCERTLFULL",u[l.COERCEFULL],!0),h("LONETILDE","(?:~>?)"),h("TILDETRIM",`(\\s*)${u[l.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",h("TILDE",`^${u[l.LONETILDE]}${u[l.XRANGEPLAIN]}$`),h("TILDELOOSE",`^${u[l.LONETILDE]}${u[l.XRANGEPLAINLOOSE]}$`),h("LONECARET","(?:\\^)"),h("CARETTRIM",`(\\s*)${u[l.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",h("CARET",`^${u[l.LONECARET]}${u[l.XRANGEPLAIN]}$`),h("CARETLOOSE",`^${u[l.LONECARET]}${u[l.XRANGEPLAINLOOSE]}$`),h("COMPARATORLOOSE",`^${u[l.GTLT]}\\s*(${u[l.LOOSEPLAIN]})$|^$`),h("COMPARATOR",`^${u[l.GTLT]}\\s*(${u[l.FULLPLAIN]})$|^$`),h("COMPARATORTRIM",`(\\s*)${u[l.GTLT]}\\s*(${u[l.LOOSEPLAIN]}|${u[l.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",h("HYPHENRANGE",`^\\s*(${u[l.XRANGEPLAIN]})\\s+-\\s+(${u[l.XRANGEPLAIN]})\\s*$`),h("HYPHENRANGELOOSE",`^\\s*(${u[l.XRANGEPLAINLOOSE]})\\s+-\\s+(${u[l.XRANGEPLAINLOOSE]})\\s*$`),h("STAR","(<|>)?=?\\s*\\*"),h("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),h("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}(ce,ce.exports)),ce.exports),n=function(){if(W)return Q;W=1;const e=Object.freeze({loose:!0}),t=Object.freeze({});return Q=r=>r?"object"!=typeof r?e:r:t}(),{compareIdentifiers:o}=function(){if(te)return ee;te=1;const e=/^[0-9]+$/,t=(t,r)=>{const s=e.test(t),i=e.test(r);return s&&i&&(t=+t,r=+r),t===r?0:s&&!i?-1:i&&!s?1:t<r?-1:1};return ee={compareIdentifiers:t,rcompareIdentifiers:(e,r)=>t(r,e)}}();class a{constructor(o,u){if(u=n(u),o instanceof a){if(o.loose===!!u.loose&&o.includePrerelease===!!u.includePrerelease)return o;o=o.version}else if("string"!=typeof o)throw new TypeError(`Invalid version. Must be a string. Got type "${typeof o}".`);if(o.length>t)throw new TypeError(`version is longer than ${t} characters`);e("SemVer",o,u),this.options=u,this.loose=!!u.loose,this.includePrerelease=!!u.includePrerelease;const l=o.trim().match(u.loose?s[i.LOOSE]:s[i.FULL]);if(!l)throw new TypeError(`Invalid Version: ${o}`);if(this.raw=o,this.major=+l[1],this.minor=+l[2],this.patch=+l[3],this.major>r||this.major<0)throw new TypeError("Invalid major version");if(this.minor>r||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>r||this.patch<0)throw new TypeError("Invalid patch version");l[4]?this.prerelease=l[4].split(".").map((e=>{if(/^[0-9]+$/.test(e)){const t=+e;if(t>=0&&t<r)return t}return e})):this.prerelease=[],this.build=l[5]?l[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(t){if(e("SemVer.compare",this.version,this.options,t),!(t instanceof a)){if("string"==typeof t&&t===this.version)return 0;t=new a(t,this.options)}return t.version===this.version?0:this.compareMain(t)||this.comparePre(t)}compareMain(e){return e instanceof a||(e=new a(e,this.options)),o(this.major,e.major)||o(this.minor,e.minor)||o(this.patch,e.patch)}comparePre(t){if(t instanceof a||(t=new a(t,this.options)),this.prerelease.length&&!t.prerelease.length)return-1;if(!this.prerelease.length&&t.prerelease.length)return 1;if(!this.prerelease.length&&!t.prerelease.length)return 0;let r=0;do{const s=this.prerelease[r],i=t.prerelease[r];if(e("prerelease compare",r,s,i),void 0===s&&void 0===i)return 0;if(void 0===i)return 1;if(void 0===s)return-1;if(s!==i)return o(s,i)}while(++r)}compareBuild(t){t instanceof a||(t=new a(t,this.options));let r=0;do{const s=this.build[r],i=t.build[r];if(e("build compare",r,s,i),void 0===s&&void 0===i)return 0;if(void 0===i)return 1;if(void 0===s)return-1;if(s!==i)return o(s,i)}while(++r)}inc(e,t,r){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t,r);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t,r);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t,r),this.inc("pre",t,r);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t,r),this.inc("pre",t,r);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":{const e=Number(r)?1:0;if(!t&&!1===r)throw new Error("invalid increment argument: identifier is empty");if(0===this.prerelease.length)this.prerelease=[e];else{let s=this.prerelease.length;for(;--s>=0;)"number"==typeof this.prerelease[s]&&(this.prerelease[s]++,s=-2);if(-1===s){if(t===this.prerelease.join(".")&&!1===r)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(e)}}if(t){let s=[t,e];!1===r&&(s=[t]),0===o(this.prerelease[0],t)?isNaN(this.prerelease[1])&&(this.prerelease=s):this.prerelease=s}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}return re=a}!function(){if(ae)return oe;ae=1;const e=function(){if(ne)return ie;ne=1;const e=de();return ie=(t,r,s=!1)=>{if(t instanceof e)return t;try{return new e(t,r)}catch(e){if(!s)return null;throw e}}}();oe=(t,r)=>{const s=e(t,r);return s?s.version:null}}(),function(){if(le)return ue;le=1;const e=de();ue=(t,r)=>new e(t,r).major}(),n.m},36620:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});const s=(0,r(35947).YK)().setApp("settings").detectUser().build()},58723:(e,t)=>{function r(e,t){var s={name:e.name,path:e.path,hash:e.hash,query:e.query,params:e.params,fullPath:e.fullPath,meta:e.meta};return t&&(s.from=r(t)),Object.freeze(s)}t.O=function(e,t,s){var i=(s||{}).moduleName||"route";e.registerModule(i,{namespaced:!0,state:r(t.currentRoute),mutations:{ROUTE_CHANGED:function(t,s){e.state[i]=r(s.to,s.from)}}});var n,o=!1,a=e.watch((function(e){return e[i]}),(function(e){var r=e.fullPath;r!==n&&(null!=n&&(o=!0,t.push(e)),n=r)}),{sync:!0}),u=t.afterEach((function(t,r){o?o=!1:(n=t.fullPath,e.commit(i+"/ROUTE_CHANGED",{to:t,from:r}))}));return function(){null!=u&&u(),null!=a&&a(),e.unregisterModule(i)}}}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={id:e,loaded:!1,exports:{}};return i[e].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=i,e=[],o.O=(t,r,s,i)=>{if(!r){var n=1/0;for(c=0;c<e.length;c++){r=e[c][0],s=e[c][1],i=e[c][2];for(var a=!0,u=0;u<r.length;u++)(!1&i||n>=i)&&Object.keys(o.O).every((e=>o.O[e](r[u])))?r.splice(u--,1):(a=!1,i<n&&(n=i));if(a){e.splice(c--,1);var l=s();void 0!==l&&(t=l)}}return t}i=i||0;for(var c=e.length;c>0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[r,s,i]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((t,r)=>(o.f[r](e,t),t)),[])),o.u=e=>(({3239:"settings-users",4529:"settings-apps-view"}[e]||e)+"-"+e+".js?v="+{459:"975afd1e02f53abf8034",1023:"06cf5496a0a2d7ef494a",2441:"2c050d23f9070dfa7f03",3239:"2f789c2165a546fed1fa",4529:"96ac57466d9cc1a26328",5862:"142cd48ca8ec32e57725",6227:"3494381758c4754ef3f5",7265:"3ea08242e475ac7a22e1",8737:"1ee3b21131ac8193a04d"}[e]),o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},s="nextcloud:",o.l=(e,t,i,n)=>{if(r[e])r[e].push(t);else{var a,u;if(void 0!==i)for(var l=document.getElementsByTagName("script"),c=0;c<l.length;c++){var d=l[c];if(d.getAttribute("src")==e||d.getAttribute("data-webpack")==s+i){a=d;break}}a||(u=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,o.nc&&a.setAttribute("nonce",o.nc),a.setAttribute("data-webpack",s+i),a.src=e),r[e]=[t];var p=(t,s)=>{a.onerror=a.onload=null,clearTimeout(h);var i=r[e];if(delete r[e],a.parentNode&&a.parentNode.removeChild(a),i&&i.forEach((e=>e(s))),t)return t(s)},h=setTimeout(p.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=p.bind(null,a.onerror),a.onload=p.bind(null,a.onload),u&&document.head.appendChild(a)}},o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),o.j=2689,(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var t=o.g.document;if(!e&&t&&(t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var s=r.length-1;s>-1&&(!e||!/^http(s?):/.test(e));)e=r[s--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=e})(),(()=>{o.b=document.baseURI||self.location.href;var e={2689:0};o.f.j=(t,r)=>{var s=o.o(e,t)?e[t]:void 0;if(0!==s)if(s)r.push(s[2]);else{var i=new Promise(((r,i)=>s=e[t]=[r,i]));r.push(s[2]=i);var n=o.p+o.u(t),a=new Error;o.l(n,(r=>{if(o.o(e,t)&&(0!==(s=e[t])&&(e[t]=void 0),s)){var i=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;a.message="Loading chunk "+t+" failed.\n("+i+": "+n+")",a.name="ChunkLoadError",a.type=i,a.request=n,s[1](a)}}),"chunk-"+t,t)}},o.O.j=t=>0===e[t];var t=(t,r)=>{var s,i,n=r[0],a=r[1],u=r[2],l=0;if(n.some((t=>0!==e[t]))){for(s in a)o.o(a,s)&&(o.m[s]=a[s]);if(u)var c=u(o)}for(t&&t(r);l<n.length;l++)i=n[l],o.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return o.O(c)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),o.nc=void 0;var a=o.O(void 0,[4208],(()=>o(12836)));a=o.O(a)})();
-//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=d257b6b5046c37365155 \ No newline at end of file
+(()=>{var e,r,s,i={6028:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var s=r(65043),i=r(56760);r(51257);const n=function(e){return e.replace(/\/$/,"")},o={requireAdmin:()=>(0,i.C5)(),get:(e,t)=>s.Ay.get(n(e),t),post:(e,t)=>s.Ay.post(n(e),t),patch:(e,t)=>s.Ay.patch(n(e),t),put:(e,t)=>s.Ay.put(n(e),t),delete:(e,t)=>s.Ay.delete(n(e),{params:t})}},12836:(e,t,r)=>{"use strict";var s=r(85471),i=r(95353),n=r(80284),o=r(58723),a=r(53334),u=r(22378);const l=(0,s.pM)({__name:"SettingsApp",setup:e=>({__sfc:!0,NcContent:u.A})}),c=(0,r(14486).A)(l,(function(){var e=this,t=e._self._c;return t(e._self._setupProxy.NcContent,{attrs:{"app-name":"settings"}},[t("router-view",{attrs:{name:"navigation"}}),e._v(" "),t("router-view"),e._v(" "),t("router-view",{attrs:{name:"sidebar"}})],1)}),[],!1,null,null,null).exports;var d=r(40173),p=r(63814);const h=[{name:"users",path:"/:index(index.php/)?settings/users",components:{default:()=>Promise.all([r.e(4208),r.e(7265),r.e(3239)]).then(r.bind(r,31795)),navigation:()=>Promise.all([r.e(4208),r.e(7265),r.e(3239)]).then(r.bind(r,21437))},props:!0,children:[{path:":selectedGroup",name:"group"}]},{path:"/:index(index.php/)?settings/apps",name:"apps",redirect:{name:"apps-category",params:{category:(0,r(32981).C)("settings","appstoreEnabled",!0)?"discover":"installed"}},components:{default:()=>Promise.all([r.e(4208),r.e(7265),r.e(4529)]).then(r.bind(r,99986)),navigation:()=>Promise.all([r.e(4208),r.e(7265),r.e(4529)]).then(r.bind(r,78451)),sidebar:()=>Promise.all([r.e(4208),r.e(7265),r.e(4529)]).then(r.bind(r,84694))},children:[{path:":category",name:"apps-category",children:[{path:":id",name:"apps-details"}]}]}];s.Ay.use(d.Ay);const g=new d.Ay({mode:"history",base:(0,p.Jv)(""),linkActiveClass:"active",routes:h});var m=r(14744),f=r(21777),E=r(65899);r.nc=(0,f.aV)(),s.Ay.prototype.t=a.t,s.Ay.prototype.n=a.n,s.Ay.use(E.R2),s.Ay.use(n.Ay,{defaultHtml:!1}),s.Ay.use(i.Ay);const A=(0,m.P)();(0,o.O)(A,g);const b=(0,E.Ey)();new s.Ay({router:g,store:A,pinia:b,render:e=>e(c),el:"#content"})},14744:(e,r,s)=>{"use strict";s.d(r,{P:()=>D});var i=s(95353),n=s(59097),o=s(87485),a=s(35810),u=s(85168),l=s(63814),c=s(32981),d=s(65043),p=s(15916),h=s(53334);const g=Intl.Collator([(0,h.Z0)(),(0,h.lO)()],{numeric:!0,usage:"sort"});var m=s(6028),f=s(36620);const E=(0,c.C)("settings","usersSettings",{}),A=(0,n.c0)("settings").persist(!0).build(),b={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},I={users:[],groups:[...E.systemGroups??[]],orderBy:E.sortGroups??p.q.UserCount,minPasswordLength:0,usersOffset:0,usersLimit:25,disabledUsersOffset:0,disabledUsersLimit:25,userCount:E.userCount??0,showConfig:{showStoragePath:"true"===A.getItem("account_settings__showStoragePath"),showUserBackend:"true"===A.getItem("account_settings__showUserBackend"),showFirstLogin:"true"===A.getItem("account_settings__showFirstLogin"),showLastLogin:"true"===A.getItem("account_settings__showLastLogin"),showNewUserForm:"true"===A.getItem("account_settings__showNewUserForm"),showLanguages:"true"===A.getItem("account_settings__showLanguages")}},N={appendUsers(e,t){const r=e.users.map((e=>{let{id:t}=e;return t})),s=Object.values(t).filter((e=>{let{id:t}=e;return!r.includes(t)})),i=e.users.concat(s);e.usersOffset+=e.usersLimit,e.users=i},updateDisabledUsers(e,t){e.disabledUsersOffset+=e.disabledUsersLimit},setPasswordPolicyMinLength(e,t){e.minPasswordLength=""!==t?t:0},addGroup(e,t){try{if(void 0!==e.groups.find((e=>e.id===t.id)))return;const r=Object.assign({},b,t);e.groups.unshift(r)}catch(e){console.error("Can't create group",e)}},renameGroup(e,t){let{gid:r,displayName:s}=t;const i=e.groups.findIndex((e=>e.id===r));if(i>=0){const t=e.groups[i];t.name=s,e.groups.splice(i,1,t)}},removeGroup(e,t){const r=e.groups.findIndex((e=>e.id===t));r>=0&&e.groups.splice(r,1)},addUserGroup(e,t){let{userid:r,gid:s}=t;const i=e.groups.find((e=>e.id===s)),n=e.users.find((e=>e.id===r));i&&n.enabled&&e.userCount>0&&i.usercount++,n.groups.push(s)},removeUserGroup(e,t){let{userid:r,gid:s}=t;const i=e.groups.find((e=>e.id===s)),n=e.users.find((e=>e.id===r));i&&n.enabled&&e.userCount>0&&i.usercount--;const o=n.groups;o.splice(o.indexOf(s),1)},addUserSubAdmin(e,t){let{userid:r,gid:s}=t;e.users.find((e=>e.id===r)).subadmin.push(s)},removeUserSubAdmin(e,t){let{userid:r,gid:s}=t;const i=e.users.find((e=>e.id===r)).subadmin;i.splice(i.indexOf(s),1)},deleteUser(e,t){const r=e.users.findIndex((e=>e.id===t));this.commit("updateUserCounts",{user:e.users[r],actionType:"remove"}),e.users.splice(r,1)},addUserData(e,t){const r=t.data.ocs.data;e.users.unshift(r),this.commit("updateUserCounts",{user:r,actionType:"create"})},enableDisableUser(e,t){let{userid:r,enabled:s}=t;const i=e.users.find((e=>e.id===r));i.enabled=s,this.commit("updateUserCounts",{user:i,actionType:s?"enable":"disable"})},updateUserCounts(e,t){let{user:r,actionType:s}=t;if(0===e.userCount)return;const i=e.groups.find((e=>"__nc_internal_recent"===e.id)),n=e.groups.find((e=>"disabled"===e.id));switch(s){case"enable":case"disable":n.usercount+=r.enabled?-1:1,i.usercount+=r.enabled?1:-1,e.userCount+=r.enabled?1:-1,r.groups.forEach((t=>{const s=e.groups.find((e=>e.id===t));s&&(s.disabled+=r.enabled?-1:1)}));break;case"create":i.usercount++,e.userCount++,r.groups.forEach((t=>{const r=e.groups.find((e=>e.id===t));r&&r.usercount++}));break;case"remove":r.enabled?(i.usercount--,e.userCount--,r.groups.forEach((t=>{const r=e.groups.find((e=>e.id===t));r?r.usercount--:console.warn("User group "+t+" does not exist during user removal")}))):(n.usercount--,r.groups.forEach((t=>{const r=e.groups.find((e=>e.id===t));r&&r.disabled--})));break;default:f.A.error(`Unknown action type in updateUserCounts: '${s}'`)}},setUserData(e,t){let{userid:r,key:s,value:i}=t;if("quota"===s){const t=(0,a.lT)(i,!0);e.users.find((e=>e.id===r))[s][s]=null!==t?t:i}else e.users.find((e=>e.id===r))[s]=i},resetUsers(e){e.users=[],e.usersOffset=0,e.disabledUsersOffset=0},resetGroups(e){const t=e.groups.filter((e=>["admin","__nc_internal_recent","disabled"].includes(e.id)));e.groups=[...t]},setShowConfig(e,t){let{key:r,value:s}=t;A.setItem(`account_settings__${r}`,JSON.stringify(s)),e.showConfig[r]=s},setGroupSorting(e,r){const s=e.orderBy;e.orderBy=r,d.Ay.post((0,l.Jv)("/settings/users/preferences/group.sortBy"),{value:String(r)}).catch((r=>{e.orderBy=s,(0,u.Qg)(t("settings","Could not set group sorting")),f.A.error(r)}))}},v={getUsers:e=>e.users,getGroups:e=>e.groups,getSortedGroups(e){const t=[...e.groups];return e.orderBy===p.q.UserCount?t.sort(((e,t)=>{const r=e.usercount-e.disabled,s=t.usercount-t.disabled;return r<s?1:s<r?-1:g.compare(e.name,t.name)})):t.sort(((e,t)=>g.compare(e.name,t.name)))},getGroupSorting:e=>e.orderBy,getPasswordPolicyMinLength:e=>e.minPasswordLength,getUsersOffset:e=>e.usersOffset,getUsersLimit:e=>e.usersLimit,getDisabledUsersOffset:e=>e.disabledUsersOffset,getDisabledUsersLimit:e=>e.disabledUsersLimit,getUserCount:e=>e.userCount,getShowConfig:e=>e.showConfig},L=d.Ay.CancelToken;let y=null;const O={state:I,mutations:N,getters:v,actions:{searchUsers(e,t){let{offset:r,limit:s,search:i}=t;return i="string"==typeof i?i:"",m.A.get((0,l.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:i})).catch((t=>{d.Ay.isCancel(t)||e.commit("API_FAILURE",t)}))},getUser:(e,t)=>m.A.get((0,l.KT)(`cloud/users/${t}`)).catch((t=>{d.Ay.isCancel(t)||e.commit("API_FAILURE",t)})),getUsers(e,t){let{offset:r,limit:s,search:i,group:n}=t;return y&&y.cancel("Operation canceled by another search request."),y=L.source(),i="string"==typeof i?i:"",i=i.replace(/in:[^\s]+/g,"").trim(),n="string"==typeof n?n:"",""!==n?m.A.get((0,l.KT)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(n),offset:r,limit:s,search:i}),{cancelToken:y.token}).then((t=>{const r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((t=>{d.Ay.isCancel(t)||e.commit("API_FAILURE",t)})):m.A.get((0,l.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:i}),{cancelToken:y.token}).then((t=>{const r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((t=>{d.Ay.isCancel(t)||e.commit("API_FAILURE",t)}))},async getRecentUsers(e,t){let{offset:r,limit:s,search:i}=t;const n=(0,l.KT)("cloud/users/recent?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:i});try{const t=await m.A.get(n),r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r}catch(t){e.commit("API_FAILURE",t)}},async getDisabledUsers(e,t){let{offset:r,limit:s,search:i}=t;const n=(0,l.KT)("cloud/users/disabled?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:i});try{const t=await m.A.get(n),r=Object.keys(t.data.ocs.data.users).length;return r>0&&(e.commit("appendUsers",t.data.ocs.data.users),e.commit("updateDisabledUsers",t.data.ocs.data.users)),r}catch(t){e.commit("API_FAILURE",t)}},getGroups(e,t){let{offset:r,limit:s,search:i}=t;i="string"==typeof i?i:"";const n=-1===s?"":`&limit=${s}`;return m.A.get((0,l.KT)("cloud/groups?offset={offset}&search={search}",{offset:r,search:i})+n).then((t=>Object.keys(t.data.ocs.data.groups).length>0&&(t.data.ocs.data.groups.forEach((function(t){e.commit("addGroup",{id:t,name:t})})),!0))).catch((t=>e.commit("API_FAILURE",t)))},getUsersFromList(e,t){let{offset:r,limit:s,search:i}=t;return i="string"==typeof i?i:"",m.A.get((0,l.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:i})).then((t=>Object.keys(t.data.ocs.data.users).length>0&&(e.commit("appendUsers",t.data.ocs.data.users),!0))).catch((t=>e.commit("API_FAILURE",t)))},getUsersFromGroup(e,t){let{groupid:r,offset:s,limit:i}=t;return m.A.get((0,l.KT)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:s,limit:i})).then((t=>e.commit("getUsersFromList",t.data.ocs.data.users))).catch((t=>e.commit("API_FAILURE",t)))},getPasswordPolicyMinLength:e=>!(!(0,o.F)().password_policy||!(0,o.F)().password_policy.minLength)&&(e.commit("setPasswordPolicyMinLength",(0,o.F)().password_policy.minLength),(0,o.F)().password_policy.minLength),addGroup:(e,t)=>m.A.requireAdmin().then((r=>m.A.post((0,l.KT)("cloud/groups"),{groupid:t}).then((r=>(e.commit("addGroup",{id:t,name:t}),{gid:t,displayName:t}))).catch((e=>{throw e})))).catch((r=>{throw e.commit("API_FAILURE",{gid:t,error:r}),r})),renameGroup(e,t){let{groupid:r,displayName:s}=t;return m.A.requireAdmin().then((t=>m.A.put((0,l.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:s}).then((t=>(e.commit("renameGroup",{gid:r,displayName:s}),{groupid:r,displayName:s}))).catch((e=>{throw e})))).catch((t=>{throw e.commit("API_FAILURE",{groupid:r,error:t}),t}))},removeGroup:(e,t)=>m.A.requireAdmin().then((r=>m.A.delete((0,l.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(t)})).then((r=>e.commit("removeGroup",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{gid:t,error:r}))),addUserGroup(e,t){let{userid:r,gid:s}=t;return m.A.requireAdmin().then((t=>m.A.post((0,l.KT)("cloud/users/{userid}/groups",{userid:r}),{groupid:s}).then((t=>e.commit("addUserGroup",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},removeUserGroup(e,t){let{userid:r,gid:s}=t;return m.A.requireAdmin().then((t=>m.A.delete((0,l.KT)("cloud/users/{userid}/groups",{userid:r}),{groupid:s}).then((t=>e.commit("removeUserGroup",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>{throw e.commit("API_FAILURE",{userid:r,error:t}),t}))},addUserSubAdmin(e,t){let{userid:r,gid:s}=t;return m.A.requireAdmin().then((t=>m.A.post((0,l.KT)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:s}).then((t=>e.commit("addUserSubAdmin",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},removeUserSubAdmin(e,t){let{userid:r,gid:s}=t;return m.A.requireAdmin().then((t=>m.A.delete((0,l.KT)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:s}).then((t=>e.commit("removeUserSubAdmin",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},async wipeUserDevices(e,t){try{return await m.A.requireAdmin(),await m.A.post((0,l.KT)("cloud/users/{userid}/wipe",{userid:t}))}catch(r){return e.commit("API_FAILURE",{userid:t,error:r}),Promise.reject(new Error("Failed to wipe user devices"))}},deleteUser:(e,t)=>m.A.requireAdmin().then((r=>m.A.delete((0,l.KT)("cloud/users/{userid}",{userid:t})).then((r=>e.commit("deleteUser",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),addUser(e,t){let{commit:r,dispatch:s}=e,{userid:i,password:n,displayName:o,email:a,groups:u,subadmin:c,quota:d,language:p,manager:h}=t;return m.A.requireAdmin().then((e=>m.A.post((0,l.KT)("cloud/users"),{userid:i,password:n,displayName:o,email:a,groups:u,subadmin:c,quota:d,language:p,manager:h}).then((e=>s("addUserData",i||e.data.ocs.data.id))).catch((e=>{throw e})))).catch((e=>{throw r("API_FAILURE",{userid:i,error:e}),e}))},addUserData:(e,t)=>m.A.requireAdmin().then((r=>m.A.get((0,l.KT)("cloud/users/{userid}",{userid:t})).then((t=>e.commit("addUserData",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),enableDisableUser(e,t){let{userid:r,enabled:s=!0}=t;const i=s?"enable":"disable";return m.A.requireAdmin().then((t=>m.A.put((0,l.KT)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:i})).then((t=>e.commit("enableDisableUser",{userid:r,enabled:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},async setUserData(e,t){let{userid:r,key:s,value:i}=t;const n=["email","displayname","manager"];if(-1!==["email","language","quota","displayname","password","manager"].indexOf(s)&&"string"==typeof i&&(-1===n.indexOf(s)&&i.length>0||-1!==n.indexOf(s)))try{return await m.A.requireAdmin(),await m.A.put((0,l.KT)("cloud/users/{userid}",{userid:r}),{key:s,value:i}),e.commit("setUserData",{userid:r,key:s,value:i})}catch(t){e.commit("API_FAILURE",{userid:r,error:t})}return Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:(e,t)=>m.A.requireAdmin().then((e=>m.A.post((0,l.KT)("cloud/users/{userid}/welcome",{userid:t})).then((e=>!0)).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r})))}};var x=s(85471);const T={apps:[],bundles:(0,c.C)("settings","appstoreBundles",[]),categories:[],updateCount:(0,c.C)("settings","appstoreUpdateCount",0),loading:{},gettingCategoriesPromise:null,appApiEnabled:(0,c.C)("settings","appApiEnabled",!1)},P={APPS_API_FAILURE(e,r){(0,u.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{isHTML:!0}),console.error(e,r)},initCategories(e,t){let{categories:r,updateCount:s}=t;e.categories=r,e.updateCount=s},updateCategories(e,t){e.gettingCategoriesPromise=t},setUpdateCount(e,t){e.updateCount=t},addCategory(e,t){e.categories.push(t)},appendCategories(e,t){e.categories=t},setAllApps(e,t){e.apps=t},setError(e,t){let{appId:r,error:s}=t;Array.isArray(r)||(r=[r]),r.forEach((t=>{e.apps.find((e=>e.id===t)).error=s}))},clearError(e,t){let{appId:r,error:s}=t;e.apps.find((e=>e.id===r)).error=null},enableApp(e,t){let{appId:r,groups:s}=t;const i=e.apps.find((e=>e.id===r));i.active=!0,i.groups=s,"app_api"===i.id&&(e.appApiEnabled=!0)},setInstallState(e,t){let{appId:r,canInstall:s}=t;const i=e.apps.find((e=>e.id===r));i&&(i.canInstall=!0===s)},disableApp(e,t){const r=e.apps.find((e=>e.id===t));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0),"app_api"===r.id&&(e.appApiEnabled=!1)},uninstallApp(e,t){e.apps.find((e=>e.id===t)).active=!1,e.apps.find((e=>e.id===t)).groups=[],e.apps.find((e=>e.id===t)).needsDownload=!0,e.apps.find((e=>e.id===t)).installed=!1,e.apps.find((e=>e.id===t)).canUnInstall=!1,e.apps.find((e=>e.id===t)).canInstall=!0,"app_api"===t&&(e.appApiEnabled=!1)},updateApp(e,t){const r=e.apps.find((e=>e.id===t)),s=r.update;r.update=null,r.version=s,e.updateCount--},resetApps(e){e.apps=[]},reset(e){e.apps=[],e.categories=[],e.updateCount=0},startLoading(e,t){Array.isArray(t)?t.forEach((t=>{x.Ay.set(e.loading,t,!0)})):x.Ay.set(e.loading,t,!0)},stopLoading(e,t){Array.isArray(t)?t.forEach((t=>{x.Ay.set(e.loading,t,!1)})):x.Ay.set(e.loading,t,!1)}},R={enableApp(e,r){let s,{appId:i,groups:n}=r;return s=Array.isArray(i)?i:[i],m.A.requireAdmin().then((r=>(e.commit("startLoading",s),e.commit("startLoading","install"),m.A.post((0,l.Jv)("settings/apps/enable"),{appIds:s,groups:n}).then((r=>(e.commit("stopLoading",s),e.commit("stopLoading","install"),s.forEach((t=>{e.commit("enableApp",{appId:t,groups:n})})),d.Ay.get((0,l.Jv)("apps/files/")).then((()=>{r.data.update_required&&((0,u.cf)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:()=>window.location.reload(),close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((()=>{Array.isArray(i)||((0,u.Qg)(t("settings","Error: This app cannot be enabled because it makes the server unstable")),e.commit("setError",{appId:s,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")}),e.dispatch("disableApp",{appId:i}))}))))).catch((t=>{e.commit("stopLoading",s),e.commit("stopLoading","install"),e.commit("setError",{appId:s,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:i,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:i,error:t})))},forceEnableApp(e,t){let r,{appId:s,groups:i}=t;return r=Array.isArray(s)?s:[s],m.A.requireAdmin().then((()=>(e.commit("startLoading",r),e.commit("startLoading","install"),m.A.post((0,l.Jv)("settings/apps/force"),{appId:s}).then((t=>{e.commit("setInstallState",{appId:s,canInstall:!0})})).catch((t=>{e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("setError",{appId:r,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:s,error:t})})).finally((()=>{e.commit("stopLoading",r),e.commit("stopLoading","install")}))))).catch((t=>e.commit("API_FAILURE",{appId:s,error:t})))},disableApp(e,t){let r,{appId:s}=t;return r=Array.isArray(s)?s:[s],m.A.requireAdmin().then((t=>(e.commit("startLoading",r),m.A.post((0,l.Jv)("settings/apps/disable"),{appIds:r}).then((t=>(e.commit("stopLoading",r),r.forEach((t=>{e.commit("disableApp",t)})),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:s,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:s,error:t})))},uninstallApp(e,t){let{appId:r}=t;return m.A.requireAdmin().then((t=>(e.commit("startLoading",r),m.A.get((0,l.Jv)(`settings/apps/uninstall/${r}`)).then((t=>(e.commit("stopLoading",r),e.commit("uninstallApp",r),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:r,error:t})))},updateApp(e,t){let{appId:r}=t;return m.A.requireAdmin().then((t=>(e.commit("startLoading",r),e.commit("startLoading","install"),m.A.get((0,l.Jv)(`settings/apps/update/${r}`)).then((t=>(e.commit("stopLoading","install"),e.commit("stopLoading",r),e.commit("updateApp",r),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:r,error:t})))},getAllApps:e=>(e.commit("startLoading","list"),m.A.get((0,l.Jv)("settings/apps/list")).then((t=>(e.commit("setAllApps",t.data.apps),e.commit("stopLoading","list"),!0))).catch((t=>e.commit("API_FAILURE",t)))),async getCategories(e){let{shouldRefetchCategories:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t||!e.state.gettingCategoriesPromise){e.commit("startLoading","categories");try{const t=m.A.get((0,l.Jv)("settings/apps/categories"));e.commit("updateCategories",t);const r=await t;return r.data.length>0?(e.commit("appendCategories",r.data),e.commit("stopLoading","categories"),!0):(e.commit("stopLoading","categories"),!1)}catch(t){e.commit("API_FAILURE",t)}}return e.state.gettingCategoriesPromise}},w={state:T,mutations:P,getters:{isAppApiEnabled:e=>e.appApiEnabled,loading:e=>function(t){return e.loading[t]},getCategories:e=>e.categories,getAllApps:e=>e.apps,getAppBundles:e=>e.bundles,getUpdateCount:e=>e.updateCount,getCategoryById:e=>t=>e.categories.find((e=>e.id===t))},actions:R},C={serverData:(0,c.C)("settings","usersSettings",{})},U={setServerData(e,t){e.serverData=t}},_={state:C,mutations:U,getters:{getServerData:e=>e.serverData},actions:{}},$={state:{},mutations:{},getters:{},actions:{setAppConfig(e,t){let{app:r,key:s,value:i}=t;return m.A.requireAdmin().then((e=>m.A.post((0,l.KT)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:s}),{value:i}).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{app:r,key:s,value:i,error:t})))}}},S={API_FAILURE(e,r){try{const e=r.error.response.data.ocs.meta.message;(0,u.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+e,{isHTML:!0})}catch(e){(0,u.Qg)(t("settings","An error occurred during the request. Unable to proceed."))}console.error(e,r)}};let F=null;const D=()=>(null===F&&(F=new i.il({modules:{users:O,apps:w,settings:_,oc:$},strict:!1,mutations:S})),F)},15916:(e,t,r)=>{"use strict";var s;r.d(t,{q:()=>s}),function(e){e[e.UserCount=1]="UserCount",e[e.GroupName=2]="GroupName"}(s||(s={}))},35810:(e,t,r)=>{"use strict";r.d(t,{Al:()=>s.r,H4:()=>s.c,Q$:()=>s.e,R3:()=>s.n,VL:()=>s.l,lJ:()=>s.d,lT:()=>c,pt:()=>s.F,ur:()=>p,v7:()=>l});var s=r(68251),i=(r(43627),r(53334)),n=r(380),o=r(65606);Error;const a=["B","KB","MB","GB","TB","PB"],u=["B","KiB","MiB","GiB","TiB","PiB"];function l(e,t=!1,r=!1,s=!1){r=r&&!s,"string"==typeof e&&(e=Number(e));let n=e>0?Math.floor(Math.log(e)/Math.log(s?1e3:1024)):0;n=Math.min((r?u.length:a.length)-1,n);const o=r?u[n]:a[n];let l=(e/Math.pow(s?1e3:1024,n)).toFixed(1);return!0===t&&0===n?("0.0"!==l?"< 1 ":"0 ")+(r?u[1]:a[1]):(l=n<2?parseFloat(l).toFixed(0):parseFloat(l).toLocaleString((0,i.lO)()),l+" "+o)}function c(e,t=!1){try{e=`${e}`.toLocaleLowerCase().replaceAll(/\s+/g,"").replaceAll(",",".")}catch(e){return null}const r=e.match(/^([0-9]*(\.[0-9]*)?)([kmgtp]?)(i?)b?$/);if(null===r||"."===r[1]||""===r[1])return null;const s=`${r[1]}`,i="i"===r[4]||t?1024:1e3;return Math.round(Number.parseFloat(s)*i**{"":0,k:1,m:2,g:3,t:4,p:5,e:6}[r[3]])}function d(e){return e instanceof Date?e.toISOString():String(e)}function p(e,t={}){const r={sortingMode:"basename",sortingOrder:"asc",...t};return function(e,t,r){r=r??[];const s=(t=t??[e=>e]).map(((e,t)=>"asc"===(r[t]??"asc")?1:-1)),n=Intl.Collator([(0,i.Z0)(),(0,i.lO)()],{numeric:!0,usage:"sort"});return[...e].sort(((e,r)=>{for(const[i,o]of t.entries()){const t=n.compare(d(o(e)),d(o(r)));if(0!==t)return t*s[i]}return 0}))}(e,[...r.sortFavoritesFirst?[e=>1!==e.attributes?.favorite]:[],...r.sortFoldersFirst?[e=>"folder"!==e.type]:[],..."basename"!==r.sortingMode?[e=>e[r.sortingMode]]:[],e=>{return(t=e.displayname||e.attributes?.displayname||e.basename).lastIndexOf(".")>0?t.slice(0,t.lastIndexOf(".")):t;var t},e=>e.basename],[...r.sortFavoritesFirst?["asc"]:[],...r.sortFoldersFirst?["asc"]:[],..."mtime"===r.sortingMode?["asc"===r.sortingOrder?"desc":"asc"]:[],..."mtime"!==r.sortingMode&&"basename"!==r.sortingMode?[r.sortingOrder]:[],r.sortingOrder,r.sortingOrder])}var h,g,m={},f={};function E(){return h||(h=1,function(e){const t=":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",r="["+t+"]["+t+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",s=new RegExp("^"+r+"$");e.isExist=function(e){return void 0!==e},e.isEmptyObject=function(e){return 0===Object.keys(e).length},e.merge=function(e,t,r){if(t){const s=Object.keys(t),i=s.length;for(let n=0;n<i;n++)e[s[n]]="strict"===r?[t[s[n]]]:t[s[n]]}},e.getValue=function(t){return e.isExist(t)?t:""},e.isName=function(e){return!(null==s.exec(e))},e.getAllMatches=function(e,t){const r=[];let s=t.exec(e);for(;s;){const i=[];i.startIndex=t.lastIndex-s[0].length;const n=s.length;for(let e=0;e<n;e++)i.push(s[e]);r.push(i),s=t.exec(e)}return r},e.nameRegexp=r}(f)),f}function A(){if(g)return m;g=1;const e=E(),t={allowBooleanAttributes:!1,unpairedTags:[]};function r(e){return" "===e||"\t"===e||"\n"===e||"\r"===e}function s(e,t){const r=t;for(;t<e.length;t++)if("?"!=e[t]&&" "!=e[t]);else{const s=e.substr(r,t-r);if(t>5&&"xml"===s)return d("InvalidXml","XML declaration allowed only at the start of the document.",h(e,t));if("?"==e[t]&&">"==e[t+1]){t++;break}}return t}function i(e,t){if(e.length>t+5&&"-"===e[t+1]&&"-"===e[t+2]){for(t+=3;t<e.length;t++)if("-"===e[t]&&"-"===e[t+1]&&">"===e[t+2]){t+=2;break}}else if(e.length>t+8&&"D"===e[t+1]&&"O"===e[t+2]&&"C"===e[t+3]&&"T"===e[t+4]&&"Y"===e[t+5]&&"P"===e[t+6]&&"E"===e[t+7]){let r=1;for(t+=8;t<e.length;t++)if("<"===e[t])r++;else if(">"===e[t]&&(r--,0===r))break}else if(e.length>t+9&&"["===e[t+1]&&"C"===e[t+2]&&"D"===e[t+3]&&"A"===e[t+4]&&"T"===e[t+5]&&"A"===e[t+6]&&"["===e[t+7])for(t+=8;t<e.length;t++)if("]"===e[t]&&"]"===e[t+1]&&">"===e[t+2]){t+=2;break}return t}m.validate=function(n,o){o=Object.assign({},t,o);const u=[];let p=!1,g=!1;"\ufeff"===n[0]&&(n=n.substr(1));for(let t=0;t<n.length;t++)if("<"===n[t]&&"?"===n[t+1]){if(t+=2,t=s(n,t),t.err)return t}else{if("<"!==n[t]){if(r(n[t]))continue;return d("InvalidChar","char '"+n[t]+"' is not expected.",h(n,t))}{let f=t;if(t++,"!"===n[t]){t=i(n,t);continue}{let E=!1;"/"===n[t]&&(E=!0,t++);let A="";for(;t<n.length&&">"!==n[t]&&" "!==n[t]&&"\t"!==n[t]&&"\n"!==n[t]&&"\r"!==n[t];t++)A+=n[t];if(A=A.trim(),"/"===A[A.length-1]&&(A=A.substring(0,A.length-1),t--),m=A,!e.isName(m)){let e;return e=0===A.trim().length?"Invalid space after '<'.":"Tag '"+A+"' is an invalid name.",d("InvalidTag",e,h(n,t))}const b=a(n,t);if(!1===b)return d("InvalidAttr","Attributes for '"+A+"' have open quote.",h(n,t));let I=b.value;if(t=b.index,"/"===I[I.length-1]){const e=t-I.length;I=I.substring(0,I.length-1);const r=l(I,o);if(!0!==r)return d(r.err.code,r.err.msg,h(n,e+r.err.line));p=!0}else if(E){if(!b.tagClosed)return d("InvalidTag","Closing tag '"+A+"' doesn't have proper closing.",h(n,t));if(I.trim().length>0)return d("InvalidTag","Closing tag '"+A+"' can't have attributes or invalid starting.",h(n,f));if(0===u.length)return d("InvalidTag","Closing tag '"+A+"' has not been opened.",h(n,f));{const e=u.pop();if(A!==e.tagName){let t=h(n,e.tagStartPos);return d("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+t.line+", col "+t.col+") instead of closing tag '"+A+"'.",h(n,f))}0==u.length&&(g=!0)}}else{const e=l(I,o);if(!0!==e)return d(e.err.code,e.err.msg,h(n,t-I.length+e.err.line));if(!0===g)return d("InvalidXml","Multiple possible root nodes found.",h(n,t));-1!==o.unpairedTags.indexOf(A)||u.push({tagName:A,tagStartPos:f}),p=!0}for(t++;t<n.length;t++)if("<"===n[t]){if("!"===n[t+1]){t++,t=i(n,t);continue}if("?"!==n[t+1])break;if(t=s(n,++t),t.err)return t}else if("&"===n[t]){const e=c(n,t);if(-1==e)return d("InvalidChar","char '&' is not expected.",h(n,t));t=e}else if(!0===g&&!r(n[t]))return d("InvalidXml","Extra text at the end",h(n,t));"<"===n[t]&&t--}}}var m;return p?1==u.length?d("InvalidTag","Unclosed tag '"+u[0].tagName+"'.",h(n,u[0].tagStartPos)):!(u.length>0)||d("InvalidXml","Invalid '"+JSON.stringify(u.map((e=>e.tagName)),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):d("InvalidXml","Start tag expected.",1)};const n='"',o="'";function a(e,t){let r="",s="",i=!1;for(;t<e.length;t++){if(e[t]===n||e[t]===o)""===s?s=e[t]:s!==e[t]||(s="");else if(">"===e[t]&&""===s){i=!0;break}r+=e[t]}return""===s&&{value:r,index:t,tagClosed:i}}const u=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function l(t,r){const s=e.getAllMatches(t,u),i={};for(let e=0;e<s.length;e++){if(0===s[e][1].length)return d("InvalidAttr","Attribute '"+s[e][2]+"' has no space in starting.",f(s[e]));if(void 0!==s[e][3]&&void 0===s[e][4])return d("InvalidAttr","Attribute '"+s[e][2]+"' is without value.",f(s[e]));if(void 0===s[e][3]&&!r.allowBooleanAttributes)return d("InvalidAttr","boolean attribute '"+s[e][2]+"' is not allowed.",f(s[e]));const t=s[e][2];if(!p(t))return d("InvalidAttr","Attribute '"+t+"' is an invalid name.",f(s[e]));if(i.hasOwnProperty(t))return d("InvalidAttr","Attribute '"+t+"' is repeated.",f(s[e]));i[t]=1}return!0}function c(e,t){if(";"===e[++t])return-1;if("#"===e[t])return function(e,t){let r=/\d/;for("x"===e[t]&&(t++,r=/[\da-fA-F]/);t<e.length;t++){if(";"===e[t])return t;if(!e[t].match(r))break}return-1}(e,++t);let r=0;for(;t<e.length;t++,r++)if(!(e[t].match(/\w/)&&r<20)){if(";"===e[t])break;return-1}return t}function d(e,t,r){return{err:{code:e,msg:t,line:r.line||r,col:r.col}}}function p(t){return e.isName(t)}function h(e,t){const r=e.substring(0,t).split(/\r?\n/);return{line:r.length,col:r[r.length-1].length+1}}function f(e){return e.startIndex+e[1].length}return m}var b,I,N,v,L,y,O,x,T,P,R,w={};function C(){return T?x:(T=1,x=function(e){return"function"==typeof e?e:Array.isArray(e)?t=>{for(const r of e){if("string"==typeof r&&t===r)return!0;if(r instanceof RegExp&&r.test(t))return!0}}:()=>!1})}var U,_,$,S,F,D,G,k,M,j,B,V,X,q={};function K(){if(U)return q;function e(i,n,o){let a;const u={};for(let l=0;l<i.length;l++){const c=i[l],d=t(c);let p="";if(p=void 0===o?d:o+"."+d,d===n.textNodeName)void 0===a?a=c[d]:a+=""+c[d];else{if(void 0===d)continue;if(c[d]){let t=e(c[d],n,p);const i=s(t,n);c[":@"]?r(t,c[":@"],p,n):1!==Object.keys(t).length||void 0===t[n.textNodeName]||n.alwaysCreateTextNode?0===Object.keys(t).length&&(n.alwaysCreateTextNode?t[n.textNodeName]="":t=""):t=t[n.textNodeName],void 0!==u[d]&&u.hasOwnProperty(d)?(Array.isArray(u[d])||(u[d]=[u[d]]),u[d].push(t)):n.isArray(d,p,i)?u[d]=[t]:u[d]=t}}}return"string"==typeof a?a.length>0&&(u[n.textNodeName]=a):void 0!==a&&(u[n.textNodeName]=a),u}function t(e){const t=Object.keys(e);for(let e=0;e<t.length;e++){const r=t[e];if(":@"!==r)return r}}function r(e,t,r,s){if(t){const i=Object.keys(t),n=i.length;for(let o=0;o<n;o++){const n=i[o];s.isArray(n,r+"."+n,!0,!0)?e[n]=[t[n]]:e[n]=t[n]}}}function s(e,t){const{textNodeName:r}=t,s=Object.keys(e).length;return 0===s||!(1!==s||!e[r]&&"boolean"!=typeof e[r]&&0!==e[r])}return U=1,q.prettify=function(t,r){return e(t,r)},q}function H(){if($)return _;$=1;const{buildOptions:e}=function(){if(b)return w;b=1;const e={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(e,t){return t},attributeValueProcessor:function(e,t){return t},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(e,t,r){return e}};return w.buildOptions=function(t){return Object.assign({},e,t)},w.defaultOptions=e,w}(),t=function(){if(R)return P;R=1;const e=E(),t=N?I:(N=1,I=class{constructor(e){this.tagname=e,this.child=[],this[":@"]={}}add(e,t){"__proto__"===e&&(e="#__proto__"),this.child.push({[e]:t})}addChild(e){"__proto__"===e.tagname&&(e.tagname="#__proto__"),e[":@"]&&Object.keys(e[":@"]).length>0?this.child.push({[e.tagname]:e.child,":@":e[":@"]}):this.child.push({[e.tagname]:e.child})}}),r=function(){if(L)return v;L=1;const e=E();function t(e,t){let r="";for(;t<e.length&&"'"!==e[t]&&'"'!==e[t];t++)r+=e[t];if(r=r.trim(),-1!==r.indexOf(" "))throw new Error("External entites are not supported");const s=e[t++];let i="";for(;t<e.length&&e[t]!==s;t++)i+=e[t];return[r,i,t]}function r(e,t){return"!"===e[t+1]&&"E"===e[t+2]&&"N"===e[t+3]&&"T"===e[t+4]&&"I"===e[t+5]&&"T"===e[t+6]&&"Y"===e[t+7]}function s(e,t){return"!"===e[t+1]&&"E"===e[t+2]&&"L"===e[t+3]&&"E"===e[t+4]&&"M"===e[t+5]&&"E"===e[t+6]&&"N"===e[t+7]&&"T"===e[t+8]}function i(e,t){return"!"===e[t+1]&&"A"===e[t+2]&&"T"===e[t+3]&&"T"===e[t+4]&&"L"===e[t+5]&&"I"===e[t+6]&&"S"===e[t+7]&&"T"===e[t+8]}function n(e,t){return"!"===e[t+1]&&"N"===e[t+2]&&"O"===e[t+3]&&"T"===e[t+4]&&"A"===e[t+5]&&"T"===e[t+6]&&"I"===e[t+7]&&"O"===e[t+8]&&"N"===e[t+9]}function o(t){if(e.isName(t))return t;throw new Error(`Invalid entity name ${t}`)}return v=function(e,a){const u={};if("O"!==e[a+3]||"C"!==e[a+4]||"T"!==e[a+5]||"Y"!==e[a+6]||"P"!==e[a+7]||"E"!==e[a+8])throw new Error("Invalid Tag instead of DOCTYPE");{a+=9;let l=1,c=!1,d=!1,p="";for(;a<e.length;a++)if("<"!==e[a]||d)if(">"===e[a]){if(d?"-"===e[a-1]&&"-"===e[a-2]&&(d=!1,l--):l--,0===l)break}else"["===e[a]?c=!0:p+=e[a];else{if(c&&r(e,a)){let r,s;a+=7,[r,s,a]=t(e,a+1),-1===s.indexOf("&")&&(u[o(r)]={regx:RegExp(`&${r};`,"g"),val:s})}else c&&s(e,a)||c&&i(e,a)?a+=8:c&&n(e,a)?a+=9:d=!0;l++,p=""}if(0!==l)throw new Error("Unclosed DOCTYPE")}return{entities:u,i:a}}}(),s=function(){if(O)return y;O=1;const e=/^[-+]?0x[a-fA-F0-9]+$/,t=/^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/;!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);const r={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};return y=function(s,i={}){if(i=Object.assign({},r,i),!s||"string"!=typeof s)return s;let n=s.trim();if(void 0!==i.skipLike&&i.skipLike.test(n))return s;if(i.hex&&e.test(n))return Number.parseInt(n,16);{const e=t.exec(n);if(e){const t=e[1],r=e[2];let a=(o=e[3])&&-1!==o.indexOf(".")?("."===(o=o.replace(/0+$/,""))?o="0":"."===o[0]?o="0"+o:"."===o[o.length-1]&&(o=o.substr(0,o.length-1)),o):o;const u=e[4]||e[6];if(!i.leadingZeros&&r.length>0&&t&&"."!==n[2])return s;if(!i.leadingZeros&&r.length>0&&!t&&"."!==n[1])return s;{const e=Number(n),o=""+e;return-1!==o.search(/[eE]/)||u?i.eNotation?e:s:-1!==n.indexOf(".")?"0"===o&&""===a||o===a||t&&o==="-"+a?e:s:r?a===o||t+a===o?e:s:n===o||n===t+o?e:s}}return s}var o}}(),i=C();function n(e){const t=Object.keys(e);for(let r=0;r<t.length;r++){const s=t[r];this.lastEntities[s]={regex:new RegExp("&"+s+";","g"),val:e[s]}}}function o(e,t,r,s,i,n,o){if(void 0!==e&&(this.options.trimValues&&!s&&(e=e.trim()),e.length>0)){o||(e=this.replaceEntitiesValue(e));const s=this.options.tagValueProcessor(t,e,r,i,n);return null==s?e:typeof s!=typeof e||s!==e?s:this.options.trimValues||e.trim()===e?b(e,this.options.parseTagValue,this.options.numberParseOptions):e}}function a(e){if(this.options.removeNSPrefix){const t=e.split(":"),r="/"===e.charAt(0)?"/":"";if("xmlns"===t[0])return"";2===t.length&&(e=r+t[1])}return e}const u=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function l(t,r,s){if(!0!==this.options.ignoreAttributes&&"string"==typeof t){const s=e.getAllMatches(t,u),i=s.length,n={};for(let e=0;e<i;e++){const t=this.resolveNameSpace(s[e][1]);if(this.ignoreAttributesFn(t,r))continue;let i=s[e][4],o=this.options.attributeNamePrefix+t;if(t.length)if(this.options.transformAttributeName&&(o=this.options.transformAttributeName(o)),"__proto__"===o&&(o="#__proto__"),void 0!==i){this.options.trimValues&&(i=i.trim()),i=this.replaceEntitiesValue(i);const e=this.options.attributeValueProcessor(t,i,r);n[o]=null==e?i:typeof e!=typeof i||e!==i?e:b(i,this.options.parseAttributeValue,this.options.numberParseOptions)}else this.options.allowBooleanAttributes&&(n[o]=!0)}if(!Object.keys(n).length)return;if(this.options.attributesGroupName){const e={};return e[this.options.attributesGroupName]=n,e}return n}}const c=function(e){e=e.replace(/\r\n?/g,"\n");const s=new t("!xml");let i=s,n="",o="";for(let a=0;a<e.length;a++)if("<"===e[a])if("/"===e[a+1]){const t=m(e,">",a,"Closing Tag is not closed.");let r=e.substring(a+2,t).trim();if(this.options.removeNSPrefix){const e=r.indexOf(":");-1!==e&&(r=r.substr(e+1))}this.options.transformTagName&&(r=this.options.transformTagName(r)),i&&(n=this.saveTextToParentTag(n,i,o));const s=o.substring(o.lastIndexOf(".")+1);if(r&&-1!==this.options.unpairedTags.indexOf(r))throw new Error(`Unpaired tag can not be used as closing tag: </${r}>`);let u=0;s&&-1!==this.options.unpairedTags.indexOf(s)?(u=o.lastIndexOf(".",o.lastIndexOf(".")-1),this.tagsNodeStack.pop()):u=o.lastIndexOf("."),o=o.substring(0,u),i=this.tagsNodeStack.pop(),n="",a=t}else if("?"===e[a+1]){let r=f(e,a,!1,"?>");if(!r)throw new Error("Pi Tag is not closed.");if(n=this.saveTextToParentTag(n,i,o),this.options.ignoreDeclaration&&"?xml"===r.tagName||this.options.ignorePiTags);else{const e=new t(r.tagName);e.add(this.options.textNodeName,""),r.tagName!==r.tagExp&&r.attrExpPresent&&(e[":@"]=this.buildAttributesMap(r.tagExp,o,r.tagName)),this.addChild(i,e,o)}a=r.closeIndex+1}else if("!--"===e.substr(a+1,3)){const t=m(e,"--\x3e",a+4,"Comment is not closed.");if(this.options.commentPropName){const r=e.substring(a+4,t-2);n=this.saveTextToParentTag(n,i,o),i.add(this.options.commentPropName,[{[this.options.textNodeName]:r}])}a=t}else if("!D"===e.substr(a+1,2)){const t=r(e,a);this.docTypeEntities=t.entities,a=t.i}else if("!["===e.substr(a+1,2)){const t=m(e,"]]>",a,"CDATA is not closed.")-2,r=e.substring(a+9,t);n=this.saveTextToParentTag(n,i,o);let s=this.parseTextData(r,i.tagname,o,!0,!1,!0,!0);null==s&&(s=""),this.options.cdataPropName?i.add(this.options.cdataPropName,[{[this.options.textNodeName]:r}]):i.add(this.options.textNodeName,s),a=t+2}else{let r=f(e,a,this.options.removeNSPrefix),u=r.tagName;const l=r.rawTagName;let c=r.tagExp,d=r.attrExpPresent,p=r.closeIndex;this.options.transformTagName&&(u=this.options.transformTagName(u)),i&&n&&"!xml"!==i.tagname&&(n=this.saveTextToParentTag(n,i,o,!1));const h=i;if(h&&-1!==this.options.unpairedTags.indexOf(h.tagname)&&(i=this.tagsNodeStack.pop(),o=o.substring(0,o.lastIndexOf("."))),u!==s.tagname&&(o+=o?"."+u:u),this.isItStopNode(this.options.stopNodes,o,u)){let s="";if(c.length>0&&c.lastIndexOf("/")===c.length-1)"/"===u[u.length-1]?(u=u.substr(0,u.length-1),o=o.substr(0,o.length-1),c=u):c=c.substr(0,c.length-1),a=r.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(u))a=r.closeIndex;else{const t=this.readStopNodeData(e,l,p+1);if(!t)throw new Error(`Unexpected end of ${l}`);a=t.i,s=t.tagContent}const n=new t(u);u!==c&&d&&(n[":@"]=this.buildAttributesMap(c,o,u)),s&&(s=this.parseTextData(s,u,o,!0,d,!0,!0)),o=o.substr(0,o.lastIndexOf(".")),n.add(this.options.textNodeName,s),this.addChild(i,n,o)}else{if(c.length>0&&c.lastIndexOf("/")===c.length-1){"/"===u[u.length-1]?(u=u.substr(0,u.length-1),o=o.substr(0,o.length-1),c=u):c=c.substr(0,c.length-1),this.options.transformTagName&&(u=this.options.transformTagName(u));const e=new t(u);u!==c&&d&&(e[":@"]=this.buildAttributesMap(c,o,u)),this.addChild(i,e,o),o=o.substr(0,o.lastIndexOf("."))}else{const e=new t(u);this.tagsNodeStack.push(i),u!==c&&d&&(e[":@"]=this.buildAttributesMap(c,o,u)),this.addChild(i,e,o),i=e}n="",a=p}}else n+=e[a];return s.child};function d(e,t,r){const s=this.options.updateTag(t.tagname,r,t[":@"]);!1===s||("string"==typeof s?(t.tagname=s,e.addChild(t)):e.addChild(t))}const p=function(e){if(this.options.processEntities){for(let t in this.docTypeEntities){const r=this.docTypeEntities[t];e=e.replace(r.regx,r.val)}for(let t in this.lastEntities){const r=this.lastEntities[t];e=e.replace(r.regex,r.val)}if(this.options.htmlEntities)for(let t in this.htmlEntities){const r=this.htmlEntities[t];e=e.replace(r.regex,r.val)}e=e.replace(this.ampEntity.regex,this.ampEntity.val)}return e};function h(e,t,r,s){return e&&(void 0===s&&(s=0===Object.keys(t.child).length),void 0!==(e=this.parseTextData(e,t.tagname,r,!1,!!t[":@"]&&0!==Object.keys(t[":@"]).length,s))&&""!==e&&t.add(this.options.textNodeName,e),e=""),e}function g(e,t,r){const s="*."+r;for(const r in e){const i=e[r];if(s===i||t===i)return!0}return!1}function m(e,t,r,s){const i=e.indexOf(t,r);if(-1===i)throw new Error(s);return i+t.length-1}function f(e,t,r,s=">"){const i=function(e,t,r=">"){let s,i="";for(let n=t;n<e.length;n++){let t=e[n];if(s)t===s&&(s="");else if('"'===t||"'"===t)s=t;else if(t===r[0]){if(!r[1])return{data:i,index:n};if(e[n+1]===r[1])return{data:i,index:n}}else"\t"===t&&(t=" ");i+=t}}(e,t+1,s);if(!i)return;let n=i.data;const o=i.index,a=n.search(/\s/);let u=n,l=!0;-1!==a&&(u=n.substring(0,a),n=n.substring(a+1).trimStart());const c=u;if(r){const e=u.indexOf(":");-1!==e&&(u=u.substr(e+1),l=u!==i.data.substr(e+1))}return{tagName:u,tagExp:n,closeIndex:o,attrExpPresent:l,rawTagName:c}}function A(e,t,r){const s=r;let i=1;for(;r<e.length;r++)if("<"===e[r])if("/"===e[r+1]){const n=m(e,">",r,`${t} is not closed`);if(e.substring(r+2,n).trim()===t&&(i--,0===i))return{tagContent:e.substring(s,r),i:n};r=n}else if("?"===e[r+1])r=m(e,"?>",r+1,"StopNode is not closed.");else if("!--"===e.substr(r+1,3))r=m(e,"--\x3e",r+3,"StopNode is not closed.");else if("!["===e.substr(r+1,2))r=m(e,"]]>",r,"StopNode is not closed.")-2;else{const s=f(e,r,">");s&&((s&&s.tagName)===t&&"/"!==s.tagExp[s.tagExp.length-1]&&i++,r=s.closeIndex)}}function b(t,r,i){if(r&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&s(t,i)}return e.isExist(t)?t:""}return P=class{constructor(e){this.options=e,this.currentNode=null,this.tagsNodeStack=[],this.docTypeEntities={},this.lastEntities={apos:{regex:/&(apos|#39|#x27);/g,val:"'"},gt:{regex:/&(gt|#62|#x3E);/g,val:">"},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:(e,t)=>String.fromCharCode(Number.parseInt(t,10))},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:(e,t)=>String.fromCharCode(Number.parseInt(t,16))}},this.addExternalEntities=n,this.parseXml=c,this.parseTextData=o,this.resolveNameSpace=a,this.buildAttributesMap=l,this.isItStopNode=g,this.replaceEntitiesValue=p,this.readStopNodeData=A,this.saveTextToParentTag=h,this.addChild=d,this.ignoreAttributesFn=i(this.options.ignoreAttributes)}}}(),{prettify:r}=K(),s=A();return _=class{constructor(t){this.externalEntities={},this.options=e(t)}parse(e,i){if("string"==typeof e);else{if(!e.toString)throw new Error("XML data is accepted in String or Bytes[] form.");e=e.toString()}if(i){!0===i&&(i={});const t=s.validate(e,i);if(!0!==t)throw Error(`${t.err.msg}:${t.err.line}:${t.err.col}`)}const n=new t(this.options);n.addExternalEntities(this.externalEntities);const o=n.parseXml(e);return this.options.preserveOrder||void 0===o?o:r(o,this.options)}addEntity(e,t){if(-1!==t.indexOf("&"))throw new Error("Entity value can't have '&'");if(-1!==e.indexOf("&")||-1!==e.indexOf(";"))throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '&#xD;'");if("&"===t)throw new Error("An entity with value '&' is not permitted");this.externalEntities[e]=t}}}function J(){if(F)return S;function e(n,o,a,u){let l="",c=!1;for(let d=0;d<n.length;d++){const p=n[d],h=t(p);if(void 0===h)continue;let g="";if(g=0===a.length?h:`${a}.${h}`,h===o.textNodeName){let e=p[h];s(g,o)||(e=o.tagValueProcessor(h,e),e=i(e,o)),c&&(l+=u),l+=e,c=!1;continue}if(h===o.cdataPropName){c&&(l+=u),l+=`<![CDATA[${p[h][0][o.textNodeName]}]]>`,c=!1;continue}if(h===o.commentPropName){l+=u+`\x3c!--${p[h][0][o.textNodeName]}--\x3e`,c=!0;continue}if("?"===h[0]){const e=r(p[":@"],o),t="?xml"===h?"":u;let s=p[h][0][o.textNodeName];s=0!==s.length?" "+s:"",l+=t+`<${h}${s}${e}?>`,c=!0;continue}let m=u;""!==m&&(m+=o.indentBy);const f=u+`<${h}${r(p[":@"],o)}`,E=e(p[h],o,g,m);-1!==o.unpairedTags.indexOf(h)?o.suppressUnpairedNode?l+=f+">":l+=f+"/>":E&&0!==E.length||!o.suppressEmptyNode?E&&E.endsWith(">")?l+=f+`>${E}${u}</${h}>`:(l+=f+">",E&&""!==u&&(E.includes("/>")||E.includes("</"))?l+=u+o.indentBy+E+u:l+=E,l+=`</${h}>`):l+=f+"/>",c=!0}return l}function t(e){const t=Object.keys(e);for(let r=0;r<t.length;r++){const s=t[r];if(e.hasOwnProperty(s)&&":@"!==s)return s}}function r(e,t){let r="";if(e&&!t.ignoreAttributes)for(let s in e){if(!e.hasOwnProperty(s))continue;let n=t.attributeValueProcessor(s,e[s]);n=i(n,t),!0===n&&t.suppressBooleanAttributes?r+=` ${s.substr(t.attributeNamePrefix.length)}`:r+=` ${s.substr(t.attributeNamePrefix.length)}="${n}"`}return r}function s(e,t){let r=(e=e.substr(0,e.length-t.textNodeName.length-1)).substr(e.lastIndexOf(".")+1);for(let s in t.stopNodes)if(t.stopNodes[s]===e||t.stopNodes[s]==="*."+r)return!0;return!1}function i(e,t){if(e&&e.length>0&&t.processEntities)for(let r=0;r<t.entities.length;r++){const s=t.entities[r];e=e.replace(s.regex,s.val)}return e}return F=1,S=function(t,r){let s="";return r.format&&r.indentBy.length>0&&(s="\n"),e(t,r,"",s)}}function Y(){if(B)return j;B=1;const e="object"==typeof o&&o.env&&o.env.NODE_DEBUG&&/\bsemver\b/i.test(o.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};return j=e}function Z(){if(X)return V;X=1;const e=Number.MAX_SAFE_INTEGER||9007199254740991;return V={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:e,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}}!function(){if(M)return k;M=1;const e=A(),t=H(),r=function(){if(G)return D;G=1;const e=J(),t=C(),r={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(e,t){return t},attributeValueProcessor:function(e,t){return t},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&amp;"},{regex:new RegExp(">","g"),val:"&gt;"},{regex:new RegExp("<","g"),val:"&lt;"},{regex:new RegExp("'","g"),val:"&apos;"},{regex:new RegExp('"',"g"),val:"&quot;"}],processEntities:!0,stopNodes:[],oneListGroup:!1};function s(e){this.options=Object.assign({},r,e),!0===this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.ignoreAttributesFn=t(this.options.ignoreAttributes),this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=o),this.processTextOrObjNode=i,this.options.format?(this.indentate=n,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function i(e,t,r,s){const i=this.j2x(e,r+1,s.concat(t));return void 0!==e[this.options.textNodeName]&&1===Object.keys(e).length?this.buildTextValNode(e[this.options.textNodeName],t,i.attrStr,r):this.buildObjectNode(i.val,t,i.attrStr,r)}function n(e){return this.options.indentBy.repeat(e)}function o(e){return!(!e.startsWith(this.options.attributeNamePrefix)||e===this.options.textNodeName)&&e.substr(this.attrPrefixLen)}return s.prototype.build=function(t){return this.options.preserveOrder?e(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0,[]).val)},s.prototype.j2x=function(e,t,r){let s="",i="";const n=r.join(".");for(let o in e)if(Object.prototype.hasOwnProperty.call(e,o))if(void 0===e[o])this.isAttribute(o)&&(i+="");else if(null===e[o])this.isAttribute(o)?i+="":"?"===o[0]?i+=this.indentate(t)+"<"+o+"?"+this.tagEndChar:i+=this.indentate(t)+"<"+o+"/"+this.tagEndChar;else if(e[o]instanceof Date)i+=this.buildTextValNode(e[o],o,"",t);else if("object"!=typeof e[o]){const r=this.isAttribute(o);if(r&&!this.ignoreAttributesFn(r,n))s+=this.buildAttrPairStr(r,""+e[o]);else if(!r)if(o===this.options.textNodeName){let t=this.options.tagValueProcessor(o,""+e[o]);i+=this.replaceEntitiesValue(t)}else i+=this.buildTextValNode(e[o],o,"",t)}else if(Array.isArray(e[o])){const s=e[o].length;let n="",a="";for(let u=0;u<s;u++){const s=e[o][u];if(void 0===s);else if(null===s)"?"===o[0]?i+=this.indentate(t)+"<"+o+"?"+this.tagEndChar:i+=this.indentate(t)+"<"+o+"/"+this.tagEndChar;else if("object"==typeof s)if(this.options.oneListGroup){const e=this.j2x(s,t+1,r.concat(o));n+=e.val,this.options.attributesGroupName&&s.hasOwnProperty(this.options.attributesGroupName)&&(a+=e.attrStr)}else n+=this.processTextOrObjNode(s,o,t,r);else if(this.options.oneListGroup){let e=this.options.tagValueProcessor(o,s);e=this.replaceEntitiesValue(e),n+=e}else n+=this.buildTextValNode(s,o,"",t)}this.options.oneListGroup&&(n=this.buildObjectNode(n,o,a,t)),i+=n}else if(this.options.attributesGroupName&&o===this.options.attributesGroupName){const t=Object.keys(e[o]),r=t.length;for(let i=0;i<r;i++)s+=this.buildAttrPairStr(t[i],""+e[o][t[i]])}else i+=this.processTextOrObjNode(e[o],o,t,r);return{attrStr:s,val:i}},s.prototype.buildAttrPairStr=function(e,t){return t=this.options.attributeValueProcessor(e,""+t),t=this.replaceEntitiesValue(t),this.options.suppressBooleanAttributes&&"true"===t?" "+e:" "+e+'="'+t+'"'},s.prototype.buildObjectNode=function(e,t,r,s){if(""===e)return"?"===t[0]?this.indentate(s)+"<"+t+r+"?"+this.tagEndChar:this.indentate(s)+"<"+t+r+this.closeTag(t)+this.tagEndChar;{let i="</"+t+this.tagEndChar,n="";return"?"===t[0]&&(n="?",i=""),!r&&""!==r||-1!==e.indexOf("<")?!1!==this.options.commentPropName&&t===this.options.commentPropName&&0===n.length?this.indentate(s)+`\x3c!--${e}--\x3e`+this.newLine:this.indentate(s)+"<"+t+r+n+this.tagEndChar+e+this.indentate(s)+i:this.indentate(s)+"<"+t+r+n+">"+e+i}},s.prototype.closeTag=function(e){let t="";return-1!==this.options.unpairedTags.indexOf(e)?this.options.suppressUnpairedNode||(t="/"):t=this.options.suppressEmptyNode?"/":`></${e}`,t},s.prototype.buildTextValNode=function(e,t,r,s){if(!1!==this.options.cdataPropName&&t===this.options.cdataPropName)return this.indentate(s)+`<![CDATA[${e}]]>`+this.newLine;if(!1!==this.options.commentPropName&&t===this.options.commentPropName)return this.indentate(s)+`\x3c!--${e}--\x3e`+this.newLine;if("?"===t[0])return this.indentate(s)+"<"+t+r+"?"+this.tagEndChar;{let i=this.options.tagValueProcessor(t,e);return i=this.replaceEntitiesValue(i),""===i?this.indentate(s)+"<"+t+r+this.closeTag(t)+this.tagEndChar:this.indentate(s)+"<"+t+r+">"+i+"</"+t+this.tagEndChar}},s.prototype.replaceEntitiesValue=function(e){if(e&&e.length>0&&this.options.processEntities)for(let t=0;t<this.options.entities.length;t++){const r=this.options.entities[t];e=e.replace(r.regex,r.val)}return e},D=s}();k={XMLParser:t,XMLValidator:e,XMLBuilder:r}}();var z,Q,W,ee,te,re,se,ie,ne,oe,ae,ue,le,ce={exports:{}};function de(){if(se)return re;se=1;const e=Y(),{MAX_LENGTH:t,MAX_SAFE_INTEGER:r}=Z(),{safeRe:s,t:i}=(z||(z=1,function(e,t){const{MAX_SAFE_COMPONENT_LENGTH:r,MAX_SAFE_BUILD_LENGTH:s,MAX_LENGTH:i}=Z(),n=Y(),o=(t=e.exports={}).re=[],a=t.safeRe=[],u=t.src=[],l=t.t={};let c=0;const d="[a-zA-Z0-9-]",p=[["\\s",1],["\\d",i],[d,s]],h=(e,t,r)=>{const s=(e=>{for(const[t,r]of p)e=e.split(`${t}*`).join(`${t}{0,${r}}`).split(`${t}+`).join(`${t}{1,${r}}`);return e})(t),i=c++;n(e,i,t),l[e]=i,u[i]=t,o[i]=new RegExp(t,r?"g":void 0),a[i]=new RegExp(s,r?"g":void 0)};h("NUMERICIDENTIFIER","0|[1-9]\\d*"),h("NUMERICIDENTIFIERLOOSE","\\d+"),h("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${d}*`),h("MAINVERSION",`(${u[l.NUMERICIDENTIFIER]})\\.(${u[l.NUMERICIDENTIFIER]})\\.(${u[l.NUMERICIDENTIFIER]})`),h("MAINVERSIONLOOSE",`(${u[l.NUMERICIDENTIFIERLOOSE]})\\.(${u[l.NUMERICIDENTIFIERLOOSE]})\\.(${u[l.NUMERICIDENTIFIERLOOSE]})`),h("PRERELEASEIDENTIFIER",`(?:${u[l.NUMERICIDENTIFIER]}|${u[l.NONNUMERICIDENTIFIER]})`),h("PRERELEASEIDENTIFIERLOOSE",`(?:${u[l.NUMERICIDENTIFIERLOOSE]}|${u[l.NONNUMERICIDENTIFIER]})`),h("PRERELEASE",`(?:-(${u[l.PRERELEASEIDENTIFIER]}(?:\\.${u[l.PRERELEASEIDENTIFIER]})*))`),h("PRERELEASELOOSE",`(?:-?(${u[l.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${u[l.PRERELEASEIDENTIFIERLOOSE]})*))`),h("BUILDIDENTIFIER",`${d}+`),h("BUILD",`(?:\\+(${u[l.BUILDIDENTIFIER]}(?:\\.${u[l.BUILDIDENTIFIER]})*))`),h("FULLPLAIN",`v?${u[l.MAINVERSION]}${u[l.PRERELEASE]}?${u[l.BUILD]}?`),h("FULL",`^${u[l.FULLPLAIN]}$`),h("LOOSEPLAIN",`[v=\\s]*${u[l.MAINVERSIONLOOSE]}${u[l.PRERELEASELOOSE]}?${u[l.BUILD]}?`),h("LOOSE",`^${u[l.LOOSEPLAIN]}$`),h("GTLT","((?:<|>)?=?)"),h("XRANGEIDENTIFIERLOOSE",`${u[l.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),h("XRANGEIDENTIFIER",`${u[l.NUMERICIDENTIFIER]}|x|X|\\*`),h("XRANGEPLAIN",`[v=\\s]*(${u[l.XRANGEIDENTIFIER]})(?:\\.(${u[l.XRANGEIDENTIFIER]})(?:\\.(${u[l.XRANGEIDENTIFIER]})(?:${u[l.PRERELEASE]})?${u[l.BUILD]}?)?)?`),h("XRANGEPLAINLOOSE",`[v=\\s]*(${u[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${u[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${u[l.XRANGEIDENTIFIERLOOSE]})(?:${u[l.PRERELEASELOOSE]})?${u[l.BUILD]}?)?)?`),h("XRANGE",`^${u[l.GTLT]}\\s*${u[l.XRANGEPLAIN]}$`),h("XRANGELOOSE",`^${u[l.GTLT]}\\s*${u[l.XRANGEPLAINLOOSE]}$`),h("COERCEPLAIN",`(^|[^\\d])(\\d{1,${r}})(?:\\.(\\d{1,${r}}))?(?:\\.(\\d{1,${r}}))?`),h("COERCE",`${u[l.COERCEPLAIN]}(?:$|[^\\d])`),h("COERCEFULL",u[l.COERCEPLAIN]+`(?:${u[l.PRERELEASE]})?(?:${u[l.BUILD]})?(?:$|[^\\d])`),h("COERCERTL",u[l.COERCE],!0),h("COERCERTLFULL",u[l.COERCEFULL],!0),h("LONETILDE","(?:~>?)"),h("TILDETRIM",`(\\s*)${u[l.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",h("TILDE",`^${u[l.LONETILDE]}${u[l.XRANGEPLAIN]}$`),h("TILDELOOSE",`^${u[l.LONETILDE]}${u[l.XRANGEPLAINLOOSE]}$`),h("LONECARET","(?:\\^)"),h("CARETTRIM",`(\\s*)${u[l.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",h("CARET",`^${u[l.LONECARET]}${u[l.XRANGEPLAIN]}$`),h("CARETLOOSE",`^${u[l.LONECARET]}${u[l.XRANGEPLAINLOOSE]}$`),h("COMPARATORLOOSE",`^${u[l.GTLT]}\\s*(${u[l.LOOSEPLAIN]})$|^$`),h("COMPARATOR",`^${u[l.GTLT]}\\s*(${u[l.FULLPLAIN]})$|^$`),h("COMPARATORTRIM",`(\\s*)${u[l.GTLT]}\\s*(${u[l.LOOSEPLAIN]}|${u[l.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",h("HYPHENRANGE",`^\\s*(${u[l.XRANGEPLAIN]})\\s+-\\s+(${u[l.XRANGEPLAIN]})\\s*$`),h("HYPHENRANGELOOSE",`^\\s*(${u[l.XRANGEPLAINLOOSE]})\\s+-\\s+(${u[l.XRANGEPLAINLOOSE]})\\s*$`),h("STAR","(<|>)?=?\\s*\\*"),h("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),h("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}(ce,ce.exports)),ce.exports),n=function(){if(W)return Q;W=1;const e=Object.freeze({loose:!0}),t=Object.freeze({});return Q=r=>r?"object"!=typeof r?e:r:t}(),{compareIdentifiers:o}=function(){if(te)return ee;te=1;const e=/^[0-9]+$/,t=(t,r)=>{const s=e.test(t),i=e.test(r);return s&&i&&(t=+t,r=+r),t===r?0:s&&!i?-1:i&&!s?1:t<r?-1:1};return ee={compareIdentifiers:t,rcompareIdentifiers:(e,r)=>t(r,e)}}();class a{constructor(o,u){if(u=n(u),o instanceof a){if(o.loose===!!u.loose&&o.includePrerelease===!!u.includePrerelease)return o;o=o.version}else if("string"!=typeof o)throw new TypeError(`Invalid version. Must be a string. Got type "${typeof o}".`);if(o.length>t)throw new TypeError(`version is longer than ${t} characters`);e("SemVer",o,u),this.options=u,this.loose=!!u.loose,this.includePrerelease=!!u.includePrerelease;const l=o.trim().match(u.loose?s[i.LOOSE]:s[i.FULL]);if(!l)throw new TypeError(`Invalid Version: ${o}`);if(this.raw=o,this.major=+l[1],this.minor=+l[2],this.patch=+l[3],this.major>r||this.major<0)throw new TypeError("Invalid major version");if(this.minor>r||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>r||this.patch<0)throw new TypeError("Invalid patch version");l[4]?this.prerelease=l[4].split(".").map((e=>{if(/^[0-9]+$/.test(e)){const t=+e;if(t>=0&&t<r)return t}return e})):this.prerelease=[],this.build=l[5]?l[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(t){if(e("SemVer.compare",this.version,this.options,t),!(t instanceof a)){if("string"==typeof t&&t===this.version)return 0;t=new a(t,this.options)}return t.version===this.version?0:this.compareMain(t)||this.comparePre(t)}compareMain(e){return e instanceof a||(e=new a(e,this.options)),o(this.major,e.major)||o(this.minor,e.minor)||o(this.patch,e.patch)}comparePre(t){if(t instanceof a||(t=new a(t,this.options)),this.prerelease.length&&!t.prerelease.length)return-1;if(!this.prerelease.length&&t.prerelease.length)return 1;if(!this.prerelease.length&&!t.prerelease.length)return 0;let r=0;do{const s=this.prerelease[r],i=t.prerelease[r];if(e("prerelease compare",r,s,i),void 0===s&&void 0===i)return 0;if(void 0===i)return 1;if(void 0===s)return-1;if(s!==i)return o(s,i)}while(++r)}compareBuild(t){t instanceof a||(t=new a(t,this.options));let r=0;do{const s=this.build[r],i=t.build[r];if(e("build compare",r,s,i),void 0===s&&void 0===i)return 0;if(void 0===i)return 1;if(void 0===s)return-1;if(s!==i)return o(s,i)}while(++r)}inc(e,t,r){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t,r);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t,r);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t,r),this.inc("pre",t,r);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t,r),this.inc("pre",t,r);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":{const e=Number(r)?1:0;if(!t&&!1===r)throw new Error("invalid increment argument: identifier is empty");if(0===this.prerelease.length)this.prerelease=[e];else{let s=this.prerelease.length;for(;--s>=0;)"number"==typeof this.prerelease[s]&&(this.prerelease[s]++,s=-2);if(-1===s){if(t===this.prerelease.join(".")&&!1===r)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(e)}}if(t){let s=[t,e];!1===r&&(s=[t]),0===o(this.prerelease[0],t)?isNaN(this.prerelease[1])&&(this.prerelease=s):this.prerelease=s}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}return re=a}!function(){if(ae)return oe;ae=1;const e=function(){if(ne)return ie;ne=1;const e=de();return ie=(t,r,s=!1)=>{if(t instanceof e)return t;try{return new e(t,r)}catch(e){if(!s)return null;throw e}}}();oe=(t,r)=>{const s=e(t,r);return s?s.version:null}}(),function(){if(le)return ue;le=1;const e=de();ue=(t,r)=>new e(t,r).major}(),n.m},36620:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});const s=(0,r(35947).YK)().setApp("settings").detectUser().build()},58723:(e,t)=>{function r(e,t){var s={name:e.name,path:e.path,hash:e.hash,query:e.query,params:e.params,fullPath:e.fullPath,meta:e.meta};return t&&(s.from=r(t)),Object.freeze(s)}t.O=function(e,t,s){var i=(s||{}).moduleName||"route";e.registerModule(i,{namespaced:!0,state:r(t.currentRoute),mutations:{ROUTE_CHANGED:function(t,s){e.state[i]=r(s.to,s.from)}}});var n,o=!1,a=e.watch((function(e){return e[i]}),(function(e){var r=e.fullPath;r!==n&&(null!=n&&(o=!0,t.push(e)),n=r)}),{sync:!0}),u=t.afterEach((function(t,r){o?o=!1:(n=t.fullPath,e.commit(i+"/ROUTE_CHANGED",{to:t,from:r}))}));return function(){null!=u&&u(),null!=a&&a(),e.unregisterModule(i)}}}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={id:e,loaded:!1,exports:{}};return i[e].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=i,e=[],o.O=(t,r,s,i)=>{if(!r){var n=1/0;for(c=0;c<e.length;c++){r=e[c][0],s=e[c][1],i=e[c][2];for(var a=!0,u=0;u<r.length;u++)(!1&i||n>=i)&&Object.keys(o.O).every((e=>o.O[e](r[u])))?r.splice(u--,1):(a=!1,i<n&&(n=i));if(a){e.splice(c--,1);var l=s();void 0!==l&&(t=l)}}return t}i=i||0;for(var c=e.length;c>0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[r,s,i]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((t,r)=>(o.f[r](e,t),t)),[])),o.u=e=>(({3239:"settings-users",4529:"settings-apps-view"}[e]||e)+"-"+e+".js?v="+{459:"975afd1e02f53abf8034",1023:"06cf5496a0a2d7ef494a",2441:"2c050d23f9070dfa7f03",3239:"2f789c2165a546fed1fa",4529:"96ac57466d9cc1a26328",5862:"142cd48ca8ec32e57725",6227:"3494381758c4754ef3f5",7265:"3ea08242e475ac7a22e1",8737:"1ee3b21131ac8193a04d"}[e]),o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},s="nextcloud:",o.l=(e,t,i,n)=>{if(r[e])r[e].push(t);else{var a,u;if(void 0!==i)for(var l=document.getElementsByTagName("script"),c=0;c<l.length;c++){var d=l[c];if(d.getAttribute("src")==e||d.getAttribute("data-webpack")==s+i){a=d;break}}a||(u=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,o.nc&&a.setAttribute("nonce",o.nc),a.setAttribute("data-webpack",s+i),a.src=e),r[e]=[t];var p=(t,s)=>{a.onerror=a.onload=null,clearTimeout(h);var i=r[e];if(delete r[e],a.parentNode&&a.parentNode.removeChild(a),i&&i.forEach((e=>e(s))),t)return t(s)},h=setTimeout(p.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=p.bind(null,a.onerror),a.onload=p.bind(null,a.onload),u&&document.head.appendChild(a)}},o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),o.j=2689,(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var t=o.g.document;if(!e&&t&&(t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var s=r.length-1;s>-1&&(!e||!/^http(s?):/.test(e));)e=r[s--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=e})(),(()=>{o.b=document.baseURI||self.location.href;var e={2689:0};o.f.j=(t,r)=>{var s=o.o(e,t)?e[t]:void 0;if(0!==s)if(s)r.push(s[2]);else{var i=new Promise(((r,i)=>s=e[t]=[r,i]));r.push(s[2]=i);var n=o.p+o.u(t),a=new Error;o.l(n,(r=>{if(o.o(e,t)&&(0!==(s=e[t])&&(e[t]=void 0),s)){var i=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;a.message="Loading chunk "+t+" failed.\n("+i+": "+n+")",a.name="ChunkLoadError",a.type=i,a.request=n,s[1](a)}}),"chunk-"+t,t)}},o.O.j=t=>0===e[t];var t=(t,r)=>{var s,i,n=r[0],a=r[1],u=r[2],l=0;if(n.some((t=>0!==e[t]))){for(s in a)o.o(a,s)&&(o.m[s]=a[s]);if(u)var c=u(o)}for(t&&t(r);l<n.length;l++)i=n[l],o.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return o.O(c)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),o.nc=void 0;var a=o.O(void 0,[4208],(()=>o(12836)));a=o.O(a)})();
+//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=bc3e0ffb89a7348a2792 \ No newline at end of file
diff --git a/dist/settings-vue-settings-apps-users-management.js.map b/dist/settings-vue-settings-apps-users-management.js.map
index 6adfd7c0322..47266b65173 100644
--- a/dist/settings-vue-settings-apps-users-management.js.map
+++ b/dist/settings-vue-settings-apps-users-management.js.map
@@ -1 +1 @@
-{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=d257b6b5046c37365155","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/SettingsApp.vue?3a67","webpack:///nextcloud/apps/settings/src/router/routes.ts","webpack:///nextcloud/apps/settings/src/router/index.ts","webpack:///nextcloud/apps/settings/src/main-apps-users-management.ts","webpack:///nextcloud/apps/settings/src/utils/sorting.ts","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/users-settings.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/constants/GroupManagement.ts","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.mjs","webpack:///nextcloud/apps/settings/src/logger.ts","webpack:///nextcloud/node_modules/vuex-router-sync/index.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcContent,{attrs:{\"app-name\":\"settings\"}},[_c('router-view',{attrs:{\"name\":\"navigation\"}}),_vm._v(\" \"),_c('router-view'),_vm._v(\" \"),_c('router-view',{attrs:{\"name\":\"sidebar\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"","import { render, staticRenderFns } from \"./SettingsApp.vue?vue&type=template&id=288003b1\"\nimport script from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { loadState } from '@nextcloud/initial-state';\nconst appstoreEnabled = loadState('settings', 'appstoreEnabled', true);\n// Dynamic loading\nconst AppStore = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStore.vue');\nconst AppStoreNavigation = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreNavigation.vue');\nconst AppStoreSidebar = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreSidebar.vue');\nconst UserManagement = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagement.vue');\nconst UserManagementNavigation = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagementNavigation.vue');\nconst routes = [\n {\n name: 'users',\n path: '/:index(index.php/)?settings/users',\n components: {\n default: UserManagement,\n navigation: UserManagementNavigation,\n },\n props: true,\n children: [\n {\n path: ':selectedGroup',\n name: 'group',\n },\n ],\n },\n {\n path: '/:index(index.php/)?settings/apps',\n name: 'apps',\n redirect: {\n name: 'apps-category',\n params: {\n category: appstoreEnabled ? 'discover' : 'installed',\n },\n },\n components: {\n default: AppStore,\n navigation: AppStoreNavigation,\n sidebar: AppStoreSidebar,\n },\n children: [\n {\n path: ':category',\n name: 'apps-category',\n children: [\n {\n path: ':id',\n name: 'apps-details',\n },\n ],\n },\n ],\n },\n];\nexport default routes;\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport Vue from 'vue';\nimport Router from 'vue-router';\nimport { generateUrl } from '@nextcloud/router';\nimport routes from './routes.ts';\nVue.use(Router);\nconst router = new Router({\n mode: 'history',\n // if index.php is in the url AND we got this far, then it's working:\n // let's keep using index.php in the url\n base: generateUrl(''),\n linkActiveClass: 'active',\n routes,\n});\nexport default router;\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport Vue from 'vue';\nimport Vuex from 'vuex';\nimport VTooltipPlugin from 'v-tooltip';\nimport { sync } from 'vuex-router-sync';\nimport { t, n } from '@nextcloud/l10n';\nimport SettingsApp from './views/SettingsApp.vue';\nimport router from './router/index.ts';\nimport { useStore } from './store/index.js';\nimport { getCSPNonce } from '@nextcloud/auth';\nimport { PiniaVuePlugin, createPinia } from 'pinia';\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = getCSPNonce();\n// bind to window\nVue.prototype.t = t;\nVue.prototype.n = n;\nVue.use(PiniaVuePlugin);\nVue.use(VTooltipPlugin, { defaultHtml: false });\nVue.use(Vuex);\nconst store = useStore();\nsync(store, router);\nconst pinia = createPinia();\nexport default new Vue({\n router,\n store,\n pinia,\n render: h => h(SettingsApp),\n el: '#content',\n});\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { getCanonicalLocale, getLanguage } from '@nextcloud/l10n';\nexport const naturalCollator = Intl.Collator([getLanguage(), getCanonicalLocale()], {\n numeric: true,\n usage: 'sort',\n});\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { parseFileSize } from '@nextcloud/files'\nimport { showError } from '@nextcloud/dialogs'\nimport { generateOcsUrl, generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport axios from '@nextcloud/axios'\n\nimport { GroupSorting } from '../constants/GroupManagement.ts'\nimport { naturalCollator } from '../utils/sorting.ts'\nimport api from './api.js'\nimport logger from '../logger.ts'\n\nconst usersSettings = loadState('settings', 'usersSettings', {})\n\nconst localStorage = getBuilder('settings').persist(true).build()\n\nconst defaults = {\n\t/**\n\t * @type {import('../views/user-types').IGroup}\n\t */\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [...(usersSettings.systemGroups ?? [])],\n\torderBy: usersSettings.sortGroups ?? GroupSorting.UserCount,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tdisabledUsersOffset: 0,\n\tdisabledUsersLimit: 25,\n\tuserCount: usersSettings.userCount ?? 0,\n\tshowConfig: {\n\t\tshowStoragePath: localStorage.getItem('account_settings__showStoragePath') === 'true',\n\t\tshowUserBackend: localStorage.getItem('account_settings__showUserBackend') === 'true',\n\t\tshowFirstLogin: localStorage.getItem('account_settings__showFirstLogin') === 'true',\n\t\tshowLastLogin: localStorage.getItem('account_settings__showLastLogin') === 'true',\n\t\tshowNewUserForm: localStorage.getItem('account_settings__showNewUserForm') === 'true',\n\t\tshowLanguages: localStorage.getItem('account_settings__showLanguages') === 'true',\n\t},\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\tconst existingUsers = state.users.map(({ id }) => id)\n\t\tconst newUsers = Object.values(usersObj)\n\t\t\t.filter(({ id }) => !existingUsers.includes(id))\n\n\t\tconst users = state.users.concat(newUsers)\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tupdateDisabledUsers(state, _usersObj) {\n\t\tstate.disabledUsersOffset += state.disabledUsersLimit\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\t/**\n\t * @param {object} state store state\n\t * @param {import('../views/user-types.js').IGroup} newGroup new group\n\t */\n\taddGroup(state, newGroup) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === newGroup.id) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, newGroup)\n\t\t\tstate.groups.unshift(group)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tthis.commit('updateUserCounts', { user: state.users[userIndex], actionType: 'remove' })\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tconst user = response.data.ocs.data\n\t\tstate.users.unshift(user)\n\t\tthis.commit('updateUserCounts', { user, actionType: 'create' })\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\tthis.commit('updateUserCounts', { user, actionType: enabled ? 'enable' : 'disable' })\n\t},\n\t// update active/disabled counts, groups counts\n\tupdateUserCounts(state, { user, actionType }) {\n\t\t// 0 is a special value\n\t\tif (state.userCount === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst recentGroup = state.groups.find(group => group.id === '__nc_internal_recent')\n\t\tconst disabledGroup = state.groups.find(group => group.id === 'disabled')\n\t\tswitch (actionType) {\n\t\tcase 'enable':\n\t\tcase 'disable':\n\t\t\tdisabledGroup.usercount += user.enabled ? -1 : 1 // update Disabled Users count\n\t\t\trecentGroup.usercount += user.enabled ? 1 : -1\n\t\t\tstate.userCount += user.enabled ? 1 : -1 // update Active Users count\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\tif (!group) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tgroup.disabled += user.enabled ? -1 : 1 // update group disabled count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'create':\n\t\t\trecentGroup.usercount++\n\t\t\tstate.userCount++ // increment Active Users count\n\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\tif (!group) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tgroup.usercount++ // increment group total count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'remove':\n\t\t\tif (user.enabled) {\n\t\t\t\trecentGroup.usercount--\n\t\t\t\tstate.userCount-- // decrement Active Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tif (!group) {\n\t\t\t\t\t\tconsole.warn('User group ' + userGroup + ' does not exist during user removal')\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tgroup.usercount-- // decrement group total count\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdisabledGroup.usercount-- // decrement Disabled Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tif (!group) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tgroup.disabled-- // decrement group disabled count\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\tdefault:\n\t\t\tlogger.error(`Unknown action type in updateUserCounts: '${actionType}'`)\n\t\t\t// not throwing error to interrupt execution as this is not fatal\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = parseFileSize(value, true)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t\tstate.disabledUsersOffset = 0\n\t},\n\n\t/**\n\t * Reset group list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetGroups(state) {\n\t\tconst systemGroups = state.groups.filter(group => [\n\t\t\t'admin',\n\t\t\t'__nc_internal_recent',\n\t\t\t'disabled',\n\t\t].includes(group.id))\n\t\tstate.groups = [...systemGroups]\n\t},\n\n\tsetShowConfig(state, { key, value }) {\n\t\tlocalStorage.setItem(`account_settings__${key}`, JSON.stringify(value))\n\t\tstate.showConfig[key] = value\n\t},\n\n\tsetGroupSorting(state, sorting) {\n\t\tconst oldValue = state.orderBy\n\t\tstate.orderBy = sorting\n\n\t\t// Persist the value on the server\n\t\taxios.post(\n\t\t\tgenerateUrl('/settings/users/preferences/group.sortBy'),\n\t\t\t{\n\t\t\t\tvalue: String(sorting),\n\t\t\t},\n\t\t).catch((error) => {\n\t\t\tstate.orderBy = oldValue\n\t\t\tshowError(t('settings', 'Could not set group sorting'))\n\t\t\tlogger.error(error)\n\t\t})\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSortedGroups(state) {\n\t\tconst groups = [...state.groups]\n\t\tif (state.orderBy === GroupSorting.UserCount) {\n\t\t\treturn groups.sort((a, b) => {\n\t\t\t\tconst numA = a.usercount - a.disabled\n\t\t\t\tconst numB = b.usercount - b.disabled\n\t\t\t\treturn (numA < numB) ? 1 : (numB < numA ? -1 : naturalCollator.compare(a.name, b.name))\n\t\t\t})\n\t\t} else {\n\t\t\treturn groups.sort((a, b) => naturalCollator.compare(a.name, b.name))\n\t\t}\n\t},\n\tgetGroupSorting(state) {\n\t\treturn state.orderBy\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetDisabledUsersOffset(state) {\n\t\treturn state.disabledUsersOffset\n\t},\n\tgetDisabledUsersLimit(state) {\n\t\treturn state.disabledUsersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n\tgetShowConfig(state) {\n\t\treturn state.showConfig\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * search users\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @return {Promise}\n\t */\n\tsearchUsers(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search })).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get user details\n\t *\n\t * @param {object} context store context\n\t * @param {string} userId user id\n\t * @return {Promise}\n\t */\n\tgetUser(context, userId) {\n\t\treturn api.get(generateOcsUrl(`cloud/users/${userId}`)).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\t/**\n\t\t * Adding filters in the search bar such as in:files, in:users, etc.\n\t\t * collides with this particular search, so we need to remove them\n\t\t * here and leave only the original search query\n\t\t */\n\t\tsearch = search.replace(/in:[^\\s]+/g, '').trim()\n\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\t/**\n\t * Get recent users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search query\n\t * @return {Promise<number>}\n\t */\n\tasync getRecentUsers(context, { offset, limit, search }) {\n\t\tconst url = generateOcsUrl('cloud/users/recent?offset={offset}&limit={limit}&search={search}', { offset, limit, search })\n\t\ttry {\n\t\t\tconst response = await api.get(url)\n\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\tif (usersCount > 0) {\n\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t}\n\t\t\treturn usersCount\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', error)\n\t\t}\n\t},\n\n\t/**\n\t * Get disabled users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param options.search\n\t * @return {Promise<number>}\n\t */\n\tasync getDisabledUsers(context, { offset, limit, search }) {\n\t\tconst url = generateOcsUrl('cloud/users/disabled?offset={offset}&limit={limit}&search={search}', { offset, limit, search })\n\t\ttry {\n\t\t\tconst response = await api.get(url)\n\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\tif (usersCount > 0) {\n\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\tcontext.commit('updateDisabledUsers', response.data.ocs.data.users)\n\t\t\t}\n\t\t\treturn usersCount\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', error)\n\t\t}\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { id: group, name: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (getCapabilities().password_policy && getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', getCapabilities().password_policy.minLength)\n\t\t\treturn getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { id: gid, name: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tasync wipeUserDevices(context, userid) {\n\t\ttry {\n\t\t\tawait api.requireAdmin()\n\t\t\treturn await api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\treturn Promise.reject(new Error('Failed to wipe user devices'))\n\t\t}\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @param {string} options.manager User manager\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language, manager }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language, manager })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tasync setUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname', 'manager']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password', 'manager'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\ttry {\n\t\t\t\t\tawait api.requireAdmin()\n\t\t\t\t\tawait api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\treturn context.commit('setUserData', { userid, key, value })\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport api from './api.js'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tapps: [],\n\tbundles: loadState('settings', 'appstoreBundles', []),\n\tcategories: [],\n\tupdateCount: loadState('settings', 'appstoreUpdateCount', 0),\n\tloading: {},\n\tgettingCategoriesPromise: null,\n\tappApiEnabled: loadState('settings', 'appApiEnabled', false),\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tupdateCategories(state, categoriesPromise) {\n\t\tstate.gettingCategoriesPromise = categoriesPromise\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t\tif (app.id === 'app_api') {\n\t\t\tstate.appApiEnabled = true\n\t\t}\n\t},\n\n\tsetInstallState(state, { appId, canInstall }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tif (app) {\n\t\t\tapp.canInstall = canInstall === true\n\t\t}\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t\tif (app.id === 'app_api') {\n\t\t\tstate.appApiEnabled = false\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t\tif (appId === 'app_api') {\n\t\t\tstate.appApiEnabled = false\n\t\t}\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tisAppApiEnabled(state) {\n\t\treturn state.appApiEnabled\n\t},\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetAppBundles(state) {\n\t\treturn state.bundles\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n\tgetCategoryById: (state) => (selectedCategoryId) => {\n\t\treturn state.categories.find((category) => category.id === selectedCategoryId)\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files/'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tshowError(t('settings', 'Error: This app cannot be enabled because it makes the server unstable'))\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tcontext.dispatch('disableApp', { appId })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('setInstallState', { appId, canInstall: true })\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tasync getCategories(context, { shouldRefetchCategories = false } = {}) {\n\t\tif (shouldRefetchCategories || !context.state.gettingCategoriesPromise) {\n\t\t\tcontext.commit('startLoading', 'categories')\n\t\t\ttry {\n\t\t\t\tconst categoriesPromise = api.get(generateUrl('settings/apps/categories'))\n\t\t\t\tcontext.commit('updateCategories', categoriesPromise)\n\t\t\t\tconst categoriesPromiseResponse = await categoriesPromise\n\t\t\t\tif (categoriesPromiseResponse.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', categoriesPromiseResponse.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\treturn false\n\t\t\t} catch (error) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t}\n\t\treturn context.state.gettingCategoriesPromise\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tserverData: loadState('settings', 'usersSettings', {}),\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport api from './api.js'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { Store } from 'vuex'\nimport users from './users.js'\nimport apps from './apps.js'\nimport settings from './users-settings.js'\nimport oc from './oc.js'\nimport { showError } from '@nextcloud/dialogs'\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + message, { isHTML: true })\n\t\t} catch (e) {\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nlet store = null\n\nexport const useStore = () => {\n\tif (store === null) {\n\t\tstore = new Store({\n\t\t\tmodules: {\n\t\t\t\tusers,\n\t\t\t\tapps,\n\t\t\t\tsettings,\n\t\t\t\toc,\n\t\t\t},\n\t\t\tstrict: debug,\n\t\t\tmutations,\n\t\t})\n\t}\n\treturn store\n}\n","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n */\nexport var GroupSorting;\n(function (GroupSorting) {\n GroupSorting[GroupSorting[\"UserCount\"] = 1] = \"UserCount\";\n GroupSorting[GroupSorting[\"GroupName\"] = 2] = \"GroupName\";\n})(GroupSorting || (GroupSorting = {}));\n","import { o as logger } from \"./chunks/dav-Co9y-hkg.mjs\";\nimport { q, F, s, N, t, P, c, l, m, n, a, g, p, b, r, d, h, f, k, j, e, i } from \"./chunks/dav-Co9y-hkg.mjs\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { extname, basename } from \"path\";\nimport { getCanonicalLocale, getLanguage } from \"@nextcloud/l10n\";\nimport { TypedEventTarget } from \"typescript-event-target\";\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 destructive() {\n return this._action.destructive;\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 (action.destructive !== void 0 && typeof action.destructive !== \"boolean\") {\n throw new Error(\"Invalid destructive flag\");\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 FileListAction {\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 iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get order() {\n return this._action.order;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\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 (\"iconSvgInline\" in action && typeof action.iconSvgInline !== \"function\") {\n throw new Error(\"Invalid iconSvgInline function\");\n }\n if (\"order\" in action && typeof action.order !== \"number\") {\n throw new Error(\"Invalid order\");\n }\n if (\"enabled\" in action && typeof action.enabled !== \"function\") {\n throw new Error(\"Invalid enabled function\");\n }\n if (!action.exec || typeof action.exec !== \"function\") {\n throw new Error(\"Invalid exec function\");\n }\n }\n}\nconst registerFileListAction = (action) => {\n if (typeof window._nc_filelistactions === \"undefined\") {\n window._nc_filelistactions = [];\n }\n if (window._nc_filelistactions.find((listAction) => listAction.id === action.id)) {\n logger.error(`FileListAction with id \"${action.id}\" is already registered`, { action });\n return;\n }\n window._nc_filelistactions.push(action);\n};\nconst getFileListActions = () => {\n if (typeof window._nc_filelistactions === \"undefined\") {\n window._nc_filelistactions = [];\n }\n return window._nc_filelistactions;\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 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: (n2) => `(${n2})`,\n ignoreFileExtension: false,\n ...options\n };\n let newName = name;\n let i2 = 1;\n while (otherNames.includes(newName)) {\n const ext = opts.ignoreFileExtension ? \"\" : extname(name);\n const base = basename(name, ext);\n newName = `${base} ${opts.suffix(i2++)}${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 (e2) {\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((a2, b2) => {\n for (const [index, identifier] of identifiers2.entries()) {\n const value = collator.compare(stringify(identifier(a2)), stringify(identifier(b2)));\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.displayname || 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 = {};\nvar util = {};\nvar hasRequiredUtil;\nfunction requireUtil() {\n if (hasRequiredUtil) return util;\n hasRequiredUtil = 1;\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, a2, arrayMode) {\n if (a2) {\n const keys = Object.keys(a2);\n const len = keys.length;\n for (let i2 = 0; i2 < len; i2++) {\n if (arrayMode === \"strict\") {\n target[keys[i2]] = [a2[keys[i2]]];\n } else {\n target[keys[i2]] = a2[keys[i2]];\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);\n return util;\n}\nvar hasRequiredValidator;\nfunction requireValidator() {\n if (hasRequiredValidator) return validator;\n hasRequiredValidator = 1;\n const util2 = requireUtil();\n const defaultOptions = {\n allowBooleanAttributes: false,\n //A tag can have attributes without any value\n unpairedTags: []\n };\n validator.validate = function(xmlData, options) {\n options = Object.assign({}, defaultOptions, 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 i2 = 0; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"<\" && xmlData[i2 + 1] === \"?\") {\n i2 += 2;\n i2 = readPI(xmlData, i2);\n if (i2.err) return i2;\n } else if (xmlData[i2] === \"<\") {\n let tagStartPos = i2;\n i2++;\n if (xmlData[i2] === \"!\") {\n i2 = readCommentAndCDATA(xmlData, i2);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i2] === \"/\") {\n closingTag = true;\n i2++;\n }\n let tagName = \"\";\n for (; i2 < xmlData.length && xmlData[i2] !== \">\" && xmlData[i2] !== \" \" && xmlData[i2] !== \"\t\" && xmlData[i2] !== \"\\n\" && xmlData[i2] !== \"\\r\"; i2++) {\n tagName += xmlData[i2];\n }\n tagName = tagName.trim();\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substring(0, tagName.length - 1);\n i2--;\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, i2));\n }\n const result = readAttributeStr(xmlData, i2);\n if (result === false) {\n return getErrorObject(\"InvalidAttr\", \"Attributes for '\" + tagName + \"' have open quote.\", getLineNumberForPosition(xmlData, i2));\n }\n let attrStr = result.value;\n i2 = result.index;\n if (attrStr[attrStr.length - 1] === \"/\") {\n const attrStrStart = i2 - 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, i2));\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, i2 - attrStr.length + isValid.err.line));\n }\n if (reachedRoot === true) {\n return getErrorObject(\"InvalidXml\", \"Multiple possible root nodes found.\", getLineNumberForPosition(xmlData, i2));\n } else if (options.unpairedTags.indexOf(tagName) !== -1) ;\n else {\n tags.push({ tagName, tagStartPos });\n }\n tagFound = true;\n }\n for (i2++; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"<\") {\n if (xmlData[i2 + 1] === \"!\") {\n i2++;\n i2 = readCommentAndCDATA(xmlData, i2);\n continue;\n } else if (xmlData[i2 + 1] === \"?\") {\n i2 = readPI(xmlData, ++i2);\n if (i2.err) return i2;\n } else {\n break;\n }\n } else if (xmlData[i2] === \"&\") {\n const afterAmp = validateAmpersand(xmlData, i2);\n if (afterAmp == -1)\n return getErrorObject(\"InvalidChar\", \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i2));\n i2 = afterAmp;\n } else {\n if (reachedRoot === true && !isWhiteSpace(xmlData[i2])) {\n return getErrorObject(\"InvalidXml\", \"Extra text at the end\", getLineNumberForPosition(xmlData, i2));\n }\n }\n }\n if (xmlData[i2] === \"<\") {\n i2--;\n }\n }\n } else {\n if (isWhiteSpace(xmlData[i2])) {\n continue;\n }\n return getErrorObject(\"InvalidChar\", \"char '\" + xmlData[i2] + \"' is not expected.\", getLineNumberForPosition(xmlData, i2));\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 };\n function isWhiteSpace(char) {\n return char === \" \" || char === \"\t\" || char === \"\\n\" || char === \"\\r\";\n }\n function readPI(xmlData, i2) {\n const start = i2;\n for (; i2 < xmlData.length; i2++) {\n if (xmlData[i2] == \"?\" || xmlData[i2] == \" \") {\n const tagname = xmlData.substr(start, i2 - start);\n if (i2 > 5 && tagname === \"xml\") {\n return getErrorObject(\"InvalidXml\", \"XML declaration allowed only at the start of the document.\", getLineNumberForPosition(xmlData, i2));\n } else if (xmlData[i2] == \"?\" && xmlData[i2 + 1] == \">\") {\n i2++;\n break;\n } else {\n continue;\n }\n }\n }\n return i2;\n }\n function readCommentAndCDATA(xmlData, i2) {\n if (xmlData.length > i2 + 5 && xmlData[i2 + 1] === \"-\" && xmlData[i2 + 2] === \"-\") {\n for (i2 += 3; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"-\" && xmlData[i2 + 1] === \"-\" && xmlData[i2 + 2] === \">\") {\n i2 += 2;\n break;\n }\n }\n } else if (xmlData.length > i2 + 8 && xmlData[i2 + 1] === \"D\" && xmlData[i2 + 2] === \"O\" && xmlData[i2 + 3] === \"C\" && xmlData[i2 + 4] === \"T\" && xmlData[i2 + 5] === \"Y\" && xmlData[i2 + 6] === \"P\" && xmlData[i2 + 7] === \"E\") {\n let angleBracketsCount = 1;\n for (i2 += 8; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"<\") {\n angleBracketsCount++;\n } else if (xmlData[i2] === \">\") {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (xmlData.length > i2 + 9 && xmlData[i2 + 1] === \"[\" && xmlData[i2 + 2] === \"C\" && xmlData[i2 + 3] === \"D\" && xmlData[i2 + 4] === \"A\" && xmlData[i2 + 5] === \"T\" && xmlData[i2 + 6] === \"A\" && xmlData[i2 + 7] === \"[\") {\n for (i2 += 8; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"]\" && xmlData[i2 + 1] === \"]\" && xmlData[i2 + 2] === \">\") {\n i2 += 2;\n break;\n }\n }\n }\n return i2;\n }\n const doubleQuote = '\"';\n const singleQuote = \"'\";\n function readAttributeStr(xmlData, i2) {\n let attrStr = \"\";\n let startChar = \"\";\n let tagClosed = false;\n for (; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === doubleQuote || xmlData[i2] === singleQuote) {\n if (startChar === \"\") {\n startChar = xmlData[i2];\n } else if (startChar !== xmlData[i2]) ;\n else {\n startChar = \"\";\n }\n } else if (xmlData[i2] === \">\") {\n if (startChar === \"\") {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i2];\n }\n if (startChar !== \"\") {\n return false;\n }\n return {\n value: attrStr,\n index: i2,\n tagClosed\n };\n }\n const validAttrStrRegxp = new RegExp(`(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\"])(([\\\\s\\\\S])*?)\\\\5)?`, \"g\");\n function validateAttributeString(attrStr, options) {\n const matches = util2.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n for (let i2 = 0; i2 < matches.length; i2++) {\n if (matches[i2][1].length === 0) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + matches[i2][2] + \"' has no space in starting.\", getPositionFromMatch(matches[i2]));\n } else if (matches[i2][3] !== void 0 && matches[i2][4] === void 0) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + matches[i2][2] + \"' is without value.\", getPositionFromMatch(matches[i2]));\n } else if (matches[i2][3] === void 0 && !options.allowBooleanAttributes) {\n return getErrorObject(\"InvalidAttr\", \"boolean attribute '\" + matches[i2][2] + \"' is not allowed.\", getPositionFromMatch(matches[i2]));\n }\n const attrName = matches[i2][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + attrName + \"' is an invalid name.\", getPositionFromMatch(matches[i2]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n attrNames[attrName] = 1;\n } else {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + attrName + \"' is repeated.\", getPositionFromMatch(matches[i2]));\n }\n }\n return true;\n }\n function validateNumberAmpersand(xmlData, i2) {\n let re2 = /\\d/;\n if (xmlData[i2] === \"x\") {\n i2++;\n re2 = /[\\da-fA-F]/;\n }\n for (; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \";\")\n return i2;\n if (!xmlData[i2].match(re2))\n break;\n }\n return -1;\n }\n function validateAmpersand(xmlData, i2) {\n i2++;\n if (xmlData[i2] === \";\")\n return -1;\n if (xmlData[i2] === \"#\") {\n i2++;\n return validateNumberAmpersand(xmlData, i2);\n }\n let count = 0;\n for (; i2 < xmlData.length; i2++, count++) {\n if (xmlData[i2].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i2] === \";\")\n break;\n return -1;\n }\n return i2;\n }\n function 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 }\n function validateAttrName(attrName) {\n return util2.isName(attrName);\n }\n function validateTagName(tagname) {\n return util2.isName(tagname);\n }\n function 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 }\n function getPositionFromMatch(match) {\n return match.startIndex + match[1].length;\n }\n return validator;\n}\nvar OptionsBuilder = {};\nvar hasRequiredOptionsBuilder;\nfunction requireOptionsBuilder() {\n if (hasRequiredOptionsBuilder) return OptionsBuilder;\n hasRequiredOptionsBuilder = 1;\n const defaultOptions = {\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, val) {\n return val;\n },\n attributeValueProcessor: function(attrName, val) {\n return val;\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 };\n const buildOptions = function(options) {\n return Object.assign({}, defaultOptions, options);\n };\n OptionsBuilder.buildOptions = buildOptions;\n OptionsBuilder.defaultOptions = defaultOptions;\n return OptionsBuilder;\n}\nvar xmlNode;\nvar hasRequiredXmlNode;\nfunction requireXmlNode() {\n if (hasRequiredXmlNode) return xmlNode;\n hasRequiredXmlNode = 1;\n class XmlNode {\n constructor(tagname) {\n this.tagname = tagname;\n this.child = [];\n this[\":@\"] = {};\n }\n add(key, val) {\n if (key === \"__proto__\") key = \"#__proto__\";\n this.child.push({ [key]: val });\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 }\n xmlNode = XmlNode;\n return xmlNode;\n}\nvar DocTypeReader;\nvar hasRequiredDocTypeReader;\nfunction requireDocTypeReader() {\n if (hasRequiredDocTypeReader) return DocTypeReader;\n hasRequiredDocTypeReader = 1;\n const util2 = requireUtil();\n function readDocType(xmlData, i2) {\n const entities = {};\n if (xmlData[i2 + 3] === \"O\" && xmlData[i2 + 4] === \"C\" && xmlData[i2 + 5] === \"T\" && xmlData[i2 + 6] === \"Y\" && xmlData[i2 + 7] === \"P\" && xmlData[i2 + 8] === \"E\") {\n i2 = i2 + 9;\n let angleBracketsCount = 1;\n let hasBody = false, comment = false;\n let exp = \"\";\n for (; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"<\" && !comment) {\n if (hasBody && isEntity(xmlData, i2)) {\n i2 += 7;\n let entityName, val;\n [entityName, val, i2] = readEntityExp(xmlData, i2 + 1);\n if (val.indexOf(\"&\") === -1)\n entities[validateEntityName(entityName)] = {\n regx: RegExp(`&${entityName};`, \"g\"),\n val\n };\n } else if (hasBody && isElement(xmlData, i2)) i2 += 8;\n else if (hasBody && isAttlist(xmlData, i2)) i2 += 8;\n else if (hasBody && isNotation(xmlData, i2)) i2 += 9;\n else comment = true;\n angleBracketsCount++;\n exp = \"\";\n } else if (xmlData[i2] === \">\") {\n if (comment) {\n if (xmlData[i2 - 1] === \"-\" && xmlData[i2 - 2] === \"-\") {\n comment = false;\n angleBracketsCount--;\n }\n } else {\n angleBracketsCount--;\n }\n if (angleBracketsCount === 0) {\n break;\n }\n } else if (xmlData[i2] === \"[\") {\n hasBody = true;\n } else {\n exp += xmlData[i2];\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: i2 };\n }\n function readEntityExp(xmlData, i2) {\n let entityName = \"\";\n for (; i2 < xmlData.length && (xmlData[i2] !== \"'\" && xmlData[i2] !== '\"'); i2++) {\n entityName += xmlData[i2];\n }\n entityName = entityName.trim();\n if (entityName.indexOf(\" \") !== -1) throw new Error(\"External entites are not supported\");\n const startChar = xmlData[i2++];\n let val = \"\";\n for (; i2 < xmlData.length && xmlData[i2] !== startChar; i2++) {\n val += xmlData[i2];\n }\n return [entityName, val, i2];\n }\n function isEntity(xmlData, i2) {\n if (xmlData[i2 + 1] === \"!\" && xmlData[i2 + 2] === \"E\" && xmlData[i2 + 3] === \"N\" && xmlData[i2 + 4] === \"T\" && xmlData[i2 + 5] === \"I\" && xmlData[i2 + 6] === \"T\" && xmlData[i2 + 7] === \"Y\") return true;\n return false;\n }\n function isElement(xmlData, i2) {\n if (xmlData[i2 + 1] === \"!\" && xmlData[i2 + 2] === \"E\" && xmlData[i2 + 3] === \"L\" && xmlData[i2 + 4] === \"E\" && xmlData[i2 + 5] === \"M\" && xmlData[i2 + 6] === \"E\" && xmlData[i2 + 7] === \"N\" && xmlData[i2 + 8] === \"T\") return true;\n return false;\n }\n function isAttlist(xmlData, i2) {\n if (xmlData[i2 + 1] === \"!\" && xmlData[i2 + 2] === \"A\" && xmlData[i2 + 3] === \"T\" && xmlData[i2 + 4] === \"T\" && xmlData[i2 + 5] === \"L\" && xmlData[i2 + 6] === \"I\" && xmlData[i2 + 7] === \"S\" && xmlData[i2 + 8] === \"T\") return true;\n return false;\n }\n function isNotation(xmlData, i2) {\n if (xmlData[i2 + 1] === \"!\" && xmlData[i2 + 2] === \"N\" && xmlData[i2 + 3] === \"O\" && xmlData[i2 + 4] === \"T\" && xmlData[i2 + 5] === \"A\" && xmlData[i2 + 6] === \"T\" && xmlData[i2 + 7] === \"I\" && xmlData[i2 + 8] === \"O\" && xmlData[i2 + 9] === \"N\") return true;\n return false;\n }\n function validateEntityName(name) {\n if (util2.isName(name))\n return name;\n else\n throw new Error(`Invalid entity name ${name}`);\n }\n DocTypeReader = readDocType;\n return DocTypeReader;\n}\nvar strnum;\nvar hasRequiredStrnum;\nfunction requireStrnum() {\n if (hasRequiredStrnum) return strnum;\n hasRequiredStrnum = 1;\n const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\n const numRegex = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\n if (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n }\n if (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n }\n const consider = {\n hex: true,\n leadingZeros: true,\n decimalPoint: \".\",\n eNotation: true\n //skipLike: /regex/\n };\n function toNumber(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 }\n function 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 }\n strnum = toNumber;\n return strnum;\n}\nvar ignoreAttributes;\nvar hasRequiredIgnoreAttributes;\nfunction requireIgnoreAttributes() {\n if (hasRequiredIgnoreAttributes) return ignoreAttributes;\n hasRequiredIgnoreAttributes = 1;\n function getIgnoreAttributesFn(ignoreAttributes2) {\n if (typeof ignoreAttributes2 === \"function\") {\n return ignoreAttributes2;\n }\n if (Array.isArray(ignoreAttributes2)) {\n return (attrName) => {\n for (const pattern of ignoreAttributes2) {\n if (typeof pattern === \"string\" && attrName === pattern) {\n return true;\n }\n if (pattern instanceof RegExp && pattern.test(attrName)) {\n return true;\n }\n }\n };\n }\n return () => false;\n }\n ignoreAttributes = getIgnoreAttributesFn;\n return ignoreAttributes;\n}\nvar OrderedObjParser_1;\nvar hasRequiredOrderedObjParser;\nfunction requireOrderedObjParser() {\n if (hasRequiredOrderedObjParser) return OrderedObjParser_1;\n hasRequiredOrderedObjParser = 1;\n const util2 = requireUtil();\n const xmlNode2 = requireXmlNode();\n const readDocType = requireDocTypeReader();\n const toNumber = requireStrnum();\n const getIgnoreAttributesFn = requireIgnoreAttributes();\n 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;\n this.readStopNodeData = readStopNodeData;\n this.saveTextToParentTag = saveTextToParentTag;\n this.addChild = addChild;\n this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes);\n }\n }\n function addExternalEntities(externalEntities) {\n const entKeys = Object.keys(externalEntities);\n for (let i2 = 0; i2 < entKeys.length; i2++) {\n const ent = entKeys[i2];\n this.lastEntities[ent] = {\n regex: new RegExp(\"&\" + ent + \";\", \"g\"),\n val: externalEntities[ent]\n };\n }\n }\n function parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n if (val !== void 0) {\n if (this.options.trimValues && !dontTrim) {\n val = val.trim();\n }\n if (val.length > 0) {\n if (!escapeEntities) val = this.replaceEntitiesValue(val);\n const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode);\n if (newval === null || newval === void 0) {\n return val;\n } else if (typeof newval !== typeof val || newval !== val) {\n return newval;\n } else if (this.options.trimValues) {\n return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n const trimmedVal = val.trim();\n if (trimmedVal === val) {\n return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n return val;\n }\n }\n }\n }\n }\n function 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 }\n const attrsRegx = new RegExp(`([^\\\\s=]+)\\\\s*(=\\\\s*(['\"])([\\\\s\\\\S]*?)\\\\3)?`, \"gm\");\n function buildAttributesMap(attrStr, jPath, tagName) {\n if (this.options.ignoreAttributes !== true && typeof attrStr === \"string\") {\n const matches = util2.getAllMatches(attrStr, attrsRegx);\n const len = matches.length;\n const attrs = {};\n for (let i2 = 0; i2 < len; i2++) {\n const attrName = this.resolveNameSpace(matches[i2][1]);\n if (this.ignoreAttributesFn(attrName, jPath)) {\n continue;\n }\n let oldVal = matches[i2][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 }\n const parseXml = function(xmlData) {\n xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\");\n const xmlObj = new xmlNode2(\"!xml\");\n let currentNode = xmlObj;\n let textData = \"\";\n let jPath = \"\";\n for (let i2 = 0; i2 < xmlData.length; i2++) {\n const ch = xmlData[i2];\n if (ch === \"<\") {\n if (xmlData[i2 + 1] === \"/\") {\n const closeIndex = findClosingIndex(xmlData, \">\", i2, \"Closing Tag is not closed.\");\n let tagName = xmlData.substring(i2 + 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: </${tagName}>`);\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 i2 = closeIndex;\n } else if (xmlData[i2 + 1] === \"?\") {\n let tagData = readTagExp(xmlData, i2, 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 xmlNode2(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 i2 = tagData.closeIndex + 1;\n } else if (xmlData.substr(i2 + 1, 3) === \"!--\") {\n const endIndex = findClosingIndex(xmlData, \"-->\", i2 + 4, \"Comment is not closed.\");\n if (this.options.commentPropName) {\n const comment = xmlData.substring(i2 + 4, endIndex - 2);\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n currentNode.add(this.options.commentPropName, [{ [this.options.textNodeName]: comment }]);\n }\n i2 = endIndex;\n } else if (xmlData.substr(i2 + 1, 2) === \"!D\") {\n const result = readDocType(xmlData, i2);\n this.docTypeEntities = result.entities;\n i2 = result.i;\n } else if (xmlData.substr(i2 + 1, 2) === \"![\") {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i2, \"CDATA is not closed.\") - 2;\n const tagExp = xmlData.substring(i2 + 9, closeIndex);\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);\n if (val == void 0) val = \"\";\n if (this.options.cdataPropName) {\n currentNode.add(this.options.cdataPropName, [{ [this.options.textNodeName]: tagExp }]);\n } else {\n currentNode.add(this.options.textNodeName, val);\n }\n i2 = closeIndex + 2;\n } else {\n let result = readTagExp(xmlData, i2, 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 i2 = result.closeIndex;\n } else if (this.options.unpairedTags.indexOf(tagName) !== -1) {\n i2 = result.closeIndex;\n } else {\n const result2 = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n if (!result2) throw new Error(`Unexpected end of ${rawTagName}`);\n i2 = result2.i;\n tagContent = result2.tagContent;\n }\n const childNode = new xmlNode2(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 xmlNode2(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 xmlNode2(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 i2 = closeIndex;\n }\n }\n } else {\n textData += xmlData[i2];\n }\n }\n return xmlObj.child;\n };\n function 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 }\n const replaceEntitiesValue = function(val) {\n if (this.options.processEntities) {\n for (let entityName in this.docTypeEntities) {\n const entity = this.docTypeEntities[entityName];\n val = val.replace(entity.regx, entity.val);\n }\n for (let entityName in this.lastEntities) {\n const entity = this.lastEntities[entityName];\n val = val.replace(entity.regex, entity.val);\n }\n if (this.options.htmlEntities) {\n for (let entityName in this.htmlEntities) {\n const entity = this.htmlEntities[entityName];\n val = val.replace(entity.regex, entity.val);\n }\n }\n val = val.replace(this.ampEntity.regex, this.ampEntity.val);\n }\n return val;\n };\n function 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 }\n function 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 }\n function tagExpWithClosingIndex(xmlData, i2, closingChar = \">\") {\n let attrBoundary;\n let tagExp = \"\";\n for (let index = i2; 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 }\n function findClosingIndex(xmlData, str, i2, errMsg) {\n const closingIndex = xmlData.indexOf(str, i2);\n if (closingIndex === -1) {\n throw new Error(errMsg);\n } else {\n return closingIndex + str.length - 1;\n }\n }\n function readTagExp(xmlData, i2, removeNSPrefix, closingChar = \">\") {\n const result = tagExpWithClosingIndex(xmlData, i2 + 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 }\n function readStopNodeData(xmlData, tagName, i2) {\n const startIndex = i2;\n let openTagCount = 1;\n for (; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"<\") {\n if (xmlData[i2 + 1] === \"/\") {\n const closeIndex = findClosingIndex(xmlData, \">\", i2, `${tagName} is not closed`);\n let closeTagName = xmlData.substring(i2 + 2, closeIndex).trim();\n if (closeTagName === tagName) {\n openTagCount--;\n if (openTagCount === 0) {\n return {\n tagContent: xmlData.substring(startIndex, i2),\n i: closeIndex\n };\n }\n }\n i2 = closeIndex;\n } else if (xmlData[i2 + 1] === \"?\") {\n const closeIndex = findClosingIndex(xmlData, \"?>\", i2 + 1, \"StopNode is not closed.\");\n i2 = closeIndex;\n } else if (xmlData.substr(i2 + 1, 3) === \"!--\") {\n const closeIndex = findClosingIndex(xmlData, \"-->\", i2 + 3, \"StopNode is not closed.\");\n i2 = closeIndex;\n } else if (xmlData.substr(i2 + 1, 2) === \"![\") {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i2, \"StopNode is not closed.\") - 2;\n i2 = closeIndex;\n } else {\n const tagData = readTagExp(xmlData, i2, \">\");\n if (tagData) {\n const openTagName = tagData && tagData.tagName;\n if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length - 1] !== \"/\") {\n openTagCount++;\n }\n i2 = tagData.closeIndex;\n }\n }\n }\n }\n }\n function parseValue(val, shouldParse, options) {\n if (shouldParse && typeof val === \"string\") {\n const newval = val.trim();\n if (newval === \"true\") return true;\n else if (newval === \"false\") return false;\n else return toNumber(val, options);\n } else {\n if (util2.isExist(val)) {\n return val;\n } else {\n return \"\";\n }\n }\n }\n OrderedObjParser_1 = OrderedObjParser;\n return OrderedObjParser_1;\n}\nvar node2json = {};\nvar hasRequiredNode2json;\nfunction requireNode2json() {\n if (hasRequiredNode2json) return node2json;\n hasRequiredNode2json = 1;\n function prettify(node, options) {\n return compress(node, options);\n }\n function compress(arr, options, jPath) {\n let text;\n const compressedObj = {};\n for (let i2 = 0; i2 < arr.length; i2++) {\n const tagObj = arr[i2];\n const property = propName(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 val = compress(tagObj[property], options, newJpath);\n const isLeaf = isLeafTag(val, options);\n if (tagObj[\":@\"]) {\n assignAttributes(val, tagObj[\":@\"], newJpath, options);\n } else if (Object.keys(val).length === 1 && val[options.textNodeName] !== void 0 && !options.alwaysCreateTextNode) {\n val = val[options.textNodeName];\n } else if (Object.keys(val).length === 0) {\n if (options.alwaysCreateTextNode) val[options.textNodeName] = \"\";\n else val = \"\";\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(val);\n } else {\n if (options.isArray(property, newJpath, isLeaf)) {\n compressedObj[property] = [val];\n } else {\n compressedObj[property] = val;\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 }\n function propName(obj) {\n const keys = Object.keys(obj);\n for (let i2 = 0; i2 < keys.length; i2++) {\n const key = keys[i2];\n if (key !== \":@\") return key;\n }\n }\n function assignAttributes(obj, attrMap, jpath, options) {\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length;\n for (let i2 = 0; i2 < len; i2++) {\n const atrrName = keys[i2];\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 }\n function 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 }\n node2json.prettify = prettify;\n return node2json;\n}\nvar XMLParser_1;\nvar hasRequiredXMLParser;\nfunction requireXMLParser() {\n if (hasRequiredXMLParser) return XMLParser_1;\n hasRequiredXMLParser = 1;\n const { buildOptions } = requireOptionsBuilder();\n const OrderedObjParser = requireOrderedObjParser();\n const { prettify } = requireNode2json();\n const validator2 = requireValidator();\n 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 = validator2.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 OrderedObjParser(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 '&#xD;'\");\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 }\n XMLParser_1 = XMLParser;\n return XMLParser_1;\n}\nvar orderedJs2Xml;\nvar hasRequiredOrderedJs2Xml;\nfunction requireOrderedJs2Xml() {\n if (hasRequiredOrderedJs2Xml) return orderedJs2Xml;\n hasRequiredOrderedJs2Xml = 1;\n const EOL = \"\\n\";\n function 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 }\n function arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n for (let i2 = 0; i2 < arr.length; i2++) {\n const tagObj = arr[i2];\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 += `<![CDATA[${tagObj[tagName][0][options.textNodeName]}]]>`;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + `<!--${tagObj[tagName][0][options.textNodeName]}-->`;\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}</${tagName}>`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"</\"))) {\n xmlStr += indentation + options.indentBy + tagValue + indentation;\n } else {\n xmlStr += tagValue;\n }\n xmlStr += `</${tagName}>`;\n }\n isPreviousElementTag = true;\n }\n return xmlStr;\n }\n function propName(obj) {\n const keys = Object.keys(obj);\n for (let i2 = 0; i2 < keys.length; i2++) {\n const key = keys[i2];\n if (!obj.hasOwnProperty(key)) continue;\n if (key !== \":@\") return key;\n }\n }\n function 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 }\n function 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 }\n function replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i2 = 0; i2 < options.entities.length; i2++) {\n const entity = options.entities[i2];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n }\n orderedJs2Xml = toXml;\n return orderedJs2Xml;\n}\nvar json2xml;\nvar hasRequiredJson2xml;\nfunction requireJson2xml() {\n if (hasRequiredJson2xml) return json2xml;\n hasRequiredJson2xml = 1;\n const buildFromOrderedJs = requireOrderedJs2Xml();\n const getIgnoreAttributesFn = requireIgnoreAttributes();\n const 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, a2) {\n return a2;\n },\n attributeValueProcessor: function(attrName, a2) {\n return a2;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&amp;\" },\n //it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \"&gt;\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"&lt;\" },\n { regex: new RegExp(\"'\", \"g\"), val: \"&apos;\" },\n { regex: new RegExp('\"', \"g\"), val: \"&quot;\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n };\n function Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes === true || this.options.attributesGroupName) {\n this.isAttribute = function() {\n return false;\n };\n } else {\n this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes);\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 }\n Builder.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 };\n Builder.prototype.j2x = function(jObj, level, ajPath) {\n let attrStr = \"\";\n let val = \"\";\n const jPath = ajPath.join(\".\");\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 val += \"\";\n }\n } else if (jObj[key] === null) {\n if (this.isAttribute(key)) {\n val += \"\";\n } else if (key[0] === \"?\") {\n val += this.indentate(level) + \"<\" + key + \"?\" + this.tagEndChar;\n } else {\n val += this.indentate(level) + \"<\" + key + \"/\" + this.tagEndChar;\n }\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextValNode(jObj[key], key, \"\", level);\n } else if (typeof jObj[key] !== \"object\") {\n const attr = this.isAttribute(key);\n if (attr && !this.ignoreAttributesFn(attr, jPath)) {\n attrStr += this.buildAttrPairStr(attr, \"\" + jObj[key]);\n } else if (!attr) {\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, \"\" + jObj[key]);\n val += this.replaceEntitiesValue(newval);\n } else {\n val += 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 let listTagAttr = \"\";\n for (let j2 = 0; j2 < arrLen; j2++) {\n const item = jObj[key][j2];\n if (typeof item === \"undefined\") ;\n else if (item === null) {\n if (key[0] === \"?\") val += this.indentate(level) + \"<\" + key + \"?\" + this.tagEndChar;\n else val += this.indentate(level) + \"<\" + key + \"/\" + this.tagEndChar;\n } else if (typeof item === \"object\") {\n if (this.options.oneListGroup) {\n const result = this.j2x(item, level + 1, ajPath.concat(key));\n listTagVal += result.val;\n if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) {\n listTagAttr += result.attrStr;\n }\n } else {\n listTagVal += this.processTextOrObjNode(item, key, level, ajPath);\n }\n } else {\n if (this.options.oneListGroup) {\n let textValue = this.options.tagValueProcessor(key, item);\n textValue = this.replaceEntitiesValue(textValue);\n listTagVal += textValue;\n } else {\n listTagVal += this.buildTextValNode(item, key, \"\", level);\n }\n }\n }\n if (this.options.oneListGroup) {\n listTagVal = this.buildObjectNode(listTagVal, key, listTagAttr, level);\n }\n val += 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 j2 = 0; j2 < L; j2++) {\n attrStr += this.buildAttrPairStr(Ks[j2], \"\" + jObj[key][Ks[j2]]);\n }\n } else {\n val += this.processTextOrObjNode(jObj[key], key, level, ajPath);\n }\n }\n }\n return { attrStr, val };\n };\n Builder.prototype.buildAttrPairStr = function(attrName, val) {\n val = this.options.attributeValueProcessor(attrName, \"\" + val);\n val = this.replaceEntitiesValue(val);\n if (this.options.suppressBooleanAttributes && val === \"true\") {\n return \" \" + attrName;\n } else return \" \" + attrName + '=\"' + val + '\"';\n };\n function processTextOrObjNode(object, key, level, ajPath) {\n const result = this.j2x(object, level + 1, ajPath.concat(key));\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 }\n Builder.prototype.buildObjectNode = function(val, key, attrStr, level) {\n if (val === \"\") {\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 = \"</\" + key + this.tagEndChar;\n let piClosingChar = \"\";\n if (key[0] === \"?\") {\n piClosingChar = \"?\";\n tagEndExp = \"\";\n }\n if ((attrStr || attrStr === \"\") && val.indexOf(\"<\") === -1) {\n return this.indentate(level) + \"<\" + key + attrStr + piClosingChar + \">\" + val + tagEndExp;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `<!--${val}-->` + this.newLine;\n } else {\n return this.indentate(level) + \"<\" + key + attrStr + piClosingChar + this.tagEndChar + val + this.indentate(level) + tagEndExp;\n }\n }\n };\n Builder.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 = `></${key}`;\n }\n return closeTag;\n };\n Builder.prototype.buildTextValNode = function(val, key, attrStr, level) {\n if (this.options.cdataPropName !== false && key === this.options.cdataPropName) {\n return this.indentate(level) + `<![CDATA[${val}]]>` + this.newLine;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `<!--${val}-->` + 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, val);\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 + \"</\" + key + this.tagEndChar;\n }\n }\n };\n Builder.prototype.replaceEntitiesValue = function(textValue) {\n if (textValue && textValue.length > 0 && this.options.processEntities) {\n for (let i2 = 0; i2 < this.options.entities.length; i2++) {\n const entity = this.options.entities[i2];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n };\n function indentate(level) {\n return this.options.indentBy.repeat(level);\n }\n function 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 }\n json2xml = Builder;\n return json2xml;\n}\nvar fxp;\nvar hasRequiredFxp;\nfunction requireFxp() {\n if (hasRequiredFxp) return fxp;\n hasRequiredFxp = 1;\n const validator2 = requireValidator();\n const XMLParser = requireXMLParser();\n const XMLBuilder = requireJson2xml();\n fxp = {\n XMLParser,\n XMLValidator: validator2,\n XMLBuilder\n };\n return fxp;\n}\nvar fxpExports = requireFxp();\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 (fxpExports.XMLValidator.validate(string) !== true) {\n return false;\n }\n let jsonObject;\n const parser = new fxpExports.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 get loadChildViews() {\n return this._view.loadChildViews;\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 (\"caption\" in view && typeof view.caption !== \"string\") {\n throw new Error(\"View caption 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 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 if (view.loadChildViews && typeof view.loadChildViews !== \"function\") {\n throw new Error(\"View loadChildViews must be a function\");\n }\n return true;\n};\nvar debug_1;\nvar hasRequiredDebug;\nfunction requireDebug() {\n if (hasRequiredDebug) return debug_1;\n hasRequiredDebug = 1;\n const debug = typeof process === \"object\" && process.env && process.env.NODE_DEBUG && /\\bsemver\\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error(\"SEMVER\", ...args) : () => {\n };\n debug_1 = debug;\n return debug_1;\n}\nvar constants;\nvar hasRequiredConstants;\nfunction requireConstants() {\n if (hasRequiredConstants) return constants;\n hasRequiredConstants = 1;\n const SEMVER_SPEC_VERSION = \"2.0.0\";\n const MAX_LENGTH = 256;\n const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */\n 9007199254740991;\n const MAX_SAFE_COMPONENT_LENGTH = 16;\n const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6;\n const RELEASE_TYPES = [\n \"major\",\n \"premajor\",\n \"minor\",\n \"preminor\",\n \"patch\",\n \"prepatch\",\n \"prerelease\"\n ];\n constants = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 1,\n FLAG_LOOSE: 2\n };\n return constants;\n}\nvar re = { exports: {} };\nvar hasRequiredRe;\nfunction requireRe() {\n if (hasRequiredRe) return re.exports;\n hasRequiredRe = 1;\n (function(module, exports) {\n const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH\n } = requireConstants();\n const debug = requireDebug();\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_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]\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 debug(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_LENGTH}})(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);\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, re.exports);\n return re.exports;\n}\nvar parseOptions_1;\nvar hasRequiredParseOptions;\nfunction requireParseOptions() {\n if (hasRequiredParseOptions) return parseOptions_1;\n hasRequiredParseOptions = 1;\n const looseOption = Object.freeze({ loose: true });\n const emptyOpts = Object.freeze({});\n const parseOptions = (options) => {\n if (!options) {\n return emptyOpts;\n }\n if (typeof options !== \"object\") {\n return looseOption;\n }\n return options;\n };\n parseOptions_1 = parseOptions;\n return parseOptions_1;\n}\nvar identifiers;\nvar hasRequiredIdentifiers;\nfunction requireIdentifiers() {\n if (hasRequiredIdentifiers) return identifiers;\n hasRequiredIdentifiers = 1;\n const numeric = /^[0-9]+$/;\n const compareIdentifiers = (a2, b2) => {\n const anum = numeric.test(a2);\n const bnum = numeric.test(b2);\n if (anum && bnum) {\n a2 = +a2;\n b2 = +b2;\n }\n return a2 === b2 ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a2 < b2 ? -1 : 1;\n };\n const rcompareIdentifiers = (a2, b2) => compareIdentifiers(b2, a2);\n identifiers = {\n compareIdentifiers,\n rcompareIdentifiers\n };\n return identifiers;\n}\nvar semver;\nvar hasRequiredSemver;\nfunction requireSemver() {\n if (hasRequiredSemver) return semver;\n hasRequiredSemver = 1;\n const debug = requireDebug();\n const { MAX_LENGTH, MAX_SAFE_INTEGER } = requireConstants();\n const { safeRe: re2, t: t2 } = requireRe();\n const parseOptions = requireParseOptions();\n const { compareIdentifiers } = requireIdentifiers();\n 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 m2 = version.trim().match(options.loose ? re2[t2.LOOSE] : re2[t2.FULL]);\n if (!m2) {\n throw new TypeError(`Invalid Version: ${version}`);\n }\n this.raw = version;\n this.major = +m2[1];\n this.minor = +m2[2];\n this.patch = +m2[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 (!m2[4]) {\n this.prerelease = [];\n } else {\n this.prerelease = m2[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 = m2[5] ? m2[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 i2 = 0;\n do {\n const a2 = this.prerelease[i2];\n const b2 = other.prerelease[i2];\n debug(\"prerelease compare\", i2, a2, b2);\n if (a2 === void 0 && b2 === void 0) {\n return 0;\n } else if (b2 === void 0) {\n return 1;\n } else if (a2 === void 0) {\n return -1;\n } else if (a2 === b2) {\n continue;\n } else {\n return compareIdentifiers(a2, b2);\n }\n } while (++i2);\n }\n compareBuild(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n let i2 = 0;\n do {\n const a2 = this.build[i2];\n const b2 = other.build[i2];\n debug(\"build compare\", i2, a2, b2);\n if (a2 === void 0 && b2 === void 0) {\n return 0;\n } else if (b2 === void 0) {\n return 1;\n } else if (a2 === void 0) {\n return -1;\n } else if (a2 === b2) {\n continue;\n } else {\n return compareIdentifiers(a2, b2);\n }\n } while (++i2);\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 // If the input is a non-prerelease version, this acts the same as\n // prepatch.\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 // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\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 i2 = this.prerelease.length;\n while (--i2 >= 0) {\n if (typeof this.prerelease[i2] === \"number\") {\n this.prerelease[i2]++;\n i2 = -2;\n }\n }\n if (i2 === -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 }\n semver = SemVer;\n return semver;\n}\nvar parse_1;\nvar hasRequiredParse;\nfunction requireParse() {\n if (hasRequiredParse) return parse_1;\n hasRequiredParse = 1;\n const SemVer = requireSemver();\n const parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version;\n }\n try {\n return new SemVer(version, options);\n } catch (er) {\n if (!throwErrors) {\n return null;\n }\n throw er;\n }\n };\n parse_1 = parse;\n return parse_1;\n}\nvar valid_1;\nvar hasRequiredValid;\nfunction requireValid() {\n if (hasRequiredValid) return valid_1;\n hasRequiredValid = 1;\n const parse = requireParse();\n const valid2 = (version, options) => {\n const v = parse(version, options);\n return v ? v.version : null;\n };\n valid_1 = valid2;\n return valid_1;\n}\nvar validExports = requireValid();\nconst valid = /* @__PURE__ */ getDefaultExportFromCjs(validExports);\nvar major_1;\nvar hasRequiredMajor;\nfunction requireMajor() {\n if (hasRequiredMajor) return major_1;\n hasRequiredMajor = 1;\n const SemVer = requireSemver();\n const major2 = (a2, loose) => new SemVer(a2, loose).major;\n major_1 = major2;\n return major_1;\n}\nvar majorExports = requireMajor();\nconst major = /* @__PURE__ */ getDefaultExportFromCjs(majorExports);\nclass ProxyBus {\n bus;\n constructor(bus2) {\n if (typeof bus2.getVersion !== \"function\" || !valid(bus2.getVersion())) {\n console.warn(\"Proxying an event bus with an unknown or invalid version\");\n } else if (major(bus2.getVersion()) !== major(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((h2) => h2 !== handler)\n );\n }\n emit(name, event) {\n (this.handlers.get(name) || []).forEach((h2) => {\n try {\n h2(event);\n } catch (e2) {\n console.error(\"could not invoke event listener\", e2);\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((a2, b2) => {\n if (a2.order !== void 0 && b2.order !== void 0 && a2.order !== b2.order) {\n return a2.order - b2.order;\n }\n return a2.displayName.localeCompare(b2.displayName, void 0, { numeric: true, sensitivity: \"base\" });\n });\n};\nexport {\n Column,\n DefaultType,\n q as File,\n FileAction,\n FileListAction,\n FileListFilter,\n F as FileType,\n FilesSortingMode,\n s as Folder,\n Header,\n InvalidFilenameError,\n InvalidFilenameErrorReason,\n Navigation,\n NewMenuEntryCategory,\n N as Node,\n t as NodeStatus,\n P as Permission,\n View,\n addNewFileMenuEntry,\n c as davGetClient,\n l as davGetDefaultPropfind,\n m as davGetFavoritesReport,\n n as davGetRecentSearch,\n a as davGetRemoteURL,\n g as davGetRootPath,\n p as davParsePermissions,\n b as davRemoteURL,\n r as davResultToNode,\n d as davRootPath,\n h as defaultDavNamespaces,\n f as defaultDavProperties,\n formatFileSize,\n k as getDavNameSpaces,\n j as getDavProperties,\n e as getFavoriteNodes,\n getFileActions,\n getFileListActions,\n getFileListFilters,\n getFileListHeaders,\n getNavigation,\n getNewFileMenuEntries,\n getUniqueName,\n isFilenameValid,\n orderBy,\n parseFileSize,\n i as registerDavProperty,\n registerFileAction,\n registerFileListAction,\n registerFileListFilter,\n registerFileListHeaders,\n removeNewFileMenuEntry,\n sortNodes,\n unregisterFileListFilter,\n validateFilename\n};\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { getLoggerBuilder } from '@nextcloud/logger';\nexport default getLoggerBuilder()\n .setApp('settings')\n .detectUser()\n .build();\n","exports.sync = function (store, router, options) {\n var moduleName = (options || {}).moduleName || 'route'\n\n store.registerModule(moduleName, {\n namespaced: true,\n state: cloneRoute(router.currentRoute),\n mutations: {\n 'ROUTE_CHANGED': function ROUTE_CHANGED (state, transition) {\n store.state[moduleName] = cloneRoute(transition.to, transition.from)\n }\n }\n })\n\n var isTimeTraveling = false\n var currentPath\n\n // sync router on store change\n var storeUnwatch = store.watch(\n function (state) { return state[moduleName]; },\n function (route) {\n var fullPath = route.fullPath;\n if (fullPath === currentPath) {\n return\n }\n if (currentPath != null) {\n isTimeTraveling = true\n router.push(route)\n }\n currentPath = fullPath\n },\n { sync: true }\n )\n\n // sync store on router navigation\n var afterEachUnHook = router.afterEach(function (to, from) {\n if (isTimeTraveling) {\n isTimeTraveling = false\n return\n }\n currentPath = to.fullPath\n store.commit(moduleName + '/ROUTE_CHANGED', { to: to, from: from })\n })\n\n return function unsync () {\n // On unsync, remove router hook\n if (afterEachUnHook != null) {\n afterEachUnHook()\n }\n\n // On unsync, remove store watch\n if (storeUnwatch != null) {\n storeUnwatch()\n }\n\n // On unsync, unregister Module with store\n store.unregisterModule(moduleName)\n }\n}\n\nfunction cloneRoute (to, from) {\n var clone = {\n name: to.name,\n path: to.path,\n hash: to.hash,\n query: to.query,\n params: to.params,\n fullPath: to.fullPath,\n meta: to.meta\n }\n if (from) {\n clone.from = cloneRoute(from)\n }\n return Object.freeze(clone)\n}\n\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"3239\":\"settings-users\",\"4529\":\"settings-apps-view\"}[chunkId] || chunkId) + \"-\" + chunkId + \".js?v=\" + {\"459\":\"975afd1e02f53abf8034\",\"1023\":\"06cf5496a0a2d7ef494a\",\"2441\":\"2c050d23f9070dfa7f03\",\"3239\":\"2f789c2165a546fed1fa\",\"4529\":\"96ac57466d9cc1a26328\",\"5862\":\"142cd48ca8ec32e57725\",\"6227\":\"3494381758c4754ef3f5\",\"7265\":\"3ea08242e475ac7a22e1\",\"8737\":\"1ee3b21131ac8193a04d\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2689;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2689: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(12836)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","sanitize","url","replace","requireAdmin","confirmPassword","get","options","axios","post","data","patch","put","delete","params","_defineComponent","__name","setup","__props","__sfc","NcContent","_vm","this","_c","_self","_setupProxy","attrs","_v","name","path","components","default","UserManagement","navigation","UserManagementNavigation","props","children","redirect","category","loadState","AppStore","AppStoreNavigation","sidebar","AppStoreSidebar","Vue","use","Router","mode","base","generateUrl","linkActiveClass","routes","__webpack_nonce__","getCSPNonce","prototype","t","n","PiniaVuePlugin","VTooltipPlugin","defaultHtml","Vuex","store","useStore","sync","router","pinia","createPinia","render","h","SettingsApp","el","naturalCollator","Intl","Collator","getLanguage","getCanonicalLocale","numeric","usage","usersSettings","localStorage","getBuilder","persist","build","defaults","id","usercount","disabled","canAdd","canRemove","state","users","groups","systemGroups","orderBy","sortGroups","GroupSorting","UserCount","minPasswordLength","usersOffset","usersLimit","disabledUsersOffset","disabledUsersLimit","userCount","showConfig","showStoragePath","getItem","showUserBackend","showFirstLogin","showLastLogin","showNewUserForm","showLanguages","mutations","appendUsers","usersObj","existingUsers","map","_ref","newUsers","Object","values","filter","_ref2","includes","concat","updateDisabledUsers","_usersObj","setPasswordPolicyMinLength","length","addGroup","newGroup","find","group","assign","unshift","e","console","error","renameGroup","_ref3","gid","displayName","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","_ref4","userid","user","enabled","push","removeUserGroup","_ref5","indexOf","addUserSubAdmin","_ref6","subadmin","removeUserSubAdmin","_ref7","deleteUser","userIndex","commit","actionType","addUserData","response","ocs","enableDisableUser","_ref8","updateUserCounts","_ref9","recentGroup","disabledGroup","forEach","userGroup","warn","logger","setUserData","_ref10","key","value","humanValue","parseFileSize","resetUsers","resetGroups","setShowConfig","_ref11","setItem","JSON","stringify","setGroupSorting","sorting","oldValue","String","catch","showError","getters","getUsers","getGroups","getSortedGroups","sort","a","b","numA","numB","compare","getGroupSorting","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getDisabledUsersOffset","getDisabledUsersLimit","getUserCount","getShowConfig","CancelToken","searchRequestCancelSource","actions","searchUsers","context","_ref12","offset","limit","search","api","generateOcsUrl","getUser","userId","_ref13","cancel","source","trim","encodeURIComponent","cancelToken","token","then","usersCount","keys","getRecentUsers","_ref14","getDisabledUsers","_ref15","_ref16","limitParam","getUsersFromList","_ref17","getUsersFromGroup","_ref18","groupid","groupId","getCapabilities","password_policy","minLength","_ref19","_ref20","_ref21","_ref22","_ref23","wipeUserDevices","Promise","reject","Error","addUser","_ref24","_ref25","dispatch","password","email","quota","language","manager","_ref26","userStatus","_ref27","allowedEmpty","sendWelcomeMail","apps","bundles","categories","updateCount","loading","gettingCategoriesPromise","appApiEnabled","APPS_API_FAILURE","message","isHTML","initCategories","updateCategories","categoriesPromise","setUpdateCount","addCategory","appendCategories","categoriesArray","setAllApps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","setInstallState","canInstall","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","updateApp","version","update","resetApps","reset","startLoading","stopLoading","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","finally","getAllApps","getCategories","shouldRefetchCategories","arguments","undefined","categoriesPromiseResponse","isAppApiEnabled","getAppBundles","getUpdateCount","getCategoryById","selectedCategoryId","serverData","setServerData","getServerData","setAppConfig","API_FAILURE","meta","Store","modules","settings","oc","strict","process","humanList","humanListBinary","formatFileSize","size","skipSmallSizes","binaryPrefixes","base1000","Number","order","Math","floor","log","min","readableFormat","relativeSize","pow","toFixed","parseFloat","toLocaleString","forceBinary","toLocaleLowerCase","replaceAll","e2","match","decimalString","round","k","m","g","p","Date","toISOString","sortNodes","nodes","sortingOptions","sortingMode","sortingOrder","collection","identifiers2","orders","_","index","collator","a2","b2","identifier","entries","sortFavoritesFirst","v","attributes","favorite","sortFoldersFirst","type","basename2","displayname","basename","lastIndexOf","slice","hasRequiredUtil","hasRequiredValidator","validator","util","requireUtil","exports","nameStartChar","nameRegexp","regexName","RegExp","isExist","isEmptyObject","obj","merge","target","arrayMode","len","i2","getValue","isName","string","exec","getAllMatches","regex","matches","allmatches","startIndex","lastIndex","requireValidator","util2","defaultOptions","allowBooleanAttributes","unpairedTags","isWhiteSpace","char","readPI","xmlData","start","tagname","substr","getErrorObject","getLineNumberForPosition","readCommentAndCDATA","angleBracketsCount","validate","tags","tagFound","reachedRoot","err","tagStartPos","closingTag","tagName","substring","msg","result","readAttributeStr","attrStr","attrStrStart","isValid","validateAttributeString","code","line","tagClosed","otg","pop","openPos","col","afterAmp","validateAmpersand","t2","doubleQuote","singleQuote","startChar","validAttrStrRegxp","attrNames","getPositionFromMatch","attrName","validateAttrName","hasOwnProperty","re2","validateNumberAmpersand","count","lineNumber","lines","split","hasRequiredOptionsBuilder","xmlNode","hasRequiredXmlNode","DocTypeReader","hasRequiredDocTypeReader","strnum","hasRequiredStrnum","ignoreAttributes","hasRequiredIgnoreAttributes","OrderedObjParser_1","hasRequiredOrderedObjParser","OptionsBuilder","requireIgnoreAttributes","ignoreAttributes2","pattern","test","hasRequiredNode2json","XMLParser_1","hasRequiredXMLParser","orderedJs2Xml","hasRequiredOrderedJs2Xml","json2xml","hasRequiredJson2xml","fxp","hasRequiredFxp","debug_1","hasRequiredDebug","constants","hasRequiredConstants","node2json","requireNode2json","compress","arr","jPath","text","compressedObj","tagObj","property","propName","newJpath","textNodeName","val","isLeaf","isLeafTag","assignAttributes","alwaysCreateTextNode","attrMap","jpath","atrrName","propCount","prettify","node","requireXMLParser","buildOptions","preserveOrder","attributeNamePrefix","attributesGroupName","removeNSPrefix","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","attributeValueProcessor","stopNodes","commentPropName","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","requireOptionsBuilder","OrderedObjParser","xmlNode2","constructor","child","add","addChild","readDocType","readEntityExp","entityName","isEntity","isElement","isAttlist","isNotation","validateEntityName","entities","hasBody","comment","exp","regx","i","requireDocTypeReader","toNumber","hexRegex","numRegex","parseInt","consider","decimalPoint","str","trimmedStr","skipLike","sign","numTrimmedByZeros","numStr","num","requireStrnum","getIgnoreAttributesFn","addExternalEntities","externalEntities","entKeys","ent","lastEntities","parseTextData","dontTrim","hasAttributes","isLeafNode","escapeEntities","replaceEntitiesValue","newval","parseValue","resolveNameSpace","prefix","charAt","attrsRegx","buildAttributesMap","ignoreAttributesFn","oldVal","aName","newVal","attrCollection","parseXml","xmlObj","currentNode","textData","closeIndex","findClosingIndex","colonIndex","saveTextToParentTag","lastTagName","propIndex","tagsNodeStack","tagData","readTagExp","childNode","tagExp","attrExpPresent","endIndex","docTypeEntities","rawTagName","lastTag","isItStopNode","tagContent","result2","readStopNodeData","entity","ampEntity","currentTagName","allNodesExp","stopNodePath","stopNodeExp","errMsg","closingIndex","closingChar","attrBoundary","ch","tagExpWithClosingIndex","separatorIndex","trimStart","openTagCount","shouldParse","fromCharCode","requireOrderedObjParser","validator2","parse","validationOption","toString","orderedObjParser","orderedResult","addEntity","requireOrderedJs2Xml","arrToStr","indentation","xmlStr","isPreviousElementTag","newJPath","tagText","isStopNode","attStr2","attr_to_str","tempInd","piTextNodeName","newIdentation","indentBy","tagStart","tagValue","suppressUnpairedNode","suppressEmptyNode","endsWith","attr","attrVal","suppressBooleanAttributes","textValue","jArray","format","requireDebug","debug","env","NODE_DEBUG","args","requireConstants","MAX_SAFE_INTEGER","MAX_LENGTH","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","RELEASE_TYPES","SEMVER_SPEC_VERSION","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","XMLParser","XMLBuilder","buildFromOrderedJs","oneListGroup","Builder","isAttribute","attrPrefixLen","processTextOrObjNode","indentate","tagEndChar","newLine","object","level","ajPath","j2x","buildTextValNode","buildObjectNode","repeat","startsWith","jObj","arrayNodeName","join","call","buildAttrPairStr","arrLen","listTagVal","listTagAttr","j2","item","Ks","L","closeTag","tagEndExp","piClosingChar","requireJson2xml","XMLValidator","requireFxp","hasRequiredRe","parseOptions_1","hasRequiredParseOptions","identifiers","hasRequiredIdentifiers","semver","hasRequiredSemver","parse_1","hasRequiredParse","valid_1","hasRequiredValid","major_1","hasRequiredMajor","re","requireSemver","safeRe","module","src","R","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","safe","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","parseOptions","looseOption","freeze","loose","emptyOpts","requireParseOptions","compareIdentifiers","anum","bnum","rcompareIdentifiers","requireIdentifiers","SemVer","includePrerelease","TypeError","m2","LOOSE","FULL","raw","major","minor","prerelease","other","compareMain","comparePre","compareBuild","inc","release","identifierBase","isNaN","throwErrors","er","requireParse","requireValid","requireMajor","getLoggerBuilder","setApp","detectUser","cloneRoute","to","from","clone","hash","query","fullPath","moduleName","registerModule","namespaced","currentRoute","transition","currentPath","isTimeTraveling","storeUnwatch","watch","route","afterEachUnHook","afterEach","unregisterModule","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","r","getter","__esModule","d","definition","o","defineProperty","enumerable","f","chunkId","all","reduce","promises","u","globalThis","Function","prop","l","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","toUpperCase","baseURI","self","href","installedChunks","installedChunkData","promise","resolve","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=bc3e0ffb89a7348a2792","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/SettingsApp.vue?3a67","webpack:///nextcloud/apps/settings/src/router/routes.ts","webpack:///nextcloud/apps/settings/src/router/index.ts","webpack:///nextcloud/apps/settings/src/main-apps-users-management.ts","webpack:///nextcloud/apps/settings/src/utils/sorting.ts","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/users-settings.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/constants/GroupManagement.ts","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.mjs","webpack:///nextcloud/apps/settings/src/logger.ts","webpack:///nextcloud/node_modules/vuex-router-sync/index.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcContent,{attrs:{\"app-name\":\"settings\"}},[_c('router-view',{attrs:{\"name\":\"navigation\"}}),_vm._v(\" \"),_c('router-view'),_vm._v(\" \"),_c('router-view',{attrs:{\"name\":\"sidebar\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"","import { render, staticRenderFns } from \"./SettingsApp.vue?vue&type=template&id=288003b1\"\nimport script from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { loadState } from '@nextcloud/initial-state';\nconst appstoreEnabled = loadState('settings', 'appstoreEnabled', true);\n// Dynamic loading\nconst AppStore = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStore.vue');\nconst AppStoreNavigation = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreNavigation.vue');\nconst AppStoreSidebar = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreSidebar.vue');\nconst UserManagement = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagement.vue');\nconst UserManagementNavigation = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagementNavigation.vue');\nconst routes = [\n {\n name: 'users',\n path: '/:index(index.php/)?settings/users',\n components: {\n default: UserManagement,\n navigation: UserManagementNavigation,\n },\n props: true,\n children: [\n {\n path: ':selectedGroup',\n name: 'group',\n },\n ],\n },\n {\n path: '/:index(index.php/)?settings/apps',\n name: 'apps',\n redirect: {\n name: 'apps-category',\n params: {\n category: appstoreEnabled ? 'discover' : 'installed',\n },\n },\n components: {\n default: AppStore,\n navigation: AppStoreNavigation,\n sidebar: AppStoreSidebar,\n },\n children: [\n {\n path: ':category',\n name: 'apps-category',\n children: [\n {\n path: ':id',\n name: 'apps-details',\n },\n ],\n },\n ],\n },\n];\nexport default routes;\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport Vue from 'vue';\nimport Router from 'vue-router';\nimport { generateUrl } from '@nextcloud/router';\nimport routes from './routes.ts';\nVue.use(Router);\nconst router = new Router({\n mode: 'history',\n // if index.php is in the url AND we got this far, then it's working:\n // let's keep using index.php in the url\n base: generateUrl(''),\n linkActiveClass: 'active',\n routes,\n});\nexport default router;\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport Vue from 'vue';\nimport Vuex from 'vuex';\nimport VTooltipPlugin from 'v-tooltip';\nimport { sync } from 'vuex-router-sync';\nimport { t, n } from '@nextcloud/l10n';\nimport SettingsApp from './views/SettingsApp.vue';\nimport router from './router/index.ts';\nimport { useStore } from './store/index.js';\nimport { getCSPNonce } from '@nextcloud/auth';\nimport { PiniaVuePlugin, createPinia } from 'pinia';\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = getCSPNonce();\n// bind to window\nVue.prototype.t = t;\nVue.prototype.n = n;\nVue.use(PiniaVuePlugin);\nVue.use(VTooltipPlugin, { defaultHtml: false });\nVue.use(Vuex);\nconst store = useStore();\nsync(store, router);\nconst pinia = createPinia();\nexport default new Vue({\n router,\n store,\n pinia,\n render: h => h(SettingsApp),\n el: '#content',\n});\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { getCanonicalLocale, getLanguage } from '@nextcloud/l10n';\nexport const naturalCollator = Intl.Collator([getLanguage(), getCanonicalLocale()], {\n numeric: true,\n usage: 'sort',\n});\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { parseFileSize } from '@nextcloud/files'\nimport { showError } from '@nextcloud/dialogs'\nimport { generateOcsUrl, generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport axios from '@nextcloud/axios'\n\nimport { GroupSorting } from '../constants/GroupManagement.ts'\nimport { naturalCollator } from '../utils/sorting.ts'\nimport api from './api.js'\nimport logger from '../logger.ts'\n\nconst usersSettings = loadState('settings', 'usersSettings', {})\n\nconst localStorage = getBuilder('settings').persist(true).build()\n\nconst defaults = {\n\t/**\n\t * @type {import('../views/user-types').IGroup}\n\t */\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [...(usersSettings.systemGroups ?? [])],\n\torderBy: usersSettings.sortGroups ?? GroupSorting.UserCount,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tdisabledUsersOffset: 0,\n\tdisabledUsersLimit: 25,\n\tuserCount: usersSettings.userCount ?? 0,\n\tshowConfig: {\n\t\tshowStoragePath: localStorage.getItem('account_settings__showStoragePath') === 'true',\n\t\tshowUserBackend: localStorage.getItem('account_settings__showUserBackend') === 'true',\n\t\tshowFirstLogin: localStorage.getItem('account_settings__showFirstLogin') === 'true',\n\t\tshowLastLogin: localStorage.getItem('account_settings__showLastLogin') === 'true',\n\t\tshowNewUserForm: localStorage.getItem('account_settings__showNewUserForm') === 'true',\n\t\tshowLanguages: localStorage.getItem('account_settings__showLanguages') === 'true',\n\t},\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\tconst existingUsers = state.users.map(({ id }) => id)\n\t\tconst newUsers = Object.values(usersObj)\n\t\t\t.filter(({ id }) => !existingUsers.includes(id))\n\n\t\tconst users = state.users.concat(newUsers)\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tupdateDisabledUsers(state, _usersObj) {\n\t\tstate.disabledUsersOffset += state.disabledUsersLimit\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\t/**\n\t * @param {object} state store state\n\t * @param {import('../views/user-types.js').IGroup} newGroup new group\n\t */\n\taddGroup(state, newGroup) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === newGroup.id) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, newGroup)\n\t\t\tstate.groups.unshift(group)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tthis.commit('updateUserCounts', { user: state.users[userIndex], actionType: 'remove' })\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tconst user = response.data.ocs.data\n\t\tstate.users.unshift(user)\n\t\tthis.commit('updateUserCounts', { user, actionType: 'create' })\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\tthis.commit('updateUserCounts', { user, actionType: enabled ? 'enable' : 'disable' })\n\t},\n\t// update active/disabled counts, groups counts\n\tupdateUserCounts(state, { user, actionType }) {\n\t\t// 0 is a special value\n\t\tif (state.userCount === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst recentGroup = state.groups.find(group => group.id === '__nc_internal_recent')\n\t\tconst disabledGroup = state.groups.find(group => group.id === 'disabled')\n\t\tswitch (actionType) {\n\t\tcase 'enable':\n\t\tcase 'disable':\n\t\t\tdisabledGroup.usercount += user.enabled ? -1 : 1 // update Disabled Users count\n\t\t\trecentGroup.usercount += user.enabled ? 1 : -1\n\t\t\tstate.userCount += user.enabled ? 1 : -1 // update Active Users count\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\tif (!group) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tgroup.disabled += user.enabled ? -1 : 1 // update group disabled count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'create':\n\t\t\trecentGroup.usercount++\n\t\t\tstate.userCount++ // increment Active Users count\n\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\tif (!group) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tgroup.usercount++ // increment group total count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'remove':\n\t\t\tif (user.enabled) {\n\t\t\t\trecentGroup.usercount--\n\t\t\t\tstate.userCount-- // decrement Active Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tif (!group) {\n\t\t\t\t\t\tconsole.warn('User group ' + userGroup + ' does not exist during user removal')\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tgroup.usercount-- // decrement group total count\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdisabledGroup.usercount-- // decrement Disabled Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tif (!group) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tgroup.disabled-- // decrement group disabled count\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\tdefault:\n\t\t\tlogger.error(`Unknown action type in updateUserCounts: '${actionType}'`)\n\t\t\t// not throwing error to interrupt execution as this is not fatal\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = parseFileSize(value, true)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t\tstate.disabledUsersOffset = 0\n\t},\n\n\t/**\n\t * Reset group list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetGroups(state) {\n\t\tconst systemGroups = state.groups.filter(group => [\n\t\t\t'admin',\n\t\t\t'__nc_internal_recent',\n\t\t\t'disabled',\n\t\t].includes(group.id))\n\t\tstate.groups = [...systemGroups]\n\t},\n\n\tsetShowConfig(state, { key, value }) {\n\t\tlocalStorage.setItem(`account_settings__${key}`, JSON.stringify(value))\n\t\tstate.showConfig[key] = value\n\t},\n\n\tsetGroupSorting(state, sorting) {\n\t\tconst oldValue = state.orderBy\n\t\tstate.orderBy = sorting\n\n\t\t// Persist the value on the server\n\t\taxios.post(\n\t\t\tgenerateUrl('/settings/users/preferences/group.sortBy'),\n\t\t\t{\n\t\t\t\tvalue: String(sorting),\n\t\t\t},\n\t\t).catch((error) => {\n\t\t\tstate.orderBy = oldValue\n\t\t\tshowError(t('settings', 'Could not set group sorting'))\n\t\t\tlogger.error(error)\n\t\t})\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSortedGroups(state) {\n\t\tconst groups = [...state.groups]\n\t\tif (state.orderBy === GroupSorting.UserCount) {\n\t\t\treturn groups.sort((a, b) => {\n\t\t\t\tconst numA = a.usercount - a.disabled\n\t\t\t\tconst numB = b.usercount - b.disabled\n\t\t\t\treturn (numA < numB) ? 1 : (numB < numA ? -1 : naturalCollator.compare(a.name, b.name))\n\t\t\t})\n\t\t} else {\n\t\t\treturn groups.sort((a, b) => naturalCollator.compare(a.name, b.name))\n\t\t}\n\t},\n\tgetGroupSorting(state) {\n\t\treturn state.orderBy\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetDisabledUsersOffset(state) {\n\t\treturn state.disabledUsersOffset\n\t},\n\tgetDisabledUsersLimit(state) {\n\t\treturn state.disabledUsersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n\tgetShowConfig(state) {\n\t\treturn state.showConfig\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * search users\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @return {Promise}\n\t */\n\tsearchUsers(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search })).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get user details\n\t *\n\t * @param {object} context store context\n\t * @param {string} userId user id\n\t * @return {Promise}\n\t */\n\tgetUser(context, userId) {\n\t\treturn api.get(generateOcsUrl(`cloud/users/${userId}`)).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\t/**\n\t\t * Adding filters in the search bar such as in:files, in:users, etc.\n\t\t * collides with this particular search, so we need to remove them\n\t\t * here and leave only the original search query\n\t\t */\n\t\tsearch = search.replace(/in:[^\\s]+/g, '').trim()\n\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\t/**\n\t * Get recent users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search query\n\t * @return {Promise<number>}\n\t */\n\tasync getRecentUsers(context, { offset, limit, search }) {\n\t\tconst url = generateOcsUrl('cloud/users/recent?offset={offset}&limit={limit}&search={search}', { offset, limit, search })\n\t\ttry {\n\t\t\tconst response = await api.get(url)\n\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\tif (usersCount > 0) {\n\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t}\n\t\t\treturn usersCount\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', error)\n\t\t}\n\t},\n\n\t/**\n\t * Get disabled users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param options.search\n\t * @return {Promise<number>}\n\t */\n\tasync getDisabledUsers(context, { offset, limit, search }) {\n\t\tconst url = generateOcsUrl('cloud/users/disabled?offset={offset}&limit={limit}&search={search}', { offset, limit, search })\n\t\ttry {\n\t\t\tconst response = await api.get(url)\n\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\tif (usersCount > 0) {\n\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\tcontext.commit('updateDisabledUsers', response.data.ocs.data.users)\n\t\t\t}\n\t\t\treturn usersCount\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', error)\n\t\t}\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { id: group, name: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (getCapabilities().password_policy && getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', getCapabilities().password_policy.minLength)\n\t\t\treturn getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { id: gid, name: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tasync wipeUserDevices(context, userid) {\n\t\ttry {\n\t\t\tawait api.requireAdmin()\n\t\t\treturn await api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\treturn Promise.reject(new Error('Failed to wipe user devices'))\n\t\t}\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @param {string} options.manager User manager\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language, manager }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language, manager })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tasync setUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname', 'manager']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password', 'manager'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\ttry {\n\t\t\t\t\tawait api.requireAdmin()\n\t\t\t\t\tawait api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\treturn context.commit('setUserData', { userid, key, value })\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport api from './api.js'\nimport Vue from 'vue'\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tapps: [],\n\tbundles: loadState('settings', 'appstoreBundles', []),\n\tcategories: [],\n\tupdateCount: loadState('settings', 'appstoreUpdateCount', 0),\n\tloading: {},\n\tgettingCategoriesPromise: null,\n\tappApiEnabled: loadState('settings', 'appApiEnabled', false),\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tupdateCategories(state, categoriesPromise) {\n\t\tstate.gettingCategoriesPromise = categoriesPromise\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t\tif (app.id === 'app_api') {\n\t\t\tstate.appApiEnabled = true\n\t\t}\n\t},\n\n\tsetInstallState(state, { appId, canInstall }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tif (app) {\n\t\t\tapp.canInstall = canInstall === true\n\t\t}\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t\tif (app.id === 'app_api') {\n\t\t\tstate.appApiEnabled = false\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t\tif (appId === 'app_api') {\n\t\t\tstate.appApiEnabled = false\n\t\t}\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tisAppApiEnabled(state) {\n\t\treturn state.appApiEnabled\n\t},\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetAppBundles(state) {\n\t\treturn state.bundles\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n\tgetCategoryById: (state) => (selectedCategoryId) => {\n\t\treturn state.categories.find((category) => category.id === selectedCategoryId)\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn axios.get(generateUrl('apps/files/'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tshowError(t('settings', 'Error: This app cannot be enabled because it makes the server unstable'))\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tcontext.dispatch('disableApp', { appId })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('setInstallState', { appId, canInstall: true })\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tasync getCategories(context, { shouldRefetchCategories = false } = {}) {\n\t\tif (shouldRefetchCategories || !context.state.gettingCategoriesPromise) {\n\t\t\tcontext.commit('startLoading', 'categories')\n\t\t\ttry {\n\t\t\t\tconst categoriesPromise = api.get(generateUrl('settings/apps/categories'))\n\t\t\t\tcontext.commit('updateCategories', categoriesPromise)\n\t\t\t\tconst categoriesPromiseResponse = await categoriesPromise\n\t\t\t\tif (categoriesPromiseResponse.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', categoriesPromiseResponse.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\treturn false\n\t\t\t} catch (error) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t}\n\t\treturn context.state.gettingCategoriesPromise\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tserverData: loadState('settings', 'usersSettings', {}),\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport api from './api.js'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { Store } from 'vuex'\nimport users from './users.js'\nimport apps from './apps.js'\nimport settings from './users-settings.js'\nimport oc from './oc.js'\nimport { showError } from '@nextcloud/dialogs'\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + message, { isHTML: true })\n\t\t} catch (e) {\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nlet store = null\n\nexport const useStore = () => {\n\tif (store === null) {\n\t\tstore = new Store({\n\t\t\tmodules: {\n\t\t\t\tusers,\n\t\t\t\tapps,\n\t\t\t\tsettings,\n\t\t\t\toc,\n\t\t\t},\n\t\t\tstrict: debug,\n\t\t\tmutations,\n\t\t})\n\t}\n\treturn store\n}\n","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n */\nexport var GroupSorting;\n(function (GroupSorting) {\n GroupSorting[GroupSorting[\"UserCount\"] = 1] = \"UserCount\";\n GroupSorting[GroupSorting[\"GroupName\"] = 2] = \"GroupName\";\n})(GroupSorting || (GroupSorting = {}));\n","import { o as logger } from \"./chunks/dav-Co9y-hkg.mjs\";\nimport { q, F, s, N, t, P, c, l, m, n, a, g, p, b, r, d, h, f, k, j, e, i } from \"./chunks/dav-Co9y-hkg.mjs\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { extname, basename } from \"path\";\nimport { getCanonicalLocale, getLanguage } from \"@nextcloud/l10n\";\nimport { TypedEventTarget } from \"typescript-event-target\";\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 destructive() {\n return this._action.destructive;\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 (action.destructive !== void 0 && typeof action.destructive !== \"boolean\") {\n throw new Error(\"Invalid destructive flag\");\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 FileListAction {\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 iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get order() {\n return this._action.order;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\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 (\"iconSvgInline\" in action && typeof action.iconSvgInline !== \"function\") {\n throw new Error(\"Invalid iconSvgInline function\");\n }\n if (\"order\" in action && typeof action.order !== \"number\") {\n throw new Error(\"Invalid order\");\n }\n if (\"enabled\" in action && typeof action.enabled !== \"function\") {\n throw new Error(\"Invalid enabled function\");\n }\n if (!action.exec || typeof action.exec !== \"function\") {\n throw new Error(\"Invalid exec function\");\n }\n }\n}\nconst registerFileListAction = (action) => {\n if (typeof window._nc_filelistactions === \"undefined\") {\n window._nc_filelistactions = [];\n }\n if (window._nc_filelistactions.find((listAction) => listAction.id === action.id)) {\n logger.error(`FileListAction with id \"${action.id}\" is already registered`, { action });\n return;\n }\n window._nc_filelistactions.push(action);\n};\nconst getFileListActions = () => {\n if (typeof window._nc_filelistactions === \"undefined\") {\n window._nc_filelistactions = [];\n }\n return window._nc_filelistactions;\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 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: (n2) => `(${n2})`,\n ignoreFileExtension: false,\n ...options\n };\n let newName = name;\n let i2 = 1;\n while (otherNames.includes(newName)) {\n const ext = opts.ignoreFileExtension ? \"\" : extname(name);\n const base = basename(name, ext);\n newName = `${base} ${opts.suffix(i2++)}${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 (e2) {\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((a2, b2) => {\n for (const [index, identifier] of identifiers2.entries()) {\n const value = collator.compare(stringify(identifier(a2)), stringify(identifier(b2)));\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.displayname || 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 = {};\nvar util = {};\nvar hasRequiredUtil;\nfunction requireUtil() {\n if (hasRequiredUtil) return util;\n hasRequiredUtil = 1;\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, a2, arrayMode) {\n if (a2) {\n const keys = Object.keys(a2);\n const len = keys.length;\n for (let i2 = 0; i2 < len; i2++) {\n if (arrayMode === \"strict\") {\n target[keys[i2]] = [a2[keys[i2]]];\n } else {\n target[keys[i2]] = a2[keys[i2]];\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);\n return util;\n}\nvar hasRequiredValidator;\nfunction requireValidator() {\n if (hasRequiredValidator) return validator;\n hasRequiredValidator = 1;\n const util2 = requireUtil();\n const defaultOptions = {\n allowBooleanAttributes: false,\n //A tag can have attributes without any value\n unpairedTags: []\n };\n validator.validate = function(xmlData, options) {\n options = Object.assign({}, defaultOptions, 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 i2 = 0; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"<\" && xmlData[i2 + 1] === \"?\") {\n i2 += 2;\n i2 = readPI(xmlData, i2);\n if (i2.err) return i2;\n } else if (xmlData[i2] === \"<\") {\n let tagStartPos = i2;\n i2++;\n if (xmlData[i2] === \"!\") {\n i2 = readCommentAndCDATA(xmlData, i2);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i2] === \"/\") {\n closingTag = true;\n i2++;\n }\n let tagName = \"\";\n for (; i2 < xmlData.length && xmlData[i2] !== \">\" && xmlData[i2] !== \" \" && xmlData[i2] !== \"\t\" && xmlData[i2] !== \"\\n\" && xmlData[i2] !== \"\\r\"; i2++) {\n tagName += xmlData[i2];\n }\n tagName = tagName.trim();\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substring(0, tagName.length - 1);\n i2--;\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, i2));\n }\n const result = readAttributeStr(xmlData, i2);\n if (result === false) {\n return getErrorObject(\"InvalidAttr\", \"Attributes for '\" + tagName + \"' have open quote.\", getLineNumberForPosition(xmlData, i2));\n }\n let attrStr = result.value;\n i2 = result.index;\n if (attrStr[attrStr.length - 1] === \"/\") {\n const attrStrStart = i2 - 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, i2));\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, i2 - attrStr.length + isValid.err.line));\n }\n if (reachedRoot === true) {\n return getErrorObject(\"InvalidXml\", \"Multiple possible root nodes found.\", getLineNumberForPosition(xmlData, i2));\n } else if (options.unpairedTags.indexOf(tagName) !== -1) ;\n else {\n tags.push({ tagName, tagStartPos });\n }\n tagFound = true;\n }\n for (i2++; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"<\") {\n if (xmlData[i2 + 1] === \"!\") {\n i2++;\n i2 = readCommentAndCDATA(xmlData, i2);\n continue;\n } else if (xmlData[i2 + 1] === \"?\") {\n i2 = readPI(xmlData, ++i2);\n if (i2.err) return i2;\n } else {\n break;\n }\n } else if (xmlData[i2] === \"&\") {\n const afterAmp = validateAmpersand(xmlData, i2);\n if (afterAmp == -1)\n return getErrorObject(\"InvalidChar\", \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i2));\n i2 = afterAmp;\n } else {\n if (reachedRoot === true && !isWhiteSpace(xmlData[i2])) {\n return getErrorObject(\"InvalidXml\", \"Extra text at the end\", getLineNumberForPosition(xmlData, i2));\n }\n }\n }\n if (xmlData[i2] === \"<\") {\n i2--;\n }\n }\n } else {\n if (isWhiteSpace(xmlData[i2])) {\n continue;\n }\n return getErrorObject(\"InvalidChar\", \"char '\" + xmlData[i2] + \"' is not expected.\", getLineNumberForPosition(xmlData, i2));\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 };\n function isWhiteSpace(char) {\n return char === \" \" || char === \"\t\" || char === \"\\n\" || char === \"\\r\";\n }\n function readPI(xmlData, i2) {\n const start = i2;\n for (; i2 < xmlData.length; i2++) {\n if (xmlData[i2] == \"?\" || xmlData[i2] == \" \") {\n const tagname = xmlData.substr(start, i2 - start);\n if (i2 > 5 && tagname === \"xml\") {\n return getErrorObject(\"InvalidXml\", \"XML declaration allowed only at the start of the document.\", getLineNumberForPosition(xmlData, i2));\n } else if (xmlData[i2] == \"?\" && xmlData[i2 + 1] == \">\") {\n i2++;\n break;\n } else {\n continue;\n }\n }\n }\n return i2;\n }\n function readCommentAndCDATA(xmlData, i2) {\n if (xmlData.length > i2 + 5 && xmlData[i2 + 1] === \"-\" && xmlData[i2 + 2] === \"-\") {\n for (i2 += 3; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"-\" && xmlData[i2 + 1] === \"-\" && xmlData[i2 + 2] === \">\") {\n i2 += 2;\n break;\n }\n }\n } else if (xmlData.length > i2 + 8 && xmlData[i2 + 1] === \"D\" && xmlData[i2 + 2] === \"O\" && xmlData[i2 + 3] === \"C\" && xmlData[i2 + 4] === \"T\" && xmlData[i2 + 5] === \"Y\" && xmlData[i2 + 6] === \"P\" && xmlData[i2 + 7] === \"E\") {\n let angleBracketsCount = 1;\n for (i2 += 8; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"<\") {\n angleBracketsCount++;\n } else if (xmlData[i2] === \">\") {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (xmlData.length > i2 + 9 && xmlData[i2 + 1] === \"[\" && xmlData[i2 + 2] === \"C\" && xmlData[i2 + 3] === \"D\" && xmlData[i2 + 4] === \"A\" && xmlData[i2 + 5] === \"T\" && xmlData[i2 + 6] === \"A\" && xmlData[i2 + 7] === \"[\") {\n for (i2 += 8; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"]\" && xmlData[i2 + 1] === \"]\" && xmlData[i2 + 2] === \">\") {\n i2 += 2;\n break;\n }\n }\n }\n return i2;\n }\n const doubleQuote = '\"';\n const singleQuote = \"'\";\n function readAttributeStr(xmlData, i2) {\n let attrStr = \"\";\n let startChar = \"\";\n let tagClosed = false;\n for (; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === doubleQuote || xmlData[i2] === singleQuote) {\n if (startChar === \"\") {\n startChar = xmlData[i2];\n } else if (startChar !== xmlData[i2]) ;\n else {\n startChar = \"\";\n }\n } else if (xmlData[i2] === \">\") {\n if (startChar === \"\") {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i2];\n }\n if (startChar !== \"\") {\n return false;\n }\n return {\n value: attrStr,\n index: i2,\n tagClosed\n };\n }\n const validAttrStrRegxp = new RegExp(`(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\"])(([\\\\s\\\\S])*?)\\\\5)?`, \"g\");\n function validateAttributeString(attrStr, options) {\n const matches = util2.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n for (let i2 = 0; i2 < matches.length; i2++) {\n if (matches[i2][1].length === 0) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + matches[i2][2] + \"' has no space in starting.\", getPositionFromMatch(matches[i2]));\n } else if (matches[i2][3] !== void 0 && matches[i2][4] === void 0) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + matches[i2][2] + \"' is without value.\", getPositionFromMatch(matches[i2]));\n } else if (matches[i2][3] === void 0 && !options.allowBooleanAttributes) {\n return getErrorObject(\"InvalidAttr\", \"boolean attribute '\" + matches[i2][2] + \"' is not allowed.\", getPositionFromMatch(matches[i2]));\n }\n const attrName = matches[i2][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + attrName + \"' is an invalid name.\", getPositionFromMatch(matches[i2]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n attrNames[attrName] = 1;\n } else {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + attrName + \"' is repeated.\", getPositionFromMatch(matches[i2]));\n }\n }\n return true;\n }\n function validateNumberAmpersand(xmlData, i2) {\n let re2 = /\\d/;\n if (xmlData[i2] === \"x\") {\n i2++;\n re2 = /[\\da-fA-F]/;\n }\n for (; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \";\")\n return i2;\n if (!xmlData[i2].match(re2))\n break;\n }\n return -1;\n }\n function validateAmpersand(xmlData, i2) {\n i2++;\n if (xmlData[i2] === \";\")\n return -1;\n if (xmlData[i2] === \"#\") {\n i2++;\n return validateNumberAmpersand(xmlData, i2);\n }\n let count = 0;\n for (; i2 < xmlData.length; i2++, count++) {\n if (xmlData[i2].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i2] === \";\")\n break;\n return -1;\n }\n return i2;\n }\n function 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 }\n function validateAttrName(attrName) {\n return util2.isName(attrName);\n }\n function validateTagName(tagname) {\n return util2.isName(tagname);\n }\n function 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 }\n function getPositionFromMatch(match) {\n return match.startIndex + match[1].length;\n }\n return validator;\n}\nvar OptionsBuilder = {};\nvar hasRequiredOptionsBuilder;\nfunction requireOptionsBuilder() {\n if (hasRequiredOptionsBuilder) return OptionsBuilder;\n hasRequiredOptionsBuilder = 1;\n const defaultOptions = {\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, val) {\n return val;\n },\n attributeValueProcessor: function(attrName, val) {\n return val;\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 };\n const buildOptions = function(options) {\n return Object.assign({}, defaultOptions, options);\n };\n OptionsBuilder.buildOptions = buildOptions;\n OptionsBuilder.defaultOptions = defaultOptions;\n return OptionsBuilder;\n}\nvar xmlNode;\nvar hasRequiredXmlNode;\nfunction requireXmlNode() {\n if (hasRequiredXmlNode) return xmlNode;\n hasRequiredXmlNode = 1;\n class XmlNode {\n constructor(tagname) {\n this.tagname = tagname;\n this.child = [];\n this[\":@\"] = {};\n }\n add(key, val) {\n if (key === \"__proto__\") key = \"#__proto__\";\n this.child.push({ [key]: val });\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 }\n xmlNode = XmlNode;\n return xmlNode;\n}\nvar DocTypeReader;\nvar hasRequiredDocTypeReader;\nfunction requireDocTypeReader() {\n if (hasRequiredDocTypeReader) return DocTypeReader;\n hasRequiredDocTypeReader = 1;\n const util2 = requireUtil();\n function readDocType(xmlData, i2) {\n const entities = {};\n if (xmlData[i2 + 3] === \"O\" && xmlData[i2 + 4] === \"C\" && xmlData[i2 + 5] === \"T\" && xmlData[i2 + 6] === \"Y\" && xmlData[i2 + 7] === \"P\" && xmlData[i2 + 8] === \"E\") {\n i2 = i2 + 9;\n let angleBracketsCount = 1;\n let hasBody = false, comment = false;\n let exp = \"\";\n for (; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"<\" && !comment) {\n if (hasBody && isEntity(xmlData, i2)) {\n i2 += 7;\n let entityName, val;\n [entityName, val, i2] = readEntityExp(xmlData, i2 + 1);\n if (val.indexOf(\"&\") === -1)\n entities[validateEntityName(entityName)] = {\n regx: RegExp(`&${entityName};`, \"g\"),\n val\n };\n } else if (hasBody && isElement(xmlData, i2)) i2 += 8;\n else if (hasBody && isAttlist(xmlData, i2)) i2 += 8;\n else if (hasBody && isNotation(xmlData, i2)) i2 += 9;\n else comment = true;\n angleBracketsCount++;\n exp = \"\";\n } else if (xmlData[i2] === \">\") {\n if (comment) {\n if (xmlData[i2 - 1] === \"-\" && xmlData[i2 - 2] === \"-\") {\n comment = false;\n angleBracketsCount--;\n }\n } else {\n angleBracketsCount--;\n }\n if (angleBracketsCount === 0) {\n break;\n }\n } else if (xmlData[i2] === \"[\") {\n hasBody = true;\n } else {\n exp += xmlData[i2];\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: i2 };\n }\n function readEntityExp(xmlData, i2) {\n let entityName = \"\";\n for (; i2 < xmlData.length && (xmlData[i2] !== \"'\" && xmlData[i2] !== '\"'); i2++) {\n entityName += xmlData[i2];\n }\n entityName = entityName.trim();\n if (entityName.indexOf(\" \") !== -1) throw new Error(\"External entites are not supported\");\n const startChar = xmlData[i2++];\n let val = \"\";\n for (; i2 < xmlData.length && xmlData[i2] !== startChar; i2++) {\n val += xmlData[i2];\n }\n return [entityName, val, i2];\n }\n function isEntity(xmlData, i2) {\n if (xmlData[i2 + 1] === \"!\" && xmlData[i2 + 2] === \"E\" && xmlData[i2 + 3] === \"N\" && xmlData[i2 + 4] === \"T\" && xmlData[i2 + 5] === \"I\" && xmlData[i2 + 6] === \"T\" && xmlData[i2 + 7] === \"Y\") return true;\n return false;\n }\n function isElement(xmlData, i2) {\n if (xmlData[i2 + 1] === \"!\" && xmlData[i2 + 2] === \"E\" && xmlData[i2 + 3] === \"L\" && xmlData[i2 + 4] === \"E\" && xmlData[i2 + 5] === \"M\" && xmlData[i2 + 6] === \"E\" && xmlData[i2 + 7] === \"N\" && xmlData[i2 + 8] === \"T\") return true;\n return false;\n }\n function isAttlist(xmlData, i2) {\n if (xmlData[i2 + 1] === \"!\" && xmlData[i2 + 2] === \"A\" && xmlData[i2 + 3] === \"T\" && xmlData[i2 + 4] === \"T\" && xmlData[i2 + 5] === \"L\" && xmlData[i2 + 6] === \"I\" && xmlData[i2 + 7] === \"S\" && xmlData[i2 + 8] === \"T\") return true;\n return false;\n }\n function isNotation(xmlData, i2) {\n if (xmlData[i2 + 1] === \"!\" && xmlData[i2 + 2] === \"N\" && xmlData[i2 + 3] === \"O\" && xmlData[i2 + 4] === \"T\" && xmlData[i2 + 5] === \"A\" && xmlData[i2 + 6] === \"T\" && xmlData[i2 + 7] === \"I\" && xmlData[i2 + 8] === \"O\" && xmlData[i2 + 9] === \"N\") return true;\n return false;\n }\n function validateEntityName(name) {\n if (util2.isName(name))\n return name;\n else\n throw new Error(`Invalid entity name ${name}`);\n }\n DocTypeReader = readDocType;\n return DocTypeReader;\n}\nvar strnum;\nvar hasRequiredStrnum;\nfunction requireStrnum() {\n if (hasRequiredStrnum) return strnum;\n hasRequiredStrnum = 1;\n const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\n const numRegex = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\n if (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n }\n if (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n }\n const consider = {\n hex: true,\n leadingZeros: true,\n decimalPoint: \".\",\n eNotation: true\n //skipLike: /regex/\n };\n function toNumber(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 }\n function 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 }\n strnum = toNumber;\n return strnum;\n}\nvar ignoreAttributes;\nvar hasRequiredIgnoreAttributes;\nfunction requireIgnoreAttributes() {\n if (hasRequiredIgnoreAttributes) return ignoreAttributes;\n hasRequiredIgnoreAttributes = 1;\n function getIgnoreAttributesFn(ignoreAttributes2) {\n if (typeof ignoreAttributes2 === \"function\") {\n return ignoreAttributes2;\n }\n if (Array.isArray(ignoreAttributes2)) {\n return (attrName) => {\n for (const pattern of ignoreAttributes2) {\n if (typeof pattern === \"string\" && attrName === pattern) {\n return true;\n }\n if (pattern instanceof RegExp && pattern.test(attrName)) {\n return true;\n }\n }\n };\n }\n return () => false;\n }\n ignoreAttributes = getIgnoreAttributesFn;\n return ignoreAttributes;\n}\nvar OrderedObjParser_1;\nvar hasRequiredOrderedObjParser;\nfunction requireOrderedObjParser() {\n if (hasRequiredOrderedObjParser) return OrderedObjParser_1;\n hasRequiredOrderedObjParser = 1;\n const util2 = requireUtil();\n const xmlNode2 = requireXmlNode();\n const readDocType = requireDocTypeReader();\n const toNumber = requireStrnum();\n const getIgnoreAttributesFn = requireIgnoreAttributes();\n 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;\n this.readStopNodeData = readStopNodeData;\n this.saveTextToParentTag = saveTextToParentTag;\n this.addChild = addChild;\n this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes);\n }\n }\n function addExternalEntities(externalEntities) {\n const entKeys = Object.keys(externalEntities);\n for (let i2 = 0; i2 < entKeys.length; i2++) {\n const ent = entKeys[i2];\n this.lastEntities[ent] = {\n regex: new RegExp(\"&\" + ent + \";\", \"g\"),\n val: externalEntities[ent]\n };\n }\n }\n function parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n if (val !== void 0) {\n if (this.options.trimValues && !dontTrim) {\n val = val.trim();\n }\n if (val.length > 0) {\n if (!escapeEntities) val = this.replaceEntitiesValue(val);\n const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode);\n if (newval === null || newval === void 0) {\n return val;\n } else if (typeof newval !== typeof val || newval !== val) {\n return newval;\n } else if (this.options.trimValues) {\n return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n const trimmedVal = val.trim();\n if (trimmedVal === val) {\n return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n return val;\n }\n }\n }\n }\n }\n function 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 }\n const attrsRegx = new RegExp(`([^\\\\s=]+)\\\\s*(=\\\\s*(['\"])([\\\\s\\\\S]*?)\\\\3)?`, \"gm\");\n function buildAttributesMap(attrStr, jPath, tagName) {\n if (this.options.ignoreAttributes !== true && typeof attrStr === \"string\") {\n const matches = util2.getAllMatches(attrStr, attrsRegx);\n const len = matches.length;\n const attrs = {};\n for (let i2 = 0; i2 < len; i2++) {\n const attrName = this.resolveNameSpace(matches[i2][1]);\n if (this.ignoreAttributesFn(attrName, jPath)) {\n continue;\n }\n let oldVal = matches[i2][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 }\n const parseXml = function(xmlData) {\n xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\");\n const xmlObj = new xmlNode2(\"!xml\");\n let currentNode = xmlObj;\n let textData = \"\";\n let jPath = \"\";\n for (let i2 = 0; i2 < xmlData.length; i2++) {\n const ch = xmlData[i2];\n if (ch === \"<\") {\n if (xmlData[i2 + 1] === \"/\") {\n const closeIndex = findClosingIndex(xmlData, \">\", i2, \"Closing Tag is not closed.\");\n let tagName = xmlData.substring(i2 + 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: </${tagName}>`);\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 i2 = closeIndex;\n } else if (xmlData[i2 + 1] === \"?\") {\n let tagData = readTagExp(xmlData, i2, 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 xmlNode2(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 i2 = tagData.closeIndex + 1;\n } else if (xmlData.substr(i2 + 1, 3) === \"!--\") {\n const endIndex = findClosingIndex(xmlData, \"-->\", i2 + 4, \"Comment is not closed.\");\n if (this.options.commentPropName) {\n const comment = xmlData.substring(i2 + 4, endIndex - 2);\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n currentNode.add(this.options.commentPropName, [{ [this.options.textNodeName]: comment }]);\n }\n i2 = endIndex;\n } else if (xmlData.substr(i2 + 1, 2) === \"!D\") {\n const result = readDocType(xmlData, i2);\n this.docTypeEntities = result.entities;\n i2 = result.i;\n } else if (xmlData.substr(i2 + 1, 2) === \"![\") {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i2, \"CDATA is not closed.\") - 2;\n const tagExp = xmlData.substring(i2 + 9, closeIndex);\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);\n if (val == void 0) val = \"\";\n if (this.options.cdataPropName) {\n currentNode.add(this.options.cdataPropName, [{ [this.options.textNodeName]: tagExp }]);\n } else {\n currentNode.add(this.options.textNodeName, val);\n }\n i2 = closeIndex + 2;\n } else {\n let result = readTagExp(xmlData, i2, 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 i2 = result.closeIndex;\n } else if (this.options.unpairedTags.indexOf(tagName) !== -1) {\n i2 = result.closeIndex;\n } else {\n const result2 = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n if (!result2) throw new Error(`Unexpected end of ${rawTagName}`);\n i2 = result2.i;\n tagContent = result2.tagContent;\n }\n const childNode = new xmlNode2(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 xmlNode2(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 xmlNode2(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 i2 = closeIndex;\n }\n }\n } else {\n textData += xmlData[i2];\n }\n }\n return xmlObj.child;\n };\n function 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 }\n const replaceEntitiesValue = function(val) {\n if (this.options.processEntities) {\n for (let entityName in this.docTypeEntities) {\n const entity = this.docTypeEntities[entityName];\n val = val.replace(entity.regx, entity.val);\n }\n for (let entityName in this.lastEntities) {\n const entity = this.lastEntities[entityName];\n val = val.replace(entity.regex, entity.val);\n }\n if (this.options.htmlEntities) {\n for (let entityName in this.htmlEntities) {\n const entity = this.htmlEntities[entityName];\n val = val.replace(entity.regex, entity.val);\n }\n }\n val = val.replace(this.ampEntity.regex, this.ampEntity.val);\n }\n return val;\n };\n function 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 }\n function 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 }\n function tagExpWithClosingIndex(xmlData, i2, closingChar = \">\") {\n let attrBoundary;\n let tagExp = \"\";\n for (let index = i2; 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 }\n function findClosingIndex(xmlData, str, i2, errMsg) {\n const closingIndex = xmlData.indexOf(str, i2);\n if (closingIndex === -1) {\n throw new Error(errMsg);\n } else {\n return closingIndex + str.length - 1;\n }\n }\n function readTagExp(xmlData, i2, removeNSPrefix, closingChar = \">\") {\n const result = tagExpWithClosingIndex(xmlData, i2 + 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 }\n function readStopNodeData(xmlData, tagName, i2) {\n const startIndex = i2;\n let openTagCount = 1;\n for (; i2 < xmlData.length; i2++) {\n if (xmlData[i2] === \"<\") {\n if (xmlData[i2 + 1] === \"/\") {\n const closeIndex = findClosingIndex(xmlData, \">\", i2, `${tagName} is not closed`);\n let closeTagName = xmlData.substring(i2 + 2, closeIndex).trim();\n if (closeTagName === tagName) {\n openTagCount--;\n if (openTagCount === 0) {\n return {\n tagContent: xmlData.substring(startIndex, i2),\n i: closeIndex\n };\n }\n }\n i2 = closeIndex;\n } else if (xmlData[i2 + 1] === \"?\") {\n const closeIndex = findClosingIndex(xmlData, \"?>\", i2 + 1, \"StopNode is not closed.\");\n i2 = closeIndex;\n } else if (xmlData.substr(i2 + 1, 3) === \"!--\") {\n const closeIndex = findClosingIndex(xmlData, \"-->\", i2 + 3, \"StopNode is not closed.\");\n i2 = closeIndex;\n } else if (xmlData.substr(i2 + 1, 2) === \"![\") {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i2, \"StopNode is not closed.\") - 2;\n i2 = closeIndex;\n } else {\n const tagData = readTagExp(xmlData, i2, \">\");\n if (tagData) {\n const openTagName = tagData && tagData.tagName;\n if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length - 1] !== \"/\") {\n openTagCount++;\n }\n i2 = tagData.closeIndex;\n }\n }\n }\n }\n }\n function parseValue(val, shouldParse, options) {\n if (shouldParse && typeof val === \"string\") {\n const newval = val.trim();\n if (newval === \"true\") return true;\n else if (newval === \"false\") return false;\n else return toNumber(val, options);\n } else {\n if (util2.isExist(val)) {\n return val;\n } else {\n return \"\";\n }\n }\n }\n OrderedObjParser_1 = OrderedObjParser;\n return OrderedObjParser_1;\n}\nvar node2json = {};\nvar hasRequiredNode2json;\nfunction requireNode2json() {\n if (hasRequiredNode2json) return node2json;\n hasRequiredNode2json = 1;\n function prettify(node, options) {\n return compress(node, options);\n }\n function compress(arr, options, jPath) {\n let text;\n const compressedObj = {};\n for (let i2 = 0; i2 < arr.length; i2++) {\n const tagObj = arr[i2];\n const property = propName(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 val = compress(tagObj[property], options, newJpath);\n const isLeaf = isLeafTag(val, options);\n if (tagObj[\":@\"]) {\n assignAttributes(val, tagObj[\":@\"], newJpath, options);\n } else if (Object.keys(val).length === 1 && val[options.textNodeName] !== void 0 && !options.alwaysCreateTextNode) {\n val = val[options.textNodeName];\n } else if (Object.keys(val).length === 0) {\n if (options.alwaysCreateTextNode) val[options.textNodeName] = \"\";\n else val = \"\";\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(val);\n } else {\n if (options.isArray(property, newJpath, isLeaf)) {\n compressedObj[property] = [val];\n } else {\n compressedObj[property] = val;\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 }\n function propName(obj) {\n const keys = Object.keys(obj);\n for (let i2 = 0; i2 < keys.length; i2++) {\n const key = keys[i2];\n if (key !== \":@\") return key;\n }\n }\n function assignAttributes(obj, attrMap, jpath, options) {\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length;\n for (let i2 = 0; i2 < len; i2++) {\n const atrrName = keys[i2];\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 }\n function 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 }\n node2json.prettify = prettify;\n return node2json;\n}\nvar XMLParser_1;\nvar hasRequiredXMLParser;\nfunction requireXMLParser() {\n if (hasRequiredXMLParser) return XMLParser_1;\n hasRequiredXMLParser = 1;\n const { buildOptions } = requireOptionsBuilder();\n const OrderedObjParser = requireOrderedObjParser();\n const { prettify } = requireNode2json();\n const validator2 = requireValidator();\n 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 = validator2.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 OrderedObjParser(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 '&#xD;'\");\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 }\n XMLParser_1 = XMLParser;\n return XMLParser_1;\n}\nvar orderedJs2Xml;\nvar hasRequiredOrderedJs2Xml;\nfunction requireOrderedJs2Xml() {\n if (hasRequiredOrderedJs2Xml) return orderedJs2Xml;\n hasRequiredOrderedJs2Xml = 1;\n const EOL = \"\\n\";\n function 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 }\n function arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n for (let i2 = 0; i2 < arr.length; i2++) {\n const tagObj = arr[i2];\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 += `<![CDATA[${tagObj[tagName][0][options.textNodeName]}]]>`;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + `<!--${tagObj[tagName][0][options.textNodeName]}-->`;\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}</${tagName}>`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"</\"))) {\n xmlStr += indentation + options.indentBy + tagValue + indentation;\n } else {\n xmlStr += tagValue;\n }\n xmlStr += `</${tagName}>`;\n }\n isPreviousElementTag = true;\n }\n return xmlStr;\n }\n function propName(obj) {\n const keys = Object.keys(obj);\n for (let i2 = 0; i2 < keys.length; i2++) {\n const key = keys[i2];\n if (!obj.hasOwnProperty(key)) continue;\n if (key !== \":@\") return key;\n }\n }\n function 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 }\n function 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 }\n function replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i2 = 0; i2 < options.entities.length; i2++) {\n const entity = options.entities[i2];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n }\n orderedJs2Xml = toXml;\n return orderedJs2Xml;\n}\nvar json2xml;\nvar hasRequiredJson2xml;\nfunction requireJson2xml() {\n if (hasRequiredJson2xml) return json2xml;\n hasRequiredJson2xml = 1;\n const buildFromOrderedJs = requireOrderedJs2Xml();\n const getIgnoreAttributesFn = requireIgnoreAttributes();\n const 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, a2) {\n return a2;\n },\n attributeValueProcessor: function(attrName, a2) {\n return a2;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&amp;\" },\n //it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \"&gt;\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"&lt;\" },\n { regex: new RegExp(\"'\", \"g\"), val: \"&apos;\" },\n { regex: new RegExp('\"', \"g\"), val: \"&quot;\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n };\n function Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes === true || this.options.attributesGroupName) {\n this.isAttribute = function() {\n return false;\n };\n } else {\n this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes);\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 }\n Builder.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 };\n Builder.prototype.j2x = function(jObj, level, ajPath) {\n let attrStr = \"\";\n let val = \"\";\n const jPath = ajPath.join(\".\");\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 val += \"\";\n }\n } else if (jObj[key] === null) {\n if (this.isAttribute(key)) {\n val += \"\";\n } else if (key[0] === \"?\") {\n val += this.indentate(level) + \"<\" + key + \"?\" + this.tagEndChar;\n } else {\n val += this.indentate(level) + \"<\" + key + \"/\" + this.tagEndChar;\n }\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextValNode(jObj[key], key, \"\", level);\n } else if (typeof jObj[key] !== \"object\") {\n const attr = this.isAttribute(key);\n if (attr && !this.ignoreAttributesFn(attr, jPath)) {\n attrStr += this.buildAttrPairStr(attr, \"\" + jObj[key]);\n } else if (!attr) {\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, \"\" + jObj[key]);\n val += this.replaceEntitiesValue(newval);\n } else {\n val += 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 let listTagAttr = \"\";\n for (let j2 = 0; j2 < arrLen; j2++) {\n const item = jObj[key][j2];\n if (typeof item === \"undefined\") ;\n else if (item === null) {\n if (key[0] === \"?\") val += this.indentate(level) + \"<\" + key + \"?\" + this.tagEndChar;\n else val += this.indentate(level) + \"<\" + key + \"/\" + this.tagEndChar;\n } else if (typeof item === \"object\") {\n if (this.options.oneListGroup) {\n const result = this.j2x(item, level + 1, ajPath.concat(key));\n listTagVal += result.val;\n if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) {\n listTagAttr += result.attrStr;\n }\n } else {\n listTagVal += this.processTextOrObjNode(item, key, level, ajPath);\n }\n } else {\n if (this.options.oneListGroup) {\n let textValue = this.options.tagValueProcessor(key, item);\n textValue = this.replaceEntitiesValue(textValue);\n listTagVal += textValue;\n } else {\n listTagVal += this.buildTextValNode(item, key, \"\", level);\n }\n }\n }\n if (this.options.oneListGroup) {\n listTagVal = this.buildObjectNode(listTagVal, key, listTagAttr, level);\n }\n val += 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 j2 = 0; j2 < L; j2++) {\n attrStr += this.buildAttrPairStr(Ks[j2], \"\" + jObj[key][Ks[j2]]);\n }\n } else {\n val += this.processTextOrObjNode(jObj[key], key, level, ajPath);\n }\n }\n }\n return { attrStr, val };\n };\n Builder.prototype.buildAttrPairStr = function(attrName, val) {\n val = this.options.attributeValueProcessor(attrName, \"\" + val);\n val = this.replaceEntitiesValue(val);\n if (this.options.suppressBooleanAttributes && val === \"true\") {\n return \" \" + attrName;\n } else return \" \" + attrName + '=\"' + val + '\"';\n };\n function processTextOrObjNode(object, key, level, ajPath) {\n const result = this.j2x(object, level + 1, ajPath.concat(key));\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 }\n Builder.prototype.buildObjectNode = function(val, key, attrStr, level) {\n if (val === \"\") {\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 = \"</\" + key + this.tagEndChar;\n let piClosingChar = \"\";\n if (key[0] === \"?\") {\n piClosingChar = \"?\";\n tagEndExp = \"\";\n }\n if ((attrStr || attrStr === \"\") && val.indexOf(\"<\") === -1) {\n return this.indentate(level) + \"<\" + key + attrStr + piClosingChar + \">\" + val + tagEndExp;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `<!--${val}-->` + this.newLine;\n } else {\n return this.indentate(level) + \"<\" + key + attrStr + piClosingChar + this.tagEndChar + val + this.indentate(level) + tagEndExp;\n }\n }\n };\n Builder.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 = `></${key}`;\n }\n return closeTag;\n };\n Builder.prototype.buildTextValNode = function(val, key, attrStr, level) {\n if (this.options.cdataPropName !== false && key === this.options.cdataPropName) {\n return this.indentate(level) + `<![CDATA[${val}]]>` + this.newLine;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `<!--${val}-->` + 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, val);\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 + \"</\" + key + this.tagEndChar;\n }\n }\n };\n Builder.prototype.replaceEntitiesValue = function(textValue) {\n if (textValue && textValue.length > 0 && this.options.processEntities) {\n for (let i2 = 0; i2 < this.options.entities.length; i2++) {\n const entity = this.options.entities[i2];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n };\n function indentate(level) {\n return this.options.indentBy.repeat(level);\n }\n function 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 }\n json2xml = Builder;\n return json2xml;\n}\nvar fxp;\nvar hasRequiredFxp;\nfunction requireFxp() {\n if (hasRequiredFxp) return fxp;\n hasRequiredFxp = 1;\n const validator2 = requireValidator();\n const XMLParser = requireXMLParser();\n const XMLBuilder = requireJson2xml();\n fxp = {\n XMLParser,\n XMLValidator: validator2,\n XMLBuilder\n };\n return fxp;\n}\nvar fxpExports = requireFxp();\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 (fxpExports.XMLValidator.validate(string) !== true) {\n return false;\n }\n let jsonObject;\n const parser = new fxpExports.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 get loadChildViews() {\n return this._view.loadChildViews;\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 (\"caption\" in view && typeof view.caption !== \"string\") {\n throw new Error(\"View caption 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 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 if (view.loadChildViews && typeof view.loadChildViews !== \"function\") {\n throw new Error(\"View loadChildViews must be a function\");\n }\n return true;\n};\nvar debug_1;\nvar hasRequiredDebug;\nfunction requireDebug() {\n if (hasRequiredDebug) return debug_1;\n hasRequiredDebug = 1;\n const debug = typeof process === \"object\" && process.env && process.env.NODE_DEBUG && /\\bsemver\\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error(\"SEMVER\", ...args) : () => {\n };\n debug_1 = debug;\n return debug_1;\n}\nvar constants;\nvar hasRequiredConstants;\nfunction requireConstants() {\n if (hasRequiredConstants) return constants;\n hasRequiredConstants = 1;\n const SEMVER_SPEC_VERSION = \"2.0.0\";\n const MAX_LENGTH = 256;\n const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */\n 9007199254740991;\n const MAX_SAFE_COMPONENT_LENGTH = 16;\n const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6;\n const RELEASE_TYPES = [\n \"major\",\n \"premajor\",\n \"minor\",\n \"preminor\",\n \"patch\",\n \"prepatch\",\n \"prerelease\"\n ];\n constants = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 1,\n FLAG_LOOSE: 2\n };\n return constants;\n}\nvar re = { exports: {} };\nvar hasRequiredRe;\nfunction requireRe() {\n if (hasRequiredRe) return re.exports;\n hasRequiredRe = 1;\n (function(module, exports) {\n const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH\n } = requireConstants();\n const debug = requireDebug();\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_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]\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 debug(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_LENGTH}})(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);\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, re.exports);\n return re.exports;\n}\nvar parseOptions_1;\nvar hasRequiredParseOptions;\nfunction requireParseOptions() {\n if (hasRequiredParseOptions) return parseOptions_1;\n hasRequiredParseOptions = 1;\n const looseOption = Object.freeze({ loose: true });\n const emptyOpts = Object.freeze({});\n const parseOptions = (options) => {\n if (!options) {\n return emptyOpts;\n }\n if (typeof options !== \"object\") {\n return looseOption;\n }\n return options;\n };\n parseOptions_1 = parseOptions;\n return parseOptions_1;\n}\nvar identifiers;\nvar hasRequiredIdentifiers;\nfunction requireIdentifiers() {\n if (hasRequiredIdentifiers) return identifiers;\n hasRequiredIdentifiers = 1;\n const numeric = /^[0-9]+$/;\n const compareIdentifiers = (a2, b2) => {\n const anum = numeric.test(a2);\n const bnum = numeric.test(b2);\n if (anum && bnum) {\n a2 = +a2;\n b2 = +b2;\n }\n return a2 === b2 ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a2 < b2 ? -1 : 1;\n };\n const rcompareIdentifiers = (a2, b2) => compareIdentifiers(b2, a2);\n identifiers = {\n compareIdentifiers,\n rcompareIdentifiers\n };\n return identifiers;\n}\nvar semver;\nvar hasRequiredSemver;\nfunction requireSemver() {\n if (hasRequiredSemver) return semver;\n hasRequiredSemver = 1;\n const debug = requireDebug();\n const { MAX_LENGTH, MAX_SAFE_INTEGER } = requireConstants();\n const { safeRe: re2, t: t2 } = requireRe();\n const parseOptions = requireParseOptions();\n const { compareIdentifiers } = requireIdentifiers();\n 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 m2 = version.trim().match(options.loose ? re2[t2.LOOSE] : re2[t2.FULL]);\n if (!m2) {\n throw new TypeError(`Invalid Version: ${version}`);\n }\n this.raw = version;\n this.major = +m2[1];\n this.minor = +m2[2];\n this.patch = +m2[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 (!m2[4]) {\n this.prerelease = [];\n } else {\n this.prerelease = m2[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 = m2[5] ? m2[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 i2 = 0;\n do {\n const a2 = this.prerelease[i2];\n const b2 = other.prerelease[i2];\n debug(\"prerelease compare\", i2, a2, b2);\n if (a2 === void 0 && b2 === void 0) {\n return 0;\n } else if (b2 === void 0) {\n return 1;\n } else if (a2 === void 0) {\n return -1;\n } else if (a2 === b2) {\n continue;\n } else {\n return compareIdentifiers(a2, b2);\n }\n } while (++i2);\n }\n compareBuild(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n let i2 = 0;\n do {\n const a2 = this.build[i2];\n const b2 = other.build[i2];\n debug(\"build compare\", i2, a2, b2);\n if (a2 === void 0 && b2 === void 0) {\n return 0;\n } else if (b2 === void 0) {\n return 1;\n } else if (a2 === void 0) {\n return -1;\n } else if (a2 === b2) {\n continue;\n } else {\n return compareIdentifiers(a2, b2);\n }\n } while (++i2);\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 // If the input is a non-prerelease version, this acts the same as\n // prepatch.\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 // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\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 i2 = this.prerelease.length;\n while (--i2 >= 0) {\n if (typeof this.prerelease[i2] === \"number\") {\n this.prerelease[i2]++;\n i2 = -2;\n }\n }\n if (i2 === -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 }\n semver = SemVer;\n return semver;\n}\nvar parse_1;\nvar hasRequiredParse;\nfunction requireParse() {\n if (hasRequiredParse) return parse_1;\n hasRequiredParse = 1;\n const SemVer = requireSemver();\n const parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version;\n }\n try {\n return new SemVer(version, options);\n } catch (er) {\n if (!throwErrors) {\n return null;\n }\n throw er;\n }\n };\n parse_1 = parse;\n return parse_1;\n}\nvar valid_1;\nvar hasRequiredValid;\nfunction requireValid() {\n if (hasRequiredValid) return valid_1;\n hasRequiredValid = 1;\n const parse = requireParse();\n const valid2 = (version, options) => {\n const v = parse(version, options);\n return v ? v.version : null;\n };\n valid_1 = valid2;\n return valid_1;\n}\nvar validExports = requireValid();\nconst valid = /* @__PURE__ */ getDefaultExportFromCjs(validExports);\nvar major_1;\nvar hasRequiredMajor;\nfunction requireMajor() {\n if (hasRequiredMajor) return major_1;\n hasRequiredMajor = 1;\n const SemVer = requireSemver();\n const major2 = (a2, loose) => new SemVer(a2, loose).major;\n major_1 = major2;\n return major_1;\n}\nvar majorExports = requireMajor();\nconst major = /* @__PURE__ */ getDefaultExportFromCjs(majorExports);\nclass ProxyBus {\n bus;\n constructor(bus2) {\n if (typeof bus2.getVersion !== \"function\" || !valid(bus2.getVersion())) {\n console.warn(\"Proxying an event bus with an unknown or invalid version\");\n } else if (major(bus2.getVersion()) !== major(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((h2) => h2 !== handler)\n );\n }\n emit(name, event) {\n (this.handlers.get(name) || []).forEach((h2) => {\n try {\n h2(event);\n } catch (e2) {\n console.error(\"could not invoke event listener\", e2);\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((a2, b2) => {\n if (a2.order !== void 0 && b2.order !== void 0 && a2.order !== b2.order) {\n return a2.order - b2.order;\n }\n return a2.displayName.localeCompare(b2.displayName, void 0, { numeric: true, sensitivity: \"base\" });\n });\n};\nexport {\n Column,\n DefaultType,\n q as File,\n FileAction,\n FileListAction,\n FileListFilter,\n F as FileType,\n FilesSortingMode,\n s as Folder,\n Header,\n InvalidFilenameError,\n InvalidFilenameErrorReason,\n Navigation,\n NewMenuEntryCategory,\n N as Node,\n t as NodeStatus,\n P as Permission,\n View,\n addNewFileMenuEntry,\n c as davGetClient,\n l as davGetDefaultPropfind,\n m as davGetFavoritesReport,\n n as davGetRecentSearch,\n a as davGetRemoteURL,\n g as davGetRootPath,\n p as davParsePermissions,\n b as davRemoteURL,\n r as davResultToNode,\n d as davRootPath,\n h as defaultDavNamespaces,\n f as defaultDavProperties,\n formatFileSize,\n k as getDavNameSpaces,\n j as getDavProperties,\n e as getFavoriteNodes,\n getFileActions,\n getFileListActions,\n getFileListFilters,\n getFileListHeaders,\n getNavigation,\n getNewFileMenuEntries,\n getUniqueName,\n isFilenameValid,\n orderBy,\n parseFileSize,\n i as registerDavProperty,\n registerFileAction,\n registerFileListAction,\n registerFileListFilter,\n registerFileListHeaders,\n removeNewFileMenuEntry,\n sortNodes,\n unregisterFileListFilter,\n validateFilename\n};\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { getLoggerBuilder } from '@nextcloud/logger';\nexport default getLoggerBuilder()\n .setApp('settings')\n .detectUser()\n .build();\n","exports.sync = function (store, router, options) {\n var moduleName = (options || {}).moduleName || 'route'\n\n store.registerModule(moduleName, {\n namespaced: true,\n state: cloneRoute(router.currentRoute),\n mutations: {\n 'ROUTE_CHANGED': function ROUTE_CHANGED (state, transition) {\n store.state[moduleName] = cloneRoute(transition.to, transition.from)\n }\n }\n })\n\n var isTimeTraveling = false\n var currentPath\n\n // sync router on store change\n var storeUnwatch = store.watch(\n function (state) { return state[moduleName]; },\n function (route) {\n var fullPath = route.fullPath;\n if (fullPath === currentPath) {\n return\n }\n if (currentPath != null) {\n isTimeTraveling = true\n router.push(route)\n }\n currentPath = fullPath\n },\n { sync: true }\n )\n\n // sync store on router navigation\n var afterEachUnHook = router.afterEach(function (to, from) {\n if (isTimeTraveling) {\n isTimeTraveling = false\n return\n }\n currentPath = to.fullPath\n store.commit(moduleName + '/ROUTE_CHANGED', { to: to, from: from })\n })\n\n return function unsync () {\n // On unsync, remove router hook\n if (afterEachUnHook != null) {\n afterEachUnHook()\n }\n\n // On unsync, remove store watch\n if (storeUnwatch != null) {\n storeUnwatch()\n }\n\n // On unsync, unregister Module with store\n store.unregisterModule(moduleName)\n }\n}\n\nfunction cloneRoute (to, from) {\n var clone = {\n name: to.name,\n path: to.path,\n hash: to.hash,\n query: to.query,\n params: to.params,\n fullPath: to.fullPath,\n meta: to.meta\n }\n if (from) {\n clone.from = cloneRoute(from)\n }\n return Object.freeze(clone)\n}\n\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"3239\":\"settings-users\",\"4529\":\"settings-apps-view\"}[chunkId] || chunkId) + \"-\" + chunkId + \".js?v=\" + {\"459\":\"975afd1e02f53abf8034\",\"1023\":\"06cf5496a0a2d7ef494a\",\"2441\":\"2c050d23f9070dfa7f03\",\"3239\":\"2f789c2165a546fed1fa\",\"4529\":\"96ac57466d9cc1a26328\",\"5862\":\"142cd48ca8ec32e57725\",\"6227\":\"3494381758c4754ef3f5\",\"7265\":\"3ea08242e475ac7a22e1\",\"8737\":\"1ee3b21131ac8193a04d\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2689;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2689: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(12836)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","sanitize","url","replace","requireAdmin","confirmPassword","get","options","axios","post","data","patch","put","delete","params","_defineComponent","__name","setup","__props","__sfc","NcContent","_vm","this","_c","_self","_setupProxy","attrs","_v","name","path","components","default","UserManagement","navigation","UserManagementNavigation","props","children","redirect","category","loadState","AppStore","AppStoreNavigation","sidebar","AppStoreSidebar","Vue","use","Router","mode","base","generateUrl","linkActiveClass","routes","__webpack_nonce__","getCSPNonce","prototype","t","n","PiniaVuePlugin","VTooltipPlugin","defaultHtml","Vuex","store","useStore","sync","router","pinia","createPinia","render","h","SettingsApp","el","naturalCollator","Intl","Collator","getLanguage","getCanonicalLocale","numeric","usage","usersSettings","localStorage","getBuilder","persist","build","defaults","id","usercount","disabled","canAdd","canRemove","state","users","groups","systemGroups","orderBy","sortGroups","GroupSorting","UserCount","minPasswordLength","usersOffset","usersLimit","disabledUsersOffset","disabledUsersLimit","userCount","showConfig","showStoragePath","getItem","showUserBackend","showFirstLogin","showLastLogin","showNewUserForm","showLanguages","mutations","appendUsers","usersObj","existingUsers","map","_ref","newUsers","Object","values","filter","_ref2","includes","concat","updateDisabledUsers","_usersObj","setPasswordPolicyMinLength","length","addGroup","newGroup","find","group","assign","unshift","e","console","error","renameGroup","_ref3","gid","displayName","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","_ref4","userid","user","enabled","push","removeUserGroup","_ref5","indexOf","addUserSubAdmin","_ref6","subadmin","removeUserSubAdmin","_ref7","deleteUser","userIndex","commit","actionType","addUserData","response","ocs","enableDisableUser","_ref8","updateUserCounts","_ref9","recentGroup","disabledGroup","forEach","userGroup","warn","logger","setUserData","_ref10","key","value","humanValue","parseFileSize","resetUsers","resetGroups","setShowConfig","_ref11","setItem","JSON","stringify","setGroupSorting","sorting","oldValue","String","catch","showError","getters","getUsers","getGroups","getSortedGroups","sort","a","b","numA","numB","compare","getGroupSorting","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getDisabledUsersOffset","getDisabledUsersLimit","getUserCount","getShowConfig","CancelToken","searchRequestCancelSource","actions","searchUsers","context","_ref12","offset","limit","search","api","generateOcsUrl","getUser","userId","_ref13","cancel","source","trim","encodeURIComponent","cancelToken","token","then","usersCount","keys","getRecentUsers","_ref14","getDisabledUsers","_ref15","_ref16","limitParam","getUsersFromList","_ref17","getUsersFromGroup","_ref18","groupid","groupId","getCapabilities","password_policy","minLength","_ref19","_ref20","_ref21","_ref22","_ref23","wipeUserDevices","Promise","reject","Error","addUser","_ref24","_ref25","dispatch","password","email","quota","language","manager","_ref26","userStatus","_ref27","allowedEmpty","sendWelcomeMail","apps","bundles","categories","updateCount","loading","gettingCategoriesPromise","appApiEnabled","APPS_API_FAILURE","message","isHTML","initCategories","updateCategories","categoriesPromise","setUpdateCount","addCategory","appendCategories","categoriesArray","setAllApps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","setInstallState","canInstall","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","updateApp","version","update","resetApps","reset","startLoading","stopLoading","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","finally","getAllApps","getCategories","shouldRefetchCategories","arguments","undefined","categoriesPromiseResponse","isAppApiEnabled","getAppBundles","getUpdateCount","getCategoryById","selectedCategoryId","serverData","setServerData","getServerData","setAppConfig","API_FAILURE","meta","Store","modules","settings","oc","strict","process","humanList","humanListBinary","formatFileSize","size","skipSmallSizes","binaryPrefixes","base1000","Number","order","Math","floor","log","min","readableFormat","relativeSize","pow","toFixed","parseFloat","toLocaleString","forceBinary","toLocaleLowerCase","replaceAll","e2","match","decimalString","round","k","m","g","p","Date","toISOString","sortNodes","nodes","sortingOptions","sortingMode","sortingOrder","collection","identifiers2","orders","_","index","collator","a2","b2","identifier","entries","sortFavoritesFirst","v","attributes","favorite","sortFoldersFirst","type","basename2","displayname","basename","lastIndexOf","slice","hasRequiredUtil","hasRequiredValidator","validator","util","requireUtil","exports","nameStartChar","nameRegexp","regexName","RegExp","isExist","isEmptyObject","obj","merge","target","arrayMode","len","i2","getValue","isName","string","exec","getAllMatches","regex","matches","allmatches","startIndex","lastIndex","requireValidator","util2","defaultOptions","allowBooleanAttributes","unpairedTags","isWhiteSpace","char","readPI","xmlData","start","tagname","substr","getErrorObject","getLineNumberForPosition","readCommentAndCDATA","angleBracketsCount","validate","tags","tagFound","reachedRoot","err","tagStartPos","closingTag","tagName","substring","msg","result","readAttributeStr","attrStr","attrStrStart","isValid","validateAttributeString","code","line","tagClosed","otg","pop","openPos","col","afterAmp","validateAmpersand","t2","doubleQuote","singleQuote","startChar","validAttrStrRegxp","attrNames","getPositionFromMatch","attrName","validateAttrName","hasOwnProperty","re2","validateNumberAmpersand","count","lineNumber","lines","split","hasRequiredOptionsBuilder","xmlNode","hasRequiredXmlNode","DocTypeReader","hasRequiredDocTypeReader","strnum","hasRequiredStrnum","ignoreAttributes","hasRequiredIgnoreAttributes","OrderedObjParser_1","hasRequiredOrderedObjParser","OptionsBuilder","requireIgnoreAttributes","ignoreAttributes2","pattern","test","hasRequiredNode2json","XMLParser_1","hasRequiredXMLParser","orderedJs2Xml","hasRequiredOrderedJs2Xml","json2xml","hasRequiredJson2xml","fxp","hasRequiredFxp","debug_1","hasRequiredDebug","constants","hasRequiredConstants","node2json","requireNode2json","compress","arr","jPath","text","compressedObj","tagObj","property","propName","newJpath","textNodeName","val","isLeaf","isLeafTag","assignAttributes","alwaysCreateTextNode","attrMap","jpath","atrrName","propCount","prettify","node","requireXMLParser","buildOptions","preserveOrder","attributeNamePrefix","attributesGroupName","removeNSPrefix","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","attributeValueProcessor","stopNodes","commentPropName","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","requireOptionsBuilder","OrderedObjParser","xmlNode2","constructor","child","add","addChild","readDocType","readEntityExp","entityName","isEntity","isElement","isAttlist","isNotation","validateEntityName","entities","hasBody","comment","exp","regx","i","requireDocTypeReader","toNumber","hexRegex","numRegex","parseInt","consider","decimalPoint","str","trimmedStr","skipLike","sign","numTrimmedByZeros","numStr","num","requireStrnum","getIgnoreAttributesFn","addExternalEntities","externalEntities","entKeys","ent","lastEntities","parseTextData","dontTrim","hasAttributes","isLeafNode","escapeEntities","replaceEntitiesValue","newval","parseValue","resolveNameSpace","prefix","charAt","attrsRegx","buildAttributesMap","ignoreAttributesFn","oldVal","aName","newVal","attrCollection","parseXml","xmlObj","currentNode","textData","closeIndex","findClosingIndex","colonIndex","saveTextToParentTag","lastTagName","propIndex","tagsNodeStack","tagData","readTagExp","childNode","tagExp","attrExpPresent","endIndex","docTypeEntities","rawTagName","lastTag","isItStopNode","tagContent","result2","readStopNodeData","entity","ampEntity","currentTagName","allNodesExp","stopNodePath","stopNodeExp","errMsg","closingIndex","closingChar","attrBoundary","ch","tagExpWithClosingIndex","separatorIndex","trimStart","openTagCount","shouldParse","fromCharCode","requireOrderedObjParser","validator2","parse","validationOption","toString","orderedObjParser","orderedResult","addEntity","requireOrderedJs2Xml","arrToStr","indentation","xmlStr","isPreviousElementTag","newJPath","tagText","isStopNode","attStr2","attr_to_str","tempInd","piTextNodeName","newIdentation","indentBy","tagStart","tagValue","suppressUnpairedNode","suppressEmptyNode","endsWith","attr","attrVal","suppressBooleanAttributes","textValue","jArray","format","requireDebug","debug","env","NODE_DEBUG","args","requireConstants","MAX_SAFE_INTEGER","MAX_LENGTH","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","RELEASE_TYPES","SEMVER_SPEC_VERSION","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","XMLParser","XMLBuilder","buildFromOrderedJs","oneListGroup","Builder","isAttribute","attrPrefixLen","processTextOrObjNode","indentate","tagEndChar","newLine","object","level","ajPath","j2x","buildTextValNode","buildObjectNode","repeat","startsWith","jObj","arrayNodeName","join","call","buildAttrPairStr","arrLen","listTagVal","listTagAttr","j2","item","Ks","L","closeTag","tagEndExp","piClosingChar","requireJson2xml","XMLValidator","requireFxp","hasRequiredRe","parseOptions_1","hasRequiredParseOptions","identifiers","hasRequiredIdentifiers","semver","hasRequiredSemver","parse_1","hasRequiredParse","valid_1","hasRequiredValid","major_1","hasRequiredMajor","re","requireSemver","safeRe","module","src","R","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","safe","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","parseOptions","looseOption","freeze","loose","emptyOpts","requireParseOptions","compareIdentifiers","anum","bnum","rcompareIdentifiers","requireIdentifiers","SemVer","includePrerelease","TypeError","m2","LOOSE","FULL","raw","major","minor","prerelease","other","compareMain","comparePre","compareBuild","inc","release","identifierBase","isNaN","throwErrors","er","requireParse","requireValid","requireMajor","getLoggerBuilder","setApp","detectUser","cloneRoute","to","from","clone","hash","query","fullPath","moduleName","registerModule","namespaced","currentRoute","transition","currentPath","isTimeTraveling","storeUnwatch","watch","route","afterEachUnHook","afterEach","unregisterModule","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","r","getter","__esModule","d","definition","o","defineProperty","enumerable","f","chunkId","all","reduce","promises","u","globalThis","Function","prop","l","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","toUpperCase","baseURI","self","href","installedChunks","installedChunkData","promise","resolve","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/lib/l10n/uk.js b/lib/l10n/uk.js
index 3d29de9a772..f63a5bda6bb 100644
--- a/lib/l10n/uk.js
+++ b/lib/l10n/uk.js
@@ -336,6 +336,7 @@ OC.L10N.register(
"Generate image" : "Зґенерувати зображення",
"Prompt" : "Запрошення",
"Chat" : "Чат",
+ "Available tools" : "Доступні інструменти",
"Generates a possible headline for a text." : "Створює ймовірний заголовок тексту.",
"Text" : "Текст",
"Summarize" : "Підсумок",
diff --git a/lib/l10n/uk.json b/lib/l10n/uk.json
index 4a4fba617b4..dec967a6c07 100644
--- a/lib/l10n/uk.json
+++ b/lib/l10n/uk.json
@@ -334,6 +334,7 @@
"Generate image" : "Зґенерувати зображення",
"Prompt" : "Запрошення",
"Chat" : "Чат",
+ "Available tools" : "Доступні інструменти",
"Generates a possible headline for a text." : "Створює ймовірний заголовок тексту.",
"Text" : "Текст",
"Summarize" : "Підсумок",
diff --git a/lib/private/Preview/Watcher.php b/lib/private/Preview/Watcher.php
index abddd7b5acb..21f040d8342 100644
--- a/lib/private/Preview/Watcher.php
+++ b/lib/private/Preview/Watcher.php
@@ -8,6 +8,7 @@ declare(strict_types=1);
*/
namespace OC\Preview;
+use OCP\Files\FileInfo;
use OCP\Files\Folder;
use OCP\Files\IAppData;
use OCP\Files\Node;
@@ -37,7 +38,7 @@ class Watcher {
$this->deleteNode($node);
}
- protected function deleteNode(Node $node) {
+ protected function deleteNode(FileInfo $node) {
// We only handle files
if ($node instanceof Folder) {
return;
diff --git a/lib/private/Preview/WatcherConnector.php b/lib/private/Preview/WatcherConnector.php
index ae2a136ca78..c34dd1dde4d 100644
--- a/lib/private/Preview/WatcherConnector.php
+++ b/lib/private/Preview/WatcherConnector.php
@@ -9,43 +9,33 @@ declare(strict_types=1);
namespace OC\Preview;
use OC\SystemConfig;
+use OCA\Files_Versions\Events\VersionRestoredEvent;
+use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\IRootFolder;
use OCP\Files\Node;
class WatcherConnector {
- /** @var IRootFolder */
- private $root;
-
- /** @var SystemConfig */
- private $config;
-
- /**
- * WatcherConnector constructor.
- *
- * @param IRootFolder $root
- * @param SystemConfig $config
- */
- public function __construct(IRootFolder $root,
- SystemConfig $config) {
- $this->root = $root;
- $this->config = $config;
+ public function __construct(
+ private IRootFolder $root,
+ private SystemConfig $config,
+ private IEventDispatcher $dispatcher,
+ ) {
}
- /**
- * @return Watcher
- */
private function getWatcher(): Watcher {
return \OCP\Server::get(Watcher::class);
}
- public function connectWatcher() {
+ public function connectWatcher(): void {
// Do not connect if we are not setup yet!
if ($this->config->getValue('instanceid', null) !== null) {
$this->root->listen('\OC\Files', 'postWrite', function (Node $node) {
$this->getWatcher()->postWrite($node);
});
- \OC_Hook::connect('\OCP\Versions', 'rollback', $this->getWatcher(), 'versionRollback');
+ $this->dispatcher->addListener(VersionRestoredEvent::class, function (VersionRestoredEvent $event) {
+ $this->getWatcher()->versionRollback(['node' => $event->getVersion()->getSourceFile()]);
+ });
}
}
}
diff --git a/lib/private/Server.php b/lib/private/Server.php
index 4d79fefd261..545ceacbe81 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -411,7 +411,8 @@ class Server extends ServerContainer implements IServerContainer {
$previewConnector = new \OC\Preview\WatcherConnector(
$root,
- $c->get(SystemConfig::class)
+ $c->get(SystemConfig::class),
+ $this->get(IEventDispatcher::class)
);
$previewConnector->connectWatcher();
diff --git a/package-lock.json b/package-lock.json
index 8940e25ca15..14d5ce641f1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -138,12 +138,12 @@
"karma-spec-reporter": "^0.0.36",
"karma-viewport": "^1.0.9",
"mime": "^4.0.7",
- "puppeteer": "^24.7.0",
+ "puppeteer": "^24.7.2",
"raw-loader": "^4.0.2",
"regextras": "^0.8.0",
"sass": "^1.87.0",
"sinon": "<= 5.0.7",
- "stylelint": "^16.18.0",
+ "stylelint": "^16.19.1",
"stylelint-use-logical": "^2.1.2",
"tar": "^7.4.3",
"ts-node": "^10.9.1",
@@ -4727,9 +4727,9 @@
"license": "BSD-3-Clause"
},
"node_modules/@puppeteer/browsers": {
- "version": "2.10.1",
- "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.1.tgz",
- "integrity": "sha512-NgghEvl9fTZdXvxBHMgTlEVrjhDsbOfXgXzoarsV6o/arp2SvOOzZfFlKpxwLHJo7vVULq9Q/Dg76lUddLxgog==",
+ "version": "2.10.2",
+ "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.2.tgz",
+ "integrity": "sha512-i4Ez+s9oRWQbNjtI/3+jxr7OH508mjAKvza0ekPJem0ZtmsYHP3B5dq62+IaBHKaGCOuqJxXzvFLUhJvQ6jtsQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -8337,9 +8337,9 @@
"optional": true
},
"node_modules/bare-fs": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.2.tgz",
- "integrity": "sha512-8wSeOia5B7LwD4+h465y73KOdj5QHsbbuoUfPBi+pXgFJIPuG7SsiOdJuijWMyfid49eD+WivpfY7KT8gbAzBA==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.3.tgz",
+ "integrity": "sha512-OeEZYIg+2qepaWLyphaOXHAHKo3xkM8y3BeGAvHdMN8GNWvEAU1Yw6rYpGzu/wDDbKxgEjVeVDpgGhDzaeMpjg==",
"dev": true,
"license": "Apache-2.0",
"optional": true,
@@ -8926,20 +8926,20 @@
}
},
"node_modules/cacheable": {
- "version": "1.8.9",
- "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.9.tgz",
- "integrity": "sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==",
+ "version": "1.8.10",
+ "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.10.tgz",
+ "integrity": "sha512-0ZnbicB/N2R6uziva8l6O6BieBklArWyiGx4GkwAhLKhSHyQtRfM9T1nx7HHuHDKkYB/efJQhz3QJ6x/YqoZzA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "hookified": "^1.7.1",
- "keyv": "^5.3.1"
+ "hookified": "^1.8.1",
+ "keyv": "^5.3.2"
}
},
"node_modules/cacheable/node_modules/keyv": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.2.tgz",
- "integrity": "sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==",
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.3.tgz",
+ "integrity": "sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9154,9 +9154,9 @@
}
},
"node_modules/chromium-bidi": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-4.0.1.tgz",
- "integrity": "sha512-oRgKuzRQYXEUBlrlXWeBbot0KLyFOAwTe0pt3EJYZ1I0yvvr1dl6zhnUxlkKvSAk0pin+c1SxeuxBILISEgIEw==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-4.1.1.tgz",
+ "integrity": "sha512-biR7t4vF3YluE6RlMSk9IWk+b9U+WWyzHp+N2pL9vRTk+UXHYRTVp7jTK58ZNzMLBgoLMHY4QyJMbeuw3eKxqg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -14841,9 +14841,9 @@
}
},
"node_modules/hookified": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.8.1.tgz",
- "integrity": "sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==",
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.8.2.tgz",
+ "integrity": "sha512-5nZbBNP44sFCDjSoB//0N7m508APCgbQ4mGGo1KJGBYyCKNHfry1Pvd0JVHZIxjdnqn8nFRBAN/eFB6Rk/4w5w==",
"dev": true,
"license": "MIT"
},
@@ -20377,18 +20377,18 @@
"license": "MIT"
},
"node_modules/puppeteer": {
- "version": "24.7.0",
- "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.7.0.tgz",
- "integrity": "sha512-txRZf6QPYEBhnyzzPMCvWm20tstDbbN+j2e9L6+ib4Q+/9+d2V2CPfFnF0mbcW3txEwDlYrN84YLRYpS9/eSOw==",
+ "version": "24.7.2",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.7.2.tgz",
+ "integrity": "sha512-ifYqoY6wGs0yZeFuFPn8BE9FhuveXkarF+eO18I2e/axdoCh4Qh1AE+qXdJBhdaeoPt6eRNTY4Dih29Jbq8wow==",
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
- "@puppeteer/browsers": "2.10.1",
- "chromium-bidi": "4.0.1",
+ "@puppeteer/browsers": "2.10.2",
+ "chromium-bidi": "4.1.1",
"cosmiconfig": "^9.0.0",
"devtools-protocol": "0.0.1425554",
- "puppeteer-core": "24.7.0",
+ "puppeteer-core": "24.7.2",
"typed-query-selector": "^2.12.0"
},
"bin": {
@@ -20399,14 +20399,14 @@
}
},
"node_modules/puppeteer-core": {
- "version": "24.7.0",
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.7.0.tgz",
- "integrity": "sha512-NEqVstBfP8S0L2PSLbGAVuLPXuvE83zfOf0qo3TadfzT62liurQJL5EC0XZ0dGxs5auBPHYncyJUwQymJuk/Hw==",
+ "version": "24.7.2",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.7.2.tgz",
+ "integrity": "sha512-P9pZyTmJqKODFCnkZgemCpoFA4LbAa8+NumHVQKyP5X9IgdNS1ZnAnIh1sMAwhF8/xEUGf7jt+qmNLlKieFw1Q==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@puppeteer/browsers": "2.10.1",
- "chromium-bidi": "4.0.1",
+ "@puppeteer/browsers": "2.10.2",
+ "chromium-bidi": "4.1.1",
"debug": "^4.4.0",
"devtools-protocol": "0.0.1425554",
"typed-query-selector": "^2.12.0",
@@ -23195,9 +23195,9 @@
}
},
"node_modules/stylelint": {
- "version": "16.18.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.18.0.tgz",
- "integrity": "sha512-OXb68qzesv7J70BSbFwfK3yTVLEVXiQ/ro6wUE4UrSbKCMjLLA02S8Qq3LC01DxKyVjk7z8xh35aB4JzO3/sNA==",
+ "version": "16.19.1",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.19.1.tgz",
+ "integrity": "sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw==",
"dev": true,
"funding": [
{
@@ -23224,7 +23224,7 @@
"debug": "^4.3.7",
"fast-glob": "^3.3.3",
"fastest-levenshtein": "^1.0.16",
- "file-entry-cache": "^10.0.7",
+ "file-entry-cache": "^10.0.8",
"global-modules": "^2.0.0",
"globby": "^11.1.0",
"globjoin": "^0.1.4",
@@ -23232,7 +23232,7 @@
"ignore": "^7.0.3",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
- "known-css-properties": "^0.35.0",
+ "known-css-properties": "^0.36.0",
"mathml-tag-names": "^2.1.3",
"meow": "^13.2.0",
"micromatch": "^4.0.8",
@@ -23425,25 +23425,25 @@
"license": "MIT"
},
"node_modules/stylelint/node_modules/file-entry-cache": {
- "version": "10.0.7",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.7.tgz",
- "integrity": "sha512-txsf5fu3anp2ff3+gOJJzRImtrtm/oa9tYLN0iTuINZ++EyVR/nRrg2fKYwvG/pXDofcrvvb0scEbX3NyW/COw==",
+ "version": "10.0.8",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.8.tgz",
+ "integrity": "sha512-FGXHpfmI4XyzbLd3HQ8cbUcsFGohJpZtmQRHr8z8FxxtCe2PcpgIlVLwIgunqjvRmXypBETvwhV4ptJizA+Y1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "flat-cache": "^6.1.7"
+ "flat-cache": "^6.1.8"
}
},
"node_modules/stylelint/node_modules/flat-cache": {
- "version": "6.1.7",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.7.tgz",
- "integrity": "sha512-qwZ4xf1v1m7Rc9XiORly31YaChvKt6oNVHuqqZcoED/7O+ToyNVGobKsIAopY9ODcWpEDKEBAbrSOCBHtNQvew==",
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.8.tgz",
+ "integrity": "sha512-R6MaD3nrJAtO7C3QOuS79ficm2pEAy++TgEUD8ii1LVlbcgZ9DtASLkt9B+RZSFCzm7QHDMlXPsqqB6W2Pfr1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"cacheable": "^1.8.9",
"flatted": "^3.3.3",
- "hookified": "^1.7.1"
+ "hookified": "^1.8.1"
}
},
"node_modules/stylelint/node_modules/ignore": {
@@ -23467,9 +23467,9 @@
}
},
"node_modules/stylelint/node_modules/known-css-properties": {
- "version": "0.35.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz",
- "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==",
+ "version": "0.36.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz",
+ "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==",
"dev": true,
"license": "MIT"
},
diff --git a/package.json b/package.json
index 4c8cb606631..a713c166ce0 100644
--- a/package.json
+++ b/package.json
@@ -169,12 +169,12 @@
"karma-spec-reporter": "^0.0.36",
"karma-viewport": "^1.0.9",
"mime": "^4.0.7",
- "puppeteer": "^24.7.0",
+ "puppeteer": "^24.7.2",
"raw-loader": "^4.0.2",
"regextras": "^0.8.0",
"sass": "^1.87.0",
"sinon": "<= 5.0.7",
- "stylelint": "^16.18.0",
+ "stylelint": "^16.19.1",
"stylelint-use-logical": "^2.1.2",
"tar": "^7.4.3",
"ts-node": "^10.9.1",
diff --git a/tests/Core/Command/Config/App/DeleteConfigTest.php b/tests/Core/Command/Config/App/DeleteConfigTest.php
index ebbbb15e1b6..1e44c2aafe6 100644
--- a/tests/Core/Command/Config/App/DeleteConfigTest.php
+++ b/tests/Core/Command/Config/App/DeleteConfigTest.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -8,37 +10,31 @@
namespace Tests\Core\Command\Config\App;
use OC\Core\Command\Config\App\DeleteConfig;
-use OCP\IConfig;
+use OCP\IAppConfig;
+use PHPUnit\Framework\MockObject\MockObject;
+use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Test\TestCase;
class DeleteConfigTest extends TestCase {
- /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
- protected $config;
-
- /** @var \PHPUnit\Framework\MockObject\MockObject */
- protected $consoleInput;
- /** @var \PHPUnit\Framework\MockObject\MockObject */
- protected $consoleOutput;
-
- /** @var \Symfony\Component\Console\Command\Command */
- protected $command;
+ protected IAppConfig&MockObject $appConfig;
+ protected InputInterface&MockObject $consoleInput;
+ protected OutputInterface&MockObject $consoleOutput;
+ protected Command $command;
protected function setUp(): void {
parent::setUp();
- $this->config = $this->getMockBuilder(IConfig::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->consoleInput = $this->getMockBuilder(InputInterface::class)->getMock();
- $this->consoleOutput = $this->getMockBuilder(OutputInterface::class)->getMock();
+ $this->appConfig = $this->createMock(IAppConfig::class);
+ $this->consoleInput = $this->createMock(InputInterface::class);
+ $this->consoleOutput = $this->createMock(OutputInterface::class);
- $this->command = new DeleteConfig($this->config);
+ $this->command = new DeleteConfig($this->appConfig);
}
- public function deleteData() {
+ public static function dataDelete(): array {
return [
[
'name',
@@ -72,22 +68,16 @@ class DeleteConfigTest extends TestCase {
}
/**
- * @dataProvider deleteData
- *
- * @param string $configName
- * @param bool $configExists
- * @param bool $checkIfExists
- * @param int $expectedReturn
- * @param string $expectedMessage
+ * @dataProvider dataDelete
*/
- public function testDelete($configName, $configExists, $checkIfExists, $expectedReturn, $expectedMessage): void {
- $this->config->expects(($checkIfExists) ? $this->once() : $this->never())
- ->method('getAppKeys')
+ public function testDelete(string $configName, bool $configExists, bool $checkIfExists, int $expectedReturn, string $expectedMessage): void {
+ $this->appConfig->expects(($checkIfExists) ? $this->once() : $this->never())
+ ->method('getKeys')
->with('app-name')
->willReturn($configExists ? [$configName] : []);
- $this->config->expects(($expectedReturn === 0) ? $this->once() : $this->never())
- ->method('deleteAppValue')
+ $this->appConfig->expects(($expectedReturn === 0) ? $this->once() : $this->never())
+ ->method('deleteKey')
->with('app-name', $configName);
$this->consoleInput->expects($this->exactly(2))
@@ -96,15 +86,13 @@ class DeleteConfigTest extends TestCase {
['app', 'app-name'],
['name', $configName],
]);
- $this->consoleInput->expects($this->any())
- ->method('hasParameterOption')
+ $this->consoleInput->method('hasParameterOption')
->with('--error-if-not-exists')
->willReturn($checkIfExists);
- $this->consoleOutput->expects($this->any())
- ->method('writeln')
+ $this->consoleOutput->method('writeln')
->with($this->stringContains($expectedMessage));
- $this->assertSame($expectedReturn, $this->invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]));
+ $this->assertSame($expectedReturn, self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]));
}
}
diff --git a/tests/Core/Command/Config/App/GetConfigTest.php b/tests/Core/Command/Config/App/GetConfigTest.php
index c1a6265db40..89a75c0b527 100644
--- a/tests/Core/Command/Config/App/GetConfigTest.php
+++ b/tests/Core/Command/Config/App/GetConfigTest.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -7,40 +9,33 @@
namespace Tests\Core\Command\Config\App;
-use OC\AppConfig;
use OC\Core\Command\Config\App\GetConfig;
use OCP\Exceptions\AppConfigUnknownKeyException;
+use OCP\IAppConfig;
+use PHPUnit\Framework\MockObject\MockObject;
+use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Test\TestCase;
class GetConfigTest extends TestCase {
- /** @var \PHPUnit\Framework\MockObject\MockObject */
- protected $config;
-
- /** @var \PHPUnit\Framework\MockObject\MockObject */
- protected $consoleInput;
- /** @var \PHPUnit\Framework\MockObject\MockObject */
- protected $consoleOutput;
-
- /** @var \Symfony\Component\Console\Command\Command */
- protected $command;
+ protected IAppConfig&MockObject $appConfig;
+ protected InputInterface&MockObject $consoleInput;
+ protected OutputInterface&MockObject $consoleOutput;
+ protected Command $command;
protected function setUp(): void {
parent::setUp();
- $config = $this->config = $this->getMockBuilder(AppConfig::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->consoleInput = $this->getMockBuilder(InputInterface::class)->getMock();
- $this->consoleOutput = $this->getMockBuilder(OutputInterface::class)->getMock();
+ $this->appConfig = $this->createMock(IAppConfig::class);
+ $this->consoleInput = $this->createMock(InputInterface::class);
+ $this->consoleOutput = $this->createMock(OutputInterface::class);
- /** @var \OCP\IAppConfig $config */
- $this->command = new GetConfig($config);
+ $this->command = new GetConfig($this->appConfig);
}
- public function getData() {
+ public static function dataGet(): array {
return [
// String output as json
['name', 'newvalue', true, null, false, 'json', 0, json_encode('newvalue')],
@@ -83,21 +78,12 @@ class GetConfigTest extends TestCase {
}
/**
- * @dataProvider getData
- *
- * @param string $configName
- * @param mixed $value
- * @param bool $configExists
- * @param mixed $defaultValue
- * @param bool $hasDefault
- * @param string $outputFormat
- * @param int $expectedReturn
- * @param string $expectedMessage
+ * @dataProvider dataGet
*/
- public function testGet($configName, $value, $configExists, $defaultValue, $hasDefault, $outputFormat, $expectedReturn, $expectedMessage): void {
+ public function testGet(string $configName, mixed $value, bool $configExists, mixed $defaultValue, bool $hasDefault, string $outputFormat, int $expectedReturn, ?string $expectedMessage): void {
if (!$expectedReturn) {
if ($configExists) {
- $this->config->expects($this->once())
+ $this->appConfig->expects($this->once())
->method('getDetails')
->with('app-name', $configName)
->willReturn(['value' => $value]);
@@ -105,7 +91,7 @@ class GetConfigTest extends TestCase {
}
if (!$configExists) {
- $this->config->expects($this->once())
+ $this->appConfig->expects($this->once())
->method('getDetails')
->with('app-name', $configName)
->willThrowException(new AppConfigUnknownKeyException());
@@ -117,14 +103,12 @@ class GetConfigTest extends TestCase {
['app', 'app-name'],
['name', $configName],
]);
- $this->consoleInput->expects($this->any())
- ->method('getOption')
+ $this->consoleInput->method('getOption')
->willReturnMap([
['default-value', $defaultValue],
['output', $outputFormat],
]);
- $this->consoleInput->expects($this->any())
- ->method('hasParameterOption')
+ $this->consoleInput->method('hasParameterOption')
->willReturnMap([
['--output', false, true],
['--default-value', false, $hasDefault],
@@ -134,8 +118,7 @@ class GetConfigTest extends TestCase {
global $output;
$output = '';
- $this->consoleOutput->expects($this->any())
- ->method('writeln')
+ $this->consoleOutput->method('writeln')
->willReturnCallback(function ($value) {
global $output;
$output .= $value . "\n";
@@ -143,7 +126,7 @@ class GetConfigTest extends TestCase {
});
}
- $this->assertSame($expectedReturn, $this->invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]));
+ $this->assertSame($expectedReturn, self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]));
if ($expectedMessage !== null) {
global $output;
diff --git a/tests/Core/Command/Config/App/SetConfigTest.php b/tests/Core/Command/Config/App/SetConfigTest.php
index ffb7e424a0a..099471228b4 100644
--- a/tests/Core/Command/Config/App/SetConfigTest.php
+++ b/tests/Core/Command/Config/App/SetConfigTest.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -11,37 +13,30 @@ use OC\AppConfig;
use OC\Core\Command\Config\App\SetConfig;
use OCP\Exceptions\AppConfigUnknownKeyException;
use OCP\IAppConfig;
+use PHPUnit\Framework\MockObject\MockObject;
+use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Test\TestCase;
class SetConfigTest extends TestCase {
- /** @var \PHPUnit\Framework\MockObject\MockObject */
- protected $config;
-
- /** @var \PHPUnit\Framework\MockObject\MockObject */
- protected $consoleInput;
- /** @var \PHPUnit\Framework\MockObject\MockObject */
- protected $consoleOutput;
-
- /** @var \Symfony\Component\Console\Command\Command */
- protected $command;
+ protected IAppConfig&MockObject $appConfig;
+ protected InputInterface&MockObject $consoleInput;
+ protected OutputInterface&MockObject $consoleOutput;
+ protected Command $command;
protected function setUp(): void {
parent::setUp();
- $config = $this->config = $this->getMockBuilder(AppConfig::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->consoleInput = $this->getMockBuilder(InputInterface::class)->getMock();
- $this->consoleOutput = $this->getMockBuilder(OutputInterface::class)->getMock();
+ $this->appConfig = $this->createMock(AppConfig::class);
+ $this->consoleInput = $this->createMock(InputInterface::class);
+ $this->consoleOutput = $this->createMock(OutputInterface::class);
- /** @var \OCP\IAppConfig $config */
- $this->command = new SetConfig($config);
+ $this->command = new SetConfig($this->appConfig);
}
- public static function dataSet() {
+ public static function dataSet(): array {
return [
[
'name',
@@ -64,32 +59,22 @@ class SetConfigTest extends TestCase {
/**
* @dataProvider dataSet
- *
- * @param string $configName
- * @param mixed $newValue
- * @param bool $configExists
- * @param bool $updateOnly
- * @param bool $updated
- * @param string $expectedMessage
*/
- public function testSet($configName, $newValue, $configExists, $updateOnly, $updated, $expectedMessage): void {
- $this->config->expects($this->any())
- ->method('hasKey')
+ public function testSet(string $configName, mixed $newValue, bool $configExists, bool $updateOnly, bool $updated, string $expectedMessage): void {
+ $this->appConfig->method('hasKey')
->with('app-name', $configName)
->willReturn($configExists);
if (!$configExists) {
- $this->config->expects($this->any())
- ->method('getValueType')
+ $this->appConfig->method('getValueType')
->willThrowException(new AppConfigUnknownKeyException());
} else {
- $this->config->expects($this->any())
- ->method('getValueType')
+ $this->appConfig->method('getValueType')
->willReturn(IAppConfig::VALUE_MIXED);
}
if ($updated) {
- $this->config->expects($this->once())
+ $this->appConfig->expects($this->once())
->method('setValueMixed')
->with('app-name', $configName, $newValue);
}
@@ -100,25 +85,22 @@ class SetConfigTest extends TestCase {
['app', 'app-name'],
['name', $configName],
]);
- $this->consoleInput->expects($this->any())
- ->method('getOption')
+ $this->consoleInput->method('getOption')
->willReturnMap([
['value', $newValue],
['lazy', null],
['sensitive', null],
['no-interaction', true],
]);
- $this->consoleInput->expects($this->any())
- ->method('hasParameterOption')
+ $this->consoleInput->method('hasParameterOption')
->willReturnMap([
['--type', false, false],
['--value', false, true],
['--update-only', false, $updateOnly]
]);
- $this->consoleOutput->expects($this->any())
- ->method('writeln')
+ $this->consoleOutput->method('writeln')
->with($this->stringContains($expectedMessage));
- $this->invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]);
+ self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]);
}
}