diff --git a/assets/document-formats b/assets/document-formats
index 2b592018..8c1941e3 160000
--- a/assets/document-formats
+++ b/assets/document-formats
@@ -1 +1 @@
-Subproject commit 2b592018adbf03d9d6a9f1ab69b1e9d8af73e22c
+Subproject commit 8c1941e3b896831b50a9956fefb36d6f78eb2e50
diff --git a/assets/document-templates b/assets/document-templates
index dc3f298d..26da8649 160000
--- a/assets/document-templates
+++ b/assets/document-templates
@@ -1 +1 @@
-Subproject commit dc3f298ddb8932e385cf81563dd4d2c9429d59e2
+Subproject commit 26da864937e48e80ee667e3545e386405c16c10f
diff --git a/controller/callbackcontroller.php b/controller/callbackcontroller.php
index 07c4f86f..d3fd3651 100644
--- a/controller/callbackcontroller.php
+++ b/controller/callbackcontroller.php
@@ -363,7 +363,7 @@ public function emptyfile($doc) {
}
}
- $templatePath = TemplateManager::getEmptyTemplatePath("en", ".docx");
+ $templatePath = TemplateManager::getEmptyTemplatePath("default", ".docx");
$template = file_get_contents($templatePath);
if (!$template) {
diff --git a/controller/editorapicontroller.php b/controller/editorapicontroller.php
index fbe2852a..3f91a0d3 100644
--- a/controller/editorapicontroller.php
+++ b/controller/editorapicontroller.php
@@ -234,7 +234,6 @@ public function fillempty($fileId) {
* @param bool $desktop - desktop label
* @param bool $template - file is template
* @param string $anchor - anchor link
- * @param bool $forceEdit - open editing
*
* @return JSONResponse
*
@@ -242,7 +241,7 @@ public function fillempty($fileId) {
* @PublicPage
* @CORS
*/
- public function config($fileId, $filePath = null, $shareToken = null, $version = 0, $inframe = false, $desktop = false, $template = false, $anchor = null, $forceEdit = false) {
+ public function config($fileId, $filePath = null, $shareToken = null, $version = 0, $inframe = false, $desktop = false, $template = false, $anchor = null) {
$user = $this->userSession->getUser();
$userId = null;
$accountId = null;
@@ -381,7 +380,7 @@ public function config($fileId, $filePath = null, $shareToken = null, $version =
&& $file->isUpdateable()
&& !$isPersistentLock
&& (empty($shareToken) || ($share->getPermissions() & Constants::PERMISSION_UPDATE) === Constants::PERMISSION_UPDATE);
- $params["document"]["permissions"]["edit"] = $editable && ($forceEdit || !$canFillForms);
+ $params["document"]["permissions"]["edit"] = $editable;
if (($editable || $restrictedEditing) && ($canEdit || $canFillForms)) {
$ownerId = null;
$owner = $file->getOwner();
diff --git a/controller/editorcontroller.php b/controller/editorcontroller.php
index 871da2fa..517b73a0 100644
--- a/controller/editorcontroller.php
+++ b/controller/editorcontroller.php
@@ -1278,7 +1278,6 @@ public function download($fileId, $toExtension = null, $template = false) {
* @param string $shareToken - access token
* @param integer $version - file version
* @param bool $inframe - open in frame
- * @param bool $forceEdit - open editing
* @param bool $template - file is template
* @param string $anchor - anchor for file content
*
@@ -1287,7 +1286,7 @@ public function download($fileId, $toExtension = null, $template = false) {
* @NoAdminRequired
* @NoCSRFRequired
*/
- public function index($fileId, $filePath = null, $shareToken = null, $version = 0, $inframe = false, $forceEdit = false, $template = false, $anchor = null) {
+ public function index($fileId, $filePath = null, $shareToken = null, $version = 0, $inframe = false, $template = false, $anchor = null) {
$this->logger->debug("Open: $fileId ($version) $filePath", ["app" => $this->appName]);
if (empty($shareToken) && !$this->userSession->isLoggedIn()) {
@@ -1327,8 +1326,7 @@ public function index($fileId, $filePath = null, $shareToken = null, $version =
"version" => $version,
"template" => $template,
"inframe" => false,
- "anchor" => $anchor,
- "forceEdit" => $forceEdit
+ "anchor" => $anchor
];
if ($inframe === true) {
@@ -1359,7 +1357,6 @@ public function index($fileId, $filePath = null, $shareToken = null, $version =
* @param string $shareToken - access token
* @param integer $version - file version
* @param bool $inframe - open in frame
- * @param bool $forceEdit - open editing
*
* @return TemplateResponse
*
@@ -1367,8 +1364,8 @@ public function index($fileId, $filePath = null, $shareToken = null, $version =
* @NoCSRFRequired
* @PublicPage
*/
- public function publicPage($fileId, $shareToken, $version = 0, $inframe = false, $forceEdit = false) {
- return $this->index($fileId, null, $shareToken, $version, $inframe, $forceEdit);
+ public function publicPage($fileId, $shareToken, $version = 0, $inframe = false) {
+ return $this->index($fileId, null, $shareToken, $version, $inframe);
}
/**
diff --git a/css/editor.css b/css/editor.css
index d2533d7d..cb92d61f 100644
--- a/css/editor.css
+++ b/css/editor.css
@@ -17,19 +17,22 @@
*/
#app > iframe {
- position: absolute;
- vertical-align: top;
+ position: absolute;
+ vertical-align: top;
}
+
#body-public #content {
- height: 100%;
+ height: 100%;
}
+
#content-wrapper #content {
- height: calc(100dvh - 45px);
+ height: calc(100dvh - 45px);
}
.AscDesktopEditor #header {
- display: none;
+ display: none;
}
+
.AscDesktopEditor #content-wrapper {
- padding-top: 0;
+ padding-top: 0;
}
diff --git a/css/main.css b/css/main.css
index 6a7787ea..c6fe679f 100644
--- a/css/main.css
+++ b/css/main.css
@@ -17,77 +17,91 @@
*/
.icon-onlyoffice-new-docx {
- background-image: url("../img/new-docx.svg");
+ background-image: url("../img/new-docx.svg");
}
+
.icon-onlyoffice-new-xlsx {
- background-image: url("../img/new-xlsx.svg");
+ background-image: url("../img/new-xlsx.svg");
}
+
.icon-onlyoffice-new-pptx {
- background-image: url("../img/new-pptx.svg");
+ background-image: url("../img/new-pptx.svg");
}
+
.icon-onlyoffice-new-pdf {
- background-image: url("../img/new-pdf.svg");
+ background-image: url("../img/new-pdf.svg");
}
+
.icon-onlyoffice-open,
.icon-onlyoffice-convert,
.icon-onlyoffice-download,
.icon-onlyoffice-create {
- background-image: url("../img/app-dark.svg");
+ background-image: url("../img/app-dark.svg");
+}
+
+.AscDesktopEditor #content-wrapper {
+ padding-top: 0;
+}
+
+.AscDesktopEditor #controls,
+.AscDesktopEditor #app-sidebar {
+ top: 0;
}
/* onlyoffice-inline */
body.onlyoffice-inline #content-wrapper {
- overscroll-behavior-y: none;
- overflow: hidden;
+ overflow: hidden;
+ overscroll-behavior-y: none;
}
+
body.onlyoffice-inline #app-navigation,
body.onlyoffice-inline .searchbox,
body.onlyoffice-inline #app-content #controls {
- display: none;
+ display: none;
}
+
body.onlyoffice-inline #app-navigation-toggle {
- display: none !important;
+ display: none !important;
}
+
body.onlyoffice-inline #content #app-content {
- margin-left: 0;
- overflow: hidden;
+ margin-left: 0;
+ overflow: hidden;
}
-#onlyofficeFrame {
- background-color: #fff;
- width: 100%;
- height: calc(100vh - 45px);
- display: block;
- position: absolute;
- top: 0;
- z-index: 110;
+
+#onlyoffice-frame {
+ background-color: #fff;
+ display: block;
+ height: calc(100vh - 45px);
+ position: absolute;
+ top: 0;
+ width: 100%;
+ z-index: 110;
}
.onlyoffice-public-open {
- display: inline-block;
- margin-top: 10px;
+ display: inline-block;
+ margin-top: 10px;
}
/* AscDesktopEditor */
.AscDesktopEditor #header {
- display: none;
-}
-.AscDesktopEditor #content-wrapper {
- padding-top: 0;
-}
-.AscDesktopEditor #controls,
-.AscDesktopEditor #app-sidebar {
- top: 0;
+ display: none;
}
+
.AscDesktopEditor #body-user table.multiselect thead {
- top: 44px;
+ top: 44px;
}
+
.AscDesktopEditor #body-user #gallery-button {
- display: none;
+ display: none;
}
+
.onlyoffice-download-container {
- display: flex;
+ display: flex;
}
+
.onlyoffice-download-container p {
- margin-right: 10px;
- padding-top: 10px;
+ margin-right: 10px;
+ padding-top: 10px;
}
diff --git a/css/settings.css b/css/settings.css
index 8292bef7..b6fe77bd 100644
--- a/css/settings.css
+++ b/css/settings.css
@@ -17,147 +17,167 @@
*/
#content .section-onlyoffice h2 .icon-info {
- padding-top: 17px;
+ padding-top: 17px;
}
+
.onlyoffice-error {
- color: red;
+ color: #f00;
}
+
.onlyoffice-header {
- display: inline-block;
- margin-top: 16px;
+ display: inline-block;
+ margin-top: 16px;
}
+
.section-onlyoffice input {
- display: block;
- width: 250px;
+ display: block;
+ width: 250px;
}
+
.onlyoffice-hide {
- display: none;
+ display: none;
}
-#onlyofficeAdv {
- cursor: pointer;
- text-decoration: none;
+
+#onlyoffice-adv {
+ cursor: pointer;
+ text-decoration: none;
}
-#onlyofficeAdv .icon {
- display: inline-block;
- margin-bottom: -3px;
+
+#onlyoffice-adv .icon {
+ display: inline-block;
+ margin-bottom: -3px;
}
-#onlyofficeAddrSave {
- float: left;
+
+#onlyoffice-addr-save {
+ float: left;
}
-#onlyofficeSave {
- margin-bottom: 25px;
+
+#onlyoffice-save {
+ margin-bottom: 25px;
}
+
.onlyoffice-demo {
- margin-left: 90px;
+ margin-left: 90px;
}
-#s2id_onlyofficeLimitGroups {
- margin-bottom: 16px;
+
+#s2i-onlyoffice-limit-groups {
+ margin-bottom: 16px;
}
+
.onlyoffice-exts {
- column-width: 100px;
- -moz-column-width: 100px;
- -webkit-column-width: 100px;
+ -moz-column-width: 100px;
+ -webkit-column-width: 100px;
+ column-width: 100px;
}
+
.onlyoffice-tables {
- column-width: 140px;
- -moz-column-width: 140px;
- -webkit-column-width: 140px;
+ -moz-column-width: 140px;
+ -webkit-column-width: 140px;
+ column-width: 140px;
}
+
#personal-show + label {
- margin-top: -25px;
- margin-left: 230px;
+ margin-left: 230px;
+ margin-top: -25px;
}
+
.onlyoffice-option-desc {
- margin-left: 20px;
+ margin-left: 20px;
}
-#onlyofficeDocsCloudBannerWrapper {
- max-width: 596px;
- min-height: 108px;
- text-align: center;
- background-image: url("../img/get-editors-background.svg");
- background-repeat: no-repeat;
- background-color: #FFFFFF;
- border: 1px solid #EFEFEF;
- border-radius: 3px;
- display: flex;
- flex-direction: row;
- margin-top: 10px;
+
+#onlyoffice-docscloud-banner-wrapper {
+ background-color: #fff;
+ background-image: url("../img/get-editors-background.svg");
+ background-repeat: no-repeat;
+ border: 1px solid #efefef;
+ border-radius: 3px;
+ display: flex;
+ flex-direction: row;
+ margin-top: 10px;
+ max-width: 596px;
+ min-height: 108px;
+ text-align: center;
}
-#onlyofficeDocsCloudBannerPicWrapper {
- height: 100%;
- width: 20%;
- padding: 10px 0 0 20px;
+#onlyoffice-docscloud-banner-pic-wrapper {
+ height: 100%;
+ padding: 10px 0 0 20px;
+ width: 20%;
}
-#onlyofficeDocsCloudBannerPic {
- content: url("../img/get-editors-pic.svg");
+#onlyoffice-docscloud-banner-pic {
+ content: url("../img/get-editors-pic.svg");
}
-#onlyofficeDocsCloudBannerContent {
- height: 100%;
- width: 80%;
- color: #000000;
- display: flex;
- flex-direction: row;
- margin: auto;
+#onlyoffice-docscloud-banner-content {
+ color: #000;
+ display: flex;
+ flex-direction: row;
+ height: 100%;
+ margin: auto;
+ width: 80%;
}
-#onlyofficeDocsCloudBannerContentText {
- width: 60%;
- height: 100%;
- color: #000;
- font-size: 14px;
- text-align: justify;
- padding-left: 15px;
+#onlyoffice-docscloud-banner-content-text {
+ color: #000;
+ font-size: 14px;
+ height: 100%;
+ padding-left: 15px;
+ text-align: justify;
+ width: 60%;
}
-#onlyofficeDocsCloudBannerContentText h2 {
- margin: 0;
- color: #000000;
+#onlyoffice-docscloud-banner-content-text h2 {
+ color: #000;
+ margin: 0;
}
-#onlyofficeDocsCloudBannerContentButtonWrapper {
- width: 40%;
- height: 100%;
- margin: auto;
+#onlyoffice-docscloud-banner-content-button-wrapper {
+ height: 100%;
+ margin: auto;
+ width: 40%;
}
-#onlyofficeDocsCloudBannerContentButton {
- background-color: #EDEDED;
- color: #000;
- border: 1px solid #DBDBDB;
+#onlyoffice-docscloud-banner-content-button {
+ background-color: #ededed;
+ border: 1px solid #dbdbdb;
+ color: #000;
}
@media (max-width: 580px) {
- #onlyofficeDocsCloudBannerPicWrapper {
- padding: 20px 0 0 5px;
- width: 30%;
- }
- #onlyofficeDocsCloudBannerContent {
- flex-direction: column;
- width: 70%;
- }
- #onlyofficeDocsCloudBannerContentText {
- width: 100%;
- padding-right: 5px;
- }
- #onlyofficeDocsCloudBannerContentButtonWrapper {
- width: 100%;
- padding: 15px 0 15px 15px;
- text-align: left;
- }
+ #onlyoffice-docscloud-banner-pic-wrapper {
+ padding: 20px 0 0 5px;
+ width: 30%;
+ }
+
+ #onlyoffice-docscloud-banner-content {
+ flex-direction: column;
+ width: 70%;
+ }
+
+ #onlyoffice-docscloud-banner-content-text {
+ padding-right: 5px;
+ width: 100%;
+ }
+
+ #onlyoffice-docscloud-banner-content-button-wrapper {
+ padding: 15px 0 15px 15px;
+ text-align: left;
+ width: 100%;
+ }
}
@media (max-width: 335px) {
- #onlyofficeDocsCloudBannerWrapper {
- flex-direction: column;
- }
- #onlyofficeDocsCloudBannerPicWrapper {
- width: 100%;
- padding: unset;
- }
- #onlyofficeDocsCloudBannerContent {
- width: 100%;
- }
-}
\ No newline at end of file
+ #onlyoffice-docscloud-banner-wrapper {
+ flex-direction: column;
+ }
+
+ #onlyoffice-docscloud-banner-pic-wrapper {
+ padding: unset;
+ width: 100%;
+ }
+
+ #onlyoffice-docscloud-banner-content {
+ width: 100%;
+ }
+}
diff --git a/css/template.css b/css/template.css
index 3e7505d6..e450de5f 100644
--- a/css/template.css
+++ b/css/template.css
@@ -17,56 +17,67 @@
*/
.onlyoffice-template-container {
- margin-left: 0px !important;
- max-width: 500px;
+ margin-left: 0 !important;
+ max-width: 500px;
}
+
.onlyoffice-template-container li {
- height: 27px;
- padding-top: 5px;
+ height: 27px;
+ padding-top: 5px;
}
+
.onlyoffice-template-container.container-dialog li:hover,
.onlyoffice-template-item.selected {
- background-color: rgb(230, 230, 230);
+ background-color: rgb(230 230 230);
}
+
.onlyoffice-template-item img,
.onlyoffice-template-item p,
.onlyoffice-template-delete,
.onlyoffice-template-download {
- display: inline-block;
- margin-right: 10px;
- cursor: pointer;
+ cursor: pointer;
+ display: inline-block;
+ margin-right: 10px;
}
+
.onlyoffice-template-item.item-dialog {
- padding-left: 5px;
+ padding-left: 5px;
}
+
.onlyoffice-template-delete,
.onlyoffice-template-download {
- margin-bottom: 2px;
- opacity: .8;
+ margin-bottom: 2px;
+ opacity: 0.8;
}
+
.onlyoffice-template-item p {
- max-width: 400px;
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
+ max-width: 400px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
}
+
.onlyoffice-template-item img {
- float: left;
- margin-top: 3px;
+ float: left;
+ margin-top: 3px;
}
+
.onlyoffice-template-item.selected label {
- color: rgb(55, 137, 243);
+ color: rgb(55 137 243);
}
+
.onlyoffice-template-download {
- background-image: url("../../../core/img/actions/download.svg");
- height: 16px;
- width: 16px;
+ background-image: url("../../../core/img/actions/download.svg");
+ height: 16px;
+ width: 16px;
}
+
.onlyoffice-template.icon-add {
- opacity: 0.5;
- padding-left: 35px;
- padding-bottom: 5px;
+ opacity: 0.5;
+ padding-bottom: 5px;
+ padding-left: 35px;
}
+
.onlyoffice-template.icon-add:hover {
- opacity: 0.7;
-}
\ No newline at end of file
+ opacity: 0.7;
+}
diff --git a/js/desktop.js b/js/desktop.js
index b7747dcb..88b599c8 100644
--- a/js/desktop.js
+++ b/js/desktop.js
@@ -17,26 +17,24 @@
*/
(function (OCA) {
+ OCA.Onlyoffice = _.extend({}, OCA.Onlyoffice);
- OCA.Onlyoffice = _.extend({}, OCA.Onlyoffice);
+ if (!window["AscDesktopEditor"]) {
+ return;
+ }
- if (!window["AscDesktopEditor"]) {
- return;
- }
+ OCA.Onlyoffice.Desktop = true;
+ $("html").addClass("AscDesktopEditor");
- OCA.Onlyoffice.Desktop = true;
- $("html").addClass("AscDesktopEditor");
+ let domain = new RegExp("^http(s)?://[^/]+").exec(location)[0];
+ domain += OC.getRootPath();
- var domain = new RegExp("^http(s)?:\/\/[^\/]+").exec(location)[0];
- domain += OC.getRootPath();
-
- var data = {
- displayName: oc_user.displayName,
- domain: domain,
- email: oc_user.email,
- provider: "ownCloud",
- };
-
- window.AscDesktopEditor.execCommand("portal:login", JSON.stringify(data));
+ const data = {
+ displayName: oc_user.displayName,
+ domain,
+ email: oc_user.email,
+ provider: "ownCloud",
+ };
+ window.AscDesktopEditor.execCommand("portal:login", JSON.stringify(data));
})(OCA);
diff --git a/js/editor.js b/js/editor.js
index 087218c8..0ec644c1 100644
--- a/js/editor.js
+++ b/js/editor.js
@@ -17,724 +17,865 @@
*/
(function ($, OCA) {
+ OCA.Onlyoffice = _.extend(
+ {
+ AppName: "onlyoffice",
+ inframe: false,
+ fileId: null,
+ shareToken: null,
+ insertImageType: null,
+ },
+ OCA.Onlyoffice
+ );
+
+ OCA.Onlyoffice.InitEditor = function () {
+ OCA.Onlyoffice.fileId = $("#iframeEditor").data("id");
+ const filePath = $("#iframeEditor").data("path");
+ OCA.Onlyoffice.shareToken = $("#iframeEditor").data("sharetoken");
+ OCA.Onlyoffice.version = $("#iframeEditor").data("version");
+ OCA.Onlyoffice.template = $("#iframeEditor").data("template");
+ OCA.Onlyoffice.inframe = !!$("#iframeEditor").data("inframe");
+ OCA.Onlyoffice.anchor = $("#iframeEditor").attr("data-anchor");
+ OCA.Onlyoffice.currentWindow = window;
+
+ if (OCA.Onlyoffice.inframe) {
+ OCA.Onlyoffice.faviconBase = $('link[rel="icon"]').attr("href");
+ OCA.Onlyoffice.currentWindow = window.parent;
+ OCA.Onlyoffice.titleBase = OCA.Onlyoffice.currentWindow.document.title;
+ }
- OCA.Onlyoffice = _.extend({
- AppName: "onlyoffice",
- inframe: false,
- fileId: null,
- shareToken: null,
- insertImageType: null
- }, OCA.Onlyoffice);
-
- OCA.Onlyoffice.InitEditor = function () {
-
- OCA.Onlyoffice.fileId = $("#iframeEditor").data("id");
- var filePath = $("#iframeEditor").data("path");
- OCA.Onlyoffice.shareToken = $("#iframeEditor").data("sharetoken");
- OCA.Onlyoffice.version = $("#iframeEditor").data("version");
- OCA.Onlyoffice.template = $("#iframeEditor").data("template");
- OCA.Onlyoffice.inframe = !!$("#iframeEditor").data("inframe");
- OCA.Onlyoffice.anchor = $("#iframeEditor").attr("data-anchor");
- OCA.Onlyoffice.forceEdit = $("#iframeEditor").attr("data-forceEdit");
- OCA.Onlyoffice.currentWindow = window;
-
- if (OCA.Onlyoffice.inframe) {
- OCA.Onlyoffice.faviconBase = $('link[rel="icon"]').attr("href");
- OCA.Onlyoffice.currentWindow = window.parent;
- OCA.Onlyoffice.titleBase = OCA.Onlyoffice.currentWindow.document.title;
- }
-
- if (!OCA.Onlyoffice.fileId && !OCA.Onlyoffice.shareToken) {
- OCA.Onlyoffice.showMessage(t(OCA.Onlyoffice.AppName, "FileId is empty"), {type: "error"});
- return;
- }
-
- if (typeof DocsAPI === "undefined") {
- OCA.Onlyoffice.showMessage(t(OCA.Onlyoffice.AppName, "ONLYOFFICE cannot be reached. Please contact admin"), {type: "error"});
- return;
- }
-
- var docsVersion = DocsAPI.DocEditor.version().split(".");
- if (docsVersion[0] < 6
- || docsVersion[0] == 6 && docsVersion[1] == 0) {
- OCA.Onlyoffice.showMessage(t(OCA.Onlyoffice.AppName, "Not supported version"), "error", {timeout: -1});
- return;
- }
+ if (!OCA.Onlyoffice.fileId && !OCA.Onlyoffice.shareToken) {
+ OCA.Onlyoffice.showMessage(t(OCA.Onlyoffice.AppName, "FileId is empty"), {
+ type: "error",
+ });
+ return;
+ }
- var configUrl = OC.linkToOCS("apps/" + OCA.Onlyoffice.AppName + "/api/v1/config", 2) + (OCA.Onlyoffice.fileId || 0);
+ if (typeof DocsAPI === "undefined") {
+ OCA.Onlyoffice.showMessage(
+ t(
+ OCA.Onlyoffice.AppName,
+ "ONLYOFFICE cannot be reached. Please contact admin"
+ ),
+ { type: "error" }
+ );
+ return;
+ }
- var params = [];
- if (filePath) {
- params.push("filePath=" + encodeURIComponent(filePath));
- }
- if (OCA.Onlyoffice.shareToken) {
- params.push("shareToken=" + encodeURIComponent(OCA.Onlyoffice.shareToken));
- }
- if (OCA.Onlyoffice.version > 0) {
- params.push("version=" + OCA.Onlyoffice.version);
- }
- if (OCA.Onlyoffice.template) {
- params.push("template=true");
- }
+ const docsVersion = DocsAPI.DocEditor.version().split(".");
+ if (
+ docsVersion[0] < 6 ||
+ (parseInt(docsVersion[0]) === 6 && parseInt(docsVersion[1]) === 0)
+ ) {
+ OCA.Onlyoffice.showMessage(
+ t(OCA.Onlyoffice.AppName, "Not supported version"),
+ "error",
+ { timeout: -1 }
+ );
+ return;
+ }
- if (OCA.Onlyoffice.inframe) {
- params.push("inframe=true");
- }
+ let configUrl =
+ OC.linkToOCS("apps/" + OCA.Onlyoffice.AppName + "/api/v1/config", 2) +
+ (OCA.Onlyoffice.fileId || 0);
- if (OCA.Onlyoffice.anchor) {
- params.push("anchor=" + encodeURIComponent(OCA.Onlyoffice.anchor));
- }
+ const params = [];
+ if (filePath) {
+ params.push("filePath=" + encodeURIComponent(filePath));
+ }
+ if (OCA.Onlyoffice.shareToken) {
+ params.push(
+ "shareToken=" + encodeURIComponent(OCA.Onlyoffice.shareToken)
+ );
+ }
+ if (OCA.Onlyoffice.version > 0) {
+ params.push("version=" + OCA.Onlyoffice.version);
+ }
+ if (OCA.Onlyoffice.template) {
+ params.push("template=true");
+ }
- if (OCA.Onlyoffice.forceEdit) {
- params.push("forceEdit=true");
- }
+ if (OCA.Onlyoffice.inframe) {
+ params.push("inframe=true");
+ }
- if (OCA.Onlyoffice.Desktop) {
- params.push("desktop=true");
- }
- if (params.length) {
- configUrl += "?" + params.join("&");
- }
+ if (OCA.Onlyoffice.anchor) {
+ params.push("anchor=" + encodeURIComponent(OCA.Onlyoffice.anchor));
+ }
- $.ajax({
- url: configUrl,
- success: function onSuccess(config) {
- if (config) {
- if (config.error != null) {
- OCA.Onlyoffice.showMessage(config.error, {type: "error"});
- return;
- }
- OCA.Onlyoffice.device = config.type;
- if (OCA.Onlyoffice.device === "mobile") {
- OCA.Onlyoffice.resizeEvents();
- }
-
- var docIsChanged = null;
- var docIsChangedTimeout = null;
-
- var setPageTitle = function (event) {
- clearTimeout(docIsChangedTimeout);
-
- if (docIsChanged !== event.data) {
- var titleChange = function () {
- OCA.Onlyoffice.currentWindow.document.title = config.document.title + (event.data ? " *" : "") + " - " + oc_defaults.title;
- docIsChanged = event.data;
- };
-
- if (event === false || event.data) {
- titleChange();
- } else {
- docIsChangedTimeout = setTimeout(titleChange, 500);
- }
- }
- };
- setPageTitle(false);
-
- OCA.Onlyoffice.documentType = config.documentType;
-
- config.events = {
- "onDocumentStateChange": setPageTitle,
- "onDocumentReady": OCA.Onlyoffice.onDocumentReady,
- "onMakeActionLink": OCA.Onlyoffice.onMakeActionLink,
- };
-
- if (config.editorConfig.tenant) {
- config.events.onAppReady = function () {
- OCA.Onlyoffice.docEditor.showMessage(t(OCA.Onlyoffice.AppName, "You are using public demo ONLYOFFICE Docs server. Please do not store private sensitive data."));
- };
- }
-
- if (OCA.Onlyoffice.inframe && !OCA.Onlyoffice.shareToken
- || OC.currentUser) {
- config.events.onRequestSaveAs = OCA.Onlyoffice.onRequestSaveAs;
- config.events.onRequestInsertImage = OCA.Onlyoffice.onRequestInsertImage;
- config.events.onRequestMailMergeRecipients = OCA.Onlyoffice.onRequestMailMergeRecipients;
- config.events.onRequestSelectDocument = OCA.Onlyoffice.onRequestSelectDocument;
- config.events.onRequestCompareFile = OCA.Onlyoffice.onRequestSelectDocument; //todo: remove (for editors 7.4)
- config.events.onRequestSendNotify = OCA.Onlyoffice.onRequestSendNotify;
- config.events.onRequestReferenceData = OCA.Onlyoffice.onRequestReferenceData;
- config.events.onRequestOpen = OCA.Onlyoffice.onRequestOpen;
- config.events.onRequestReferenceSource = OCA.Onlyoffice.onRequestReferenceSource;
- config.events.onMetaChange = OCA.Onlyoffice.onMetaChange;
-
- if (OC.currentUser) {
- config.events.onRequestUsers = OCA.Onlyoffice.onRequestUsers;
- }
-
- if (!OCA.Onlyoffice.filePath) {
- OCA.Onlyoffice.filePath = config._file_path;
- }
-
- if (!OCA.Onlyoffice.template) {
- config.events.onRequestHistory = OCA.Onlyoffice.onRequestHistory;
- config.events.onRequestHistoryData = OCA.Onlyoffice.onRequestHistoryData;
- config.events.onRequestRestore = OCA.Onlyoffice.onRequestRestore;
-
- if (!OCA.Onlyoffice.version) {
- config.events.onRequestHistoryClose = OCA.Onlyoffice.onRequestHistoryClose;
- }
- }
- }
-
- if (OCA.Onlyoffice.inframe) {
- config.events.onRequestClose = OCA.Onlyoffice.onRequestClose;
- }
-
- if (OCA.Onlyoffice.inframe
- && config._files_sharing && !OCA.Onlyoffice.shareToken
- && window.parent.OCA.Onlyoffice.context) {
- config.events.onRequestSharingSettings = OCA.Onlyoffice.onRequestSharingSettings;
- }
-
- if (!config.document.permissions.edit
- && config.document.permissions.fillForms
- && config.canEdit) {
- config.events.onRequestEditRights = OCA.Onlyoffice.onRequestEditRights;
- }
-
- OCA.Onlyoffice.docEditor = new DocsAPI.DocEditor("iframeEditor", config);
-
- if (config.type === "mobile" && $("#app > iframe").css("position") === "fixed"
- && !OCA.Onlyoffice.inframe) {
- $("#app > iframe").css("height", "calc(100% - 45px)");
- }
-
- var favicon = OC.filePath(OCA.Onlyoffice.AppName, "img", OCA.Onlyoffice.documentType + ".ico");
- if (OCA.Onlyoffice.inframe) {
- window.parent.postMessage({
- method: "changeFavicon",
- param: favicon
- },
- "*");
- } else {
- $('link[rel="icon"]').attr("href", favicon);
- }
- }
- }
- });
- };
+ if (OCA.Onlyoffice.Desktop) {
+ params.push("desktop=true");
+ }
+ if (params.length) {
+ configUrl += "?" + params.join("&");
+ }
- OCA.Onlyoffice.onRequestEditRights = function () {
- if (OCA.Onlyoffice.inframe) {
- window.parent.postMessage({
- method: "onRequestEditRights"
- },
- "*");
+ $.ajax({
+ url: configUrl,
+ success: function onSuccess(config) {
+ if (config) {
+ if (config.error != null) {
+ OCA.Onlyoffice.showMessage(config.error, { type: "error" });
return;
- }
- location.href += "&forceEdit=true";
- };
-
- OCA.Onlyoffice.onRequestHistory = function (version) {
- $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/history?fileId={fileId}",
- {
- fileId: OCA.Onlyoffice.fileId || 0,
- }),
- function onSuccess(response) {
- OCA.Onlyoffice.refreshHistory(response, version);
- });
- };
-
- OCA.Onlyoffice.onRequestHistoryData = function (event) {
- var version = event.data;
-
- $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/version?fileId={fileId}&version={version}",
- {
- fileId: OCA.Onlyoffice.fileId || 0,
- version: version,
- }),
- function onSuccess(response) {
- if (response.error) {
- response = {
- error: response.error,
- version: version,
- };
- }
- OCA.Onlyoffice.docEditor.setHistoryData(response);
- });
- };
-
- OCA.Onlyoffice.onRequestRestore = function (event) {
- var version = event.data.version;
+ }
+ OCA.Onlyoffice.device = config.type;
+ if (OCA.Onlyoffice.device === "mobile") {
+ OCA.Onlyoffice.resizeEvents();
+ }
+
+ let docIsChanged = null;
+ let docIsChangedTimeout = null;
+
+ const setPageTitle = function (event) {
+ clearTimeout(docIsChangedTimeout);
+
+ if (docIsChanged !== event.data) {
+ const titleChange = function () {
+ OCA.Onlyoffice.currentWindow.document.title =
+ config.document.title +
+ (event.data ? " *" : "") +
+ " - " +
+ oc_defaults.title;
+ docIsChanged = event.data;
+ };
+
+ if (event === false || event.data) {
+ titleChange();
+ } else {
+ docIsChangedTimeout = setTimeout(titleChange, 500);
+ }
+ }
+ };
+ setPageTitle(false);
+
+ OCA.Onlyoffice.documentType = config.documentType;
+
+ config.events = {
+ onDocumentStateChange: setPageTitle,
+ onDocumentReady: OCA.Onlyoffice.onDocumentReady,
+ onMakeActionLink: OCA.Onlyoffice.onMakeActionLink,
+ };
+
+ if (config.editorConfig.tenant) {
+ config.events.onAppReady = function () {
+ OCA.Onlyoffice.docEditor.showMessage(
+ t(
+ OCA.Onlyoffice.AppName,
+ "You are using public demo ONLYOFFICE Docs server. Please do not store private sensitive data."
+ )
+ );
+ };
+ }
+
+ if (
+ (OCA.Onlyoffice.inframe && !OCA.Onlyoffice.shareToken) ||
+ OC.currentUser
+ ) {
+ config.events.onRequestSaveAs = OCA.Onlyoffice.onRequestSaveAs;
+ config.events.onRequestInsertImage =
+ OCA.Onlyoffice.onRequestInsertImage;
+ config.events.onRequestMailMergeRecipients =
+ OCA.Onlyoffice.onRequestMailMergeRecipients;
+ config.events.onRequestSelectDocument =
+ OCA.Onlyoffice.onRequestSelectDocument;
+ config.events.onRequestCompareFile =
+ OCA.Onlyoffice.onRequestSelectDocument; //todo: remove (for editors 7.4)
+ config.events.onRequestSendNotify =
+ OCA.Onlyoffice.onRequestSendNotify;
+ config.events.onRequestReferenceData =
+ OCA.Onlyoffice.onRequestReferenceData;
+ config.events.onRequestOpen = OCA.Onlyoffice.onRequestOpen;
+ config.events.onRequestReferenceSource =
+ OCA.Onlyoffice.onRequestReferenceSource;
+ config.events.onMetaChange = OCA.Onlyoffice.onMetaChange;
+
+ if (OC.currentUser) {
+ config.events.onRequestUsers = OCA.Onlyoffice.onRequestUsers;
+ }
- $.ajax({
- method: "PUT",
- url: OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/restore"),
- data: {
- fileId: OCA.Onlyoffice.fileId || 0,
- version: version,
- },
- success: function onSuccess(response) {
- OCA.Onlyoffice.refreshHistory(response, version);
-
- if (OCA.Onlyoffice.inframe) {
- window.parent.postMessage({
- method: "onRefreshVersionsDialog"
- },
- "*");
- }
+ if (!OCA.Onlyoffice.filePath) {
+ OCA.Onlyoffice.filePath = config._file_path;
}
- })
- };
- OCA.Onlyoffice.onRequestHistoryClose = function () {
- location.reload(true);
- };
+ if (!OCA.Onlyoffice.template) {
+ config.events.onRequestHistory = OCA.Onlyoffice.onRequestHistory;
+ config.events.onRequestHistoryData =
+ OCA.Onlyoffice.onRequestHistoryData;
+ config.events.onRequestRestore = OCA.Onlyoffice.onRequestRestore;
- OCA.Onlyoffice.onDocumentReady = function() {
- if (OCA.Onlyoffice.inframe) {
- window.parent.postMessage({
- method: "onDocumentReady",
- param: OCA.Onlyoffice.documentType
- },
- "*");
+ if (!OCA.Onlyoffice.version) {
+ config.events.onRequestHistoryClose =
+ OCA.Onlyoffice.onRequestHistoryClose;
+ }
+ }
+ }
+
+ if (OCA.Onlyoffice.inframe) {
+ config.events.onRequestClose = OCA.Onlyoffice.onRequestClose;
+ }
+
+ if (
+ OCA.Onlyoffice.inframe &&
+ config._files_sharing &&
+ !OCA.Onlyoffice.shareToken &&
+ window.parent.OCA.Onlyoffice.context
+ ) {
+ config.events.onRequestSharingSettings =
+ OCA.Onlyoffice.onRequestSharingSettings;
+ }
+
+ OCA.Onlyoffice.docEditor = new DocsAPI.DocEditor(
+ "iframeEditor",
+ config
+ );
+
+ if (
+ config.type === "mobile" &&
+ $("#app > iframe").css("position") === "fixed" &&
+ !OCA.Onlyoffice.inframe
+ ) {
+ $("#app > iframe").css("height", "calc(100% - 45px)");
+ }
+
+ const favicon = OC.filePath(
+ OCA.Onlyoffice.AppName,
+ "img",
+ OCA.Onlyoffice.documentType + ".ico"
+ );
+ if (OCA.Onlyoffice.inframe) {
+ window.parent.postMessage(
+ {
+ method: "changeFavicon",
+ param: favicon,
+ },
+ "*"
+ );
+ } else {
+ $('link[rel="icon"]').attr("href", favicon);
+ }
}
-
- if (OCA.Onlyoffice.version > 0) {
- OCA.Onlyoffice.onRequestHistory(OCA.Onlyoffice.version);
+ },
+ });
+ };
+
+ OCA.Onlyoffice.onRequestHistory = function (version) {
+ $.get(
+ OC.generateUrl(
+ "apps/" + OCA.Onlyoffice.AppName + "/ajax/history?fileId={fileId}",
+ {
+ fileId: OCA.Onlyoffice.fileId || 0,
}
-
- OCA.Onlyoffice.resize();
- OCA.Onlyoffice.setViewport();
- };
-
- OCA.Onlyoffice.onRequestSaveAs = function (event) {
- var saveData = {
- name: event.data.title,
- url: event.data.url
- };
-
- if (OCA.Onlyoffice.inframe) {
- window.parent.postMessage({
- method: "editorRequestSaveAs",
- param: saveData
- },
- "*");
- } else {
- OC.dialogs.filepicker(t(OCA.Onlyoffice.AppName, "Save as"),
- function (fileDir) {
- saveData.dir = fileDir;
- OCA.Onlyoffice.editorSaveAs(saveData);
- },
- false,
- "httpd/unix-directory",
- true);
+ ),
+ function onSuccess(response) {
+ OCA.Onlyoffice.refreshHistory(response, version);
+ }
+ );
+ };
+
+ OCA.Onlyoffice.onRequestHistoryData = function (event) {
+ const version = event.data;
+
+ $.get(
+ OC.generateUrl(
+ "apps/" +
+ OCA.Onlyoffice.AppName +
+ "/ajax/version?fileId={fileId}&version={version}",
+ {
+ fileId: OCA.Onlyoffice.fileId || 0,
+ version,
}
- };
-
- OCA.Onlyoffice.editorSaveAs = function (saveData) {
- $.post(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/save"),
- saveData,
- function onSuccess(response) {
- if (response.error) {
- OCA.Onlyoffice.showMessage(response.error, {
- type: "error",
- timeout: 3
- });
- return;
- }
-
- OCA.Onlyoffice.showMessage(t(OCA.Onlyoffice.AppName, "File saved") + " (" + response.name + ")", {
- timeout: 3
- });
- });
- };
-
- OCA.Onlyoffice.onRequestInsertImage = function (event) {
- var imageMimes = [
- "image/bmp", "image/x-bmp", "image/x-bitmap", "application/bmp",
- "image/gif",
- "image/jpeg", "image/jpg", "application/jpg", "application/x-jpg",
- "image/png", "image/x-png", "application/png", "application/x-png"
- ];
-
- if (event.data) {
- OCA.Onlyoffice.insertImageType = event.data.c;
+ ),
+ function onSuccess(response) {
+ if (response.error) {
+ response = {
+ error: response.error,
+ version,
+ };
}
+ OCA.Onlyoffice.docEditor.setHistoryData(response);
+ }
+ );
+ };
+
+ OCA.Onlyoffice.onRequestRestore = function (event) {
+ const version = event.data.version;
+
+ $.ajax({
+ method: "PUT",
+ url: OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/restore"),
+ data: {
+ fileId: OCA.Onlyoffice.fileId || 0,
+ version,
+ },
+ success: function onSuccess(response) {
+ OCA.Onlyoffice.refreshHistory(response, version);
if (OCA.Onlyoffice.inframe) {
- window.parent.postMessage({
- method: "editorRequestInsertImage",
- param: imageMimes
+ window.parent.postMessage(
+ {
+ method: "onRefreshVersionsDialog",
},
- "*");
- } else {
- OC.dialogs.filepicker(t(OCA.Onlyoffice.AppName, "Insert image"),
- OCA.Onlyoffice.editorInsertImage,
- false,
- imageMimes,
- true);
+ "*"
+ );
}
- };
+ },
+ });
+ };
- OCA.Onlyoffice.editorInsertImage = function (filePath) {
- $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/url?filePath={filePath}",
- {
- filePath: filePath
- }),
- function onSuccess(response) {
- if (response.error) {
- OCA.Onlyoffice.showMessage(response.error, {
- type: "error",
- timeout: 3
- });
- return;
- }
-
- if (OCA.Onlyoffice.insertImageType) {
- response.c = OCA.Onlyoffice.insertImageType;
- }
-
- OCA.Onlyoffice.docEditor.insertImage(response);
- });
- };
+ OCA.Onlyoffice.onRequestHistoryClose = function () {
+ location.reload(true);
+ };
- OCA.Onlyoffice.onRequestMailMergeRecipients = function () {
- var recipientMimes = [
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
- ];
+ OCA.Onlyoffice.onDocumentReady = function () {
+ if (OCA.Onlyoffice.inframe) {
+ window.parent.postMessage(
+ {
+ method: "onDocumentReady",
+ param: OCA.Onlyoffice.documentType,
+ },
+ "*"
+ );
+ }
- if (OCA.Onlyoffice.inframe) {
- window.parent.postMessage({
- method: "editorRequestMailMergeRecipients",
- param: recipientMimes
- },
- "*");
- } else {
- OC.dialogs.filepicker(t(OCA.Onlyoffice.AppName, "Select recipients"),
- OCA.Onlyoffice.editorSetRecipient,
- false,
- recipientMimes,
- true);
- }
- };
+ if (OCA.Onlyoffice.version > 0) {
+ OCA.Onlyoffice.onRequestHistory(OCA.Onlyoffice.version);
+ }
- OCA.Onlyoffice.editorSetRecipient = function (filePath) {
- $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/url?filePath={filePath}",
- {
- filePath: filePath
- }),
- function onSuccess(response) {
- if (response.error) {
- OCA.Onlyoffice.showMessage(response.error, {
- type: "error",
- timeout: 3
- });
- return;
- }
-
- OCA.Onlyoffice.docEditor.setMailMergeRecipients(response);
- });
- };
+ OCA.Onlyoffice.resize();
+ OCA.Onlyoffice.setViewport();
+ };
- OCA.Onlyoffice.editorReferenceSource = function (filePath) {
- if (filePath === OCA.Onlyoffice.filePath) {
- OCA.Onlyoffice.showMessage(t(OCA.Onlyoffice.AppName, "The data source must not be the current document"), "error");
- return;
- }
+ OCA.Onlyoffice.onRequestSaveAs = function (event) {
+ const saveData = {
+ name: event.data.title,
+ url: event.data.url,
+ };
- $.post(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/reference"),
+ if (OCA.Onlyoffice.inframe) {
+ window.parent.postMessage(
{
- path: filePath
+ method: "editorRequestSaveAs",
+ param: saveData,
},
- function onSuccess(response) {
- if (response.error) {
- OCA.Onlyoffice.showMessage(response.error, "error");
- return;
- }
- OCA.Onlyoffice.docEditor.setReferenceSource(response);
- });
+ "*"
+ );
+ } else {
+ OC.dialogs.filepicker(
+ t(OCA.Onlyoffice.AppName, "Save as"),
+ function (fileDir) {
+ saveData.dir = fileDir;
+ OCA.Onlyoffice.editorSaveAs(saveData);
+ },
+ false,
+ "httpd/unix-directory",
+ true
+ );
}
+ };
- OCA.Onlyoffice.onRequestClose = function () {
- OCA.Onlyoffice.docEditor.destroyEditor();
+ OCA.Onlyoffice.editorSaveAs = function (saveData) {
+ $.post(
+ OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/save"),
+ saveData,
+ function onSuccess(response) {
+ if (response.error) {
+ OCA.Onlyoffice.showMessage(response.error, {
+ type: "error",
+ timeout: 3,
+ });
+ return;
+ }
- window.parent.postMessage({
- method: "editorRequestClose"
- },
- "*");
- };
+ OCA.Onlyoffice.showMessage(
+ t(OCA.Onlyoffice.AppName, "File saved") + " (" + response.name + ")",
+ {
+ timeout: 3,
+ }
+ );
+ }
+ );
+ };
+
+ OCA.Onlyoffice.onRequestInsertImage = function (event) {
+ const imageMimes = [
+ "image/bmp",
+ "image/x-bmp",
+ "image/x-bitmap",
+ "application/bmp",
+ "image/gif",
+ "image/tiff",
+ "image/jpeg",
+ "image/jpg",
+ "application/jpg",
+ "application/x-jpg",
+ "image/png",
+ "image/x-png",
+ "application/png",
+ "application/x-png",
+ ];
+
+ if (event.data) {
+ OCA.Onlyoffice.insertImageType = event.data.c;
+ }
- OCA.Onlyoffice.onRequestSharingSettings = function () {
- window.parent.postMessage({
- method: "editorRequestSharingSettings"
+ if (OCA.Onlyoffice.inframe) {
+ window.parent.postMessage(
+ {
+ method: "editorRequestInsertImage",
+ param: imageMimes,
},
- "*");
- };
-
- OCA.Onlyoffice.onRequestSelectDocument = function (event) {
- var revisedMimes = [
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
- ];
+ "*"
+ );
+ } else {
+ OC.dialogs.filepicker(
+ t(OCA.Onlyoffice.AppName, "Insert image"),
+ OCA.Onlyoffice.editorInsertImage,
+ false,
+ imageMimes,
+ true
+ );
+ }
+ };
- if (OCA.Onlyoffice.inframe) {
- window.parent.postMessage({
- method: "editorRequestSelectDocument",
- param: revisedMimes,
- documentSelectionType: event.data.c
- },
- "*");
- } else {
- let title;
- switch (event.data.c) {
- case "combine":
- title = t(OCA.Onlyoffice.AppName, "Select file to combine");
- break;
- default:
- title = t(OCA.Onlyoffice.AppName, "Select file to compare");
- }
- OC.dialogs.filepicker(title,
- OCA.Onlyoffice.editorSetRequested.bind({documentSelectionType: event.data.c}),
- false,
- revisedMimes,
- true);
+ OCA.Onlyoffice.editorInsertImage = function (filePath) {
+ $.get(
+ OC.generateUrl(
+ "apps/" + OCA.Onlyoffice.AppName + "/ajax/url?filePath={filePath}",
+ {
+ filePath,
+ }
+ ),
+ function onSuccess(response) {
+ if (response.error) {
+ OCA.Onlyoffice.showMessage(response.error, {
+ type: "error",
+ timeout: 3,
+ });
+ return;
}
- };
- OCA.Onlyoffice.editorSetRequested = function (filePath) {
- let documentSelectionType = this.documentSelectionType;
- $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/url?filePath={filePath}",
- {
- filePath: filePath
- }),
- function onSuccess(response) {
- if (response.error) {
- OCA.Onlyoffice.showMessage(response.error, {
- type: "error",
- timeout: 3
- });
- return;
- }
- response.c = documentSelectionType;
-
- OCA.Onlyoffice.docEditor.setRequestedDocument(response);
- });
- };
+ if (OCA.Onlyoffice.insertImageType) {
+ response.c = OCA.Onlyoffice.insertImageType;
+ }
- OCA.Onlyoffice.onMakeActionLink = function (event) {
- var url = location.href;
- if (event && event.data) {
- var indexAnchor = url.indexOf("#");
- if (indexAnchor != -1) {
- url = url.substring(0, indexAnchor);
- }
+ OCA.Onlyoffice.docEditor.insertImage(response);
+ }
+ );
+ };
- var data = JSON.stringify(event.data);
- data = "anchor=" + encodeURIComponent(data);
+ OCA.Onlyoffice.onRequestMailMergeRecipients = function () {
+ const recipientMimes = [
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+ ];
- var inframeRegex = /inframe=([^&]*&?)/g;
- if (inframeRegex.test(url)) {
- url = url.replace(inframeRegex, data);
- }
+ if (OCA.Onlyoffice.inframe) {
+ window.parent.postMessage(
+ {
+ method: "editorRequestMailMergeRecipients",
+ param: recipientMimes,
+ },
+ "*"
+ );
+ } else {
+ OC.dialogs.filepicker(
+ t(OCA.Onlyoffice.AppName, "Select recipients"),
+ OCA.Onlyoffice.editorSetRecipient,
+ false,
+ recipientMimes,
+ true
+ );
+ }
+ };
- var anchorRegex = /anchor=([^&]*)/g;
- if (anchorRegex.test(url)) {
- url = url.replace(anchorRegex, data);
- } else {
- url += (url.indexOf("?") == -1) ? "?" : "&";
- url += data;
- }
+ OCA.Onlyoffice.editorSetRecipient = function (filePath) {
+ $.get(
+ OC.generateUrl(
+ "apps/" + OCA.Onlyoffice.AppName + "/ajax/url?filePath={filePath}",
+ {
+ filePath,
+ }
+ ),
+ function onSuccess(response) {
+ if (response.error) {
+ OCA.Onlyoffice.showMessage(response.error, {
+ type: "error",
+ timeout: 3,
+ });
+ return;
}
- OCA.Onlyoffice.docEditor.setActionLink(url);
- };
+ OCA.Onlyoffice.docEditor.setMailMergeRecipients(response);
+ }
+ );
+ };
+
+ OCA.Onlyoffice.editorReferenceSource = function (filePath) {
+ if (filePath === OCA.Onlyoffice.filePath) {
+ OCA.Onlyoffice.showMessage(
+ t(
+ OCA.Onlyoffice.AppName,
+ "The data source must not be the current document"
+ ),
+ "error"
+ );
+ return;
+ }
- OCA.Onlyoffice.onRequestUsers = function (event) {
- let operationType = typeof(event.data.c) !== "undefined" ? event.data.c : null;
- switch (operationType) {
- case "info":
- $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/userInfo?userIds={userIds}",
- {
- userIds: JSON.stringify(event.data.id)
- }),
- function onSuccess(response) {
- OCA.Onlyoffice.docEditor.setUsers({
- "c": operationType,
- "users": response
- });
- });
- break;
- default:
- $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/users?fileId={fileId}&operationType=" + operationType,
- {
- fileId: OCA.Onlyoffice.fileId || 0
- }),
- function onSuccess(response) {
- OCA.Onlyoffice.docEditor.setUsers({
- "c": operationType,
- "users": response
- });
- });
+ $.post(
+ OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/reference"),
+ {
+ path: filePath,
+ },
+ function onSuccess(response) {
+ if (response.error) {
+ OCA.Onlyoffice.showMessage(response.error, "error");
+ return;
}
- };
+ OCA.Onlyoffice.docEditor.setReferenceSource(response);
+ }
+ );
+ };
+
+ OCA.Onlyoffice.onRequestClose = function () {
+ OCA.Onlyoffice.docEditor.destroyEditor();
+
+ window.parent.postMessage(
+ {
+ method: "editorRequestClose",
+ },
+ "*"
+ );
+ };
+
+ OCA.Onlyoffice.onRequestSharingSettings = function () {
+ window.parent.postMessage(
+ {
+ method: "editorRequestSharingSettings",
+ },
+ "*"
+ );
+ };
+
+ OCA.Onlyoffice.onRequestSelectDocument = function (event) {
+ const revisedMimes = [
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ ];
+
+ if (OCA.Onlyoffice.inframe) {
+ window.parent.postMessage(
+ {
+ method: "editorRequestSelectDocument",
+ param: revisedMimes,
+ documentSelectionType: event.data.c,
+ },
+ "*"
+ );
+ } else {
+ let title;
+ switch (event.data.c) {
+ case "combine":
+ title = t(OCA.Onlyoffice.AppName, "Select file to combine");
+ break;
+ default:
+ title = t(OCA.Onlyoffice.AppName, "Select file to compare");
+ }
+ OC.dialogs.filepicker(
+ title,
+ OCA.Onlyoffice.editorSetRequested.bind({
+ documentSelectionType: event.data.c,
+ }),
+ false,
+ revisedMimes,
+ true
+ );
+ }
+ };
- OCA.Onlyoffice.onRequestReferenceData = function (event) {
- let referenceData = event.data.referenceData;
- let path = event.data.path;
+ OCA.Onlyoffice.editorSetRequested = function (filePath) {
+ const documentSelectionType = this.documentSelectionType;
+ $.get(
+ OC.generateUrl(
+ "apps/" + OCA.Onlyoffice.AppName + "/ajax/url?filePath={filePath}",
+ {
+ filePath,
+ }
+ ),
+ function onSuccess(response) {
+ if (response.error) {
+ OCA.Onlyoffice.showMessage(response.error, {
+ type: "error",
+ timeout: 3,
+ });
+ return;
+ }
+ response.c = documentSelectionType;
+
+ OCA.Onlyoffice.docEditor.setRequestedDocument(response);
+ }
+ );
+ };
+
+ OCA.Onlyoffice.onMakeActionLink = function (event) {
+ let url = location.href;
+ if (event && event.data) {
+ const indexAnchor = url.indexOf("#");
+ if (parseInt(indexAnchor) !== -1) {
+ url = url.substring(0, indexAnchor);
+ }
+
+ let data = JSON.stringify(event.data);
+ data = "anchor=" + encodeURIComponent(data);
+
+ const inframeRegex = /inframe=([^&]*&?)/g;
+ if (inframeRegex.test(url)) {
+ url = url.replace(inframeRegex, data);
+ }
+
+ const anchorRegex = /anchor=([^&]*)/g;
+ if (anchorRegex.test(url)) {
+ url = url.replace(anchorRegex, data);
+ } else {
+ url += url.indexOf("?") === -1 ? "?" : "&";
+ url += data;
+ }
+ }
- $.post(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/reference"),
+ OCA.Onlyoffice.docEditor.setActionLink(url);
+ };
+
+ OCA.Onlyoffice.onRequestUsers = function (event) {
+ const operationType =
+ typeof event.data.c !== "undefined" ? event.data.c : null;
+ switch (operationType) {
+ case "info":
+ $.get(
+ OC.generateUrl(
+ "apps/" +
+ OCA.Onlyoffice.AppName +
+ "/ajax/userInfo?userIds={userIds}",
{
- referenceData: referenceData,
- path: path
- },
- function onSuccess(response) {
- if (response.error) {
- OCA.Onlyoffice.showMessage(response.error, "error");
- return;
- }
-
- OCA.Onlyoffice.docEditor.setReferenceData(response);
+ userIds: JSON.stringify(event.data.id),
+ }
+ ),
+ function onSuccess(response) {
+ OCA.Onlyoffice.docEditor.setUsers({
+ c: operationType,
+ users: response,
});
- };
-
- OCA.Onlyoffice.onRequestSendNotify = function (event) {
- var actionLink = event.data.actionLink;
- var comment = event.data.message;
- var emails = event.data.emails;
-
- var fileId = OCA.Onlyoffice.fileId;
-
- $.post(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/mention"),
+ }
+ );
+ break;
+ default:
+ $.get(
+ OC.generateUrl(
+ "apps/" +
+ OCA.Onlyoffice.AppName +
+ "/ajax/users?fileId={fileId}&operationType=" +
+ operationType,
{
- fileId: fileId,
- anchor: JSON.stringify(actionLink),
- comment: comment,
- emails: emails
- },
- function onSuccess(response) {
- if (response.error) {
- OCA.Onlyoffice.showMessage(response.error, {
- type: "error",
- timeout: 3
- });
- return;
- }
-
- OCA.Onlyoffice.showMessage(response.message, {
- timeout: 3
- });
- });
- };
-
- OCA.Onlyoffice.onRequestOpen = function (event) {
- let filePath = event.data.path;
- let fileId = event.data.referenceData.fileKey;
- let windowName = event.data.windowName;
- let sourceUrl = OC.generateUrl(`apps/${OCA.Onlyoffice.AppName}/${fileId}?filePath=${OC.encodePath(filePath)}`);
- window.open(sourceUrl, windowName);
- };
-
- OCA.Onlyoffice.onRequestReferenceSource = function (event) {
- let referenceSourceMimes = [
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
- ];
- if (OCA.Onlyoffice.inframe) {
- window.parent.postMessage({
- method: "editorRequestReferenceSource",
- param: referenceSourceMimes
- },
- "*");
- } else {
- OC.dialogs.filepicker(t(OCA.Onlyoffice.AppName, "Select data source"),
- OCA.Onlyoffice.editorReferenceSource,
- false,
- referenceSourceMimes,
- true);
- }
- };
-
- OCA.Onlyoffice.onMetaChange = function (event) {
- if (event.data.favorite !== undefined) {
- $.ajax({
- url: OC.generateUrl("apps/files/api/v1/files" + OC.encodePath(OCA.Onlyoffice.filePath)),
- type: "post",
- data: JSON.stringify({
- tags: event.data.favorite ? [OC.TAG_FAVORITE] : []
- }),
- contentType: "application/json",
- dataType: "json",
- success: function(){
- OCA.Onlyoffice.docEditor.setFavorite(event.data.favorite);
- }
+ fileId: OCA.Onlyoffice.fileId || 0,
+ }
+ ),
+ function onSuccess(response) {
+ OCA.Onlyoffice.docEditor.setUsers({
+ c: operationType,
+ users: response,
});
- }
+ }
+ );
}
-
- OCA.Onlyoffice.showMessage = function (message, props = null) {
- if (OCA.Onlyoffice.inframe) {
- window.parent.postMessage({
- method: "onShowMessage",
- param: {
- message: message,
- props: props
- }
- },
- "*");
- return;
+ };
+
+ OCA.Onlyoffice.onRequestReferenceData = function (event) {
+ const referenceData = event.data.referenceData;
+ const path = event.data.path;
+
+ $.post(
+ OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/reference"),
+ {
+ referenceData,
+ path,
+ },
+ function onSuccess(response) {
+ if (response.error) {
+ OCA.Onlyoffice.showMessage(response.error, "error");
+ return;
}
- OC.Notification.show(message, props);
- };
-
- OCA.Onlyoffice.refreshHistory = function (response, version) {
+ OCA.Onlyoffice.docEditor.setReferenceData(response);
+ }
+ );
+ };
+
+ OCA.Onlyoffice.onRequestSendNotify = function (event) {
+ const actionLink = event.data.actionLink;
+ const comment = event.data.message;
+ const emails = event.data.emails;
+
+ const fileId = OCA.Onlyoffice.fileId;
+
+ $.post(
+ OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/mention"),
+ {
+ fileId,
+ anchor: JSON.stringify(actionLink),
+ comment,
+ emails,
+ },
+ function onSuccess(response) {
if (response.error) {
- var data = {error: response.error};
- } else {
- var currentVersion = 0;
- $.each(response, function (i, fileVersion) {
- if (fileVersion.version >= currentVersion) {
- currentVersion = fileVersion.version;
- }
-
- fileVersion.created = moment(fileVersion.created * 1000).format("L LTS");
- if (fileVersion.changes) {
- $.each(fileVersion.changes, function (j, change) {
- change.created = moment(change.created + "+00:00").format("L LTS");
- });
- }
- });
+ OCA.Onlyoffice.showMessage(response.error, {
+ type: "error",
+ timeout: 3,
+ });
+ return;
+ }
- if (version) {
- currentVersion = Math.min(currentVersion, version);
- }
+ OCA.Onlyoffice.showMessage(response.message, {
+ timeout: 3,
+ });
+ }
+ );
+ };
+
+ OCA.Onlyoffice.onRequestOpen = function (event) {
+ const filePath = event.data.path;
+ const fileId = event.data.referenceData.fileKey;
+ const windowName = event.data.windowName;
+ const sourceUrl = OC.generateUrl(
+ `apps/${OCA.Onlyoffice.AppName}/${fileId}?filePath=${OC.encodePath(
+ filePath
+ )}`
+ );
+ window.open(sourceUrl, windowName);
+ };
+
+ OCA.Onlyoffice.onRequestReferenceSource = function (event) {
+ const referenceSourceMimes = [
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+ ];
+ if (OCA.Onlyoffice.inframe) {
+ window.parent.postMessage(
+ {
+ method: "editorRequestReferenceSource",
+ param: referenceSourceMimes,
+ },
+ "*"
+ );
+ } else {
+ OC.dialogs.filepicker(
+ t(OCA.Onlyoffice.AppName, "Select data source"),
+ OCA.Onlyoffice.editorReferenceSource,
+ false,
+ referenceSourceMimes,
+ true
+ );
+ }
+ };
+
+ OCA.Onlyoffice.onMetaChange = function (event) {
+ if (event.data.favorite !== undefined) {
+ $.ajax({
+ url: OC.generateUrl(
+ "apps/files/api/v1/files" + OC.encodePath(OCA.Onlyoffice.filePath)
+ ),
+ type: "post",
+ data: JSON.stringify({
+ tags: event.data.favorite ? [OC.TAG_FAVORITE] : [],
+ }),
+ contentType: "application/json",
+ dataType: "json",
+ success() {
+ OCA.Onlyoffice.docEditor.setFavorite(event.data.favorite);
+ },
+ });
+ }
+ };
- data = {
- currentVersion: currentVersion,
- history: response,
- };
- }
- OCA.Onlyoffice.docEditor.refreshHistory(data);
+ OCA.Onlyoffice.showMessage = function (message, props = null) {
+ if (OCA.Onlyoffice.inframe) {
+ window.parent.postMessage(
+ {
+ method: "onShowMessage",
+ param: {
+ message,
+ props,
+ },
+ },
+ "*"
+ );
+ return;
}
- OCA.Onlyoffice.resize = function () {
- if (OCA.Onlyoffice.device !== "mobile") {
- return;
+ OC.Notification.show(message, props);
+ };
+
+ OCA.Onlyoffice.refreshHistory = function (response, version) {
+ let data = null;
+ if (response.error) {
+ data = { error: response.error };
+ } else {
+ let currentVersion = 0;
+ $.each(response, function (i, fileVersion) {
+ if (fileVersion.version >= currentVersion) {
+ currentVersion = fileVersion.version;
}
- var headerHeight = $("#header").length > 0 ? $("#header").height() : 45;
- var wrapEl = $("#app>iframe");
- if (wrapEl.length > 0) {
- wrapEl[0].style.height = (screen.availHeight - headerHeight) + "px";
- window.scrollTo(0, -1);
- wrapEl[0].style.height = (window.top.innerHeight - headerHeight) + "px";
+ fileVersion.created = moment(fileVersion.created * 1000).format(
+ "L LTS"
+ );
+ if (fileVersion.changes) {
+ $.each(fileVersion.changes, function (j, change) {
+ change.created = moment(change.created + "+00:00").format("L LTS");
+ });
}
- };
+ });
- OCA.Onlyoffice.resizeEvents = function() {
- if (window.addEventListener) {
- if (/Android/i.test(navigator.userAgent)) {
- window.addEventListener("resize", OCA.Onlyoffice.resize);
- }
- if (/iPhone|iPad|iPod/i.test(navigator.userAgent)) {
- window.addEventListener("orientationchange", OCA.Onlyoffice.resize);
- }
- }
- };
+ if (version) {
+ currentVersion = Math.min(currentVersion, version);
+ }
- OCA.Onlyoffice.setViewport = function() {
- document.querySelector('meta[name="viewport"]').setAttribute("content","width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0");
- };
+ data = {
+ currentVersion,
+ history: response,
+ };
+ }
+ OCA.Onlyoffice.docEditor.refreshHistory(data);
+ };
- $(document).ready(OCA.Onlyoffice.InitEditor);
+ OCA.Onlyoffice.resize = function () {
+ if (OCA.Onlyoffice.device !== "mobile") {
+ return;
+ }
+ const headerHeight = $("#header").length > 0 ? $("#header").height() : 45;
+ const wrapEl = $("#app>iframe");
+ if (wrapEl.length > 0) {
+ wrapEl[0].style.height = screen.availHeight - headerHeight + "px";
+ window.scrollTo(0, -1);
+ wrapEl[0].style.height = window.top.innerHeight - headerHeight + "px";
+ }
+ };
+
+ OCA.Onlyoffice.resizeEvents = function () {
+ if (window.addEventListener) {
+ if (/Android/i.test(navigator.userAgent)) {
+ window.addEventListener("resize", OCA.Onlyoffice.resize);
+ }
+ if (/iPhone|iPad|iPod/i.test(navigator.userAgent)) {
+ window.addEventListener("orientationchange", OCA.Onlyoffice.resize);
+ }
+ }
+ };
+
+ OCA.Onlyoffice.setViewport = function () {
+ document
+ .querySelector('meta[name="viewport"]')
+ .setAttribute(
+ "content",
+ "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
+ );
+ };
+
+ $(document).ready(OCA.Onlyoffice.InitEditor);
})(jQuery, OCA);
diff --git a/js/listener.js b/js/listener.js
index 736632cd..4a9d87f7 100644
--- a/js/listener.js
+++ b/js/listener.js
@@ -17,160 +17,199 @@
*/
(function (OCA) {
-
- OCA.Onlyoffice = _.extend({
- AppName: "onlyoffice",
- }, OCA.Onlyoffice);
-
- OCA.Onlyoffice.onRequestClose = function () {
-
- $("#onlyofficeFrame").remove();
-
- OCA.Onlyoffice.CloseEditor();
- };
-
- OCA.Onlyoffice.onRequestSaveAs = function (saveData) {
- OC.dialogs.filepicker(t(OCA.Onlyoffice.AppName, "Save as"),
- function (fileDir) {
- saveData.dir = fileDir;
- $("#onlyofficeFrame")[0].contentWindow.OCA.Onlyoffice.editorSaveAs(saveData);
- },
- false,
- "httpd/unix-directory",
- true);
- };
-
- OCA.Onlyoffice.onRequestInsertImage = function (imageMimes) {
- OC.dialogs.filepicker(t(OCA.Onlyoffice.AppName, "Insert image"),
- $("#onlyofficeFrame")[0].contentWindow.OCA.Onlyoffice.editorInsertImage,
- false,
- imageMimes,
- true);
- };
-
- OCA.Onlyoffice.onRequestMailMergeRecipients = function (recipientMimes) {
- OC.dialogs.filepicker(t(OCA.Onlyoffice.AppName, "Select recipients"),
- $("#onlyofficeFrame")[0].contentWindow.OCA.Onlyoffice.editorSetRecipient,
- false,
- recipientMimes,
- true);
- };
-
- OCA.Onlyoffice.onRequestSelectDocument = function (revisedMimes, documentSelectionType) {
- let title;
- switch (documentSelectionType) {
- case "combine":
- title = t(OCA.Onlyoffice.AppName, "Select file to combine");
- break;
- default:
- title = t(OCA.Onlyoffice.AppName, "Select file to compare");
- }
- OC.dialogs.filepicker(title,
- $("#onlyofficeFrame")[0].contentWindow.OCA.Onlyoffice.editorSetRequested.bind({documentSelectionType: documentSelectionType}),
- false,
- revisedMimes,
- true);
- };
-
- OCA.Onlyoffice.onRequestReferenceSource = function (referenceSourceMimes) {
- OC.dialogs.filepicker(t(OCA.Onlyoffice.AppName, "Select data source"),
- $("#onlyofficeFrame")[0].contentWindow.OCA.Onlyoffice.editorReferenceSource,
- false,
- referenceSourceMimes,
- true);
+ OCA.Onlyoffice = _.extend(
+ {
+ AppName: "onlyoffice",
+ },
+ OCA.Onlyoffice
+ );
+
+ OCA.Onlyoffice.onRequestClose = function () {
+ $("#onlyoffice-frame").remove();
+
+ OCA.Onlyoffice.CloseEditor();
+ };
+
+ OCA.Onlyoffice.onRequestSaveAs = function (saveData) {
+ OC.dialogs.filepicker(
+ t(OCA.Onlyoffice.AppName, "Save as"),
+ function (fileDir) {
+ saveData.dir = fileDir;
+ $("#onlyoffice-frame")[0].contentWindow.OCA.Onlyoffice.editorSaveAs(
+ saveData
+ );
+ },
+ false,
+ "httpd/unix-directory",
+ true
+ );
+ };
+
+ OCA.Onlyoffice.onRequestInsertImage = function (imageMimes) {
+ OC.dialogs.filepicker(
+ t(OCA.Onlyoffice.AppName, "Insert image"),
+ $("#onlyoffice-frame")[0].contentWindow.OCA.Onlyoffice.editorInsertImage,
+ false,
+ imageMimes,
+ true
+ );
+ };
+
+ OCA.Onlyoffice.onRequestMailMergeRecipients = function (recipientMimes) {
+ OC.dialogs.filepicker(
+ t(OCA.Onlyoffice.AppName, "Select recipients"),
+ $("#onlyoffice-frame")[0].contentWindow.OCA.Onlyoffice.editorSetRecipient,
+ false,
+ recipientMimes,
+ true
+ );
+ };
+
+ OCA.Onlyoffice.onRequestSelectDocument = function (
+ revisedMimes,
+ documentSelectionType
+ ) {
+ let title;
+ switch (documentSelectionType) {
+ case "combine":
+ title = t(OCA.Onlyoffice.AppName, "Select file to combine");
+ break;
+ default:
+ title = t(OCA.Onlyoffice.AppName, "Select file to compare");
+ }
+ OC.dialogs.filepicker(
+ title,
+ $(
+ "#onlyoffice-frame"
+ )[0].contentWindow.OCA.Onlyoffice.editorSetRequested.bind({
+ documentSelectionType,
+ }),
+ false,
+ revisedMimes,
+ true
+ );
+ };
+
+ OCA.Onlyoffice.onRequestReferenceSource = function (referenceSourceMimes) {
+ OC.dialogs.filepicker(
+ t(OCA.Onlyoffice.AppName, "Select data source"),
+ $("#onlyoffice-frame")[0].contentWindow.OCA.Onlyoffice
+ .editorReferenceSource,
+ false,
+ referenceSourceMimes,
+ true
+ );
+ };
+
+ OCA.Onlyoffice.onDocumentReady = function (documentType) {
+ if (
+ documentType === "word" ||
+ documentType === "cell" ||
+ documentType === "slide"
+ ) {
+ OCA.Onlyoffice.bindVersionClick();
+ } else {
+ OCA.Onlyoffice.unbindVersionClick();
}
- OCA.Onlyoffice.onDocumentReady = function (documentType) {
- if (documentType === "word"
- || documentType === "cell"
- || documentType === "slide") {
- OCA.Onlyoffice.bindVersionClick();
- } else {
- OCA.Onlyoffice.unbindVersionClick();
- }
-
- OCA.Onlyoffice.setViewport();
- };
-
- OCA.Onlyoffice.changeFavicon = function (favicon) {
- $('link[rel="icon"]').attr("href", favicon);
- };
-
- OCA.Onlyoffice.setViewport = function() {
- document.querySelector('meta[name="viewport"]').setAttribute("content","width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0");
- };
-
- OCA.Onlyoffice.onShowMessage = function (messageObj) {
- OC.Notification.show(messageObj.message, messageObj.props);
- };
-
- OCA.Onlyoffice.onRequestEditRights = function () {
- $("#onlyofficeFrame").attr("src", $("#onlyofficeFrame").attr("src") + "&forceEdit=true");
- };
-
- window.addEventListener("message", function (event) {
- if ($("#onlyofficeFrame")[0]) {
- if ($("#onlyofficeFrame")[0].contentWindow !== event.source
- || !event.data["method"]) {
- return;
- }
- }
- switch (event.data.method) {
- case "editorRequestClose":
- OCA.Onlyoffice.onRequestClose();
- break;
- case "editorRequestSharingSettings":
- if (OCA.Onlyoffice.OpenShareDialog) {
- OCA.Onlyoffice.OpenShareDialog();
- }
- break;
- case "onRefreshVersionsDialog":
- if (OCA.Onlyoffice.RefreshVersionsDialog) {
- OCA.Onlyoffice.RefreshVersionsDialog();
- }
- break;
- case "editorRequestSaveAs":
- OCA.Onlyoffice.onRequestSaveAs(event.data.param);
- break;
- case "editorRequestInsertImage":
- OCA.Onlyoffice.onRequestInsertImage(event.data.param);
- break;
- case "editorRequestMailMergeRecipients":
- OCA.Onlyoffice.onRequestMailMergeRecipients(event.data.param);
- break;
- case "editorRequestSelectDocument":
- OCA.Onlyoffice.onRequestSelectDocument(event.data.param, event.data.documentSelectionType);
- break;
- case "editorRequestReferenceSource":
- OCA.Onlyoffice.onRequestReferenceSource(event.data.param);
- break;
- case "onDocumentReady":
- OCA.Onlyoffice.onDocumentReady(event.data.param);
- break;
- case "changeFavicon":
- OCA.Onlyoffice.changeFavicon(event.data.param);
- break;
- case "onShowMessage":
- OCA.Onlyoffice.onShowMessage(event.data.param);
- break;
- case "onRequestEditRights":
- OCA.Onlyoffice.onRequestEditRights();
- }
- }, false);
-
- window.addEventListener("popstate", function (event) {
- if ($("#onlyofficeFrame").length
- && location.href.indexOf(OCA.Onlyoffice.AppName) == -1) {
- OCA.Onlyoffice.onRequestClose();
- }
- });
-
- window.addEventListener("DOMNodeRemoved", function(event) {
- if ($(event.target).length && $("#onlyofficeFrame").length
- && ($(event.target)[0].id === "viewer" || $(event.target)[0].id === $("#onlyofficeFrame")[0].id)) {
- OCA.Onlyoffice.changeFavicon($("#onlyofficeFrame")[0].contentWindow.OCA.Onlyoffice.faviconBase);
- window.document.title = $("#onlyofficeFrame")[0].contentWindow.OCA.Onlyoffice.titleBase;
+ OCA.Onlyoffice.setViewport();
+ };
+
+ OCA.Onlyoffice.changeFavicon = function (favicon) {
+ $('link[rel="icon"]').attr("href", favicon);
+ };
+
+ OCA.Onlyoffice.setViewport = function () {
+ document
+ .querySelector('meta[name="viewport"]')
+ .setAttribute(
+ "content",
+ "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
+ );
+ };
+
+ OCA.Onlyoffice.onShowMessage = function (messageObj) {
+ OC.Notification.show(messageObj.message, messageObj.props);
+ };
+
+ window.addEventListener(
+ "message",
+ function (event) {
+ if ($("#onlyoffice-frame")[0]) {
+ if (
+ $("#onlyoffice-frame")[0].contentWindow !== event.source ||
+ !event.data["method"]
+ ) {
+ return;
}
- });
-
+ }
+ switch (event.data.method) {
+ case "editorRequestClose":
+ OCA.Onlyoffice.onRequestClose();
+ break;
+ case "editorRequestSharingSettings":
+ if (OCA.Onlyoffice.OpenShareDialog) {
+ OCA.Onlyoffice.OpenShareDialog();
+ }
+ break;
+ case "onRefreshVersionsDialog":
+ if (OCA.Onlyoffice.RefreshVersionsDialog) {
+ OCA.Onlyoffice.RefreshVersionsDialog();
+ }
+ break;
+ case "editorRequestSaveAs":
+ OCA.Onlyoffice.onRequestSaveAs(event.data.param);
+ break;
+ case "editorRequestInsertImage":
+ OCA.Onlyoffice.onRequestInsertImage(event.data.param);
+ break;
+ case "editorRequestMailMergeRecipients":
+ OCA.Onlyoffice.onRequestMailMergeRecipients(event.data.param);
+ break;
+ case "editorRequestSelectDocument":
+ OCA.Onlyoffice.onRequestSelectDocument(
+ event.data.param,
+ event.data.documentSelectionType
+ );
+ break;
+ case "editorRequestReferenceSource":
+ OCA.Onlyoffice.onRequestReferenceSource(event.data.param);
+ break;
+ case "onDocumentReady":
+ OCA.Onlyoffice.onDocumentReady(event.data.param);
+ break;
+ case "changeFavicon":
+ OCA.Onlyoffice.changeFavicon(event.data.param);
+ break;
+ case "onShowMessage":
+ OCA.Onlyoffice.onShowMessage(event.data.param);
+ break;
+ }
+ },
+ false
+ );
+
+ window.addEventListener("popstate", function (event) {
+ if (
+ $("#onlyoffice-frame").length &&
+ location.href.indexOf(OCA.Onlyoffice.AppName) === -1
+ ) {
+ OCA.Onlyoffice.onRequestClose();
+ }
+ });
+
+ window.addEventListener("DOMNodeRemoved", function (event) {
+ if (
+ $(event.target).length &&
+ $("#onlyoffice-frame").length &&
+ ($(event.target)[0].id === "viewer" ||
+ $(event.target)[0].id === $("#onlyoffice-frame")[0].id)
+ ) {
+ OCA.Onlyoffice.changeFavicon(
+ $("#onlyoffice-frame")[0].contentWindow.OCA.Onlyoffice.faviconBase
+ );
+ window.document.title =
+ $("#onlyoffice-frame")[0].contentWindow.OCA.Onlyoffice.titleBase;
+ }
+ });
})(OCA);
diff --git a/js/main.js b/js/main.js
index c6a4921c..a174641c 100644
--- a/js/main.js
+++ b/js/main.js
@@ -17,554 +17,686 @@
*/
(function (OCA) {
+ OCA.Onlyoffice = _.extend(
+ {
+ AppName: "onlyoffice",
+ context: null,
+ folderUrl: null,
+ },
+ OCA.Onlyoffice
+ );
+
+ OCA.Onlyoffice.setting = {};
+ OCA.Onlyoffice.mobile =
+ /Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini|Macintosh/i.test(
+ navigator.userAgent
+ ) &&
+ navigator.maxTouchPoints &&
+ navigator.maxTouchPoints > 1;
+
+ OCA.Onlyoffice.CreateFile = function (
+ name,
+ fileList,
+ templateId,
+ targetPath,
+ open = true
+ ) {
+ const dir = fileList.getCurrentDirectory();
+ let winEditor = null;
+ if (
+ (!OCA.Onlyoffice.setting.sameTab ||
+ OCA.Onlyoffice.mobile ||
+ OCA.Onlyoffice.Desktop) &&
+ open
+ ) {
+ $loaderUrl = OCA.Onlyoffice.Desktop
+ ? ""
+ : OC.filePath(OCA.Onlyoffice.AppName, "templates", "loader.html");
+ winEditor = window.open($loaderUrl);
+ }
- OCA.Onlyoffice = _.extend({
- AppName: "onlyoffice",
- context: null,
- folderUrl: null,
- }, OCA.Onlyoffice);
-
- OCA.Onlyoffice.setting = {};
- OCA.Onlyoffice.mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini|Macintosh/i.test(navigator.userAgent)
- && navigator.maxTouchPoints && navigator.maxTouchPoints > 1;
-
- OCA.Onlyoffice.CreateFile = function (name, fileList, templateId, targetPath, open = true) {
- var dir = fileList.getCurrentDirectory();
-
- if ((!OCA.Onlyoffice.setting.sameTab || OCA.Onlyoffice.mobile || OCA.Onlyoffice.Desktop) && open) {
- $loaderUrl = OCA.Onlyoffice.Desktop ? "" : OC.filePath(OCA.Onlyoffice.AppName, "templates", "loader.html");
- var winEditor = window.open($loaderUrl);
- }
-
- var createData = {
- name: name,
- dir: dir
- };
-
- if (templateId) {
- createData.templateId = templateId;
- }
+ const createData = {
+ name,
+ dir,
+ };
- if (targetPath) {
- createData.targetPath = targetPath;
- }
+ if (templateId) {
+ createData.templateId = templateId;
+ }
- if ($("#isPublic").val()) {
- createData.shareToken = encodeURIComponent($("#sharingToken").val());
- }
+ if (targetPath) {
+ createData.targetPath = targetPath;
+ }
- $.post(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/new"),
- createData,
- function onSuccess(response) {
- if (response.error) {
- if (winEditor) {
- winEditor.close();
- }
- OC.Notification.show(response.error, {
- type: "error",
- timeout: 3
- });
- return;
- }
-
- fileList.add(response, { animate: true });
- if (open) {
- let fileName = response.name;
- let extension = OCA.Onlyoffice.GetFileExtension(fileName);
- let forceEdit = OCA.Onlyoffice.setting.formats[extension].fillForms;
- OCA.Onlyoffice.OpenEditor(response.id, dir, fileName, 0, winEditor, forceEdit);
- }
-
- OCA.Onlyoffice.context = { fileList: fileList };
- OCA.Onlyoffice.context.fileName = response.name;
-
- OC.Notification.show(t(OCA.Onlyoffice.AppName, "File created"), {
- timeout: 3
- });
- }
- );
- };
+ if ($("#isPublic").val()) {
+ createData.shareToken = encodeURIComponent($("#sharingToken").val());
+ }
- OCA.Onlyoffice.OpenEditor = function (fileId, fileDir, fileName, version, winEditor, forceEdit) {
- var filePath = "";
- if (fileName) {
- filePath = fileDir.replace(new RegExp("\/$"), "") + "/" + fileName;
+ $.post(
+ OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/new"),
+ createData,
+ function onSuccess(response) {
+ if (response.error) {
+ if (winEditor) {
+ winEditor.close();
+ }
+ OC.Notification.show(response.error, {
+ type: "error",
+ timeout: 3,
+ });
+ return;
}
- var url = OC.generateUrl("/apps/" + OCA.Onlyoffice.AppName + "/{fileId}?filePath={filePath}",
- {
- fileId: fileId,
- filePath: filePath
- });
- if ($("#isPublic").val()) {
- url = OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/s/{shareToken}?fileId={fileId}",
- {
- shareToken: encodeURIComponent($("#sharingToken").val()),
- fileId: fileId
- });
+ fileList.add(response, { animate: true });
+ if (open) {
+ const fileName = response.name;
+ const extension = OCA.Onlyoffice.GetFileExtension(fileName);
+ OCA.Onlyoffice.OpenEditor(
+ response.id,
+ dir,
+ fileName,
+ 0,
+ winEditor
+ );
}
- if (forceEdit) {
- url += "&forceEdit=true";
- }
+ OCA.Onlyoffice.context = { fileList };
+ OCA.Onlyoffice.context.fileName = response.name;
- if (version > 0) {
- url += "&version=" + version;
+ OC.Notification.show(t(OCA.Onlyoffice.AppName, "File created"), {
+ timeout: 3,
+ });
+ }
+ );
+ };
+
+ OCA.Onlyoffice.OpenEditor = function (
+ fileId,
+ fileDir,
+ fileName,
+ version,
+ winEditor
+ ) {
+ let filePath = "";
+ if (fileName) {
+ filePath = fileDir.replace(new RegExp("/$"), "") + "/" + fileName;
+ }
+ let url = OC.generateUrl(
+ "/apps/" + OCA.Onlyoffice.AppName + "/{fileId}?filePath={filePath}",
+ {
+ fileId,
+ filePath,
+ }
+ );
+
+ if ($("#isPublic").val()) {
+ url = OC.generateUrl(
+ "apps/" + OCA.Onlyoffice.AppName + "/s/{shareToken}?fileId={fileId}",
+ {
+ shareToken: encodeURIComponent($("#sharingToken").val()),
+ fileId,
}
+ );
+ }
- if (winEditor && winEditor.location) {
- winEditor.location.href = url;
- } else if (!OCA.Onlyoffice.setting.sameTab || OCA.Onlyoffice.mobile || OCA.Onlyoffice.Desktop) {
- winEditor = window.open(url, "_blank");
- } else if ($("#isPublic").val() === "1" && $("#mimetype").val() !== "httpd/unix-directory") {
- location.href = url;
- } else {
- var $iframe = $("");
- var scrollTop = 0;
- if ($("#app-content").length) {
- $("#app-content").append($iframe);
+ if (version > 0) {
+ url += "&version=" + version;
+ }
- scrollTop = $("#app-content").scrollTop();
- } else {
- $("#preview").append($iframe);
+ if (winEditor && winEditor.location) {
+ winEditor.location.href = url;
+ } else if (
+ !OCA.Onlyoffice.setting.sameTab ||
+ OCA.Onlyoffice.mobile ||
+ OCA.Onlyoffice.Desktop
+ ) {
+ winEditor = window.open(url, "_blank");
+ } else if (
+ $("#isPublic").val() === "1" &&
+ $("#mimetype").val() !== "httpd/unix-directory"
+ ) {
+ location.href = url;
+ } else {
+ const $iframe = $(
+ ''
+ );
+ let scrollTop = 0;
+ if ($("#app-content").length) {
+ $("#app-content").append($iframe);
+
+ scrollTop = $("#app-content").scrollTop();
+ } else {
+ $("#preview").append($iframe);
+
+ scrollTop = $("#content-wrapper").scrollTop();
+ }
+
+ $("#onlyoffice-frame").css("top", scrollTop);
+
+ $("body").addClass("onlyoffice-inline");
+ OC.Apps.hideAppSidebar();
+
+ $("html, body").scrollTop(0);
+
+ OCA.Onlyoffice.folderUrl = location.href;
+ window.history.pushState(null, null, url);
+ }
+ };
- scrollTop = $("#content-wrapper").scrollTop();
- }
+ OCA.Onlyoffice.CloseEditor = function () {
+ $("body").removeClass("onlyoffice-inline");
- $("#onlyofficeFrame").css("top", scrollTop);
+ OCA.Onlyoffice.context = null;
- $("body").addClass("onlyoffice-inline");
- OC.Apps.hideAppSidebar();
+ const url = OCA.Onlyoffice.folderUrl;
+ if (!!url) {
+ window.history.pushState(null, null, url);
+ OCA.Onlyoffice.folderUrl = null;
+ }
- $("html, body").scrollTop(0);
+ OCA.Onlyoffice.bindVersionClick();
+ };
- OCA.Onlyoffice.folderUrl = location.href;
- window.history.pushState(null, null, url);
- }
+ OCA.Onlyoffice.OpenShareDialog = function () {
+ if (OCA.Onlyoffice.context) {
+ if (!$("#app-content").hasClass("with-app-sidebar")) {
+ OCA.Onlyoffice.context.fileList.showDetailsView(
+ OCA.Onlyoffice.context.fileName,
+ "shareTabView"
+ );
+ OC.Apps.showAppSidebar();
+ } else {
+ OC.Apps.hideAppSidebar();
+ }
+ }
+ };
+
+ OCA.Onlyoffice.RefreshVersionsDialog = function () {
+ if (OCA.Onlyoffice.context) {
+ if ($("#app-content").hasClass("with-app-sidebar")) {
+ OC.Apps.hideAppSidebar();
+ OCA.Onlyoffice.context.fileList.showDetailsView(
+ OCA.Onlyoffice.context.fileName,
+ "versionsTabView"
+ );
+ OC.Apps.showAppSidebar();
+ }
+ }
+ };
+
+ OCA.Onlyoffice.FileClick = function (fileName, context) {
+ const fileInfoModel =
+ context.fileInfoModel || context.fileList.getModelForFile(fileName);
+ const fileId =
+ (context.$file && context.$file[0].dataset.id) || fileInfoModel.id;
+ const winEditor =
+ !fileInfoModel && !OCA.Onlyoffice.setting.sameTab ? document : null;
+
+ OCA.Onlyoffice.OpenEditor(fileId, context.dir, fileName, 0, winEditor);
+
+ OCA.Onlyoffice.context = context;
+ OCA.Onlyoffice.context.fileName = fileName;
+ };
+
+ OCA.Onlyoffice.FileConvertClick = function (fileName, context) {
+ const fileInfoModel =
+ context.fileInfoModel || context.fileList.getModelForFile(fileName);
+ const fileList = context.fileList;
+ const fileId = context.$file
+ ? context.$file[0].dataset.id
+ : fileInfoModel.id;
+
+ const convertData = {
+ fileId,
};
- OCA.Onlyoffice.CloseEditor = function () {
- $("body").removeClass("onlyoffice-inline");
-
- OCA.Onlyoffice.context = null;
-
- var url = OCA.Onlyoffice.folderUrl;
- if (!!url) {
- window.history.pushState(null, null, url);
- OCA.Onlyoffice.folderUrl = null;
- }
-
- OCA.Onlyoffice.bindVersionClick();
- };
+ if ($("#isPublic").val()) {
+ convertData.shareToken = encodeURIComponent($("#sharingToken").val());
+ }
- OCA.Onlyoffice.OpenShareDialog = function () {
- if (OCA.Onlyoffice.context) {
- if (!$("#app-content").hasClass("with-app-sidebar")) {
- OCA.Onlyoffice.context.fileList.showDetailsView(OCA.Onlyoffice.context.fileName, "shareTabView");
- OC.Apps.showAppSidebar();
- } else {
- OC.Apps.hideAppSidebar();
- }
+ $.post(
+ OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/convert"),
+ convertData,
+ function onSuccess(response) {
+ if (response.error) {
+ OC.Notification.show(response.error, {
+ type: "error",
+ timeout: 3,
+ });
+ return;
}
- };
- OCA.Onlyoffice.RefreshVersionsDialog = function () {
- if (OCA.Onlyoffice.context) {
- if ($("#app-content").hasClass("with-app-sidebar")) {
- OC.Apps.hideAppSidebar();
- OCA.Onlyoffice.context.fileList.showDetailsView(OCA.Onlyoffice.context.fileName, "versionsTabView");
- OC.Apps.showAppSidebar();
- }
+ if (response.parentId === fileList.dirInfo.id) {
+ fileList.add(response, { animate: true });
}
- };
- OCA.Onlyoffice.FileClick = function (fileName, context) {
- var fileInfoModel = context.fileInfoModel || context.fileList.getModelForFile(fileName);
- var fileId = context.$file && context.$file[0].dataset.id || fileInfoModel.id;
- var winEditor = !fileInfoModel && !OCA.Onlyoffice.setting.sameTab ? document : null;
+ OC.Notification.show(
+ t(
+ OCA.Onlyoffice.AppName,
+ "File has been converted. Its content might look different."
+ ),
+ {
+ timeout: 3,
+ }
+ );
+ }
+ );
+ };
+
+ OCA.Onlyoffice.DownloadClick = function (fileName, context) {
+ const fileInfoModel =
+ context.fileInfoModel || context.fileList.getModelForFile(fileName);
+
+ $("#download-picker").remove();
+ $.get(
+ OC.filePath(OCA.Onlyoffice.AppName, "templates", "downloadPicker.html"),
+ function (tmpl) {
+ const dialog = $(tmpl).octemplate({
+ dialog_name: "download-picker",
+ dialog_title: t("onlyoffice", "Download as"),
+ });
- OCA.Onlyoffice.OpenEditor(fileId, context.dir, fileName, 0, winEditor);
+ $(dialog[0].querySelectorAll("p")).text(
+ t(OCA.Onlyoffice.AppName, "Choose a format to convert {fileName}", {
+ fileName,
+ })
+ );
- OCA.Onlyoffice.context = context;
- OCA.Onlyoffice.context.fileName = fileName;
- };
+ const extension = OCA.Onlyoffice.GetFileExtension(fileName);
+ const selectNode = dialog[0].querySelectorAll("select")[0];
+ const optionNodeOrigin = selectNode.querySelectorAll("option")[0];
- OCA.Onlyoffice.FileConvertClick = function (fileName, context) {
- var fileInfoModel = context.fileInfoModel || context.fileList.getModelForFile(fileName);
- var fileList = context.fileList;
- var fileId = context.$file ? context.$file[0].dataset.id : fileInfoModel.id;
+ $(optionNodeOrigin).attr("data-value", extension);
+ $(optionNodeOrigin).text(t(OCA.Onlyoffice.AppName, "Origin format"));
- var convertData = {
- fileId: fileId
+ dialog[0].dataset.format = extension;
+ selectNode.onclick = function () {
+ dialog[0].dataset.format = $(
+ "#onlyoffice-download-select option:selected"
+ ).attr("data-value");
};
- if ($("#isPublic").val()) {
- convertData.shareToken = encodeURIComponent($("#sharingToken").val());
- }
+ OCA.Onlyoffice.setting.formats[extension].saveas.forEach((ext) => {
+ const optionNode = optionNodeOrigin.cloneNode(true);
- $.post(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/convert"),
- convertData,
- function onSuccess(response) {
- if (response.error) {
- OC.Notification.show(response.error, {
- type: "error",
- timeout: 3
- });
- return;
- }
-
- if (response.parentId == fileList.dirInfo.id) {
- fileList.add(response, { animate: true });
- }
-
- OC.Notification.show(t(OCA.Onlyoffice.AppName, "File has been converted. Its content might look different."), {
- timeout: 3
- });
- });
- };
+ $(optionNode).attr("data-value", ext);
+ $(optionNode).text(ext);
- OCA.Onlyoffice.DownloadClick = function (fileName, context) {
- var fileInfoModel = context.fileInfoModel || context.fileList.getModelForFile(fileName);
-
- $("#download-picker").remove();
- $.get(OC.filePath(OCA.Onlyoffice.AppName, "templates", "downloadPicker.html"),
- function (tmpl) {
- var dialog = $(tmpl).octemplate({
- dialog_name: "download-picker",
- dialog_title: t("onlyoffice", "Download as")
- });
-
- $(dialog[0].querySelectorAll("p")).text(t(OCA.Onlyoffice.AppName, "Choose a format to convert {fileName}", {fileName: fileName}));
-
- var extension = OCA.Onlyoffice.GetFileExtension(fileName);
- var selectNode = dialog[0].querySelectorAll("select")[0];
- var optionNodeOrigin = selectNode.querySelectorAll("option")[0];
-
- $(optionNodeOrigin).attr("data-value", extension);
- $(optionNodeOrigin).text(t(OCA.Onlyoffice.AppName, "Origin format"));
-
- dialog[0].dataset.format = extension;
- selectNode.onclick = function() {
- dialog[0].dataset.format = $("#onlyoffice-download-select option:selected").attr("data-value");
- }
-
- OCA.Onlyoffice.setting.formats[extension].saveas.forEach(ext => {
- var optionNode = optionNodeOrigin.cloneNode(true);
-
- $(optionNode).attr("data-value", ext);
- $(optionNode).text(ext);
-
- selectNode.append(optionNode);
- })
-
- $("body").append(dialog)
-
- $("#download-picker").ocdialog({
- closeOnEscape: true,
- modal: true,
- buttons: [{
- text: t("core", "Cancel"),
- classes: "cancel",
- click: function() {
- $(this).ocdialog("close")
- }
- }, {
- text: t("onlyoffice", "Download"),
- classes: "primary",
- click: function() {
- var format = this.dataset.format;
- var fileId = fileInfoModel.id;
- var downloadLink = OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/downloadas?fileId={fileId}&toExtension={toExtension}",{
- fileId: fileId,
- toExtension: format
- });
-
- location.href = downloadLink;
- $(this).ocdialog("close")
- }
- }]
- });
- });
- }
+ selectNode.append(optionNode);
+ });
- OCA.Onlyoffice.OpenFormPicker = function (name, fileList) {
- var filterMimes = [
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
- ];
+ $("body").append(dialog);
- OC.dialogs.filepicker(t(OCA.Onlyoffice.AppName, "Create new PDF form"),
- function (filePath) {
- OCA.Onlyoffice.CreateFile(name, fileList, 0, filePath);
+ $("#download-picker").ocdialog({
+ closeOnEscape: true,
+ modal: true,
+ buttons: [
+ {
+ text: t("core", "Cancel"),
+ classes: "cancel",
+ click() {
+ $(this).ocdialog("close");
+ },
},
- false,
- filterMimes,
- true);
+ {
+ text: t("onlyoffice", "Download"),
+ classes: "primary",
+ click() {
+ const format = this.dataset.format;
+ const fileId = fileInfoModel.id;
+ const downloadLink = OC.generateUrl(
+ "apps/" +
+ OCA.Onlyoffice.AppName +
+ "/downloadas?fileId={fileId}&toExtension={toExtension}",
+ {
+ fileId,
+ toExtension: format,
+ }
+ );
+
+ location.href = downloadLink;
+ $(this).ocdialog("close");
+ },
+ },
+ ],
+ });
+ }
+ );
+ };
+
+ OCA.Onlyoffice.OpenFormPicker = function (name, fileList) {
+ const filterMimes = [
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ ];
+
+ OC.dialogs.filepicker(
+ t(OCA.Onlyoffice.AppName, "Create new PDF form"),
+ function (filePath) {
+ OCA.Onlyoffice.CreateFile(name, fileList, 0, filePath);
+ },
+ false,
+ filterMimes,
+ true
+ );
+ };
+
+ OCA.Onlyoffice.CreateFormClick = function (fileName, context) {
+ const fileList = context.fileList;
+ const name = fileName.replace(/\.[^.]+$/, ".pdf");
+
+ const attr = context.fileInfoModel.attributes;
+ const targetPath = attr.path + "/" + attr.name;
+
+ OCA.Onlyoffice.CreateFile(name, fileList, 0, targetPath, false);
+ };
+
+ OCA.Onlyoffice.GetSettings = function (callbackSettings) {
+ if (OCA.Onlyoffice.setting.formats) {
+ callbackSettings();
+ } else {
+ $.get(
+ OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/settings"),
+ function onSuccess(settings) {
+ OCA.Onlyoffice.setting = settings;
+
+ callbackSettings();
+ }
+ );
}
+ };
- OCA.Onlyoffice.CreateFormClick = function (fileName, context) {
- var fileList = context.fileList;
- var name = fileName.replace(/\.[^.]+$/, ".pdf");
-
- var attr = context.fileInfoModel.attributes;
- var targetPath = attr.path + "/" + attr.name;
-
- OCA.Onlyoffice.CreateFile(name, fileList, 0, targetPath, false);
- };
-
- OCA.Onlyoffice.GetSettings = function (callbackSettings) {
- if (OCA.Onlyoffice.setting.formats) {
-
- callbackSettings();
-
- } else {
-
- $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/settings"),
- function onSuccess(settings) {
- OCA.Onlyoffice.setting = settings;
-
- callbackSettings();
- }
- );
-
- }
- };
+ OCA.Onlyoffice.registerAction = function () {
+ const register = function () {
+ const formats = OCA.Onlyoffice.setting.formats;
- OCA.Onlyoffice.registerAction = function () {
- var register = function () {
- var formats = OCA.Onlyoffice.setting.formats;
-
- $.each(formats, function (ext, config) {
- if (!config.mime) {
- return true;
- }
-
- let mimeTypes = config.mime;
- mimeTypes.forEach((mime) => {
- OCA.Files.fileActions.registerAction({
- name: "onlyofficeOpen",
- displayName: t(OCA.Onlyoffice.AppName, "Open in ONLYOFFICE"),
- mime: mime,
- permissions: OC.PERMISSION_READ,
- iconClass: "icon-onlyoffice-open",
- actionHandler: OCA.Onlyoffice.FileClick
- });
-
- if (config.def) {
- OCA.Files.fileActions.setDefault(mime, "onlyofficeOpen");
- }
-
- if (config.conv) {
- OCA.Files.fileActions.registerAction({
- name: "onlyofficeConvert",
- displayName: t(OCA.Onlyoffice.AppName, "Convert with ONLYOFFICE"),
- mime: mime,
- permissions: ($("#isPublic").val() ? OC.PERMISSION_UPDATE : OC.PERMISSION_READ),
- iconClass: "icon-onlyoffice-convert",
- actionHandler: OCA.Onlyoffice.FileConvertClick
- });
- }
-
- if (config.createForm) {
- OCA.Files.fileActions.registerAction({
- name: "onlyofficeCreateForm",
- displayName: t(OCA.Onlyoffice.AppName, "Create form"),
- mime: mime,
- permissions: ($("#isPublic").val() ? OC.PERMISSION_UPDATE : OC.PERMISSION_READ),
- iconClass: "icon-onlyoffice-create",
- actionHandler: OCA.Onlyoffice.CreateFormClick
- });
- }
-
- if (config.saveas && !$("#isPublic").val()) {
- OCA.Files.fileActions.registerAction({
- name: "onlyofficeDownload",
- displayName: t(OCA.Onlyoffice.AppName, "Download as"),
- mime: mime,
- permissions: OC.PERMISSION_READ,
- iconClass: "icon-onlyoffice-download",
- actionHandler: OCA.Onlyoffice.DownloadClick
- });
- }
- });
- });
+ $.each(formats, function (ext, config) {
+ if (!config.mime) {
+ return true;
}
- OCA.Onlyoffice.GetSettings(register);
- };
-
- OCA.Onlyoffice.NewFileMenu = {
- attach: function (menu) {
- var fileList = menu.fileList;
-
- if (fileList.id !== "files" && fileList.id !== "files.public") {
- return;
- }
-
- menu.addMenuEntry({
- id: "onlyofficeDocx",
- displayName: t(OCA.Onlyoffice.AppName, "Document"),
- templateName: t(OCA.Onlyoffice.AppName, "Document"),
- iconClass: "icon-onlyoffice-new-docx",
- fileType: "docx",
- actionHandler: function (name) {
- if (!$("#isPublic").val() && OCA.Onlyoffice.TemplateExist("document")) {
- OCA.Onlyoffice.OpenTemplatePicker(name, ".docx", "document");
- } else {
- OCA.Onlyoffice.CreateFile(name + ".docx", fileList);
- }
- }
+ const mimeTypes = config.mime;
+ mimeTypes.forEach((mime) => {
+ OCA.Files.fileActions.registerAction({
+ name: "onlyofficeOpen",
+ displayName: t(OCA.Onlyoffice.AppName, "Open in ONLYOFFICE"),
+ mime,
+ permissions: OC.PERMISSION_READ,
+ iconClass: "icon-onlyoffice-open",
+ actionHandler: OCA.Onlyoffice.FileClick,
+ });
+
+ if (config.def) {
+ OCA.Files.fileActions.setDefault(mime, "onlyofficeOpen");
+ }
+
+ if (config.conv) {
+ OCA.Files.fileActions.registerAction({
+ name: "onlyofficeConvert",
+ displayName: t(OCA.Onlyoffice.AppName, "Convert with ONLYOFFICE"),
+ mime,
+ permissions: $("#isPublic").val()
+ ? OC.PERMISSION_UPDATE
+ : OC.PERMISSION_READ,
+ iconClass: "icon-onlyoffice-convert",
+ actionHandler: OCA.Onlyoffice.FileConvertClick,
});
-
- menu.addMenuEntry({
- id: "onlyofficeXlsx",
- displayName: t(OCA.Onlyoffice.AppName, "Spreadsheet"),
- templateName: t(OCA.Onlyoffice.AppName, "Spreadsheet"),
- iconClass: "icon-onlyoffice-new-xlsx",
- fileType: "xlsx",
- actionHandler: function (name) {
- if (!$("#isPublic").val() && OCA.Onlyoffice.TemplateExist("spreadsheet")) {
- OCA.Onlyoffice.OpenTemplatePicker(name, ".xlsx", "spreadsheet");
- } else {
- OCA.Onlyoffice.CreateFile(name + ".xlsx", fileList);
- }
- }
+ }
+
+ if (config.createForm) {
+ OCA.Files.fileActions.registerAction({
+ name: "onlyofficeCreateForm",
+ displayName: t(OCA.Onlyoffice.AppName, "Create form"),
+ mime,
+ permissions: $("#isPublic").val()
+ ? OC.PERMISSION_UPDATE
+ : OC.PERMISSION_READ,
+ iconClass: "icon-onlyoffice-create",
+ actionHandler: OCA.Onlyoffice.CreateFormClick,
});
-
- menu.addMenuEntry({
- id: "onlyofficePpts",
- displayName: t(OCA.Onlyoffice.AppName, "Presentation"),
- templateName: t(OCA.Onlyoffice.AppName, "Presentation"),
- iconClass: "icon-onlyoffice-new-pptx",
- fileType: "pptx",
- actionHandler: function (name) {
- if (!$("#isPublic").val() && OCA.Onlyoffice.TemplateExist("presentation")) {
- OCA.Onlyoffice.OpenTemplatePicker(name, ".pptx", "presentation");
- } else {
- OCA.Onlyoffice.CreateFile(name + ".pptx", fileList);
- }
- }
+ }
+
+ if (config.saveas && !$("#isPublic").val()) {
+ OCA.Files.fileActions.registerAction({
+ name: "onlyofficeDownload",
+ displayName: t(OCA.Onlyoffice.AppName, "Download as"),
+ mime,
+ permissions: OC.PERMISSION_READ,
+ iconClass: "icon-onlyoffice-download",
+ actionHandler: OCA.Onlyoffice.DownloadClick,
});
-
- menu.addMenuEntry({
- id: "onlyofficePdf",
- displayName: t(OCA.Onlyoffice.AppName, "PDF form"),
- templateName: t(OCA.Onlyoffice.AppName, "PDF form"),
- iconClass: "icon-onlyoffice-new-pdf",
- fileType: "pdf",
- actionHandler: function (name) {
- OCA.Onlyoffice.CreateFile(name + ".pdf", fileList);
- }
- });
-
- if (!$("#isPublic").val()) {
- menu.addMenuEntry({
- id: "onlyofficePdfExist",
- displayName: t(OCA.Onlyoffice.AppName, "PDF form from existing text file"),
- templateName: t(OCA.Onlyoffice.AppName, "PDF form from existing text file"),
- iconClass: "icon-onlyoffice-new-pdf",
- fileType: "pdf",
- actionHandler: function (name) {
- OCA.Onlyoffice.OpenFormPicker(name + ".pdf", fileList);
- }
- });
- }
- }
- };
-
- OCA.Onlyoffice.GetFileExtension = function (fileName) {
- var extension = fileName.substr(fileName.lastIndexOf(".") + 1).toLowerCase();
- return extension;
- };
-
- OCA.Onlyoffice.openVersion = function (fileId, version) {
- if ($("body").hasClass("onlyoffice-inline")) {
- $("#onlyofficeFrame")[0].contentWindow.OCA.Onlyoffice.onRequestHistory(version);
- return;
- }
-
- OCA.Onlyoffice.OpenEditor(fileId, "", "", version)
- };
-
- OCA.Onlyoffice.bindVersionClick = function () {
- OCA.Onlyoffice.unbindVersionClick();
- $(document).on("click.onlyoffice-version", "#versionsTabView .downloadVersion", function() {
- var ext = OCA.Onlyoffice.GetFileExtension($("#app-sidebar .fileName h3").text());
- if (!OCA.Onlyoffice.setting.formats[ext]
- || !OCA.Onlyoffice.setting.formats[ext].def) {
- return true;
- }
-
- var versionNodes = $("#versionsTabView ul.versions>li");
- var versionNode = $(this).closest("#versionsTabView ul.versions>li")[0];
-
- var href = $(this).attr("href");
- var search = new RegExp("\/meta\/(\\d+)\/v\/\\d+");
- var result = search.exec(href);
- if (result && result.length > 1) {
- var fileId = result[1];
- }
-
- var versionNum = versionNodes.length - $.inArray(versionNode, versionNodes);
-
- OCA.Onlyoffice.openVersion(fileId || "", versionNum);
-
- return false;
+ }
});
+ });
};
- OCA.Onlyoffice.unbindVersionClick = function() {
- $(document).off("click.onlyoffice-version", "#versionsTabView .downloadVersion");
+ OCA.Onlyoffice.GetSettings(register);
+ };
+
+ OCA.Onlyoffice.NewFileMenu = {
+ attach(menu) {
+ const fileList = menu.fileList;
+
+ if (fileList.id !== "files" && fileList.id !== "files.public") {
+ return;
+ }
+
+ menu.addMenuEntry({
+ id: "onlyofficeDocx",
+ displayName: t(OCA.Onlyoffice.AppName, "Document"),
+ templateName: t(OCA.Onlyoffice.AppName, "Document"),
+ iconClass: "icon-onlyoffice-new-docx",
+ fileType: "docx",
+ actionHandler(name) {
+ if (
+ !$("#isPublic").val() &&
+ OCA.Onlyoffice.TemplateExist("document")
+ ) {
+ OCA.Onlyoffice.OpenTemplatePicker(name, ".docx", "document");
+ } else {
+ OCA.Onlyoffice.CreateFile(name + ".docx", fileList);
+ }
+ },
+ });
+
+ menu.addMenuEntry({
+ id: "onlyofficeXlsx",
+ displayName: t(OCA.Onlyoffice.AppName, "Spreadsheet"),
+ templateName: t(OCA.Onlyoffice.AppName, "Spreadsheet"),
+ iconClass: "icon-onlyoffice-new-xlsx",
+ fileType: "xlsx",
+ actionHandler(name) {
+ if (
+ !$("#isPublic").val() &&
+ OCA.Onlyoffice.TemplateExist("spreadsheet")
+ ) {
+ OCA.Onlyoffice.OpenTemplatePicker(name, ".xlsx", "spreadsheet");
+ } else {
+ OCA.Onlyoffice.CreateFile(name + ".xlsx", fileList);
+ }
+ },
+ });
+
+ menu.addMenuEntry({
+ id: "onlyofficePpts",
+ displayName: t(OCA.Onlyoffice.AppName, "Presentation"),
+ templateName: t(OCA.Onlyoffice.AppName, "Presentation"),
+ iconClass: "icon-onlyoffice-new-pptx",
+ fileType: "pptx",
+ actionHandler(name) {
+ if (
+ !$("#isPublic").val() &&
+ OCA.Onlyoffice.TemplateExist("presentation")
+ ) {
+ OCA.Onlyoffice.OpenTemplatePicker(name, ".pptx", "presentation");
+ } else {
+ OCA.Onlyoffice.CreateFile(name + ".pptx", fileList);
+ }
+ },
+ });
+
+ menu.addMenuEntry({
+ id: "onlyofficePdf",
+ displayName: t(OCA.Onlyoffice.AppName, "PDF form"),
+ templateName: t(OCA.Onlyoffice.AppName, "PDF form"),
+ iconClass: "icon-onlyoffice-new-pdf",
+ fileType: "pdf",
+ actionHandler(name) {
+ OCA.Onlyoffice.CreateFile(name + ".pdf", fileList);
+ },
+ });
+
+ if (!$("#isPublic").val()) {
+ menu.addMenuEntry({
+ id: "onlyofficePdfExist",
+ displayName: t(
+ OCA.Onlyoffice.AppName,
+ "PDF form from existing text file"
+ ),
+ templateName: t(
+ OCA.Onlyoffice.AppName,
+ "PDF form from existing text file"
+ ),
+ iconClass: "icon-onlyoffice-new-pdf",
+ fileType: "pdf",
+ actionHandler(name) {
+ OCA.Onlyoffice.OpenFormPicker(name + ".pdf", fileList);
+ },
+ });
+ }
+ },
+ };
+
+ OCA.Onlyoffice.GetFileExtension = function (fileName) {
+ const extension = fileName
+ .substr(fileName.lastIndexOf(".") + 1)
+ .toLowerCase();
+ return extension;
+ };
+
+ OCA.Onlyoffice.openVersion = function (fileId, version) {
+ if ($("body").hasClass("onlyoffice-inline")) {
+ $("#onlyoffice-frame")[0].contentWindow.OCA.Onlyoffice.onRequestHistory(
+ version
+ );
+ return;
}
- var initPage = function () {
- if ($("#isPublic").val() === "1" && $("#mimetype").val() !== "httpd/unix-directory") {
- var fileName = $("#filename").val();
- var extension = OCA.Onlyoffice.GetFileExtension(fileName);
-
- var initSharedButton = function () {
- var formats = OCA.Onlyoffice.setting.formats;
-
- var config = formats[extension];
- if (!config) {
- return;
- }
-
- var editorUrl = OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/s/" + encodeURIComponent($("#sharingToken").val()));
-
- if (oc_appswebroots.richdocuments
- || oc_appswebroots.files_pdfviewer && extension === "pdf"
- || oc_appswebroots.files_texteditor && extension === "txt") {
+ OCA.Onlyoffice.OpenEditor(fileId, "", "", version);
+ };
+
+ OCA.Onlyoffice.bindVersionClick = function () {
+ OCA.Onlyoffice.unbindVersionClick();
+ $(document).on(
+ "click.onlyoffice-version",
+ "#versionsTabView .downloadVersion",
+ function () {
+ const ext = OCA.Onlyoffice.GetFileExtension(
+ $("#app-sidebar .fileName h3").text()
+ );
+ if (
+ !OCA.Onlyoffice.setting.formats[ext] ||
+ !OCA.Onlyoffice.setting.formats[ext].def
+ ) {
+ return true;
+ }
- var button = document.createElement("a");
- button.href = editorUrl;
- button.className = "onlyoffice-public-open button";
- button.innerText = t(OCA.Onlyoffice.AppName, "Open in ONLYOFFICE")
+ const versionNodes = $("#versionsTabView ul.versions>li");
+ const versionNode = $(this).closest(
+ "#versionsTabView ul.versions>li"
+ )[0];
+
+ const href = $(this).attr("href");
+ const search = new RegExp("/meta/(\\d+)/v/\\d+");
+ const result = search.exec(href);
+ let fileId = null;
+ if (result && result.length > 1) {
+ fileId = result[1];
+ }
- if (!OCA.Onlyoffice.setting.sameTab) {
- button.target = "_blank";
- }
+ const versionNum =
+ versionNodes.length - $.inArray(versionNode, versionNodes);
+
+ OCA.Onlyoffice.openVersion(fileId || "", versionNum);
+
+ return false;
+ }
+ );
+ };
+
+ OCA.Onlyoffice.unbindVersionClick = function () {
+ $(document).off(
+ "click.onlyoffice-version",
+ "#versionsTabView .downloadVersion"
+ );
+ };
+
+ const initPage = function () {
+ if (
+ $("#isPublic").val() === "1" &&
+ $("#mimetype").val() !== "httpd/unix-directory"
+ ) {
+ const fileName = $("#filename").val();
+ const extension = OCA.Onlyoffice.GetFileExtension(fileName);
+
+ const initSharedButton = function () {
+ const formats = OCA.Onlyoffice.setting.formats;
+
+ const config = formats[extension];
+ if (!config) {
+ return;
+ }
- $("#preview").prepend(button);
- } else {
- var $iframe = $("");
- $("#preview").append($iframe);
- }
- };
+ const editorUrl = OC.generateUrl(
+ "apps/" +
+ OCA.Onlyoffice.AppName +
+ "/s/" +
+ encodeURIComponent($("#sharingToken").val())
+ );
- OCA.Onlyoffice.GetSettings(initSharedButton);
+ if (
+ oc_appswebroots.richdocuments ||
+ (oc_appswebroots.files_pdfviewer && extension === "pdf") ||
+ (oc_appswebroots.files_texteditor && extension === "txt")
+ ) {
+ const button = document.createElement("a");
+ button.href = editorUrl;
+ button.className = "onlyoffice-public-open button";
+ button.innerText = t(OCA.Onlyoffice.AppName, "Open in ONLYOFFICE");
+
+ if (!OCA.Onlyoffice.setting.sameTab) {
+ button.target = "_blank";
+ }
+
+ $("#preview").prepend(button);
} else {
- OC.Plugins.register("OCA.Files.NewFileMenu", OCA.Onlyoffice.NewFileMenu);
+ const $iframe = $(
+ ''
+ );
+ $("#preview").append($iframe);
+ }
+ };
- OCA.Onlyoffice.registerAction();
+ OCA.Onlyoffice.GetSettings(initSharedButton);
+ } else {
+ OC.Plugins.register("OCA.Files.NewFileMenu", OCA.Onlyoffice.NewFileMenu);
- OCA.Onlyoffice.bindVersionClick();
+ OCA.Onlyoffice.registerAction();
- if (OCA.Onlyoffice.Share) {
- OCA.Onlyoffice.Share();
- }
- }
- };
+ OCA.Onlyoffice.bindVersionClick();
- $(document).ready(initPage);
+ if (OCA.Onlyoffice.Share) {
+ OCA.Onlyoffice.Share();
+ }
+ }
+ };
+ $(document).ready(initPage);
})(OCA);
diff --git a/js/settings.js b/js/settings.js
index 3f7b575f..f47561fe 100644
--- a/js/settings.js
+++ b/js/settings.js
@@ -17,290 +17,358 @@
*/
(function ($, OC) {
+ $(document).ready(function () {
+ OCA.Onlyoffice = _.extend(
+ {
+ AppName: "onlyoffice",
+ },
+ OCA.Onlyoffice
+ );
+
+ const advToogle = function () {
+ $("#onlyofficeSecretPanel").toggleClass("onlyoffice-hide");
+ $("#onlyoffice-adv .icon").toggleClass("icon-triangle-s icon-triangle-n");
+ };
+
+ if (
+ $("#onlyofficeInternalUrl").val().length ||
+ $("#onlyofficeStorageUrl").val().length ||
+ $("#onlyofficeJwtHeader").val().length
+ ) {
+ advToogle();
+ }
+
+ $("#onlyoffice-adv").click(function () {
+ advToogle();
+ });
- $(document).ready(function () {
- OCA.Onlyoffice = _.extend({
- AppName: "onlyoffice"
- }, OCA.Onlyoffice)
-
- var advToogle = function () {
- $("#onlyofficeSecretPanel").toggleClass("onlyoffice-hide");
- $("#onlyofficeAdv .icon").toggleClass("icon-triangle-s icon-triangle-n");
- };
-
- if ($("#onlyofficeInternalUrl").val().length
- || $("#onlyofficeStorageUrl").val().length
- || $("#onlyofficeJwtHeader").val().length) {
- advToogle();
- }
-
- $("#onlyofficeAdv").click(function () {
- advToogle();
- });
-
- $("#onlyofficeGroups").prop("checked", $("#onlyofficeLimitGroups").val() != "");
-
- var groupListToggle = function () {
- if ($("#onlyofficeGroups").prop("checked")) {
- OC.Settings.setupGroupsSelect($("#onlyofficeLimitGroups"));
- } else {
- $("#onlyofficeLimitGroups").select2("destroy");
- }
- };
-
- $("#onlyofficeGroups").click(groupListToggle);
- groupListToggle();
-
- var demoToggle = function () {
- $("#onlyofficeAddrSettings input:not(#onlyofficeStorageUrl)").prop("disabled", $("#onlyofficeDemo").prop("checked"));
- };
-
- $("#onlyofficeDemo").click(demoToggle);
- demoToggle();
-
-
- $("#onlyofficeAddrSave").click(function () {
- $(".section-onlyoffice").addClass("icon-loading");
- var onlyofficeUrl = $("#onlyofficeUrl").val().trim();
-
- if (!onlyofficeUrl.length) {
- $("#onlyofficeInternalUrl, #onlyofficeStorageUrl, #onlyofficeSecret, #onlyofficeJwtHeader").val("");
- }
-
- var onlyofficeInternalUrl = ($("#onlyofficeInternalUrl:visible").val() || "").trim();
- var onlyofficeStorageUrl = ($("#onlyofficeStorageUrl:visible").val() || "").trim();
- var onlyofficeVerifyPeerOff = $("#onlyofficeVerifyPeerOff").prop("checked");
- var onlyofficeSecret = ($("#onlyofficeSecret:visible").val() || "").trim();
- var jwtHeader = ($("#onlyofficeJwtHeader:visible").val() || "").trim();
- var demo = $("#onlyofficeDemo").prop("checked");
-
- $.ajax({
- method: "PUT",
- url: OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/settings/address"),
- data: {
- documentserver: onlyofficeUrl,
- documentserverInternal: onlyofficeInternalUrl,
- storageUrl: onlyofficeStorageUrl,
- verifyPeerOff: onlyofficeVerifyPeerOff,
- secret: onlyofficeSecret,
- jwtHeader: jwtHeader,
- demo: demo
- },
- success: function onSuccess(response) {
- $(".section-onlyoffice").removeClass("icon-loading");
- if (response && (response.documentserver != null || demo)) {
- $("#onlyofficeUrl").val(response.documentserver);
- $("#onlyofficeInternalUrl").val(response.documentserverInternal);
- $("#onlyofficeStorageUrl").val(response.storageUrl);
- $("#onlyofficeSecret").val(response.secret);
- $("#onlyofficeJwtHeader").val(response.jwtHeader);
-
- $(".section-onlyoffice-2").toggleClass("onlyoffice-hide", (response.documentserver == null && !demo) || !!response.error.length);
-
- var message =
- response.error
- ? (t(OCA.Onlyoffice.AppName, "Error when trying to connect") + " (" + response.error + ")")
- : t(OCA.Onlyoffice.AppName, "Settings have been successfully updated");
-
- var versionMessage = response.version ? (" (" + t(OCA.Onlyoffice.AppName, "version") + " " + response.version + ")") : "";
-
- OC.Notification.show(message + versionMessage, {
- type: response.error ? "error" : null,
- timeout: 3
- });
- } else {
- $(".section-onlyoffice-2").addClass("onlyoffice-hide")
- }
- }
- });
- });
-
- $("#onlyofficeSave").click(function () {
- $(".section-onlyoffice").addClass("icon-loading");
-
- var defFormats = {};
- $("input[id^=\"onlyofficeDefFormat\"]").each(function () {
- defFormats[this.name] = this.checked;
- });
-
- var editFormats = {};
- $("input[id^=\"onlyofficeEditFormat\"]").each(function () {
- editFormats[this.name] = this.checked;
+ $("#onlyofficeGroups").prop(
+ "checked",
+ $("#onlyofficeLimitGroups").val() !== ""
+ );
+
+ const groupListToggle = function () {
+ if ($("#onlyofficeGroups").prop("checked")) {
+ OC.Settings.setupGroupsSelect($("#onlyofficeLimitGroups"));
+ } else {
+ $("#onlyofficeLimitGroups").select2("destroy");
+ }
+ };
+
+ $("#onlyofficeGroups").click(groupListToggle);
+ groupListToggle();
+
+ const demoToggle = function () {
+ $("#onlyofficeAddrSettings input:not(#onlyofficeStorageUrl)").prop(
+ "disabled",
+ $("#onlyofficeDemo").prop("checked")
+ );
+ };
+
+ $("#onlyofficeDemo").click(demoToggle);
+ demoToggle();
+
+ $("#onlyoffice-addr-save").click(function () {
+ $(".section-onlyoffice").addClass("icon-loading");
+ const onlyofficeUrl = $("#onlyofficeUrl").val().trim();
+
+ if (!onlyofficeUrl.length) {
+ $(
+ "#onlyofficeInternalUrl, #onlyofficeStorageUrl, #onlyofficeSecret, #onlyofficeJwtHeader"
+ ).val("");
+ }
+
+ const onlyofficeInternalUrl = (
+ $("#onlyofficeInternalUrl:visible").val() || ""
+ ).trim();
+ const onlyofficeStorageUrl = (
+ $("#onlyofficeStorageUrl:visible").val() || ""
+ ).trim();
+ const onlyofficeVerifyPeerOff = $("#onlyofficeVerifyPeerOff").prop(
+ "checked"
+ );
+ const onlyofficeSecret = (
+ $("#onlyofficeSecret:visible").val() || ""
+ ).trim();
+ const jwtHeader = ($("#onlyofficeJwtHeader:visible").val() || "").trim();
+ const demo = $("#onlyofficeDemo").prop("checked");
+
+ $.ajax({
+ method: "PUT",
+ url: OC.generateUrl(
+ "apps/" + OCA.Onlyoffice.AppName + "/ajax/settings/address"
+ ),
+ data: {
+ documentserver: onlyofficeUrl,
+ documentserverInternal: onlyofficeInternalUrl,
+ storageUrl: onlyofficeStorageUrl,
+ verifyPeerOff: onlyofficeVerifyPeerOff,
+ secret: onlyofficeSecret,
+ jwtHeader,
+ demo,
+ },
+ success: function onSuccess(response) {
+ $(".section-onlyoffice").removeClass("icon-loading");
+ if (response && (response.documentserver != null || demo)) {
+ $("#onlyofficeUrl").val(response.documentserver);
+ $("#onlyofficeInternalUrl").val(response.documentserverInternal);
+ $("#onlyofficeStorageUrl").val(response.storageUrl);
+ $("#onlyofficeSecret").val(response.secret);
+ $("#onlyofficeJwtHeader").val(response.jwtHeader);
+
+ $(".section-onlyoffice-2").toggleClass(
+ "onlyoffice-hide",
+ (response.documentserver == null && !demo) ||
+ !!response.error.length
+ );
+
+ const message = response.error
+ ? t(OCA.Onlyoffice.AppName, "Error when trying to connect") +
+ " (" +
+ response.error +
+ ")"
+ : t(
+ OCA.Onlyoffice.AppName,
+ "Settings have been successfully updated"
+ );
+
+ const versionMessage = response.version
+ ? " (" +
+ t(OCA.Onlyoffice.AppName, "version") +
+ " " +
+ response.version +
+ ")"
+ : "";
+
+ OC.Notification.show(message + versionMessage, {
+ type: response.error ? "error" : null,
+ timeout: 3,
});
+ } else {
+ $(".section-onlyoffice-2").addClass("onlyoffice-hide");
+ }
+ },
+ });
+ });
- var sameTab = $("#onlyofficeSameTab").is(":checked");
- var preview = $("#onlyofficePreview").is(":checked");
- var cronChecker = $("#onlyofficeCronChecker").is(":checked");
- var versionHistory = $("#onlyofficeVersionHistory").is(":checked");
-
- var limitGroupsString = $("#onlyofficeGroups").prop("checked") ? $("#onlyofficeLimitGroups").val() : "";
- var limitGroups = limitGroupsString ? limitGroupsString.split("|") : [];
-
- var chat = $("#onlyofficeChat").is(":checked");
- var compactHeader = $("#onlyofficeCompactHeader").is(":checked");
- var feedback = $("#onlyofficeFeedback").is(":checked");
- var forcesave = $("#onlyofficeForcesave").is(":checked");
- var help = $("#onlyofficeHelp").is(":checked");
- var toolbarNoTabs = $("#onlyofficeToolbarNoTabs").is(":checked");
- var reviewDisplay = $("input[type='radio'][name='reviewDisplay']:checked").attr("id").replace("onlyofficeReviewDisplay_", "");
- var theme = $("input[type='radio'][name='theme']:checked").attr("id").replace("onlyofficeTheme_", "");
-
- $.ajax({
- method: "PUT",
- url: OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/settings/common"),
- data: {
- defFormats: defFormats,
- editFormats: editFormats,
- sameTab: sameTab,
- preview: preview,
- cronChecker: cronChecker,
- versionHistory: versionHistory,
- limitGroups: limitGroups,
- chat: chat,
- compactHeader: compactHeader,
- feedback: feedback,
- forcesave: forcesave,
- help: help,
- toolbarNoTabs: toolbarNoTabs,
- reviewDisplay: reviewDisplay,
- theme: theme
- },
- success: function onSuccess(response) {
- $(".section-onlyoffice").removeClass("icon-loading");
- if (response) {
- var message = t(OCA.Onlyoffice.AppName, "Settings have been successfully updated");
- OC.Notification.show(message, {
- timeout: 3
- });
- }
- }
+ $("#onlyoffice-save").click(function () {
+ $(".section-onlyoffice").addClass("icon-loading");
+
+ const defFormats = {};
+ $('input[id^="onlyofficeDefFormat"]').each(function () {
+ defFormats[this.name] = this.checked;
+ });
+
+ const editFormats = {};
+ $('input[id^="onlyofficeEditFormat"]').each(function () {
+ editFormats[this.name] = this.checked;
+ });
+
+ const sameTab = $("#onlyofficeSameTab").is(":checked");
+ const preview = $("#onlyofficePreview").is(":checked");
+ const cronChecker = $("#onlyofficeCronChecker").is(":checked");
+ const versionHistory = $("#onlyofficeVersionHistory").is(":checked");
+
+ const limitGroupsString = $("#onlyofficeGroups").prop("checked")
+ ? $("#onlyofficeLimitGroups").val()
+ : "";
+ const limitGroups = limitGroupsString ? limitGroupsString.split("|") : [];
+
+ const chat = $("#onlyofficeChat").is(":checked");
+ const compactHeader = $("#onlyofficeCompactHeader").is(":checked");
+ const feedback = $("#onlyofficeFeedback").is(":checked");
+ const forcesave = $("#onlyofficeForcesave").is(":checked");
+ const help = $("#onlyofficeHelp").is(":checked");
+ const toolbarNoTabs = $("#onlyofficeToolbarNoTabs").is(":checked");
+ const reviewDisplay = $(
+ "input[type='radio'][name='reviewDisplay']:checked"
+ )
+ .attr("id")
+ .replace("onlyofficeReviewDisplay_", "");
+ const theme = $("input[type='radio'][name='theme']:checked")
+ .attr("id")
+ .replace("onlyofficeTheme_", "");
+
+ $.ajax({
+ method: "PUT",
+ url: OC.generateUrl(
+ "apps/" + OCA.Onlyoffice.AppName + "/ajax/settings/common"
+ ),
+ data: {
+ defFormats,
+ editFormats,
+ sameTab,
+ preview,
+ cronChecker,
+ versionHistory,
+ limitGroups,
+ chat,
+ compactHeader,
+ feedback,
+ forcesave,
+ help,
+ toolbarNoTabs,
+ reviewDisplay,
+ theme,
+ },
+ success: function onSuccess(response) {
+ $(".section-onlyoffice").removeClass("icon-loading");
+ if (response) {
+ const message = t(
+ OCA.Onlyoffice.AppName,
+ "Settings have been successfully updated"
+ );
+ OC.Notification.show(message, {
+ timeout: 3,
});
- });
+ }
+ },
+ });
+ });
- $("#onlyofficeSecuritySave").click(function () {
- $(".section-onlyoffice").addClass("icon-loading");
-
- var plugins = $("#onlyofficePlugins").is(":checked");
- var macros = $("#onlyofficeMacros").is(":checked");
- var protection = $("input[type='radio'][name='protection']:checked").attr("id").replace("onlyofficeProtection_", "");
-
- $.ajax({
- method: "PUT",
- url: OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/settings/security"),
- data: {
- plugins: plugins,
- macros: macros,
- protection: protection
- },
- success: function onSuccess(response) {
- $(".section-onlyoffice").removeClass("icon-loading");
- if (response) {
- var message = t(OCA.Onlyoffice.AppName, "Settings have been successfully updated");
- OC.Notification.show(message, {
- timeout: 3
- });
- }
- }
+ $("#onlyofficeSecuritySave").click(function () {
+ $(".section-onlyoffice").addClass("icon-loading");
+
+ const plugins = $("#onlyofficePlugins").is(":checked");
+ const macros = $("#onlyofficeMacros").is(":checked");
+ const protection = $("input[type='radio'][name='protection']:checked")
+ .attr("id")
+ .replace("onlyofficeProtection_", "");
+
+ $.ajax({
+ method: "PUT",
+ url: OC.generateUrl(
+ "apps/" + OCA.Onlyoffice.AppName + "/ajax/settings/security"
+ ),
+ data: {
+ plugins,
+ macros,
+ protection,
+ },
+ success: function onSuccess(response) {
+ $(".section-onlyoffice").removeClass("icon-loading");
+ if (response) {
+ const message = t(
+ OCA.Onlyoffice.AppName,
+ "Settings have been successfully updated"
+ );
+ OC.Notification.show(message, {
+ timeout: 3,
});
- });
+ }
+ },
+ });
+ });
- $(".section-onlyoffice input").keypress(function (e) {
- var code = e.keyCode || e.which;
- if (code === 13) {
- $("#onlyofficeAddrSave").click();
- }
- });
+ $(".section-onlyoffice input").keypress(function (e) {
+ const code = e.keyCode || e.which;
+ if (code === 13) {
+ $("#onlyoffice-addr-save").click();
+ }
+ });
- $("#onlyofficeSecret-show").click(function () {
- if ($("#onlyofficeSecret").attr("type") == "password") {
- $("#onlyofficeSecret").attr("type", "text");
- } else {
- $("#onlyofficeSecret").attr("type", "password");
- }
- });
+ $("#onlyofficeSecret-show").click(function () {
+ if ($("#onlyofficeSecret").attr("type") === "password") {
+ $("#onlyofficeSecret").attr("type", "text");
+ } else {
+ $("#onlyofficeSecret").attr("type", "password");
+ }
+ });
- $("#onlyofficeClearVersionHistory").click(function () {
- $(".section-onlyoffice").addClass("icon-loading");
-
- $.ajax({
- method: "DELETE",
- url: OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/settings/history"),
- success: function onSuccess(response) {
- $(".section-onlyoffice").removeClass("icon-loading");
- if (response) {
- var message = t(OCA.Onlyoffice.AppName, "All history successfully deleted");
- OC.Notification.show(message, {
- timeout: 3
- });
- }
- }
+ $("#onlyofficeClearVersionHistory").click(function () {
+ $(".section-onlyoffice").addClass("icon-loading");
+
+ $.ajax({
+ method: "DELETE",
+ url: OC.generateUrl(
+ "apps/" + OCA.Onlyoffice.AppName + "/ajax/settings/history"
+ ),
+ success: function onSuccess(response) {
+ $(".section-onlyoffice").removeClass("icon-loading");
+ if (response) {
+ const message = t(
+ OCA.Onlyoffice.AppName,
+ "All history successfully deleted"
+ );
+ OC.Notification.show(message, {
+ timeout: 3,
});
- });
-
- $("#onlyofficeAddTemplate").change(function () {
- var file = this.files[0];
-
- $(".section-onlyoffice").addClass("icon-loading");
- OCA.Onlyoffice.AddTemplate(file, (template, error) => {
+ }
+ },
+ });
+ });
- $(".section-onlyoffice").removeClass("icon-loading");
- var message = error ? t(OCA.Onlyoffice.AppName, "Error") + ": " + error
- : t(OCA.Onlyoffice.AppName, "Template successfully added");
+ $("#onlyofficeAddTemplate").change(function () {
+ const file = this.files[0];
- OC.Notification.show(message, {
- type: error ? "error" : null,
- timeout: 3
- });
- if (template) {
- OCA.Onlyoffice.AttachItemTemplate(template);
- }
- });
- });
+ $(".section-onlyoffice").addClass("icon-loading");
+ OCA.Onlyoffice.AddTemplate(file, (template, error) => {
+ $(".section-onlyoffice").removeClass("icon-loading");
+ const message = error
+ ? t(OCA.Onlyoffice.AppName, "Error") + ": " + error
+ : t(OCA.Onlyoffice.AppName, "Template successfully added");
- $(document).on("click", ".onlyoffice-template-delete", function (event) {
- var item = $(event.target).parents(".onlyoffice-template-item");
- var templateId = $(item).attr("data-id");
-
- $(".section-onlyoffice").addClass("icon-loading");
- OCA.Onlyoffice.DeleteTemplate(templateId, (response) => {
- $(".section-onlyoffice").removeClass("icon-loading");
-
- var message = response.error ? t(OCA.Onlyoffice.AppName, "Error") + ": " + response.error
- : t(OCA.Onlyoffice.AppName, "Template successfully deleted");
- OC.Notification.show(message, {
- type: response.error ? "error" : null,
- timeout: 3
- });
- if (!response.error) {
- $(item).detach();
- }
- });
+ OC.Notification.show(message, {
+ type: error ? "error" : null,
+ timeout: 3,
});
+ if (template) {
+ OCA.Onlyoffice.AttachItemTemplate(template);
+ }
+ });
+ });
- $(document).on("click", ".onlyoffice-template-item p", function (event) {
- var item = $(event.target).parents(".onlyoffice-template-item");
- var templateId = $(item).attr("data-id");
+ $(document).on("click", ".onlyoffice-template-delete", function (event) {
+ const item = $(event.target).parents(".onlyoffice-template-item");
+ const templateId = $(item).attr("data-id");
- var url = OC.generateUrl("/apps/" + OCA.Onlyoffice.AppName + "/{fileId}?template={template}",
- {
- fileId: templateId,
- template: "true"
- });
+ $(".section-onlyoffice").addClass("icon-loading");
+ OCA.Onlyoffice.DeleteTemplate(templateId, (response) => {
+ $(".section-onlyoffice").removeClass("icon-loading");
- window.open(url);
+ const message = response.error
+ ? t(OCA.Onlyoffice.AppName, "Error") + ": " + response.error
+ : t(OCA.Onlyoffice.AppName, "Template successfully deleted");
+ OC.Notification.show(message, {
+ type: response.error ? "error" : null,
+ timeout: 3,
});
+ if (!response.error) {
+ $(item).detach();
+ }
+ });
+ });
- $(document).on("click", ".onlyoffice-template-download", function (event) {
- var item = $(event.target).parents(".onlyoffice-template-item");
- var templateId = $(item).attr("data-id");
+ $(document).on("click", ".onlyoffice-template-item p", function (event) {
+ const item = $(event.target).parents(".onlyoffice-template-item");
+ const templateId = $(item).attr("data-id");
- var downloadLink = OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/downloadas?fileId={fileId}&template={template}",{
- fileId: templateId,
- template: "true"
- });
+ const url = OC.generateUrl(
+ "/apps/" + OCA.Onlyoffice.AppName + "/{fileId}?template={template}",
+ {
+ fileId: templateId,
+ template: "true",
+ }
+ );
- location.href = downloadLink;
- });
+ window.open(url);
});
+ $(document).on("click", ".onlyoffice-template-download", function (event) {
+ const item = $(event.target).parents(".onlyoffice-template-item");
+ const templateId = $(item).attr("data-id");
+
+ const downloadLink = OC.generateUrl(
+ "apps/" +
+ OCA.Onlyoffice.AppName +
+ "/downloadas?fileId={fileId}&template={template}",
+ {
+ fileId: templateId,
+ template: "true",
+ }
+ );
+
+ location.href = downloadLink;
+ });
+ });
})(jQuery, OC);
diff --git a/js/share.js b/js/share.js
index 7ae75725..d44a0a63 100644
--- a/js/share.js
+++ b/js/share.js
@@ -17,612 +17,807 @@
*/
(function (OCA) {
+ OCA.Onlyoffice = _.extend(
+ {
+ AppName: "onlyoffice",
+ },
+ OCA.Onlyoffice
+ );
+
+ // api v2
+ OCA.Onlyoffice.ShareOptions = {
+ /**
+ * @type {OCA.Share.ShareItemModel}
+ */
+ model: null,
+
+ config: null,
+
+ _shareOptionsTemplate: null,
+
+ validateShareProperties(properties) {
+ if (this.model.hasReshare()) {
+ // it is enough to check the parent share attributes
+ // if these are set to avoid privilege escalation
+ const parentShareAttributes = this.model.getReshareAttributes();
+
+ const download = this._getAttribute(
+ parentShareAttributes,
+ "permissions",
+ "download"
+ );
+ const review = this._getAttribute(
+ parentShareAttributes,
+ OCA.Onlyoffice.AppName,
+ "review"
+ );
+ const fillForms = this._getAttribute(
+ parentShareAttributes,
+ OCA.Onlyoffice.AppName,
+ "fillForms"
+ );
+ const comment = this._getAttribute(
+ parentShareAttributes,
+ OCA.Onlyoffice.AppName,
+ "comment"
+ );
+ const modifyFilter = this._getAttribute(
+ parentShareAttributes,
+ OCA.Onlyoffice.AppName,
+ "modifyFilter"
+ );
+ if (
+ review !== null ||
+ fillForms !== null ||
+ comment !== null ||
+ modifyFilter !== null ||
+ (download !== null && download.enabled === false)
+ ) {
+ OC.dialogs.alert(
+ t(
+ OCA.Onlyoffice.AppName,
+ "This file is shared with you using " +
+ "permissions lower than the requested update. " +
+ "Please ask share owner to reshare the file with you " +
+ "using correct permissions."
+ ),
+ t(OCA.Onlyoffice.AppName, "Error while sharing")
+ );
+ return false;
+ }
+ }
+ return true;
+ },
+
+ /**
+ * Extend ShareItemModel.addShare with onlyoffice attributes
+ *
+ * @param properties
+ */
+ addShareProperties(properties) {
+ const extendedProperties = properties;
+
+ extendedProperties.attributes = properties.attributes || {};
+
+ // get default permissions
+ extendedProperties.permissions = this.model.getDefaultPermissions();
+
+ // disable resharing as it is not supported currently
+ extendedProperties.permissions = this._removePermission(
+ extendedProperties.permissions,
+ OC.PERMISSION_SHARE
+ );
+
+ // if edit permission got enabled set only modify filter,
+ // otherwise set review, fillForms, download, comment
+ if (
+ this._hasPermission(
+ extendedProperties.permissions,
+ OC.PERMISSION_UPDATE
+ ) ||
+ this._hasPermission(
+ extendedProperties.permissions,
+ OC.PERMISSION_CREATE
+ ) ||
+ this._hasPermission(
+ extendedProperties.permissions,
+ OC.PERMISSION_DELETE
+ )
+ ) {
+ extendedProperties.attributes = this._updateAttributes(
+ extendedProperties.attributes,
+ "permissions",
+ "download",
+ null
+ );
+ extendedProperties.attributes = this._updateAttributes(
+ extendedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "review",
+ null
+ );
+ extendedProperties.attributes = this._updateAttributes(
+ extendedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "fillForms",
+ null
+ );
+ extendedProperties.attributes = this._updateAttributes(
+ extendedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "comment",
+ null
+ );
+ if (this.config.modifyFilter) {
+ extendedProperties.attributes = this._updateAttributes(
+ extendedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "modifyFilter",
+ true
+ );
+ }
+ } else {
+ if (
+ this._getAttribute(
+ extendedProperties.attributes,
+ "permissions",
+ "download"
+ ) === null
+ ) {
+ extendedProperties.attributes = this._updateAttributes(
+ extendedProperties.attributes,
+ "permissions",
+ "download",
+ true
+ );
+ }
+ }
+
+ return extendedProperties;
+ },
+
+ /**
+ * Extend ShareItemModel.updateShare with onlyoffice attributes. This
+ * is triggered on click on call to updateShare from core or other app
+ *
+ * @param shareId
+ * @param properties
+ */
+ updateShareProperties(shareId, properties) {
+ if (
+ _.isUndefined(properties.permissions) &&
+ _.isUndefined(properties.attributes)
+ ) {
+ // no attribute or permission change, ignore
+ return properties;
+ }
+
+ const updatedProperties = properties;
+ updatedProperties.attributes = properties.attributes || {};
+
+ // if share permission got enabled unset all attributes
+ // as resharing is not compatible
+ if (this._hasPermission(properties.permissions, OC.PERMISSION_SHARE)) {
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ "permissions",
+ "download",
+ null
+ );
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "review",
+ null
+ );
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "fillForms",
+ null
+ );
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "comment",
+ null
+ );
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "modifyFilter",
+ null
+ );
+
+ return updatedProperties;
+ }
+
+ // if edit permission got enabled, enable only modifyFilter
+ if (
+ this._hasPermission(properties.permissions, OC.PERMISSION_UPDATE) ||
+ this._hasPermission(properties.permissions, OC.PERMISSION_CREATE) ||
+ this._hasPermission(properties.permissions, OC.PERMISSION_DELETE)
+ ) {
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ "permissions",
+ "download",
+ null
+ );
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "review",
+ null
+ );
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "fillForms",
+ null
+ );
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "comment",
+ null
+ );
+
+ if (this.config.modifyFilter) {
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "modifyFilter",
+ true
+ );
+ }
- OCA.Onlyoffice = _.extend({
- AppName: "onlyoffice"
- }, OCA.Onlyoffice);
-
- // api v2
- OCA.Onlyoffice.ShareOptions = {
-
- /**
- * @type {OCA.Share.ShareItemModel}
- */
- model: null,
-
- config: null,
-
- _shareOptionsTemplate: null,
-
- validateShareProperties: function (properties) {
- if (this.model.hasReshare()) {
- // it is enough to check the parent share attributes
- // if these are set to avoid privilege escalation
- var parentShareAttributes = this.model.getReshareAttributes();
-
- var download = this._getAttribute(parentShareAttributes, "permissions", "download");
- var review = this._getAttribute(parentShareAttributes, OCA.Onlyoffice.AppName, "review");
- var fillForms = this._getAttribute(parentShareAttributes, OCA.Onlyoffice.AppName, "fillForms");
- var comment = this._getAttribute(parentShareAttributes, OCA.Onlyoffice.AppName, "comment");
- var modifyFilter = this._getAttribute(parentShareAttributes, OCA.Onlyoffice.AppName, "modifyFilter");
- if (review !== null || fillForms !== null || comment !== null || modifyFilter !== null ||
- (download !== null && download.enabled === false)) {
- OC.dialogs.alert(
- t(OCA.Onlyoffice.AppName, 'This file is shared with you using ' +
- 'permissions lower than the requested update. ' +
- 'Please ask share owner to reshare the file with you ' +
- 'using correct permissions.'),
- t(OCA.Onlyoffice.AppName, 'Error while sharing')
- );
- return false;
- }
- }
- return true;
- },
-
- /**
- * Extend ShareItemModel.addShare with onlyoffice attributes
- *
- * @param properties
- */
- addShareProperties: function (properties) {
- var extendedProperties = properties;
-
- extendedProperties.attributes = properties.attributes || {};
-
- // get default permissions
- extendedProperties.permissions = this.model.getDefaultPermissions();
-
- // disable resharing as it is not supported currently
- extendedProperties.permissions = this._removePermission(
- extendedProperties.permissions, OC.PERMISSION_SHARE
- );
-
- // if edit permission got enabled set only modify filter,
- // otherwise set review, fillForms, download, comment
- if (this._hasPermission(extendedProperties.permissions, OC.PERMISSION_UPDATE)
- || this._hasPermission(extendedProperties.permissions, OC.PERMISSION_CREATE)
- || this._hasPermission(extendedProperties.permissions, OC.PERMISSION_DELETE)) {
- extendedProperties.attributes = this._updateAttributes(
- extendedProperties.attributes, "permissions", "download", null
- );
- extendedProperties.attributes = this._updateAttributes(
- extendedProperties.attributes, OCA.Onlyoffice.AppName, "review", null
- );
- extendedProperties.attributes = this._updateAttributes(
- extendedProperties.attributes, OCA.Onlyoffice.AppName, "fillForms", null
- );
- extendedProperties.attributes = this._updateAttributes(
- extendedProperties.attributes, OCA.Onlyoffice.AppName, "comment", null
- );
- if (this.config.modifyFilter) {
- extendedProperties.attributes = this._updateAttributes(
- extendedProperties.attributes, OCA.Onlyoffice.AppName, "modifyFilter", true
- );
- }
- } else {
- if (this._getAttribute(extendedProperties.attributes, "permissions", "download") === null) {
- extendedProperties.attributes = this._updateAttributes(
- extendedProperties.attributes, "permissions", "download", true
- );
- }
- }
-
- return extendedProperties;
+ return updatedProperties;
+ }
+
+ // default checkboxes on permission update
+ const canDownload = this._getAttribute(
+ properties.attributes,
+ "permissions",
+ "download"
+ );
+ if (canDownload === null) {
+ // if this attribute has not been set by other app, set to tru as default
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ "permissions",
+ "download",
+ true
+ );
+ }
+
+ if (
+ !this.model.hasReshare() ||
+ this._hasPermission(
+ this.model.attributes.permissions,
+ OC.PERMISSION_UPDATE
+ )
+ ) {
+ if (this.config.review) {
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "review",
+ false
+ );
+ }
+ if (this.config.fillForms) {
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "fillForms",
+ false
+ );
+ }
+ if (this.config.comment) {
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "comment",
+ false
+ );
+ }
+ }
+
+ updatedProperties.attributes = this._updateAttributes(
+ updatedProperties.attributes,
+ OCA.Onlyoffice.AppName,
+ "modifyFilter",
+ null
+ );
+
+ return updatedProperties;
+ },
+
+ /**
+ * Click on custom checkbox handler. Adjust required app/core attributes and
+ * permissions. This is triggered only on click on onlyoffice attribute
+ *
+ * @param event
+ */
+ onOnlyOfficeOptionChange(event) {
+ const that = this;
+ let share;
+ const $element = $(event.target);
+ const $li = $element.closest("li");
+ const shareId = $li.data("share-id");
+
+ const shares = this.model.getSharesWithCurrentItem();
+ for (let shareIndex = 0; shareIndex < shares.length; shareIndex++) {
+ if (shares[shareIndex].id === shareId) {
+ share = shares[shareIndex];
+ break;
+ }
+ }
+
+ if (!share) {
+ console.error("Share with id " + shareId + " not found");
+ return;
+ }
+
+ // parse current checkboxes
+ let attributes = share.attributes || {};
+ $("li[data-share-id='" + shareId + "'] .onlyOfficeShareOption").each(
+ function (index, checkbox) {
+ const shareOptionAttrScope = $(checkbox).data("attr-scope");
+ const shareOptionAttrKey = $(checkbox).data("attr-key");
+ const shareOptionChecked = $(checkbox).is(":checked");
+
+ attributes = that._updateAttributes(
+ attributes,
+ shareOptionAttrScope,
+ shareOptionAttrKey,
+ shareOptionChecked
+ );
+ }
+ );
+
+ const review = this._getAttribute(
+ attributes,
+ OCA.Onlyoffice.AppName,
+ "review"
+ );
+ const fillForms = this._getAttribute(
+ attributes,
+ OCA.Onlyoffice.AppName,
+ "fillForms"
+ );
+ const comment = this._getAttribute(
+ attributes,
+ OCA.Onlyoffice.AppName,
+ "comment"
+ );
+
+ // if review enabled, disable fillForms and comment
+ if (review && review.enabled === true) {
+ attributes = this._updateAttributes(
+ attributes,
+ OCA.Onlyoffice.AppName,
+ "fillForms",
+ null
+ );
+ attributes = this._updateAttributes(
+ attributes,
+ OCA.Onlyoffice.AppName,
+ "comment",
+ null
+ );
+ } else if (review && review.enabled === false) {
+ if (fillForms === null && this.config.fillForms) {
+ attributes = this._updateAttributes(
+ attributes,
+ OCA.Onlyoffice.AppName,
+ "fillForms",
+ false
+ );
+ }
+ if (comment === null && this.config.comment) {
+ attributes = this._updateAttributes(
+ attributes,
+ OCA.Onlyoffice.AppName,
+ "comment",
+ false
+ );
+ }
+ }
+
+ // if fillForms enabled, disable comment
+ if (fillForms && fillForms.enabled === true) {
+ attributes = this._updateAttributes(
+ attributes,
+ OCA.Onlyoffice.AppName,
+ "comment",
+ null
+ );
+ } else if (fillForms && fillForms.enabled === false) {
+ if (comment === null && this.config.comment) {
+ attributes = this._updateAttributes(
+ attributes,
+ OCA.Onlyoffice.AppName,
+ "comment",
+ false
+ );
+ }
+ }
+
+ // trigger updateShare which will call updateShare wrappers
+ this.model.updateShare(
+ shareId,
+ {
+ permissions: share.permissions,
+ attributes,
},
-
- /**
- * Extend ShareItemModel.updateShare with onlyoffice attributes. This
- * is triggered on click on call to updateShare from core or other app
- *
- * @param shareId
- * @param properties
- */
- updateShareProperties: function (shareId, properties) {
- if (_.isUndefined(properties.permissions) && _.isUndefined(properties.attributes)) {
- // no attribute or permission change, ignore
- return properties;
- }
-
- var updatedProperties = properties;
- updatedProperties.attributes = properties.attributes || {};
-
- // if share permission got enabled unset all attributes
- // as resharing is not compatible
- if (this._hasPermission(properties.permissions, OC.PERMISSION_SHARE)) {
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, "permissions", "download", null
- );
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, OCA.Onlyoffice.AppName, "review", null
- );
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, OCA.Onlyoffice.AppName, "fillForms", null
- );
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, OCA.Onlyoffice.AppName, "comment", null
- );
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, OCA.Onlyoffice.AppName, "modifyFilter", null
- );
-
- return updatedProperties;
- }
-
- // if edit permission got enabled, enable only modifyFilter
- if (this._hasPermission(properties.permissions, OC.PERMISSION_UPDATE)
- || this._hasPermission(properties.permissions, OC.PERMISSION_CREATE)
- || this._hasPermission(properties.permissions, OC.PERMISSION_DELETE)) {
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, "permissions", "download", null
- );
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, OCA.Onlyoffice.AppName, "review", null
- );
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, OCA.Onlyoffice.AppName, "fillForms", null
- );
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, OCA.Onlyoffice.AppName, "comment", null
- );
-
- if (this.config.modifyFilter) {
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, OCA.Onlyoffice.AppName, "modifyFilter", true
- );
- }
-
- return updatedProperties;
- }
-
- // default checkboxes on permission update
- var canDownload = this._getAttribute(properties.attributes, "permissions", "download");
- if (canDownload === null) {
- // if this attribute has not been set by other app, set to tru as default
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, "permissions", "download", true
- );
- }
-
- if (!this.model.hasReshare()
- || this._hasPermission(this.model.attributes.permissions, OC.PERMISSION_UPDATE))
- {
- if (this.config.review) {
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, OCA.Onlyoffice.AppName, "review", false
- );
- }
- if (this.config.fillForms) {
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, OCA.Onlyoffice.AppName, "fillForms", false
- );
- }
- if (this.config.comment) {
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, OCA.Onlyoffice.AppName, "comment", false
- );
- }
- }
-
- updatedProperties.attributes = this._updateAttributes(
- updatedProperties.attributes, OCA.Onlyoffice.AppName, "modifyFilter", null
+ {
+ onlyofficeUpdatedShareProperties: true,
+ }
+ );
+ },
+
+ /**
+ * Based on attributes set for the share, render proper share options
+ *
+ * @param view
+ */
+ render(view) {
+ const shares = this.model.getSharesWithCurrentItem();
+
+ for (let shareIndex = 0; shareIndex < shares.length; shareIndex++) {
+ const share = shares[shareIndex];
+
+ // get existing share element if already initialized
+ const $share = view.$el.find("li[data-share-id=" + share.id + "]");
+ if ($share) {
+ const shareOptionsData = [];
+ const attributes = [
+ { key: "download", scope: "permissions" },
+ { key: "review", scope: OCA.Onlyoffice.AppName },
+ { key: "fillForms", scope: OCA.Onlyoffice.AppName },
+ { key: "comment", scope: OCA.Onlyoffice.AppName },
+ { key: "modifyFilter", scope: OCA.Onlyoffice.AppName },
+ ];
+ for (
+ let attributeIndex = 0;
+ attributeIndex < attributes.length;
+ attributeIndex++
+ ) {
+ const attribute = this._getAttribute(
+ share.attributes,
+ attributes[attributeIndex].scope,
+ attributes[attributeIndex].key
);
- return updatedProperties;
- },
-
- /**
- * Click on custom checkbox handler. Adjust required app/core attributes and
- * permissions. This is triggered only on click on onlyoffice attribute
- *
- * @param event
- */
- onOnlyOfficeOptionChange: function (event) {
- var that = this;
- var share;
- var $element = $(event.target);
- var $li = $element.closest("li");
- var shareId = $li.data("share-id");
-
- var shares = this.model.getSharesWithCurrentItem();
- for (var shareIndex = 0; shareIndex < shares.length; shareIndex++) {
- if (shares[shareIndex].id === shareId) {
- share = shares[shareIndex];
- break;
- }
+ if (attribute === null || attribute.enabled === null) {
+ continue;
}
- if (!share) {
- console.error("Share with id " + shareId + " not found");
- return;
+ let label;
+ if (attribute.key === "download") {
+ label = t(OCA.Onlyoffice.AppName, "download");
+ } else if (attribute.key === "review") {
+ label = t(OCA.Onlyoffice.AppName, "review");
+ } else if (attribute.key === "fillForms") {
+ label = t(OCA.Onlyoffice.AppName, "form filling");
+ } else if (attribute.key === "comment") {
+ label = t(OCA.Onlyoffice.AppName, "comment");
+ } else if (attribute.key === "modifyFilter") {
+ label = t(OCA.Onlyoffice.AppName, "global filter");
+ } else {
+ continue;
}
- // parse current checkboxes
- var attributes = share.attributes || {};
- $("li[data-share-id='" + shareId + "'] .onlyOfficeShareOption").each(function (index, checkbox) {
- var shareOptionAttrScope = $(checkbox).data("attr-scope");
- var shareOptionAttrKey = $(checkbox).data("attr-key");
- var shareOptionChecked = $(checkbox).is(":checked");
-
- attributes = that._updateAttributes(
- attributes, shareOptionAttrScope, shareOptionAttrKey, shareOptionChecked
- );
+ shareOptionsData.push({
+ cid: view.cid,
+ shareId: share.id,
+ shareWith: share.share_with,
+ attrScope: attribute.scope,
+ attrKey: attribute.key,
+ name: OCA.Onlyoffice.AppName + "-" + attribute.key,
+ label,
+ checked: attribute.enabled,
});
+ }
- var review = this._getAttribute(attributes, OCA.Onlyoffice.AppName, "review");
- var fillForms = this._getAttribute(attributes, OCA.Onlyoffice.AppName, "fillForms");
- var comment = this._getAttribute(attributes, OCA.Onlyoffice.AppName, "comment");
-
- // if review enabled, disable fillForms and comment
- if (review && review.enabled === true) {
- attributes = this._updateAttributes(
- attributes, OCA.Onlyoffice.AppName, "fillForms", null
- );
- attributes = this._updateAttributes(
- attributes, OCA.Onlyoffice.AppName, "comment", null
- );
- } else if (review && review.enabled === false) {
- if (fillForms === null && this.config.fillForms) {
- attributes = this._updateAttributes(
- attributes, OCA.Onlyoffice.AppName, "fillForms", false
- );
- }
- if (comment === null && this.config.comment) {
- attributes = this._updateAttributes(
- attributes, OCA.Onlyoffice.AppName, "comment", false
- );
- }
- }
-
- // if fillForms enabled, disable comment
- if (fillForms && fillForms.enabled === true) {
- attributes = this._updateAttributes(
- attributes, OCA.Onlyoffice.AppName, "comment", null
- );
- } else if (fillForms && fillForms.enabled === false) {
- if (comment === null && this.config.comment) {
- attributes = this._updateAttributes(
- attributes, OCA.Onlyoffice.AppName, "comment", false
- );
- }
- }
-
- // trigger updateShare which will call updateShare wrappers
- this.model.updateShare(
- shareId,
- {
- permissions: share.permissions,
- attributes: attributes
- },
- {
- onlyofficeUpdatedShareProperties: true
- }
+ $share.append(
+ this._template({
+ shareOptions: shareOptionsData,
+ })
+ );
+ }
+ }
+
+ // On click trigger logic to update for new richdocuments attributes
+ $(".onlyOfficeShareOption").on(
+ "click",
+ $.proxy(this.onOnlyOfficeOptionChange, this)
+ );
+ },
+
+ _getAttribute(attributes, scope, key) {
+ for (const i in attributes) {
+ if (
+ attributes[i].scope === scope &&
+ attributes[i].key === key &&
+ attributes[i].enabled !== null
+ ) {
+ return attributes[i];
+ }
+ }
+
+ return null;
+ },
+
+ _updateAttributes(attributes, scope, key, enabled) {
+ const updatedAttributes = [];
+
+ // copy existing scope-key pairs from attributes
+ for (const i in attributes) {
+ const attribute = attributes[i];
+ if (attribute.scope !== scope || attribute.key !== key) {
+ updatedAttributes.push({
+ scope: attribute.scope,
+ key: attribute.key,
+ enabled: attribute.enabled,
+ });
+ }
+ }
+
+ // update attributes with scope-key pair to update
+ if (scope && key && enabled !== null) {
+ updatedAttributes.push({
+ scope,
+ key,
+ enabled,
+ });
+ }
+
+ return updatedAttributes;
+ },
+
+ _hasPermission(permissions, permission) {
+ return (permissions & permission) === permission;
+ },
+
+ _removePermission(permissions, permission) {
+ return permissions & ~permission;
+ },
+
+ /**
+ * Fill share options template based on supplied data map of {{ data-item }}
+ * @private
+ */
+ _template(data) {
+ if (!this._shareOptionsTemplate) {
+ this._shareOptionsTemplate = Handlebars.compile(
+ '' +
+ "{{#each shareOptions}}" +
+ '' +
+ '' +
+ '' +
+ "" +
+ "{{/each}}" +
+ "
"
+ );
+ }
+ return this._shareOptionsTemplate(data);
+ },
+ };
+
+ // api v2
+ OCA.Onlyoffice.ShareDialogView = {
+ attach(view) {
+ if (
+ _.isUndefined(view) ||
+ _.isUndefined(view.model) ||
+ OCA.Onlyoffice.setting.shareAttributesVersion !== "v2"
+ ) {
+ return;
+ }
+ if (view.model.getFileInfo().attributes.type !== "file") {
+ return;
+ }
+
+ const fileName = view.model.getFileInfo().attributes.name;
+
+ const extension = OCA.Onlyoffice.GetFileExtension(fileName);
+
+ const formats = OCA.Onlyoffice.setting.formats;
+
+ const config = formats[extension];
+ if (!config) {
+ return;
+ }
+
+ OCA.Onlyoffice.ShareOptions.config = config;
+
+ OCA.Onlyoffice.ShareOptions.model = view.model;
+
+ // customize rendering of checkboxes
+ const baseRenderCall = view.render;
+ view.render = function () {
+ baseRenderCall.call(view);
+ OCA.Onlyoffice.ShareOptions.render(view);
+ };
+
+ const model = view.model;
+
+ const baseAddShareCall = model.addShare;
+ model.addShare = function (properties, options) {
+ // add onlyoffice attributes
+ const newProperties =
+ OCA.Onlyoffice.ShareOptions.addShareProperties(properties);
+
+ if (
+ !OCA.Onlyoffice.ShareOptions.validateShareProperties(newProperties)
+ ) {
+ if (_.isFunction(options.error)) {
+ options.error(
+ model,
+ t(OCA.Onlyoffice.AppName, "Error while sharing")
);
- },
-
- /**
- * Based on attributes set for the share, render proper share options
- *
- * @param view
- */
- render: function (view) {
- var shares = this.model.getSharesWithCurrentItem();
-
- for (var shareIndex = 0; shareIndex < shares.length; shareIndex++) {
- var share = shares[shareIndex];
-
- // get existing share element if already initialized
- var $share = view.$el.find("li[data-share-id=" + share.id + "]");
- if ($share) {
- var shareOptionsData = [];
- var attributes = [
- { key: "download", scope: "permissions"},
- { key: "review", scope: OCA.Onlyoffice.AppName },
- { key: "fillForms", scope: OCA.Onlyoffice.AppName },
- { key: "comment", scope: OCA.Onlyoffice.AppName },
- { key: "modifyFilter", scope: OCA.Onlyoffice.AppName }
- ];
- for (var attributeIndex = 0; attributeIndex < attributes.length; attributeIndex++) {
- var attribute = this._getAttribute(
- share.attributes, attributes[attributeIndex].scope, attributes[attributeIndex].key
- );
-
- if (attribute === null || attribute.enabled === null) {
- continue;
- }
-
- var label;
- if (attribute.key === "download") {
- label = t(OCA.Onlyoffice.AppName, "download");
- } else if (attribute.key === "review") {
- label = t(OCA.Onlyoffice.AppName, "review");
- } else if (attribute.key === "fillForms") {
- label = t(OCA.Onlyoffice.AppName, "form filling");
- } else if (attribute.key === "comment") {
- label = t(OCA.Onlyoffice.AppName, "comment");
- } else if (attribute.key === "modifyFilter") {
- label = t(OCA.Onlyoffice.AppName, "global filter");
- } else {
- continue;
- }
-
- shareOptionsData.push({
- cid: view.cid,
- shareId: share.id,
- shareWith: share.share_with,
- attrScope: attribute.scope,
- attrKey: attribute.key,
- name: OCA.Onlyoffice.AppName + "-" + attribute.key,
- label: label,
- checked: attribute.enabled
- });
- }
-
- $share.append(
- this._template({
- shareOptions: shareOptionsData
- })
- );
- }
- }
-
- // On click trigger logic to update for new richdocuments attributes
- $(".onlyOfficeShareOption").on("click", $.proxy(this.onOnlyOfficeOptionChange, this));
- },
-
- _getAttribute: function (attributes, scope, key) {
- for (var i in attributes) {
- if (attributes[i].scope === scope
- && attributes[i].key === key
- && attributes[i].enabled !== null) {
- return attributes[i];
- }
- }
-
- return null;
- },
-
- _updateAttributes: function (attributes, scope, key, enabled) {
- var updatedAttributes = [];
-
- // copy existing scope-key pairs from attributes
- for (var i in attributes) {
- var attribute = attributes[i]
- if (attribute.scope !== scope
- || attribute.key !== key) {
- updatedAttributes.push({
- scope: attribute.scope,
- key: attribute.key,
- enabled: attribute.enabled
- });
- }
- }
-
- // update attributes with scope-key pair to update
- if (scope && key && enabled !== null) {
- updatedAttributes.push({
- scope: scope,
- key: key,
- enabled: enabled
- });
- }
-
- return updatedAttributes;
- },
-
- _hasPermission: function (permissions, permission) {
- return (permissions & permission) === permission;
- },
-
- _removePermission: function (permissions, permission) {
- return (permissions & ~permission);
- },
-
- /**
- * Fill share options template based on supplied data map of {{ data-item }}
- * @private
- */
- _template: function (data) {
- if (!this._shareOptionsTemplate) {
- this._shareOptionsTemplate = Handlebars.compile(
- '' +
- '{{#each shareOptions}}' +
- '' +
- '' +
- '' +
- '' +
- '{{/each}}' +
- '
'
- );
- }
- return this._shareOptionsTemplate(data);
+ }
+ return;
}
- };
-
- // api v2
- OCA.Onlyoffice.ShareDialogView = {
- attach: function (view) {
- if (_.isUndefined(view) || _.isUndefined(view.model) || OCA.Onlyoffice.setting.shareAttributesVersion !== "v2") {
- return;
- }
- if (view.model.getFileInfo().attributes.type !== "file") {
- return;
- }
-
- var fileName = view.model.getFileInfo().attributes.name;
- var extension = OCA.Onlyoffice.GetFileExtension(fileName);
-
- var formats = OCA.Onlyoffice.setting.formats;
-
- var config = formats[extension];
- if (!config) {
- return;
- }
-
- OCA.Onlyoffice.ShareOptions.config = config;
-
- OCA.Onlyoffice.ShareOptions.model = view.model;
-
- // customize rendering of checkboxes
- var baseRenderCall = view.render;
- view.render = function () {
- baseRenderCall.call(view);
- OCA.Onlyoffice.ShareOptions.render(view);
- };
-
- var model = view.model;
-
- var baseAddShareCall = model.addShare;
- model.addShare = function (properties, options) {
- // add onlyoffice attributes
- var newProperties = OCA.Onlyoffice.ShareOptions.addShareProperties(properties);
-
- if (!OCA.Onlyoffice.ShareOptions.validateShareProperties(newProperties)) {
- if (_.isFunction(options.error)) {
- options.error(model, t(OCA.Onlyoffice.AppName, 'Error while sharing'));
- }
- return;
- }
-
- baseAddShareCall.call(model, newProperties, options || {});
- };
-
- var baseUpdateShareCall = model.updateShare;
- model.updateShare = function (shareId, properties, options) {
- var newProperties = properties || {};
- var newOptions = options || {};
-
- // update for onlyoffice attributes
- if (!options.hasOwnProperty("onlyofficeUpdatedShareProperties")) {
- newProperties = OCA.Onlyoffice.ShareOptions.updateShareProperties(shareId, properties);
- _.extend(newOptions, { onlyofficeUpdatedShareProperties: true });
- }
-
- if (!OCA.Onlyoffice.ShareOptions.validateShareProperties(newProperties)) {
- if (_.isFunction(options.error)) {
- options.error(model, t(OCA.Onlyoffice.AppName, 'Error while sharing'));
- }
- return;
- }
-
- baseUpdateShareCall.call(model, shareId, newProperties, newOptions);
- };
-
- // Add call to watch for changes of shares
- model.on("change:shares", function (event) {
- OCA.Onlyoffice.ShareOptions.render(view);
- });
+ baseAddShareCall.call(model, newProperties, options || {});
+ };
+
+ const baseUpdateShareCall = model.updateShare;
+ model.updateShare = function (shareId, properties, options) {
+ let newProperties = properties || {};
+ const newOptions = options || {};
+
+ // update for onlyoffice attributes
+ if (!options.hasOwnProperty("onlyofficeUpdatedShareProperties")) {
+ newProperties = OCA.Onlyoffice.ShareOptions.updateShareProperties(
+ shareId,
+ properties
+ );
+ _.extend(newOptions, { onlyofficeUpdatedShareProperties: true });
}
- };
- // api v1
- OCA.Onlyoffice.ShareItemModel = {
- attach: function (model) {
- if (_.isUndefined(model) || OCA.Onlyoffice.setting.shareAttributesVersion !== "v1") {
- return;
- }
- if (model.getFileInfo().attributes.type !== "file") {
- return;
- }
-
- var fileName = model.getFileInfo().attributes.name;
-
- var extension = OCA.Onlyoffice.GetFileExtension(fileName);
-
- var formats = OCA.Onlyoffice.setting.formats;
-
- var config = formats[extension];
- if (!config) {
- return;
- }
-
- var addDownload = model.getRegisteredShareAttribute("permissions", "download") === null;
-
- if (addDownload) {
- model.registerShareAttribute({
- "scope": "permissions",
- "key": "download",
- "default": true,
- "label": t(OCA.Onlyoffice.AppName, "download"),
- "incompatiblePermissions": [OC.PERMISSION_UPDATE]
- });
- }
-
- if (config.review) {
- model.registerShareAttribute({
- "scope": OCA.Onlyoffice.AppName,
- "key": "review",
- "default": false,
- "label": t(OCA.Onlyoffice.AppName, "review"),
- "incompatiblePermissions": [OC.PERMISSION_UPDATE],
- });
- }
-
- if (config.fillForms) {
- model.registerShareAttribute({
- "scope": OCA.Onlyoffice.AppName,
- "key": "fillForms",
- "default": false,
- "label": t(OCA.Onlyoffice.AppName, "form filling"),
- "incompatiblePermissions": [OC.PERMISSION_UPDATE],
- "incompatibleAttributes": [
- {
- "scope": OCA.Onlyoffice.AppName,
- "key": "review",
- "enabled": true
- }
- ]
- });
- }
-
- if (config.comment) {
- model.registerShareAttribute({
- "scope": OCA.Onlyoffice.AppName,
- "key": "comment",
- "default": false,
- "label": t(OCA.Onlyoffice.AppName, "comment"),
- "incompatiblePermissions": [OC.PERMISSION_UPDATE],
- "incompatibleAttributes": [
- {
- "scope": OCA.Onlyoffice.AppName,
- "key": "review",
- "enabled": true
- },
- {
- "scope": OCA.Onlyoffice.AppName,
- "key": "fillForms",
- "enabled": true
- }
- ]
- });
- }
-
- if (config.modifyFilter) {
- model.registerShareAttribute({
- "scope": OCA.Onlyoffice.AppName,
- "key": "modifyFilter",
- "default": true,
- "label": t(OCA.Onlyoffice.AppName, "global filter"),
- "requiredPermissions": [OC.PERMISSION_UPDATE],
- "incompatibleAttributes": [
- {
- "scope": OCA.Onlyoffice.AppName,
- "key": "commentOnly",
- "enabled": true
- }
- ]
- });
- }
+ if (
+ !OCA.Onlyoffice.ShareOptions.validateShareProperties(newProperties)
+ ) {
+ if (_.isFunction(options.error)) {
+ options.error(
+ model,
+ t(OCA.Onlyoffice.AppName, "Error while sharing")
+ );
+ }
+ return;
}
- };
-
- OCA.Onlyoffice.Share = function () {
- // api v2
- OC.Plugins.register("OC.Share.ShareDialogView", OCA.Onlyoffice.ShareDialogView);
- // api v1
- OC.Plugins.register("OC.Share.ShareItemModel", OCA.Onlyoffice.ShareItemModel);
- };
+ baseUpdateShareCall.call(model, shareId, newProperties, newOptions);
+ };
+
+ // Add call to watch for changes of shares
+ model.on("change:shares", function (event) {
+ OCA.Onlyoffice.ShareOptions.render(view);
+ });
+ },
+ };
+
+ // api v1
+ OCA.Onlyoffice.ShareItemModel = {
+ attach(model) {
+ if (
+ _.isUndefined(model) ||
+ OCA.Onlyoffice.setting.shareAttributesVersion !== "v1"
+ ) {
+ return;
+ }
+ if (model.getFileInfo().attributes.type !== "file") {
+ return;
+ }
+
+ const fileName = model.getFileInfo().attributes.name;
+
+ const extension = OCA.Onlyoffice.GetFileExtension(fileName);
+
+ const formats = OCA.Onlyoffice.setting.formats;
+
+ const config = formats[extension];
+ if (!config) {
+ return;
+ }
+
+ const addDownload =
+ model.getRegisteredShareAttribute("permissions", "download") === null;
+
+ if (addDownload) {
+ model.registerShareAttribute({
+ scope: "permissions",
+ key: "download",
+ default: true,
+ label: t(OCA.Onlyoffice.AppName, "download"),
+ incompatiblePermissions: [OC.PERMISSION_UPDATE],
+ });
+ }
+
+ if (config.review) {
+ model.registerShareAttribute({
+ scope: OCA.Onlyoffice.AppName,
+ key: "review",
+ default: false,
+ label: t(OCA.Onlyoffice.AppName, "review"),
+ incompatiblePermissions: [OC.PERMISSION_UPDATE],
+ });
+ }
+
+ if (config.fillForms) {
+ model.registerShareAttribute({
+ scope: OCA.Onlyoffice.AppName,
+ key: "fillForms",
+ default: false,
+ label: t(OCA.Onlyoffice.AppName, "form filling"),
+ incompatiblePermissions: [OC.PERMISSION_UPDATE],
+ incompatibleAttributes: [
+ {
+ scope: OCA.Onlyoffice.AppName,
+ key: "review",
+ enabled: true,
+ },
+ ],
+ });
+ }
+
+ if (config.comment) {
+ model.registerShareAttribute({
+ scope: OCA.Onlyoffice.AppName,
+ key: "comment",
+ default: false,
+ label: t(OCA.Onlyoffice.AppName, "comment"),
+ incompatiblePermissions: [OC.PERMISSION_UPDATE],
+ incompatibleAttributes: [
+ {
+ scope: OCA.Onlyoffice.AppName,
+ key: "review",
+ enabled: true,
+ },
+ {
+ scope: OCA.Onlyoffice.AppName,
+ key: "fillForms",
+ enabled: true,
+ },
+ ],
+ });
+ }
+
+ if (config.modifyFilter) {
+ model.registerShareAttribute({
+ scope: OCA.Onlyoffice.AppName,
+ key: "modifyFilter",
+ default: true,
+ label: t(OCA.Onlyoffice.AppName, "global filter"),
+ requiredPermissions: [OC.PERMISSION_UPDATE],
+ incompatibleAttributes: [
+ {
+ scope: OCA.Onlyoffice.AppName,
+ key: "commentOnly",
+ enabled: true,
+ },
+ ],
+ });
+ }
+ },
+ };
+
+ OCA.Onlyoffice.Share = function () {
+ // api v2
+ OC.Plugins.register(
+ "OC.Share.ShareDialogView",
+ OCA.Onlyoffice.ShareDialogView
+ );
+ // api v1
+ OC.Plugins.register(
+ "OC.Share.ShareItemModel",
+ OCA.Onlyoffice.ShareItemModel
+ );
+ };
})(OCA);
diff --git a/js/template.js b/js/template.js
index db6a0e3a..f84c3b2a 100644
--- a/js/template.js
+++ b/js/template.js
@@ -17,164 +17,191 @@
*/
(function ($, OC) {
+ OCA.Onlyoffice = _.extend(
+ {
+ AppName: "onlyoffice",
+ templates: [],
+ },
+ OCA.Onlyoffice
+ );
+
+ OCA.Onlyoffice.OpenTemplatePicker = function (name, extension, type) {
+ $("#onlyoffice-template-picker").remove();
+
+ $.get(
+ OC.filePath(OCA.Onlyoffice.AppName, "templates", "templatePicker.html"),
+ function (tmpl) {
+ const $tmpl = $(tmpl);
+ const dialog = $tmpl.octemplate({
+ dialog_name: "onlyoffice-template-picker",
+ dialog_title: t(OCA.Onlyoffice.AppName, "Select template"),
+ });
- OCA.Onlyoffice = _.extend({
- AppName: "onlyoffice",
- templates: []
- }, OCA.Onlyoffice);
-
- OCA.Onlyoffice.OpenTemplatePicker = function (name, extension, type) {
-
- $("#onlyoffice-template-picker").remove();
-
- $.get(OC.filePath(OCA.Onlyoffice.AppName, "templates", "templatePicker.html"),
- function (tmpl) {
- var $tmpl = $(tmpl)
- var dialog = $tmpl.octemplate({
- dialog_name: "onlyoffice-template-picker",
- dialog_title: t(OCA.Onlyoffice.AppName, "Select template")
- });
-
- OCA.Onlyoffice.AttachTemplates(dialog, type);
-
- $("body").append(dialog);
-
- $("#onlyoffice-template-picker").ocdialog({
- closeOnEscape: true,
- modal: true,
- buttons: [{
- text: t("core", "Cancel"),
- classes: "cancel",
- click: function() {
- $(this).ocdialog("close")
- }
- }, {
- text: t(OCA.Onlyoffice.AppName, "Create"),
- classes: "primary",
- click: function() {
- var templateId = this.dataset.templateId;
- var fileList = OCA.Files.App.fileList;
- OCA.Onlyoffice.CreateFile(name + extension, fileList, templateId);
- $(this).ocdialog("close")
- }
- }]
- });
- });
- };
-
- OCA.Onlyoffice.GetTemplates = function (callback) {
- $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/template"),
- function onSuccess(response) {
- if (response.error) {
- OC.Notification.show(response.error, {
- type: "error",
- timeout: 3
- });
- callback(null, response.error);
- return;
- }
- callback(response, null);
- return;
- });
- };
+ OCA.Onlyoffice.AttachTemplates(dialog, type);
- OCA.Onlyoffice.AddTemplate = function (file, callback) {
- var data = new FormData();
- data.append("file", file);
-
- $.ajax({
- method: "POST",
- url: OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/template"),
- data: data,
- processData: false,
- contentType: false,
- success: function onSuccess(response) {
- if (response.error) {
- callback(null, response.error)
- return;
- }
- callback(response, null);
- }
- });
- }
+ $("body").append(dialog);
- OCA.Onlyoffice.DeleteTemplate = function (templateId, callback) {
- $.ajax({
- method: "DELETE",
- url: OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/template?templateId={templateId}",
+ $("#onlyoffice-template-picker").ocdialog({
+ closeOnEscape: true,
+ modal: true,
+ buttons: [
{
- templateId: templateId
- }),
- success: function onSuccess(response) {
- if (response) {
- callback(response);
- }
- }
- });
- }
-
- OCA.Onlyoffice.AttachTemplates = function (dialog, type) {
- var emptyItem = dialog[0].querySelector(".onlyoffice-template-item");
-
- OCA.Onlyoffice.templates.forEach(template => {
- if (template.type !== type) {
- return;
- }
- var item = emptyItem.cloneNode(true);
- OCA.Onlyoffice.FillItemTemplate(dialog, item, template);
- dialog[0].querySelector(".onlyoffice-template-container").appendChild(item);
- });
-
- OCA.Onlyoffice.FillItemTemplate(dialog, emptyItem,
+ text: t("core", "Cancel"),
+ classes: "cancel",
+ click() {
+ $(this).ocdialog("close");
+ },
+ },
{
- id: 0,
- name: t(OCA.Onlyoffice.AppName, "Empty"),
- type: type
- });
-
- $(emptyItem).addClass("selected");
- }
-
- OCA.Onlyoffice.AttachItemTemplate = function (template) {
- $.get(OC.filePath(OCA.Onlyoffice.AppName, "templates", "templateItem.html"),
- function (item) {
- var item = $(item)
-
- item.attr("data-id", template.id);
- item.children("img").attr("src", "/core/img/filetypes/x-office-" + template.type + ".svg");
- item.children("p").text(template.name);
-
- $(".onlyoffice-template-container").append(item);
- });
- }
-
- OCA.Onlyoffice.FillItemTemplate = function (dialog, item, template) {
- $(item.querySelector("label")).attr("for", "template_picker-" + template.id);
- item.querySelector("img").src = "/core/img/filetypes/x-office-" + template.type + ".svg";
- item.querySelector("p").textContent = template.name;
- item.onclick = function() {
- $(".onlyoffice-template-item").removeClass("selected");
- $(item).addClass("selected");
- dialog[0].dataset.templateId = template.id;
- }
- }
-
- OCA.Onlyoffice.TemplateExist = function (type) {
- var isExist = OCA.Onlyoffice.templates.some((template) => {
- return template.type === type;
+ text: t(OCA.Onlyoffice.AppName, "Create"),
+ classes: "primary",
+ click() {
+ const templateId = this.dataset.templateId;
+ const fileList = OCA.Files.App.fileList;
+ OCA.Onlyoffice.CreateFile(
+ name + extension,
+ fileList,
+ templateId
+ );
+ $(this).ocdialog("close");
+ },
+ },
+ ],
});
+ }
+ );
+ };
+
+ OCA.Onlyoffice.GetTemplates = function (callback) {
+ $.get(
+ OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/template"),
+ function onSuccess(response) {
+ if (response.error) {
+ OC.Notification.show(response.error, {
+ type: "error",
+ timeout: 3,
+ });
+ callback(null, response.error);
+ return;
+ }
+ callback(response, null);
+ return;
+ }
+ );
+ };
+
+ OCA.Onlyoffice.AddTemplate = function (file, callback) {
+ const data = new FormData();
+ data.append("file", file);
+
+ $.ajax({
+ method: "POST",
+ url: OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/template"),
+ data,
+ processData: false,
+ contentType: false,
+ success: function onSuccess(response) {
+ if (response.error) {
+ callback(null, response.error);
+ return;
+ }
+ callback(response, null);
+ },
+ });
+ };
+
+ OCA.Onlyoffice.DeleteTemplate = function (templateId, callback) {
+ $.ajax({
+ method: "DELETE",
+ url: OC.generateUrl(
+ "apps/" +
+ OCA.Onlyoffice.AppName +
+ "/ajax/template?templateId={templateId}",
+ {
+ templateId,
+ }
+ ),
+ success: function onSuccess(response) {
+ if (response) {
+ callback(response);
+ }
+ },
+ });
+ };
+
+ OCA.Onlyoffice.AttachTemplates = function (dialog, type) {
+ const emptyItem = dialog[0].querySelector(".onlyoffice-template-item");
+
+ OCA.Onlyoffice.templates.forEach((template) => {
+ if (template.type !== type) {
+ return;
+ }
+ const item = emptyItem.cloneNode(true);
+ OCA.Onlyoffice.FillItemTemplate(dialog, item, template);
+ dialog[0]
+ .querySelector(".onlyoffice-template-container")
+ .appendChild(item);
+ });
- return isExist;
- }
+ OCA.Onlyoffice.FillItemTemplate(dialog, emptyItem, {
+ id: 0,
+ name: t(OCA.Onlyoffice.AppName, "Empty"),
+ type,
+ });
- $(document).ready(function () {
- OCA.Onlyoffice.GetTemplates((templates, error) => {
- if (error || !Array.isArray(templates) || templates.length < 1) {
- return;
- }
+ $(emptyItem).addClass("selected");
+ };
+
+ OCA.Onlyoffice.AttachItemTemplate = function (template) {
+ $.get(
+ OC.filePath(OCA.Onlyoffice.AppName, "templates", "templateItem.html"),
+ function (item) {
+ item = $(item);
+
+ item.attr("data-id", template.id);
+ item
+ .children("img")
+ .attr(
+ "src",
+ "/core/img/filetypes/x-office-" + template.type + ".svg"
+ );
+ item.children("p").text(template.name);
+
+ $(".onlyoffice-template-container").append(item);
+ }
+ );
+ };
+
+ OCA.Onlyoffice.FillItemTemplate = function (dialog, item, template) {
+ $(item.querySelector("label")).attr(
+ "for",
+ "template_picker-" + template.id
+ );
+ item.querySelector("img").src =
+ "/core/img/filetypes/x-office-" + template.type + ".svg";
+ item.querySelector("p").textContent = template.name;
+ item.onclick = function () {
+ $(".onlyoffice-template-item").removeClass("selected");
+ $(item).addClass("selected");
+ dialog[0].dataset.templateId = template.id;
+ };
+ };
- OCA.Onlyoffice.templates = templates;
- })
+ OCA.Onlyoffice.TemplateExist = function (type) {
+ const isExist = OCA.Onlyoffice.templates.some((template) => {
+ return template.type === type;
});
+ return isExist;
+ };
+
+ $(document).ready(function () {
+ OCA.Onlyoffice.GetTemplates((templates, error) => {
+ if (error || !Array.isArray(templates) || templates.length < 1) {
+ return;
+ }
+
+ OCA.Onlyoffice.templates = templates;
+ });
+ });
})(jQuery, OC);
diff --git a/js/web/onlyoffice.js b/js/web/onlyoffice.js
index aa358b01..891f32bc 100644
--- a/js/web/onlyoffice.js
+++ b/js/web/onlyoffice.js
@@ -1,6859 +1,7928 @@
-define(['vue'], (function (vue) { 'use strict';
-
- var global$1 = (typeof global !== "undefined" ? global :
- typeof self !== "undefined" ? self :
- typeof window !== "undefined" ? window : {});
-
- function getDevtoolsGlobalHook() {
- return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;
- }
- function getTarget() {
- // @ts-ignore
- return (typeof navigator !== 'undefined' && typeof window !== 'undefined')
- ? window
- : typeof global$1 !== 'undefined'
- ? global$1
- : {};
- }
- const isProxyAvailable = typeof Proxy === 'function';
-
- const HOOK_SETUP = 'devtools-plugin:setup';
- const HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set';
-
- let supported;
- let perf;
- function isPerformanceSupported() {
- var _a;
- if (supported !== undefined) {
- return supported;
- }
- if (typeof window !== 'undefined' && window.performance) {
- supported = true;
- perf = window.performance;
- }
- else if (typeof global$1 !== 'undefined' && ((_a = global$1.perf_hooks) === null || _a === void 0 ? void 0 : _a.performance)) {
- supported = true;
- perf = global$1.perf_hooks.performance;
- }
- else {
- supported = false;
- }
- return supported;
- }
- function now() {
- return isPerformanceSupported() ? perf.now() : Date.now();
- }
-
- class ApiProxy {
- constructor(plugin, hook) {
- this.target = null;
- this.targetQueue = [];
- this.onQueue = [];
- this.plugin = plugin;
- this.hook = hook;
- const defaultSettings = {};
- if (plugin.settings) {
- for (const id in plugin.settings) {
- const item = plugin.settings[id];
- defaultSettings[id] = item.defaultValue;
- }
- }
- const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;
- let currentSettings = Object.assign({}, defaultSettings);
- try {
- const raw = localStorage.getItem(localSettingsSaveId);
- const data = JSON.parse(raw);
- Object.assign(currentSettings, data);
- }
- catch (e) {
- // noop
- }
- this.fallbacks = {
- getSettings() {
- return currentSettings;
- },
- setSettings(value) {
- try {
- localStorage.setItem(localSettingsSaveId, JSON.stringify(value));
- }
- catch (e) {
- // noop
- }
- currentSettings = value;
- },
- now() {
- return now();
- },
- };
- if (hook) {
- hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {
- if (pluginId === this.plugin.id) {
- this.fallbacks.setSettings(value);
- }
- });
- }
- this.proxiedOn = new Proxy({}, {
- get: (_target, prop) => {
- if (this.target) {
- return this.target.on[prop];
- }
- else {
- return (...args) => {
- this.onQueue.push({
- method: prop,
- args,
- });
- };
- }
- },
- });
- this.proxiedTarget = new Proxy({}, {
- get: (_target, prop) => {
- if (this.target) {
- return this.target[prop];
- }
- else if (prop === 'on') {
- return this.proxiedOn;
- }
- else if (Object.keys(this.fallbacks).includes(prop)) {
- return (...args) => {
- this.targetQueue.push({
- method: prop,
- args,
- resolve: () => { },
- });
- return this.fallbacks[prop](...args);
- };
- }
- else {
- return (...args) => {
- return new Promise(resolve => {
- this.targetQueue.push({
- method: prop,
- args,
- resolve,
- });
- });
- };
- }
- },
- });
- }
- async setRealTarget(target) {
- this.target = target;
- for (const item of this.onQueue) {
- this.target.on[item.method](...item.args);
- }
- for (const item of this.targetQueue) {
- item.resolve(await this.target[item.method](...item.args));
- }
- }
- }
-
- function setupDevtoolsPlugin(pluginDescriptor, setupFn) {
- const descriptor = pluginDescriptor;
- const target = getTarget();
- const hook = getDevtoolsGlobalHook();
- const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;
- if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {
- hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);
- }
- else {
- const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;
- const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];
- list.push({
- pluginDescriptor: descriptor,
- setupFn,
- proxy,
- });
- if (proxy)
- setupFn(proxy.proxiedTarget);
- }
- }
-
- /*!
- * vuex v4.1.0
- * (c) 2022 Evan You
- * @license MIT
- */
-
- var storeKey = 'store';
-
- /**
- * forEach for object
- */
- function forEachValue (obj, fn) {
- Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });
- }
-
- function isObject$1 (obj) {
- return obj !== null && typeof obj === 'object'
- }
-
- function isPromise (val) {
- return val && typeof val.then === 'function'
- }
-
- function assert (condition, msg) {
- if (!condition) { throw new Error(("[vuex] " + msg)) }
- }
-
- function partial (fn, arg) {
- return function () {
- return fn(arg)
- }
- }
-
- function genericSubscribe (fn, subs, options) {
- if (subs.indexOf(fn) < 0) {
- options && options.prepend
- ? subs.unshift(fn)
- : subs.push(fn);
- }
- return function () {
- var i = subs.indexOf(fn);
- if (i > -1) {
- subs.splice(i, 1);
- }
- }
- }
-
- function resetStore (store, hot) {
- store._actions = Object.create(null);
- store._mutations = Object.create(null);
- store._wrappedGetters = Object.create(null);
- store._modulesNamespaceMap = Object.create(null);
- var state = store.state;
- // init all modules
- installModule(store, state, [], store._modules.root, true);
- // reset state
- resetStoreState(store, state, hot);
- }
-
- function resetStoreState (store, state, hot) {
- var oldState = store._state;
- var oldScope = store._scope;
-
- // bind store public getters
- store.getters = {};
- // reset local getters cache
- store._makeLocalGettersCache = Object.create(null);
- var wrappedGetters = store._wrappedGetters;
- var computedObj = {};
- var computedCache = {};
-
- // create a new effect scope and create computed object inside it to avoid
- // getters (computed) getting destroyed on component unmount.
- var scope = vue.effectScope(true);
-
- scope.run(function () {
- forEachValue(wrappedGetters, function (fn, key) {
- // use computed to leverage its lazy-caching mechanism
- // direct inline function use will lead to closure preserving oldState.
- // using partial to return function with only arguments preserved in closure environment.
- computedObj[key] = partial(fn, store);
- computedCache[key] = vue.computed(function () { return computedObj[key](); });
- Object.defineProperty(store.getters, key, {
- get: function () { return computedCache[key].value; },
- enumerable: true // for local getters
- });
- });
- });
-
- store._state = vue.reactive({
- data: state
- });
-
- // register the newly created effect scope to the store so that we can
- // dispose the effects when this method runs again in the future.
- store._scope = scope;
-
- // enable strict mode for new state
- if (store.strict) {
- enableStrictMode(store);
- }
-
- if (oldState) {
- if (hot) {
- // dispatch changes in all subscribed watchers
- // to force getter re-evaluation for hot reloading.
- store._withCommit(function () {
- oldState.data = null;
- });
- }
- }
-
- // dispose previously registered effect scope if there is one.
- if (oldScope) {
- oldScope.stop();
- }
- }
-
- function installModule (store, rootState, path, module, hot) {
- var isRoot = !path.length;
- var namespace = store._modules.getNamespace(path);
-
- // register in namespace map
- if (module.namespaced) {
- if (store._modulesNamespaceMap[namespace] && true) {
- console.error(("[vuex] duplicate namespace " + namespace + " for the namespaced module " + (path.join('/'))));
- }
- store._modulesNamespaceMap[namespace] = module;
- }
-
- // set state
- if (!isRoot && !hot) {
- var parentState = getNestedState(rootState, path.slice(0, -1));
- var moduleName = path[path.length - 1];
- store._withCommit(function () {
- {
- if (moduleName in parentState) {
- console.warn(
- ("[vuex] state field \"" + moduleName + "\" was overridden by a module with the same name at \"" + (path.join('.')) + "\"")
- );
- }
- }
- parentState[moduleName] = module.state;
- });
- }
-
- var local = module.context = makeLocalContext(store, namespace, path);
-
- module.forEachMutation(function (mutation, key) {
- var namespacedType = namespace + key;
- registerMutation(store, namespacedType, mutation, local);
- });
-
- module.forEachAction(function (action, key) {
- var type = action.root ? key : namespace + key;
- var handler = action.handler || action;
- registerAction(store, type, handler, local);
- });
-
- module.forEachGetter(function (getter, key) {
- var namespacedType = namespace + key;
- registerGetter(store, namespacedType, getter, local);
- });
-
- module.forEachChild(function (child, key) {
- installModule(store, rootState, path.concat(key), child, hot);
- });
- }
-
- /**
- * make localized dispatch, commit, getters and state
- * if there is no namespace, just use root ones
- */
- function makeLocalContext (store, namespace, path) {
- var noNamespace = namespace === '';
-
- var local = {
- dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {
- var args = unifyObjectStyle(_type, _payload, _options);
- var payload = args.payload;
- var options = args.options;
- var type = args.type;
-
- if (!options || !options.root) {
- type = namespace + type;
- if (!store._actions[type]) {
- console.error(("[vuex] unknown local action type: " + (args.type) + ", global type: " + type));
- return
- }
- }
-
- return store.dispatch(type, payload)
- },
-
- commit: noNamespace ? store.commit : function (_type, _payload, _options) {
- var args = unifyObjectStyle(_type, _payload, _options);
- var payload = args.payload;
- var options = args.options;
- var type = args.type;
-
- if (!options || !options.root) {
- type = namespace + type;
- if (!store._mutations[type]) {
- console.error(("[vuex] unknown local mutation type: " + (args.type) + ", global type: " + type));
- return
- }
- }
-
- store.commit(type, payload, options);
- }
- };
-
- // getters and state object must be gotten lazily
- // because they will be changed by state update
- Object.defineProperties(local, {
- getters: {
- get: noNamespace
- ? function () { return store.getters; }
- : function () { return makeLocalGetters(store, namespace); }
- },
- state: {
- get: function () { return getNestedState(store.state, path); }
- }
- });
-
- return local
- }
-
- function makeLocalGetters (store, namespace) {
- if (!store._makeLocalGettersCache[namespace]) {
- var gettersProxy = {};
- var splitPos = namespace.length;
- Object.keys(store.getters).forEach(function (type) {
- // skip if the target getter is not match this namespace
- if (type.slice(0, splitPos) !== namespace) { return }
-
- // extract local getter type
- var localType = type.slice(splitPos);
-
- // Add a port to the getters proxy.
- // Define as getter property because
- // we do not want to evaluate the getters in this time.
- Object.defineProperty(gettersProxy, localType, {
- get: function () { return store.getters[type]; },
- enumerable: true
- });
- });
- store._makeLocalGettersCache[namespace] = gettersProxy;
- }
-
- return store._makeLocalGettersCache[namespace]
- }
-
- function registerMutation (store, type, handler, local) {
- var entry = store._mutations[type] || (store._mutations[type] = []);
- entry.push(function wrappedMutationHandler (payload) {
- handler.call(store, local.state, payload);
- });
- }
-
- function registerAction (store, type, handler, local) {
- var entry = store._actions[type] || (store._actions[type] = []);
- entry.push(function wrappedActionHandler (payload) {
- var res = handler.call(store, {
- dispatch: local.dispatch,
- commit: local.commit,
- getters: local.getters,
- state: local.state,
- rootGetters: store.getters,
- rootState: store.state
- }, payload);
- if (!isPromise(res)) {
- res = Promise.resolve(res);
- }
- if (store._devtoolHook) {
- return res.catch(function (err) {
- store._devtoolHook.emit('vuex:error', err);
- throw err
- })
- } else {
- return res
- }
- });
- }
-
- function registerGetter (store, type, rawGetter, local) {
- if (store._wrappedGetters[type]) {
- {
- console.error(("[vuex] duplicate getter key: " + type));
- }
- return
- }
- store._wrappedGetters[type] = function wrappedGetter (store) {
- return rawGetter(
- local.state, // local state
- local.getters, // local getters
- store.state, // root state
- store.getters // root getters
- )
- };
- }
-
- function enableStrictMode (store) {
- vue.watch(function () { return store._state.data; }, function () {
- {
- assert(store._committing, "do not mutate vuex store state outside mutation handlers.");
- }
- }, { deep: true, flush: 'sync' });
- }
-
- function getNestedState (state, path) {
- return path.reduce(function (state, key) { return state[key]; }, state)
- }
-
- function unifyObjectStyle (type, payload, options) {
- if (isObject$1(type) && type.type) {
- options = payload;
- payload = type;
- type = type.type;
- }
-
- {
- assert(typeof type === 'string', ("expects string as the type, but found " + (typeof type) + "."));
- }
-
- return { type: type, payload: payload, options: options }
- }
-
- var LABEL_VUEX_BINDINGS = 'vuex bindings';
- var MUTATIONS_LAYER_ID = 'vuex:mutations';
- var ACTIONS_LAYER_ID = 'vuex:actions';
- var INSPECTOR_ID = 'vuex';
-
- var actionId = 0;
-
- function addDevtools (app, store) {
- setupDevtoolsPlugin(
- {
- id: 'org.vuejs.vuex',
- app: app,
- label: 'Vuex',
- homepage: 'https://next.vuex.vuejs.org/',
- logo: 'https://vuejs.org/images/icons/favicon-96x96.png',
- packageName: 'vuex',
- componentStateTypes: [LABEL_VUEX_BINDINGS]
- },
- function (api) {
- api.addTimelineLayer({
- id: MUTATIONS_LAYER_ID,
- label: 'Vuex Mutations',
- color: COLOR_LIME_500
- });
-
- api.addTimelineLayer({
- id: ACTIONS_LAYER_ID,
- label: 'Vuex Actions',
- color: COLOR_LIME_500
- });
-
- api.addInspector({
- id: INSPECTOR_ID,
- label: 'Vuex',
- icon: 'storage',
- treeFilterPlaceholder: 'Filter stores...'
- });
-
- api.on.getInspectorTree(function (payload) {
- if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
- if (payload.filter) {
- var nodes = [];
- flattenStoreForInspectorTree(nodes, store._modules.root, payload.filter, '');
- payload.rootNodes = nodes;
- } else {
- payload.rootNodes = [
- formatStoreForInspectorTree(store._modules.root, '')
- ];
- }
- }
- });
-
- api.on.getInspectorState(function (payload) {
- if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
- var modulePath = payload.nodeId;
- makeLocalGetters(store, modulePath);
- payload.state = formatStoreForInspectorState(
- getStoreModule(store._modules, modulePath),
- modulePath === 'root' ? store.getters : store._makeLocalGettersCache,
- modulePath
- );
- }
- });
-
- api.on.editInspectorState(function (payload) {
- if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
- var modulePath = payload.nodeId;
- var path = payload.path;
- if (modulePath !== 'root') {
- path = modulePath.split('/').filter(Boolean).concat( path);
- }
- store._withCommit(function () {
- payload.set(store._state.data, path, payload.state.value);
- });
- }
- });
-
- store.subscribe(function (mutation, state) {
- var data = {};
-
- if (mutation.payload) {
- data.payload = mutation.payload;
- }
-
- data.state = state;
-
- api.notifyComponentUpdate();
- api.sendInspectorTree(INSPECTOR_ID);
- api.sendInspectorState(INSPECTOR_ID);
-
- api.addTimelineEvent({
- layerId: MUTATIONS_LAYER_ID,
- event: {
- time: Date.now(),
- title: mutation.type,
- data: data
- }
- });
- });
-
- store.subscribeAction({
- before: function (action, state) {
- var data = {};
- if (action.payload) {
- data.payload = action.payload;
- }
- action._id = actionId++;
- action._time = Date.now();
- data.state = state;
-
- api.addTimelineEvent({
- layerId: ACTIONS_LAYER_ID,
- event: {
- time: action._time,
- title: action.type,
- groupId: action._id,
- subtitle: 'start',
- data: data
- }
- });
- },
- after: function (action, state) {
- var data = {};
- var duration = Date.now() - action._time;
- data.duration = {
- _custom: {
- type: 'duration',
- display: (duration + "ms"),
- tooltip: 'Action duration',
- value: duration
- }
- };
- if (action.payload) {
- data.payload = action.payload;
- }
- data.state = state;
-
- api.addTimelineEvent({
- layerId: ACTIONS_LAYER_ID,
- event: {
- time: Date.now(),
- title: action.type,
- groupId: action._id,
- subtitle: 'end',
- data: data
- }
- });
- }
- });
- }
- );
- }
-
- // extracted from tailwind palette
- var COLOR_LIME_500 = 0x84cc16;
- var COLOR_DARK = 0x666666;
- var COLOR_WHITE = 0xffffff;
-
- var TAG_NAMESPACED = {
- label: 'namespaced',
- textColor: COLOR_WHITE,
- backgroundColor: COLOR_DARK
- };
-
- /**
- * @param {string} path
- */
- function extractNameFromPath (path) {
- return path && path !== 'root' ? path.split('/').slice(-2, -1)[0] : 'Root'
- }
-
- /**
- * @param {*} module
- * @return {import('@vue/devtools-api').CustomInspectorNode}
- */
- function formatStoreForInspectorTree (module, path) {
- return {
- id: path || 'root',
- // all modules end with a `/`, we want the last segment only
- // cart/ -> cart
- // nested/cart/ -> cart
- label: extractNameFromPath(path),
- tags: module.namespaced ? [TAG_NAMESPACED] : [],
- children: Object.keys(module._children).map(function (moduleName) { return formatStoreForInspectorTree(
- module._children[moduleName],
- path + moduleName + '/'
- ); }
- )
- }
- }
-
- /**
- * @param {import('@vue/devtools-api').CustomInspectorNode[]} result
- * @param {*} module
- * @param {string} filter
- * @param {string} path
- */
- function flattenStoreForInspectorTree (result, module, filter, path) {
- if (path.includes(filter)) {
- result.push({
- id: path || 'root',
- label: path.endsWith('/') ? path.slice(0, path.length - 1) : path || 'Root',
- tags: module.namespaced ? [TAG_NAMESPACED] : []
- });
- }
- Object.keys(module._children).forEach(function (moduleName) {
- flattenStoreForInspectorTree(result, module._children[moduleName], filter, path + moduleName + '/');
- });
- }
-
- /**
- * @param {*} module
- * @return {import('@vue/devtools-api').CustomInspectorState}
- */
- function formatStoreForInspectorState (module, getters, path) {
- getters = path === 'root' ? getters : getters[path];
- var gettersKeys = Object.keys(getters);
- var storeState = {
- state: Object.keys(module.state).map(function (key) { return ({
- key: key,
- editable: true,
- value: module.state[key]
- }); })
- };
-
- if (gettersKeys.length) {
- var tree = transformPathsToObjectTree(getters);
- storeState.getters = Object.keys(tree).map(function (key) { return ({
- key: key.endsWith('/') ? extractNameFromPath(key) : key,
- editable: false,
- value: canThrow(function () { return tree[key]; })
- }); });
- }
-
- return storeState
- }
-
- function transformPathsToObjectTree (getters) {
- var result = {};
- Object.keys(getters).forEach(function (key) {
- var path = key.split('/');
- if (path.length > 1) {
- var target = result;
- var leafKey = path.pop();
- path.forEach(function (p) {
- if (!target[p]) {
- target[p] = {
- _custom: {
- value: {},
- display: p,
- tooltip: 'Module',
- abstract: true
- }
- };
- }
- target = target[p]._custom.value;
- });
- target[leafKey] = canThrow(function () { return getters[key]; });
- } else {
- result[key] = canThrow(function () { return getters[key]; });
- }
- });
- return result
- }
-
- function getStoreModule (moduleMap, path) {
- var names = path.split('/').filter(function (n) { return n; });
- return names.reduce(
- function (module, moduleName, i) {
- var child = module[moduleName];
- if (!child) {
- throw new Error(("Missing module \"" + moduleName + "\" for path \"" + path + "\"."))
- }
- return i === names.length - 1 ? child : child._children
- },
- path === 'root' ? moduleMap : moduleMap.root._children
- )
- }
-
- function canThrow (cb) {
- try {
- return cb()
- } catch (e) {
- return e
- }
- }
-
- // Base data struct for store's module, package with some attribute and method
- var Module = function Module (rawModule, runtime) {
- this.runtime = runtime;
- // Store some children item
- this._children = Object.create(null);
- // Store the origin module object which passed by programmer
- this._rawModule = rawModule;
- var rawState = rawModule.state;
-
- // Store the origin module's state
- this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};
- };
-
- var prototypeAccessors$1 = { namespaced: { configurable: true } };
-
- prototypeAccessors$1.namespaced.get = function () {
- return !!this._rawModule.namespaced
- };
-
- Module.prototype.addChild = function addChild (key, module) {
- this._children[key] = module;
- };
-
- Module.prototype.removeChild = function removeChild (key) {
- delete this._children[key];
- };
-
- Module.prototype.getChild = function getChild (key) {
- return this._children[key]
- };
-
- Module.prototype.hasChild = function hasChild (key) {
- return key in this._children
- };
-
- Module.prototype.update = function update (rawModule) {
- this._rawModule.namespaced = rawModule.namespaced;
- if (rawModule.actions) {
- this._rawModule.actions = rawModule.actions;
- }
- if (rawModule.mutations) {
- this._rawModule.mutations = rawModule.mutations;
- }
- if (rawModule.getters) {
- this._rawModule.getters = rawModule.getters;
- }
- };
-
- Module.prototype.forEachChild = function forEachChild (fn) {
- forEachValue(this._children, fn);
- };
-
- Module.prototype.forEachGetter = function forEachGetter (fn) {
- if (this._rawModule.getters) {
- forEachValue(this._rawModule.getters, fn);
- }
- };
-
- Module.prototype.forEachAction = function forEachAction (fn) {
- if (this._rawModule.actions) {
- forEachValue(this._rawModule.actions, fn);
- }
- };
-
- Module.prototype.forEachMutation = function forEachMutation (fn) {
- if (this._rawModule.mutations) {
- forEachValue(this._rawModule.mutations, fn);
- }
- };
-
- Object.defineProperties( Module.prototype, prototypeAccessors$1 );
-
- var ModuleCollection = function ModuleCollection (rawRootModule) {
- // register root module (Vuex.Store options)
- this.register([], rawRootModule, false);
- };
-
- ModuleCollection.prototype.get = function get (path) {
- return path.reduce(function (module, key) {
- return module.getChild(key)
- }, this.root)
- };
-
- ModuleCollection.prototype.getNamespace = function getNamespace (path) {
- var module = this.root;
- return path.reduce(function (namespace, key) {
- module = module.getChild(key);
- return namespace + (module.namespaced ? key + '/' : '')
- }, '')
- };
-
- ModuleCollection.prototype.update = function update$1 (rawRootModule) {
- update([], this.root, rawRootModule);
- };
-
- ModuleCollection.prototype.register = function register (path, rawModule, runtime) {
- var this$1$1 = this;
- if ( runtime === void 0 ) runtime = true;
-
- {
- assertRawModule(path, rawModule);
- }
-
- var newModule = new Module(rawModule, runtime);
- if (path.length === 0) {
- this.root = newModule;
- } else {
- var parent = this.get(path.slice(0, -1));
- parent.addChild(path[path.length - 1], newModule);
- }
-
- // register nested modules
- if (rawModule.modules) {
- forEachValue(rawModule.modules, function (rawChildModule, key) {
- this$1$1.register(path.concat(key), rawChildModule, runtime);
- });
- }
- };
-
- ModuleCollection.prototype.unregister = function unregister (path) {
- var parent = this.get(path.slice(0, -1));
- var key = path[path.length - 1];
- var child = parent.getChild(key);
-
- if (!child) {
- {
- console.warn(
- "[vuex] trying to unregister module '" + key + "', which is " +
- "not registered"
- );
- }
- return
- }
-
- if (!child.runtime) {
- return
- }
-
- parent.removeChild(key);
- };
-
- ModuleCollection.prototype.isRegistered = function isRegistered (path) {
- var parent = this.get(path.slice(0, -1));
- var key = path[path.length - 1];
-
- if (parent) {
- return parent.hasChild(key)
- }
-
- return false
- };
-
- function update (path, targetModule, newModule) {
- {
- assertRawModule(path, newModule);
- }
-
- // update target module
- targetModule.update(newModule);
-
- // update nested modules
- if (newModule.modules) {
- for (var key in newModule.modules) {
- if (!targetModule.getChild(key)) {
- {
- console.warn(
- "[vuex] trying to add a new module '" + key + "' on hot reloading, " +
- 'manual reload is needed'
- );
- }
- return
- }
- update(
- path.concat(key),
- targetModule.getChild(key),
- newModule.modules[key]
- );
- }
- }
- }
-
- var functionAssert = {
- assert: function (value) { return typeof value === 'function'; },
- expected: 'function'
- };
-
- var objectAssert = {
- assert: function (value) { return typeof value === 'function' ||
- (typeof value === 'object' && typeof value.handler === 'function'); },
- expected: 'function or object with "handler" function'
- };
-
- var assertTypes = {
- getters: functionAssert,
- mutations: functionAssert,
- actions: objectAssert
- };
-
- function assertRawModule (path, rawModule) {
- Object.keys(assertTypes).forEach(function (key) {
- if (!rawModule[key]) { return }
-
- var assertOptions = assertTypes[key];
-
- forEachValue(rawModule[key], function (value, type) {
- assert(
- assertOptions.assert(value),
- makeAssertionMessage(path, key, type, value, assertOptions.expected)
- );
- });
- });
- }
-
- function makeAssertionMessage (path, key, type, value, expected) {
- var buf = key + " should be " + expected + " but \"" + key + "." + type + "\"";
- if (path.length > 0) {
- buf += " in module \"" + (path.join('.')) + "\"";
- }
- buf += " is " + (JSON.stringify(value)) + ".";
- return buf
- }
-
- var Store = function Store (options) {
- var this$1$1 = this;
- if ( options === void 0 ) options = {};
-
- {
- assert(typeof Promise !== 'undefined', "vuex requires a Promise polyfill in this browser.");
- assert(this instanceof Store, "store must be called with the new operator.");
- }
-
- var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];
- var strict = options.strict; if ( strict === void 0 ) strict = false;
- var devtools = options.devtools;
-
- // store internal state
- this._committing = false;
- this._actions = Object.create(null);
- this._actionSubscribers = [];
- this._mutations = Object.create(null);
- this._wrappedGetters = Object.create(null);
- this._modules = new ModuleCollection(options);
- this._modulesNamespaceMap = Object.create(null);
- this._subscribers = [];
- this._makeLocalGettersCache = Object.create(null);
-
- // EffectScope instance. when registering new getters, we wrap them inside
- // EffectScope so that getters (computed) would not be destroyed on
- // component unmount.
- this._scope = null;
-
- this._devtools = devtools;
-
- // bind commit and dispatch to self
- var store = this;
- var ref = this;
- var dispatch = ref.dispatch;
- var commit = ref.commit;
- this.dispatch = function boundDispatch (type, payload) {
- return dispatch.call(store, type, payload)
- };
- this.commit = function boundCommit (type, payload, options) {
- return commit.call(store, type, payload, options)
- };
-
- // strict mode
- this.strict = strict;
-
- var state = this._modules.root.state;
-
- // init root module.
- // this also recursively registers all sub-modules
- // and collects all module getters inside this._wrappedGetters
- installModule(this, state, [], this._modules.root);
-
- // initialize the store state, which is responsible for the reactivity
- // (also registers _wrappedGetters as computed properties)
- resetStoreState(this, state);
-
- // apply plugins
- plugins.forEach(function (plugin) { return plugin(this$1$1); });
- };
-
- var prototypeAccessors = { state: { configurable: true } };
-
- Store.prototype.install = function install (app, injectKey) {
- app.provide(injectKey || storeKey, this);
- app.config.globalProperties.$store = this;
-
- var useDevtools = this._devtools !== undefined
- ? this._devtools
- : true ;
-
- if (useDevtools) {
- addDevtools(app, this);
- }
- };
-
- prototypeAccessors.state.get = function () {
- return this._state.data
- };
-
- prototypeAccessors.state.set = function (v) {
- {
- assert(false, "use store.replaceState() to explicit replace store state.");
- }
- };
-
- Store.prototype.commit = function commit (_type, _payload, _options) {
- var this$1$1 = this;
-
- // check object-style commit
- var ref = unifyObjectStyle(_type, _payload, _options);
- var type = ref.type;
- var payload = ref.payload;
- var options = ref.options;
-
- var mutation = { type: type, payload: payload };
- var entry = this._mutations[type];
- if (!entry) {
- {
- console.error(("[vuex] unknown mutation type: " + type));
- }
- return
- }
- this._withCommit(function () {
- entry.forEach(function commitIterator (handler) {
- handler(payload);
- });
- });
-
- this._subscribers
- .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
- .forEach(function (sub) { return sub(mutation, this$1$1.state); });
-
- if (
- options && options.silent
- ) {
- console.warn(
- "[vuex] mutation type: " + type + ". Silent option has been removed. " +
- 'Use the filter functionality in the vue-devtools'
- );
- }
- };
-
- Store.prototype.dispatch = function dispatch (_type, _payload) {
- var this$1$1 = this;
-
- // check object-style dispatch
- var ref = unifyObjectStyle(_type, _payload);
- var type = ref.type;
- var payload = ref.payload;
-
- var action = { type: type, payload: payload };
- var entry = this._actions[type];
- if (!entry) {
- {
- console.error(("[vuex] unknown action type: " + type));
- }
- return
- }
-
- try {
- this._actionSubscribers
- .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
- .filter(function (sub) { return sub.before; })
- .forEach(function (sub) { return sub.before(action, this$1$1.state); });
- } catch (e) {
- {
- console.warn("[vuex] error in before action subscribers: ");
- console.error(e);
- }
- }
-
- var result = entry.length > 1
- ? Promise.all(entry.map(function (handler) { return handler(payload); }))
- : entry[0](payload);
-
- return new Promise(function (resolve, reject) {
- result.then(function (res) {
- try {
- this$1$1._actionSubscribers
- .filter(function (sub) { return sub.after; })
- .forEach(function (sub) { return sub.after(action, this$1$1.state); });
- } catch (e) {
- {
- console.warn("[vuex] error in after action subscribers: ");
- console.error(e);
- }
- }
- resolve(res);
- }, function (error) {
- try {
- this$1$1._actionSubscribers
- .filter(function (sub) { return sub.error; })
- .forEach(function (sub) { return sub.error(action, this$1$1.state, error); });
- } catch (e) {
- {
- console.warn("[vuex] error in error action subscribers: ");
- console.error(e);
- }
- }
- reject(error);
- });
- })
- };
-
- Store.prototype.subscribe = function subscribe (fn, options) {
- return genericSubscribe(fn, this._subscribers, options)
- };
-
- Store.prototype.subscribeAction = function subscribeAction (fn, options) {
- var subs = typeof fn === 'function' ? { before: fn } : fn;
- return genericSubscribe(subs, this._actionSubscribers, options)
- };
-
- Store.prototype.watch = function watch$1 (getter, cb, options) {
- var this$1$1 = this;
-
- {
- assert(typeof getter === 'function', "store.watch only accepts a function.");
- }
- return vue.watch(function () { return getter(this$1$1.state, this$1$1.getters); }, cb, Object.assign({}, options))
- };
-
- Store.prototype.replaceState = function replaceState (state) {
- var this$1$1 = this;
-
- this._withCommit(function () {
- this$1$1._state.data = state;
- });
- };
-
- Store.prototype.registerModule = function registerModule (path, rawModule, options) {
- if ( options === void 0 ) options = {};
-
- if (typeof path === 'string') { path = [path]; }
-
- {
- assert(Array.isArray(path), "module path must be a string or an Array.");
- assert(path.length > 0, 'cannot register the root module by using registerModule.');
- }
-
- this._modules.register(path, rawModule);
- installModule(this, this.state, path, this._modules.get(path), options.preserveState);
- // reset store to update getters...
- resetStoreState(this, this.state);
- };
-
- Store.prototype.unregisterModule = function unregisterModule (path) {
- var this$1$1 = this;
-
- if (typeof path === 'string') { path = [path]; }
-
- {
- assert(Array.isArray(path), "module path must be a string or an Array.");
- }
-
- this._modules.unregister(path);
- this._withCommit(function () {
- var parentState = getNestedState(this$1$1.state, path.slice(0, -1));
- delete parentState[path[path.length - 1]];
- });
- resetStore(this);
- };
-
- Store.prototype.hasModule = function hasModule (path) {
- if (typeof path === 'string') { path = [path]; }
-
- {
- assert(Array.isArray(path), "module path must be a string or an Array.");
- }
-
- return this._modules.isRegistered(path)
- };
-
- Store.prototype.hotUpdate = function hotUpdate (newOptions) {
- this._modules.update(newOptions);
- resetStore(this, true);
- };
-
- Store.prototype._withCommit = function _withCommit (fn) {
- var committing = this._committing;
- this._committing = true;
- fn();
- this._committing = committing;
- };
-
- Object.defineProperties( Store.prototype, prototypeAccessors );
-
- /**
- * Reduce the code which written in Vue.js for getting the getters
- * @param {String} [namespace] - Module's namespace
- * @param {Object|Array} getters
- * @return {Object}
- */
- var mapGetters = normalizeNamespace(function (namespace, getters) {
- var res = {};
- if (!isValidMap(getters)) {
- console.error('[vuex] mapGetters: mapper parameter must be either an Array or an Object');
- }
- normalizeMap(getters).forEach(function (ref) {
- var key = ref.key;
- var val = ref.val;
-
- // The namespace has been mutated by normalizeNamespace
- val = namespace + val;
- res[key] = function mappedGetter () {
- if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {
- return
- }
- if (!(val in this.$store.getters)) {
- console.error(("[vuex] unknown getter: " + val));
- return
- }
- return this.$store.getters[val]
- };
- // mark vuex getter for devtools
- res[key].vuex = true;
- });
- return res
- });
-
- /**
- * Reduce the code which written in Vue.js for dispatch the action
- * @param {String} [namespace] - Module's namespace
- * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.
- * @return {Object}
- */
- var mapActions = normalizeNamespace(function (namespace, actions) {
- var res = {};
- if (!isValidMap(actions)) {
- console.error('[vuex] mapActions: mapper parameter must be either an Array or an Object');
- }
- normalizeMap(actions).forEach(function (ref) {
- var key = ref.key;
- var val = ref.val;
-
- res[key] = function mappedAction () {
- var args = [], len = arguments.length;
- while ( len-- ) args[ len ] = arguments[ len ];
-
- // get dispatch function from store
- var dispatch = this.$store.dispatch;
- if (namespace) {
- var module = getModuleByNamespace(this.$store, 'mapActions', namespace);
- if (!module) {
- return
- }
- dispatch = module.context.dispatch;
- }
- return typeof val === 'function'
- ? val.apply(this, [dispatch].concat(args))
- : dispatch.apply(this.$store, [val].concat(args))
- };
- });
- return res
- });
-
- /**
- * Normalize the map
- * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]
- * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]
- * @param {Array|Object} map
- * @return {Object}
- */
- function normalizeMap (map) {
- if (!isValidMap(map)) {
- return []
- }
- return Array.isArray(map)
- ? map.map(function (key) { return ({ key: key, val: key }); })
- : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })
- }
-
- /**
- * Validate whether given map is valid or not
- * @param {*} map
- * @return {Boolean}
- */
- function isValidMap (map) {
- return Array.isArray(map) || isObject$1(map)
- }
-
- /**
- * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.
- * @param {Function} fn
- * @return {Function}
- */
- function normalizeNamespace (fn) {
- return function (namespace, map) {
- if (typeof namespace !== 'string') {
- map = namespace;
- namespace = '';
- } else if (namespace.charAt(namespace.length - 1) !== '/') {
- namespace += '/';
- }
- return fn(namespace, map)
- }
- }
-
- /**
- * Search a special module from store by namespace. if module not exist, print error message.
- * @param {Object} store
- * @param {String} helper
- * @param {String} namespace
- * @return {Object}
- */
- function getModuleByNamespace (store, helper, namespace) {
- var module = store._modulesNamespaceMap[namespace];
- if (!module) {
- console.error(("[vuex] module namespace not found in " + helper + "(): " + namespace));
- }
- return module
- }
-
- function bind(fn, thisArg) {
- return function wrap() {
- return fn.apply(thisArg, arguments);
- };
- }
-
- // utils is a library of generic helper functions non-specific to axios
-
- const {toString: toString$1} = Object.prototype;
- const {getPrototypeOf} = Object;
-
- const kindOf = (cache => thing => {
- const str = toString$1.call(thing);
- return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
- })(Object.create(null));
-
- const kindOfTest = (type) => {
- type = type.toLowerCase();
- return (thing) => kindOf(thing) === type
- };
-
- const typeOfTest = type => thing => typeof thing === type;
-
- /**
- * Determine if a value is an Array
- *
- * @param {Object} val The value to test
- *
- * @returns {boolean} True if value is an Array, otherwise false
- */
- const {isArray: isArray$1} = Array;
-
- /**
- * Determine if a value is undefined
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if the value is undefined, otherwise false
- */
- const isUndefined = typeOfTest('undefined');
-
- /**
- * Determine if a value is a Buffer
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is a Buffer, otherwise false
- */
- function isBuffer$1(val) {
- return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
- && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);
- }
-
- /**
- * Determine if a value is an ArrayBuffer
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is an ArrayBuffer, otherwise false
- */
- const isArrayBuffer = kindOfTest('ArrayBuffer');
-
-
- /**
- * Determine if a value is a view on an ArrayBuffer
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
- */
- function isArrayBufferView(val) {
- let result;
- if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
- result = ArrayBuffer.isView(val);
- } else {
- result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));
- }
- return result;
- }
-
- /**
- * Determine if a value is a String
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is a String, otherwise false
- */
- const isString = typeOfTest('string');
-
- /**
- * Determine if a value is a Function
- *
- * @param {*} val The value to test
- * @returns {boolean} True if value is a Function, otherwise false
- */
- const isFunction = typeOfTest('function');
-
- /**
- * Determine if a value is a Number
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is a Number, otherwise false
- */
- const isNumber = typeOfTest('number');
-
- /**
- * Determine if a value is an Object
- *
- * @param {*} thing The value to test
- *
- * @returns {boolean} True if value is an Object, otherwise false
- */
- const isObject = (thing) => thing !== null && typeof thing === 'object';
-
- /**
- * Determine if a value is a Boolean
- *
- * @param {*} thing The value to test
- * @returns {boolean} True if value is a Boolean, otherwise false
- */
- const isBoolean = thing => thing === true || thing === false;
-
- /**
- * Determine if a value is a plain Object
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is a plain Object, otherwise false
- */
- const isPlainObject = (val) => {
- if (kindOf(val) !== 'object') {
- return false;
- }
-
- const prototype = getPrototypeOf(val);
- return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);
- };
-
- /**
- * Determine if a value is a Date
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is a Date, otherwise false
- */
- const isDate = kindOfTest('Date');
-
- /**
- * Determine if a value is a File
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is a File, otherwise false
- */
- const isFile = kindOfTest('File');
-
- /**
- * Determine if a value is a Blob
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is a Blob, otherwise false
- */
- const isBlob = kindOfTest('Blob');
-
- /**
- * Determine if a value is a FileList
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is a File, otherwise false
- */
- const isFileList = kindOfTest('FileList');
-
- /**
- * Determine if a value is a Stream
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is a Stream, otherwise false
- */
- const isStream = (val) => isObject(val) && isFunction(val.pipe);
-
- /**
- * Determine if a value is a FormData
- *
- * @param {*} thing The value to test
- *
- * @returns {boolean} True if value is an FormData, otherwise false
- */
- const isFormData = (thing) => {
- let kind;
- return thing && (
- (typeof FormData === 'function' && thing instanceof FormData) || (
- isFunction(thing.append) && (
- (kind = kindOf(thing)) === 'formdata' ||
- // detect form-data instance
- (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')
- )
- )
- )
- };
-
- /**
- * Determine if a value is a URLSearchParams object
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is a URLSearchParams object, otherwise false
- */
- const isURLSearchParams = kindOfTest('URLSearchParams');
-
- /**
- * Trim excess whitespace off the beginning and end of a string
- *
- * @param {String} str The String to trim
- *
- * @returns {String} The String freed of excess whitespace
- */
- const trim = (str) => str.trim ?
- str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
-
- /**
- * Iterate over an Array or an Object invoking a function for each item.
- *
- * If `obj` is an Array callback will be called passing
- * the value, index, and complete array for each item.
- *
- * If 'obj' is an Object callback will be called passing
- * the value, key, and complete object for each property.
- *
- * @param {Object|Array} obj The object to iterate
- * @param {Function} fn The callback to invoke for each item
- *
- * @param {Boolean} [allOwnKeys = false]
- * @returns {any}
- */
- function forEach(obj, fn, {allOwnKeys = false} = {}) {
- // Don't bother if no value provided
- if (obj === null || typeof obj === 'undefined') {
- return;
- }
-
- let i;
- let l;
-
- // Force an array if not already something iterable
- if (typeof obj !== 'object') {
- /*eslint no-param-reassign:0*/
- obj = [obj];
- }
-
- if (isArray$1(obj)) {
- // Iterate over array values
- for (i = 0, l = obj.length; i < l; i++) {
- fn.call(null, obj[i], i, obj);
- }
- } else {
- // Iterate over object keys
- const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);
- const len = keys.length;
- let key;
-
- for (i = 0; i < len; i++) {
- key = keys[i];
- fn.call(null, obj[key], key, obj);
- }
- }
- }
-
- function findKey(obj, key) {
- key = key.toLowerCase();
- const keys = Object.keys(obj);
- let i = keys.length;
- let _key;
- while (i-- > 0) {
- _key = keys[i];
- if (key === _key.toLowerCase()) {
- return _key;
- }
- }
- return null;
- }
-
- const _global = (() => {
- /*eslint no-undef:0*/
- if (typeof globalThis !== "undefined") return globalThis;
- return typeof self !== "undefined" ? self : (typeof window !== 'undefined' ? window : global$1)
- })();
-
- const isContextDefined = (context) => !isUndefined(context) && context !== _global;
-
- /**
- * Accepts varargs expecting each argument to be an object, then
- * immutably merges the properties of each object and returns result.
- *
- * When multiple objects contain the same key the later object in
- * the arguments list will take precedence.
- *
- * Example:
- *
- * ```js
- * var result = merge({foo: 123}, {foo: 456});
- * console.log(result.foo); // outputs 456
- * ```
- *
- * @param {Object} obj1 Object to merge
- *
- * @returns {Object} Result of all merge properties
- */
- function merge(/* obj1, obj2, obj3, ... */) {
- const {caseless} = isContextDefined(this) && this || {};
- const result = {};
- const assignValue = (val, key) => {
- const targetKey = caseless && findKey(result, key) || key;
- if (isPlainObject(result[targetKey]) && isPlainObject(val)) {
- result[targetKey] = merge(result[targetKey], val);
- } else if (isPlainObject(val)) {
- result[targetKey] = merge({}, val);
- } else if (isArray$1(val)) {
- result[targetKey] = val.slice();
- } else {
- result[targetKey] = val;
- }
- };
-
- for (let i = 0, l = arguments.length; i < l; i++) {
- arguments[i] && forEach(arguments[i], assignValue);
- }
- return result;
- }
-
- /**
- * Extends object a by mutably adding to it the properties of object b.
- *
- * @param {Object} a The object to be extended
- * @param {Object} b The object to copy properties from
- * @param {Object} thisArg The object to bind function to
- *
- * @param {Boolean} [allOwnKeys]
- * @returns {Object} The resulting value of object a
- */
- const extend = (a, b, thisArg, {allOwnKeys}= {}) => {
- forEach(b, (val, key) => {
- if (thisArg && isFunction(val)) {
- a[key] = bind(val, thisArg);
- } else {
- a[key] = val;
- }
- }, {allOwnKeys});
- return a;
- };
-
- /**
- * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
- *
- * @param {string} content with BOM
- *
- * @returns {string} content value without BOM
- */
- const stripBOM = (content) => {
- if (content.charCodeAt(0) === 0xFEFF) {
- content = content.slice(1);
- }
- return content;
- };
-
- /**
- * Inherit the prototype methods from one constructor into another
- * @param {function} constructor
- * @param {function} superConstructor
- * @param {object} [props]
- * @param {object} [descriptors]
- *
- * @returns {void}
- */
- const inherits = (constructor, superConstructor, props, descriptors) => {
- constructor.prototype = Object.create(superConstructor.prototype, descriptors);
- constructor.prototype.constructor = constructor;
- Object.defineProperty(constructor, 'super', {
- value: superConstructor.prototype
- });
- props && Object.assign(constructor.prototype, props);
- };
-
- /**
- * Resolve object with deep prototype chain to a flat object
- * @param {Object} sourceObj source object
- * @param {Object} [destObj]
- * @param {Function|Boolean} [filter]
- * @param {Function} [propFilter]
- *
- * @returns {Object}
- */
- const toFlatObject = (sourceObj, destObj, filter, propFilter) => {
- let props;
- let i;
- let prop;
- const merged = {};
-
- destObj = destObj || {};
- // eslint-disable-next-line no-eq-null,eqeqeq
- if (sourceObj == null) return destObj;
-
- do {
- props = Object.getOwnPropertyNames(sourceObj);
- i = props.length;
- while (i-- > 0) {
- prop = props[i];
- if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {
- destObj[prop] = sourceObj[prop];
- merged[prop] = true;
- }
- }
- sourceObj = filter !== false && getPrototypeOf(sourceObj);
- } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);
-
- return destObj;
- };
-
- /**
- * Determines whether a string ends with the characters of a specified string
- *
- * @param {String} str
- * @param {String} searchString
- * @param {Number} [position= 0]
- *
- * @returns {boolean}
- */
- const endsWith = (str, searchString, position) => {
- str = String(str);
- if (position === undefined || position > str.length) {
- position = str.length;
- }
- position -= searchString.length;
- const lastIndex = str.indexOf(searchString, position);
- return lastIndex !== -1 && lastIndex === position;
- };
-
-
- /**
- * Returns new array from array like object or null if failed
- *
- * @param {*} [thing]
- *
- * @returns {?Array}
- */
- const toArray = (thing) => {
- if (!thing) return null;
- if (isArray$1(thing)) return thing;
- let i = thing.length;
- if (!isNumber(i)) return null;
- const arr = new Array(i);
- while (i-- > 0) {
- arr[i] = thing[i];
- }
- return arr;
- };
-
- /**
- * Checking if the Uint8Array exists and if it does, it returns a function that checks if the
- * thing passed in is an instance of Uint8Array
- *
- * @param {TypedArray}
- *
- * @returns {Array}
- */
- // eslint-disable-next-line func-names
- const isTypedArray = (TypedArray => {
- // eslint-disable-next-line func-names
- return thing => {
- return TypedArray && thing instanceof TypedArray;
- };
- })(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));
-
- /**
- * For each entry in the object, call the function with the key and value.
- *
- * @param {Object} obj - The object to iterate over.
- * @param {Function} fn - The function to call for each entry.
- *
- * @returns {void}
- */
- const forEachEntry = (obj, fn) => {
- const generator = obj && obj[Symbol.iterator];
-
- const iterator = generator.call(obj);
-
- let result;
-
- while ((result = iterator.next()) && !result.done) {
- const pair = result.value;
- fn.call(obj, pair[0], pair[1]);
- }
- };
-
- /**
- * It takes a regular expression and a string, and returns an array of all the matches
- *
- * @param {string} regExp - The regular expression to match against.
- * @param {string} str - The string to search.
- *
- * @returns {Array}
- */
- const matchAll = (regExp, str) => {
- let matches;
- const arr = [];
-
- while ((matches = regExp.exec(str)) !== null) {
- arr.push(matches);
- }
-
- return arr;
- };
-
- /* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */
- const isHTMLForm = kindOfTest('HTMLFormElement');
-
- const toCamelCase = str => {
- return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,
- function replacer(m, p1, p2) {
- return p1.toUpperCase() + p2;
- }
- );
- };
-
- /* Creating a function that will check if an object has a property. */
- const hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);
-
- /**
- * Determine if a value is a RegExp object
- *
- * @param {*} val The value to test
- *
- * @returns {boolean} True if value is a RegExp object, otherwise false
- */
- const isRegExp = kindOfTest('RegExp');
-
- const reduceDescriptors = (obj, reducer) => {
- const descriptors = Object.getOwnPropertyDescriptors(obj);
- const reducedDescriptors = {};
-
- forEach(descriptors, (descriptor, name) => {
- let ret;
- if ((ret = reducer(descriptor, name, obj)) !== false) {
- reducedDescriptors[name] = ret || descriptor;
- }
- });
-
- Object.defineProperties(obj, reducedDescriptors);
- };
-
- /**
- * Makes all methods read-only
- * @param {Object} obj
- */
-
- const freezeMethods = (obj) => {
- reduceDescriptors(obj, (descriptor, name) => {
- // skip restricted props in strict mode
- if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {
- return false;
- }
-
- const value = obj[name];
-
- if (!isFunction(value)) return;
-
- descriptor.enumerable = false;
-
- if ('writable' in descriptor) {
- descriptor.writable = false;
- return;
- }
-
- if (!descriptor.set) {
- descriptor.set = () => {
- throw Error('Can not rewrite read-only method \'' + name + '\'');
- };
- }
- });
- };
-
- const toObjectSet = (arrayOrString, delimiter) => {
- const obj = {};
-
- const define = (arr) => {
- arr.forEach(value => {
- obj[value] = true;
- });
- };
-
- isArray$1(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));
-
- return obj;
- };
-
- const noop = () => {};
-
- const toFiniteNumber = (value, defaultValue) => {
- value = +value;
- return Number.isFinite(value) ? value : defaultValue;
- };
-
- const ALPHA = 'abcdefghijklmnopqrstuvwxyz';
-
- const DIGIT = '0123456789';
-
- const ALPHABET = {
- DIGIT,
- ALPHA,
- ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT
- };
-
- const generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {
- let str = '';
- const {length} = alphabet;
- while (size--) {
- str += alphabet[Math.random() * length|0];
- }
-
- return str;
- };
-
- /**
- * If the thing is a FormData object, return true, otherwise return false.
- *
- * @param {unknown} thing - The thing to check.
- *
- * @returns {boolean}
- */
- function isSpecCompliantForm(thing) {
- return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);
- }
-
- const toJSONObject = (obj) => {
- const stack = new Array(10);
-
- const visit = (source, i) => {
-
- if (isObject(source)) {
- if (stack.indexOf(source) >= 0) {
- return;
- }
-
- if(!('toJSON' in source)) {
- stack[i] = source;
- const target = isArray$1(source) ? [] : {};
-
- forEach(source, (value, key) => {
- const reducedValue = visit(value, i + 1);
- !isUndefined(reducedValue) && (target[key] = reducedValue);
- });
-
- stack[i] = undefined;
-
- return target;
- }
- }
-
- return source;
- };
-
- return visit(obj, 0);
- };
-
- const isAsyncFn = kindOfTest('AsyncFunction');
-
- const isThenable = (thing) =>
- thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);
-
- var utils$1 = {
- isArray: isArray$1,
- isArrayBuffer,
- isBuffer: isBuffer$1,
- isFormData,
- isArrayBufferView,
- isString,
- isNumber,
- isBoolean,
- isObject,
- isPlainObject,
- isUndefined,
- isDate,
- isFile,
- isBlob,
- isRegExp,
- isFunction,
- isStream,
- isURLSearchParams,
- isTypedArray,
- isFileList,
- forEach,
- merge,
- extend,
- trim,
- stripBOM,
- inherits,
- toFlatObject,
- kindOf,
- kindOfTest,
- endsWith,
- toArray,
- forEachEntry,
- matchAll,
- isHTMLForm,
- hasOwnProperty,
- hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection
- reduceDescriptors,
- freezeMethods,
- toObjectSet,
- toCamelCase,
- noop,
- toFiniteNumber,
- findKey,
- global: _global,
- isContextDefined,
- ALPHABET,
- generateString,
- isSpecCompliantForm,
- toJSONObject,
- isAsyncFn,
- isThenable
- };
-
- var lookup = [];
- var revLookup = [];
- var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
- var inited = false;
- function init () {
- inited = true;
- var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
- for (var i = 0, len = code.length; i < len; ++i) {
- lookup[i] = code[i];
- revLookup[code.charCodeAt(i)] = i;
- }
-
- revLookup['-'.charCodeAt(0)] = 62;
- revLookup['_'.charCodeAt(0)] = 63;
- }
-
- function toByteArray (b64) {
- if (!inited) {
- init();
- }
- var i, j, l, tmp, placeHolders, arr;
- var len = b64.length;
-
- if (len % 4 > 0) {
- throw new Error('Invalid string. Length must be a multiple of 4')
- }
-
- // the number of equal signs (place holders)
- // if there are two placeholders, than the two characters before it
- // represent one byte
- // if there is only one, then the three characters before it represent 2 bytes
- // this is just a cheap hack to not do indexOf twice
- placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0;
-
- // base64 is 4/3 + up to two characters of the original data
- arr = new Arr(len * 3 / 4 - placeHolders);
-
- // if there are placeholders, only get up to the last complete 4 chars
- l = placeHolders > 0 ? len - 4 : len;
-
- var L = 0;
-
- for (i = 0, j = 0; i < l; i += 4, j += 3) {
- tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)];
- arr[L++] = (tmp >> 16) & 0xFF;
- arr[L++] = (tmp >> 8) & 0xFF;
- arr[L++] = tmp & 0xFF;
- }
-
- if (placeHolders === 2) {
- tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4);
- arr[L++] = tmp & 0xFF;
- } else if (placeHolders === 1) {
- tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2);
- arr[L++] = (tmp >> 8) & 0xFF;
- arr[L++] = tmp & 0xFF;
- }
-
- return arr
- }
-
- function tripletToBase64 (num) {
- return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
- }
-
- function encodeChunk (uint8, start, end) {
- var tmp;
- var output = [];
- for (var i = start; i < end; i += 3) {
- tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);
- output.push(tripletToBase64(tmp));
- }
- return output.join('')
- }
-
- function fromByteArray (uint8) {
- if (!inited) {
- init();
- }
- var tmp;
- var len = uint8.length;
- var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes
- var output = '';
- var parts = [];
- var maxChunkLength = 16383; // must be multiple of 3
-
- // go through the array every three bytes, we'll deal with trailing stuff later
- for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
- parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));
- }
-
- // pad the end with zeros, but make sure to not forget the extra bytes
- if (extraBytes === 1) {
- tmp = uint8[len - 1];
- output += lookup[tmp >> 2];
- output += lookup[(tmp << 4) & 0x3F];
- output += '==';
- } else if (extraBytes === 2) {
- tmp = (uint8[len - 2] << 8) + (uint8[len - 1]);
- output += lookup[tmp >> 10];
- output += lookup[(tmp >> 4) & 0x3F];
- output += lookup[(tmp << 2) & 0x3F];
- output += '=';
- }
-
- parts.push(output);
-
- return parts.join('')
- }
-
- function read (buffer, offset, isLE, mLen, nBytes) {
- var e, m;
- var eLen = nBytes * 8 - mLen - 1;
- var eMax = (1 << eLen) - 1;
- var eBias = eMax >> 1;
- var nBits = -7;
- var i = isLE ? (nBytes - 1) : 0;
- var d = isLE ? -1 : 1;
- var s = buffer[offset + i];
-
- i += d;
-
- e = s & ((1 << (-nBits)) - 1);
- s >>= (-nBits);
- nBits += eLen;
- for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
-
- m = e & ((1 << (-nBits)) - 1);
- e >>= (-nBits);
- nBits += mLen;
- for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
-
- if (e === 0) {
- e = 1 - eBias;
- } else if (e === eMax) {
- return m ? NaN : ((s ? -1 : 1) * Infinity)
- } else {
- m = m + Math.pow(2, mLen);
- e = e - eBias;
- }
- return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
- }
-
- function write (buffer, value, offset, isLE, mLen, nBytes) {
- var e, m, c;
- var eLen = nBytes * 8 - mLen - 1;
- var eMax = (1 << eLen) - 1;
- var eBias = eMax >> 1;
- var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);
- var i = isLE ? 0 : (nBytes - 1);
- var d = isLE ? 1 : -1;
- var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
-
- value = Math.abs(value);
-
- if (isNaN(value) || value === Infinity) {
- m = isNaN(value) ? 1 : 0;
- e = eMax;
- } else {
- e = Math.floor(Math.log(value) / Math.LN2);
- if (value * (c = Math.pow(2, -e)) < 1) {
- e--;
- c *= 2;
- }
- if (e + eBias >= 1) {
- value += rt / c;
- } else {
- value += rt * Math.pow(2, 1 - eBias);
- }
- if (value * c >= 2) {
- e++;
- c /= 2;
- }
-
- if (e + eBias >= eMax) {
- m = 0;
- e = eMax;
- } else if (e + eBias >= 1) {
- m = (value * c - 1) * Math.pow(2, mLen);
- e = e + eBias;
- } else {
- m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
- e = 0;
- }
- }
-
- for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
-
- e = (e << mLen) | m;
- eLen += mLen;
- for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
-
- buffer[offset + i - d] |= s * 128;
- }
-
- var toString = {}.toString;
-
- var isArray = Array.isArray || function (arr) {
- return toString.call(arr) == '[object Array]';
- };
-
- var INSPECT_MAX_BYTES = 50;
-
- /**
- * If `Buffer.TYPED_ARRAY_SUPPORT`:
- * === true Use Uint8Array implementation (fastest)
- * === false Use Object implementation (most compatible, even IE6)
- *
- * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
- * Opera 11.6+, iOS 4.2+.
- *
- * Due to various browser bugs, sometimes the Object implementation will be used even
- * when the browser supports typed arrays.
- *
- * Note:
- *
- * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
- * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
- *
- * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
- *
- * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
- * incorrect length in some situations.
-
- * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
- * get the Object implementation, which is slower but behaves correctly.
- */
- Buffer.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined
- ? global$1.TYPED_ARRAY_SUPPORT
- : true;
-
- /*
- * Export kMaxLength after typed array support is determined.
- */
- kMaxLength();
-
- function kMaxLength () {
- return Buffer.TYPED_ARRAY_SUPPORT
- ? 0x7fffffff
- : 0x3fffffff
- }
-
- function createBuffer (that, length) {
- if (kMaxLength() < length) {
- throw new RangeError('Invalid typed array length')
- }
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- // Return an augmented `Uint8Array` instance, for best performance
- that = new Uint8Array(length);
- that.__proto__ = Buffer.prototype;
- } else {
- // Fallback: Return an object instance of the Buffer class
- if (that === null) {
- that = new Buffer(length);
- }
- that.length = length;
- }
-
- return that
- }
-
- /**
- * The Buffer constructor returns instances of `Uint8Array` that have their
- * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
- * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
- * and the `Uint8Array` methods. Square bracket notation works as expected -- it
- * returns a single octet.
- *
- * The `Uint8Array` prototype remains unmodified.
- */
-
- function Buffer (arg, encodingOrOffset, length) {
- if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
- return new Buffer(arg, encodingOrOffset, length)
- }
-
- // Common case.
- if (typeof arg === 'number') {
- if (typeof encodingOrOffset === 'string') {
- throw new Error(
- 'If encoding is specified then the first argument must be a string'
- )
- }
- return allocUnsafe(this, arg)
- }
- return from(this, arg, encodingOrOffset, length)
- }
-
- Buffer.poolSize = 8192; // not used by this implementation
-
- // TODO: Legacy, not needed anymore. Remove in next major version.
- Buffer._augment = function (arr) {
- arr.__proto__ = Buffer.prototype;
- return arr
- };
-
- function from (that, value, encodingOrOffset, length) {
- if (typeof value === 'number') {
- throw new TypeError('"value" argument must not be a number')
- }
-
- if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
- return fromArrayBuffer(that, value, encodingOrOffset, length)
- }
-
- if (typeof value === 'string') {
- return fromString(that, value, encodingOrOffset)
- }
-
- return fromObject(that, value)
- }
-
- /**
- * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
- * if value is a number.
- * Buffer.from(str[, encoding])
- * Buffer.from(array)
- * Buffer.from(buffer)
- * Buffer.from(arrayBuffer[, byteOffset[, length]])
- **/
- Buffer.from = function (value, encodingOrOffset, length) {
- return from(null, value, encodingOrOffset, length)
- };
-
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- Buffer.prototype.__proto__ = Uint8Array.prototype;
- Buffer.__proto__ = Uint8Array;
- if (typeof Symbol !== 'undefined' && Symbol.species &&
- Buffer[Symbol.species] === Buffer) ;
- }
-
- function assertSize (size) {
- if (typeof size !== 'number') {
- throw new TypeError('"size" argument must be a number')
- } else if (size < 0) {
- throw new RangeError('"size" argument must not be negative')
- }
- }
-
- function alloc (that, size, fill, encoding) {
- assertSize(size);
- if (size <= 0) {
- return createBuffer(that, size)
- }
- if (fill !== undefined) {
- // Only pay attention to encoding if it's a string. This
- // prevents accidentally sending in a number that would
- // be interpretted as a start offset.
- return typeof encoding === 'string'
- ? createBuffer(that, size).fill(fill, encoding)
- : createBuffer(that, size).fill(fill)
- }
- return createBuffer(that, size)
- }
-
- /**
- * Creates a new filled Buffer instance.
- * alloc(size[, fill[, encoding]])
- **/
- Buffer.alloc = function (size, fill, encoding) {
- return alloc(null, size, fill, encoding)
- };
-
- function allocUnsafe (that, size) {
- assertSize(size);
- that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);
- if (!Buffer.TYPED_ARRAY_SUPPORT) {
- for (var i = 0; i < size; ++i) {
- that[i] = 0;
- }
- }
- return that
- }
-
- /**
- * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
- * */
- Buffer.allocUnsafe = function (size) {
- return allocUnsafe(null, size)
- };
- /**
- * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
- */
- Buffer.allocUnsafeSlow = function (size) {
- return allocUnsafe(null, size)
- };
-
- function fromString (that, string, encoding) {
- if (typeof encoding !== 'string' || encoding === '') {
- encoding = 'utf8';
- }
-
- if (!Buffer.isEncoding(encoding)) {
- throw new TypeError('"encoding" must be a valid string encoding')
- }
-
- var length = byteLength(string, encoding) | 0;
- that = createBuffer(that, length);
-
- var actual = that.write(string, encoding);
-
- if (actual !== length) {
- // Writing a hex string, for example, that contains invalid characters will
- // cause everything after the first invalid character to be ignored. (e.g.
- // 'abxxcd' will be treated as 'ab')
- that = that.slice(0, actual);
- }
-
- return that
- }
-
- function fromArrayLike (that, array) {
- var length = array.length < 0 ? 0 : checked(array.length) | 0;
- that = createBuffer(that, length);
- for (var i = 0; i < length; i += 1) {
- that[i] = array[i] & 255;
- }
- return that
- }
-
- function fromArrayBuffer (that, array, byteOffset, length) {
- array.byteLength; // this throws if `array` is not a valid ArrayBuffer
-
- if (byteOffset < 0 || array.byteLength < byteOffset) {
- throw new RangeError('\'offset\' is out of bounds')
- }
-
- if (array.byteLength < byteOffset + (length || 0)) {
- throw new RangeError('\'length\' is out of bounds')
- }
-
- if (byteOffset === undefined && length === undefined) {
- array = new Uint8Array(array);
- } else if (length === undefined) {
- array = new Uint8Array(array, byteOffset);
- } else {
- array = new Uint8Array(array, byteOffset, length);
- }
-
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- // Return an augmented `Uint8Array` instance, for best performance
- that = array;
- that.__proto__ = Buffer.prototype;
- } else {
- // Fallback: Return an object instance of the Buffer class
- that = fromArrayLike(that, array);
- }
- return that
- }
-
- function fromObject (that, obj) {
- if (internalIsBuffer(obj)) {
- var len = checked(obj.length) | 0;
- that = createBuffer(that, len);
-
- if (that.length === 0) {
- return that
- }
-
- obj.copy(that, 0, 0, len);
- return that
- }
-
- if (obj) {
- if ((typeof ArrayBuffer !== 'undefined' &&
- obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
- if (typeof obj.length !== 'number' || isnan(obj.length)) {
- return createBuffer(that, 0)
- }
- return fromArrayLike(that, obj)
- }
-
- if (obj.type === 'Buffer' && isArray(obj.data)) {
- return fromArrayLike(that, obj.data)
- }
- }
-
- throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
- }
-
- function checked (length) {
- // Note: cannot use `length < kMaxLength()` here because that fails when
- // length is NaN (which is otherwise coerced to zero.)
- if (length >= kMaxLength()) {
- throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
- 'size: 0x' + kMaxLength().toString(16) + ' bytes')
- }
- return length | 0
- }
- Buffer.isBuffer = isBuffer;
- function internalIsBuffer (b) {
- return !!(b != null && b._isBuffer)
- }
-
- Buffer.compare = function compare (a, b) {
- if (!internalIsBuffer(a) || !internalIsBuffer(b)) {
- throw new TypeError('Arguments must be Buffers')
- }
-
- if (a === b) return 0
-
- var x = a.length;
- var y = b.length;
-
- for (var i = 0, len = Math.min(x, y); i < len; ++i) {
- if (a[i] !== b[i]) {
- x = a[i];
- y = b[i];
- break
- }
- }
-
- if (x < y) return -1
- if (y < x) return 1
- return 0
- };
-
- Buffer.isEncoding = function isEncoding (encoding) {
- switch (String(encoding).toLowerCase()) {
- case 'hex':
- case 'utf8':
- case 'utf-8':
- case 'ascii':
- case 'latin1':
- case 'binary':
- case 'base64':
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return true
- default:
- return false
- }
- };
-
- Buffer.concat = function concat (list, length) {
- if (!isArray(list)) {
- throw new TypeError('"list" argument must be an Array of Buffers')
- }
-
- if (list.length === 0) {
- return Buffer.alloc(0)
- }
-
- var i;
- if (length === undefined) {
- length = 0;
- for (i = 0; i < list.length; ++i) {
- length += list[i].length;
- }
- }
-
- var buffer = Buffer.allocUnsafe(length);
- var pos = 0;
- for (i = 0; i < list.length; ++i) {
- var buf = list[i];
- if (!internalIsBuffer(buf)) {
- throw new TypeError('"list" argument must be an Array of Buffers')
- }
- buf.copy(buffer, pos);
- pos += buf.length;
- }
- return buffer
- };
-
- function byteLength (string, encoding) {
- if (internalIsBuffer(string)) {
- return string.length
- }
- if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
- (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
- return string.byteLength
- }
- if (typeof string !== 'string') {
- string = '' + string;
- }
-
- var len = string.length;
- if (len === 0) return 0
-
- // Use a for loop to avoid recursion
- var loweredCase = false;
- for (;;) {
- switch (encoding) {
- case 'ascii':
- case 'latin1':
- case 'binary':
- return len
- case 'utf8':
- case 'utf-8':
- case undefined:
- return utf8ToBytes(string).length
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return len * 2
- case 'hex':
- return len >>> 1
- case 'base64':
- return base64ToBytes(string).length
- default:
- if (loweredCase) return utf8ToBytes(string).length // assume utf8
- encoding = ('' + encoding).toLowerCase();
- loweredCase = true;
- }
- }
- }
- Buffer.byteLength = byteLength;
-
- function slowToString (encoding, start, end) {
- var loweredCase = false;
-
- // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
- // property of a typed array.
-
- // This behaves neither like String nor Uint8Array in that we set start/end
- // to their upper/lower bounds if the value passed is out of range.
- // undefined is handled specially as per ECMA-262 6th Edition,
- // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
- if (start === undefined || start < 0) {
- start = 0;
- }
- // Return early if start > this.length. Done here to prevent potential uint32
- // coercion fail below.
- if (start > this.length) {
- return ''
- }
-
- if (end === undefined || end > this.length) {
- end = this.length;
- }
-
- if (end <= 0) {
- return ''
- }
-
- // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
- end >>>= 0;
- start >>>= 0;
-
- if (end <= start) {
- return ''
- }
-
- if (!encoding) encoding = 'utf8';
-
- while (true) {
- switch (encoding) {
- case 'hex':
- return hexSlice(this, start, end)
-
- case 'utf8':
- case 'utf-8':
- return utf8Slice(this, start, end)
-
- case 'ascii':
- return asciiSlice(this, start, end)
-
- case 'latin1':
- case 'binary':
- return latin1Slice(this, start, end)
-
- case 'base64':
- return base64Slice(this, start, end)
-
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return utf16leSlice(this, start, end)
-
- default:
- if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
- encoding = (encoding + '').toLowerCase();
- loweredCase = true;
- }
- }
- }
-
- // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
- // Buffer instances.
- Buffer.prototype._isBuffer = true;
-
- function swap (b, n, m) {
- var i = b[n];
- b[n] = b[m];
- b[m] = i;
- }
-
- Buffer.prototype.swap16 = function swap16 () {
- var len = this.length;
- if (len % 2 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 16-bits')
- }
- for (var i = 0; i < len; i += 2) {
- swap(this, i, i + 1);
- }
- return this
- };
-
- Buffer.prototype.swap32 = function swap32 () {
- var len = this.length;
- if (len % 4 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 32-bits')
- }
- for (var i = 0; i < len; i += 4) {
- swap(this, i, i + 3);
- swap(this, i + 1, i + 2);
- }
- return this
- };
-
- Buffer.prototype.swap64 = function swap64 () {
- var len = this.length;
- if (len % 8 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 64-bits')
- }
- for (var i = 0; i < len; i += 8) {
- swap(this, i, i + 7);
- swap(this, i + 1, i + 6);
- swap(this, i + 2, i + 5);
- swap(this, i + 3, i + 4);
- }
- return this
- };
-
- Buffer.prototype.toString = function toString () {
- var length = this.length | 0;
- if (length === 0) return ''
- if (arguments.length === 0) return utf8Slice(this, 0, length)
- return slowToString.apply(this, arguments)
- };
-
- Buffer.prototype.equals = function equals (b) {
- if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')
- if (this === b) return true
- return Buffer.compare(this, b) === 0
- };
-
- Buffer.prototype.inspect = function inspect () {
- var str = '';
- var max = INSPECT_MAX_BYTES;
- if (this.length > 0) {
- str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');
- if (this.length > max) str += ' ... ';
- }
- return ''
- };
-
- Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
- if (!internalIsBuffer(target)) {
- throw new TypeError('Argument must be a Buffer')
- }
-
- if (start === undefined) {
- start = 0;
- }
- if (end === undefined) {
- end = target ? target.length : 0;
- }
- if (thisStart === undefined) {
- thisStart = 0;
- }
- if (thisEnd === undefined) {
- thisEnd = this.length;
- }
-
- if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
- throw new RangeError('out of range index')
- }
-
- if (thisStart >= thisEnd && start >= end) {
- return 0
- }
- if (thisStart >= thisEnd) {
- return -1
- }
- if (start >= end) {
- return 1
- }
-
- start >>>= 0;
- end >>>= 0;
- thisStart >>>= 0;
- thisEnd >>>= 0;
-
- if (this === target) return 0
-
- var x = thisEnd - thisStart;
- var y = end - start;
- var len = Math.min(x, y);
-
- var thisCopy = this.slice(thisStart, thisEnd);
- var targetCopy = target.slice(start, end);
-
- for (var i = 0; i < len; ++i) {
- if (thisCopy[i] !== targetCopy[i]) {
- x = thisCopy[i];
- y = targetCopy[i];
- break
- }
- }
-
- if (x < y) return -1
- if (y < x) return 1
- return 0
- };
-
- // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
- // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
- //
- // Arguments:
- // - buffer - a Buffer to search
- // - val - a string, Buffer, or number
- // - byteOffset - an index into `buffer`; will be clamped to an int32
- // - encoding - an optional encoding, relevant is val is a string
- // - dir - true for indexOf, false for lastIndexOf
- function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
- // Empty buffer means no match
- if (buffer.length === 0) return -1
-
- // Normalize byteOffset
- if (typeof byteOffset === 'string') {
- encoding = byteOffset;
- byteOffset = 0;
- } else if (byteOffset > 0x7fffffff) {
- byteOffset = 0x7fffffff;
- } else if (byteOffset < -0x80000000) {
- byteOffset = -0x80000000;
- }
- byteOffset = +byteOffset; // Coerce to Number.
- if (isNaN(byteOffset)) {
- // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
- byteOffset = dir ? 0 : (buffer.length - 1);
- }
-
- // Normalize byteOffset: negative offsets start from the end of the buffer
- if (byteOffset < 0) byteOffset = buffer.length + byteOffset;
- if (byteOffset >= buffer.length) {
- if (dir) return -1
- else byteOffset = buffer.length - 1;
- } else if (byteOffset < 0) {
- if (dir) byteOffset = 0;
- else return -1
- }
-
- // Normalize val
- if (typeof val === 'string') {
- val = Buffer.from(val, encoding);
- }
-
- // Finally, search either indexOf (if dir is true) or lastIndexOf
- if (internalIsBuffer(val)) {
- // Special case: looking for empty string/buffer always fails
- if (val.length === 0) {
- return -1
- }
- return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
- } else if (typeof val === 'number') {
- val = val & 0xFF; // Search for a byte value [0-255]
- if (Buffer.TYPED_ARRAY_SUPPORT &&
- typeof Uint8Array.prototype.indexOf === 'function') {
- if (dir) {
- return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
- } else {
- return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
- }
- }
- return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
- }
-
- throw new TypeError('val must be string, number or Buffer')
- }
-
- function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
- var indexSize = 1;
- var arrLength = arr.length;
- var valLength = val.length;
-
- if (encoding !== undefined) {
- encoding = String(encoding).toLowerCase();
- if (encoding === 'ucs2' || encoding === 'ucs-2' ||
- encoding === 'utf16le' || encoding === 'utf-16le') {
- if (arr.length < 2 || val.length < 2) {
- return -1
- }
- indexSize = 2;
- arrLength /= 2;
- valLength /= 2;
- byteOffset /= 2;
- }
- }
-
- function read (buf, i) {
- if (indexSize === 1) {
- return buf[i]
- } else {
- return buf.readUInt16BE(i * indexSize)
- }
- }
-
- var i;
- if (dir) {
- var foundIndex = -1;
- for (i = byteOffset; i < arrLength; i++) {
- if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
- if (foundIndex === -1) foundIndex = i;
- if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
- } else {
- if (foundIndex !== -1) i -= i - foundIndex;
- foundIndex = -1;
- }
- }
- } else {
- if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;
- for (i = byteOffset; i >= 0; i--) {
- var found = true;
- for (var j = 0; j < valLength; j++) {
- if (read(arr, i + j) !== read(val, j)) {
- found = false;
- break
- }
- }
- if (found) return i
- }
- }
-
- return -1
- }
-
- Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
- return this.indexOf(val, byteOffset, encoding) !== -1
- };
-
- Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
- return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
- };
-
- Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
- return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
- };
-
- function hexWrite (buf, string, offset, length) {
- offset = Number(offset) || 0;
- var remaining = buf.length - offset;
- if (!length) {
- length = remaining;
- } else {
- length = Number(length);
- if (length > remaining) {
- length = remaining;
- }
- }
-
- // must be an even number of digits
- var strLen = string.length;
- if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
-
- if (length > strLen / 2) {
- length = strLen / 2;
- }
- for (var i = 0; i < length; ++i) {
- var parsed = parseInt(string.substr(i * 2, 2), 16);
- if (isNaN(parsed)) return i
- buf[offset + i] = parsed;
- }
- return i
- }
-
- function utf8Write (buf, string, offset, length) {
- return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
- }
-
- function asciiWrite (buf, string, offset, length) {
- return blitBuffer(asciiToBytes(string), buf, offset, length)
- }
-
- function latin1Write (buf, string, offset, length) {
- return asciiWrite(buf, string, offset, length)
- }
-
- function base64Write (buf, string, offset, length) {
- return blitBuffer(base64ToBytes(string), buf, offset, length)
- }
-
- function ucs2Write (buf, string, offset, length) {
- return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
- }
-
- Buffer.prototype.write = function write (string, offset, length, encoding) {
- // Buffer#write(string)
- if (offset === undefined) {
- encoding = 'utf8';
- length = this.length;
- offset = 0;
- // Buffer#write(string, encoding)
- } else if (length === undefined && typeof offset === 'string') {
- encoding = offset;
- length = this.length;
- offset = 0;
- // Buffer#write(string, offset[, length][, encoding])
- } else if (isFinite(offset)) {
- offset = offset | 0;
- if (isFinite(length)) {
- length = length | 0;
- if (encoding === undefined) encoding = 'utf8';
- } else {
- encoding = length;
- length = undefined;
- }
- // legacy write(string, encoding, offset, length) - remove in v0.13
- } else {
- throw new Error(
- 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
- )
- }
-
- var remaining = this.length - offset;
- if (length === undefined || length > remaining) length = remaining;
-
- if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
- throw new RangeError('Attempt to write outside buffer bounds')
- }
-
- if (!encoding) encoding = 'utf8';
-
- var loweredCase = false;
- for (;;) {
- switch (encoding) {
- case 'hex':
- return hexWrite(this, string, offset, length)
-
- case 'utf8':
- case 'utf-8':
- return utf8Write(this, string, offset, length)
-
- case 'ascii':
- return asciiWrite(this, string, offset, length)
-
- case 'latin1':
- case 'binary':
- return latin1Write(this, string, offset, length)
-
- case 'base64':
- // Warning: maxLength not taken into account in base64Write
- return base64Write(this, string, offset, length)
-
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return ucs2Write(this, string, offset, length)
-
- default:
- if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
- encoding = ('' + encoding).toLowerCase();
- loweredCase = true;
- }
- }
- };
-
- Buffer.prototype.toJSON = function toJSON () {
- return {
- type: 'Buffer',
- data: Array.prototype.slice.call(this._arr || this, 0)
- }
- };
-
- function base64Slice (buf, start, end) {
- if (start === 0 && end === buf.length) {
- return fromByteArray(buf)
- } else {
- return fromByteArray(buf.slice(start, end))
- }
- }
-
- function utf8Slice (buf, start, end) {
- end = Math.min(buf.length, end);
- var res = [];
-
- var i = start;
- while (i < end) {
- var firstByte = buf[i];
- var codePoint = null;
- var bytesPerSequence = (firstByte > 0xEF) ? 4
- : (firstByte > 0xDF) ? 3
- : (firstByte > 0xBF) ? 2
- : 1;
-
- if (i + bytesPerSequence <= end) {
- var secondByte, thirdByte, fourthByte, tempCodePoint;
-
- switch (bytesPerSequence) {
- case 1:
- if (firstByte < 0x80) {
- codePoint = firstByte;
- }
- break
- case 2:
- secondByte = buf[i + 1];
- if ((secondByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);
- if (tempCodePoint > 0x7F) {
- codePoint = tempCodePoint;
- }
- }
- break
- case 3:
- secondByte = buf[i + 1];
- thirdByte = buf[i + 2];
- if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);
- if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
- codePoint = tempCodePoint;
- }
- }
- break
- case 4:
- secondByte = buf[i + 1];
- thirdByte = buf[i + 2];
- fourthByte = buf[i + 3];
- if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);
- if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
- codePoint = tempCodePoint;
- }
- }
- }
- }
-
- if (codePoint === null) {
- // we did not generate a valid codePoint so insert a
- // replacement char (U+FFFD) and advance only 1 byte
- codePoint = 0xFFFD;
- bytesPerSequence = 1;
- } else if (codePoint > 0xFFFF) {
- // encode to utf16 (surrogate pair dance)
- codePoint -= 0x10000;
- res.push(codePoint >>> 10 & 0x3FF | 0xD800);
- codePoint = 0xDC00 | codePoint & 0x3FF;
- }
-
- res.push(codePoint);
- i += bytesPerSequence;
- }
-
- return decodeCodePointsArray(res)
- }
-
- // Based on http://stackoverflow.com/a/22747272/680742, the browser with
- // the lowest limit is Chrome, with 0x10000 args.
- // We go 1 magnitude less, for safety
- var MAX_ARGUMENTS_LENGTH = 0x1000;
-
- function decodeCodePointsArray (codePoints) {
- var len = codePoints.length;
- if (len <= MAX_ARGUMENTS_LENGTH) {
- return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
- }
-
- // Decode in chunks to avoid "call stack size exceeded".
- var res = '';
- var i = 0;
- while (i < len) {
- res += String.fromCharCode.apply(
- String,
- codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
- );
- }
- return res
- }
-
- function asciiSlice (buf, start, end) {
- var ret = '';
- end = Math.min(buf.length, end);
-
- for (var i = start; i < end; ++i) {
- ret += String.fromCharCode(buf[i] & 0x7F);
- }
- return ret
- }
-
- function latin1Slice (buf, start, end) {
- var ret = '';
- end = Math.min(buf.length, end);
-
- for (var i = start; i < end; ++i) {
- ret += String.fromCharCode(buf[i]);
- }
- return ret
- }
-
- function hexSlice (buf, start, end) {
- var len = buf.length;
-
- if (!start || start < 0) start = 0;
- if (!end || end < 0 || end > len) end = len;
-
- var out = '';
- for (var i = start; i < end; ++i) {
- out += toHex(buf[i]);
- }
- return out
- }
-
- function utf16leSlice (buf, start, end) {
- var bytes = buf.slice(start, end);
- var res = '';
- for (var i = 0; i < bytes.length; i += 2) {
- res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
- }
- return res
- }
-
- Buffer.prototype.slice = function slice (start, end) {
- var len = this.length;
- start = ~~start;
- end = end === undefined ? len : ~~end;
-
- if (start < 0) {
- start += len;
- if (start < 0) start = 0;
- } else if (start > len) {
- start = len;
- }
-
- if (end < 0) {
- end += len;
- if (end < 0) end = 0;
- } else if (end > len) {
- end = len;
- }
-
- if (end < start) end = start;
-
- var newBuf;
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- newBuf = this.subarray(start, end);
- newBuf.__proto__ = Buffer.prototype;
- } else {
- var sliceLen = end - start;
- newBuf = new Buffer(sliceLen, undefined);
- for (var i = 0; i < sliceLen; ++i) {
- newBuf[i] = this[i + start];
- }
- }
-
- return newBuf
- };
-
- /*
- * Need to make sure that buffer isn't trying to write out of bounds.
- */
- function checkOffset (offset, ext, length) {
- if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
- if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
- }
-
- Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
- offset = offset | 0;
- byteLength = byteLength | 0;
- if (!noAssert) checkOffset(offset, byteLength, this.length);
-
- var val = this[offset];
- var mul = 1;
- var i = 0;
- while (++i < byteLength && (mul *= 0x100)) {
- val += this[offset + i] * mul;
- }
-
- return val
- };
-
- Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
- offset = offset | 0;
- byteLength = byteLength | 0;
- if (!noAssert) {
- checkOffset(offset, byteLength, this.length);
- }
-
- var val = this[offset + --byteLength];
- var mul = 1;
- while (byteLength > 0 && (mul *= 0x100)) {
- val += this[offset + --byteLength] * mul;
- }
-
- return val
- };
-
- Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 1, this.length);
- return this[offset]
- };
-
- Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 2, this.length);
- return this[offset] | (this[offset + 1] << 8)
- };
-
- Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 2, this.length);
- return (this[offset] << 8) | this[offset + 1]
- };
-
- Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length);
-
- return ((this[offset]) |
- (this[offset + 1] << 8) |
- (this[offset + 2] << 16)) +
- (this[offset + 3] * 0x1000000)
- };
-
- Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length);
-
- return (this[offset] * 0x1000000) +
- ((this[offset + 1] << 16) |
- (this[offset + 2] << 8) |
- this[offset + 3])
- };
-
- Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
- offset = offset | 0;
- byteLength = byteLength | 0;
- if (!noAssert) checkOffset(offset, byteLength, this.length);
-
- var val = this[offset];
- var mul = 1;
- var i = 0;
- while (++i < byteLength && (mul *= 0x100)) {
- val += this[offset + i] * mul;
- }
- mul *= 0x80;
-
- if (val >= mul) val -= Math.pow(2, 8 * byteLength);
-
- return val
- };
-
- Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
- offset = offset | 0;
- byteLength = byteLength | 0;
- if (!noAssert) checkOffset(offset, byteLength, this.length);
-
- var i = byteLength;
- var mul = 1;
- var val = this[offset + --i];
- while (i > 0 && (mul *= 0x100)) {
- val += this[offset + --i] * mul;
- }
- mul *= 0x80;
-
- if (val >= mul) val -= Math.pow(2, 8 * byteLength);
-
- return val
- };
-
- Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 1, this.length);
- if (!(this[offset] & 0x80)) return (this[offset])
- return ((0xff - this[offset] + 1) * -1)
- };
-
- Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 2, this.length);
- var val = this[offset] | (this[offset + 1] << 8);
- return (val & 0x8000) ? val | 0xFFFF0000 : val
- };
-
- Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 2, this.length);
- var val = this[offset + 1] | (this[offset] << 8);
- return (val & 0x8000) ? val | 0xFFFF0000 : val
- };
-
- Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length);
-
- return (this[offset]) |
- (this[offset + 1] << 8) |
- (this[offset + 2] << 16) |
- (this[offset + 3] << 24)
- };
-
- Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length);
-
- return (this[offset] << 24) |
- (this[offset + 1] << 16) |
- (this[offset + 2] << 8) |
- (this[offset + 3])
- };
-
- Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length);
- return read(this, offset, true, 23, 4)
- };
-
- Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length);
- return read(this, offset, false, 23, 4)
- };
-
- Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 8, this.length);
- return read(this, offset, true, 52, 8)
- };
-
- Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 8, this.length);
- return read(this, offset, false, 52, 8)
- };
-
- function checkInt (buf, value, offset, ext, max, min) {
- if (!internalIsBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
- if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
- if (offset + ext > buf.length) throw new RangeError('Index out of range')
- }
-
- Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
- value = +value;
- offset = offset | 0;
- byteLength = byteLength | 0;
- if (!noAssert) {
- var maxBytes = Math.pow(2, 8 * byteLength) - 1;
- checkInt(this, value, offset, byteLength, maxBytes, 0);
- }
-
- var mul = 1;
- var i = 0;
- this[offset] = value & 0xFF;
- while (++i < byteLength && (mul *= 0x100)) {
- this[offset + i] = (value / mul) & 0xFF;
- }
-
- return offset + byteLength
- };
-
- Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
- value = +value;
- offset = offset | 0;
- byteLength = byteLength | 0;
- if (!noAssert) {
- var maxBytes = Math.pow(2, 8 * byteLength) - 1;
- checkInt(this, value, offset, byteLength, maxBytes, 0);
- }
-
- var i = byteLength - 1;
- var mul = 1;
- this[offset + i] = value & 0xFF;
- while (--i >= 0 && (mul *= 0x100)) {
- this[offset + i] = (value / mul) & 0xFF;
- }
-
- return offset + byteLength
- };
-
- Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
- value = +value;
- offset = offset | 0;
- if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);
- if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);
- this[offset] = (value & 0xff);
- return offset + 1
- };
-
- function objectWriteUInt16 (buf, value, offset, littleEndian) {
- if (value < 0) value = 0xffff + value + 1;
- for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
- buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
- (littleEndian ? i : 1 - i) * 8;
- }
- }
-
- Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
- value = +value;
- offset = offset | 0;
- if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value & 0xff);
- this[offset + 1] = (value >>> 8);
- } else {
- objectWriteUInt16(this, value, offset, true);
- }
- return offset + 2
- };
-
- Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
- value = +value;
- offset = offset | 0;
- if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value >>> 8);
- this[offset + 1] = (value & 0xff);
- } else {
- objectWriteUInt16(this, value, offset, false);
- }
- return offset + 2
- };
-
- function objectWriteUInt32 (buf, value, offset, littleEndian) {
- if (value < 0) value = 0xffffffff + value + 1;
- for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
- buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff;
- }
- }
-
- Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
- value = +value;
- offset = offset | 0;
- if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset + 3] = (value >>> 24);
- this[offset + 2] = (value >>> 16);
- this[offset + 1] = (value >>> 8);
- this[offset] = (value & 0xff);
- } else {
- objectWriteUInt32(this, value, offset, true);
- }
- return offset + 4
- };
-
- Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
- value = +value;
- offset = offset | 0;
- if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value >>> 24);
- this[offset + 1] = (value >>> 16);
- this[offset + 2] = (value >>> 8);
- this[offset + 3] = (value & 0xff);
- } else {
- objectWriteUInt32(this, value, offset, false);
- }
- return offset + 4
- };
-
- Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
- value = +value;
- offset = offset | 0;
- if (!noAssert) {
- var limit = Math.pow(2, 8 * byteLength - 1);
-
- checkInt(this, value, offset, byteLength, limit - 1, -limit);
- }
-
- var i = 0;
- var mul = 1;
- var sub = 0;
- this[offset] = value & 0xFF;
- while (++i < byteLength && (mul *= 0x100)) {
- if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
- sub = 1;
- }
- this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;
- }
-
- return offset + byteLength
- };
-
- Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
- value = +value;
- offset = offset | 0;
- if (!noAssert) {
- var limit = Math.pow(2, 8 * byteLength - 1);
-
- checkInt(this, value, offset, byteLength, limit - 1, -limit);
- }
-
- var i = byteLength - 1;
- var mul = 1;
- var sub = 0;
- this[offset + i] = value & 0xFF;
- while (--i >= 0 && (mul *= 0x100)) {
- if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
- sub = 1;
- }
- this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;
- }
-
- return offset + byteLength
- };
-
- Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
- value = +value;
- offset = offset | 0;
- if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);
- if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);
- if (value < 0) value = 0xff + value + 1;
- this[offset] = (value & 0xff);
- return offset + 1
- };
-
- Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
- value = +value;
- offset = offset | 0;
- if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value & 0xff);
- this[offset + 1] = (value >>> 8);
- } else {
- objectWriteUInt16(this, value, offset, true);
- }
- return offset + 2
- };
-
- Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
- value = +value;
- offset = offset | 0;
- if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value >>> 8);
- this[offset + 1] = (value & 0xff);
- } else {
- objectWriteUInt16(this, value, offset, false);
- }
- return offset + 2
- };
-
- Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
- value = +value;
- offset = offset | 0;
- if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value & 0xff);
- this[offset + 1] = (value >>> 8);
- this[offset + 2] = (value >>> 16);
- this[offset + 3] = (value >>> 24);
- } else {
- objectWriteUInt32(this, value, offset, true);
- }
- return offset + 4
- };
-
- Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
- value = +value;
- offset = offset | 0;
- if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
- if (value < 0) value = 0xffffffff + value + 1;
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value >>> 24);
- this[offset + 1] = (value >>> 16);
- this[offset + 2] = (value >>> 8);
- this[offset + 3] = (value & 0xff);
- } else {
- objectWriteUInt32(this, value, offset, false);
- }
- return offset + 4
- };
-
- function checkIEEE754 (buf, value, offset, ext, max, min) {
- if (offset + ext > buf.length) throw new RangeError('Index out of range')
- if (offset < 0) throw new RangeError('Index out of range')
- }
-
- function writeFloat (buf, value, offset, littleEndian, noAssert) {
- if (!noAssert) {
- checkIEEE754(buf, value, offset, 4);
- }
- write(buf, value, offset, littleEndian, 23, 4);
- return offset + 4
- }
-
- Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
- return writeFloat(this, value, offset, true, noAssert)
- };
-
- Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
- return writeFloat(this, value, offset, false, noAssert)
- };
-
- function writeDouble (buf, value, offset, littleEndian, noAssert) {
- if (!noAssert) {
- checkIEEE754(buf, value, offset, 8);
- }
- write(buf, value, offset, littleEndian, 52, 8);
- return offset + 8
- }
-
- Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
- return writeDouble(this, value, offset, true, noAssert)
- };
-
- Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
- return writeDouble(this, value, offset, false, noAssert)
- };
-
- // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
- Buffer.prototype.copy = function copy (target, targetStart, start, end) {
- if (!start) start = 0;
- if (!end && end !== 0) end = this.length;
- if (targetStart >= target.length) targetStart = target.length;
- if (!targetStart) targetStart = 0;
- if (end > 0 && end < start) end = start;
-
- // Copy 0 bytes; we're done
- if (end === start) return 0
- if (target.length === 0 || this.length === 0) return 0
-
- // Fatal error conditions
- if (targetStart < 0) {
- throw new RangeError('targetStart out of bounds')
- }
- if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
- if (end < 0) throw new RangeError('sourceEnd out of bounds')
-
- // Are we oob?
- if (end > this.length) end = this.length;
- if (target.length - targetStart < end - start) {
- end = target.length - targetStart + start;
- }
-
- var len = end - start;
- var i;
-
- if (this === target && start < targetStart && targetStart < end) {
- // descending copy from end
- for (i = len - 1; i >= 0; --i) {
- target[i + targetStart] = this[i + start];
- }
- } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
- // ascending copy from start
- for (i = 0; i < len; ++i) {
- target[i + targetStart] = this[i + start];
- }
- } else {
- Uint8Array.prototype.set.call(
- target,
- this.subarray(start, start + len),
- targetStart
- );
- }
-
- return len
- };
-
- // Usage:
- // buffer.fill(number[, offset[, end]])
- // buffer.fill(buffer[, offset[, end]])
- // buffer.fill(string[, offset[, end]][, encoding])
- Buffer.prototype.fill = function fill (val, start, end, encoding) {
- // Handle string cases:
- if (typeof val === 'string') {
- if (typeof start === 'string') {
- encoding = start;
- start = 0;
- end = this.length;
- } else if (typeof end === 'string') {
- encoding = end;
- end = this.length;
- }
- if (val.length === 1) {
- var code = val.charCodeAt(0);
- if (code < 256) {
- val = code;
- }
- }
- if (encoding !== undefined && typeof encoding !== 'string') {
- throw new TypeError('encoding must be a string')
- }
- if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
- throw new TypeError('Unknown encoding: ' + encoding)
- }
- } else if (typeof val === 'number') {
- val = val & 255;
- }
-
- // Invalid ranges are not set to a default, so can range check early.
- if (start < 0 || this.length < start || this.length < end) {
- throw new RangeError('Out of range index')
- }
-
- if (end <= start) {
- return this
- }
-
- start = start >>> 0;
- end = end === undefined ? this.length : end >>> 0;
-
- if (!val) val = 0;
-
- var i;
- if (typeof val === 'number') {
- for (i = start; i < end; ++i) {
- this[i] = val;
- }
- } else {
- var bytes = internalIsBuffer(val)
- ? val
- : utf8ToBytes(new Buffer(val, encoding).toString());
- var len = bytes.length;
- for (i = 0; i < end - start; ++i) {
- this[i + start] = bytes[i % len];
- }
- }
-
- return this
- };
-
- // HELPER FUNCTIONS
- // ================
-
- var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g;
-
- function base64clean (str) {
- // Node strips out invalid characters like \n and \t from the string, base64-js does not
- str = stringtrim(str).replace(INVALID_BASE64_RE, '');
- // Node converts strings with length < 2 to ''
- if (str.length < 2) return ''
- // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
- while (str.length % 4 !== 0) {
- str = str + '=';
- }
- return str
- }
-
- function stringtrim (str) {
- if (str.trim) return str.trim()
- return str.replace(/^\s+|\s+$/g, '')
- }
-
- function toHex (n) {
- if (n < 16) return '0' + n.toString(16)
- return n.toString(16)
- }
-
- function utf8ToBytes (string, units) {
- units = units || Infinity;
- var codePoint;
- var length = string.length;
- var leadSurrogate = null;
- var bytes = [];
-
- for (var i = 0; i < length; ++i) {
- codePoint = string.charCodeAt(i);
-
- // is surrogate component
- if (codePoint > 0xD7FF && codePoint < 0xE000) {
- // last char was a lead
- if (!leadSurrogate) {
- // no lead yet
- if (codePoint > 0xDBFF) {
- // unexpected trail
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
- continue
- } else if (i + 1 === length) {
- // unpaired lead
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
- continue
- }
-
- // valid lead
- leadSurrogate = codePoint;
-
- continue
- }
-
- // 2 leads in a row
- if (codePoint < 0xDC00) {
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
- leadSurrogate = codePoint;
- continue
- }
-
- // valid surrogate pair
- codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;
- } else if (leadSurrogate) {
- // valid bmp char, but last char was a lead
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
- }
-
- leadSurrogate = null;
-
- // encode utf8
- if (codePoint < 0x80) {
- if ((units -= 1) < 0) break
- bytes.push(codePoint);
- } else if (codePoint < 0x800) {
- if ((units -= 2) < 0) break
- bytes.push(
- codePoint >> 0x6 | 0xC0,
- codePoint & 0x3F | 0x80
- );
- } else if (codePoint < 0x10000) {
- if ((units -= 3) < 0) break
- bytes.push(
- codePoint >> 0xC | 0xE0,
- codePoint >> 0x6 & 0x3F | 0x80,
- codePoint & 0x3F | 0x80
- );
- } else if (codePoint < 0x110000) {
- if ((units -= 4) < 0) break
- bytes.push(
- codePoint >> 0x12 | 0xF0,
- codePoint >> 0xC & 0x3F | 0x80,
- codePoint >> 0x6 & 0x3F | 0x80,
- codePoint & 0x3F | 0x80
- );
- } else {
- throw new Error('Invalid code point')
- }
- }
-
- return bytes
- }
-
- function asciiToBytes (str) {
- var byteArray = [];
- for (var i = 0; i < str.length; ++i) {
- // Node's code seems to be doing this and not & 0x7F..
- byteArray.push(str.charCodeAt(i) & 0xFF);
- }
- return byteArray
- }
-
- function utf16leToBytes (str, units) {
- var c, hi, lo;
- var byteArray = [];
- for (var i = 0; i < str.length; ++i) {
- if ((units -= 2) < 0) break
-
- c = str.charCodeAt(i);
- hi = c >> 8;
- lo = c % 256;
- byteArray.push(lo);
- byteArray.push(hi);
- }
-
- return byteArray
- }
-
-
- function base64ToBytes (str) {
- return toByteArray(base64clean(str))
- }
-
- function blitBuffer (src, dst, offset, length) {
- for (var i = 0; i < length; ++i) {
- if ((i + offset >= dst.length) || (i >= src.length)) break
- dst[i + offset] = src[i];
- }
- return i
- }
-
- function isnan (val) {
- return val !== val // eslint-disable-line no-self-compare
- }
-
-
- // the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence
- // The _isBuffer check is for Safari 5-7 support, because it's missing
- // Object.prototype.constructor. Remove this eventually
- function isBuffer(obj) {
- return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))
- }
-
- function isFastBuffer (obj) {
- return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
- }
-
- // For Node v0.10 support. Remove this eventually.
- function isSlowBuffer (obj) {
- return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))
- }
-
- /**
- * Create an Error with the specified message, config, error code, request and response.
- *
- * @param {string} message The error message.
- * @param {string} [code] The error code (for example, 'ECONNABORTED').
- * @param {Object} [config] The config.
- * @param {Object} [request] The request.
- * @param {Object} [response] The response.
- *
- * @returns {Error} The created error.
- */
- function AxiosError(message, code, config, request, response) {
- Error.call(this);
-
- if (Error.captureStackTrace) {
- Error.captureStackTrace(this, this.constructor);
- } else {
- this.stack = (new Error()).stack;
- }
-
- this.message = message;
- this.name = 'AxiosError';
- code && (this.code = code);
- config && (this.config = config);
- request && (this.request = request);
- response && (this.response = response);
- }
-
- utils$1.inherits(AxiosError, Error, {
- toJSON: function toJSON() {
- return {
- // Standard
- message: this.message,
- name: this.name,
- // Microsoft
- description: this.description,
- number: this.number,
- // Mozilla
- fileName: this.fileName,
- lineNumber: this.lineNumber,
- columnNumber: this.columnNumber,
- stack: this.stack,
- // Axios
- config: utils$1.toJSONObject(this.config),
- code: this.code,
- status: this.response && this.response.status ? this.response.status : null
- };
- }
- });
-
- const prototype$1 = AxiosError.prototype;
- const descriptors = {};
-
- [
- 'ERR_BAD_OPTION_VALUE',
- 'ERR_BAD_OPTION',
- 'ECONNABORTED',
- 'ETIMEDOUT',
- 'ERR_NETWORK',
- 'ERR_FR_TOO_MANY_REDIRECTS',
- 'ERR_DEPRECATED',
- 'ERR_BAD_RESPONSE',
- 'ERR_BAD_REQUEST',
- 'ERR_CANCELED',
- 'ERR_NOT_SUPPORT',
- 'ERR_INVALID_URL'
- // eslint-disable-next-line func-names
- ].forEach(code => {
- descriptors[code] = {value: code};
- });
-
- Object.defineProperties(AxiosError, descriptors);
- Object.defineProperty(prototype$1, 'isAxiosError', {value: true});
-
- // eslint-disable-next-line func-names
- AxiosError.from = (error, code, config, request, response, customProps) => {
- const axiosError = Object.create(prototype$1);
-
- utils$1.toFlatObject(error, axiosError, function filter(obj) {
- return obj !== Error.prototype;
- }, prop => {
- return prop !== 'isAxiosError';
- });
-
- AxiosError.call(axiosError, error.message, code, config, request, response);
-
- axiosError.cause = error;
-
- axiosError.name = error.name;
-
- customProps && Object.assign(axiosError, customProps);
-
- return axiosError;
- };
-
- // eslint-disable-next-line strict
- var httpAdapter = null;
-
- /**
- * Determines if the given thing is a array or js object.
- *
- * @param {string} thing - The object or array to be visited.
- *
- * @returns {boolean}
- */
- function isVisitable(thing) {
- return utils$1.isPlainObject(thing) || utils$1.isArray(thing);
- }
-
- /**
- * It removes the brackets from the end of a string
- *
- * @param {string} key - The key of the parameter.
- *
- * @returns {string} the key without the brackets.
- */
- function removeBrackets(key) {
- return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key;
- }
-
- /**
- * It takes a path, a key, and a boolean, and returns a string
- *
- * @param {string} path - The path to the current key.
- * @param {string} key - The key of the current object being iterated over.
- * @param {string} dots - If true, the key will be rendered with dots instead of brackets.
- *
- * @returns {string} The path to the current key.
- */
- function renderKey(path, key, dots) {
- if (!path) return key;
- return path.concat(key).map(function each(token, i) {
- // eslint-disable-next-line no-param-reassign
- token = removeBrackets(token);
- return !dots && i ? '[' + token + ']' : token;
- }).join(dots ? '.' : '');
- }
-
- /**
- * If the array is an array and none of its elements are visitable, then it's a flat array.
- *
- * @param {Array} arr - The array to check
- *
- * @returns {boolean}
- */
- function isFlatArray(arr) {
- return utils$1.isArray(arr) && !arr.some(isVisitable);
- }
-
- const predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) {
- return /^is[A-Z]/.test(prop);
- });
-
- /**
- * Convert a data object to FormData
- *
- * @param {Object} obj
- * @param {?Object} [formData]
- * @param {?Object} [options]
- * @param {Function} [options.visitor]
- * @param {Boolean} [options.metaTokens = true]
- * @param {Boolean} [options.dots = false]
- * @param {?Boolean} [options.indexes = false]
- *
- * @returns {Object}
- **/
-
- /**
- * It converts an object into a FormData object
- *
- * @param {Object} obj - The object to convert to form data.
- * @param {string} formData - The FormData object to append to.
- * @param {Object} options
- *
- * @returns
- */
- function toFormData(obj, formData, options) {
- if (!utils$1.isObject(obj)) {
- throw new TypeError('target must be an object');
- }
-
- // eslint-disable-next-line no-param-reassign
- formData = formData || new (FormData)();
-
- // eslint-disable-next-line no-param-reassign
- options = utils$1.toFlatObject(options, {
- metaTokens: true,
- dots: false,
- indexes: false
- }, false, function defined(option, source) {
- // eslint-disable-next-line no-eq-null,eqeqeq
- return !utils$1.isUndefined(source[option]);
- });
-
- const metaTokens = options.metaTokens;
- // eslint-disable-next-line no-use-before-define
- const visitor = options.visitor || defaultVisitor;
- const dots = options.dots;
- const indexes = options.indexes;
- const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;
- const useBlob = _Blob && utils$1.isSpecCompliantForm(formData);
-
- if (!utils$1.isFunction(visitor)) {
- throw new TypeError('visitor must be a function');
- }
-
- function convertValue(value) {
- if (value === null) return '';
-
- if (utils$1.isDate(value)) {
- return value.toISOString();
- }
-
- if (!useBlob && utils$1.isBlob(value)) {
- throw new AxiosError('Blob is not supported. Use a Buffer instead.');
- }
-
- if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) {
- return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);
- }
-
- return value;
- }
-
- /**
- * Default visitor.
- *
- * @param {*} value
- * @param {String|Number} key
- * @param {Array} path
- * @this {FormData}
- *
- * @returns {boolean} return true to visit the each prop of the value recursively
- */
- function defaultVisitor(value, key, path) {
- let arr = value;
-
- if (value && !path && typeof value === 'object') {
- if (utils$1.endsWith(key, '{}')) {
- // eslint-disable-next-line no-param-reassign
- key = metaTokens ? key : key.slice(0, -2);
- // eslint-disable-next-line no-param-reassign
- value = JSON.stringify(value);
- } else if (
- (utils$1.isArray(value) && isFlatArray(value)) ||
- ((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value))
- )) {
- // eslint-disable-next-line no-param-reassign
- key = removeBrackets(key);
-
- arr.forEach(function each(el, index) {
- !(utils$1.isUndefined(el) || el === null) && formData.append(
- // eslint-disable-next-line no-nested-ternary
- indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),
- convertValue(el)
- );
- });
- return false;
- }
- }
-
- if (isVisitable(value)) {
- return true;
- }
-
- formData.append(renderKey(path, key, dots), convertValue(value));
-
- return false;
- }
-
- const stack = [];
-
- const exposedHelpers = Object.assign(predicates, {
- defaultVisitor,
- convertValue,
- isVisitable
- });
-
- function build(value, path) {
- if (utils$1.isUndefined(value)) return;
-
- if (stack.indexOf(value) !== -1) {
- throw Error('Circular reference detected in ' + path.join('.'));
- }
-
- stack.push(value);
-
- utils$1.forEach(value, function each(el, key) {
- const result = !(utils$1.isUndefined(el) || el === null) && visitor.call(
- formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers
- );
-
- if (result === true) {
- build(el, path ? path.concat(key) : [key]);
- }
- });
-
- stack.pop();
- }
-
- if (!utils$1.isObject(obj)) {
- throw new TypeError('data must be an object');
- }
-
- build(obj);
-
- return formData;
- }
-
- /**
- * It encodes a string by replacing all characters that are not in the unreserved set with
- * their percent-encoded equivalents
- *
- * @param {string} str - The string to encode.
- *
- * @returns {string} The encoded string.
- */
- function encode$1(str) {
- const charMap = {
- '!': '%21',
- "'": '%27',
- '(': '%28',
- ')': '%29',
- '~': '%7E',
- '%20': '+',
- '%00': '\x00'
- };
- return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {
- return charMap[match];
- });
- }
-
- /**
- * It takes a params object and converts it to a FormData object
- *
- * @param {Object} params - The parameters to be converted to a FormData object.
- * @param {Object} options - The options object passed to the Axios constructor.
- *
- * @returns {void}
- */
- function AxiosURLSearchParams(params, options) {
- this._pairs = [];
-
- params && toFormData(params, this, options);
- }
-
- const prototype = AxiosURLSearchParams.prototype;
-
- prototype.append = function append(name, value) {
- this._pairs.push([name, value]);
- };
-
- prototype.toString = function toString(encoder) {
- const _encode = encoder ? function(value) {
- return encoder.call(this, value, encode$1);
- } : encode$1;
-
- return this._pairs.map(function each(pair) {
- return _encode(pair[0]) + '=' + _encode(pair[1]);
- }, '').join('&');
- };
-
- /**
- * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their
- * URI encoded counterparts
- *
- * @param {string} val The value to be encoded.
- *
- * @returns {string} The encoded value.
- */
- function encode(val) {
- return encodeURIComponent(val).
- replace(/%3A/gi, ':').
- replace(/%24/g, '$').
- replace(/%2C/gi, ',').
- replace(/%20/g, '+').
- replace(/%5B/gi, '[').
- replace(/%5D/gi, ']');
- }
-
- /**
- * Build a URL by appending params to the end
- *
- * @param {string} url The base of the url (e.g., http://www.google.com)
- * @param {object} [params] The params to be appended
- * @param {?object} options
- *
- * @returns {string} The formatted url
- */
- function buildURL(url, params, options) {
- /*eslint no-param-reassign:0*/
- if (!params) {
- return url;
- }
-
- const _encode = options && options.encode || encode;
-
- const serializeFn = options && options.serialize;
-
- let serializedParams;
-
- if (serializeFn) {
- serializedParams = serializeFn(params, options);
- } else {
- serializedParams = utils$1.isURLSearchParams(params) ?
- params.toString() :
- new AxiosURLSearchParams(params, options).toString(_encode);
- }
-
- if (serializedParams) {
- const hashmarkIndex = url.indexOf("#");
-
- if (hashmarkIndex !== -1) {
- url = url.slice(0, hashmarkIndex);
- }
- url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
- }
-
- return url;
- }
-
- class InterceptorManager {
- constructor() {
- this.handlers = [];
- }
-
- /**
- * Add a new interceptor to the stack
- *
- * @param {Function} fulfilled The function to handle `then` for a `Promise`
- * @param {Function} rejected The function to handle `reject` for a `Promise`
- *
- * @return {Number} An ID used to remove interceptor later
- */
- use(fulfilled, rejected, options) {
- this.handlers.push({
- fulfilled,
- rejected,
- synchronous: options ? options.synchronous : false,
- runWhen: options ? options.runWhen : null
- });
- return this.handlers.length - 1;
- }
-
- /**
- * Remove an interceptor from the stack
- *
- * @param {Number} id The ID that was returned by `use`
- *
- * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise
- */
- eject(id) {
- if (this.handlers[id]) {
- this.handlers[id] = null;
- }
- }
-
- /**
- * Clear all interceptors from the stack
- *
- * @returns {void}
- */
- clear() {
- if (this.handlers) {
- this.handlers = [];
- }
- }
-
- /**
- * Iterate over all the registered interceptors
- *
- * This method is particularly useful for skipping over any
- * interceptors that may have become `null` calling `eject`.
- *
- * @param {Function} fn The function to call for each interceptor
- *
- * @returns {void}
- */
- forEach(fn) {
- utils$1.forEach(this.handlers, function forEachHandler(h) {
- if (h !== null) {
- fn(h);
- }
- });
- }
- }
-
- var InterceptorManager$1 = InterceptorManager;
-
- var transitionalDefaults = {
- silentJSONParsing: true,
- forcedJSONParsing: true,
- clarifyTimeoutError: false
- };
-
- var URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;
-
- var FormData$1 = typeof FormData !== 'undefined' ? FormData : null;
-
- var Blob$1 = typeof Blob !== 'undefined' ? Blob : null;
-
- var platform$1 = {
- isBrowser: true,
- classes: {
- URLSearchParams: URLSearchParams$1,
- FormData: FormData$1,
- Blob: Blob$1
- },
- protocols: ['http', 'https', 'file', 'blob', 'url', 'data']
- };
-
- const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';
-
- /**
- * Determine if we're running in a standard browser environment
- *
- * This allows axios to run in a web worker, and react-native.
- * Both environments support XMLHttpRequest, but not fully standard globals.
- *
- * web workers:
- * typeof window -> undefined
- * typeof document -> undefined
- *
- * react-native:
- * navigator.product -> 'ReactNative'
- * nativescript
- * navigator.product -> 'NativeScript' or 'NS'
- *
- * @returns {boolean}
- */
- const hasStandardBrowserEnv = (
- (product) => {
- return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0
- })(typeof navigator !== 'undefined' && navigator.product);
-
- /**
- * Determine if we're running in a standard browser webWorker environment
- *
- * Although the `isStandardBrowserEnv` method indicates that
- * `allows axios to run in a web worker`, the WebWorker will still be
- * filtered out due to its judgment standard
- * `typeof window !== 'undefined' && typeof document !== 'undefined'`.
- * This leads to a problem when axios post `FormData` in webWorker
- */
- const hasStandardBrowserWebWorkerEnv = (() => {
- return (
- typeof WorkerGlobalScope !== 'undefined' &&
- // eslint-disable-next-line no-undef
- self instanceof WorkerGlobalScope &&
- typeof self.importScripts === 'function'
- );
- })();
-
- var utils = /*#__PURE__*/Object.freeze({
- __proto__: null,
- hasBrowserEnv: hasBrowserEnv,
- hasStandardBrowserEnv: hasStandardBrowserEnv,
- hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv
- });
-
- var platform = {
- ...utils,
- ...platform$1
- };
-
- function toURLEncodedForm(data, options) {
- return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({
- visitor: function(value, key, path, helpers) {
- if (platform.isNode && utils$1.isBuffer(value)) {
- this.append(key, value.toString('base64'));
- return false;
- }
-
- return helpers.defaultVisitor.apply(this, arguments);
- }
- }, options));
- }
-
- /**
- * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']
- *
- * @param {string} name - The name of the property to get.
- *
- * @returns An array of strings.
- */
- function parsePropPath(name) {
- // foo[x][y][z]
- // foo.x.y.z
- // foo-x-y-z
- // foo x y z
- return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(match => {
- return match[0] === '[]' ? '' : match[1] || match[0];
- });
- }
-
- /**
- * Convert an array to an object.
- *
- * @param {Array} arr - The array to convert to an object.
- *
- * @returns An object with the same keys and values as the array.
- */
- function arrayToObject(arr) {
- const obj = {};
- const keys = Object.keys(arr);
- let i;
- const len = keys.length;
- let key;
- for (i = 0; i < len; i++) {
- key = keys[i];
- obj[key] = arr[key];
- }
- return obj;
- }
-
- /**
- * It takes a FormData object and returns a JavaScript object
- *
- * @param {string} formData The FormData object to convert to JSON.
- *
- * @returns {Object | null} The converted object.
- */
- function formDataToJSON(formData) {
- function buildPath(path, value, target, index) {
- let name = path[index++];
-
- if (name === '__proto__') return true;
-
- const isNumericKey = Number.isFinite(+name);
- const isLast = index >= path.length;
- name = !name && utils$1.isArray(target) ? target.length : name;
-
- if (isLast) {
- if (utils$1.hasOwnProp(target, name)) {
- target[name] = [target[name], value];
- } else {
- target[name] = value;
- }
-
- return !isNumericKey;
- }
-
- if (!target[name] || !utils$1.isObject(target[name])) {
- target[name] = [];
- }
-
- const result = buildPath(path, value, target[name], index);
-
- if (result && utils$1.isArray(target[name])) {
- target[name] = arrayToObject(target[name]);
- }
-
- return !isNumericKey;
- }
-
- if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) {
- const obj = {};
-
- utils$1.forEachEntry(formData, (name, value) => {
- buildPath(parsePropPath(name), value, obj, 0);
- });
-
- return obj;
- }
-
- return null;
- }
-
- /**
- * It takes a string, tries to parse it, and if it fails, it returns the stringified version
- * of the input
- *
- * @param {any} rawValue - The value to be stringified.
- * @param {Function} parser - A function that parses a string into a JavaScript object.
- * @param {Function} encoder - A function that takes a value and returns a string.
- *
- * @returns {string} A stringified version of the rawValue.
- */
- function stringifySafely(rawValue, parser, encoder) {
- if (utils$1.isString(rawValue)) {
- try {
- (parser || JSON.parse)(rawValue);
- return utils$1.trim(rawValue);
- } catch (e) {
- if (e.name !== 'SyntaxError') {
- throw e;
- }
- }
- }
-
- return (encoder || JSON.stringify)(rawValue);
- }
-
- const defaults = {
-
- transitional: transitionalDefaults,
-
- adapter: ['xhr', 'http'],
-
- transformRequest: [function transformRequest(data, headers) {
- const contentType = headers.getContentType() || '';
- const hasJSONContentType = contentType.indexOf('application/json') > -1;
- const isObjectPayload = utils$1.isObject(data);
-
- if (isObjectPayload && utils$1.isHTMLForm(data)) {
- data = new FormData(data);
- }
-
- const isFormData = utils$1.isFormData(data);
-
- if (isFormData) {
- return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;
- }
-
- if (utils$1.isArrayBuffer(data) ||
- utils$1.isBuffer(data) ||
- utils$1.isStream(data) ||
- utils$1.isFile(data) ||
- utils$1.isBlob(data)
- ) {
- return data;
- }
- if (utils$1.isArrayBufferView(data)) {
- return data.buffer;
- }
- if (utils$1.isURLSearchParams(data)) {
- headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);
- return data.toString();
- }
-
- let isFileList;
-
- if (isObjectPayload) {
- if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {
- return toURLEncodedForm(data, this.formSerializer).toString();
- }
-
- if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {
- const _FormData = this.env && this.env.FormData;
-
- return toFormData(
- isFileList ? {'files[]': data} : data,
- _FormData && new _FormData(),
- this.formSerializer
- );
- }
- }
-
- if (isObjectPayload || hasJSONContentType ) {
- headers.setContentType('application/json', false);
- return stringifySafely(data);
- }
-
- return data;
- }],
-
- transformResponse: [function transformResponse(data) {
- const transitional = this.transitional || defaults.transitional;
- const forcedJSONParsing = transitional && transitional.forcedJSONParsing;
- const JSONRequested = this.responseType === 'json';
-
- if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {
- const silentJSONParsing = transitional && transitional.silentJSONParsing;
- const strictJSONParsing = !silentJSONParsing && JSONRequested;
-
- try {
- return JSON.parse(data);
- } catch (e) {
- if (strictJSONParsing) {
- if (e.name === 'SyntaxError') {
- throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);
- }
- throw e;
- }
- }
- }
-
- return data;
- }],
-
- /**
- * A timeout in milliseconds to abort a request. If set to 0 (default) a
- * timeout is not created.
- */
- timeout: 0,
-
- xsrfCookieName: 'XSRF-TOKEN',
- xsrfHeaderName: 'X-XSRF-TOKEN',
-
- maxContentLength: -1,
- maxBodyLength: -1,
-
- env: {
- FormData: platform.classes.FormData,
- Blob: platform.classes.Blob
- },
-
- validateStatus: function validateStatus(status) {
- return status >= 200 && status < 300;
- },
-
- headers: {
- common: {
- 'Accept': 'application/json, text/plain, */*',
- 'Content-Type': undefined
- }
- }
- };
-
- utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {
- defaults.headers[method] = {};
- });
-
- var defaults$1 = defaults;
-
- // RawAxiosHeaders whose duplicates are ignored by node
- // c.f. https://nodejs.org/api/http.html#http_message_headers
- const ignoreDuplicateOf = utils$1.toObjectSet([
- 'age', 'authorization', 'content-length', 'content-type', 'etag',
- 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
- 'last-modified', 'location', 'max-forwards', 'proxy-authorization',
- 'referer', 'retry-after', 'user-agent'
- ]);
-
- /**
- * Parse headers into an object
- *
- * ```
- * Date: Wed, 27 Aug 2014 08:58:49 GMT
- * Content-Type: application/json
- * Connection: keep-alive
- * Transfer-Encoding: chunked
- * ```
- *
- * @param {String} rawHeaders Headers needing to be parsed
- *
- * @returns {Object} Headers parsed into an object
- */
- var parseHeaders = rawHeaders => {
- const parsed = {};
- let key;
- let val;
- let i;
-
- rawHeaders && rawHeaders.split('\n').forEach(function parser(line) {
- i = line.indexOf(':');
- key = line.substring(0, i).trim().toLowerCase();
- val = line.substring(i + 1).trim();
-
- if (!key || (parsed[key] && ignoreDuplicateOf[key])) {
- return;
- }
-
- if (key === 'set-cookie') {
- if (parsed[key]) {
- parsed[key].push(val);
- } else {
- parsed[key] = [val];
- }
- } else {
- parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
- }
- });
-
- return parsed;
- };
-
- const $internals = Symbol('internals');
-
- function normalizeHeader(header) {
- return header && String(header).trim().toLowerCase();
- }
-
- function normalizeValue(value) {
- if (value === false || value == null) {
- return value;
- }
-
- return utils$1.isArray(value) ? value.map(normalizeValue) : String(value);
- }
-
- function parseTokens(str) {
- const tokens = Object.create(null);
- const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;
- let match;
-
- while ((match = tokensRE.exec(str))) {
- tokens[match[1]] = match[2];
- }
-
- return tokens;
- }
-
- const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());
-
- function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {
- if (utils$1.isFunction(filter)) {
- return filter.call(this, value, header);
- }
-
- if (isHeaderNameFilter) {
- value = header;
- }
-
- if (!utils$1.isString(value)) return;
-
- if (utils$1.isString(filter)) {
- return value.indexOf(filter) !== -1;
- }
-
- if (utils$1.isRegExp(filter)) {
- return filter.test(value);
- }
- }
-
- function formatHeader(header) {
- return header.trim()
- .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => {
- return char.toUpperCase() + str;
- });
- }
-
- function buildAccessors(obj, header) {
- const accessorName = utils$1.toCamelCase(' ' + header);
-
- ['get', 'set', 'has'].forEach(methodName => {
- Object.defineProperty(obj, methodName + accessorName, {
- value: function(arg1, arg2, arg3) {
- return this[methodName].call(this, header, arg1, arg2, arg3);
- },
- configurable: true
- });
- });
- }
-
- class AxiosHeaders {
- constructor(headers) {
- headers && this.set(headers);
- }
-
- set(header, valueOrRewrite, rewrite) {
- const self = this;
-
- function setHeader(_value, _header, _rewrite) {
- const lHeader = normalizeHeader(_header);
-
- if (!lHeader) {
- throw new Error('header name must be a non-empty string');
- }
-
- const key = utils$1.findKey(self, lHeader);
-
- if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {
- self[key || _header] = normalizeValue(_value);
- }
- }
-
- const setHeaders = (headers, _rewrite) =>
- utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));
-
- if (utils$1.isPlainObject(header) || header instanceof this.constructor) {
- setHeaders(header, valueOrRewrite);
- } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {
- setHeaders(parseHeaders(header), valueOrRewrite);
- } else {
- header != null && setHeader(valueOrRewrite, header, rewrite);
- }
-
- return this;
- }
-
- get(header, parser) {
- header = normalizeHeader(header);
-
- if (header) {
- const key = utils$1.findKey(this, header);
-
- if (key) {
- const value = this[key];
-
- if (!parser) {
- return value;
- }
-
- if (parser === true) {
- return parseTokens(value);
- }
-
- if (utils$1.isFunction(parser)) {
- return parser.call(this, value, key);
- }
-
- if (utils$1.isRegExp(parser)) {
- return parser.exec(value);
- }
-
- throw new TypeError('parser must be boolean|regexp|function');
- }
- }
- }
-
- has(header, matcher) {
- header = normalizeHeader(header);
-
- if (header) {
- const key = utils$1.findKey(this, header);
-
- return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));
- }
-
- return false;
- }
-
- delete(header, matcher) {
- const self = this;
- let deleted = false;
-
- function deleteHeader(_header) {
- _header = normalizeHeader(_header);
-
- if (_header) {
- const key = utils$1.findKey(self, _header);
-
- if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {
- delete self[key];
-
- deleted = true;
- }
- }
- }
-
- if (utils$1.isArray(header)) {
- header.forEach(deleteHeader);
- } else {
- deleteHeader(header);
- }
-
- return deleted;
- }
-
- clear(matcher) {
- const keys = Object.keys(this);
- let i = keys.length;
- let deleted = false;
-
- while (i--) {
- const key = keys[i];
- if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {
- delete this[key];
- deleted = true;
- }
- }
-
- return deleted;
- }
-
- normalize(format) {
- const self = this;
- const headers = {};
-
- utils$1.forEach(this, (value, header) => {
- const key = utils$1.findKey(headers, header);
-
- if (key) {
- self[key] = normalizeValue(value);
- delete self[header];
- return;
- }
-
- const normalized = format ? formatHeader(header) : String(header).trim();
-
- if (normalized !== header) {
- delete self[header];
- }
-
- self[normalized] = normalizeValue(value);
-
- headers[normalized] = true;
- });
-
- return this;
- }
-
- concat(...targets) {
- return this.constructor.concat(this, ...targets);
- }
-
- toJSON(asStrings) {
- const obj = Object.create(null);
-
- utils$1.forEach(this, (value, header) => {
- value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value);
- });
-
- return obj;
- }
-
- [Symbol.iterator]() {
- return Object.entries(this.toJSON())[Symbol.iterator]();
- }
-
- toString() {
- return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n');
- }
-
- get [Symbol.toStringTag]() {
- return 'AxiosHeaders';
- }
-
- static from(thing) {
- return thing instanceof this ? thing : new this(thing);
- }
-
- static concat(first, ...targets) {
- const computed = new this(first);
-
- targets.forEach((target) => computed.set(target));
-
- return computed;
- }
-
- static accessor(header) {
- const internals = this[$internals] = (this[$internals] = {
- accessors: {}
- });
-
- const accessors = internals.accessors;
- const prototype = this.prototype;
-
- function defineAccessor(_header) {
- const lHeader = normalizeHeader(_header);
-
- if (!accessors[lHeader]) {
- buildAccessors(prototype, _header);
- accessors[lHeader] = true;
- }
- }
-
- utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);
-
- return this;
- }
- }
-
- AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);
-
- // reserved names hotfix
- utils$1.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {
- let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`
- return {
- get: () => value,
- set(headerValue) {
- this[mapped] = headerValue;
- }
- }
- });
-
- utils$1.freezeMethods(AxiosHeaders);
-
- var AxiosHeaders$1 = AxiosHeaders;
-
- /**
- * Transform the data for a request or a response
- *
- * @param {Array|Function} fns A single function or Array of functions
- * @param {?Object} response The response object
- *
- * @returns {*} The resulting transformed data
- */
- function transformData(fns, response) {
- const config = this || defaults$1;
- const context = response || config;
- const headers = AxiosHeaders$1.from(context.headers);
- let data = context.data;
-
- utils$1.forEach(fns, function transform(fn) {
- data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);
- });
-
- headers.normalize();
-
- return data;
- }
-
- function isCancel(value) {
- return !!(value && value.__CANCEL__);
- }
-
- /**
- * A `CanceledError` is an object that is thrown when an operation is canceled.
- *
- * @param {string=} message The message.
- * @param {Object=} config The config.
- * @param {Object=} request The request.
- *
- * @returns {CanceledError} The created error.
- */
- function CanceledError(message, config, request) {
- // eslint-disable-next-line no-eq-null,eqeqeq
- AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);
- this.name = 'CanceledError';
- }
-
- utils$1.inherits(CanceledError, AxiosError, {
- __CANCEL__: true
- });
-
- /**
- * Resolve or reject a Promise based on response status.
- *
- * @param {Function} resolve A function that resolves the promise.
- * @param {Function} reject A function that rejects the promise.
- * @param {object} response The response.
- *
- * @returns {object} The response.
- */
- function settle(resolve, reject, response) {
- const validateStatus = response.config.validateStatus;
- if (!response.status || !validateStatus || validateStatus(response.status)) {
- resolve(response);
- } else {
- reject(new AxiosError(
- 'Request failed with status code ' + response.status,
- [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],
- response.config,
- response.request,
- response
- ));
- }
- }
-
- var cookies = platform.hasStandardBrowserEnv ?
-
- // Standard browser envs support document.cookie
- {
- write(name, value, expires, path, domain, secure) {
- const cookie = [name + '=' + encodeURIComponent(value)];
-
- utils$1.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());
-
- utils$1.isString(path) && cookie.push('path=' + path);
-
- utils$1.isString(domain) && cookie.push('domain=' + domain);
-
- secure === true && cookie.push('secure');
-
- document.cookie = cookie.join('; ');
- },
-
- read(name) {
- const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
- return (match ? decodeURIComponent(match[3]) : null);
- },
-
- remove(name) {
- this.write(name, '', Date.now() - 86400000);
- }
- }
-
- :
-
- // Non-standard browser env (web workers, react-native) lack needed support.
- {
- write() {},
- read() {
- return null;
- },
- remove() {}
- };
-
- /**
- * Determines whether the specified URL is absolute
- *
- * @param {string} url The URL to test
- *
- * @returns {boolean} True if the specified URL is absolute, otherwise false
- */
- function isAbsoluteURL(url) {
- // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL).
- // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
- // by any combination of letters, digits, plus, period, or hyphen.
- return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
- }
-
- /**
- * Creates a new URL by combining the specified URLs
- *
- * @param {string} baseURL The base URL
- * @param {string} relativeURL The relative URL
- *
- * @returns {string} The combined URL
- */
- function combineURLs(baseURL, relativeURL) {
- return relativeURL
- ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '')
- : baseURL;
- }
-
- /**
- * Creates a new URL by combining the baseURL with the requestedURL,
- * only when the requestedURL is not already an absolute URL.
- * If the requestURL is absolute, this function returns the requestedURL untouched.
- *
- * @param {string} baseURL The base URL
- * @param {string} requestedURL Absolute or relative URL to combine
- *
- * @returns {string} The combined full path
- */
- function buildFullPath(baseURL, requestedURL) {
- if (baseURL && !isAbsoluteURL(requestedURL)) {
- return combineURLs(baseURL, requestedURL);
- }
- return requestedURL;
- }
-
- var isURLSameOrigin = platform.hasStandardBrowserEnv ?
-
- // Standard browser envs have full support of the APIs needed to test
- // whether the request URL is of the same origin as current location.
- (function standardBrowserEnv() {
- const msie = /(msie|trident)/i.test(navigator.userAgent);
- const urlParsingNode = document.createElement('a');
- let originURL;
-
- /**
- * Parse a URL to discover its components
- *
- * @param {String} url The URL to be parsed
- * @returns {Object}
- */
- function resolveURL(url) {
- let href = url;
-
- if (msie) {
- // IE needs attribute set twice to normalize properties
- urlParsingNode.setAttribute('href', href);
- href = urlParsingNode.href;
- }
-
- urlParsingNode.setAttribute('href', href);
-
- // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
- return {
- href: urlParsingNode.href,
- protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
- host: urlParsingNode.host,
- search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
- hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
- hostname: urlParsingNode.hostname,
- port: urlParsingNode.port,
- pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
- urlParsingNode.pathname :
- '/' + urlParsingNode.pathname
- };
- }
-
- originURL = resolveURL(window.location.href);
-
- /**
- * Determine if a URL shares the same origin as the current location
- *
- * @param {String} requestURL The URL to test
- * @returns {boolean} True if URL shares the same origin, otherwise false
- */
- return function isURLSameOrigin(requestURL) {
- const parsed = (utils$1.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
- return (parsed.protocol === originURL.protocol &&
- parsed.host === originURL.host);
- };
- })() :
-
- // Non standard browser envs (web workers, react-native) lack needed support.
- (function nonStandardBrowserEnv() {
- return function isURLSameOrigin() {
- return true;
- };
- })();
-
- function parseProtocol(url) {
- const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
- return match && match[1] || '';
- }
-
- /**
- * Calculate data maxRate
- * @param {Number} [samplesCount= 10]
- * @param {Number} [min= 1000]
- * @returns {Function}
- */
- function speedometer(samplesCount, min) {
- samplesCount = samplesCount || 10;
- const bytes = new Array(samplesCount);
- const timestamps = new Array(samplesCount);
- let head = 0;
- let tail = 0;
- let firstSampleTS;
-
- min = min !== undefined ? min : 1000;
-
- return function push(chunkLength) {
- const now = Date.now();
-
- const startedAt = timestamps[tail];
-
- if (!firstSampleTS) {
- firstSampleTS = now;
- }
-
- bytes[head] = chunkLength;
- timestamps[head] = now;
-
- let i = tail;
- let bytesCount = 0;
-
- while (i !== head) {
- bytesCount += bytes[i++];
- i = i % samplesCount;
- }
-
- head = (head + 1) % samplesCount;
-
- if (head === tail) {
- tail = (tail + 1) % samplesCount;
- }
-
- if (now - firstSampleTS < min) {
- return;
- }
-
- const passed = startedAt && now - startedAt;
-
- return passed ? Math.round(bytesCount * 1000 / passed) : undefined;
- };
- }
-
- function progressEventReducer(listener, isDownloadStream) {
- let bytesNotified = 0;
- const _speedometer = speedometer(50, 250);
-
- return e => {
- const loaded = e.loaded;
- const total = e.lengthComputable ? e.total : undefined;
- const progressBytes = loaded - bytesNotified;
- const rate = _speedometer(progressBytes);
- const inRange = loaded <= total;
-
- bytesNotified = loaded;
-
- const data = {
- loaded,
- total,
- progress: total ? (loaded / total) : undefined,
- bytes: progressBytes,
- rate: rate ? rate : undefined,
- estimated: rate && total && inRange ? (total - loaded) / rate : undefined,
- event: e
- };
-
- data[isDownloadStream ? 'download' : 'upload'] = true;
-
- listener(data);
- };
- }
-
- const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';
-
- var xhrAdapter = isXHRAdapterSupported && function (config) {
- return new Promise(function dispatchXhrRequest(resolve, reject) {
- let requestData = config.data;
- const requestHeaders = AxiosHeaders$1.from(config.headers).normalize();
- let {responseType, withXSRFToken} = config;
- let onCanceled;
- function done() {
- if (config.cancelToken) {
- config.cancelToken.unsubscribe(onCanceled);
- }
-
- if (config.signal) {
- config.signal.removeEventListener('abort', onCanceled);
- }
- }
-
- let contentType;
-
- if (utils$1.isFormData(requestData)) {
- if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {
- requestHeaders.setContentType(false); // Let the browser set it
- } else if ((contentType = requestHeaders.getContentType()) !== false) {
- // fix semicolon duplication issue for ReactNative FormData implementation
- const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];
- requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));
- }
- }
-
- let request = new XMLHttpRequest();
-
- // HTTP basic authentication
- if (config.auth) {
- const username = config.auth.username || '';
- const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
- requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));
- }
-
- const fullPath = buildFullPath(config.baseURL, config.url);
-
- request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
-
- // Set the request timeout in MS
- request.timeout = config.timeout;
-
- function onloadend() {
- if (!request) {
- return;
- }
- // Prepare the response
- const responseHeaders = AxiosHeaders$1.from(
- 'getAllResponseHeaders' in request && request.getAllResponseHeaders()
- );
- const responseData = !responseType || responseType === 'text' || responseType === 'json' ?
- request.responseText : request.response;
- const response = {
- data: responseData,
- status: request.status,
- statusText: request.statusText,
- headers: responseHeaders,
- config,
- request
- };
-
- settle(function _resolve(value) {
- resolve(value);
- done();
- }, function _reject(err) {
- reject(err);
- done();
- }, response);
-
- // Clean up request
- request = null;
- }
-
- if ('onloadend' in request) {
- // Use onloadend if available
- request.onloadend = onloadend;
- } else {
- // Listen for ready state to emulate onloadend
- request.onreadystatechange = function handleLoad() {
- if (!request || request.readyState !== 4) {
- return;
- }
-
- // The request errored out and we didn't get a response, this will be
- // handled by onerror instead
- // With one exception: request that using file: protocol, most browsers
- // will return status as 0 even though it's a successful request
- if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
- return;
- }
- // readystate handler is calling before onerror or ontimeout handlers,
- // so we should call onloadend on the next 'tick'
- setTimeout(onloadend);
- };
- }
-
- // Handle browser request cancellation (as opposed to a manual cancellation)
- request.onabort = function handleAbort() {
- if (!request) {
- return;
- }
-
- reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));
-
- // Clean up request
- request = null;
- };
-
- // Handle low level network errors
- request.onerror = function handleError() {
- // Real errors are hidden from us by the browser
- // onerror should only fire if it's a network error
- reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));
-
- // Clean up request
- request = null;
- };
-
- // Handle timeout
- request.ontimeout = function handleTimeout() {
- let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';
- const transitional = config.transitional || transitionalDefaults;
- if (config.timeoutErrorMessage) {
- timeoutErrorMessage = config.timeoutErrorMessage;
- }
- reject(new AxiosError(
- timeoutErrorMessage,
- transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
- config,
- request));
-
- // Clean up request
- request = null;
- };
-
- // Add xsrf header
- // This is only done if running in a standard browser environment.
- // Specifically not if we're in a web worker, or react-native.
- if(platform.hasStandardBrowserEnv) {
- withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));
-
- if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) {
- // Add xsrf header
- const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);
-
- if (xsrfValue) {
- requestHeaders.set(config.xsrfHeaderName, xsrfValue);
- }
- }
- }
-
- // Remove Content-Type if data is undefined
- requestData === undefined && requestHeaders.setContentType(null);
-
- // Add headers to the request
- if ('setRequestHeader' in request) {
- utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {
- request.setRequestHeader(key, val);
- });
- }
-
- // Add withCredentials to request if needed
- if (!utils$1.isUndefined(config.withCredentials)) {
- request.withCredentials = !!config.withCredentials;
- }
-
- // Add responseType to request if needed
- if (responseType && responseType !== 'json') {
- request.responseType = config.responseType;
- }
-
- // Handle progress if needed
- if (typeof config.onDownloadProgress === 'function') {
- request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));
- }
-
- // Not all browsers support upload events
- if (typeof config.onUploadProgress === 'function' && request.upload) {
- request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));
- }
-
- if (config.cancelToken || config.signal) {
- // Handle cancellation
- // eslint-disable-next-line func-names
- onCanceled = cancel => {
- if (!request) {
- return;
- }
- reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);
- request.abort();
- request = null;
- };
-
- config.cancelToken && config.cancelToken.subscribe(onCanceled);
- if (config.signal) {
- config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
- }
- }
-
- const protocol = parseProtocol(fullPath);
-
- if (protocol && platform.protocols.indexOf(protocol) === -1) {
- reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));
- return;
- }
-
-
- // Send the request
- request.send(requestData || null);
- });
- };
-
- const knownAdapters = {
- http: httpAdapter,
- xhr: xhrAdapter
- };
-
- utils$1.forEach(knownAdapters, (fn, value) => {
- if (fn) {
- try {
- Object.defineProperty(fn, 'name', {value});
- } catch (e) {
- // eslint-disable-next-line no-empty
- }
- Object.defineProperty(fn, 'adapterName', {value});
- }
- });
-
- const renderReason = (reason) => `- ${reason}`;
-
- const isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false;
-
- var adapters = {
- getAdapter: (adapters) => {
- adapters = utils$1.isArray(adapters) ? adapters : [adapters];
-
- const {length} = adapters;
- let nameOrAdapter;
- let adapter;
-
- const rejectedReasons = {};
-
- for (let i = 0; i < length; i++) {
- nameOrAdapter = adapters[i];
- let id;
-
- adapter = nameOrAdapter;
-
- if (!isResolvedHandle(nameOrAdapter)) {
- adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];
-
- if (adapter === undefined) {
- throw new AxiosError(`Unknown adapter '${id}'`);
- }
- }
-
- if (adapter) {
- break;
- }
-
- rejectedReasons[id || '#' + i] = adapter;
- }
-
- if (!adapter) {
-
- const reasons = Object.entries(rejectedReasons)
- .map(([id, state]) => `adapter ${id} ` +
- (state === false ? 'is not supported by the environment' : 'is not available in the build')
- );
-
- let s = length ?
- (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) :
- 'as no adapter specified';
-
- throw new AxiosError(
- `There is no suitable adapter to dispatch the request ` + s,
- 'ERR_NOT_SUPPORT'
- );
- }
-
- return adapter;
- },
- adapters: knownAdapters
- };
-
- /**
- * Throws a `CanceledError` if cancellation has been requested.
- *
- * @param {Object} config The config that is to be used for the request
- *
- * @returns {void}
- */
- function throwIfCancellationRequested(config) {
- if (config.cancelToken) {
- config.cancelToken.throwIfRequested();
- }
-
- if (config.signal && config.signal.aborted) {
- throw new CanceledError(null, config);
- }
- }
-
- /**
- * Dispatch a request to the server using the configured adapter.
- *
- * @param {object} config The config that is to be used for the request
- *
- * @returns {Promise} The Promise to be fulfilled
- */
- function dispatchRequest(config) {
- throwIfCancellationRequested(config);
-
- config.headers = AxiosHeaders$1.from(config.headers);
-
- // Transform request data
- config.data = transformData.call(
- config,
- config.transformRequest
- );
-
- if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {
- config.headers.setContentType('application/x-www-form-urlencoded', false);
- }
-
- const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter);
-
- return adapter(config).then(function onAdapterResolution(response) {
- throwIfCancellationRequested(config);
-
- // Transform response data
- response.data = transformData.call(
- config,
- config.transformResponse,
- response
- );
-
- response.headers = AxiosHeaders$1.from(response.headers);
-
- return response;
- }, function onAdapterRejection(reason) {
- if (!isCancel(reason)) {
- throwIfCancellationRequested(config);
-
- // Transform response data
- if (reason && reason.response) {
- reason.response.data = transformData.call(
- config,
- config.transformResponse,
- reason.response
- );
- reason.response.headers = AxiosHeaders$1.from(reason.response.headers);
- }
- }
-
- return Promise.reject(reason);
- });
- }
-
- const headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? { ...thing } : thing;
-
- /**
- * Config-specific merge-function which creates a new config-object
- * by merging two configuration objects together.
- *
- * @param {Object} config1
- * @param {Object} config2
- *
- * @returns {Object} New object resulting from merging config2 to config1
- */
- function mergeConfig(config1, config2) {
- // eslint-disable-next-line no-param-reassign
- config2 = config2 || {};
- const config = {};
-
- function getMergedValue(target, source, caseless) {
- if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) {
- return utils$1.merge.call({caseless}, target, source);
- } else if (utils$1.isPlainObject(source)) {
- return utils$1.merge({}, source);
- } else if (utils$1.isArray(source)) {
- return source.slice();
- }
- return source;
- }
-
- // eslint-disable-next-line consistent-return
- function mergeDeepProperties(a, b, caseless) {
- if (!utils$1.isUndefined(b)) {
- return getMergedValue(a, b, caseless);
- } else if (!utils$1.isUndefined(a)) {
- return getMergedValue(undefined, a, caseless);
- }
- }
-
- // eslint-disable-next-line consistent-return
- function valueFromConfig2(a, b) {
- if (!utils$1.isUndefined(b)) {
- return getMergedValue(undefined, b);
- }
- }
-
- // eslint-disable-next-line consistent-return
- function defaultToConfig2(a, b) {
- if (!utils$1.isUndefined(b)) {
- return getMergedValue(undefined, b);
- } else if (!utils$1.isUndefined(a)) {
- return getMergedValue(undefined, a);
- }
- }
-
- // eslint-disable-next-line consistent-return
- function mergeDirectKeys(a, b, prop) {
- if (prop in config2) {
- return getMergedValue(a, b);
- } else if (prop in config1) {
- return getMergedValue(undefined, a);
- }
- }
-
- const mergeMap = {
- url: valueFromConfig2,
- method: valueFromConfig2,
- data: valueFromConfig2,
- baseURL: defaultToConfig2,
- transformRequest: defaultToConfig2,
- transformResponse: defaultToConfig2,
- paramsSerializer: defaultToConfig2,
- timeout: defaultToConfig2,
- timeoutMessage: defaultToConfig2,
- withCredentials: defaultToConfig2,
- withXSRFToken: defaultToConfig2,
- adapter: defaultToConfig2,
- responseType: defaultToConfig2,
- xsrfCookieName: defaultToConfig2,
- xsrfHeaderName: defaultToConfig2,
- onUploadProgress: defaultToConfig2,
- onDownloadProgress: defaultToConfig2,
- decompress: defaultToConfig2,
- maxContentLength: defaultToConfig2,
- maxBodyLength: defaultToConfig2,
- beforeRedirect: defaultToConfig2,
- transport: defaultToConfig2,
- httpAgent: defaultToConfig2,
- httpsAgent: defaultToConfig2,
- cancelToken: defaultToConfig2,
- socketPath: defaultToConfig2,
- responseEncoding: defaultToConfig2,
- validateStatus: mergeDirectKeys,
- headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)
+define(["vue"], function (vue) {
+ "use strict";
+
+ const global$1 =
+ typeof global !== "undefined"
+ ? global
+ : typeof self !== "undefined"
+ ? self
+ : typeof window !== "undefined"
+ ? window
+ : {};
+
+ function getDevtoolsGlobalHook() {
+ return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;
+ }
+ function getTarget() {
+ // @ts-ignore
+ return typeof navigator !== "undefined" && typeof window !== "undefined"
+ ? window
+ : typeof global$1 !== "undefined"
+ ? global$1
+ : {};
+ }
+ const isProxyAvailable = typeof Proxy === "function";
+
+ const HOOK_SETUP = "devtools-plugin:setup";
+ const HOOK_PLUGIN_SETTINGS_SET = "plugin:settings:set";
+
+ let supported;
+ let perf;
+ function isPerformanceSupported() {
+ let _a;
+ if (supported !== undefined) {
+ return supported;
+ }
+ if (typeof window !== "undefined" && window.performance) {
+ supported = true;
+ perf = window.performance;
+ } else if (
+ typeof global$1 !== "undefined" &&
+ ((_a = global$1.perf_hooks) === null || _a === void 0
+ ? void 0
+ : _a.performance)
+ ) {
+ supported = true;
+ perf = global$1.perf_hooks.performance;
+ } else {
+ supported = false;
+ }
+ return supported;
+ }
+ function now() {
+ return isPerformanceSupported() ? perf.now() : Date.now();
+ }
+
+ class ApiProxy {
+ constructor(plugin, hook) {
+ this.target = null;
+ this.targetQueue = [];
+ this.onQueue = [];
+ this.plugin = plugin;
+ this.hook = hook;
+ const defaultSettings = {};
+ if (plugin.settings) {
+ for (const id in plugin.settings) {
+ const item = plugin.settings[id];
+ defaultSettings[id] = item.defaultValue;
+ }
+ }
+ const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;
+ let currentSettings = Object.assign({}, defaultSettings);
+ try {
+ const raw = localStorage.getItem(localSettingsSaveId);
+ const data = JSON.parse(raw);
+ Object.assign(currentSettings, data);
+ } catch (e) {
+ // noop
+ }
+ this.fallbacks = {
+ getSettings() {
+ return currentSettings;
+ },
+ setSettings(value) {
+ try {
+ localStorage.setItem(localSettingsSaveId, JSON.stringify(value));
+ } catch (e) {
+ // noop
+ }
+ currentSettings = value;
+ },
+ now() {
+ return now();
+ },
+ };
+ if (hook) {
+ hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {
+ if (pluginId === this.plugin.id) {
+ this.fallbacks.setSettings(value);
+ }
+ });
+ }
+ this.proxiedOn = new Proxy(
+ {},
+ {
+ get: (_target, prop) => {
+ if (this.target) {
+ return this.target.on[prop];
+ } else {
+ return (...args) => {
+ this.onQueue.push({
+ method: prop,
+ args,
+ });
};
-
- utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {
- const merge = mergeMap[prop] || mergeDeepProperties;
- const configValue = merge(config1[prop], config2[prop], prop);
- (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
- });
-
- return config;
}
-
- const VERSION = "1.6.8";
-
- const validators$1 = {};
-
- // eslint-disable-next-line func-names
- ['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {
- validators$1[type] = function validator(thing) {
- return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
+ },
+ }
+ );
+ this.proxiedTarget = new Proxy(
+ {},
+ {
+ get: (_target, prop) => {
+ if (this.target) {
+ return this.target[prop];
+ } else if (prop === "on") {
+ return this.proxiedOn;
+ } else if (Object.keys(this.fallbacks).includes(prop)) {
+ return (...args) => {
+ this.targetQueue.push({
+ method: prop,
+ args,
+ resolve: () => {},
+ });
+ return this.fallbacks[prop](...args);
};
- });
-
- const deprecatedWarnings = {};
-
- /**
- * Transitional option validator
- *
- * @param {function|boolean?} validator - set to false if the transitional option has been removed
- * @param {string?} version - deprecated version / removed since version
- * @param {string?} message - some message with additional info
- *
- * @returns {function}
- */
- validators$1.transitional = function transitional(validator, version, message) {
- function formatMessage(opt, desc) {
- return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
- }
-
- // eslint-disable-next-line func-names
- return (value, opt, opts) => {
- if (validator === false) {
- throw new AxiosError(
- formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),
- AxiosError.ERR_DEPRECATED
- );
- }
-
- if (version && !deprecatedWarnings[opt]) {
- deprecatedWarnings[opt] = true;
- // eslint-disable-next-line no-console
- console.warn(
- formatMessage(
- opt,
- ' has been deprecated since v' + version + ' and will be removed in the near future'
- )
- );
- }
-
- return validator ? validator(value, opt, opts) : true;
+ } else {
+ return (...args) => {
+ return new Promise((resolve) => {
+ this.targetQueue.push({
+ method: prop,
+ args,
+ resolve,
+ });
+ });
};
- };
-
- /**
- * Assert object's properties type
- *
- * @param {object} options
- * @param {object} schema
- * @param {boolean?} allowUnknown
- *
- * @returns {object}
- */
-
- function assertOptions(options, schema, allowUnknown) {
- if (typeof options !== 'object') {
- throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);
- }
- const keys = Object.keys(options);
- let i = keys.length;
- while (i-- > 0) {
- const opt = keys[i];
- const validator = schema[opt];
- if (validator) {
- const value = options[opt];
- const result = value === undefined || validator(value, opt, options);
- if (result !== true) {
- throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);
- }
- continue;
- }
- if (allowUnknown !== true) {
- throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);
- }
- }
}
-
- var validator = {
- assertOptions,
- validators: validators$1
- };
-
- const validators = validator.validators;
-
- /**
- * Create a new instance of Axios
- *
- * @param {Object} instanceConfig The default config for the instance
- *
- * @return {Axios} A new instance of Axios
- */
- class Axios {
- constructor(instanceConfig) {
- this.defaults = instanceConfig;
- this.interceptors = {
- request: new InterceptorManager$1(),
- response: new InterceptorManager$1()
- };
- }
-
- /**
- * Dispatch a request
- *
- * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)
- * @param {?Object} config
- *
- * @returns {Promise} The Promise to be fulfilled
- */
- async request(configOrUrl, config) {
- try {
- return await this._request(configOrUrl, config);
- } catch (err) {
- if (err instanceof Error) {
- let dummy;
-
- Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());
-
- // slice off the Error: ... line
- const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : '';
-
- if (!err.stack) {
- err.stack = stack;
- // match without the 2 top stack lines
- } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) {
- err.stack += '\n' + stack;
- }
- }
-
- throw err;
- }
+ },
+ }
+ );
+ }
+ async setRealTarget(target) {
+ this.target = target;
+ for (const item of this.onQueue) {
+ this.target.on[item.method](...item.args);
+ }
+ for (const item of this.targetQueue) {
+ item.resolve(await this.target[item.method](...item.args));
+ }
+ }
+ }
+
+ function setupDevtoolsPlugin(pluginDescriptor, setupFn) {
+ const descriptor = pluginDescriptor;
+ const target = getTarget();
+ const hook = getDevtoolsGlobalHook();
+ const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;
+ if (
+ hook &&
+ (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)
+ ) {
+ hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);
+ } else {
+ const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;
+ const list = (target.__VUE_DEVTOOLS_PLUGINS__ =
+ target.__VUE_DEVTOOLS_PLUGINS__ || []);
+ list.push({
+ pluginDescriptor: descriptor,
+ setupFn,
+ proxy,
+ });
+ if (proxy) {
+ setupFn(proxy.proxiedTarget);
+ }
+ }
+ }
+
+ /*!
+ * vuex v4.1.0
+ * (c) 2022 Evan You
+ * @license MIT
+ */
+
+ const storeKey = "store";
+
+ /**
+ * forEach for object
+ */
+ function forEachValue(obj, fn) {
+ Object.keys(obj).forEach(function (key) {
+ return fn(obj[key], key);
+ });
+ }
+
+ function isObject$1(obj) {
+ return obj !== null && typeof obj === "object";
+ }
+
+ function isPromise(val) {
+ return val && typeof val.then === "function";
+ }
+
+ function assert(condition, msg) {
+ if (!condition) {
+ throw new Error("[vuex] " + msg);
+ }
+ }
+
+ function partial(fn, arg) {
+ return function () {
+ return fn(arg);
+ };
+ }
+
+ function genericSubscribe(fn, subs, options) {
+ if (subs.indexOf(fn) < 0) {
+ options && options.prepend ? subs.unshift(fn) : subs.push(fn);
+ }
+ return function () {
+ const i = subs.indexOf(fn);
+ if (i > -1) {
+ subs.splice(i, 1);
+ }
+ };
+ }
+
+ function resetStore(store, hot) {
+ store._actions = Object.create(null);
+ store._mutations = Object.create(null);
+ store._wrappedGetters = Object.create(null);
+ store._modulesNamespaceMap = Object.create(null);
+ const state = store.state;
+ // init all modules
+ installModule(store, state, [], store._modules.root, true);
+ // reset state
+ resetStoreState(store, state, hot);
+ }
+
+ function resetStoreState(store, state, hot) {
+ const oldState = store._state;
+ const oldScope = store._scope;
+
+ // bind store public getters
+ store.getters = {};
+ // reset local getters cache
+ store._makeLocalGettersCache = Object.create(null);
+ const wrappedGetters = store._wrappedGetters;
+ const computedObj = {};
+ const computedCache = {};
+
+ // create a new effect scope and create computed object inside it to avoid
+ // getters (computed) getting destroyed on component unmount.
+ const scope = vue.effectScope(true);
+
+ scope.run(function () {
+ forEachValue(wrappedGetters, function (fn, key) {
+ // use computed to leverage its lazy-caching mechanism
+ // direct inline function use will lead to closure preserving oldState.
+ // using partial to return function with only arguments preserved in closure environment.
+ computedObj[key] = partial(fn, store);
+ computedCache[key] = vue.computed(function () {
+ return computedObj[key]();
+ });
+ Object.defineProperty(store.getters, key, {
+ get() {
+ return computedCache[key].value;
+ },
+ enumerable: true, // for local getters
+ });
+ });
+ });
+
+ store._state = vue.reactive({
+ data: state,
+ });
+
+ // register the newly created effect scope to the store so that we can
+ // dispose the effects when this method runs again in the future.
+ store._scope = scope;
+
+ // enable strict mode for new state
+ if (store.strict) {
+ enableStrictMode(store);
+ }
+
+ if (oldState) {
+ if (hot) {
+ // dispatch changes in all subscribed watchers
+ // to force getter re-evaluation for hot reloading.
+ store._withCommit(function () {
+ oldState.data = null;
+ });
+ }
+ }
+
+ // dispose previously registered effect scope if there is one.
+ if (oldScope) {
+ oldScope.stop();
+ }
+ }
+
+ function installModule(store, rootState, path, module, hot) {
+ const isRoot = !path.length;
+ const namespace = store._modules.getNamespace(path);
+
+ // register in namespace map
+ if (module.namespaced) {
+ if (store._modulesNamespaceMap[namespace] && true) {
+ console.error(
+ "[vuex] duplicate namespace " +
+ namespace +
+ " for the namespaced module " +
+ path.join("/")
+ );
+ }
+ store._modulesNamespaceMap[namespace] = module;
+ }
+
+ // set state
+ if (!isRoot && !hot) {
+ const parentState = getNestedState(rootState, path.slice(0, -1));
+ const moduleName = path[path.length - 1];
+ store._withCommit(function () {
+ {
+ if (moduleName in parentState) {
+ console.warn(
+ '[vuex] state field "' +
+ moduleName +
+ '" was overridden by a module with the same name at "' +
+ path.join(".") +
+ '"'
+ );
+ }
+ }
+ parentState[moduleName] = module.state;
+ });
+ }
+
+ const local = (module.context = makeLocalContext(store, namespace, path));
+
+ module.forEachMutation(function (mutation, key) {
+ const namespacedType = namespace + key;
+ registerMutation(store, namespacedType, mutation, local);
+ });
+
+ module.forEachAction(function (action, key) {
+ const type = action.root ? key : namespace + key;
+ const handler = action.handler || action;
+ registerAction(store, type, handler, local);
+ });
+
+ module.forEachGetter(function (getter, key) {
+ const namespacedType = namespace + key;
+ registerGetter(store, namespacedType, getter, local);
+ });
+
+ module.forEachChild(function (child, key) {
+ installModule(store, rootState, path.concat(key), child, hot);
+ });
+ }
+
+ /**
+ * make localized dispatch, commit, getters and state
+ * if there is no namespace, just use root ones
+ */
+ function makeLocalContext(store, namespace, path) {
+ const noNamespace = namespace === "";
+
+ const local = {
+ dispatch: noNamespace
+ ? store.dispatch
+ : function (_type, _payload, _options) {
+ const args = unifyObjectStyle(_type, _payload, _options);
+ const payload = args.payload;
+ const options = args.options;
+ let type = args.type;
+
+ if (!options || !options.root) {
+ type = namespace + type;
+ if (!store._actions[type]) {
+ console.error(
+ "[vuex] unknown local action type: " +
+ args.type +
+ ", global type: " +
+ type
+ );
+ return;
}
+ }
- _request(configOrUrl, config) {
- /*eslint no-param-reassign:0*/
- // Allow for axios('example/url'[, config]) a la fetch API
- if (typeof configOrUrl === 'string') {
- config = config || {};
- config.url = configOrUrl;
- } else {
- config = configOrUrl || {};
- }
-
- config = mergeConfig(this.defaults, config);
-
- const {transitional, paramsSerializer, headers} = config;
-
- if (transitional !== undefined) {
- validator.assertOptions(transitional, {
- silentJSONParsing: validators.transitional(validators.boolean),
- forcedJSONParsing: validators.transitional(validators.boolean),
- clarifyTimeoutError: validators.transitional(validators.boolean)
- }, false);
- }
-
- if (paramsSerializer != null) {
- if (utils$1.isFunction(paramsSerializer)) {
- config.paramsSerializer = {
- serialize: paramsSerializer
- };
- } else {
- validator.assertOptions(paramsSerializer, {
- encode: validators.function,
- serialize: validators.function
- }, true);
- }
- }
-
- // Set config.method
- config.method = (config.method || this.defaults.method || 'get').toLowerCase();
+ return store.dispatch(type, payload);
+ },
- // Flatten headers
- let contextHeaders = headers && utils$1.merge(
- headers.common,
- headers[config.method]
- );
+ commit: noNamespace
+ ? store.commit
+ : function (_type, _payload, _options) {
+ const args = unifyObjectStyle(_type, _payload, _options);
+ const payload = args.payload;
+ const options = args.options;
+ let type = args.type;
- headers && utils$1.forEach(
- ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
- (method) => {
- delete headers[method];
- }
+ if (!options || !options.root) {
+ type = namespace + type;
+ if (!store._mutations[type]) {
+ console.error(
+ "[vuex] unknown local mutation type: " +
+ args.type +
+ ", global type: " +
+ type
);
-
- config.headers = AxiosHeaders$1.concat(contextHeaders, headers);
-
- // filter out skipped interceptors
- const requestInterceptorChain = [];
- let synchronousRequestInterceptors = true;
- this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
- if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
- return;
- }
-
- synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
-
- requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
- });
-
- const responseInterceptorChain = [];
- this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
- responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
- });
-
- let promise;
- let i = 0;
- let len;
-
- if (!synchronousRequestInterceptors) {
- const chain = [dispatchRequest.bind(this), undefined];
- chain.unshift.apply(chain, requestInterceptorChain);
- chain.push.apply(chain, responseInterceptorChain);
- len = chain.length;
-
- promise = Promise.resolve(config);
-
- while (i < len) {
- promise = promise.then(chain[i++], chain[i++]);
- }
-
- return promise;
- }
-
- len = requestInterceptorChain.length;
-
- let newConfig = config;
-
- i = 0;
-
- while (i < len) {
- const onFulfilled = requestInterceptorChain[i++];
- const onRejected = requestInterceptorChain[i++];
- try {
- newConfig = onFulfilled(newConfig);
- } catch (error) {
- onRejected.call(this, error);
- break;
- }
- }
-
- try {
- promise = dispatchRequest.call(this, newConfig);
- } catch (error) {
- return Promise.reject(error);
- }
-
- i = 0;
- len = responseInterceptorChain.length;
-
- while (i < len) {
- promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);
- }
-
- return promise;
- }
-
- getUri(config) {
- config = mergeConfig(this.defaults, config);
- const fullPath = buildFullPath(config.baseURL, config.url);
- return buildURL(fullPath, config.params, config.paramsSerializer);
+ return;
}
}
- // Provide aliases for supported request methods
- utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
- /*eslint func-names:0*/
- Axios.prototype[method] = function(url, config) {
- return this.request(mergeConfig(config || {}, {
- method,
- url,
- data: (config || {}).data
- }));
- };
+ store.commit(type, payload, options);
+ },
+ };
+
+ // getters and state object must be gotten lazily
+ // because they will be changed by state update
+ Object.defineProperties(local, {
+ getters: {
+ get: noNamespace
+ ? function () {
+ return store.getters;
+ }
+ : function () {
+ return makeLocalGetters(store, namespace);
+ },
+ },
+ state: {
+ get() {
+ return getNestedState(store.state, path);
+ },
+ },
+ });
+
+ return local;
+ }
+
+ function makeLocalGetters(store, namespace) {
+ if (!store._makeLocalGettersCache[namespace]) {
+ const gettersProxy = {};
+ const splitPos = namespace.length;
+ Object.keys(store.getters).forEach(function (type) {
+ // skip if the target getter is not match this namespace
+ if (type.slice(0, splitPos) !== namespace) {
+ return;
+ }
+
+ // extract local getter type
+ const localType = type.slice(splitPos);
+
+ // Add a port to the getters proxy.
+ // Define as getter property because
+ // we do not want to evaluate the getters in this time.
+ Object.defineProperty(gettersProxy, localType, {
+ get() {
+ return store.getters[type];
+ },
+ enumerable: true,
+ });
+ });
+ store._makeLocalGettersCache[namespace] = gettersProxy;
+ }
+
+ return store._makeLocalGettersCache[namespace];
+ }
+
+ function registerMutation(store, type, handler, local) {
+ const entry = store._mutations[type] || (store._mutations[type] = []);
+ entry.push(function wrappedMutationHandler(payload) {
+ handler.call(store, local.state, payload);
+ });
+ }
+
+ function registerAction(store, type, handler, local) {
+ const entry = store._actions[type] || (store._actions[type] = []);
+ entry.push(function wrappedActionHandler(payload) {
+ let res = handler.call(
+ store,
+ {
+ dispatch: local.dispatch,
+ commit: local.commit,
+ getters: local.getters,
+ state: local.state,
+ rootGetters: store.getters,
+ rootState: store.state,
+ },
+ payload
+ );
+ if (!isPromise(res)) {
+ res = Promise.resolve(res);
+ }
+ if (store._devtoolHook) {
+ return res.catch(function (err) {
+ store._devtoolHook.emit("vuex:error", err);
+ throw err;
+ });
+ } else {
+ return res;
+ }
+ });
+ }
+
+ function registerGetter(store, type, rawGetter, local) {
+ if (store._wrappedGetters[type]) {
+ {
+ console.error("[vuex] duplicate getter key: " + type);
+ }
+ return;
+ }
+ store._wrappedGetters[type] = function wrappedGetter(store) {
+ return rawGetter(
+ local.state, // local state
+ local.getters, // local getters
+ store.state, // root state
+ store.getters // root getters
+ );
+ };
+ }
+
+ function enableStrictMode(store) {
+ vue.watch(
+ function () {
+ return store._state.data;
+ },
+ function () {
+ {
+ assert(
+ store._committing,
+ "do not mutate vuex store state outside mutation handlers."
+ );
+ }
+ },
+ { deep: true, flush: "sync" }
+ );
+ }
+
+ function getNestedState(state, path) {
+ return path.reduce(function (state, key) {
+ return state[key];
+ }, state);
+ }
+
+ function unifyObjectStyle(type, payload, options) {
+ if (isObject$1(type) && type.type) {
+ options = payload;
+ payload = type;
+ type = type.type;
+ }
+
+ {
+ assert(
+ typeof type === "string",
+ "expects string as the type, but found " + typeof type + "."
+ );
+ }
+
+ return { type, payload, options };
+ }
+
+ const LABEL_VUEX_BINDINGS = "vuex bindings";
+ const MUTATIONS_LAYER_ID = "vuex:mutations";
+ const ACTIONS_LAYER_ID = "vuex:actions";
+ const INSPECTOR_ID = "vuex";
+
+ let actionId = 0;
+
+ function addDevtools(app, store) {
+ setupDevtoolsPlugin(
+ {
+ id: "org.vuejs.vuex",
+ app,
+ label: "Vuex",
+ homepage: "https://next.vuex.vuejs.org/",
+ logo: "https://vuejs.org/images/icons/favicon-96x96.png",
+ packageName: "vuex",
+ componentStateTypes: [LABEL_VUEX_BINDINGS],
+ },
+ function (api) {
+ api.addTimelineLayer({
+ id: MUTATIONS_LAYER_ID,
+ label: "Vuex Mutations",
+ color: COLOR_LIME_500,
+ });
+
+ api.addTimelineLayer({
+ id: ACTIONS_LAYER_ID,
+ label: "Vuex Actions",
+ color: COLOR_LIME_500,
+ });
+
+ api.addInspector({
+ id: INSPECTOR_ID,
+ label: "Vuex",
+ icon: "storage",
+ treeFilterPlaceholder: "Filter stores...",
+ });
+
+ api.on.getInspectorTree(function (payload) {
+ if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
+ if (payload.filter) {
+ const nodes = [];
+ flattenStoreForInspectorTree(
+ nodes,
+ store._modules.root,
+ payload.filter,
+ ""
+ );
+ payload.rootNodes = nodes;
+ } else {
+ payload.rootNodes = [
+ formatStoreForInspectorTree(store._modules.root, ""),
+ ];
+ }
+ }
+ });
+
+ api.on.getInspectorState(function (payload) {
+ if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
+ const modulePath = payload.nodeId;
+ makeLocalGetters(store, modulePath);
+ payload.state = formatStoreForInspectorState(
+ getStoreModule(store._modules, modulePath),
+ modulePath === "root"
+ ? store.getters
+ : store._makeLocalGettersCache,
+ modulePath
+ );
+ }
+ });
+
+ api.on.editInspectorState(function (payload) {
+ if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
+ const modulePath = payload.nodeId;
+ let path = payload.path;
+ if (modulePath !== "root") {
+ path = modulePath.split("/").filter(Boolean).concat(path);
+ }
+ store._withCommit(function () {
+ payload.set(store._state.data, path, payload.state.value);
});
-
- utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
- /*eslint func-names:0*/
-
- function generateHTTPMethod(isForm) {
- return function httpMethod(url, data, config) {
- return this.request(mergeConfig(config || {}, {
- method,
- headers: isForm ? {
- 'Content-Type': 'multipart/form-data'
- } : {},
- url,
- data
- }));
- };
- }
-
- Axios.prototype[method] = generateHTTPMethod();
-
- Axios.prototype[method + 'Form'] = generateHTTPMethod(true);
+ }
+ });
+
+ store.subscribe(function (mutation, state) {
+ const data = {};
+
+ if (mutation.payload) {
+ data.payload = mutation.payload;
+ }
+
+ data.state = state;
+
+ api.notifyComponentUpdate();
+ api.sendInspectorTree(INSPECTOR_ID);
+ api.sendInspectorState(INSPECTOR_ID);
+
+ api.addTimelineEvent({
+ layerId: MUTATIONS_LAYER_ID,
+ event: {
+ time: Date.now(),
+ title: mutation.type,
+ data,
+ },
+ });
+ });
+
+ store.subscribeAction({
+ before(action, state) {
+ const data = {};
+ if (action.payload) {
+ data.payload = action.payload;
+ }
+ action._id = actionId++;
+ action._time = Date.now();
+ data.state = state;
+
+ api.addTimelineEvent({
+ layerId: ACTIONS_LAYER_ID,
+ event: {
+ time: action._time,
+ title: action.type,
+ groupId: action._id,
+ subtitle: "start",
+ data,
+ },
});
-
- var Axios$1 = Axios;
-
- /**
- * A `CancelToken` is an object that can be used to request cancellation of an operation.
- *
- * @param {Function} executor The executor function.
- *
- * @returns {CancelToken}
- */
- class CancelToken {
- constructor(executor) {
- if (typeof executor !== 'function') {
- throw new TypeError('executor must be a function.');
- }
-
- let resolvePromise;
-
- this.promise = new Promise(function promiseExecutor(resolve) {
- resolvePromise = resolve;
- });
-
- const token = this;
-
- // eslint-disable-next-line func-names
- this.promise.then(cancel => {
- if (!token._listeners) return;
-
- let i = token._listeners.length;
-
- while (i-- > 0) {
- token._listeners[i](cancel);
- }
- token._listeners = null;
- });
-
- // eslint-disable-next-line func-names
- this.promise.then = onfulfilled => {
- let _resolve;
- // eslint-disable-next-line func-names
- const promise = new Promise(resolve => {
- token.subscribe(resolve);
- _resolve = resolve;
- }).then(onfulfilled);
-
- promise.cancel = function reject() {
- token.unsubscribe(_resolve);
- };
-
- return promise;
- };
-
- executor(function cancel(message, config, request) {
- if (token.reason) {
- // Cancellation has already been requested
- return;
- }
-
- token.reason = new CanceledError(message, config, request);
- resolvePromise(token.reason);
- });
- }
-
- /**
- * Throws a `CanceledError` if cancellation has been requested.
- */
- throwIfRequested() {
- if (this.reason) {
- throw this.reason;
- }
- }
-
- /**
- * Subscribe to the cancel signal
- */
-
- subscribe(listener) {
- if (this.reason) {
- listener(this.reason);
- return;
- }
-
- if (this._listeners) {
- this._listeners.push(listener);
- } else {
- this._listeners = [listener];
- }
- }
-
- /**
- * Unsubscribe from the cancel signal
- */
-
- unsubscribe(listener) {
- if (!this._listeners) {
- return;
- }
- const index = this._listeners.indexOf(listener);
- if (index !== -1) {
- this._listeners.splice(index, 1);
- }
- }
-
- /**
- * Returns an object that contains a new `CancelToken` and a function that, when called,
- * cancels the `CancelToken`.
- */
- static source() {
- let cancel;
- const token = new CancelToken(function executor(c) {
- cancel = c;
- });
- return {
- token,
- cancel
- };
- }
- }
-
- var CancelToken$1 = CancelToken;
-
- /**
- * Syntactic sugar for invoking a function and expanding an array for arguments.
- *
- * Common use case would be to use `Function.prototype.apply`.
- *
- * ```js
- * function f(x, y, z) {}
- * var args = [1, 2, 3];
- * f.apply(null, args);
- * ```
- *
- * With `spread` this example can be re-written.
- *
- * ```js
- * spread(function(x, y, z) {})([1, 2, 3]);
- * ```
- *
- * @param {Function} callback
- *
- * @returns {Function}
- */
- function spread(callback) {
- return function wrap(arr) {
- return callback.apply(null, arr);
- };
- }
-
- /**
- * Determines whether the payload is an error thrown by Axios
- *
- * @param {*} payload The value to test
- *
- * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
- */
- function isAxiosError(payload) {
- return utils$1.isObject(payload) && (payload.isAxiosError === true);
- }
-
- const HttpStatusCode = {
- Continue: 100,
- SwitchingProtocols: 101,
- Processing: 102,
- EarlyHints: 103,
- Ok: 200,
- Created: 201,
- Accepted: 202,
- NonAuthoritativeInformation: 203,
- NoContent: 204,
- ResetContent: 205,
- PartialContent: 206,
- MultiStatus: 207,
- AlreadyReported: 208,
- ImUsed: 226,
- MultipleChoices: 300,
- MovedPermanently: 301,
- Found: 302,
- SeeOther: 303,
- NotModified: 304,
- UseProxy: 305,
- Unused: 306,
- TemporaryRedirect: 307,
- PermanentRedirect: 308,
- BadRequest: 400,
- Unauthorized: 401,
- PaymentRequired: 402,
- Forbidden: 403,
- NotFound: 404,
- MethodNotAllowed: 405,
- NotAcceptable: 406,
- ProxyAuthenticationRequired: 407,
- RequestTimeout: 408,
- Conflict: 409,
- Gone: 410,
- LengthRequired: 411,
- PreconditionFailed: 412,
- PayloadTooLarge: 413,
- UriTooLong: 414,
- UnsupportedMediaType: 415,
- RangeNotSatisfiable: 416,
- ExpectationFailed: 417,
- ImATeapot: 418,
- MisdirectedRequest: 421,
- UnprocessableEntity: 422,
- Locked: 423,
- FailedDependency: 424,
- TooEarly: 425,
- UpgradeRequired: 426,
- PreconditionRequired: 428,
- TooManyRequests: 429,
- RequestHeaderFieldsTooLarge: 431,
- UnavailableForLegalReasons: 451,
- InternalServerError: 500,
- NotImplemented: 501,
- BadGateway: 502,
- ServiceUnavailable: 503,
- GatewayTimeout: 504,
- HttpVersionNotSupported: 505,
- VariantAlsoNegotiates: 506,
- InsufficientStorage: 507,
- LoopDetected: 508,
- NotExtended: 510,
- NetworkAuthenticationRequired: 511,
+ },
+ after(action, state) {
+ const data = {};
+ const duration = Date.now() - action._time;
+ data.duration = {
+ _custom: {
+ type: "duration",
+ display: duration + "ms",
+ tooltip: "Action duration",
+ value: duration,
+ },
};
-
- Object.entries(HttpStatusCode).forEach(([key, value]) => {
- HttpStatusCode[value] = key;
- });
-
- var HttpStatusCode$1 = HttpStatusCode;
-
- /**
- * Create an instance of Axios
- *
- * @param {Object} defaultConfig The default config for the instance
- *
- * @returns {Axios} A new instance of Axios
- */
- function createInstance(defaultConfig) {
- const context = new Axios$1(defaultConfig);
- const instance = bind(Axios$1.prototype.request, context);
-
- // Copy axios.prototype to instance
- utils$1.extend(instance, Axios$1.prototype, context, {allOwnKeys: true});
-
- // Copy context to instance
- utils$1.extend(instance, context, null, {allOwnKeys: true});
-
- // Factory for creating new instances
- instance.create = function create(instanceConfig) {
- return createInstance(mergeConfig(defaultConfig, instanceConfig));
- };
-
- return instance;
+ if (action.payload) {
+ data.payload = action.payload;
}
+ data.state = state;
- // Create the default instance to be exported
- const axios = createInstance(defaults$1);
-
- // Expose Axios class to allow class inheritance
- axios.Axios = Axios$1;
-
- // Expose Cancel & CancelToken
- axios.CanceledError = CanceledError;
- axios.CancelToken = CancelToken$1;
- axios.isCancel = isCancel;
- axios.VERSION = VERSION;
- axios.toFormData = toFormData;
-
- // Expose AxiosError class
- axios.AxiosError = AxiosError;
-
- // alias for CanceledError for backward compatibility
- axios.Cancel = axios.CanceledError;
-
- // Expose all/spread
- axios.all = function all(promises) {
- return Promise.all(promises);
- };
-
- axios.spread = spread;
-
- // Expose isAxiosError
- axios.isAxiosError = isAxiosError;
-
- // Expose mergeConfig
- axios.mergeConfig = mergeConfig;
-
- axios.AxiosHeaders = AxiosHeaders$1;
-
- axios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing);
-
- axios.getAdapter = adapters.getAdapter;
-
- axios.HttpStatusCode = HttpStatusCode$1;
-
- axios.default = axios;
-
- // this module should only have a default export
- var axios$1 = axios;
-
- var script = {
- data: () => ({
- mode: "edit",
- fileId: null,
- filePath: null,
- config: null,
- docEditor: null
- }),
- created() {
- this.mode = this.$route.params.mode;
- this.fileId = this.$route.params.fileId;
- this.filePath = this.$route.params.filePath;
+ api.addTimelineEvent({
+ layerId: ACTIONS_LAYER_ID,
+ event: {
+ time: Date.now(),
+ title: action.type,
+ groupId: action._id,
+ subtitle: "end",
+ data,
},
- methods: {
- ...mapActions(["showMessage"]),
- messageDisplay(desc, status = "danger", title = "") {
- this.showMessage({
- title: title,
- desc: desc,
- status: status,
- autoClose: {
- enabled: true
- }
- });
- },
- onRequestClose() {
- let params = {
- driveAliasAndItem: null
- };
- if (this.currentFolder) {
- params.driveAliasAndItem = "personal/" + this.currentFolder.ownerId + this.currentFolder.path;
- }
- this.$router.push({
- name: "files-spaces-generic",
- params
- });
- },
- getDocumentServerUrl() {
- return axios$1({
- method: "GET",
- url: this.configuration.server + "ocs/v2.php/apps/onlyoffice/api/v1/settings/docserver",
- headers: {
- authorization: "Bearer " + this.getToken
- }
- }).then(response => {
- if (!response.data.documentServerUrl) {
- throw "ONLYOFFICE app is not configured. Please contact admin";
- }
- return response.data.documentServerUrl;
- });
- },
- create() {
- return new Promise((resolve, reject) => {
- if (this.mode != "create") {
- resolve();
- return;
- }
- axios$1({
- method: "GET",
- url: this.configuration.server + "ocs/v2.php/apps/onlyoffice/api/v1/empty/" + this.fileId,
- headers: {
- authorization: "Bearer " + this.getToken
- }
- }).then(response => {
- if (response.data.error) {
- reject(response.data.error);
- return;
- }
- resolve();
- });
- });
- },
- initConfig() {
- return axios$1({
- method: "GET",
- url: this.configuration.server + "ocs/v2.php/apps/onlyoffice/api/v1/config/" + this.fileId,
- headers: {
- authorization: "Bearer " + this.getToken
- }
- }).then(response => {
- if (response.data.error) {
- throw response.data.error;
- }
- this.config = response.data;
- let events = [];
- events["onRequestClose"] = this.onRequestClose;
- this.config.editorConfig.customization.goback.requestClose = true;
- this.config.events = events;
- this.docEditor = new DocsAPI.DocEditor("iframeEditor", this.config);
- });
- }
- },
- computed: {
- ...mapGetters(["getToken", "configuration", "apps"]),
- ...mapGetters("Files", ["currentFolder"])
+ });
+ },
+ });
+ }
+ );
+ }
+
+ // extracted from tailwind palette
+ const COLOR_LIME_500 = 0x84cc16;
+ const COLOR_DARK = 0x666666;
+ const COLOR_WHITE = 0xffffff;
+
+ const TAG_NAMESPACED = {
+ label: "namespaced",
+ textColor: COLOR_WHITE,
+ backgroundColor: COLOR_DARK,
+ };
+
+ /**
+ * @param {string} path
+ */
+ function extractNameFromPath(path) {
+ return path && path !== "root" ? path.split("/").slice(-2, -1)[0] : "Root";
+ }
+
+ /**
+ * @param {*} module
+ * @return {import('@vue/devtools-api').CustomInspectorNode}
+ */
+ function formatStoreForInspectorTree(module, path) {
+ return {
+ id: path || "root",
+ // all modules end with a `/`, we want the last segment only
+ // cart/ -> cart
+ // nested/cart/ -> cart
+ label: extractNameFromPath(path),
+ tags: module.namespaced ? [TAG_NAMESPACED] : [],
+ children: Object.keys(module._children).map(function (moduleName) {
+ return formatStoreForInspectorTree(
+ module._children[moduleName],
+ path + moduleName + "/"
+ );
+ }),
+ };
+ }
+
+ /**
+ * @param {import('@vue/devtools-api').CustomInspectorNode[]} result
+ * @param {*} module
+ * @param {string} filter
+ * @param {string} path
+ */
+ function flattenStoreForInspectorTree(result, module, filter, path) {
+ if (path.includes(filter)) {
+ result.push({
+ id: path || "root",
+ label: path.endsWith("/")
+ ? path.slice(0, path.length - 1)
+ : path || "Root",
+ tags: module.namespaced ? [TAG_NAMESPACED] : [],
+ });
+ }
+ Object.keys(module._children).forEach(function (moduleName) {
+ flattenStoreForInspectorTree(
+ result,
+ module._children[moduleName],
+ filter,
+ path + moduleName + "/"
+ );
+ });
+ }
+
+ /**
+ * @param {*} module
+ * @return {import('@vue/devtools-api').CustomInspectorState}
+ */
+ function formatStoreForInspectorState(module, getters, path) {
+ getters = path === "root" ? getters : getters[path];
+ const gettersKeys = Object.keys(getters);
+ const storeState = {
+ state: Object.keys(module.state).map(function (key) {
+ return {
+ key,
+ editable: true,
+ value: module.state[key],
+ };
+ }),
+ };
+
+ if (gettersKeys.length) {
+ const tree = transformPathsToObjectTree(getters);
+ storeState.getters = Object.keys(tree).map(function (key) {
+ return {
+ key: key.endsWith("/") ? extractNameFromPath(key) : key,
+ editable: false,
+ value: canThrow(function () {
+ return tree[key];
+ }),
+ };
+ });
+ }
+
+ return storeState;
+ }
+
+ function transformPathsToObjectTree(getters) {
+ const result = {};
+ Object.keys(getters).forEach(function (key) {
+ const path = key.split("/");
+ if (path.length > 1) {
+ let target = result;
+ const leafKey = path.pop();
+ path.forEach(function (p) {
+ if (!target[p]) {
+ target[p] = {
+ _custom: {
+ value: {},
+ display: p,
+ tooltip: "Module",
+ abstract: true,
},
- mounted() {
- this.create().then(() => {
- return this.getDocumentServerUrl();
- }).then(documentServerUrl => {
- let iframeEditor = document.getElementById("iframeEditor");
- let docApi = document.createElement("script");
- docApi.setAttribute("src", documentServerUrl + "web-apps/apps/api/documents/api.js");
- iframeEditor.appendChild(docApi);
- return this.initConfig();
- }).catch(error => {
- this.messageDisplay(error);
- this.onRequestClose();
- });
- }
};
-
- const _hoisted_1 = /*#__PURE__*/vue.createElementVNode("div", {
- id: "app"
- }, [/*#__PURE__*/vue.createElementVNode("div", {
- id: "iframeEditor"
- })], -1 /* HOISTED */);
- const _hoisted_2 = [_hoisted_1];
- function render(_ctx, _cache, $props, $setup, $data, $options) {
- return vue.openBlock(), vue.createElementBlock("main", null, _hoisted_2);
- }
-
- function styleInject(css, ref) {
- if ( ref === void 0 ) ref = {};
- var insertAt = ref.insertAt;
-
- if (!css || typeof document === 'undefined') { return; }
-
- var head = document.head || document.getElementsByTagName('head')[0];
- var style = document.createElement('style');
- style.type = 'text/css';
-
- if (insertAt === 'top') {
- if (head.firstChild) {
- head.insertBefore(style, head.firstChild);
- } else {
- head.appendChild(style);
- }
- } else {
- head.appendChild(style);
- }
-
- if (style.styleSheet) {
- style.styleSheet.cssText = css;
- } else {
- style.appendChild(document.createTextNode(css));
- }
- }
-
- var css_248z = "\n#app {\r\n width: 100%;\n}\n#app > iframe {\r\n position: fixed;\r\n height: calc(100vh - 52px);\r\n right: 0;\n}\r\n";
- styleInject(css_248z);
-
- script.render = render;
- script.__file = "src/editor.vue";
-
- /**
+ }
+ target = target[p]._custom.value;
+ });
+ target[leafKey] = canThrow(function () {
+ return getters[key];
+ });
+ } else {
+ result[key] = canThrow(function () {
+ return getters[key];
+ });
+ }
+ });
+ return result;
+ }
+
+ function getStoreModule(moduleMap, path) {
+ const names = path.split("/").filter(function (n) {
+ return n;
+ });
+ return names.reduce(
+ function (module, moduleName, i) {
+ const child = module[moduleName];
+ if (!child) {
+ throw new Error(
+ 'Missing module "' + moduleName + '" for path "' + path + '".'
+ );
+ }
+ return i === names.length - 1 ? child : child._children;
+ },
+ path === "root" ? moduleMap : moduleMap.root._children
+ );
+ }
+
+ function canThrow(cb) {
+ try {
+ return cb();
+ } catch (e) {
+ return e;
+ }
+ }
+
+ // Base data struct for store's module, package with some attribute and method
+ const Module = function Module(rawModule, runtime) {
+ this.runtime = runtime;
+ // Store some children item
+ this._children = Object.create(null);
+ // Store the origin module object which passed by programmer
+ this._rawModule = rawModule;
+ const rawState = rawModule.state;
+
+ // Store the origin module's state
+ this.state = (typeof rawState === "function" ? rawState() : rawState) || {};
+ };
+
+ const prototypeAccessors$1 = { namespaced: { configurable: true } };
+
+ prototypeAccessors$1.namespaced.get = function () {
+ return !!this._rawModule.namespaced;
+ };
+
+ Module.prototype.addChild = function addChild(key, module) {
+ this._children[key] = module;
+ };
+
+ Module.prototype.removeChild = function removeChild(key) {
+ delete this._children[key];
+ };
+
+ Module.prototype.getChild = function getChild(key) {
+ return this._children[key];
+ };
+
+ Module.prototype.hasChild = function hasChild(key) {
+ return key in this._children;
+ };
+
+ Module.prototype.update = function update(rawModule) {
+ this._rawModule.namespaced = rawModule.namespaced;
+ if (rawModule.actions) {
+ this._rawModule.actions = rawModule.actions;
+ }
+ if (rawModule.mutations) {
+ this._rawModule.mutations = rawModule.mutations;
+ }
+ if (rawModule.getters) {
+ this._rawModule.getters = rawModule.getters;
+ }
+ };
+
+ Module.prototype.forEachChild = function forEachChild(fn) {
+ forEachValue(this._children, fn);
+ };
+
+ Module.prototype.forEachGetter = function forEachGetter(fn) {
+ if (this._rawModule.getters) {
+ forEachValue(this._rawModule.getters, fn);
+ }
+ };
+
+ Module.prototype.forEachAction = function forEachAction(fn) {
+ if (this._rawModule.actions) {
+ forEachValue(this._rawModule.actions, fn);
+ }
+ };
+
+ Module.prototype.forEachMutation = function forEachMutation(fn) {
+ if (this._rawModule.mutations) {
+ forEachValue(this._rawModule.mutations, fn);
+ }
+ };
+
+ Object.defineProperties(Module.prototype, prototypeAccessors$1);
+
+ const ModuleCollection = function ModuleCollection(rawRootModule) {
+ // register root module (Vuex.Store options)
+ this.register([], rawRootModule, false);
+ };
+
+ ModuleCollection.prototype.get = function get(path) {
+ return path.reduce(function (module, key) {
+ return module.getChild(key);
+ }, this.root);
+ };
+
+ ModuleCollection.prototype.getNamespace = function getNamespace(path) {
+ let module = this.root;
+ return path.reduce(function (namespace, key) {
+ module = module.getChild(key);
+ return namespace + (module.namespaced ? key + "/" : "");
+ }, "");
+ };
+
+ ModuleCollection.prototype.update = function update$1(rawRootModule) {
+ update([], this.root, rawRootModule);
+ };
+
+ ModuleCollection.prototype.register = function register(
+ path,
+ rawModule,
+ runtime
+ ) {
+ const this$1$1 = this;
+ if (runtime === void 0) {
+ runtime = true;
+ }
+
+ {
+ assertRawModule(path, rawModule);
+ }
+
+ const newModule = new Module(rawModule, runtime);
+ if (path.length === 0) {
+ this.root = newModule;
+ } else {
+ const parent = this.get(path.slice(0, -1));
+ parent.addChild(path[path.length - 1], newModule);
+ }
+
+ // register nested modules
+ if (rawModule.modules) {
+ forEachValue(rawModule.modules, function (rawChildModule, key) {
+ this$1$1.register(path.concat(key), rawChildModule, runtime);
+ });
+ }
+ };
+
+ ModuleCollection.prototype.unregister = function unregister(path) {
+ const parent = this.get(path.slice(0, -1));
+ const key = path[path.length - 1];
+ const child = parent.getChild(key);
+
+ if (!child) {
+ {
+ console.warn(
+ "[vuex] trying to unregister module '" +
+ key +
+ "', which is " +
+ "not registered"
+ );
+ }
+ return;
+ }
+
+ if (!child.runtime) {
+ return;
+ }
+
+ parent.removeChild(key);
+ };
+
+ ModuleCollection.prototype.isRegistered = function isRegistered(path) {
+ const parent = this.get(path.slice(0, -1));
+ const key = path[path.length - 1];
+
+ if (parent) {
+ return parent.hasChild(key);
+ }
+
+ return false;
+ };
+
+ function update(path, targetModule, newModule) {
+ {
+ assertRawModule(path, newModule);
+ }
+
+ // update target module
+ targetModule.update(newModule);
+
+ // update nested modules
+ if (newModule.modules) {
+ for (const key in newModule.modules) {
+ if (!targetModule.getChild(key)) {
+ {
+ console.warn(
+ "[vuex] trying to add a new module '" +
+ key +
+ "' on hot reloading, " +
+ "manual reload is needed"
+ );
+ }
+ return;
+ }
+ update(
+ path.concat(key),
+ targetModule.getChild(key),
+ newModule.modules[key]
+ );
+ }
+ }
+ }
+
+ const functionAssert = {
+ assert(value) {
+ return typeof value === "function";
+ },
+ expected: "function",
+ };
+
+ const objectAssert = {
+ assert(value) {
+ return (
+ typeof value === "function" ||
+ (typeof value === "object" && typeof value.handler === "function")
+ );
+ },
+ expected: 'function or object with "handler" function',
+ };
+
+ const assertTypes = {
+ getters: functionAssert,
+ mutations: functionAssert,
+ actions: objectAssert,
+ };
+
+ function assertRawModule(path, rawModule) {
+ Object.keys(assertTypes).forEach(function (key) {
+ if (!rawModule[key]) {
+ return;
+ }
+
+ const assertOptions = assertTypes[key];
+
+ forEachValue(rawModule[key], function (value, type) {
+ assert(
+ assertOptions.assert(value),
+ makeAssertionMessage(path, key, type, value, assertOptions.expected)
+ );
+ });
+ });
+ }
+
+ function makeAssertionMessage(path, key, type, value, expected) {
+ let buf =
+ key + " should be " + expected + ' but "' + key + "." + type + '"';
+ if (path.length > 0) {
+ buf += ' in module "' + path.join(".") + '"';
+ }
+ buf += " is " + JSON.stringify(value) + ".";
+ return buf;
+ }
+
+ const Store = function Store(options) {
+ const this$1$1 = this;
+ if (options === void 0) {
+ options = {};
+ }
+
+ {
+ assert(
+ typeof Promise !== "undefined",
+ "vuex requires a Promise polyfill in this browser."
+ );
+ assert(
+ this instanceof Store,
+ "store must be called with the new operator."
+ );
+ }
+
+ let plugins = options.plugins;
+ if (plugins === void 0) {
+ plugins = [];
+ }
+ let strict = options.strict;
+ if (strict === void 0) {
+ strict = false;
+ }
+ const devtools = options.devtools;
+
+ // store internal state
+ this._committing = false;
+ this._actions = Object.create(null);
+ this._actionSubscribers = [];
+ this._mutations = Object.create(null);
+ this._wrappedGetters = Object.create(null);
+ this._modules = new ModuleCollection(options);
+ this._modulesNamespaceMap = Object.create(null);
+ this._subscribers = [];
+ this._makeLocalGettersCache = Object.create(null);
+
+ // EffectScope instance. when registering new getters, we wrap them inside
+ // EffectScope so that getters (computed) would not be destroyed on
+ // component unmount.
+ this._scope = null;
+
+ this._devtools = devtools;
+
+ // bind commit and dispatch to self
+ const store = this;
+ const ref = this;
+ const dispatch = ref.dispatch;
+ const commit = ref.commit;
+ this.dispatch = function boundDispatch(type, payload) {
+ return dispatch.call(store, type, payload);
+ };
+ this.commit = function boundCommit(type, payload, options) {
+ return commit.call(store, type, payload, options);
+ };
+
+ // strict mode
+ this.strict = strict;
+
+ const state = this._modules.root.state;
+
+ // init root module.
+ // this also recursively registers all sub-modules
+ // and collects all module getters inside this._wrappedGetters
+ installModule(this, state, [], this._modules.root);
+
+ // initialize the store state, which is responsible for the reactivity
+ // (also registers _wrappedGetters as computed properties)
+ resetStoreState(this, state);
+
+ // apply plugins
+ plugins.forEach(function (plugin) {
+ return plugin(this$1$1);
+ });
+ };
+
+ const prototypeAccessors = { state: { configurable: true } };
+
+ Store.prototype.install = function install(app, injectKey) {
+ app.provide(injectKey || storeKey, this);
+ app.config.globalProperties.$store = this;
+
+ const useDevtools = this._devtools !== undefined ? this._devtools : true;
+
+ if (useDevtools) {
+ addDevtools(app, this);
+ }
+ };
+
+ prototypeAccessors.state.get = function () {
+ return this._state.data;
+ };
+
+ prototypeAccessors.state.set = function (v) {
+ {
+ assert(
+ false,
+ "use store.replaceState() to explicit replace store state."
+ );
+ }
+ };
+
+ Store.prototype.commit = function commit(_type, _payload, _options) {
+ const this$1$1 = this;
+
+ // check object-style commit
+ const ref = unifyObjectStyle(_type, _payload, _options);
+ const type = ref.type;
+ const payload = ref.payload;
+ const options = ref.options;
+
+ const mutation = { type, payload };
+ const entry = this._mutations[type];
+ if (!entry) {
+ {
+ console.error("[vuex] unknown mutation type: " + type);
+ }
+ return;
+ }
+ this._withCommit(function () {
+ entry.forEach(function commitIterator(handler) {
+ handler(payload);
+ });
+ });
+
+ this._subscribers
+ .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
+ .forEach(function (sub) {
+ return sub(mutation, this$1$1.state);
+ });
+
+ if (options && options.silent) {
+ console.warn(
+ "[vuex] mutation type: " +
+ type +
+ ". Silent option has been removed. " +
+ "Use the filter functionality in the vue-devtools"
+ );
+ }
+ };
+
+ Store.prototype.dispatch = function dispatch(_type, _payload) {
+ const this$1$1 = this;
+
+ // check object-style dispatch
+ const ref = unifyObjectStyle(_type, _payload);
+ const type = ref.type;
+ const payload = ref.payload;
+
+ const action = { type, payload };
+ const entry = this._actions[type];
+ if (!entry) {
+ {
+ console.error("[vuex] unknown action type: " + type);
+ }
+ return;
+ }
+
+ try {
+ this._actionSubscribers
+ .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
+ .filter(function (sub) {
+ return sub.before;
+ })
+ .forEach(function (sub) {
+ return sub.before(action, this$1$1.state);
+ });
+ } catch (e) {
+ {
+ console.warn("[vuex] error in before action subscribers: ");
+ console.error(e);
+ }
+ }
+
+ const result =
+ entry.length > 1
+ ? Promise.all(
+ entry.map(function (handler) {
+ return handler(payload);
+ })
+ )
+ : entry[0](payload);
+
+ return new Promise(function (resolve, reject) {
+ result.then(
+ function (res) {
+ try {
+ this$1$1._actionSubscribers
+ .filter(function (sub) {
+ return sub.after;
+ })
+ .forEach(function (sub) {
+ return sub.after(action, this$1$1.state);
+ });
+ } catch (e) {
+ {
+ console.warn("[vuex] error in after action subscribers: ");
+ console.error(e);
+ }
+ }
+ resolve(res);
+ },
+ function (error) {
+ try {
+ this$1$1._actionSubscribers
+ .filter(function (sub) {
+ return sub.error;
+ })
+ .forEach(function (sub) {
+ return sub.error(action, this$1$1.state, error);
+ });
+ } catch (e) {
+ {
+ console.warn("[vuex] error in error action subscribers: ");
+ console.error(e);
+ }
+ }
+ reject(error);
+ }
+ );
+ });
+ };
+
+ Store.prototype.subscribe = function subscribe(fn, options) {
+ return genericSubscribe(fn, this._subscribers, options);
+ };
+
+ Store.prototype.subscribeAction = function subscribeAction(fn, options) {
+ const subs = typeof fn === "function" ? { before: fn } : fn;
+ return genericSubscribe(subs, this._actionSubscribers, options);
+ };
+
+ Store.prototype.watch = function watch$1(getter, cb, options) {
+ const this$1$1 = this;
+
+ {
+ assert(
+ typeof getter === "function",
+ "store.watch only accepts a function."
+ );
+ }
+ return vue.watch(
+ function () {
+ return getter(this$1$1.state, this$1$1.getters);
+ },
+ cb,
+ Object.assign({}, options)
+ );
+ };
+
+ Store.prototype.replaceState = function replaceState(state) {
+ const this$1$1 = this;
+
+ this._withCommit(function () {
+ this$1$1._state.data = state;
+ });
+ };
+
+ Store.prototype.registerModule = function registerModule(
+ path,
+ rawModule,
+ options
+ ) {
+ if (options === void 0) {
+ options = {};
+ }
+
+ if (typeof path === "string") {
+ path = [path];
+ }
+
+ {
+ assert(Array.isArray(path), "module path must be a string or an Array.");
+ assert(
+ path.length > 0,
+ "cannot register the root module by using registerModule."
+ );
+ }
+
+ this._modules.register(path, rawModule);
+ installModule(
+ this,
+ this.state,
+ path,
+ this._modules.get(path),
+ options.preserveState
+ );
+ // reset store to update getters...
+ resetStoreState(this, this.state);
+ };
+
+ Store.prototype.unregisterModule = function unregisterModule(path) {
+ const this$1$1 = this;
+
+ if (typeof path === "string") {
+ path = [path];
+ }
+
+ {
+ assert(Array.isArray(path), "module path must be a string or an Array.");
+ }
+
+ this._modules.unregister(path);
+ this._withCommit(function () {
+ const parentState = getNestedState(this$1$1.state, path.slice(0, -1));
+ delete parentState[path[path.length - 1]];
+ });
+ resetStore(this);
+ };
+
+ Store.prototype.hasModule = function hasModule(path) {
+ if (typeof path === "string") {
+ path = [path];
+ }
+
+ {
+ assert(Array.isArray(path), "module path must be a string or an Array.");
+ }
+
+ return this._modules.isRegistered(path);
+ };
+
+ Store.prototype.hotUpdate = function hotUpdate(newOptions) {
+ this._modules.update(newOptions);
+ resetStore(this, true);
+ };
+
+ Store.prototype._withCommit = function _withCommit(fn) {
+ const committing = this._committing;
+ this._committing = true;
+ fn();
+ this._committing = committing;
+ };
+
+ Object.defineProperties(Store.prototype, prototypeAccessors);
+
+ /**
+ * Reduce the code which written in Vue.js for getting the getters
+ * @param {String} [namespace] - Module's namespace
+ * @param {Object|Array} getters
+ * @return {Object}
+ */
+ const mapGetters = normalizeNamespace(function (namespace, getters) {
+ const res = {};
+ if (!isValidMap(getters)) {
+ console.error(
+ "[vuex] mapGetters: mapper parameter must be either an Array or an Object"
+ );
+ }
+ normalizeMap(getters).forEach(function (ref) {
+ const key = ref.key;
+ let val = ref.val;
+
+ // The namespace has been mutated by normalizeNamespace
+ val = namespace + val;
+ res[key] = function mappedGetter() {
+ if (
+ namespace &&
+ !getModuleByNamespace(this.$store, "mapGetters", namespace)
+ ) {
+ return;
+ }
+ if (!(val in this.$store.getters)) {
+ console.error("[vuex] unknown getter: " + val);
+ return;
+ }
+ return this.$store.getters[val];
+ };
+ // mark vuex getter for devtools
+ res[key].vuex = true;
+ });
+ return res;
+ });
+
+ /**
+ * Reduce the code which written in Vue.js for dispatch the action
+ * @param {String} [namespace] - Module's namespace
+ * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.
+ * @return {Object}
+ */
+ const mapActions = normalizeNamespace(function (namespace, actions) {
+ const res = {};
+ if (!isValidMap(actions)) {
+ console.error(
+ "[vuex] mapActions: mapper parameter must be either an Array or an Object"
+ );
+ }
+ normalizeMap(actions).forEach(function (ref) {
+ const key = ref.key;
+ const val = ref.val;
+
+ res[key] = function mappedAction() {
+ const args = [],
+ len = arguments.length;
+ while (len--) {
+ args[len] = arguments[len];
+ }
+
+ // get dispatch function from store
+ let dispatch = this.$store.dispatch;
+ if (namespace) {
+ const module = getModuleByNamespace(
+ this.$store,
+ "mapActions",
+ namespace
+ );
+ if (!module) {
+ return;
+ }
+ dispatch = module.context.dispatch;
+ }
+ return typeof val === "function"
+ ? val.apply(this, [dispatch].concat(args))
+ : dispatch.apply(this.$store, [val].concat(args));
+ };
+ });
+ return res;
+ });
+
+ /**
+ * Normalize the map
+ * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]
+ * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]
+ * @param {Array|Object} map
+ * @return {Object}
+ */
+ function normalizeMap(map) {
+ if (!isValidMap(map)) {
+ return [];
+ }
+ return Array.isArray(map)
+ ? map.map(function (key) {
+ return { key, val: key };
+ })
+ : Object.keys(map).map(function (key) {
+ return { key, val: map[key] };
+ });
+ }
+
+ /**
+ * Validate whether given map is valid or not
+ * @param {*} map
+ * @return {Boolean}
+ */
+ function isValidMap(map) {
+ return Array.isArray(map) || isObject$1(map);
+ }
+
+ /**
+ * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.
+ * @param {Function} fn
+ * @return {Function}
+ */
+ function normalizeNamespace(fn) {
+ return function (namespace, map) {
+ if (typeof namespace !== "string") {
+ map = namespace;
+ namespace = "";
+ } else if (namespace.charAt(namespace.length - 1) !== "/") {
+ namespace += "/";
+ }
+ return fn(namespace, map);
+ };
+ }
+
+ /**
+ * Search a special module from store by namespace. if module not exist, print error message.
+ * @param {Object} store
+ * @param {String} helper
+ * @param {String} namespace
+ * @return {Object}
+ */
+ function getModuleByNamespace(store, helper, namespace) {
+ const module = store._modulesNamespaceMap[namespace];
+ if (!module) {
+ console.error(
+ "[vuex] module namespace not found in " + helper + "(): " + namespace
+ );
+ }
+ return module;
+ }
+
+ function bind(fn, thisArg) {
+ return function wrap() {
+ return fn.apply(thisArg, arguments);
+ };
+ }
+
+ // utils is a library of generic helper functions non-specific to axios
+
+ const { toString: toString$1 } = Object.prototype;
+ const { getPrototypeOf } = Object;
+
+ const kindOf = ((cache) => (thing) => {
+ const str = toString$1.call(thing);
+ return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
+ })(Object.create(null));
+
+ const kindOfTest = (type) => {
+ type = type.toLowerCase();
+ return (thing) => kindOf(thing) === type;
+ };
+
+ const typeOfTest = (type) => (thing) => typeof thing === type;
+
+ /**
+ * Determine if a value is an Array
+ *
+ * @param {Object} val The value to test
+ *
+ * @returns {boolean} True if value is an Array, otherwise false
+ */
+ const { isArray: isArray$1 } = Array;
+
+ /**
+ * Determine if a value is undefined
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if the value is undefined, otherwise false
+ */
+ const isUndefined = typeOfTest("undefined");
+
+ /**
+ * Determine if a value is a Buffer
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a Buffer, otherwise false
+ */
+ function isBuffer$1(val) {
+ return (
+ val !== null &&
+ !isUndefined(val) &&
+ val.constructor !== null &&
+ !isUndefined(val.constructor) &&
+ isFunction(val.constructor.isBuffer) &&
+ val.constructor.isBuffer(val)
+ );
+ }
+
+ /**
+ * Determine if a value is an ArrayBuffer
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is an ArrayBuffer, otherwise false
+ */
+ const isArrayBuffer = kindOfTest("ArrayBuffer");
+
+ /**
+ * Determine if a value is a view on an ArrayBuffer
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
+ */
+ function isArrayBufferView(val) {
+ let result;
+ if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) {
+ result = ArrayBuffer.isView(val);
+ } else {
+ result = val && val.buffer && isArrayBuffer(val.buffer);
+ }
+ return result;
+ }
+
+ /**
+ * Determine if a value is a String
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a String, otherwise false
+ */
+ const isString = typeOfTest("string");
+
+ /**
+ * Determine if a value is a Function
+ *
+ * @param {*} val The value to test
+ * @returns {boolean} True if value is a Function, otherwise false
+ */
+ const isFunction = typeOfTest("function");
+
+ /**
+ * Determine if a value is a Number
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a Number, otherwise false
+ */
+ const isNumber = typeOfTest("number");
+
+ /**
+ * Determine if a value is an Object
+ *
+ * @param {*} thing The value to test
+ *
+ * @returns {boolean} True if value is an Object, otherwise false
+ */
+ const isObject = (thing) => thing !== null && typeof thing === "object";
+
+ /**
+ * Determine if a value is a Boolean
+ *
+ * @param {*} thing The value to test
+ * @returns {boolean} True if value is a Boolean, otherwise false
+ */
+ const isBoolean = (thing) => thing === true || thing === false;
+
+ /**
+ * Determine if a value is a plain Object
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a plain Object, otherwise false
+ */
+ const isPlainObject = (val) => {
+ if (kindOf(val) !== "object") {
+ return false;
+ }
+
+ const prototype = getPrototypeOf(val);
+ return (
+ (prototype === null ||
+ prototype === Object.prototype ||
+ Object.getPrototypeOf(prototype) === null) &&
+ !(Symbol.toStringTag in val) &&
+ !(Symbol.iterator in val)
+ );
+ };
+
+ /**
+ * Determine if a value is a Date
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a Date, otherwise false
+ */
+ const isDate = kindOfTest("Date");
+
+ /**
+ * Determine if a value is a File
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a File, otherwise false
+ */
+ const isFile = kindOfTest("File");
+
+ /**
+ * Determine if a value is a Blob
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a Blob, otherwise false
+ */
+ const isBlob = kindOfTest("Blob");
+
+ /**
+ * Determine if a value is a FileList
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a File, otherwise false
+ */
+ const isFileList = kindOfTest("FileList");
+
+ /**
+ * Determine if a value is a Stream
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a Stream, otherwise false
+ */
+ const isStream = (val) => isObject(val) && isFunction(val.pipe);
+
+ /**
+ * Determine if a value is a FormData
+ *
+ * @param {*} thing The value to test
+ *
+ * @returns {boolean} True if value is an FormData, otherwise false
+ */
+ const isFormData = (thing) => {
+ let kind;
+ return (
+ thing &&
+ ((typeof FormData === "function" && thing instanceof FormData) ||
+ (isFunction(thing.append) &&
+ ((kind = kindOf(thing)) === "formdata" ||
+ // detect form-data instance
+ (kind === "object" &&
+ isFunction(thing.toString) &&
+ thing.toString() === "[object FormData]"))))
+ );
+ };
+
+ /**
+ * Determine if a value is a URLSearchParams object
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a URLSearchParams object, otherwise false
+ */
+ const isURLSearchParams = kindOfTest("URLSearchParams");
+
+ /**
+ * Trim excess whitespace off the beginning and end of a string
+ *
+ * @param {String} str The String to trim
+ *
+ * @returns {String} The String freed of excess whitespace
+ */
+ const trim = (str) =>
+ str.trim
+ ? str.trim()
+ : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "");
+
+ /**
+ * Iterate over an Array or an Object invoking a function for each item.
+ *
+ * If `obj` is an Array callback will be called passing
+ * the value, index, and complete array for each item.
+ *
+ * If 'obj' is an Object callback will be called passing
+ * the value, key, and complete object for each property.
+ *
+ * @param {Object|Array} obj The object to iterate
+ * @param {Function} fn The callback to invoke for each item
+ *
+ * @param {Boolean} [allOwnKeys = false]
+ * @returns {any}
+ */
+ function forEach(obj, fn, { allOwnKeys = false } = {}) {
+ // Don't bother if no value provided
+ if (obj === null || typeof obj === "undefined") {
+ return;
+ }
+
+ let i;
+ let l;
+
+ // Force an array if not already something iterable
+ if (typeof obj !== "object") {
+ /*eslint no-param-reassign:0*/
+ obj = [obj];
+ }
+
+ if (isArray$1(obj)) {
+ // Iterate over array values
+ for (i = 0, l = obj.length; i < l; i++) {
+ fn.call(null, obj[i], i, obj);
+ }
+ } else {
+ // Iterate over object keys
+ const keys = allOwnKeys
+ ? Object.getOwnPropertyNames(obj)
+ : Object.keys(obj);
+ const len = keys.length;
+ let key;
+
+ for (i = 0; i < len; i++) {
+ key = keys[i];
+ fn.call(null, obj[key], key, obj);
+ }
+ }
+ }
+
+ function findKey(obj, key) {
+ key = key.toLowerCase();
+ const keys = Object.keys(obj);
+ let i = keys.length;
+ let _key;
+ while (i-- > 0) {
+ _key = keys[i];
+ if (key === _key.toLowerCase()) {
+ return _key;
+ }
+ }
+ return null;
+ }
+
+ const _global = (() => {
+ /*eslint no-undef:0*/
+ if (typeof globalThis !== "undefined") {
+ return globalThis;
+ }
+ return typeof self !== "undefined"
+ ? self
+ : typeof window !== "undefined"
+ ? window
+ : global$1;
+ })();
+
+ const isContextDefined = (context) =>
+ !isUndefined(context) && context !== _global;
+
+ /**
+ * Accepts varargs expecting each argument to be an object, then
+ * immutably merges the properties of each object and returns result.
+ *
+ * When multiple objects contain the same key the later object in
+ * the arguments list will take precedence.
+ *
+ * Example:
+ *
+ * ```js
+ * var result = merge({foo: 123}, {foo: 456});
+ * console.log(result.foo); // outputs 456
+ * ```
+ *
+ * @param {Object} obj1 Object to merge
+ *
+ * @returns {Object} Result of all merge properties
+ */
+ function merge(/* obj1, obj2, obj3, ... */) {
+ const { caseless } = (isContextDefined(this) && this) || {};
+ const result = {};
+ const assignValue = (val, key) => {
+ const targetKey = (caseless && findKey(result, key)) || key;
+ if (isPlainObject(result[targetKey]) && isPlainObject(val)) {
+ result[targetKey] = merge(result[targetKey], val);
+ } else if (isPlainObject(val)) {
+ result[targetKey] = merge({}, val);
+ } else if (isArray$1(val)) {
+ result[targetKey] = val.slice();
+ } else {
+ result[targetKey] = val;
+ }
+ };
+
+ for (let i = 0, l = arguments.length; i < l; i++) {
+ arguments[i] && forEach(arguments[i], assignValue);
+ }
+ return result;
+ }
+
+ /**
+ * Extends object a by mutably adding to it the properties of object b.
+ *
+ * @param {Object} a The object to be extended
+ * @param {Object} b The object to copy properties from
+ * @param {Object} thisArg The object to bind function to
+ *
+ * @param {Boolean} [allOwnKeys]
+ * @returns {Object} The resulting value of object a
+ */
+ const extend = (a, b, thisArg, { allOwnKeys } = {}) => {
+ forEach(
+ b,
+ (val, key) => {
+ if (thisArg && isFunction(val)) {
+ a[key] = bind(val, thisArg);
+ } else {
+ a[key] = val;
+ }
+ },
+ { allOwnKeys }
+ );
+ return a;
+ };
+
+ /**
+ * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
+ *
+ * @param {string} content with BOM
+ *
+ * @returns {string} content value without BOM
+ */
+ const stripBOM = (content) => {
+ if (content.charCodeAt(0) === 0xfeff) {
+ content = content.slice(1);
+ }
+ return content;
+ };
+
+ /**
+ * Inherit the prototype methods from one constructor into another
+ * @param {function} constructor
+ * @param {function} superConstructor
+ * @param {object} [props]
+ * @param {object} [descriptors]
+ *
+ * @returns {void}
+ */
+ const inherits = (constructor, superConstructor, props, descriptors) => {
+ constructor.prototype = Object.create(
+ superConstructor.prototype,
+ descriptors
+ );
+ constructor.prototype.constructor = constructor;
+ Object.defineProperty(constructor, "super", {
+ value: superConstructor.prototype,
+ });
+ props && Object.assign(constructor.prototype, props);
+ };
+
+ /**
+ * Resolve object with deep prototype chain to a flat object
+ * @param {Object} sourceObj source object
+ * @param {Object} [destObj]
+ * @param {Function|Boolean} [filter]
+ * @param {Function} [propFilter]
+ *
+ * @returns {Object}
+ */
+ const toFlatObject = (sourceObj, destObj, filter, propFilter) => {
+ let props;
+ let i;
+ let prop;
+ const merged = {};
+
+ destObj = destObj || {};
+ // eslint-disable-next-line no-eq-null,eqeqeq
+ if (sourceObj == null) {
+ return destObj;
+ }
+
+ do {
+ props = Object.getOwnPropertyNames(sourceObj);
+ i = props.length;
+ while (i-- > 0) {
+ prop = props[i];
+ if (
+ (!propFilter || propFilter(prop, sourceObj, destObj)) &&
+ !merged[prop]
+ ) {
+ destObj[prop] = sourceObj[prop];
+ merged[prop] = true;
+ }
+ }
+ sourceObj = filter !== false && getPrototypeOf(sourceObj);
+ } while (
+ sourceObj &&
+ (!filter || filter(sourceObj, destObj)) &&
+ sourceObj !== Object.prototype
+ );
+
+ return destObj;
+ };
+
+ /**
+ * Determines whether a string ends with the characters of a specified string
+ *
+ * @param {String} str
+ * @param {String} searchString
+ * @param {Number} [position= 0]
+ *
+ * @returns {boolean}
+ */
+ const endsWith = (str, searchString, position) => {
+ str = String(str);
+ if (position === undefined || position > str.length) {
+ position = str.length;
+ }
+ position -= searchString.length;
+ const lastIndex = str.indexOf(searchString, position);
+ return lastIndex !== -1 && lastIndex === position;
+ };
+
+ /**
+ * Returns new array from array like object or null if failed
+ *
+ * @param {*} [thing]
+ *
+ * @returns {?Array}
+ */
+ const toArray = (thing) => {
+ if (!thing) {
+ return null;
+ }
+ if (isArray$1(thing)) {
+ return thing;
+ }
+ let i = thing.length;
+ if (!isNumber(i)) {
+ return null;
+ }
+ const arr = new Array(i);
+ while (i-- > 0) {
+ arr[i] = thing[i];
+ }
+ return arr;
+ };
+
+ /**
+ * Checking if the Uint8Array exists and if it does, it returns a function that checks if the
+ * thing passed in is an instance of Uint8Array
+ *
+ * @param {TypedArray}
+ *
+ * @returns {Array}
+ */
+ // eslint-disable-next-line func-names
+ const isTypedArray = ((TypedArray) => {
+ // eslint-disable-next-line func-names
+ return (thing) => {
+ return TypedArray && thing instanceof TypedArray;
+ };
+ })(typeof Uint8Array !== "undefined" && getPrototypeOf(Uint8Array));
+
+ /**
+ * For each entry in the object, call the function with the key and value.
+ *
+ * @param {Object} obj - The object to iterate over.
+ * @param {Function} fn - The function to call for each entry.
+ *
+ * @returns {void}
+ */
+ const forEachEntry = (obj, fn) => {
+ const generator = obj && obj[Symbol.iterator];
+
+ const iterator = generator.call(obj);
+
+ let result;
+
+ while ((result = iterator.next()) && !result.done) {
+ const pair = result.value;
+ fn.call(obj, pair[0], pair[1]);
+ }
+ };
+
+ /**
+ * It takes a regular expression and a string, and returns an array of all the matches
+ *
+ * @param {string} regExp - The regular expression to match against.
+ * @param {string} str - The string to search.
+ *
+ * @returns {Array}
+ */
+ const matchAll = (regExp, str) => {
+ let matches;
+ const arr = [];
+
+ while ((matches = regExp.exec(str)) !== null) {
+ arr.push(matches);
+ }
+
+ return arr;
+ };
+
+ /* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */
+ const isHTMLForm = kindOfTest("HTMLFormElement");
+
+ const toCamelCase = (str) => {
+ return str
+ .toLowerCase()
+ .replace(/[-_\s]([a-z\d])(\w*)/g, function replacer(m, p1, p2) {
+ return p1.toUpperCase() + p2;
+ });
+ };
+
+ /* Creating a function that will check if an object has a property. */
+ const hasOwnProperty = (
+ ({ hasOwnProperty }) =>
+ (obj, prop) =>
+ hasOwnProperty.call(obj, prop)
+ )(Object.prototype);
+
+ /**
+ * Determine if a value is a RegExp object
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a RegExp object, otherwise false
+ */
+ const isRegExp = kindOfTest("RegExp");
+
+ const reduceDescriptors = (obj, reducer) => {
+ const descriptors = Object.getOwnPropertyDescriptors(obj);
+ const reducedDescriptors = {};
+
+ forEach(descriptors, (descriptor, name) => {
+ let ret;
+ if ((ret = reducer(descriptor, name, obj)) !== false) {
+ reducedDescriptors[name] = ret || descriptor;
+ }
+ });
+
+ Object.defineProperties(obj, reducedDescriptors);
+ };
+
+ /**
+ * Makes all methods read-only
+ * @param {Object} obj
+ */
+
+ const freezeMethods = (obj) => {
+ reduceDescriptors(obj, (descriptor, name) => {
+ // skip restricted props in strict mode
+ if (
+ isFunction(obj) &&
+ ["arguments", "caller", "callee"].indexOf(name) !== -1
+ ) {
+ return false;
+ }
+
+ const value = obj[name];
+
+ if (!isFunction(value)) {
+ return;
+ }
+
+ descriptor.enumerable = false;
+
+ if ("writable" in descriptor) {
+ descriptor.writable = false;
+ return;
+ }
+
+ if (!descriptor.set) {
+ descriptor.set = () => {
+ throw Error("Can not rewrite read-only method '" + name + "'");
+ };
+ }
+ });
+ };
+
+ const toObjectSet = (arrayOrString, delimiter) => {
+ const obj = {};
+
+ const define = (arr) => {
+ arr.forEach((value) => {
+ obj[value] = true;
+ });
+ };
+
+ isArray$1(arrayOrString)
+ ? define(arrayOrString)
+ : define(String(arrayOrString).split(delimiter));
+
+ return obj;
+ };
+
+ const noop = () => {};
+
+ const toFiniteNumber = (value, defaultValue) => {
+ value = +value;
+ return Number.isFinite(value) ? value : defaultValue;
+ };
+
+ const ALPHA = "abcdefghijklmnopqrstuvwxyz";
+
+ const DIGIT = "0123456789";
+
+ const ALPHABET = {
+ DIGIT,
+ ALPHA,
+ ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT,
+ };
+
+ const generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {
+ let str = "";
+ const { length } = alphabet;
+ while (size--) {
+ str += alphabet[(Math.random() * length) | 0];
+ }
+
+ return str;
+ };
+
+ /**
+ * If the thing is a FormData object, return true, otherwise return false.
+ *
+ * @param {unknown} thing - The thing to check.
+ *
+ * @returns {boolean}
+ */
+ function isSpecCompliantForm(thing) {
+ return !!(
+ thing &&
+ isFunction(thing.append) &&
+ thing[Symbol.toStringTag] === "FormData" &&
+ thing[Symbol.iterator]
+ );
+ }
+
+ const toJSONObject = (obj) => {
+ const stack = new Array(10);
+
+ const visit = (source, i) => {
+ if (isObject(source)) {
+ if (stack.indexOf(source) >= 0) {
+ return;
+ }
+
+ if (!("toJSON" in source)) {
+ stack[i] = source;
+ const target = isArray$1(source) ? [] : {};
+
+ forEach(source, (value, key) => {
+ const reducedValue = visit(value, i + 1);
+ !isUndefined(reducedValue) && (target[key] = reducedValue);
+ });
+
+ stack[i] = undefined;
+
+ return target;
+ }
+ }
+
+ return source;
+ };
+
+ return visit(obj, 0);
+ };
+
+ const isAsyncFn = kindOfTest("AsyncFunction");
+
+ const isThenable = (thing) =>
+ thing &&
+ (isObject(thing) || isFunction(thing)) &&
+ isFunction(thing.then) &&
+ isFunction(thing.catch);
+
+ const utils$1 = {
+ isArray: isArray$1,
+ isArrayBuffer,
+ isBuffer: isBuffer$1,
+ isFormData,
+ isArrayBufferView,
+ isString,
+ isNumber,
+ isBoolean,
+ isObject,
+ isPlainObject,
+ isUndefined,
+ isDate,
+ isFile,
+ isBlob,
+ isRegExp,
+ isFunction,
+ isStream,
+ isURLSearchParams,
+ isTypedArray,
+ isFileList,
+ forEach,
+ merge,
+ extend,
+ trim,
+ stripBOM,
+ inherits,
+ toFlatObject,
+ kindOf,
+ kindOfTest,
+ endsWith,
+ toArray,
+ forEachEntry,
+ matchAll,
+ isHTMLForm,
+ hasOwnProperty,
+ hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection
+ reduceDescriptors,
+ freezeMethods,
+ toObjectSet,
+ toCamelCase,
+ noop,
+ toFiniteNumber,
+ findKey,
+ global: _global,
+ isContextDefined,
+ ALPHABET,
+ generateString,
+ isSpecCompliantForm,
+ toJSONObject,
+ isAsyncFn,
+ isThenable,
+ };
+
+ const lookup = [];
+ const revLookup = [];
+ const Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array;
+ let inited = false;
+ function init() {
+ inited = true;
+ const code =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ for (let i = 0, len = code.length; i < len; ++i) {
+ lookup[i] = code[i];
+ revLookup[code.charCodeAt(i)] = i;
+ }
+
+ revLookup["-".charCodeAt(0)] = 62;
+ revLookup["_".charCodeAt(0)] = 63;
+ }
+
+ function toByteArray(b64) {
+ if (!inited) {
+ init();
+ }
+ let i, j, tmp;
+ const len = b64.length;
+
+ if (len % 4 > 0) {
+ throw new Error("Invalid string. Length must be a multiple of 4");
+ }
+
+ // the number of equal signs (place holders)
+ // if there are two placeholders, than the two characters before it
+ // represent one byte
+ // if there is only one, then the three characters before it represent 2 bytes
+ // this is just a cheap hack to not do indexOf twice
+ const placeHolders =
+ b64[len - 2] === "=" ? 2 : b64[len - 1] === "=" ? 1 : 0;
+ // base64 is 4/3 + up to two characters of the original data
+ const arr = new Arr((len * 3) / 4 - placeHolders);
+
+ // if there are placeholders, only get up to the last complete 4 chars
+ const l = placeHolders > 0 ? len - 4 : len;
+
+ let L = 0;
+
+ for (i = 0, j = 0; i < l; i += 4, j += 3) {
+ tmp =
+ (revLookup[b64.charCodeAt(i)] << 18) |
+ (revLookup[b64.charCodeAt(i + 1)] << 12) |
+ (revLookup[b64.charCodeAt(i + 2)] << 6) |
+ revLookup[b64.charCodeAt(i + 3)];
+ arr[L++] = (tmp >> 16) & 0xff;
+ arr[L++] = (tmp >> 8) & 0xff;
+ arr[L++] = tmp & 0xff;
+ }
+
+ if (placeHolders === 2) {
+ tmp =
+ (revLookup[b64.charCodeAt(i)] << 2) |
+ (revLookup[b64.charCodeAt(i + 1)] >> 4);
+ arr[L++] = tmp & 0xff;
+ } else if (placeHolders === 1) {
+ tmp =
+ (revLookup[b64.charCodeAt(i)] << 10) |
+ (revLookup[b64.charCodeAt(i + 1)] << 4) |
+ (revLookup[b64.charCodeAt(i + 2)] >> 2);
+ arr[L++] = (tmp >> 8) & 0xff;
+ arr[L++] = tmp & 0xff;
+ }
+
+ return arr;
+ }
+
+ function tripletToBase64(num) {
+ return (
+ lookup[(num >> 18) & 0x3f] +
+ lookup[(num >> 12) & 0x3f] +
+ lookup[(num >> 6) & 0x3f] +
+ lookup[num & 0x3f]
+ );
+ }
+
+ function encodeChunk(uint8, start, end) {
+ let tmp;
+ const output = [];
+ for (let i = start; i < end; i += 3) {
+ tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + uint8[i + 2];
+ output.push(tripletToBase64(tmp));
+ }
+ return output.join("");
+ }
+
+ function fromByteArray(uint8) {
+ if (!inited) {
+ init();
+ }
+ let tmp;
+ const len = uint8.length;
+ const extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes
+ let output = "";
+ const parts = [];
+ const maxChunkLength = 16383; // must be multiple of 3
+
+ // go through the array every three bytes, we'll deal with trailing stuff later
+ for (let i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
+ parts.push(
+ encodeChunk(
+ uint8,
+ i,
+ i + maxChunkLength > len2 ? len2 : i + maxChunkLength
+ )
+ );
+ }
+
+ // pad the end with zeros, but make sure to not forget the extra bytes
+ if (extraBytes === 1) {
+ tmp = uint8[len - 1];
+ output += lookup[tmp >> 2];
+ output += lookup[(tmp << 4) & 0x3f];
+ output += "==";
+ } else if (extraBytes === 2) {
+ tmp = (uint8[len - 2] << 8) + uint8[len - 1];
+ output += lookup[tmp >> 10];
+ output += lookup[(tmp >> 4) & 0x3f];
+ output += lookup[(tmp << 2) & 0x3f];
+ output += "=";
+ }
+
+ parts.push(output);
+
+ return parts.join("");
+ }
+
+ function read(buffer, offset, isLE, mLen, nBytes) {
+ let e, m;
+ const eLen = nBytes * 8 - mLen - 1;
+ const eMax = (1 << eLen) - 1;
+ const eBias = eMax >> 1;
+ let nBits = -7;
+ let i = isLE ? nBytes - 1 : 0;
+ const d = isLE ? -1 : 1;
+ let s = buffer[offset + i];
+
+ i += d;
+
+ e = s & ((1 << -nBits) - 1);
+ s >>= -nBits;
+ nBits += eLen;
+ for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+ m = e & ((1 << -nBits) - 1);
+ e >>= -nBits;
+ nBits += mLen;
+ for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+ if (e === 0) {
+ e = 1 - eBias;
+ } else if (e === eMax) {
+ return m ? NaN : (s ? -1 : 1) * Infinity;
+ } else {
+ m = m + Math.pow(2, mLen);
+ e = e - eBias;
+ }
+ return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
+ }
+
+ function write(buffer, value, offset, isLE, mLen, nBytes) {
+ let e, m, c;
+ let eLen = nBytes * 8 - mLen - 1;
+ const eMax = (1 << eLen) - 1;
+ const eBias = eMax >> 1;
+ const rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
+ let i = isLE ? 0 : nBytes - 1;
+ const d = isLE ? 1 : -1;
+ const s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
+
+ value = Math.abs(value);
+
+ if (isNaN(value) || value === Infinity) {
+ m = isNaN(value) ? 1 : 0;
+ e = eMax;
+ } else {
+ e = Math.floor(Math.log(value) / Math.LN2);
+ if (value * (c = Math.pow(2, -e)) < 1) {
+ e--;
+ c *= 2;
+ }
+ if (e + eBias >= 1) {
+ value += rt / c;
+ } else {
+ value += rt * Math.pow(2, 1 - eBias);
+ }
+ if (value * c >= 2) {
+ e++;
+ c /= 2;
+ }
+
+ if (e + eBias >= eMax) {
+ m = 0;
+ e = eMax;
+ } else if (e + eBias >= 1) {
+ m = (value * c - 1) * Math.pow(2, mLen);
+ e = e + eBias;
+ } else {
+ m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
+ e = 0;
+ }
+ }
+
+ for (
+ ;
+ mLen >= 8;
+ buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8
+ ) {}
+
+ e = (e << mLen) | m;
+ eLen += mLen;
+ for (
+ ;
+ eLen > 0;
+ buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8
+ ) {}
+
+ buffer[offset + i - d] |= s * 128;
+ }
+
+ const toString = {}.toString;
+
+ const isArray =
+ Array.isArray ||
+ function (arr) {
+ return toString.call(arr) === "[object Array]";
+ };
+
+ const INSPECT_MAX_BYTES = 50;
+
+ /**
+ * If `Buffer.TYPED_ARRAY_SUPPORT`:
+ * === true Use Uint8Array implementation (fastest)
+ * === false Use Object implementation (most compatible, even IE6)
+ *
+ * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
+ * Opera 11.6+, iOS 4.2+.
*
- * (c) Copyright Ascensio System SIA 2023
+ * Due to various browser bugs, sometimes the Object implementation will be used even
+ * when the browser supports typed arrays.
*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Note:
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
+ * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
*
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
*
- */
+ * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
+ * incorrect length in some situations.
- const routes = [{
- path: "/editor/:fileId/:filePath/:mode",
- components: {
- fullscreen: script
- },
- name: "editor",
- meta: {
- hideHeadbar: true
+ * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
+ * get the Object implementation, which is slower but behaves correctly.
+ */
+ Buffer.TYPED_ARRAY_SUPPORT =
+ global$1.TYPED_ARRAY_SUPPORT !== undefined
+ ? global$1.TYPED_ARRAY_SUPPORT
+ : true;
+
+ /*
+ * Export kMaxLength after typed array support is determined.
+ */
+ kMaxLength();
+
+ function kMaxLength() {
+ return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff;
+ }
+
+ function createBuffer(that, length) {
+ if (kMaxLength() < length) {
+ throw new RangeError("Invalid typed array length");
+ }
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ // Return an augmented `Uint8Array` instance, for best performance
+ that = new Uint8Array(length);
+ that.__proto__ = Buffer.prototype;
+ } else {
+ // Fallback: Return an object instance of the Buffer class
+ if (that === null) {
+ that = new Buffer(length);
+ }
+ that.length = length;
+ }
+
+ return that;
+ }
+
+ /**
+ * The Buffer constructor returns instances of `Uint8Array` that have their
+ * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
+ * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
+ * and the `Uint8Array` methods. Square bracket notation works as expected -- it
+ * returns a single octet.
+ *
+ * The `Uint8Array` prototype remains unmodified.
+ */
+
+ function Buffer(arg, encodingOrOffset, length) {
+ if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
+ return new Buffer(arg, encodingOrOffset, length);
+ }
+
+ // Common case.
+ if (typeof arg === "number") {
+ if (typeof encodingOrOffset === "string") {
+ throw new Error(
+ "If encoding is specified then the first argument must be a string"
+ );
+ }
+ return allocUnsafe(this, arg);
+ }
+ return from(this, arg, encodingOrOffset, length);
+ }
+
+ Buffer.poolSize = 8192; // not used by this implementation
+
+ // TODO: Legacy, not needed anymore. Remove in next major version.
+ Buffer._augment = function (arr) {
+ arr.__proto__ = Buffer.prototype;
+ return arr;
+ };
+
+ function from(that, value, encodingOrOffset, length) {
+ if (typeof value === "number") {
+ throw new TypeError('"value" argument must not be a number');
+ }
+
+ if (typeof ArrayBuffer !== "undefined" && value instanceof ArrayBuffer) {
+ return fromArrayBuffer(that, value, encodingOrOffset, length);
+ }
+
+ if (typeof value === "string") {
+ return fromString(that, value, encodingOrOffset);
+ }
+
+ return fromObject(that, value);
+ }
+
+ /**
+ * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
+ * if value is a number.
+ * Buffer.from(str[, encoding])
+ * Buffer.from(array)
+ * Buffer.from(buffer)
+ * Buffer.from(arrayBuffer[, byteOffset[, length]])
+ **/
+ Buffer.from = function (value, encodingOrOffset, length) {
+ return from(null, value, encodingOrOffset, length);
+ };
+
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ Buffer.prototype.__proto__ = Uint8Array.prototype;
+ Buffer.__proto__ = Uint8Array;
+ if (
+ typeof Symbol !== "undefined" &&
+ Symbol.species &&
+ Buffer[Symbol.species] === Buffer
+ ) {
+ }
+ }
+
+ function assertSize(size) {
+ if (typeof size !== "number") {
+ throw new TypeError('"size" argument must be a number');
+ } else if (size < 0) {
+ throw new RangeError('"size" argument must not be negative');
+ }
+ }
+
+ function alloc(that, size, fill, encoding) {
+ assertSize(size);
+ if (size <= 0) {
+ return createBuffer(that, size);
+ }
+ if (fill !== undefined) {
+ // Only pay attention to encoding if it's a string. This
+ // prevents accidentally sending in a number that would
+ // be interpretted as a start offset.
+ return typeof encoding === "string"
+ ? createBuffer(that, size).fill(fill, encoding)
+ : createBuffer(that, size).fill(fill);
+ }
+ return createBuffer(that, size);
+ }
+
+ /**
+ * Creates a new filled Buffer instance.
+ * alloc(size[, fill[, encoding]])
+ **/
+ Buffer.alloc = function (size, fill, encoding) {
+ return alloc(null, size, fill, encoding);
+ };
+
+ function allocUnsafe(that, size) {
+ assertSize(size);
+ that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);
+ if (!Buffer.TYPED_ARRAY_SUPPORT) {
+ for (let i = 0; i < size; ++i) {
+ that[i] = 0;
+ }
+ }
+ return that;
+ }
+
+ /**
+ * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
+ * */
+ Buffer.allocUnsafe = function (size) {
+ return allocUnsafe(null, size);
+ };
+ /**
+ * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
+ */
+ Buffer.allocUnsafeSlow = function (size) {
+ return allocUnsafe(null, size);
+ };
+
+ function fromString(that, string, encoding) {
+ if (typeof encoding !== "string" || encoding === "") {
+ encoding = "utf8";
+ }
+
+ if (!Buffer.isEncoding(encoding)) {
+ throw new TypeError('"encoding" must be a valid string encoding');
+ }
+
+ const length = byteLength(string, encoding) | 0;
+ that = createBuffer(that, length);
+
+ const actual = that.write(string, encoding);
+
+ if (actual !== length) {
+ // Writing a hex string, for example, that contains invalid characters will
+ // cause everything after the first invalid character to be ignored. (e.g.
+ // 'abxxcd' will be treated as 'ab')
+ that = that.slice(0, actual);
+ }
+
+ return that;
+ }
+
+ function fromArrayLike(that, array) {
+ const length = array.length < 0 ? 0 : checked(array.length) | 0;
+ that = createBuffer(that, length);
+ for (let i = 0; i < length; i += 1) {
+ that[i] = array[i] & 255;
+ }
+ return that;
+ }
+
+ function fromArrayBuffer(that, array, byteOffset, length) {
+ array.byteLength; // this throws if `array` is not a valid ArrayBuffer
+
+ if (byteOffset < 0 || array.byteLength < byteOffset) {
+ throw new RangeError("'offset' is out of bounds");
+ }
+
+ if (array.byteLength < byteOffset + (length || 0)) {
+ throw new RangeError("'length' is out of bounds");
+ }
+
+ if (byteOffset === undefined && length === undefined) {
+ array = new Uint8Array(array);
+ } else if (length === undefined) {
+ array = new Uint8Array(array, byteOffset);
+ } else {
+ array = new Uint8Array(array, byteOffset, length);
+ }
+
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ // Return an augmented `Uint8Array` instance, for best performance
+ that = array;
+ that.__proto__ = Buffer.prototype;
+ } else {
+ // Fallback: Return an object instance of the Buffer class
+ that = fromArrayLike(that, array);
+ }
+ return that;
+ }
+
+ function fromObject(that, obj) {
+ if (internalIsBuffer(obj)) {
+ const len = checked(obj.length) | 0;
+ that = createBuffer(that, len);
+
+ if (that.length === 0) {
+ return that;
+ }
+
+ obj.copy(that, 0, 0, len);
+ return that;
+ }
+
+ if (obj) {
+ if (
+ (typeof ArrayBuffer !== "undefined" &&
+ obj.buffer instanceof ArrayBuffer) ||
+ "length" in obj
+ ) {
+ if (typeof obj.length !== "number" || isnan(obj.length)) {
+ return createBuffer(that, 0);
+ }
+ return fromArrayLike(that, obj);
+ }
+
+ if (obj.type === "Buffer" && isArray(obj.data)) {
+ return fromArrayLike(that, obj.data);
+ }
+ }
+
+ throw new TypeError(
+ "First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object."
+ );
+ }
+
+ function checked(length) {
+ // Note: cannot use `length < kMaxLength()` here because that fails when
+ // length is NaN (which is otherwise coerced to zero.)
+ if (length >= kMaxLength()) {
+ throw new RangeError(
+ "Attempt to allocate Buffer larger than maximum " +
+ "size: 0x" +
+ kMaxLength().toString(16) +
+ " bytes"
+ );
+ }
+ return length | 0;
+ }
+ Buffer.isBuffer = isBuffer;
+ function internalIsBuffer(b) {
+ return !!(b != null && b._isBuffer);
+ }
+
+ Buffer.compare = function compare(a, b) {
+ if (!internalIsBuffer(a) || !internalIsBuffer(b)) {
+ throw new TypeError("Arguments must be Buffers");
+ }
+
+ if (a === b) {
+ return 0;
+ }
+
+ let x = a.length;
+ let y = b.length;
+
+ for (let i = 0, len = Math.min(x, y); i < len; ++i) {
+ if (a[i] !== b[i]) {
+ x = a[i];
+ y = b[i];
+ break;
+ }
+ }
+
+ if (x < y) {
+ return -1;
+ }
+ if (y < x) {
+ return 1;
+ }
+ return 0;
+ };
+
+ Buffer.isEncoding = function isEncoding(encoding) {
+ switch (String(encoding).toLowerCase()) {
+ case "hex":
+ case "utf8":
+ case "utf-8":
+ case "ascii":
+ case "latin1":
+ case "binary":
+ case "base64":
+ case "ucs2":
+ case "ucs-2":
+ case "utf16le":
+ case "utf-16le":
+ return true;
+ default:
+ return false;
+ }
+ };
+
+ Buffer.concat = function concat(list, length) {
+ if (!isArray(list)) {
+ throw new TypeError('"list" argument must be an Array of Buffers');
+ }
+
+ if (list.length === 0) {
+ return Buffer.alloc(0);
+ }
+
+ let i;
+ if (length === undefined) {
+ length = 0;
+ for (i = 0; i < list.length; ++i) {
+ length += list[i].length;
+ }
+ }
+
+ const buffer = Buffer.allocUnsafe(length);
+ let pos = 0;
+ for (i = 0; i < list.length; ++i) {
+ const buf = list[i];
+ if (!internalIsBuffer(buf)) {
+ throw new TypeError('"list" argument must be an Array of Buffers');
+ }
+ buf.copy(buffer, pos);
+ pos += buf.length;
+ }
+ return buffer;
+ };
+
+ function byteLength(string, encoding) {
+ if (internalIsBuffer(string)) {
+ return string.length;
+ }
+ if (
+ typeof ArrayBuffer !== "undefined" &&
+ typeof ArrayBuffer.isView === "function" &&
+ (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)
+ ) {
+ return string.byteLength;
+ }
+ if (typeof string !== "string") {
+ string = "" + string;
+ }
+
+ const len = string.length;
+ if (len === 0) {
+ return 0;
+ }
+
+ // Use a for loop to avoid recursion
+ let loweredCase = false;
+ for (;;) {
+ switch (encoding) {
+ case "ascii":
+ case "latin1":
+ case "binary":
+ return len;
+ case "utf8":
+ case "utf-8":
+ case undefined:
+ return utf8ToBytes(string).length;
+ case "ucs2":
+ case "ucs-2":
+ case "utf16le":
+ case "utf-16le":
+ return len * 2;
+ case "hex":
+ return len >>> 1;
+ case "base64":
+ return base64ToBytes(string).length;
+ default:
+ if (loweredCase) {
+ return utf8ToBytes(string).length;
+ } // assume utf8
+ encoding = ("" + encoding).toLowerCase();
+ loweredCase = true;
+ }
+ }
+ }
+ Buffer.byteLength = byteLength;
+
+ function slowToString(encoding, start, end) {
+ let loweredCase = false;
+
+ // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
+ // property of a typed array.
+
+ // This behaves neither like String nor Uint8Array in that we set start/end
+ // to their upper/lower bounds if the value passed is out of range.
+ // undefined is handled specially as per ECMA-262 6th Edition,
+ // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
+ if (start === undefined || start < 0) {
+ start = 0;
+ }
+ // Return early if start > this.length. Done here to prevent potential uint32
+ // coercion fail below.
+ if (start > this.length) {
+ return "";
+ }
+
+ if (end === undefined || end > this.length) {
+ end = this.length;
+ }
+
+ if (end <= 0) {
+ return "";
+ }
+
+ // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
+ end >>>= 0;
+ start >>>= 0;
+
+ if (end <= start) {
+ return "";
+ }
+
+ if (!encoding) {
+ encoding = "utf8";
+ }
+
+ while (true) {
+ switch (encoding) {
+ case "hex":
+ return hexSlice(this, start, end);
+
+ case "utf8":
+ case "utf-8":
+ return utf8Slice(this, start, end);
+
+ case "ascii":
+ return asciiSlice(this, start, end);
+
+ case "latin1":
+ case "binary":
+ return latin1Slice(this, start, end);
+
+ case "base64":
+ return base64Slice(this, start, end);
+
+ case "ucs2":
+ case "ucs-2":
+ case "utf16le":
+ case "utf-16le":
+ return utf16leSlice(this, start, end);
+
+ default:
+ if (loweredCase) {
+ throw new TypeError("Unknown encoding: " + encoding);
+ }
+ encoding = (encoding + "").toLowerCase();
+ loweredCase = true;
+ }
+ }
+ }
+
+ // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
+ // Buffer instances.
+ Buffer.prototype._isBuffer = true;
+
+ function swap(b, n, m) {
+ const i = b[n];
+ b[n] = b[m];
+ b[m] = i;
+ }
+
+ Buffer.prototype.swap16 = function swap16() {
+ const len = this.length;
+ if (len % 2 !== 0) {
+ throw new RangeError("Buffer size must be a multiple of 16-bits");
+ }
+ for (let i = 0; i < len; i += 2) {
+ swap(this, i, i + 1);
+ }
+ return this;
+ };
+
+ Buffer.prototype.swap32 = function swap32() {
+ const len = this.length;
+ if (len % 4 !== 0) {
+ throw new RangeError("Buffer size must be a multiple of 32-bits");
+ }
+ for (let i = 0; i < len; i += 4) {
+ swap(this, i, i + 3);
+ swap(this, i + 1, i + 2);
+ }
+ return this;
+ };
+
+ Buffer.prototype.swap64 = function swap64() {
+ const len = this.length;
+ if (len % 8 !== 0) {
+ throw new RangeError("Buffer size must be a multiple of 64-bits");
+ }
+ for (let i = 0; i < len; i += 8) {
+ swap(this, i, i + 7);
+ swap(this, i + 1, i + 6);
+ swap(this, i + 2, i + 5);
+ swap(this, i + 3, i + 4);
+ }
+ return this;
+ };
+
+ Buffer.prototype.toString = function toString() {
+ const length = this.length | 0;
+ if (length === 0) {
+ return "";
+ }
+ if (arguments.length === 0) {
+ return utf8Slice(this, 0, length);
+ }
+ return slowToString.apply(this, arguments);
+ };
+
+ Buffer.prototype.equals = function equals(b) {
+ if (!internalIsBuffer(b)) {
+ throw new TypeError("Argument must be a Buffer");
+ }
+ if (this === b) {
+ return true;
+ }
+ return Buffer.compare(this, b) === 0;
+ };
+
+ Buffer.prototype.inspect = function inspect() {
+ let str = "";
+ const max = INSPECT_MAX_BYTES;
+ if (this.length > 0) {
+ str = this.toString("hex", 0, max).match(/.{2}/g).join(" ");
+ if (this.length > max) {
+ str += " ... ";
+ }
+ }
+ return "";
+ };
+
+ Buffer.prototype.compare = function compare(
+ target,
+ start,
+ end,
+ thisStart,
+ thisEnd
+ ) {
+ if (!internalIsBuffer(target)) {
+ throw new TypeError("Argument must be a Buffer");
+ }
+
+ if (start === undefined) {
+ start = 0;
+ }
+ if (end === undefined) {
+ end = target ? target.length : 0;
+ }
+ if (thisStart === undefined) {
+ thisStart = 0;
+ }
+ if (thisEnd === undefined) {
+ thisEnd = this.length;
+ }
+
+ if (
+ start < 0 ||
+ end > target.length ||
+ thisStart < 0 ||
+ thisEnd > this.length
+ ) {
+ throw new RangeError("out of range index");
+ }
+
+ if (thisStart >= thisEnd && start >= end) {
+ return 0;
+ }
+ if (thisStart >= thisEnd) {
+ return -1;
+ }
+ if (start >= end) {
+ return 1;
+ }
+
+ start >>>= 0;
+ end >>>= 0;
+ thisStart >>>= 0;
+ thisEnd >>>= 0;
+
+ if (this === target) {
+ return 0;
+ }
+
+ let x = thisEnd - thisStart;
+ let y = end - start;
+ const len = Math.min(x, y);
+
+ const thisCopy = this.slice(thisStart, thisEnd);
+ const targetCopy = target.slice(start, end);
+
+ for (let i = 0; i < len; ++i) {
+ if (thisCopy[i] !== targetCopy[i]) {
+ x = thisCopy[i];
+ y = targetCopy[i];
+ break;
+ }
+ }
+
+ if (x < y) {
+ return -1;
+ }
+ if (y < x) {
+ return 1;
+ }
+ return 0;
+ };
+
+ // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
+ // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
+ //
+ // Arguments:
+ // - buffer - a Buffer to search
+ // - val - a string, Buffer, or number
+ // - byteOffset - an index into `buffer`; will be clamped to an int32
+ // - encoding - an optional encoding, relevant is val is a string
+ // - dir - true for indexOf, false for lastIndexOf
+ function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {
+ // Empty buffer means no match
+ if (buffer.length === 0) {
+ return -1;
+ }
+
+ // Normalize byteOffset
+ if (typeof byteOffset === "string") {
+ encoding = byteOffset;
+ byteOffset = 0;
+ } else if (byteOffset > 0x7fffffff) {
+ byteOffset = 0x7fffffff;
+ } else if (byteOffset < -0x80000000) {
+ byteOffset = -0x80000000;
+ }
+ byteOffset = +byteOffset; // Coerce to Number.
+ if (isNaN(byteOffset)) {
+ // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
+ byteOffset = dir ? 0 : buffer.length - 1;
+ }
+
+ // Normalize byteOffset: negative offsets start from the end of the buffer
+ if (byteOffset < 0) {
+ byteOffset = buffer.length + byteOffset;
+ }
+ if (byteOffset >= buffer.length) {
+ if (dir) {
+ return -1;
+ } else {
+ byteOffset = buffer.length - 1;
+ }
+ } else if (byteOffset < 0) {
+ if (dir) {
+ byteOffset = 0;
+ } else {
+ return -1;
+ }
+ }
+
+ // Normalize val
+ if (typeof val === "string") {
+ val = Buffer.from(val, encoding);
+ }
+
+ // Finally, search either indexOf (if dir is true) or lastIndexOf
+ if (internalIsBuffer(val)) {
+ // Special case: looking for empty string/buffer always fails
+ if (val.length === 0) {
+ return -1;
+ }
+ return arrayIndexOf(buffer, val, byteOffset, encoding, dir);
+ } else if (typeof val === "number") {
+ val = val & 0xff; // Search for a byte value [0-255]
+ if (
+ Buffer.TYPED_ARRAY_SUPPORT &&
+ typeof Uint8Array.prototype.indexOf === "function"
+ ) {
+ if (dir) {
+ return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);
+ } else {
+ return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);
+ }
+ }
+ return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);
+ }
+
+ throw new TypeError("val must be string, number or Buffer");
+ }
+
+ function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
+ let indexSize = 1;
+ let arrLength = arr.length;
+ let valLength = val.length;
+
+ if (encoding !== undefined) {
+ encoding = String(encoding).toLowerCase();
+ if (
+ encoding === "ucs2" ||
+ encoding === "ucs-2" ||
+ encoding === "utf16le" ||
+ encoding === "utf-16le"
+ ) {
+ if (arr.length < 2 || val.length < 2) {
+ return -1;
+ }
+ indexSize = 2;
+ arrLength /= 2;
+ valLength /= 2;
+ byteOffset /= 2;
+ }
+ }
+
+ function read(buf, i) {
+ if (indexSize === 1) {
+ return buf[i];
+ } else {
+ return buf.readUInt16BE(i * indexSize);
+ }
+ }
+
+ let i;
+ if (dir) {
+ let foundIndex = -1;
+ for (i = byteOffset; i < arrLength; i++) {
+ if (
+ read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)
+ ) {
+ if (foundIndex === -1) {
+ foundIndex = i;
+ }
+ if (i - foundIndex + 1 === valLength) {
+ return foundIndex * indexSize;
+ }
+ } else {
+ if (foundIndex !== -1) {
+ i -= i - foundIndex;
+ }
+ foundIndex = -1;
+ }
+ }
+ } else {
+ if (byteOffset + valLength > arrLength) {
+ byteOffset = arrLength - valLength;
+ }
+ for (i = byteOffset; i >= 0; i--) {
+ let found = true;
+ for (let j = 0; j < valLength; j++) {
+ if (read(arr, i + j) !== read(val, j)) {
+ found = false;
+ break;
+ }
+ }
+ if (found) {
+ return i;
+ }
+ }
+ }
+
+ return -1;
+ }
+
+ Buffer.prototype.includes = function includes(val, byteOffset, encoding) {
+ return this.indexOf(val, byteOffset, encoding) !== -1;
+ };
+
+ Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {
+ return bidirectionalIndexOf(this, val, byteOffset, encoding, true);
+ };
+
+ Buffer.prototype.lastIndexOf = function lastIndexOf(
+ val,
+ byteOffset,
+ encoding
+ ) {
+ return bidirectionalIndexOf(this, val, byteOffset, encoding, false);
+ };
+
+ function hexWrite(buf, string, offset, length) {
+ offset = Number(offset) || 0;
+ const remaining = buf.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = Number(length);
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+
+ // must be an even number of digits
+ const strLen = string.length;
+ if (strLen % 2 !== 0) {
+ throw new TypeError("Invalid hex string");
+ }
+
+ if (length > strLen / 2) {
+ length = strLen / 2;
+ }
+ for (let i = 0; i < length; ++i) {
+ const parsed = parseInt(string.substr(i * 2, 2), 16);
+ if (isNaN(parsed)) {
+ return i;
+ }
+ buf[offset + i] = parsed;
+ }
+ return i;
+ }
+
+ function utf8Write(buf, string, offset, length) {
+ return blitBuffer(
+ utf8ToBytes(string, buf.length - offset),
+ buf,
+ offset,
+ length
+ );
+ }
+
+ function asciiWrite(buf, string, offset, length) {
+ return blitBuffer(asciiToBytes(string), buf, offset, length);
+ }
+
+ function latin1Write(buf, string, offset, length) {
+ return asciiWrite(buf, string, offset, length);
+ }
+
+ function base64Write(buf, string, offset, length) {
+ return blitBuffer(base64ToBytes(string), buf, offset, length);
+ }
+
+ function ucs2Write(buf, string, offset, length) {
+ return blitBuffer(
+ utf16leToBytes(string, buf.length - offset),
+ buf,
+ offset,
+ length
+ );
+ }
+
+ Buffer.prototype.write = function write(string, offset, length, encoding) {
+ // Buffer#write(string)
+ if (offset === undefined) {
+ encoding = "utf8";
+ length = this.length;
+ offset = 0;
+ // Buffer#write(string, encoding)
+ } else if (length === undefined && typeof offset === "string") {
+ encoding = offset;
+ length = this.length;
+ offset = 0;
+ // Buffer#write(string, offset[, length][, encoding])
+ } else if (isFinite(offset)) {
+ offset = offset | 0;
+ if (isFinite(length)) {
+ length = length | 0;
+ if (encoding === undefined) {
+ encoding = "utf8";
+ }
+ } else {
+ encoding = length;
+ length = undefined;
+ }
+ // legacy write(string, encoding, offset, length) - remove in v0.13
+ } else {
+ throw new Error(
+ "Buffer.write(string, encoding, offset[, length]) is no longer supported"
+ );
+ }
+
+ const remaining = this.length - offset;
+ if (length === undefined || length > remaining) {
+ length = remaining;
+ }
+
+ if (
+ (string.length > 0 && (length < 0 || offset < 0)) ||
+ offset > this.length
+ ) {
+ throw new RangeError("Attempt to write outside buffer bounds");
+ }
+
+ if (!encoding) {
+ encoding = "utf8";
+ }
+
+ let loweredCase = false;
+ for (;;) {
+ switch (encoding) {
+ case "hex":
+ return hexWrite(this, string, offset, length);
+
+ case "utf8":
+ case "utf-8":
+ return utf8Write(this, string, offset, length);
+
+ case "ascii":
+ return asciiWrite(this, string, offset, length);
+
+ case "latin1":
+ case "binary":
+ return latin1Write(this, string, offset, length);
+
+ case "base64":
+ // Warning: maxLength not taken into account in base64Write
+ return base64Write(this, string, offset, length);
+
+ case "ucs2":
+ case "ucs-2":
+ case "utf16le":
+ case "utf-16le":
+ return ucs2Write(this, string, offset, length);
+
+ default:
+ if (loweredCase) {
+ throw new TypeError("Unknown encoding: " + encoding);
+ }
+ encoding = ("" + encoding).toLowerCase();
+ loweredCase = true;
+ }
+ }
+ };
+
+ Buffer.prototype.toJSON = function toJSON() {
+ return {
+ type: "Buffer",
+ data: Array.prototype.slice.call(this._arr || this, 0),
+ };
+ };
+
+ function base64Slice(buf, start, end) {
+ if (start === 0 && end === buf.length) {
+ return fromByteArray(buf);
+ } else {
+ return fromByteArray(buf.slice(start, end));
+ }
+ }
+
+ function utf8Slice(buf, start, end) {
+ end = Math.min(buf.length, end);
+ const res = [];
+
+ let i = start;
+ while (i < end) {
+ const firstByte = buf[i];
+ let codePoint = null;
+ let bytesPerSequence =
+ firstByte > 0xef ? 4 : firstByte > 0xdf ? 3 : firstByte > 0xbf ? 2 : 1;
+
+ if (i + bytesPerSequence <= end) {
+ let secondByte, thirdByte, fourthByte, tempCodePoint;
+
+ switch (bytesPerSequence) {
+ case 1:
+ if (firstByte < 0x80) {
+ codePoint = firstByte;
+ }
+ break;
+ case 2:
+ secondByte = buf[i + 1];
+ if ((secondByte & 0xc0) === 0x80) {
+ tempCodePoint = ((firstByte & 0x1f) << 0x6) | (secondByte & 0x3f);
+ if (tempCodePoint > 0x7f) {
+ codePoint = tempCodePoint;
+ }
+ }
+ break;
+ case 3:
+ secondByte = buf[i + 1];
+ thirdByte = buf[i + 2];
+ if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80) {
+ tempCodePoint =
+ ((firstByte & 0xf) << 0xc) |
+ ((secondByte & 0x3f) << 0x6) |
+ (thirdByte & 0x3f);
+ if (
+ tempCodePoint > 0x7ff &&
+ (tempCodePoint < 0xd800 || tempCodePoint > 0xdfff)
+ ) {
+ codePoint = tempCodePoint;
+ }
+ }
+ break;
+ case 4:
+ secondByte = buf[i + 1];
+ thirdByte = buf[i + 2];
+ fourthByte = buf[i + 3];
+ if (
+ (secondByte & 0xc0) === 0x80 &&
+ (thirdByte & 0xc0) === 0x80 &&
+ (fourthByte & 0xc0) === 0x80
+ ) {
+ tempCodePoint =
+ ((firstByte & 0xf) << 0x12) |
+ ((secondByte & 0x3f) << 0xc) |
+ ((thirdByte & 0x3f) << 0x6) |
+ (fourthByte & 0x3f);
+ if (tempCodePoint > 0xffff && tempCodePoint < 0x110000) {
+ codePoint = tempCodePoint;
+ }
+ }
+ }
+ }
+
+ if (codePoint === null) {
+ // we did not generate a valid codePoint so insert a
+ // replacement char (U+FFFD) and advance only 1 byte
+ codePoint = 0xfffd;
+ bytesPerSequence = 1;
+ } else if (codePoint > 0xffff) {
+ // encode to utf16 (surrogate pair dance)
+ codePoint -= 0x10000;
+ res.push(((codePoint >>> 10) & 0x3ff) | 0xd800);
+ codePoint = 0xdc00 | (codePoint & 0x3ff);
+ }
+
+ res.push(codePoint);
+ i += bytesPerSequence;
+ }
+
+ return decodeCodePointsArray(res);
+ }
+
+ // Based on http://stackoverflow.com/a/22747272/680742, the browser with
+ // the lowest limit is Chrome, with 0x10000 args.
+ // We go 1 magnitude less, for safety
+ const MAX_ARGUMENTS_LENGTH = 0x1000;
+
+ function decodeCodePointsArray(codePoints) {
+ const len = codePoints.length;
+ if (len <= MAX_ARGUMENTS_LENGTH) {
+ return String.fromCharCode.apply(String, codePoints); // avoid extra slice()
+ }
+
+ // Decode in chunks to avoid "call stack size exceeded".
+ let res = "";
+ let i = 0;
+ while (i < len) {
+ res += String.fromCharCode.apply(
+ String,
+ codePoints.slice(i, (i += MAX_ARGUMENTS_LENGTH))
+ );
+ }
+ return res;
+ }
+
+ function asciiSlice(buf, start, end) {
+ let ret = "";
+ end = Math.min(buf.length, end);
+
+ for (let i = start; i < end; ++i) {
+ ret += String.fromCharCode(buf[i] & 0x7f);
+ }
+ return ret;
+ }
+
+ function latin1Slice(buf, start, end) {
+ let ret = "";
+ end = Math.min(buf.length, end);
+
+ for (let i = start; i < end; ++i) {
+ ret += String.fromCharCode(buf[i]);
+ }
+ return ret;
+ }
+
+ function hexSlice(buf, start, end) {
+ const len = buf.length;
+
+ if (!start || start < 0) {
+ start = 0;
+ }
+ if (!end || end < 0 || end > len) {
+ end = len;
+ }
+
+ let out = "";
+ for (let i = start; i < end; ++i) {
+ out += toHex(buf[i]);
+ }
+ return out;
+ }
+
+ function utf16leSlice(buf, start, end) {
+ const bytes = buf.slice(start, end);
+ let res = "";
+ for (let i = 0; i < bytes.length; i += 2) {
+ res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
+ }
+ return res;
+ }
+
+ Buffer.prototype.slice = function slice(start, end) {
+ const len = this.length;
+ start = ~~start;
+ end = end === undefined ? len : ~~end;
+
+ if (start < 0) {
+ start += len;
+ if (start < 0) {
+ start = 0;
+ }
+ } else if (start > len) {
+ start = len;
+ }
+
+ if (end < 0) {
+ end += len;
+ if (end < 0) {
+ end = 0;
+ }
+ } else if (end > len) {
+ end = len;
+ }
+
+ if (end < start) {
+ end = start;
+ }
+
+ let newBuf;
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ newBuf = this.subarray(start, end);
+ newBuf.__proto__ = Buffer.prototype;
+ } else {
+ const sliceLen = end - start;
+ newBuf = new Buffer(sliceLen, undefined);
+ for (let i = 0; i < sliceLen; ++i) {
+ newBuf[i] = this[i + start];
+ }
+ }
+
+ return newBuf;
+ };
+
+ /*
+ * Need to make sure that buffer isn't trying to write out of bounds.
+ */
+ function checkOffset(offset, ext, length) {
+ if (offset % 1 !== 0 || offset < 0) {
+ throw new RangeError("offset is not uint");
+ }
+ if (offset + ext > length) {
+ throw new RangeError("Trying to access beyond buffer length");
+ }
+ }
+
+ Buffer.prototype.readUIntLE = function readUIntLE(
+ offset,
+ byteLength,
+ noAssert
+ ) {
+ offset = offset | 0;
+ byteLength = byteLength | 0;
+ if (!noAssert) {
+ checkOffset(offset, byteLength, this.length);
+ }
+
+ let val = this[offset];
+ let mul = 1;
+ let i = 0;
+ while (++i < byteLength && (mul *= 0x100)) {
+ val += this[offset + i] * mul;
+ }
+
+ return val;
+ };
+
+ Buffer.prototype.readUIntBE = function readUIntBE(
+ offset,
+ byteLength,
+ noAssert
+ ) {
+ offset = offset | 0;
+ byteLength = byteLength | 0;
+ if (!noAssert) {
+ checkOffset(offset, byteLength, this.length);
+ }
+
+ let val = this[offset + --byteLength];
+ let mul = 1;
+ while (byteLength > 0 && (mul *= 0x100)) {
+ val += this[offset + --byteLength] * mul;
+ }
+
+ return val;
+ };
+
+ Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 1, this.length);
+ }
+ return this[offset];
+ };
+
+ Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 2, this.length);
+ }
+ return this[offset] | (this[offset + 1] << 8);
+ };
+
+ Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 2, this.length);
+ }
+ return (this[offset] << 8) | this[offset + 1];
+ };
+
+ Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 4, this.length);
+ }
+
+ return (
+ (this[offset] | (this[offset + 1] << 8) | (this[offset + 2] << 16)) +
+ this[offset + 3] * 0x1000000
+ );
+ };
+
+ Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 4, this.length);
+ }
+
+ return (
+ this[offset] * 0x1000000 +
+ ((this[offset + 1] << 16) | (this[offset + 2] << 8) | this[offset + 3])
+ );
+ };
+
+ Buffer.prototype.readIntLE = function readIntLE(
+ offset,
+ byteLength,
+ noAssert
+ ) {
+ offset = offset | 0;
+ byteLength = byteLength | 0;
+ if (!noAssert) {
+ checkOffset(offset, byteLength, this.length);
+ }
+
+ let val = this[offset];
+ let mul = 1;
+ let i = 0;
+ while (++i < byteLength && (mul *= 0x100)) {
+ val += this[offset + i] * mul;
+ }
+ mul *= 0x80;
+
+ if (val >= mul) {
+ val -= Math.pow(2, 8 * byteLength);
+ }
+
+ return val;
+ };
+
+ Buffer.prototype.readIntBE = function readIntBE(
+ offset,
+ byteLength,
+ noAssert
+ ) {
+ offset = offset | 0;
+ byteLength = byteLength | 0;
+ if (!noAssert) {
+ checkOffset(offset, byteLength, this.length);
+ }
+
+ let i = byteLength;
+ let mul = 1;
+ let val = this[offset + --i];
+ while (i > 0 && (mul *= 0x100)) {
+ val += this[offset + --i] * mul;
+ }
+ mul *= 0x80;
+
+ if (val >= mul) {
+ val -= Math.pow(2, 8 * byteLength);
+ }
+
+ return val;
+ };
+
+ Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 1, this.length);
+ }
+ if (!(this[offset] & 0x80)) {
+ return this[offset];
+ }
+ return (0xff - this[offset] + 1) * -1;
+ };
+
+ Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 2, this.length);
+ }
+ const val = this[offset] | (this[offset + 1] << 8);
+ return val & 0x8000 ? val | 0xffff0000 : val;
+ };
+
+ Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 2, this.length);
+ }
+ const val = this[offset + 1] | (this[offset] << 8);
+ return val & 0x8000 ? val | 0xffff0000 : val;
+ };
+
+ Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 4, this.length);
+ }
+
+ return (
+ this[offset] |
+ (this[offset + 1] << 8) |
+ (this[offset + 2] << 16) |
+ (this[offset + 3] << 24)
+ );
+ };
+
+ Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 4, this.length);
+ }
+
+ return (
+ (this[offset] << 24) |
+ (this[offset + 1] << 16) |
+ (this[offset + 2] << 8) |
+ this[offset + 3]
+ );
+ };
+
+ Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 4, this.length);
+ }
+ return read(this, offset, true, 23, 4);
+ };
+
+ Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 4, this.length);
+ }
+ return read(this, offset, false, 23, 4);
+ };
+
+ Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 8, this.length);
+ }
+ return read(this, offset, true, 52, 8);
+ };
+
+ Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {
+ if (!noAssert) {
+ checkOffset(offset, 8, this.length);
+ }
+ return read(this, offset, false, 52, 8);
+ };
+
+ function checkInt(buf, value, offset, ext, max, min) {
+ if (!internalIsBuffer(buf)) {
+ throw new TypeError('"buffer" argument must be a Buffer instance');
+ }
+ if (value > max || value < min) {
+ throw new RangeError('"value" argument is out of bounds');
+ }
+ if (offset + ext > buf.length) {
+ throw new RangeError("Index out of range");
+ }
+ }
+
+ Buffer.prototype.writeUIntLE = function writeUIntLE(
+ value,
+ offset,
+ byteLength,
+ noAssert
+ ) {
+ value = +value;
+ offset = offset | 0;
+ byteLength = byteLength | 0;
+ if (!noAssert) {
+ const maxBytes = Math.pow(2, 8 * byteLength) - 1;
+ checkInt(this, value, offset, byteLength, maxBytes, 0);
+ }
+
+ let mul = 1;
+ let i = 0;
+ this[offset] = value & 0xff;
+ while (++i < byteLength && (mul *= 0x100)) {
+ this[offset + i] = (value / mul) & 0xff;
+ }
+
+ return offset + byteLength;
+ };
+
+ Buffer.prototype.writeUIntBE = function writeUIntBE(
+ value,
+ offset,
+ byteLength,
+ noAssert
+ ) {
+ value = +value;
+ offset = offset | 0;
+ byteLength = byteLength | 0;
+ if (!noAssert) {
+ const maxBytes = Math.pow(2, 8 * byteLength) - 1;
+ checkInt(this, value, offset, byteLength, maxBytes, 0);
+ }
+
+ let i = byteLength - 1;
+ let mul = 1;
+ this[offset + i] = value & 0xff;
+ while (--i >= 0 && (mul *= 0x100)) {
+ this[offset + i] = (value / mul) & 0xff;
+ }
+
+ return offset + byteLength;
+ };
+
+ Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {
+ value = +value;
+ offset = offset | 0;
+ if (!noAssert) {
+ checkInt(this, value, offset, 1, 0xff, 0);
+ }
+ if (!Buffer.TYPED_ARRAY_SUPPORT) {
+ value = Math.floor(value);
+ }
+ this[offset] = value & 0xff;
+ return offset + 1;
+ };
+
+ function objectWriteUInt16(buf, value, offset, littleEndian) {
+ if (value < 0) {
+ value = 0xffff + value + 1;
+ }
+ for (let i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
+ buf[offset + i] =
+ (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
+ ((littleEndian ? i : 1 - i) * 8);
+ }
+ }
+
+ Buffer.prototype.writeUInt16LE = function writeUInt16LE(
+ value,
+ offset,
+ noAssert
+ ) {
+ value = +value;
+ offset = offset | 0;
+ if (!noAssert) {
+ checkInt(this, value, offset, 2, 0xffff, 0);
+ }
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = value & 0xff;
+ this[offset + 1] = value >>> 8;
+ } else {
+ objectWriteUInt16(this, value, offset, true);
+ }
+ return offset + 2;
+ };
+
+ Buffer.prototype.writeUInt16BE = function writeUInt16BE(
+ value,
+ offset,
+ noAssert
+ ) {
+ value = +value;
+ offset = offset | 0;
+ if (!noAssert) {
+ checkInt(this, value, offset, 2, 0xffff, 0);
+ }
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = value >>> 8;
+ this[offset + 1] = value & 0xff;
+ } else {
+ objectWriteUInt16(this, value, offset, false);
+ }
+ return offset + 2;
+ };
+
+ function objectWriteUInt32(buf, value, offset, littleEndian) {
+ if (value < 0) {
+ value = 0xffffffff + value + 1;
+ }
+ for (let i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
+ buf[offset + i] = (value >>> ((littleEndian ? i : 3 - i) * 8)) & 0xff;
+ }
+ }
+
+ Buffer.prototype.writeUInt32LE = function writeUInt32LE(
+ value,
+ offset,
+ noAssert
+ ) {
+ value = +value;
+ offset = offset | 0;
+ if (!noAssert) {
+ checkInt(this, value, offset, 4, 0xffffffff, 0);
+ }
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset + 3] = value >>> 24;
+ this[offset + 2] = value >>> 16;
+ this[offset + 1] = value >>> 8;
+ this[offset] = value & 0xff;
+ } else {
+ objectWriteUInt32(this, value, offset, true);
+ }
+ return offset + 4;
+ };
+
+ Buffer.prototype.writeUInt32BE = function writeUInt32BE(
+ value,
+ offset,
+ noAssert
+ ) {
+ value = +value;
+ offset = offset | 0;
+ if (!noAssert) {
+ checkInt(this, value, offset, 4, 0xffffffff, 0);
+ }
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = value >>> 24;
+ this[offset + 1] = value >>> 16;
+ this[offset + 2] = value >>> 8;
+ this[offset + 3] = value & 0xff;
+ } else {
+ objectWriteUInt32(this, value, offset, false);
+ }
+ return offset + 4;
+ };
+
+ Buffer.prototype.writeIntLE = function writeIntLE(
+ value,
+ offset,
+ byteLength,
+ noAssert
+ ) {
+ value = +value;
+ offset = offset | 0;
+ if (!noAssert) {
+ const limit = Math.pow(2, 8 * byteLength - 1);
+
+ checkInt(this, value, offset, byteLength, limit - 1, -limit);
+ }
+
+ let i = 0;
+ let mul = 1;
+ let sub = 0;
+ this[offset] = value & 0xff;
+ while (++i < byteLength && (mul *= 0x100)) {
+ if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
+ sub = 1;
+ }
+ this[offset + i] = (((value / mul) >> 0) - sub) & 0xff;
+ }
+
+ return offset + byteLength;
+ };
+
+ Buffer.prototype.writeIntBE = function writeIntBE(
+ value,
+ offset,
+ byteLength,
+ noAssert
+ ) {
+ value = +value;
+ offset = offset | 0;
+ if (!noAssert) {
+ const limit = Math.pow(2, 8 * byteLength - 1);
+
+ checkInt(this, value, offset, byteLength, limit - 1, -limit);
+ }
+
+ let i = byteLength - 1;
+ let mul = 1;
+ let sub = 0;
+ this[offset + i] = value & 0xff;
+ while (--i >= 0 && (mul *= 0x100)) {
+ if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
+ sub = 1;
+ }
+ this[offset + i] = (((value / mul) >> 0) - sub) & 0xff;
+ }
+
+ return offset + byteLength;
+ };
+
+ Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {
+ value = +value;
+ offset = offset | 0;
+ if (!noAssert) {
+ checkInt(this, value, offset, 1, 0x7f, -0x80);
+ }
+ if (!Buffer.TYPED_ARRAY_SUPPORT) {
+ value = Math.floor(value);
+ }
+ if (value < 0) {
+ value = 0xff + value + 1;
+ }
+ this[offset] = value & 0xff;
+ return offset + 1;
+ };
+
+ Buffer.prototype.writeInt16LE = function writeInt16LE(
+ value,
+ offset,
+ noAssert
+ ) {
+ value = +value;
+ offset = offset | 0;
+ if (!noAssert) {
+ checkInt(this, value, offset, 2, 0x7fff, -0x8000);
+ }
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = value & 0xff;
+ this[offset + 1] = value >>> 8;
+ } else {
+ objectWriteUInt16(this, value, offset, true);
+ }
+ return offset + 2;
+ };
+
+ Buffer.prototype.writeInt16BE = function writeInt16BE(
+ value,
+ offset,
+ noAssert
+ ) {
+ value = +value;
+ offset = offset | 0;
+ if (!noAssert) {
+ checkInt(this, value, offset, 2, 0x7fff, -0x8000);
+ }
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = value >>> 8;
+ this[offset + 1] = value & 0xff;
+ } else {
+ objectWriteUInt16(this, value, offset, false);
+ }
+ return offset + 2;
+ };
+
+ Buffer.prototype.writeInt32LE = function writeInt32LE(
+ value,
+ offset,
+ noAssert
+ ) {
+ value = +value;
+ offset = offset | 0;
+ if (!noAssert) {
+ checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
+ }
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = value & 0xff;
+ this[offset + 1] = value >>> 8;
+ this[offset + 2] = value >>> 16;
+ this[offset + 3] = value >>> 24;
+ } else {
+ objectWriteUInt32(this, value, offset, true);
+ }
+ return offset + 4;
+ };
+
+ Buffer.prototype.writeInt32BE = function writeInt32BE(
+ value,
+ offset,
+ noAssert
+ ) {
+ value = +value;
+ offset = offset | 0;
+ if (!noAssert) {
+ checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
+ }
+ if (value < 0) {
+ value = 0xffffffff + value + 1;
+ }
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = value >>> 24;
+ this[offset + 1] = value >>> 16;
+ this[offset + 2] = value >>> 8;
+ this[offset + 3] = value & 0xff;
+ } else {
+ objectWriteUInt32(this, value, offset, false);
+ }
+ return offset + 4;
+ };
+
+ function checkIEEE754(buf, value, offset, ext, max, min) {
+ if (offset + ext > buf.length) {
+ throw new RangeError("Index out of range");
+ }
+ if (offset < 0) {
+ throw new RangeError("Index out of range");
+ }
+ }
+
+ function writeFloat(buf, value, offset, littleEndian, noAssert) {
+ if (!noAssert) {
+ checkIEEE754(buf, value, offset, 4);
+ }
+ write(buf, value, offset, littleEndian, 23, 4);
+ return offset + 4;
+ }
+
+ Buffer.prototype.writeFloatLE = function writeFloatLE(
+ value,
+ offset,
+ noAssert
+ ) {
+ return writeFloat(this, value, offset, true, noAssert);
+ };
+
+ Buffer.prototype.writeFloatBE = function writeFloatBE(
+ value,
+ offset,
+ noAssert
+ ) {
+ return writeFloat(this, value, offset, false, noAssert);
+ };
+
+ function writeDouble(buf, value, offset, littleEndian, noAssert) {
+ if (!noAssert) {
+ checkIEEE754(buf, value, offset, 8);
+ }
+ write(buf, value, offset, littleEndian, 52, 8);
+ return offset + 8;
+ }
+
+ Buffer.prototype.writeDoubleLE = function writeDoubleLE(
+ value,
+ offset,
+ noAssert
+ ) {
+ return writeDouble(this, value, offset, true, noAssert);
+ };
+
+ Buffer.prototype.writeDoubleBE = function writeDoubleBE(
+ value,
+ offset,
+ noAssert
+ ) {
+ return writeDouble(this, value, offset, false, noAssert);
+ };
+
+ // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
+ Buffer.prototype.copy = function copy(target, targetStart, start, end) {
+ if (!start) {
+ start = 0;
+ }
+ if (!end && end !== 0) {
+ end = this.length;
+ }
+ if (targetStart >= target.length) {
+ targetStart = target.length;
+ }
+ if (!targetStart) {
+ targetStart = 0;
+ }
+ if (end > 0 && end < start) {
+ end = start;
+ }
+
+ // Copy 0 bytes; we're done
+ if (end === start) {
+ return 0;
+ }
+ if (target.length === 0 || this.length === 0) {
+ return 0;
+ }
+
+ // Fatal error conditions
+ if (targetStart < 0) {
+ throw new RangeError("targetStart out of bounds");
+ }
+ if (start < 0 || start >= this.length) {
+ throw new RangeError("sourceStart out of bounds");
+ }
+ if (end < 0) {
+ throw new RangeError("sourceEnd out of bounds");
+ }
+
+ // Are we oob?
+ if (end > this.length) {
+ end = this.length;
+ }
+ if (target.length - targetStart < end - start) {
+ end = target.length - targetStart + start;
+ }
+
+ const len = end - start;
+ let i;
+
+ if (this === target && start < targetStart && targetStart < end) {
+ // descending copy from end
+ for (i = len - 1; i >= 0; --i) {
+ target[i + targetStart] = this[i + start];
+ }
+ } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
+ // ascending copy from start
+ for (i = 0; i < len; ++i) {
+ target[i + targetStart] = this[i + start];
+ }
+ } else {
+ Uint8Array.prototype.set.call(
+ target,
+ this.subarray(start, start + len),
+ targetStart
+ );
+ }
+
+ return len;
+ };
+
+ // Usage:
+ // buffer.fill(number[, offset[, end]])
+ // buffer.fill(buffer[, offset[, end]])
+ // buffer.fill(string[, offset[, end]][, encoding])
+ Buffer.prototype.fill = function fill(val, start, end, encoding) {
+ // Handle string cases:
+ if (typeof val === "string") {
+ if (typeof start === "string") {
+ encoding = start;
+ start = 0;
+ end = this.length;
+ } else if (typeof end === "string") {
+ encoding = end;
+ end = this.length;
+ }
+ if (val.length === 1) {
+ const code = val.charCodeAt(0);
+ if (code < 256) {
+ val = code;
+ }
+ }
+ if (encoding !== undefined && typeof encoding !== "string") {
+ throw new TypeError("encoding must be a string");
+ }
+ if (typeof encoding === "string" && !Buffer.isEncoding(encoding)) {
+ throw new TypeError("Unknown encoding: " + encoding);
+ }
+ } else if (typeof val === "number") {
+ val = val & 255;
+ }
+
+ // Invalid ranges are not set to a default, so can range check early.
+ if (start < 0 || this.length < start || this.length < end) {
+ throw new RangeError("Out of range index");
+ }
+
+ if (end <= start) {
+ return this;
+ }
+
+ start = start >>> 0;
+ end = end === undefined ? this.length : end >>> 0;
+
+ if (!val) {
+ val = 0;
+ }
+
+ let i;
+ if (typeof val === "number") {
+ for (i = start; i < end; ++i) {
+ this[i] = val;
+ }
+ } else {
+ const bytes = internalIsBuffer(val)
+ ? val
+ : utf8ToBytes(new Buffer(val, encoding).toString());
+ const len = bytes.length;
+ for (i = 0; i < end - start; ++i) {
+ this[i + start] = bytes[i % len];
+ }
+ }
+
+ return this;
+ };
+
+ // HELPER FUNCTIONS
+ // ================
+
+ const INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g;
+
+ function base64clean(str) {
+ // Node strips out invalid characters like \n and \t from the string, base64-js does not
+ str = stringtrim(str).replace(INVALID_BASE64_RE, "");
+ // Node converts strings with length < 2 to ''
+ if (str.length < 2) {
+ return "";
+ }
+ // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
+ while (str.length % 4 !== 0) {
+ str = str + "=";
+ }
+ return str;
+ }
+
+ function stringtrim(str) {
+ if (str.trim) {
+ return str.trim();
+ }
+ return str.replace(/^\s+|\s+$/g, "");
+ }
+
+ function toHex(n) {
+ if (n < 16) {
+ return "0" + n.toString(16);
+ }
+ return n.toString(16);
+ }
+
+ function utf8ToBytes(string, units) {
+ units = units || Infinity;
+ let codePoint;
+ const length = string.length;
+ let leadSurrogate = null;
+ const bytes = [];
+
+ for (let i = 0; i < length; ++i) {
+ codePoint = string.charCodeAt(i);
+
+ // is surrogate component
+ if (codePoint > 0xd7ff && codePoint < 0xe000) {
+ // last char was a lead
+ if (!leadSurrogate) {
+ // no lead yet
+ if (codePoint > 0xdbff) {
+ // unexpected trail
+ if ((units -= 3) > -1) {
+ bytes.push(0xef, 0xbf, 0xbd);
+ }
+ continue;
+ } else if (i + 1 === length) {
+ // unpaired lead
+ if ((units -= 3) > -1) {
+ bytes.push(0xef, 0xbf, 0xbd);
+ }
+ continue;
+ }
+
+ // valid lead
+ leadSurrogate = codePoint;
+
+ continue;
+ }
+
+ // 2 leads in a row
+ if (codePoint < 0xdc00) {
+ if ((units -= 3) > -1) {
+ bytes.push(0xef, 0xbf, 0xbd);
+ }
+ leadSurrogate = codePoint;
+ continue;
+ }
+
+ // valid surrogate pair
+ codePoint =
+ (((leadSurrogate - 0xd800) << 10) | (codePoint - 0xdc00)) + 0x10000;
+ } else if (leadSurrogate) {
+ // valid bmp char, but last char was a lead
+ if ((units -= 3) > -1) {
+ bytes.push(0xef, 0xbf, 0xbd);
+ }
+ }
+
+ leadSurrogate = null;
+
+ // encode utf8
+ if (codePoint < 0x80) {
+ if ((units -= 1) < 0) {
+ break;
+ }
+ bytes.push(codePoint);
+ } else if (codePoint < 0x800) {
+ if ((units -= 2) < 0) {
+ break;
+ }
+ bytes.push((codePoint >> 0x6) | 0xc0, (codePoint & 0x3f) | 0x80);
+ } else if (codePoint < 0x10000) {
+ if ((units -= 3) < 0) {
+ break;
+ }
+ bytes.push(
+ (codePoint >> 0xc) | 0xe0,
+ ((codePoint >> 0x6) & 0x3f) | 0x80,
+ (codePoint & 0x3f) | 0x80
+ );
+ } else if (codePoint < 0x110000) {
+ if ((units -= 4) < 0) {
+ break;
+ }
+ bytes.push(
+ (codePoint >> 0x12) | 0xf0,
+ ((codePoint >> 0xc) & 0x3f) | 0x80,
+ ((codePoint >> 0x6) & 0x3f) | 0x80,
+ (codePoint & 0x3f) | 0x80
+ );
+ } else {
+ throw new Error("Invalid code point");
+ }
+ }
+
+ return bytes;
+ }
+
+ function asciiToBytes(str) {
+ const byteArray = [];
+ for (let i = 0; i < str.length; ++i) {
+ // Node's code seems to be doing this and not & 0x7F..
+ byteArray.push(str.charCodeAt(i) & 0xff);
+ }
+ return byteArray;
+ }
+
+ function utf16leToBytes(str, units) {
+ let c, hi, lo;
+ const byteArray = [];
+ for (let i = 0; i < str.length; ++i) {
+ if ((units -= 2) < 0) {
+ break;
+ }
+
+ c = str.charCodeAt(i);
+ hi = c >> 8;
+ lo = c % 256;
+ byteArray.push(lo);
+ byteArray.push(hi);
+ }
+
+ return byteArray;
+ }
+
+ function base64ToBytes(str) {
+ return toByteArray(base64clean(str));
+ }
+
+ function blitBuffer(src, dst, offset, length) {
+ for (let i = 0; i < length; ++i) {
+ if (i + offset >= dst.length || i >= src.length) {
+ break;
+ }
+ dst[i + offset] = src[i];
+ }
+ return i;
+ }
+
+ function isnan(val) {
+ return val !== val; // eslint-disable-line no-self-compare
+ }
+
+ // the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence
+ // The _isBuffer check is for Safari 5-7 support, because it's missing
+ // Object.prototype.constructor. Remove this eventually
+ function isBuffer(obj) {
+ return (
+ obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))
+ );
+ }
+
+ function isFastBuffer(obj) {
+ return (
+ !!obj.constructor &&
+ typeof obj.constructor.isBuffer === "function" &&
+ obj.constructor.isBuffer(obj)
+ );
+ }
+
+ // For Node v0.10 support. Remove this eventually.
+ function isSlowBuffer(obj) {
+ return (
+ typeof obj.readFloatLE === "function" &&
+ typeof obj.slice === "function" &&
+ isFastBuffer(obj.slice(0, 0))
+ );
+ }
+
+ /**
+ * Create an Error with the specified message, config, error code, request and response.
+ *
+ * @param {string} message The error message.
+ * @param {string} [code] The error code (for example, 'ECONNABORTED').
+ * @param {Object} [config] The config.
+ * @param {Object} [request] The request.
+ * @param {Object} [response] The response.
+ *
+ * @returns {Error} The created error.
+ */
+ function AxiosError(message, code, config, request, response) {
+ Error.call(this);
+
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, this.constructor);
+ } else {
+ this.stack = new Error().stack;
+ }
+
+ this.message = message;
+ this.name = "AxiosError";
+ code && (this.code = code);
+ config && (this.config = config);
+ request && (this.request = request);
+ response && (this.response = response);
+ }
+
+ utils$1.inherits(AxiosError, Error, {
+ toJSON: function toJSON() {
+ return {
+ // Standard
+ message: this.message,
+ name: this.name,
+ // Microsoft
+ description: this.description,
+ number: this.number,
+ // Mozilla
+ fileName: this.fileName,
+ lineNumber: this.lineNumber,
+ columnNumber: this.columnNumber,
+ stack: this.stack,
+ // Axios
+ config: utils$1.toJSONObject(this.config),
+ code: this.code,
+ status:
+ this.response && this.response.status ? this.response.status : null,
+ };
+ },
+ });
+
+ const prototype$1 = AxiosError.prototype;
+ const descriptors = {};
+
+ [
+ "ERR_BAD_OPTION_VALUE",
+ "ERR_BAD_OPTION",
+ "ECONNABORTED",
+ "ETIMEDOUT",
+ "ERR_NETWORK",
+ "ERR_FR_TOO_MANY_REDIRECTS",
+ "ERR_DEPRECATED",
+ "ERR_BAD_RESPONSE",
+ "ERR_BAD_REQUEST",
+ "ERR_CANCELED",
+ "ERR_NOT_SUPPORT",
+ "ERR_INVALID_URL",
+ // eslint-disable-next-line func-names
+ ].forEach((code) => {
+ descriptors[code] = { value: code };
+ });
+
+ Object.defineProperties(AxiosError, descriptors);
+ Object.defineProperty(prototype$1, "isAxiosError", { value: true });
+
+ // eslint-disable-next-line func-names
+ AxiosError.from = (error, code, config, request, response, customProps) => {
+ const axiosError = Object.create(prototype$1);
+
+ utils$1.toFlatObject(
+ error,
+ axiosError,
+ function filter(obj) {
+ return obj !== Error.prototype;
+ },
+ (prop) => {
+ return prop !== "isAxiosError";
+ }
+ );
+
+ AxiosError.call(axiosError, error.message, code, config, request, response);
+
+ axiosError.cause = error;
+
+ axiosError.name = error.name;
+
+ customProps && Object.assign(axiosError, customProps);
+
+ return axiosError;
+ };
+
+ // eslint-disable-next-line strict
+ const httpAdapter = null;
+
+ /**
+ * Determines if the given thing is a array or js object.
+ *
+ * @param {string} thing - The object or array to be visited.
+ *
+ * @returns {boolean}
+ */
+ function isVisitable(thing) {
+ return utils$1.isPlainObject(thing) || utils$1.isArray(thing);
+ }
+
+ /**
+ * It removes the brackets from the end of a string
+ *
+ * @param {string} key - The key of the parameter.
+ *
+ * @returns {string} the key without the brackets.
+ */
+ function removeBrackets(key) {
+ return utils$1.endsWith(key, "[]") ? key.slice(0, -2) : key;
+ }
+
+ /**
+ * It takes a path, a key, and a boolean, and returns a string
+ *
+ * @param {string} path - The path to the current key.
+ * @param {string} key - The key of the current object being iterated over.
+ * @param {string} dots - If true, the key will be rendered with dots instead of brackets.
+ *
+ * @returns {string} The path to the current key.
+ */
+ function renderKey(path, key, dots) {
+ if (!path) {
+ return key;
+ }
+ return path
+ .concat(key)
+ .map(function each(token, i) {
+ // eslint-disable-next-line no-param-reassign
+ token = removeBrackets(token);
+ return !dots && i ? "[" + token + "]" : token;
+ })
+ .join(dots ? "." : "");
+ }
+
+ /**
+ * If the array is an array and none of its elements are visitable, then it's a flat array.
+ *
+ * @param {Array} arr - The array to check
+ *
+ * @returns {boolean}
+ */
+ function isFlatArray(arr) {
+ return utils$1.isArray(arr) && !arr.some(isVisitable);
+ }
+
+ const predicates = utils$1.toFlatObject(
+ utils$1,
+ {},
+ null,
+ function filter(prop) {
+ return /^is[A-Z]/.test(prop);
+ }
+ );
+
+ /**
+ * Convert a data object to FormData
+ *
+ * @param {Object} obj
+ * @param {?Object} [formData]
+ * @param {?Object} [options]
+ * @param {Function} [options.visitor]
+ * @param {Boolean} [options.metaTokens = true]
+ * @param {Boolean} [options.dots = false]
+ * @param {?Boolean} [options.indexes = false]
+ *
+ * @returns {Object}
+ **/
+
+ /**
+ * It converts an object into a FormData object
+ *
+ * @param {Object} obj - The object to convert to form data.
+ * @param {string} formData - The FormData object to append to.
+ * @param {Object} options
+ *
+ * @returns
+ */
+ function toFormData(obj, formData, options) {
+ if (!utils$1.isObject(obj)) {
+ throw new TypeError("target must be an object");
+ }
+
+ // eslint-disable-next-line no-param-reassign
+ formData = formData || new FormData();
+
+ // eslint-disable-next-line no-param-reassign
+ options = utils$1.toFlatObject(
+ options,
+ {
+ metaTokens: true,
+ dots: false,
+ indexes: false,
+ },
+ false,
+ function defined(option, source) {
+ // eslint-disable-next-line no-eq-null,eqeqeq
+ return !utils$1.isUndefined(source[option]);
+ }
+ );
+
+ const metaTokens = options.metaTokens;
+ // eslint-disable-next-line no-use-before-define
+ const visitor = options.visitor || defaultVisitor;
+ const dots = options.dots;
+ const indexes = options.indexes;
+ const _Blob = options.Blob || (typeof Blob !== "undefined" && Blob);
+ const useBlob = _Blob && utils$1.isSpecCompliantForm(formData);
+
+ if (!utils$1.isFunction(visitor)) {
+ throw new TypeError("visitor must be a function");
+ }
+
+ function convertValue(value) {
+ if (value === null) {
+ return "";
+ }
+
+ if (utils$1.isDate(value)) {
+ return value.toISOString();
+ }
+
+ if (!useBlob && utils$1.isBlob(value)) {
+ throw new AxiosError("Blob is not supported. Use a Buffer instead.");
+ }
+
+ if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) {
+ return useBlob && typeof Blob === "function"
+ ? new Blob([value])
+ : Buffer.from(value);
+ }
+
+ return value;
+ }
+
+ /**
+ * Default visitor.
+ *
+ * @param {*} value
+ * @param {String|Number} key
+ * @param {Array} path
+ * @this {FormData}
+ *
+ * @returns {boolean} return true to visit the each prop of the value recursively
+ */
+ function defaultVisitor(value, key, path) {
+ let arr = value;
+
+ if (value && !path && typeof value === "object") {
+ if (utils$1.endsWith(key, "{}")) {
+ // eslint-disable-next-line no-param-reassign
+ key = metaTokens ? key : key.slice(0, -2);
+ // eslint-disable-next-line no-param-reassign
+ value = JSON.stringify(value);
+ } else if (
+ (utils$1.isArray(value) && isFlatArray(value)) ||
+ ((utils$1.isFileList(value) || utils$1.endsWith(key, "[]")) &&
+ (arr = utils$1.toArray(value)))
+ ) {
+ // eslint-disable-next-line no-param-reassign
+ key = removeBrackets(key);
+
+ arr.forEach(function each(el, index) {
+ !(utils$1.isUndefined(el) || el === null) &&
+ formData.append(
+ // eslint-disable-next-line no-nested-ternary
+ indexes === true
+ ? renderKey([key], index, dots)
+ : indexes === null
+ ? key
+ : key + "[]",
+ convertValue(el)
+ );
+ });
+ return false;
+ }
+ }
+
+ if (isVisitable(value)) {
+ return true;
+ }
+
+ formData.append(renderKey(path, key, dots), convertValue(value));
+
+ return false;
+ }
+
+ const stack = [];
+
+ const exposedHelpers = Object.assign(predicates, {
+ defaultVisitor,
+ convertValue,
+ isVisitable,
+ });
+
+ function build(value, path) {
+ if (utils$1.isUndefined(value)) {
+ return;
+ }
+
+ if (stack.indexOf(value) !== -1) {
+ throw Error("Circular reference detected in " + path.join("."));
+ }
+
+ stack.push(value);
+
+ utils$1.forEach(value, function each(el, key) {
+ const result =
+ !(utils$1.isUndefined(el) || el === null) &&
+ visitor.call(
+ formData,
+ el,
+ utils$1.isString(key) ? key.trim() : key,
+ path,
+ exposedHelpers
+ );
+
+ if (result === true) {
+ build(el, path ? path.concat(key) : [key]);
+ }
+ });
+
+ stack.pop();
+ }
+
+ if (!utils$1.isObject(obj)) {
+ throw new TypeError("data must be an object");
+ }
+
+ build(obj);
+
+ return formData;
+ }
+
+ /**
+ * It encodes a string by replacing all characters that are not in the unreserved set with
+ * their percent-encoded equivalents
+ *
+ * @param {string} str - The string to encode.
+ *
+ * @returns {string} The encoded string.
+ */
+ function encode$1(str) {
+ const charMap = {
+ "!": "%21",
+ "'": "%27",
+ "(": "%28",
+ ")": "%29",
+ "~": "%7E",
+ "%20": "+",
+ "%00": "\x00",
+ };
+ return encodeURIComponent(str).replace(
+ /[!'()~]|%20|%00/g,
+ function replacer(match) {
+ return charMap[match];
+ }
+ );
+ }
+
+ /**
+ * It takes a params object and converts it to a FormData object
+ *
+ * @param {Object} params - The parameters to be converted to a FormData object.
+ * @param {Object} options - The options object passed to the Axios constructor.
+ *
+ * @returns {void}
+ */
+ function AxiosURLSearchParams(params, options) {
+ this._pairs = [];
+
+ params && toFormData(params, this, options);
+ }
+
+ const prototype = AxiosURLSearchParams.prototype;
+
+ prototype.append = function append(name, value) {
+ this._pairs.push([name, value]);
+ };
+
+ prototype.toString = function toString(encoder) {
+ const _encode = encoder
+ ? function (value) {
+ return encoder.call(this, value, encode$1);
+ }
+ : encode$1;
+
+ return this._pairs
+ .map(function each(pair) {
+ return _encode(pair[0]) + "=" + _encode(pair[1]);
+ }, "")
+ .join("&");
+ };
+
+ /**
+ * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their
+ * URI encoded counterparts
+ *
+ * @param {string} val The value to be encoded.
+ *
+ * @returns {string} The encoded value.
+ */
+ function encode(val) {
+ return encodeURIComponent(val)
+ .replace(/%3A/gi, ":")
+ .replace(/%24/g, "$")
+ .replace(/%2C/gi, ",")
+ .replace(/%20/g, "+")
+ .replace(/%5B/gi, "[")
+ .replace(/%5D/gi, "]");
+ }
+
+ /**
+ * Build a URL by appending params to the end
+ *
+ * @param {string} url The base of the url (e.g., http://www.google.com)
+ * @param {object} [params] The params to be appended
+ * @param {?object} options
+ *
+ * @returns {string} The formatted url
+ */
+ function buildURL(url, params, options) {
+ /*eslint no-param-reassign:0*/
+ if (!params) {
+ return url;
+ }
+
+ const _encode = (options && options.encode) || encode;
+
+ const serializeFn = options && options.serialize;
+
+ let serializedParams;
+
+ if (serializeFn) {
+ serializedParams = serializeFn(params, options);
+ } else {
+ serializedParams = utils$1.isURLSearchParams(params)
+ ? params.toString()
+ : new AxiosURLSearchParams(params, options).toString(_encode);
+ }
+
+ if (serializedParams) {
+ const hashmarkIndex = url.indexOf("#");
+
+ if (hashmarkIndex !== -1) {
+ url = url.slice(0, hashmarkIndex);
+ }
+ url += (url.indexOf("?") === -1 ? "?" : "&") + serializedParams;
+ }
+
+ return url;
+ }
+
+ class InterceptorManager {
+ constructor() {
+ this.handlers = [];
+ }
+
+ /**
+ * Add a new interceptor to the stack
+ *
+ * @param {Function} fulfilled The function to handle `then` for a `Promise`
+ * @param {Function} rejected The function to handle `reject` for a `Promise`
+ *
+ * @return {Number} An ID used to remove interceptor later
+ */
+ use(fulfilled, rejected, options) {
+ this.handlers.push({
+ fulfilled,
+ rejected,
+ synchronous: options ? options.synchronous : false,
+ runWhen: options ? options.runWhen : null,
+ });
+ return this.handlers.length - 1;
+ }
+
+ /**
+ * Remove an interceptor from the stack
+ *
+ * @param {Number} id The ID that was returned by `use`
+ *
+ * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise
+ */
+ eject(id) {
+ if (this.handlers[id]) {
+ this.handlers[id] = null;
+ }
+ }
+
+ /**
+ * Clear all interceptors from the stack
+ *
+ * @returns {void}
+ */
+ clear() {
+ if (this.handlers) {
+ this.handlers = [];
+ }
+ }
+
+ /**
+ * Iterate over all the registered interceptors
+ *
+ * This method is particularly useful for skipping over any
+ * interceptors that may have become `null` calling `eject`.
+ *
+ * @param {Function} fn The function to call for each interceptor
+ *
+ * @returns {void}
+ */
+ forEach(fn) {
+ utils$1.forEach(this.handlers, function forEachHandler(h) {
+ if (h !== null) {
+ fn(h);
+ }
+ });
+ }
+ }
+
+ const InterceptorManager$1 = InterceptorManager;
+
+ const transitionalDefaults = {
+ silentJSONParsing: true,
+ forcedJSONParsing: true,
+ clarifyTimeoutError: false,
+ };
+
+ const URLSearchParams$1 =
+ typeof URLSearchParams !== "undefined"
+ ? URLSearchParams
+ : AxiosURLSearchParams;
+
+ const FormData$1 = typeof FormData !== "undefined" ? FormData : null;
+
+ const Blob$1 = typeof Blob !== "undefined" ? Blob : null;
+
+ const platform$1 = {
+ isBrowser: true,
+ classes: {
+ URLSearchParams: URLSearchParams$1,
+ FormData: FormData$1,
+ Blob: Blob$1,
+ },
+ protocols: ["http", "https", "file", "blob", "url", "data"],
+ };
+
+ const hasBrowserEnv =
+ typeof window !== "undefined" && typeof document !== "undefined";
+
+ /**
+ * Determine if we're running in a standard browser environment
+ *
+ * This allows axios to run in a web worker, and react-native.
+ * Both environments support XMLHttpRequest, but not fully standard globals.
+ *
+ * web workers:
+ * typeof window -> undefined
+ * typeof document -> undefined
+ *
+ * react-native:
+ * navigator.product -> 'ReactNative'
+ * nativescript
+ * navigator.product -> 'NativeScript' or 'NS'
+ *
+ * @returns {boolean}
+ */
+ const hasStandardBrowserEnv = ((product) => {
+ return (
+ hasBrowserEnv &&
+ ["ReactNative", "NativeScript", "NS"].indexOf(product) < 0
+ );
+ })(typeof navigator !== "undefined" && navigator.product);
+
+ /**
+ * Determine if we're running in a standard browser webWorker environment
+ *
+ * Although the `isStandardBrowserEnv` method indicates that
+ * `allows axios to run in a web worker`, the WebWorker will still be
+ * filtered out due to its judgment standard
+ * `typeof window !== 'undefined' && typeof document !== 'undefined'`.
+ * This leads to a problem when axios post `FormData` in webWorker
+ */
+ const hasStandardBrowserWebWorkerEnv = (() => {
+ return (
+ typeof WorkerGlobalScope !== "undefined" &&
+ // eslint-disable-next-line no-undef
+ self instanceof WorkerGlobalScope &&
+ typeof self.importScripts === "function"
+ );
+ })();
+
+ const utils = /*#__PURE__*/ Object.freeze({
+ __proto__: null,
+ hasBrowserEnv,
+ hasStandardBrowserEnv,
+ hasStandardBrowserWebWorkerEnv,
+ });
+
+ const platform = {
+ ...utils,
+ ...platform$1,
+ };
+
+ function toURLEncodedForm(data, options) {
+ return toFormData(
+ data,
+ new platform.classes.URLSearchParams(),
+ Object.assign(
+ {
+ visitor(value, key, path, helpers) {
+ if (platform.isNode && utils$1.isBuffer(value)) {
+ this.append(key, value.toString("base64"));
+ return false;
+ }
+
+ return helpers.defaultVisitor.apply(this, arguments);
+ },
+ },
+ options
+ )
+ );
+ }
+
+ /**
+ * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']
+ *
+ * @param {string} name - The name of the property to get.
+ *
+ * @returns An array of strings.
+ */
+ function parsePropPath(name) {
+ // foo[x][y][z]
+ // foo.x.y.z
+ // foo-x-y-z
+ // foo x y z
+ return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map((match) => {
+ return match[0] === "[]" ? "" : match[1] || match[0];
+ });
+ }
+
+ /**
+ * Convert an array to an object.
+ *
+ * @param {Array} arr - The array to convert to an object.
+ *
+ * @returns An object with the same keys and values as the array.
+ */
+ function arrayToObject(arr) {
+ const obj = {};
+ const keys = Object.keys(arr);
+ let i;
+ const len = keys.length;
+ let key;
+ for (i = 0; i < len; i++) {
+ key = keys[i];
+ obj[key] = arr[key];
+ }
+ return obj;
+ }
+
+ /**
+ * It takes a FormData object and returns a JavaScript object
+ *
+ * @param {string} formData The FormData object to convert to JSON.
+ *
+ * @returns {Object | null} The converted object.
+ */
+ function formDataToJSON(formData) {
+ function buildPath(path, value, target, index) {
+ let name = path[index++];
+
+ if (name === "__proto__") {
+ return true;
+ }
+
+ const isNumericKey = Number.isFinite(+name);
+ const isLast = index >= path.length;
+ name = !name && utils$1.isArray(target) ? target.length : name;
+
+ if (isLast) {
+ if (utils$1.hasOwnProp(target, name)) {
+ target[name] = [target[name], value];
+ } else {
+ target[name] = value;
+ }
+
+ return !isNumericKey;
+ }
+
+ if (!target[name] || !utils$1.isObject(target[name])) {
+ target[name] = [];
+ }
+
+ const result = buildPath(path, value, target[name], index);
+
+ if (result && utils$1.isArray(target[name])) {
+ target[name] = arrayToObject(target[name]);
+ }
+
+ return !isNumericKey;
+ }
+
+ if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) {
+ const obj = {};
+
+ utils$1.forEachEntry(formData, (name, value) => {
+ buildPath(parsePropPath(name), value, obj, 0);
+ });
+
+ return obj;
+ }
+
+ return null;
+ }
+
+ /**
+ * It takes a string, tries to parse it, and if it fails, it returns the stringified version
+ * of the input
+ *
+ * @param {any} rawValue - The value to be stringified.
+ * @param {Function} parser - A function that parses a string into a JavaScript object.
+ * @param {Function} encoder - A function that takes a value and returns a string.
+ *
+ * @returns {string} A stringified version of the rawValue.
+ */
+ function stringifySafely(rawValue, parser, encoder) {
+ if (utils$1.isString(rawValue)) {
+ try {
+ (parser || JSON.parse)(rawValue);
+ return utils$1.trim(rawValue);
+ } catch (e) {
+ if (e.name !== "SyntaxError") {
+ throw e;
+ }
+ }
+ }
+
+ return (encoder || JSON.stringify)(rawValue);
+ }
+
+ const defaults = {
+ transitional: transitionalDefaults,
+
+ adapter: ["xhr", "http"],
+
+ transformRequest: [
+ function transformRequest(data, headers) {
+ const contentType = headers.getContentType() || "";
+ const hasJSONContentType = contentType.indexOf("application/json") > -1;
+ const isObjectPayload = utils$1.isObject(data);
+
+ if (isObjectPayload && utils$1.isHTMLForm(data)) {
+ data = new FormData(data);
+ }
+
+ const isFormData = utils$1.isFormData(data);
+
+ if (isFormData) {
+ return hasJSONContentType
+ ? JSON.stringify(formDataToJSON(data))
+ : data;
+ }
+
+ if (
+ utils$1.isArrayBuffer(data) ||
+ utils$1.isBuffer(data) ||
+ utils$1.isStream(data) ||
+ utils$1.isFile(data) ||
+ utils$1.isBlob(data)
+ ) {
+ return data;
+ }
+ if (utils$1.isArrayBufferView(data)) {
+ return data.buffer;
+ }
+ if (utils$1.isURLSearchParams(data)) {
+ headers.setContentType(
+ "application/x-www-form-urlencoded;charset=utf-8",
+ false
+ );
+ return data.toString();
+ }
+
+ let isFileList;
+
+ if (isObjectPayload) {
+ if (contentType.indexOf("application/x-www-form-urlencoded") > -1) {
+ return toURLEncodedForm(data, this.formSerializer).toString();
+ }
+
+ if (
+ (isFileList = utils$1.isFileList(data)) ||
+ contentType.indexOf("multipart/form-data") > -1
+ ) {
+ const _FormData = this.env && this.env.FormData;
+
+ return toFormData(
+ isFileList ? { "files[]": data } : data,
+ _FormData && new _FormData(),
+ this.formSerializer
+ );
+ }
+ }
+
+ if (isObjectPayload || hasJSONContentType) {
+ headers.setContentType("application/json", false);
+ return stringifySafely(data);
+ }
+
+ return data;
+ },
+ ],
+
+ transformResponse: [
+ function transformResponse(data) {
+ const transitional = this.transitional || defaults.transitional;
+ const forcedJSONParsing =
+ transitional && transitional.forcedJSONParsing;
+ const JSONRequested = this.responseType === "json";
+
+ if (
+ data &&
+ utils$1.isString(data) &&
+ ((forcedJSONParsing && !this.responseType) || JSONRequested)
+ ) {
+ const silentJSONParsing =
+ transitional && transitional.silentJSONParsing;
+ const strictJSONParsing = !silentJSONParsing && JSONRequested;
+
+ try {
+ return JSON.parse(data);
+ } catch (e) {
+ if (strictJSONParsing) {
+ if (e.name === "SyntaxError") {
+ throw AxiosError.from(
+ e,
+ AxiosError.ERR_BAD_RESPONSE,
+ this,
+ null,
+ this.response
+ );
}
- }];
- const appInfo = {
- name: "ONLYOFFICE",
- id: "onlyoffice",
- icon: "x-office-document",
- isFileEditor: true,
- extensions: [{
- extension: "docx",
- routeName: "onlyoffice-editor",
- newTab: true,
- newFileMenu: {
- menuTitle($gettext) {
- return $gettext("Document");
- },
- icon: "x-office-document"
- },
- routes: ["files-spaces-generic", "files-common-favorites", "files-shares-with-others", "files-shares-with-me", "files-trash-generic", "files-public-link"]
- }, {
- extension: "xlsx",
- routeName: "onlyoffice-editor",
- newTab: true,
- newFileMenu: {
- menuTitle($gettext) {
- return $gettext("Spreadsheet");
- },
- icon: "x-office-spreadsheet"
- },
- routes: ["files-spaces-generic", "files-common-favorites", "files-shares-with-others", "files-shares-with-me", "files-trash-generic", "files-public-link"]
- }, {
- extension: "pptx",
- routeName: "onlyoffice-editor",
- newTab: true,
- newFileMenu: {
- menuTitle($gettext) {
- return $gettext("Presentation");
- },
- icon: "x-office-presentation"
- },
- routes: ["files-spaces-generic", "files-common-favorites", "files-shares-with-others", "files-shares-with-me", "files-trash-generic", "files-public-link"]
- }]
- };
- var app = {
- appInfo,
- routes
- };
-
- return app;
-
-}));
+ throw e;
+ }
+ }
+ }
+
+ return data;
+ },
+ ],
+
+ /**
+ * A timeout in milliseconds to abort a request. If set to 0 (default) a
+ * timeout is not created.
+ */
+ timeout: 0,
+
+ xsrfCookieName: "XSRF-TOKEN",
+ xsrfHeaderName: "X-XSRF-TOKEN",
+
+ maxContentLength: -1,
+ maxBodyLength: -1,
+
+ env: {
+ FormData: platform.classes.FormData,
+ Blob: platform.classes.Blob,
+ },
+
+ validateStatus: function validateStatus(status) {
+ return status >= 200 && status < 300;
+ },
+
+ headers: {
+ common: {
+ Accept: "application/json, text/plain, */*",
+ "Content-Type": undefined,
+ },
+ },
+ };
+
+ utils$1.forEach(
+ ["delete", "get", "head", "post", "put", "patch"],
+ (method) => {
+ defaults.headers[method] = {};
+ }
+ );
+
+ const defaults$1 = defaults;
+
+ // RawAxiosHeaders whose duplicates are ignored by node
+ // c.f. https://nodejs.org/api/http.html#http_message_headers
+ const ignoreDuplicateOf = utils$1.toObjectSet([
+ "age",
+ "authorization",
+ "content-length",
+ "content-type",
+ "etag",
+ "expires",
+ "from",
+ "host",
+ "if-modified-since",
+ "if-unmodified-since",
+ "last-modified",
+ "location",
+ "max-forwards",
+ "proxy-authorization",
+ "referer",
+ "retry-after",
+ "user-agent",
+ ]);
+
+ /**
+ * Parse headers into an object
+ *
+ * ```
+ * Date: Wed, 27 Aug 2014 08:58:49 GMT
+ * Content-Type: application/json
+ * Connection: keep-alive
+ * Transfer-Encoding: chunked
+ * ```
+ *
+ * @param {String} rawHeaders Headers needing to be parsed
+ *
+ * @returns {Object} Headers parsed into an object
+ */
+ const parseHeaders = (rawHeaders) => {
+ const parsed = {};
+ let key;
+ let val;
+ let i;
+
+ rawHeaders &&
+ rawHeaders.split("\n").forEach(function parser(line) {
+ i = line.indexOf(":");
+ key = line.substring(0, i).trim().toLowerCase();
+ val = line.substring(i + 1).trim();
+
+ if (!key || (parsed[key] && ignoreDuplicateOf[key])) {
+ return;
+ }
+
+ if (key === "set-cookie") {
+ if (parsed[key]) {
+ parsed[key].push(val);
+ } else {
+ parsed[key] = [val];
+ }
+ } else {
+ parsed[key] = parsed[key] ? parsed[key] + ", " + val : val;
+ }
+ });
+
+ return parsed;
+ };
+
+ const $internals = Symbol("internals");
+
+ function normalizeHeader(header) {
+ return header && String(header).trim().toLowerCase();
+ }
+
+ function normalizeValue(value) {
+ if (value === false || value == null) {
+ return value;
+ }
+
+ return utils$1.isArray(value) ? value.map(normalizeValue) : String(value);
+ }
+
+ function parseTokens(str) {
+ const tokens = Object.create(null);
+ const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;
+ let match;
+
+ while ((match = tokensRE.exec(str))) {
+ tokens[match[1]] = match[2];
+ }
+
+ return tokens;
+ }
+
+ const isValidHeaderName = (str) =>
+ /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());
+
+ function matchHeaderValue(
+ context,
+ value,
+ header,
+ filter,
+ isHeaderNameFilter
+ ) {
+ if (utils$1.isFunction(filter)) {
+ return filter.call(this, value, header);
+ }
+
+ if (isHeaderNameFilter) {
+ value = header;
+ }
+
+ if (!utils$1.isString(value)) {
+ return;
+ }
+
+ if (utils$1.isString(filter)) {
+ return value.indexOf(filter) !== -1;
+ }
+
+ if (utils$1.isRegExp(filter)) {
+ return filter.test(value);
+ }
+ }
+
+ function formatHeader(header) {
+ return header
+ .trim()
+ .toLowerCase()
+ .replace(/([a-z\d])(\w*)/g, (w, char, str) => {
+ return char.toUpperCase() + str;
+ });
+ }
+
+ function buildAccessors(obj, header) {
+ const accessorName = utils$1.toCamelCase(" " + header);
+
+ ["get", "set", "has"].forEach((methodName) => {
+ Object.defineProperty(obj, methodName + accessorName, {
+ value(arg1, arg2, arg3) {
+ return this[methodName].call(this, header, arg1, arg2, arg3);
+ },
+ configurable: true,
+ });
+ });
+ }
+
+ class AxiosHeaders {
+ constructor(headers) {
+ headers && this.set(headers);
+ }
+
+ set(header, valueOrRewrite, rewrite) {
+ const self = this;
+
+ function setHeader(_value, _header, _rewrite) {
+ const lHeader = normalizeHeader(_header);
+
+ if (!lHeader) {
+ throw new Error("header name must be a non-empty string");
+ }
+
+ const key = utils$1.findKey(self, lHeader);
+
+ if (
+ !key ||
+ self[key] === undefined ||
+ _rewrite === true ||
+ (_rewrite === undefined && self[key] !== false)
+ ) {
+ self[key || _header] = normalizeValue(_value);
+ }
+ }
+
+ const setHeaders = (headers, _rewrite) =>
+ utils$1.forEach(headers, (_value, _header) =>
+ setHeader(_value, _header, _rewrite)
+ );
+
+ if (utils$1.isPlainObject(header) || header instanceof this.constructor) {
+ setHeaders(header, valueOrRewrite);
+ } else if (
+ utils$1.isString(header) &&
+ (header = header.trim()) &&
+ !isValidHeaderName(header)
+ ) {
+ setHeaders(parseHeaders(header), valueOrRewrite);
+ } else {
+ header != null && setHeader(valueOrRewrite, header, rewrite);
+ }
+
+ return this;
+ }
+
+ get(header, parser) {
+ header = normalizeHeader(header);
+
+ if (header) {
+ const key = utils$1.findKey(this, header);
+
+ if (key) {
+ const value = this[key];
+
+ if (!parser) {
+ return value;
+ }
+
+ if (parser === true) {
+ return parseTokens(value);
+ }
+
+ if (utils$1.isFunction(parser)) {
+ return parser.call(this, value, key);
+ }
+
+ if (utils$1.isRegExp(parser)) {
+ return parser.exec(value);
+ }
+
+ throw new TypeError("parser must be boolean|regexp|function");
+ }
+ }
+ }
+
+ has(header, matcher) {
+ header = normalizeHeader(header);
+
+ if (header) {
+ const key = utils$1.findKey(this, header);
+
+ return !!(
+ key &&
+ this[key] !== undefined &&
+ (!matcher || matchHeaderValue(this, this[key], key, matcher))
+ );
+ }
+
+ return false;
+ }
+
+ delete(header, matcher) {
+ const self = this;
+ let deleted = false;
+
+ function deleteHeader(_header) {
+ _header = normalizeHeader(_header);
+
+ if (_header) {
+ const key = utils$1.findKey(self, _header);
+
+ if (
+ key &&
+ (!matcher || matchHeaderValue(self, self[key], key, matcher))
+ ) {
+ delete self[key];
+
+ deleted = true;
+ }
+ }
+ }
+
+ if (utils$1.isArray(header)) {
+ header.forEach(deleteHeader);
+ } else {
+ deleteHeader(header);
+ }
+
+ return deleted;
+ }
+
+ clear(matcher) {
+ const keys = Object.keys(this);
+ let i = keys.length;
+ let deleted = false;
+
+ while (i--) {
+ const key = keys[i];
+ if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {
+ delete this[key];
+ deleted = true;
+ }
+ }
+
+ return deleted;
+ }
+
+ normalize(format) {
+ const self = this;
+ const headers = {};
+
+ utils$1.forEach(this, (value, header) => {
+ const key = utils$1.findKey(headers, header);
+
+ if (key) {
+ self[key] = normalizeValue(value);
+ delete self[header];
+ return;
+ }
+
+ const normalized = format
+ ? formatHeader(header)
+ : String(header).trim();
+
+ if (normalized !== header) {
+ delete self[header];
+ }
+
+ self[normalized] = normalizeValue(value);
+
+ headers[normalized] = true;
+ });
+
+ return this;
+ }
+
+ concat(...targets) {
+ return this.constructor.concat(this, ...targets);
+ }
+
+ toJSON(asStrings) {
+ const obj = Object.create(null);
+
+ utils$1.forEach(this, (value, header) => {
+ value != null &&
+ value !== false &&
+ (obj[header] =
+ asStrings && utils$1.isArray(value) ? value.join(", ") : value);
+ });
+
+ return obj;
+ }
+
+ [Symbol.iterator]() {
+ return Object.entries(this.toJSON())[Symbol.iterator]();
+ }
+
+ toString() {
+ return Object.entries(this.toJSON())
+ .map(([header, value]) => header + ": " + value)
+ .join("\n");
+ }
+
+ get [Symbol.toStringTag]() {
+ return "AxiosHeaders";
+ }
+
+ static from(thing) {
+ return thing instanceof this ? thing : new this(thing);
+ }
+
+ static concat(first, ...targets) {
+ const computed = new this(first);
+
+ targets.forEach((target) => computed.set(target));
+
+ return computed;
+ }
+
+ static accessor(header) {
+ const internals =
+ (this[$internals] =
+ this[$internals] =
+ {
+ accessors: {},
+ });
+
+ const accessors = internals.accessors;
+ const prototype = this.prototype;
+
+ function defineAccessor(_header) {
+ const lHeader = normalizeHeader(_header);
+
+ if (!accessors[lHeader]) {
+ buildAccessors(prototype, _header);
+ accessors[lHeader] = true;
+ }
+ }
+
+ utils$1.isArray(header)
+ ? header.forEach(defineAccessor)
+ : defineAccessor(header);
+
+ return this;
+ }
+ }
+
+ AxiosHeaders.accessor([
+ "Content-Type",
+ "Content-Length",
+ "Accept",
+ "Accept-Encoding",
+ "User-Agent",
+ "Authorization",
+ ]);
+
+ // reserved names hotfix
+ utils$1.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => {
+ const mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`
+ return {
+ get: () => value,
+ set(headerValue) {
+ this[mapped] = headerValue;
+ },
+ };
+ });
+
+ utils$1.freezeMethods(AxiosHeaders);
+
+ const AxiosHeaders$1 = AxiosHeaders;
+
+ /**
+ * Transform the data for a request or a response
+ *
+ * @param {Array|Function} fns A single function or Array of functions
+ * @param {?Object} response The response object
+ *
+ * @returns {*} The resulting transformed data
+ */
+ function transformData(fns, response) {
+ const config = this || defaults$1;
+ const context = response || config;
+ const headers = AxiosHeaders$1.from(context.headers);
+ let data = context.data;
+
+ utils$1.forEach(fns, function transform(fn) {
+ data = fn.call(
+ config,
+ data,
+ headers.normalize(),
+ response ? response.status : undefined
+ );
+ });
+
+ headers.normalize();
+
+ return data;
+ }
+
+ function isCancel(value) {
+ return !!(value && value.__CANCEL__);
+ }
+
+ /**
+ * A `CanceledError` is an object that is thrown when an operation is canceled.
+ *
+ * @param {string=} message The message.
+ * @param {Object=} config The config.
+ * @param {Object=} request The request.
+ *
+ * @returns {CanceledError} The created error.
+ */
+ function CanceledError(message, config, request) {
+ // eslint-disable-next-line no-eq-null,eqeqeq
+ AxiosError.call(
+ this,
+ message == null ? "canceled" : message,
+ AxiosError.ERR_CANCELED,
+ config,
+ request
+ );
+ this.name = "CanceledError";
+ }
+
+ utils$1.inherits(CanceledError, AxiosError, {
+ __CANCEL__: true,
+ });
+
+ /**
+ * Resolve or reject a Promise based on response status.
+ *
+ * @param {Function} resolve A function that resolves the promise.
+ * @param {Function} reject A function that rejects the promise.
+ * @param {object} response The response.
+ *
+ * @returns {object} The response.
+ */
+ function settle(resolve, reject, response) {
+ const validateStatus = response.config.validateStatus;
+ if (
+ !response.status ||
+ !validateStatus ||
+ validateStatus(response.status)
+ ) {
+ resolve(response);
+ } else {
+ reject(
+ new AxiosError(
+ "Request failed with status code " + response.status,
+ [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][
+ Math.floor(response.status / 100) - 4
+ ],
+ response.config,
+ response.request,
+ response
+ )
+ );
+ }
+ }
+
+ const cookies = platform.hasStandardBrowserEnv
+ ? // Standard browser envs support document.cookie
+ {
+ write(name, value, expires, path, domain, secure) {
+ const cookie = [name + "=" + encodeURIComponent(value)];
+
+ utils$1.isNumber(expires) &&
+ cookie.push("expires=" + new Date(expires).toGMTString());
+
+ utils$1.isString(path) && cookie.push("path=" + path);
+
+ utils$1.isString(domain) && cookie.push("domain=" + domain);
+
+ secure === true && cookie.push("secure");
+
+ document.cookie = cookie.join("; ");
+ },
+
+ read(name) {
+ const match = document.cookie.match(
+ new RegExp("(^|;\\s*)(" + name + ")=([^;]*)")
+ );
+ return match ? decodeURIComponent(match[3]) : null;
+ },
+
+ remove(name) {
+ this.write(name, "", Date.now() - 86400000);
+ },
+ }
+ : // Non-standard browser env (web workers, react-native) lack needed support.
+ {
+ write() {},
+ read() {
+ return null;
+ },
+ remove() {},
+ };
+
+ /**
+ * Determines whether the specified URL is absolute
+ *
+ * @param {string} url The URL to test
+ *
+ * @returns {boolean} True if the specified URL is absolute, otherwise false
+ */
+ function isAbsoluteURL(url) {
+ // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL).
+ // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
+ // by any combination of letters, digits, plus, period, or hyphen.
+ return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
+ }
+
+ /**
+ * Creates a new URL by combining the specified URLs
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} relativeURL The relative URL
+ *
+ * @returns {string} The combined URL
+ */
+ function combineURLs(baseURL, relativeURL) {
+ return relativeURL
+ ? baseURL.replace(/\/?\/$/, "") + "/" + relativeURL.replace(/^\/+/, "")
+ : baseURL;
+ }
+
+ /**
+ * Creates a new URL by combining the baseURL with the requestedURL,
+ * only when the requestedURL is not already an absolute URL.
+ * If the requestURL is absolute, this function returns the requestedURL untouched.
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} requestedURL Absolute or relative URL to combine
+ *
+ * @returns {string} The combined full path
+ */
+ function buildFullPath(baseURL, requestedURL) {
+ if (baseURL && !isAbsoluteURL(requestedURL)) {
+ return combineURLs(baseURL, requestedURL);
+ }
+ return requestedURL;
+ }
+
+ const isURLSameOrigin = platform.hasStandardBrowserEnv
+ ? // Standard browser envs have full support of the APIs needed to test
+ // whether the request URL is of the same origin as current location.
+ (function standardBrowserEnv() {
+ const msie = /(msie|trident)/i.test(navigator.userAgent);
+ const urlParsingNode = document.createElement("a");
+
+ /**
+ * Parse a URL to discover its components
+ *
+ * @param {String} url The URL to be parsed
+ * @returns {Object}
+ */
+ function resolveURL(url) {
+ let href = url;
+
+ if (msie) {
+ // IE needs attribute set twice to normalize properties
+ urlParsingNode.setAttribute("href", href);
+ href = urlParsingNode.href;
+ }
+
+ urlParsingNode.setAttribute("href", href);
+
+ // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
+ return {
+ href: urlParsingNode.href,
+ protocol: urlParsingNode.protocol
+ ? urlParsingNode.protocol.replace(/:$/, "")
+ : "",
+ host: urlParsingNode.host,
+ search: urlParsingNode.search
+ ? urlParsingNode.search.replace(/^\?/, "")
+ : "",
+ hash: urlParsingNode.hash
+ ? urlParsingNode.hash.replace(/^#/, "")
+ : "",
+ hostname: urlParsingNode.hostname,
+ port: urlParsingNode.port,
+ pathname:
+ urlParsingNode.pathname.charAt(0) === "/"
+ ? urlParsingNode.pathname
+ : "/" + urlParsingNode.pathname,
+ };
+ }
+
+ const originURL = resolveURL(window.location.href);
+
+ /**
+ * Determine if a URL shares the same origin as the current location
+ *
+ * @param {String} requestURL The URL to test
+ * @returns {boolean} True if URL shares the same origin, otherwise false
+ */
+ return function isURLSameOrigin(requestURL) {
+ const parsed = utils$1.isString(requestURL)
+ ? resolveURL(requestURL)
+ : requestURL;
+ return (
+ parsed.protocol === originURL.protocol &&
+ parsed.host === originURL.host
+ );
+ };
+ })()
+ : // Non standard browser envs (web workers, react-native) lack needed support.
+ (function nonStandardBrowserEnv() {
+ return function isURLSameOrigin() {
+ return true;
+ };
+ })();
+
+ function parseProtocol(url) {
+ const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
+ return (match && match[1]) || "";
+ }
+
+ /**
+ * Calculate data maxRate
+ * @param {Number} [samplesCount= 10]
+ * @param {Number} [min= 1000]
+ * @returns {Function}
+ */
+ function speedometer(samplesCount, min) {
+ samplesCount = samplesCount || 10;
+ const bytes = new Array(samplesCount);
+ const timestamps = new Array(samplesCount);
+ let head = 0;
+ let tail = 0;
+ let firstSampleTS;
+
+ min = min !== undefined ? min : 1000;
+
+ return function push(chunkLength) {
+ const now = Date.now();
+
+ const startedAt = timestamps[tail];
+
+ if (!firstSampleTS) {
+ firstSampleTS = now;
+ }
+
+ bytes[head] = chunkLength;
+ timestamps[head] = now;
+
+ let i = tail;
+ let bytesCount = 0;
+
+ while (i !== head) {
+ bytesCount += bytes[i++];
+ i = i % samplesCount;
+ }
+
+ head = (head + 1) % samplesCount;
+
+ if (head === tail) {
+ tail = (tail + 1) % samplesCount;
+ }
+
+ if (now - firstSampleTS < min) {
+ return;
+ }
+
+ const passed = startedAt && now - startedAt;
+
+ return passed ? Math.round((bytesCount * 1000) / passed) : undefined;
+ };
+ }
+
+ function progressEventReducer(listener, isDownloadStream) {
+ let bytesNotified = 0;
+ const _speedometer = speedometer(50, 250);
+
+ return (e) => {
+ const loaded = e.loaded;
+ const total = e.lengthComputable ? e.total : undefined;
+ const progressBytes = loaded - bytesNotified;
+ const rate = _speedometer(progressBytes);
+ const inRange = loaded <= total;
+
+ bytesNotified = loaded;
+
+ const data = {
+ loaded,
+ total,
+ progress: total ? loaded / total : undefined,
+ bytes: progressBytes,
+ rate: rate ? rate : undefined,
+ estimated:
+ rate && total && inRange ? (total - loaded) / rate : undefined,
+ event: e,
+ };
+
+ data[isDownloadStream ? "download" : "upload"] = true;
+
+ listener(data);
+ };
+ }
+
+ const isXHRAdapterSupported = typeof XMLHttpRequest !== "undefined";
+
+ const xhrAdapter =
+ isXHRAdapterSupported &&
+ function (config) {
+ return new Promise(function dispatchXhrRequest(resolve, reject) {
+ const requestData = config.data;
+ const requestHeaders = AxiosHeaders$1.from(config.headers).normalize();
+ let { withXSRFToken } = config;
+ const { responseType } = config;
+ let onCanceled;
+ function done() {
+ if (config.cancelToken) {
+ config.cancelToken.unsubscribe(onCanceled);
+ }
+
+ if (config.signal) {
+ config.signal.removeEventListener("abort", onCanceled);
+ }
+ }
+
+ let contentType;
+
+ if (utils$1.isFormData(requestData)) {
+ if (
+ platform.hasStandardBrowserEnv ||
+ platform.hasStandardBrowserWebWorkerEnv
+ ) {
+ requestHeaders.setContentType(false); // Let the browser set it
+ } else if (
+ (contentType = requestHeaders.getContentType()) !== false
+ ) {
+ // fix semicolon duplication issue for ReactNative FormData implementation
+ const [type, ...tokens] = contentType
+ ? contentType
+ .split(";")
+ .map((token) => token.trim())
+ .filter(Boolean)
+ : [];
+ requestHeaders.setContentType(
+ [type || "multipart/form-data", ...tokens].join("; ")
+ );
+ }
+ }
+
+ let request = new XMLHttpRequest();
+
+ // HTTP basic authentication
+ if (config.auth) {
+ const username = config.auth.username || "";
+ const password = config.auth.password
+ ? unescape(encodeURIComponent(config.auth.password))
+ : "";
+ requestHeaders.set(
+ "Authorization",
+ "Basic " + btoa(username + ":" + password)
+ );
+ }
+
+ const fullPath = buildFullPath(config.baseURL, config.url);
+
+ request.open(
+ config.method.toUpperCase(),
+ buildURL(fullPath, config.params, config.paramsSerializer),
+ true
+ );
+
+ // Set the request timeout in MS
+ request.timeout = config.timeout;
+
+ function onloadend() {
+ if (!request) {
+ return;
+ }
+ // Prepare the response
+ const responseHeaders = AxiosHeaders$1.from(
+ "getAllResponseHeaders" in request &&
+ request.getAllResponseHeaders()
+ );
+ const responseData =
+ !responseType || responseType === "text" || responseType === "json"
+ ? request.responseText
+ : request.response;
+ const response = {
+ data: responseData,
+ status: request.status,
+ statusText: request.statusText,
+ headers: responseHeaders,
+ config,
+ request,
+ };
+
+ settle(
+ function _resolve(value) {
+ resolve(value);
+ done();
+ },
+ function _reject(err) {
+ reject(err);
+ done();
+ },
+ response
+ );
+
+ // Clean up request
+ request = null;
+ }
+
+ if ("onloadend" in request) {
+ // Use onloadend if available
+ request.onloadend = onloadend;
+ } else {
+ // Listen for ready state to emulate onloadend
+ request.onreadystatechange = function handleLoad() {
+ if (!request || request.readyState !== 4) {
+ return;
+ }
+
+ // The request errored out and we didn't get a response, this will be
+ // handled by onerror instead
+ // With one exception: request that using file: protocol, most browsers
+ // will return status as 0 even though it's a successful request
+ if (
+ request.status === 0 &&
+ !(
+ request.responseURL &&
+ request.responseURL.indexOf("file:") === 0
+ )
+ ) {
+ return;
+ }
+ // readystate handler is calling before onerror or ontimeout handlers,
+ // so we should call onloadend on the next 'tick'
+ setTimeout(onloadend);
+ };
+ }
+
+ // Handle browser request cancellation (as opposed to a manual cancellation)
+ request.onabort = function handleAbort() {
+ if (!request) {
+ return;
+ }
+
+ reject(
+ new AxiosError(
+ "Request aborted",
+ AxiosError.ECONNABORTED,
+ config,
+ request
+ )
+ );
+
+ // Clean up request
+ request = null;
+ };
+
+ // Handle low level network errors
+ request.onerror = function handleError() {
+ // Real errors are hidden from us by the browser
+ // onerror should only fire if it's a network error
+ reject(
+ new AxiosError(
+ "Network Error",
+ AxiosError.ERR_NETWORK,
+ config,
+ request
+ )
+ );
+
+ // Clean up request
+ request = null;
+ };
+
+ // Handle timeout
+ request.ontimeout = function handleTimeout() {
+ let timeoutErrorMessage = config.timeout
+ ? "timeout of " + config.timeout + "ms exceeded"
+ : "timeout exceeded";
+ const transitional = config.transitional || transitionalDefaults;
+ if (config.timeoutErrorMessage) {
+ timeoutErrorMessage = config.timeoutErrorMessage;
+ }
+ reject(
+ new AxiosError(
+ timeoutErrorMessage,
+ transitional.clarifyTimeoutError
+ ? AxiosError.ETIMEDOUT
+ : AxiosError.ECONNABORTED,
+ config,
+ request
+ )
+ );
+
+ // Clean up request
+ request = null;
+ };
+
+ // Add xsrf header
+ // This is only done if running in a standard browser environment.
+ // Specifically not if we're in a web worker, or react-native.
+ if (platform.hasStandardBrowserEnv) {
+ withXSRFToken &&
+ utils$1.isFunction(withXSRFToken) &&
+ (withXSRFToken = withXSRFToken(config));
+
+ if (
+ withXSRFToken ||
+ (withXSRFToken !== false && isURLSameOrigin(fullPath))
+ ) {
+ // Add xsrf header
+ const xsrfValue =
+ config.xsrfHeaderName &&
+ config.xsrfCookieName &&
+ cookies.read(config.xsrfCookieName);
+
+ if (xsrfValue) {
+ requestHeaders.set(config.xsrfHeaderName, xsrfValue);
+ }
+ }
+ }
+
+ // Remove Content-Type if data is undefined
+ requestData === undefined && requestHeaders.setContentType(null);
+
+ // Add headers to the request
+ if ("setRequestHeader" in request) {
+ utils$1.forEach(
+ requestHeaders.toJSON(),
+ function setRequestHeader(val, key) {
+ request.setRequestHeader(key, val);
+ }
+ );
+ }
+
+ // Add withCredentials to request if needed
+ if (!utils$1.isUndefined(config.withCredentials)) {
+ request.withCredentials = !!config.withCredentials;
+ }
+
+ // Add responseType to request if needed
+ if (responseType && responseType !== "json") {
+ request.responseType = config.responseType;
+ }
+
+ // Handle progress if needed
+ if (typeof config.onDownloadProgress === "function") {
+ request.addEventListener(
+ "progress",
+ progressEventReducer(config.onDownloadProgress, true)
+ );
+ }
+
+ // Not all browsers support upload events
+ if (typeof config.onUploadProgress === "function" && request.upload) {
+ request.upload.addEventListener(
+ "progress",
+ progressEventReducer(config.onUploadProgress)
+ );
+ }
+
+ if (config.cancelToken || config.signal) {
+ // Handle cancellation
+ // eslint-disable-next-line func-names
+ onCanceled = (cancel) => {
+ if (!request) {
+ return;
+ }
+ reject(
+ !cancel || cancel.type
+ ? new CanceledError(null, config, request)
+ : cancel
+ );
+ request.abort();
+ request = null;
+ };
+
+ config.cancelToken && config.cancelToken.subscribe(onCanceled);
+ if (config.signal) {
+ config.signal.aborted
+ ? onCanceled()
+ : config.signal.addEventListener("abort", onCanceled);
+ }
+ }
+
+ const protocol = parseProtocol(fullPath);
+
+ if (protocol && platform.protocols.indexOf(protocol) === -1) {
+ reject(
+ new AxiosError(
+ "Unsupported protocol " + protocol + ":",
+ AxiosError.ERR_BAD_REQUEST,
+ config
+ )
+ );
+ return;
+ }
+
+ // Send the request
+ request.send(requestData || null);
+ });
+ };
+
+ const knownAdapters = {
+ http: httpAdapter,
+ xhr: xhrAdapter,
+ };
+
+ utils$1.forEach(knownAdapters, (fn, value) => {
+ if (fn) {
+ try {
+ Object.defineProperty(fn, "name", { value });
+ } catch (e) {
+ // eslint-disable-next-line no-empty
+ }
+ Object.defineProperty(fn, "adapterName", { value });
+ }
+ });
+
+ const renderReason = (reason) => `- ${reason}`;
+
+ const isResolvedHandle = (adapter) =>
+ utils$1.isFunction(adapter) || adapter === null || adapter === false;
+
+ const adapters = {
+ getAdapter: (adapters) => {
+ adapters = utils$1.isArray(adapters) ? adapters : [adapters];
+
+ const { length } = adapters;
+ let nameOrAdapter;
+ let adapter;
+
+ const rejectedReasons = {};
+
+ for (let i = 0; i < length; i++) {
+ nameOrAdapter = adapters[i];
+ let id;
+
+ adapter = nameOrAdapter;
+
+ if (!isResolvedHandle(nameOrAdapter)) {
+ adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];
+
+ if (adapter === undefined) {
+ throw new AxiosError(`Unknown adapter '${id}'`);
+ }
+ }
+
+ if (adapter) {
+ break;
+ }
+
+ rejectedReasons[id || "#" + i] = adapter;
+ }
+
+ if (!adapter) {
+ const reasons = Object.entries(rejectedReasons).map(
+ ([id, state]) =>
+ `adapter ${id} ` +
+ (state === false
+ ? "is not supported by the environment"
+ : "is not available in the build")
+ );
+
+ const s = length
+ ? reasons.length > 1
+ ? "since :\n" + reasons.map(renderReason).join("\n")
+ : " " + renderReason(reasons[0])
+ : "as no adapter specified";
+
+ throw new AxiosError(
+ `There is no suitable adapter to dispatch the request ` + s,
+ "ERR_NOT_SUPPORT"
+ );
+ }
+
+ return adapter;
+ },
+ adapters: knownAdapters,
+ };
+
+ /**
+ * Throws a `CanceledError` if cancellation has been requested.
+ *
+ * @param {Object} config The config that is to be used for the request
+ *
+ * @returns {void}
+ */
+ function throwIfCancellationRequested(config) {
+ if (config.cancelToken) {
+ config.cancelToken.throwIfRequested();
+ }
+
+ if (config.signal && config.signal.aborted) {
+ throw new CanceledError(null, config);
+ }
+ }
+
+ /**
+ * Dispatch a request to the server using the configured adapter.
+ *
+ * @param {object} config The config that is to be used for the request
+ *
+ * @returns {Promise} The Promise to be fulfilled
+ */
+ function dispatchRequest(config) {
+ throwIfCancellationRequested(config);
+
+ config.headers = AxiosHeaders$1.from(config.headers);
+
+ // Transform request data
+ config.data = transformData.call(config, config.transformRequest);
+
+ if (["post", "put", "patch"].indexOf(config.method) !== -1) {
+ config.headers.setContentType("application/x-www-form-urlencoded", false);
+ }
+
+ const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter);
+
+ return adapter(config).then(
+ function onAdapterResolution(response) {
+ throwIfCancellationRequested(config);
+
+ // Transform response data
+ response.data = transformData.call(
+ config,
+ config.transformResponse,
+ response
+ );
+
+ response.headers = AxiosHeaders$1.from(response.headers);
+
+ return response;
+ },
+ function onAdapterRejection(reason) {
+ if (!isCancel(reason)) {
+ throwIfCancellationRequested(config);
+
+ // Transform response data
+ if (reason && reason.response) {
+ reason.response.data = transformData.call(
+ config,
+ config.transformResponse,
+ reason.response
+ );
+ reason.response.headers = AxiosHeaders$1.from(
+ reason.response.headers
+ );
+ }
+ }
+
+ return Promise.reject(reason);
+ }
+ );
+ }
+
+ const headersToObject = (thing) =>
+ thing instanceof AxiosHeaders$1 ? { ...thing } : thing;
+
+ /**
+ * Config-specific merge-function which creates a new config-object
+ * by merging two configuration objects together.
+ *
+ * @param {Object} config1
+ * @param {Object} config2
+ *
+ * @returns {Object} New object resulting from merging config2 to config1
+ */
+ function mergeConfig(config1, config2) {
+ // eslint-disable-next-line no-param-reassign
+ config2 = config2 || {};
+ const config = {};
+
+ function getMergedValue(target, source, caseless) {
+ if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) {
+ return utils$1.merge.call({ caseless }, target, source);
+ } else if (utils$1.isPlainObject(source)) {
+ return utils$1.merge({}, source);
+ } else if (utils$1.isArray(source)) {
+ return source.slice();
+ }
+ return source;
+ }
+
+ // eslint-disable-next-line consistent-return
+ function mergeDeepProperties(a, b, caseless) {
+ if (!utils$1.isUndefined(b)) {
+ return getMergedValue(a, b, caseless);
+ } else if (!utils$1.isUndefined(a)) {
+ return getMergedValue(undefined, a, caseless);
+ }
+ }
+
+ // eslint-disable-next-line consistent-return
+ function valueFromConfig2(a, b) {
+ if (!utils$1.isUndefined(b)) {
+ return getMergedValue(undefined, b);
+ }
+ }
+
+ // eslint-disable-next-line consistent-return
+ function defaultToConfig2(a, b) {
+ if (!utils$1.isUndefined(b)) {
+ return getMergedValue(undefined, b);
+ } else if (!utils$1.isUndefined(a)) {
+ return getMergedValue(undefined, a);
+ }
+ }
+
+ // eslint-disable-next-line consistent-return
+ function mergeDirectKeys(a, b, prop) {
+ if (prop in config2) {
+ return getMergedValue(a, b);
+ } else if (prop in config1) {
+ return getMergedValue(undefined, a);
+ }
+ }
+
+ const mergeMap = {
+ url: valueFromConfig2,
+ method: valueFromConfig2,
+ data: valueFromConfig2,
+ baseURL: defaultToConfig2,
+ transformRequest: defaultToConfig2,
+ transformResponse: defaultToConfig2,
+ paramsSerializer: defaultToConfig2,
+ timeout: defaultToConfig2,
+ timeoutMessage: defaultToConfig2,
+ withCredentials: defaultToConfig2,
+ withXSRFToken: defaultToConfig2,
+ adapter: defaultToConfig2,
+ responseType: defaultToConfig2,
+ xsrfCookieName: defaultToConfig2,
+ xsrfHeaderName: defaultToConfig2,
+ onUploadProgress: defaultToConfig2,
+ onDownloadProgress: defaultToConfig2,
+ decompress: defaultToConfig2,
+ maxContentLength: defaultToConfig2,
+ maxBodyLength: defaultToConfig2,
+ beforeRedirect: defaultToConfig2,
+ transport: defaultToConfig2,
+ httpAgent: defaultToConfig2,
+ httpsAgent: defaultToConfig2,
+ cancelToken: defaultToConfig2,
+ socketPath: defaultToConfig2,
+ responseEncoding: defaultToConfig2,
+ validateStatus: mergeDirectKeys,
+ headers: (a, b) =>
+ mergeDeepProperties(headersToObject(a), headersToObject(b), true),
+ };
+
+ utils$1.forEach(
+ Object.keys(Object.assign({}, config1, config2)),
+ function computeConfigValue(prop) {
+ const merge = mergeMap[prop] || mergeDeepProperties;
+ const configValue = merge(config1[prop], config2[prop], prop);
+ (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) ||
+ (config[prop] = configValue);
+ }
+ );
+
+ return config;
+ }
+
+ const VERSION = "1.6.8";
+
+ const validators$1 = {};
+
+ // eslint-disable-next-line func-names
+ ["object", "boolean", "number", "function", "string", "symbol"].forEach(
+ (type, i) => {
+ validators$1[type] = function validator(thing) {
+ return typeof thing === type || "a" + (i < 1 ? "n " : " ") + type;
+ };
+ }
+ );
+
+ const deprecatedWarnings = {};
+
+ /**
+ * Transitional option validator
+ *
+ * @param {function|boolean?} validator - set to false if the transitional option has been removed
+ * @param {string?} version - deprecated version / removed since version
+ * @param {string?} message - some message with additional info
+ *
+ * @returns {function}
+ */
+ validators$1.transitional = function transitional(
+ validator,
+ version,
+ message
+ ) {
+ function formatMessage(opt, desc) {
+ return (
+ "[Axios v" +
+ VERSION +
+ "] Transitional option '" +
+ opt +
+ "'" +
+ desc +
+ (message ? ". " + message : "")
+ );
+ }
+
+ // eslint-disable-next-line func-names
+ return (value, opt, opts) => {
+ if (validator === false) {
+ throw new AxiosError(
+ formatMessage(
+ opt,
+ " has been removed" + (version ? " in " + version : "")
+ ),
+ AxiosError.ERR_DEPRECATED
+ );
+ }
+
+ if (version && !deprecatedWarnings[opt]) {
+ deprecatedWarnings[opt] = true;
+ // eslint-disable-next-line no-console
+ console.warn(
+ formatMessage(
+ opt,
+ " has been deprecated since v" +
+ version +
+ " and will be removed in the near future"
+ )
+ );
+ }
+
+ return validator ? validator(value, opt, opts) : true;
+ };
+ };
+
+ /**
+ * Assert object's properties type
+ *
+ * @param {object} options
+ * @param {object} schema
+ * @param {boolean?} allowUnknown
+ *
+ * @returns {object}
+ */
+
+ function assertOptions(options, schema, allowUnknown) {
+ if (typeof options !== "object") {
+ throw new AxiosError(
+ "options must be an object",
+ AxiosError.ERR_BAD_OPTION_VALUE
+ );
+ }
+ const keys = Object.keys(options);
+ let i = keys.length;
+ while (i-- > 0) {
+ const opt = keys[i];
+ const validator = schema[opt];
+ if (validator) {
+ const value = options[opt];
+ const result = value === undefined || validator(value, opt, options);
+ if (result !== true) {
+ throw new AxiosError(
+ "option " + opt + " must be " + result,
+ AxiosError.ERR_BAD_OPTION_VALUE
+ );
+ }
+ continue;
+ }
+ if (allowUnknown !== true) {
+ throw new AxiosError(
+ "Unknown option " + opt,
+ AxiosError.ERR_BAD_OPTION
+ );
+ }
+ }
+ }
+
+ const validator = {
+ assertOptions,
+ validators: validators$1,
+ };
+
+ const validators = validator.validators;
+
+ /**
+ * Create a new instance of Axios
+ *
+ * @param {Object} instanceConfig The default config for the instance
+ *
+ * @return {Axios} A new instance of Axios
+ */
+ class Axios {
+ constructor(instanceConfig) {
+ this.defaults = instanceConfig;
+ this.interceptors = {
+ request: new InterceptorManager$1(),
+ response: new InterceptorManager$1(),
+ };
+ }
+
+ /**
+ * Dispatch a request
+ *
+ * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)
+ * @param {?Object} config
+ *
+ * @returns {Promise} The Promise to be fulfilled
+ */
+ async request(configOrUrl, config) {
+ try {
+ return await this._request(configOrUrl, config);
+ } catch (err) {
+ if (err instanceof Error) {
+ let dummy;
+
+ Error.captureStackTrace
+ ? Error.captureStackTrace((dummy = {}))
+ : (dummy = new Error());
+
+ // slice off the Error: ... line
+ const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, "") : "";
+
+ if (!err.stack) {
+ err.stack = stack;
+ // match without the 2 top stack lines
+ } else if (
+ stack &&
+ !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ""))
+ ) {
+ err.stack += "\n" + stack;
+ }
+ }
+
+ throw err;
+ }
+ }
+
+ _request(configOrUrl, config) {
+ /*eslint no-param-reassign:0*/
+ // Allow for axios('example/url'[, config]) a la fetch API
+ if (typeof configOrUrl === "string") {
+ config = config || {};
+ config.url = configOrUrl;
+ } else {
+ config = configOrUrl || {};
+ }
+
+ config = mergeConfig(this.defaults, config);
+
+ const { transitional, paramsSerializer, headers } = config;
+
+ if (transitional !== undefined) {
+ validator.assertOptions(
+ transitional,
+ {
+ silentJSONParsing: validators.transitional(validators.boolean),
+ forcedJSONParsing: validators.transitional(validators.boolean),
+ clarifyTimeoutError: validators.transitional(validators.boolean),
+ },
+ false
+ );
+ }
+
+ if (paramsSerializer != null) {
+ if (utils$1.isFunction(paramsSerializer)) {
+ config.paramsSerializer = {
+ serialize: paramsSerializer,
+ };
+ } else {
+ validator.assertOptions(
+ paramsSerializer,
+ {
+ encode: validators.function,
+ serialize: validators.function,
+ },
+ true
+ );
+ }
+ }
+
+ // Set config.method
+ config.method = (
+ config.method ||
+ this.defaults.method ||
+ "get"
+ ).toLowerCase();
+
+ // Flatten headers
+ const contextHeaders =
+ headers && utils$1.merge(headers.common, headers[config.method]);
+
+ headers &&
+ utils$1.forEach(
+ ["delete", "get", "head", "post", "put", "patch", "common"],
+ (method) => {
+ delete headers[method];
+ }
+ );
+
+ config.headers = AxiosHeaders$1.concat(contextHeaders, headers);
+
+ // filter out skipped interceptors
+ const requestInterceptorChain = [];
+ let synchronousRequestInterceptors = true;
+ this.interceptors.request.forEach(function unshiftRequestInterceptors(
+ interceptor
+ ) {
+ if (
+ typeof interceptor.runWhen === "function" &&
+ interceptor.runWhen(config) === false
+ ) {
+ return;
+ }
+
+ synchronousRequestInterceptors =
+ synchronousRequestInterceptors && interceptor.synchronous;
+
+ requestInterceptorChain.unshift(
+ interceptor.fulfilled,
+ interceptor.rejected
+ );
+ });
+
+ const responseInterceptorChain = [];
+ this.interceptors.response.forEach(function pushResponseInterceptors(
+ interceptor
+ ) {
+ responseInterceptorChain.push(
+ interceptor.fulfilled,
+ interceptor.rejected
+ );
+ });
+
+ let promise;
+ let i = 0;
+ let len;
+
+ if (!synchronousRequestInterceptors) {
+ const chain = [dispatchRequest.bind(this), undefined];
+ chain.unshift.apply(chain, requestInterceptorChain);
+ chain.push.apply(chain, responseInterceptorChain);
+ len = chain.length;
+
+ promise = Promise.resolve(config);
+
+ while (i < len) {
+ promise = promise.then(chain[i++], chain[i++]);
+ }
+
+ return promise;
+ }
+
+ len = requestInterceptorChain.length;
+
+ let newConfig = config;
+
+ i = 0;
+
+ while (i < len) {
+ const onFulfilled = requestInterceptorChain[i++];
+ const onRejected = requestInterceptorChain[i++];
+ try {
+ newConfig = onFulfilled(newConfig);
+ } catch (error) {
+ onRejected.call(this, error);
+ break;
+ }
+ }
+
+ try {
+ promise = dispatchRequest.call(this, newConfig);
+ } catch (error) {
+ return Promise.reject(error);
+ }
+
+ i = 0;
+ len = responseInterceptorChain.length;
+
+ while (i < len) {
+ promise = promise.then(
+ responseInterceptorChain[i++],
+ responseInterceptorChain[i++]
+ );
+ }
+
+ return promise;
+ }
+
+ getUri(config) {
+ config = mergeConfig(this.defaults, config);
+ const fullPath = buildFullPath(config.baseURL, config.url);
+ return buildURL(fullPath, config.params, config.paramsSerializer);
+ }
+ }
+
+ // Provide aliases for supported request methods
+ utils$1.forEach(
+ ["delete", "get", "head", "options"],
+ function forEachMethodNoData(method) {
+ /*eslint func-names:0*/
+ Axios.prototype[method] = function (url, config) {
+ return this.request(
+ mergeConfig(config || {}, {
+ method,
+ url,
+ data: (config || {}).data,
+ })
+ );
+ };
+ }
+ );
+
+ utils$1.forEach(
+ ["post", "put", "patch"],
+ function forEachMethodWithData(method) {
+ /*eslint func-names:0*/
+
+ function generateHTTPMethod(isForm) {
+ return function httpMethod(url, data, config) {
+ return this.request(
+ mergeConfig(config || {}, {
+ method,
+ headers: isForm
+ ? {
+ "Content-Type": "multipart/form-data",
+ }
+ : {},
+ url,
+ data,
+ })
+ );
+ };
+ }
+
+ Axios.prototype[method] = generateHTTPMethod();
+
+ Axios.prototype[method + "Form"] = generateHTTPMethod(true);
+ }
+ );
+
+ const Axios$1 = Axios;
+
+ /**
+ * A `CancelToken` is an object that can be used to request cancellation of an operation.
+ *
+ * @param {Function} executor The executor function.
+ *
+ * @returns {CancelToken}
+ */
+ class CancelToken {
+ constructor(executor) {
+ if (typeof executor !== "function") {
+ throw new TypeError("executor must be a function.");
+ }
+
+ let resolvePromise;
+
+ this.promise = new Promise(function promiseExecutor(resolve) {
+ resolvePromise = resolve;
+ });
+
+ const token = this;
+
+ // eslint-disable-next-line func-names
+ this.promise.then((cancel) => {
+ if (!token._listeners) {
+ return;
+ }
+
+ let i = token._listeners.length;
+
+ while (i-- > 0) {
+ token._listeners[i](cancel);
+ }
+ token._listeners = null;
+ });
+
+ // eslint-disable-next-line func-names
+ this.promise.then = (onfulfilled) => {
+ let _resolve;
+ // eslint-disable-next-line func-names
+ const promise = new Promise((resolve) => {
+ token.subscribe(resolve);
+ _resolve = resolve;
+ }).then(onfulfilled);
+
+ promise.cancel = function reject() {
+ token.unsubscribe(_resolve);
+ };
+
+ return promise;
+ };
+
+ executor(function cancel(message, config, request) {
+ if (token.reason) {
+ // Cancellation has already been requested
+ return;
+ }
+
+ token.reason = new CanceledError(message, config, request);
+ resolvePromise(token.reason);
+ });
+ }
+
+ /**
+ * Throws a `CanceledError` if cancellation has been requested.
+ */
+ throwIfRequested() {
+ if (this.reason) {
+ throw this.reason;
+ }
+ }
+
+ /**
+ * Subscribe to the cancel signal
+ */
+
+ subscribe(listener) {
+ if (this.reason) {
+ listener(this.reason);
+ return;
+ }
+
+ if (this._listeners) {
+ this._listeners.push(listener);
+ } else {
+ this._listeners = [listener];
+ }
+ }
+
+ /**
+ * Unsubscribe from the cancel signal
+ */
+
+ unsubscribe(listener) {
+ if (!this._listeners) {
+ return;
+ }
+ const index = this._listeners.indexOf(listener);
+ if (index !== -1) {
+ this._listeners.splice(index, 1);
+ }
+ }
+
+ /**
+ * Returns an object that contains a new `CancelToken` and a function that, when called,
+ * cancels the `CancelToken`.
+ */
+ static source() {
+ let cancel;
+ const token = new CancelToken(function executor(c) {
+ cancel = c;
+ });
+ return {
+ token,
+ cancel,
+ };
+ }
+ }
+
+ const CancelToken$1 = CancelToken;
+
+ /**
+ * Syntactic sugar for invoking a function and expanding an array for arguments.
+ *
+ * Common use case would be to use `Function.prototype.apply`.
+ *
+ * ```js
+ * function f(x, y, z) {}
+ * var args = [1, 2, 3];
+ * f.apply(null, args);
+ * ```
+ *
+ * With `spread` this example can be re-written.
+ *
+ * ```js
+ * spread(function(x, y, z) {})([1, 2, 3]);
+ * ```
+ *
+ * @param {Function} callback
+ *
+ * @returns {Function}
+ */
+ function spread(callback) {
+ return function wrap(arr) {
+ return callback.apply(null, arr);
+ };
+ }
+
+ /**
+ * Determines whether the payload is an error thrown by Axios
+ *
+ * @param {*} payload The value to test
+ *
+ * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
+ */
+ function isAxiosError(payload) {
+ return utils$1.isObject(payload) && payload.isAxiosError === true;
+ }
+
+ const HttpStatusCode = {
+ Continue: 100,
+ SwitchingProtocols: 101,
+ Processing: 102,
+ EarlyHints: 103,
+ Ok: 200,
+ Created: 201,
+ Accepted: 202,
+ NonAuthoritativeInformation: 203,
+ NoContent: 204,
+ ResetContent: 205,
+ PartialContent: 206,
+ MultiStatus: 207,
+ AlreadyReported: 208,
+ ImUsed: 226,
+ MultipleChoices: 300,
+ MovedPermanently: 301,
+ Found: 302,
+ SeeOther: 303,
+ NotModified: 304,
+ UseProxy: 305,
+ Unused: 306,
+ TemporaryRedirect: 307,
+ PermanentRedirect: 308,
+ BadRequest: 400,
+ Unauthorized: 401,
+ PaymentRequired: 402,
+ Forbidden: 403,
+ NotFound: 404,
+ MethodNotAllowed: 405,
+ NotAcceptable: 406,
+ ProxyAuthenticationRequired: 407,
+ RequestTimeout: 408,
+ Conflict: 409,
+ Gone: 410,
+ LengthRequired: 411,
+ PreconditionFailed: 412,
+ PayloadTooLarge: 413,
+ UriTooLong: 414,
+ UnsupportedMediaType: 415,
+ RangeNotSatisfiable: 416,
+ ExpectationFailed: 417,
+ ImATeapot: 418,
+ MisdirectedRequest: 421,
+ UnprocessableEntity: 422,
+ Locked: 423,
+ FailedDependency: 424,
+ TooEarly: 425,
+ UpgradeRequired: 426,
+ PreconditionRequired: 428,
+ TooManyRequests: 429,
+ RequestHeaderFieldsTooLarge: 431,
+ UnavailableForLegalReasons: 451,
+ InternalServerError: 500,
+ NotImplemented: 501,
+ BadGateway: 502,
+ ServiceUnavailable: 503,
+ GatewayTimeout: 504,
+ HttpVersionNotSupported: 505,
+ VariantAlsoNegotiates: 506,
+ InsufficientStorage: 507,
+ LoopDetected: 508,
+ NotExtended: 510,
+ NetworkAuthenticationRequired: 511,
+ };
+
+ Object.entries(HttpStatusCode).forEach(([key, value]) => {
+ HttpStatusCode[value] = key;
+ });
+
+ const HttpStatusCode$1 = HttpStatusCode;
+
+ /**
+ * Create an instance of Axios
+ *
+ * @param {Object} defaultConfig The default config for the instance
+ *
+ * @returns {Axios} A new instance of Axios
+ */
+ function createInstance(defaultConfig) {
+ const context = new Axios$1(defaultConfig);
+ const instance = bind(Axios$1.prototype.request, context);
+
+ // Copy axios.prototype to instance
+ utils$1.extend(instance, Axios$1.prototype, context, { allOwnKeys: true });
+
+ // Copy context to instance
+ utils$1.extend(instance, context, null, { allOwnKeys: true });
+
+ // Factory for creating new instances
+ instance.create = function create(instanceConfig) {
+ return createInstance(mergeConfig(defaultConfig, instanceConfig));
+ };
+
+ return instance;
+ }
+
+ // Create the default instance to be exported
+ const axios = createInstance(defaults$1);
+
+ // Expose Axios class to allow class inheritance
+ axios.Axios = Axios$1;
+
+ // Expose Cancel & CancelToken
+ axios.CanceledError = CanceledError;
+ axios.CancelToken = CancelToken$1;
+ axios.isCancel = isCancel;
+ axios.VERSION = VERSION;
+ axios.toFormData = toFormData;
+
+ // Expose AxiosError class
+ axios.AxiosError = AxiosError;
+
+ // alias for CanceledError for backward compatibility
+ axios.Cancel = axios.CanceledError;
+
+ // Expose all/spread
+ axios.all = function all(promises) {
+ return Promise.all(promises);
+ };
+
+ axios.spread = spread;
+
+ // Expose isAxiosError
+ axios.isAxiosError = isAxiosError;
+
+ // Expose mergeConfig
+ axios.mergeConfig = mergeConfig;
+
+ axios.AxiosHeaders = AxiosHeaders$1;
+
+ axios.formToJSON = (thing) =>
+ formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing);
+
+ axios.getAdapter = adapters.getAdapter;
+
+ axios.HttpStatusCode = HttpStatusCode$1;
+
+ axios.default = axios;
+
+ // this module should only have a default export
+ const axios$1 = axios;
+
+ const script = {
+ data: () => ({
+ mode: "edit",
+ fileId: null,
+ filePath: null,
+ config: null,
+ docEditor: null,
+ }),
+ created() {
+ this.mode = this.$route.params.mode;
+ this.fileId = this.$route.params.fileId;
+ this.filePath = this.$route.params.filePath;
+ },
+ methods: {
+ ...mapActions(["showMessage"]),
+ messageDisplay(desc, status = "danger", title = "") {
+ this.showMessage({
+ title,
+ desc,
+ status,
+ autoClose: {
+ enabled: true,
+ },
+ });
+ },
+ onRequestClose() {
+ const params = {
+ driveAliasAndItem: null,
+ };
+ if (this.currentFolder) {
+ params.driveAliasAndItem =
+ "personal/" + this.currentFolder.ownerId + this.currentFolder.path;
+ }
+ this.$router.push({
+ name: "files-spaces-generic",
+ params,
+ });
+ },
+ getDocumentServerUrl() {
+ return axios$1({
+ method: "GET",
+ url:
+ this.configuration.server +
+ "ocs/v2.php/apps/onlyoffice/api/v1/settings/docserver",
+ headers: {
+ authorization: "Bearer " + this.getToken,
+ },
+ }).then((response) => {
+ if (!response.data.documentServerUrl) {
+ throw "ONLYOFFICE app is not configured. Please contact admin";
+ }
+ return response.data.documentServerUrl;
+ });
+ },
+ create() {
+ return new Promise((resolve, reject) => {
+ if (this.mode !== "create") {
+ resolve();
+ return;
+ }
+ axios$1({
+ method: "GET",
+ url:
+ this.configuration.server +
+ "ocs/v2.php/apps/onlyoffice/api/v1/empty/" +
+ this.fileId,
+ headers: {
+ authorization: "Bearer " + this.getToken,
+ },
+ }).then((response) => {
+ if (response.data.error) {
+ reject(response.data.error);
+ return;
+ }
+ resolve();
+ });
+ });
+ },
+ initConfig() {
+ return axios$1({
+ method: "GET",
+ url:
+ this.configuration.server +
+ "ocs/v2.php/apps/onlyoffice/api/v1/config/" +
+ this.fileId,
+ headers: {
+ authorization: "Bearer " + this.getToken,
+ },
+ }).then((response) => {
+ if (response.data.error) {
+ throw response.data.error;
+ }
+ this.config = response.data;
+ const events = [];
+ events["onRequestClose"] = this.onRequestClose;
+ this.config.editorConfig.customization.goback.requestClose = true;
+ this.config.events = events;
+ this.docEditor = new DocsAPI.DocEditor("iframeEditor", this.config);
+ });
+ },
+ },
+ computed: {
+ ...mapGetters(["getToken", "configuration", "apps"]),
+ ...mapGetters("Files", ["currentFolder"]),
+ },
+ mounted() {
+ this.create()
+ .then(() => {
+ return this.getDocumentServerUrl();
+ })
+ .then((documentServerUrl) => {
+ const iframeEditor = document.getElementById("iframeEditor");
+ const docApi = document.createElement("script");
+ docApi.setAttribute(
+ "src",
+ documentServerUrl + "web-apps/apps/api/documents/api.js"
+ );
+ iframeEditor.appendChild(docApi);
+ return this.initConfig();
+ })
+ .catch((error) => {
+ this.messageDisplay(error);
+ this.onRequestClose();
+ });
+ },
+ };
+
+ const _hoisted_1 = /*#__PURE__*/ vue.createElementVNode(
+ "div",
+ {
+ id: "app",
+ },
+ [
+ /*#__PURE__*/ vue.createElementVNode("div", {
+ id: "iframeEditor",
+ }),
+ ],
+ -1 /* HOISTED */
+ );
+ const _hoisted_2 = [_hoisted_1];
+ function render(_ctx, _cache, $props, $setup, $data, $options) {
+ return vue.openBlock(), vue.createElementBlock("main", null, _hoisted_2);
+ }
+
+ function styleInject(css, ref) {
+ if (ref === void 0) {
+ ref = {};
+ }
+ const insertAt = ref.insertAt;
+
+ if (!css || typeof document === "undefined") {
+ return;
+ }
+
+ const head = document.head || document.getElementsByTagName("head")[0];
+ const style = document.createElement("style");
+ style.type = "text/css";
+
+ if (insertAt === "top") {
+ if (head.firstChild) {
+ head.insertBefore(style, head.firstChild);
+ } else {
+ head.appendChild(style);
+ }
+ } else {
+ head.appendChild(style);
+ }
+
+ if (style.styleSheet) {
+ style.styleSheet.cssText = css;
+ } else {
+ style.appendChild(document.createTextNode(css));
+ }
+ }
+
+ const css_248z =
+ "\n#app {\r\n width: 100%;\n}\n#app > iframe {\r\n position: fixed;\r\n height: calc(100vh - 52px);\r\n right: 0;\n}\r\n";
+ styleInject(css_248z);
+
+ script.render = render;
+ script.__file = "src/editor.vue";
+
+ /**
+ *
+ * (c) Copyright Ascensio System SIA 2023
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+ const routes = [
+ {
+ path: "/editor/:fileId/:filePath/:mode",
+ components: {
+ fullscreen: script,
+ },
+ name: "editor",
+ meta: {
+ hideHeadbar: true,
+ },
+ },
+ ];
+ const appInfo = {
+ name: "ONLYOFFICE",
+ id: "onlyoffice",
+ icon: "x-office-document",
+ isFileEditor: true,
+ extensions: [
+ {
+ extension: "docx",
+ routeName: "onlyoffice-editor",
+ newTab: true,
+ newFileMenu: {
+ menuTitle($gettext) {
+ return $gettext("Document");
+ },
+ icon: "x-office-document",
+ },
+ routes: [
+ "files-spaces-generic",
+ "files-common-favorites",
+ "files-shares-with-others",
+ "files-shares-with-me",
+ "files-trash-generic",
+ "files-public-link",
+ ],
+ },
+ {
+ extension: "xlsx",
+ routeName: "onlyoffice-editor",
+ newTab: true,
+ newFileMenu: {
+ menuTitle($gettext) {
+ return $gettext("Spreadsheet");
+ },
+ icon: "x-office-spreadsheet",
+ },
+ routes: [
+ "files-spaces-generic",
+ "files-common-favorites",
+ "files-shares-with-others",
+ "files-shares-with-me",
+ "files-trash-generic",
+ "files-public-link",
+ ],
+ },
+ {
+ extension: "pptx",
+ routeName: "onlyoffice-editor",
+ newTab: true,
+ newFileMenu: {
+ menuTitle($gettext) {
+ return $gettext("Presentation");
+ },
+ icon: "x-office-presentation",
+ },
+ routes: [
+ "files-spaces-generic",
+ "files-common-favorites",
+ "files-shares-with-others",
+ "files-shares-with-me",
+ "files-trash-generic",
+ "files-public-link",
+ ],
+ },
+ ],
+ };
+ const app = {
+ appInfo,
+ routes,
+ };
+
+ return app;
+});
diff --git a/l10n/uk.js b/l10n/uk.js
index 471cb565..64e0d6d2 100644
--- a/l10n/uk.js
+++ b/l10n/uk.js
@@ -13,11 +13,11 @@ OC.L10N.register(
"Can't create file": "Не вдалося створити файл",
"Format is not supported": "Формат не підтримується",
"Conversion is not required": "Конвертування не потрібне",
- "Failed to download converted file": "Не вдалося звантажити конвертований файл",
+ "Failed to download converted file": "Не вдалося отримати сконвертований файл",
"ONLYOFFICE app is not configured. Please contact admin": "Застосунок ONLYOFFICE не налаштовано. Будь ласка, сконтактуйте з адміністратором",
"FileId is empty": "Ідентифікатор файлу не визначено",
"You do not have enough permissions to view the file": "Недостатньо прав для перегляду файлу",
- "Error occurred in the document service": "Помилка у службі обробки документів",
+ "Error occurred in the document service": "Помилка у службі документів",
"Not supported version": "Версія не підтримується",
"ONLYOFFICE cannot be reached. Please contact admin": "Неможливо встановити з'єднання з ONLYOFFICE. Будь ласка, сконтактуйте з адміністратором.",
"Loading, please wait.": "Триває завантаження. Будь ласка, зачекайте.",
@@ -32,7 +32,7 @@ OC.L10N.register(
"Server can't read xml": "Серверу не вдалося розпізнати файл xml",
"Bad Response. Errors: ": "Недійсна відповідь. Помилки:",
"Documentation": "Документація",
- "ONLYOFFICE Docs Location specifies the address of the server with the document services installed. Please change the '' for the server address in the below line.": "Розташування ONLYOFFICE Docs визначає адресу сервера зі встановленими службами обробки документів. Будь ласка, замініть '' на дійсну адресу сервера.",
+ "ONLYOFFICE Docs Location specifies the address of the server with the document services installed. Please change the '' for the server address in the below line.": "Розташування ONLYOFFICE Docs визначає адресу сервера зі встановленими службами документів. Будь ласка, замініть '' на дійсну адресу сервера.",
"ONLYOFFICE Docs address": "Адреса ONLYOFFICE Docs",
"Advanced server settings": "Додаткові налаштування сервера",
"ONLYOFFICE Docs address for internal requests from the server": "Адреса ONLYOFFICE Docs для внутрішніх запитів сервера",
@@ -43,7 +43,7 @@ OC.L10N.register(
"Open the file for editing (due to format restrictions, the data might be lost when saving to the formats from the list below)": "Відкрити файл для редагування (через обмеження формату дані може бути втрачено при збереженні у нижче наведених форматах файлів)",
"View details": "Докладно",
"Save": "Зберегти",
- "Mixed Active Content is not allowed. HTTPS address for ONLYOFFICE Docs is required.": "Зміщаний активний вміст заборонено. Для використання ONLYOFFICE Docs потрібно використовувати безпечне HTTPS-з'єднання.",
+ "Mixed Active Content is not allowed. HTTPS address for ONLYOFFICE Docs is required.": "Змішаний активний вміст заборонено. Для користування ONLYOFFICE Docs потрібно використовувати безпечне з'єднання HTTPS.",
"Allow the following groups to access the editors": "Надати доступ до редагування лише таким групам",
"review": "рецензії",
"form filling": "заповнення форм",
@@ -57,14 +57,14 @@ OC.L10N.register(
"Display Chat menu button": "Показувати кнопку виклику чату",
"Display the header more compact": "Зробити заголовок компактнішим",
"Display Feedback & Support menu button": "Показувати кнопку зворотнього зв'язку та підтримки",
- "Display Help menu button": "Показувати кнопку виклику довідки",
+ "Display Help menu button": "Показувати пункт меню Довідка",
"Display monochrome toolbar header": "Зробити заголовок панелі інструментів однотонним",
"Save as": "Зберегти як",
"File saved": "Файл збережено",
"Insert image": "Вставити зображення",
"Select recipients": "Виберіть отримувачів",
"Connect to demo ONLYOFFICE Docs server": "З'єднатися з демонстраційним сервером ONLYOFFICE Docs",
- "This is a public test server, please do not use it for private sensitive data. The server will be available during a 30-day period.": "Це ПУБЛІЧНИЙ тестовий сервер. Будь ласка, не використовуйте його для обробки ваших приватних даних. Сервер буде вам доступний протягом тестового періоду у 30 днів.",
+ "This is a public test server, please do not use it for private sensitive data. The server will be available during a 30-day period.": "Це ПУБЛІЧНИЙ тестовий сервер. Будь ласка, не використовуйте його для обробки ваших приватних даних. Сервер буде доступний протягом тестового періоду у 30 днів.",
"The 30-day test period is over, you can no longer connect to demo ONLYOFFICE Docs server.": "Тестовий 30-денний період вичерпано. Ви більше не маєте змоги з'єднуватися з демонстраційним сервером ONLYOFFICE Docs",
"You are using public demo ONLYOFFICE Docs server. Please do not store private sensitive data.": "Ви використовуєте ПУБЛІЧНИЙ демонстраційний сервер ONLYOFFICE Docs. Будь ласка, не зберігайте ваші приватні дані.",
"Select file to compare": "Вибрати файл для порівняння",
@@ -78,7 +78,7 @@ OC.L10N.register(
"Use ONLYOFFICE to generate a document preview (it will take up disk space)": "ONLYOFFICE створюватиме зображення попереднього перегляду документу (потрібне місце на диску)",
"Keep metadata for each version once the document is edited (it will take up disk space)": "Зберігати метадані для кожної версії після завершення редагування (потрібне місце на диску)",
"Clear": "Очистити",
- "All history successfully deleted": "Історія успішно вилучено",
+ "All history successfully deleted": "Історію успішно очищено",
"Create": "Створити",
"Select template": "Вибрати шаблон",
"Invalid file provided": "Вибрано недійсний файл",
@@ -115,7 +115,7 @@ OC.L10N.register(
"Owner only": "Тільки власникові",
"Authorization header (leave blank to use default header)": "Заголовок авторизації (залиште порожнім для використання типового заголовку)",
"ONLYOFFICE server is not available": "Сервер ONLYOFFICE не доступний",
- "Please check the settings to resolve the problem.": "Будь ласка, перевірте налаштування для розв'язання проблеми.",
+ "Please check the settings to resolve the problem.": "Будь ласка, перевірте налаштування для вирішення проблеми.",
"View settings": "Переглянути налаштування",
"ONLYOFFICE Docs Cloud": "ONLYOFFICE Docs Cloud",
"Easily launch the editors in the cloud without downloading and installation": "Легко використовуйте редактори у хмарі без звантажень та налаштувань",
@@ -124,6 +124,6 @@ OC.L10N.register(
"Select data source": "Вибрати джерело даних",
"The data source must not be the current document": "Джерело даних не має бути поточним документом",
"Enable background connection check to the editors": "Увімкніть фонову перевірку з’єднання з редакторами",
- "The domain in the file url does not match the domain of the Document server": "Домен в URL-адресі файлу не збігається з доменом сервера документів"
+ "The domain in the file url does not match the domain of the Document server": "Домен у посиланні на файл не збігається з доменом сервера документів"
},
"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");
diff --git a/l10n/uk.json b/l10n/uk.json
index a4fce410..f9ff71c7 100644
--- a/l10n/uk.json
+++ b/l10n/uk.json
@@ -11,11 +11,11 @@
"Can't create file": "Не вдалося створити файл",
"Format is not supported": "Формат не підтримується",
"Conversion is not required": "Конвертування не потрібне",
- "Failed to download converted file": "Не вдалося звантажити конвертований файл",
+ "Failed to download converted file": "Не вдалося отримати сконвертований файл",
"ONLYOFFICE app is not configured. Please contact admin": "Застосунок ONLYOFFICE не налаштовано. Будь ласка, сконтактуйте з адміністратором.",
"FileId is empty": "Ідентифікатор файлу не визначено",
"You do not have enough permissions to view the file": "Недостатньо прав для перегляду файлу",
- "Error occurred in the document service": "Помилка у службі обробки документів",
+ "Error occurred in the document service": "Помилка у службі документів",
"Not supported version": "Версія не підтримується",
"ONLYOFFICE cannot be reached. Please contact admin": "Неможливо встановити з'єднання з ONLYOFFICE. Будь ласка, сконтактуйте з адміністратором.",
"Loading, please wait.": "Триває завантаження. Будь ласка, зачекайте.",
@@ -30,7 +30,7 @@
"Server can't read xml": "Серверу не вдалося розпізнати файл xml",
"Bad Response. Errors: ": "Недійсна відповідь. Помилки:",
"Documentation": "Документація",
- "ONLYOFFICE Docs Location specifies the address of the server with the document services installed. Please change the '' for the server address in the below line.": "Розташування ONLYOFFICE Docs визначає адресу сервера зі встановленими службами обробки документів. Будь ласка, замініть '' на дійсну адресу сервера.",
+ "ONLYOFFICE Docs Location specifies the address of the server with the document services installed. Please change the '' for the server address in the below line.": "Розташування ONLYOFFICE Docs визначає адресу сервера зі встановленими службами документів. Будь ласка, замініть '' на дійсну адресу сервера.",
"ONLYOFFICE Docs address": "Адреса ONLYOFFICE Docs",
"Advanced server settings": "Додаткові налаштування сервера",
"ONLYOFFICE Docs address for internal requests from the server": "Адреса ONLYOFFICE Docs для внутрішніх запитів сервера",
@@ -41,7 +41,7 @@
"Open the file for editing (due to format restrictions, the data might be lost when saving to the formats from the list below)": "Відкрити файл для редагування (через обмеження формату дані може бути втрачено при збереженні у нижче наведених форматах файлів)",
"View details": "Докладно",
"Save": "Зберегти",
- "Mixed Active Content is not allowed. HTTPS address for ONLYOFFICE Docs is required.": "Зміщаний активний вміст заборонено. Для використання ONLYOFFICE Docs потрібно використовувати безпечне HTTPS-з'єднання.",
+ "Mixed Active Content is not allowed. HTTPS address for ONLYOFFICE Docs is required.": "Змішаний активний вміст заборонено. Для користування ONLYOFFICE Docs потрібно використовувати безпечне з'єднання HTTPS.",
"Allow the following groups to access the editors": "Надати доступ до редагування лише таким групам",
"review": "рецензії",
"form filling": "заповнення форм",
@@ -55,14 +55,14 @@
"Display Chat menu button": "Показувати кнопку виклику чату",
"Display the header more compact": "Зробити заголовок компактнішим",
"Display Feedback & Support menu button": "Показувати кнопку зворотнього зв'язку та підтримки",
- "Display Help menu button": "Показувати кнопку виклику довідки",
+ "Display Help menu button": "Показувати пункт меню Довідка",
"Display monochrome toolbar header": "Зробити заголовок панелі інструментів однотонни",
"Save as": "Зберегти як",
"File saved": "Файл збережено",
"Insert image": "Вставити зображення",
"Select recipients": "Виберіть отримувачів",
"Connect to demo ONLYOFFICE Docs server": "З'єднатися з демонстраційним сервером ONLYOFFICE Docs",
- "This is a public test server, please do not use it for private sensitive data. The server will be available during a 30-day period.": "Це ПУБЛІЧНИЙ тестовий сервер. Будь ласка, не використовуйте його для обробки ваших приватних даних. Сервер буде вам доступний протягом тестового періоду у 30 днів.",
+ "This is a public test server, please do not use it for private sensitive data. The server will be available during a 30-day period.": "Це ПУБЛІЧНИЙ тестовий сервер. Будь ласка, не використовуйте його для обробки ваших приватних даних. Сервер буде доступний протягом тестового періоду у 30 днів.",
"The 30-day test period is over, you can no longer connect to demo ONLYOFFICE Docs server.": "Тестовий 30-денний період вичерпано. Ви більше не маєте змоги з'єднуватися з демонстраційним сервером ONLYOFFICE Docs",
"You are using public demo ONLYOFFICE Docs server. Please do not store private sensitive data.": "Ви використовуєте ПУБЛІЧНИЙ демонстраційний сервер ONLYOFFICE Docs. Будь ласка, не зберігайте ваші приватні дані.",
"Select file to compare": "Вибрати файл для порівняння",
@@ -76,7 +76,7 @@
"Use ONLYOFFICE to generate a document preview (it will take up disk space)": "ONLYOFFICE створюватиме зображення попереднього перегляду документу (потрібне місце на диску)",
"Keep metadata for each version once the document is edited (it will take up disk space)": "Зберігати метадані для кожної версії після завершення редагування (потрібне місце на диску)",
"Clear": "Очистити",
- "All history successfully deleted": "Історія успішно вилучено",
+ "All history successfully deleted": "Історію успішно очищено",
"Create": "Створити",
"Select template": "Вибрати шаблон",
"Invalid file provided": "Вибрано недійсний файл",
@@ -113,7 +113,7 @@
"Owner only": "Тільки власникові",
"Authorization header (leave blank to use default header)": "Заголовок авторизації (залиште порожнім для використання типового заголовку)",
"ONLYOFFICE server is not available": "Сервер ONLYOFFICE не доступний",
- "Please check the settings to resolve the problem.": "Будь ласка, перевірте налаштування для розв'язання проблеми.",
+ "Please check the settings to resolve the problem.": "Будь ласка, перевірте налаштування для вирішення проблеми.",
"View settings": "Переглянути налаштування",
"ONLYOFFICE Docs Cloud": "ONLYOFFICE Docs Cloud",
"Easily launch the editors in the cloud without downloading and installation": "Легко використовуйте редактори у хмарі без звантажень та налаштувань",
@@ -122,6 +122,6 @@
"Select data source": "Избери източник на данни",
"The data source must not be the current document": "Източникът на данни не трябва да е текущият документ",
"Enable background connection check to the editors": "Активиране на проверката на фоновата връзка към редакторите",
- "The domain in the file url does not match the domain of the Document server": "Домейнът в URL адреса на файла не съвпада с домейна на сървъра за документи"
+ "The domain in the file url does not match the domain of the Document server": "Домен у посиланні на файл не збігається з доменом сервера документів"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
}
\ No newline at end of file
diff --git a/lib/appconfig.php b/lib/appconfig.php
index 76f2e5a0..1a32c74f 100644
--- a/lib/appconfig.php
+++ b/lib/appconfig.php
@@ -1422,7 +1422,7 @@ public function getMimeType($ext) {
* DEMO DATA
*/
private $DEMO_PARAM = [
- "ADDR" => "https://onlinedocs.onlyoffice.com/",
+ "ADDR" => "https://onlinedocs.docs.onlyoffice.com/",
"HEADER" => "AuthorizationJWT",
"SECRET" => "sn2puSUF7muF5Jas",
"TRIAL" => 30
diff --git a/lib/templatemanager.php b/lib/templatemanager.php
index a2d99dcc..c5ecdc69 100644
--- a/lib/templatemanager.php
+++ b/lib/templatemanager.php
@@ -174,7 +174,7 @@ public static function getEmptyTemplate($fileName) {
*/
public static function getEmptyTemplatePath($lang, $ext) {
if (!\array_key_exists($lang, self::$localPath)) {
- $lang = "en";
+ $lang = "default";
}
return \dirname(__DIR__) . DIRECTORY_SEPARATOR . "assets" . DIRECTORY_SEPARATOR . "document-templates" . DIRECTORY_SEPARATOR . self::$localPath[$lang] . DIRECTORY_SEPARATOR . "new" . $ext;
@@ -192,17 +192,21 @@ public static function getEmptyTemplatePath($lang, $ext) {
"cs" => "cs-CZ",
"de" => "de-DE",
"de_DE" => "de-DE",
+ "default" => "default",
"el" => "el-GR",
"en" => "en-US",
"en_GB" => "en-GB",
"es" => "es-ES",
"eu" => "eu-ES",
+ "fi_FI" => "fi-FI",
"fr" => "fr-FR",
"gl" => "gl-ES",
+ "he" => "he-IL",
"it" => "it-IT",
"ja" => "ja-JP",
"ko" => "ko-KR",
"lv" => "lv-LV",
+ "nb_NO" => "nb-NO",
"nl" => "nl-NL",
"pl" => "pl-PL",
"pt_BR" => "pt-BR",
@@ -210,6 +214,7 @@ public static function getEmptyTemplatePath($lang, $ext) {
"ru" => "ru-RU",
"si_LK" => "si-LK",
"sk_SK" => "sk-SK",
+ "sl" => "sl-SI",
"sr" => "sr-Latn-RS",
"sv" => "sv-SE",
"tr" => "tr-TR",
diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json
new file mode 100644
index 00000000..7dd0f5c5
--- /dev/null
+++ b/npm-shrinkwrap.json
@@ -0,0 +1,9501 @@
+{
+ "name": "onlyoffice",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "onlyoffice",
+ "devDependencies": {
+ "@ownclouders/eslint-config": "^0.0.1",
+ "@ownclouders/prettier-config": "^0.0.1",
+ "eslint": "^8.57.0",
+ "jest": "^29.7.0",
+ "stylelint": "^14.14.0",
+ "stylelint-config-sass-guidelines": "^9.0.0",
+ "stylelint-config-standard": "^26.0.0"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+ "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.24.7",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.24.9",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz",
+ "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.24.9",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz",
+ "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==",
+ "dev": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.9",
+ "@babel/helper-compilation-targets": "^7.24.8",
+ "@babel/helper-module-transforms": "^7.24.9",
+ "@babel/helpers": "^7.24.8",
+ "@babel/parser": "^7.24.8",
+ "@babel/template": "^7.24.7",
+ "@babel/traverse": "^7.24.8",
+ "@babel/types": "^7.24.9",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/eslint-parser": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.8.tgz",
+ "integrity": "sha512-nYAikI4XTGokU2QX7Jx+v4rxZKhKivaQaREZjuW3mrJrbdWJ5yUfohnoUULge+zEEaKjPYNxhoRgUKktjXtbwA==",
+ "dev": true,
+ "dependencies": {
+ "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
+ "eslint-visitor-keys": "^2.1.0",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || >=14.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.11.0",
+ "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.24.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.9.tgz",
+ "integrity": "sha512-G8v3jRg+z8IwY1jHFxvCNhOPYPterE4XljNgdGTYfSTtzzwjIswIzIaSPSLs3R7yFuqnqNeay5rjICfqVr+/6A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.24.9",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz",
+ "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.24.8",
+ "@babel/helper-validator-option": "^7.24.8",
+ "browserslist": "^4.23.1",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
+ "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
+ "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
+ "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+ "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.24.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz",
+ "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-simple-access": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/helper-validator-identifier": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
+ "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+ "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
+ "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+ "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
+ "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz",
+ "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.24.7",
+ "@babel/types": "^7.24.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+ "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz",
+ "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-bigint": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+ "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
+ "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz",
+ "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
+ "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz",
+ "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.8",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.8",
+ "@babel/types": "^7.24.8",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.24.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz",
+ "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.24.8",
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true
+ },
+ "node_modules/@csstools/selector-specificity": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz",
+ "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==",
+ "dev": true,
+ "engines": {
+ "node": "^14 || ^16 || >=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ },
+ "peerDependencies": {
+ "postcss-selector-parser": "^6.0.10"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+ "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "deprecated": "Use @eslint/config-array instead",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
+ "dev": true
+ },
+ "node_modules/@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/console": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/console/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@jest/console/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jest/console/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@jest/console/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@jest/console/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/console/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/core": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
+ "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/reporters": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-changed-files": "^29.7.0",
+ "jest-config": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-resolve-dependencies": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/core/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@jest/core/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jest/core/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@jest/core/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@jest/core/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/core/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/environment": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/expect": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
+ "dev": true,
+ "dependencies": {
+ "expect": "^29.7.0",
+ "jest-snapshot": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/expect-utils": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
+ "dev": true,
+ "dependencies": {
+ "jest-get-type": "^29.6.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/fake-timers": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@types/node": "*",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/globals": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
+ "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "jest-mock": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/reporters": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
+ "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
+ "dev": true,
+ "dependencies": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^6.0.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "slash": "^3.0.0",
+ "string-length": "^4.0.1",
+ "strip-ansi": "^6.0.0",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/reporters/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@jest/reporters/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jest/reporters/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@jest/reporters/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@jest/reporters/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/reporters/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/schemas": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.27.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/source-map": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
+ "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.9"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/test-result": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
+ "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/test-sequencer": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
+ "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/test-result": "^29.7.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/transform": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "babel-plugin-istanbul": "^6.1.1",
+ "chalk": "^4.0.0",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pirates": "^4.0.4",
+ "slash": "^3.0.0",
+ "write-file-atomic": "^4.0.2"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@jest/transform/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/types": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/types/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@jest/types/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jest/types/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@jest/types/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@jest/types/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/types/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
+ "version": "5.1.1-v1",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
+ "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-scope": "5.1.1"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@ownclouders/eslint-config": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@ownclouders/eslint-config/-/eslint-config-0.0.1.tgz",
+ "integrity": "sha512-cFal5T7jApfQjvkF0tvmKGdeiPLkVl/3fHIrIAZ9WG4rBPylRFSE6wRzPQBLO0vKA9CEZSFsA4yXfCGdly0+lA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/eslint-parser": "^7.19.1",
+ "@typescript-eslint/eslint-plugin": "^5.39.0",
+ "@typescript-eslint/parser": "^5.39.0",
+ "eslint-config-prettier": "^8.5.0",
+ "eslint-config-standard": "^17.0.0",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-jest": "^27.1.1",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-prettier-vue": "^4.2.0",
+ "eslint-plugin-promise": "^6.0.1",
+ "eslint-plugin-unused-imports": "^2.0.0",
+ "eslint-plugin-vue": "^9.6.0",
+ "eslint-plugin-vuejs-accessibility": "^1.2.0",
+ "typescript": "^4.8.4"
+ },
+ "peerDependencies": {
+ "eslint": "^8.25.0"
+ }
+ },
+ "node_modules/@ownclouders/prettier-config": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@ownclouders/prettier-config/-/prettier-config-0.0.1.tgz",
+ "integrity": "sha512-vTQ11OCFgUxPJxAAIcGk05KByZL6F2fmdoUCKVuyMspsGvap3H0KjCIHY5c+Gz390tBfZf6vsnuoJkhGOOBgQw==",
+ "dev": true,
+ "dependencies": {
+ "prettier": "^2.7.1"
+ }
+ },
+ "node_modules/@sinclair/typebox": {
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+ "dev": true
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^3.0.0"
+ }
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.8",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+ "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
+ "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "node_modules/@types/graceful-fs": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
+ "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
+ "dev": true
+ },
+ "node_modules/@types/istanbul-lib-report": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+ "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
+ "dev": true,
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "node_modules/@types/istanbul-reports": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true
+ },
+ "node_modules/@types/minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.14.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
+ "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
+ "dev": true
+ },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
+ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
+ "dev": true
+ },
+ "node_modules/@types/semver": {
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
+ "dev": true
+ },
+ "node_modules/@types/stack-utils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
+ "dev": true
+ },
+ "node_modules/@types/yargs": {
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
+ "dev": true,
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@types/yargs-parser": {
+ "version": "21.0.3",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
+ "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/type-utils": "5.62.0",
+ "@typescript-eslint/utils": "5.62.0",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
+ "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
+ "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz",
+ "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "@typescript-eslint/utils": "5.62.0",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
+ "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
+ "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
+ "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils/node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
+ "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.31.tgz",
+ "integrity": "sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.24.7",
+ "@vue/shared": "3.4.31",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.31.tgz",
+ "integrity": "sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-core": "3.4.31",
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.31.tgz",
+ "integrity": "sha512-einJxqEw8IIJxzmnxmJBuK2usI+lJonl53foq+9etB2HAzlPjAS/wa7r0uUpXw5ByX3/0uswVSrjNb17vJm1kQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.24.7",
+ "@vue/compiler-core": "3.4.31",
+ "@vue/compiler-dom": "3.4.31",
+ "@vue/compiler-ssr": "3.4.31",
+ "@vue/shared": "3.4.31",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.10",
+ "postcss": "^8.4.38",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.31.tgz",
+ "integrity": "sha512-RtefmITAje3fJ8FSg1gwgDhdKhZVntIVbwupdyZDSifZTRMiWxWehAOTCc8/KZDnBOcYQ4/9VWxsTbd3wT0hAA==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.4.31",
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.31.tgz",
+ "integrity": "sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==",
+ "dev": true
+ },
+ "node_modules/acorn": {
+ "version": "8.12.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+ "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "dev": true,
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+ "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
+ "is-shared-array-buffer": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/babel-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
+ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/transform": "^29.7.0",
+ "@types/babel__core": "^7.1.14",
+ "babel-plugin-istanbul": "^6.1.1",
+ "babel-preset-jest": "^29.6.3",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.8.0"
+ }
+ },
+ "node_modules/babel-jest/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/babel-jest/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/babel-jest/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/babel-jest/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/babel-jest/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-jest/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-istanbul": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^5.0.4",
+ "test-exclude": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-jest-hoist": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
+ "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.1.14",
+ "@types/babel__traverse": "^7.0.6"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/babel-preset-current-node-syntax": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
+ "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.8.3",
+ "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-top-level-await": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/babel-preset-jest": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
+ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
+ "dev": true,
+ "dependencies": {
+ "babel-plugin-jest-hoist": "^29.6.3",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.23.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
+ "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001640",
+ "electron-to-chromium": "^1.4.820",
+ "node-releases": "^2.0.14",
+ "update-browserslist-db": "^1.1.0"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "dependencies": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "node_modules/builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/builtins": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz",
+ "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "semver": "^7.0.0"
+ }
+ },
+ "node_modules/builtins/node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-keys": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001642",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz",
+ "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/char-regex": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cjs-module-lexer": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz",
+ "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==",
+ "dev": true
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
+ "dev": true
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/colord": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
+ "node_modules/cosmiconfig": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "dev": true,
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/create-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "prompts": "^2.0.1"
+ },
+ "bin": {
+ "create-jest": "bin/create-jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/create-jest/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/create-jest/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/create-jest/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/create-jest/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/create-jest/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/create-jest/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-functions-list": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz",
+ "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12 || >=16"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
+ "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decamelize-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+ "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
+ "dev": true,
+ "dependencies": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/decamelize-keys/node_modules/map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dedent": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz",
+ "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==",
+ "dev": true,
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/diff-sequences": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.828",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.828.tgz",
+ "integrity": "sha512-QOIJiWpQJDHAVO4P58pwb133Cwee0nbvy/MV1CwzZVGpkH1RX33N3vsaWRCpR6bF63AAq366neZrRTu7Qlsbbw==",
+ "dev": true
+ },
+ "node_modules/emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+ "dev": true
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.23.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+ "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.6",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.3",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.13",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.13.1",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.6",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.15"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+ "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.57.0",
+ "@humanwhocodes/config-array": "^0.11.14",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-compat-utils": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
+ "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "eslint": ">=6.0.0"
+ }
+ },
+ "node_modules/eslint-compat-utils/node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz",
+ "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-config-standard": {
+ "version": "17.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz",
+ "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^8.0.1",
+ "eslint-plugin-import": "^2.25.2",
+ "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
+ "eslint-plugin-promise": "^6.0.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
+ "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-es": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
+ "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
+ "dev": true,
+ "dependencies": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=4.19.1"
+ }
+ },
+ "node_modules/eslint-plugin-es-x": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
+ "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/ota-meshi",
+ "https://opencollective.com/eslint"
+ ],
+ "peer": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.1.2",
+ "@eslint-community/regexpp": "^4.11.0",
+ "eslint-compat-utils": "^0.5.1"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=8"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
+ "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.7",
+ "array.prototype.findlastindex": "^1.2.3",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.8.0",
+ "hasown": "^2.0.0",
+ "is-core-module": "^2.13.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.7",
+ "object.groupby": "^1.0.1",
+ "object.values": "^1.1.7",
+ "semver": "^6.3.1",
+ "tsconfig-paths": "^3.15.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-jest": {
+ "version": "27.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz",
+ "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/utils": "^5.10.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0",
+ "eslint": "^7.0.0 || ^8.0.0",
+ "jest": "*"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/eslint-plugin": {
+ "optional": true
+ },
+ "jest": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-n": {
+ "version": "16.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
+ "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "builtins": "^5.0.1",
+ "eslint-plugin-es-x": "^7.5.0",
+ "get-tsconfig": "^4.7.0",
+ "globals": "^13.24.0",
+ "ignore": "^5.2.4",
+ "is-builtin-module": "^3.2.1",
+ "is-core-module": "^2.12.1",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.2",
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-n/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-plugin-n/node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-plugin-node": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
+ "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
+ "dev": true,
+ "dependencies": {
+ "eslint-plugin-es": "^3.0.0",
+ "eslint-utils": "^2.0.0",
+ "ignore": "^5.1.1",
+ "minimatch": "^3.0.4",
+ "resolve": "^1.10.1",
+ "semver": "^6.1.0"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=5.16.0"
+ }
+ },
+ "node_modules/eslint-plugin-prettier-vue": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier-vue/-/eslint-plugin-prettier-vue-4.2.0.tgz",
+ "integrity": "sha512-DA2oNRx+pZ6RM/EIHIPME4FQZifnkEROa55OWtTTUFGHpj53tcHomuxVP/kS/2MM+ul46GEK+jymK69STWDWoA==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-sfc": "^3.2.37",
+ "chalk": "^4.0.0",
+ "prettier": "^2.7.1",
+ "prettier-linter-helpers": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/eslint-plugin-prettier-vue/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/eslint-plugin-prettier-vue/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint-plugin-prettier-vue/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-prettier-vue/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/eslint-plugin-prettier-vue/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint-plugin-prettier-vue/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint-plugin-promise": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.4.0.tgz",
+ "integrity": "sha512-/KWWRaD3fGkVCZsdR0RU53PSthFmoHVhZl+y9+6DqeDLSikLdlUVpVEAmI6iCRR5QyOjBYBqHZV/bdv4DJ4Gtw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-unused-imports": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz",
+ "integrity": "sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==",
+ "dev": true,
+ "dependencies": {
+ "eslint-rule-composer": "^0.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^5.0.0",
+ "eslint": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/eslint-plugin": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-vue": {
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz",
+ "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "globals": "^13.24.0",
+ "natural-compare": "^1.4.0",
+ "nth-check": "^2.1.1",
+ "postcss-selector-parser": "^6.0.15",
+ "semver": "^7.6.0",
+ "vue-eslint-parser": "^9.4.3",
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-vue/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-plugin-vue/node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-plugin-vuejs-accessibility": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vuejs-accessibility/-/eslint-plugin-vuejs-accessibility-1.2.0.tgz",
+ "integrity": "sha512-wF7kT22lS2VOmIpDeI65bnFFKFgESEEpI+CWKr43mdfDRywA4sCk7cKhtZsvfbPOtKO0GDlnpFxZbOIGsFn7IQ==",
+ "dev": true,
+ "dependencies": {
+ "aria-query": "^5.0.0",
+ "emoji-regex": "^10.0.0",
+ "vue-eslint-parser": "^9.0.1"
+ },
+ "peerDependencies": {
+ "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/eslint-rule-composer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz",
+ "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esquery/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/expect": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/expect-utils": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-diff": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
+ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fast-uri": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
+ "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+ "dev": true
+ },
+ "node_modules/fastest-levenshtein": {
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+ "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.9.1"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fb-watchman": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+ "dev": true,
+ "dependencies": {
+ "bser": "2.1.1"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
+ "dev": true
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.7.5",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz",
+ "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "dev": true,
+ "dependencies": {
+ "global-prefix": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "dev": true,
+ "dependencies": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-prefix/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globjoin": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
+ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
+ "dev": true
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/hard-rejection": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/hosted-git-info/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/hosted-git-info/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "node_modules/html-tags": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
+ "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+ "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-lazy": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
+ "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
+ "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+ "dev": true,
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.0",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-builtin-module": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+ "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "builtin-modules": "^3.3.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz",
+ "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+ "dev": true,
+ "dependencies": {
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+ "dev": true,
+ "dependencies": {
+ "which-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
+ "dev": true,
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^4.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
+ "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
+ "dev": true,
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/core": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "import-local": "^3.0.2",
+ "jest-cli": "^29.7.0"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-changed-files": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^5.0.0",
+ "jest-util": "^29.7.0",
+ "p-limit": "^3.1.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-circus": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "co": "^4.6.0",
+ "dedent": "^1.0.0",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^29.7.0",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "^29.7.0",
+ "pure-rand": "^6.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-circus/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-circus/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-circus/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-circus/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-cli": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/core": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "create-jest": "^29.7.0",
+ "exit": "^0.1.2",
+ "import-local": "^3.0.2",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "yargs": "^17.3.1"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-cli/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-cli/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-cli/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-cli/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-cli/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-cli/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-config": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-jest": "^29.7.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-config/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-config/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-config/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-config/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-config/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-config/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-diff": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "diff-sequences": "^29.6.3",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-diff/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-diff/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-diff/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-diff/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-diff/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-diff/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-docblock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
+ "dev": true,
+ "dependencies": {
+ "detect-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-each": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-each/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-each/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-each/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-each/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-each/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-each/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-environment-node": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
+ "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-get-type": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-haste-map": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/node": "*",
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "walker": "^1.0.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ }
+ },
+ "node_modules/jest-leak-detector": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
+ "dev": true,
+ "dependencies": {
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-matcher-utils/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-message-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.12.13",
+ "@jest/types": "^29.6.3",
+ "@types/stack-utils": "^2.0.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-message-util/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-mock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "jest-resolve": "*"
+ },
+ "peerDependenciesMeta": {
+ "jest-resolve": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-regex-util": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-pnp-resolver": "^1.2.2",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "resolve": "^1.20.0",
+ "resolve.exports": "^2.0.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve-dependencies": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
+ "dev": true,
+ "dependencies": {
+ "jest-regex-util": "^29.6.3",
+ "jest-snapshot": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-resolve/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-runner": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "graceful-fs": "^4.2.9",
+ "jest-docblock": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-leak-detector": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-resolve": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-runner/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-runner/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-runner/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-runner/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-runtime": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/globals": "^29.7.0",
+ "@jest/source-map": "^29.6.3",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "cjs-module-lexer": "^1.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-runtime/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-snapshot": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
+ "@babel/plugin-syntax-typescript": "^7.7.2",
+ "@babel/types": "^7.3.3",
+ "@jest/expect-utils": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-preset-current-node-syntax": "^1.0.0",
+ "chalk": "^4.0.0",
+ "expect": "^29.7.0",
+ "graceful-fs": "^4.2.9",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^29.7.0",
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-snapshot/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-util/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-util/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-util/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-util/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-util/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-util/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-validate": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "camelcase": "^6.2.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.6.3",
+ "leven": "^3.1.0",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-validate/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-validate/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-validate/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-validate/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-validate/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-watcher": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
+ "dev": true,
+ "dependencies": {
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "jest-util": "^29.7.0",
+ "string-length": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jest-watcher/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "jest-util": "^29.7.0",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/known-css-properties": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz",
+ "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==",
+ "dev": true
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/lodash.truncate": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.10",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
+ "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/makeerror": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+ "dev": true,
+ "dependencies": {
+ "tmpl": "1.0.5"
+ }
+ },
+ "node_modules/map-obj": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mathml-tag-names": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
+ "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/meow": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+ "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize": "^1.2.0",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/meow/node_modules/type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/meow/node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minimist-options": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+ "dev": true,
+ "dependencies": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
+ "node_modules/node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
+ "dev": true
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
+ "dev": true
+ },
+ "node_modules/normalize-package-data": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/normalize-package-data/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+ "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.39",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
+ "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.1",
+ "source-map-js": "^1.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-media-query-parser": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
+ "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
+ "dev": true
+ },
+ "node_modules/postcss-resolve-nested-selector": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
+ "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
+ "dev": true
+ },
+ "node_modules/postcss-safe-parser": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
+ "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3"
+ }
+ },
+ "node_modules/postcss-scss": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
+ "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss-scss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.29"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
+ "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-sorting": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz",
+ "integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==",
+ "dev": true,
+ "peerDependencies": {
+ "postcss": "^8.3.9"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pure-rand": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
+ "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ]
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/quick-lru": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true
+ },
+ "node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "node_modules/read-pkg/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/read-pkg/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/read-pkg/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dev": true,
+ "dependencies": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-cwd/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/resolve.exports": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.1.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "dev": true,
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "dev": true
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.18",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+ "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
+ "dev": true
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true
+ },
+ "node_modules/stack-utils": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/stack-utils/node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+ "dev": true,
+ "dependencies": {
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/style-search": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
+ "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
+ "dev": true
+ },
+ "node_modules/stylelint": {
+ "version": "14.14.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.14.0.tgz",
+ "integrity": "sha512-yUI+4xXfPHVnueYddSQ/e1GuEA/2wVhWQbGj16AmWLtQJtn28lVxfS4b0CsWyVRPgd3Auzi0NXOthIEUhtQmmA==",
+ "dev": true,
+ "dependencies": {
+ "@csstools/selector-specificity": "^2.0.2",
+ "balanced-match": "^2.0.0",
+ "colord": "^2.9.3",
+ "cosmiconfig": "^7.0.1",
+ "css-functions-list": "^3.1.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.2.12",
+ "fastest-levenshtein": "^1.0.16",
+ "file-entry-cache": "^6.0.1",
+ "global-modules": "^2.0.0",
+ "globby": "^11.1.0",
+ "globjoin": "^0.1.4",
+ "html-tags": "^3.2.0",
+ "ignore": "^5.2.0",
+ "import-lazy": "^4.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-plain-object": "^5.0.0",
+ "known-css-properties": "^0.25.0",
+ "mathml-tag-names": "^2.1.3",
+ "meow": "^9.0.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.17",
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-safe-parser": "^6.0.0",
+ "postcss-selector-parser": "^6.0.10",
+ "postcss-value-parser": "^4.2.0",
+ "resolve-from": "^5.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "style-search": "^0.1.0",
+ "supports-hyperlinks": "^2.3.0",
+ "svg-tags": "^1.0.0",
+ "table": "^6.8.0",
+ "v8-compile-cache": "^2.3.0",
+ "write-file-atomic": "^4.0.2"
+ },
+ "bin": {
+ "stylelint": "bin/stylelint.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ }
+ },
+ "node_modules/stylelint-config-recommended": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-8.0.0.tgz",
+ "integrity": "sha512-IK6dWvE000+xBv9jbnHOnBq01gt6HGVB2ZTsot+QsMpe82doDQ9hvplxfv4YnpEuUwVGGd9y6nbaAnhrjcxhZQ==",
+ "dev": true,
+ "peerDependencies": {
+ "stylelint": "^14.8.0"
+ }
+ },
+ "node_modules/stylelint-config-sass-guidelines": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-9.0.0.tgz",
+ "integrity": "sha512-yaZfiXYFRONWIBSehKQCjAoux00CaZLAN63nl9duyHBx3uZIpkFWRUzmWji3YKbn7myzOMTDTQRHAMKw8IugkA==",
+ "dev": true,
+ "dependencies": {
+ "postcss-scss": "^4.0.1",
+ "stylelint-order": "^5.0.0",
+ "stylelint-scss": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^14.0.0"
+ }
+ },
+ "node_modules/stylelint-config-standard": {
+ "version": "26.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-26.0.0.tgz",
+ "integrity": "sha512-hUuB7LaaqM8abvkOO84wh5oYSkpXgTzHu2Zza6e7mY+aOmpNTjoFBRxSLlzY0uAOMWEFx0OMKzr+reG1BUtcqQ==",
+ "dev": true,
+ "dependencies": {
+ "stylelint-config-recommended": "^8.0.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^14.9.0"
+ }
+ },
+ "node_modules/stylelint-order": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz",
+ "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^8.3.11",
+ "postcss-sorting": "^7.0.1"
+ },
+ "peerDependencies": {
+ "stylelint": "^14.0.0"
+ }
+ },
+ "node_modules/stylelint-scss": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz",
+ "integrity": "sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==",
+ "dev": true,
+ "dependencies": {
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-selector-parser": "^6.0.11",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^14.5.1 || ^15.0.0"
+ }
+ },
+ "node_modules/stylelint/node_modules/balanced-match": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+ "dev": true
+ },
+ "node_modules/stylelint/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/supports-hyperlinks": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+ "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-hyperlinks/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-hyperlinks/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svg-tags": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
+ "dev": true
+ },
+ "node_modules/table": {
+ "version": "6.8.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
+ "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^8.0.1",
+ "lodash.truncate": "^4.4.2",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/table/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/table/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/tmpl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
+ "dev": true
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/trim-newlines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.8.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "4.9.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+ "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.2",
+ "picocolors": "^1.0.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "node_modules/v8-compile-cache": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz",
+ "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==",
+ "dev": true
+ },
+ "node_modules/v8-to-istanbul": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/vue-eslint-parser": {
+ "version": "9.4.3",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
+ "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "eslint-scope": "^7.1.1",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.1",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^7.3.6"
+ },
+ "engines": {
+ "node": "^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=6.0.0"
+ }
+ },
+ "node_modules/vue-eslint-parser/node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/vue-eslint-parser/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/vue-eslint-parser/node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/walker": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+ "dev": true,
+ "dependencies": {
+ "makeerror": "1.0.12"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/write-file-atomic": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
+ "dev": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/xml-name-validator": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..b1d2ba02
--- /dev/null
+++ b/package.json
@@ -0,0 +1,11 @@
+{
+ "devDependencies": {
+ "@ownclouders/eslint-config": "^0.0.1",
+ "@ownclouders/prettier-config": "^0.0.1",
+ "eslint": "^8.57.0",
+ "jest": "^29.7.0",
+ "stylelint": "^14.14.0",
+ "stylelint-config-sass-guidelines": "^9.0.0",
+ "stylelint-config-standard": "^26.0.0"
+ }
+}
diff --git a/templates/editor.php b/templates/editor.php
index e8cfa55f..a6e4a997 100644
--- a/templates/editor.php
+++ b/templates/editor.php
@@ -31,8 +31,7 @@
data-version=""
data-template=""
data-anchor=""
- data-inframe=""
- data-forceedit="">
+ data-inframe="">