From d07ebb735ad7d1209758e71affc63f564772f6cb Mon Sep 17 00:00:00 2001 From: Ethanfly Date: Fri, 6 Feb 2026 19:04:16 +0800 Subject: [PATCH] fix(env): Update API URL and enhance HTML structure - Change VITE_API_URL in .env from localhost:3000 to localhost:3001 for backend access. - Update index.html to replace favicon with logo.png and ensure proper HTML structure. - Add new dependencies for WangEditor in package.json and package-lock.json to support rich text editing features. --- admin/.env | 2 +- admin/index.html | 25 +- admin/node_modules/.package-lock.json | 1584 ++++++----------- .../.vite/deps/@element-plus_icons-vue.js | 4 +- admin/node_modules/.vite/deps/_metadata.json | 264 +-- admin/node_modules/.vite/deps/axios.js.map | 2 +- admin/node_modules/.vite/deps/element-plus.js | 8 +- ...element-plus_dist_locale_zh-cn__mjs.js.map | 2 +- .../.vite/deps/element-plus_es.js | 8 +- ...ment-plus_es_components_aside_style_css.js | 4 +- ...-plus_es_components_aside_style_css.js.map | 2 +- ...ent-plus_es_components_avatar_style_css.js | 4 +- ...plus_es_components_avatar_style_css.js.map | 2 +- ...ement-plus_es_components_base_style_css.js | 2 +- ...es_components_breadcrumb-item_style_css.js | 4 +- ...omponents_breadcrumb-item_style_css.js.map | 2 +- ...plus_es_components_breadcrumb_style_css.js | 4 +- ..._es_components_breadcrumb_style_css.js.map | 2 +- ...ent-plus_es_components_button_style_css.js | 4 +- ...lement-plus_es_components_col_style_css.js | 4 +- ...nt-plus_es_components_col_style_css.js.map | 2 +- ...-plus_es_components_container_style_css.js | 12 +- ...s_es_components_container_style_css.js.map | 2 +- ...ent-plus_es_components_dialog_style_css.js | 6 +- ...plus_es_components_dialog_style_css.js.map | 2 +- ...s_es_components_dropdown-item_style_css.js | 4 +- ..._components_dropdown-item_style_css.js.map | 2 +- ...s_es_components_dropdown-menu_style_css.js | 4 +- ..._components_dropdown-menu_style_css.js.map | 2 +- ...t-plus_es_components_dropdown_style_css.js | 12 +- ...us_es_components_dropdown_style_css.js.map | 2 +- ...-plus_es_components_form-item_style_css.js | 4 +- ...s_es_components_form-item_style_css.js.map | 2 +- ...ement-plus_es_components_form_style_css.js | 4 +- ...t-plus_es_components_form_style_css.js.map | 2 +- ...ent-plus_es_components_header_style_css.js | 4 +- ...plus_es_components_header_style_css.js.map | 2 +- ...ement-plus_es_components_icon_style_css.js | 2 +- ...us_es_components_input-number_style_css.js | 6 +- ...s_components_input-number_style_css.js.map | 2 +- ...ment-plus_es_components_input_style_css.js | 4 +- ...nt-plus_es_components_loading_style_css.js | 4 +- ...lus_es_components_loading_style_css.js.map | 2 +- ...ement-plus_es_components_main_style_css.js | 4 +- ...t-plus_es_components_main_style_css.js.map | 2 +- ...-plus_es_components_menu-item_style_css.js | 4 +- ...s_es_components_menu-item_style_css.js.map | 2 +- ...ement-plus_es_components_menu_style_css.js | 8 +- ...t-plus_es_components_menu_style_css.js.map | 2 +- ...ent-plus_es_components_option_style_css.js | 4 +- ...plus_es_components_pagination_style_css.js | 16 +- ..._es_components_pagination_style_css.js.map | 2 +- ...lus_es_components_radio-group_style_css.js | 6 +- ...es_components_radio-group_style_css.js.map | 2 +- ...ment-plus_es_components_radio_style_css.js | 4 +- ...lement-plus_es_components_row_style_css.js | 4 +- ...nt-plus_es_components_row_style_css.js.map | 2 +- ...ent-plus_es_components_select_style_css.js | 12 +- ...us_es_components_table-column_style_css.js | 8 +- ...s_components_table-column_style_css.js.map | 2 +- ...ment-plus_es_components_table_style_css.js | 12 +- ...-plus_es_components_table_style_css.js.map | 2 +- ...lement-plus_es_components_tag_style_css.js | 4 +- admin/node_modules/.vite/deps/pinia.js | 6 +- admin/node_modules/.vite/deps/pinia.js.map | 2 +- admin/node_modules/.vite/deps/qrcode.js.map | 2 +- admin/node_modules/.vite/deps/vue-router.js | 4 +- .../node_modules/.vite/deps/vue-router.js.map | 2 +- admin/node_modules/.vite/deps/vue.js | 2 +- admin/package-lock.json | 565 +++++- admin/package.json | 2 + admin/public/favicon.svg | 71 - admin/public/logo.png | Bin 0 -> 179169 bytes admin/src/api/admin.js | 6 + admin/src/layouts/MainLayout.vue | 2 +- admin/src/router/index.js | 6 + admin/src/views/article/index.vue | 445 +++++ admin/src/views/dashboard/index.vue | 2 +- logo/logo.png | Bin 132231 -> 179169 bytes logo/logo.svg | 71 - miniprogram/app.js | 24 + miniprogram/app.json | 5 +- miniprogram/pages/article/detail/index.js | 53 + miniprogram/pages/article/detail/index.json | 3 + miniprogram/pages/article/detail/index.wxml | 17 + miniprogram/pages/article/detail/index.wxss | 57 + miniprogram/pages/article/list/index.js | 59 + miniprogram/pages/article/list/index.json | 4 + miniprogram/pages/article/list/index.wxml | 45 + miniprogram/pages/article/list/index.wxss | 122 ++ .../pages/match/challenge-detail/index.js | 95 +- .../pages/match/challenge-detail/index.wxml | 26 +- .../pages/match/challenge-detail/index.wxss | 29 +- miniprogram/pages/match/challenge/index.js | 55 + miniprogram/pages/match/challenge/index.wxml | 37 +- miniprogram/pages/match/challenge/index.wxss | 144 ++ miniprogram/pages/match/ranking/index.js | 35 +- miniprogram/pages/match/ranking/index.wxss | 12 +- miniprogram/pages/match/recent/index.js | 90 + miniprogram/pages/match/recent/index.json | 6 + miniprogram/pages/match/recent/index.wxml | 42 + miniprogram/pages/match/recent/index.wxss | 156 ++ miniprogram/pages/user/index.js | 79 +- miniprogram/pages/user/index.wxml | 43 + miniprogram/pages/user/index.wxss | 125 ++ server/src/app.js | 2 + server/src/controllers/adminController.js | 27 +- .../src/controllers/articleAdminController.js | 157 ++ server/src/controllers/articleController.js | 80 + .../src/controllers/matchAdminController.js | 245 ++- server/src/controllers/matchController.js | 238 ++- server/src/models/Article.js | 65 + server/src/models/index.js | 8 +- server/src/routes/admin.js | 7 + server/src/routes/article.js | 10 + server/src/services/powerCalculator.js | 23 +- 116 files changed, 3903 insertions(+), 1633 deletions(-) delete mode 100644 admin/public/favicon.svg create mode 100644 admin/public/logo.png create mode 100644 admin/src/views/article/index.vue delete mode 100644 logo/logo.svg create mode 100644 miniprogram/pages/article/detail/index.js create mode 100644 miniprogram/pages/article/detail/index.json create mode 100644 miniprogram/pages/article/detail/index.wxml create mode 100644 miniprogram/pages/article/detail/index.wxss create mode 100644 miniprogram/pages/article/list/index.js create mode 100644 miniprogram/pages/article/list/index.json create mode 100644 miniprogram/pages/article/list/index.wxml create mode 100644 miniprogram/pages/article/list/index.wxss create mode 100644 miniprogram/pages/match/recent/index.js create mode 100644 miniprogram/pages/match/recent/index.json create mode 100644 miniprogram/pages/match/recent/index.wxml create mode 100644 miniprogram/pages/match/recent/index.wxss create mode 100644 server/src/controllers/articleAdminController.js create mode 100644 server/src/controllers/articleController.js create mode 100644 server/src/models/Article.js create mode 100644 server/src/routes/article.js diff --git a/admin/.env b/admin/.env index 9d742d74..402c44c8 100644 --- a/admin/.env +++ b/admin/.env @@ -16,7 +16,7 @@ VITE_API_URL=/api # 如需直接访问后端(不使用代理),设置完整地址: -# VITE_API_URL=http://localhost:3000/api +VITE_API_URL=http://localhost:3001/api # VITE_API_URL=https://your-server.com/api # ------------------------------------------ diff --git a/admin/index.html b/admin/index.html index 27b7ef9e..54e587a6 100644 --- a/admin/index.html +++ b/admin/index.html @@ -1,13 +1,16 @@ - - - - - 英飒俱乐部管理系统 - - -
- - - + + + + + + 英飒俱乐部管理系统 + + + +
+ + + + \ No newline at end of file diff --git a/admin/node_modules/.package-lock.json b/admin/node_modules/.package-lock.json index 7baa040d..d66ebe24 100644 --- a/admin/node_modules/.package-lock.json +++ b/admin/node_modules/.package-lock.json @@ -47,6 +47,15 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/types": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", @@ -78,402 +87,6 @@ "vue": "^3.2.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/win32-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", @@ -597,270 +210,6 @@ "@parcel/watcher-win32-x64": "2.5.4" } }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.4.tgz", - "integrity": "sha512-hoh0vx4v+b3BNI7Cjoy2/B0ARqcwVNrzN/n7DLq9ZB4I3lrsvhrkCViJyfTj/Qi5xM9YFiH4AmHGK6pgH1ss7g==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.4.tgz", - "integrity": "sha512-kphKy377pZiWpAOyTgQYPE5/XEKVMaj6VUjKT5VkNyUJlr2qZAn8gIc7CPzx+kbhvqHDT9d7EqdOqRXT6vk0zw==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.4.tgz", - "integrity": "sha512-UKaQFhCtNJW1A9YyVz3Ju7ydf6QgrpNQfRZ35wNKUhTQ3dxJ/3MULXN5JN/0Z80V/KUBDGa3RZaKq1EQT2a2gg==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.4.tgz", - "integrity": "sha512-Dib0Wv3Ow/m2/ttvLdeI2DBXloO7t3Z0oCp4bAb2aqyqOjKPPGrg10pMJJAQ7tt8P4V2rwYwywkDhUia/FgS+Q==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.4.tgz", - "integrity": "sha512-I5Vb769pdf7Q7Sf4KNy8Pogl/URRCKu9ImMmnVKYayhynuyGYMzuI4UOWnegQNa2sGpsPSbzDsqbHNMyeyPCgw==", - "cpu": [ - "arm" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.4.tgz", - "integrity": "sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==", - "cpu": [ - "arm" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.4.tgz", - "integrity": "sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.4.tgz", - "integrity": "sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.4.tgz", - "integrity": "sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.4.tgz", - "integrity": "sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.4.tgz", - "integrity": "sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.4.tgz", - "integrity": "sha512-vQN+KIReG0a2ZDpVv8cgddlf67J8hk1WfZMMP7sMeZmJRSmEax5xNDNWKdgqSe2brOKTQQAs3aCCUal2qBHAyg==", - "cpu": [ - "ia32" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@parcel/watcher-win32-x64": { "version": "2.5.4", "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.4.tgz", @@ -916,351 +265,6 @@ } } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.2.tgz", - "integrity": "sha512-21J6xzayjy3O6NdnlO6aXi/urvSRjm6nCI6+nF6ra2YofKruGixN9kfT+dt55HVNwfDmpDHJcaS3JuP/boNnlA==", - "cpu": [ - "arm" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.2.tgz", - "integrity": "sha512-eXBg7ibkNUZ+sTwbFiDKou0BAckeV6kIigK7y5Ko4mB/5A1KLhuzEKovsmfvsL8mQorkoincMFGnQuIT92SKqA==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.2.tgz", - "integrity": "sha512-UCbaTklREjrc5U47ypLulAgg4njaqfOVLU18VrCrI+6E5MQjuG0lSWaqLlAJwsD7NpFV249XgB0Bi37Zh5Sz4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.2.tgz", - "integrity": "sha512-dP67MA0cCMHFT2g5XyjtpVOtp7y4UyUxN3dhLdt11at5cPKnSm4lY+EhwNvDXIMzAMIo2KU+mc9wxaAQJTn7sQ==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.2.tgz", - "integrity": "sha512-WDUPLUwfYV9G1yxNRJdXcvISW15mpvod1Wv3ok+Ws93w1HjIVmCIFxsG2DquO+3usMNCpJQ0wqO+3GhFdl6Fow==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.2.tgz", - "integrity": "sha512-Ng95wtHVEulRwn7R0tMrlUuiLVL/HXA8Lt/MYVpy88+s5ikpntzZba1qEulTuPnPIZuOPcW9wNEiqvZxZmgmqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.2.tgz", - "integrity": "sha512-AEXMESUDWWGqD6LwO/HkqCZgUE1VCJ1OhbvYGsfqX2Y6w5quSXuyoy/Fg3nRqiwro+cJYFxiw5v4kB2ZDLhxrw==", - "cpu": [ - "arm" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.2.tgz", - "integrity": "sha512-ZV7EljjBDwBBBSv570VWj0hiNTdHt9uGznDtznBB4Caj3ch5rgD4I2K1GQrtbvJ/QiB+663lLgOdcADMNVC29Q==", - "cpu": [ - "arm" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.2.tgz", - "integrity": "sha512-uvjwc8NtQVPAJtq4Tt7Q49FOodjfbf6NpqXyW/rjXoV+iZ3EJAHLNAnKT5UJBc6ffQVgmXTUL2ifYiLABlGFqA==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.2.tgz", - "integrity": "sha512-s3KoWVNnye9mm/2WpOZ3JeUiediUVw6AvY/H7jNA6qgKA2V2aM25lMkVarTDfiicn/DLq3O0a81jncXszoyCFA==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.2.tgz", - "integrity": "sha512-gi21faacK+J8aVSyAUptML9VQN26JRxe484IbF+h3hpG+sNVoMXPduhREz2CcYr5my0NE3MjVvQ5bMKX71pfVA==", - "cpu": [ - "loong64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.2.tgz", - "integrity": "sha512-qSlWiXnVaS/ceqXNfnoFZh4IiCA0EwvCivivTGbEu1qv2o+WTHpn1zNmCTAoOG5QaVr2/yhCoLScQtc/7RxshA==", - "cpu": [ - "loong64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.2.tgz", - "integrity": "sha512-rPyuLFNoF1B0+wolH277E780NUKf+KoEDb3OyoLbAO18BbeKi++YN6gC/zuJoPPDlQRL3fIxHxCxVEWiem2yXw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.2.tgz", - "integrity": "sha512-g+0ZLMook31iWV4PvqKU0i9E78gaZgYpSrYPed/4Bu+nGTgfOPtfs1h11tSSRPXSjC5EzLTjV/1A7L2Vr8pJoQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.2.tgz", - "integrity": "sha512-i+sGeRGsjKZcQRh3BRfpLsM3LX3bi4AoEVqmGDyc50L6KfYsN45wVCSz70iQMwPWr3E5opSiLOwsC9WB4/1pqg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.2.tgz", - "integrity": "sha512-C1vLcKc4MfFV6I0aWsC7B2Y9QcsiEcvKkfxprwkPfLaN8hQf0/fKHwSF2lcYzA9g4imqnhic729VB9Fo70HO3Q==", - "cpu": [ - "riscv64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.2.tgz", - "integrity": "sha512-68gHUK/howpQjh7g7hlD9DvTTt4sNLp1Bb+Yzw2Ki0xvscm2cOdCLZNJNhd2jW8lsTPrHAHuF751BygifW4bkQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.2.tgz", - "integrity": "sha512-1e30XAuaBP1MAizaOBApsgeGZge2/Byd6wV4a8oa6jPdHELbRHBiw7wvo4dp7Ie2PE8TZT4pj9RLGZv9N4qwlw==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.2.tgz", - "integrity": "sha512-4BJucJBGbuGnH6q7kpPqGJGzZnYrpAzRd60HQSt3OpX/6/YVgSsJnNzR8Ot74io50SeVT4CtCWe/RYIAymFPwA==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.2.tgz", - "integrity": "sha512-cT2MmXySMo58ENv8p6/O6wI/h/gLnD3D6JoajwXFZH6X9jz4hARqUhWpGuQhOgLNXscfZYRQMJvZDtWNzMAIDw==", - "cpu": [ - "x64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.2.tgz", - "integrity": "sha512-sZnyUgGkuzIXaK3jNMPmUIyJrxu/PjmATQrocpGA1WbCPX8H5tfGgRSuYtqBYAvLuIGp8SPRb1O4d1Fkb5fXaQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.2.tgz", - "integrity": "sha512-sDpFbenhmWjNcEbBcoTV0PWvW5rPJFvu+P7XoTY0YLGRupgLbFY0XPfwIbJOObzO7QgkRDANh65RjhPmgSaAjQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.2.tgz", - "integrity": "sha512-GvJ03TqqaweWCigtKQVBErw2bEhu1tyfNQbarwr94wCGnczA9HF8wqEe3U/Lfu6EdeNP0p6R+APeHVwEqVxpUQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "ideallyInert": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@rollup/rollup-win32-x64-gnu": { "version": "4.55.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.2.tgz", @@ -1289,6 +293,12 @@ "win32" ] }, + "node_modules/@transloadit/prettier-bytes": { + "version": "0.0.7", + "resolved": "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz", + "integrity": "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==", + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -1296,6 +306,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/@types/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==", + "license": "MIT" + }, "node_modules/@types/lodash": { "version": "4.17.23", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz", @@ -1307,6 +323,7 @@ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", "license": "MIT", + "peer": true, "dependencies": { "@types/lodash": "*" } @@ -1317,6 +334,63 @@ "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", "license": "MIT" }, + "node_modules/@uppy/companion-client": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/@uppy/companion-client/-/companion-client-2.2.2.tgz", + "integrity": "sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==", + "license": "MIT", + "dependencies": { + "@uppy/utils": "^4.1.2", + "namespace-emitter": "^2.0.1" + } + }, + "node_modules/@uppy/core": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/@uppy/core/-/core-2.3.4.tgz", + "integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@transloadit/prettier-bytes": "0.0.7", + "@uppy/store-default": "^2.1.1", + "@uppy/utils": "^4.1.3", + "lodash.throttle": "^4.1.1", + "mime-match": "^1.0.2", + "namespace-emitter": "^2.0.1", + "nanoid": "^3.1.25", + "preact": "^10.5.13" + } + }, + "node_modules/@uppy/store-default": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/@uppy/store-default/-/store-default-2.1.1.tgz", + "integrity": "sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==", + "license": "MIT" + }, + "node_modules/@uppy/utils": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@uppy/utils/-/utils-4.1.3.tgz", + "integrity": "sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==", + "license": "MIT", + "dependencies": { + "lodash.throttle": "^4.1.1" + } + }, + "node_modules/@uppy/xhr-upload": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz", + "integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@uppy/companion-client": "^2.2.2", + "@uppy/utils": "^4.1.2", + "nanoid": "^3.1.25" + }, + "peerDependencies": { + "@uppy/core": "^2.3.3" + } + }, "node_modules/@vitejs/plugin-vue": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", @@ -1473,6 +547,168 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@wangeditor/basic-modules": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz", + "integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-url": "^1.2.4" + }, + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.throttle": "^4.1.1", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/code-highlight": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz", + "integrity": "sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.23.0" + }, + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/core": { + "version": "1.1.19", + "resolved": "https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz", + "integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/event-emitter": "^0.3.3", + "event-emitter": "^0.3.5", + "html-void-elements": "^2.0.0", + "i18next": "^20.4.0", + "scroll-into-view-if-needed": "^2.2.28", + "slate-history": "^0.66.0" + }, + "peerDependencies": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/editor": { + "version": "5.1.23", + "resolved": "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz", + "integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "^1.1.7", + "@wangeditor/code-highlight": "^1.0.3", + "@wangeditor/core": "^1.1.19", + "@wangeditor/list-module": "^1.0.5", + "@wangeditor/table-module": "^1.1.4", + "@wangeditor/upload-image-module": "^1.0.2", + "@wangeditor/video-module": "^1.1.4", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/editor-for-vue": { + "version": "5.1.12", + "resolved": "https://registry.npmmirror.com/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz", + "integrity": "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==", + "license": "MIT", + "peerDependencies": { + "@wangeditor/editor": ">=5.1.0", + "vue": "^3.0.5" + } + }, + "node_modules/@wangeditor/list-module": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz", + "integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==", + "license": "MIT", + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/table-module": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz", + "integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==", + "license": "MIT", + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/upload-image-module": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz", + "integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==", + "license": "MIT", + "peerDependencies": { + "@uppy/core": "^2.0.3", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "1.x", + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.foreach": "^4.5.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/video-module": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz", + "integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==", + "license": "MIT", + "peerDependencies": { + "@uppy/core": "^2.1.4", + "@uppy/xhr-upload": "^2.0.7", + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", @@ -1682,6 +918,12 @@ "node": ">= 0.8" } }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==", + "license": "MIT" + }, "node_modules/confbox": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", @@ -1695,6 +937,19 @@ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/dayjs": { "version": "1.11.19", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", @@ -1754,6 +1009,16 @@ "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", "license": "MIT" }, + "node_modules/dom7": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz", + "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==", + "license": "MIT", + "peer": true, + "dependencies": { + "ssr-window": "^3.0.0-alpha.1" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -1866,6 +1131,46 @@ "node": ">= 0.4" } }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -1918,12 +1223,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "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==", "license": "MIT" }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/exsolve": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", @@ -1931,6 +1261,15 @@ "dev": true, "license": "MIT" }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -2020,22 +1359,6 @@ "node": ">= 6" } }, - "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, - "ideallyInert": true, - "license": "MIT", - "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", @@ -2155,6 +1478,35 @@ "node": ">= 0.4" } }, + "node_modules/html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/i18next": { + "version": "20.6.1", + "resolved": "https://registry.npmmirror.com/i18next/-/i18next-20.6.1.tgz", + "integrity": "sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.0" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/immutable": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", @@ -2223,6 +1575,13 @@ "node": ">=0.10.0" } }, + "node_modules/is-hotkey": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz", + "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==", + "license": "MIT", + "peer": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2233,6 +1592,21 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "license": "MIT" + }, "node_modules/js-tokens": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", @@ -2273,13 +1647,15 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash-es": { "version": "4.17.22", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz", "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash-unified": { "version": "1.0.3", @@ -2292,6 +1668,56 @@ "lodash-es": "*" } }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==", + "license": "MIT", + "peer": true + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -2362,6 +1788,15 @@ "node": ">= 0.6" } }, + "node_modules/mime-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/mime-match/-/mime-match-1.0.2.tgz", + "integrity": "sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==", + "license": "ISC", + "dependencies": { + "wildcard": "^1.1.0" + } + }, "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", @@ -2410,6 +1845,12 @@ "dev": true, "license": "MIT" }, + "node_modules/namespace-emitter": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/namespace-emitter/-/namespace-emitter-2.0.1.tgz", + "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==", + "license": "MIT" + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -2421,6 +1862,7 @@ } ], "license": "MIT", + "peer": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -2428,6 +1870,12 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", @@ -2601,6 +2049,25 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/preact": { + "version": "10.28.3", + "resolved": "https://registry.npmmirror.com/preact/-/preact-10.28.3.tgz", + "integrity": "sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -2729,6 +2196,7 @@ "integrity": "sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -2798,6 +2266,7 @@ "integrity": "sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -2813,6 +2282,15 @@ "@parcel/watcher": "^2.4.1" } }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^1.0.20" + } + }, "node_modules/scule": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", @@ -2826,6 +2304,40 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "license": "ISC" }, + "node_modules/slate": { + "version": "0.72.8", + "resolved": "https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz", + "integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==", + "license": "MIT", + "peer": true, + "dependencies": { + "immer": "^9.0.6", + "is-plain-object": "^5.0.0", + "tiny-warning": "^1.0.3" + } + }, + "node_modules/slate-history": { + "version": "0.66.0", + "resolved": "https://registry.npmmirror.com/slate-history/-/slate-history-0.66.0.tgz", + "integrity": "sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^5.0.0" + }, + "peerDependencies": { + "slate": ">=0.65.3" + } + }, + "node_modules/snabbdom": { + "version": "3.6.3", + "resolved": "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.6.3.tgz", + "integrity": "sha512-W2lHLLw2qR2Vv0DcMmcxXqcfdBaIcoN+y/86SmHv8fn4DazEQSH6KN3TjZcWvwujW56OHiiirsbHWZb4vx/0fg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.17.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -2835,6 +2347,12 @@ "node": ">=0.10.0" } }, + "node_modules/ssr-window": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-3.0.0.tgz", + "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==", + "license": "MIT" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -2887,6 +2405,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2906,6 +2430,12 @@ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", "license": "0BSD" }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmmirror.com/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, "node_modules/ufo": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", @@ -3140,6 +2670,7 @@ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -3199,6 +2730,7 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.27.tgz", "integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==", "license": "MIT", + "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.27", "@vue/compiler-sfc": "3.5.27", @@ -3269,6 +2801,12 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "license": "ISC" }, + "node_modules/wildcard": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz", + "integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==", + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/admin/node_modules/.vite/deps/@element-plus_icons-vue.js b/admin/node_modules/.vite/deps/@element-plus_icons-vue.js index 8a7a131b..90d13190 100644 --- a/admin/node_modules/.vite/deps/@element-plus_icons-vue.js +++ b/admin/node_modules/.vite/deps/@element-plus_icons-vue.js @@ -292,8 +292,8 @@ import { wind_power_default, zoom_in_default, zoom_out_default -} from "./chunk-OP4ZUAFM.js"; -import "./chunk-H2732BJL.js"; +} from "./chunk-L7WLSQ4R.js"; +import "./chunk-ELEEJBJQ.js"; import "./chunk-G3PMV62Z.js"; export { add_location_default as AddLocation, diff --git a/admin/node_modules/.vite/deps/_metadata.json b/admin/node_modules/.vite/deps/_metadata.json index 61a3defc..cd5540fd 100644 --- a/admin/node_modules/.vite/deps/_metadata.json +++ b/admin/node_modules/.vite/deps/_metadata.json @@ -1,347 +1,365 @@ { - "hash": "0b0fcdca", - "configHash": "0bd4dba1", - "lockfileHash": "45a4e0fd", - "browserHash": "2a9cc92b", + "hash": "8a568c02", + "configHash": "47a28a65", + "lockfileHash": "05df1c47", + "browserHash": "dda6d657", "optimized": { "@element-plus/icons-vue": { "src": "../../@element-plus/icons-vue/dist/index.js", "file": "@element-plus_icons-vue.js", - "fileHash": "0ce2075a", + "fileHash": "ec7aa758", "needsInterop": false }, "axios": { "src": "../../axios/index.js", "file": "axios.js", - "fileHash": "e0339058", + "fileHash": "50abb3a0", "needsInterop": false }, "dayjs": { "src": "../../dayjs/dayjs.min.js", "file": "dayjs.js", - "fileHash": "d6bd156a", + "fileHash": "7122c9bb", "needsInterop": true }, "element-plus": { "src": "../../element-plus/es/index.mjs", "file": "element-plus.js", - "fileHash": "eb6d080f", + "fileHash": "de0a4e4c", "needsInterop": false }, "element-plus/dist/locale/zh-cn.mjs": { "src": "../../element-plus/dist/locale/zh-cn.mjs", "file": "element-plus_dist_locale_zh-cn__mjs.js", - "fileHash": "23bb7a06", + "fileHash": "7ff2f81b", "needsInterop": false }, "pinia": { "src": "../../pinia/dist/pinia.mjs", "file": "pinia.js", - "fileHash": "3e06a4e4", + "fileHash": "9025ba71", "needsInterop": false }, "qrcode": { "src": "../../qrcode/lib/browser.js", "file": "qrcode.js", - "fileHash": "b1dc1626", + "fileHash": "85e1c633", "needsInterop": true }, "vue": { "src": "../../vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "cf2fc702", + "fileHash": "d67acca6", "needsInterop": false }, "vue-router": { "src": "../../vue-router/dist/vue-router.mjs", "file": "vue-router.js", - "fileHash": "731df609", + "fileHash": "f248d375", "needsInterop": false }, "element-plus/es": { "src": "../../element-plus/es/index.mjs", "file": "element-plus_es.js", - "fileHash": "a8df203a", + "fileHash": "48f929fb", "needsInterop": false }, "element-plus/es/components/base/style/css": { "src": "../../element-plus/es/components/base/style/css.mjs", "file": "element-plus_es_components_base_style_css.js", - "fileHash": "a217b400", - "needsInterop": false - }, - "element-plus/es/components/dialog/style/css": { - "src": "../../element-plus/es/components/dialog/style/css.mjs", - "file": "element-plus_es_components_dialog_style_css.js", - "fileHash": "75a45c45", - "needsInterop": false - }, - "element-plus/es/components/button/style/css": { - "src": "../../element-plus/es/components/button/style/css.mjs", - "file": "element-plus_es_components_button_style_css.js", - "fileHash": "d80bcc5a", + "fileHash": "0bfce4cf", "needsInterop": false }, "element-plus/es/components/form/style/css": { "src": "../../element-plus/es/components/form/style/css.mjs", "file": "element-plus_es_components_form_style_css.js", - "fileHash": "1c8a603a", + "fileHash": "d4788822", + "needsInterop": false + }, + "element-plus/es/components/button/style/css": { + "src": "../../element-plus/es/components/button/style/css.mjs", + "file": "element-plus_es_components_button_style_css.js", + "fileHash": "3041eea7", "needsInterop": false }, "element-plus/es/components/form-item/style/css": { "src": "../../element-plus/es/components/form-item/style/css.mjs", "file": "element-plus_es_components_form-item_style_css.js", - "fileHash": "0acbe0b6", + "fileHash": "c56d69b7", "needsInterop": false }, "element-plus/es/components/input/style/css": { "src": "../../element-plus/es/components/input/style/css.mjs", "file": "element-plus_es_components_input_style_css.js", - "fileHash": "7206bf43", + "fileHash": "416bddc0", + "needsInterop": false + }, + "element-plus/es/components/dialog/style/css": { + "src": "../../element-plus/es/components/dialog/style/css.mjs", + "file": "element-plus_es_components_dialog_style_css.js", + "fileHash": "e061560e", "needsInterop": false }, "element-plus/es/components/container/style/css": { "src": "../../element-plus/es/components/container/style/css.mjs", "file": "element-plus_es_components_container_style_css.js", - "fileHash": "98a7fc8d", + "fileHash": "a3114877", "needsInterop": false }, "element-plus/es/components/main/style/css": { "src": "../../element-plus/es/components/main/style/css.mjs", "file": "element-plus_es_components_main_style_css.js", - "fileHash": "06ad125e", + "fileHash": "51b2c8ae", "needsInterop": false }, "element-plus/es/components/header/style/css": { "src": "../../element-plus/es/components/header/style/css.mjs", "file": "element-plus_es_components_header_style_css.js", - "fileHash": "0d145a75", + "fileHash": "29396d87", "needsInterop": false }, "element-plus/es/components/dropdown/style/css": { "src": "../../element-plus/es/components/dropdown/style/css.mjs", "file": "element-plus_es_components_dropdown_style_css.js", - "fileHash": "59eef490", + "fileHash": "de9c8b64", "needsInterop": false }, "element-plus/es/components/dropdown-menu/style/css": { "src": "../../element-plus/es/components/dropdown-menu/style/css.mjs", "file": "element-plus_es_components_dropdown-menu_style_css.js", - "fileHash": "14e34d1b", + "fileHash": "876b962c", "needsInterop": false }, "element-plus/es/components/dropdown-item/style/css": { "src": "../../element-plus/es/components/dropdown-item/style/css.mjs", "file": "element-plus_es_components_dropdown-item_style_css.js", - "fileHash": "b27e43bb", + "fileHash": "02fc7e6a", "needsInterop": false }, "element-plus/es/components/avatar/style/css": { "src": "../../element-plus/es/components/avatar/style/css.mjs", "file": "element-plus_es_components_avatar_style_css.js", - "fileHash": "2a5e4249", + "fileHash": "8dd20109", "needsInterop": false }, "element-plus/es/components/breadcrumb/style/css": { "src": "../../element-plus/es/components/breadcrumb/style/css.mjs", "file": "element-plus_es_components_breadcrumb_style_css.js", - "fileHash": "429623db", + "fileHash": "57e8092c", "needsInterop": false }, "element-plus/es/components/breadcrumb-item/style/css": { "src": "../../element-plus/es/components/breadcrumb-item/style/css.mjs", "file": "element-plus_es_components_breadcrumb-item_style_css.js", - "fileHash": "41266817", + "fileHash": "481a3941", "needsInterop": false }, "element-plus/es/components/aside/style/css": { "src": "../../element-plus/es/components/aside/style/css.mjs", "file": "element-plus_es_components_aside_style_css.js", - "fileHash": "7d5a15fd", + "fileHash": "59d11e8a", "needsInterop": false }, "element-plus/es/components/menu/style/css": { "src": "../../element-plus/es/components/menu/style/css.mjs", "file": "element-plus_es_components_menu_style_css.js", - "fileHash": "16c1dd4d", + "fileHash": "2698e97e", "needsInterop": false }, "element-plus/es/components/menu-item/style/css": { "src": "../../element-plus/es/components/menu-item/style/css.mjs", "file": "element-plus_es_components_menu-item_style_css.js", - "fileHash": "61715a00", + "fileHash": "52307744", "needsInterop": false }, "element-plus/es/components/icon/style/css": { "src": "../../element-plus/es/components/icon/style/css.mjs", "file": "element-plus_es_components_icon_style_css.js", - "fileHash": "dadfdc54", + "fileHash": "1ca3c820", "needsInterop": false }, "element-plus/es/components/input-number/style/css": { "src": "../../element-plus/es/components/input-number/style/css.mjs", "file": "element-plus_es_components_input-number_style_css.js", - "fileHash": "fe1a5065", + "fileHash": "47263c6c", "needsInterop": false }, "element-plus/es/components/autocomplete/style/css": { "src": "../../element-plus/es/components/autocomplete/style/css.mjs", "file": "element-plus_es_components_autocomplete_style_css.js", - "fileHash": "18633b2b", + "fileHash": "1f9138ee", "needsInterop": false }, "element-plus/es/components/tag/style/css": { "src": "../../element-plus/es/components/tag/style/css.mjs", "file": "element-plus_es_components_tag_style_css.js", - "fileHash": "9560cfd1", + "fileHash": "64584bf9", "needsInterop": false }, "element-plus/es/components/row/style/css": { "src": "../../element-plus/es/components/row/style/css.mjs", "file": "element-plus_es_components_row_style_css.js", - "fileHash": "28bb8b75", + "fileHash": "a66bee2e", "needsInterop": false }, "element-plus/es/components/col/style/css": { "src": "../../element-plus/es/components/col/style/css.mjs", "file": "element-plus_es_components_col_style_css.js", - "fileHash": "e29b5cd8", + "fileHash": "0f603d50", "needsInterop": false }, "element-plus/es/components/loading/style/css": { "src": "../../element-plus/es/components/loading/style/css.mjs", "file": "element-plus_es_components_loading_style_css.js", - "fileHash": "c5141ba1", - "needsInterop": false - }, - "element-plus/es/components/divider/style/css": { - "src": "../../element-plus/es/components/divider/style/css.mjs", - "file": "element-plus_es_components_divider_style_css.js", - "fileHash": "37c51f12", - "needsInterop": false - }, - "element-plus/es/components/text/style/css": { - "src": "../../element-plus/es/components/text/style/css.mjs", - "file": "element-plus_es_components_text_style_css.js", - "fileHash": "e5b97e77", - "needsInterop": false - }, - "element-plus/es/components/switch/style/css": { - "src": "../../element-plus/es/components/switch/style/css.mjs", - "file": "element-plus_es_components_switch_style_css.js", - "fileHash": "2b98b2df", - "needsInterop": false - }, - "element-plus/es/components/radio-group/style/css": { - "src": "../../element-plus/es/components/radio-group/style/css.mjs", - "file": "element-plus_es_components_radio-group_style_css.js", - "fileHash": "a90022be", - "needsInterop": false - }, - "element-plus/es/components/radio/style/css": { - "src": "../../element-plus/es/components/radio/style/css.mjs", - "file": "element-plus_es_components_radio_style_css.js", - "fileHash": "42b918e0", + "fileHash": "3e156d5d", "needsInterop": false }, "element-plus/es/components/pagination/style/css": { "src": "../../element-plus/es/components/pagination/style/css.mjs", "file": "element-plus_es_components_pagination_style_css.js", - "fileHash": "29d647a3", + "fileHash": "7bbf7c89", "needsInterop": false }, "element-plus/es/components/table/style/css": { "src": "../../element-plus/es/components/table/style/css.mjs", "file": "element-plus_es_components_table_style_css.js", - "fileHash": "1f1a4f40", + "fileHash": "d5e7610e", "needsInterop": false }, "element-plus/es/components/table-column/style/css": { "src": "../../element-plus/es/components/table-column/style/css.mjs", "file": "element-plus_es_components_table-column_style_css.js", - "fileHash": "f35fe942", + "fileHash": "bd8ce5e0", "needsInterop": false }, "element-plus/es/components/select/style/css": { "src": "../../element-plus/es/components/select/style/css.mjs", "file": "element-plus_es_components_select_style_css.js", - "fileHash": "7ee42f75", + "fileHash": "abd102ea", "needsInterop": false }, "element-plus/es/components/option/style/css": { "src": "../../element-plus/es/components/option/style/css.mjs", "file": "element-plus_es_components_option_style_css.js", - "fileHash": "78e3b880", + "fileHash": "57ef18f7", + "needsInterop": false + }, + "element-plus/es/components/collapse/style/css": { + "src": "../../element-plus/es/components/collapse/style/css.mjs", + "file": "element-plus_es_components_collapse_style_css.js", + "fileHash": "bf75176c", + "needsInterop": false + }, + "element-plus/es/components/collapse-item/style/css": { + "src": "../../element-plus/es/components/collapse-item/style/css.mjs", + "file": "element-plus_es_components_collapse-item_style_css.js", + "fileHash": "afc23457", "needsInterop": false }, "element-plus/es/components/descriptions/style/css": { "src": "../../element-plus/es/components/descriptions/style/css.mjs", "file": "element-plus_es_components_descriptions_style_css.js", - "fileHash": "585f05ee", + "fileHash": "751f9003", "needsInterop": false }, "element-plus/es/components/descriptions-item/style/css": { "src": "../../element-plus/es/components/descriptions-item/style/css.mjs", "file": "element-plus_es_components_descriptions-item_style_css.js", - "fileHash": "0dc4fea5", + "fileHash": "364abd80", + "needsInterop": false + }, + "element-plus/es/components/radio-group/style/css": { + "src": "../../element-plus/es/components/radio-group/style/css.mjs", + "file": "element-plus_es_components_radio-group_style_css.js", + "fileHash": "5d023797", + "needsInterop": false + }, + "element-plus/es/components/radio/style/css": { + "src": "../../element-plus/es/components/radio/style/css.mjs", + "file": "element-plus_es_components_radio_style_css.js", + "fileHash": "7013a88b", + "needsInterop": false + }, + "element-plus/es/components/switch/style/css": { + "src": "../../element-plus/es/components/switch/style/css.mjs", + "file": "element-plus_es_components_switch_style_css.js", + "fileHash": "9c2d7cdf", + "needsInterop": false + }, + "@wangeditor/editor-for-vue": { + "src": "../../@wangeditor/editor-for-vue/dist/index.esm.js", + "file": "@wangeditor_editor-for-vue.js", + "fileHash": "d16802eb", + "needsInterop": false + }, + "element-plus/es/components/upload/style/css": { + "src": "../../element-plus/es/components/upload/style/css.mjs", + "file": "element-plus_es_components_upload_style_css.js", + "fileHash": "7a2dd68a", + "needsInterop": false + }, + "element-plus/es/components/image/style/css": { + "src": "../../element-plus/es/components/image/style/css.mjs", + "file": "element-plus_es_components_image_style_css.js", + "fileHash": "b70cc47f", "needsInterop": false } }, "chunks": { - "chunk-4PW274X2": { - "file": "chunk-4PW274X2.js" + "chunk-UONBUPA2": { + "file": "chunk-UONBUPA2.js" }, - "chunk-B2YDYSZR": { - "file": "chunk-B2YDYSZR.js" + "chunk-VPJRTVUV": { + "file": "chunk-VPJRTVUV.js" }, - "chunk-75C4BP7B": { - "file": "chunk-75C4BP7B.js" + "chunk-FU6BXPW4": { + "file": "chunk-FU6BXPW4.js" }, - "chunk-UBLR4G7Q": { - "file": "chunk-UBLR4G7Q.js" + "chunk-CGXI5ONL": { + "file": "chunk-CGXI5ONL.js" }, - "chunk-5KK3TTMN": { - "file": "chunk-5KK3TTMN.js" + "chunk-3UWZ6IZW": { + "file": "chunk-3UWZ6IZW.js" }, - "chunk-R5DNQ3QC": { - "file": "chunk-R5DNQ3QC.js" + "chunk-DVSPEOSC": { + "file": "chunk-DVSPEOSC.js" }, - "chunk-NKQWFVTF": { - "file": "chunk-NKQWFVTF.js" + "chunk-PHTWDJV4": { + "file": "chunk-PHTWDJV4.js" }, - "chunk-REWOA3VH": { - "file": "chunk-REWOA3VH.js" + "chunk-EFJ4VOFN": { + "file": "chunk-EFJ4VOFN.js" }, - "chunk-TX5YLZ4O": { - "file": "chunk-TX5YLZ4O.js" + "chunk-4AQGC7O6": { + "file": "chunk-4AQGC7O6.js" }, - "chunk-SMFPDFTD": { - "file": "chunk-SMFPDFTD.js" + "chunk-VID4RN2V": { + "file": "chunk-VID4RN2V.js" }, - "chunk-JUCAMQ7P": { - "file": "chunk-JUCAMQ7P.js" + "chunk-I2FMO3TN": { + "file": "chunk-I2FMO3TN.js" }, - "chunk-IV6PSERC": { - "file": "chunk-IV6PSERC.js" + "chunk-PKGVV2AH": { + "file": "chunk-PKGVV2AH.js" }, - "chunk-6CKQ2YFZ": { - "file": "chunk-6CKQ2YFZ.js" + "chunk-QPJ3ZUOF": { + "file": "chunk-QPJ3ZUOF.js" }, - "chunk-OP4ZUAFM": { - "file": "chunk-OP4ZUAFM.js" + "chunk-47WSI2HY": { + "file": "chunk-47WSI2HY.js" + }, + "chunk-YAGW2SQC": { + "file": "chunk-YAGW2SQC.js" + }, + "chunk-L7WLSQ4R": { + "file": "chunk-L7WLSQ4R.js" + }, + "chunk-ELEEJBJQ": { + "file": "chunk-ELEEJBJQ.js" }, "chunk-QZC7O2C6": { "file": "chunk-QZC7O2C6.js" }, - "chunk-YFT6OQ5R": { - "file": "chunk-YFT6OQ5R.js" - }, - "chunk-HYZ2CRGS": { - "file": "chunk-HYZ2CRGS.js" - }, - "chunk-H2732BJL": { - "file": "chunk-H2732BJL.js" - }, "chunk-G3PMV62Z": { "file": "chunk-G3PMV62Z.js" } diff --git a/admin/node_modules/.vite/deps/axios.js.map b/admin/node_modules/.vite/deps/axios.js.map index 55b08e85..6168fcfe 100644 --- a/admin/node_modules/.vite/deps/axios.js.map +++ b/admin/node_modules/.vite/deps/axios.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../axios/lib/helpers/bind.js", "../../axios/lib/utils.js", "../../axios/lib/core/AxiosError.js", "../../axios/lib/helpers/null.js", "../../axios/lib/helpers/toFormData.js", "../../axios/lib/helpers/AxiosURLSearchParams.js", "../../axios/lib/helpers/buildURL.js", "../../axios/lib/core/InterceptorManager.js", "../../axios/lib/defaults/transitional.js", "../../axios/lib/platform/browser/classes/URLSearchParams.js", "../../axios/lib/platform/browser/classes/FormData.js", "../../axios/lib/platform/browser/classes/Blob.js", "../../axios/lib/platform/browser/index.js", "../../axios/lib/platform/common/utils.js", "../../axios/lib/platform/index.js", "../../axios/lib/helpers/toURLEncodedForm.js", "../../axios/lib/helpers/formDataToJSON.js", "../../axios/lib/defaults/index.js", "../../axios/lib/helpers/parseHeaders.js", "../../axios/lib/core/AxiosHeaders.js", "../../axios/lib/core/transformData.js", "../../axios/lib/cancel/isCancel.js", "../../axios/lib/cancel/CanceledError.js", "../../axios/lib/core/settle.js", "../../axios/lib/helpers/parseProtocol.js", "../../axios/lib/helpers/speedometer.js", "../../axios/lib/helpers/throttle.js", "../../axios/lib/helpers/progressEventReducer.js", "../../axios/lib/helpers/isURLSameOrigin.js", "../../axios/lib/helpers/cookies.js", "../../axios/lib/helpers/isAbsoluteURL.js", "../../axios/lib/helpers/combineURLs.js", "../../axios/lib/core/buildFullPath.js", "../../axios/lib/core/mergeConfig.js", "../../axios/lib/helpers/resolveConfig.js", "../../axios/lib/adapters/xhr.js", "../../axios/lib/helpers/composeSignals.js", "../../axios/lib/helpers/trackStream.js", "../../axios/lib/adapters/fetch.js", "../../axios/lib/adapters/adapters.js", "../../axios/lib/core/dispatchRequest.js", "../../axios/lib/env/data.js", "../../axios/lib/helpers/validator.js", "../../axios/lib/core/Axios.js", "../../axios/lib/cancel/CancelToken.js", "../../axios/lib/helpers/spread.js", "../../axios/lib/helpers/isAxiosError.js", "../../axios/lib/helpers/HttpStatusCode.js", "../../axios/lib/axios.js", "../../axios/index.js"], - "sourcesContent": ["'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n", "'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n", "// eslint-disable-next-line strict\nexport default null;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n", "'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n", "'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n", "'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n", "'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n", "'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n", "'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n", "import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n", "const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n", "import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n", "'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n", "'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n", "'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n", "'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n", "'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n", "'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n", "/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n", "import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n", "import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n", "import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n", "'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n", "import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n", "import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n", "\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n", "import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object}\n */\n adapters: knownAdapters\n};\n", "'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n", "export const VERSION = \"1.13.2\";", "'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n", "'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n", "'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n", "'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n", "const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n", "'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n", "import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n"], + "sourcesContent": ["'use strict';\r\n\r\n/**\r\n * Create a bound version of a function with a specified `this` context\r\n *\r\n * @param {Function} fn - The function to bind\r\n * @param {*} thisArg - The value to be passed as the `this` parameter\r\n * @returns {Function} A new function that will call the original function with the specified `this` context\r\n */\r\nexport default function bind(fn, thisArg) {\r\n return function wrap() {\r\n return fn.apply(thisArg, arguments);\r\n };\r\n}\r\n", "'use strict';\r\n\r\nimport bind from './helpers/bind.js';\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nconst {toString} = Object.prototype;\r\nconst {getPrototypeOf} = Object;\r\nconst {iterator, toStringTag} = Symbol;\r\n\r\nconst kindOf = (cache => thing => {\r\n const str = toString.call(thing);\r\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\r\n})(Object.create(null));\r\n\r\nconst kindOfTest = (type) => {\r\n type = type.toLowerCase();\r\n return (thing) => kindOf(thing) === type\r\n}\r\n\r\nconst typeOfTest = type => thing => typeof thing === type;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n *\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nconst {isArray} = Array;\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nconst isUndefined = typeOfTest('undefined');\r\n\r\n/**\r\n * Determine if a value is a Buffer\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is a Buffer, otherwise false\r\n */\r\nfunction isBuffer(val) {\r\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\r\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\r\n\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n let result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nconst isString = typeOfTest('string');\r\n\r\n/**\r\n * Determine if a value is a Function\r\n *\r\n * @param {*} val The value to test\r\n * @returns {boolean} True if value is a Function, otherwise false\r\n */\r\nconst isFunction = typeOfTest('function');\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nconst isNumber = typeOfTest('number');\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {*} thing The value to test\r\n *\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\r\n\r\n/**\r\n * Determine if a value is a Boolean\r\n *\r\n * @param {*} thing The value to test\r\n * @returns {boolean} True if value is a Boolean, otherwise false\r\n */\r\nconst isBoolean = thing => thing === true || thing === false;\r\n\r\n/**\r\n * Determine if a value is a plain Object\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is a plain Object, otherwise false\r\n */\r\nconst isPlainObject = (val) => {\r\n if (kindOf(val) !== 'object') {\r\n return false;\r\n }\r\n\r\n const prototype = getPrototypeOf(val);\r\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\r\n}\r\n\r\n/**\r\n * Determine if a value is an empty object (safely handles Buffers)\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is an empty object, otherwise false\r\n */\r\nconst isEmptyObject = (val) => {\r\n // Early return for non-objects or Buffers to prevent RangeError\r\n if (!isObject(val) || isBuffer(val)) {\r\n return false;\r\n }\r\n\r\n try {\r\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\r\n } catch (e) {\r\n // Fallback for any other objects that might cause RangeError with Object.keys()\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nconst isDate = kindOfTest('Date');\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nconst isFile = kindOfTest('File');\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nconst isBlob = kindOfTest('Blob');\r\n\r\n/**\r\n * Determine if a value is a FileList\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nconst isFileList = kindOfTest('FileList');\r\n\r\n/**\r\n * Determine if a value is a Stream\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is a Stream, otherwise false\r\n */\r\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {*} thing The value to test\r\n *\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nconst isFormData = (thing) => {\r\n let kind;\r\n return thing && (\r\n (typeof FormData === 'function' && thing instanceof FormData) || (\r\n isFunction(thing.append) && (\r\n (kind = kindOf(thing)) === 'formdata' ||\r\n // detect form-data instance\r\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\r\n )\r\n )\r\n )\r\n}\r\n\r\n/**\r\n * Determine if a value is a URLSearchParams object\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\r\n */\r\nconst isURLSearchParams = kindOfTest('URLSearchParams');\r\n\r\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n *\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nconst trim = (str) => str.trim ?\r\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n *\r\n * @param {Boolean} [allOwnKeys = false]\r\n * @returns {any}\r\n */\r\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n let i;\r\n let l;\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object') {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Buffer check\r\n if (isBuffer(obj)) {\r\n return;\r\n }\r\n\r\n // Iterate over object keys\r\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\r\n const len = keys.length;\r\n let key;\r\n\r\n for (i = 0; i < len; i++) {\r\n key = keys[i];\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n}\r\n\r\nfunction findKey(obj, key) {\r\n if (isBuffer(obj)){\r\n return null;\r\n }\r\n\r\n key = key.toLowerCase();\r\n const keys = Object.keys(obj);\r\n let i = keys.length;\r\n let _key;\r\n while (i-- > 0) {\r\n _key = keys[i];\r\n if (key === _key.toLowerCase()) {\r\n return _key;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nconst _global = (() => {\r\n /*eslint no-undef:0*/\r\n if (typeof globalThis !== \"undefined\") return globalThis;\r\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\r\n})();\r\n\r\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n *\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\r\n const result = {};\r\n const assignValue = (val, key) => {\r\n const targetKey = caseless && findKey(result, key) || key;\r\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\r\n result[targetKey] = merge(result[targetKey], val);\r\n } else if (isPlainObject(val)) {\r\n result[targetKey] = merge({}, val);\r\n } else if (isArray(val)) {\r\n result[targetKey] = val.slice();\r\n } else if (!skipUndefined || !isUndefined(val)) {\r\n result[targetKey] = val;\r\n }\r\n }\r\n\r\n for (let i = 0, l = arguments.length; i < l; i++) {\r\n arguments[i] && forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Extends object a by mutably adding to it the properties of object b.\r\n *\r\n * @param {Object} a The object to be extended\r\n * @param {Object} b The object to copy properties from\r\n * @param {Object} thisArg The object to bind function to\r\n *\r\n * @param {Boolean} [allOwnKeys]\r\n * @returns {Object} The resulting value of object a\r\n */\r\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\r\n forEach(b, (val, key) => {\r\n if (thisArg && isFunction(val)) {\r\n a[key] = bind(val, thisArg);\r\n } else {\r\n a[key] = val;\r\n }\r\n }, {allOwnKeys});\r\n return a;\r\n}\r\n\r\n/**\r\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\r\n *\r\n * @param {string} content with BOM\r\n *\r\n * @returns {string} content value without BOM\r\n */\r\nconst stripBOM = (content) => {\r\n if (content.charCodeAt(0) === 0xFEFF) {\r\n content = content.slice(1);\r\n }\r\n return content;\r\n}\r\n\r\n/**\r\n * Inherit the prototype methods from one constructor into another\r\n * @param {function} constructor\r\n * @param {function} superConstructor\r\n * @param {object} [props]\r\n * @param {object} [descriptors]\r\n *\r\n * @returns {void}\r\n */\r\nconst inherits = (constructor, superConstructor, props, descriptors) => {\r\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\r\n constructor.prototype.constructor = constructor;\r\n Object.defineProperty(constructor, 'super', {\r\n value: superConstructor.prototype\r\n });\r\n props && Object.assign(constructor.prototype, props);\r\n}\r\n\r\n/**\r\n * Resolve object with deep prototype chain to a flat object\r\n * @param {Object} sourceObj source object\r\n * @param {Object} [destObj]\r\n * @param {Function|Boolean} [filter]\r\n * @param {Function} [propFilter]\r\n *\r\n * @returns {Object}\r\n */\r\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\r\n let props;\r\n let i;\r\n let prop;\r\n const merged = {};\r\n\r\n destObj = destObj || {};\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n if (sourceObj == null) return destObj;\r\n\r\n do {\r\n props = Object.getOwnPropertyNames(sourceObj);\r\n i = props.length;\r\n while (i-- > 0) {\r\n prop = props[i];\r\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\r\n destObj[prop] = sourceObj[prop];\r\n merged[prop] = true;\r\n }\r\n }\r\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\r\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\r\n\r\n return destObj;\r\n}\r\n\r\n/**\r\n * Determines whether a string ends with the characters of a specified string\r\n *\r\n * @param {String} str\r\n * @param {String} searchString\r\n * @param {Number} [position= 0]\r\n *\r\n * @returns {boolean}\r\n */\r\nconst endsWith = (str, searchString, position) => {\r\n str = String(str);\r\n if (position === undefined || position > str.length) {\r\n position = str.length;\r\n }\r\n position -= searchString.length;\r\n const lastIndex = str.indexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n}\r\n\r\n\r\n/**\r\n * Returns new array from array like object or null if failed\r\n *\r\n * @param {*} [thing]\r\n *\r\n * @returns {?Array}\r\n */\r\nconst toArray = (thing) => {\r\n if (!thing) return null;\r\n if (isArray(thing)) return thing;\r\n let i = thing.length;\r\n if (!isNumber(i)) return null;\r\n const arr = new Array(i);\r\n while (i-- > 0) {\r\n arr[i] = thing[i];\r\n }\r\n return arr;\r\n}\r\n\r\n/**\r\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\r\n * thing passed in is an instance of Uint8Array\r\n *\r\n * @param {TypedArray}\r\n *\r\n * @returns {Array}\r\n */\r\n// eslint-disable-next-line func-names\r\nconst isTypedArray = (TypedArray => {\r\n // eslint-disable-next-line func-names\r\n return thing => {\r\n return TypedArray && thing instanceof TypedArray;\r\n };\r\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\r\n\r\n/**\r\n * For each entry in the object, call the function with the key and value.\r\n *\r\n * @param {Object} obj - The object to iterate over.\r\n * @param {Function} fn - The function to call for each entry.\r\n *\r\n * @returns {void}\r\n */\r\nconst forEachEntry = (obj, fn) => {\r\n const generator = obj && obj[iterator];\r\n\r\n const _iterator = generator.call(obj);\r\n\r\n let result;\r\n\r\n while ((result = _iterator.next()) && !result.done) {\r\n const pair = result.value;\r\n fn.call(obj, pair[0], pair[1]);\r\n }\r\n}\r\n\r\n/**\r\n * It takes a regular expression and a string, and returns an array of all the matches\r\n *\r\n * @param {string} regExp - The regular expression to match against.\r\n * @param {string} str - The string to search.\r\n *\r\n * @returns {Array}\r\n */\r\nconst matchAll = (regExp, str) => {\r\n let matches;\r\n const arr = [];\r\n\r\n while ((matches = regExp.exec(str)) !== null) {\r\n arr.push(matches);\r\n }\r\n\r\n return arr;\r\n}\r\n\r\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\r\nconst isHTMLForm = kindOfTest('HTMLFormElement');\r\n\r\nconst toCamelCase = str => {\r\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\r\n function replacer(m, p1, p2) {\r\n return p1.toUpperCase() + p2;\r\n }\r\n );\r\n};\r\n\r\n/* Creating a function that will check if an object has a property. */\r\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\r\n\r\n/**\r\n * Determine if a value is a RegExp object\r\n *\r\n * @param {*} val The value to test\r\n *\r\n * @returns {boolean} True if value is a RegExp object, otherwise false\r\n */\r\nconst isRegExp = kindOfTest('RegExp');\r\n\r\nconst reduceDescriptors = (obj, reducer) => {\r\n const descriptors = Object.getOwnPropertyDescriptors(obj);\r\n const reducedDescriptors = {};\r\n\r\n forEach(descriptors, (descriptor, name) => {\r\n let ret;\r\n if ((ret = reducer(descriptor, name, obj)) !== false) {\r\n reducedDescriptors[name] = ret || descriptor;\r\n }\r\n });\r\n\r\n Object.defineProperties(obj, reducedDescriptors);\r\n}\r\n\r\n/**\r\n * Makes all methods read-only\r\n * @param {Object} obj\r\n */\r\n\r\nconst freezeMethods = (obj) => {\r\n reduceDescriptors(obj, (descriptor, name) => {\r\n // skip restricted props in strict mode\r\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\r\n return false;\r\n }\r\n\r\n const value = obj[name];\r\n\r\n if (!isFunction(value)) return;\r\n\r\n descriptor.enumerable = false;\r\n\r\n if ('writable' in descriptor) {\r\n descriptor.writable = false;\r\n return;\r\n }\r\n\r\n if (!descriptor.set) {\r\n descriptor.set = () => {\r\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\r\n };\r\n }\r\n });\r\n}\r\n\r\nconst toObjectSet = (arrayOrString, delimiter) => {\r\n const obj = {};\r\n\r\n const define = (arr) => {\r\n arr.forEach(value => {\r\n obj[value] = true;\r\n });\r\n }\r\n\r\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\r\n\r\n return obj;\r\n}\r\n\r\nconst noop = () => {}\r\n\r\nconst toFiniteNumber = (value, defaultValue) => {\r\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\r\n}\r\n\r\n\r\n\r\n/**\r\n * If the thing is a FormData object, return true, otherwise return false.\r\n *\r\n * @param {unknown} thing - The thing to check.\r\n *\r\n * @returns {boolean}\r\n */\r\nfunction isSpecCompliantForm(thing) {\r\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\r\n}\r\n\r\nconst toJSONObject = (obj) => {\r\n const stack = new Array(10);\r\n\r\n const visit = (source, i) => {\r\n\r\n if (isObject(source)) {\r\n if (stack.indexOf(source) >= 0) {\r\n return;\r\n }\r\n\r\n //Buffer check\r\n if (isBuffer(source)) {\r\n return source;\r\n }\r\n\r\n if(!('toJSON' in source)) {\r\n stack[i] = source;\r\n const target = isArray(source) ? [] : {};\r\n\r\n forEach(source, (value, key) => {\r\n const reducedValue = visit(value, i + 1);\r\n !isUndefined(reducedValue) && (target[key] = reducedValue);\r\n });\r\n\r\n stack[i] = undefined;\r\n\r\n return target;\r\n }\r\n }\r\n\r\n return source;\r\n }\r\n\r\n return visit(obj, 0);\r\n}\r\n\r\nconst isAsyncFn = kindOfTest('AsyncFunction');\r\n\r\nconst isThenable = (thing) =>\r\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\r\n\r\n// original code\r\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\r\n\r\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\r\n if (setImmediateSupported) {\r\n return setImmediate;\r\n }\r\n\r\n return postMessageSupported ? ((token, callbacks) => {\r\n _global.addEventListener(\"message\", ({source, data}) => {\r\n if (source === _global && data === token) {\r\n callbacks.length && callbacks.shift()();\r\n }\r\n }, false);\r\n\r\n return (cb) => {\r\n callbacks.push(cb);\r\n _global.postMessage(token, \"*\");\r\n }\r\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\r\n})(\r\n typeof setImmediate === 'function',\r\n isFunction(_global.postMessage)\r\n);\r\n\r\nconst asap = typeof queueMicrotask !== 'undefined' ?\r\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\r\n\r\n// *********************\r\n\r\n\r\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\r\n\r\n\r\nexport default {\r\n isArray,\r\n isArrayBuffer,\r\n isBuffer,\r\n isFormData,\r\n isArrayBufferView,\r\n isString,\r\n isNumber,\r\n isBoolean,\r\n isObject,\r\n isPlainObject,\r\n isEmptyObject,\r\n isReadableStream,\r\n isRequest,\r\n isResponse,\r\n isHeaders,\r\n isUndefined,\r\n isDate,\r\n isFile,\r\n isBlob,\r\n isRegExp,\r\n isFunction,\r\n isStream,\r\n isURLSearchParams,\r\n isTypedArray,\r\n isFileList,\r\n forEach,\r\n merge,\r\n extend,\r\n trim,\r\n stripBOM,\r\n inherits,\r\n toFlatObject,\r\n kindOf,\r\n kindOfTest,\r\n endsWith,\r\n toArray,\r\n forEachEntry,\r\n matchAll,\r\n isHTMLForm,\r\n hasOwnProperty,\r\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\r\n reduceDescriptors,\r\n freezeMethods,\r\n toObjectSet,\r\n toCamelCase,\r\n noop,\r\n toFiniteNumber,\r\n findKey,\r\n global: _global,\r\n isContextDefined,\r\n isSpecCompliantForm,\r\n toJSONObject,\r\n isAsyncFn,\r\n isThenable,\r\n setImmediate: _setImmediate,\r\n asap,\r\n isIterable\r\n};\r\n", "'use strict';\r\n\r\nimport utils from '../utils.js';\r\n\r\n/**\r\n * Create an Error with the specified message, config, error code, request and response.\r\n *\r\n * @param {string} message The error message.\r\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\r\n * @param {Object} [config] The config.\r\n * @param {Object} [request] The request.\r\n * @param {Object} [response] The response.\r\n *\r\n * @returns {Error} The created error.\r\n */\r\nfunction AxiosError(message, code, config, request, response) {\r\n Error.call(this);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, this.constructor);\r\n } else {\r\n this.stack = (new Error()).stack;\r\n }\r\n\r\n this.message = message;\r\n this.name = 'AxiosError';\r\n code && (this.code = code);\r\n config && (this.config = config);\r\n request && (this.request = request);\r\n if (response) {\r\n this.response = response;\r\n this.status = response.status ? response.status : null;\r\n }\r\n}\r\n\r\nutils.inherits(AxiosError, Error, {\r\n toJSON: function toJSON() {\r\n return {\r\n // Standard\r\n message: this.message,\r\n name: this.name,\r\n // Microsoft\r\n description: this.description,\r\n number: this.number,\r\n // Mozilla\r\n fileName: this.fileName,\r\n lineNumber: this.lineNumber,\r\n columnNumber: this.columnNumber,\r\n stack: this.stack,\r\n // Axios\r\n config: utils.toJSONObject(this.config),\r\n code: this.code,\r\n status: this.status\r\n };\r\n }\r\n});\r\n\r\nconst prototype = AxiosError.prototype;\r\nconst descriptors = {};\r\n\r\n[\r\n 'ERR_BAD_OPTION_VALUE',\r\n 'ERR_BAD_OPTION',\r\n 'ECONNABORTED',\r\n 'ETIMEDOUT',\r\n 'ERR_NETWORK',\r\n 'ERR_FR_TOO_MANY_REDIRECTS',\r\n 'ERR_DEPRECATED',\r\n 'ERR_BAD_RESPONSE',\r\n 'ERR_BAD_REQUEST',\r\n 'ERR_CANCELED',\r\n 'ERR_NOT_SUPPORT',\r\n 'ERR_INVALID_URL'\r\n// eslint-disable-next-line func-names\r\n].forEach(code => {\r\n descriptors[code] = {value: code};\r\n});\r\n\r\nObject.defineProperties(AxiosError, descriptors);\r\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\r\n\r\n// eslint-disable-next-line func-names\r\nAxiosError.from = (error, code, config, request, response, customProps) => {\r\n const axiosError = Object.create(prototype);\r\n\r\n utils.toFlatObject(error, axiosError, function filter(obj) {\r\n return obj !== Error.prototype;\r\n }, prop => {\r\n return prop !== 'isAxiosError';\r\n });\r\n\r\n const msg = error && error.message ? error.message : 'Error';\r\n\r\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\r\n const errCode = code == null && error ? error.code : code;\r\n AxiosError.call(axiosError, msg, errCode, config, request, response);\r\n\r\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\r\n if (error && axiosError.cause == null) {\r\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\r\n }\r\n\r\n axiosError.name = (error && error.name) || 'Error';\r\n\r\n customProps && Object.assign(axiosError, customProps);\r\n\r\n return axiosError;\r\n};\r\n\r\nexport default AxiosError;\r\n", "// eslint-disable-next-line strict\r\nexport default null;\r\n", "'use strict';\r\n\r\nimport utils from '../utils.js';\r\nimport AxiosError from '../core/AxiosError.js';\r\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\r\nimport PlatformFormData from '../platform/node/classes/FormData.js';\r\n\r\n/**\r\n * Determines if the given thing is a array or js object.\r\n *\r\n * @param {string} thing - The object or array to be visited.\r\n *\r\n * @returns {boolean}\r\n */\r\nfunction isVisitable(thing) {\r\n return utils.isPlainObject(thing) || utils.isArray(thing);\r\n}\r\n\r\n/**\r\n * It removes the brackets from the end of a string\r\n *\r\n * @param {string} key - The key of the parameter.\r\n *\r\n * @returns {string} the key without the brackets.\r\n */\r\nfunction removeBrackets(key) {\r\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\r\n}\r\n\r\n/**\r\n * It takes a path, a key, and a boolean, and returns a string\r\n *\r\n * @param {string} path - The path to the current key.\r\n * @param {string} key - The key of the current object being iterated over.\r\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\r\n *\r\n * @returns {string} The path to the current key.\r\n */\r\nfunction renderKey(path, key, dots) {\r\n if (!path) return key;\r\n return path.concat(key).map(function each(token, i) {\r\n // eslint-disable-next-line no-param-reassign\r\n token = removeBrackets(token);\r\n return !dots && i ? '[' + token + ']' : token;\r\n }).join(dots ? '.' : '');\r\n}\r\n\r\n/**\r\n * If the array is an array and none of its elements are visitable, then it's a flat array.\r\n *\r\n * @param {Array} arr - The array to check\r\n *\r\n * @returns {boolean}\r\n */\r\nfunction isFlatArray(arr) {\r\n return utils.isArray(arr) && !arr.some(isVisitable);\r\n}\r\n\r\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\r\n return /^is[A-Z]/.test(prop);\r\n});\r\n\r\n/**\r\n * Convert a data object to FormData\r\n *\r\n * @param {Object} obj\r\n * @param {?Object} [formData]\r\n * @param {?Object} [options]\r\n * @param {Function} [options.visitor]\r\n * @param {Boolean} [options.metaTokens = true]\r\n * @param {Boolean} [options.dots = false]\r\n * @param {?Boolean} [options.indexes = false]\r\n *\r\n * @returns {Object}\r\n **/\r\n\r\n/**\r\n * It converts an object into a FormData object\r\n *\r\n * @param {Object} obj - The object to convert to form data.\r\n * @param {string} formData - The FormData object to append to.\r\n * @param {Object} options\r\n *\r\n * @returns\r\n */\r\nfunction toFormData(obj, formData, options) {\r\n if (!utils.isObject(obj)) {\r\n throw new TypeError('target must be an object');\r\n }\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n formData = formData || new (PlatformFormData || FormData)();\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n options = utils.toFlatObject(options, {\r\n metaTokens: true,\r\n dots: false,\r\n indexes: false\r\n }, false, function defined(option, source) {\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n return !utils.isUndefined(source[option]);\r\n });\r\n\r\n const metaTokens = options.metaTokens;\r\n // eslint-disable-next-line no-use-before-define\r\n const visitor = options.visitor || defaultVisitor;\r\n const dots = options.dots;\r\n const indexes = options.indexes;\r\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\r\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\r\n\r\n if (!utils.isFunction(visitor)) {\r\n throw new TypeError('visitor must be a function');\r\n }\r\n\r\n function convertValue(value) {\r\n if (value === null) return '';\r\n\r\n if (utils.isDate(value)) {\r\n return value.toISOString();\r\n }\r\n\r\n if (utils.isBoolean(value)) {\r\n return value.toString();\r\n }\r\n\r\n if (!useBlob && utils.isBlob(value)) {\r\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\r\n }\r\n\r\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\r\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Default visitor.\r\n *\r\n * @param {*} value\r\n * @param {String|Number} key\r\n * @param {Array} path\r\n * @this {FormData}\r\n *\r\n * @returns {boolean} return true to visit the each prop of the value recursively\r\n */\r\n function defaultVisitor(value, key, path) {\r\n let arr = value;\r\n\r\n if (value && !path && typeof value === 'object') {\r\n if (utils.endsWith(key, '{}')) {\r\n // eslint-disable-next-line no-param-reassign\r\n key = metaTokens ? key : key.slice(0, -2);\r\n // eslint-disable-next-line no-param-reassign\r\n value = JSON.stringify(value);\r\n } else if (\r\n (utils.isArray(value) && isFlatArray(value)) ||\r\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\r\n )) {\r\n // eslint-disable-next-line no-param-reassign\r\n key = removeBrackets(key);\r\n\r\n arr.forEach(function each(el, index) {\r\n !(utils.isUndefined(el) || el === null) && formData.append(\r\n // eslint-disable-next-line no-nested-ternary\r\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\r\n convertValue(el)\r\n );\r\n });\r\n return false;\r\n }\r\n }\r\n\r\n if (isVisitable(value)) {\r\n return true;\r\n }\r\n\r\n formData.append(renderKey(path, key, dots), convertValue(value));\r\n\r\n return false;\r\n }\r\n\r\n const stack = [];\r\n\r\n const exposedHelpers = Object.assign(predicates, {\r\n defaultVisitor,\r\n convertValue,\r\n isVisitable\r\n });\r\n\r\n function build(value, path) {\r\n if (utils.isUndefined(value)) return;\r\n\r\n if (stack.indexOf(value) !== -1) {\r\n throw Error('Circular reference detected in ' + path.join('.'));\r\n }\r\n\r\n stack.push(value);\r\n\r\n utils.forEach(value, function each(el, key) {\r\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\r\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\r\n );\r\n\r\n if (result === true) {\r\n build(el, path ? path.concat(key) : [key]);\r\n }\r\n });\r\n\r\n stack.pop();\r\n }\r\n\r\n if (!utils.isObject(obj)) {\r\n throw new TypeError('data must be an object');\r\n }\r\n\r\n build(obj);\r\n\r\n return formData;\r\n}\r\n\r\nexport default toFormData;\r\n", "'use strict';\r\n\r\nimport toFormData from './toFormData.js';\r\n\r\n/**\r\n * It encodes a string by replacing all characters that are not in the unreserved set with\r\n * their percent-encoded equivalents\r\n *\r\n * @param {string} str - The string to encode.\r\n *\r\n * @returns {string} The encoded string.\r\n */\r\nfunction encode(str) {\r\n const charMap = {\r\n '!': '%21',\r\n \"'\": '%27',\r\n '(': '%28',\r\n ')': '%29',\r\n '~': '%7E',\r\n '%20': '+',\r\n '%00': '\\x00'\r\n };\r\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\r\n return charMap[match];\r\n });\r\n}\r\n\r\n/**\r\n * It takes a params object and converts it to a FormData object\r\n *\r\n * @param {Object} params - The parameters to be converted to a FormData object.\r\n * @param {Object} options - The options object passed to the Axios constructor.\r\n *\r\n * @returns {void}\r\n */\r\nfunction AxiosURLSearchParams(params, options) {\r\n this._pairs = [];\r\n\r\n params && toFormData(params, this, options);\r\n}\r\n\r\nconst prototype = AxiosURLSearchParams.prototype;\r\n\r\nprototype.append = function append(name, value) {\r\n this._pairs.push([name, value]);\r\n};\r\n\r\nprototype.toString = function toString(encoder) {\r\n const _encode = encoder ? function(value) {\r\n return encoder.call(this, value, encode);\r\n } : encode;\r\n\r\n return this._pairs.map(function each(pair) {\r\n return _encode(pair[0]) + '=' + _encode(pair[1]);\r\n }, '').join('&');\r\n};\r\n\r\nexport default AxiosURLSearchParams;\r\n", "'use strict';\r\n\r\nimport utils from '../utils.js';\r\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\r\n\r\n/**\r\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\r\n * URI encoded counterparts\r\n *\r\n * @param {string} val The value to be encoded.\r\n *\r\n * @returns {string} The encoded value.\r\n */\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @param {?(object|Function)} options\r\n *\r\n * @returns {string} The formatted url\r\n */\r\nexport default function buildURL(url, params, options) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n \r\n const _encode = options && options.encode || encode;\r\n\r\n if (utils.isFunction(options)) {\r\n options = {\r\n serialize: options\r\n };\r\n } \r\n\r\n const serializeFn = options && options.serialize;\r\n\r\n let serializedParams;\r\n\r\n if (serializeFn) {\r\n serializedParams = serializeFn(params, options);\r\n } else {\r\n serializedParams = utils.isURLSearchParams(params) ?\r\n params.toString() :\r\n new AxiosURLSearchParams(params, options).toString(_encode);\r\n }\r\n\r\n if (serializedParams) {\r\n const hashmarkIndex = url.indexOf(\"#\");\r\n\r\n if (hashmarkIndex !== -1) {\r\n url = url.slice(0, hashmarkIndex);\r\n }\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n}\r\n", "'use strict';\r\n\r\nimport utils from './../utils.js';\r\n\r\nclass InterceptorManager {\r\n constructor() {\r\n this.handlers = [];\r\n }\r\n\r\n /**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\n use(fulfilled, rejected, options) {\r\n this.handlers.push({\r\n fulfilled,\r\n rejected,\r\n synchronous: options ? options.synchronous : false,\r\n runWhen: options ? options.runWhen : null\r\n });\r\n return this.handlers.length - 1;\r\n }\r\n\r\n /**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n *\r\n * @returns {void}\r\n */\r\n eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear all interceptors from the stack\r\n *\r\n * @returns {void}\r\n */\r\n clear() {\r\n if (this.handlers) {\r\n this.handlers = [];\r\n }\r\n }\r\n\r\n /**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n *\r\n * @returns {void}\r\n */\r\n forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default InterceptorManager;\r\n", "'use strict';\r\n\r\nexport default {\r\n silentJSONParsing: true,\r\n forcedJSONParsing: true,\r\n clarifyTimeoutError: false\r\n};\r\n", "'use strict';\r\n\r\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\r\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\r\n", "'use strict';\r\n\r\nexport default typeof FormData !== 'undefined' ? FormData : null;\r\n", "'use strict'\r\n\r\nexport default typeof Blob !== 'undefined' ? Blob : null\r\n", "import URLSearchParams from './classes/URLSearchParams.js'\r\nimport FormData from './classes/FormData.js'\r\nimport Blob from './classes/Blob.js'\r\n\r\nexport default {\r\n isBrowser: true,\r\n classes: {\r\n URLSearchParams,\r\n FormData,\r\n Blob\r\n },\r\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\r\n};\r\n", "const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\r\n\r\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * navigator.product -> 'ReactNative'\r\n * nativescript\r\n * navigator.product -> 'NativeScript' or 'NS'\r\n *\r\n * @returns {boolean}\r\n */\r\nconst hasStandardBrowserEnv = hasBrowserEnv &&\r\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\r\n\r\n/**\r\n * Determine if we're running in a standard browser webWorker environment\r\n *\r\n * Although the `isStandardBrowserEnv` method indicates that\r\n * `allows axios to run in a web worker`, the WebWorker will still be\r\n * filtered out due to its judgment standard\r\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\r\n * This leads to a problem when axios post `FormData` in webWorker\r\n */\r\nconst hasStandardBrowserWebWorkerEnv = (() => {\r\n return (\r\n typeof WorkerGlobalScope !== 'undefined' &&\r\n // eslint-disable-next-line no-undef\r\n self instanceof WorkerGlobalScope &&\r\n typeof self.importScripts === 'function'\r\n );\r\n})();\r\n\r\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\r\n\r\nexport {\r\n hasBrowserEnv,\r\n hasStandardBrowserWebWorkerEnv,\r\n hasStandardBrowserEnv,\r\n _navigator as navigator,\r\n origin\r\n}\r\n", "import platform from './node/index.js';\r\nimport * as utils from './common/utils.js';\r\n\r\nexport default {\r\n ...utils,\r\n ...platform\r\n}\r\n", "'use strict';\r\n\r\nimport utils from '../utils.js';\r\nimport toFormData from './toFormData.js';\r\nimport platform from '../platform/index.js';\r\n\r\nexport default function toURLEncodedForm(data, options) {\r\n return toFormData(data, new platform.classes.URLSearchParams(), {\r\n visitor: function(value, key, path, helpers) {\r\n if (platform.isNode && utils.isBuffer(value)) {\r\n this.append(key, value.toString('base64'));\r\n return false;\r\n }\r\n\r\n return helpers.defaultVisitor.apply(this, arguments);\r\n },\r\n ...options\r\n });\r\n}\r\n", "'use strict';\r\n\r\nimport utils from '../utils.js';\r\n\r\n/**\r\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\r\n *\r\n * @param {string} name - The name of the property to get.\r\n *\r\n * @returns An array of strings.\r\n */\r\nfunction parsePropPath(name) {\r\n // foo[x][y][z]\r\n // foo.x.y.z\r\n // foo-x-y-z\r\n // foo x y z\r\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\r\n return match[0] === '[]' ? '' : match[1] || match[0];\r\n });\r\n}\r\n\r\n/**\r\n * Convert an array to an object.\r\n *\r\n * @param {Array} arr - The array to convert to an object.\r\n *\r\n * @returns An object with the same keys and values as the array.\r\n */\r\nfunction arrayToObject(arr) {\r\n const obj = {};\r\n const keys = Object.keys(arr);\r\n let i;\r\n const len = keys.length;\r\n let key;\r\n for (i = 0; i < len; i++) {\r\n key = keys[i];\r\n obj[key] = arr[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * It takes a FormData object and returns a JavaScript object\r\n *\r\n * @param {string} formData The FormData object to convert to JSON.\r\n *\r\n * @returns {Object | null} The converted object.\r\n */\r\nfunction formDataToJSON(formData) {\r\n function buildPath(path, value, target, index) {\r\n let name = path[index++];\r\n\r\n if (name === '__proto__') return true;\r\n\r\n const isNumericKey = Number.isFinite(+name);\r\n const isLast = index >= path.length;\r\n name = !name && utils.isArray(target) ? target.length : name;\r\n\r\n if (isLast) {\r\n if (utils.hasOwnProp(target, name)) {\r\n target[name] = [target[name], value];\r\n } else {\r\n target[name] = value;\r\n }\r\n\r\n return !isNumericKey;\r\n }\r\n\r\n if (!target[name] || !utils.isObject(target[name])) {\r\n target[name] = [];\r\n }\r\n\r\n const result = buildPath(path, value, target[name], index);\r\n\r\n if (result && utils.isArray(target[name])) {\r\n target[name] = arrayToObject(target[name]);\r\n }\r\n\r\n return !isNumericKey;\r\n }\r\n\r\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\r\n const obj = {};\r\n\r\n utils.forEachEntry(formData, (name, value) => {\r\n buildPath(parsePropPath(name), value, obj, 0);\r\n });\r\n\r\n return obj;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport default formDataToJSON;\r\n", "'use strict';\r\n\r\nimport utils from '../utils.js';\r\nimport AxiosError from '../core/AxiosError.js';\r\nimport transitionalDefaults from './transitional.js';\r\nimport toFormData from '../helpers/toFormData.js';\r\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\r\nimport platform from '../platform/index.js';\r\nimport formDataToJSON from '../helpers/formDataToJSON.js';\r\n\r\n/**\r\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\r\n * of the input\r\n *\r\n * @param {any} rawValue - The value to be stringified.\r\n * @param {Function} parser - A function that parses a string into a JavaScript object.\r\n * @param {Function} encoder - A function that takes a value and returns a string.\r\n *\r\n * @returns {string} A stringified version of the rawValue.\r\n */\r\nfunction stringifySafely(rawValue, parser, encoder) {\r\n if (utils.isString(rawValue)) {\r\n try {\r\n (parser || JSON.parse)(rawValue);\r\n return utils.trim(rawValue);\r\n } catch (e) {\r\n if (e.name !== 'SyntaxError') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n return (encoder || JSON.stringify)(rawValue);\r\n}\r\n\r\nconst defaults = {\r\n\r\n transitional: transitionalDefaults,\r\n\r\n adapter: ['xhr', 'http', 'fetch'],\r\n\r\n transformRequest: [function transformRequest(data, headers) {\r\n const contentType = headers.getContentType() || '';\r\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\r\n const isObjectPayload = utils.isObject(data);\r\n\r\n if (isObjectPayload && utils.isHTMLForm(data)) {\r\n data = new FormData(data);\r\n }\r\n\r\n const isFormData = utils.isFormData(data);\r\n\r\n if (isFormData) {\r\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\r\n }\r\n\r\n if (utils.isArrayBuffer(data) ||\r\n utils.isBuffer(data) ||\r\n utils.isStream(data) ||\r\n utils.isFile(data) ||\r\n utils.isBlob(data) ||\r\n utils.isReadableStream(data)\r\n ) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isURLSearchParams(data)) {\r\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\r\n return data.toString();\r\n }\r\n\r\n let isFileList;\r\n\r\n if (isObjectPayload) {\r\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\r\n return toURLEncodedForm(data, this.formSerializer).toString();\r\n }\r\n\r\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\r\n const _FormData = this.env && this.env.FormData;\r\n\r\n return toFormData(\r\n isFileList ? {'files[]': data} : data,\r\n _FormData && new _FormData(),\r\n this.formSerializer\r\n );\r\n }\r\n }\r\n\r\n if (isObjectPayload || hasJSONContentType ) {\r\n headers.setContentType('application/json', false);\r\n return stringifySafely(data);\r\n }\r\n\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponse(data) {\r\n const transitional = this.transitional || defaults.transitional;\r\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\r\n const JSONRequested = this.responseType === 'json';\r\n\r\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\r\n return data;\r\n }\r\n\r\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\r\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\r\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\r\n\r\n try {\r\n return JSON.parse(data, this.parseReviver);\r\n } catch (e) {\r\n if (strictJSONParsing) {\r\n if (e.name === 'SyntaxError') {\r\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\r\n }\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n return data;\r\n }],\r\n\r\n /**\r\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\r\n * timeout is not created.\r\n */\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN',\r\n\r\n maxContentLength: -1,\r\n maxBodyLength: -1,\r\n\r\n env: {\r\n FormData: platform.classes.FormData,\r\n Blob: platform.classes.Blob\r\n },\r\n\r\n validateStatus: function validateStatus(status) {\r\n return status >= 200 && status < 300;\r\n },\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*',\r\n 'Content-Type': undefined\r\n }\r\n }\r\n};\r\n\r\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\r\n defaults.headers[method] = {};\r\n});\r\n\r\nexport default defaults;\r\n", "'use strict';\r\n\r\nimport utils from './../utils.js';\r\n\r\n// RawAxiosHeaders whose duplicates are ignored by node\r\n// c.f. https://nodejs.org/api/http.html#http_message_headers\r\nconst ignoreDuplicateOf = utils.toObjectSet([\r\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\r\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\r\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\r\n 'referer', 'retry-after', 'user-agent'\r\n]);\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} rawHeaders Headers needing to be parsed\r\n *\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nexport default rawHeaders => {\r\n const parsed = {};\r\n let key;\r\n let val;\r\n let i;\r\n\r\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\r\n i = line.indexOf(':');\r\n key = line.substring(0, i).trim().toLowerCase();\r\n val = line.substring(i + 1).trim();\r\n\r\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\r\n return;\r\n }\r\n\r\n if (key === 'set-cookie') {\r\n if (parsed[key]) {\r\n parsed[key].push(val);\r\n } else {\r\n parsed[key] = [val];\r\n }\r\n } else {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n", "'use strict';\r\n\r\nimport utils from '../utils.js';\r\nimport parseHeaders from '../helpers/parseHeaders.js';\r\n\r\nconst $internals = Symbol('internals');\r\n\r\nfunction normalizeHeader(header) {\r\n return header && String(header).trim().toLowerCase();\r\n}\r\n\r\nfunction normalizeValue(value) {\r\n if (value === false || value == null) {\r\n return value;\r\n }\r\n\r\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\r\n}\r\n\r\nfunction parseTokens(str) {\r\n const tokens = Object.create(null);\r\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\r\n let match;\r\n\r\n while ((match = tokensRE.exec(str))) {\r\n tokens[match[1]] = match[2];\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\r\n\r\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\r\n if (utils.isFunction(filter)) {\r\n return filter.call(this, value, header);\r\n }\r\n\r\n if (isHeaderNameFilter) {\r\n value = header;\r\n }\r\n\r\n if (!utils.isString(value)) return;\r\n\r\n if (utils.isString(filter)) {\r\n return value.indexOf(filter) !== -1;\r\n }\r\n\r\n if (utils.isRegExp(filter)) {\r\n return filter.test(value);\r\n }\r\n}\r\n\r\nfunction formatHeader(header) {\r\n return header.trim()\r\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\r\n return char.toUpperCase() + str;\r\n });\r\n}\r\n\r\nfunction buildAccessors(obj, header) {\r\n const accessorName = utils.toCamelCase(' ' + header);\r\n\r\n ['get', 'set', 'has'].forEach(methodName => {\r\n Object.defineProperty(obj, methodName + accessorName, {\r\n value: function(arg1, arg2, arg3) {\r\n return this[methodName].call(this, header, arg1, arg2, arg3);\r\n },\r\n configurable: true\r\n });\r\n });\r\n}\r\n\r\nclass AxiosHeaders {\r\n constructor(headers) {\r\n headers && this.set(headers);\r\n }\r\n\r\n set(header, valueOrRewrite, rewrite) {\r\n const self = this;\r\n\r\n function setHeader(_value, _header, _rewrite) {\r\n const lHeader = normalizeHeader(_header);\r\n\r\n if (!lHeader) {\r\n throw new Error('header name must be a non-empty string');\r\n }\r\n\r\n const key = utils.findKey(self, lHeader);\r\n\r\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\r\n self[key || _header] = normalizeValue(_value);\r\n }\r\n }\r\n\r\n const setHeaders = (headers, _rewrite) =>\r\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\r\n\r\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\r\n setHeaders(header, valueOrRewrite)\r\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\r\n setHeaders(parseHeaders(header), valueOrRewrite);\r\n } else if (utils.isObject(header) && utils.isIterable(header)) {\r\n let obj = {}, dest, key;\r\n for (const entry of header) {\r\n if (!utils.isArray(entry)) {\r\n throw TypeError('Object iterator must return a key-value pair');\r\n }\r\n\r\n obj[key = entry[0]] = (dest = obj[key]) ?\r\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\r\n }\r\n\r\n setHeaders(obj, valueOrRewrite)\r\n } else {\r\n header != null && setHeader(valueOrRewrite, header, rewrite);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n get(header, parser) {\r\n header = normalizeHeader(header);\r\n\r\n if (header) {\r\n const key = utils.findKey(this, header);\r\n\r\n if (key) {\r\n const value = this[key];\r\n\r\n if (!parser) {\r\n return value;\r\n }\r\n\r\n if (parser === true) {\r\n return parseTokens(value);\r\n }\r\n\r\n if (utils.isFunction(parser)) {\r\n return parser.call(this, value, key);\r\n }\r\n\r\n if (utils.isRegExp(parser)) {\r\n return parser.exec(value);\r\n }\r\n\r\n throw new TypeError('parser must be boolean|regexp|function');\r\n }\r\n }\r\n }\r\n\r\n has(header, matcher) {\r\n header = normalizeHeader(header);\r\n\r\n if (header) {\r\n const key = utils.findKey(this, header);\r\n\r\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\r\n }\r\n\r\n return false;\r\n }\r\n\r\n delete(header, matcher) {\r\n const self = this;\r\n let deleted = false;\r\n\r\n function deleteHeader(_header) {\r\n _header = normalizeHeader(_header);\r\n\r\n if (_header) {\r\n const key = utils.findKey(self, _header);\r\n\r\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\r\n delete self[key];\r\n\r\n deleted = true;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArray(header)) {\r\n header.forEach(deleteHeader);\r\n } else {\r\n deleteHeader(header);\r\n }\r\n\r\n return deleted;\r\n }\r\n\r\n clear(matcher) {\r\n const keys = Object.keys(this);\r\n let i = keys.length;\r\n let deleted = false;\r\n\r\n while (i--) {\r\n const key = keys[i];\r\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\r\n delete this[key];\r\n deleted = true;\r\n }\r\n }\r\n\r\n return deleted;\r\n }\r\n\r\n normalize(format) {\r\n const self = this;\r\n const headers = {};\r\n\r\n utils.forEach(this, (value, header) => {\r\n const key = utils.findKey(headers, header);\r\n\r\n if (key) {\r\n self[key] = normalizeValue(value);\r\n delete self[header];\r\n return;\r\n }\r\n\r\n const normalized = format ? formatHeader(header) : String(header).trim();\r\n\r\n if (normalized !== header) {\r\n delete self[header];\r\n }\r\n\r\n self[normalized] = normalizeValue(value);\r\n\r\n headers[normalized] = true;\r\n });\r\n\r\n return this;\r\n }\r\n\r\n concat(...targets) {\r\n return this.constructor.concat(this, ...targets);\r\n }\r\n\r\n toJSON(asStrings) {\r\n const obj = Object.create(null);\r\n\r\n utils.forEach(this, (value, header) => {\r\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\r\n });\r\n\r\n return obj;\r\n }\r\n\r\n [Symbol.iterator]() {\r\n return Object.entries(this.toJSON())[Symbol.iterator]();\r\n }\r\n\r\n toString() {\r\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\r\n }\r\n\r\n getSetCookie() {\r\n return this.get(\"set-cookie\") || [];\r\n }\r\n\r\n get [Symbol.toStringTag]() {\r\n return 'AxiosHeaders';\r\n }\r\n\r\n static from(thing) {\r\n return thing instanceof this ? thing : new this(thing);\r\n }\r\n\r\n static concat(first, ...targets) {\r\n const computed = new this(first);\r\n\r\n targets.forEach((target) => computed.set(target));\r\n\r\n return computed;\r\n }\r\n\r\n static accessor(header) {\r\n const internals = this[$internals] = (this[$internals] = {\r\n accessors: {}\r\n });\r\n\r\n const accessors = internals.accessors;\r\n const prototype = this.prototype;\r\n\r\n function defineAccessor(_header) {\r\n const lHeader = normalizeHeader(_header);\r\n\r\n if (!accessors[lHeader]) {\r\n buildAccessors(prototype, _header);\r\n accessors[lHeader] = true;\r\n }\r\n }\r\n\r\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\r\n\r\n return this;\r\n }\r\n}\r\n\r\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\r\n\r\n// reserved names hotfix\r\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\r\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\r\n return {\r\n get: () => value,\r\n set(headerValue) {\r\n this[mapped] = headerValue;\r\n }\r\n }\r\n});\r\n\r\nutils.freezeMethods(AxiosHeaders);\r\n\r\nexport default AxiosHeaders;\r\n", "'use strict';\r\n\r\nimport utils from './../utils.js';\r\nimport defaults from '../defaults/index.js';\r\nimport AxiosHeaders from '../core/AxiosHeaders.js';\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @param {?Object} response The response object\r\n *\r\n * @returns {*} The resulting transformed data\r\n */\r\nexport default function transformData(fns, response) {\r\n const config = this || defaults;\r\n const context = response || config;\r\n const headers = AxiosHeaders.from(context.headers);\r\n let data = context.data;\r\n\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\r\n });\r\n\r\n headers.normalize();\r\n\r\n return data;\r\n}\r\n", "'use strict';\r\n\r\nexport default function isCancel(value) {\r\n return !!(value && value.__CANCEL__);\r\n}\r\n", "'use strict';\r\n\r\nimport AxiosError from '../core/AxiosError.js';\r\nimport utils from '../utils.js';\r\n\r\n/**\r\n * A `CanceledError` is an object that is thrown when an operation is canceled.\r\n *\r\n * @param {string=} message The message.\r\n * @param {Object=} config The config.\r\n * @param {Object=} request The request.\r\n *\r\n * @returns {CanceledError} The created error.\r\n */\r\nfunction CanceledError(message, config, request) {\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\r\n this.name = 'CanceledError';\r\n}\r\n\r\nutils.inherits(CanceledError, AxiosError, {\r\n __CANCEL__: true\r\n});\r\n\r\nexport default CanceledError;\r\n", "'use strict';\r\n\r\nimport AxiosError from './AxiosError.js';\r\n\r\n/**\r\n * Resolve or reject a Promise based on response status.\r\n *\r\n * @param {Function} resolve A function that resolves the promise.\r\n * @param {Function} reject A function that rejects the promise.\r\n * @param {object} response The response.\r\n *\r\n * @returns {object} The response.\r\n */\r\nexport default function settle(resolve, reject, response) {\r\n const validateStatus = response.config.validateStatus;\r\n if (!response.status || !validateStatus || validateStatus(response.status)) {\r\n resolve(response);\r\n } else {\r\n reject(new AxiosError(\r\n 'Request failed with status code ' + response.status,\r\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\r\n response.config,\r\n response.request,\r\n response\r\n ));\r\n }\r\n}\r\n", "'use strict';\r\n\r\nexport default function parseProtocol(url) {\r\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\r\n return match && match[1] || '';\r\n}\r\n", "'use strict';\r\n\r\n/**\r\n * Calculate data maxRate\r\n * @param {Number} [samplesCount= 10]\r\n * @param {Number} [min= 1000]\r\n * @returns {Function}\r\n */\r\nfunction speedometer(samplesCount, min) {\r\n samplesCount = samplesCount || 10;\r\n const bytes = new Array(samplesCount);\r\n const timestamps = new Array(samplesCount);\r\n let head = 0;\r\n let tail = 0;\r\n let firstSampleTS;\r\n\r\n min = min !== undefined ? min : 1000;\r\n\r\n return function push(chunkLength) {\r\n const now = Date.now();\r\n\r\n const startedAt = timestamps[tail];\r\n\r\n if (!firstSampleTS) {\r\n firstSampleTS = now;\r\n }\r\n\r\n bytes[head] = chunkLength;\r\n timestamps[head] = now;\r\n\r\n let i = tail;\r\n let bytesCount = 0;\r\n\r\n while (i !== head) {\r\n bytesCount += bytes[i++];\r\n i = i % samplesCount;\r\n }\r\n\r\n head = (head + 1) % samplesCount;\r\n\r\n if (head === tail) {\r\n tail = (tail + 1) % samplesCount;\r\n }\r\n\r\n if (now - firstSampleTS < min) {\r\n return;\r\n }\r\n\r\n const passed = startedAt && now - startedAt;\r\n\r\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\r\n };\r\n}\r\n\r\nexport default speedometer;\r\n", "/**\r\n * Throttle decorator\r\n * @param {Function} fn\r\n * @param {Number} freq\r\n * @return {Function}\r\n */\r\nfunction throttle(fn, freq) {\r\n let timestamp = 0;\r\n let threshold = 1000 / freq;\r\n let lastArgs;\r\n let timer;\r\n\r\n const invoke = (args, now = Date.now()) => {\r\n timestamp = now;\r\n lastArgs = null;\r\n if (timer) {\r\n clearTimeout(timer);\r\n timer = null;\r\n }\r\n fn(...args);\r\n }\r\n\r\n const throttled = (...args) => {\r\n const now = Date.now();\r\n const passed = now - timestamp;\r\n if ( passed >= threshold) {\r\n invoke(args, now);\r\n } else {\r\n lastArgs = args;\r\n if (!timer) {\r\n timer = setTimeout(() => {\r\n timer = null;\r\n invoke(lastArgs)\r\n }, threshold - passed);\r\n }\r\n }\r\n }\r\n\r\n const flush = () => lastArgs && invoke(lastArgs);\r\n\r\n return [throttled, flush];\r\n}\r\n\r\nexport default throttle;\r\n", "import speedometer from \"./speedometer.js\";\r\nimport throttle from \"./throttle.js\";\r\nimport utils from \"../utils.js\";\r\n\r\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\r\n let bytesNotified = 0;\r\n const _speedometer = speedometer(50, 250);\r\n\r\n return throttle(e => {\r\n const loaded = e.loaded;\r\n const total = e.lengthComputable ? e.total : undefined;\r\n const progressBytes = loaded - bytesNotified;\r\n const rate = _speedometer(progressBytes);\r\n const inRange = loaded <= total;\r\n\r\n bytesNotified = loaded;\r\n\r\n const data = {\r\n loaded,\r\n total,\r\n progress: total ? (loaded / total) : undefined,\r\n bytes: progressBytes,\r\n rate: rate ? rate : undefined,\r\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\r\n event: e,\r\n lengthComputable: total != null,\r\n [isDownloadStream ? 'download' : 'upload']: true\r\n };\r\n\r\n listener(data);\r\n }, freq);\r\n}\r\n\r\nexport const progressEventDecorator = (total, throttled) => {\r\n const lengthComputable = total != null;\r\n\r\n return [(loaded) => throttled[0]({\r\n lengthComputable,\r\n total,\r\n loaded\r\n }), throttled[1]];\r\n}\r\n\r\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\r\n", "import platform from '../platform/index.js';\r\n\r\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\r\n url = new URL(url, platform.origin);\r\n\r\n return (\r\n origin.protocol === url.protocol &&\r\n origin.host === url.host &&\r\n (isMSIE || origin.port === url.port)\r\n );\r\n})(\r\n new URL(platform.origin),\r\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\r\n) : () => true;\r\n", "import utils from './../utils.js';\r\nimport platform from '../platform/index.js';\r\n\r\nexport default platform.hasStandardBrowserEnv ?\r\n\r\n // Standard browser envs support document.cookie\r\n {\r\n write(name, value, expires, path, domain, secure, sameSite) {\r\n if (typeof document === 'undefined') return;\r\n\r\n const cookie = [`${name}=${encodeURIComponent(value)}`];\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\r\n }\r\n if (utils.isString(path)) {\r\n cookie.push(`path=${path}`);\r\n }\r\n if (utils.isString(domain)) {\r\n cookie.push(`domain=${domain}`);\r\n }\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n if (utils.isString(sameSite)) {\r\n cookie.push(`SameSite=${sameSite}`);\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read(name) {\r\n if (typeof document === 'undefined') return null;\r\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\r\n return match ? decodeURIComponent(match[1]) : null;\r\n },\r\n\r\n remove(name) {\r\n this.write(name, '', Date.now() - 86400000, '/');\r\n }\r\n }\r\n\r\n :\r\n\r\n // Non-standard browser env (web workers, react-native) lack needed support.\r\n {\r\n write() {},\r\n read() {\r\n return null;\r\n },\r\n remove() {}\r\n };\r\n\r\n", "'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n *\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nexport default function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\r\n}\r\n", "'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n *\r\n * @returns {string} The combined URL\r\n */\r\nexport default function combineURLs(baseURL, relativeURL) {\r\n return relativeURL\r\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\r\n : baseURL;\r\n}\r\n", "'use strict';\r\n\r\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\r\nimport combineURLs from '../helpers/combineURLs.js';\r\n\r\n/**\r\n * Creates a new URL by combining the baseURL with the requestedURL,\r\n * only when the requestedURL is not already an absolute URL.\r\n * If the requestURL is absolute, this function returns the requestedURL untouched.\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} requestedURL Absolute or relative URL to combine\r\n *\r\n * @returns {string} The combined full path\r\n */\r\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\r\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\r\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\r\n return combineURLs(baseURL, requestedURL);\r\n }\r\n return requestedURL;\r\n}\r\n", "'use strict';\r\n\r\nimport utils from '../utils.js';\r\nimport AxiosHeaders from \"./AxiosHeaders.js\";\r\n\r\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\r\n\r\n/**\r\n * Config-specific merge-function which creates a new config-object\r\n * by merging two configuration objects together.\r\n *\r\n * @param {Object} config1\r\n * @param {Object} config2\r\n *\r\n * @returns {Object} New object resulting from merging config2 to config1\r\n */\r\nexport default function mergeConfig(config1, config2) {\r\n // eslint-disable-next-line no-param-reassign\r\n config2 = config2 || {};\r\n const config = {};\r\n\r\n function getMergedValue(target, source, prop, caseless) {\r\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\r\n return utils.merge.call({caseless}, target, source);\r\n } else if (utils.isPlainObject(source)) {\r\n return utils.merge({}, source);\r\n } else if (utils.isArray(source)) {\r\n return source.slice();\r\n }\r\n return source;\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function mergeDeepProperties(a, b, prop, caseless) {\r\n if (!utils.isUndefined(b)) {\r\n return getMergedValue(a, b, prop, caseless);\r\n } else if (!utils.isUndefined(a)) {\r\n return getMergedValue(undefined, a, prop, caseless);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function valueFromConfig2(a, b) {\r\n if (!utils.isUndefined(b)) {\r\n return getMergedValue(undefined, b);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function defaultToConfig2(a, b) {\r\n if (!utils.isUndefined(b)) {\r\n return getMergedValue(undefined, b);\r\n } else if (!utils.isUndefined(a)) {\r\n return getMergedValue(undefined, a);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function mergeDirectKeys(a, b, prop) {\r\n if (prop in config2) {\r\n return getMergedValue(a, b);\r\n } else if (prop in config1) {\r\n return getMergedValue(undefined, a);\r\n }\r\n }\r\n\r\n const mergeMap = {\r\n url: valueFromConfig2,\r\n method: valueFromConfig2,\r\n data: valueFromConfig2,\r\n baseURL: defaultToConfig2,\r\n transformRequest: defaultToConfig2,\r\n transformResponse: defaultToConfig2,\r\n paramsSerializer: defaultToConfig2,\r\n timeout: defaultToConfig2,\r\n timeoutMessage: defaultToConfig2,\r\n withCredentials: defaultToConfig2,\r\n withXSRFToken: defaultToConfig2,\r\n adapter: defaultToConfig2,\r\n responseType: defaultToConfig2,\r\n xsrfCookieName: defaultToConfig2,\r\n xsrfHeaderName: defaultToConfig2,\r\n onUploadProgress: defaultToConfig2,\r\n onDownloadProgress: defaultToConfig2,\r\n decompress: defaultToConfig2,\r\n maxContentLength: defaultToConfig2,\r\n maxBodyLength: defaultToConfig2,\r\n beforeRedirect: defaultToConfig2,\r\n transport: defaultToConfig2,\r\n httpAgent: defaultToConfig2,\r\n httpsAgent: defaultToConfig2,\r\n cancelToken: defaultToConfig2,\r\n socketPath: defaultToConfig2,\r\n responseEncoding: defaultToConfig2,\r\n validateStatus: mergeDirectKeys,\r\n headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)\r\n };\r\n\r\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\r\n const merge = mergeMap[prop] || mergeDeepProperties;\r\n const configValue = merge(config1[prop], config2[prop], prop);\r\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\r\n });\r\n\r\n return config;\r\n}\r\n", "import platform from \"../platform/index.js\";\r\nimport utils from \"../utils.js\";\r\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\r\nimport cookies from \"./cookies.js\";\r\nimport buildFullPath from \"../core/buildFullPath.js\";\r\nimport mergeConfig from \"../core/mergeConfig.js\";\r\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\r\nimport buildURL from \"./buildURL.js\";\r\n\r\nexport default (config) => {\r\n const newConfig = mergeConfig({}, config);\r\n\r\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\r\n\r\n newConfig.headers = headers = AxiosHeaders.from(headers);\r\n\r\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\r\n\r\n // HTTP basic authentication\r\n if (auth) {\r\n headers.set('Authorization', 'Basic ' +\r\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\r\n );\r\n }\r\n\r\n if (utils.isFormData(data)) {\r\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\r\n headers.setContentType(undefined); // browser handles it\r\n } else if (utils.isFunction(data.getHeaders)) {\r\n // Node.js FormData (like form-data package)\r\n const formHeaders = data.getHeaders();\r\n // Only set safe headers to avoid overwriting security headers\r\n const allowedHeaders = ['content-type', 'content-length'];\r\n Object.entries(formHeaders).forEach(([key, val]) => {\r\n if (allowedHeaders.includes(key.toLowerCase())) {\r\n headers.set(key, val);\r\n }\r\n });\r\n }\r\n } \r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n\r\n if (platform.hasStandardBrowserEnv) {\r\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\r\n\r\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\r\n // Add xsrf header\r\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\r\n\r\n if (xsrfValue) {\r\n headers.set(xsrfHeaderName, xsrfValue);\r\n }\r\n }\r\n }\r\n\r\n return newConfig;\r\n}\r\n\r\n", "import utils from './../utils.js';\r\nimport settle from './../core/settle.js';\r\nimport transitionalDefaults from '../defaults/transitional.js';\r\nimport AxiosError from '../core/AxiosError.js';\r\nimport CanceledError from '../cancel/CanceledError.js';\r\nimport parseProtocol from '../helpers/parseProtocol.js';\r\nimport platform from '../platform/index.js';\r\nimport AxiosHeaders from '../core/AxiosHeaders.js';\r\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\r\nimport resolveConfig from \"../helpers/resolveConfig.js\";\r\n\r\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\r\n\r\nexport default isXHRAdapterSupported && function (config) {\r\n return new Promise(function dispatchXhrRequest(resolve, reject) {\r\n const _config = resolveConfig(config);\r\n let requestData = _config.data;\r\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\r\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\r\n let onCanceled;\r\n let uploadThrottled, downloadThrottled;\r\n let flushUpload, flushDownload;\r\n\r\n function done() {\r\n flushUpload && flushUpload(); // flush events\r\n flushDownload && flushDownload(); // flush events\r\n\r\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\r\n\r\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\r\n }\r\n\r\n let request = new XMLHttpRequest();\r\n\r\n request.open(_config.method.toUpperCase(), _config.url, true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = _config.timeout;\r\n\r\n function onloadend() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n const responseHeaders = AxiosHeaders.from(\r\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\r\n );\r\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\r\n request.responseText : request.response;\r\n const response = {\r\n data: responseData,\r\n status: request.status,\r\n statusText: request.statusText,\r\n headers: responseHeaders,\r\n config,\r\n request\r\n };\r\n\r\n settle(function _resolve(value) {\r\n resolve(value);\r\n done();\r\n }, function _reject(err) {\r\n reject(err);\r\n done();\r\n }, response);\r\n\r\n // Clean up request\r\n request = null;\r\n }\r\n\r\n if ('onloadend' in request) {\r\n // Use onloadend if available\r\n request.onloadend = onloadend;\r\n } else {\r\n // Listen for ready state to emulate onloadend\r\n request.onreadystatechange = function handleLoad() {\r\n if (!request || request.readyState !== 4) {\r\n return;\r\n }\r\n\r\n // The request errored out and we didn't get a response, this will be\r\n // handled by onerror instead\r\n // With one exception: request that using file: protocol, most browsers\r\n // will return status as 0 even though it's a successful request\r\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\r\n return;\r\n }\r\n // readystate handler is calling before onerror or ontimeout handlers,\r\n // so we should call onloadend on the next 'tick'\r\n setTimeout(onloadend);\r\n };\r\n }\r\n\r\n // Handle browser request cancellation (as opposed to a manual cancellation)\r\n request.onabort = function handleAbort() {\r\n if (!request) {\r\n return;\r\n }\r\n\r\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError(event) {\r\n // Browsers deliver a ProgressEvent in XHR onerror\r\n // (message may be empty; when present, surface it)\r\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\r\n const msg = event && event.message ? event.message : 'Network Error';\r\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\r\n // attach the underlying event for consumers who want details\r\n err.event = event || null;\r\n reject(err);\r\n request = null;\r\n };\r\n \r\n // Handle timeout\r\n request.ontimeout = function handleTimeout() {\r\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\r\n const transitional = _config.transitional || transitionalDefaults;\r\n if (_config.timeoutErrorMessage) {\r\n timeoutErrorMessage = _config.timeoutErrorMessage;\r\n }\r\n reject(new AxiosError(\r\n timeoutErrorMessage,\r\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\r\n config,\r\n request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Remove Content-Type if data is undefined\r\n requestData === undefined && requestHeaders.setContentType(null);\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\r\n request.setRequestHeader(key, val);\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (!utils.isUndefined(_config.withCredentials)) {\r\n request.withCredentials = !!_config.withCredentials;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (responseType && responseType !== 'json') {\r\n request.responseType = _config.responseType;\r\n }\r\n\r\n // Handle progress if needed\r\n if (onDownloadProgress) {\r\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\r\n request.addEventListener('progress', downloadThrottled);\r\n }\r\n\r\n // Not all browsers support upload events\r\n if (onUploadProgress && request.upload) {\r\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\r\n\r\n request.upload.addEventListener('progress', uploadThrottled);\r\n\r\n request.upload.addEventListener('loadend', flushUpload);\r\n }\r\n\r\n if (_config.cancelToken || _config.signal) {\r\n // Handle cancellation\r\n // eslint-disable-next-line func-names\r\n onCanceled = cancel => {\r\n if (!request) {\r\n return;\r\n }\r\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\r\n request.abort();\r\n request = null;\r\n };\r\n\r\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\r\n if (_config.signal) {\r\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\r\n }\r\n }\r\n\r\n const protocol = parseProtocol(_config.url);\r\n\r\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\r\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\r\n return;\r\n }\r\n\r\n\r\n // Send the request\r\n request.send(requestData || null);\r\n });\r\n}\r\n", "import CanceledError from \"../cancel/CanceledError.js\";\r\nimport AxiosError from \"../core/AxiosError.js\";\r\nimport utils from '../utils.js';\r\n\r\nconst composeSignals = (signals, timeout) => {\r\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\r\n\r\n if (timeout || length) {\r\n let controller = new AbortController();\r\n\r\n let aborted;\r\n\r\n const onabort = function (reason) {\r\n if (!aborted) {\r\n aborted = true;\r\n unsubscribe();\r\n const err = reason instanceof Error ? reason : this.reason;\r\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\r\n }\r\n }\r\n\r\n let timer = timeout && setTimeout(() => {\r\n timer = null;\r\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\r\n }, timeout)\r\n\r\n const unsubscribe = () => {\r\n if (signals) {\r\n timer && clearTimeout(timer);\r\n timer = null;\r\n signals.forEach(signal => {\r\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\r\n });\r\n signals = null;\r\n }\r\n }\r\n\r\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\r\n\r\n const {signal} = controller;\r\n\r\n signal.unsubscribe = () => utils.asap(unsubscribe);\r\n\r\n return signal;\r\n }\r\n}\r\n\r\nexport default composeSignals;\r\n", "\r\nexport const streamChunk = function* (chunk, chunkSize) {\r\n let len = chunk.byteLength;\r\n\r\n if (!chunkSize || len < chunkSize) {\r\n yield chunk;\r\n return;\r\n }\r\n\r\n let pos = 0;\r\n let end;\r\n\r\n while (pos < len) {\r\n end = pos + chunkSize;\r\n yield chunk.slice(pos, end);\r\n pos = end;\r\n }\r\n}\r\n\r\nexport const readBytes = async function* (iterable, chunkSize) {\r\n for await (const chunk of readStream(iterable)) {\r\n yield* streamChunk(chunk, chunkSize);\r\n }\r\n}\r\n\r\nconst readStream = async function* (stream) {\r\n if (stream[Symbol.asyncIterator]) {\r\n yield* stream;\r\n return;\r\n }\r\n\r\n const reader = stream.getReader();\r\n try {\r\n for (;;) {\r\n const {done, value} = await reader.read();\r\n if (done) {\r\n break;\r\n }\r\n yield value;\r\n }\r\n } finally {\r\n await reader.cancel();\r\n }\r\n}\r\n\r\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\r\n const iterator = readBytes(stream, chunkSize);\r\n\r\n let bytes = 0;\r\n let done;\r\n let _onFinish = (e) => {\r\n if (!done) {\r\n done = true;\r\n onFinish && onFinish(e);\r\n }\r\n }\r\n\r\n return new ReadableStream({\r\n async pull(controller) {\r\n try {\r\n const {done, value} = await iterator.next();\r\n\r\n if (done) {\r\n _onFinish();\r\n controller.close();\r\n return;\r\n }\r\n\r\n let len = value.byteLength;\r\n if (onProgress) {\r\n let loadedBytes = bytes += len;\r\n onProgress(loadedBytes);\r\n }\r\n controller.enqueue(new Uint8Array(value));\r\n } catch (err) {\r\n _onFinish(err);\r\n throw err;\r\n }\r\n },\r\n cancel(reason) {\r\n _onFinish(reason);\r\n return iterator.return();\r\n }\r\n }, {\r\n highWaterMark: 2\r\n })\r\n}\r\n", "import platform from \"../platform/index.js\";\r\nimport utils from \"../utils.js\";\r\nimport AxiosError from \"../core/AxiosError.js\";\r\nimport composeSignals from \"../helpers/composeSignals.js\";\r\nimport {trackStream} from \"../helpers/trackStream.js\";\r\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\r\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\r\nimport resolveConfig from \"../helpers/resolveConfig.js\";\r\nimport settle from \"../core/settle.js\";\r\n\r\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\r\n\r\nconst {isFunction} = utils;\r\n\r\nconst globalFetchAPI = (({Request, Response}) => ({\r\n Request, Response\r\n}))(utils.global);\r\n\r\nconst {\r\n ReadableStream, TextEncoder\r\n} = utils.global;\r\n\r\n\r\nconst test = (fn, ...args) => {\r\n try {\r\n return !!fn(...args);\r\n } catch (e) {\r\n return false\r\n }\r\n}\r\n\r\nconst factory = (env) => {\r\n env = utils.merge.call({\r\n skipUndefined: true\r\n }, globalFetchAPI, env);\r\n\r\n const {fetch: envFetch, Request, Response} = env;\r\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\r\n const isRequestSupported = isFunction(Request);\r\n const isResponseSupported = isFunction(Response);\r\n\r\n if (!isFetchSupported) {\r\n return false;\r\n }\r\n\r\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\r\n\r\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\r\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\r\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\r\n );\r\n\r\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\r\n let duplexAccessed = false;\r\n\r\n const hasContentType = new Request(platform.origin, {\r\n body: new ReadableStream(),\r\n method: 'POST',\r\n get duplex() {\r\n duplexAccessed = true;\r\n return 'half';\r\n },\r\n }).headers.has('Content-Type');\r\n\r\n return duplexAccessed && !hasContentType;\r\n });\r\n\r\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\r\n test(() => utils.isReadableStream(new Response('').body));\r\n\r\n const resolvers = {\r\n stream: supportsResponseStream && ((res) => res.body)\r\n };\r\n\r\n isFetchSupported && ((() => {\r\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\r\n !resolvers[type] && (resolvers[type] = (res, config) => {\r\n let method = res && res[type];\r\n\r\n if (method) {\r\n return method.call(res);\r\n }\r\n\r\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\r\n })\r\n });\r\n })());\r\n\r\n const getBodyLength = async (body) => {\r\n if (body == null) {\r\n return 0;\r\n }\r\n\r\n if (utils.isBlob(body)) {\r\n return body.size;\r\n }\r\n\r\n if (utils.isSpecCompliantForm(body)) {\r\n const _request = new Request(platform.origin, {\r\n method: 'POST',\r\n body,\r\n });\r\n return (await _request.arrayBuffer()).byteLength;\r\n }\r\n\r\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\r\n return body.byteLength;\r\n }\r\n\r\n if (utils.isURLSearchParams(body)) {\r\n body = body + '';\r\n }\r\n\r\n if (utils.isString(body)) {\r\n return (await encodeText(body)).byteLength;\r\n }\r\n }\r\n\r\n const resolveBodyLength = async (headers, body) => {\r\n const length = utils.toFiniteNumber(headers.getContentLength());\r\n\r\n return length == null ? getBodyLength(body) : length;\r\n }\r\n\r\n return async (config) => {\r\n let {\r\n url,\r\n method,\r\n data,\r\n signal,\r\n cancelToken,\r\n timeout,\r\n onDownloadProgress,\r\n onUploadProgress,\r\n responseType,\r\n headers,\r\n withCredentials = 'same-origin',\r\n fetchOptions\r\n } = resolveConfig(config);\r\n\r\n let _fetch = envFetch || fetch;\r\n\r\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\r\n\r\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\r\n\r\n let request = null;\r\n\r\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\r\n composedSignal.unsubscribe();\r\n });\r\n\r\n let requestContentLength;\r\n\r\n try {\r\n if (\r\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\r\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\r\n ) {\r\n let _request = new Request(url, {\r\n method: 'POST',\r\n body: data,\r\n duplex: \"half\"\r\n });\r\n\r\n let contentTypeHeader;\r\n\r\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\r\n headers.setContentType(contentTypeHeader)\r\n }\r\n\r\n if (_request.body) {\r\n const [onProgress, flush] = progressEventDecorator(\r\n requestContentLength,\r\n progressEventReducer(asyncDecorator(onUploadProgress))\r\n );\r\n\r\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\r\n }\r\n }\r\n\r\n if (!utils.isString(withCredentials)) {\r\n withCredentials = withCredentials ? 'include' : 'omit';\r\n }\r\n\r\n // Cloudflare Workers throws when credentials are defined\r\n // see https://github.com/cloudflare/workerd/issues/902\r\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\r\n\r\n const resolvedOptions = {\r\n ...fetchOptions,\r\n signal: composedSignal,\r\n method: method.toUpperCase(),\r\n headers: headers.normalize().toJSON(),\r\n body: data,\r\n duplex: \"half\",\r\n credentials: isCredentialsSupported ? withCredentials : undefined\r\n };\r\n\r\n request = isRequestSupported && new Request(url, resolvedOptions);\r\n\r\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\r\n\r\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\r\n\r\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\r\n const options = {};\r\n\r\n ['status', 'statusText', 'headers'].forEach(prop => {\r\n options[prop] = response[prop];\r\n });\r\n\r\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\r\n\r\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\r\n responseContentLength,\r\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\r\n ) || [];\r\n\r\n response = new Response(\r\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\r\n flush && flush();\r\n unsubscribe && unsubscribe();\r\n }),\r\n options\r\n );\r\n }\r\n\r\n responseType = responseType || 'text';\r\n\r\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\r\n\r\n !isStreamResponse && unsubscribe && unsubscribe();\r\n\r\n return await new Promise((resolve, reject) => {\r\n settle(resolve, reject, {\r\n data: responseData,\r\n headers: AxiosHeaders.from(response.headers),\r\n status: response.status,\r\n statusText: response.statusText,\r\n config,\r\n request\r\n })\r\n })\r\n } catch (err) {\r\n unsubscribe && unsubscribe();\r\n\r\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\r\n throw Object.assign(\r\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\r\n {\r\n cause: err.cause || err\r\n }\r\n )\r\n }\r\n\r\n throw AxiosError.from(err, err && err.code, config, request);\r\n }\r\n }\r\n}\r\n\r\nconst seedCache = new Map();\r\n\r\nexport const getFetch = (config) => {\r\n let env = (config && config.env) || {};\r\n const {fetch, Request, Response} = env;\r\n const seeds = [\r\n Request, Response, fetch\r\n ];\r\n\r\n let len = seeds.length, i = len,\r\n seed, target, map = seedCache;\r\n\r\n while (i--) {\r\n seed = seeds[i];\r\n target = map.get(seed);\r\n\r\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\r\n\r\n map = target;\r\n }\r\n\r\n return target;\r\n};\r\n\r\nconst adapter = getFetch();\r\n\r\nexport default adapter;\r\n", "import utils from '../utils.js';\r\nimport httpAdapter from './http.js';\r\nimport xhrAdapter from './xhr.js';\r\nimport * as fetchAdapter from './fetch.js';\r\nimport AxiosError from \"../core/AxiosError.js\";\r\n\r\n/**\r\n * Known adapters mapping.\r\n * Provides environment-specific adapters for Axios:\r\n * - `http` for Node.js\r\n * - `xhr` for browsers\r\n * - `fetch` for fetch API-based requests\r\n * \r\n * @type {Object}\r\n */\r\nconst knownAdapters = {\r\n http: httpAdapter,\r\n xhr: xhrAdapter,\r\n fetch: {\r\n get: fetchAdapter.getFetch,\r\n }\r\n};\r\n\r\n// Assign adapter names for easier debugging and identification\r\nutils.forEach(knownAdapters, (fn, value) => {\r\n if (fn) {\r\n try {\r\n Object.defineProperty(fn, 'name', { value });\r\n } catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n Object.defineProperty(fn, 'adapterName', { value });\r\n }\r\n});\r\n\r\n/**\r\n * Render a rejection reason string for unknown or unsupported adapters\r\n * \r\n * @param {string} reason\r\n * @returns {string}\r\n */\r\nconst renderReason = (reason) => `- ${reason}`;\r\n\r\n/**\r\n * Check if the adapter is resolved (function, null, or false)\r\n * \r\n * @param {Function|null|false} adapter\r\n * @returns {boolean}\r\n */\r\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\r\n\r\n/**\r\n * Get the first suitable adapter from the provided list.\r\n * Tries each adapter in order until a supported one is found.\r\n * Throws an AxiosError if no adapter is suitable.\r\n * \r\n * @param {Array|string|Function} adapters - Adapter(s) by name or function.\r\n * @param {Object} config - Axios request configuration\r\n * @throws {AxiosError} If no suitable adapter is available\r\n * @returns {Function} The resolved adapter function\r\n */\r\nfunction getAdapter(adapters, config) {\r\n adapters = utils.isArray(adapters) ? adapters : [adapters];\r\n\r\n const { length } = adapters;\r\n let nameOrAdapter;\r\n let adapter;\r\n\r\n const rejectedReasons = {};\r\n\r\n for (let i = 0; i < length; i++) {\r\n nameOrAdapter = adapters[i];\r\n let id;\r\n\r\n adapter = nameOrAdapter;\r\n\r\n if (!isResolvedHandle(nameOrAdapter)) {\r\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\r\n\r\n if (adapter === undefined) {\r\n throw new AxiosError(`Unknown adapter '${id}'`);\r\n }\r\n }\r\n\r\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\r\n break;\r\n }\r\n\r\n rejectedReasons[id || '#' + i] = adapter;\r\n }\r\n\r\n if (!adapter) {\r\n const reasons = Object.entries(rejectedReasons)\r\n .map(([id, state]) => `adapter ${id} ` +\r\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\r\n );\r\n\r\n let s = length ?\r\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\r\n 'as no adapter specified';\r\n\r\n throw new AxiosError(\r\n `There is no suitable adapter to dispatch the request ` + s,\r\n 'ERR_NOT_SUPPORT'\r\n );\r\n }\r\n\r\n return adapter;\r\n}\r\n\r\n/**\r\n * Exports Axios adapters and utility to resolve an adapter\r\n */\r\nexport default {\r\n /**\r\n * Resolve an adapter from a list of adapter names or functions.\r\n * @type {Function}\r\n */\r\n getAdapter,\r\n\r\n /**\r\n * Exposes all known adapters\r\n * @type {Object}\r\n */\r\n adapters: knownAdapters\r\n};\r\n", "'use strict';\r\n\r\nimport transformData from './transformData.js';\r\nimport isCancel from '../cancel/isCancel.js';\r\nimport defaults from '../defaults/index.js';\r\nimport CanceledError from '../cancel/CanceledError.js';\r\nimport AxiosHeaders from '../core/AxiosHeaders.js';\r\nimport adapters from \"../adapters/adapters.js\";\r\n\r\n/**\r\n * Throws a `CanceledError` if cancellation has been requested.\r\n *\r\n * @param {Object} config The config that is to be used for the request\r\n *\r\n * @returns {void}\r\n */\r\nfunction throwIfCancellationRequested(config) {\r\n if (config.cancelToken) {\r\n config.cancelToken.throwIfRequested();\r\n }\r\n\r\n if (config.signal && config.signal.aborted) {\r\n throw new CanceledError(null, config);\r\n }\r\n}\r\n\r\n/**\r\n * Dispatch a request to the server using the configured adapter.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n *\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nexport default function dispatchRequest(config) {\r\n throwIfCancellationRequested(config);\r\n\r\n config.headers = AxiosHeaders.from(config.headers);\r\n\r\n // Transform request data\r\n config.data = transformData.call(\r\n config,\r\n config.transformRequest\r\n );\r\n\r\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\r\n config.headers.setContentType('application/x-www-form-urlencoded', false);\r\n }\r\n\r\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\r\n\r\n return adapter(config).then(function onAdapterResolution(response) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Transform response data\r\n response.data = transformData.call(\r\n config,\r\n config.transformResponse,\r\n response\r\n );\r\n\r\n response.headers = AxiosHeaders.from(response.headers);\r\n\r\n return response;\r\n }, function onAdapterRejection(reason) {\r\n if (!isCancel(reason)) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Transform response data\r\n if (reason && reason.response) {\r\n reason.response.data = transformData.call(\r\n config,\r\n config.transformResponse,\r\n reason.response\r\n );\r\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\r\n }\r\n }\r\n\r\n return Promise.reject(reason);\r\n });\r\n}\r\n", "export const VERSION = \"1.13.2\";", "'use strict';\r\n\r\nimport {VERSION} from '../env/data.js';\r\nimport AxiosError from '../core/AxiosError.js';\r\n\r\nconst validators = {};\r\n\r\n// eslint-disable-next-line func-names\r\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\r\n validators[type] = function validator(thing) {\r\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\r\n };\r\n});\r\n\r\nconst deprecatedWarnings = {};\r\n\r\n/**\r\n * Transitional option validator\r\n *\r\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\r\n * @param {string?} version - deprecated version / removed since version\r\n * @param {string?} message - some message with additional info\r\n *\r\n * @returns {function}\r\n */\r\nvalidators.transitional = function transitional(validator, version, message) {\r\n function formatMessage(opt, desc) {\r\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\r\n }\r\n\r\n // eslint-disable-next-line func-names\r\n return (value, opt, opts) => {\r\n if (validator === false) {\r\n throw new AxiosError(\r\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\r\n AxiosError.ERR_DEPRECATED\r\n );\r\n }\r\n\r\n if (version && !deprecatedWarnings[opt]) {\r\n deprecatedWarnings[opt] = true;\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n formatMessage(\r\n opt,\r\n ' has been deprecated since v' + version + ' and will be removed in the near future'\r\n )\r\n );\r\n }\r\n\r\n return validator ? validator(value, opt, opts) : true;\r\n };\r\n};\r\n\r\nvalidators.spelling = function spelling(correctSpelling) {\r\n return (value, opt) => {\r\n // eslint-disable-next-line no-console\r\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\r\n return true;\r\n }\r\n};\r\n\r\n/**\r\n * Assert object's properties type\r\n *\r\n * @param {object} options\r\n * @param {object} schema\r\n * @param {boolean?} allowUnknown\r\n *\r\n * @returns {object}\r\n */\r\n\r\nfunction assertOptions(options, schema, allowUnknown) {\r\n if (typeof options !== 'object') {\r\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\r\n }\r\n const keys = Object.keys(options);\r\n let i = keys.length;\r\n while (i-- > 0) {\r\n const opt = keys[i];\r\n const validator = schema[opt];\r\n if (validator) {\r\n const value = options[opt];\r\n const result = value === undefined || validator(value, opt, options);\r\n if (result !== true) {\r\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\r\n }\r\n continue;\r\n }\r\n if (allowUnknown !== true) {\r\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\r\n }\r\n }\r\n}\r\n\r\nexport default {\r\n assertOptions,\r\n validators\r\n};\r\n", "'use strict';\r\n\r\nimport utils from './../utils.js';\r\nimport buildURL from '../helpers/buildURL.js';\r\nimport InterceptorManager from './InterceptorManager.js';\r\nimport dispatchRequest from './dispatchRequest.js';\r\nimport mergeConfig from './mergeConfig.js';\r\nimport buildFullPath from './buildFullPath.js';\r\nimport validator from '../helpers/validator.js';\r\nimport AxiosHeaders from './AxiosHeaders.js';\r\n\r\nconst validators = validator.validators;\r\n\r\n/**\r\n * Create a new instance of Axios\r\n *\r\n * @param {Object} instanceConfig The default config for the instance\r\n *\r\n * @return {Axios} A new instance of Axios\r\n */\r\nclass Axios {\r\n constructor(instanceConfig) {\r\n this.defaults = instanceConfig || {};\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n }\r\n\r\n /**\r\n * Dispatch a request\r\n *\r\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\r\n * @param {?Object} config\r\n *\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\n async request(configOrUrl, config) {\r\n try {\r\n return await this._request(configOrUrl, config);\r\n } catch (err) {\r\n if (err instanceof Error) {\r\n let dummy = {};\r\n\r\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\r\n\r\n // slice off the Error: ... line\r\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\r\n try {\r\n if (!err.stack) {\r\n err.stack = stack;\r\n // match without the 2 top stack lines\r\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\r\n err.stack += '\\n' + stack\r\n }\r\n } catch (e) {\r\n // ignore the case where \"stack\" is an un-writable property\r\n }\r\n }\r\n\r\n throw err;\r\n }\r\n }\r\n\r\n _request(configOrUrl, config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof configOrUrl === 'string') {\r\n config = config || {};\r\n config.url = configOrUrl;\r\n } else {\r\n config = configOrUrl || {};\r\n }\r\n\r\n config = mergeConfig(this.defaults, config);\r\n\r\n const {transitional, paramsSerializer, headers} = config;\r\n\r\n if (transitional !== undefined) {\r\n validator.assertOptions(transitional, {\r\n silentJSONParsing: validators.transitional(validators.boolean),\r\n forcedJSONParsing: validators.transitional(validators.boolean),\r\n clarifyTimeoutError: validators.transitional(validators.boolean)\r\n }, false);\r\n }\r\n\r\n if (paramsSerializer != null) {\r\n if (utils.isFunction(paramsSerializer)) {\r\n config.paramsSerializer = {\r\n serialize: paramsSerializer\r\n }\r\n } else {\r\n validator.assertOptions(paramsSerializer, {\r\n encode: validators.function,\r\n serialize: validators.function\r\n }, true);\r\n }\r\n }\r\n\r\n // Set config.allowAbsoluteUrls\r\n if (config.allowAbsoluteUrls !== undefined) {\r\n // do nothing\r\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\r\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\r\n } else {\r\n config.allowAbsoluteUrls = true;\r\n }\r\n\r\n validator.assertOptions(config, {\r\n baseUrl: validators.spelling('baseURL'),\r\n withXsrfToken: validators.spelling('withXSRFToken')\r\n }, true);\r\n\r\n // Set config.method\r\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\r\n\r\n // Flatten headers\r\n let contextHeaders = headers && utils.merge(\r\n headers.common,\r\n headers[config.method]\r\n );\r\n\r\n headers && utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n (method) => {\r\n delete headers[method];\r\n }\r\n );\r\n\r\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\r\n\r\n // filter out skipped interceptors\r\n const requestInterceptorChain = [];\r\n let synchronousRequestInterceptors = true;\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\r\n return;\r\n }\r\n\r\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\r\n\r\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n const responseInterceptorChain = [];\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n let promise;\r\n let i = 0;\r\n let len;\r\n\r\n if (!synchronousRequestInterceptors) {\r\n const chain = [dispatchRequest.bind(this), undefined];\r\n chain.unshift(...requestInterceptorChain);\r\n chain.push(...responseInterceptorChain);\r\n len = chain.length;\r\n\r\n promise = Promise.resolve(config);\r\n\r\n while (i < len) {\r\n promise = promise.then(chain[i++], chain[i++]);\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n len = requestInterceptorChain.length;\r\n\r\n let newConfig = config;\r\n\r\n while (i < len) {\r\n const onFulfilled = requestInterceptorChain[i++];\r\n const onRejected = requestInterceptorChain[i++];\r\n try {\r\n newConfig = onFulfilled(newConfig);\r\n } catch (error) {\r\n onRejected.call(this, error);\r\n break;\r\n }\r\n }\r\n\r\n try {\r\n promise = dispatchRequest.call(this, newConfig);\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n\r\n i = 0;\r\n len = responseInterceptorChain.length;\r\n\r\n while (i < len) {\r\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n getUri(config) {\r\n config = mergeConfig(this.defaults, config);\r\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\r\n return buildURL(fullPath, config.params, config.paramsSerializer);\r\n }\r\n}\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(mergeConfig(config || {}, {\r\n method,\r\n url,\r\n data: (config || {}).data\r\n }));\r\n };\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n\r\n function generateHTTPMethod(isForm) {\r\n return function httpMethod(url, data, config) {\r\n return this.request(mergeConfig(config || {}, {\r\n method,\r\n headers: isForm ? {\r\n 'Content-Type': 'multipart/form-data'\r\n } : {},\r\n url,\r\n data\r\n }));\r\n };\r\n }\r\n\r\n Axios.prototype[method] = generateHTTPMethod();\r\n\r\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\r\n});\r\n\r\nexport default Axios;\r\n", "'use strict';\r\n\r\nimport CanceledError from './CanceledError.js';\r\n\r\n/**\r\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\r\n *\r\n * @param {Function} executor The executor function.\r\n *\r\n * @returns {CancelToken}\r\n */\r\nclass CancelToken {\r\n constructor(executor) {\r\n if (typeof executor !== 'function') {\r\n throw new TypeError('executor must be a function.');\r\n }\r\n\r\n let resolvePromise;\r\n\r\n this.promise = new Promise(function promiseExecutor(resolve) {\r\n resolvePromise = resolve;\r\n });\r\n\r\n const token = this;\r\n\r\n // eslint-disable-next-line func-names\r\n this.promise.then(cancel => {\r\n if (!token._listeners) return;\r\n\r\n let i = token._listeners.length;\r\n\r\n while (i-- > 0) {\r\n token._listeners[i](cancel);\r\n }\r\n token._listeners = null;\r\n });\r\n\r\n // eslint-disable-next-line func-names\r\n this.promise.then = onfulfilled => {\r\n let _resolve;\r\n // eslint-disable-next-line func-names\r\n const promise = new Promise(resolve => {\r\n token.subscribe(resolve);\r\n _resolve = resolve;\r\n }).then(onfulfilled);\r\n\r\n promise.cancel = function reject() {\r\n token.unsubscribe(_resolve);\r\n };\r\n\r\n return promise;\r\n };\r\n\r\n executor(function cancel(message, config, request) {\r\n if (token.reason) {\r\n // Cancellation has already been requested\r\n return;\r\n }\r\n\r\n token.reason = new CanceledError(message, config, request);\r\n resolvePromise(token.reason);\r\n });\r\n }\r\n\r\n /**\r\n * Throws a `CanceledError` if cancellation has been requested.\r\n */\r\n throwIfRequested() {\r\n if (this.reason) {\r\n throw this.reason;\r\n }\r\n }\r\n\r\n /**\r\n * Subscribe to the cancel signal\r\n */\r\n\r\n subscribe(listener) {\r\n if (this.reason) {\r\n listener(this.reason);\r\n return;\r\n }\r\n\r\n if (this._listeners) {\r\n this._listeners.push(listener);\r\n } else {\r\n this._listeners = [listener];\r\n }\r\n }\r\n\r\n /**\r\n * Unsubscribe from the cancel signal\r\n */\r\n\r\n unsubscribe(listener) {\r\n if (!this._listeners) {\r\n return;\r\n }\r\n const index = this._listeners.indexOf(listener);\r\n if (index !== -1) {\r\n this._listeners.splice(index, 1);\r\n }\r\n }\r\n\r\n toAbortSignal() {\r\n const controller = new AbortController();\r\n\r\n const abort = (err) => {\r\n controller.abort(err);\r\n };\r\n\r\n this.subscribe(abort);\r\n\r\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\r\n\r\n return controller.signal;\r\n }\r\n\r\n /**\r\n * Returns an object that contains a new `CancelToken` and a function that, when called,\r\n * cancels the `CancelToken`.\r\n */\r\n static source() {\r\n let cancel;\r\n const token = new CancelToken(function executor(c) {\r\n cancel = c;\r\n });\r\n return {\r\n token,\r\n cancel\r\n };\r\n }\r\n}\r\n\r\nexport default CancelToken;\r\n", "'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n *\r\n * @returns {Function}\r\n */\r\nexport default function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n}\r\n", "'use strict';\r\n\r\nimport utils from './../utils.js';\r\n\r\n/**\r\n * Determines whether the payload is an error thrown by Axios\r\n *\r\n * @param {*} payload The value to test\r\n *\r\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\r\n */\r\nexport default function isAxiosError(payload) {\r\n return utils.isObject(payload) && (payload.isAxiosError === true);\r\n}\r\n", "const HttpStatusCode = {\r\n Continue: 100,\r\n SwitchingProtocols: 101,\r\n Processing: 102,\r\n EarlyHints: 103,\r\n Ok: 200,\r\n Created: 201,\r\n Accepted: 202,\r\n NonAuthoritativeInformation: 203,\r\n NoContent: 204,\r\n ResetContent: 205,\r\n PartialContent: 206,\r\n MultiStatus: 207,\r\n AlreadyReported: 208,\r\n ImUsed: 226,\r\n MultipleChoices: 300,\r\n MovedPermanently: 301,\r\n Found: 302,\r\n SeeOther: 303,\r\n NotModified: 304,\r\n UseProxy: 305,\r\n Unused: 306,\r\n TemporaryRedirect: 307,\r\n PermanentRedirect: 308,\r\n BadRequest: 400,\r\n Unauthorized: 401,\r\n PaymentRequired: 402,\r\n Forbidden: 403,\r\n NotFound: 404,\r\n MethodNotAllowed: 405,\r\n NotAcceptable: 406,\r\n ProxyAuthenticationRequired: 407,\r\n RequestTimeout: 408,\r\n Conflict: 409,\r\n Gone: 410,\r\n LengthRequired: 411,\r\n PreconditionFailed: 412,\r\n PayloadTooLarge: 413,\r\n UriTooLong: 414,\r\n UnsupportedMediaType: 415,\r\n RangeNotSatisfiable: 416,\r\n ExpectationFailed: 417,\r\n ImATeapot: 418,\r\n MisdirectedRequest: 421,\r\n UnprocessableEntity: 422,\r\n Locked: 423,\r\n FailedDependency: 424,\r\n TooEarly: 425,\r\n UpgradeRequired: 426,\r\n PreconditionRequired: 428,\r\n TooManyRequests: 429,\r\n RequestHeaderFieldsTooLarge: 431,\r\n UnavailableForLegalReasons: 451,\r\n InternalServerError: 500,\r\n NotImplemented: 501,\r\n BadGateway: 502,\r\n ServiceUnavailable: 503,\r\n GatewayTimeout: 504,\r\n HttpVersionNotSupported: 505,\r\n VariantAlsoNegotiates: 506,\r\n InsufficientStorage: 507,\r\n LoopDetected: 508,\r\n NotExtended: 510,\r\n NetworkAuthenticationRequired: 511,\r\n WebServerIsDown: 521,\r\n ConnectionTimedOut: 522,\r\n OriginIsUnreachable: 523,\r\n TimeoutOccurred: 524,\r\n SslHandshakeFailed: 525,\r\n InvalidSslCertificate: 526,\r\n};\r\n\r\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\r\n HttpStatusCode[value] = key;\r\n});\r\n\r\nexport default HttpStatusCode;\r\n", "'use strict';\r\n\r\nimport utils from './utils.js';\r\nimport bind from './helpers/bind.js';\r\nimport Axios from './core/Axios.js';\r\nimport mergeConfig from './core/mergeConfig.js';\r\nimport defaults from './defaults/index.js';\r\nimport formDataToJSON from './helpers/formDataToJSON.js';\r\nimport CanceledError from './cancel/CanceledError.js';\r\nimport CancelToken from './cancel/CancelToken.js';\r\nimport isCancel from './cancel/isCancel.js';\r\nimport {VERSION} from './env/data.js';\r\nimport toFormData from './helpers/toFormData.js';\r\nimport AxiosError from './core/AxiosError.js';\r\nimport spread from './helpers/spread.js';\r\nimport isAxiosError from './helpers/isAxiosError.js';\r\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\r\nimport adapters from './adapters/adapters.js';\r\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\r\n\r\n/**\r\n * Create an instance of Axios\r\n *\r\n * @param {Object} defaultConfig The default config for the instance\r\n *\r\n * @returns {Axios} A new instance of Axios\r\n */\r\nfunction createInstance(defaultConfig) {\r\n const context = new Axios(defaultConfig);\r\n const instance = bind(Axios.prototype.request, context);\r\n\r\n // Copy axios.prototype to instance\r\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\r\n\r\n // Copy context to instance\r\n utils.extend(instance, context, null, {allOwnKeys: true});\r\n\r\n // Factory for creating new instances\r\n instance.create = function create(instanceConfig) {\r\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\r\n };\r\n\r\n return instance;\r\n}\r\n\r\n// Create the default instance to be exported\r\nconst axios = createInstance(defaults);\r\n\r\n// Expose Axios class to allow class inheritance\r\naxios.Axios = Axios;\r\n\r\n// Expose Cancel & CancelToken\r\naxios.CanceledError = CanceledError;\r\naxios.CancelToken = CancelToken;\r\naxios.isCancel = isCancel;\r\naxios.VERSION = VERSION;\r\naxios.toFormData = toFormData;\r\n\r\n// Expose AxiosError class\r\naxios.AxiosError = AxiosError;\r\n\r\n// alias for CanceledError for backward compatibility\r\naxios.Cancel = axios.CanceledError;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\n\r\naxios.spread = spread;\r\n\r\n// Expose isAxiosError\r\naxios.isAxiosError = isAxiosError;\r\n\r\n// Expose mergeConfig\r\naxios.mergeConfig = mergeConfig;\r\n\r\naxios.AxiosHeaders = AxiosHeaders;\r\n\r\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\r\n\r\naxios.getAdapter = adapters.getAdapter;\r\n\r\naxios.HttpStatusCode = HttpStatusCode;\r\n\r\naxios.default = axios;\r\n\r\n// this module should only have a default export\r\nexport default axios\r\n", "import axios from './lib/axios.js';\r\n\r\n// This module is intended to unwrap Axios default export as named.\r\n// Keep top-level export same with static properties\r\n// so that it can keep same with es module or cjs\r\nconst {\r\n Axios,\r\n AxiosError,\r\n CanceledError,\r\n isCancel,\r\n CancelToken,\r\n VERSION,\r\n all,\r\n Cancel,\r\n isAxiosError,\r\n spread,\r\n toFormData,\r\n AxiosHeaders,\r\n HttpStatusCode,\r\n formToJSON,\r\n getAdapter,\r\n mergeConfig\r\n} = axios;\r\n\r\nexport {\r\n axios as default,\r\n Axios,\r\n AxiosError,\r\n CanceledError,\r\n isCancel,\r\n CancelToken,\r\n VERSION,\r\n all,\r\n Cancel,\r\n isAxiosError,\r\n spread,\r\n toFormData,\r\n AxiosHeaders,\r\n HttpStatusCode,\r\n formToJSON,\r\n getAdapter,\r\n mergeConfig\r\n}\r\n"], "mappings": "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", "names": ["prototype", "descriptors", "filter", "hasOwnProperty", "filter", "prototype", "toString", "encode", "isFormData", "isFileList", "transitional", "filter", "self", "prototype", "validateStatus", "origin", "merge", "transitional", "signal", "iterator", "done", "isFunction", "ReadableStream", "fetch", "adapter", "adapter", "validators", "transitional", "Axios", "AxiosError", "CanceledError", "isCancel", "CancelToken", "VERSION", "all", "isAxiosError", "spread", "toFormData", "AxiosHeaders", "HttpStatusCode", "getAdapter", "mergeConfig"] } diff --git a/admin/node_modules/.vite/deps/element-plus.js b/admin/node_modules/.vite/deps/element-plus.js index 41576738..ca106f84 100644 --- a/admin/node_modules/.vite/deps/element-plus.js +++ b/admin/node_modules/.vite/deps/element-plus.js @@ -514,11 +514,11 @@ import { virtualizedScrollbarProps, watermarkProps, zIndexContextKey -} from "./chunk-6CKQ2YFZ.js"; -import "./chunk-OP4ZUAFM.js"; +} from "./chunk-47WSI2HY.js"; +import "./chunk-YAGW2SQC.js"; +import "./chunk-L7WLSQ4R.js"; +import "./chunk-ELEEJBJQ.js"; import "./chunk-QZC7O2C6.js"; -import "./chunk-HYZ2CRGS.js"; -import "./chunk-H2732BJL.js"; import "./chunk-G3PMV62Z.js"; var export_dayjs = import_dayjs.default; export { diff --git a/admin/node_modules/.vite/deps/element-plus_dist_locale_zh-cn__mjs.js.map b/admin/node_modules/.vite/deps/element-plus_dist_locale_zh-cn__mjs.js.map index d0e70c5a..e86e901d 100644 --- a/admin/node_modules/.vite/deps/element-plus_dist_locale_zh-cn__mjs.js.map +++ b/admin/node_modules/.vite/deps/element-plus_dist_locale_zh-cn__mjs.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/dist/locale/zh-cn.mjs"], - "sourcesContent": ["/*! Element Plus v2.13.1 */\n\nvar zhCn = {\n name: \"zh-cn\",\n el: {\n breadcrumb: {\n label: \"\\u9762\\u5305\\u5C51\"\n },\n colorpicker: {\n confirm: \"\\u786E\\u5B9A\",\n clear: \"\\u6E05\\u7A7A\",\n defaultLabel: \"\\u989C\\u8272\\u9009\\u62E9\\u5668\",\n description: \"\\u5F53\\u524D\\u989C\\u8272 {color}\\uFF0C\\u6309 Enter \\u952E\\u9009\\u62E9\\u65B0\\u989C\\u8272\",\n alphaLabel: \"\\u9009\\u62E9\\u900F\\u660E\\u5EA6\\u7684\\u503C\",\n alphaDescription: \"\\u900F\\u660E\\u5EA6 {alpha}, \\u5F53\\u524D\\u989C\\u8272 {color}\",\n hueLabel: \"\\u9009\\u62E9\\u8272\\u76F8\\u503C\",\n hueDescription: \"\\u8272\\u76F8 {hue}, \\u5F53\\u524D\\u989C\\u8272 {color}\",\n svLabel: \"\\u9009\\u62E9\\u9971\\u548C\\u5EA6\\u4E0E\\u660E\\u5EA6\\u7684\\u503C\",\n svDescription: \"\\u9971\\u548C\\u5EA6 {saturation}, \\u660E\\u5EA6 {brightness}, \\u5F53\\u524D\\u989C\\u8272 {color}\",\n predefineDescription: \"\\u9009\\u62E9 {value} \\u4F5C\\u4E3A\\u989C\\u8272\"\n },\n datepicker: {\n now: \"\\u6B64\\u523B\",\n today: \"\\u4ECA\\u5929\",\n cancel: \"\\u53D6\\u6D88\",\n clear: \"\\u6E05\\u7A7A\",\n confirm: \"\\u786E\\u5B9A\",\n dateTablePrompt: \"\\u4F7F\\u7528\\u65B9\\u5411\\u952E\\u4E0E Enter \\u952E\\u53EF\\u9009\\u62E9\\u65E5\\u671F\",\n monthTablePrompt: \"\\u4F7F\\u7528\\u65B9\\u5411\\u952E\\u4E0E Enter \\u952E\\u53EF\\u9009\\u62E9\\u6708\\u4EFD\",\n yearTablePrompt: \"\\u4F7F\\u7528\\u65B9\\u5411\\u952E\\u4E0E Enter \\u952E\\u53EF\\u9009\\u62E9\\u5E74\\u4EFD\",\n selectedDate: \"\\u5DF2\\u9009\\u65E5\\u671F\",\n selectDate: \"\\u9009\\u62E9\\u65E5\\u671F\",\n selectTime: \"\\u9009\\u62E9\\u65F6\\u95F4\",\n startDate: \"\\u5F00\\u59CB\\u65E5\\u671F\",\n startTime: \"\\u5F00\\u59CB\\u65F6\\u95F4\",\n endDate: \"\\u7ED3\\u675F\\u65E5\\u671F\",\n endTime: \"\\u7ED3\\u675F\\u65F6\\u95F4\",\n prevYear: \"\\u524D\\u4E00\\u5E74\",\n nextYear: \"\\u540E\\u4E00\\u5E74\",\n prevMonth: \"\\u4E0A\\u4E2A\\u6708\",\n nextMonth: \"\\u4E0B\\u4E2A\\u6708\",\n year: \"\\u5E74\",\n month1: \"1 \\u6708\",\n month2: \"2 \\u6708\",\n month3: \"3 \\u6708\",\n month4: \"4 \\u6708\",\n month5: \"5 \\u6708\",\n month6: \"6 \\u6708\",\n month7: \"7 \\u6708\",\n month8: \"8 \\u6708\",\n month9: \"9 \\u6708\",\n month10: \"10 \\u6708\",\n month11: \"11 \\u6708\",\n month12: \"12 \\u6708\",\n weeks: {\n sun: \"\\u65E5\",\n mon: \"\\u4E00\",\n tue: \"\\u4E8C\",\n wed: \"\\u4E09\",\n thu: \"\\u56DB\",\n fri: \"\\u4E94\",\n sat: \"\\u516D\"\n },\n weeksFull: {\n sun: \"\\u661F\\u671F\\u65E5\",\n mon: \"\\u661F\\u671F\\u4E00\",\n tue: \"\\u661F\\u671F\\u4E8C\",\n wed: \"\\u661F\\u671F\\u4E09\",\n thu: \"\\u661F\\u671F\\u56DB\",\n fri: \"\\u661F\\u671F\\u4E94\",\n sat: \"\\u661F\\u671F\\u516D\"\n },\n months: {\n jan: \"\\u4E00\\u6708\",\n feb: \"\\u4E8C\\u6708\",\n mar: \"\\u4E09\\u6708\",\n apr: \"\\u56DB\\u6708\",\n may: \"\\u4E94\\u6708\",\n jun: \"\\u516D\\u6708\",\n jul: \"\\u4E03\\u6708\",\n aug: \"\\u516B\\u6708\",\n sep: \"\\u4E5D\\u6708\",\n oct: \"\\u5341\\u6708\",\n nov: \"\\u5341\\u4E00\\u6708\",\n dec: \"\\u5341\\u4E8C\\u6708\"\n }\n },\n inputNumber: {\n decrease: \"\\u51CF\\u5C11\\u6570\\u503C\",\n increase: \"\\u589E\\u52A0\\u6570\\u503C\"\n },\n select: {\n loading: \"\\u52A0\\u8F7D\\u4E2D\",\n noMatch: \"\\u65E0\\u5339\\u914D\\u6570\\u636E\",\n noData: \"\\u65E0\\u6570\\u636E\",\n placeholder: \"\\u8BF7\\u9009\\u62E9\"\n },\n mention: {\n loading: \"\\u52A0\\u8F7D\\u4E2D\"\n },\n dropdown: {\n toggleDropdown: \"\\u5207\\u6362\\u4E0B\\u62C9\\u9009\\u9879\"\n },\n cascader: {\n noMatch: \"\\u65E0\\u5339\\u914D\\u6570\\u636E\",\n loading: \"\\u52A0\\u8F7D\\u4E2D\",\n placeholder: \"\\u8BF7\\u9009\\u62E9\",\n noData: \"\\u6682\\u65E0\\u6570\\u636E\"\n },\n pagination: {\n goto: \"\\u524D\\u5F80\",\n pagesize: \"\\u6761/\\u9875\",\n total: \"\\u5171 {total} \\u6761\",\n pageClassifier: \"\\u9875\",\n page: \"\\u9875\",\n prev: \"\\u4E0A\\u4E00\\u9875\",\n next: \"\\u4E0B\\u4E00\\u9875\",\n currentPage: \"\\u7B2C {pager} \\u9875\",\n prevPages: \"\\u5411\\u524D {pager} \\u9875\",\n nextPages: \"\\u5411\\u540E {pager} \\u9875\",\n deprecationWarning: \"\\u4F60\\u4F7F\\u7528\\u4E86\\u4E00\\u4E9B\\u5DF2\\u88AB\\u5E9F\\u5F03\\u7684\\u7528\\u6CD5\\uFF0C\\u8BF7\\u53C2\\u8003 el-pagination \\u7684\\u5B98\\u65B9\\u6587\\u6863\"\n },\n dialog: {\n close: \"\\u5173\\u95ED\\u6B64\\u5BF9\\u8BDD\\u6846\"\n },\n drawer: {\n close: \"\\u5173\\u95ED\\u6B64\\u5BF9\\u8BDD\\u6846\"\n },\n messagebox: {\n title: \"\\u63D0\\u793A\",\n confirm: \"\\u786E\\u5B9A\",\n cancel: \"\\u53D6\\u6D88\",\n error: \"\\u8F93\\u5165\\u7684\\u6570\\u636E\\u4E0D\\u5408\\u6CD5!\",\n close: \"\\u5173\\u95ED\\u6B64\\u5BF9\\u8BDD\\u6846\"\n },\n upload: {\n deleteTip: \"\\u6309 Delete \\u952E\\u53EF\\u5220\\u9664\",\n delete: \"\\u5220\\u9664\",\n preview: \"\\u67E5\\u770B\\u56FE\\u7247\",\n continue: \"\\u7EE7\\u7EED\\u4E0A\\u4F20\"\n },\n slider: {\n defaultLabel: \"\\u6ED1\\u5757\\u4ECB\\u4E8E {min} \\u81F3 {max}\",\n defaultRangeStartLabel: \"\\u9009\\u62E9\\u8D77\\u59CB\\u503C\",\n defaultRangeEndLabel: \"\\u9009\\u62E9\\u7ED3\\u675F\\u503C\"\n },\n table: {\n emptyText: \"\\u6682\\u65E0\\u6570\\u636E\",\n confirmFilter: \"\\u7B5B\\u9009\",\n resetFilter: \"\\u91CD\\u7F6E\",\n clearFilter: \"\\u5168\\u90E8\",\n sumText: \"\\u5408\\u8BA1\",\n selectAllLabel: \"\\u9009\\u62E9\\u6240\\u6709\\u884C\",\n selectRowLabel: \"\\u9009\\u62E9\\u5F53\\u524D\\u884C\",\n expandRowLabel: \"\\u5C55\\u5F00\\u5F53\\u524D\\u884C\",\n collapseRowLabel: \"\\u6536\\u8D77\\u5F53\\u524D\\u884C\",\n sortLabel: \"\\u6309 {column} \\u6392\\u5E8F\",\n filterLabel: \"\\u6309 {column} \\u8FC7\\u6EE4\"\n },\n tag: {\n close: \"\\u5173\\u95ED\\u6B64\\u6807\\u7B7E\"\n },\n tour: {\n next: \"\\u4E0B\\u4E00\\u6B65\",\n previous: \"\\u4E0A\\u4E00\\u6B65\",\n finish: \"\\u7ED3\\u675F\\u5BFC\\u89C8\",\n close: \"\\u5173\\u95ED\\u6B64\\u5BF9\\u8BDD\\u6846\"\n },\n tree: {\n emptyText: \"\\u6682\\u65E0\\u6570\\u636E\"\n },\n transfer: {\n noMatch: \"\\u65E0\\u5339\\u914D\\u6570\\u636E\",\n noData: \"\\u65E0\\u6570\\u636E\",\n titles: [\"\\u5217\\u8868 1\", \"\\u5217\\u8868 2\"],\n filterPlaceholder: \"\\u8BF7\\u8F93\\u5165\\u641C\\u7D22\\u5185\\u5BB9\",\n noCheckedFormat: \"\\u5171 {total} \\u9879\",\n hasCheckedFormat: \"\\u5DF2\\u9009 {checked}/{total} \\u9879\"\n },\n image: {\n error: \"\\u52A0\\u8F7D\\u5931\\u8D25\"\n },\n pageHeader: {\n title: \"\\u8FD4\\u56DE\"\n },\n popconfirm: {\n confirmButtonText: \"\\u786E\\u5B9A\",\n cancelButtonText: \"\\u53D6\\u6D88\"\n },\n carousel: {\n leftArrow: \"\\u4E0A\\u4E00\\u5F20\\u5E7B\\u706F\\u7247\",\n rightArrow: \"\\u4E0B\\u4E00\\u5F20\\u5E7B\\u706F\\u7247\",\n indicator: \"\\u5E7B\\u706F\\u7247\\u5207\\u6362\\u81F3\\u7D22\\u5F15 {index}\"\n }\n }\n};\n\nexport { zhCn as default };\n"], + "sourcesContent": ["/*! Element Plus v2.13.1 */\r\n\r\nvar zhCn = {\r\n name: \"zh-cn\",\r\n el: {\r\n breadcrumb: {\r\n label: \"\\u9762\\u5305\\u5C51\"\r\n },\r\n colorpicker: {\r\n confirm: \"\\u786E\\u5B9A\",\r\n clear: \"\\u6E05\\u7A7A\",\r\n defaultLabel: \"\\u989C\\u8272\\u9009\\u62E9\\u5668\",\r\n description: \"\\u5F53\\u524D\\u989C\\u8272 {color}\\uFF0C\\u6309 Enter \\u952E\\u9009\\u62E9\\u65B0\\u989C\\u8272\",\r\n alphaLabel: \"\\u9009\\u62E9\\u900F\\u660E\\u5EA6\\u7684\\u503C\",\r\n alphaDescription: \"\\u900F\\u660E\\u5EA6 {alpha}, \\u5F53\\u524D\\u989C\\u8272 {color}\",\r\n hueLabel: \"\\u9009\\u62E9\\u8272\\u76F8\\u503C\",\r\n hueDescription: \"\\u8272\\u76F8 {hue}, \\u5F53\\u524D\\u989C\\u8272 {color}\",\r\n svLabel: \"\\u9009\\u62E9\\u9971\\u548C\\u5EA6\\u4E0E\\u660E\\u5EA6\\u7684\\u503C\",\r\n svDescription: \"\\u9971\\u548C\\u5EA6 {saturation}, \\u660E\\u5EA6 {brightness}, \\u5F53\\u524D\\u989C\\u8272 {color}\",\r\n predefineDescription: \"\\u9009\\u62E9 {value} \\u4F5C\\u4E3A\\u989C\\u8272\"\r\n },\r\n datepicker: {\r\n now: \"\\u6B64\\u523B\",\r\n today: \"\\u4ECA\\u5929\",\r\n cancel: \"\\u53D6\\u6D88\",\r\n clear: \"\\u6E05\\u7A7A\",\r\n confirm: \"\\u786E\\u5B9A\",\r\n dateTablePrompt: \"\\u4F7F\\u7528\\u65B9\\u5411\\u952E\\u4E0E Enter \\u952E\\u53EF\\u9009\\u62E9\\u65E5\\u671F\",\r\n monthTablePrompt: \"\\u4F7F\\u7528\\u65B9\\u5411\\u952E\\u4E0E Enter \\u952E\\u53EF\\u9009\\u62E9\\u6708\\u4EFD\",\r\n yearTablePrompt: \"\\u4F7F\\u7528\\u65B9\\u5411\\u952E\\u4E0E Enter \\u952E\\u53EF\\u9009\\u62E9\\u5E74\\u4EFD\",\r\n selectedDate: \"\\u5DF2\\u9009\\u65E5\\u671F\",\r\n selectDate: \"\\u9009\\u62E9\\u65E5\\u671F\",\r\n selectTime: \"\\u9009\\u62E9\\u65F6\\u95F4\",\r\n startDate: \"\\u5F00\\u59CB\\u65E5\\u671F\",\r\n startTime: \"\\u5F00\\u59CB\\u65F6\\u95F4\",\r\n endDate: \"\\u7ED3\\u675F\\u65E5\\u671F\",\r\n endTime: \"\\u7ED3\\u675F\\u65F6\\u95F4\",\r\n prevYear: \"\\u524D\\u4E00\\u5E74\",\r\n nextYear: \"\\u540E\\u4E00\\u5E74\",\r\n prevMonth: \"\\u4E0A\\u4E2A\\u6708\",\r\n nextMonth: \"\\u4E0B\\u4E2A\\u6708\",\r\n year: \"\\u5E74\",\r\n month1: \"1 \\u6708\",\r\n month2: \"2 \\u6708\",\r\n month3: \"3 \\u6708\",\r\n month4: \"4 \\u6708\",\r\n month5: \"5 \\u6708\",\r\n month6: \"6 \\u6708\",\r\n month7: \"7 \\u6708\",\r\n month8: \"8 \\u6708\",\r\n month9: \"9 \\u6708\",\r\n month10: \"10 \\u6708\",\r\n month11: \"11 \\u6708\",\r\n month12: \"12 \\u6708\",\r\n weeks: {\r\n sun: \"\\u65E5\",\r\n mon: \"\\u4E00\",\r\n tue: \"\\u4E8C\",\r\n wed: \"\\u4E09\",\r\n thu: \"\\u56DB\",\r\n fri: \"\\u4E94\",\r\n sat: \"\\u516D\"\r\n },\r\n weeksFull: {\r\n sun: \"\\u661F\\u671F\\u65E5\",\r\n mon: \"\\u661F\\u671F\\u4E00\",\r\n tue: \"\\u661F\\u671F\\u4E8C\",\r\n wed: \"\\u661F\\u671F\\u4E09\",\r\n thu: \"\\u661F\\u671F\\u56DB\",\r\n fri: \"\\u661F\\u671F\\u4E94\",\r\n sat: \"\\u661F\\u671F\\u516D\"\r\n },\r\n months: {\r\n jan: \"\\u4E00\\u6708\",\r\n feb: \"\\u4E8C\\u6708\",\r\n mar: \"\\u4E09\\u6708\",\r\n apr: \"\\u56DB\\u6708\",\r\n may: \"\\u4E94\\u6708\",\r\n jun: \"\\u516D\\u6708\",\r\n jul: \"\\u4E03\\u6708\",\r\n aug: \"\\u516B\\u6708\",\r\n sep: \"\\u4E5D\\u6708\",\r\n oct: \"\\u5341\\u6708\",\r\n nov: \"\\u5341\\u4E00\\u6708\",\r\n dec: \"\\u5341\\u4E8C\\u6708\"\r\n }\r\n },\r\n inputNumber: {\r\n decrease: \"\\u51CF\\u5C11\\u6570\\u503C\",\r\n increase: \"\\u589E\\u52A0\\u6570\\u503C\"\r\n },\r\n select: {\r\n loading: \"\\u52A0\\u8F7D\\u4E2D\",\r\n noMatch: \"\\u65E0\\u5339\\u914D\\u6570\\u636E\",\r\n noData: \"\\u65E0\\u6570\\u636E\",\r\n placeholder: \"\\u8BF7\\u9009\\u62E9\"\r\n },\r\n mention: {\r\n loading: \"\\u52A0\\u8F7D\\u4E2D\"\r\n },\r\n dropdown: {\r\n toggleDropdown: \"\\u5207\\u6362\\u4E0B\\u62C9\\u9009\\u9879\"\r\n },\r\n cascader: {\r\n noMatch: \"\\u65E0\\u5339\\u914D\\u6570\\u636E\",\r\n loading: \"\\u52A0\\u8F7D\\u4E2D\",\r\n placeholder: \"\\u8BF7\\u9009\\u62E9\",\r\n noData: \"\\u6682\\u65E0\\u6570\\u636E\"\r\n },\r\n pagination: {\r\n goto: \"\\u524D\\u5F80\",\r\n pagesize: \"\\u6761/\\u9875\",\r\n total: \"\\u5171 {total} \\u6761\",\r\n pageClassifier: \"\\u9875\",\r\n page: \"\\u9875\",\r\n prev: \"\\u4E0A\\u4E00\\u9875\",\r\n next: \"\\u4E0B\\u4E00\\u9875\",\r\n currentPage: \"\\u7B2C {pager} \\u9875\",\r\n prevPages: \"\\u5411\\u524D {pager} \\u9875\",\r\n nextPages: \"\\u5411\\u540E {pager} \\u9875\",\r\n deprecationWarning: \"\\u4F60\\u4F7F\\u7528\\u4E86\\u4E00\\u4E9B\\u5DF2\\u88AB\\u5E9F\\u5F03\\u7684\\u7528\\u6CD5\\uFF0C\\u8BF7\\u53C2\\u8003 el-pagination \\u7684\\u5B98\\u65B9\\u6587\\u6863\"\r\n },\r\n dialog: {\r\n close: \"\\u5173\\u95ED\\u6B64\\u5BF9\\u8BDD\\u6846\"\r\n },\r\n drawer: {\r\n close: \"\\u5173\\u95ED\\u6B64\\u5BF9\\u8BDD\\u6846\"\r\n },\r\n messagebox: {\r\n title: \"\\u63D0\\u793A\",\r\n confirm: \"\\u786E\\u5B9A\",\r\n cancel: \"\\u53D6\\u6D88\",\r\n error: \"\\u8F93\\u5165\\u7684\\u6570\\u636E\\u4E0D\\u5408\\u6CD5!\",\r\n close: \"\\u5173\\u95ED\\u6B64\\u5BF9\\u8BDD\\u6846\"\r\n },\r\n upload: {\r\n deleteTip: \"\\u6309 Delete \\u952E\\u53EF\\u5220\\u9664\",\r\n delete: \"\\u5220\\u9664\",\r\n preview: \"\\u67E5\\u770B\\u56FE\\u7247\",\r\n continue: \"\\u7EE7\\u7EED\\u4E0A\\u4F20\"\r\n },\r\n slider: {\r\n defaultLabel: \"\\u6ED1\\u5757\\u4ECB\\u4E8E {min} \\u81F3 {max}\",\r\n defaultRangeStartLabel: \"\\u9009\\u62E9\\u8D77\\u59CB\\u503C\",\r\n defaultRangeEndLabel: \"\\u9009\\u62E9\\u7ED3\\u675F\\u503C\"\r\n },\r\n table: {\r\n emptyText: \"\\u6682\\u65E0\\u6570\\u636E\",\r\n confirmFilter: \"\\u7B5B\\u9009\",\r\n resetFilter: \"\\u91CD\\u7F6E\",\r\n clearFilter: \"\\u5168\\u90E8\",\r\n sumText: \"\\u5408\\u8BA1\",\r\n selectAllLabel: \"\\u9009\\u62E9\\u6240\\u6709\\u884C\",\r\n selectRowLabel: \"\\u9009\\u62E9\\u5F53\\u524D\\u884C\",\r\n expandRowLabel: \"\\u5C55\\u5F00\\u5F53\\u524D\\u884C\",\r\n collapseRowLabel: \"\\u6536\\u8D77\\u5F53\\u524D\\u884C\",\r\n sortLabel: \"\\u6309 {column} \\u6392\\u5E8F\",\r\n filterLabel: \"\\u6309 {column} \\u8FC7\\u6EE4\"\r\n },\r\n tag: {\r\n close: \"\\u5173\\u95ED\\u6B64\\u6807\\u7B7E\"\r\n },\r\n tour: {\r\n next: \"\\u4E0B\\u4E00\\u6B65\",\r\n previous: \"\\u4E0A\\u4E00\\u6B65\",\r\n finish: \"\\u7ED3\\u675F\\u5BFC\\u89C8\",\r\n close: \"\\u5173\\u95ED\\u6B64\\u5BF9\\u8BDD\\u6846\"\r\n },\r\n tree: {\r\n emptyText: \"\\u6682\\u65E0\\u6570\\u636E\"\r\n },\r\n transfer: {\r\n noMatch: \"\\u65E0\\u5339\\u914D\\u6570\\u636E\",\r\n noData: \"\\u65E0\\u6570\\u636E\",\r\n titles: [\"\\u5217\\u8868 1\", \"\\u5217\\u8868 2\"],\r\n filterPlaceholder: \"\\u8BF7\\u8F93\\u5165\\u641C\\u7D22\\u5185\\u5BB9\",\r\n noCheckedFormat: \"\\u5171 {total} \\u9879\",\r\n hasCheckedFormat: \"\\u5DF2\\u9009 {checked}/{total} \\u9879\"\r\n },\r\n image: {\r\n error: \"\\u52A0\\u8F7D\\u5931\\u8D25\"\r\n },\r\n pageHeader: {\r\n title: \"\\u8FD4\\u56DE\"\r\n },\r\n popconfirm: {\r\n confirmButtonText: \"\\u786E\\u5B9A\",\r\n cancelButtonText: \"\\u53D6\\u6D88\"\r\n },\r\n carousel: {\r\n leftArrow: \"\\u4E0A\\u4E00\\u5F20\\u5E7B\\u706F\\u7247\",\r\n rightArrow: \"\\u4E0B\\u4E00\\u5F20\\u5E7B\\u706F\\u7247\",\r\n indicator: \"\\u5E7B\\u706F\\u7247\\u5207\\u6362\\u81F3\\u7D22\\u5F15 {index}\"\r\n }\r\n }\r\n};\r\n\r\nexport { zhCn as default };\r\n"], "mappings": "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", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es.js b/admin/node_modules/.vite/deps/element-plus_es.js index 4b4bc581..bf073e79 100644 --- a/admin/node_modules/.vite/deps/element-plus_es.js +++ b/admin/node_modules/.vite/deps/element-plus_es.js @@ -514,11 +514,11 @@ import { virtualizedScrollbarProps, watermarkProps, zIndexContextKey -} from "./chunk-6CKQ2YFZ.js"; -import "./chunk-OP4ZUAFM.js"; +} from "./chunk-47WSI2HY.js"; +import "./chunk-YAGW2SQC.js"; +import "./chunk-L7WLSQ4R.js"; +import "./chunk-ELEEJBJQ.js"; import "./chunk-QZC7O2C6.js"; -import "./chunk-HYZ2CRGS.js"; -import "./chunk-H2732BJL.js"; import "./chunk-G3PMV62Z.js"; var export_dayjs = import_dayjs.default; export { diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_aside_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_aside_style_css.js index 2b8c47e2..cfb0395c 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_aside_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_aside_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/aside/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-aside.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-aside.css"; //# sourceMappingURL=element-plus_es_components_aside_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_aside_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_aside_style_css.js.map index 293247ca..503f0aae 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_aside_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_aside_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/aside/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-aside.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-aside.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_avatar_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_avatar_style_css.js index ec8b6658..b2b57cae 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_avatar_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_avatar_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/avatar/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-avatar.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-avatar.css"; //# sourceMappingURL=element-plus_es_components_avatar_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_avatar_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_avatar_style_css.js.map index 1edc2683..d424bd7c 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_avatar_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_avatar_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/avatar/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-avatar.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-avatar.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_base_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_base_style_css.js index edd4c988..a5f7e9a7 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_base_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_base_style_css.js @@ -1,2 +1,2 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; //# sourceMappingURL=element-plus_es_components_base_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb-item_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb-item_style_css.js index 639e0de7..764f6536 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb-item_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb-item_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/breadcrumb-item/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-breadcrumb-item.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-breadcrumb-item.css"; //# sourceMappingURL=element-plus_es_components_breadcrumb-item_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb-item_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb-item_style_css.js.map index dce04c55..69d0a428 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb-item_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb-item_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/breadcrumb-item/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-breadcrumb-item.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-breadcrumb-item.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb_style_css.js index 1b27f39b..719d7e0b 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/breadcrumb/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-breadcrumb.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-breadcrumb.css"; //# sourceMappingURL=element-plus_es_components_breadcrumb_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb_style_css.js.map index 8f9bf364..9c1d5a89 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_breadcrumb_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/breadcrumb/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-breadcrumb.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-breadcrumb.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_button_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_button_style_css.js index 271c2943..3f7ccdf6 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_button_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_button_style_css.js @@ -1,3 +1,3 @@ -import "./chunk-SMFPDFTD.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-I2FMO3TN.js"; +import "./chunk-QPJ3ZUOF.js"; //# sourceMappingURL=element-plus_es_components_button_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_col_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_col_style_css.js index 39a9ac5f..07193595 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_col_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_col_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/col/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-col.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-col.css"; //# sourceMappingURL=element-plus_es_components_col_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_col_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_col_style_css.js.map index 5960cba6..4d743abb 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_col_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_col_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/col/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-col.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-col.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_container_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_container_style_css.js index 42ff6285..aa17c7b6 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_container_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_container_style_css.js @@ -1,9 +1,9 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/container/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-container.css"; -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-aside.css"; -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-footer.css"; -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-header.css"; -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-main.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-container.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-aside.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-footer.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-header.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-main.css"; //# sourceMappingURL=element-plus_es_components_container_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_container_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_container_style_css.js.map index caa0b1f6..269e96f4 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_container_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_container_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/container/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-container.css';\nimport 'element-plus/theme-chalk/el-aside.css';\nimport 'element-plus/theme-chalk/el-footer.css';\nimport 'element-plus/theme-chalk/el-header.css';\nimport 'element-plus/theme-chalk/el-main.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-container.css';\r\nimport 'element-plus/theme-chalk/el-aside.css';\r\nimport 'element-plus/theme-chalk/el-footer.css';\r\nimport 'element-plus/theme-chalk/el-header.css';\r\nimport 'element-plus/theme-chalk/el-main.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_dialog_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_dialog_style_css.js index 979882ee..68ed62f2 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_dialog_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_dialog_style_css.js @@ -1,8 +1,8 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/dialog/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-dialog.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-dialog.css"; // node_modules/element-plus/es/components/overlay/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-overlay.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-overlay.css"; //# sourceMappingURL=element-plus_es_components_dialog_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_dialog_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_dialog_style_css.js.map index 8e7d07ca..5a618ff1 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_dialog_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_dialog_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/dialog/style/css.mjs", "../../element-plus/es/components/overlay/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-dialog.css';\nimport '../../overlay/style/css.mjs';\n//# sourceMappingURL=css.mjs.map\n", "import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-overlay.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-dialog.css';\r\nimport '../../overlay/style/css.mjs';\r\n//# sourceMappingURL=css.mjs.map\r\n", "import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-overlay.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;;;ACAP,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-item_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-item_style_css.js index 1a945b55..4c2dd3c5 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-item_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-item_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/dropdown-item/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-dropdown-item.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-dropdown-item.css"; //# sourceMappingURL=element-plus_es_components_dropdown-item_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-item_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-item_style_css.js.map index c8e7fb5c..3b9f82e4 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-item_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-item_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/dropdown-item/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-dropdown-item.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-dropdown-item.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-menu_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-menu_style_css.js index 48514692..43330abb 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-menu_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-menu_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/dropdown-menu/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-dropdown-menu.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-dropdown-menu.css"; //# sourceMappingURL=element-plus_es_components_dropdown-menu_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-menu_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-menu_style_css.js.map index acec34af..7ff85599 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-menu_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_dropdown-menu_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/dropdown-menu/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-dropdown-menu.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-dropdown-menu.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_dropdown_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_dropdown_style_css.js index fea2e829..cbd63a63 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_dropdown_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_dropdown_style_css.js @@ -1,11 +1,11 @@ -import "./chunk-REWOA3VH.js"; -import "./chunk-TX5YLZ4O.js"; -import "./chunk-SMFPDFTD.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-EFJ4VOFN.js"; +import "./chunk-4AQGC7O6.js"; +import "./chunk-I2FMO3TN.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/button-group/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-button-group.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-button-group.css"; // node_modules/element-plus/es/components/dropdown/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-dropdown.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-dropdown.css"; //# sourceMappingURL=element-plus_es_components_dropdown_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_dropdown_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_dropdown_style_css.js.map index 439a897e..1efad15b 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_dropdown_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_dropdown_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/button-group/style/css.mjs", "../../element-plus/es/components/dropdown/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-button-group.css';\n//# sourceMappingURL=css.mjs.map\n", "import '../../base/style/css.mjs';\nimport '../../button/style/css.mjs';\nimport '../../button-group/style/css.mjs';\nimport '../../popper/style/css.mjs';\nimport '../../scrollbar/style/css.mjs';\nimport 'element-plus/theme-chalk/el-dropdown.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-button-group.css';\r\n//# sourceMappingURL=css.mjs.map\r\n", "import '../../base/style/css.mjs';\r\nimport '../../button/style/css.mjs';\r\nimport '../../button-group/style/css.mjs';\r\nimport '../../popper/style/css.mjs';\r\nimport '../../scrollbar/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-dropdown.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;;;;AACA,OAAO;;;ACIP,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js index 5ca8d16c..460bed03 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/form-item/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-form-item.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-form-item.css"; //# sourceMappingURL=element-plus_es_components_form-item_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js.map index 905ea55d..f1fee750 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/form-item/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-form-item.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-form-item.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_form_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_form_style_css.js index cced46e6..963314d4 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_form_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_form_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/form/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-form.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-form.css"; //# sourceMappingURL=element-plus_es_components_form_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_form_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_form_style_css.js.map index d9c66f32..696b41fe 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_form_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_form_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/form/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-form.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-form.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_header_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_header_style_css.js index 0d11e06b..8844dc8d 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_header_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_header_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/header/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-header.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-header.css"; //# sourceMappingURL=element-plus_es_components_header_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_header_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_header_style_css.js.map index 6cb9b3f8..2ad14574 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_header_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_header_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/header/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-header.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-header.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_icon_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_icon_style_css.js index e6d4ee58..37b8161c 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_icon_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_icon_style_css.js @@ -1,2 +1,2 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; //# sourceMappingURL=element-plus_es_components_icon_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_input-number_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_input-number_style_css.js index 85aa8efa..d8659e9e 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_input-number_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_input-number_style_css.js @@ -1,6 +1,6 @@ -import "./chunk-NKQWFVTF.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-PKGVV2AH.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/input-number/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-input-number.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-input-number.css"; //# sourceMappingURL=element-plus_es_components_input-number_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_input-number_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_input-number_style_css.js.map index 9d5778d0..2fe9053d 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_input-number_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_input-number_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/input-number/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport '../../input/style/css.mjs';\nimport 'element-plus/theme-chalk/el-input-number.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport '../../input/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-input-number.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;;AAEA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_input_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_input_style_css.js index 007aa002..556c750a 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_input_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_input_style_css.js @@ -1,3 +1,3 @@ -import "./chunk-NKQWFVTF.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-PKGVV2AH.js"; +import "./chunk-QPJ3ZUOF.js"; //# sourceMappingURL=element-plus_es_components_input_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_loading_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_loading_style_css.js index f4f52e13..c40d9d95 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_loading_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_loading_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/loading/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-loading.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-loading.css"; //# sourceMappingURL=element-plus_es_components_loading_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_loading_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_loading_style_css.js.map index 2c2798e3..e944c8e9 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_loading_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_loading_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/loading/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-loading.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-loading.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_main_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_main_style_css.js index 3abb6bdb..33234328 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_main_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_main_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/main/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-main.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-main.css"; //# sourceMappingURL=element-plus_es_components_main_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_main_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_main_style_css.js.map index 4e6933a4..7d20c1c6 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_main_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_main_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/main/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-main.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-main.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_menu-item_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_menu-item_style_css.js index 505cb928..d7f3a112 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_menu-item_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_menu-item_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/menu-item/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-menu-item.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-menu-item.css"; //# sourceMappingURL=element-plus_es_components_menu-item_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_menu-item_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_menu-item_style_css.js.map index 020764d0..ebfcfec6 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_menu-item_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_menu-item_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/menu-item/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-menu-item.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-menu-item.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_menu_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_menu_style_css.js index c0cbac03..6d9a7c7e 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_menu_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_menu_style_css.js @@ -1,7 +1,7 @@ -import "./chunk-R5DNQ3QC.js"; -import "./chunk-TX5YLZ4O.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-PHTWDJV4.js"; +import "./chunk-4AQGC7O6.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/menu/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-menu.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-menu.css"; //# sourceMappingURL=element-plus_es_components_menu_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_menu_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_menu_style_css.js.map index 4099cadd..c990d0a0 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_menu_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_menu_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/menu/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-menu.css';\nimport '../../tooltip/style/css.mjs';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-menu.css';\r\nimport '../../tooltip/style/css.mjs';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_option_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_option_style_css.js index e5ddc4c1..a4c2c533 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_option_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_option_style_css.js @@ -1,3 +1,3 @@ -import "./chunk-UBLR4G7Q.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-CGXI5ONL.js"; +import "./chunk-QPJ3ZUOF.js"; //# sourceMappingURL=element-plus_es_components_option_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_pagination_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_pagination_style_css.js index 231a9f7e..5360d12e 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_pagination_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_pagination_style_css.js @@ -1,11 +1,11 @@ -import "./chunk-75C4BP7B.js"; -import "./chunk-UBLR4G7Q.js"; -import "./chunk-5KK3TTMN.js"; -import "./chunk-NKQWFVTF.js"; -import "./chunk-REWOA3VH.js"; -import "./chunk-TX5YLZ4O.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-FU6BXPW4.js"; +import "./chunk-CGXI5ONL.js"; +import "./chunk-DVSPEOSC.js"; +import "./chunk-EFJ4VOFN.js"; +import "./chunk-4AQGC7O6.js"; +import "./chunk-PKGVV2AH.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/pagination/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-pagination.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-pagination.css"; //# sourceMappingURL=element-plus_es_components_pagination_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_pagination_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_pagination_style_css.js.map index 30f0f2cb..7067c1e6 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_pagination_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_pagination_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/pagination/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-pagination.css';\nimport '../../select/style/css.mjs';\nimport '../../input/style/css.mjs';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-pagination.css';\r\nimport '../../select/style/css.mjs';\r\nimport '../../input/style/css.mjs';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;;;;;;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_radio-group_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_radio-group_style_css.js index 14776b4b..cf93a493 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_radio-group_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_radio-group_style_css.js @@ -1,6 +1,6 @@ -import "./chunk-4PW274X2.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-VPJRTVUV.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/radio-group/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-radio-group.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-radio-group.css"; //# sourceMappingURL=element-plus_es_components_radio-group_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_radio-group_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_radio-group_style_css.js.map index babb2a5f..7690a5ec 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_radio-group_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_radio-group_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/radio-group/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport '../../radio/style/css.mjs';\nimport 'element-plus/theme-chalk/el-radio-group.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport '../../radio/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-radio-group.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;;AAEA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_radio_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_radio_style_css.js index 40b73611..eb51dc4c 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_radio_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_radio_style_css.js @@ -1,3 +1,3 @@ -import "./chunk-4PW274X2.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-VPJRTVUV.js"; +import "./chunk-QPJ3ZUOF.js"; //# sourceMappingURL=element-plus_es_components_radio_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_row_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_row_style_css.js index 00901008..2135b59c 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_row_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_row_style_css.js @@ -1,5 +1,5 @@ -import "./chunk-IV6PSERC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/row/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-row.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-row.css"; //# sourceMappingURL=element-plus_es_components_row_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_row_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_row_style_css.js.map index 61363761..06bf7438 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_row_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_row_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/row/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-row.css';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-row.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_select_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_select_style_css.js index 66002177..56e17a4d 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_select_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_select_style_css.js @@ -1,7 +1,7 @@ -import "./chunk-75C4BP7B.js"; -import "./chunk-UBLR4G7Q.js"; -import "./chunk-5KK3TTMN.js"; -import "./chunk-REWOA3VH.js"; -import "./chunk-TX5YLZ4O.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-FU6BXPW4.js"; +import "./chunk-CGXI5ONL.js"; +import "./chunk-DVSPEOSC.js"; +import "./chunk-EFJ4VOFN.js"; +import "./chunk-4AQGC7O6.js"; +import "./chunk-QPJ3ZUOF.js"; //# sourceMappingURL=element-plus_es_components_select_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_table-column_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_table-column_style_css.js index 66d448f9..1233e92c 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_table-column_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_table-column_style_css.js @@ -1,7 +1,7 @@ -import "./chunk-B2YDYSZR.js"; -import "./chunk-5KK3TTMN.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-3UWZ6IZW.js"; +import "./chunk-DVSPEOSC.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/table-column/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-table-column.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-table-column.css"; //# sourceMappingURL=element-plus_es_components_table-column_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_table-column_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_table-column_style_css.js.map index 923eadcf..9812cdea 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_table-column_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_table-column_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/table-column/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-table-column.css';\nimport '../../checkbox/style/css.mjs';\nimport '../../tag/style/css.mjs';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-table-column.css';\r\nimport '../../checkbox/style/css.mjs';\r\nimport '../../tag/style/css.mjs';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_table_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_table_style_css.js index 5bf77a91..92b1437f 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_table_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_table_style_css.js @@ -1,9 +1,9 @@ -import "./chunk-B2YDYSZR.js"; -import "./chunk-R5DNQ3QC.js"; -import "./chunk-REWOA3VH.js"; -import "./chunk-TX5YLZ4O.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-3UWZ6IZW.js"; +import "./chunk-PHTWDJV4.js"; +import "./chunk-EFJ4VOFN.js"; +import "./chunk-4AQGC7O6.js"; +import "./chunk-QPJ3ZUOF.js"; // node_modules/element-plus/es/components/table/style/css.mjs -import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-table.css"; +import "E:/Workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-table.css"; //# sourceMappingURL=element-plus_es_components_table_style_css.js.map diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_table_style_css.js.map b/admin/node_modules/.vite/deps/element-plus_es_components_table_style_css.js.map index 9386b0a1..0b630233 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_table_style_css.js.map +++ b/admin/node_modules/.vite/deps/element-plus_es_components_table_style_css.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../element-plus/es/components/table/style/css.mjs"], - "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-table.css';\nimport '../../checkbox/style/css.mjs';\nimport '../../tooltip/style/css.mjs';\nimport '../../scrollbar/style/css.mjs';\n//# sourceMappingURL=css.mjs.map\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-table.css';\r\nimport '../../checkbox/style/css.mjs';\r\nimport '../../tooltip/style/css.mjs';\r\nimport '../../scrollbar/style/css.mjs';\r\n//# sourceMappingURL=css.mjs.map\r\n"], "mappings": ";;;;;;;AACA,OAAO;", "names": [] } diff --git a/admin/node_modules/.vite/deps/element-plus_es_components_tag_style_css.js b/admin/node_modules/.vite/deps/element-plus_es_components_tag_style_css.js index 2000ad31..4fe91e8d 100644 --- a/admin/node_modules/.vite/deps/element-plus_es_components_tag_style_css.js +++ b/admin/node_modules/.vite/deps/element-plus_es_components_tag_style_css.js @@ -1,3 +1,3 @@ -import "./chunk-5KK3TTMN.js"; -import "./chunk-IV6PSERC.js"; +import "./chunk-DVSPEOSC.js"; +import "./chunk-QPJ3ZUOF.js"; //# sourceMappingURL=element-plus_es_components_tag_style_css.js.map diff --git a/admin/node_modules/.vite/deps/pinia.js b/admin/node_modules/.vite/deps/pinia.js index 5693484f..6da4e39b 100644 --- a/admin/node_modules/.vite/deps/pinia.js +++ b/admin/node_modules/.vite/deps/pinia.js @@ -1,11 +1,11 @@ import { setupDevtoolsPlugin -} from "./chunk-YFT6OQ5R.js"; +} from "./chunk-VID4RN2V.js"; import { del, isVue2, set -} from "./chunk-HYZ2CRGS.js"; +} from "./chunk-YAGW2SQC.js"; import { computed, effectScope, @@ -25,7 +25,7 @@ import { toRefs, unref, watch -} from "./chunk-H2732BJL.js"; +} from "./chunk-ELEEJBJQ.js"; import "./chunk-G3PMV62Z.js"; // node_modules/pinia/dist/pinia.mjs diff --git a/admin/node_modules/.vite/deps/pinia.js.map b/admin/node_modules/.vite/deps/pinia.js.map index 65535905..1a858daf 100644 --- a/admin/node_modules/.vite/deps/pinia.js.map +++ b/admin/node_modules/.vite/deps/pinia.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../pinia/dist/pinia.mjs"], - "sourcesContent": ["/*!\n * pinia v2.3.1\n * (c) 2025 Eduardo San Martin Morote\n * @license MIT\n */\nimport { hasInjectionContext, inject, toRaw, watch, unref, markRaw, effectScope, ref, isVue2, isRef, isReactive, set, getCurrentScope, onScopeDispose, getCurrentInstance, reactive, toRef, del, nextTick, computed, toRefs } from 'vue-demi';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\n/**\n * setActivePinia must be called to handle SSR at the top of functions like\n * `fetch`, `setup`, `serverPrefetch` and others\n */\nlet activePinia;\n/**\n * Sets or unsets the active pinia. Used in SSR and internally when calling\n * actions and getters\n *\n * @param pinia - Pinia instance\n */\n// @ts-expect-error: cannot constrain the type of the return\nconst setActivePinia = (pinia) => (activePinia = pinia);\n/**\n * Get the currently active pinia if there is any.\n */\nconst getActivePinia = () => (hasInjectionContext() && inject(piniaSymbol)) || activePinia;\nconst piniaSymbol = ((process.env.NODE_ENV !== 'production') ? Symbol('pinia') : /* istanbul ignore next */ Symbol());\n\nfunction isPlainObject(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\no) {\n return (o &&\n typeof o === 'object' &&\n Object.prototype.toString.call(o) === '[object Object]' &&\n typeof o.toJSON !== 'function');\n}\n// type DeepReadonly = { readonly [P in keyof T]: DeepReadonly }\n// TODO: can we change these to numbers?\n/**\n * Possible types for SubscriptionCallback\n */\nvar MutationType;\n(function (MutationType) {\n /**\n * Direct mutation of the state:\n *\n * - `store.name = 'new name'`\n * - `store.$state.name = 'new name'`\n * - `store.list.push('new item')`\n */\n MutationType[\"direct\"] = \"direct\";\n /**\n * Mutated the state with `$patch` and an object\n *\n * - `store.$patch({ name: 'newName' })`\n */\n MutationType[\"patchObject\"] = \"patch object\";\n /**\n * Mutated the state with `$patch` and a function\n *\n * - `store.$patch(state => state.name = 'newName')`\n */\n MutationType[\"patchFunction\"] = \"patch function\";\n // maybe reset? for $state = {} and $reset\n})(MutationType || (MutationType = {}));\n\nconst IS_CLIENT = typeof window !== 'undefined';\n\n/*\n * FileSaver.js A saveAs() FileSaver implementation.\n *\n * Originally by Eli Grey, adapted as an ESM module by Eduardo San Martin\n * Morote.\n *\n * License : MIT\n */\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nconst _global = /*#__PURE__*/ (() => typeof window === 'object' && window.window === window\n ? window\n : typeof self === 'object' && self.self === self\n ? self\n : typeof global === 'object' && global.global === global\n ? global\n : typeof globalThis === 'object'\n ? globalThis\n : { HTMLElement: null })();\nfunction bom(blob, { autoBom = false } = {}) {\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (autoBom &&\n /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n }\n return blob;\n}\nfunction download(url, name, opts) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n xhr.onload = function () {\n saveAs(xhr.response, name, opts);\n };\n xhr.onerror = function () {\n console.error('could not download file');\n };\n xhr.send();\n}\nfunction corsEnabled(url) {\n const xhr = new XMLHttpRequest();\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false);\n try {\n xhr.send();\n }\n catch (e) { }\n return xhr.status >= 200 && xhr.status <= 299;\n}\n// `a.click()` doesn't work for all browsers (#465)\nfunction click(node) {\n try {\n node.dispatchEvent(new MouseEvent('click'));\n }\n catch (e) {\n const evt = document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);\n node.dispatchEvent(evt);\n }\n}\nconst _navigator = typeof navigator === 'object' ? navigator : { userAgent: '' };\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nconst isMacOSWebView = /*#__PURE__*/ (() => /Macintosh/.test(_navigator.userAgent) &&\n /AppleWebKit/.test(_navigator.userAgent) &&\n !/Safari/.test(_navigator.userAgent))();\nconst saveAs = !IS_CLIENT\n ? () => { } // noop\n : // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program\n typeof HTMLAnchorElement !== 'undefined' &&\n 'download' in HTMLAnchorElement.prototype &&\n !isMacOSWebView\n ? downloadSaveAs\n : // Use msSaveOrOpenBlob as a second approach\n 'msSaveOrOpenBlob' in _navigator\n ? msSaveAs\n : // Fallback to using FileReader and a popup\n fileSaverSaveAs;\nfunction downloadSaveAs(blob, name = 'download', opts) {\n const a = document.createElement('a');\n a.download = name;\n a.rel = 'noopener'; // tabnabbing\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob;\n if (a.origin !== location.origin) {\n if (corsEnabled(a.href)) {\n download(blob, name, opts);\n }\n else {\n a.target = '_blank';\n click(a);\n }\n }\n else {\n click(a);\n }\n }\n else {\n // Support blobs\n a.href = URL.createObjectURL(blob);\n setTimeout(function () {\n URL.revokeObjectURL(a.href);\n }, 4e4); // 40s\n setTimeout(function () {\n click(a);\n }, 0);\n }\n}\nfunction msSaveAs(blob, name = 'download', opts) {\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts);\n }\n else {\n const a = document.createElement('a');\n a.href = blob;\n a.target = '_blank';\n setTimeout(function () {\n click(a);\n });\n }\n }\n else {\n // @ts-ignore: works on windows\n navigator.msSaveOrOpenBlob(bom(blob, opts), name);\n }\n}\nfunction fileSaverSaveAs(blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank');\n if (popup) {\n popup.document.title = popup.document.body.innerText = 'downloading...';\n }\n if (typeof blob === 'string')\n return download(blob, name, opts);\n const force = blob.type === 'application/octet-stream';\n const isSafari = /constructor/i.test(String(_global.HTMLElement)) || 'safari' in _global;\n const isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) &&\n typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n const reader = new FileReader();\n reader.onloadend = function () {\n let url = reader.result;\n if (typeof url !== 'string') {\n popup = null;\n throw new Error('Wrong reader.result type');\n }\n url = isChromeIOS\n ? url\n : url.replace(/^data:[^;]*;/, 'data:attachment/file;');\n if (popup) {\n popup.location.href = url;\n }\n else {\n location.assign(url);\n }\n popup = null; // reverse-tabnabbing #460\n };\n reader.readAsDataURL(blob);\n }\n else {\n const url = URL.createObjectURL(blob);\n if (popup)\n popup.location.assign(url);\n else\n location.href = url;\n popup = null; // reverse-tabnabbing #460\n setTimeout(function () {\n URL.revokeObjectURL(url);\n }, 4e4); // 40s\n }\n}\n\n/**\n * Shows a toast or console.log\n *\n * @param message - message to log\n * @param type - different color of the tooltip\n */\nfunction toastMessage(message, type) {\n const piniaMessage = '🍍 ' + message;\n if (typeof __VUE_DEVTOOLS_TOAST__ === 'function') {\n // No longer available :(\n __VUE_DEVTOOLS_TOAST__(piniaMessage, type);\n }\n else if (type === 'error') {\n console.error(piniaMessage);\n }\n else if (type === 'warn') {\n console.warn(piniaMessage);\n }\n else {\n console.log(piniaMessage);\n }\n}\nfunction isPinia(o) {\n return '_a' in o && 'install' in o;\n}\n\n/**\n * This file contain devtools actions, they are not Pinia actions.\n */\n// ---\nfunction checkClipboardAccess() {\n if (!('clipboard' in navigator)) {\n toastMessage(`Your browser doesn't support the Clipboard API`, 'error');\n return true;\n }\n}\nfunction checkNotFocusedError(error) {\n if (error instanceof Error &&\n error.message.toLowerCase().includes('document is not focused')) {\n toastMessage('You need to activate the \"Emulate a focused page\" setting in the \"Rendering\" panel of devtools.', 'warn');\n return true;\n }\n return false;\n}\nasync function actionGlobalCopyState(pinia) {\n if (checkClipboardAccess())\n return;\n try {\n await navigator.clipboard.writeText(JSON.stringify(pinia.state.value));\n toastMessage('Global state copied to clipboard.');\n }\n catch (error) {\n if (checkNotFocusedError(error))\n return;\n toastMessage(`Failed to serialize the state. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nasync function actionGlobalPasteState(pinia) {\n if (checkClipboardAccess())\n return;\n try {\n loadStoresState(pinia, JSON.parse(await navigator.clipboard.readText()));\n toastMessage('Global state pasted from clipboard.');\n }\n catch (error) {\n if (checkNotFocusedError(error))\n return;\n toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nasync function actionGlobalSaveState(pinia) {\n try {\n saveAs(new Blob([JSON.stringify(pinia.state.value)], {\n type: 'text/plain;charset=utf-8',\n }), 'pinia-state.json');\n }\n catch (error) {\n toastMessage(`Failed to export the state as JSON. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nlet fileInput;\nfunction getFileOpener() {\n if (!fileInput) {\n fileInput = document.createElement('input');\n fileInput.type = 'file';\n fileInput.accept = '.json';\n }\n function openFile() {\n return new Promise((resolve, reject) => {\n fileInput.onchange = async () => {\n const files = fileInput.files;\n if (!files)\n return resolve(null);\n const file = files.item(0);\n if (!file)\n return resolve(null);\n return resolve({ text: await file.text(), file });\n };\n // @ts-ignore: TODO: changed from 4.3 to 4.4\n fileInput.oncancel = () => resolve(null);\n fileInput.onerror = reject;\n fileInput.click();\n });\n }\n return openFile;\n}\nasync function actionGlobalOpenStateFile(pinia) {\n try {\n const open = getFileOpener();\n const result = await open();\n if (!result)\n return;\n const { text, file } = result;\n loadStoresState(pinia, JSON.parse(text));\n toastMessage(`Global state imported from \"${file.name}\".`);\n }\n catch (error) {\n toastMessage(`Failed to import the state from JSON. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nfunction loadStoresState(pinia, state) {\n for (const key in state) {\n const storeState = pinia.state.value[key];\n // store is already instantiated, patch it\n if (storeState) {\n Object.assign(storeState, state[key]);\n }\n else {\n // store is not instantiated, set the initial state\n pinia.state.value[key] = state[key];\n }\n }\n}\n\nfunction formatDisplay(display) {\n return {\n _custom: {\n display,\n },\n };\n}\nconst PINIA_ROOT_LABEL = '🍍 Pinia (root)';\nconst PINIA_ROOT_ID = '_root';\nfunction formatStoreForInspectorTree(store) {\n return isPinia(store)\n ? {\n id: PINIA_ROOT_ID,\n label: PINIA_ROOT_LABEL,\n }\n : {\n id: store.$id,\n label: store.$id,\n };\n}\nfunction formatStoreForInspectorState(store) {\n if (isPinia(store)) {\n const storeNames = Array.from(store._s.keys());\n const storeMap = store._s;\n const state = {\n state: storeNames.map((storeId) => ({\n editable: true,\n key: storeId,\n value: store.state.value[storeId],\n })),\n getters: storeNames\n .filter((id) => storeMap.get(id)._getters)\n .map((id) => {\n const store = storeMap.get(id);\n return {\n editable: false,\n key: id,\n value: store._getters.reduce((getters, key) => {\n getters[key] = store[key];\n return getters;\n }, {}),\n };\n }),\n };\n return state;\n }\n const state = {\n state: Object.keys(store.$state).map((key) => ({\n editable: true,\n key,\n value: store.$state[key],\n })),\n };\n // avoid adding empty getters\n if (store._getters && store._getters.length) {\n state.getters = store._getters.map((getterName) => ({\n editable: false,\n key: getterName,\n value: store[getterName],\n }));\n }\n if (store._customProperties.size) {\n state.customProperties = Array.from(store._customProperties).map((key) => ({\n editable: true,\n key,\n value: store[key],\n }));\n }\n return state;\n}\nfunction formatEventData(events) {\n if (!events)\n return {};\n if (Array.isArray(events)) {\n // TODO: handle add and delete for arrays and objects\n return events.reduce((data, event) => {\n data.keys.push(event.key);\n data.operations.push(event.type);\n data.oldValue[event.key] = event.oldValue;\n data.newValue[event.key] = event.newValue;\n return data;\n }, {\n oldValue: {},\n keys: [],\n operations: [],\n newValue: {},\n });\n }\n else {\n return {\n operation: formatDisplay(events.type),\n key: formatDisplay(events.key),\n oldValue: events.oldValue,\n newValue: events.newValue,\n };\n }\n}\nfunction formatMutationType(type) {\n switch (type) {\n case MutationType.direct:\n return 'mutation';\n case MutationType.patchFunction:\n return '$patch';\n case MutationType.patchObject:\n return '$patch';\n default:\n return 'unknown';\n }\n}\n\n// timeline can be paused when directly changing the state\nlet isTimelineActive = true;\nconst componentStateTypes = [];\nconst MUTATIONS_LAYER_ID = 'pinia:mutations';\nconst INSPECTOR_ID = 'pinia';\nconst { assign: assign$1 } = Object;\n/**\n * Gets the displayed name of a store in devtools\n *\n * @param id - id of the store\n * @returns a formatted string\n */\nconst getStoreType = (id) => '🍍 ' + id;\n/**\n * Add the pinia plugin without any store. Allows displaying a Pinia plugin tab\n * as soon as it is added to the application.\n *\n * @param app - Vue application\n * @param pinia - pinia instance\n */\nfunction registerPiniaDevtools(app, pinia) {\n setupDevtoolsPlugin({\n id: 'dev.esm.pinia',\n label: 'Pinia 🍍',\n logo: 'https://pinia.vuejs.org/logo.svg',\n packageName: 'pinia',\n homepage: 'https://pinia.vuejs.org',\n componentStateTypes,\n app,\n }, (api) => {\n if (typeof api.now !== 'function') {\n toastMessage('You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.');\n }\n api.addTimelineLayer({\n id: MUTATIONS_LAYER_ID,\n label: `Pinia 🍍`,\n color: 0xe5df88,\n });\n api.addInspector({\n id: INSPECTOR_ID,\n label: 'Pinia 🍍',\n icon: 'storage',\n treeFilterPlaceholder: 'Search stores',\n actions: [\n {\n icon: 'content_copy',\n action: () => {\n actionGlobalCopyState(pinia);\n },\n tooltip: 'Serialize and copy the state',\n },\n {\n icon: 'content_paste',\n action: async () => {\n await actionGlobalPasteState(pinia);\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n },\n tooltip: 'Replace the state with the content of your clipboard',\n },\n {\n icon: 'save',\n action: () => {\n actionGlobalSaveState(pinia);\n },\n tooltip: 'Save the state as a JSON file',\n },\n {\n icon: 'folder_open',\n action: async () => {\n await actionGlobalOpenStateFile(pinia);\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n },\n tooltip: 'Import the state from a JSON file',\n },\n ],\n nodeActions: [\n {\n icon: 'restore',\n tooltip: 'Reset the state (with \"$reset\")',\n action: (nodeId) => {\n const store = pinia._s.get(nodeId);\n if (!store) {\n toastMessage(`Cannot reset \"${nodeId}\" store because it wasn't found.`, 'warn');\n }\n else if (typeof store.$reset !== 'function') {\n toastMessage(`Cannot reset \"${nodeId}\" store because it doesn't have a \"$reset\" method implemented.`, 'warn');\n }\n else {\n store.$reset();\n toastMessage(`Store \"${nodeId}\" reset.`);\n }\n },\n },\n ],\n });\n api.on.inspectComponent((payload, ctx) => {\n const proxy = (payload.componentInstance &&\n payload.componentInstance.proxy);\n if (proxy && proxy._pStores) {\n const piniaStores = payload.componentInstance.proxy._pStores;\n Object.values(piniaStores).forEach((store) => {\n payload.instanceData.state.push({\n type: getStoreType(store.$id),\n key: 'state',\n editable: true,\n value: store._isOptionsAPI\n ? {\n _custom: {\n value: toRaw(store.$state),\n actions: [\n {\n icon: 'restore',\n tooltip: 'Reset the state of this store',\n action: () => store.$reset(),\n },\n ],\n },\n }\n : // NOTE: workaround to unwrap transferred refs\n Object.keys(store.$state).reduce((state, key) => {\n state[key] = store.$state[key];\n return state;\n }, {}),\n });\n if (store._getters && store._getters.length) {\n payload.instanceData.state.push({\n type: getStoreType(store.$id),\n key: 'getters',\n editable: false,\n value: store._getters.reduce((getters, key) => {\n try {\n getters[key] = store[key];\n }\n catch (error) {\n // @ts-expect-error: we just want to show it in devtools\n getters[key] = error;\n }\n return getters;\n }, {}),\n });\n }\n });\n }\n });\n api.on.getInspectorTree((payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n let stores = [pinia];\n stores = stores.concat(Array.from(pinia._s.values()));\n payload.rootNodes = (payload.filter\n ? stores.filter((store) => '$id' in store\n ? store.$id\n .toLowerCase()\n .includes(payload.filter.toLowerCase())\n : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase()))\n : stores).map(formatStoreForInspectorTree);\n }\n });\n // Expose pinia instance as $pinia to window\n globalThis.$pinia = pinia;\n api.on.getInspectorState((payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n const inspectedStore = payload.nodeId === PINIA_ROOT_ID\n ? pinia\n : pinia._s.get(payload.nodeId);\n if (!inspectedStore) {\n // this could be the selected store restored for a different project\n // so it's better not to say anything here\n return;\n }\n if (inspectedStore) {\n // Expose selected store as $store to window\n if (payload.nodeId !== PINIA_ROOT_ID)\n globalThis.$store = toRaw(inspectedStore);\n payload.state = formatStoreForInspectorState(inspectedStore);\n }\n }\n });\n api.on.editInspectorState((payload, ctx) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n const inspectedStore = payload.nodeId === PINIA_ROOT_ID\n ? pinia\n : pinia._s.get(payload.nodeId);\n if (!inspectedStore) {\n return toastMessage(`store \"${payload.nodeId}\" not found`, 'error');\n }\n const { path } = payload;\n if (!isPinia(inspectedStore)) {\n // access only the state\n if (path.length !== 1 ||\n !inspectedStore._customProperties.has(path[0]) ||\n path[0] in inspectedStore.$state) {\n path.unshift('$state');\n }\n }\n else {\n // Root access, we can omit the `.value` because the devtools API does it for us\n path.unshift('state');\n }\n isTimelineActive = false;\n payload.set(inspectedStore, path, payload.state.value);\n isTimelineActive = true;\n }\n });\n api.on.editComponentState((payload) => {\n if (payload.type.startsWith('🍍')) {\n const storeId = payload.type.replace(/^🍍\\s*/, '');\n const store = pinia._s.get(storeId);\n if (!store) {\n return toastMessage(`store \"${storeId}\" not found`, 'error');\n }\n const { path } = payload;\n if (path[0] !== 'state') {\n return toastMessage(`Invalid path for store \"${storeId}\":\\n${path}\\nOnly state can be modified.`);\n }\n // rewrite the first entry to be able to directly set the state as\n // well as any other path\n path[0] = '$state';\n isTimelineActive = false;\n payload.set(store, path, payload.state.value);\n isTimelineActive = true;\n }\n });\n });\n}\nfunction addStoreToDevtools(app, store) {\n if (!componentStateTypes.includes(getStoreType(store.$id))) {\n componentStateTypes.push(getStoreType(store.$id));\n }\n setupDevtoolsPlugin({\n id: 'dev.esm.pinia',\n label: 'Pinia 🍍',\n logo: 'https://pinia.vuejs.org/logo.svg',\n packageName: 'pinia',\n homepage: 'https://pinia.vuejs.org',\n componentStateTypes,\n app,\n settings: {\n logStoreChanges: {\n label: 'Notify about new/deleted stores',\n type: 'boolean',\n defaultValue: true,\n },\n // useEmojis: {\n // label: 'Use emojis in messages ⚡️',\n // type: 'boolean',\n // defaultValue: true,\n // },\n },\n }, (api) => {\n // gracefully handle errors\n const now = typeof api.now === 'function' ? api.now.bind(api) : Date.now;\n store.$onAction(({ after, onError, name, args }) => {\n const groupId = runningActionId++;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🛫 ' + name,\n subtitle: 'start',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n },\n groupId,\n },\n });\n after((result) => {\n activeAction = undefined;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🛬 ' + name,\n subtitle: 'end',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n result,\n },\n groupId,\n },\n });\n });\n onError((error) => {\n activeAction = undefined;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n logType: 'error',\n title: '💥 ' + name,\n subtitle: 'end',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n error,\n },\n groupId,\n },\n });\n });\n }, true);\n store._customProperties.forEach((name) => {\n watch(() => unref(store[name]), (newValue, oldValue) => {\n api.notifyComponentUpdate();\n api.sendInspectorState(INSPECTOR_ID);\n if (isTimelineActive) {\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: 'Change',\n subtitle: name,\n data: {\n newValue,\n oldValue,\n },\n groupId: activeAction,\n },\n });\n }\n }, { deep: true });\n });\n store.$subscribe(({ events, type }, state) => {\n api.notifyComponentUpdate();\n api.sendInspectorState(INSPECTOR_ID);\n if (!isTimelineActive)\n return;\n // rootStore.state[store.id] = state\n const eventData = {\n time: now(),\n title: formatMutationType(type),\n data: assign$1({ store: formatDisplay(store.$id) }, formatEventData(events)),\n groupId: activeAction,\n };\n if (type === MutationType.patchFunction) {\n eventData.subtitle = '⤵️';\n }\n else if (type === MutationType.patchObject) {\n eventData.subtitle = '🧩';\n }\n else if (events && !Array.isArray(events)) {\n eventData.subtitle = events.type;\n }\n if (events) {\n eventData.data['rawEvent(s)'] = {\n _custom: {\n display: 'DebuggerEvent',\n type: 'object',\n tooltip: 'raw DebuggerEvent[]',\n value: events,\n },\n };\n }\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: eventData,\n });\n }, { detached: true, flush: 'sync' });\n const hotUpdate = store._hotUpdate;\n store._hotUpdate = markRaw((newStore) => {\n hotUpdate(newStore);\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🔥 ' + store.$id,\n subtitle: 'HMR update',\n data: {\n store: formatDisplay(store.$id),\n info: formatDisplay(`HMR update`),\n },\n },\n });\n // update the devtools too\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n });\n const { $dispose } = store;\n store.$dispose = () => {\n $dispose();\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n api.getSettings().logStoreChanges &&\n toastMessage(`Disposed \"${store.$id}\" store 🗑`);\n };\n // trigger an update so it can display new registered stores\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n api.getSettings().logStoreChanges &&\n toastMessage(`\"${store.$id}\" store installed 🆕`);\n });\n}\nlet runningActionId = 0;\nlet activeAction;\n/**\n * Patches a store to enable action grouping in devtools by wrapping the store with a Proxy that is passed as the\n * context of all actions, allowing us to set `runningAction` on each access and effectively associating any state\n * mutation to the action.\n *\n * @param store - store to patch\n * @param actionNames - list of actionst to patch\n */\nfunction patchActionForGrouping(store, actionNames, wrapWithProxy) {\n // original actions of the store as they are given by pinia. We are going to override them\n const actions = actionNames.reduce((storeActions, actionName) => {\n // use toRaw to avoid tracking #541\n storeActions[actionName] = toRaw(store)[actionName];\n return storeActions;\n }, {});\n for (const actionName in actions) {\n store[actionName] = function () {\n // the running action id is incremented in a before action hook\n const _actionId = runningActionId;\n const trackedStore = wrapWithProxy\n ? new Proxy(store, {\n get(...args) {\n activeAction = _actionId;\n return Reflect.get(...args);\n },\n set(...args) {\n activeAction = _actionId;\n return Reflect.set(...args);\n },\n })\n : store;\n // For Setup Stores we need https://github.com/tc39/proposal-async-context\n activeAction = _actionId;\n const retValue = actions[actionName].apply(trackedStore, arguments);\n // this is safer as async actions in Setup Stores would associate mutations done outside of the action\n activeAction = undefined;\n return retValue;\n };\n }\n}\n/**\n * pinia.use(devtoolsPlugin)\n */\nfunction devtoolsPlugin({ app, store, options }) {\n // HMR module\n if (store.$id.startsWith('__hot:')) {\n return;\n }\n // detect option api vs setup api\n store._isOptionsAPI = !!options.state;\n // Do not overwrite actions mocked by @pinia/testing (#2298)\n if (!store._p._testing) {\n patchActionForGrouping(store, Object.keys(options.actions), store._isOptionsAPI);\n // Upgrade the HMR to also update the new actions\n const originalHotUpdate = store._hotUpdate;\n toRaw(store)._hotUpdate = function (newStore) {\n originalHotUpdate.apply(this, arguments);\n patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions), !!store._isOptionsAPI);\n };\n }\n addStoreToDevtools(app, \n // FIXME: is there a way to allow the assignment from Store to StoreGeneric?\n store);\n}\n\n/**\n * Creates a Pinia instance to be used by the application\n */\nfunction createPinia() {\n const scope = effectScope(true);\n // NOTE: here we could check the window object for a state and directly set it\n // if there is anything like it with Vue 3 SSR\n const state = scope.run(() => ref({}));\n let _p = [];\n // plugins added before calling app.use(pinia)\n let toBeInstalled = [];\n const pinia = markRaw({\n install(app) {\n // this allows calling useStore() outside of a component setup after\n // installing pinia's plugin\n setActivePinia(pinia);\n if (!isVue2) {\n pinia._a = app;\n app.provide(piniaSymbol, pinia);\n app.config.globalProperties.$pinia = pinia;\n /* istanbul ignore else */\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n registerPiniaDevtools(app, pinia);\n }\n toBeInstalled.forEach((plugin) => _p.push(plugin));\n toBeInstalled = [];\n }\n },\n use(plugin) {\n if (!this._a && !isVue2) {\n toBeInstalled.push(plugin);\n }\n else {\n _p.push(plugin);\n }\n return this;\n },\n _p,\n // it's actually undefined here\n // @ts-expect-error\n _a: null,\n _e: scope,\n _s: new Map(),\n state,\n });\n // pinia devtools rely on dev only features so they cannot be forced unless\n // the dev build of Vue is used. Avoid old browsers like IE11.\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT && typeof Proxy !== 'undefined') {\n pinia.use(devtoolsPlugin);\n }\n return pinia;\n}\n/**\n * Dispose a Pinia instance by stopping its effectScope and removing the state, plugins and stores. This is mostly\n * useful in tests, with both a testing pinia or a regular pinia and in applications that use multiple pinia instances.\n * Once disposed, the pinia instance cannot be used anymore.\n *\n * @param pinia - pinia instance\n */\nfunction disposePinia(pinia) {\n pinia._e.stop();\n pinia._s.clear();\n pinia._p.splice(0);\n pinia.state.value = {};\n // @ts-expect-error: non valid\n pinia._a = null;\n}\n\n/**\n * Checks if a function is a `StoreDefinition`.\n *\n * @param fn - object to test\n * @returns true if `fn` is a StoreDefinition\n */\nconst isUseStore = (fn) => {\n return typeof fn === 'function' && typeof fn.$id === 'string';\n};\n/**\n * Mutates in place `newState` with `oldState` to _hot update_ it. It will\n * remove any key not existing in `newState` and recursively merge plain\n * objects.\n *\n * @param newState - new state object to be patched\n * @param oldState - old state that should be used to patch newState\n * @returns - newState\n */\nfunction patchObject(newState, oldState) {\n // no need to go through symbols because they cannot be serialized anyway\n for (const key in oldState) {\n const subPatch = oldState[key];\n // skip the whole sub tree\n if (!(key in newState)) {\n continue;\n }\n const targetValue = newState[key];\n if (isPlainObject(targetValue) &&\n isPlainObject(subPatch) &&\n !isRef(subPatch) &&\n !isReactive(subPatch)) {\n newState[key] = patchObject(targetValue, subPatch);\n }\n else {\n // objects are either a bit more complex (e.g. refs) or primitives, so we\n // just set the whole thing\n if (isVue2) {\n set(newState, key, subPatch);\n }\n else {\n newState[key] = subPatch;\n }\n }\n }\n return newState;\n}\n/**\n * Creates an _accept_ function to pass to `import.meta.hot` in Vite applications.\n *\n * @example\n * ```js\n * const useUser = defineStore(...)\n * if (import.meta.hot) {\n * import.meta.hot.accept(acceptHMRUpdate(useUser, import.meta.hot))\n * }\n * ```\n *\n * @param initialUseStore - return of the defineStore to hot update\n * @param hot - `import.meta.hot`\n */\nfunction acceptHMRUpdate(initialUseStore, hot) {\n // strip as much as possible from iife.prod\n if (!(process.env.NODE_ENV !== 'production')) {\n return () => { };\n }\n return (newModule) => {\n const pinia = hot.data.pinia || initialUseStore._pinia;\n if (!pinia) {\n // this store is still not used\n return;\n }\n // preserve the pinia instance across loads\n hot.data.pinia = pinia;\n // console.log('got data', newStore)\n for (const exportName in newModule) {\n const useStore = newModule[exportName];\n // console.log('checking for', exportName)\n if (isUseStore(useStore) && pinia._s.has(useStore.$id)) {\n // console.log('Accepting update for', useStore.$id)\n const id = useStore.$id;\n if (id !== initialUseStore.$id) {\n console.warn(`The id of the store changed from \"${initialUseStore.$id}\" to \"${id}\". Reloading.`);\n // return import.meta.hot.invalidate()\n return hot.invalidate();\n }\n const existingStore = pinia._s.get(id);\n if (!existingStore) {\n console.log(`[Pinia]: skipping hmr because store doesn't exist yet`);\n return;\n }\n useStore(pinia, existingStore);\n }\n }\n };\n}\n\nconst noop = () => { };\nfunction addSubscription(subscriptions, callback, detached, onCleanup = noop) {\n subscriptions.push(callback);\n const removeSubscription = () => {\n const idx = subscriptions.indexOf(callback);\n if (idx > -1) {\n subscriptions.splice(idx, 1);\n onCleanup();\n }\n };\n if (!detached && getCurrentScope()) {\n onScopeDispose(removeSubscription);\n }\n return removeSubscription;\n}\nfunction triggerSubscriptions(subscriptions, ...args) {\n subscriptions.slice().forEach((callback) => {\n callback(...args);\n });\n}\n\nconst fallbackRunWithContext = (fn) => fn();\n/**\n * Marks a function as an action for `$onAction`\n * @internal\n */\nconst ACTION_MARKER = Symbol();\n/**\n * Action name symbol. Allows to add a name to an action after defining it\n * @internal\n */\nconst ACTION_NAME = Symbol();\nfunction mergeReactiveObjects(target, patchToApply) {\n // Handle Map instances\n if (target instanceof Map && patchToApply instanceof Map) {\n patchToApply.forEach((value, key) => target.set(key, value));\n }\n else if (target instanceof Set && patchToApply instanceof Set) {\n // Handle Set instances\n patchToApply.forEach(target.add, target);\n }\n // no need to go through symbols because they cannot be serialized anyway\n for (const key in patchToApply) {\n if (!patchToApply.hasOwnProperty(key))\n continue;\n const subPatch = patchToApply[key];\n const targetValue = target[key];\n if (isPlainObject(targetValue) &&\n isPlainObject(subPatch) &&\n target.hasOwnProperty(key) &&\n !isRef(subPatch) &&\n !isReactive(subPatch)) {\n // NOTE: here I wanted to warn about inconsistent types but it's not possible because in setup stores one might\n // start the value of a property as a certain type e.g. a Map, and then for some reason, during SSR, change that\n // to `undefined`. When trying to hydrate, we want to override the Map with `undefined`.\n target[key] = mergeReactiveObjects(targetValue, subPatch);\n }\n else {\n // @ts-expect-error: subPatch is a valid value\n target[key] = subPatch;\n }\n }\n return target;\n}\nconst skipHydrateSymbol = (process.env.NODE_ENV !== 'production')\n ? Symbol('pinia:skipHydration')\n : /* istanbul ignore next */ Symbol();\n/**\n * Tells Pinia to skip the hydration process of a given object. This is useful in setup stores (only) when you return a\n * stateful object in the store but it isn't really state. e.g. returning a router instance in a setup store.\n *\n * @param obj - target object\n * @returns obj\n */\nfunction skipHydrate(obj) {\n return Object.defineProperty(obj, skipHydrateSymbol, {});\n}\n/**\n * Returns whether a value should be hydrated\n *\n * @param obj - target variable\n * @returns true if `obj` should be hydrated\n */\nfunction shouldHydrate(obj) {\n return !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);\n}\nconst { assign } = Object;\nfunction isComputed(o) {\n return !!(isRef(o) && o.effect);\n}\nfunction createOptionsStore(id, options, pinia, hot) {\n const { state, actions, getters } = options;\n const initialState = pinia.state.value[id];\n let store;\n function setup() {\n if (!initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\n /* istanbul ignore if */\n if (isVue2) {\n set(pinia.state.value, id, state ? state() : {});\n }\n else {\n pinia.state.value[id] = state ? state() : {};\n }\n }\n // avoid creating a state in pinia.state.value\n const localState = (process.env.NODE_ENV !== 'production') && hot\n ? // use ref() to unwrap refs inside state TODO: check if this is still necessary\n toRefs(ref(state ? state() : {}).value)\n : toRefs(pinia.state.value[id]);\n return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {\n if ((process.env.NODE_ENV !== 'production') && name in localState) {\n console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with \"${name}\" in store \"${id}\".`);\n }\n computedGetters[name] = markRaw(computed(() => {\n setActivePinia(pinia);\n // it was created just before\n const store = pinia._s.get(id);\n // allow cross using stores\n /* istanbul ignore if */\n if (isVue2 && !store._r)\n return;\n // @ts-expect-error\n // return getters![name].call(context, context)\n // TODO: avoid reading the getter while assigning with a global variable\n return getters[name].call(store, store);\n }));\n return computedGetters;\n }, {}));\n }\n store = createSetupStore(id, setup, options, pinia, hot, true);\n return store;\n}\nfunction createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {\n let scope;\n const optionsForPlugin = assign({ actions: {} }, options);\n /* istanbul ignore if */\n if ((process.env.NODE_ENV !== 'production') && !pinia._e.active) {\n throw new Error('Pinia destroyed');\n }\n // watcher options for $subscribe\n const $subscribeOptions = { deep: true };\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production') && !isVue2) {\n $subscribeOptions.onTrigger = (event) => {\n /* istanbul ignore else */\n if (isListening) {\n debuggerEvents = event;\n // avoid triggering this while the store is being built and the state is being set in pinia\n }\n else if (isListening == false && !store._hotUpdating) {\n // let patch send all the events together later\n /* istanbul ignore else */\n if (Array.isArray(debuggerEvents)) {\n debuggerEvents.push(event);\n }\n else {\n console.error('🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.');\n }\n }\n };\n }\n // internal state\n let isListening; // set to true at the end\n let isSyncListening; // set to true at the end\n let subscriptions = [];\n let actionSubscriptions = [];\n let debuggerEvents;\n const initialState = pinia.state.value[$id];\n // avoid setting the state for option stores if it is set\n // by the setup\n if (!isOptionsStore && !initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\n /* istanbul ignore if */\n if (isVue2) {\n set(pinia.state.value, $id, {});\n }\n else {\n pinia.state.value[$id] = {};\n }\n }\n const hotState = ref({});\n // avoid triggering too many listeners\n // https://github.com/vuejs/pinia/issues/1129\n let activeListener;\n function $patch(partialStateOrMutator) {\n let subscriptionMutation;\n isListening = isSyncListening = false;\n // reset the debugger events since patches are sync\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n debuggerEvents = [];\n }\n if (typeof partialStateOrMutator === 'function') {\n partialStateOrMutator(pinia.state.value[$id]);\n subscriptionMutation = {\n type: MutationType.patchFunction,\n storeId: $id,\n events: debuggerEvents,\n };\n }\n else {\n mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);\n subscriptionMutation = {\n type: MutationType.patchObject,\n payload: partialStateOrMutator,\n storeId: $id,\n events: debuggerEvents,\n };\n }\n const myListenerId = (activeListener = Symbol());\n nextTick().then(() => {\n if (activeListener === myListenerId) {\n isListening = true;\n }\n });\n isSyncListening = true;\n // because we paused the watcher, we need to manually call the subscriptions\n triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);\n }\n const $reset = isOptionsStore\n ? function $reset() {\n const { state } = options;\n const newState = state ? state() : {};\n // we use a patch to group all changes into one single subscription\n this.$patch(($state) => {\n // @ts-expect-error: FIXME: shouldn't error?\n assign($state, newState);\n });\n }\n : /* istanbul ignore next */\n (process.env.NODE_ENV !== 'production')\n ? () => {\n throw new Error(`🍍: Store \"${$id}\" is built using the setup syntax and does not implement $reset().`);\n }\n : noop;\n function $dispose() {\n scope.stop();\n subscriptions = [];\n actionSubscriptions = [];\n pinia._s.delete($id);\n }\n /**\n * Helper that wraps function so it can be tracked with $onAction\n * @param fn - action to wrap\n * @param name - name of the action\n */\n const action = (fn, name = '') => {\n if (ACTION_MARKER in fn) {\n fn[ACTION_NAME] = name;\n return fn;\n }\n const wrappedAction = function () {\n setActivePinia(pinia);\n const args = Array.from(arguments);\n const afterCallbackList = [];\n const onErrorCallbackList = [];\n function after(callback) {\n afterCallbackList.push(callback);\n }\n function onError(callback) {\n onErrorCallbackList.push(callback);\n }\n // @ts-expect-error\n triggerSubscriptions(actionSubscriptions, {\n args,\n name: wrappedAction[ACTION_NAME],\n store,\n after,\n onError,\n });\n let ret;\n try {\n ret = fn.apply(this && this.$id === $id ? this : store, args);\n // handle sync errors\n }\n catch (error) {\n triggerSubscriptions(onErrorCallbackList, error);\n throw error;\n }\n if (ret instanceof Promise) {\n return ret\n .then((value) => {\n triggerSubscriptions(afterCallbackList, value);\n return value;\n })\n .catch((error) => {\n triggerSubscriptions(onErrorCallbackList, error);\n return Promise.reject(error);\n });\n }\n // trigger after callbacks\n triggerSubscriptions(afterCallbackList, ret);\n return ret;\n };\n wrappedAction[ACTION_MARKER] = true;\n wrappedAction[ACTION_NAME] = name; // will be set later\n // @ts-expect-error: we are intentionally limiting the returned type to just Fn\n // because all the added properties are internals that are exposed through `$onAction()` only\n return wrappedAction;\n };\n const _hmrPayload = /*#__PURE__*/ markRaw({\n actions: {},\n getters: {},\n state: [],\n hotState,\n });\n const partialStore = {\n _p: pinia,\n // _s: scope,\n $id,\n $onAction: addSubscription.bind(null, actionSubscriptions),\n $patch,\n $reset,\n $subscribe(callback, options = {}) {\n const removeSubscription = addSubscription(subscriptions, callback, options.detached, () => stopWatcher());\n const stopWatcher = scope.run(() => watch(() => pinia.state.value[$id], (state) => {\n if (options.flush === 'sync' ? isSyncListening : isListening) {\n callback({\n storeId: $id,\n type: MutationType.direct,\n events: debuggerEvents,\n }, state);\n }\n }, assign({}, $subscribeOptions, options)));\n return removeSubscription;\n },\n $dispose,\n };\n /* istanbul ignore if */\n if (isVue2) {\n // start as non ready\n partialStore._r = false;\n }\n const store = reactive((process.env.NODE_ENV !== 'production') || ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT)\n ? assign({\n _hmrPayload,\n _customProperties: markRaw(new Set()), // devtools custom properties\n }, partialStore\n // must be added later\n // setupStore\n )\n : partialStore);\n // store the partial store now so the setup of stores can instantiate each other before they are finished without\n // creating infinite loops.\n pinia._s.set($id, store);\n const runWithContext = (pinia._a && pinia._a.runWithContext) || fallbackRunWithContext;\n // TODO: idea create skipSerialize that marks properties as non serializable and they are skipped\n const setupStore = runWithContext(() => pinia._e.run(() => (scope = effectScope()).run(() => setup({ action }))));\n // overwrite existing actions to support $onAction\n for (const key in setupStore) {\n const prop = setupStore[key];\n if ((isRef(prop) && !isComputed(prop)) || isReactive(prop)) {\n // mark it as a piece of state to be serialized\n if ((process.env.NODE_ENV !== 'production') && hot) {\n set(hotState.value, key, toRef(setupStore, key));\n // createOptionStore directly sets the state in pinia.state.value so we\n // can just skip that\n }\n else if (!isOptionsStore) {\n // in setup stores we must hydrate the state and sync pinia state tree with the refs the user just created\n if (initialState && shouldHydrate(prop)) {\n if (isRef(prop)) {\n prop.value = initialState[key];\n }\n else {\n // probably a reactive object, lets recursively assign\n // @ts-expect-error: prop is unknown\n mergeReactiveObjects(prop, initialState[key]);\n }\n }\n // transfer the ref to the pinia state to keep everything in sync\n /* istanbul ignore if */\n if (isVue2) {\n set(pinia.state.value[$id], key, prop);\n }\n else {\n pinia.state.value[$id][key] = prop;\n }\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n _hmrPayload.state.push(key);\n }\n // action\n }\n else if (typeof prop === 'function') {\n const actionValue = (process.env.NODE_ENV !== 'production') && hot ? prop : action(prop, key);\n // this a hot module replacement store because the hotUpdate method needs\n // to do it with the right context\n /* istanbul ignore if */\n if (isVue2) {\n set(setupStore, key, actionValue);\n }\n else {\n // @ts-expect-error\n setupStore[key] = actionValue;\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n _hmrPayload.actions[key] = prop;\n }\n // list actions so they can be used in plugins\n // @ts-expect-error\n optionsForPlugin.actions[key] = prop;\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n // add getters for devtools\n if (isComputed(prop)) {\n _hmrPayload.getters[key] = isOptionsStore\n ? // @ts-expect-error\n options.getters[key]\n : prop;\n if (IS_CLIENT) {\n const getters = setupStore._getters ||\n // @ts-expect-error: same\n (setupStore._getters = markRaw([]));\n getters.push(key);\n }\n }\n }\n }\n // add the state, getters, and action properties\n /* istanbul ignore if */\n if (isVue2) {\n Object.keys(setupStore).forEach((key) => {\n set(store, key, setupStore[key]);\n });\n }\n else {\n assign(store, setupStore);\n // allows retrieving reactive objects with `storeToRefs()`. Must be called after assigning to the reactive object.\n // Make `storeToRefs()` work with `reactive()` #799\n assign(toRaw(store), setupStore);\n }\n // use this instead of a computed with setter to be able to create it anywhere\n // without linking the computed lifespan to wherever the store is first\n // created.\n Object.defineProperty(store, '$state', {\n get: () => ((process.env.NODE_ENV !== 'production') && hot ? hotState.value : pinia.state.value[$id]),\n set: (state) => {\n /* istanbul ignore if */\n if ((process.env.NODE_ENV !== 'production') && hot) {\n throw new Error('cannot set hotState');\n }\n $patch(($state) => {\n // @ts-expect-error: FIXME: shouldn't error?\n assign($state, state);\n });\n },\n });\n // add the hotUpdate before plugins to allow them to override it\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n store._hotUpdate = markRaw((newStore) => {\n store._hotUpdating = true;\n newStore._hmrPayload.state.forEach((stateKey) => {\n if (stateKey in store.$state) {\n const newStateTarget = newStore.$state[stateKey];\n const oldStateSource = store.$state[stateKey];\n if (typeof newStateTarget === 'object' &&\n isPlainObject(newStateTarget) &&\n isPlainObject(oldStateSource)) {\n patchObject(newStateTarget, oldStateSource);\n }\n else {\n // transfer the ref\n newStore.$state[stateKey] = oldStateSource;\n }\n }\n // patch direct access properties to allow store.stateProperty to work as\n // store.$state.stateProperty\n set(store, stateKey, toRef(newStore.$state, stateKey));\n });\n // remove deleted state properties\n Object.keys(store.$state).forEach((stateKey) => {\n if (!(stateKey in newStore.$state)) {\n del(store, stateKey);\n }\n });\n // avoid devtools logging this as a mutation\n isListening = false;\n isSyncListening = false;\n pinia.state.value[$id] = toRef(newStore._hmrPayload, 'hotState');\n isSyncListening = true;\n nextTick().then(() => {\n isListening = true;\n });\n for (const actionName in newStore._hmrPayload.actions) {\n const actionFn = newStore[actionName];\n set(store, actionName, action(actionFn, actionName));\n }\n // TODO: does this work in both setup and option store?\n for (const getterName in newStore._hmrPayload.getters) {\n const getter = newStore._hmrPayload.getters[getterName];\n const getterValue = isOptionsStore\n ? // special handling of options api\n computed(() => {\n setActivePinia(pinia);\n return getter.call(store, store);\n })\n : getter;\n set(store, getterName, getterValue);\n }\n // remove deleted getters\n Object.keys(store._hmrPayload.getters).forEach((key) => {\n if (!(key in newStore._hmrPayload.getters)) {\n del(store, key);\n }\n });\n // remove old actions\n Object.keys(store._hmrPayload.actions).forEach((key) => {\n if (!(key in newStore._hmrPayload.actions)) {\n del(store, key);\n }\n });\n // update the values used in devtools and to allow deleting new properties later on\n store._hmrPayload = newStore._hmrPayload;\n store._getters = newStore._getters;\n store._hotUpdating = false;\n });\n }\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n const nonEnumerable = {\n writable: true,\n configurable: true,\n // avoid warning on devtools trying to display this property\n enumerable: false,\n };\n ['_p', '_hmrPayload', '_getters', '_customProperties'].forEach((p) => {\n Object.defineProperty(store, p, assign({ value: store[p] }, nonEnumerable));\n });\n }\n /* istanbul ignore if */\n if (isVue2) {\n // mark the store as ready before plugins\n store._r = true;\n }\n // apply all plugins\n pinia._p.forEach((extender) => {\n /* istanbul ignore else */\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n const extensions = scope.run(() => extender({\n store: store,\n app: pinia._a,\n pinia,\n options: optionsForPlugin,\n }));\n Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));\n assign(store, extensions);\n }\n else {\n assign(store, scope.run(() => extender({\n store: store,\n app: pinia._a,\n pinia,\n options: optionsForPlugin,\n })));\n }\n });\n if ((process.env.NODE_ENV !== 'production') &&\n store.$state &&\n typeof store.$state === 'object' &&\n typeof store.$state.constructor === 'function' &&\n !store.$state.constructor.toString().includes('[native code]')) {\n console.warn(`[🍍]: The \"state\" must be a plain object. It cannot be\\n` +\n `\\tstate: () => new MyClass()\\n` +\n `Found in store \"${store.$id}\".`);\n }\n // only apply hydrate to option stores with an initial state in pinia\n if (initialState &&\n isOptionsStore &&\n options.hydrate) {\n options.hydrate(store.$state, initialState);\n }\n isListening = true;\n isSyncListening = true;\n return store;\n}\n// allows unused stores to be tree shaken\n/*! #__NO_SIDE_EFFECTS__ */\nfunction defineStore(\n// TODO: add proper types from above\nidOrOptions, setup, setupOptions) {\n let id;\n let options;\n const isSetupStore = typeof setup === 'function';\n if (typeof idOrOptions === 'string') {\n id = idOrOptions;\n // the option store setup will contain the actual options in this case\n options = isSetupStore ? setupOptions : setup;\n }\n else {\n options = idOrOptions;\n id = idOrOptions.id;\n if ((process.env.NODE_ENV !== 'production') && typeof id !== 'string') {\n throw new Error(`[🍍]: \"defineStore()\" must be passed a store id as its first argument.`);\n }\n }\n function useStore(pinia, hot) {\n const hasContext = hasInjectionContext();\n pinia =\n // in test mode, ignore the argument provided as we can always retrieve a\n // pinia instance with getActivePinia()\n ((process.env.NODE_ENV === 'test') && activePinia && activePinia._testing ? null : pinia) ||\n (hasContext ? inject(piniaSymbol, null) : null);\n if (pinia)\n setActivePinia(pinia);\n if ((process.env.NODE_ENV !== 'production') && !activePinia) {\n throw new Error(`[🍍]: \"getActivePinia()\" was called but there was no active Pinia. Are you trying to use a store before calling \"app.use(pinia)\"?\\n` +\n `See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.\\n` +\n `This will fail in production.`);\n }\n pinia = activePinia;\n if (!pinia._s.has(id)) {\n // creating the store registers it in `pinia._s`\n if (isSetupStore) {\n createSetupStore(id, setup, options, pinia);\n }\n else {\n createOptionsStore(id, options, pinia);\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n // @ts-expect-error: not the right inferred type\n useStore._pinia = pinia;\n }\n }\n const store = pinia._s.get(id);\n if ((process.env.NODE_ENV !== 'production') && hot) {\n const hotId = '__hot:' + id;\n const newStore = isSetupStore\n ? createSetupStore(hotId, setup, options, pinia, true)\n : createOptionsStore(hotId, assign({}, options), pinia, true);\n hot._hotUpdate(newStore);\n // cleanup the state properties and the store from the cache\n delete pinia.state.value[hotId];\n pinia._s.delete(hotId);\n }\n if ((process.env.NODE_ENV !== 'production') && IS_CLIENT) {\n const currentInstance = getCurrentInstance();\n // save stores in instances to access them devtools\n if (currentInstance &&\n currentInstance.proxy &&\n // avoid adding stores that are just built for hot module replacement\n !hot) {\n const vm = currentInstance.proxy;\n const cache = '_pStores' in vm ? vm._pStores : (vm._pStores = {});\n cache[id] = store;\n }\n }\n // StoreGeneric cannot be casted towards Store\n return store;\n }\n useStore.$id = id;\n return useStore;\n}\n\nlet mapStoreSuffix = 'Store';\n/**\n * Changes the suffix added by `mapStores()`. Can be set to an empty string.\n * Defaults to `\"Store\"`. Make sure to extend the MapStoresCustomization\n * interface if you are using TypeScript.\n *\n * @param suffix - new suffix\n */\nfunction setMapStoreSuffix(suffix // could be 'Store' but that would be annoying for JS\n) {\n mapStoreSuffix = suffix;\n}\n/**\n * Allows using stores without the composition API (`setup()`) by generating an\n * object to be spread in the `computed` field of a component. It accepts a list\n * of store definitions.\n *\n * @example\n * ```js\n * export default {\n * computed: {\n * // other computed properties\n * ...mapStores(useUserStore, useCartStore)\n * },\n *\n * created() {\n * this.userStore // store with id \"user\"\n * this.cartStore // store with id \"cart\"\n * }\n * }\n * ```\n *\n * @param stores - list of stores to map to an object\n */\nfunction mapStores(...stores) {\n if ((process.env.NODE_ENV !== 'production') && Array.isArray(stores[0])) {\n console.warn(`[🍍]: Directly pass all stores to \"mapStores()\" without putting them in an array:\\n` +\n `Replace\\n` +\n `\\tmapStores([useAuthStore, useCartStore])\\n` +\n `with\\n` +\n `\\tmapStores(useAuthStore, useCartStore)\\n` +\n `This will fail in production if not fixed.`);\n stores = stores[0];\n }\n return stores.reduce((reduced, useStore) => {\n // @ts-expect-error: $id is added by defineStore\n reduced[useStore.$id + mapStoreSuffix] = function () {\n return useStore(this.$pinia);\n };\n return reduced;\n }, {});\n}\n/**\n * Allows using state and getters from one store without using the composition\n * API (`setup()`) by generating an object to be spread in the `computed` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapState(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n reduced[key] = function () {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[key];\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function () {\n const store = useStore(this.$pinia);\n const storeKey = keysOrMapper[key];\n // for some reason TS is unable to infer the type of storeKey to be a\n // function\n return typeof storeKey === 'function'\n ? storeKey.call(this, store)\n : // @ts-expect-error: FIXME: should work?\n store[storeKey];\n };\n return reduced;\n }, {});\n}\n/**\n * Alias for `mapState()`. You should use `mapState()` instead.\n * @deprecated use `mapState()` instead.\n */\nconst mapGetters = mapState;\n/**\n * Allows directly using actions from your store without using the composition\n * API (`setup()`) by generating an object to be spread in the `methods` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapActions(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function (...args) {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[key](...args);\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function (...args) {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[keysOrMapper[key]](...args);\n };\n return reduced;\n }, {});\n}\n/**\n * Allows using state and getters from one store without using the composition\n * API (`setup()`) by generating an object to be spread in the `computed` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapWritableState(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n reduced[key] = {\n get() {\n return useStore(this.$pinia)[key];\n },\n set(value) {\n return (useStore(this.$pinia)[key] = value);\n },\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n reduced[key] = {\n get() {\n return useStore(this.$pinia)[keysOrMapper[key]];\n },\n set(value) {\n return (useStore(this.$pinia)[keysOrMapper[key]] = value);\n },\n };\n return reduced;\n }, {});\n}\n\n/**\n * Creates an object of references with all the state, getters, and plugin-added\n * state properties of the store. Similar to `toRefs()` but specifically\n * designed for Pinia stores so methods and non reactive properties are\n * completely ignored.\n *\n * @param store - store to extract the refs from\n */\nfunction storeToRefs(store) {\n // See https://github.com/vuejs/pinia/issues/852\n // It's easier to just use toRefs() even if it includes more stuff\n if (isVue2) {\n // @ts-expect-error: toRefs include methods and others\n return toRefs(store);\n }\n else {\n const rawStore = toRaw(store);\n const refs = {};\n for (const key in rawStore) {\n const value = rawStore[key];\n // There is no native method to check for a computed\n // https://github.com/vuejs/core/pull/4165\n if (value.effect) {\n // @ts-expect-error: too hard to type correctly\n refs[key] =\n // ...\n computed({\n get: () => store[key],\n set(value) {\n store[key] = value;\n },\n });\n }\n else if (isRef(value) || isReactive(value)) {\n // @ts-expect-error: the key is state or getter\n refs[key] =\n // ---\n toRef(store, key);\n }\n }\n return refs;\n }\n}\n\n/**\n * Vue 2 Plugin that must be installed for pinia to work. Note **you don't need\n * this plugin if you are using Nuxt.js**. Use the `buildModule` instead:\n * https://pinia.vuejs.org/ssr/nuxt.html.\n *\n * @example\n * ```js\n * import Vue from 'vue'\n * import { PiniaVuePlugin, createPinia } from 'pinia'\n *\n * Vue.use(PiniaVuePlugin)\n * const pinia = createPinia()\n *\n * new Vue({\n * el: '#app',\n * // ...\n * pinia,\n * })\n * ```\n *\n * @param _Vue - `Vue` imported from 'vue'.\n */\nconst PiniaVuePlugin = function (_Vue) {\n // Equivalent of\n // app.config.globalProperties.$pinia = pinia\n _Vue.mixin({\n beforeCreate() {\n const options = this.$options;\n if (options.pinia) {\n const pinia = options.pinia;\n // HACK: taken from provide(): https://github.com/vuejs/composition-api/blob/main/src/apis/inject.ts#L31\n /* istanbul ignore else */\n if (!this._provided) {\n const provideCache = {};\n Object.defineProperty(this, '_provided', {\n get: () => provideCache,\n set: (v) => Object.assign(provideCache, v),\n });\n }\n this._provided[piniaSymbol] = pinia;\n // propagate the pinia instance in an SSR friendly way\n // avoid adding it to nuxt twice\n /* istanbul ignore else */\n if (!this.$pinia) {\n this.$pinia = pinia;\n }\n pinia._a = this;\n if (IS_CLIENT) {\n // this allows calling useStore() outside of a component setup after\n // installing pinia's plugin\n setActivePinia(pinia);\n }\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n registerPiniaDevtools(pinia._a, pinia);\n }\n }\n else if (!this.$pinia && options.parent && options.parent.$pinia) {\n this.$pinia = options.parent.$pinia;\n }\n },\n destroyed() {\n delete this._pStores;\n },\n });\n};\n\nexport { MutationType, PiniaVuePlugin, acceptHMRUpdate, createPinia, defineStore, disposePinia, getActivePinia, mapActions, mapGetters, mapState, mapStores, mapWritableState, setActivePinia, setMapStoreSuffix, shouldHydrate, skipHydrate, storeToRefs };\n"], + "sourcesContent": ["/*!\r\n * pinia v2.3.1\r\n * (c) 2025 Eduardo San Martin Morote\r\n * @license MIT\r\n */\r\nimport { hasInjectionContext, inject, toRaw, watch, unref, markRaw, effectScope, ref, isVue2, isRef, isReactive, set, getCurrentScope, onScopeDispose, getCurrentInstance, reactive, toRef, del, nextTick, computed, toRefs } from 'vue-demi';\r\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\r\n\r\n/**\r\n * setActivePinia must be called to handle SSR at the top of functions like\r\n * `fetch`, `setup`, `serverPrefetch` and others\r\n */\r\nlet activePinia;\r\n/**\r\n * Sets or unsets the active pinia. Used in SSR and internally when calling\r\n * actions and getters\r\n *\r\n * @param pinia - Pinia instance\r\n */\r\n// @ts-expect-error: cannot constrain the type of the return\r\nconst setActivePinia = (pinia) => (activePinia = pinia);\r\n/**\r\n * Get the currently active pinia if there is any.\r\n */\r\nconst getActivePinia = () => (hasInjectionContext() && inject(piniaSymbol)) || activePinia;\r\nconst piniaSymbol = ((process.env.NODE_ENV !== 'production') ? Symbol('pinia') : /* istanbul ignore next */ Symbol());\r\n\r\nfunction isPlainObject(\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\no) {\r\n return (o &&\r\n typeof o === 'object' &&\r\n Object.prototype.toString.call(o) === '[object Object]' &&\r\n typeof o.toJSON !== 'function');\r\n}\r\n// type DeepReadonly = { readonly [P in keyof T]: DeepReadonly }\r\n// TODO: can we change these to numbers?\r\n/**\r\n * Possible types for SubscriptionCallback\r\n */\r\nvar MutationType;\r\n(function (MutationType) {\r\n /**\r\n * Direct mutation of the state:\r\n *\r\n * - `store.name = 'new name'`\r\n * - `store.$state.name = 'new name'`\r\n * - `store.list.push('new item')`\r\n */\r\n MutationType[\"direct\"] = \"direct\";\r\n /**\r\n * Mutated the state with `$patch` and an object\r\n *\r\n * - `store.$patch({ name: 'newName' })`\r\n */\r\n MutationType[\"patchObject\"] = \"patch object\";\r\n /**\r\n * Mutated the state with `$patch` and a function\r\n *\r\n * - `store.$patch(state => state.name = 'newName')`\r\n */\r\n MutationType[\"patchFunction\"] = \"patch function\";\r\n // maybe reset? for $state = {} and $reset\r\n})(MutationType || (MutationType = {}));\r\n\r\nconst IS_CLIENT = typeof window !== 'undefined';\r\n\r\n/*\r\n * FileSaver.js A saveAs() FileSaver implementation.\r\n *\r\n * Originally by Eli Grey, adapted as an ESM module by Eduardo San Martin\r\n * Morote.\r\n *\r\n * License : MIT\r\n */\r\n// The one and only way of getting global scope in all environments\r\n// https://stackoverflow.com/q/3277182/1008999\r\nconst _global = /*#__PURE__*/ (() => typeof window === 'object' && window.window === window\r\n ? window\r\n : typeof self === 'object' && self.self === self\r\n ? self\r\n : typeof global === 'object' && global.global === global\r\n ? global\r\n : typeof globalThis === 'object'\r\n ? globalThis\r\n : { HTMLElement: null })();\r\nfunction bom(blob, { autoBom = false } = {}) {\r\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\r\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\r\n if (autoBom &&\r\n /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\r\n return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\r\n }\r\n return blob;\r\n}\r\nfunction download(url, name, opts) {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url);\r\n xhr.responseType = 'blob';\r\n xhr.onload = function () {\r\n saveAs(xhr.response, name, opts);\r\n };\r\n xhr.onerror = function () {\r\n console.error('could not download file');\r\n };\r\n xhr.send();\r\n}\r\nfunction corsEnabled(url) {\r\n const xhr = new XMLHttpRequest();\r\n // use sync to avoid popup blocker\r\n xhr.open('HEAD', url, false);\r\n try {\r\n xhr.send();\r\n }\r\n catch (e) { }\r\n return xhr.status >= 200 && xhr.status <= 299;\r\n}\r\n// `a.click()` doesn't work for all browsers (#465)\r\nfunction click(node) {\r\n try {\r\n node.dispatchEvent(new MouseEvent('click'));\r\n }\r\n catch (e) {\r\n const evt = document.createEvent('MouseEvents');\r\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);\r\n node.dispatchEvent(evt);\r\n }\r\n}\r\nconst _navigator = typeof navigator === 'object' ? navigator : { userAgent: '' };\r\n// Detect WebView inside a native macOS app by ruling out all browsers\r\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\r\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\r\nconst isMacOSWebView = /*#__PURE__*/ (() => /Macintosh/.test(_navigator.userAgent) &&\r\n /AppleWebKit/.test(_navigator.userAgent) &&\r\n !/Safari/.test(_navigator.userAgent))();\r\nconst saveAs = !IS_CLIENT\r\n ? () => { } // noop\r\n : // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program\r\n typeof HTMLAnchorElement !== 'undefined' &&\r\n 'download' in HTMLAnchorElement.prototype &&\r\n !isMacOSWebView\r\n ? downloadSaveAs\r\n : // Use msSaveOrOpenBlob as a second approach\r\n 'msSaveOrOpenBlob' in _navigator\r\n ? msSaveAs\r\n : // Fallback to using FileReader and a popup\r\n fileSaverSaveAs;\r\nfunction downloadSaveAs(blob, name = 'download', opts) {\r\n const a = document.createElement('a');\r\n a.download = name;\r\n a.rel = 'noopener'; // tabnabbing\r\n // TODO: detect chrome extensions & packaged apps\r\n // a.target = '_blank'\r\n if (typeof blob === 'string') {\r\n // Support regular links\r\n a.href = blob;\r\n if (a.origin !== location.origin) {\r\n if (corsEnabled(a.href)) {\r\n download(blob, name, opts);\r\n }\r\n else {\r\n a.target = '_blank';\r\n click(a);\r\n }\r\n }\r\n else {\r\n click(a);\r\n }\r\n }\r\n else {\r\n // Support blobs\r\n a.href = URL.createObjectURL(blob);\r\n setTimeout(function () {\r\n URL.revokeObjectURL(a.href);\r\n }, 4e4); // 40s\r\n setTimeout(function () {\r\n click(a);\r\n }, 0);\r\n }\r\n}\r\nfunction msSaveAs(blob, name = 'download', opts) {\r\n if (typeof blob === 'string') {\r\n if (corsEnabled(blob)) {\r\n download(blob, name, opts);\r\n }\r\n else {\r\n const a = document.createElement('a');\r\n a.href = blob;\r\n a.target = '_blank';\r\n setTimeout(function () {\r\n click(a);\r\n });\r\n }\r\n }\r\n else {\r\n // @ts-ignore: works on windows\r\n navigator.msSaveOrOpenBlob(bom(blob, opts), name);\r\n }\r\n}\r\nfunction fileSaverSaveAs(blob, name, opts, popup) {\r\n // Open a popup immediately do go around popup blocker\r\n // Mostly only available on user interaction and the fileReader is async so...\r\n popup = popup || open('', '_blank');\r\n if (popup) {\r\n popup.document.title = popup.document.body.innerText = 'downloading...';\r\n }\r\n if (typeof blob === 'string')\r\n return download(blob, name, opts);\r\n const force = blob.type === 'application/octet-stream';\r\n const isSafari = /constructor/i.test(String(_global.HTMLElement)) || 'safari' in _global;\r\n const isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\r\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) &&\r\n typeof FileReader !== 'undefined') {\r\n // Safari doesn't allow downloading of blob URLs\r\n const reader = new FileReader();\r\n reader.onloadend = function () {\r\n let url = reader.result;\r\n if (typeof url !== 'string') {\r\n popup = null;\r\n throw new Error('Wrong reader.result type');\r\n }\r\n url = isChromeIOS\r\n ? url\r\n : url.replace(/^data:[^;]*;/, 'data:attachment/file;');\r\n if (popup) {\r\n popup.location.href = url;\r\n }\r\n else {\r\n location.assign(url);\r\n }\r\n popup = null; // reverse-tabnabbing #460\r\n };\r\n reader.readAsDataURL(blob);\r\n }\r\n else {\r\n const url = URL.createObjectURL(blob);\r\n if (popup)\r\n popup.location.assign(url);\r\n else\r\n location.href = url;\r\n popup = null; // reverse-tabnabbing #460\r\n setTimeout(function () {\r\n URL.revokeObjectURL(url);\r\n }, 4e4); // 40s\r\n }\r\n}\r\n\r\n/**\r\n * Shows a toast or console.log\r\n *\r\n * @param message - message to log\r\n * @param type - different color of the tooltip\r\n */\r\nfunction toastMessage(message, type) {\r\n const piniaMessage = '🍍 ' + message;\r\n if (typeof __VUE_DEVTOOLS_TOAST__ === 'function') {\r\n // No longer available :(\r\n __VUE_DEVTOOLS_TOAST__(piniaMessage, type);\r\n }\r\n else if (type === 'error') {\r\n console.error(piniaMessage);\r\n }\r\n else if (type === 'warn') {\r\n console.warn(piniaMessage);\r\n }\r\n else {\r\n console.log(piniaMessage);\r\n }\r\n}\r\nfunction isPinia(o) {\r\n return '_a' in o && 'install' in o;\r\n}\r\n\r\n/**\r\n * This file contain devtools actions, they are not Pinia actions.\r\n */\r\n// ---\r\nfunction checkClipboardAccess() {\r\n if (!('clipboard' in navigator)) {\r\n toastMessage(`Your browser doesn't support the Clipboard API`, 'error');\r\n return true;\r\n }\r\n}\r\nfunction checkNotFocusedError(error) {\r\n if (error instanceof Error &&\r\n error.message.toLowerCase().includes('document is not focused')) {\r\n toastMessage('You need to activate the \"Emulate a focused page\" setting in the \"Rendering\" panel of devtools.', 'warn');\r\n return true;\r\n }\r\n return false;\r\n}\r\nasync function actionGlobalCopyState(pinia) {\r\n if (checkClipboardAccess())\r\n return;\r\n try {\r\n await navigator.clipboard.writeText(JSON.stringify(pinia.state.value));\r\n toastMessage('Global state copied to clipboard.');\r\n }\r\n catch (error) {\r\n if (checkNotFocusedError(error))\r\n return;\r\n toastMessage(`Failed to serialize the state. Check the console for more details.`, 'error');\r\n console.error(error);\r\n }\r\n}\r\nasync function actionGlobalPasteState(pinia) {\r\n if (checkClipboardAccess())\r\n return;\r\n try {\r\n loadStoresState(pinia, JSON.parse(await navigator.clipboard.readText()));\r\n toastMessage('Global state pasted from clipboard.');\r\n }\r\n catch (error) {\r\n if (checkNotFocusedError(error))\r\n return;\r\n toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, 'error');\r\n console.error(error);\r\n }\r\n}\r\nasync function actionGlobalSaveState(pinia) {\r\n try {\r\n saveAs(new Blob([JSON.stringify(pinia.state.value)], {\r\n type: 'text/plain;charset=utf-8',\r\n }), 'pinia-state.json');\r\n }\r\n catch (error) {\r\n toastMessage(`Failed to export the state as JSON. Check the console for more details.`, 'error');\r\n console.error(error);\r\n }\r\n}\r\nlet fileInput;\r\nfunction getFileOpener() {\r\n if (!fileInput) {\r\n fileInput = document.createElement('input');\r\n fileInput.type = 'file';\r\n fileInput.accept = '.json';\r\n }\r\n function openFile() {\r\n return new Promise((resolve, reject) => {\r\n fileInput.onchange = async () => {\r\n const files = fileInput.files;\r\n if (!files)\r\n return resolve(null);\r\n const file = files.item(0);\r\n if (!file)\r\n return resolve(null);\r\n return resolve({ text: await file.text(), file });\r\n };\r\n // @ts-ignore: TODO: changed from 4.3 to 4.4\r\n fileInput.oncancel = () => resolve(null);\r\n fileInput.onerror = reject;\r\n fileInput.click();\r\n });\r\n }\r\n return openFile;\r\n}\r\nasync function actionGlobalOpenStateFile(pinia) {\r\n try {\r\n const open = getFileOpener();\r\n const result = await open();\r\n if (!result)\r\n return;\r\n const { text, file } = result;\r\n loadStoresState(pinia, JSON.parse(text));\r\n toastMessage(`Global state imported from \"${file.name}\".`);\r\n }\r\n catch (error) {\r\n toastMessage(`Failed to import the state from JSON. Check the console for more details.`, 'error');\r\n console.error(error);\r\n }\r\n}\r\nfunction loadStoresState(pinia, state) {\r\n for (const key in state) {\r\n const storeState = pinia.state.value[key];\r\n // store is already instantiated, patch it\r\n if (storeState) {\r\n Object.assign(storeState, state[key]);\r\n }\r\n else {\r\n // store is not instantiated, set the initial state\r\n pinia.state.value[key] = state[key];\r\n }\r\n }\r\n}\r\n\r\nfunction formatDisplay(display) {\r\n return {\r\n _custom: {\r\n display,\r\n },\r\n };\r\n}\r\nconst PINIA_ROOT_LABEL = '🍍 Pinia (root)';\r\nconst PINIA_ROOT_ID = '_root';\r\nfunction formatStoreForInspectorTree(store) {\r\n return isPinia(store)\r\n ? {\r\n id: PINIA_ROOT_ID,\r\n label: PINIA_ROOT_LABEL,\r\n }\r\n : {\r\n id: store.$id,\r\n label: store.$id,\r\n };\r\n}\r\nfunction formatStoreForInspectorState(store) {\r\n if (isPinia(store)) {\r\n const storeNames = Array.from(store._s.keys());\r\n const storeMap = store._s;\r\n const state = {\r\n state: storeNames.map((storeId) => ({\r\n editable: true,\r\n key: storeId,\r\n value: store.state.value[storeId],\r\n })),\r\n getters: storeNames\r\n .filter((id) => storeMap.get(id)._getters)\r\n .map((id) => {\r\n const store = storeMap.get(id);\r\n return {\r\n editable: false,\r\n key: id,\r\n value: store._getters.reduce((getters, key) => {\r\n getters[key] = store[key];\r\n return getters;\r\n }, {}),\r\n };\r\n }),\r\n };\r\n return state;\r\n }\r\n const state = {\r\n state: Object.keys(store.$state).map((key) => ({\r\n editable: true,\r\n key,\r\n value: store.$state[key],\r\n })),\r\n };\r\n // avoid adding empty getters\r\n if (store._getters && store._getters.length) {\r\n state.getters = store._getters.map((getterName) => ({\r\n editable: false,\r\n key: getterName,\r\n value: store[getterName],\r\n }));\r\n }\r\n if (store._customProperties.size) {\r\n state.customProperties = Array.from(store._customProperties).map((key) => ({\r\n editable: true,\r\n key,\r\n value: store[key],\r\n }));\r\n }\r\n return state;\r\n}\r\nfunction formatEventData(events) {\r\n if (!events)\r\n return {};\r\n if (Array.isArray(events)) {\r\n // TODO: handle add and delete for arrays and objects\r\n return events.reduce((data, event) => {\r\n data.keys.push(event.key);\r\n data.operations.push(event.type);\r\n data.oldValue[event.key] = event.oldValue;\r\n data.newValue[event.key] = event.newValue;\r\n return data;\r\n }, {\r\n oldValue: {},\r\n keys: [],\r\n operations: [],\r\n newValue: {},\r\n });\r\n }\r\n else {\r\n return {\r\n operation: formatDisplay(events.type),\r\n key: formatDisplay(events.key),\r\n oldValue: events.oldValue,\r\n newValue: events.newValue,\r\n };\r\n }\r\n}\r\nfunction formatMutationType(type) {\r\n switch (type) {\r\n case MutationType.direct:\r\n return 'mutation';\r\n case MutationType.patchFunction:\r\n return '$patch';\r\n case MutationType.patchObject:\r\n return '$patch';\r\n default:\r\n return 'unknown';\r\n }\r\n}\r\n\r\n// timeline can be paused when directly changing the state\r\nlet isTimelineActive = true;\r\nconst componentStateTypes = [];\r\nconst MUTATIONS_LAYER_ID = 'pinia:mutations';\r\nconst INSPECTOR_ID = 'pinia';\r\nconst { assign: assign$1 } = Object;\r\n/**\r\n * Gets the displayed name of a store in devtools\r\n *\r\n * @param id - id of the store\r\n * @returns a formatted string\r\n */\r\nconst getStoreType = (id) => '🍍 ' + id;\r\n/**\r\n * Add the pinia plugin without any store. Allows displaying a Pinia plugin tab\r\n * as soon as it is added to the application.\r\n *\r\n * @param app - Vue application\r\n * @param pinia - pinia instance\r\n */\r\nfunction registerPiniaDevtools(app, pinia) {\r\n setupDevtoolsPlugin({\r\n id: 'dev.esm.pinia',\r\n label: 'Pinia 🍍',\r\n logo: 'https://pinia.vuejs.org/logo.svg',\r\n packageName: 'pinia',\r\n homepage: 'https://pinia.vuejs.org',\r\n componentStateTypes,\r\n app,\r\n }, (api) => {\r\n if (typeof api.now !== 'function') {\r\n toastMessage('You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.');\r\n }\r\n api.addTimelineLayer({\r\n id: MUTATIONS_LAYER_ID,\r\n label: `Pinia 🍍`,\r\n color: 0xe5df88,\r\n });\r\n api.addInspector({\r\n id: INSPECTOR_ID,\r\n label: 'Pinia 🍍',\r\n icon: 'storage',\r\n treeFilterPlaceholder: 'Search stores',\r\n actions: [\r\n {\r\n icon: 'content_copy',\r\n action: () => {\r\n actionGlobalCopyState(pinia);\r\n },\r\n tooltip: 'Serialize and copy the state',\r\n },\r\n {\r\n icon: 'content_paste',\r\n action: async () => {\r\n await actionGlobalPasteState(pinia);\r\n api.sendInspectorTree(INSPECTOR_ID);\r\n api.sendInspectorState(INSPECTOR_ID);\r\n },\r\n tooltip: 'Replace the state with the content of your clipboard',\r\n },\r\n {\r\n icon: 'save',\r\n action: () => {\r\n actionGlobalSaveState(pinia);\r\n },\r\n tooltip: 'Save the state as a JSON file',\r\n },\r\n {\r\n icon: 'folder_open',\r\n action: async () => {\r\n await actionGlobalOpenStateFile(pinia);\r\n api.sendInspectorTree(INSPECTOR_ID);\r\n api.sendInspectorState(INSPECTOR_ID);\r\n },\r\n tooltip: 'Import the state from a JSON file',\r\n },\r\n ],\r\n nodeActions: [\r\n {\r\n icon: 'restore',\r\n tooltip: 'Reset the state (with \"$reset\")',\r\n action: (nodeId) => {\r\n const store = pinia._s.get(nodeId);\r\n if (!store) {\r\n toastMessage(`Cannot reset \"${nodeId}\" store because it wasn't found.`, 'warn');\r\n }\r\n else if (typeof store.$reset !== 'function') {\r\n toastMessage(`Cannot reset \"${nodeId}\" store because it doesn't have a \"$reset\" method implemented.`, 'warn');\r\n }\r\n else {\r\n store.$reset();\r\n toastMessage(`Store \"${nodeId}\" reset.`);\r\n }\r\n },\r\n },\r\n ],\r\n });\r\n api.on.inspectComponent((payload, ctx) => {\r\n const proxy = (payload.componentInstance &&\r\n payload.componentInstance.proxy);\r\n if (proxy && proxy._pStores) {\r\n const piniaStores = payload.componentInstance.proxy._pStores;\r\n Object.values(piniaStores).forEach((store) => {\r\n payload.instanceData.state.push({\r\n type: getStoreType(store.$id),\r\n key: 'state',\r\n editable: true,\r\n value: store._isOptionsAPI\r\n ? {\r\n _custom: {\r\n value: toRaw(store.$state),\r\n actions: [\r\n {\r\n icon: 'restore',\r\n tooltip: 'Reset the state of this store',\r\n action: () => store.$reset(),\r\n },\r\n ],\r\n },\r\n }\r\n : // NOTE: workaround to unwrap transferred refs\r\n Object.keys(store.$state).reduce((state, key) => {\r\n state[key] = store.$state[key];\r\n return state;\r\n }, {}),\r\n });\r\n if (store._getters && store._getters.length) {\r\n payload.instanceData.state.push({\r\n type: getStoreType(store.$id),\r\n key: 'getters',\r\n editable: false,\r\n value: store._getters.reduce((getters, key) => {\r\n try {\r\n getters[key] = store[key];\r\n }\r\n catch (error) {\r\n // @ts-expect-error: we just want to show it in devtools\r\n getters[key] = error;\r\n }\r\n return getters;\r\n }, {}),\r\n });\r\n }\r\n });\r\n }\r\n });\r\n api.on.getInspectorTree((payload) => {\r\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\r\n let stores = [pinia];\r\n stores = stores.concat(Array.from(pinia._s.values()));\r\n payload.rootNodes = (payload.filter\r\n ? stores.filter((store) => '$id' in store\r\n ? store.$id\r\n .toLowerCase()\r\n .includes(payload.filter.toLowerCase())\r\n : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase()))\r\n : stores).map(formatStoreForInspectorTree);\r\n }\r\n });\r\n // Expose pinia instance as $pinia to window\r\n globalThis.$pinia = pinia;\r\n api.on.getInspectorState((payload) => {\r\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\r\n const inspectedStore = payload.nodeId === PINIA_ROOT_ID\r\n ? pinia\r\n : pinia._s.get(payload.nodeId);\r\n if (!inspectedStore) {\r\n // this could be the selected store restored for a different project\r\n // so it's better not to say anything here\r\n return;\r\n }\r\n if (inspectedStore) {\r\n // Expose selected store as $store to window\r\n if (payload.nodeId !== PINIA_ROOT_ID)\r\n globalThis.$store = toRaw(inspectedStore);\r\n payload.state = formatStoreForInspectorState(inspectedStore);\r\n }\r\n }\r\n });\r\n api.on.editInspectorState((payload, ctx) => {\r\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\r\n const inspectedStore = payload.nodeId === PINIA_ROOT_ID\r\n ? pinia\r\n : pinia._s.get(payload.nodeId);\r\n if (!inspectedStore) {\r\n return toastMessage(`store \"${payload.nodeId}\" not found`, 'error');\r\n }\r\n const { path } = payload;\r\n if (!isPinia(inspectedStore)) {\r\n // access only the state\r\n if (path.length !== 1 ||\r\n !inspectedStore._customProperties.has(path[0]) ||\r\n path[0] in inspectedStore.$state) {\r\n path.unshift('$state');\r\n }\r\n }\r\n else {\r\n // Root access, we can omit the `.value` because the devtools API does it for us\r\n path.unshift('state');\r\n }\r\n isTimelineActive = false;\r\n payload.set(inspectedStore, path, payload.state.value);\r\n isTimelineActive = true;\r\n }\r\n });\r\n api.on.editComponentState((payload) => {\r\n if (payload.type.startsWith('🍍')) {\r\n const storeId = payload.type.replace(/^🍍\\s*/, '');\r\n const store = pinia._s.get(storeId);\r\n if (!store) {\r\n return toastMessage(`store \"${storeId}\" not found`, 'error');\r\n }\r\n const { path } = payload;\r\n if (path[0] !== 'state') {\r\n return toastMessage(`Invalid path for store \"${storeId}\":\\n${path}\\nOnly state can be modified.`);\r\n }\r\n // rewrite the first entry to be able to directly set the state as\r\n // well as any other path\r\n path[0] = '$state';\r\n isTimelineActive = false;\r\n payload.set(store, path, payload.state.value);\r\n isTimelineActive = true;\r\n }\r\n });\r\n });\r\n}\r\nfunction addStoreToDevtools(app, store) {\r\n if (!componentStateTypes.includes(getStoreType(store.$id))) {\r\n componentStateTypes.push(getStoreType(store.$id));\r\n }\r\n setupDevtoolsPlugin({\r\n id: 'dev.esm.pinia',\r\n label: 'Pinia 🍍',\r\n logo: 'https://pinia.vuejs.org/logo.svg',\r\n packageName: 'pinia',\r\n homepage: 'https://pinia.vuejs.org',\r\n componentStateTypes,\r\n app,\r\n settings: {\r\n logStoreChanges: {\r\n label: 'Notify about new/deleted stores',\r\n type: 'boolean',\r\n defaultValue: true,\r\n },\r\n // useEmojis: {\r\n // label: 'Use emojis in messages ⚡️',\r\n // type: 'boolean',\r\n // defaultValue: true,\r\n // },\r\n },\r\n }, (api) => {\r\n // gracefully handle errors\r\n const now = typeof api.now === 'function' ? api.now.bind(api) : Date.now;\r\n store.$onAction(({ after, onError, name, args }) => {\r\n const groupId = runningActionId++;\r\n api.addTimelineEvent({\r\n layerId: MUTATIONS_LAYER_ID,\r\n event: {\r\n time: now(),\r\n title: '🛫 ' + name,\r\n subtitle: 'start',\r\n data: {\r\n store: formatDisplay(store.$id),\r\n action: formatDisplay(name),\r\n args,\r\n },\r\n groupId,\r\n },\r\n });\r\n after((result) => {\r\n activeAction = undefined;\r\n api.addTimelineEvent({\r\n layerId: MUTATIONS_LAYER_ID,\r\n event: {\r\n time: now(),\r\n title: '🛬 ' + name,\r\n subtitle: 'end',\r\n data: {\r\n store: formatDisplay(store.$id),\r\n action: formatDisplay(name),\r\n args,\r\n result,\r\n },\r\n groupId,\r\n },\r\n });\r\n });\r\n onError((error) => {\r\n activeAction = undefined;\r\n api.addTimelineEvent({\r\n layerId: MUTATIONS_LAYER_ID,\r\n event: {\r\n time: now(),\r\n logType: 'error',\r\n title: '💥 ' + name,\r\n subtitle: 'end',\r\n data: {\r\n store: formatDisplay(store.$id),\r\n action: formatDisplay(name),\r\n args,\r\n error,\r\n },\r\n groupId,\r\n },\r\n });\r\n });\r\n }, true);\r\n store._customProperties.forEach((name) => {\r\n watch(() => unref(store[name]), (newValue, oldValue) => {\r\n api.notifyComponentUpdate();\r\n api.sendInspectorState(INSPECTOR_ID);\r\n if (isTimelineActive) {\r\n api.addTimelineEvent({\r\n layerId: MUTATIONS_LAYER_ID,\r\n event: {\r\n time: now(),\r\n title: 'Change',\r\n subtitle: name,\r\n data: {\r\n newValue,\r\n oldValue,\r\n },\r\n groupId: activeAction,\r\n },\r\n });\r\n }\r\n }, { deep: true });\r\n });\r\n store.$subscribe(({ events, type }, state) => {\r\n api.notifyComponentUpdate();\r\n api.sendInspectorState(INSPECTOR_ID);\r\n if (!isTimelineActive)\r\n return;\r\n // rootStore.state[store.id] = state\r\n const eventData = {\r\n time: now(),\r\n title: formatMutationType(type),\r\n data: assign$1({ store: formatDisplay(store.$id) }, formatEventData(events)),\r\n groupId: activeAction,\r\n };\r\n if (type === MutationType.patchFunction) {\r\n eventData.subtitle = '⤵️';\r\n }\r\n else if (type === MutationType.patchObject) {\r\n eventData.subtitle = '🧩';\r\n }\r\n else if (events && !Array.isArray(events)) {\r\n eventData.subtitle = events.type;\r\n }\r\n if (events) {\r\n eventData.data['rawEvent(s)'] = {\r\n _custom: {\r\n display: 'DebuggerEvent',\r\n type: 'object',\r\n tooltip: 'raw DebuggerEvent[]',\r\n value: events,\r\n },\r\n };\r\n }\r\n api.addTimelineEvent({\r\n layerId: MUTATIONS_LAYER_ID,\r\n event: eventData,\r\n });\r\n }, { detached: true, flush: 'sync' });\r\n const hotUpdate = store._hotUpdate;\r\n store._hotUpdate = markRaw((newStore) => {\r\n hotUpdate(newStore);\r\n api.addTimelineEvent({\r\n layerId: MUTATIONS_LAYER_ID,\r\n event: {\r\n time: now(),\r\n title: '🔥 ' + store.$id,\r\n subtitle: 'HMR update',\r\n data: {\r\n store: formatDisplay(store.$id),\r\n info: formatDisplay(`HMR update`),\r\n },\r\n },\r\n });\r\n // update the devtools too\r\n api.notifyComponentUpdate();\r\n api.sendInspectorTree(INSPECTOR_ID);\r\n api.sendInspectorState(INSPECTOR_ID);\r\n });\r\n const { $dispose } = store;\r\n store.$dispose = () => {\r\n $dispose();\r\n api.notifyComponentUpdate();\r\n api.sendInspectorTree(INSPECTOR_ID);\r\n api.sendInspectorState(INSPECTOR_ID);\r\n api.getSettings().logStoreChanges &&\r\n toastMessage(`Disposed \"${store.$id}\" store 🗑`);\r\n };\r\n // trigger an update so it can display new registered stores\r\n api.notifyComponentUpdate();\r\n api.sendInspectorTree(INSPECTOR_ID);\r\n api.sendInspectorState(INSPECTOR_ID);\r\n api.getSettings().logStoreChanges &&\r\n toastMessage(`\"${store.$id}\" store installed 🆕`);\r\n });\r\n}\r\nlet runningActionId = 0;\r\nlet activeAction;\r\n/**\r\n * Patches a store to enable action grouping in devtools by wrapping the store with a Proxy that is passed as the\r\n * context of all actions, allowing us to set `runningAction` on each access and effectively associating any state\r\n * mutation to the action.\r\n *\r\n * @param store - store to patch\r\n * @param actionNames - list of actionst to patch\r\n */\r\nfunction patchActionForGrouping(store, actionNames, wrapWithProxy) {\r\n // original actions of the store as they are given by pinia. We are going to override them\r\n const actions = actionNames.reduce((storeActions, actionName) => {\r\n // use toRaw to avoid tracking #541\r\n storeActions[actionName] = toRaw(store)[actionName];\r\n return storeActions;\r\n }, {});\r\n for (const actionName in actions) {\r\n store[actionName] = function () {\r\n // the running action id is incremented in a before action hook\r\n const _actionId = runningActionId;\r\n const trackedStore = wrapWithProxy\r\n ? new Proxy(store, {\r\n get(...args) {\r\n activeAction = _actionId;\r\n return Reflect.get(...args);\r\n },\r\n set(...args) {\r\n activeAction = _actionId;\r\n return Reflect.set(...args);\r\n },\r\n })\r\n : store;\r\n // For Setup Stores we need https://github.com/tc39/proposal-async-context\r\n activeAction = _actionId;\r\n const retValue = actions[actionName].apply(trackedStore, arguments);\r\n // this is safer as async actions in Setup Stores would associate mutations done outside of the action\r\n activeAction = undefined;\r\n return retValue;\r\n };\r\n }\r\n}\r\n/**\r\n * pinia.use(devtoolsPlugin)\r\n */\r\nfunction devtoolsPlugin({ app, store, options }) {\r\n // HMR module\r\n if (store.$id.startsWith('__hot:')) {\r\n return;\r\n }\r\n // detect option api vs setup api\r\n store._isOptionsAPI = !!options.state;\r\n // Do not overwrite actions mocked by @pinia/testing (#2298)\r\n if (!store._p._testing) {\r\n patchActionForGrouping(store, Object.keys(options.actions), store._isOptionsAPI);\r\n // Upgrade the HMR to also update the new actions\r\n const originalHotUpdate = store._hotUpdate;\r\n toRaw(store)._hotUpdate = function (newStore) {\r\n originalHotUpdate.apply(this, arguments);\r\n patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions), !!store._isOptionsAPI);\r\n };\r\n }\r\n addStoreToDevtools(app, \r\n // FIXME: is there a way to allow the assignment from Store to StoreGeneric?\r\n store);\r\n}\r\n\r\n/**\r\n * Creates a Pinia instance to be used by the application\r\n */\r\nfunction createPinia() {\r\n const scope = effectScope(true);\r\n // NOTE: here we could check the window object for a state and directly set it\r\n // if there is anything like it with Vue 3 SSR\r\n const state = scope.run(() => ref({}));\r\n let _p = [];\r\n // plugins added before calling app.use(pinia)\r\n let toBeInstalled = [];\r\n const pinia = markRaw({\r\n install(app) {\r\n // this allows calling useStore() outside of a component setup after\r\n // installing pinia's plugin\r\n setActivePinia(pinia);\r\n if (!isVue2) {\r\n pinia._a = app;\r\n app.provide(piniaSymbol, pinia);\r\n app.config.globalProperties.$pinia = pinia;\r\n /* istanbul ignore else */\r\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\r\n registerPiniaDevtools(app, pinia);\r\n }\r\n toBeInstalled.forEach((plugin) => _p.push(plugin));\r\n toBeInstalled = [];\r\n }\r\n },\r\n use(plugin) {\r\n if (!this._a && !isVue2) {\r\n toBeInstalled.push(plugin);\r\n }\r\n else {\r\n _p.push(plugin);\r\n }\r\n return this;\r\n },\r\n _p,\r\n // it's actually undefined here\r\n // @ts-expect-error\r\n _a: null,\r\n _e: scope,\r\n _s: new Map(),\r\n state,\r\n });\r\n // pinia devtools rely on dev only features so they cannot be forced unless\r\n // the dev build of Vue is used. Avoid old browsers like IE11.\r\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT && typeof Proxy !== 'undefined') {\r\n pinia.use(devtoolsPlugin);\r\n }\r\n return pinia;\r\n}\r\n/**\r\n * Dispose a Pinia instance by stopping its effectScope and removing the state, plugins and stores. This is mostly\r\n * useful in tests, with both a testing pinia or a regular pinia and in applications that use multiple pinia instances.\r\n * Once disposed, the pinia instance cannot be used anymore.\r\n *\r\n * @param pinia - pinia instance\r\n */\r\nfunction disposePinia(pinia) {\r\n pinia._e.stop();\r\n pinia._s.clear();\r\n pinia._p.splice(0);\r\n pinia.state.value = {};\r\n // @ts-expect-error: non valid\r\n pinia._a = null;\r\n}\r\n\r\n/**\r\n * Checks if a function is a `StoreDefinition`.\r\n *\r\n * @param fn - object to test\r\n * @returns true if `fn` is a StoreDefinition\r\n */\r\nconst isUseStore = (fn) => {\r\n return typeof fn === 'function' && typeof fn.$id === 'string';\r\n};\r\n/**\r\n * Mutates in place `newState` with `oldState` to _hot update_ it. It will\r\n * remove any key not existing in `newState` and recursively merge plain\r\n * objects.\r\n *\r\n * @param newState - new state object to be patched\r\n * @param oldState - old state that should be used to patch newState\r\n * @returns - newState\r\n */\r\nfunction patchObject(newState, oldState) {\r\n // no need to go through symbols because they cannot be serialized anyway\r\n for (const key in oldState) {\r\n const subPatch = oldState[key];\r\n // skip the whole sub tree\r\n if (!(key in newState)) {\r\n continue;\r\n }\r\n const targetValue = newState[key];\r\n if (isPlainObject(targetValue) &&\r\n isPlainObject(subPatch) &&\r\n !isRef(subPatch) &&\r\n !isReactive(subPatch)) {\r\n newState[key] = patchObject(targetValue, subPatch);\r\n }\r\n else {\r\n // objects are either a bit more complex (e.g. refs) or primitives, so we\r\n // just set the whole thing\r\n if (isVue2) {\r\n set(newState, key, subPatch);\r\n }\r\n else {\r\n newState[key] = subPatch;\r\n }\r\n }\r\n }\r\n return newState;\r\n}\r\n/**\r\n * Creates an _accept_ function to pass to `import.meta.hot` in Vite applications.\r\n *\r\n * @example\r\n * ```js\r\n * const useUser = defineStore(...)\r\n * if (import.meta.hot) {\r\n * import.meta.hot.accept(acceptHMRUpdate(useUser, import.meta.hot))\r\n * }\r\n * ```\r\n *\r\n * @param initialUseStore - return of the defineStore to hot update\r\n * @param hot - `import.meta.hot`\r\n */\r\nfunction acceptHMRUpdate(initialUseStore, hot) {\r\n // strip as much as possible from iife.prod\r\n if (!(process.env.NODE_ENV !== 'production')) {\r\n return () => { };\r\n }\r\n return (newModule) => {\r\n const pinia = hot.data.pinia || initialUseStore._pinia;\r\n if (!pinia) {\r\n // this store is still not used\r\n return;\r\n }\r\n // preserve the pinia instance across loads\r\n hot.data.pinia = pinia;\r\n // console.log('got data', newStore)\r\n for (const exportName in newModule) {\r\n const useStore = newModule[exportName];\r\n // console.log('checking for', exportName)\r\n if (isUseStore(useStore) && pinia._s.has(useStore.$id)) {\r\n // console.log('Accepting update for', useStore.$id)\r\n const id = useStore.$id;\r\n if (id !== initialUseStore.$id) {\r\n console.warn(`The id of the store changed from \"${initialUseStore.$id}\" to \"${id}\". Reloading.`);\r\n // return import.meta.hot.invalidate()\r\n return hot.invalidate();\r\n }\r\n const existingStore = pinia._s.get(id);\r\n if (!existingStore) {\r\n console.log(`[Pinia]: skipping hmr because store doesn't exist yet`);\r\n return;\r\n }\r\n useStore(pinia, existingStore);\r\n }\r\n }\r\n };\r\n}\r\n\r\nconst noop = () => { };\r\nfunction addSubscription(subscriptions, callback, detached, onCleanup = noop) {\r\n subscriptions.push(callback);\r\n const removeSubscription = () => {\r\n const idx = subscriptions.indexOf(callback);\r\n if (idx > -1) {\r\n subscriptions.splice(idx, 1);\r\n onCleanup();\r\n }\r\n };\r\n if (!detached && getCurrentScope()) {\r\n onScopeDispose(removeSubscription);\r\n }\r\n return removeSubscription;\r\n}\r\nfunction triggerSubscriptions(subscriptions, ...args) {\r\n subscriptions.slice().forEach((callback) => {\r\n callback(...args);\r\n });\r\n}\r\n\r\nconst fallbackRunWithContext = (fn) => fn();\r\n/**\r\n * Marks a function as an action for `$onAction`\r\n * @internal\r\n */\r\nconst ACTION_MARKER = Symbol();\r\n/**\r\n * Action name symbol. Allows to add a name to an action after defining it\r\n * @internal\r\n */\r\nconst ACTION_NAME = Symbol();\r\nfunction mergeReactiveObjects(target, patchToApply) {\r\n // Handle Map instances\r\n if (target instanceof Map && patchToApply instanceof Map) {\r\n patchToApply.forEach((value, key) => target.set(key, value));\r\n }\r\n else if (target instanceof Set && patchToApply instanceof Set) {\r\n // Handle Set instances\r\n patchToApply.forEach(target.add, target);\r\n }\r\n // no need to go through symbols because they cannot be serialized anyway\r\n for (const key in patchToApply) {\r\n if (!patchToApply.hasOwnProperty(key))\r\n continue;\r\n const subPatch = patchToApply[key];\r\n const targetValue = target[key];\r\n if (isPlainObject(targetValue) &&\r\n isPlainObject(subPatch) &&\r\n target.hasOwnProperty(key) &&\r\n !isRef(subPatch) &&\r\n !isReactive(subPatch)) {\r\n // NOTE: here I wanted to warn about inconsistent types but it's not possible because in setup stores one might\r\n // start the value of a property as a certain type e.g. a Map, and then for some reason, during SSR, change that\r\n // to `undefined`. When trying to hydrate, we want to override the Map with `undefined`.\r\n target[key] = mergeReactiveObjects(targetValue, subPatch);\r\n }\r\n else {\r\n // @ts-expect-error: subPatch is a valid value\r\n target[key] = subPatch;\r\n }\r\n }\r\n return target;\r\n}\r\nconst skipHydrateSymbol = (process.env.NODE_ENV !== 'production')\r\n ? Symbol('pinia:skipHydration')\r\n : /* istanbul ignore next */ Symbol();\r\n/**\r\n * Tells Pinia to skip the hydration process of a given object. This is useful in setup stores (only) when you return a\r\n * stateful object in the store but it isn't really state. e.g. returning a router instance in a setup store.\r\n *\r\n * @param obj - target object\r\n * @returns obj\r\n */\r\nfunction skipHydrate(obj) {\r\n return Object.defineProperty(obj, skipHydrateSymbol, {});\r\n}\r\n/**\r\n * Returns whether a value should be hydrated\r\n *\r\n * @param obj - target variable\r\n * @returns true if `obj` should be hydrated\r\n */\r\nfunction shouldHydrate(obj) {\r\n return !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);\r\n}\r\nconst { assign } = Object;\r\nfunction isComputed(o) {\r\n return !!(isRef(o) && o.effect);\r\n}\r\nfunction createOptionsStore(id, options, pinia, hot) {\r\n const { state, actions, getters } = options;\r\n const initialState = pinia.state.value[id];\r\n let store;\r\n function setup() {\r\n if (!initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\r\n /* istanbul ignore if */\r\n if (isVue2) {\r\n set(pinia.state.value, id, state ? state() : {});\r\n }\r\n else {\r\n pinia.state.value[id] = state ? state() : {};\r\n }\r\n }\r\n // avoid creating a state in pinia.state.value\r\n const localState = (process.env.NODE_ENV !== 'production') && hot\r\n ? // use ref() to unwrap refs inside state TODO: check if this is still necessary\r\n toRefs(ref(state ? state() : {}).value)\r\n : toRefs(pinia.state.value[id]);\r\n return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {\r\n if ((process.env.NODE_ENV !== 'production') && name in localState) {\r\n console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with \"${name}\" in store \"${id}\".`);\r\n }\r\n computedGetters[name] = markRaw(computed(() => {\r\n setActivePinia(pinia);\r\n // it was created just before\r\n const store = pinia._s.get(id);\r\n // allow cross using stores\r\n /* istanbul ignore if */\r\n if (isVue2 && !store._r)\r\n return;\r\n // @ts-expect-error\r\n // return getters![name].call(context, context)\r\n // TODO: avoid reading the getter while assigning with a global variable\r\n return getters[name].call(store, store);\r\n }));\r\n return computedGetters;\r\n }, {}));\r\n }\r\n store = createSetupStore(id, setup, options, pinia, hot, true);\r\n return store;\r\n}\r\nfunction createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {\r\n let scope;\r\n const optionsForPlugin = assign({ actions: {} }, options);\r\n /* istanbul ignore if */\r\n if ((process.env.NODE_ENV !== 'production') && !pinia._e.active) {\r\n throw new Error('Pinia destroyed');\r\n }\r\n // watcher options for $subscribe\r\n const $subscribeOptions = { deep: true };\r\n /* istanbul ignore else */\r\n if ((process.env.NODE_ENV !== 'production') && !isVue2) {\r\n $subscribeOptions.onTrigger = (event) => {\r\n /* istanbul ignore else */\r\n if (isListening) {\r\n debuggerEvents = event;\r\n // avoid triggering this while the store is being built and the state is being set in pinia\r\n }\r\n else if (isListening == false && !store._hotUpdating) {\r\n // let patch send all the events together later\r\n /* istanbul ignore else */\r\n if (Array.isArray(debuggerEvents)) {\r\n debuggerEvents.push(event);\r\n }\r\n else {\r\n console.error('🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.');\r\n }\r\n }\r\n };\r\n }\r\n // internal state\r\n let isListening; // set to true at the end\r\n let isSyncListening; // set to true at the end\r\n let subscriptions = [];\r\n let actionSubscriptions = [];\r\n let debuggerEvents;\r\n const initialState = pinia.state.value[$id];\r\n // avoid setting the state for option stores if it is set\r\n // by the setup\r\n if (!isOptionsStore && !initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\r\n /* istanbul ignore if */\r\n if (isVue2) {\r\n set(pinia.state.value, $id, {});\r\n }\r\n else {\r\n pinia.state.value[$id] = {};\r\n }\r\n }\r\n const hotState = ref({});\r\n // avoid triggering too many listeners\r\n // https://github.com/vuejs/pinia/issues/1129\r\n let activeListener;\r\n function $patch(partialStateOrMutator) {\r\n let subscriptionMutation;\r\n isListening = isSyncListening = false;\r\n // reset the debugger events since patches are sync\r\n /* istanbul ignore else */\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n debuggerEvents = [];\r\n }\r\n if (typeof partialStateOrMutator === 'function') {\r\n partialStateOrMutator(pinia.state.value[$id]);\r\n subscriptionMutation = {\r\n type: MutationType.patchFunction,\r\n storeId: $id,\r\n events: debuggerEvents,\r\n };\r\n }\r\n else {\r\n mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);\r\n subscriptionMutation = {\r\n type: MutationType.patchObject,\r\n payload: partialStateOrMutator,\r\n storeId: $id,\r\n events: debuggerEvents,\r\n };\r\n }\r\n const myListenerId = (activeListener = Symbol());\r\n nextTick().then(() => {\r\n if (activeListener === myListenerId) {\r\n isListening = true;\r\n }\r\n });\r\n isSyncListening = true;\r\n // because we paused the watcher, we need to manually call the subscriptions\r\n triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);\r\n }\r\n const $reset = isOptionsStore\r\n ? function $reset() {\r\n const { state } = options;\r\n const newState = state ? state() : {};\r\n // we use a patch to group all changes into one single subscription\r\n this.$patch(($state) => {\r\n // @ts-expect-error: FIXME: shouldn't error?\r\n assign($state, newState);\r\n });\r\n }\r\n : /* istanbul ignore next */\r\n (process.env.NODE_ENV !== 'production')\r\n ? () => {\r\n throw new Error(`🍍: Store \"${$id}\" is built using the setup syntax and does not implement $reset().`);\r\n }\r\n : noop;\r\n function $dispose() {\r\n scope.stop();\r\n subscriptions = [];\r\n actionSubscriptions = [];\r\n pinia._s.delete($id);\r\n }\r\n /**\r\n * Helper that wraps function so it can be tracked with $onAction\r\n * @param fn - action to wrap\r\n * @param name - name of the action\r\n */\r\n const action = (fn, name = '') => {\r\n if (ACTION_MARKER in fn) {\r\n fn[ACTION_NAME] = name;\r\n return fn;\r\n }\r\n const wrappedAction = function () {\r\n setActivePinia(pinia);\r\n const args = Array.from(arguments);\r\n const afterCallbackList = [];\r\n const onErrorCallbackList = [];\r\n function after(callback) {\r\n afterCallbackList.push(callback);\r\n }\r\n function onError(callback) {\r\n onErrorCallbackList.push(callback);\r\n }\r\n // @ts-expect-error\r\n triggerSubscriptions(actionSubscriptions, {\r\n args,\r\n name: wrappedAction[ACTION_NAME],\r\n store,\r\n after,\r\n onError,\r\n });\r\n let ret;\r\n try {\r\n ret = fn.apply(this && this.$id === $id ? this : store, args);\r\n // handle sync errors\r\n }\r\n catch (error) {\r\n triggerSubscriptions(onErrorCallbackList, error);\r\n throw error;\r\n }\r\n if (ret instanceof Promise) {\r\n return ret\r\n .then((value) => {\r\n triggerSubscriptions(afterCallbackList, value);\r\n return value;\r\n })\r\n .catch((error) => {\r\n triggerSubscriptions(onErrorCallbackList, error);\r\n return Promise.reject(error);\r\n });\r\n }\r\n // trigger after callbacks\r\n triggerSubscriptions(afterCallbackList, ret);\r\n return ret;\r\n };\r\n wrappedAction[ACTION_MARKER] = true;\r\n wrappedAction[ACTION_NAME] = name; // will be set later\r\n // @ts-expect-error: we are intentionally limiting the returned type to just Fn\r\n // because all the added properties are internals that are exposed through `$onAction()` only\r\n return wrappedAction;\r\n };\r\n const _hmrPayload = /*#__PURE__*/ markRaw({\r\n actions: {},\r\n getters: {},\r\n state: [],\r\n hotState,\r\n });\r\n const partialStore = {\r\n _p: pinia,\r\n // _s: scope,\r\n $id,\r\n $onAction: addSubscription.bind(null, actionSubscriptions),\r\n $patch,\r\n $reset,\r\n $subscribe(callback, options = {}) {\r\n const removeSubscription = addSubscription(subscriptions, callback, options.detached, () => stopWatcher());\r\n const stopWatcher = scope.run(() => watch(() => pinia.state.value[$id], (state) => {\r\n if (options.flush === 'sync' ? isSyncListening : isListening) {\r\n callback({\r\n storeId: $id,\r\n type: MutationType.direct,\r\n events: debuggerEvents,\r\n }, state);\r\n }\r\n }, assign({}, $subscribeOptions, options)));\r\n return removeSubscription;\r\n },\r\n $dispose,\r\n };\r\n /* istanbul ignore if */\r\n if (isVue2) {\r\n // start as non ready\r\n partialStore._r = false;\r\n }\r\n const store = reactive((process.env.NODE_ENV !== 'production') || ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT)\r\n ? assign({\r\n _hmrPayload,\r\n _customProperties: markRaw(new Set()), // devtools custom properties\r\n }, partialStore\r\n // must be added later\r\n // setupStore\r\n )\r\n : partialStore);\r\n // store the partial store now so the setup of stores can instantiate each other before they are finished without\r\n // creating infinite loops.\r\n pinia._s.set($id, store);\r\n const runWithContext = (pinia._a && pinia._a.runWithContext) || fallbackRunWithContext;\r\n // TODO: idea create skipSerialize that marks properties as non serializable and they are skipped\r\n const setupStore = runWithContext(() => pinia._e.run(() => (scope = effectScope()).run(() => setup({ action }))));\r\n // overwrite existing actions to support $onAction\r\n for (const key in setupStore) {\r\n const prop = setupStore[key];\r\n if ((isRef(prop) && !isComputed(prop)) || isReactive(prop)) {\r\n // mark it as a piece of state to be serialized\r\n if ((process.env.NODE_ENV !== 'production') && hot) {\r\n set(hotState.value, key, toRef(setupStore, key));\r\n // createOptionStore directly sets the state in pinia.state.value so we\r\n // can just skip that\r\n }\r\n else if (!isOptionsStore) {\r\n // in setup stores we must hydrate the state and sync pinia state tree with the refs the user just created\r\n if (initialState && shouldHydrate(prop)) {\r\n if (isRef(prop)) {\r\n prop.value = initialState[key];\r\n }\r\n else {\r\n // probably a reactive object, lets recursively assign\r\n // @ts-expect-error: prop is unknown\r\n mergeReactiveObjects(prop, initialState[key]);\r\n }\r\n }\r\n // transfer the ref to the pinia state to keep everything in sync\r\n /* istanbul ignore if */\r\n if (isVue2) {\r\n set(pinia.state.value[$id], key, prop);\r\n }\r\n else {\r\n pinia.state.value[$id][key] = prop;\r\n }\r\n }\r\n /* istanbul ignore else */\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n _hmrPayload.state.push(key);\r\n }\r\n // action\r\n }\r\n else if (typeof prop === 'function') {\r\n const actionValue = (process.env.NODE_ENV !== 'production') && hot ? prop : action(prop, key);\r\n // this a hot module replacement store because the hotUpdate method needs\r\n // to do it with the right context\r\n /* istanbul ignore if */\r\n if (isVue2) {\r\n set(setupStore, key, actionValue);\r\n }\r\n else {\r\n // @ts-expect-error\r\n setupStore[key] = actionValue;\r\n }\r\n /* istanbul ignore else */\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n _hmrPayload.actions[key] = prop;\r\n }\r\n // list actions so they can be used in plugins\r\n // @ts-expect-error\r\n optionsForPlugin.actions[key] = prop;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n // add getters for devtools\r\n if (isComputed(prop)) {\r\n _hmrPayload.getters[key] = isOptionsStore\r\n ? // @ts-expect-error\r\n options.getters[key]\r\n : prop;\r\n if (IS_CLIENT) {\r\n const getters = setupStore._getters ||\r\n // @ts-expect-error: same\r\n (setupStore._getters = markRaw([]));\r\n getters.push(key);\r\n }\r\n }\r\n }\r\n }\r\n // add the state, getters, and action properties\r\n /* istanbul ignore if */\r\n if (isVue2) {\r\n Object.keys(setupStore).forEach((key) => {\r\n set(store, key, setupStore[key]);\r\n });\r\n }\r\n else {\r\n assign(store, setupStore);\r\n // allows retrieving reactive objects with `storeToRefs()`. Must be called after assigning to the reactive object.\r\n // Make `storeToRefs()` work with `reactive()` #799\r\n assign(toRaw(store), setupStore);\r\n }\r\n // use this instead of a computed with setter to be able to create it anywhere\r\n // without linking the computed lifespan to wherever the store is first\r\n // created.\r\n Object.defineProperty(store, '$state', {\r\n get: () => ((process.env.NODE_ENV !== 'production') && hot ? hotState.value : pinia.state.value[$id]),\r\n set: (state) => {\r\n /* istanbul ignore if */\r\n if ((process.env.NODE_ENV !== 'production') && hot) {\r\n throw new Error('cannot set hotState');\r\n }\r\n $patch(($state) => {\r\n // @ts-expect-error: FIXME: shouldn't error?\r\n assign($state, state);\r\n });\r\n },\r\n });\r\n // add the hotUpdate before plugins to allow them to override it\r\n /* istanbul ignore else */\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n store._hotUpdate = markRaw((newStore) => {\r\n store._hotUpdating = true;\r\n newStore._hmrPayload.state.forEach((stateKey) => {\r\n if (stateKey in store.$state) {\r\n const newStateTarget = newStore.$state[stateKey];\r\n const oldStateSource = store.$state[stateKey];\r\n if (typeof newStateTarget === 'object' &&\r\n isPlainObject(newStateTarget) &&\r\n isPlainObject(oldStateSource)) {\r\n patchObject(newStateTarget, oldStateSource);\r\n }\r\n else {\r\n // transfer the ref\r\n newStore.$state[stateKey] = oldStateSource;\r\n }\r\n }\r\n // patch direct access properties to allow store.stateProperty to work as\r\n // store.$state.stateProperty\r\n set(store, stateKey, toRef(newStore.$state, stateKey));\r\n });\r\n // remove deleted state properties\r\n Object.keys(store.$state).forEach((stateKey) => {\r\n if (!(stateKey in newStore.$state)) {\r\n del(store, stateKey);\r\n }\r\n });\r\n // avoid devtools logging this as a mutation\r\n isListening = false;\r\n isSyncListening = false;\r\n pinia.state.value[$id] = toRef(newStore._hmrPayload, 'hotState');\r\n isSyncListening = true;\r\n nextTick().then(() => {\r\n isListening = true;\r\n });\r\n for (const actionName in newStore._hmrPayload.actions) {\r\n const actionFn = newStore[actionName];\r\n set(store, actionName, action(actionFn, actionName));\r\n }\r\n // TODO: does this work in both setup and option store?\r\n for (const getterName in newStore._hmrPayload.getters) {\r\n const getter = newStore._hmrPayload.getters[getterName];\r\n const getterValue = isOptionsStore\r\n ? // special handling of options api\r\n computed(() => {\r\n setActivePinia(pinia);\r\n return getter.call(store, store);\r\n })\r\n : getter;\r\n set(store, getterName, getterValue);\r\n }\r\n // remove deleted getters\r\n Object.keys(store._hmrPayload.getters).forEach((key) => {\r\n if (!(key in newStore._hmrPayload.getters)) {\r\n del(store, key);\r\n }\r\n });\r\n // remove old actions\r\n Object.keys(store._hmrPayload.actions).forEach((key) => {\r\n if (!(key in newStore._hmrPayload.actions)) {\r\n del(store, key);\r\n }\r\n });\r\n // update the values used in devtools and to allow deleting new properties later on\r\n store._hmrPayload = newStore._hmrPayload;\r\n store._getters = newStore._getters;\r\n store._hotUpdating = false;\r\n });\r\n }\r\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\r\n const nonEnumerable = {\r\n writable: true,\r\n configurable: true,\r\n // avoid warning on devtools trying to display this property\r\n enumerable: false,\r\n };\r\n ['_p', '_hmrPayload', '_getters', '_customProperties'].forEach((p) => {\r\n Object.defineProperty(store, p, assign({ value: store[p] }, nonEnumerable));\r\n });\r\n }\r\n /* istanbul ignore if */\r\n if (isVue2) {\r\n // mark the store as ready before plugins\r\n store._r = true;\r\n }\r\n // apply all plugins\r\n pinia._p.forEach((extender) => {\r\n /* istanbul ignore else */\r\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\r\n const extensions = scope.run(() => extender({\r\n store: store,\r\n app: pinia._a,\r\n pinia,\r\n options: optionsForPlugin,\r\n }));\r\n Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));\r\n assign(store, extensions);\r\n }\r\n else {\r\n assign(store, scope.run(() => extender({\r\n store: store,\r\n app: pinia._a,\r\n pinia,\r\n options: optionsForPlugin,\r\n })));\r\n }\r\n });\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n store.$state &&\r\n typeof store.$state === 'object' &&\r\n typeof store.$state.constructor === 'function' &&\r\n !store.$state.constructor.toString().includes('[native code]')) {\r\n console.warn(`[🍍]: The \"state\" must be a plain object. It cannot be\\n` +\r\n `\\tstate: () => new MyClass()\\n` +\r\n `Found in store \"${store.$id}\".`);\r\n }\r\n // only apply hydrate to option stores with an initial state in pinia\r\n if (initialState &&\r\n isOptionsStore &&\r\n options.hydrate) {\r\n options.hydrate(store.$state, initialState);\r\n }\r\n isListening = true;\r\n isSyncListening = true;\r\n return store;\r\n}\r\n// allows unused stores to be tree shaken\r\n/*! #__NO_SIDE_EFFECTS__ */\r\nfunction defineStore(\r\n// TODO: add proper types from above\r\nidOrOptions, setup, setupOptions) {\r\n let id;\r\n let options;\r\n const isSetupStore = typeof setup === 'function';\r\n if (typeof idOrOptions === 'string') {\r\n id = idOrOptions;\r\n // the option store setup will contain the actual options in this case\r\n options = isSetupStore ? setupOptions : setup;\r\n }\r\n else {\r\n options = idOrOptions;\r\n id = idOrOptions.id;\r\n if ((process.env.NODE_ENV !== 'production') && typeof id !== 'string') {\r\n throw new Error(`[🍍]: \"defineStore()\" must be passed a store id as its first argument.`);\r\n }\r\n }\r\n function useStore(pinia, hot) {\r\n const hasContext = hasInjectionContext();\r\n pinia =\r\n // in test mode, ignore the argument provided as we can always retrieve a\r\n // pinia instance with getActivePinia()\r\n ((process.env.NODE_ENV === 'test') && activePinia && activePinia._testing ? null : pinia) ||\r\n (hasContext ? inject(piniaSymbol, null) : null);\r\n if (pinia)\r\n setActivePinia(pinia);\r\n if ((process.env.NODE_ENV !== 'production') && !activePinia) {\r\n throw new Error(`[🍍]: \"getActivePinia()\" was called but there was no active Pinia. Are you trying to use a store before calling \"app.use(pinia)\"?\\n` +\r\n `See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.\\n` +\r\n `This will fail in production.`);\r\n }\r\n pinia = activePinia;\r\n if (!pinia._s.has(id)) {\r\n // creating the store registers it in `pinia._s`\r\n if (isSetupStore) {\r\n createSetupStore(id, setup, options, pinia);\r\n }\r\n else {\r\n createOptionsStore(id, options, pinia);\r\n }\r\n /* istanbul ignore else */\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n // @ts-expect-error: not the right inferred type\r\n useStore._pinia = pinia;\r\n }\r\n }\r\n const store = pinia._s.get(id);\r\n if ((process.env.NODE_ENV !== 'production') && hot) {\r\n const hotId = '__hot:' + id;\r\n const newStore = isSetupStore\r\n ? createSetupStore(hotId, setup, options, pinia, true)\r\n : createOptionsStore(hotId, assign({}, options), pinia, true);\r\n hot._hotUpdate(newStore);\r\n // cleanup the state properties and the store from the cache\r\n delete pinia.state.value[hotId];\r\n pinia._s.delete(hotId);\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && IS_CLIENT) {\r\n const currentInstance = getCurrentInstance();\r\n // save stores in instances to access them devtools\r\n if (currentInstance &&\r\n currentInstance.proxy &&\r\n // avoid adding stores that are just built for hot module replacement\r\n !hot) {\r\n const vm = currentInstance.proxy;\r\n const cache = '_pStores' in vm ? vm._pStores : (vm._pStores = {});\r\n cache[id] = store;\r\n }\r\n }\r\n // StoreGeneric cannot be casted towards Store\r\n return store;\r\n }\r\n useStore.$id = id;\r\n return useStore;\r\n}\r\n\r\nlet mapStoreSuffix = 'Store';\r\n/**\r\n * Changes the suffix added by `mapStores()`. Can be set to an empty string.\r\n * Defaults to `\"Store\"`. Make sure to extend the MapStoresCustomization\r\n * interface if you are using TypeScript.\r\n *\r\n * @param suffix - new suffix\r\n */\r\nfunction setMapStoreSuffix(suffix // could be 'Store' but that would be annoying for JS\r\n) {\r\n mapStoreSuffix = suffix;\r\n}\r\n/**\r\n * Allows using stores without the composition API (`setup()`) by generating an\r\n * object to be spread in the `computed` field of a component. It accepts a list\r\n * of store definitions.\r\n *\r\n * @example\r\n * ```js\r\n * export default {\r\n * computed: {\r\n * // other computed properties\r\n * ...mapStores(useUserStore, useCartStore)\r\n * },\r\n *\r\n * created() {\r\n * this.userStore // store with id \"user\"\r\n * this.cartStore // store with id \"cart\"\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @param stores - list of stores to map to an object\r\n */\r\nfunction mapStores(...stores) {\r\n if ((process.env.NODE_ENV !== 'production') && Array.isArray(stores[0])) {\r\n console.warn(`[🍍]: Directly pass all stores to \"mapStores()\" without putting them in an array:\\n` +\r\n `Replace\\n` +\r\n `\\tmapStores([useAuthStore, useCartStore])\\n` +\r\n `with\\n` +\r\n `\\tmapStores(useAuthStore, useCartStore)\\n` +\r\n `This will fail in production if not fixed.`);\r\n stores = stores[0];\r\n }\r\n return stores.reduce((reduced, useStore) => {\r\n // @ts-expect-error: $id is added by defineStore\r\n reduced[useStore.$id + mapStoreSuffix] = function () {\r\n return useStore(this.$pinia);\r\n };\r\n return reduced;\r\n }, {});\r\n}\r\n/**\r\n * Allows using state and getters from one store without using the composition\r\n * API (`setup()`) by generating an object to be spread in the `computed` field\r\n * of a component.\r\n *\r\n * @param useStore - store to map from\r\n * @param keysOrMapper - array or object\r\n */\r\nfunction mapState(useStore, keysOrMapper) {\r\n return Array.isArray(keysOrMapper)\r\n ? keysOrMapper.reduce((reduced, key) => {\r\n reduced[key] = function () {\r\n // @ts-expect-error: FIXME: should work?\r\n return useStore(this.$pinia)[key];\r\n };\r\n return reduced;\r\n }, {})\r\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\r\n // @ts-expect-error\r\n reduced[key] = function () {\r\n const store = useStore(this.$pinia);\r\n const storeKey = keysOrMapper[key];\r\n // for some reason TS is unable to infer the type of storeKey to be a\r\n // function\r\n return typeof storeKey === 'function'\r\n ? storeKey.call(this, store)\r\n : // @ts-expect-error: FIXME: should work?\r\n store[storeKey];\r\n };\r\n return reduced;\r\n }, {});\r\n}\r\n/**\r\n * Alias for `mapState()`. You should use `mapState()` instead.\r\n * @deprecated use `mapState()` instead.\r\n */\r\nconst mapGetters = mapState;\r\n/**\r\n * Allows directly using actions from your store without using the composition\r\n * API (`setup()`) by generating an object to be spread in the `methods` field\r\n * of a component.\r\n *\r\n * @param useStore - store to map from\r\n * @param keysOrMapper - array or object\r\n */\r\nfunction mapActions(useStore, keysOrMapper) {\r\n return Array.isArray(keysOrMapper)\r\n ? keysOrMapper.reduce((reduced, key) => {\r\n // @ts-expect-error\r\n reduced[key] = function (...args) {\r\n // @ts-expect-error: FIXME: should work?\r\n return useStore(this.$pinia)[key](...args);\r\n };\r\n return reduced;\r\n }, {})\r\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\r\n // @ts-expect-error\r\n reduced[key] = function (...args) {\r\n // @ts-expect-error: FIXME: should work?\r\n return useStore(this.$pinia)[keysOrMapper[key]](...args);\r\n };\r\n return reduced;\r\n }, {});\r\n}\r\n/**\r\n * Allows using state and getters from one store without using the composition\r\n * API (`setup()`) by generating an object to be spread in the `computed` field\r\n * of a component.\r\n *\r\n * @param useStore - store to map from\r\n * @param keysOrMapper - array or object\r\n */\r\nfunction mapWritableState(useStore, keysOrMapper) {\r\n return Array.isArray(keysOrMapper)\r\n ? keysOrMapper.reduce((reduced, key) => {\r\n reduced[key] = {\r\n get() {\r\n return useStore(this.$pinia)[key];\r\n },\r\n set(value) {\r\n return (useStore(this.$pinia)[key] = value);\r\n },\r\n };\r\n return reduced;\r\n }, {})\r\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\r\n reduced[key] = {\r\n get() {\r\n return useStore(this.$pinia)[keysOrMapper[key]];\r\n },\r\n set(value) {\r\n return (useStore(this.$pinia)[keysOrMapper[key]] = value);\r\n },\r\n };\r\n return reduced;\r\n }, {});\r\n}\r\n\r\n/**\r\n * Creates an object of references with all the state, getters, and plugin-added\r\n * state properties of the store. Similar to `toRefs()` but specifically\r\n * designed for Pinia stores so methods and non reactive properties are\r\n * completely ignored.\r\n *\r\n * @param store - store to extract the refs from\r\n */\r\nfunction storeToRefs(store) {\r\n // See https://github.com/vuejs/pinia/issues/852\r\n // It's easier to just use toRefs() even if it includes more stuff\r\n if (isVue2) {\r\n // @ts-expect-error: toRefs include methods and others\r\n return toRefs(store);\r\n }\r\n else {\r\n const rawStore = toRaw(store);\r\n const refs = {};\r\n for (const key in rawStore) {\r\n const value = rawStore[key];\r\n // There is no native method to check for a computed\r\n // https://github.com/vuejs/core/pull/4165\r\n if (value.effect) {\r\n // @ts-expect-error: too hard to type correctly\r\n refs[key] =\r\n // ...\r\n computed({\r\n get: () => store[key],\r\n set(value) {\r\n store[key] = value;\r\n },\r\n });\r\n }\r\n else if (isRef(value) || isReactive(value)) {\r\n // @ts-expect-error: the key is state or getter\r\n refs[key] =\r\n // ---\r\n toRef(store, key);\r\n }\r\n }\r\n return refs;\r\n }\r\n}\r\n\r\n/**\r\n * Vue 2 Plugin that must be installed for pinia to work. Note **you don't need\r\n * this plugin if you are using Nuxt.js**. Use the `buildModule` instead:\r\n * https://pinia.vuejs.org/ssr/nuxt.html.\r\n *\r\n * @example\r\n * ```js\r\n * import Vue from 'vue'\r\n * import { PiniaVuePlugin, createPinia } from 'pinia'\r\n *\r\n * Vue.use(PiniaVuePlugin)\r\n * const pinia = createPinia()\r\n *\r\n * new Vue({\r\n * el: '#app',\r\n * // ...\r\n * pinia,\r\n * })\r\n * ```\r\n *\r\n * @param _Vue - `Vue` imported from 'vue'.\r\n */\r\nconst PiniaVuePlugin = function (_Vue) {\r\n // Equivalent of\r\n // app.config.globalProperties.$pinia = pinia\r\n _Vue.mixin({\r\n beforeCreate() {\r\n const options = this.$options;\r\n if (options.pinia) {\r\n const pinia = options.pinia;\r\n // HACK: taken from provide(): https://github.com/vuejs/composition-api/blob/main/src/apis/inject.ts#L31\r\n /* istanbul ignore else */\r\n if (!this._provided) {\r\n const provideCache = {};\r\n Object.defineProperty(this, '_provided', {\r\n get: () => provideCache,\r\n set: (v) => Object.assign(provideCache, v),\r\n });\r\n }\r\n this._provided[piniaSymbol] = pinia;\r\n // propagate the pinia instance in an SSR friendly way\r\n // avoid adding it to nuxt twice\r\n /* istanbul ignore else */\r\n if (!this.$pinia) {\r\n this.$pinia = pinia;\r\n }\r\n pinia._a = this;\r\n if (IS_CLIENT) {\r\n // this allows calling useStore() outside of a component setup after\r\n // installing pinia's plugin\r\n setActivePinia(pinia);\r\n }\r\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\r\n registerPiniaDevtools(pinia._a, pinia);\r\n }\r\n }\r\n else if (!this.$pinia && options.parent && options.parent.$pinia) {\r\n this.$pinia = options.parent.$pinia;\r\n }\r\n },\r\n destroyed() {\r\n delete this._pStores;\r\n },\r\n });\r\n};\r\n\r\nexport { MutationType, PiniaVuePlugin, acceptHMRUpdate, createPinia, defineStore, disposePinia, getActivePinia, mapActions, mapGetters, mapState, mapStores, mapWritableState, setActivePinia, setMapStoreSuffix, shouldHydrate, skipHydrate, storeToRefs };\r\n"], "mappings": "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", "names": ["MutationType", "open", "state", "store", "$reset", "options", "value"] } diff --git a/admin/node_modules/.vite/deps/qrcode.js.map b/admin/node_modules/.vite/deps/qrcode.js.map index 6282a476..1ed8dc14 100644 --- a/admin/node_modules/.vite/deps/qrcode.js.map +++ b/admin/node_modules/.vite/deps/qrcode.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../qrcode/lib/can-promise.js", "../../qrcode/lib/core/utils.js", "../../qrcode/lib/core/error-correction-level.js", "../../qrcode/lib/core/bit-buffer.js", "../../qrcode/lib/core/bit-matrix.js", "../../qrcode/lib/core/alignment-pattern.js", "../../qrcode/lib/core/finder-pattern.js", "../../qrcode/lib/core/mask-pattern.js", "../../qrcode/lib/core/error-correction-code.js", "../../qrcode/lib/core/galois-field.js", "../../qrcode/lib/core/polynomial.js", "../../qrcode/lib/core/reed-solomon-encoder.js", "../../qrcode/lib/core/version-check.js", "../../qrcode/lib/core/regex.js", "../../qrcode/lib/core/mode.js", "../../qrcode/lib/core/version.js", "../../qrcode/lib/core/format-info.js", "../../qrcode/lib/core/numeric-data.js", "../../qrcode/lib/core/alphanumeric-data.js", "../../qrcode/lib/core/byte-data.js", "../../qrcode/lib/core/kanji-data.js", "../../dijkstrajs/dijkstra.js", "../../qrcode/lib/core/segments.js", "../../qrcode/lib/core/qrcode.js", "../../qrcode/lib/renderer/utils.js", "../../qrcode/lib/renderer/canvas.js", "../../qrcode/lib/renderer/svg-tag.js", "../../qrcode/lib/browser.js"], - "sourcesContent": ["// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n", "let toSJISFunction\nconst CODEWORDS_COUNT = [\n 0, // Not used\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param {Number} version QR Code version\n * @return {Number} size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n if (!version) throw new Error('\"version\" cannot be null or undefined')\n if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param {Number} version QR Code version\n * @return {Number} Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param {Number} data Value to encode\n * @return {Number} Encoded value\n */\nexports.getBCHDigit = function (data) {\n let digit = 0\n\n while (data !== 0) {\n digit++\n data >>>= 1\n }\n\n return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n if (typeof f !== 'function') {\n throw new Error('\"toSJISFunc\" is not a valid function.')\n }\n\n toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n return toSJISFunction(kanji)\n}\n", "exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'l':\n case 'low':\n return exports.L\n\n case 'm':\n case 'medium':\n return exports.M\n\n case 'q':\n case 'quartile':\n return exports.Q\n\n case 'h':\n case 'high':\n return exports.H\n\n default:\n throw new Error('Unknown EC Level: ' + string)\n }\n}\n\nexports.isValid = function isValid (level) {\n return level && typeof level.bit !== 'undefined' &&\n level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n", "function BitBuffer () {\n this.buffer = []\n this.length = 0\n}\n\nBitBuffer.prototype = {\n\n get: function (index) {\n const bufIndex = Math.floor(index / 8)\n return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n },\n\n put: function (num, length) {\n for (let i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n }\n },\n\n getLengthInBits: function () {\n return this.length\n },\n\n putBit: function (bit) {\n const bufIndex = Math.floor(this.length / 8)\n if (this.buffer.length <= bufIndex) {\n this.buffer.push(0)\n }\n\n if (bit) {\n this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n }\n\n this.length++\n }\n}\n\nmodule.exports = BitBuffer\n", "/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n if (!size || size < 1) {\n throw new Error('BitMatrix size must be defined and greater than 0')\n }\n\n this.size = size\n this.data = new Uint8Array(size * size)\n this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n const index = row * this.size + col\n this.data[index] = value\n if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n", "/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n if (version === 1) return []\n\n const posCount = Math.floor(version / 7) + 2\n const size = getSymbolSize(version)\n const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n const positions = [size - 7] // Last coord is always (size - 7)\n\n for (let i = 1; i < posCount - 1; i++) {\n positions[i] = positions[i - 1] - intervals\n }\n\n positions.push(6) // First coord is always 6\n\n return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const coords = []\n const pos = exports.getRowColCoords(version)\n const posLength = pos.length\n\n for (let i = 0; i < posLength; i++) {\n for (let j = 0; j < posLength; j++) {\n // Skip if position is occupied by finder patterns\n if ((i === 0 && j === 0) || // top-left\n (i === 0 && j === posLength - 1) || // bottom-left\n (i === posLength - 1 && j === 0)) { // top-right\n continue\n }\n\n coords.push([pos[i], pos[j]])\n }\n }\n\n return coords\n}\n", "const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const size = getSymbolSize(version)\n\n return [\n // top-left\n [0, 0],\n // top-right\n [size - FINDER_PATTERN_SIZE, 0],\n // bottom-left\n [0, size - FINDER_PATTERN_SIZE]\n ]\n}\n", "/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n PATTERN000: 0,\n PATTERN001: 1,\n PATTERN010: 2,\n PATTERN011: 3,\n PATTERN100: 4,\n PATTERN101: 5,\n PATTERN110: 6,\n PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n N1: 3,\n N2: 3,\n N3: 40,\n N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param {Number} mask Mask pattern\n * @return {Boolean} true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param {Number|String} value Mask pattern value\n * @return {Number} Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n const size = data.size\n let points = 0\n let sameCountCol = 0\n let sameCountRow = 0\n let lastCol = null\n let lastRow = null\n\n for (let row = 0; row < size; row++) {\n sameCountCol = sameCountRow = 0\n lastCol = lastRow = null\n\n for (let col = 0; col < size; col++) {\n let module = data.get(row, col)\n if (module === lastCol) {\n sameCountCol++\n } else {\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n lastCol = module\n sameCountCol = 1\n }\n\n module = data.get(col, row)\n if (module === lastRow) {\n sameCountRow++\n } else {\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n lastRow = module\n sameCountRow = 1\n }\n }\n\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n }\n\n return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n const size = data.size\n let points = 0\n\n for (let row = 0; row < size - 1; row++) {\n for (let col = 0; col < size - 1; col++) {\n const last = data.get(row, col) +\n data.get(row, col + 1) +\n data.get(row + 1, col) +\n data.get(row + 1, col + 1)\n\n if (last === 4 || last === 0) points++\n }\n }\n\n return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n const size = data.size\n let points = 0\n let bitsCol = 0\n let bitsRow = 0\n\n for (let row = 0; row < size; row++) {\n bitsCol = bitsRow = 0\n for (let col = 0; col < size; col++) {\n bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n }\n }\n\n return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n let darkCount = 0\n const modulesCount = data.data.length\n\n for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param {Number} maskPattern Pattern reference value\n * @param {Number} i Row\n * @param {Number} j Column\n * @return {Boolean} Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n switch (maskPattern) {\n case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n case exports.Patterns.PATTERN001: return i % 2 === 0\n case exports.Patterns.PATTERN010: return j % 3 === 0\n case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n default: throw new Error('bad maskPattern:' + maskPattern)\n }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param {Number} pattern Pattern reference number\n * @param {BitMatrix} data BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n const size = data.size\n\n for (let col = 0; col < size; col++) {\n for (let row = 0; row < size; row++) {\n if (data.isReserved(row, col)) continue\n data.xor(row, col, getMaskAt(pattern, row, col))\n }\n }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n const numPatterns = Object.keys(exports.Patterns).length\n let bestPattern = 0\n let lowerPenalty = Infinity\n\n for (let p = 0; p < numPatterns; p++) {\n setupFormatFunc(p)\n exports.applyMask(p, data)\n\n // Calculate penalty\n const penalty =\n exports.getPenaltyN1(data) +\n exports.getPenaltyN2(data) +\n exports.getPenaltyN3(data) +\n exports.getPenaltyN4(data)\n\n // Undo previously applied mask\n exports.applyMask(p, data)\n\n if (penalty < lowerPenalty) {\n lowerPenalty = penalty\n bestPattern = p\n }\n }\n\n return bestPattern\n}\n", "const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L M Q H\r\n 1, 1, 1, 1,\r\n 1, 1, 1, 1,\r\n 1, 1, 2, 2,\r\n 1, 2, 2, 4,\r\n 1, 2, 4, 4,\r\n 2, 4, 4, 4,\r\n 2, 4, 6, 5,\r\n 2, 4, 6, 6,\r\n 2, 5, 8, 8,\r\n 4, 5, 8, 8,\r\n 4, 5, 8, 11,\r\n 4, 8, 10, 11,\r\n 4, 9, 12, 16,\r\n 4, 9, 16, 16,\r\n 6, 10, 12, 18,\r\n 6, 10, 17, 16,\r\n 6, 11, 16, 19,\r\n 6, 13, 18, 21,\r\n 7, 14, 21, 25,\r\n 8, 16, 20, 25,\r\n 8, 17, 23, 25,\r\n 9, 17, 23, 34,\r\n 9, 18, 25, 30,\r\n 10, 20, 27, 32,\r\n 12, 21, 29, 35,\r\n 12, 23, 34, 37,\r\n 12, 25, 34, 40,\r\n 13, 26, 35, 42,\r\n 14, 28, 38, 45,\r\n 15, 29, 40, 48,\r\n 16, 31, 43, 51,\r\n 17, 33, 45, 54,\r\n 18, 35, 48, 57,\r\n 19, 37, 51, 60,\r\n 19, 38, 53, 63,\r\n 20, 40, 56, 66,\r\n 21, 43, 59, 70,\r\n 22, 45, 62, 74,\r\n 24, 47, 65, 77,\r\n 25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L M Q H\r\n 7, 10, 13, 17,\r\n 10, 16, 22, 28,\r\n 15, 26, 36, 44,\r\n 20, 36, 52, 64,\r\n 26, 48, 72, 88,\r\n 36, 64, 96, 112,\r\n 40, 72, 108, 130,\r\n 48, 88, 132, 156,\r\n 60, 110, 160, 192,\r\n 72, 130, 192, 224,\r\n 80, 150, 224, 264,\r\n 96, 176, 260, 308,\r\n 104, 198, 288, 352,\r\n 120, 216, 320, 384,\r\n 132, 240, 360, 432,\r\n 144, 280, 408, 480,\r\n 168, 308, 448, 532,\r\n 180, 338, 504, 588,\r\n 196, 364, 546, 650,\r\n 224, 416, 600, 700,\r\n 224, 442, 644, 750,\r\n 252, 476, 690, 816,\r\n 270, 504, 750, 900,\r\n 300, 560, 810, 960,\r\n 312, 588, 870, 1050,\r\n 336, 644, 952, 1110,\r\n 360, 700, 1020, 1200,\r\n 390, 728, 1050, 1260,\r\n 420, 784, 1140, 1350,\r\n 450, 812, 1200, 1440,\r\n 480, 868, 1290, 1530,\r\n 510, 924, 1350, 1620,\r\n 540, 980, 1440, 1710,\r\n 570, 1036, 1530, 1800,\r\n 570, 1064, 1590, 1890,\r\n 600, 1120, 1680, 1980,\r\n 630, 1204, 1770, 2100,\r\n 660, 1260, 1860, 2220,\r\n 720, 1316, 1950, 2310,\r\n 750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n", "const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n let x = 1\n for (let i = 0; i < 255; i++) {\n EXP_TABLE[i] = x\n LOG_TABLE[x] = i\n\n x <<= 1 // multiply by 2\n\n // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n x ^= 0x11D\n }\n }\n\n // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n // stay inside the bounds (because we will mainly use this table for the multiplication of\n // two GF numbers, no more).\n // @see {@link mul}\n for (let i = 255; i < 512; i++) {\n EXP_TABLE[i] = EXP_TABLE[i - 255]\n }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n if (n < 1) throw new Error('log(' + n + ')')\n return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param {Number} x\n * @param {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n if (x === 0 || y === 0) return 0\n\n // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n // @see {@link initTables}\n return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n", "const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param {Uint8Array} p1 Polynomial\n * @param {Uint8Array} p2 Polynomial\n * @return {Uint8Array} Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n for (let i = 0; i < p1.length; i++) {\n for (let j = 0; j < p2.length; j++) {\n coeff[i + j] ^= GF.mul(p1[i], p2[j])\n }\n }\n\n return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param {Uint8Array} divident Polynomial\n * @param {Uint8Array} divisor Polynomial\n * @return {Uint8Array} Remainder\n */\nexports.mod = function mod (divident, divisor) {\n let result = new Uint8Array(divident)\n\n while ((result.length - divisor.length) >= 0) {\n const coeff = result[0]\n\n for (let i = 0; i < divisor.length; i++) {\n result[i] ^= GF.mul(divisor[i], coeff)\n }\n\n // remove all zeros from buffer head\n let offset = 0\n while (offset < result.length && result[offset] === 0) offset++\n result = result.slice(offset)\n }\n\n return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param {Number} degree Degree of the generator polynomial\n * @return {Uint8Array} Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n let poly = new Uint8Array([1])\n for (let i = 0; i < degree; i++) {\n poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n }\n\n return poly\n}\n", "const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n this.genPoly = undefined\n this.degree = degree\n\n if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n // create an irreducible generator polynomial\n this.degree = degree\n this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param {Uint8Array} data Buffer containing input data\n * @return {Uint8Array} Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n if (!this.genPoly) {\n throw new Error('Encoder not initialized')\n }\n\n // Calculate EC for this data block\n // extends data size to data+genPoly size\n const paddedData = new Uint8Array(data.length + this.degree)\n paddedData.set(data)\n\n // The error correction codewords are the remainder after dividing the data codewords\n // by a generator polynomial\n const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n // return EC data blocks (last n byte, where n is the degree of genPoly)\n // If coefficients number in remainder are less than genPoly degree,\n // pad with 0s to the left to reach the needed number of coefficients\n const start = this.degree - remainder.length\n if (start > 0) {\n const buff = new Uint8Array(this.degree)\n buff.set(remainder, start)\n\n return buff\n }\n\n return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n", "/**\n * Check if QR Code version is valid\n *\n * @param {Number} version QR Code version\n * @return {Boolean} true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n return !isNaN(version) && version >= 1 && version <= 40\n}\n", "const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n return TEST_ALPHANUMERIC.test(str)\n}\n", "const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n id: 'Numeric',\n bit: 1 << 0,\n ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n * 26 alphabetic characters (A - Z),\n * and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n id: 'Alphanumeric',\n bit: 1 << 1,\n ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n id: 'Byte',\n bit: 1 << 2,\n ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n id: 'Kanji',\n bit: 1 << 3,\n ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param {Mode} mode Data mode\n * @param {Number} version QR Code version\n * @return {Number} Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid version: ' + version)\n }\n\n if (version >= 1 && version < 10) return mode.ccBits[0]\n else if (version < 27) return mode.ccBits[1]\n return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param {String} dataStr Input data string\n * @return {Mode} Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n else if (Regex.testKanji(dataStr)) return exports.KANJI\n else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String} Mode name\n */\nexports.toString = function toString (mode) {\n if (mode && mode.id) return mode.id\n throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param {Mode} mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param {String} string Mode name\n * @returns {Mode} Mode object\n */\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'numeric':\n return exports.NUMERIC\n case 'alphanumeric':\n return exports.ALPHANUMERIC\n case 'kanji':\n return exports.KANJI\n case 'byte':\n return exports.BYTE\n default:\n throw new Error('Unknown mode: ' + string)\n }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param {Mode|String} value Encoding mode\n * @param {Mode} defaultValue Fallback value\n * @return {Mode} Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n", "const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n // Character count indicator + mode indicator bits\n return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n let totalBits = 0\n\n segments.forEach(function (data) {\n const reservedBits = getReservedBitsCount(data.mode, version)\n totalBits += reservedBits + data.getBitsLength()\n })\n\n return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n const length = getTotalBitsFromDataArray(segments, currentVersion)\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param {Number|String} value QR Code version\n * @param {Number} defaultValue Fallback value\n * @return {Number} QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n if (VersionCheck.isValid(value)) {\n return parseInt(value, 10)\n }\n\n return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param {Number} version QR Code version (1-40)\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid QR Code version')\n }\n\n // Use Byte mode as default\n if (typeof mode === 'undefined') mode = Mode.BYTE\n\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n // Return max number of storable codewords\n switch (mode) {\n case Mode.NUMERIC:\n return Math.floor((usableBits / 10) * 3)\n\n case Mode.ALPHANUMERIC:\n return Math.floor((usableBits / 11) * 2)\n\n case Mode.KANJI:\n return Math.floor(usableBits / 13)\n\n case Mode.BYTE:\n default:\n return Math.floor(usableBits / 8)\n }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param {Segment} data Segment of data\n * @param {Number} [errorCorrectionLevel=H] Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n let seg\n\n const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n if (Array.isArray(data)) {\n if (data.length > 1) {\n return getBestVersionForMixedData(data, ecl)\n }\n\n if (data.length === 0) {\n return 1\n }\n\n seg = data[0]\n } else {\n seg = data\n }\n\n return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param {Number} version QR Code version\n * @return {Number} Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n if (!VersionCheck.isValid(version) || version < 7) {\n throw new Error('Invalid QR Code version')\n }\n\n let d = version << 12\n\n while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n }\n\n return (version << 12) | d\n}\n", "const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Number} mask Mask pattern\n * @return {Number} Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n const data = ((errorCorrectionLevel.bit << 3) | mask)\n let d = data << 10\n\n while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n }\n\n // xor final data with mask pattern in order to ensure that\n // no combination of Error Correction Level and data mask pattern\n // will result in an all-zero data string\n return ((data << 10) | d) ^ G15_MASK\n}\n", "const Mode = require('./mode')\n\nfunction NumericData (data) {\n this.mode = Mode.NUMERIC\n this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n let i, group, value\n\n // The input data string is divided into groups of three digits,\n // and each group is converted to its 10-bit binary equivalent.\n for (i = 0; i + 3 <= this.data.length; i += 3) {\n group = this.data.substr(i, 3)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, 10)\n }\n\n // If the number of input digits is not an exact multiple of three,\n // the final one or two digits are converted to 4 or 7 bits respectively.\n const remainingNum = this.data.length - i\n if (remainingNum > 0) {\n group = this.data.substr(i)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, remainingNum * 3 + 1)\n }\n}\n\nmodule.exports = NumericData\n", "const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n this.mode = Mode.ALPHANUMERIC\n this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n let i\n\n // Input data characters are divided into groups of two characters\n // and encoded as 11-bit binary codes.\n for (i = 0; i + 2 <= this.data.length; i += 2) {\n // The character value of the first character is multiplied by 45\n let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n // The character value of the second digit is added to the product\n value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n // The sum is then stored as 11-bit binary number\n bitBuffer.put(value, 11)\n }\n\n // If the number of input data characters is not a multiple of two,\n // the character value of the final character is encoded as a 6-bit binary number.\n if (this.data.length % 2) {\n bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n }\n}\n\nmodule.exports = AlphanumericData\n", "const Mode = require('./mode')\n\nfunction ByteData (data) {\n this.mode = Mode.BYTE\n if (typeof (data) === 'string') {\n this.data = new TextEncoder().encode(data)\n } else {\n this.data = new Uint8Array(data)\n }\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n for (let i = 0, l = this.data.length; i < l; i++) {\n bitBuffer.put(this.data[i], 8)\n }\n}\n\nmodule.exports = ByteData\n", "const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n this.mode = Mode.KANJI\n this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n let i\n\n // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n // These byte values are shifted from the JIS X 0208 values.\n // JIS X 0208 gives details of the shift coded representation.\n for (i = 0; i < this.data.length; i++) {\n let value = Utils.toSJIS(this.data[i])\n\n // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n if (value >= 0x8140 && value <= 0x9FFC) {\n // Subtract 0x8140 from Shift JIS value\n value -= 0x8140\n\n // For characters with Shift JIS values from 0xE040 to 0xEBBF\n } else if (value >= 0xE040 && value <= 0xEBBF) {\n // Subtract 0xC140 from Shift JIS value\n value -= 0xC140\n } else {\n throw new Error(\n 'Invalid SJIS character: ' + this.data[i] + '\\n' +\n 'Make sure your charset is UTF-8')\n }\n\n // Multiply most significant byte of result by 0xC0\n // and add least significant byte to product\n value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n // Convert result to a 13-bit binary string\n bitBuffer.put(value, 13)\n }\n}\n\nmodule.exports = KanjiData\n", "'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin \n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n single_source_shortest_paths: function(graph, s, d) {\n // Predecessor map for each node that has been encountered.\n // node ID => predecessor node ID\n var predecessors = {};\n\n // Costs of shortest paths from s to all nodes encountered.\n // node ID => cost\n var costs = {};\n costs[s] = 0;\n\n // Costs of shortest paths from s to all nodes encountered; differs from\n // `costs` in that it provides easy access to the node that currently has\n // the known shortest path from s.\n // XXX: Do we actually need both `costs` and `open`?\n var open = dijkstra.PriorityQueue.make();\n open.push(s, 0);\n\n var closest,\n u, v,\n cost_of_s_to_u,\n adjacent_nodes,\n cost_of_e,\n cost_of_s_to_u_plus_cost_of_e,\n cost_of_s_to_v,\n first_visit;\n while (!open.empty()) {\n // In the nodes remaining in graph that have a known cost from s,\n // find the node, u, that currently has the shortest path from s.\n closest = open.pop();\n u = closest.value;\n cost_of_s_to_u = closest.cost;\n\n // Get nodes adjacent to u...\n adjacent_nodes = graph[u] || {};\n\n // ...and explore the edges that connect u to those nodes, updating\n // the cost of the shortest paths to any or all of those nodes as\n // necessary. v is the node across the current edge from u.\n for (v in adjacent_nodes) {\n if (adjacent_nodes.hasOwnProperty(v)) {\n // Get the cost of the edge running from u to v.\n cost_of_e = adjacent_nodes[v];\n\n // Cost of s to u plus the cost of u to v across e--this is *a*\n // cost from s to v that may or may not be less than the current\n // known cost to v.\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n // If we haven't visited v yet OR if the current known cost from s to\n // v is greater than the new cost we just found (cost of s to u plus\n // cost of u to v across e), update v's cost in the cost list and\n // update v's predecessor in the predecessor list (it's now u).\n cost_of_s_to_v = costs[v];\n first_visit = (typeof costs[v] === 'undefined');\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\n predecessors[v] = u;\n }\n }\n }\n }\n\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n throw new Error(msg);\n }\n\n return predecessors;\n },\n\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n var nodes = [];\n var u = d;\n var predecessor;\n while (u) {\n nodes.push(u);\n predecessor = predecessors[u];\n u = predecessors[u];\n }\n nodes.reverse();\n return nodes;\n },\n\n find_path: function(graph, s, d) {\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n return dijkstra.extract_shortest_path_from_predecessor_list(\n predecessors, d);\n },\n\n /**\n * A very naive priority queue implementation.\n */\n PriorityQueue: {\n make: function (opts) {\n var T = dijkstra.PriorityQueue,\n t = {},\n key;\n opts = opts || {};\n for (key in T) {\n if (T.hasOwnProperty(key)) {\n t[key] = T[key];\n }\n }\n t.queue = [];\n t.sorter = opts.sorter || T.default_sorter;\n return t;\n },\n\n default_sorter: function (a, b) {\n return a.cost - b.cost;\n },\n\n /**\n * Add a new item to the queue and ensure the highest priority element\n * is at the front of the queue.\n */\n push: function (value, cost) {\n var item = {value: value, cost: cost};\n this.queue.push(item);\n this.queue.sort(this.sorter);\n },\n\n /**\n * Return the highest priority element in the queue.\n */\n pop: function () {\n return this.queue.shift();\n },\n\n empty: function () {\n return this.queue.length === 0;\n }\n }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n module.exports = dijkstra;\n}\n", "const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param {String} str Input string\n * @return {Number} Number of byte\n */\nfunction getStringByteLength (str) {\n return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param {Mode} mode Segment mode\n * @param {String} str String to process\n * @return {Array} Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n const segments = []\n let result\n\n while ((result = regex.exec(str)) !== null) {\n segments.push({\n data: result[0],\n index: result.index,\n mode: mode,\n length: result[0].length\n })\n }\n\n return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param {String} dataStr Input string\n * @return {Array} Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n let byteSegs\n let kanjiSegs\n\n if (Utils.isKanjiModeEnabled()) {\n byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n } else {\n byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n kanjiSegs = []\n }\n\n const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n return segs\n .sort(function (s1, s2) {\n return s1.index - s2.index\n })\n .map(function (obj) {\n return {\n data: obj.data,\n mode: obj.mode,\n length: obj.length\n }\n })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param {Number} length String length\n * @param {Mode} mode Segment mode\n * @return {Number} Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n switch (mode) {\n case Mode.NUMERIC:\n return NumericData.getBitsLength(length)\n case Mode.ALPHANUMERIC:\n return AlphanumericData.getBitsLength(length)\n case Mode.KANJI:\n return KanjiData.getBitsLength(length)\n case Mode.BYTE:\n return ByteData.getBitsLength(length)\n }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction mergeSegments (segs) {\n return segs.reduce(function (acc, curr) {\n const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n if (prevSeg && prevSeg.mode === curr.mode) {\n acc[acc.length - 1].data += curr.data\n return acc\n }\n\n acc.push(curr)\n return acc\n }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction buildNodes (segs) {\n const nodes = []\n for (let i = 0; i < segs.length; i++) {\n const seg = segs[i]\n\n switch (seg.mode) {\n case Mode.NUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.ALPHANUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.KANJI:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n break\n case Mode.BYTE:\n nodes.push([\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n }\n }\n\n return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param {Array} nodes Array of object with segments data\n * @param {Number} version QR Code version\n * @return {Object} Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n const table = {}\n const graph = { start: {} }\n let prevNodeIds = ['start']\n\n for (let i = 0; i < nodes.length; i++) {\n const nodeGroup = nodes[i]\n const currentNodeIds = []\n\n for (let j = 0; j < nodeGroup.length; j++) {\n const node = nodeGroup[j]\n const key = '' + i + j\n\n currentNodeIds.push(key)\n table[key] = { node: node, lastCount: 0 }\n graph[key] = {}\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n const prevNodeId = prevNodeIds[n]\n\n if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n graph[prevNodeId][key] =\n getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n table[prevNodeId].lastCount += node.length\n } else {\n if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n 4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n }\n }\n }\n\n prevNodeIds = currentNodeIds\n }\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n graph[prevNodeIds[n]].end = 0\n }\n\n return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param {String} data Input data\n * @param {Mode | String} modesHint Data mode\n * @return {Segment} Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n let mode\n const bestMode = Mode.getBestModeForData(data)\n\n mode = Mode.from(modesHint, bestMode)\n\n // Make sure data can be encoded\n if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n throw new Error('\"' + data + '\"' +\n ' cannot be encoded with mode ' + Mode.toString(mode) +\n '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n }\n\n // Use Mode.BYTE if Kanji support is disabled\n if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n mode = Mode.BYTE\n }\n\n switch (mode) {\n case Mode.NUMERIC:\n return new NumericData(data)\n\n case Mode.ALPHANUMERIC:\n return new AlphanumericData(data)\n\n case Mode.KANJI:\n return new KanjiData(data)\n\n case Mode.BYTE:\n return new ByteData(data)\n }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param {Array} array Array of objects with segments data\n * @return {Array} Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n return array.reduce(function (acc, seg) {\n if (typeof seg === 'string') {\n acc.push(buildSingleSegment(seg, null))\n } else if (seg.data) {\n acc.push(buildSingleSegment(seg.data, seg.mode))\n }\n\n return acc\n }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @return {Array} Array of segments\n */\nexports.fromString = function fromString (data, version) {\n const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n const nodes = buildNodes(segs)\n const graph = buildGraph(nodes, version)\n const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n const optimizedSegs = []\n for (let i = 1; i < path.length - 1; i++) {\n optimizedSegs.push(graph.table[path[i]].node)\n }\n\n return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param {string} data Input string\n * @return {Array} Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n return exports.fromArray(\n getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n )\n}\n", "const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n const size = matrix.size\n const pos = FinderPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -1; r <= 7; r++) {\n if (row + r <= -1 || size <= row + r) continue\n\n for (let c = -1; c <= 7; c++) {\n if (col + c <= -1 || size <= col + c) continue\n\n if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n const size = matrix.size\n\n for (let r = 8; r < size - 8; r++) {\n const value = r % 2 === 0\n matrix.set(r, 6, value, true)\n matrix.set(6, r, value, true)\n }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n const pos = AlignmentPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n if (r === -2 || r === 2 || c === -2 || c === 2 ||\n (r === 0 && c === 0)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n const size = matrix.size\n const bits = Version.getEncodedBits(version)\n let row, col, mod\n\n for (let i = 0; i < 18; i++) {\n row = Math.floor(i / 3)\n col = i % 3 + size - 8 - 3\n mod = ((bits >> i) & 1) === 1\n\n matrix.set(row, col, mod, true)\n matrix.set(col, row, mod, true)\n }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {Number} maskPattern Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n const size = matrix.size\n const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n let i, mod\n\n for (i = 0; i < 15; i++) {\n mod = ((bits >> i) & 1) === 1\n\n // vertical\n if (i < 6) {\n matrix.set(i, 8, mod, true)\n } else if (i < 8) {\n matrix.set(i + 1, 8, mod, true)\n } else {\n matrix.set(size - 15 + i, 8, mod, true)\n }\n\n // horizontal\n if (i < 8) {\n matrix.set(8, size - i - 1, mod, true)\n } else if (i < 9) {\n matrix.set(8, 15 - i - 1 + 1, mod, true)\n } else {\n matrix.set(8, 15 - i - 1, mod, true)\n }\n }\n\n // fixed module\n matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Uint8Array} data Data codewords\n */\nfunction setupData (matrix, data) {\n const size = matrix.size\n let inc = -1\n let row = size - 1\n let bitIndex = 7\n let byteIndex = 0\n\n for (let col = size - 1; col > 0; col -= 2) {\n if (col === 6) col--\n\n while (true) {\n for (let c = 0; c < 2; c++) {\n if (!matrix.isReserved(row, col - c)) {\n let dark = false\n\n if (byteIndex < data.length) {\n dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n }\n\n matrix.set(row, col - c, dark)\n bitIndex--\n\n if (bitIndex === -1) {\n byteIndex++\n bitIndex = 7\n }\n }\n }\n\n row += inc\n\n if (row < 0 || size <= row) {\n row -= inc\n inc = -inc\n break\n }\n }\n }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {ByteData} data Data input\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n // Prepare data buffer\n const buffer = new BitBuffer()\n\n segments.forEach(function (data) {\n // prefix data with mode indicator (4 bits)\n buffer.put(data.mode.bit, 4)\n\n // Prefix data with character count indicator.\n // The character count indicator is a string of bits that represents the\n // number of characters that are being encoded.\n // The character count indicator must be placed after the mode indicator\n // and must be a certain number of bits long, depending on the QR version\n // and data mode\n // @see {@link Mode.getCharCountIndicator}.\n buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n // add binary data sequence to buffer\n data.write(buffer)\n })\n\n // Calculate required number of bits\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n // Add a terminator.\n // If the bit string is shorter than the total number of required bits,\n // a terminator of up to four 0s must be added to the right side of the string.\n // If the bit string is more than four bits shorter than the required number of bits,\n // add four 0s to the end.\n if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n buffer.put(0, 4)\n }\n\n // If the bit string is fewer than four bits shorter, add only the number of 0s that\n // are needed to reach the required number of bits.\n\n // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n // pad the string on the right with 0s to make the string's length a multiple of 8.\n while (buffer.getLengthInBits() % 8 !== 0) {\n buffer.putBit(0)\n }\n\n // Add pad bytes if the string is still shorter than the total number of required bits.\n // Extend the buffer to fill the data capacity of the symbol corresponding to\n // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n // and 00010001 (0x11) alternately.\n const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n for (let i = 0; i < remainingByte; i++) {\n buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n }\n\n return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param {BitBuffer} bitBuffer Data to encode\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n // Total number of blocks\n const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n // Calculate how many blocks each group should contain\n const blocksInGroup2 = totalCodewords % ecTotalBlocks\n const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n // Number of EC codewords is the same for both groups\n const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n const rs = new ReedSolomonEncoder(ecCount)\n\n let offset = 0\n const dcData = new Array(ecTotalBlocks)\n const ecData = new Array(ecTotalBlocks)\n let maxDataSize = 0\n const buffer = new Uint8Array(bitBuffer.buffer)\n\n // Divide the buffer into the required number of blocks\n for (let b = 0; b < ecTotalBlocks; b++) {\n const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n // extract a block of data from buffer\n dcData[b] = buffer.slice(offset, offset + dataSize)\n\n // Calculate EC codewords for this data block\n ecData[b] = rs.encode(dcData[b])\n\n offset += dataSize\n maxDataSize = Math.max(maxDataSize, dataSize)\n }\n\n // Create final data\n // Interleave the data and error correction codewords from each block\n const data = new Uint8Array(totalCodewords)\n let index = 0\n let i, r\n\n // Add data codewords\n for (i = 0; i < maxDataSize; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n if (i < dcData[r].length) {\n data[index++] = dcData[r][i]\n }\n }\n }\n\n // Apped EC codewords\n for (i = 0; i < ecCount; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n data[index++] = ecData[r][i]\n }\n }\n\n return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @param {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param {MaskPattern} maskPattern Mask pattern\n * @return {Object} Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n let segments\n\n if (Array.isArray(data)) {\n segments = Segments.fromArray(data)\n } else if (typeof data === 'string') {\n let estimatedVersion = version\n\n if (!estimatedVersion) {\n const rawSegments = Segments.rawSplit(data)\n\n // Estimate best version that can contain raw splitted segments\n estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n }\n\n // Build optimized segments\n // If estimated version is undefined, try with the highest version\n segments = Segments.fromString(data, estimatedVersion || 40)\n } else {\n throw new Error('Invalid data')\n }\n\n // Get the min version that can contain data\n const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n // If no version is found, data cannot be stored\n if (!bestVersion) {\n throw new Error('The amount of data is too big to be stored in a QR Code')\n }\n\n // If not specified, use min version as default\n if (!version) {\n version = bestVersion\n\n // Check if the specified version can contain the data\n } else if (version < bestVersion) {\n throw new Error('\\n' +\n 'The chosen QR Code version cannot contain this amount of data.\\n' +\n 'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n )\n }\n\n const dataBits = createData(version, errorCorrectionLevel, segments)\n\n // Allocate matrix buffer\n const moduleCount = Utils.getSymbolSize(version)\n const modules = new BitMatrix(moduleCount)\n\n // Add function modules\n setupFinderPattern(modules, version)\n setupTimingPattern(modules)\n setupAlignmentPattern(modules, version)\n\n // Add temporary dummy bits for format info just to set them as reserved.\n // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n // since the masking operation must be performed only on the encoding region.\n // These blocks will be replaced with correct values later in code.\n setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n if (version >= 7) {\n setupVersionInfo(modules, version)\n }\n\n // Add data codewords\n setupData(modules, dataBits)\n\n if (isNaN(maskPattern)) {\n // Find best mask pattern\n maskPattern = MaskPattern.getBestMask(modules,\n setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n }\n\n // Apply mask pattern\n MaskPattern.applyMask(maskPattern, modules)\n\n // Replace format info bits with correct values\n setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n return {\n modules: modules,\n version: version,\n errorCorrectionLevel: errorCorrectionLevel,\n maskPattern: maskPattern,\n segments: segments\n }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data Input data\n * @param {Object} options Optional configurations\n * @param {Number} options.version QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n if (typeof data === 'undefined' || data === '') {\n throw new Error('No input text')\n }\n\n let errorCorrectionLevel = ECLevel.M\n let version\n let mask\n\n if (typeof options !== 'undefined') {\n // Use higher error correction level as default\n errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n version = Version.from(options.version)\n mask = MaskPattern.from(options.maskPattern)\n\n if (options.toSJISFunc) {\n Utils.setToSJISFunction(options.toSJISFunc)\n }\n }\n\n return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n", "function hex2rgba (hex) {\n if (typeof hex === 'number') {\n hex = hex.toString()\n }\n\n if (typeof hex !== 'string') {\n throw new Error('Color should be defined as hex string')\n }\n\n let hexCode = hex.slice().replace('#', '').split('')\n if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n throw new Error('Invalid hex color: ' + hex)\n }\n\n // Convert from short to long form (fff -> ffffff)\n if (hexCode.length === 3 || hexCode.length === 4) {\n hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n return [c, c]\n }))\n }\n\n // Add default alpha value\n if (hexCode.length === 6) hexCode.push('F', 'F')\n\n const hexValue = parseInt(hexCode.join(''), 16)\n\n return {\n r: (hexValue >> 24) & 255,\n g: (hexValue >> 16) & 255,\n b: (hexValue >> 8) & 255,\n a: hexValue & 255,\n hex: '#' + hexCode.slice(0, 6).join('')\n }\n}\n\nexports.getOptions = function getOptions (options) {\n if (!options) options = {}\n if (!options.color) options.color = {}\n\n const margin = typeof options.margin === 'undefined' ||\n options.margin === null ||\n options.margin < 0\n ? 4\n : options.margin\n\n const width = options.width && options.width >= 21 ? options.width : undefined\n const scale = options.scale || 4\n\n return {\n width: width,\n scale: width ? 4 : scale,\n margin: margin,\n color: {\n dark: hex2rgba(options.color.dark || '#000000ff'),\n light: hex2rgba(options.color.light || '#ffffffff')\n },\n type: options.type,\n rendererOpts: options.rendererOpts || {}\n }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n return opts.width && opts.width >= qrSize + opts.margin * 2\n ? opts.width / (qrSize + opts.margin * 2)\n : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n const scale = exports.getScale(qrSize, opts)\n return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n const size = qr.modules.size\n const data = qr.modules.data\n const scale = exports.getScale(size, opts)\n const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n const scaledMargin = opts.margin * scale\n const palette = [opts.color.light, opts.color.dark]\n\n for (let i = 0; i < symbolSize; i++) {\n for (let j = 0; j < symbolSize; j++) {\n let posDst = (i * symbolSize + j) * 4\n let pxColor = opts.color.light\n\n if (i >= scaledMargin && j >= scaledMargin &&\n i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n const iSrc = Math.floor((i - scaledMargin) / scale)\n const jSrc = Math.floor((j - scaledMargin) / scale)\n pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n }\n\n imgData[posDst++] = pxColor.r\n imgData[posDst++] = pxColor.g\n imgData[posDst++] = pxColor.b\n imgData[posDst] = pxColor.a\n }\n }\n}\n", "const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n if (!canvas.style) canvas.style = {}\n canvas.height = size\n canvas.width = size\n canvas.style.height = size + 'px'\n canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n try {\n return document.createElement('canvas')\n } catch (e) {\n throw new Error('You need to specify a canvas element')\n }\n}\n\nexports.render = function render (qrData, canvas, options) {\n let opts = options\n let canvasEl = canvas\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!canvas) {\n canvasEl = getCanvasElement()\n }\n\n opts = Utils.getOptions(opts)\n const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n const ctx = canvasEl.getContext('2d')\n const image = ctx.createImageData(size, size)\n Utils.qrToImageData(image.data, qrData, opts)\n\n clearCanvas(ctx, canvasEl, size)\n ctx.putImageData(image, 0, 0)\n\n return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n let opts = options\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!opts) opts = {}\n\n const canvasEl = exports.render(qrData, canvas, opts)\n\n const type = opts.type || 'image/png'\n const rendererOpts = opts.rendererOpts || {}\n\n return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n", "const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n const alpha = color.a / 255\n const str = attrib + '=\"' + color.hex + '\"'\n\n return alpha < 1\n ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n : str\n}\n\nfunction svgCmd (cmd, x, y) {\n let str = cmd + x\n if (typeof y !== 'undefined') str += ' ' + y\n\n return str\n}\n\nfunction qrToPath (data, size, margin) {\n let path = ''\n let moveBy = 0\n let newRow = false\n let lineLength = 0\n\n for (let i = 0; i < data.length; i++) {\n const col = Math.floor(i % size)\n const row = Math.floor(i / size)\n\n if (!col && !newRow) newRow = true\n\n if (data[i]) {\n lineLength++\n\n if (!(i > 0 && col > 0 && data[i - 1])) {\n path += newRow\n ? svgCmd('M', col + margin, 0.5 + row + margin)\n : svgCmd('m', moveBy, 0)\n\n moveBy = 0\n newRow = false\n }\n\n if (!(col + 1 < size && data[i + 1])) {\n path += svgCmd('h', lineLength)\n lineLength = 0\n }\n } else {\n moveBy++\n }\n }\n\n return path\n}\n\nexports.render = function render (qrData, options, cb) {\n const opts = Utils.getOptions(options)\n const size = qrData.modules.size\n const data = qrData.modules.data\n const qrcodesize = size + opts.margin * 2\n\n const bg = !opts.color.light.a\n ? ''\n : ''\n\n const path =\n ''\n\n const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n const svgTag = '' + bg + path + '\\n'\n\n if (typeof cb === 'function') {\n cb(null, svgTag)\n }\n\n return svgTag\n}\n", "\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n const args = [].slice.call(arguments, 1)\n const argsNum = args.length\n const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n if (!isLastArgCb && !canPromise()) {\n throw new Error('Callback required as last argument')\n }\n\n if (isLastArgCb) {\n if (argsNum < 2) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 2) {\n cb = text\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 3) {\n if (canvas.getContext && typeof cb === 'undefined') {\n cb = opts\n opts = undefined\n } else {\n cb = opts\n opts = text\n text = canvas\n canvas = undefined\n }\n }\n } else {\n if (argsNum < 1) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 1) {\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 2 && !canvas.getContext) {\n opts = text\n text = canvas\n canvas = undefined\n }\n\n return new Promise(function (resolve, reject) {\n try {\n const data = QRCode.create(text, opts)\n resolve(renderFunc(data, canvas, opts))\n } catch (e) {\n reject(e)\n }\n })\n }\n\n try {\n const data = QRCode.create(text, opts)\n cb(null, renderFunc(data, canvas, opts))\n } catch (e) {\n cb(e)\n }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n return SvgRenderer.render(data, opts)\n})\n"], + "sourcesContent": ["// can-promise has a crash in some versions of react native that dont have\r\n// standard global objects\r\n// https://github.com/soldair/node-qrcode/issues/157\r\n\r\nmodule.exports = function () {\r\n return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\r\n}\r\n", "let toSJISFunction\r\nconst CODEWORDS_COUNT = [\r\n 0, // Not used\r\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\r\n 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\r\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\r\n 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\r\n]\r\n\r\n/**\r\n * Returns the QR Code size for the specified version\r\n *\r\n * @param {Number} version QR Code version\r\n * @return {Number} size of QR code\r\n */\r\nexports.getSymbolSize = function getSymbolSize (version) {\r\n if (!version) throw new Error('\"version\" cannot be null or undefined')\r\n if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\r\n return version * 4 + 17\r\n}\r\n\r\n/**\r\n * Returns the total number of codewords used to store data and EC information.\r\n *\r\n * @param {Number} version QR Code version\r\n * @return {Number} Data length in bits\r\n */\r\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\r\n return CODEWORDS_COUNT[version]\r\n}\r\n\r\n/**\r\n * Encode data with Bose-Chaudhuri-Hocquenghem\r\n *\r\n * @param {Number} data Value to encode\r\n * @return {Number} Encoded value\r\n */\r\nexports.getBCHDigit = function (data) {\r\n let digit = 0\r\n\r\n while (data !== 0) {\r\n digit++\r\n data >>>= 1\r\n }\r\n\r\n return digit\r\n}\r\n\r\nexports.setToSJISFunction = function setToSJISFunction (f) {\r\n if (typeof f !== 'function') {\r\n throw new Error('\"toSJISFunc\" is not a valid function.')\r\n }\r\n\r\n toSJISFunction = f\r\n}\r\n\r\nexports.isKanjiModeEnabled = function () {\r\n return typeof toSJISFunction !== 'undefined'\r\n}\r\n\r\nexports.toSJIS = function toSJIS (kanji) {\r\n return toSJISFunction(kanji)\r\n}\r\n", "exports.L = { bit: 1 }\r\nexports.M = { bit: 0 }\r\nexports.Q = { bit: 3 }\r\nexports.H = { bit: 2 }\r\n\r\nfunction fromString (string) {\r\n if (typeof string !== 'string') {\r\n throw new Error('Param is not a string')\r\n }\r\n\r\n const lcStr = string.toLowerCase()\r\n\r\n switch (lcStr) {\r\n case 'l':\r\n case 'low':\r\n return exports.L\r\n\r\n case 'm':\r\n case 'medium':\r\n return exports.M\r\n\r\n case 'q':\r\n case 'quartile':\r\n return exports.Q\r\n\r\n case 'h':\r\n case 'high':\r\n return exports.H\r\n\r\n default:\r\n throw new Error('Unknown EC Level: ' + string)\r\n }\r\n}\r\n\r\nexports.isValid = function isValid (level) {\r\n return level && typeof level.bit !== 'undefined' &&\r\n level.bit >= 0 && level.bit < 4\r\n}\r\n\r\nexports.from = function from (value, defaultValue) {\r\n if (exports.isValid(value)) {\r\n return value\r\n }\r\n\r\n try {\r\n return fromString(value)\r\n } catch (e) {\r\n return defaultValue\r\n }\r\n}\r\n", "function BitBuffer () {\r\n this.buffer = []\r\n this.length = 0\r\n}\r\n\r\nBitBuffer.prototype = {\r\n\r\n get: function (index) {\r\n const bufIndex = Math.floor(index / 8)\r\n return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\r\n },\r\n\r\n put: function (num, length) {\r\n for (let i = 0; i < length; i++) {\r\n this.putBit(((num >>> (length - i - 1)) & 1) === 1)\r\n }\r\n },\r\n\r\n getLengthInBits: function () {\r\n return this.length\r\n },\r\n\r\n putBit: function (bit) {\r\n const bufIndex = Math.floor(this.length / 8)\r\n if (this.buffer.length <= bufIndex) {\r\n this.buffer.push(0)\r\n }\r\n\r\n if (bit) {\r\n this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\r\n }\r\n\r\n this.length++\r\n }\r\n}\r\n\r\nmodule.exports = BitBuffer\r\n", "/**\r\n * Helper class to handle QR Code symbol modules\r\n *\r\n * @param {Number} size Symbol size\r\n */\r\nfunction BitMatrix (size) {\r\n if (!size || size < 1) {\r\n throw new Error('BitMatrix size must be defined and greater than 0')\r\n }\r\n\r\n this.size = size\r\n this.data = new Uint8Array(size * size)\r\n this.reservedBit = new Uint8Array(size * size)\r\n}\r\n\r\n/**\r\n * Set bit value at specified location\r\n * If reserved flag is set, this bit will be ignored during masking process\r\n *\r\n * @param {Number} row\r\n * @param {Number} col\r\n * @param {Boolean} value\r\n * @param {Boolean} reserved\r\n */\r\nBitMatrix.prototype.set = function (row, col, value, reserved) {\r\n const index = row * this.size + col\r\n this.data[index] = value\r\n if (reserved) this.reservedBit[index] = true\r\n}\r\n\r\n/**\r\n * Returns bit value at specified location\r\n *\r\n * @param {Number} row\r\n * @param {Number} col\r\n * @return {Boolean}\r\n */\r\nBitMatrix.prototype.get = function (row, col) {\r\n return this.data[row * this.size + col]\r\n}\r\n\r\n/**\r\n * Applies xor operator at specified location\r\n * (used during masking process)\r\n *\r\n * @param {Number} row\r\n * @param {Number} col\r\n * @param {Boolean} value\r\n */\r\nBitMatrix.prototype.xor = function (row, col, value) {\r\n this.data[row * this.size + col] ^= value\r\n}\r\n\r\n/**\r\n * Check if bit at specified location is reserved\r\n *\r\n * @param {Number} row\r\n * @param {Number} col\r\n * @return {Boolean}\r\n */\r\nBitMatrix.prototype.isReserved = function (row, col) {\r\n return this.reservedBit[row * this.size + col]\r\n}\r\n\r\nmodule.exports = BitMatrix\r\n", "/**\r\n * Alignment pattern are fixed reference pattern in defined positions\r\n * in a matrix symbology, which enables the decode software to re-synchronise\r\n * the coordinate mapping of the image modules in the event of moderate amounts\r\n * of distortion of the image.\r\n *\r\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\r\n * and their number depends on the symbol version.\r\n */\r\n\r\nconst getSymbolSize = require('./utils').getSymbolSize\r\n\r\n/**\r\n * Calculate the row/column coordinates of the center module of each alignment pattern\r\n * for the specified QR Code version.\r\n *\r\n * The alignment patterns are positioned symmetrically on either side of the diagonal\r\n * running from the top left corner of the symbol to the bottom right corner.\r\n *\r\n * Since positions are simmetrical only half of the coordinates are returned.\r\n * Each item of the array will represent in turn the x and y coordinate.\r\n * @see {@link getPositions}\r\n *\r\n * @param {Number} version QR Code version\r\n * @return {Array} Array of coordinate\r\n */\r\nexports.getRowColCoords = function getRowColCoords (version) {\r\n if (version === 1) return []\r\n\r\n const posCount = Math.floor(version / 7) + 2\r\n const size = getSymbolSize(version)\r\n const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\r\n const positions = [size - 7] // Last coord is always (size - 7)\r\n\r\n for (let i = 1; i < posCount - 1; i++) {\r\n positions[i] = positions[i - 1] - intervals\r\n }\r\n\r\n positions.push(6) // First coord is always 6\r\n\r\n return positions.reverse()\r\n}\r\n\r\n/**\r\n * Returns an array containing the positions of each alignment pattern.\r\n * Each array's element represent the center point of the pattern as (x, y) coordinates\r\n *\r\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\r\n * and filtering out the items that overlaps with finder pattern\r\n *\r\n * @example\r\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\r\n * The alignment patterns, therefore, are to be centered on (row, column)\r\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\r\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\r\n * and are not therefore used for alignment patterns.\r\n *\r\n * let pos = getPositions(7)\r\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\r\n *\r\n * @param {Number} version QR Code version\r\n * @return {Array} Array of coordinates\r\n */\r\nexports.getPositions = function getPositions (version) {\r\n const coords = []\r\n const pos = exports.getRowColCoords(version)\r\n const posLength = pos.length\r\n\r\n for (let i = 0; i < posLength; i++) {\r\n for (let j = 0; j < posLength; j++) {\r\n // Skip if position is occupied by finder patterns\r\n if ((i === 0 && j === 0) || // top-left\r\n (i === 0 && j === posLength - 1) || // bottom-left\r\n (i === posLength - 1 && j === 0)) { // top-right\r\n continue\r\n }\r\n\r\n coords.push([pos[i], pos[j]])\r\n }\r\n }\r\n\r\n return coords\r\n}\r\n", "const getSymbolSize = require('./utils').getSymbolSize\r\nconst FINDER_PATTERN_SIZE = 7\r\n\r\n/**\r\n * Returns an array containing the positions of each finder pattern.\r\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\r\n *\r\n * @param {Number} version QR Code version\r\n * @return {Array} Array of coordinates\r\n */\r\nexports.getPositions = function getPositions (version) {\r\n const size = getSymbolSize(version)\r\n\r\n return [\r\n // top-left\r\n [0, 0],\r\n // top-right\r\n [size - FINDER_PATTERN_SIZE, 0],\r\n // bottom-left\r\n [0, size - FINDER_PATTERN_SIZE]\r\n ]\r\n}\r\n", "/**\r\n * Data mask pattern reference\r\n * @type {Object}\r\n */\r\nexports.Patterns = {\r\n PATTERN000: 0,\r\n PATTERN001: 1,\r\n PATTERN010: 2,\r\n PATTERN011: 3,\r\n PATTERN100: 4,\r\n PATTERN101: 5,\r\n PATTERN110: 6,\r\n PATTERN111: 7\r\n}\r\n\r\n/**\r\n * Weighted penalty scores for the undesirable features\r\n * @type {Object}\r\n */\r\nconst PenaltyScores = {\r\n N1: 3,\r\n N2: 3,\r\n N3: 40,\r\n N4: 10\r\n}\r\n\r\n/**\r\n * Check if mask pattern value is valid\r\n *\r\n * @param {Number} mask Mask pattern\r\n * @return {Boolean} true if valid, false otherwise\r\n */\r\nexports.isValid = function isValid (mask) {\r\n return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\r\n}\r\n\r\n/**\r\n * Returns mask pattern from a value.\r\n * If value is not valid, returns undefined\r\n *\r\n * @param {Number|String} value Mask pattern value\r\n * @return {Number} Valid mask pattern or undefined\r\n */\r\nexports.from = function from (value) {\r\n return exports.isValid(value) ? parseInt(value, 10) : undefined\r\n}\r\n\r\n/**\r\n* Find adjacent modules in row/column with the same color\r\n* and assign a penalty value.\r\n*\r\n* Points: N1 + i\r\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\r\n*/\r\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\r\n const size = data.size\r\n let points = 0\r\n let sameCountCol = 0\r\n let sameCountRow = 0\r\n let lastCol = null\r\n let lastRow = null\r\n\r\n for (let row = 0; row < size; row++) {\r\n sameCountCol = sameCountRow = 0\r\n lastCol = lastRow = null\r\n\r\n for (let col = 0; col < size; col++) {\r\n let module = data.get(row, col)\r\n if (module === lastCol) {\r\n sameCountCol++\r\n } else {\r\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\r\n lastCol = module\r\n sameCountCol = 1\r\n }\r\n\r\n module = data.get(col, row)\r\n if (module === lastRow) {\r\n sameCountRow++\r\n } else {\r\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\r\n lastRow = module\r\n sameCountRow = 1\r\n }\r\n }\r\n\r\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\r\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\r\n }\r\n\r\n return points\r\n}\r\n\r\n/**\r\n * Find 2x2 blocks with the same color and assign a penalty value\r\n *\r\n * Points: N2 * (m - 1) * (n - 1)\r\n */\r\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\r\n const size = data.size\r\n let points = 0\r\n\r\n for (let row = 0; row < size - 1; row++) {\r\n for (let col = 0; col < size - 1; col++) {\r\n const last = data.get(row, col) +\r\n data.get(row, col + 1) +\r\n data.get(row + 1, col) +\r\n data.get(row + 1, col + 1)\r\n\r\n if (last === 4 || last === 0) points++\r\n }\r\n }\r\n\r\n return points * PenaltyScores.N2\r\n}\r\n\r\n/**\r\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\r\n * preceded or followed by light area 4 modules wide\r\n *\r\n * Points: N3 * number of pattern found\r\n */\r\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\r\n const size = data.size\r\n let points = 0\r\n let bitsCol = 0\r\n let bitsRow = 0\r\n\r\n for (let row = 0; row < size; row++) {\r\n bitsCol = bitsRow = 0\r\n for (let col = 0; col < size; col++) {\r\n bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\r\n if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\r\n\r\n bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\r\n if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\r\n }\r\n }\r\n\r\n return points * PenaltyScores.N3\r\n}\r\n\r\n/**\r\n * Calculate proportion of dark modules in entire symbol\r\n *\r\n * Points: N4 * k\r\n *\r\n * k is the rating of the deviation of the proportion of dark modules\r\n * in the symbol from 50% in steps of 5%\r\n */\r\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\r\n let darkCount = 0\r\n const modulesCount = data.data.length\r\n\r\n for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\r\n\r\n const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\r\n\r\n return k * PenaltyScores.N4\r\n}\r\n\r\n/**\r\n * Return mask value at given position\r\n *\r\n * @param {Number} maskPattern Pattern reference value\r\n * @param {Number} i Row\r\n * @param {Number} j Column\r\n * @return {Boolean} Mask value\r\n */\r\nfunction getMaskAt (maskPattern, i, j) {\r\n switch (maskPattern) {\r\n case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\r\n case exports.Patterns.PATTERN001: return i % 2 === 0\r\n case exports.Patterns.PATTERN010: return j % 3 === 0\r\n case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\r\n case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\r\n case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\r\n case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\r\n case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\r\n\r\n default: throw new Error('bad maskPattern:' + maskPattern)\r\n }\r\n}\r\n\r\n/**\r\n * Apply a mask pattern to a BitMatrix\r\n *\r\n * @param {Number} pattern Pattern reference number\r\n * @param {BitMatrix} data BitMatrix data\r\n */\r\nexports.applyMask = function applyMask (pattern, data) {\r\n const size = data.size\r\n\r\n for (let col = 0; col < size; col++) {\r\n for (let row = 0; row < size; row++) {\r\n if (data.isReserved(row, col)) continue\r\n data.xor(row, col, getMaskAt(pattern, row, col))\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Returns the best mask pattern for data\r\n *\r\n * @param {BitMatrix} data\r\n * @return {Number} Mask pattern reference number\r\n */\r\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\r\n const numPatterns = Object.keys(exports.Patterns).length\r\n let bestPattern = 0\r\n let lowerPenalty = Infinity\r\n\r\n for (let p = 0; p < numPatterns; p++) {\r\n setupFormatFunc(p)\r\n exports.applyMask(p, data)\r\n\r\n // Calculate penalty\r\n const penalty =\r\n exports.getPenaltyN1(data) +\r\n exports.getPenaltyN2(data) +\r\n exports.getPenaltyN3(data) +\r\n exports.getPenaltyN4(data)\r\n\r\n // Undo previously applied mask\r\n exports.applyMask(p, data)\r\n\r\n if (penalty < lowerPenalty) {\r\n lowerPenalty = penalty\r\n bestPattern = p\r\n }\r\n }\r\n\r\n return bestPattern\r\n}\r\n", "const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L M Q H\r\n 1, 1, 1, 1,\r\n 1, 1, 1, 1,\r\n 1, 1, 2, 2,\r\n 1, 2, 2, 4,\r\n 1, 2, 4, 4,\r\n 2, 4, 4, 4,\r\n 2, 4, 6, 5,\r\n 2, 4, 6, 6,\r\n 2, 5, 8, 8,\r\n 4, 5, 8, 8,\r\n 4, 5, 8, 11,\r\n 4, 8, 10, 11,\r\n 4, 9, 12, 16,\r\n 4, 9, 16, 16,\r\n 6, 10, 12, 18,\r\n 6, 10, 17, 16,\r\n 6, 11, 16, 19,\r\n 6, 13, 18, 21,\r\n 7, 14, 21, 25,\r\n 8, 16, 20, 25,\r\n 8, 17, 23, 25,\r\n 9, 17, 23, 34,\r\n 9, 18, 25, 30,\r\n 10, 20, 27, 32,\r\n 12, 21, 29, 35,\r\n 12, 23, 34, 37,\r\n 12, 25, 34, 40,\r\n 13, 26, 35, 42,\r\n 14, 28, 38, 45,\r\n 15, 29, 40, 48,\r\n 16, 31, 43, 51,\r\n 17, 33, 45, 54,\r\n 18, 35, 48, 57,\r\n 19, 37, 51, 60,\r\n 19, 38, 53, 63,\r\n 20, 40, 56, 66,\r\n 21, 43, 59, 70,\r\n 22, 45, 62, 74,\r\n 24, 47, 65, 77,\r\n 25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L M Q H\r\n 7, 10, 13, 17,\r\n 10, 16, 22, 28,\r\n 15, 26, 36, 44,\r\n 20, 36, 52, 64,\r\n 26, 48, 72, 88,\r\n 36, 64, 96, 112,\r\n 40, 72, 108, 130,\r\n 48, 88, 132, 156,\r\n 60, 110, 160, 192,\r\n 72, 130, 192, 224,\r\n 80, 150, 224, 264,\r\n 96, 176, 260, 308,\r\n 104, 198, 288, 352,\r\n 120, 216, 320, 384,\r\n 132, 240, 360, 432,\r\n 144, 280, 408, 480,\r\n 168, 308, 448, 532,\r\n 180, 338, 504, 588,\r\n 196, 364, 546, 650,\r\n 224, 416, 600, 700,\r\n 224, 442, 644, 750,\r\n 252, 476, 690, 816,\r\n 270, 504, 750, 900,\r\n 300, 560, 810, 960,\r\n 312, 588, 870, 1050,\r\n 336, 644, 952, 1110,\r\n 360, 700, 1020, 1200,\r\n 390, 728, 1050, 1260,\r\n 420, 784, 1140, 1350,\r\n 450, 812, 1200, 1440,\r\n 480, 868, 1290, 1530,\r\n 510, 924, 1350, 1620,\r\n 540, 980, 1440, 1710,\r\n 570, 1036, 1530, 1800,\r\n 570, 1064, 1590, 1890,\r\n 600, 1120, 1680, 1980,\r\n 630, 1204, 1770, 2100,\r\n 660, 1260, 1860, 2220,\r\n 720, 1316, 1950, 2310,\r\n 750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n", "const EXP_TABLE = new Uint8Array(512)\r\nconst LOG_TABLE = new Uint8Array(256)\r\n/**\r\n * Precompute the log and anti-log tables for faster computation later\r\n *\r\n * For each possible value in the galois field 2^8, we will pre-compute\r\n * the logarithm and anti-logarithm (exponential) of this value\r\n *\r\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\r\n */\r\n;(function initTables () {\r\n let x = 1\r\n for (let i = 0; i < 255; i++) {\r\n EXP_TABLE[i] = x\r\n LOG_TABLE[x] = i\r\n\r\n x <<= 1 // multiply by 2\r\n\r\n // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\r\n // This means that when a number is 256 or larger, it should be XORed with 0x11D.\r\n if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\r\n x ^= 0x11D\r\n }\r\n }\r\n\r\n // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\r\n // stay inside the bounds (because we will mainly use this table for the multiplication of\r\n // two GF numbers, no more).\r\n // @see {@link mul}\r\n for (let i = 255; i < 512; i++) {\r\n EXP_TABLE[i] = EXP_TABLE[i - 255]\r\n }\r\n}())\r\n\r\n/**\r\n * Returns log value of n inside Galois Field\r\n *\r\n * @param {Number} n\r\n * @return {Number}\r\n */\r\nexports.log = function log (n) {\r\n if (n < 1) throw new Error('log(' + n + ')')\r\n return LOG_TABLE[n]\r\n}\r\n\r\n/**\r\n * Returns anti-log value of n inside Galois Field\r\n *\r\n * @param {Number} n\r\n * @return {Number}\r\n */\r\nexports.exp = function exp (n) {\r\n return EXP_TABLE[n]\r\n}\r\n\r\n/**\r\n * Multiplies two number inside Galois Field\r\n *\r\n * @param {Number} x\r\n * @param {Number} y\r\n * @return {Number}\r\n */\r\nexports.mul = function mul (x, y) {\r\n if (x === 0 || y === 0) return 0\r\n\r\n // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\r\n // @see {@link initTables}\r\n return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\r\n}\r\n", "const GF = require('./galois-field')\r\n\r\n/**\r\n * Multiplies two polynomials inside Galois Field\r\n *\r\n * @param {Uint8Array} p1 Polynomial\r\n * @param {Uint8Array} p2 Polynomial\r\n * @return {Uint8Array} Product of p1 and p2\r\n */\r\nexports.mul = function mul (p1, p2) {\r\n const coeff = new Uint8Array(p1.length + p2.length - 1)\r\n\r\n for (let i = 0; i < p1.length; i++) {\r\n for (let j = 0; j < p2.length; j++) {\r\n coeff[i + j] ^= GF.mul(p1[i], p2[j])\r\n }\r\n }\r\n\r\n return coeff\r\n}\r\n\r\n/**\r\n * Calculate the remainder of polynomials division\r\n *\r\n * @param {Uint8Array} divident Polynomial\r\n * @param {Uint8Array} divisor Polynomial\r\n * @return {Uint8Array} Remainder\r\n */\r\nexports.mod = function mod (divident, divisor) {\r\n let result = new Uint8Array(divident)\r\n\r\n while ((result.length - divisor.length) >= 0) {\r\n const coeff = result[0]\r\n\r\n for (let i = 0; i < divisor.length; i++) {\r\n result[i] ^= GF.mul(divisor[i], coeff)\r\n }\r\n\r\n // remove all zeros from buffer head\r\n let offset = 0\r\n while (offset < result.length && result[offset] === 0) offset++\r\n result = result.slice(offset)\r\n }\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * Generate an irreducible generator polynomial of specified degree\r\n * (used by Reed-Solomon encoder)\r\n *\r\n * @param {Number} degree Degree of the generator polynomial\r\n * @return {Uint8Array} Buffer containing polynomial coefficients\r\n */\r\nexports.generateECPolynomial = function generateECPolynomial (degree) {\r\n let poly = new Uint8Array([1])\r\n for (let i = 0; i < degree; i++) {\r\n poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\r\n }\r\n\r\n return poly\r\n}\r\n", "const Polynomial = require('./polynomial')\r\n\r\nfunction ReedSolomonEncoder (degree) {\r\n this.genPoly = undefined\r\n this.degree = degree\r\n\r\n if (this.degree) this.initialize(this.degree)\r\n}\r\n\r\n/**\r\n * Initialize the encoder.\r\n * The input param should correspond to the number of error correction codewords.\r\n *\r\n * @param {Number} degree\r\n */\r\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\r\n // create an irreducible generator polynomial\r\n this.degree = degree\r\n this.genPoly = Polynomial.generateECPolynomial(this.degree)\r\n}\r\n\r\n/**\r\n * Encodes a chunk of data\r\n *\r\n * @param {Uint8Array} data Buffer containing input data\r\n * @return {Uint8Array} Buffer containing encoded data\r\n */\r\nReedSolomonEncoder.prototype.encode = function encode (data) {\r\n if (!this.genPoly) {\r\n throw new Error('Encoder not initialized')\r\n }\r\n\r\n // Calculate EC for this data block\r\n // extends data size to data+genPoly size\r\n const paddedData = new Uint8Array(data.length + this.degree)\r\n paddedData.set(data)\r\n\r\n // The error correction codewords are the remainder after dividing the data codewords\r\n // by a generator polynomial\r\n const remainder = Polynomial.mod(paddedData, this.genPoly)\r\n\r\n // return EC data blocks (last n byte, where n is the degree of genPoly)\r\n // If coefficients number in remainder are less than genPoly degree,\r\n // pad with 0s to the left to reach the needed number of coefficients\r\n const start = this.degree - remainder.length\r\n if (start > 0) {\r\n const buff = new Uint8Array(this.degree)\r\n buff.set(remainder, start)\r\n\r\n return buff\r\n }\r\n\r\n return remainder\r\n}\r\n\r\nmodule.exports = ReedSolomonEncoder\r\n", "/**\r\n * Check if QR Code version is valid\r\n *\r\n * @param {Number} version QR Code version\r\n * @return {Boolean} true if valid version, false otherwise\r\n */\r\nexports.isValid = function isValid (version) {\r\n return !isNaN(version) && version >= 1 && version <= 40\r\n}\r\n", "const numeric = '[0-9]+'\r\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\r\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\r\n '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\r\n '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\r\n '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\r\nkanji = kanji.replace(/u/g, '\\\\u')\r\n\r\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\r\n\r\nexports.KANJI = new RegExp(kanji, 'g')\r\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\r\nexports.BYTE = new RegExp(byte, 'g')\r\nexports.NUMERIC = new RegExp(numeric, 'g')\r\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\r\n\r\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\r\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\r\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\r\n\r\nexports.testKanji = function testKanji (str) {\r\n return TEST_KANJI.test(str)\r\n}\r\n\r\nexports.testNumeric = function testNumeric (str) {\r\n return TEST_NUMERIC.test(str)\r\n}\r\n\r\nexports.testAlphanumeric = function testAlphanumeric (str) {\r\n return TEST_ALPHANUMERIC.test(str)\r\n}\r\n", "const VersionCheck = require('./version-check')\r\nconst Regex = require('./regex')\r\n\r\n/**\r\n * Numeric mode encodes data from the decimal digit set (0 - 9)\r\n * (byte values 30HEX to 39HEX).\r\n * Normally, 3 data characters are represented by 10 bits.\r\n *\r\n * @type {Object}\r\n */\r\nexports.NUMERIC = {\r\n id: 'Numeric',\r\n bit: 1 << 0,\r\n ccBits: [10, 12, 14]\r\n}\r\n\r\n/**\r\n * Alphanumeric mode encodes data from a set of 45 characters,\r\n * i.e. 10 numeric digits (0 - 9),\r\n * 26 alphabetic characters (A - Z),\r\n * and 9 symbols (SP, $, %, *, +, -, ., /, :).\r\n * Normally, two input characters are represented by 11 bits.\r\n *\r\n * @type {Object}\r\n */\r\nexports.ALPHANUMERIC = {\r\n id: 'Alphanumeric',\r\n bit: 1 << 1,\r\n ccBits: [9, 11, 13]\r\n}\r\n\r\n/**\r\n * In byte mode, data is encoded at 8 bits per character.\r\n *\r\n * @type {Object}\r\n */\r\nexports.BYTE = {\r\n id: 'Byte',\r\n bit: 1 << 2,\r\n ccBits: [8, 16, 16]\r\n}\r\n\r\n/**\r\n * The Kanji mode efficiently encodes Kanji characters in accordance with\r\n * the Shift JIS system based on JIS X 0208.\r\n * The Shift JIS values are shifted from the JIS X 0208 values.\r\n * JIS X 0208 gives details of the shift coded representation.\r\n * Each two-byte character value is compacted to a 13-bit binary codeword.\r\n *\r\n * @type {Object}\r\n */\r\nexports.KANJI = {\r\n id: 'Kanji',\r\n bit: 1 << 3,\r\n ccBits: [8, 10, 12]\r\n}\r\n\r\n/**\r\n * Mixed mode will contain a sequences of data in a combination of any of\r\n * the modes described above\r\n *\r\n * @type {Object}\r\n */\r\nexports.MIXED = {\r\n bit: -1\r\n}\r\n\r\n/**\r\n * Returns the number of bits needed to store the data length\r\n * according to QR Code specifications.\r\n *\r\n * @param {Mode} mode Data mode\r\n * @param {Number} version QR Code version\r\n * @return {Number} Number of bits\r\n */\r\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\r\n if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\r\n\r\n if (!VersionCheck.isValid(version)) {\r\n throw new Error('Invalid version: ' + version)\r\n }\r\n\r\n if (version >= 1 && version < 10) return mode.ccBits[0]\r\n else if (version < 27) return mode.ccBits[1]\r\n return mode.ccBits[2]\r\n}\r\n\r\n/**\r\n * Returns the most efficient mode to store the specified data\r\n *\r\n * @param {String} dataStr Input data string\r\n * @return {Mode} Best mode\r\n */\r\nexports.getBestModeForData = function getBestModeForData (dataStr) {\r\n if (Regex.testNumeric(dataStr)) return exports.NUMERIC\r\n else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\r\n else if (Regex.testKanji(dataStr)) return exports.KANJI\r\n else return exports.BYTE\r\n}\r\n\r\n/**\r\n * Return mode name as string\r\n *\r\n * @param {Mode} mode Mode object\r\n * @returns {String} Mode name\r\n */\r\nexports.toString = function toString (mode) {\r\n if (mode && mode.id) return mode.id\r\n throw new Error('Invalid mode')\r\n}\r\n\r\n/**\r\n * Check if input param is a valid mode object\r\n *\r\n * @param {Mode} mode Mode object\r\n * @returns {Boolean} True if valid mode, false otherwise\r\n */\r\nexports.isValid = function isValid (mode) {\r\n return mode && mode.bit && mode.ccBits\r\n}\r\n\r\n/**\r\n * Get mode object from its name\r\n *\r\n * @param {String} string Mode name\r\n * @returns {Mode} Mode object\r\n */\r\nfunction fromString (string) {\r\n if (typeof string !== 'string') {\r\n throw new Error('Param is not a string')\r\n }\r\n\r\n const lcStr = string.toLowerCase()\r\n\r\n switch (lcStr) {\r\n case 'numeric':\r\n return exports.NUMERIC\r\n case 'alphanumeric':\r\n return exports.ALPHANUMERIC\r\n case 'kanji':\r\n return exports.KANJI\r\n case 'byte':\r\n return exports.BYTE\r\n default:\r\n throw new Error('Unknown mode: ' + string)\r\n }\r\n}\r\n\r\n/**\r\n * Returns mode from a value.\r\n * If value is not a valid mode, returns defaultValue\r\n *\r\n * @param {Mode|String} value Encoding mode\r\n * @param {Mode} defaultValue Fallback value\r\n * @return {Mode} Encoding mode\r\n */\r\nexports.from = function from (value, defaultValue) {\r\n if (exports.isValid(value)) {\r\n return value\r\n }\r\n\r\n try {\r\n return fromString(value)\r\n } catch (e) {\r\n return defaultValue\r\n }\r\n}\r\n", "const Utils = require('./utils')\r\nconst ECCode = require('./error-correction-code')\r\nconst ECLevel = require('./error-correction-level')\r\nconst Mode = require('./mode')\r\nconst VersionCheck = require('./version-check')\r\n\r\n// Generator polynomial used to encode version information\r\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\r\nconst G18_BCH = Utils.getBCHDigit(G18)\r\n\r\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\r\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\r\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\r\n return currentVersion\r\n }\r\n }\r\n\r\n return undefined\r\n}\r\n\r\nfunction getReservedBitsCount (mode, version) {\r\n // Character count indicator + mode indicator bits\r\n return Mode.getCharCountIndicator(mode, version) + 4\r\n}\r\n\r\nfunction getTotalBitsFromDataArray (segments, version) {\r\n let totalBits = 0\r\n\r\n segments.forEach(function (data) {\r\n const reservedBits = getReservedBitsCount(data.mode, version)\r\n totalBits += reservedBits + data.getBitsLength()\r\n })\r\n\r\n return totalBits\r\n}\r\n\r\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\r\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\r\n const length = getTotalBitsFromDataArray(segments, currentVersion)\r\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\r\n return currentVersion\r\n }\r\n }\r\n\r\n return undefined\r\n}\r\n\r\n/**\r\n * Returns version number from a value.\r\n * If value is not a valid version, returns defaultValue\r\n *\r\n * @param {Number|String} value QR Code version\r\n * @param {Number} defaultValue Fallback value\r\n * @return {Number} QR Code version number\r\n */\r\nexports.from = function from (value, defaultValue) {\r\n if (VersionCheck.isValid(value)) {\r\n return parseInt(value, 10)\r\n }\r\n\r\n return defaultValue\r\n}\r\n\r\n/**\r\n * Returns how much data can be stored with the specified QR code version\r\n * and error correction level\r\n *\r\n * @param {Number} version QR Code version (1-40)\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @param {Mode} mode Data mode\r\n * @return {Number} Quantity of storable data\r\n */\r\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\r\n if (!VersionCheck.isValid(version)) {\r\n throw new Error('Invalid QR Code version')\r\n }\r\n\r\n // Use Byte mode as default\r\n if (typeof mode === 'undefined') mode = Mode.BYTE\r\n\r\n // Total codewords for this QR code version (Data + Error correction)\r\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\r\n\r\n // Total number of error correction codewords\r\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\r\n\r\n // Total number of data codewords\r\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\r\n\r\n if (mode === Mode.MIXED) return dataTotalCodewordsBits\r\n\r\n const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\r\n\r\n // Return max number of storable codewords\r\n switch (mode) {\r\n case Mode.NUMERIC:\r\n return Math.floor((usableBits / 10) * 3)\r\n\r\n case Mode.ALPHANUMERIC:\r\n return Math.floor((usableBits / 11) * 2)\r\n\r\n case Mode.KANJI:\r\n return Math.floor(usableBits / 13)\r\n\r\n case Mode.BYTE:\r\n default:\r\n return Math.floor(usableBits / 8)\r\n }\r\n}\r\n\r\n/**\r\n * Returns the minimum version needed to contain the amount of data\r\n *\r\n * @param {Segment} data Segment of data\r\n * @param {Number} [errorCorrectionLevel=H] Error correction level\r\n * @param {Mode} mode Data mode\r\n * @return {Number} QR Code version\r\n */\r\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\r\n let seg\r\n\r\n const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\r\n\r\n if (Array.isArray(data)) {\r\n if (data.length > 1) {\r\n return getBestVersionForMixedData(data, ecl)\r\n }\r\n\r\n if (data.length === 0) {\r\n return 1\r\n }\r\n\r\n seg = data[0]\r\n } else {\r\n seg = data\r\n }\r\n\r\n return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\r\n}\r\n\r\n/**\r\n * Returns version information with relative error correction bits\r\n *\r\n * The version information is included in QR Code symbols of version 7 or larger.\r\n * It consists of an 18-bit sequence containing 6 data bits,\r\n * with 12 error correction bits calculated using the (18, 6) Golay code.\r\n *\r\n * @param {Number} version QR Code version\r\n * @return {Number} Encoded version info bits\r\n */\r\nexports.getEncodedBits = function getEncodedBits (version) {\r\n if (!VersionCheck.isValid(version) || version < 7) {\r\n throw new Error('Invalid QR Code version')\r\n }\r\n\r\n let d = version << 12\r\n\r\n while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\r\n d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\r\n }\r\n\r\n return (version << 12) | d\r\n}\r\n", "const Utils = require('./utils')\r\n\r\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\r\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\r\nconst G15_BCH = Utils.getBCHDigit(G15)\r\n\r\n/**\r\n * Returns format information with relative error correction bits\r\n *\r\n * The format information is a 15-bit sequence containing 5 data bits,\r\n * with 10 error correction bits calculated using the (15, 5) BCH code.\r\n *\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @param {Number} mask Mask pattern\r\n * @return {Number} Encoded format information bits\r\n */\r\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\r\n const data = ((errorCorrectionLevel.bit << 3) | mask)\r\n let d = data << 10\r\n\r\n while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\r\n d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\r\n }\r\n\r\n // xor final data with mask pattern in order to ensure that\r\n // no combination of Error Correction Level and data mask pattern\r\n // will result in an all-zero data string\r\n return ((data << 10) | d) ^ G15_MASK\r\n}\r\n", "const Mode = require('./mode')\r\n\r\nfunction NumericData (data) {\r\n this.mode = Mode.NUMERIC\r\n this.data = data.toString()\r\n}\r\n\r\nNumericData.getBitsLength = function getBitsLength (length) {\r\n return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\r\n}\r\n\r\nNumericData.prototype.getLength = function getLength () {\r\n return this.data.length\r\n}\r\n\r\nNumericData.prototype.getBitsLength = function getBitsLength () {\r\n return NumericData.getBitsLength(this.data.length)\r\n}\r\n\r\nNumericData.prototype.write = function write (bitBuffer) {\r\n let i, group, value\r\n\r\n // The input data string is divided into groups of three digits,\r\n // and each group is converted to its 10-bit binary equivalent.\r\n for (i = 0; i + 3 <= this.data.length; i += 3) {\r\n group = this.data.substr(i, 3)\r\n value = parseInt(group, 10)\r\n\r\n bitBuffer.put(value, 10)\r\n }\r\n\r\n // If the number of input digits is not an exact multiple of three,\r\n // the final one or two digits are converted to 4 or 7 bits respectively.\r\n const remainingNum = this.data.length - i\r\n if (remainingNum > 0) {\r\n group = this.data.substr(i)\r\n value = parseInt(group, 10)\r\n\r\n bitBuffer.put(value, remainingNum * 3 + 1)\r\n }\r\n}\r\n\r\nmodule.exports = NumericData\r\n", "const Mode = require('./mode')\r\n\r\n/**\r\n * Array of characters available in alphanumeric mode\r\n *\r\n * As per QR Code specification, to each character\r\n * is assigned a value from 0 to 44 which in this case coincides\r\n * with the array index\r\n *\r\n * @type {Array}\r\n */\r\nconst ALPHA_NUM_CHARS = [\r\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\r\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\r\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\r\n ' ', '$', '%', '*', '+', '-', '.', '/', ':'\r\n]\r\n\r\nfunction AlphanumericData (data) {\r\n this.mode = Mode.ALPHANUMERIC\r\n this.data = data\r\n}\r\n\r\nAlphanumericData.getBitsLength = function getBitsLength (length) {\r\n return 11 * Math.floor(length / 2) + 6 * (length % 2)\r\n}\r\n\r\nAlphanumericData.prototype.getLength = function getLength () {\r\n return this.data.length\r\n}\r\n\r\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\r\n return AlphanumericData.getBitsLength(this.data.length)\r\n}\r\n\r\nAlphanumericData.prototype.write = function write (bitBuffer) {\r\n let i\r\n\r\n // Input data characters are divided into groups of two characters\r\n // and encoded as 11-bit binary codes.\r\n for (i = 0; i + 2 <= this.data.length; i += 2) {\r\n // The character value of the first character is multiplied by 45\r\n let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\r\n\r\n // The character value of the second digit is added to the product\r\n value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\r\n\r\n // The sum is then stored as 11-bit binary number\r\n bitBuffer.put(value, 11)\r\n }\r\n\r\n // If the number of input data characters is not a multiple of two,\r\n // the character value of the final character is encoded as a 6-bit binary number.\r\n if (this.data.length % 2) {\r\n bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\r\n }\r\n}\r\n\r\nmodule.exports = AlphanumericData\r\n", "const Mode = require('./mode')\r\n\r\nfunction ByteData (data) {\r\n this.mode = Mode.BYTE\r\n if (typeof (data) === 'string') {\r\n this.data = new TextEncoder().encode(data)\r\n } else {\r\n this.data = new Uint8Array(data)\r\n }\r\n}\r\n\r\nByteData.getBitsLength = function getBitsLength (length) {\r\n return length * 8\r\n}\r\n\r\nByteData.prototype.getLength = function getLength () {\r\n return this.data.length\r\n}\r\n\r\nByteData.prototype.getBitsLength = function getBitsLength () {\r\n return ByteData.getBitsLength(this.data.length)\r\n}\r\n\r\nByteData.prototype.write = function (bitBuffer) {\r\n for (let i = 0, l = this.data.length; i < l; i++) {\r\n bitBuffer.put(this.data[i], 8)\r\n }\r\n}\r\n\r\nmodule.exports = ByteData\r\n", "const Mode = require('./mode')\r\nconst Utils = require('./utils')\r\n\r\nfunction KanjiData (data) {\r\n this.mode = Mode.KANJI\r\n this.data = data\r\n}\r\n\r\nKanjiData.getBitsLength = function getBitsLength (length) {\r\n return length * 13\r\n}\r\n\r\nKanjiData.prototype.getLength = function getLength () {\r\n return this.data.length\r\n}\r\n\r\nKanjiData.prototype.getBitsLength = function getBitsLength () {\r\n return KanjiData.getBitsLength(this.data.length)\r\n}\r\n\r\nKanjiData.prototype.write = function (bitBuffer) {\r\n let i\r\n\r\n // In the Shift JIS system, Kanji characters are represented by a two byte combination.\r\n // These byte values are shifted from the JIS X 0208 values.\r\n // JIS X 0208 gives details of the shift coded representation.\r\n for (i = 0; i < this.data.length; i++) {\r\n let value = Utils.toSJIS(this.data[i])\r\n\r\n // For characters with Shift JIS values from 0x8140 to 0x9FFC:\r\n if (value >= 0x8140 && value <= 0x9FFC) {\r\n // Subtract 0x8140 from Shift JIS value\r\n value -= 0x8140\r\n\r\n // For characters with Shift JIS values from 0xE040 to 0xEBBF\r\n } else if (value >= 0xE040 && value <= 0xEBBF) {\r\n // Subtract 0xC140 from Shift JIS value\r\n value -= 0xC140\r\n } else {\r\n throw new Error(\r\n 'Invalid SJIS character: ' + this.data[i] + '\\n' +\r\n 'Make sure your charset is UTF-8')\r\n }\r\n\r\n // Multiply most significant byte of result by 0xC0\r\n // and add least significant byte to product\r\n value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\r\n\r\n // Convert result to a 13-bit binary string\r\n bitBuffer.put(value, 13)\r\n }\r\n}\r\n\r\nmodule.exports = KanjiData\r\n", "'use strict';\r\n\r\n/******************************************************************************\r\n * Created 2008-08-19.\r\n *\r\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\r\n *\r\n * Copyright (C) 2008\r\n * Wyatt Baldwin \r\n * All rights reserved\r\n *\r\n * Licensed under the MIT license.\r\n *\r\n * http://www.opensource.org/licenses/mit-license.php\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n * THE SOFTWARE.\r\n *****************************************************************************/\r\nvar dijkstra = {\r\n single_source_shortest_paths: function(graph, s, d) {\r\n // Predecessor map for each node that has been encountered.\r\n // node ID => predecessor node ID\r\n var predecessors = {};\r\n\r\n // Costs of shortest paths from s to all nodes encountered.\r\n // node ID => cost\r\n var costs = {};\r\n costs[s] = 0;\r\n\r\n // Costs of shortest paths from s to all nodes encountered; differs from\r\n // `costs` in that it provides easy access to the node that currently has\r\n // the known shortest path from s.\r\n // XXX: Do we actually need both `costs` and `open`?\r\n var open = dijkstra.PriorityQueue.make();\r\n open.push(s, 0);\r\n\r\n var closest,\r\n u, v,\r\n cost_of_s_to_u,\r\n adjacent_nodes,\r\n cost_of_e,\r\n cost_of_s_to_u_plus_cost_of_e,\r\n cost_of_s_to_v,\r\n first_visit;\r\n while (!open.empty()) {\r\n // In the nodes remaining in graph that have a known cost from s,\r\n // find the node, u, that currently has the shortest path from s.\r\n closest = open.pop();\r\n u = closest.value;\r\n cost_of_s_to_u = closest.cost;\r\n\r\n // Get nodes adjacent to u...\r\n adjacent_nodes = graph[u] || {};\r\n\r\n // ...and explore the edges that connect u to those nodes, updating\r\n // the cost of the shortest paths to any or all of those nodes as\r\n // necessary. v is the node across the current edge from u.\r\n for (v in adjacent_nodes) {\r\n if (adjacent_nodes.hasOwnProperty(v)) {\r\n // Get the cost of the edge running from u to v.\r\n cost_of_e = adjacent_nodes[v];\r\n\r\n // Cost of s to u plus the cost of u to v across e--this is *a*\r\n // cost from s to v that may or may not be less than the current\r\n // known cost to v.\r\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\r\n\r\n // If we haven't visited v yet OR if the current known cost from s to\r\n // v is greater than the new cost we just found (cost of s to u plus\r\n // cost of u to v across e), update v's cost in the cost list and\r\n // update v's predecessor in the predecessor list (it's now u).\r\n cost_of_s_to_v = costs[v];\r\n first_visit = (typeof costs[v] === 'undefined');\r\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\r\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\r\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\r\n predecessors[v] = u;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\r\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\r\n throw new Error(msg);\r\n }\r\n\r\n return predecessors;\r\n },\r\n\r\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\r\n var nodes = [];\r\n var u = d;\r\n var predecessor;\r\n while (u) {\r\n nodes.push(u);\r\n predecessor = predecessors[u];\r\n u = predecessors[u];\r\n }\r\n nodes.reverse();\r\n return nodes;\r\n },\r\n\r\n find_path: function(graph, s, d) {\r\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\r\n return dijkstra.extract_shortest_path_from_predecessor_list(\r\n predecessors, d);\r\n },\r\n\r\n /**\r\n * A very naive priority queue implementation.\r\n */\r\n PriorityQueue: {\r\n make: function (opts) {\r\n var T = dijkstra.PriorityQueue,\r\n t = {},\r\n key;\r\n opts = opts || {};\r\n for (key in T) {\r\n if (T.hasOwnProperty(key)) {\r\n t[key] = T[key];\r\n }\r\n }\r\n t.queue = [];\r\n t.sorter = opts.sorter || T.default_sorter;\r\n return t;\r\n },\r\n\r\n default_sorter: function (a, b) {\r\n return a.cost - b.cost;\r\n },\r\n\r\n /**\r\n * Add a new item to the queue and ensure the highest priority element\r\n * is at the front of the queue.\r\n */\r\n push: function (value, cost) {\r\n var item = {value: value, cost: cost};\r\n this.queue.push(item);\r\n this.queue.sort(this.sorter);\r\n },\r\n\r\n /**\r\n * Return the highest priority element in the queue.\r\n */\r\n pop: function () {\r\n return this.queue.shift();\r\n },\r\n\r\n empty: function () {\r\n return this.queue.length === 0;\r\n }\r\n }\r\n};\r\n\r\n\r\n// node.js module exports\r\nif (typeof module !== 'undefined') {\r\n module.exports = dijkstra;\r\n}\r\n", "const Mode = require('./mode')\r\nconst NumericData = require('./numeric-data')\r\nconst AlphanumericData = require('./alphanumeric-data')\r\nconst ByteData = require('./byte-data')\r\nconst KanjiData = require('./kanji-data')\r\nconst Regex = require('./regex')\r\nconst Utils = require('./utils')\r\nconst dijkstra = require('dijkstrajs')\r\n\r\n/**\r\n * Returns UTF8 byte length\r\n *\r\n * @param {String} str Input string\r\n * @return {Number} Number of byte\r\n */\r\nfunction getStringByteLength (str) {\r\n return unescape(encodeURIComponent(str)).length\r\n}\r\n\r\n/**\r\n * Get a list of segments of the specified mode\r\n * from a string\r\n *\r\n * @param {Mode} mode Segment mode\r\n * @param {String} str String to process\r\n * @return {Array} Array of object with segments data\r\n */\r\nfunction getSegments (regex, mode, str) {\r\n const segments = []\r\n let result\r\n\r\n while ((result = regex.exec(str)) !== null) {\r\n segments.push({\r\n data: result[0],\r\n index: result.index,\r\n mode: mode,\r\n length: result[0].length\r\n })\r\n }\r\n\r\n return segments\r\n}\r\n\r\n/**\r\n * Extracts a series of segments with the appropriate\r\n * modes from a string\r\n *\r\n * @param {String} dataStr Input string\r\n * @return {Array} Array of object with segments data\r\n */\r\nfunction getSegmentsFromString (dataStr) {\r\n const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\r\n const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\r\n let byteSegs\r\n let kanjiSegs\r\n\r\n if (Utils.isKanjiModeEnabled()) {\r\n byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\r\n kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\r\n } else {\r\n byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\r\n kanjiSegs = []\r\n }\r\n\r\n const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\r\n\r\n return segs\r\n .sort(function (s1, s2) {\r\n return s1.index - s2.index\r\n })\r\n .map(function (obj) {\r\n return {\r\n data: obj.data,\r\n mode: obj.mode,\r\n length: obj.length\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Returns how many bits are needed to encode a string of\r\n * specified length with the specified mode\r\n *\r\n * @param {Number} length String length\r\n * @param {Mode} mode Segment mode\r\n * @return {Number} Bit length\r\n */\r\nfunction getSegmentBitsLength (length, mode) {\r\n switch (mode) {\r\n case Mode.NUMERIC:\r\n return NumericData.getBitsLength(length)\r\n case Mode.ALPHANUMERIC:\r\n return AlphanumericData.getBitsLength(length)\r\n case Mode.KANJI:\r\n return KanjiData.getBitsLength(length)\r\n case Mode.BYTE:\r\n return ByteData.getBitsLength(length)\r\n }\r\n}\r\n\r\n/**\r\n * Merges adjacent segments which have the same mode\r\n *\r\n * @param {Array} segs Array of object with segments data\r\n * @return {Array} Array of object with segments data\r\n */\r\nfunction mergeSegments (segs) {\r\n return segs.reduce(function (acc, curr) {\r\n const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\r\n if (prevSeg && prevSeg.mode === curr.mode) {\r\n acc[acc.length - 1].data += curr.data\r\n return acc\r\n }\r\n\r\n acc.push(curr)\r\n return acc\r\n }, [])\r\n}\r\n\r\n/**\r\n * Generates a list of all possible nodes combination which\r\n * will be used to build a segments graph.\r\n *\r\n * Nodes are divided by groups. Each group will contain a list of all the modes\r\n * in which is possible to encode the given text.\r\n *\r\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\r\n * The group for '12345' will contain then 3 objects, one for each\r\n * possible encoding mode.\r\n *\r\n * Each node represents a possible segment.\r\n *\r\n * @param {Array} segs Array of object with segments data\r\n * @return {Array} Array of object with segments data\r\n */\r\nfunction buildNodes (segs) {\r\n const nodes = []\r\n for (let i = 0; i < segs.length; i++) {\r\n const seg = segs[i]\r\n\r\n switch (seg.mode) {\r\n case Mode.NUMERIC:\r\n nodes.push([seg,\r\n { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\r\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\r\n ])\r\n break\r\n case Mode.ALPHANUMERIC:\r\n nodes.push([seg,\r\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\r\n ])\r\n break\r\n case Mode.KANJI:\r\n nodes.push([seg,\r\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\r\n ])\r\n break\r\n case Mode.BYTE:\r\n nodes.push([\r\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\r\n ])\r\n }\r\n }\r\n\r\n return nodes\r\n}\r\n\r\n/**\r\n * Builds a graph from a list of nodes.\r\n * All segments in each node group will be connected with all the segments of\r\n * the next group and so on.\r\n *\r\n * At each connection will be assigned a weight depending on the\r\n * segment's byte length.\r\n *\r\n * @param {Array} nodes Array of object with segments data\r\n * @param {Number} version QR Code version\r\n * @return {Object} Graph of all possible segments\r\n */\r\nfunction buildGraph (nodes, version) {\r\n const table = {}\r\n const graph = { start: {} }\r\n let prevNodeIds = ['start']\r\n\r\n for (let i = 0; i < nodes.length; i++) {\r\n const nodeGroup = nodes[i]\r\n const currentNodeIds = []\r\n\r\n for (let j = 0; j < nodeGroup.length; j++) {\r\n const node = nodeGroup[j]\r\n const key = '' + i + j\r\n\r\n currentNodeIds.push(key)\r\n table[key] = { node: node, lastCount: 0 }\r\n graph[key] = {}\r\n\r\n for (let n = 0; n < prevNodeIds.length; n++) {\r\n const prevNodeId = prevNodeIds[n]\r\n\r\n if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\r\n graph[prevNodeId][key] =\r\n getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\r\n getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\r\n\r\n table[prevNodeId].lastCount += node.length\r\n } else {\r\n if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\r\n\r\n graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\r\n 4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\r\n }\r\n }\r\n }\r\n\r\n prevNodeIds = currentNodeIds\r\n }\r\n\r\n for (let n = 0; n < prevNodeIds.length; n++) {\r\n graph[prevNodeIds[n]].end = 0\r\n }\r\n\r\n return { map: graph, table: table }\r\n}\r\n\r\n/**\r\n * Builds a segment from a specified data and mode.\r\n * If a mode is not specified, the more suitable will be used.\r\n *\r\n * @param {String} data Input data\r\n * @param {Mode | String} modesHint Data mode\r\n * @return {Segment} Segment\r\n */\r\nfunction buildSingleSegment (data, modesHint) {\r\n let mode\r\n const bestMode = Mode.getBestModeForData(data)\r\n\r\n mode = Mode.from(modesHint, bestMode)\r\n\r\n // Make sure data can be encoded\r\n if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\r\n throw new Error('\"' + data + '\"' +\r\n ' cannot be encoded with mode ' + Mode.toString(mode) +\r\n '.\\n Suggested mode is: ' + Mode.toString(bestMode))\r\n }\r\n\r\n // Use Mode.BYTE if Kanji support is disabled\r\n if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\r\n mode = Mode.BYTE\r\n }\r\n\r\n switch (mode) {\r\n case Mode.NUMERIC:\r\n return new NumericData(data)\r\n\r\n case Mode.ALPHANUMERIC:\r\n return new AlphanumericData(data)\r\n\r\n case Mode.KANJI:\r\n return new KanjiData(data)\r\n\r\n case Mode.BYTE:\r\n return new ByteData(data)\r\n }\r\n}\r\n\r\n/**\r\n * Builds a list of segments from an array.\r\n * Array can contain Strings or Objects with segment's info.\r\n *\r\n * For each item which is a string, will be generated a segment with the given\r\n * string and the more appropriate encoding mode.\r\n *\r\n * For each item which is an object, will be generated a segment with the given\r\n * data and mode.\r\n * Objects must contain at least the property \"data\".\r\n * If property \"mode\" is not present, the more suitable mode will be used.\r\n *\r\n * @param {Array} array Array of objects with segments data\r\n * @return {Array} Array of Segments\r\n */\r\nexports.fromArray = function fromArray (array) {\r\n return array.reduce(function (acc, seg) {\r\n if (typeof seg === 'string') {\r\n acc.push(buildSingleSegment(seg, null))\r\n } else if (seg.data) {\r\n acc.push(buildSingleSegment(seg.data, seg.mode))\r\n }\r\n\r\n return acc\r\n }, [])\r\n}\r\n\r\n/**\r\n * Builds an optimized sequence of segments from a string,\r\n * which will produce the shortest possible bitstream.\r\n *\r\n * @param {String} data Input string\r\n * @param {Number} version QR Code version\r\n * @return {Array} Array of segments\r\n */\r\nexports.fromString = function fromString (data, version) {\r\n const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\r\n\r\n const nodes = buildNodes(segs)\r\n const graph = buildGraph(nodes, version)\r\n const path = dijkstra.find_path(graph.map, 'start', 'end')\r\n\r\n const optimizedSegs = []\r\n for (let i = 1; i < path.length - 1; i++) {\r\n optimizedSegs.push(graph.table[path[i]].node)\r\n }\r\n\r\n return exports.fromArray(mergeSegments(optimizedSegs))\r\n}\r\n\r\n/**\r\n * Splits a string in various segments with the modes which\r\n * best represent their content.\r\n * The produced segments are far from being optimized.\r\n * The output of this function is only used to estimate a QR Code version\r\n * which may contain the data.\r\n *\r\n * @param {string} data Input string\r\n * @return {Array} Array of segments\r\n */\r\nexports.rawSplit = function rawSplit (data) {\r\n return exports.fromArray(\r\n getSegmentsFromString(data, Utils.isKanjiModeEnabled())\r\n )\r\n}\r\n", "const Utils = require('./utils')\r\nconst ECLevel = require('./error-correction-level')\r\nconst BitBuffer = require('./bit-buffer')\r\nconst BitMatrix = require('./bit-matrix')\r\nconst AlignmentPattern = require('./alignment-pattern')\r\nconst FinderPattern = require('./finder-pattern')\r\nconst MaskPattern = require('./mask-pattern')\r\nconst ECCode = require('./error-correction-code')\r\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\r\nconst Version = require('./version')\r\nconst FormatInfo = require('./format-info')\r\nconst Mode = require('./mode')\r\nconst Segments = require('./segments')\r\n\r\n/**\r\n * QRCode for JavaScript\r\n *\r\n * modified by Ryan Day for nodejs support\r\n * Copyright (c) 2011 Ryan Day\r\n *\r\n * Licensed under the MIT license:\r\n * http://www.opensource.org/licenses/mit-license.php\r\n *\r\n//---------------------------------------------------------------------\r\n// QRCode for JavaScript\r\n//\r\n// Copyright (c) 2009 Kazuhiko Arase\r\n//\r\n// URL: http://www.d-project.com/\r\n//\r\n// Licensed under the MIT license:\r\n// http://www.opensource.org/licenses/mit-license.php\r\n//\r\n// The word \"QR Code\" is registered trademark of\r\n// DENSO WAVE INCORPORATED\r\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\r\n//\r\n//---------------------------------------------------------------------\r\n*/\r\n\r\n/**\r\n * Add finder patterns bits to matrix\r\n *\r\n * @param {BitMatrix} matrix Modules matrix\r\n * @param {Number} version QR Code version\r\n */\r\nfunction setupFinderPattern (matrix, version) {\r\n const size = matrix.size\r\n const pos = FinderPattern.getPositions(version)\r\n\r\n for (let i = 0; i < pos.length; i++) {\r\n const row = pos[i][0]\r\n const col = pos[i][1]\r\n\r\n for (let r = -1; r <= 7; r++) {\r\n if (row + r <= -1 || size <= row + r) continue\r\n\r\n for (let c = -1; c <= 7; c++) {\r\n if (col + c <= -1 || size <= col + c) continue\r\n\r\n if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\r\n (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\r\n (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\r\n matrix.set(row + r, col + c, true, true)\r\n } else {\r\n matrix.set(row + r, col + c, false, true)\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Add timing pattern bits to matrix\r\n *\r\n * Note: this function must be called before {@link setupAlignmentPattern}\r\n *\r\n * @param {BitMatrix} matrix Modules matrix\r\n */\r\nfunction setupTimingPattern (matrix) {\r\n const size = matrix.size\r\n\r\n for (let r = 8; r < size - 8; r++) {\r\n const value = r % 2 === 0\r\n matrix.set(r, 6, value, true)\r\n matrix.set(6, r, value, true)\r\n }\r\n}\r\n\r\n/**\r\n * Add alignment patterns bits to matrix\r\n *\r\n * Note: this function must be called after {@link setupTimingPattern}\r\n *\r\n * @param {BitMatrix} matrix Modules matrix\r\n * @param {Number} version QR Code version\r\n */\r\nfunction setupAlignmentPattern (matrix, version) {\r\n const pos = AlignmentPattern.getPositions(version)\r\n\r\n for (let i = 0; i < pos.length; i++) {\r\n const row = pos[i][0]\r\n const col = pos[i][1]\r\n\r\n for (let r = -2; r <= 2; r++) {\r\n for (let c = -2; c <= 2; c++) {\r\n if (r === -2 || r === 2 || c === -2 || c === 2 ||\r\n (r === 0 && c === 0)) {\r\n matrix.set(row + r, col + c, true, true)\r\n } else {\r\n matrix.set(row + r, col + c, false, true)\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Add version info bits to matrix\r\n *\r\n * @param {BitMatrix} matrix Modules matrix\r\n * @param {Number} version QR Code version\r\n */\r\nfunction setupVersionInfo (matrix, version) {\r\n const size = matrix.size\r\n const bits = Version.getEncodedBits(version)\r\n let row, col, mod\r\n\r\n for (let i = 0; i < 18; i++) {\r\n row = Math.floor(i / 3)\r\n col = i % 3 + size - 8 - 3\r\n mod = ((bits >> i) & 1) === 1\r\n\r\n matrix.set(row, col, mod, true)\r\n matrix.set(col, row, mod, true)\r\n }\r\n}\r\n\r\n/**\r\n * Add format info bits to matrix\r\n *\r\n * @param {BitMatrix} matrix Modules matrix\r\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\r\n * @param {Number} maskPattern Mask pattern reference value\r\n */\r\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\r\n const size = matrix.size\r\n const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\r\n let i, mod\r\n\r\n for (i = 0; i < 15; i++) {\r\n mod = ((bits >> i) & 1) === 1\r\n\r\n // vertical\r\n if (i < 6) {\r\n matrix.set(i, 8, mod, true)\r\n } else if (i < 8) {\r\n matrix.set(i + 1, 8, mod, true)\r\n } else {\r\n matrix.set(size - 15 + i, 8, mod, true)\r\n }\r\n\r\n // horizontal\r\n if (i < 8) {\r\n matrix.set(8, size - i - 1, mod, true)\r\n } else if (i < 9) {\r\n matrix.set(8, 15 - i - 1 + 1, mod, true)\r\n } else {\r\n matrix.set(8, 15 - i - 1, mod, true)\r\n }\r\n }\r\n\r\n // fixed module\r\n matrix.set(size - 8, 8, 1, true)\r\n}\r\n\r\n/**\r\n * Add encoded data bits to matrix\r\n *\r\n * @param {BitMatrix} matrix Modules matrix\r\n * @param {Uint8Array} data Data codewords\r\n */\r\nfunction setupData (matrix, data) {\r\n const size = matrix.size\r\n let inc = -1\r\n let row = size - 1\r\n let bitIndex = 7\r\n let byteIndex = 0\r\n\r\n for (let col = size - 1; col > 0; col -= 2) {\r\n if (col === 6) col--\r\n\r\n while (true) {\r\n for (let c = 0; c < 2; c++) {\r\n if (!matrix.isReserved(row, col - c)) {\r\n let dark = false\r\n\r\n if (byteIndex < data.length) {\r\n dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\r\n }\r\n\r\n matrix.set(row, col - c, dark)\r\n bitIndex--\r\n\r\n if (bitIndex === -1) {\r\n byteIndex++\r\n bitIndex = 7\r\n }\r\n }\r\n }\r\n\r\n row += inc\r\n\r\n if (row < 0 || size <= row) {\r\n row -= inc\r\n inc = -inc\r\n break\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Create encoded codewords from data input\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\r\n * @param {ByteData} data Data input\r\n * @return {Uint8Array} Buffer containing encoded codewords\r\n */\r\nfunction createData (version, errorCorrectionLevel, segments) {\r\n // Prepare data buffer\r\n const buffer = new BitBuffer()\r\n\r\n segments.forEach(function (data) {\r\n // prefix data with mode indicator (4 bits)\r\n buffer.put(data.mode.bit, 4)\r\n\r\n // Prefix data with character count indicator.\r\n // The character count indicator is a string of bits that represents the\r\n // number of characters that are being encoded.\r\n // The character count indicator must be placed after the mode indicator\r\n // and must be a certain number of bits long, depending on the QR version\r\n // and data mode\r\n // @see {@link Mode.getCharCountIndicator}.\r\n buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\r\n\r\n // add binary data sequence to buffer\r\n data.write(buffer)\r\n })\r\n\r\n // Calculate required number of bits\r\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\r\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\r\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\r\n\r\n // Add a terminator.\r\n // If the bit string is shorter than the total number of required bits,\r\n // a terminator of up to four 0s must be added to the right side of the string.\r\n // If the bit string is more than four bits shorter than the required number of bits,\r\n // add four 0s to the end.\r\n if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\r\n buffer.put(0, 4)\r\n }\r\n\r\n // If the bit string is fewer than four bits shorter, add only the number of 0s that\r\n // are needed to reach the required number of bits.\r\n\r\n // After adding the terminator, if the number of bits in the string is not a multiple of 8,\r\n // pad the string on the right with 0s to make the string's length a multiple of 8.\r\n while (buffer.getLengthInBits() % 8 !== 0) {\r\n buffer.putBit(0)\r\n }\r\n\r\n // Add pad bytes if the string is still shorter than the total number of required bits.\r\n // Extend the buffer to fill the data capacity of the symbol corresponding to\r\n // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\r\n // and 00010001 (0x11) alternately.\r\n const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\r\n for (let i = 0; i < remainingByte; i++) {\r\n buffer.put(i % 2 ? 0x11 : 0xEC, 8)\r\n }\r\n\r\n return createCodewords(buffer, version, errorCorrectionLevel)\r\n}\r\n\r\n/**\r\n * Encode input data with Reed-Solomon and return codewords with\r\n * relative error correction bits\r\n *\r\n * @param {BitBuffer} bitBuffer Data to encode\r\n * @param {Number} version QR Code version\r\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\r\n * @return {Uint8Array} Buffer containing encoded codewords\r\n */\r\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\r\n // Total codewords for this QR code version (Data + Error correction)\r\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\r\n\r\n // Total number of error correction codewords\r\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\r\n\r\n // Total number of data codewords\r\n const dataTotalCodewords = totalCodewords - ecTotalCodewords\r\n\r\n // Total number of blocks\r\n const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\r\n\r\n // Calculate how many blocks each group should contain\r\n const blocksInGroup2 = totalCodewords % ecTotalBlocks\r\n const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\r\n\r\n const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\r\n\r\n const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\r\n const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\r\n\r\n // Number of EC codewords is the same for both groups\r\n const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\r\n\r\n // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\r\n const rs = new ReedSolomonEncoder(ecCount)\r\n\r\n let offset = 0\r\n const dcData = new Array(ecTotalBlocks)\r\n const ecData = new Array(ecTotalBlocks)\r\n let maxDataSize = 0\r\n const buffer = new Uint8Array(bitBuffer.buffer)\r\n\r\n // Divide the buffer into the required number of blocks\r\n for (let b = 0; b < ecTotalBlocks; b++) {\r\n const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\r\n\r\n // extract a block of data from buffer\r\n dcData[b] = buffer.slice(offset, offset + dataSize)\r\n\r\n // Calculate EC codewords for this data block\r\n ecData[b] = rs.encode(dcData[b])\r\n\r\n offset += dataSize\r\n maxDataSize = Math.max(maxDataSize, dataSize)\r\n }\r\n\r\n // Create final data\r\n // Interleave the data and error correction codewords from each block\r\n const data = new Uint8Array(totalCodewords)\r\n let index = 0\r\n let i, r\r\n\r\n // Add data codewords\r\n for (i = 0; i < maxDataSize; i++) {\r\n for (r = 0; r < ecTotalBlocks; r++) {\r\n if (i < dcData[r].length) {\r\n data[index++] = dcData[r][i]\r\n }\r\n }\r\n }\r\n\r\n // Apped EC codewords\r\n for (i = 0; i < ecCount; i++) {\r\n for (r = 0; r < ecTotalBlocks; r++) {\r\n data[index++] = ecData[r][i]\r\n }\r\n }\r\n\r\n return data\r\n}\r\n\r\n/**\r\n * Build QR Code symbol\r\n *\r\n * @param {String} data Input string\r\n * @param {Number} version QR Code version\r\n * @param {ErrorCorretionLevel} errorCorrectionLevel Error level\r\n * @param {MaskPattern} maskPattern Mask pattern\r\n * @return {Object} Object containing symbol data\r\n */\r\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\r\n let segments\r\n\r\n if (Array.isArray(data)) {\r\n segments = Segments.fromArray(data)\r\n } else if (typeof data === 'string') {\r\n let estimatedVersion = version\r\n\r\n if (!estimatedVersion) {\r\n const rawSegments = Segments.rawSplit(data)\r\n\r\n // Estimate best version that can contain raw splitted segments\r\n estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\r\n }\r\n\r\n // Build optimized segments\r\n // If estimated version is undefined, try with the highest version\r\n segments = Segments.fromString(data, estimatedVersion || 40)\r\n } else {\r\n throw new Error('Invalid data')\r\n }\r\n\r\n // Get the min version that can contain data\r\n const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\r\n\r\n // If no version is found, data cannot be stored\r\n if (!bestVersion) {\r\n throw new Error('The amount of data is too big to be stored in a QR Code')\r\n }\r\n\r\n // If not specified, use min version as default\r\n if (!version) {\r\n version = bestVersion\r\n\r\n // Check if the specified version can contain the data\r\n } else if (version < bestVersion) {\r\n throw new Error('\\n' +\r\n 'The chosen QR Code version cannot contain this amount of data.\\n' +\r\n 'Minimum version required to store current data is: ' + bestVersion + '.\\n'\r\n )\r\n }\r\n\r\n const dataBits = createData(version, errorCorrectionLevel, segments)\r\n\r\n // Allocate matrix buffer\r\n const moduleCount = Utils.getSymbolSize(version)\r\n const modules = new BitMatrix(moduleCount)\r\n\r\n // Add function modules\r\n setupFinderPattern(modules, version)\r\n setupTimingPattern(modules)\r\n setupAlignmentPattern(modules, version)\r\n\r\n // Add temporary dummy bits for format info just to set them as reserved.\r\n // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\r\n // since the masking operation must be performed only on the encoding region.\r\n // These blocks will be replaced with correct values later in code.\r\n setupFormatInfo(modules, errorCorrectionLevel, 0)\r\n\r\n if (version >= 7) {\r\n setupVersionInfo(modules, version)\r\n }\r\n\r\n // Add data codewords\r\n setupData(modules, dataBits)\r\n\r\n if (isNaN(maskPattern)) {\r\n // Find best mask pattern\r\n maskPattern = MaskPattern.getBestMask(modules,\r\n setupFormatInfo.bind(null, modules, errorCorrectionLevel))\r\n }\r\n\r\n // Apply mask pattern\r\n MaskPattern.applyMask(maskPattern, modules)\r\n\r\n // Replace format info bits with correct values\r\n setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\r\n\r\n return {\r\n modules: modules,\r\n version: version,\r\n errorCorrectionLevel: errorCorrectionLevel,\r\n maskPattern: maskPattern,\r\n segments: segments\r\n }\r\n}\r\n\r\n/**\r\n * QR Code\r\n *\r\n * @param {String | Array} data Input data\r\n * @param {Object} options Optional configurations\r\n * @param {Number} options.version QR Code version\r\n * @param {String} options.errorCorrectionLevel Error correction level\r\n * @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis\r\n */\r\nexports.create = function create (data, options) {\r\n if (typeof data === 'undefined' || data === '') {\r\n throw new Error('No input text')\r\n }\r\n\r\n let errorCorrectionLevel = ECLevel.M\r\n let version\r\n let mask\r\n\r\n if (typeof options !== 'undefined') {\r\n // Use higher error correction level as default\r\n errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\r\n version = Version.from(options.version)\r\n mask = MaskPattern.from(options.maskPattern)\r\n\r\n if (options.toSJISFunc) {\r\n Utils.setToSJISFunction(options.toSJISFunc)\r\n }\r\n }\r\n\r\n return createSymbol(data, version, errorCorrectionLevel, mask)\r\n}\r\n", "function hex2rgba (hex) {\r\n if (typeof hex === 'number') {\r\n hex = hex.toString()\r\n }\r\n\r\n if (typeof hex !== 'string') {\r\n throw new Error('Color should be defined as hex string')\r\n }\r\n\r\n let hexCode = hex.slice().replace('#', '').split('')\r\n if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\r\n throw new Error('Invalid hex color: ' + hex)\r\n }\r\n\r\n // Convert from short to long form (fff -> ffffff)\r\n if (hexCode.length === 3 || hexCode.length === 4) {\r\n hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\r\n return [c, c]\r\n }))\r\n }\r\n\r\n // Add default alpha value\r\n if (hexCode.length === 6) hexCode.push('F', 'F')\r\n\r\n const hexValue = parseInt(hexCode.join(''), 16)\r\n\r\n return {\r\n r: (hexValue >> 24) & 255,\r\n g: (hexValue >> 16) & 255,\r\n b: (hexValue >> 8) & 255,\r\n a: hexValue & 255,\r\n hex: '#' + hexCode.slice(0, 6).join('')\r\n }\r\n}\r\n\r\nexports.getOptions = function getOptions (options) {\r\n if (!options) options = {}\r\n if (!options.color) options.color = {}\r\n\r\n const margin = typeof options.margin === 'undefined' ||\r\n options.margin === null ||\r\n options.margin < 0\r\n ? 4\r\n : options.margin\r\n\r\n const width = options.width && options.width >= 21 ? options.width : undefined\r\n const scale = options.scale || 4\r\n\r\n return {\r\n width: width,\r\n scale: width ? 4 : scale,\r\n margin: margin,\r\n color: {\r\n dark: hex2rgba(options.color.dark || '#000000ff'),\r\n light: hex2rgba(options.color.light || '#ffffffff')\r\n },\r\n type: options.type,\r\n rendererOpts: options.rendererOpts || {}\r\n }\r\n}\r\n\r\nexports.getScale = function getScale (qrSize, opts) {\r\n return opts.width && opts.width >= qrSize + opts.margin * 2\r\n ? opts.width / (qrSize + opts.margin * 2)\r\n : opts.scale\r\n}\r\n\r\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\r\n const scale = exports.getScale(qrSize, opts)\r\n return Math.floor((qrSize + opts.margin * 2) * scale)\r\n}\r\n\r\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\r\n const size = qr.modules.size\r\n const data = qr.modules.data\r\n const scale = exports.getScale(size, opts)\r\n const symbolSize = Math.floor((size + opts.margin * 2) * scale)\r\n const scaledMargin = opts.margin * scale\r\n const palette = [opts.color.light, opts.color.dark]\r\n\r\n for (let i = 0; i < symbolSize; i++) {\r\n for (let j = 0; j < symbolSize; j++) {\r\n let posDst = (i * symbolSize + j) * 4\r\n let pxColor = opts.color.light\r\n\r\n if (i >= scaledMargin && j >= scaledMargin &&\r\n i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\r\n const iSrc = Math.floor((i - scaledMargin) / scale)\r\n const jSrc = Math.floor((j - scaledMargin) / scale)\r\n pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\r\n }\r\n\r\n imgData[posDst++] = pxColor.r\r\n imgData[posDst++] = pxColor.g\r\n imgData[posDst++] = pxColor.b\r\n imgData[posDst] = pxColor.a\r\n }\r\n }\r\n}\r\n", "const Utils = require('./utils')\r\n\r\nfunction clearCanvas (ctx, canvas, size) {\r\n ctx.clearRect(0, 0, canvas.width, canvas.height)\r\n\r\n if (!canvas.style) canvas.style = {}\r\n canvas.height = size\r\n canvas.width = size\r\n canvas.style.height = size + 'px'\r\n canvas.style.width = size + 'px'\r\n}\r\n\r\nfunction getCanvasElement () {\r\n try {\r\n return document.createElement('canvas')\r\n } catch (e) {\r\n throw new Error('You need to specify a canvas element')\r\n }\r\n}\r\n\r\nexports.render = function render (qrData, canvas, options) {\r\n let opts = options\r\n let canvasEl = canvas\r\n\r\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\r\n opts = canvas\r\n canvas = undefined\r\n }\r\n\r\n if (!canvas) {\r\n canvasEl = getCanvasElement()\r\n }\r\n\r\n opts = Utils.getOptions(opts)\r\n const size = Utils.getImageWidth(qrData.modules.size, opts)\r\n\r\n const ctx = canvasEl.getContext('2d')\r\n const image = ctx.createImageData(size, size)\r\n Utils.qrToImageData(image.data, qrData, opts)\r\n\r\n clearCanvas(ctx, canvasEl, size)\r\n ctx.putImageData(image, 0, 0)\r\n\r\n return canvasEl\r\n}\r\n\r\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\r\n let opts = options\r\n\r\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\r\n opts = canvas\r\n canvas = undefined\r\n }\r\n\r\n if (!opts) opts = {}\r\n\r\n const canvasEl = exports.render(qrData, canvas, opts)\r\n\r\n const type = opts.type || 'image/png'\r\n const rendererOpts = opts.rendererOpts || {}\r\n\r\n return canvasEl.toDataURL(type, rendererOpts.quality)\r\n}\r\n", "const Utils = require('./utils')\r\n\r\nfunction getColorAttrib (color, attrib) {\r\n const alpha = color.a / 255\r\n const str = attrib + '=\"' + color.hex + '\"'\r\n\r\n return alpha < 1\r\n ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\r\n : str\r\n}\r\n\r\nfunction svgCmd (cmd, x, y) {\r\n let str = cmd + x\r\n if (typeof y !== 'undefined') str += ' ' + y\r\n\r\n return str\r\n}\r\n\r\nfunction qrToPath (data, size, margin) {\r\n let path = ''\r\n let moveBy = 0\r\n let newRow = false\r\n let lineLength = 0\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const col = Math.floor(i % size)\r\n const row = Math.floor(i / size)\r\n\r\n if (!col && !newRow) newRow = true\r\n\r\n if (data[i]) {\r\n lineLength++\r\n\r\n if (!(i > 0 && col > 0 && data[i - 1])) {\r\n path += newRow\r\n ? svgCmd('M', col + margin, 0.5 + row + margin)\r\n : svgCmd('m', moveBy, 0)\r\n\r\n moveBy = 0\r\n newRow = false\r\n }\r\n\r\n if (!(col + 1 < size && data[i + 1])) {\r\n path += svgCmd('h', lineLength)\r\n lineLength = 0\r\n }\r\n } else {\r\n moveBy++\r\n }\r\n }\r\n\r\n return path\r\n}\r\n\r\nexports.render = function render (qrData, options, cb) {\r\n const opts = Utils.getOptions(options)\r\n const size = qrData.modules.size\r\n const data = qrData.modules.data\r\n const qrcodesize = size + opts.margin * 2\r\n\r\n const bg = !opts.color.light.a\r\n ? ''\r\n : ''\r\n\r\n const path =\r\n ''\r\n\r\n const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\r\n\r\n const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\r\n\r\n const svgTag = '' + bg + path + '\\n'\r\n\r\n if (typeof cb === 'function') {\r\n cb(null, svgTag)\r\n }\r\n\r\n return svgTag\r\n}\r\n", "\r\nconst canPromise = require('./can-promise')\r\n\r\nconst QRCode = require('./core/qrcode')\r\nconst CanvasRenderer = require('./renderer/canvas')\r\nconst SvgRenderer = require('./renderer/svg-tag.js')\r\n\r\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\r\n const args = [].slice.call(arguments, 1)\r\n const argsNum = args.length\r\n const isLastArgCb = typeof args[argsNum - 1] === 'function'\r\n\r\n if (!isLastArgCb && !canPromise()) {\r\n throw new Error('Callback required as last argument')\r\n }\r\n\r\n if (isLastArgCb) {\r\n if (argsNum < 2) {\r\n throw new Error('Too few arguments provided')\r\n }\r\n\r\n if (argsNum === 2) {\r\n cb = text\r\n text = canvas\r\n canvas = opts = undefined\r\n } else if (argsNum === 3) {\r\n if (canvas.getContext && typeof cb === 'undefined') {\r\n cb = opts\r\n opts = undefined\r\n } else {\r\n cb = opts\r\n opts = text\r\n text = canvas\r\n canvas = undefined\r\n }\r\n }\r\n } else {\r\n if (argsNum < 1) {\r\n throw new Error('Too few arguments provided')\r\n }\r\n\r\n if (argsNum === 1) {\r\n text = canvas\r\n canvas = opts = undefined\r\n } else if (argsNum === 2 && !canvas.getContext) {\r\n opts = text\r\n text = canvas\r\n canvas = undefined\r\n }\r\n\r\n return new Promise(function (resolve, reject) {\r\n try {\r\n const data = QRCode.create(text, opts)\r\n resolve(renderFunc(data, canvas, opts))\r\n } catch (e) {\r\n reject(e)\r\n }\r\n })\r\n }\r\n\r\n try {\r\n const data = QRCode.create(text, opts)\r\n cb(null, renderFunc(data, canvas, opts))\r\n } catch (e) {\r\n cb(e)\r\n }\r\n}\r\n\r\nexports.create = QRCode.create\r\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\r\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\r\n\r\n// only svg for now.\r\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\r\n return SvgRenderer.render(data, opts)\r\n})\r\n"], "mappings": "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", "names": ["module", "require_utils"] } diff --git a/admin/node_modules/.vite/deps/vue-router.js b/admin/node_modules/.vite/deps/vue-router.js index e4c56739..d0d2f249 100644 --- a/admin/node_modules/.vite/deps/vue-router.js +++ b/admin/node_modules/.vite/deps/vue-router.js @@ -1,6 +1,6 @@ import { setupDevtoolsPlugin -} from "./chunk-YFT6OQ5R.js"; +} from "./chunk-VID4RN2V.js"; import { computed, defineComponent, @@ -19,7 +19,7 @@ import { unref, watch, watchEffect -} from "./chunk-H2732BJL.js"; +} from "./chunk-ELEEJBJQ.js"; import "./chunk-G3PMV62Z.js"; // node_modules/vue-router/dist/devtools-EWN81iOl.mjs diff --git a/admin/node_modules/.vite/deps/vue-router.js.map b/admin/node_modules/.vite/deps/vue-router.js.map index 1955f264..1a5c7071 100644 --- a/admin/node_modules/.vite/deps/vue-router.js.map +++ b/admin/node_modules/.vite/deps/vue-router.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../vue-router/dist/devtools-EWN81iOl.mjs", "../../vue-router/dist/vue-router.mjs"], - "sourcesContent": ["/*!\n * vue-router v4.6.4\n * (c) 2025 Eduardo San Martin Morote\n * @license MIT\n */\nimport { getCurrentInstance, inject, onActivated, onDeactivated, onUnmounted, watch } from \"vue\";\nimport { setupDevtoolsPlugin } from \"@vue/devtools-api\";\n\n//#region src/utils/env.ts\nconst isBrowser = typeof document !== \"undefined\";\n\n//#endregion\n//#region src/utils/index.ts\n/**\n* Identity function that returns the value as is.\n*\n* @param v - the value to return\n*\n* @internal\n*/\nconst identityFn = (v) => v;\n/**\n* Allows differentiating lazy components from functional components and vue-class-component\n* @internal\n*\n* @param component\n*/\nfunction isRouteComponent(component) {\n\treturn typeof component === \"object\" || \"displayName\" in component || \"props\" in component || \"__vccOpts\" in component;\n}\nfunction isESModule(obj) {\n\treturn obj.__esModule || obj[Symbol.toStringTag] === \"Module\" || obj.default && isRouteComponent(obj.default);\n}\nconst assign = Object.assign;\nfunction applyToParams(fn, params) {\n\tconst newParams = {};\n\tfor (const key in params) {\n\t\tconst value = params[key];\n\t\tnewParams[key] = isArray(value) ? value.map(fn) : fn(value);\n\t}\n\treturn newParams;\n}\nconst noop = () => {};\n/**\n* Typesafe alternative to Array.isArray\n* https://github.com/microsoft/TypeScript/pull/48228\n*\n* @internal\n*/\nconst isArray = Array.isArray;\nfunction mergeOptions(defaults, partialOptions) {\n\tconst options = {};\n\tfor (const key in defaults) options[key] = key in partialOptions ? partialOptions[key] : defaults[key];\n\treturn options;\n}\n\n//#endregion\n//#region src/warning.ts\nfunction warn$1(msg) {\n\tconst args = Array.from(arguments).slice(1);\n\tconsole.warn.apply(console, [\"[Vue Router warn]: \" + msg].concat(args));\n}\n\n//#endregion\n//#region src/encoding.ts\n/**\n* Encoding Rules (␣ = Space)\n* - Path: ␣ \" < > # ? { }\n* - Query: ␣ \" < > # & =\n* - Hash: ␣ \" < > `\n*\n* On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\n* defines some extra characters to be encoded. Most browsers do not encode them\n* in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\n* also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\n* plus `-._~`. This extra safety should be applied to query by patching the\n* string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\n* should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\n* into a `/` if directly typed in. The _backtick_ (`````) should also be\n* encoded everywhere because some browsers like FF encode it when directly\n* written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\n*/\nconst HASH_RE = /#/g;\nconst AMPERSAND_RE = /&/g;\nconst SLASH_RE = /\\//g;\nconst EQUAL_RE = /=/g;\nconst IM_RE = /\\?/g;\nconst PLUS_RE = /\\+/g;\n/**\n* NOTE: It's not clear to me if we should encode the + symbol in queries, it\n* seems to be less flexible than not doing so and I can't find out the legacy\n* systems requiring this for regular requests like text/html. In the standard,\n* the encoding of the plus character is only mentioned for\n* application/x-www-form-urlencoded\n* (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\n* leave the plus character as is in queries. To be more flexible, we allow the\n* plus character on the query, but it can also be manually encoded by the user.\n*\n* Resources:\n* - https://url.spec.whatwg.org/#urlencoded-parsing\n* - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\n*/\nconst ENC_BRACKET_OPEN_RE = /%5B/g;\nconst ENC_BRACKET_CLOSE_RE = /%5D/g;\nconst ENC_CARET_RE = /%5E/g;\nconst ENC_BACKTICK_RE = /%60/g;\nconst ENC_CURLY_OPEN_RE = /%7B/g;\nconst ENC_PIPE_RE = /%7C/g;\nconst ENC_CURLY_CLOSE_RE = /%7D/g;\nconst ENC_SPACE_RE = /%20/g;\n/**\n* Encode characters that need to be encoded on the path, search and hash\n* sections of the URL.\n*\n* @internal\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction commonEncode(text) {\n\treturn text == null ? \"\" : encodeURI(\"\" + text).replace(ENC_PIPE_RE, \"|\").replace(ENC_BRACKET_OPEN_RE, \"[\").replace(ENC_BRACKET_CLOSE_RE, \"]\");\n}\n/**\n* Encode characters that need to be encoded on the hash section of the URL.\n*\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction encodeHash(text) {\n\treturn commonEncode(text).replace(ENC_CURLY_OPEN_RE, \"{\").replace(ENC_CURLY_CLOSE_RE, \"}\").replace(ENC_CARET_RE, \"^\");\n}\n/**\n* Encode characters that need to be encoded query values on the query\n* section of the URL.\n*\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction encodeQueryValue(text) {\n\treturn commonEncode(text).replace(PLUS_RE, \"%2B\").replace(ENC_SPACE_RE, \"+\").replace(HASH_RE, \"%23\").replace(AMPERSAND_RE, \"%26\").replace(ENC_BACKTICK_RE, \"`\").replace(ENC_CURLY_OPEN_RE, \"{\").replace(ENC_CURLY_CLOSE_RE, \"}\").replace(ENC_CARET_RE, \"^\");\n}\n/**\n* Like `encodeQueryValue` but also encodes the `=` character.\n*\n* @param text - string to encode\n*/\nfunction encodeQueryKey(text) {\n\treturn encodeQueryValue(text).replace(EQUAL_RE, \"%3D\");\n}\n/**\n* Encode characters that need to be encoded on the path section of the URL.\n*\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction encodePath(text) {\n\treturn commonEncode(text).replace(HASH_RE, \"%23\").replace(IM_RE, \"%3F\");\n}\n/**\n* Encode characters that need to be encoded on the path section of the URL as a\n* param. This function encodes everything {@link encodePath} does plus the\n* slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\n* string instead.\n*\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction encodeParam(text) {\n\treturn encodePath(text).replace(SLASH_RE, \"%2F\");\n}\nfunction decode(text) {\n\tif (text == null) return null;\n\ttry {\n\t\treturn decodeURIComponent(\"\" + text);\n\t} catch (err) {\n\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(`Error decoding \"${text}\". Using original value`);\n\t}\n\treturn \"\" + text;\n}\n\n//#endregion\n//#region src/location.ts\nconst TRAILING_SLASH_RE = /\\/$/;\nconst removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, \"\");\n/**\n* Transforms a URI into a normalized history location\n*\n* @param parseQuery\n* @param location - URI to normalize\n* @param currentLocation - current absolute location. Allows resolving relative\n* paths. Must start with `/`. Defaults to `/`\n* @returns a normalized history location\n*/\nfunction parseURL(parseQuery$1, location, currentLocation = \"/\") {\n\tlet path, query = {}, searchString = \"\", hash = \"\";\n\tconst hashPos = location.indexOf(\"#\");\n\tlet searchPos = location.indexOf(\"?\");\n\tsearchPos = hashPos >= 0 && searchPos > hashPos ? -1 : searchPos;\n\tif (searchPos >= 0) {\n\t\tpath = location.slice(0, searchPos);\n\t\tsearchString = location.slice(searchPos, hashPos > 0 ? hashPos : location.length);\n\t\tquery = parseQuery$1(searchString.slice(1));\n\t}\n\tif (hashPos >= 0) {\n\t\tpath = path || location.slice(0, hashPos);\n\t\thash = location.slice(hashPos, location.length);\n\t}\n\tpath = resolveRelativePath(path != null ? path : location, currentLocation);\n\treturn {\n\t\tfullPath: path + searchString + hash,\n\t\tpath,\n\t\tquery,\n\t\thash: decode(hash)\n\t};\n}\nfunction NEW_stringifyURL(stringifyQuery$1, path, query, hash = \"\") {\n\tconst searchText = stringifyQuery$1(query);\n\treturn path + (searchText && \"?\") + searchText + encodeHash(hash);\n}\n/**\n* Stringifies a URL object\n*\n* @param stringifyQuery\n* @param location\n*/\nfunction stringifyURL(stringifyQuery$1, location) {\n\tconst query = location.query ? stringifyQuery$1(location.query) : \"\";\n\treturn location.path + (query && \"?\") + query + (location.hash || \"\");\n}\n/**\n* Strips off the base from the beginning of a location.pathname in a non-case-sensitive way.\n*\n* @param pathname - location.pathname\n* @param base - base to strip off\n*/\nfunction stripBase(pathname, base) {\n\tif (!base || !pathname.toLowerCase().startsWith(base.toLowerCase())) return pathname;\n\treturn pathname.slice(base.length) || \"/\";\n}\n/**\n* Checks if two RouteLocation are equal. This means that both locations are\n* pointing towards the same {@link RouteRecord} and that all `params`, `query`\n* parameters and `hash` are the same\n*\n* @param stringifyQuery - A function that takes a query object of type LocationQueryRaw and returns a string representation of it.\n* @param a - first {@link RouteLocation}\n* @param b - second {@link RouteLocation}\n*/\nfunction isSameRouteLocation(stringifyQuery$1, a, b) {\n\tconst aLastIndex = a.matched.length - 1;\n\tconst bLastIndex = b.matched.length - 1;\n\treturn aLastIndex > -1 && aLastIndex === bLastIndex && isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) && isSameRouteLocationParams(a.params, b.params) && stringifyQuery$1(a.query) === stringifyQuery$1(b.query) && a.hash === b.hash;\n}\n/**\n* Check if two `RouteRecords` are equal. Takes into account aliases: they are\n* considered equal to the `RouteRecord` they are aliasing.\n*\n* @param a - first {@link RouteRecord}\n* @param b - second {@link RouteRecord}\n*/\nfunction isSameRouteRecord(a, b) {\n\treturn (a.aliasOf || a) === (b.aliasOf || b);\n}\nfunction isSameRouteLocationParams(a, b) {\n\tif (Object.keys(a).length !== Object.keys(b).length) return false;\n\tfor (var key in a) if (!isSameRouteLocationParamsValue(a[key], b[key])) return false;\n\treturn true;\n}\nfunction isSameRouteLocationParamsValue(a, b) {\n\treturn isArray(a) ? isEquivalentArray(a, b) : isArray(b) ? isEquivalentArray(b, a) : a?.valueOf() === b?.valueOf();\n}\n/**\n* Check if two arrays are the same or if an array with one single entry is the\n* same as another primitive value. Used to check query and parameters\n*\n* @param a - array of values\n* @param b - array of values or a single value\n*/\nfunction isEquivalentArray(a, b) {\n\treturn isArray(b) ? a.length === b.length && a.every((value, i) => value === b[i]) : a.length === 1 && a[0] === b;\n}\n/**\n* Resolves a relative path that starts with `.`.\n*\n* @param to - path location we are resolving\n* @param from - currentLocation.path, should start with `/`\n*/\nfunction resolveRelativePath(to, from) {\n\tif (to.startsWith(\"/\")) return to;\n\tif (process.env.NODE_ENV !== \"production\" && !from.startsWith(\"/\")) {\n\t\twarn$1(`Cannot resolve a relative location without an absolute path. Trying to resolve \"${to}\" from \"${from}\". It should look like \"/${from}\".`);\n\t\treturn to;\n\t}\n\tif (!to) return from;\n\tconst fromSegments = from.split(\"/\");\n\tconst toSegments = to.split(\"/\");\n\tconst lastToSegment = toSegments[toSegments.length - 1];\n\tif (lastToSegment === \"..\" || lastToSegment === \".\") toSegments.push(\"\");\n\tlet position = fromSegments.length - 1;\n\tlet toPosition;\n\tlet segment;\n\tfor (toPosition = 0; toPosition < toSegments.length; toPosition++) {\n\t\tsegment = toSegments[toPosition];\n\t\tif (segment === \".\") continue;\n\t\tif (segment === \"..\") {\n\t\t\tif (position > 1) position--;\n\t\t} else break;\n\t}\n\treturn fromSegments.slice(0, position).join(\"/\") + \"/\" + toSegments.slice(toPosition).join(\"/\");\n}\n/**\n* Initial route location where the router is. Can be used in navigation guards\n* to differentiate the initial navigation.\n*\n* @example\n* ```js\n* import { START_LOCATION } from 'vue-router'\n*\n* router.beforeEach((to, from) => {\n* if (from === START_LOCATION) {\n* // initial navigation\n* }\n* })\n* ```\n*/\nconst START_LOCATION_NORMALIZED = {\n\tpath: \"/\",\n\tname: void 0,\n\tparams: {},\n\tquery: {},\n\thash: \"\",\n\tfullPath: \"/\",\n\tmatched: [],\n\tmeta: {},\n\tredirectedFrom: void 0\n};\n\n//#endregion\n//#region src/history/common.ts\nlet NavigationType = /* @__PURE__ */ function(NavigationType$1) {\n\tNavigationType$1[\"pop\"] = \"pop\";\n\tNavigationType$1[\"push\"] = \"push\";\n\treturn NavigationType$1;\n}({});\nlet NavigationDirection = /* @__PURE__ */ function(NavigationDirection$1) {\n\tNavigationDirection$1[\"back\"] = \"back\";\n\tNavigationDirection$1[\"forward\"] = \"forward\";\n\tNavigationDirection$1[\"unknown\"] = \"\";\n\treturn NavigationDirection$1;\n}({});\n/**\n* Starting location for Histories\n*/\nconst START = \"\";\n/**\n* Normalizes a base by removing any trailing slash and reading the base tag if\n* present.\n*\n* @param base - base to normalize\n*/\nfunction normalizeBase(base) {\n\tif (!base) if (isBrowser) {\n\t\tconst baseEl = document.querySelector(\"base\");\n\t\tbase = baseEl && baseEl.getAttribute(\"href\") || \"/\";\n\t\tbase = base.replace(/^\\w+:\\/\\/[^\\/]+/, \"\");\n\t} else base = \"/\";\n\tif (base[0] !== \"/\" && base[0] !== \"#\") base = \"/\" + base;\n\treturn removeTrailingSlash(base);\n}\nconst BEFORE_HASH_RE = /^[^#]+#/;\nfunction createHref(base, location) {\n\treturn base.replace(BEFORE_HASH_RE, \"#\") + location;\n}\n\n//#endregion\n//#region src/scrollBehavior.ts\nfunction getElementPosition(el, offset) {\n\tconst docRect = document.documentElement.getBoundingClientRect();\n\tconst elRect = el.getBoundingClientRect();\n\treturn {\n\t\tbehavior: offset.behavior,\n\t\tleft: elRect.left - docRect.left - (offset.left || 0),\n\t\ttop: elRect.top - docRect.top - (offset.top || 0)\n\t};\n}\nconst computeScrollPosition = () => ({\n\tleft: window.scrollX,\n\ttop: window.scrollY\n});\nfunction scrollToPosition(position) {\n\tlet scrollToOptions;\n\tif (\"el\" in position) {\n\t\tconst positionEl = position.el;\n\t\tconst isIdSelector = typeof positionEl === \"string\" && positionEl.startsWith(\"#\");\n\t\t/**\n\t\t* `id`s can accept pretty much any characters, including CSS combinators\n\t\t* like `>` or `~`. It's still possible to retrieve elements using\n\t\t* `document.getElementById('~')` but it needs to be escaped when using\n\t\t* `document.querySelector('#\\\\~')` for it to be valid. The only\n\t\t* requirements for `id`s are them to be unique on the page and to not be\n\t\t* empty (`id=\"\"`). Because of that, when passing an id selector, it should\n\t\t* be properly escaped for it to work with `querySelector`. We could check\n\t\t* for the id selector to be simple (no CSS combinators `+ >~`) but that\n\t\t* would make things inconsistent since they are valid characters for an\n\t\t* `id` but would need to be escaped when using `querySelector`, breaking\n\t\t* their usage and ending up in no selector returned. Selectors need to be\n\t\t* escaped:\n\t\t*\n\t\t* - `#1-thing` becomes `#\\31 -thing`\n\t\t* - `#with~symbols` becomes `#with\\\\~symbols`\n\t\t*\n\t\t* - More information about the topic can be found at\n\t\t* https://mathiasbynens.be/notes/html5-id-class.\n\t\t* - Practical example: https://mathiasbynens.be/demo/html5-id\n\t\t*/\n\t\tif (process.env.NODE_ENV !== \"production\" && typeof position.el === \"string\") {\n\t\t\tif (!isIdSelector || !document.getElementById(position.el.slice(1))) try {\n\t\t\t\tconst foundEl = document.querySelector(position.el);\n\t\t\t\tif (isIdSelector && foundEl) {\n\t\t\t\t\twarn$1(`The selector \"${position.el}\" should be passed as \"el: document.querySelector('${position.el}')\" because it starts with \"#\".`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\twarn$1(`The selector \"${position.el}\" is invalid. If you are using an id selector, make sure to escape it. You can find more information about escaping characters in selectors at https://mathiasbynens.be/notes/css-escapes or use CSS.escape (https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape).`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tconst el = typeof positionEl === \"string\" ? isIdSelector ? document.getElementById(positionEl.slice(1)) : document.querySelector(positionEl) : positionEl;\n\t\tif (!el) {\n\t\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(`Couldn't find element using selector \"${position.el}\" returned by scrollBehavior.`);\n\t\t\treturn;\n\t\t}\n\t\tscrollToOptions = getElementPosition(el, position);\n\t} else scrollToOptions = position;\n\tif (\"scrollBehavior\" in document.documentElement.style) window.scrollTo(scrollToOptions);\n\telse window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.scrollX, scrollToOptions.top != null ? scrollToOptions.top : window.scrollY);\n}\nfunction getScrollKey(path, delta) {\n\treturn (history.state ? history.state.position - delta : -1) + path;\n}\nconst scrollPositions = /* @__PURE__ */ new Map();\nfunction saveScrollPosition(key, scrollPosition) {\n\tscrollPositions.set(key, scrollPosition);\n}\nfunction getSavedScrollPosition(key) {\n\tconst scroll = scrollPositions.get(key);\n\tscrollPositions.delete(key);\n\treturn scroll;\n}\n/**\n* ScrollBehavior instance used by the router to compute and restore the scroll\n* position when navigating.\n*/\n\n//#endregion\n//#region src/types/typeGuards.ts\nfunction isRouteLocation(route) {\n\treturn typeof route === \"string\" || route && typeof route === \"object\";\n}\nfunction isRouteName(name) {\n\treturn typeof name === \"string\" || typeof name === \"symbol\";\n}\n\n//#endregion\n//#region src/errors.ts\n/**\n* Flags so we can combine them when checking for multiple errors. This is the internal version of\n* {@link NavigationFailureType}.\n*\n* @internal\n*/\nlet ErrorTypes = /* @__PURE__ */ function(ErrorTypes$1) {\n\tErrorTypes$1[ErrorTypes$1[\"MATCHER_NOT_FOUND\"] = 1] = \"MATCHER_NOT_FOUND\";\n\tErrorTypes$1[ErrorTypes$1[\"NAVIGATION_GUARD_REDIRECT\"] = 2] = \"NAVIGATION_GUARD_REDIRECT\";\n\tErrorTypes$1[ErrorTypes$1[\"NAVIGATION_ABORTED\"] = 4] = \"NAVIGATION_ABORTED\";\n\tErrorTypes$1[ErrorTypes$1[\"NAVIGATION_CANCELLED\"] = 8] = \"NAVIGATION_CANCELLED\";\n\tErrorTypes$1[ErrorTypes$1[\"NAVIGATION_DUPLICATED\"] = 16] = \"NAVIGATION_DUPLICATED\";\n\treturn ErrorTypes$1;\n}({});\nconst NavigationFailureSymbol = Symbol(process.env.NODE_ENV !== \"production\" ? \"navigation failure\" : \"\");\n/**\n* Enumeration with all possible types for navigation failures. Can be passed to\n* {@link isNavigationFailure} to check for specific failures.\n*/\nlet NavigationFailureType = /* @__PURE__ */ function(NavigationFailureType$1) {\n\t/**\n\t* An aborted navigation is a navigation that failed because a navigation\n\t* guard returned `false` or called `next(false)`\n\t*/\n\tNavigationFailureType$1[NavigationFailureType$1[\"aborted\"] = 4] = \"aborted\";\n\t/**\n\t* A cancelled navigation is a navigation that failed because a more recent\n\t* navigation finished started (not necessarily finished).\n\t*/\n\tNavigationFailureType$1[NavigationFailureType$1[\"cancelled\"] = 8] = \"cancelled\";\n\t/**\n\t* A duplicated navigation is a navigation that failed because it was\n\t* initiated while already being at the exact same location.\n\t*/\n\tNavigationFailureType$1[NavigationFailureType$1[\"duplicated\"] = 16] = \"duplicated\";\n\treturn NavigationFailureType$1;\n}({});\nconst ErrorTypeMessages = {\n\t[ErrorTypes.MATCHER_NOT_FOUND]({ location, currentLocation }) {\n\t\treturn `No match for\\n ${JSON.stringify(location)}${currentLocation ? \"\\nwhile being at\\n\" + JSON.stringify(currentLocation) : \"\"}`;\n\t},\n\t[ErrorTypes.NAVIGATION_GUARD_REDIRECT]({ from, to }) {\n\t\treturn `Redirected from \"${from.fullPath}\" to \"${stringifyRoute(to)}\" via a navigation guard.`;\n\t},\n\t[ErrorTypes.NAVIGATION_ABORTED]({ from, to }) {\n\t\treturn `Navigation aborted from \"${from.fullPath}\" to \"${to.fullPath}\" via a navigation guard.`;\n\t},\n\t[ErrorTypes.NAVIGATION_CANCELLED]({ from, to }) {\n\t\treturn `Navigation cancelled from \"${from.fullPath}\" to \"${to.fullPath}\" with a new navigation.`;\n\t},\n\t[ErrorTypes.NAVIGATION_DUPLICATED]({ from, to }) {\n\t\treturn `Avoided redundant navigation to current location: \"${from.fullPath}\".`;\n\t}\n};\n/**\n* Creates a typed NavigationFailure object.\n* @internal\n* @param type - NavigationFailureType\n* @param params - { from, to }\n*/\nfunction createRouterError(type, params) {\n\tif (process.env.NODE_ENV !== \"production\" || false) return assign(new Error(ErrorTypeMessages[type](params)), {\n\t\ttype,\n\t\t[NavigationFailureSymbol]: true\n\t}, params);\n\telse return assign(/* @__PURE__ */ new Error(), {\n\t\ttype,\n\t\t[NavigationFailureSymbol]: true\n\t}, params);\n}\nfunction isNavigationFailure(error, type) {\n\treturn error instanceof Error && NavigationFailureSymbol in error && (type == null || !!(error.type & type));\n}\nconst propertiesToLog = [\n\t\"params\",\n\t\"query\",\n\t\"hash\"\n];\nfunction stringifyRoute(to) {\n\tif (typeof to === \"string\") return to;\n\tif (to.path != null) return to.path;\n\tconst location = {};\n\tfor (const key of propertiesToLog) if (key in to) location[key] = to[key];\n\treturn JSON.stringify(location, null, 2);\n}\n\n//#endregion\n//#region src/query.ts\n/**\n* Transforms a queryString into a {@link LocationQuery} object. Accept both, a\n* version with the leading `?` and without Should work as URLSearchParams\n\n* @internal\n*\n* @param search - search string to parse\n* @returns a query object\n*/\nfunction parseQuery(search) {\n\tconst query = {};\n\tif (search === \"\" || search === \"?\") return query;\n\tconst searchParams = (search[0] === \"?\" ? search.slice(1) : search).split(\"&\");\n\tfor (let i = 0; i < searchParams.length; ++i) {\n\t\tconst searchParam = searchParams[i].replace(PLUS_RE, \" \");\n\t\tconst eqPos = searchParam.indexOf(\"=\");\n\t\tconst key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\n\t\tconst value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\n\t\tif (key in query) {\n\t\t\tlet currentValue = query[key];\n\t\t\tif (!isArray(currentValue)) currentValue = query[key] = [currentValue];\n\t\t\tcurrentValue.push(value);\n\t\t} else query[key] = value;\n\t}\n\treturn query;\n}\n/**\n* Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\n* doesn't prepend a `?`\n*\n* @internal\n*\n* @param query - query object to stringify\n* @returns string version of the query without the leading `?`\n*/\nfunction stringifyQuery(query) {\n\tlet search = \"\";\n\tfor (let key in query) {\n\t\tconst value = query[key];\n\t\tkey = encodeQueryKey(key);\n\t\tif (value == null) {\n\t\t\tif (value !== void 0) search += (search.length ? \"&\" : \"\") + key;\n\t\t\tcontinue;\n\t\t}\n\t\t(isArray(value) ? value.map((v) => v && encodeQueryValue(v)) : [value && encodeQueryValue(value)]).forEach((value$1) => {\n\t\t\tif (value$1 !== void 0) {\n\t\t\t\tsearch += (search.length ? \"&\" : \"\") + key;\n\t\t\t\tif (value$1 != null) search += \"=\" + value$1;\n\t\t\t}\n\t\t});\n\t}\n\treturn search;\n}\n/**\n* Transforms a {@link LocationQueryRaw} into a {@link LocationQuery} by casting\n* numbers into strings, removing keys with an undefined value and replacing\n* undefined with null in arrays\n*\n* @param query - query object to normalize\n* @returns a normalized query object\n*/\nfunction normalizeQuery(query) {\n\tconst normalizedQuery = {};\n\tfor (const key in query) {\n\t\tconst value = query[key];\n\t\tif (value !== void 0) normalizedQuery[key] = isArray(value) ? value.map((v) => v == null ? null : \"\" + v) : value == null ? value : \"\" + value;\n\t}\n\treturn normalizedQuery;\n}\n\n//#endregion\n//#region src/injectionSymbols.ts\n/**\n* RouteRecord being rendered by the closest ancestor Router View. Used for\n* `onBeforeRouteUpdate` and `onBeforeRouteLeave`. rvlm stands for Router View\n* Location Matched\n*\n* @internal\n*/\nconst matchedRouteKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"router view location matched\" : \"\");\n/**\n* Allows overriding the router view depth to control which component in\n* `matched` is rendered. rvd stands for Router View Depth\n*\n* @internal\n*/\nconst viewDepthKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"router view depth\" : \"\");\n/**\n* Allows overriding the router instance returned by `useRouter` in tests. r\n* stands for router\n*\n* @internal\n*/\nconst routerKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"router\" : \"\");\n/**\n* Allows overriding the current route returned by `useRoute` in tests. rl\n* stands for route location\n*\n* @internal\n*/\nconst routeLocationKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"route location\" : \"\");\n/**\n* Allows overriding the current route used by router-view. Internally this is\n* used when the `route` prop is passed.\n*\n* @internal\n*/\nconst routerViewLocationKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"router view location\" : \"\");\n\n//#endregion\n//#region src/utils/callbacks.ts\n/**\n* Create a list of callbacks that can be reset. Used to create before and after navigation guards list\n*/\nfunction useCallbacks() {\n\tlet handlers = [];\n\tfunction add(handler) {\n\t\thandlers.push(handler);\n\t\treturn () => {\n\t\t\tconst i = handlers.indexOf(handler);\n\t\t\tif (i > -1) handlers.splice(i, 1);\n\t\t};\n\t}\n\tfunction reset() {\n\t\thandlers = [];\n\t}\n\treturn {\n\t\tadd,\n\t\tlist: () => handlers.slice(),\n\t\treset\n\t};\n}\n\n//#endregion\n//#region src/navigationGuards.ts\nfunction registerGuard(record, name, guard) {\n\tconst removeFromList = () => {\n\t\trecord[name].delete(guard);\n\t};\n\tonUnmounted(removeFromList);\n\tonDeactivated(removeFromList);\n\tonActivated(() => {\n\t\trecord[name].add(guard);\n\t});\n\trecord[name].add(guard);\n}\n/**\n* Add a navigation guard that triggers whenever the component for the current\n* location is about to be left. Similar to {@link beforeRouteLeave} but can be\n* used in any component. The guard is removed when the component is unmounted.\n*\n* @param leaveGuard - {@link NavigationGuard}\n*/\nfunction onBeforeRouteLeave(leaveGuard) {\n\tif (process.env.NODE_ENV !== \"production\" && !getCurrentInstance()) {\n\t\twarn$1(\"getCurrentInstance() returned null. onBeforeRouteLeave() must be called at the top of a setup function\");\n\t\treturn;\n\t}\n\tconst activeRecord = inject(matchedRouteKey, {}).value;\n\tif (!activeRecord) {\n\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(\"No active route record was found when calling `onBeforeRouteLeave()`. Make sure you call this function inside a component child of . Maybe you called it inside of App.vue?\");\n\t\treturn;\n\t}\n\tregisterGuard(activeRecord, \"leaveGuards\", leaveGuard);\n}\n/**\n* Add a navigation guard that triggers whenever the current location is about\n* to be updated. Similar to {@link beforeRouteUpdate} but can be used in any\n* component. The guard is removed when the component is unmounted.\n*\n* @param updateGuard - {@link NavigationGuard}\n*/\nfunction onBeforeRouteUpdate(updateGuard) {\n\tif (process.env.NODE_ENV !== \"production\" && !getCurrentInstance()) {\n\t\twarn$1(\"getCurrentInstance() returned null. onBeforeRouteUpdate() must be called at the top of a setup function\");\n\t\treturn;\n\t}\n\tconst activeRecord = inject(matchedRouteKey, {}).value;\n\tif (!activeRecord) {\n\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(\"No active route record was found when calling `onBeforeRouteUpdate()`. Make sure you call this function inside a component child of . Maybe you called it inside of App.vue?\");\n\t\treturn;\n\t}\n\tregisterGuard(activeRecord, \"updateGuards\", updateGuard);\n}\nfunction guardToPromiseFn(guard, to, from, record, name, runWithContext = (fn) => fn()) {\n\tconst enterCallbackArray = record && (record.enterCallbacks[name] = record.enterCallbacks[name] || []);\n\treturn () => new Promise((resolve, reject) => {\n\t\tconst next = (valid) => {\n\t\t\tif (valid === false) reject(createRouterError(ErrorTypes.NAVIGATION_ABORTED, {\n\t\t\t\tfrom,\n\t\t\t\tto\n\t\t\t}));\n\t\t\telse if (valid instanceof Error) reject(valid);\n\t\t\telse if (isRouteLocation(valid)) reject(createRouterError(ErrorTypes.NAVIGATION_GUARD_REDIRECT, {\n\t\t\t\tfrom: to,\n\t\t\t\tto: valid\n\t\t\t}));\n\t\t\telse {\n\t\t\t\tif (enterCallbackArray && record.enterCallbacks[name] === enterCallbackArray && typeof valid === \"function\") enterCallbackArray.push(valid);\n\t\t\t\tresolve();\n\t\t\t}\n\t\t};\n\t\tconst guardReturn = runWithContext(() => guard.call(record && record.instances[name], to, from, process.env.NODE_ENV !== \"production\" ? canOnlyBeCalledOnce(next, to, from) : next));\n\t\tlet guardCall = Promise.resolve(guardReturn);\n\t\tif (guard.length < 3) guardCall = guardCall.then(next);\n\t\tif (process.env.NODE_ENV !== \"production\" && guard.length > 2) {\n\t\t\tconst message = `The \"next\" callback was never called inside of ${guard.name ? \"\\\"\" + guard.name + \"\\\"\" : \"\"}:\\n${guard.toString()}\\n. If you are returning a value instead of calling \"next\", make sure to remove the \"next\" parameter from your function.`;\n\t\t\tif (typeof guardReturn === \"object\" && \"then\" in guardReturn) guardCall = guardCall.then((resolvedValue) => {\n\t\t\t\tif (!next._called) {\n\t\t\t\t\twarn$1(message);\n\t\t\t\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Invalid navigation guard\"));\n\t\t\t\t}\n\t\t\t\treturn resolvedValue;\n\t\t\t});\n\t\t\telse if (guardReturn !== void 0) {\n\t\t\t\tif (!next._called) {\n\t\t\t\t\twarn$1(message);\n\t\t\t\t\treject(/* @__PURE__ */ new Error(\"Invalid navigation guard\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tguardCall.catch((err) => reject(err));\n\t});\n}\nfunction canOnlyBeCalledOnce(next, to, from) {\n\tlet called = 0;\n\treturn function() {\n\t\tif (called++ === 1) warn$1(`The \"next\" callback was called more than once in one navigation guard when going from \"${from.fullPath}\" to \"${to.fullPath}\". It should be called exactly one time in each navigation guard. This will fail in production.`);\n\t\tnext._called = true;\n\t\tif (called === 1) next.apply(null, arguments);\n\t};\n}\nfunction extractComponentsGuards(matched, guardType, to, from, runWithContext = (fn) => fn()) {\n\tconst guards = [];\n\tfor (const record of matched) {\n\t\tif (process.env.NODE_ENV !== \"production\" && !record.components && record.children && !record.children.length) warn$1(`Record with path \"${record.path}\" is either missing a \"component(s)\" or \"children\" property.`);\n\t\tfor (const name in record.components) {\n\t\t\tlet rawComponent = record.components[name];\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\t\tif (!rawComponent || typeof rawComponent !== \"object\" && typeof rawComponent !== \"function\") {\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is not a valid component. Received \"${String(rawComponent)}\".`);\n\t\t\t\t\tthrow new Error(\"Invalid route component\");\n\t\t\t\t} else if (\"then\" in rawComponent) {\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is a Promise instead of a function that returns a Promise. Did you write \"import('./MyPage.vue')\" instead of \"() => import('./MyPage.vue')\" ? This will break in production if not fixed.`);\n\t\t\t\t\tconst promise = rawComponent;\n\t\t\t\t\trawComponent = () => promise;\n\t\t\t\t} else if (rawComponent.__asyncLoader && !rawComponent.__warnedDefineAsync) {\n\t\t\t\t\trawComponent.__warnedDefineAsync = true;\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is defined using \"defineAsyncComponent()\". Write \"() => import('./MyPage.vue')\" instead of \"defineAsyncComponent(() => import('./MyPage.vue'))\".`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (guardType !== \"beforeRouteEnter\" && !record.instances[name]) continue;\n\t\t\tif (isRouteComponent(rawComponent)) {\n\t\t\t\tconst guard = (rawComponent.__vccOpts || rawComponent)[guardType];\n\t\t\t\tguard && guards.push(guardToPromiseFn(guard, to, from, record, name, runWithContext));\n\t\t\t} else {\n\t\t\t\tlet componentPromise = rawComponent();\n\t\t\t\tif (process.env.NODE_ENV !== \"production\" && !(\"catch\" in componentPromise)) {\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is a function that does not return a Promise. If you were passing a functional component, make sure to add a \"displayName\" to the component. This will break in production if not fixed.`);\n\t\t\t\t\tcomponentPromise = Promise.resolve(componentPromise);\n\t\t\t\t}\n\t\t\t\tguards.push(() => componentPromise.then((resolved) => {\n\t\t\t\t\tif (!resolved) throw new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\"`);\n\t\t\t\t\tconst resolvedComponent = isESModule(resolved) ? resolved.default : resolved;\n\t\t\t\t\trecord.mods[name] = resolved;\n\t\t\t\t\trecord.components[name] = resolvedComponent;\n\t\t\t\t\tconst guard = (resolvedComponent.__vccOpts || resolvedComponent)[guardType];\n\t\t\t\t\treturn guard && guardToPromiseFn(guard, to, from, record, name, runWithContext)();\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\t}\n\treturn guards;\n}\n/**\n* Ensures a route is loaded, so it can be passed as o prop to ``.\n*\n* @param route - resolved route to load\n*/\nfunction loadRouteLocation(route) {\n\treturn route.matched.every((record) => record.redirect) ? Promise.reject(/* @__PURE__ */ new Error(\"Cannot load a route that redirects.\")) : Promise.all(route.matched.map((record) => record.components && Promise.all(Object.keys(record.components).reduce((promises, name) => {\n\t\tconst rawComponent = record.components[name];\n\t\tif (typeof rawComponent === \"function\" && !(\"displayName\" in rawComponent)) promises.push(rawComponent().then((resolved) => {\n\t\t\tif (!resolved) return Promise.reject(/* @__PURE__ */ new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\". Ensure you passed a function that returns a promise.`));\n\t\t\tconst resolvedComponent = isESModule(resolved) ? resolved.default : resolved;\n\t\t\trecord.mods[name] = resolved;\n\t\t\trecord.components[name] = resolvedComponent;\n\t\t}));\n\t\treturn promises;\n\t}, [])))).then(() => route);\n}\n/**\n* Split the leaving, updating, and entering records.\n* @internal\n*\n* @param to - Location we are navigating to\n* @param from - Location we are navigating from\n*/\nfunction extractChangingRecords(to, from) {\n\tconst leavingRecords = [];\n\tconst updatingRecords = [];\n\tconst enteringRecords = [];\n\tconst len = Math.max(from.matched.length, to.matched.length);\n\tfor (let i = 0; i < len; i++) {\n\t\tconst recordFrom = from.matched[i];\n\t\tif (recordFrom) if (to.matched.find((record) => isSameRouteRecord(record, recordFrom))) updatingRecords.push(recordFrom);\n\t\telse leavingRecords.push(recordFrom);\n\t\tconst recordTo = to.matched[i];\n\t\tif (recordTo) {\n\t\t\tif (!from.matched.find((record) => isSameRouteRecord(record, recordTo))) enteringRecords.push(recordTo);\n\t\t}\n\t}\n\treturn [\n\t\tleavingRecords,\n\t\tupdatingRecords,\n\t\tenteringRecords\n\t];\n}\n\n//#endregion\n//#region src/devtools.ts\n/**\n* Copies a route location and removes any problematic properties that cannot be shown in devtools (e.g. Vue instances).\n*\n* @param routeLocation - routeLocation to format\n* @param tooltip - optional tooltip\n* @returns a copy of the routeLocation\n*/\nfunction formatRouteLocation(routeLocation, tooltip) {\n\tconst copy = assign({}, routeLocation, { matched: routeLocation.matched.map((matched) => omit(matched, [\n\t\t\"instances\",\n\t\t\"children\",\n\t\t\"aliasOf\"\n\t])) });\n\treturn { _custom: {\n\t\ttype: null,\n\t\treadOnly: true,\n\t\tdisplay: routeLocation.fullPath,\n\t\ttooltip,\n\t\tvalue: copy\n\t} };\n}\nfunction formatDisplay(display) {\n\treturn { _custom: { display } };\n}\nlet routerId = 0;\nfunction addDevtools(app, router, matcher) {\n\tif (router.__hasDevtools) return;\n\trouter.__hasDevtools = true;\n\tconst id = routerId++;\n\tsetupDevtoolsPlugin({\n\t\tid: \"org.vuejs.router\" + (id ? \".\" + id : \"\"),\n\t\tlabel: \"Vue Router\",\n\t\tpackageName: \"vue-router\",\n\t\thomepage: \"https://router.vuejs.org\",\n\t\tlogo: \"https://router.vuejs.org/logo.png\",\n\t\tcomponentStateTypes: [\"Routing\"],\n\t\tapp\n\t}, (api) => {\n\t\tif (typeof api.now !== \"function\") warn$1(\"[Vue Router]: You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.\");\n\t\tapi.on.inspectComponent((payload, ctx) => {\n\t\t\tif (payload.instanceData) payload.instanceData.state.push({\n\t\t\t\ttype: \"Routing\",\n\t\t\t\tkey: \"$route\",\n\t\t\t\teditable: false,\n\t\t\t\tvalue: formatRouteLocation(router.currentRoute.value, \"Current Route\")\n\t\t\t});\n\t\t});\n\t\tapi.on.visitComponentTree(({ treeNode: node, componentInstance }) => {\n\t\t\tif (componentInstance.__vrv_devtools) {\n\t\t\t\tconst info = componentInstance.__vrv_devtools;\n\t\t\t\tnode.tags.push({\n\t\t\t\t\tlabel: (info.name ? `${info.name.toString()}: ` : \"\") + info.path,\n\t\t\t\t\ttextColor: 0,\n\t\t\t\t\ttooltip: \"This component is rendered by <router-view>\",\n\t\t\t\t\tbackgroundColor: PINK_500\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (isArray(componentInstance.__vrl_devtools)) {\n\t\t\t\tcomponentInstance.__devtoolsApi = api;\n\t\t\t\tcomponentInstance.__vrl_devtools.forEach((devtoolsData) => {\n\t\t\t\t\tlet label = devtoolsData.route.path;\n\t\t\t\t\tlet backgroundColor = ORANGE_400;\n\t\t\t\t\tlet tooltip = \"\";\n\t\t\t\t\tlet textColor = 0;\n\t\t\t\t\tif (devtoolsData.error) {\n\t\t\t\t\t\tlabel = devtoolsData.error;\n\t\t\t\t\t\tbackgroundColor = RED_100;\n\t\t\t\t\t\ttextColor = RED_700;\n\t\t\t\t\t} else if (devtoolsData.isExactActive) {\n\t\t\t\t\t\tbackgroundColor = LIME_500;\n\t\t\t\t\t\ttooltip = \"This is exactly active\";\n\t\t\t\t\t} else if (devtoolsData.isActive) {\n\t\t\t\t\t\tbackgroundColor = BLUE_600;\n\t\t\t\t\t\ttooltip = \"This link is active\";\n\t\t\t\t\t}\n\t\t\t\t\tnode.tags.push({\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\ttextColor,\n\t\t\t\t\t\ttooltip,\n\t\t\t\t\t\tbackgroundColor\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\twatch(router.currentRoute, () => {\n\t\t\trefreshRoutesView();\n\t\t\tapi.notifyComponentUpdate();\n\t\t\tapi.sendInspectorTree(routerInspectorId);\n\t\t\tapi.sendInspectorState(routerInspectorId);\n\t\t});\n\t\tconst navigationsLayerId = \"router:navigations:\" + id;\n\t\tapi.addTimelineLayer({\n\t\t\tid: navigationsLayerId,\n\t\t\tlabel: `Router${id ? \" \" + id : \"\"} Navigations`,\n\t\t\tcolor: 4237508\n\t\t});\n\t\trouter.onError((error, to) => {\n\t\t\tapi.addTimelineEvent({\n\t\t\t\tlayerId: navigationsLayerId,\n\t\t\t\tevent: {\n\t\t\t\t\ttitle: \"Error during Navigation\",\n\t\t\t\t\tsubtitle: to.fullPath,\n\t\t\t\t\tlogType: \"error\",\n\t\t\t\t\ttime: api.now(),\n\t\t\t\t\tdata: { error },\n\t\t\t\t\tgroupId: to.meta.__navigationId\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tlet navigationId = 0;\n\t\trouter.beforeEach((to, from) => {\n\t\t\tconst data = {\n\t\t\t\tguard: formatDisplay(\"beforeEach\"),\n\t\t\t\tfrom: formatRouteLocation(from, \"Current Location during this navigation\"),\n\t\t\t\tto: formatRouteLocation(to, \"Target location\")\n\t\t\t};\n\t\t\tObject.defineProperty(to.meta, \"__navigationId\", { value: navigationId++ });\n\t\t\tapi.addTimelineEvent({\n\t\t\t\tlayerId: navigationsLayerId,\n\t\t\t\tevent: {\n\t\t\t\t\ttime: api.now(),\n\t\t\t\t\ttitle: \"Start of navigation\",\n\t\t\t\t\tsubtitle: to.fullPath,\n\t\t\t\t\tdata,\n\t\t\t\t\tgroupId: to.meta.__navigationId\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\trouter.afterEach((to, from, failure) => {\n\t\t\tconst data = { guard: formatDisplay(\"afterEach\") };\n\t\t\tif (failure) {\n\t\t\t\tdata.failure = { _custom: {\n\t\t\t\t\ttype: Error,\n\t\t\t\t\treadOnly: true,\n\t\t\t\t\tdisplay: failure ? failure.message : \"\",\n\t\t\t\t\ttooltip: \"Navigation Failure\",\n\t\t\t\t\tvalue: failure\n\t\t\t\t} };\n\t\t\t\tdata.status = formatDisplay(\"❌\");\n\t\t\t} else data.status = formatDisplay(\"✅\");\n\t\t\tdata.from = formatRouteLocation(from, \"Current Location during this navigation\");\n\t\t\tdata.to = formatRouteLocation(to, \"Target location\");\n\t\t\tapi.addTimelineEvent({\n\t\t\t\tlayerId: navigationsLayerId,\n\t\t\t\tevent: {\n\t\t\t\t\ttitle: \"End of navigation\",\n\t\t\t\t\tsubtitle: to.fullPath,\n\t\t\t\t\ttime: api.now(),\n\t\t\t\t\tdata,\n\t\t\t\t\tlogType: failure ? \"warning\" : \"default\",\n\t\t\t\t\tgroupId: to.meta.__navigationId\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t/**\n\t\t* Inspector of Existing routes\n\t\t*/\n\t\tconst routerInspectorId = \"router-inspector:\" + id;\n\t\tapi.addInspector({\n\t\t\tid: routerInspectorId,\n\t\t\tlabel: \"Routes\" + (id ? \" \" + id : \"\"),\n\t\t\ticon: \"book\",\n\t\t\ttreeFilterPlaceholder: \"Search routes\"\n\t\t});\n\t\tfunction refreshRoutesView() {\n\t\t\tif (!activeRoutesPayload) return;\n\t\t\tconst payload = activeRoutesPayload;\n\t\t\tlet routes = matcher.getRoutes().filter((route) => !route.parent || !route.parent.record.components);\n\t\t\troutes.forEach(resetMatchStateOnRouteRecord);\n\t\t\tif (payload.filter) routes = routes.filter((route) => isRouteMatching(route, payload.filter.toLowerCase()));\n\t\t\troutes.forEach((route) => markRouteRecordActive(route, router.currentRoute.value));\n\t\t\tpayload.rootNodes = routes.map(formatRouteRecordForInspector);\n\t\t}\n\t\tlet activeRoutesPayload;\n\t\tapi.on.getInspectorTree((payload) => {\n\t\t\tactiveRoutesPayload = payload;\n\t\t\tif (payload.app === app && payload.inspectorId === routerInspectorId) refreshRoutesView();\n\t\t});\n\t\t/**\n\t\t* Display information about the currently selected route record\n\t\t*/\n\t\tapi.on.getInspectorState((payload) => {\n\t\t\tif (payload.app === app && payload.inspectorId === routerInspectorId) {\n\t\t\t\tconst route = matcher.getRoutes().find((route$1) => route$1.record.__vd_id === payload.nodeId);\n\t\t\t\tif (route) payload.state = { options: formatRouteRecordMatcherForStateInspector(route) };\n\t\t\t}\n\t\t});\n\t\tapi.sendInspectorTree(routerInspectorId);\n\t\tapi.sendInspectorState(routerInspectorId);\n\t});\n}\nfunction modifierForKey(key) {\n\tif (key.optional) return key.repeatable ? \"*\" : \"?\";\n\telse return key.repeatable ? \"+\" : \"\";\n}\nfunction formatRouteRecordMatcherForStateInspector(route) {\n\tconst { record } = route;\n\tconst fields = [{\n\t\teditable: false,\n\t\tkey: \"path\",\n\t\tvalue: record.path\n\t}];\n\tif (record.name != null) fields.push({\n\t\teditable: false,\n\t\tkey: \"name\",\n\t\tvalue: record.name\n\t});\n\tfields.push({\n\t\teditable: false,\n\t\tkey: \"regexp\",\n\t\tvalue: route.re\n\t});\n\tif (route.keys.length) fields.push({\n\t\teditable: false,\n\t\tkey: \"keys\",\n\t\tvalue: { _custom: {\n\t\t\ttype: null,\n\t\t\treadOnly: true,\n\t\t\tdisplay: route.keys.map((key) => `${key.name}${modifierForKey(key)}`).join(\" \"),\n\t\t\ttooltip: \"Param keys\",\n\t\t\tvalue: route.keys\n\t\t} }\n\t});\n\tif (record.redirect != null) fields.push({\n\t\teditable: false,\n\t\tkey: \"redirect\",\n\t\tvalue: record.redirect\n\t});\n\tif (route.alias.length) fields.push({\n\t\teditable: false,\n\t\tkey: \"aliases\",\n\t\tvalue: route.alias.map((alias) => alias.record.path)\n\t});\n\tif (Object.keys(route.record.meta).length) fields.push({\n\t\teditable: false,\n\t\tkey: \"meta\",\n\t\tvalue: route.record.meta\n\t});\n\tfields.push({\n\t\tkey: \"score\",\n\t\teditable: false,\n\t\tvalue: { _custom: {\n\t\t\ttype: null,\n\t\t\treadOnly: true,\n\t\t\tdisplay: route.score.map((score) => score.join(\", \")).join(\" | \"),\n\t\t\ttooltip: \"Score used to sort routes\",\n\t\t\tvalue: route.score\n\t\t} }\n\t});\n\treturn fields;\n}\n/**\n* Extracted from tailwind palette\n*/\nconst PINK_500 = 15485081;\nconst BLUE_600 = 2450411;\nconst LIME_500 = 8702998;\nconst CYAN_400 = 2282478;\nconst ORANGE_400 = 16486972;\nconst DARK = 6710886;\nconst RED_100 = 16704226;\nconst RED_700 = 12131356;\nfunction formatRouteRecordForInspector(route) {\n\tconst tags = [];\n\tconst { record } = route;\n\tif (record.name != null) tags.push({\n\t\tlabel: String(record.name),\n\t\ttextColor: 0,\n\t\tbackgroundColor: CYAN_400\n\t});\n\tif (record.aliasOf) tags.push({\n\t\tlabel: \"alias\",\n\t\ttextColor: 0,\n\t\tbackgroundColor: ORANGE_400\n\t});\n\tif (route.__vd_match) tags.push({\n\t\tlabel: \"matches\",\n\t\ttextColor: 0,\n\t\tbackgroundColor: PINK_500\n\t});\n\tif (route.__vd_exactActive) tags.push({\n\t\tlabel: \"exact\",\n\t\ttextColor: 0,\n\t\tbackgroundColor: LIME_500\n\t});\n\tif (route.__vd_active) tags.push({\n\t\tlabel: \"active\",\n\t\ttextColor: 0,\n\t\tbackgroundColor: BLUE_600\n\t});\n\tif (record.redirect) tags.push({\n\t\tlabel: typeof record.redirect === \"string\" ? `redirect: ${record.redirect}` : \"redirects\",\n\t\ttextColor: 16777215,\n\t\tbackgroundColor: DARK\n\t});\n\tlet id = record.__vd_id;\n\tif (id == null) {\n\t\tid = String(routeRecordId++);\n\t\trecord.__vd_id = id;\n\t}\n\treturn {\n\t\tid,\n\t\tlabel: record.path,\n\t\ttags,\n\t\tchildren: route.children.map(formatRouteRecordForInspector)\n\t};\n}\nlet routeRecordId = 0;\nconst EXTRACT_REGEXP_RE = /^\\/(.*)\\/([a-z]*)$/;\nfunction markRouteRecordActive(route, currentRoute) {\n\tconst isExactActive = currentRoute.matched.length && isSameRouteRecord(currentRoute.matched[currentRoute.matched.length - 1], route.record);\n\troute.__vd_exactActive = route.__vd_active = isExactActive;\n\tif (!isExactActive) route.__vd_active = currentRoute.matched.some((match) => isSameRouteRecord(match, route.record));\n\troute.children.forEach((childRoute) => markRouteRecordActive(childRoute, currentRoute));\n}\nfunction resetMatchStateOnRouteRecord(route) {\n\troute.__vd_match = false;\n\troute.children.forEach(resetMatchStateOnRouteRecord);\n}\nfunction isRouteMatching(route, filter) {\n\tconst found = String(route.re).match(EXTRACT_REGEXP_RE);\n\troute.__vd_match = false;\n\tif (!found || found.length < 3) return false;\n\tif (new RegExp(found[1].replace(/\\$$/, \"\"), found[2]).test(filter)) {\n\t\troute.children.forEach((child) => isRouteMatching(child, filter));\n\t\tif (route.record.path !== \"/\" || filter === \"/\") {\n\t\t\troute.__vd_match = route.re.test(filter);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tconst path = route.record.path.toLowerCase();\n\tconst decodedPath = decode(path);\n\tif (!filter.startsWith(\"/\") && (decodedPath.includes(filter) || path.includes(filter))) return true;\n\tif (decodedPath.startsWith(filter) || path.startsWith(filter)) return true;\n\tif (route.record.name && String(route.record.name).includes(filter)) return true;\n\treturn route.children.some((child) => isRouteMatching(child, filter));\n}\nfunction omit(obj, keys) {\n\tconst ret = {};\n\tfor (const key in obj) if (!keys.includes(key)) ret[key] = obj[key];\n\treturn ret;\n}\n\n//#endregion\nexport { isBrowser as $, START as A, stringifyURL as B, computeScrollPosition as C, scrollToPosition as D, saveScrollPosition as E, isSameRouteLocation as F, encodePath as G, decode as H, isSameRouteLocationParams as I, assign as J, warn$1 as K, isSameRouteRecord as L, normalizeBase as M, NEW_stringifyURL as N, NavigationDirection as O, START_LOCATION_NORMALIZED as P, noop as Q, parseURL as R, isRouteName as S, getScrollKey as T, encodeHash as U, stripBase as V, encodeParam as W, isArray as X, identityFn as Y, mergeOptions as Z, ErrorTypes as _, loadRouteLocation as a, isNavigationFailure as b, useCallbacks as c, routerKey as d, routerViewLocationKey as f, stringifyQuery as g, parseQuery as h, guardToPromiseFn as i, createHref as j, NavigationType as k, matchedRouteKey as l, normalizeQuery as m, extractChangingRecords as n, onBeforeRouteLeave as o, viewDepthKey as p, applyToParams as q, extractComponentsGuards as r, onBeforeRouteUpdate as s, addDevtools as t, routeLocationKey as u, NavigationFailureType as v, getSavedScrollPosition as w, isRouteLocation as x, createRouterError as y, resolveRelativePath as z };", "/*!\n * vue-router v4.6.4\n * (c) 2025 Eduardo San Martin Morote\n * @license MIT\n */\nimport { $ as isBrowser, A as START, B as stringifyURL, C as computeScrollPosition, D as scrollToPosition, E as saveScrollPosition, F as isSameRouteLocation, H as decode, I as isSameRouteLocationParams, J as assign, K as warn$1, L as isSameRouteRecord, M as normalizeBase, O as NavigationDirection, P as START_LOCATION_NORMALIZED, Q as noop, R as parseURL, S as isRouteName, T as getScrollKey, U as encodeHash, V as stripBase, W as encodeParam, X as isArray, Z as mergeOptions, _ as ErrorTypes, a as loadRouteLocation, b as isNavigationFailure, c as useCallbacks, d as routerKey, f as routerViewLocationKey, g as stringifyQuery, h as parseQuery, i as guardToPromiseFn, j as createHref, k as NavigationType, l as matchedRouteKey, m as normalizeQuery, n as extractChangingRecords, o as onBeforeRouteLeave, p as viewDepthKey, q as applyToParams, r as extractComponentsGuards, s as onBeforeRouteUpdate, t as addDevtools, u as routeLocationKey, v as NavigationFailureType, w as getSavedScrollPosition, x as isRouteLocation, y as createRouterError } from \"./devtools-EWN81iOl.mjs\";\nimport { computed, defineComponent, getCurrentInstance, h, inject, nextTick, provide, reactive, ref, shallowReactive, shallowRef, unref, watch, watchEffect } from \"vue\";\n\n//#region src/history/html5.ts\nlet createBaseLocation = () => location.protocol + \"//\" + location.host;\n/**\n* Creates a normalized history location from a window.location object\n* @param base - The base path\n* @param location - The window.location object\n*/\nfunction createCurrentLocation(base, location$1) {\n\tconst { pathname, search, hash } = location$1;\n\tconst hashPos = base.indexOf(\"#\");\n\tif (hashPos > -1) {\n\t\tlet slicePos = hash.includes(base.slice(hashPos)) ? base.slice(hashPos).length : 1;\n\t\tlet pathFromHash = hash.slice(slicePos);\n\t\tif (pathFromHash[0] !== \"/\") pathFromHash = \"/\" + pathFromHash;\n\t\treturn stripBase(pathFromHash, \"\");\n\t}\n\treturn stripBase(pathname, base) + search + hash;\n}\nfunction useHistoryListeners(base, historyState, currentLocation, replace) {\n\tlet listeners = [];\n\tlet teardowns = [];\n\tlet pauseState = null;\n\tconst popStateHandler = ({ state }) => {\n\t\tconst to = createCurrentLocation(base, location);\n\t\tconst from = currentLocation.value;\n\t\tconst fromState = historyState.value;\n\t\tlet delta = 0;\n\t\tif (state) {\n\t\t\tcurrentLocation.value = to;\n\t\t\thistoryState.value = state;\n\t\t\tif (pauseState && pauseState === from) {\n\t\t\t\tpauseState = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdelta = fromState ? state.position - fromState.position : 0;\n\t\t} else replace(to);\n\t\tlisteners.forEach((listener) => {\n\t\t\tlistener(currentLocation.value, from, {\n\t\t\t\tdelta,\n\t\t\t\ttype: NavigationType.pop,\n\t\t\t\tdirection: delta ? delta > 0 ? NavigationDirection.forward : NavigationDirection.back : NavigationDirection.unknown\n\t\t\t});\n\t\t});\n\t};\n\tfunction pauseListeners() {\n\t\tpauseState = currentLocation.value;\n\t}\n\tfunction listen(callback) {\n\t\tlisteners.push(callback);\n\t\tconst teardown = () => {\n\t\t\tconst index = listeners.indexOf(callback);\n\t\t\tif (index > -1) listeners.splice(index, 1);\n\t\t};\n\t\tteardowns.push(teardown);\n\t\treturn teardown;\n\t}\n\tfunction beforeUnloadListener() {\n\t\tif (document.visibilityState === \"hidden\") {\n\t\t\tconst { history: history$1 } = window;\n\t\t\tif (!history$1.state) return;\n\t\t\thistory$1.replaceState(assign({}, history$1.state, { scroll: computeScrollPosition() }), \"\");\n\t\t}\n\t}\n\tfunction destroy() {\n\t\tfor (const teardown of teardowns) teardown();\n\t\tteardowns = [];\n\t\twindow.removeEventListener(\"popstate\", popStateHandler);\n\t\twindow.removeEventListener(\"pagehide\", beforeUnloadListener);\n\t\tdocument.removeEventListener(\"visibilitychange\", beforeUnloadListener);\n\t}\n\twindow.addEventListener(\"popstate\", popStateHandler);\n\twindow.addEventListener(\"pagehide\", beforeUnloadListener);\n\tdocument.addEventListener(\"visibilitychange\", beforeUnloadListener);\n\treturn {\n\t\tpauseListeners,\n\t\tlisten,\n\t\tdestroy\n\t};\n}\n/**\n* Creates a state object\n*/\nfunction buildState(back, current, forward, replaced = false, computeScroll = false) {\n\treturn {\n\t\tback,\n\t\tcurrent,\n\t\tforward,\n\t\treplaced,\n\t\tposition: window.history.length,\n\t\tscroll: computeScroll ? computeScrollPosition() : null\n\t};\n}\nfunction useHistoryStateNavigation(base) {\n\tconst { history: history$1, location: location$1 } = window;\n\tconst currentLocation = { value: createCurrentLocation(base, location$1) };\n\tconst historyState = { value: history$1.state };\n\tif (!historyState.value) changeLocation(currentLocation.value, {\n\t\tback: null,\n\t\tcurrent: currentLocation.value,\n\t\tforward: null,\n\t\tposition: history$1.length - 1,\n\t\treplaced: true,\n\t\tscroll: null\n\t}, true);\n\tfunction changeLocation(to, state, replace$1) {\n\t\t/**\n\t\t* if a base tag is provided, and we are on a normal domain, we have to\n\t\t* respect the provided `base` attribute because pushState() will use it and\n\t\t* potentially erase anything before the `#` like at\n\t\t* https://github.com/vuejs/router/issues/685 where a base of\n\t\t* `/folder/#` but a base of `/` would erase the `/folder/` section. If\n\t\t* there is no host, the `` tag makes no sense and if there isn't a\n\t\t* base tag we can just use everything after the `#`.\n\t\t*/\n\t\tconst hashIndex = base.indexOf(\"#\");\n\t\tconst url = hashIndex > -1 ? (location$1.host && document.querySelector(\"base\") ? base : base.slice(hashIndex)) + to : createBaseLocation() + base + to;\n\t\ttry {\n\t\t\thistory$1[replace$1 ? \"replaceState\" : \"pushState\"](state, \"\", url);\n\t\t\thistoryState.value = state;\n\t\t} catch (err) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") warn$1(\"Error with push/replace State\", err);\n\t\t\telse console.error(err);\n\t\t\tlocation$1[replace$1 ? \"replace\" : \"assign\"](url);\n\t\t}\n\t}\n\tfunction replace(to, data) {\n\t\tchangeLocation(to, assign({}, history$1.state, buildState(historyState.value.back, to, historyState.value.forward, true), data, { position: historyState.value.position }), true);\n\t\tcurrentLocation.value = to;\n\t}\n\tfunction push(to, data) {\n\t\tconst currentState = assign({}, historyState.value, history$1.state, {\n\t\t\tforward: to,\n\t\t\tscroll: computeScrollPosition()\n\t\t});\n\t\tif (process.env.NODE_ENV !== \"production\" && !history$1.state) warn$1(\"history.state seems to have been manually replaced without preserving the necessary values. Make sure to preserve existing history state if you are manually calling history.replaceState:\\n\\nhistory.replaceState(history.state, '', url)\\n\\nYou can find more information at https://router.vuejs.org/guide/migration/#Usage-of-history-state\");\n\t\tchangeLocation(currentState.current, currentState, true);\n\t\tchangeLocation(to, assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data), false);\n\t\tcurrentLocation.value = to;\n\t}\n\treturn {\n\t\tlocation: currentLocation,\n\t\tstate: historyState,\n\t\tpush,\n\t\treplace\n\t};\n}\n/**\n* Creates an HTML5 history. Most common history for single page applications.\n*\n* @param base -\n*/\nfunction createWebHistory(base) {\n\tbase = normalizeBase(base);\n\tconst historyNavigation = useHistoryStateNavigation(base);\n\tconst historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace);\n\tfunction go(delta, triggerListeners = true) {\n\t\tif (!triggerListeners) historyListeners.pauseListeners();\n\t\thistory.go(delta);\n\t}\n\tconst routerHistory = assign({\n\t\tlocation: \"\",\n\t\tbase,\n\t\tgo,\n\t\tcreateHref: createHref.bind(null, base)\n\t}, historyNavigation, historyListeners);\n\tObject.defineProperty(routerHistory, \"location\", {\n\t\tenumerable: true,\n\t\tget: () => historyNavigation.location.value\n\t});\n\tObject.defineProperty(routerHistory, \"state\", {\n\t\tenumerable: true,\n\t\tget: () => historyNavigation.state.value\n\t});\n\treturn routerHistory;\n}\n\n//#endregion\n//#region src/history/memory.ts\n/**\n* Creates an in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere.\n* It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`.\n*\n* @param base - Base applied to all urls, defaults to '/'\n* @returns a history object that can be passed to the router constructor\n*/\nfunction createMemoryHistory(base = \"\") {\n\tlet listeners = [];\n\tlet queue = [[START, {}]];\n\tlet position = 0;\n\tbase = normalizeBase(base);\n\tfunction setLocation(location$1, state = {}) {\n\t\tposition++;\n\t\tif (position !== queue.length) queue.splice(position);\n\t\tqueue.push([location$1, state]);\n\t}\n\tfunction triggerListeners(to, from, { direction, delta }) {\n\t\tconst info = {\n\t\t\tdirection,\n\t\t\tdelta,\n\t\t\ttype: NavigationType.pop\n\t\t};\n\t\tfor (const callback of listeners) callback(to, from, info);\n\t}\n\tconst routerHistory = {\n\t\tlocation: START,\n\t\tstate: {},\n\t\tbase,\n\t\tcreateHref: createHref.bind(null, base),\n\t\treplace(to, state) {\n\t\t\tqueue.splice(position--, 1);\n\t\t\tsetLocation(to, state);\n\t\t},\n\t\tpush(to, state) {\n\t\t\tsetLocation(to, state);\n\t\t},\n\t\tlisten(callback) {\n\t\t\tlisteners.push(callback);\n\t\t\treturn () => {\n\t\t\t\tconst index = listeners.indexOf(callback);\n\t\t\t\tif (index > -1) listeners.splice(index, 1);\n\t\t\t};\n\t\t},\n\t\tdestroy() {\n\t\t\tlisteners = [];\n\t\t\tqueue = [[START, {}]];\n\t\t\tposition = 0;\n\t\t},\n\t\tgo(delta, shouldTrigger = true) {\n\t\t\tconst from = this.location;\n\t\t\tconst direction = delta < 0 ? NavigationDirection.back : NavigationDirection.forward;\n\t\t\tposition = Math.max(0, Math.min(position + delta, queue.length - 1));\n\t\t\tif (shouldTrigger) triggerListeners(this.location, from, {\n\t\t\t\tdirection,\n\t\t\t\tdelta\n\t\t\t});\n\t\t}\n\t};\n\tObject.defineProperty(routerHistory, \"location\", {\n\t\tenumerable: true,\n\t\tget: () => queue[position][0]\n\t});\n\tObject.defineProperty(routerHistory, \"state\", {\n\t\tenumerable: true,\n\t\tget: () => queue[position][1]\n\t});\n\treturn routerHistory;\n}\n\n//#endregion\n//#region src/history/hash.ts\n/**\n* Creates a hash history. Useful for web applications with no host (e.g. `file://`) or when configuring a server to\n* handle any URL is not possible.\n*\n* @param base - optional base to provide. Defaults to `location.pathname + location.search` If there is a `` tag\n* in the `head`, its value will be ignored in favor of this parameter **but note it affects all the history.pushState()\n* calls**, meaning that if you use a `` tag, it's `href` value **has to match this parameter** (ignoring anything\n* after the `#`).\n*\n* @example\n* ```js\n* // at https://example.com/folder\n* createWebHashHistory() // gives a url of `https://example.com/folder#`\n* createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#`\n* // if the `#` is provided in the base, it won't be added by `createWebHashHistory`\n* createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/`\n* // you should avoid doing this because it changes the original url and breaks copying urls\n* createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#`\n*\n* // at file:///usr/etc/folder/index.html\n* // for locations with no `host`, the base is ignored\n* createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#`\n* ```\n*/\nfunction createWebHashHistory(base) {\n\tbase = location.host ? base || location.pathname + location.search : \"\";\n\tif (!base.includes(\"#\")) base += \"#\";\n\tif (process.env.NODE_ENV !== \"production\" && !base.endsWith(\"#/\") && !base.endsWith(\"#\")) warn$1(`A hash base must end with a \"#\":\\n\"${base}\" should be \"${base.replace(/#.*$/, \"#\")}\".`);\n\treturn createWebHistory(base);\n}\n\n//#endregion\n//#region src/matcher/pathTokenizer.ts\nlet TokenType = /* @__PURE__ */ function(TokenType$1) {\n\tTokenType$1[TokenType$1[\"Static\"] = 0] = \"Static\";\n\tTokenType$1[TokenType$1[\"Param\"] = 1] = \"Param\";\n\tTokenType$1[TokenType$1[\"Group\"] = 2] = \"Group\";\n\treturn TokenType$1;\n}({});\nvar TokenizerState = /* @__PURE__ */ function(TokenizerState$1) {\n\tTokenizerState$1[TokenizerState$1[\"Static\"] = 0] = \"Static\";\n\tTokenizerState$1[TokenizerState$1[\"Param\"] = 1] = \"Param\";\n\tTokenizerState$1[TokenizerState$1[\"ParamRegExp\"] = 2] = \"ParamRegExp\";\n\tTokenizerState$1[TokenizerState$1[\"ParamRegExpEnd\"] = 3] = \"ParamRegExpEnd\";\n\tTokenizerState$1[TokenizerState$1[\"EscapeNext\"] = 4] = \"EscapeNext\";\n\treturn TokenizerState$1;\n}(TokenizerState || {});\nconst ROOT_TOKEN = {\n\ttype: TokenType.Static,\n\tvalue: \"\"\n};\nconst VALID_PARAM_RE = /[a-zA-Z0-9_]/;\nfunction tokenizePath(path) {\n\tif (!path) return [[]];\n\tif (path === \"/\") return [[ROOT_TOKEN]];\n\tif (!path.startsWith(\"/\")) throw new Error(process.env.NODE_ENV !== \"production\" ? `Route paths should start with a \"/\": \"${path}\" should be \"/${path}\".` : `Invalid path \"${path}\"`);\n\tfunction crash(message) {\n\t\tthrow new Error(`ERR (${state})/\"${buffer}\": ${message}`);\n\t}\n\tlet state = TokenizerState.Static;\n\tlet previousState = state;\n\tconst tokens = [];\n\tlet segment;\n\tfunction finalizeSegment() {\n\t\tif (segment) tokens.push(segment);\n\t\tsegment = [];\n\t}\n\tlet i = 0;\n\tlet char;\n\tlet buffer = \"\";\n\tlet customRe = \"\";\n\tfunction consumeBuffer() {\n\t\tif (!buffer) return;\n\t\tif (state === TokenizerState.Static) segment.push({\n\t\t\ttype: TokenType.Static,\n\t\t\tvalue: buffer\n\t\t});\n\t\telse if (state === TokenizerState.Param || state === TokenizerState.ParamRegExp || state === TokenizerState.ParamRegExpEnd) {\n\t\t\tif (segment.length > 1 && (char === \"*\" || char === \"+\")) crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);\n\t\t\tsegment.push({\n\t\t\t\ttype: TokenType.Param,\n\t\t\t\tvalue: buffer,\n\t\t\t\tregexp: customRe,\n\t\t\t\trepeatable: char === \"*\" || char === \"+\",\n\t\t\t\toptional: char === \"*\" || char === \"?\"\n\t\t\t});\n\t\t} else crash(\"Invalid state to consume buffer\");\n\t\tbuffer = \"\";\n\t}\n\tfunction addCharToBuffer() {\n\t\tbuffer += char;\n\t}\n\twhile (i < path.length) {\n\t\tchar = path[i++];\n\t\tif (char === \"\\\\\" && state !== TokenizerState.ParamRegExp) {\n\t\t\tpreviousState = state;\n\t\t\tstate = TokenizerState.EscapeNext;\n\t\t\tcontinue;\n\t\t}\n\t\tswitch (state) {\n\t\t\tcase TokenizerState.Static:\n\t\t\t\tif (char === \"/\") {\n\t\t\t\t\tif (buffer) consumeBuffer();\n\t\t\t\t\tfinalizeSegment();\n\t\t\t\t} else if (char === \":\") {\n\t\t\t\t\tconsumeBuffer();\n\t\t\t\t\tstate = TokenizerState.Param;\n\t\t\t\t} else addCharToBuffer();\n\t\t\t\tbreak;\n\t\t\tcase TokenizerState.EscapeNext:\n\t\t\t\taddCharToBuffer();\n\t\t\t\tstate = previousState;\n\t\t\t\tbreak;\n\t\t\tcase TokenizerState.Param:\n\t\t\t\tif (char === \"(\") state = TokenizerState.ParamRegExp;\n\t\t\t\telse if (VALID_PARAM_RE.test(char)) addCharToBuffer();\n\t\t\t\telse {\n\t\t\t\t\tconsumeBuffer();\n\t\t\t\t\tstate = TokenizerState.Static;\n\t\t\t\t\tif (char !== \"*\" && char !== \"?\" && char !== \"+\") i--;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase TokenizerState.ParamRegExp:\n\t\t\t\tif (char === \")\") if (customRe[customRe.length - 1] == \"\\\\\") customRe = customRe.slice(0, -1) + char;\n\t\t\t\telse state = TokenizerState.ParamRegExpEnd;\n\t\t\t\telse customRe += char;\n\t\t\t\tbreak;\n\t\t\tcase TokenizerState.ParamRegExpEnd:\n\t\t\t\tconsumeBuffer();\n\t\t\t\tstate = TokenizerState.Static;\n\t\t\t\tif (char !== \"*\" && char !== \"?\" && char !== \"+\") i--;\n\t\t\t\tcustomRe = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tcrash(\"Unknown state\");\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif (state === TokenizerState.ParamRegExp) crash(`Unfinished custom RegExp for param \"${buffer}\"`);\n\tconsumeBuffer();\n\tfinalizeSegment();\n\treturn tokens;\n}\n\n//#endregion\n//#region src/matcher/pathParserRanker.ts\nconst BASE_PARAM_PATTERN = \"[^/]+?\";\nconst BASE_PATH_PARSER_OPTIONS = {\n\tsensitive: false,\n\tstrict: false,\n\tstart: true,\n\tend: true\n};\nvar PathScore = /* @__PURE__ */ function(PathScore$1) {\n\tPathScore$1[PathScore$1[\"_multiplier\"] = 10] = \"_multiplier\";\n\tPathScore$1[PathScore$1[\"Root\"] = 90] = \"Root\";\n\tPathScore$1[PathScore$1[\"Segment\"] = 40] = \"Segment\";\n\tPathScore$1[PathScore$1[\"SubSegment\"] = 30] = \"SubSegment\";\n\tPathScore$1[PathScore$1[\"Static\"] = 40] = \"Static\";\n\tPathScore$1[PathScore$1[\"Dynamic\"] = 20] = \"Dynamic\";\n\tPathScore$1[PathScore$1[\"BonusCustomRegExp\"] = 10] = \"BonusCustomRegExp\";\n\tPathScore$1[PathScore$1[\"BonusWildcard\"] = -50] = \"BonusWildcard\";\n\tPathScore$1[PathScore$1[\"BonusRepeatable\"] = -20] = \"BonusRepeatable\";\n\tPathScore$1[PathScore$1[\"BonusOptional\"] = -8] = \"BonusOptional\";\n\tPathScore$1[PathScore$1[\"BonusStrict\"] = .7000000000000001] = \"BonusStrict\";\n\tPathScore$1[PathScore$1[\"BonusCaseSensitive\"] = .25] = \"BonusCaseSensitive\";\n\treturn PathScore$1;\n}(PathScore || {});\nconst REGEX_CHARS_RE = /[.+*?^${}()[\\]/\\\\]/g;\n/**\n* Creates a path parser from an array of Segments (a segment is an array of Tokens)\n*\n* @param segments - array of segments returned by tokenizePath\n* @param extraOptions - optional options for the regexp\n* @returns a PathParser\n*/\nfunction tokensToParser(segments, extraOptions) {\n\tconst options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions);\n\tconst score = [];\n\tlet pattern = options.start ? \"^\" : \"\";\n\tconst keys = [];\n\tfor (const segment of segments) {\n\t\tconst segmentScores = segment.length ? [] : [PathScore.Root];\n\t\tif (options.strict && !segment.length) pattern += \"/\";\n\t\tfor (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {\n\t\t\tconst token = segment[tokenIndex];\n\t\t\tlet subSegmentScore = PathScore.Segment + (options.sensitive ? PathScore.BonusCaseSensitive : 0);\n\t\t\tif (token.type === TokenType.Static) {\n\t\t\t\tif (!tokenIndex) pattern += \"/\";\n\t\t\t\tpattern += token.value.replace(REGEX_CHARS_RE, \"\\\\$&\");\n\t\t\t\tsubSegmentScore += PathScore.Static;\n\t\t\t} else if (token.type === TokenType.Param) {\n\t\t\t\tconst { value, repeatable, optional, regexp } = token;\n\t\t\t\tkeys.push({\n\t\t\t\t\tname: value,\n\t\t\t\t\trepeatable,\n\t\t\t\t\toptional\n\t\t\t\t});\n\t\t\t\tconst re$1 = regexp ? regexp : BASE_PARAM_PATTERN;\n\t\t\t\tif (re$1 !== BASE_PARAM_PATTERN) {\n\t\t\t\t\tsubSegmentScore += PathScore.BonusCustomRegExp;\n\t\t\t\t\ttry {\n\t\t\t\t\t\t`${re$1}`;\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tthrow new Error(`Invalid custom RegExp for param \"${value}\" (${re$1}): ` + err.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet subPattern = repeatable ? `((?:${re$1})(?:/(?:${re$1}))*)` : `(${re$1})`;\n\t\t\t\tif (!tokenIndex) subPattern = optional && segment.length < 2 ? `(?:/${subPattern})` : \"/\" + subPattern;\n\t\t\t\tif (optional) subPattern += \"?\";\n\t\t\t\tpattern += subPattern;\n\t\t\t\tsubSegmentScore += PathScore.Dynamic;\n\t\t\t\tif (optional) subSegmentScore += PathScore.BonusOptional;\n\t\t\t\tif (repeatable) subSegmentScore += PathScore.BonusRepeatable;\n\t\t\t\tif (re$1 === \".*\") subSegmentScore += PathScore.BonusWildcard;\n\t\t\t}\n\t\t\tsegmentScores.push(subSegmentScore);\n\t\t}\n\t\tscore.push(segmentScores);\n\t}\n\tif (options.strict && options.end) {\n\t\tconst i = score.length - 1;\n\t\tscore[i][score[i].length - 1] += PathScore.BonusStrict;\n\t}\n\tif (!options.strict) pattern += \"/?\";\n\tif (options.end) pattern += \"$\";\n\telse if (options.strict && !pattern.endsWith(\"/\")) pattern += \"(?:/|$)\";\n\tconst re = new RegExp(pattern, options.sensitive ? \"\" : \"i\");\n\tfunction parse(path) {\n\t\tconst match = path.match(re);\n\t\tconst params = {};\n\t\tif (!match) return null;\n\t\tfor (let i = 1; i < match.length; i++) {\n\t\t\tconst value = match[i] || \"\";\n\t\t\tconst key = keys[i - 1];\n\t\t\tparams[key.name] = value && key.repeatable ? value.split(\"/\") : value;\n\t\t}\n\t\treturn params;\n\t}\n\tfunction stringify(params) {\n\t\tlet path = \"\";\n\t\tlet avoidDuplicatedSlash = false;\n\t\tfor (const segment of segments) {\n\t\t\tif (!avoidDuplicatedSlash || !path.endsWith(\"/\")) path += \"/\";\n\t\t\tavoidDuplicatedSlash = false;\n\t\t\tfor (const token of segment) if (token.type === TokenType.Static) path += token.value;\n\t\t\telse if (token.type === TokenType.Param) {\n\t\t\t\tconst { value, repeatable, optional } = token;\n\t\t\t\tconst param = value in params ? params[value] : \"\";\n\t\t\t\tif (isArray(param) && !repeatable) throw new Error(`Provided param \"${value}\" is an array but it is not repeatable (* or + modifiers)`);\n\t\t\t\tconst text = isArray(param) ? param.join(\"/\") : param;\n\t\t\t\tif (!text) if (optional) {\n\t\t\t\t\tif (segment.length < 2) if (path.endsWith(\"/\")) path = path.slice(0, -1);\n\t\t\t\t\telse avoidDuplicatedSlash = true;\n\t\t\t\t} else throw new Error(`Missing required param \"${value}\"`);\n\t\t\t\tpath += text;\n\t\t\t}\n\t\t}\n\t\treturn path || \"/\";\n\t}\n\treturn {\n\t\tre,\n\t\tscore,\n\t\tkeys,\n\t\tparse,\n\t\tstringify\n\t};\n}\n/**\n* Compares an array of numbers as used in PathParser.score and returns a\n* number. This function can be used to `sort` an array\n*\n* @param a - first array of numbers\n* @param b - second array of numbers\n* @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n* should be sorted first\n*/\nfunction compareScoreArray(a, b) {\n\tlet i = 0;\n\twhile (i < a.length && i < b.length) {\n\t\tconst diff = b[i] - a[i];\n\t\tif (diff) return diff;\n\t\ti++;\n\t}\n\tif (a.length < b.length) return a.length === 1 && a[0] === PathScore.Static + PathScore.Segment ? -1 : 1;\n\telse if (a.length > b.length) return b.length === 1 && b[0] === PathScore.Static + PathScore.Segment ? 1 : -1;\n\treturn 0;\n}\n/**\n* Compare function that can be used with `sort` to sort an array of PathParser\n*\n* @param a - first PathParser\n* @param b - second PathParser\n* @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n*/\nfunction comparePathParserScore(a, b) {\n\tlet i = 0;\n\tconst aScore = a.score;\n\tconst bScore = b.score;\n\twhile (i < aScore.length && i < bScore.length) {\n\t\tconst comp = compareScoreArray(aScore[i], bScore[i]);\n\t\tif (comp) return comp;\n\t\ti++;\n\t}\n\tif (Math.abs(bScore.length - aScore.length) === 1) {\n\t\tif (isLastScoreNegative(aScore)) return 1;\n\t\tif (isLastScoreNegative(bScore)) return -1;\n\t}\n\treturn bScore.length - aScore.length;\n}\n/**\n* This allows detecting splats at the end of a path: /home/:id(.*)*\n*\n* @param score - score to check\n* @returns true if the last entry is negative\n*/\nfunction isLastScoreNegative(score) {\n\tconst last = score[score.length - 1];\n\treturn score.length > 0 && last[last.length - 1] < 0;\n}\nconst PATH_PARSER_OPTIONS_DEFAULTS = {\n\tstrict: false,\n\tend: true,\n\tsensitive: false\n};\n\n//#endregion\n//#region src/matcher/pathMatcher.ts\nfunction createRouteRecordMatcher(record, parent, options) {\n\tconst parser = tokensToParser(tokenizePath(record.path), options);\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst existingKeys = /* @__PURE__ */ new Set();\n\t\tfor (const key of parser.keys) {\n\t\t\tif (existingKeys.has(key.name)) warn$1(`Found duplicated params with name \"${key.name}\" for path \"${record.path}\". Only the last one will be available on \"$route.params\".`);\n\t\t\texistingKeys.add(key.name);\n\t\t}\n\t}\n\tconst matcher = assign(parser, {\n\t\trecord,\n\t\tparent,\n\t\tchildren: [],\n\t\talias: []\n\t});\n\tif (parent) {\n\t\tif (!matcher.record.aliasOf === !parent.record.aliasOf) parent.children.push(matcher);\n\t}\n\treturn matcher;\n}\n\n//#endregion\n//#region src/matcher/index.ts\n/**\n* Creates a Router Matcher.\n*\n* @internal\n* @param routes - array of initial routes\n* @param globalOptions - global route options\n*/\nfunction createRouterMatcher(routes, globalOptions) {\n\tconst matchers = [];\n\tconst matcherMap = /* @__PURE__ */ new Map();\n\tglobalOptions = mergeOptions(PATH_PARSER_OPTIONS_DEFAULTS, globalOptions);\n\tfunction getRecordMatcher(name) {\n\t\treturn matcherMap.get(name);\n\t}\n\tfunction addRoute(record, parent, originalRecord) {\n\t\tconst isRootAdd = !originalRecord;\n\t\tconst mainNormalizedRecord = normalizeRouteRecord(record);\n\t\tif (process.env.NODE_ENV !== \"production\") checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent);\n\t\tmainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;\n\t\tconst options = mergeOptions(globalOptions, record);\n\t\tconst normalizedRecords = [mainNormalizedRecord];\n\t\tif (\"alias\" in record) {\n\t\t\tconst aliases = typeof record.alias === \"string\" ? [record.alias] : record.alias;\n\t\t\tfor (const alias of aliases) normalizedRecords.push(normalizeRouteRecord(assign({}, mainNormalizedRecord, {\n\t\t\t\tcomponents: originalRecord ? originalRecord.record.components : mainNormalizedRecord.components,\n\t\t\t\tpath: alias,\n\t\t\t\taliasOf: originalRecord ? originalRecord.record : mainNormalizedRecord\n\t\t\t})));\n\t\t}\n\t\tlet matcher;\n\t\tlet originalMatcher;\n\t\tfor (const normalizedRecord of normalizedRecords) {\n\t\t\tconst { path } = normalizedRecord;\n\t\t\tif (parent && path[0] !== \"/\") {\n\t\t\t\tconst parentPath = parent.record.path;\n\t\t\t\tconst connectingSlash = parentPath[parentPath.length - 1] === \"/\" ? \"\" : \"/\";\n\t\t\t\tnormalizedRecord.path = parent.record.path + (path && connectingSlash + path);\n\t\t\t}\n\t\t\tif (process.env.NODE_ENV !== \"production\" && normalizedRecord.path === \"*\") throw new Error(\"Catch all routes (\\\"*\\\") must now be defined using a param with a custom regexp.\\nSee more at https://router.vuejs.org/guide/migration/#Removed-star-or-catch-all-routes.\");\n\t\t\tmatcher = createRouteRecordMatcher(normalizedRecord, parent, options);\n\t\t\tif (process.env.NODE_ENV !== \"production\" && parent && path[0] === \"/\") checkMissingParamsInAbsolutePath(matcher, parent);\n\t\t\tif (originalRecord) {\n\t\t\t\toriginalRecord.alias.push(matcher);\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") checkSameParams(originalRecord, matcher);\n\t\t\t} else {\n\t\t\t\toriginalMatcher = originalMatcher || matcher;\n\t\t\t\tif (originalMatcher !== matcher) originalMatcher.alias.push(matcher);\n\t\t\t\tif (isRootAdd && record.name && !isAliasRecord(matcher)) {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") checkSameNameAsAncestor(record, parent);\n\t\t\t\t\tremoveRoute(record.name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isMatchable(matcher)) insertMatcher(matcher);\n\t\t\tif (mainNormalizedRecord.children) {\n\t\t\t\tconst children = mainNormalizedRecord.children;\n\t\t\t\tfor (let i = 0; i < children.length; i++) addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);\n\t\t\t}\n\t\t\toriginalRecord = originalRecord || matcher;\n\t\t}\n\t\treturn originalMatcher ? () => {\n\t\t\tremoveRoute(originalMatcher);\n\t\t} : noop;\n\t}\n\tfunction removeRoute(matcherRef) {\n\t\tif (isRouteName(matcherRef)) {\n\t\t\tconst matcher = matcherMap.get(matcherRef);\n\t\t\tif (matcher) {\n\t\t\t\tmatcherMap.delete(matcherRef);\n\t\t\t\tmatchers.splice(matchers.indexOf(matcher), 1);\n\t\t\t\tmatcher.children.forEach(removeRoute);\n\t\t\t\tmatcher.alias.forEach(removeRoute);\n\t\t\t}\n\t\t} else {\n\t\t\tconst index = matchers.indexOf(matcherRef);\n\t\t\tif (index > -1) {\n\t\t\t\tmatchers.splice(index, 1);\n\t\t\t\tif (matcherRef.record.name) matcherMap.delete(matcherRef.record.name);\n\t\t\t\tmatcherRef.children.forEach(removeRoute);\n\t\t\t\tmatcherRef.alias.forEach(removeRoute);\n\t\t\t}\n\t\t}\n\t}\n\tfunction getRoutes() {\n\t\treturn matchers;\n\t}\n\tfunction insertMatcher(matcher) {\n\t\tconst index = findInsertionIndex(matcher, matchers);\n\t\tmatchers.splice(index, 0, matcher);\n\t\tif (matcher.record.name && !isAliasRecord(matcher)) matcherMap.set(matcher.record.name, matcher);\n\t}\n\tfunction resolve(location$1, currentLocation) {\n\t\tlet matcher;\n\t\tlet params = {};\n\t\tlet path;\n\t\tlet name;\n\t\tif (\"name\" in location$1 && location$1.name) {\n\t\t\tmatcher = matcherMap.get(location$1.name);\n\t\t\tif (!matcher) throw createRouterError(ErrorTypes.MATCHER_NOT_FOUND, { location: location$1 });\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\t\tconst invalidParams = Object.keys(location$1.params || {}).filter((paramName) => !matcher.keys.find((k) => k.name === paramName));\n\t\t\t\tif (invalidParams.length) warn$1(`Discarded invalid param(s) \"${invalidParams.join(\"\\\", \\\"\")}\" when navigating. See https://github.com/vuejs/router/blob/main/packages/router/CHANGELOG.md#414-2022-08-22 for more details.`);\n\t\t\t}\n\t\t\tname = matcher.record.name;\n\t\t\tparams = assign(pickParams(currentLocation.params, matcher.keys.filter((k) => !k.optional).concat(matcher.parent ? matcher.parent.keys.filter((k) => k.optional) : []).map((k) => k.name)), location$1.params && pickParams(location$1.params, matcher.keys.map((k) => k.name)));\n\t\t\tpath = matcher.stringify(params);\n\t\t} else if (location$1.path != null) {\n\t\t\tpath = location$1.path;\n\t\t\tif (process.env.NODE_ENV !== \"production\" && !path.startsWith(\"/\")) warn$1(`The Matcher cannot resolve relative paths but received \"${path}\". Unless you directly called \\`matcher.resolve(\"${path}\")\\`, this is probably a bug in vue-router. Please open an issue at https://github.com/vuejs/router/issues/new/choose.`);\n\t\t\tmatcher = matchers.find((m) => m.re.test(path));\n\t\t\tif (matcher) {\n\t\t\t\tparams = matcher.parse(path);\n\t\t\t\tname = matcher.record.name;\n\t\t\t}\n\t\t} else {\n\t\t\tmatcher = currentLocation.name ? matcherMap.get(currentLocation.name) : matchers.find((m) => m.re.test(currentLocation.path));\n\t\t\tif (!matcher) throw createRouterError(ErrorTypes.MATCHER_NOT_FOUND, {\n\t\t\t\tlocation: location$1,\n\t\t\t\tcurrentLocation\n\t\t\t});\n\t\t\tname = matcher.record.name;\n\t\t\tparams = assign({}, currentLocation.params, location$1.params);\n\t\t\tpath = matcher.stringify(params);\n\t\t}\n\t\tconst matched = [];\n\t\tlet parentMatcher = matcher;\n\t\twhile (parentMatcher) {\n\t\t\tmatched.unshift(parentMatcher.record);\n\t\t\tparentMatcher = parentMatcher.parent;\n\t\t}\n\t\treturn {\n\t\t\tname,\n\t\t\tpath,\n\t\t\tparams,\n\t\t\tmatched,\n\t\t\tmeta: mergeMetaFields(matched)\n\t\t};\n\t}\n\troutes.forEach((route) => addRoute(route));\n\tfunction clearRoutes() {\n\t\tmatchers.length = 0;\n\t\tmatcherMap.clear();\n\t}\n\treturn {\n\t\taddRoute,\n\t\tresolve,\n\t\tremoveRoute,\n\t\tclearRoutes,\n\t\tgetRoutes,\n\t\tgetRecordMatcher\n\t};\n}\n/**\n* Picks an object param to contain only specified keys.\n*\n* @param params - params object to pick from\n* @param keys - keys to pick\n*/\nfunction pickParams(params, keys) {\n\tconst newParams = {};\n\tfor (const key of keys) if (key in params) newParams[key] = params[key];\n\treturn newParams;\n}\n/**\n* Normalizes a RouteRecordRaw. Creates a copy\n*\n* @param record\n* @returns the normalized version\n*/\nfunction normalizeRouteRecord(record) {\n\tconst normalized = {\n\t\tpath: record.path,\n\t\tredirect: record.redirect,\n\t\tname: record.name,\n\t\tmeta: record.meta || {},\n\t\taliasOf: record.aliasOf,\n\t\tbeforeEnter: record.beforeEnter,\n\t\tprops: normalizeRecordProps(record),\n\t\tchildren: record.children || [],\n\t\tinstances: {},\n\t\tleaveGuards: /* @__PURE__ */ new Set(),\n\t\tupdateGuards: /* @__PURE__ */ new Set(),\n\t\tenterCallbacks: {},\n\t\tcomponents: \"components\" in record ? record.components || null : record.component && { default: record.component }\n\t};\n\tObject.defineProperty(normalized, \"mods\", { value: {} });\n\treturn normalized;\n}\n/**\n* Normalize the optional `props` in a record to always be an object similar to\n* components. Also accept a boolean for components.\n* @param record\n*/\nfunction normalizeRecordProps(record) {\n\tconst propsObject = {};\n\tconst props = record.props || false;\n\tif (\"component\" in record) propsObject.default = props;\n\telse for (const name in record.components) propsObject[name] = typeof props === \"object\" ? props[name] : props;\n\treturn propsObject;\n}\n/**\n* Checks if a record or any of its parent is an alias\n* @param record\n*/\nfunction isAliasRecord(record) {\n\twhile (record) {\n\t\tif (record.record.aliasOf) return true;\n\t\trecord = record.parent;\n\t}\n\treturn false;\n}\n/**\n* Merge meta fields of an array of records\n*\n* @param matched - array of matched records\n*/\nfunction mergeMetaFields(matched) {\n\treturn matched.reduce((meta, record) => assign(meta, record.meta), {});\n}\nfunction isSameParam(a, b) {\n\treturn a.name === b.name && a.optional === b.optional && a.repeatable === b.repeatable;\n}\n/**\n* Check if a path and its alias have the same required params\n*\n* @param a - original record\n* @param b - alias record\n*/\nfunction checkSameParams(a, b) {\n\tfor (const key of a.keys) if (!key.optional && !b.keys.find(isSameParam.bind(null, key))) return warn$1(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\n\tfor (const key of b.keys) if (!key.optional && !a.keys.find(isSameParam.bind(null, key))) return warn$1(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\n}\n/**\n* A route with a name and a child with an empty path without a name should warn when adding the route\n*\n* @param mainNormalizedRecord - RouteRecordNormalized\n* @param parent - RouteRecordMatcher\n*/\nfunction checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent) {\n\tif (parent && parent.record.name && !mainNormalizedRecord.name && !mainNormalizedRecord.path) warn$1(`The route named \"${String(parent.record.name)}\" has a child without a name and an empty path. Using that name won't render the empty path child so you probably want to move the name to the child instead. If this is intentional, add a name to the child route to remove the warning.`);\n}\nfunction checkSameNameAsAncestor(record, parent) {\n\tfor (let ancestor = parent; ancestor; ancestor = ancestor.parent) if (ancestor.record.name === record.name) throw new Error(`A route named \"${String(record.name)}\" has been added as a ${parent === ancestor ? \"child\" : \"descendant\"} of a route with the same name. Route names must be unique and a nested route cannot use the same name as an ancestor.`);\n}\nfunction checkMissingParamsInAbsolutePath(record, parent) {\n\tfor (const key of parent.keys) if (!record.keys.find(isSameParam.bind(null, key))) return warn$1(`Absolute path \"${record.record.path}\" must have the exact same param named \"${key.name}\" as its parent \"${parent.record.path}\".`);\n}\n/**\n* Performs a binary search to find the correct insertion index for a new matcher.\n*\n* Matchers are primarily sorted by their score. If scores are tied then we also consider parent/child relationships,\n* with descendants coming before ancestors. If there's still a tie, new routes are inserted after existing routes.\n*\n* @param matcher - new matcher to be inserted\n* @param matchers - existing matchers\n*/\nfunction findInsertionIndex(matcher, matchers) {\n\tlet lower = 0;\n\tlet upper = matchers.length;\n\twhile (lower !== upper) {\n\t\tconst mid = lower + upper >> 1;\n\t\tif (comparePathParserScore(matcher, matchers[mid]) < 0) upper = mid;\n\t\telse lower = mid + 1;\n\t}\n\tconst insertionAncestor = getInsertionAncestor(matcher);\n\tif (insertionAncestor) {\n\t\tupper = matchers.lastIndexOf(insertionAncestor, upper - 1);\n\t\tif (process.env.NODE_ENV !== \"production\" && upper < 0) warn$1(`Finding ancestor route \"${insertionAncestor.record.path}\" failed for \"${matcher.record.path}\"`);\n\t}\n\treturn upper;\n}\nfunction getInsertionAncestor(matcher) {\n\tlet ancestor = matcher;\n\twhile (ancestor = ancestor.parent) if (isMatchable(ancestor) && comparePathParserScore(matcher, ancestor) === 0) return ancestor;\n}\n/**\n* Checks if a matcher can be reachable. This means if it's possible to reach it as a route. For example, routes without\n* a component, or name, or redirect, are just used to group other routes.\n* @param matcher\n* @param matcher.record record of the matcher\n* @returns\n*/\nfunction isMatchable({ record }) {\n\treturn !!(record.name || record.components && Object.keys(record.components).length || record.redirect);\n}\n\n//#endregion\n//#region src/RouterLink.ts\n/**\n* Returns the internal behavior of a {@link RouterLink} without the rendering part.\n*\n* @param props - a `to` location and an optional `replace` flag\n*/\nfunction useLink(props) {\n\tconst router = inject(routerKey);\n\tconst currentRoute = inject(routeLocationKey);\n\tlet hasPrevious = false;\n\tlet previousTo = null;\n\tconst route = computed(() => {\n\t\tconst to = unref(props.to);\n\t\tif (process.env.NODE_ENV !== \"production\" && (!hasPrevious || to !== previousTo)) {\n\t\t\tif (!isRouteLocation(to)) if (hasPrevious) warn$1(`Invalid value for prop \"to\" in useLink()\\n- to:`, to, `\\n- previous to:`, previousTo, `\\n- props:`, props);\n\t\t\telse warn$1(`Invalid value for prop \"to\" in useLink()\\n- to:`, to, `\\n- props:`, props);\n\t\t\tpreviousTo = to;\n\t\t\thasPrevious = true;\n\t\t}\n\t\treturn router.resolve(to);\n\t});\n\tconst activeRecordIndex = computed(() => {\n\t\tconst { matched } = route.value;\n\t\tconst { length } = matched;\n\t\tconst routeMatched = matched[length - 1];\n\t\tconst currentMatched = currentRoute.matched;\n\t\tif (!routeMatched || !currentMatched.length) return -1;\n\t\tconst index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));\n\t\tif (index > -1) return index;\n\t\tconst parentRecordPath = getOriginalPath(matched[length - 2]);\n\t\treturn length > 1 && getOriginalPath(routeMatched) === parentRecordPath && currentMatched[currentMatched.length - 1].path !== parentRecordPath ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2])) : index;\n\t});\n\tconst isActive = computed(() => activeRecordIndex.value > -1 && includesParams(currentRoute.params, route.value.params));\n\tconst isExactActive = computed(() => activeRecordIndex.value > -1 && activeRecordIndex.value === currentRoute.matched.length - 1 && isSameRouteLocationParams(currentRoute.params, route.value.params));\n\tfunction navigate(e = {}) {\n\t\tif (guardEvent(e)) {\n\t\t\tconst p = router[unref(props.replace) ? \"replace\" : \"push\"](unref(props.to)).catch(noop);\n\t\t\tif (props.viewTransition && typeof document !== \"undefined\" && \"startViewTransition\" in document) document.startViewTransition(() => p);\n\t\t\treturn p;\n\t\t}\n\t\treturn Promise.resolve();\n\t}\n\tif ((process.env.NODE_ENV !== \"production\" || __VUE_PROD_DEVTOOLS__) && isBrowser) {\n\t\tconst instance = getCurrentInstance();\n\t\tif (instance) {\n\t\t\tconst linkContextDevtools = {\n\t\t\t\troute: route.value,\n\t\t\t\tisActive: isActive.value,\n\t\t\t\tisExactActive: isExactActive.value,\n\t\t\t\terror: null\n\t\t\t};\n\t\t\tinstance.__vrl_devtools = instance.__vrl_devtools || [];\n\t\t\tinstance.__vrl_devtools.push(linkContextDevtools);\n\t\t\twatchEffect(() => {\n\t\t\t\tlinkContextDevtools.route = route.value;\n\t\t\t\tlinkContextDevtools.isActive = isActive.value;\n\t\t\t\tlinkContextDevtools.isExactActive = isExactActive.value;\n\t\t\t\tlinkContextDevtools.error = isRouteLocation(unref(props.to)) ? null : \"Invalid \\\"to\\\" value\";\n\t\t\t}, { flush: \"post\" });\n\t\t}\n\t}\n\t/**\n\t* NOTE: update {@link _RouterLinkI}'s `$slots` type when updating this\n\t*/\n\treturn {\n\t\troute,\n\t\thref: computed(() => route.value.href),\n\t\tisActive,\n\t\tisExactActive,\n\t\tnavigate\n\t};\n}\nfunction preferSingleVNode(vnodes) {\n\treturn vnodes.length === 1 ? vnodes[0] : vnodes;\n}\nconst RouterLinkImpl = /* @__PURE__ */ defineComponent({\n\tname: \"RouterLink\",\n\tcompatConfig: { MODE: 3 },\n\tprops: {\n\t\tto: {\n\t\t\ttype: [String, Object],\n\t\t\trequired: true\n\t\t},\n\t\treplace: Boolean,\n\t\tactiveClass: String,\n\t\texactActiveClass: String,\n\t\tcustom: Boolean,\n\t\tariaCurrentValue: {\n\t\t\ttype: String,\n\t\t\tdefault: \"page\"\n\t\t},\n\t\tviewTransition: Boolean\n\t},\n\tuseLink,\n\tsetup(props, { slots }) {\n\t\tconst link = reactive(useLink(props));\n\t\tconst { options } = inject(routerKey);\n\t\tconst elClass = computed(() => ({\n\t\t\t[getLinkClass(props.activeClass, options.linkActiveClass, \"router-link-active\")]: link.isActive,\n\t\t\t[getLinkClass(props.exactActiveClass, options.linkExactActiveClass, \"router-link-exact-active\")]: link.isExactActive\n\t\t}));\n\t\treturn () => {\n\t\t\tconst children = slots.default && preferSingleVNode(slots.default(link));\n\t\t\treturn props.custom ? children : h(\"a\", {\n\t\t\t\t\"aria-current\": link.isExactActive ? props.ariaCurrentValue : null,\n\t\t\t\thref: link.href,\n\t\t\t\tonClick: link.navigate,\n\t\t\t\tclass: elClass.value\n\t\t\t}, children);\n\t\t};\n\t}\n});\n/**\n* Component to render a link that triggers a navigation on click.\n*/\nconst RouterLink = RouterLinkImpl;\nfunction guardEvent(e) {\n\tif (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return;\n\tif (e.defaultPrevented) return;\n\tif (e.button !== void 0 && e.button !== 0) return;\n\tif (e.currentTarget && e.currentTarget.getAttribute) {\n\t\tconst target = e.currentTarget.getAttribute(\"target\");\n\t\tif (/\\b_blank\\b/i.test(target)) return;\n\t}\n\tif (e.preventDefault) e.preventDefault();\n\treturn true;\n}\nfunction includesParams(outer, inner) {\n\tfor (const key in inner) {\n\t\tconst innerValue = inner[key];\n\t\tconst outerValue = outer[key];\n\t\tif (typeof innerValue === \"string\") {\n\t\t\tif (innerValue !== outerValue) return false;\n\t\t} else if (!isArray(outerValue) || outerValue.length !== innerValue.length || innerValue.some((value, i) => value.valueOf() !== outerValue[i].valueOf())) return false;\n\t}\n\treturn true;\n}\n/**\n* Get the original path value of a record by following its aliasOf\n* @param record\n*/\nfunction getOriginalPath(record) {\n\treturn record ? record.aliasOf ? record.aliasOf.path : record.path : \"\";\n}\n/**\n* Utility class to get the active class based on defaults.\n* @param propClass\n* @param globalClass\n* @param defaultClass\n*/\nconst getLinkClass = (propClass, globalClass, defaultClass) => propClass != null ? propClass : globalClass != null ? globalClass : defaultClass;\n\n//#endregion\n//#region src/RouterView.ts\nconst RouterViewImpl = /* @__PURE__ */ defineComponent({\n\tname: \"RouterView\",\n\tinheritAttrs: false,\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\tdefault: \"default\"\n\t\t},\n\t\troute: Object\n\t},\n\tcompatConfig: { MODE: 3 },\n\tsetup(props, { attrs, slots }) {\n\t\tprocess.env.NODE_ENV !== \"production\" && warnDeprecatedUsage();\n\t\tconst injectedRoute = inject(routerViewLocationKey);\n\t\tconst routeToDisplay = computed(() => props.route || injectedRoute.value);\n\t\tconst injectedDepth = inject(viewDepthKey, 0);\n\t\tconst depth = computed(() => {\n\t\t\tlet initialDepth = unref(injectedDepth);\n\t\t\tconst { matched } = routeToDisplay.value;\n\t\t\tlet matchedRoute;\n\t\t\twhile ((matchedRoute = matched[initialDepth]) && !matchedRoute.components) initialDepth++;\n\t\t\treturn initialDepth;\n\t\t});\n\t\tconst matchedRouteRef = computed(() => routeToDisplay.value.matched[depth.value]);\n\t\tprovide(viewDepthKey, computed(() => depth.value + 1));\n\t\tprovide(matchedRouteKey, matchedRouteRef);\n\t\tprovide(routerViewLocationKey, routeToDisplay);\n\t\tconst viewRef = ref();\n\t\twatch(() => [\n\t\t\tviewRef.value,\n\t\t\tmatchedRouteRef.value,\n\t\t\tprops.name\n\t\t], ([instance, to, name], [oldInstance, from, oldName]) => {\n\t\t\tif (to) {\n\t\t\t\tto.instances[name] = instance;\n\t\t\t\tif (from && from !== to && instance && instance === oldInstance) {\n\t\t\t\t\tif (!to.leaveGuards.size) to.leaveGuards = from.leaveGuards;\n\t\t\t\t\tif (!to.updateGuards.size) to.updateGuards = from.updateGuards;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (instance && to && (!from || !isSameRouteRecord(to, from) || !oldInstance)) (to.enterCallbacks[name] || []).forEach((callback) => callback(instance));\n\t\t}, { flush: \"post\" });\n\t\treturn () => {\n\t\t\tconst route = routeToDisplay.value;\n\t\t\tconst currentName = props.name;\n\t\t\tconst matchedRoute = matchedRouteRef.value;\n\t\t\tconst ViewComponent = matchedRoute && matchedRoute.components[currentName];\n\t\t\tif (!ViewComponent) return normalizeSlot(slots.default, {\n\t\t\t\tComponent: ViewComponent,\n\t\t\t\troute\n\t\t\t});\n\t\t\tconst routePropsOption = matchedRoute.props[currentName];\n\t\t\tconst routeProps = routePropsOption ? routePropsOption === true ? route.params : typeof routePropsOption === \"function\" ? routePropsOption(route) : routePropsOption : null;\n\t\t\tconst onVnodeUnmounted = (vnode) => {\n\t\t\t\tif (vnode.component.isUnmounted) matchedRoute.instances[currentName] = null;\n\t\t\t};\n\t\t\tconst component = h(ViewComponent, assign({}, routeProps, attrs, {\n\t\t\t\tonVnodeUnmounted,\n\t\t\t\tref: viewRef\n\t\t\t}));\n\t\t\tif ((process.env.NODE_ENV !== \"production\" || __VUE_PROD_DEVTOOLS__) && isBrowser && component.ref) {\n\t\t\t\tconst info = {\n\t\t\t\t\tdepth: depth.value,\n\t\t\t\t\tname: matchedRoute.name,\n\t\t\t\t\tpath: matchedRoute.path,\n\t\t\t\t\tmeta: matchedRoute.meta\n\t\t\t\t};\n\t\t\t\t(isArray(component.ref) ? component.ref.map((r) => r.i) : [component.ref.i]).forEach((instance) => {\n\t\t\t\t\tinstance.__vrv_devtools = info;\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn normalizeSlot(slots.default, {\n\t\t\t\tComponent: component,\n\t\t\t\troute\n\t\t\t}) || component;\n\t\t};\n\t}\n});\nfunction normalizeSlot(slot, data) {\n\tif (!slot) return null;\n\tconst slotContent = slot(data);\n\treturn slotContent.length === 1 ? slotContent[0] : slotContent;\n}\n/**\n* Component to display the current route the user is at.\n*/\nconst RouterView = RouterViewImpl;\nfunction warnDeprecatedUsage() {\n\tconst instance = getCurrentInstance();\n\tconst parentName = instance.parent && instance.parent.type.name;\n\tconst parentSubTreeType = instance.parent && instance.parent.subTree && instance.parent.subTree.type;\n\tif (parentName && (parentName === \"KeepAlive\" || parentName.includes(\"Transition\")) && typeof parentSubTreeType === \"object\" && parentSubTreeType.name === \"RouterView\") {\n\t\tconst comp = parentName === \"KeepAlive\" ? \"keep-alive\" : \"transition\";\n\t\twarn$1(` can no longer be used directly inside or .\nUse slot props instead:\n\n\n <${comp}>\\n \\n \\n`);\n\t}\n}\n\n//#endregion\n//#region src/router.ts\n/**\n* Creates a Router instance that can be used by a Vue app.\n*\n* @param options - {@link RouterOptions}\n*/\nfunction createRouter(options) {\n\tconst matcher = createRouterMatcher(options.routes, options);\n\tconst parseQuery$1 = options.parseQuery || parseQuery;\n\tconst stringifyQuery$1 = options.stringifyQuery || stringifyQuery;\n\tconst routerHistory = options.history;\n\tif (process.env.NODE_ENV !== \"production\" && !routerHistory) throw new Error(\"Provide the \\\"history\\\" option when calling \\\"createRouter()\\\": https://router.vuejs.org/api/interfaces/RouterOptions.html#history\");\n\tconst beforeGuards = useCallbacks();\n\tconst beforeResolveGuards = useCallbacks();\n\tconst afterGuards = useCallbacks();\n\tconst currentRoute = shallowRef(START_LOCATION_NORMALIZED);\n\tlet pendingLocation = START_LOCATION_NORMALIZED;\n\tif (isBrowser && options.scrollBehavior && \"scrollRestoration\" in history) history.scrollRestoration = \"manual\";\n\tconst normalizeParams = applyToParams.bind(null, (paramValue) => \"\" + paramValue);\n\tconst encodeParams = applyToParams.bind(null, encodeParam);\n\tconst decodeParams = applyToParams.bind(null, decode);\n\tfunction addRoute(parentOrRoute, route) {\n\t\tlet parent;\n\t\tlet record;\n\t\tif (isRouteName(parentOrRoute)) {\n\t\t\tparent = matcher.getRecordMatcher(parentOrRoute);\n\t\t\tif (process.env.NODE_ENV !== \"production\" && !parent) warn$1(`Parent route \"${String(parentOrRoute)}\" not found when adding child route`, route);\n\t\t\trecord = route;\n\t\t} else record = parentOrRoute;\n\t\treturn matcher.addRoute(record, parent);\n\t}\n\tfunction removeRoute(name) {\n\t\tconst recordMatcher = matcher.getRecordMatcher(name);\n\t\tif (recordMatcher) matcher.removeRoute(recordMatcher);\n\t\telse if (process.env.NODE_ENV !== \"production\") warn$1(`Cannot remove non-existent route \"${String(name)}\"`);\n\t}\n\tfunction getRoutes() {\n\t\treturn matcher.getRoutes().map((routeMatcher) => routeMatcher.record);\n\t}\n\tfunction hasRoute(name) {\n\t\treturn !!matcher.getRecordMatcher(name);\n\t}\n\tfunction resolve(rawLocation, currentLocation) {\n\t\tcurrentLocation = assign({}, currentLocation || currentRoute.value);\n\t\tif (typeof rawLocation === \"string\") {\n\t\t\tconst locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);\n\t\t\tconst matchedRoute$1 = matcher.resolve({ path: locationNormalized.path }, currentLocation);\n\t\t\tconst href$1 = routerHistory.createHref(locationNormalized.fullPath);\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\t\tif (href$1.startsWith(\"//\")) warn$1(`Location \"${rawLocation}\" resolved to \"${href$1}\". A resolved location cannot start with multiple slashes.`);\n\t\t\t\telse if (!matchedRoute$1.matched.length) warn$1(`No match found for location with path \"${rawLocation}\"`);\n\t\t\t}\n\t\t\treturn assign(locationNormalized, matchedRoute$1, {\n\t\t\t\tparams: decodeParams(matchedRoute$1.params),\n\t\t\t\thash: decode(locationNormalized.hash),\n\t\t\t\tredirectedFrom: void 0,\n\t\t\t\thref: href$1\n\t\t\t});\n\t\t}\n\t\tif (process.env.NODE_ENV !== \"production\" && !isRouteLocation(rawLocation)) {\n\t\t\twarn$1(`router.resolve() was passed an invalid location. This will fail in production.\\n- Location:`, rawLocation);\n\t\t\treturn resolve({});\n\t\t}\n\t\tlet matcherLocation;\n\t\tif (rawLocation.path != null) {\n\t\t\tif (process.env.NODE_ENV !== \"production\" && \"params\" in rawLocation && !(\"name\" in rawLocation) && Object.keys(rawLocation.params).length) warn$1(`Path \"${rawLocation.path}\" was passed with params but they will be ignored. Use a named route alongside params instead.`);\n\t\t\tmatcherLocation = assign({}, rawLocation, { path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path });\n\t\t} else {\n\t\t\tconst targetParams = assign({}, rawLocation.params);\n\t\t\tfor (const key in targetParams) if (targetParams[key] == null) delete targetParams[key];\n\t\t\tmatcherLocation = assign({}, rawLocation, { params: encodeParams(targetParams) });\n\t\t\tcurrentLocation.params = encodeParams(currentLocation.params);\n\t\t}\n\t\tconst matchedRoute = matcher.resolve(matcherLocation, currentLocation);\n\t\tconst hash = rawLocation.hash || \"\";\n\t\tif (process.env.NODE_ENV !== \"production\" && hash && !hash.startsWith(\"#\")) warn$1(`A \\`hash\\` should always start with the character \"#\". Replace \"${hash}\" with \"#${hash}\".`);\n\t\tmatchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));\n\t\tconst fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, {\n\t\t\thash: encodeHash(hash),\n\t\t\tpath: matchedRoute.path\n\t\t}));\n\t\tconst href = routerHistory.createHref(fullPath);\n\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\tif (href.startsWith(\"//\")) warn$1(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\n\t\t\telse if (!matchedRoute.matched.length) warn$1(`No match found for location with path \"${rawLocation.path != null ? rawLocation.path : rawLocation}\"`);\n\t\t}\n\t\treturn assign({\n\t\t\tfullPath,\n\t\t\thash,\n\t\t\tquery: stringifyQuery$1 === stringifyQuery ? normalizeQuery(rawLocation.query) : rawLocation.query || {}\n\t\t}, matchedRoute, {\n\t\t\tredirectedFrom: void 0,\n\t\t\thref\n\t\t});\n\t}\n\tfunction locationAsObject(to) {\n\t\treturn typeof to === \"string\" ? parseURL(parseQuery$1, to, currentRoute.value.path) : assign({}, to);\n\t}\n\tfunction checkCanceledNavigation(to, from) {\n\t\tif (pendingLocation !== to) return createRouterError(ErrorTypes.NAVIGATION_CANCELLED, {\n\t\t\tfrom,\n\t\t\tto\n\t\t});\n\t}\n\tfunction push(to) {\n\t\treturn pushWithRedirect(to);\n\t}\n\tfunction replace(to) {\n\t\treturn push(assign(locationAsObject(to), { replace: true }));\n\t}\n\tfunction handleRedirectRecord(to, from) {\n\t\tconst lastMatched = to.matched[to.matched.length - 1];\n\t\tif (lastMatched && lastMatched.redirect) {\n\t\t\tconst { redirect } = lastMatched;\n\t\t\tlet newTargetLocation = typeof redirect === \"function\" ? redirect(to, from) : redirect;\n\t\t\tif (typeof newTargetLocation === \"string\") {\n\t\t\t\tnewTargetLocation = newTargetLocation.includes(\"?\") || newTargetLocation.includes(\"#\") ? newTargetLocation = locationAsObject(newTargetLocation) : { path: newTargetLocation };\n\t\t\t\tnewTargetLocation.params = {};\n\t\t\t}\n\t\t\tif (process.env.NODE_ENV !== \"production\" && newTargetLocation.path == null && !(\"name\" in newTargetLocation)) {\n\t\t\t\twarn$1(`Invalid redirect found:\\n${JSON.stringify(newTargetLocation, null, 2)}\\n when navigating to \"${to.fullPath}\". A redirect must contain a name or path. This will break in production.`);\n\t\t\t\tthrow new Error(\"Invalid redirect\");\n\t\t\t}\n\t\t\treturn assign({\n\t\t\t\tquery: to.query,\n\t\t\t\thash: to.hash,\n\t\t\t\tparams: newTargetLocation.path != null ? {} : to.params\n\t\t\t}, newTargetLocation);\n\t\t}\n\t}\n\tfunction pushWithRedirect(to, redirectedFrom) {\n\t\tconst targetLocation = pendingLocation = resolve(to);\n\t\tconst from = currentRoute.value;\n\t\tconst data = to.state;\n\t\tconst force = to.force;\n\t\tconst replace$1 = to.replace === true;\n\t\tconst shouldRedirect = handleRedirectRecord(targetLocation, from);\n\t\tif (shouldRedirect) return pushWithRedirect(assign(locationAsObject(shouldRedirect), {\n\t\t\tstate: typeof shouldRedirect === \"object\" ? assign({}, data, shouldRedirect.state) : data,\n\t\t\tforce,\n\t\t\treplace: replace$1\n\t\t}), redirectedFrom || targetLocation);\n\t\tconst toLocation = targetLocation;\n\t\ttoLocation.redirectedFrom = redirectedFrom;\n\t\tlet failure;\n\t\tif (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) {\n\t\t\tfailure = createRouterError(ErrorTypes.NAVIGATION_DUPLICATED, {\n\t\t\t\tto: toLocation,\n\t\t\t\tfrom\n\t\t\t});\n\t\t\thandleScroll(from, from, true, false);\n\t\t}\n\t\treturn (failure ? Promise.resolve(failure) : navigate(toLocation, from)).catch((error) => isNavigationFailure(error) ? isNavigationFailure(error, ErrorTypes.NAVIGATION_GUARD_REDIRECT) ? error : markAsReady(error) : triggerError(error, toLocation, from)).then((failure$1) => {\n\t\t\tif (failure$1) {\n\t\t\t\tif (isNavigationFailure(failure$1, ErrorTypes.NAVIGATION_GUARD_REDIRECT)) {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\" && isSameRouteLocation(stringifyQuery$1, resolve(failure$1.to), toLocation) && redirectedFrom && (redirectedFrom._count = redirectedFrom._count ? redirectedFrom._count + 1 : 1) > 30) {\n\t\t\t\t\t\twarn$1(`Detected a possibly infinite redirection in a navigation guard when going from \"${from.fullPath}\" to \"${toLocation.fullPath}\". Aborting to avoid a Stack Overflow.\\n Are you always returning a new location within a navigation guard? That would lead to this error. Only return when redirecting or aborting, that should fix this. This might break in production if not fixed.`);\n\t\t\t\t\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Infinite redirect in navigation guard\"));\n\t\t\t\t\t}\n\t\t\t\t\treturn pushWithRedirect(assign({ replace: replace$1 }, locationAsObject(failure$1.to), {\n\t\t\t\t\t\tstate: typeof failure$1.to === \"object\" ? assign({}, data, failure$1.to.state) : data,\n\t\t\t\t\t\tforce\n\t\t\t\t\t}), redirectedFrom || toLocation);\n\t\t\t\t}\n\t\t\t} else failure$1 = finalizeNavigation(toLocation, from, true, replace$1, data);\n\t\t\ttriggerAfterEach(toLocation, from, failure$1);\n\t\t\treturn failure$1;\n\t\t});\n\t}\n\t/**\n\t* Helper to reject and skip all navigation guards if a new navigation happened\n\t* @param to\n\t* @param from\n\t*/\n\tfunction checkCanceledNavigationAndReject(to, from) {\n\t\tconst error = checkCanceledNavigation(to, from);\n\t\treturn error ? Promise.reject(error) : Promise.resolve();\n\t}\n\tfunction runWithContext(fn) {\n\t\tconst app = installedApps.values().next().value;\n\t\treturn app && typeof app.runWithContext === \"function\" ? app.runWithContext(fn) : fn();\n\t}\n\tfunction navigate(to, from) {\n\t\tlet guards;\n\t\tconst [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from);\n\t\tguards = extractComponentsGuards(leavingRecords.reverse(), \"beforeRouteLeave\", to, from);\n\t\tfor (const record of leavingRecords) record.leaveGuards.forEach((guard) => {\n\t\t\tguards.push(guardToPromiseFn(guard, to, from));\n\t\t});\n\t\tconst canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from);\n\t\tguards.push(canceledNavigationCheck);\n\t\treturn runGuardQueue(guards).then(() => {\n\t\t\tguards = [];\n\t\t\tfor (const guard of beforeGuards.list()) guards.push(guardToPromiseFn(guard, to, from));\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).then(() => {\n\t\t\tguards = extractComponentsGuards(updatingRecords, \"beforeRouteUpdate\", to, from);\n\t\t\tfor (const record of updatingRecords) record.updateGuards.forEach((guard) => {\n\t\t\t\tguards.push(guardToPromiseFn(guard, to, from));\n\t\t\t});\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).then(() => {\n\t\t\tguards = [];\n\t\t\tfor (const record of enteringRecords) if (record.beforeEnter) if (isArray(record.beforeEnter)) for (const beforeEnter of record.beforeEnter) guards.push(guardToPromiseFn(beforeEnter, to, from));\n\t\t\telse guards.push(guardToPromiseFn(record.beforeEnter, to, from));\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).then(() => {\n\t\t\tto.matched.forEach((record) => record.enterCallbacks = {});\n\t\t\tguards = extractComponentsGuards(enteringRecords, \"beforeRouteEnter\", to, from, runWithContext);\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).then(() => {\n\t\t\tguards = [];\n\t\t\tfor (const guard of beforeResolveGuards.list()) guards.push(guardToPromiseFn(guard, to, from));\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).catch((err) => isNavigationFailure(err, ErrorTypes.NAVIGATION_CANCELLED) ? err : Promise.reject(err));\n\t}\n\tfunction triggerAfterEach(to, from, failure) {\n\t\tafterGuards.list().forEach((guard) => runWithContext(() => guard(to, from, failure)));\n\t}\n\t/**\n\t* - Cleans up any navigation guards\n\t* - Changes the url if necessary\n\t* - Calls the scrollBehavior\n\t*/\n\tfunction finalizeNavigation(toLocation, from, isPush, replace$1, data) {\n\t\tconst error = checkCanceledNavigation(toLocation, from);\n\t\tif (error) return error;\n\t\tconst isFirstNavigation = from === START_LOCATION_NORMALIZED;\n\t\tconst state = !isBrowser ? {} : history.state;\n\t\tif (isPush) if (replace$1 || isFirstNavigation) routerHistory.replace(toLocation.fullPath, assign({ scroll: isFirstNavigation && state && state.scroll }, data));\n\t\telse routerHistory.push(toLocation.fullPath, data);\n\t\tcurrentRoute.value = toLocation;\n\t\thandleScroll(toLocation, from, isPush, isFirstNavigation);\n\t\tmarkAsReady();\n\t}\n\tlet removeHistoryListener;\n\tfunction setupListeners() {\n\t\tif (removeHistoryListener) return;\n\t\tremoveHistoryListener = routerHistory.listen((to, _from, info) => {\n\t\t\tif (!router.listening) return;\n\t\t\tconst toLocation = resolve(to);\n\t\t\tconst shouldRedirect = handleRedirectRecord(toLocation, router.currentRoute.value);\n\t\t\tif (shouldRedirect) {\n\t\t\t\tpushWithRedirect(assign(shouldRedirect, {\n\t\t\t\t\treplace: true,\n\t\t\t\t\tforce: true\n\t\t\t\t}), toLocation).catch(noop);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpendingLocation = toLocation;\n\t\t\tconst from = currentRoute.value;\n\t\t\tif (isBrowser) saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition());\n\t\t\tnavigate(toLocation, from).catch((error) => {\n\t\t\t\tif (isNavigationFailure(error, ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_CANCELLED)) return error;\n\t\t\t\tif (isNavigationFailure(error, ErrorTypes.NAVIGATION_GUARD_REDIRECT)) {\n\t\t\t\t\tpushWithRedirect(assign(locationAsObject(error.to), { force: true }), toLocation).then((failure) => {\n\t\t\t\t\t\tif (isNavigationFailure(failure, ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_DUPLICATED) && !info.delta && info.type === NavigationType.pop) routerHistory.go(-1, false);\n\t\t\t\t\t}).catch(noop);\n\t\t\t\t\treturn Promise.reject();\n\t\t\t\t}\n\t\t\t\tif (info.delta) routerHistory.go(-info.delta, false);\n\t\t\t\treturn triggerError(error, toLocation, from);\n\t\t\t}).then((failure) => {\n\t\t\t\tfailure = failure || finalizeNavigation(toLocation, from, false);\n\t\t\t\tif (failure) {\n\t\t\t\t\tif (info.delta && !isNavigationFailure(failure, ErrorTypes.NAVIGATION_CANCELLED)) routerHistory.go(-info.delta, false);\n\t\t\t\t\telse if (info.type === NavigationType.pop && isNavigationFailure(failure, ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_DUPLICATED)) routerHistory.go(-1, false);\n\t\t\t\t}\n\t\t\t\ttriggerAfterEach(toLocation, from, failure);\n\t\t\t}).catch(noop);\n\t\t});\n\t}\n\tlet readyHandlers = useCallbacks();\n\tlet errorListeners = useCallbacks();\n\tlet ready;\n\t/**\n\t* Trigger errorListeners added via onError and throws the error as well\n\t*\n\t* @param error - error to throw\n\t* @param to - location we were navigating to when the error happened\n\t* @param from - location we were navigating from when the error happened\n\t* @returns the error as a rejected promise\n\t*/\n\tfunction triggerError(error, to, from) {\n\t\tmarkAsReady(error);\n\t\tconst list = errorListeners.list();\n\t\tif (list.length) list.forEach((handler) => handler(error, to, from));\n\t\telse {\n\t\t\tif (process.env.NODE_ENV !== \"production\") warn$1(\"uncaught error during route navigation:\");\n\t\t\tconsole.error(error);\n\t\t}\n\t\treturn Promise.reject(error);\n\t}\n\tfunction isReady() {\n\t\tif (ready && currentRoute.value !== START_LOCATION_NORMALIZED) return Promise.resolve();\n\t\treturn new Promise((resolve$1, reject) => {\n\t\t\treadyHandlers.add([resolve$1, reject]);\n\t\t});\n\t}\n\tfunction markAsReady(err) {\n\t\tif (!ready) {\n\t\t\tready = !err;\n\t\t\tsetupListeners();\n\t\t\treadyHandlers.list().forEach(([resolve$1, reject]) => err ? reject(err) : resolve$1());\n\t\t\treadyHandlers.reset();\n\t\t}\n\t\treturn err;\n\t}\n\tfunction handleScroll(to, from, isPush, isFirstNavigation) {\n\t\tconst { scrollBehavior } = options;\n\t\tif (!isBrowser || !scrollBehavior) return Promise.resolve();\n\t\tconst scrollPosition = !isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0)) || (isFirstNavigation || !isPush) && history.state && history.state.scroll || null;\n\t\treturn nextTick().then(() => scrollBehavior(to, from, scrollPosition)).then((position) => position && scrollToPosition(position)).catch((err) => triggerError(err, to, from));\n\t}\n\tconst go = (delta) => routerHistory.go(delta);\n\tlet started;\n\tconst installedApps = /* @__PURE__ */ new Set();\n\tconst router = {\n\t\tcurrentRoute,\n\t\tlistening: true,\n\t\taddRoute,\n\t\tremoveRoute,\n\t\tclearRoutes: matcher.clearRoutes,\n\t\thasRoute,\n\t\tgetRoutes,\n\t\tresolve,\n\t\toptions,\n\t\tpush,\n\t\treplace,\n\t\tgo,\n\t\tback: () => go(-1),\n\t\tforward: () => go(1),\n\t\tbeforeEach: beforeGuards.add,\n\t\tbeforeResolve: beforeResolveGuards.add,\n\t\tafterEach: afterGuards.add,\n\t\tonError: errorListeners.add,\n\t\tisReady,\n\t\tinstall(app) {\n\t\t\tapp.component(\"RouterLink\", RouterLink);\n\t\t\tapp.component(\"RouterView\", RouterView);\n\t\t\tapp.config.globalProperties.$router = router;\n\t\t\tObject.defineProperty(app.config.globalProperties, \"$route\", {\n\t\t\t\tenumerable: true,\n\t\t\t\tget: () => unref(currentRoute)\n\t\t\t});\n\t\t\tif (isBrowser && !started && currentRoute.value === START_LOCATION_NORMALIZED) {\n\t\t\t\tstarted = true;\n\t\t\t\tpush(routerHistory.location).catch((err) => {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") warn$1(\"Unexpected error when starting the router:\", err);\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst reactiveRoute = {};\n\t\t\tfor (const key in START_LOCATION_NORMALIZED) Object.defineProperty(reactiveRoute, key, {\n\t\t\t\tget: () => currentRoute.value[key],\n\t\t\t\tenumerable: true\n\t\t\t});\n\t\t\tapp.provide(routerKey, router);\n\t\t\tapp.provide(routeLocationKey, shallowReactive(reactiveRoute));\n\t\t\tapp.provide(routerViewLocationKey, currentRoute);\n\t\t\tconst unmountApp = app.unmount;\n\t\t\tinstalledApps.add(app);\n\t\t\tapp.unmount = function() {\n\t\t\t\tinstalledApps.delete(app);\n\t\t\t\tif (installedApps.size < 1) {\n\t\t\t\t\tpendingLocation = START_LOCATION_NORMALIZED;\n\t\t\t\t\tremoveHistoryListener && removeHistoryListener();\n\t\t\t\t\tremoveHistoryListener = null;\n\t\t\t\t\tcurrentRoute.value = START_LOCATION_NORMALIZED;\n\t\t\t\t\tstarted = false;\n\t\t\t\t\tready = false;\n\t\t\t\t}\n\t\t\t\tunmountApp();\n\t\t\t};\n\t\t\tif ((process.env.NODE_ENV !== \"production\" || __VUE_PROD_DEVTOOLS__) && isBrowser) addDevtools(app, router, matcher);\n\t\t}\n\t};\n\tfunction runGuardQueue(guards) {\n\t\treturn guards.reduce((promise, guard) => promise.then(() => runWithContext(guard)), Promise.resolve());\n\t}\n\treturn router;\n}\n\n//#endregion\n//#region src/useApi.ts\n/**\n* Returns the router instance. Equivalent to using `$router` inside\n* templates.\n*/\nfunction useRouter() {\n\treturn inject(routerKey);\n}\n/**\n* Returns the current route location. Equivalent to using `$route` inside\n* templates.\n*/\nfunction useRoute(_name) {\n\treturn inject(routeLocationKey);\n}\n\n//#endregion\nexport { NavigationFailureType, RouterLink, RouterView, START_LOCATION_NORMALIZED as START_LOCATION, createMemoryHistory, createRouter, createRouterMatcher, createWebHashHistory, createWebHistory, isNavigationFailure, loadRouteLocation, matchedRouteKey, onBeforeRouteLeave, onBeforeRouteUpdate, parseQuery, routeLocationKey, routerKey, routerViewLocationKey, stringifyQuery, useLink, useRoute, useRouter, viewDepthKey };"], + "sourcesContent": ["/*!\r\n * vue-router v4.6.4\r\n * (c) 2025 Eduardo San Martin Morote\r\n * @license MIT\r\n */\r\nimport { getCurrentInstance, inject, onActivated, onDeactivated, onUnmounted, watch } from \"vue\";\r\nimport { setupDevtoolsPlugin } from \"@vue/devtools-api\";\r\n\r\n//#region src/utils/env.ts\r\nconst isBrowser = typeof document !== \"undefined\";\r\n\r\n//#endregion\r\n//#region src/utils/index.ts\r\n/**\r\n* Identity function that returns the value as is.\r\n*\r\n* @param v - the value to return\r\n*\r\n* @internal\r\n*/\r\nconst identityFn = (v) => v;\r\n/**\r\n* Allows differentiating lazy components from functional components and vue-class-component\r\n* @internal\r\n*\r\n* @param component\r\n*/\r\nfunction isRouteComponent(component) {\r\n\treturn typeof component === \"object\" || \"displayName\" in component || \"props\" in component || \"__vccOpts\" in component;\r\n}\r\nfunction isESModule(obj) {\r\n\treturn obj.__esModule || obj[Symbol.toStringTag] === \"Module\" || obj.default && isRouteComponent(obj.default);\r\n}\r\nconst assign = Object.assign;\r\nfunction applyToParams(fn, params) {\r\n\tconst newParams = {};\r\n\tfor (const key in params) {\r\n\t\tconst value = params[key];\r\n\t\tnewParams[key] = isArray(value) ? value.map(fn) : fn(value);\r\n\t}\r\n\treturn newParams;\r\n}\r\nconst noop = () => {};\r\n/**\r\n* Typesafe alternative to Array.isArray\r\n* https://github.com/microsoft/TypeScript/pull/48228\r\n*\r\n* @internal\r\n*/\r\nconst isArray = Array.isArray;\r\nfunction mergeOptions(defaults, partialOptions) {\r\n\tconst options = {};\r\n\tfor (const key in defaults) options[key] = key in partialOptions ? partialOptions[key] : defaults[key];\r\n\treturn options;\r\n}\r\n\r\n//#endregion\r\n//#region src/warning.ts\r\nfunction warn$1(msg) {\r\n\tconst args = Array.from(arguments).slice(1);\r\n\tconsole.warn.apply(console, [\"[Vue Router warn]: \" + msg].concat(args));\r\n}\r\n\r\n//#endregion\r\n//#region src/encoding.ts\r\n/**\r\n* Encoding Rules (␣ = Space)\r\n* - Path: ␣ \" < > # ? { }\r\n* - Query: ␣ \" < > # & =\r\n* - Hash: ␣ \" < > `\r\n*\r\n* On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\r\n* defines some extra characters to be encoded. Most browsers do not encode them\r\n* in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\r\n* also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\r\n* plus `-._~`. This extra safety should be applied to query by patching the\r\n* string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\r\n* should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\r\n* into a `/` if directly typed in. The _backtick_ (`````) should also be\r\n* encoded everywhere because some browsers like FF encode it when directly\r\n* written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\r\n*/\r\nconst HASH_RE = /#/g;\r\nconst AMPERSAND_RE = /&/g;\r\nconst SLASH_RE = /\\//g;\r\nconst EQUAL_RE = /=/g;\r\nconst IM_RE = /\\?/g;\r\nconst PLUS_RE = /\\+/g;\r\n/**\r\n* NOTE: It's not clear to me if we should encode the + symbol in queries, it\r\n* seems to be less flexible than not doing so and I can't find out the legacy\r\n* systems requiring this for regular requests like text/html. In the standard,\r\n* the encoding of the plus character is only mentioned for\r\n* application/x-www-form-urlencoded\r\n* (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\r\n* leave the plus character as is in queries. To be more flexible, we allow the\r\n* plus character on the query, but it can also be manually encoded by the user.\r\n*\r\n* Resources:\r\n* - https://url.spec.whatwg.org/#urlencoded-parsing\r\n* - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\r\n*/\r\nconst ENC_BRACKET_OPEN_RE = /%5B/g;\r\nconst ENC_BRACKET_CLOSE_RE = /%5D/g;\r\nconst ENC_CARET_RE = /%5E/g;\r\nconst ENC_BACKTICK_RE = /%60/g;\r\nconst ENC_CURLY_OPEN_RE = /%7B/g;\r\nconst ENC_PIPE_RE = /%7C/g;\r\nconst ENC_CURLY_CLOSE_RE = /%7D/g;\r\nconst ENC_SPACE_RE = /%20/g;\r\n/**\r\n* Encode characters that need to be encoded on the path, search and hash\r\n* sections of the URL.\r\n*\r\n* @internal\r\n* @param text - string to encode\r\n* @returns encoded string\r\n*/\r\nfunction commonEncode(text) {\r\n\treturn text == null ? \"\" : encodeURI(\"\" + text).replace(ENC_PIPE_RE, \"|\").replace(ENC_BRACKET_OPEN_RE, \"[\").replace(ENC_BRACKET_CLOSE_RE, \"]\");\r\n}\r\n/**\r\n* Encode characters that need to be encoded on the hash section of the URL.\r\n*\r\n* @param text - string to encode\r\n* @returns encoded string\r\n*/\r\nfunction encodeHash(text) {\r\n\treturn commonEncode(text).replace(ENC_CURLY_OPEN_RE, \"{\").replace(ENC_CURLY_CLOSE_RE, \"}\").replace(ENC_CARET_RE, \"^\");\r\n}\r\n/**\r\n* Encode characters that need to be encoded query values on the query\r\n* section of the URL.\r\n*\r\n* @param text - string to encode\r\n* @returns encoded string\r\n*/\r\nfunction encodeQueryValue(text) {\r\n\treturn commonEncode(text).replace(PLUS_RE, \"%2B\").replace(ENC_SPACE_RE, \"+\").replace(HASH_RE, \"%23\").replace(AMPERSAND_RE, \"%26\").replace(ENC_BACKTICK_RE, \"`\").replace(ENC_CURLY_OPEN_RE, \"{\").replace(ENC_CURLY_CLOSE_RE, \"}\").replace(ENC_CARET_RE, \"^\");\r\n}\r\n/**\r\n* Like `encodeQueryValue` but also encodes the `=` character.\r\n*\r\n* @param text - string to encode\r\n*/\r\nfunction encodeQueryKey(text) {\r\n\treturn encodeQueryValue(text).replace(EQUAL_RE, \"%3D\");\r\n}\r\n/**\r\n* Encode characters that need to be encoded on the path section of the URL.\r\n*\r\n* @param text - string to encode\r\n* @returns encoded string\r\n*/\r\nfunction encodePath(text) {\r\n\treturn commonEncode(text).replace(HASH_RE, \"%23\").replace(IM_RE, \"%3F\");\r\n}\r\n/**\r\n* Encode characters that need to be encoded on the path section of the URL as a\r\n* param. This function encodes everything {@link encodePath} does plus the\r\n* slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\r\n* string instead.\r\n*\r\n* @param text - string to encode\r\n* @returns encoded string\r\n*/\r\nfunction encodeParam(text) {\r\n\treturn encodePath(text).replace(SLASH_RE, \"%2F\");\r\n}\r\nfunction decode(text) {\r\n\tif (text == null) return null;\r\n\ttry {\r\n\t\treturn decodeURIComponent(\"\" + text);\r\n\t} catch (err) {\r\n\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(`Error decoding \"${text}\". Using original value`);\r\n\t}\r\n\treturn \"\" + text;\r\n}\r\n\r\n//#endregion\r\n//#region src/location.ts\r\nconst TRAILING_SLASH_RE = /\\/$/;\r\nconst removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, \"\");\r\n/**\r\n* Transforms a URI into a normalized history location\r\n*\r\n* @param parseQuery\r\n* @param location - URI to normalize\r\n* @param currentLocation - current absolute location. Allows resolving relative\r\n* paths. Must start with `/`. Defaults to `/`\r\n* @returns a normalized history location\r\n*/\r\nfunction parseURL(parseQuery$1, location, currentLocation = \"/\") {\r\n\tlet path, query = {}, searchString = \"\", hash = \"\";\r\n\tconst hashPos = location.indexOf(\"#\");\r\n\tlet searchPos = location.indexOf(\"?\");\r\n\tsearchPos = hashPos >= 0 && searchPos > hashPos ? -1 : searchPos;\r\n\tif (searchPos >= 0) {\r\n\t\tpath = location.slice(0, searchPos);\r\n\t\tsearchString = location.slice(searchPos, hashPos > 0 ? hashPos : location.length);\r\n\t\tquery = parseQuery$1(searchString.slice(1));\r\n\t}\r\n\tif (hashPos >= 0) {\r\n\t\tpath = path || location.slice(0, hashPos);\r\n\t\thash = location.slice(hashPos, location.length);\r\n\t}\r\n\tpath = resolveRelativePath(path != null ? path : location, currentLocation);\r\n\treturn {\r\n\t\tfullPath: path + searchString + hash,\r\n\t\tpath,\r\n\t\tquery,\r\n\t\thash: decode(hash)\r\n\t};\r\n}\r\nfunction NEW_stringifyURL(stringifyQuery$1, path, query, hash = \"\") {\r\n\tconst searchText = stringifyQuery$1(query);\r\n\treturn path + (searchText && \"?\") + searchText + encodeHash(hash);\r\n}\r\n/**\r\n* Stringifies a URL object\r\n*\r\n* @param stringifyQuery\r\n* @param location\r\n*/\r\nfunction stringifyURL(stringifyQuery$1, location) {\r\n\tconst query = location.query ? stringifyQuery$1(location.query) : \"\";\r\n\treturn location.path + (query && \"?\") + query + (location.hash || \"\");\r\n}\r\n/**\r\n* Strips off the base from the beginning of a location.pathname in a non-case-sensitive way.\r\n*\r\n* @param pathname - location.pathname\r\n* @param base - base to strip off\r\n*/\r\nfunction stripBase(pathname, base) {\r\n\tif (!base || !pathname.toLowerCase().startsWith(base.toLowerCase())) return pathname;\r\n\treturn pathname.slice(base.length) || \"/\";\r\n}\r\n/**\r\n* Checks if two RouteLocation are equal. This means that both locations are\r\n* pointing towards the same {@link RouteRecord} and that all `params`, `query`\r\n* parameters and `hash` are the same\r\n*\r\n* @param stringifyQuery - A function that takes a query object of type LocationQueryRaw and returns a string representation of it.\r\n* @param a - first {@link RouteLocation}\r\n* @param b - second {@link RouteLocation}\r\n*/\r\nfunction isSameRouteLocation(stringifyQuery$1, a, b) {\r\n\tconst aLastIndex = a.matched.length - 1;\r\n\tconst bLastIndex = b.matched.length - 1;\r\n\treturn aLastIndex > -1 && aLastIndex === bLastIndex && isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) && isSameRouteLocationParams(a.params, b.params) && stringifyQuery$1(a.query) === stringifyQuery$1(b.query) && a.hash === b.hash;\r\n}\r\n/**\r\n* Check if two `RouteRecords` are equal. Takes into account aliases: they are\r\n* considered equal to the `RouteRecord` they are aliasing.\r\n*\r\n* @param a - first {@link RouteRecord}\r\n* @param b - second {@link RouteRecord}\r\n*/\r\nfunction isSameRouteRecord(a, b) {\r\n\treturn (a.aliasOf || a) === (b.aliasOf || b);\r\n}\r\nfunction isSameRouteLocationParams(a, b) {\r\n\tif (Object.keys(a).length !== Object.keys(b).length) return false;\r\n\tfor (var key in a) if (!isSameRouteLocationParamsValue(a[key], b[key])) return false;\r\n\treturn true;\r\n}\r\nfunction isSameRouteLocationParamsValue(a, b) {\r\n\treturn isArray(a) ? isEquivalentArray(a, b) : isArray(b) ? isEquivalentArray(b, a) : a?.valueOf() === b?.valueOf();\r\n}\r\n/**\r\n* Check if two arrays are the same or if an array with one single entry is the\r\n* same as another primitive value. Used to check query and parameters\r\n*\r\n* @param a - array of values\r\n* @param b - array of values or a single value\r\n*/\r\nfunction isEquivalentArray(a, b) {\r\n\treturn isArray(b) ? a.length === b.length && a.every((value, i) => value === b[i]) : a.length === 1 && a[0] === b;\r\n}\r\n/**\r\n* Resolves a relative path that starts with `.`.\r\n*\r\n* @param to - path location we are resolving\r\n* @param from - currentLocation.path, should start with `/`\r\n*/\r\nfunction resolveRelativePath(to, from) {\r\n\tif (to.startsWith(\"/\")) return to;\r\n\tif (process.env.NODE_ENV !== \"production\" && !from.startsWith(\"/\")) {\r\n\t\twarn$1(`Cannot resolve a relative location without an absolute path. Trying to resolve \"${to}\" from \"${from}\". It should look like \"/${from}\".`);\r\n\t\treturn to;\r\n\t}\r\n\tif (!to) return from;\r\n\tconst fromSegments = from.split(\"/\");\r\n\tconst toSegments = to.split(\"/\");\r\n\tconst lastToSegment = toSegments[toSegments.length - 1];\r\n\tif (lastToSegment === \"..\" || lastToSegment === \".\") toSegments.push(\"\");\r\n\tlet position = fromSegments.length - 1;\r\n\tlet toPosition;\r\n\tlet segment;\r\n\tfor (toPosition = 0; toPosition < toSegments.length; toPosition++) {\r\n\t\tsegment = toSegments[toPosition];\r\n\t\tif (segment === \".\") continue;\r\n\t\tif (segment === \"..\") {\r\n\t\t\tif (position > 1) position--;\r\n\t\t} else break;\r\n\t}\r\n\treturn fromSegments.slice(0, position).join(\"/\") + \"/\" + toSegments.slice(toPosition).join(\"/\");\r\n}\r\n/**\r\n* Initial route location where the router is. Can be used in navigation guards\r\n* to differentiate the initial navigation.\r\n*\r\n* @example\r\n* ```js\r\n* import { START_LOCATION } from 'vue-router'\r\n*\r\n* router.beforeEach((to, from) => {\r\n* if (from === START_LOCATION) {\r\n* // initial navigation\r\n* }\r\n* })\r\n* ```\r\n*/\r\nconst START_LOCATION_NORMALIZED = {\r\n\tpath: \"/\",\r\n\tname: void 0,\r\n\tparams: {},\r\n\tquery: {},\r\n\thash: \"\",\r\n\tfullPath: \"/\",\r\n\tmatched: [],\r\n\tmeta: {},\r\n\tredirectedFrom: void 0\r\n};\r\n\r\n//#endregion\r\n//#region src/history/common.ts\r\nlet NavigationType = /* @__PURE__ */ function(NavigationType$1) {\r\n\tNavigationType$1[\"pop\"] = \"pop\";\r\n\tNavigationType$1[\"push\"] = \"push\";\r\n\treturn NavigationType$1;\r\n}({});\r\nlet NavigationDirection = /* @__PURE__ */ function(NavigationDirection$1) {\r\n\tNavigationDirection$1[\"back\"] = \"back\";\r\n\tNavigationDirection$1[\"forward\"] = \"forward\";\r\n\tNavigationDirection$1[\"unknown\"] = \"\";\r\n\treturn NavigationDirection$1;\r\n}({});\r\n/**\r\n* Starting location for Histories\r\n*/\r\nconst START = \"\";\r\n/**\r\n* Normalizes a base by removing any trailing slash and reading the base tag if\r\n* present.\r\n*\r\n* @param base - base to normalize\r\n*/\r\nfunction normalizeBase(base) {\r\n\tif (!base) if (isBrowser) {\r\n\t\tconst baseEl = document.querySelector(\"base\");\r\n\t\tbase = baseEl && baseEl.getAttribute(\"href\") || \"/\";\r\n\t\tbase = base.replace(/^\\w+:\\/\\/[^\\/]+/, \"\");\r\n\t} else base = \"/\";\r\n\tif (base[0] !== \"/\" && base[0] !== \"#\") base = \"/\" + base;\r\n\treturn removeTrailingSlash(base);\r\n}\r\nconst BEFORE_HASH_RE = /^[^#]+#/;\r\nfunction createHref(base, location) {\r\n\treturn base.replace(BEFORE_HASH_RE, \"#\") + location;\r\n}\r\n\r\n//#endregion\r\n//#region src/scrollBehavior.ts\r\nfunction getElementPosition(el, offset) {\r\n\tconst docRect = document.documentElement.getBoundingClientRect();\r\n\tconst elRect = el.getBoundingClientRect();\r\n\treturn {\r\n\t\tbehavior: offset.behavior,\r\n\t\tleft: elRect.left - docRect.left - (offset.left || 0),\r\n\t\ttop: elRect.top - docRect.top - (offset.top || 0)\r\n\t};\r\n}\r\nconst computeScrollPosition = () => ({\r\n\tleft: window.scrollX,\r\n\ttop: window.scrollY\r\n});\r\nfunction scrollToPosition(position) {\r\n\tlet scrollToOptions;\r\n\tif (\"el\" in position) {\r\n\t\tconst positionEl = position.el;\r\n\t\tconst isIdSelector = typeof positionEl === \"string\" && positionEl.startsWith(\"#\");\r\n\t\t/**\r\n\t\t* `id`s can accept pretty much any characters, including CSS combinators\r\n\t\t* like `>` or `~`. It's still possible to retrieve elements using\r\n\t\t* `document.getElementById('~')` but it needs to be escaped when using\r\n\t\t* `document.querySelector('#\\\\~')` for it to be valid. The only\r\n\t\t* requirements for `id`s are them to be unique on the page and to not be\r\n\t\t* empty (`id=\"\"`). Because of that, when passing an id selector, it should\r\n\t\t* be properly escaped for it to work with `querySelector`. We could check\r\n\t\t* for the id selector to be simple (no CSS combinators `+ >~`) but that\r\n\t\t* would make things inconsistent since they are valid characters for an\r\n\t\t* `id` but would need to be escaped when using `querySelector`, breaking\r\n\t\t* their usage and ending up in no selector returned. Selectors need to be\r\n\t\t* escaped:\r\n\t\t*\r\n\t\t* - `#1-thing` becomes `#\\31 -thing`\r\n\t\t* - `#with~symbols` becomes `#with\\\\~symbols`\r\n\t\t*\r\n\t\t* - More information about the topic can be found at\r\n\t\t* https://mathiasbynens.be/notes/html5-id-class.\r\n\t\t* - Practical example: https://mathiasbynens.be/demo/html5-id\r\n\t\t*/\r\n\t\tif (process.env.NODE_ENV !== \"production\" && typeof position.el === \"string\") {\r\n\t\t\tif (!isIdSelector || !document.getElementById(position.el.slice(1))) try {\r\n\t\t\t\tconst foundEl = document.querySelector(position.el);\r\n\t\t\t\tif (isIdSelector && foundEl) {\r\n\t\t\t\t\twarn$1(`The selector \"${position.el}\" should be passed as \"el: document.querySelector('${position.el}')\" because it starts with \"#\".`);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t} catch (err) {\r\n\t\t\t\twarn$1(`The selector \"${position.el}\" is invalid. If you are using an id selector, make sure to escape it. You can find more information about escaping characters in selectors at https://mathiasbynens.be/notes/css-escapes or use CSS.escape (https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape).`);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst el = typeof positionEl === \"string\" ? isIdSelector ? document.getElementById(positionEl.slice(1)) : document.querySelector(positionEl) : positionEl;\r\n\t\tif (!el) {\r\n\t\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(`Couldn't find element using selector \"${position.el}\" returned by scrollBehavior.`);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tscrollToOptions = getElementPosition(el, position);\r\n\t} else scrollToOptions = position;\r\n\tif (\"scrollBehavior\" in document.documentElement.style) window.scrollTo(scrollToOptions);\r\n\telse window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.scrollX, scrollToOptions.top != null ? scrollToOptions.top : window.scrollY);\r\n}\r\nfunction getScrollKey(path, delta) {\r\n\treturn (history.state ? history.state.position - delta : -1) + path;\r\n}\r\nconst scrollPositions = /* @__PURE__ */ new Map();\r\nfunction saveScrollPosition(key, scrollPosition) {\r\n\tscrollPositions.set(key, scrollPosition);\r\n}\r\nfunction getSavedScrollPosition(key) {\r\n\tconst scroll = scrollPositions.get(key);\r\n\tscrollPositions.delete(key);\r\n\treturn scroll;\r\n}\r\n/**\r\n* ScrollBehavior instance used by the router to compute and restore the scroll\r\n* position when navigating.\r\n*/\r\n\r\n//#endregion\r\n//#region src/types/typeGuards.ts\r\nfunction isRouteLocation(route) {\r\n\treturn typeof route === \"string\" || route && typeof route === \"object\";\r\n}\r\nfunction isRouteName(name) {\r\n\treturn typeof name === \"string\" || typeof name === \"symbol\";\r\n}\r\n\r\n//#endregion\r\n//#region src/errors.ts\r\n/**\r\n* Flags so we can combine them when checking for multiple errors. This is the internal version of\r\n* {@link NavigationFailureType}.\r\n*\r\n* @internal\r\n*/\r\nlet ErrorTypes = /* @__PURE__ */ function(ErrorTypes$1) {\r\n\tErrorTypes$1[ErrorTypes$1[\"MATCHER_NOT_FOUND\"] = 1] = \"MATCHER_NOT_FOUND\";\r\n\tErrorTypes$1[ErrorTypes$1[\"NAVIGATION_GUARD_REDIRECT\"] = 2] = \"NAVIGATION_GUARD_REDIRECT\";\r\n\tErrorTypes$1[ErrorTypes$1[\"NAVIGATION_ABORTED\"] = 4] = \"NAVIGATION_ABORTED\";\r\n\tErrorTypes$1[ErrorTypes$1[\"NAVIGATION_CANCELLED\"] = 8] = \"NAVIGATION_CANCELLED\";\r\n\tErrorTypes$1[ErrorTypes$1[\"NAVIGATION_DUPLICATED\"] = 16] = \"NAVIGATION_DUPLICATED\";\r\n\treturn ErrorTypes$1;\r\n}({});\r\nconst NavigationFailureSymbol = Symbol(process.env.NODE_ENV !== \"production\" ? \"navigation failure\" : \"\");\r\n/**\r\n* Enumeration with all possible types for navigation failures. Can be passed to\r\n* {@link isNavigationFailure} to check for specific failures.\r\n*/\r\nlet NavigationFailureType = /* @__PURE__ */ function(NavigationFailureType$1) {\r\n\t/**\r\n\t* An aborted navigation is a navigation that failed because a navigation\r\n\t* guard returned `false` or called `next(false)`\r\n\t*/\r\n\tNavigationFailureType$1[NavigationFailureType$1[\"aborted\"] = 4] = \"aborted\";\r\n\t/**\r\n\t* A cancelled navigation is a navigation that failed because a more recent\r\n\t* navigation finished started (not necessarily finished).\r\n\t*/\r\n\tNavigationFailureType$1[NavigationFailureType$1[\"cancelled\"] = 8] = \"cancelled\";\r\n\t/**\r\n\t* A duplicated navigation is a navigation that failed because it was\r\n\t* initiated while already being at the exact same location.\r\n\t*/\r\n\tNavigationFailureType$1[NavigationFailureType$1[\"duplicated\"] = 16] = \"duplicated\";\r\n\treturn NavigationFailureType$1;\r\n}({});\r\nconst ErrorTypeMessages = {\r\n\t[ErrorTypes.MATCHER_NOT_FOUND]({ location, currentLocation }) {\r\n\t\treturn `No match for\\n ${JSON.stringify(location)}${currentLocation ? \"\\nwhile being at\\n\" + JSON.stringify(currentLocation) : \"\"}`;\r\n\t},\r\n\t[ErrorTypes.NAVIGATION_GUARD_REDIRECT]({ from, to }) {\r\n\t\treturn `Redirected from \"${from.fullPath}\" to \"${stringifyRoute(to)}\" via a navigation guard.`;\r\n\t},\r\n\t[ErrorTypes.NAVIGATION_ABORTED]({ from, to }) {\r\n\t\treturn `Navigation aborted from \"${from.fullPath}\" to \"${to.fullPath}\" via a navigation guard.`;\r\n\t},\r\n\t[ErrorTypes.NAVIGATION_CANCELLED]({ from, to }) {\r\n\t\treturn `Navigation cancelled from \"${from.fullPath}\" to \"${to.fullPath}\" with a new navigation.`;\r\n\t},\r\n\t[ErrorTypes.NAVIGATION_DUPLICATED]({ from, to }) {\r\n\t\treturn `Avoided redundant navigation to current location: \"${from.fullPath}\".`;\r\n\t}\r\n};\r\n/**\r\n* Creates a typed NavigationFailure object.\r\n* @internal\r\n* @param type - NavigationFailureType\r\n* @param params - { from, to }\r\n*/\r\nfunction createRouterError(type, params) {\r\n\tif (process.env.NODE_ENV !== \"production\" || false) return assign(new Error(ErrorTypeMessages[type](params)), {\r\n\t\ttype,\r\n\t\t[NavigationFailureSymbol]: true\r\n\t}, params);\r\n\telse return assign(/* @__PURE__ */ new Error(), {\r\n\t\ttype,\r\n\t\t[NavigationFailureSymbol]: true\r\n\t}, params);\r\n}\r\nfunction isNavigationFailure(error, type) {\r\n\treturn error instanceof Error && NavigationFailureSymbol in error && (type == null || !!(error.type & type));\r\n}\r\nconst propertiesToLog = [\r\n\t\"params\",\r\n\t\"query\",\r\n\t\"hash\"\r\n];\r\nfunction stringifyRoute(to) {\r\n\tif (typeof to === \"string\") return to;\r\n\tif (to.path != null) return to.path;\r\n\tconst location = {};\r\n\tfor (const key of propertiesToLog) if (key in to) location[key] = to[key];\r\n\treturn JSON.stringify(location, null, 2);\r\n}\r\n\r\n//#endregion\r\n//#region src/query.ts\r\n/**\r\n* Transforms a queryString into a {@link LocationQuery} object. Accept both, a\r\n* version with the leading `?` and without Should work as URLSearchParams\r\n\r\n* @internal\r\n*\r\n* @param search - search string to parse\r\n* @returns a query object\r\n*/\r\nfunction parseQuery(search) {\r\n\tconst query = {};\r\n\tif (search === \"\" || search === \"?\") return query;\r\n\tconst searchParams = (search[0] === \"?\" ? search.slice(1) : search).split(\"&\");\r\n\tfor (let i = 0; i < searchParams.length; ++i) {\r\n\t\tconst searchParam = searchParams[i].replace(PLUS_RE, \" \");\r\n\t\tconst eqPos = searchParam.indexOf(\"=\");\r\n\t\tconst key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\r\n\t\tconst value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\r\n\t\tif (key in query) {\r\n\t\t\tlet currentValue = query[key];\r\n\t\t\tif (!isArray(currentValue)) currentValue = query[key] = [currentValue];\r\n\t\t\tcurrentValue.push(value);\r\n\t\t} else query[key] = value;\r\n\t}\r\n\treturn query;\r\n}\r\n/**\r\n* Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\r\n* doesn't prepend a `?`\r\n*\r\n* @internal\r\n*\r\n* @param query - query object to stringify\r\n* @returns string version of the query without the leading `?`\r\n*/\r\nfunction stringifyQuery(query) {\r\n\tlet search = \"\";\r\n\tfor (let key in query) {\r\n\t\tconst value = query[key];\r\n\t\tkey = encodeQueryKey(key);\r\n\t\tif (value == null) {\r\n\t\t\tif (value !== void 0) search += (search.length ? \"&\" : \"\") + key;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\t(isArray(value) ? value.map((v) => v && encodeQueryValue(v)) : [value && encodeQueryValue(value)]).forEach((value$1) => {\r\n\t\t\tif (value$1 !== void 0) {\r\n\t\t\t\tsearch += (search.length ? \"&\" : \"\") + key;\r\n\t\t\t\tif (value$1 != null) search += \"=\" + value$1;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\treturn search;\r\n}\r\n/**\r\n* Transforms a {@link LocationQueryRaw} into a {@link LocationQuery} by casting\r\n* numbers into strings, removing keys with an undefined value and replacing\r\n* undefined with null in arrays\r\n*\r\n* @param query - query object to normalize\r\n* @returns a normalized query object\r\n*/\r\nfunction normalizeQuery(query) {\r\n\tconst normalizedQuery = {};\r\n\tfor (const key in query) {\r\n\t\tconst value = query[key];\r\n\t\tif (value !== void 0) normalizedQuery[key] = isArray(value) ? value.map((v) => v == null ? null : \"\" + v) : value == null ? value : \"\" + value;\r\n\t}\r\n\treturn normalizedQuery;\r\n}\r\n\r\n//#endregion\r\n//#region src/injectionSymbols.ts\r\n/**\r\n* RouteRecord being rendered by the closest ancestor Router View. Used for\r\n* `onBeforeRouteUpdate` and `onBeforeRouteLeave`. rvlm stands for Router View\r\n* Location Matched\r\n*\r\n* @internal\r\n*/\r\nconst matchedRouteKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"router view location matched\" : \"\");\r\n/**\r\n* Allows overriding the router view depth to control which component in\r\n* `matched` is rendered. rvd stands for Router View Depth\r\n*\r\n* @internal\r\n*/\r\nconst viewDepthKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"router view depth\" : \"\");\r\n/**\r\n* Allows overriding the router instance returned by `useRouter` in tests. r\r\n* stands for router\r\n*\r\n* @internal\r\n*/\r\nconst routerKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"router\" : \"\");\r\n/**\r\n* Allows overriding the current route returned by `useRoute` in tests. rl\r\n* stands for route location\r\n*\r\n* @internal\r\n*/\r\nconst routeLocationKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"route location\" : \"\");\r\n/**\r\n* Allows overriding the current route used by router-view. Internally this is\r\n* used when the `route` prop is passed.\r\n*\r\n* @internal\r\n*/\r\nconst routerViewLocationKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"router view location\" : \"\");\r\n\r\n//#endregion\r\n//#region src/utils/callbacks.ts\r\n/**\r\n* Create a list of callbacks that can be reset. Used to create before and after navigation guards list\r\n*/\r\nfunction useCallbacks() {\r\n\tlet handlers = [];\r\n\tfunction add(handler) {\r\n\t\thandlers.push(handler);\r\n\t\treturn () => {\r\n\t\t\tconst i = handlers.indexOf(handler);\r\n\t\t\tif (i > -1) handlers.splice(i, 1);\r\n\t\t};\r\n\t}\r\n\tfunction reset() {\r\n\t\thandlers = [];\r\n\t}\r\n\treturn {\r\n\t\tadd,\r\n\t\tlist: () => handlers.slice(),\r\n\t\treset\r\n\t};\r\n}\r\n\r\n//#endregion\r\n//#region src/navigationGuards.ts\r\nfunction registerGuard(record, name, guard) {\r\n\tconst removeFromList = () => {\r\n\t\trecord[name].delete(guard);\r\n\t};\r\n\tonUnmounted(removeFromList);\r\n\tonDeactivated(removeFromList);\r\n\tonActivated(() => {\r\n\t\trecord[name].add(guard);\r\n\t});\r\n\trecord[name].add(guard);\r\n}\r\n/**\r\n* Add a navigation guard that triggers whenever the component for the current\r\n* location is about to be left. Similar to {@link beforeRouteLeave} but can be\r\n* used in any component. The guard is removed when the component is unmounted.\r\n*\r\n* @param leaveGuard - {@link NavigationGuard}\r\n*/\r\nfunction onBeforeRouteLeave(leaveGuard) {\r\n\tif (process.env.NODE_ENV !== \"production\" && !getCurrentInstance()) {\r\n\t\twarn$1(\"getCurrentInstance() returned null. onBeforeRouteLeave() must be called at the top of a setup function\");\r\n\t\treturn;\r\n\t}\r\n\tconst activeRecord = inject(matchedRouteKey, {}).value;\r\n\tif (!activeRecord) {\r\n\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(\"No active route record was found when calling `onBeforeRouteLeave()`. Make sure you call this function inside a component child of . Maybe you called it inside of App.vue?\");\r\n\t\treturn;\r\n\t}\r\n\tregisterGuard(activeRecord, \"leaveGuards\", leaveGuard);\r\n}\r\n/**\r\n* Add a navigation guard that triggers whenever the current location is about\r\n* to be updated. Similar to {@link beforeRouteUpdate} but can be used in any\r\n* component. The guard is removed when the component is unmounted.\r\n*\r\n* @param updateGuard - {@link NavigationGuard}\r\n*/\r\nfunction onBeforeRouteUpdate(updateGuard) {\r\n\tif (process.env.NODE_ENV !== \"production\" && !getCurrentInstance()) {\r\n\t\twarn$1(\"getCurrentInstance() returned null. onBeforeRouteUpdate() must be called at the top of a setup function\");\r\n\t\treturn;\r\n\t}\r\n\tconst activeRecord = inject(matchedRouteKey, {}).value;\r\n\tif (!activeRecord) {\r\n\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(\"No active route record was found when calling `onBeforeRouteUpdate()`. Make sure you call this function inside a component child of . Maybe you called it inside of App.vue?\");\r\n\t\treturn;\r\n\t}\r\n\tregisterGuard(activeRecord, \"updateGuards\", updateGuard);\r\n}\r\nfunction guardToPromiseFn(guard, to, from, record, name, runWithContext = (fn) => fn()) {\r\n\tconst enterCallbackArray = record && (record.enterCallbacks[name] = record.enterCallbacks[name] || []);\r\n\treturn () => new Promise((resolve, reject) => {\r\n\t\tconst next = (valid) => {\r\n\t\t\tif (valid === false) reject(createRouterError(ErrorTypes.NAVIGATION_ABORTED, {\r\n\t\t\t\tfrom,\r\n\t\t\t\tto\r\n\t\t\t}));\r\n\t\t\telse if (valid instanceof Error) reject(valid);\r\n\t\t\telse if (isRouteLocation(valid)) reject(createRouterError(ErrorTypes.NAVIGATION_GUARD_REDIRECT, {\r\n\t\t\t\tfrom: to,\r\n\t\t\t\tto: valid\r\n\t\t\t}));\r\n\t\t\telse {\r\n\t\t\t\tif (enterCallbackArray && record.enterCallbacks[name] === enterCallbackArray && typeof valid === \"function\") enterCallbackArray.push(valid);\r\n\t\t\t\tresolve();\r\n\t\t\t}\r\n\t\t};\r\n\t\tconst guardReturn = runWithContext(() => guard.call(record && record.instances[name], to, from, process.env.NODE_ENV !== \"production\" ? canOnlyBeCalledOnce(next, to, from) : next));\r\n\t\tlet guardCall = Promise.resolve(guardReturn);\r\n\t\tif (guard.length < 3) guardCall = guardCall.then(next);\r\n\t\tif (process.env.NODE_ENV !== \"production\" && guard.length > 2) {\r\n\t\t\tconst message = `The \"next\" callback was never called inside of ${guard.name ? \"\\\"\" + guard.name + \"\\\"\" : \"\"}:\\n${guard.toString()}\\n. If you are returning a value instead of calling \"next\", make sure to remove the \"next\" parameter from your function.`;\r\n\t\t\tif (typeof guardReturn === \"object\" && \"then\" in guardReturn) guardCall = guardCall.then((resolvedValue) => {\r\n\t\t\t\tif (!next._called) {\r\n\t\t\t\t\twarn$1(message);\r\n\t\t\t\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Invalid navigation guard\"));\r\n\t\t\t\t}\r\n\t\t\t\treturn resolvedValue;\r\n\t\t\t});\r\n\t\t\telse if (guardReturn !== void 0) {\r\n\t\t\t\tif (!next._called) {\r\n\t\t\t\t\twarn$1(message);\r\n\t\t\t\t\treject(/* @__PURE__ */ new Error(\"Invalid navigation guard\"));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tguardCall.catch((err) => reject(err));\r\n\t});\r\n}\r\nfunction canOnlyBeCalledOnce(next, to, from) {\r\n\tlet called = 0;\r\n\treturn function() {\r\n\t\tif (called++ === 1) warn$1(`The \"next\" callback was called more than once in one navigation guard when going from \"${from.fullPath}\" to \"${to.fullPath}\". It should be called exactly one time in each navigation guard. This will fail in production.`);\r\n\t\tnext._called = true;\r\n\t\tif (called === 1) next.apply(null, arguments);\r\n\t};\r\n}\r\nfunction extractComponentsGuards(matched, guardType, to, from, runWithContext = (fn) => fn()) {\r\n\tconst guards = [];\r\n\tfor (const record of matched) {\r\n\t\tif (process.env.NODE_ENV !== \"production\" && !record.components && record.children && !record.children.length) warn$1(`Record with path \"${record.path}\" is either missing a \"component(s)\" or \"children\" property.`);\r\n\t\tfor (const name in record.components) {\r\n\t\t\tlet rawComponent = record.components[name];\r\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\r\n\t\t\t\tif (!rawComponent || typeof rawComponent !== \"object\" && typeof rawComponent !== \"function\") {\r\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is not a valid component. Received \"${String(rawComponent)}\".`);\r\n\t\t\t\t\tthrow new Error(\"Invalid route component\");\r\n\t\t\t\t} else if (\"then\" in rawComponent) {\r\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is a Promise instead of a function that returns a Promise. Did you write \"import('./MyPage.vue')\" instead of \"() => import('./MyPage.vue')\" ? This will break in production if not fixed.`);\r\n\t\t\t\t\tconst promise = rawComponent;\r\n\t\t\t\t\trawComponent = () => promise;\r\n\t\t\t\t} else if (rawComponent.__asyncLoader && !rawComponent.__warnedDefineAsync) {\r\n\t\t\t\t\trawComponent.__warnedDefineAsync = true;\r\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is defined using \"defineAsyncComponent()\". Write \"() => import('./MyPage.vue')\" instead of \"defineAsyncComponent(() => import('./MyPage.vue'))\".`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (guardType !== \"beforeRouteEnter\" && !record.instances[name]) continue;\r\n\t\t\tif (isRouteComponent(rawComponent)) {\r\n\t\t\t\tconst guard = (rawComponent.__vccOpts || rawComponent)[guardType];\r\n\t\t\t\tguard && guards.push(guardToPromiseFn(guard, to, from, record, name, runWithContext));\r\n\t\t\t} else {\r\n\t\t\t\tlet componentPromise = rawComponent();\r\n\t\t\t\tif (process.env.NODE_ENV !== \"production\" && !(\"catch\" in componentPromise)) {\r\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is a function that does not return a Promise. If you were passing a functional component, make sure to add a \"displayName\" to the component. This will break in production if not fixed.`);\r\n\t\t\t\t\tcomponentPromise = Promise.resolve(componentPromise);\r\n\t\t\t\t}\r\n\t\t\t\tguards.push(() => componentPromise.then((resolved) => {\r\n\t\t\t\t\tif (!resolved) throw new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\"`);\r\n\t\t\t\t\tconst resolvedComponent = isESModule(resolved) ? resolved.default : resolved;\r\n\t\t\t\t\trecord.mods[name] = resolved;\r\n\t\t\t\t\trecord.components[name] = resolvedComponent;\r\n\t\t\t\t\tconst guard = (resolvedComponent.__vccOpts || resolvedComponent)[guardType];\r\n\t\t\t\t\treturn guard && guardToPromiseFn(guard, to, from, record, name, runWithContext)();\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn guards;\r\n}\r\n/**\r\n* Ensures a route is loaded, so it can be passed as o prop to ``.\r\n*\r\n* @param route - resolved route to load\r\n*/\r\nfunction loadRouteLocation(route) {\r\n\treturn route.matched.every((record) => record.redirect) ? Promise.reject(/* @__PURE__ */ new Error(\"Cannot load a route that redirects.\")) : Promise.all(route.matched.map((record) => record.components && Promise.all(Object.keys(record.components).reduce((promises, name) => {\r\n\t\tconst rawComponent = record.components[name];\r\n\t\tif (typeof rawComponent === \"function\" && !(\"displayName\" in rawComponent)) promises.push(rawComponent().then((resolved) => {\r\n\t\t\tif (!resolved) return Promise.reject(/* @__PURE__ */ new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\". Ensure you passed a function that returns a promise.`));\r\n\t\t\tconst resolvedComponent = isESModule(resolved) ? resolved.default : resolved;\r\n\t\t\trecord.mods[name] = resolved;\r\n\t\t\trecord.components[name] = resolvedComponent;\r\n\t\t}));\r\n\t\treturn promises;\r\n\t}, [])))).then(() => route);\r\n}\r\n/**\r\n* Split the leaving, updating, and entering records.\r\n* @internal\r\n*\r\n* @param to - Location we are navigating to\r\n* @param from - Location we are navigating from\r\n*/\r\nfunction extractChangingRecords(to, from) {\r\n\tconst leavingRecords = [];\r\n\tconst updatingRecords = [];\r\n\tconst enteringRecords = [];\r\n\tconst len = Math.max(from.matched.length, to.matched.length);\r\n\tfor (let i = 0; i < len; i++) {\r\n\t\tconst recordFrom = from.matched[i];\r\n\t\tif (recordFrom) if (to.matched.find((record) => isSameRouteRecord(record, recordFrom))) updatingRecords.push(recordFrom);\r\n\t\telse leavingRecords.push(recordFrom);\r\n\t\tconst recordTo = to.matched[i];\r\n\t\tif (recordTo) {\r\n\t\t\tif (!from.matched.find((record) => isSameRouteRecord(record, recordTo))) enteringRecords.push(recordTo);\r\n\t\t}\r\n\t}\r\n\treturn [\r\n\t\tleavingRecords,\r\n\t\tupdatingRecords,\r\n\t\tenteringRecords\r\n\t];\r\n}\r\n\r\n//#endregion\r\n//#region src/devtools.ts\r\n/**\r\n* Copies a route location and removes any problematic properties that cannot be shown in devtools (e.g. Vue instances).\r\n*\r\n* @param routeLocation - routeLocation to format\r\n* @param tooltip - optional tooltip\r\n* @returns a copy of the routeLocation\r\n*/\r\nfunction formatRouteLocation(routeLocation, tooltip) {\r\n\tconst copy = assign({}, routeLocation, { matched: routeLocation.matched.map((matched) => omit(matched, [\r\n\t\t\"instances\",\r\n\t\t\"children\",\r\n\t\t\"aliasOf\"\r\n\t])) });\r\n\treturn { _custom: {\r\n\t\ttype: null,\r\n\t\treadOnly: true,\r\n\t\tdisplay: routeLocation.fullPath,\r\n\t\ttooltip,\r\n\t\tvalue: copy\r\n\t} };\r\n}\r\nfunction formatDisplay(display) {\r\n\treturn { _custom: { display } };\r\n}\r\nlet routerId = 0;\r\nfunction addDevtools(app, router, matcher) {\r\n\tif (router.__hasDevtools) return;\r\n\trouter.__hasDevtools = true;\r\n\tconst id = routerId++;\r\n\tsetupDevtoolsPlugin({\r\n\t\tid: \"org.vuejs.router\" + (id ? \".\" + id : \"\"),\r\n\t\tlabel: \"Vue Router\",\r\n\t\tpackageName: \"vue-router\",\r\n\t\thomepage: \"https://router.vuejs.org\",\r\n\t\tlogo: \"https://router.vuejs.org/logo.png\",\r\n\t\tcomponentStateTypes: [\"Routing\"],\r\n\t\tapp\r\n\t}, (api) => {\r\n\t\tif (typeof api.now !== \"function\") warn$1(\"[Vue Router]: You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.\");\r\n\t\tapi.on.inspectComponent((payload, ctx) => {\r\n\t\t\tif (payload.instanceData) payload.instanceData.state.push({\r\n\t\t\t\ttype: \"Routing\",\r\n\t\t\t\tkey: \"$route\",\r\n\t\t\t\teditable: false,\r\n\t\t\t\tvalue: formatRouteLocation(router.currentRoute.value, \"Current Route\")\r\n\t\t\t});\r\n\t\t});\r\n\t\tapi.on.visitComponentTree(({ treeNode: node, componentInstance }) => {\r\n\t\t\tif (componentInstance.__vrv_devtools) {\r\n\t\t\t\tconst info = componentInstance.__vrv_devtools;\r\n\t\t\t\tnode.tags.push({\r\n\t\t\t\t\tlabel: (info.name ? `${info.name.toString()}: ` : \"\") + info.path,\r\n\t\t\t\t\ttextColor: 0,\r\n\t\t\t\t\ttooltip: \"This component is rendered by <router-view>\",\r\n\t\t\t\t\tbackgroundColor: PINK_500\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (isArray(componentInstance.__vrl_devtools)) {\r\n\t\t\t\tcomponentInstance.__devtoolsApi = api;\r\n\t\t\t\tcomponentInstance.__vrl_devtools.forEach((devtoolsData) => {\r\n\t\t\t\t\tlet label = devtoolsData.route.path;\r\n\t\t\t\t\tlet backgroundColor = ORANGE_400;\r\n\t\t\t\t\tlet tooltip = \"\";\r\n\t\t\t\t\tlet textColor = 0;\r\n\t\t\t\t\tif (devtoolsData.error) {\r\n\t\t\t\t\t\tlabel = devtoolsData.error;\r\n\t\t\t\t\t\tbackgroundColor = RED_100;\r\n\t\t\t\t\t\ttextColor = RED_700;\r\n\t\t\t\t\t} else if (devtoolsData.isExactActive) {\r\n\t\t\t\t\t\tbackgroundColor = LIME_500;\r\n\t\t\t\t\t\ttooltip = \"This is exactly active\";\r\n\t\t\t\t\t} else if (devtoolsData.isActive) {\r\n\t\t\t\t\t\tbackgroundColor = BLUE_600;\r\n\t\t\t\t\t\ttooltip = \"This link is active\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnode.tags.push({\r\n\t\t\t\t\t\tlabel,\r\n\t\t\t\t\t\ttextColor,\r\n\t\t\t\t\t\ttooltip,\r\n\t\t\t\t\t\tbackgroundColor\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\twatch(router.currentRoute, () => {\r\n\t\t\trefreshRoutesView();\r\n\t\t\tapi.notifyComponentUpdate();\r\n\t\t\tapi.sendInspectorTree(routerInspectorId);\r\n\t\t\tapi.sendInspectorState(routerInspectorId);\r\n\t\t});\r\n\t\tconst navigationsLayerId = \"router:navigations:\" + id;\r\n\t\tapi.addTimelineLayer({\r\n\t\t\tid: navigationsLayerId,\r\n\t\t\tlabel: `Router${id ? \" \" + id : \"\"} Navigations`,\r\n\t\t\tcolor: 4237508\r\n\t\t});\r\n\t\trouter.onError((error, to) => {\r\n\t\t\tapi.addTimelineEvent({\r\n\t\t\t\tlayerId: navigationsLayerId,\r\n\t\t\t\tevent: {\r\n\t\t\t\t\ttitle: \"Error during Navigation\",\r\n\t\t\t\t\tsubtitle: to.fullPath,\r\n\t\t\t\t\tlogType: \"error\",\r\n\t\t\t\t\ttime: api.now(),\r\n\t\t\t\t\tdata: { error },\r\n\t\t\t\t\tgroupId: to.meta.__navigationId\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t\tlet navigationId = 0;\r\n\t\trouter.beforeEach((to, from) => {\r\n\t\t\tconst data = {\r\n\t\t\t\tguard: formatDisplay(\"beforeEach\"),\r\n\t\t\t\tfrom: formatRouteLocation(from, \"Current Location during this navigation\"),\r\n\t\t\t\tto: formatRouteLocation(to, \"Target location\")\r\n\t\t\t};\r\n\t\t\tObject.defineProperty(to.meta, \"__navigationId\", { value: navigationId++ });\r\n\t\t\tapi.addTimelineEvent({\r\n\t\t\t\tlayerId: navigationsLayerId,\r\n\t\t\t\tevent: {\r\n\t\t\t\t\ttime: api.now(),\r\n\t\t\t\t\ttitle: \"Start of navigation\",\r\n\t\t\t\t\tsubtitle: to.fullPath,\r\n\t\t\t\t\tdata,\r\n\t\t\t\t\tgroupId: to.meta.__navigationId\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t\trouter.afterEach((to, from, failure) => {\r\n\t\t\tconst data = { guard: formatDisplay(\"afterEach\") };\r\n\t\t\tif (failure) {\r\n\t\t\t\tdata.failure = { _custom: {\r\n\t\t\t\t\ttype: Error,\r\n\t\t\t\t\treadOnly: true,\r\n\t\t\t\t\tdisplay: failure ? failure.message : \"\",\r\n\t\t\t\t\ttooltip: \"Navigation Failure\",\r\n\t\t\t\t\tvalue: failure\r\n\t\t\t\t} };\r\n\t\t\t\tdata.status = formatDisplay(\"❌\");\r\n\t\t\t} else data.status = formatDisplay(\"✅\");\r\n\t\t\tdata.from = formatRouteLocation(from, \"Current Location during this navigation\");\r\n\t\t\tdata.to = formatRouteLocation(to, \"Target location\");\r\n\t\t\tapi.addTimelineEvent({\r\n\t\t\t\tlayerId: navigationsLayerId,\r\n\t\t\t\tevent: {\r\n\t\t\t\t\ttitle: \"End of navigation\",\r\n\t\t\t\t\tsubtitle: to.fullPath,\r\n\t\t\t\t\ttime: api.now(),\r\n\t\t\t\t\tdata,\r\n\t\t\t\t\tlogType: failure ? \"warning\" : \"default\",\r\n\t\t\t\t\tgroupId: to.meta.__navigationId\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t\t/**\r\n\t\t* Inspector of Existing routes\r\n\t\t*/\r\n\t\tconst routerInspectorId = \"router-inspector:\" + id;\r\n\t\tapi.addInspector({\r\n\t\t\tid: routerInspectorId,\r\n\t\t\tlabel: \"Routes\" + (id ? \" \" + id : \"\"),\r\n\t\t\ticon: \"book\",\r\n\t\t\ttreeFilterPlaceholder: \"Search routes\"\r\n\t\t});\r\n\t\tfunction refreshRoutesView() {\r\n\t\t\tif (!activeRoutesPayload) return;\r\n\t\t\tconst payload = activeRoutesPayload;\r\n\t\t\tlet routes = matcher.getRoutes().filter((route) => !route.parent || !route.parent.record.components);\r\n\t\t\troutes.forEach(resetMatchStateOnRouteRecord);\r\n\t\t\tif (payload.filter) routes = routes.filter((route) => isRouteMatching(route, payload.filter.toLowerCase()));\r\n\t\t\troutes.forEach((route) => markRouteRecordActive(route, router.currentRoute.value));\r\n\t\t\tpayload.rootNodes = routes.map(formatRouteRecordForInspector);\r\n\t\t}\r\n\t\tlet activeRoutesPayload;\r\n\t\tapi.on.getInspectorTree((payload) => {\r\n\t\t\tactiveRoutesPayload = payload;\r\n\t\t\tif (payload.app === app && payload.inspectorId === routerInspectorId) refreshRoutesView();\r\n\t\t});\r\n\t\t/**\r\n\t\t* Display information about the currently selected route record\r\n\t\t*/\r\n\t\tapi.on.getInspectorState((payload) => {\r\n\t\t\tif (payload.app === app && payload.inspectorId === routerInspectorId) {\r\n\t\t\t\tconst route = matcher.getRoutes().find((route$1) => route$1.record.__vd_id === payload.nodeId);\r\n\t\t\t\tif (route) payload.state = { options: formatRouteRecordMatcherForStateInspector(route) };\r\n\t\t\t}\r\n\t\t});\r\n\t\tapi.sendInspectorTree(routerInspectorId);\r\n\t\tapi.sendInspectorState(routerInspectorId);\r\n\t});\r\n}\r\nfunction modifierForKey(key) {\r\n\tif (key.optional) return key.repeatable ? \"*\" : \"?\";\r\n\telse return key.repeatable ? \"+\" : \"\";\r\n}\r\nfunction formatRouteRecordMatcherForStateInspector(route) {\r\n\tconst { record } = route;\r\n\tconst fields = [{\r\n\t\teditable: false,\r\n\t\tkey: \"path\",\r\n\t\tvalue: record.path\r\n\t}];\r\n\tif (record.name != null) fields.push({\r\n\t\teditable: false,\r\n\t\tkey: \"name\",\r\n\t\tvalue: record.name\r\n\t});\r\n\tfields.push({\r\n\t\teditable: false,\r\n\t\tkey: \"regexp\",\r\n\t\tvalue: route.re\r\n\t});\r\n\tif (route.keys.length) fields.push({\r\n\t\teditable: false,\r\n\t\tkey: \"keys\",\r\n\t\tvalue: { _custom: {\r\n\t\t\ttype: null,\r\n\t\t\treadOnly: true,\r\n\t\t\tdisplay: route.keys.map((key) => `${key.name}${modifierForKey(key)}`).join(\" \"),\r\n\t\t\ttooltip: \"Param keys\",\r\n\t\t\tvalue: route.keys\r\n\t\t} }\r\n\t});\r\n\tif (record.redirect != null) fields.push({\r\n\t\teditable: false,\r\n\t\tkey: \"redirect\",\r\n\t\tvalue: record.redirect\r\n\t});\r\n\tif (route.alias.length) fields.push({\r\n\t\teditable: false,\r\n\t\tkey: \"aliases\",\r\n\t\tvalue: route.alias.map((alias) => alias.record.path)\r\n\t});\r\n\tif (Object.keys(route.record.meta).length) fields.push({\r\n\t\teditable: false,\r\n\t\tkey: \"meta\",\r\n\t\tvalue: route.record.meta\r\n\t});\r\n\tfields.push({\r\n\t\tkey: \"score\",\r\n\t\teditable: false,\r\n\t\tvalue: { _custom: {\r\n\t\t\ttype: null,\r\n\t\t\treadOnly: true,\r\n\t\t\tdisplay: route.score.map((score) => score.join(\", \")).join(\" | \"),\r\n\t\t\ttooltip: \"Score used to sort routes\",\r\n\t\t\tvalue: route.score\r\n\t\t} }\r\n\t});\r\n\treturn fields;\r\n}\r\n/**\r\n* Extracted from tailwind palette\r\n*/\r\nconst PINK_500 = 15485081;\r\nconst BLUE_600 = 2450411;\r\nconst LIME_500 = 8702998;\r\nconst CYAN_400 = 2282478;\r\nconst ORANGE_400 = 16486972;\r\nconst DARK = 6710886;\r\nconst RED_100 = 16704226;\r\nconst RED_700 = 12131356;\r\nfunction formatRouteRecordForInspector(route) {\r\n\tconst tags = [];\r\n\tconst { record } = route;\r\n\tif (record.name != null) tags.push({\r\n\t\tlabel: String(record.name),\r\n\t\ttextColor: 0,\r\n\t\tbackgroundColor: CYAN_400\r\n\t});\r\n\tif (record.aliasOf) tags.push({\r\n\t\tlabel: \"alias\",\r\n\t\ttextColor: 0,\r\n\t\tbackgroundColor: ORANGE_400\r\n\t});\r\n\tif (route.__vd_match) tags.push({\r\n\t\tlabel: \"matches\",\r\n\t\ttextColor: 0,\r\n\t\tbackgroundColor: PINK_500\r\n\t});\r\n\tif (route.__vd_exactActive) tags.push({\r\n\t\tlabel: \"exact\",\r\n\t\ttextColor: 0,\r\n\t\tbackgroundColor: LIME_500\r\n\t});\r\n\tif (route.__vd_active) tags.push({\r\n\t\tlabel: \"active\",\r\n\t\ttextColor: 0,\r\n\t\tbackgroundColor: BLUE_600\r\n\t});\r\n\tif (record.redirect) tags.push({\r\n\t\tlabel: typeof record.redirect === \"string\" ? `redirect: ${record.redirect}` : \"redirects\",\r\n\t\ttextColor: 16777215,\r\n\t\tbackgroundColor: DARK\r\n\t});\r\n\tlet id = record.__vd_id;\r\n\tif (id == null) {\r\n\t\tid = String(routeRecordId++);\r\n\t\trecord.__vd_id = id;\r\n\t}\r\n\treturn {\r\n\t\tid,\r\n\t\tlabel: record.path,\r\n\t\ttags,\r\n\t\tchildren: route.children.map(formatRouteRecordForInspector)\r\n\t};\r\n}\r\nlet routeRecordId = 0;\r\nconst EXTRACT_REGEXP_RE = /^\\/(.*)\\/([a-z]*)$/;\r\nfunction markRouteRecordActive(route, currentRoute) {\r\n\tconst isExactActive = currentRoute.matched.length && isSameRouteRecord(currentRoute.matched[currentRoute.matched.length - 1], route.record);\r\n\troute.__vd_exactActive = route.__vd_active = isExactActive;\r\n\tif (!isExactActive) route.__vd_active = currentRoute.matched.some((match) => isSameRouteRecord(match, route.record));\r\n\troute.children.forEach((childRoute) => markRouteRecordActive(childRoute, currentRoute));\r\n}\r\nfunction resetMatchStateOnRouteRecord(route) {\r\n\troute.__vd_match = false;\r\n\troute.children.forEach(resetMatchStateOnRouteRecord);\r\n}\r\nfunction isRouteMatching(route, filter) {\r\n\tconst found = String(route.re).match(EXTRACT_REGEXP_RE);\r\n\troute.__vd_match = false;\r\n\tif (!found || found.length < 3) return false;\r\n\tif (new RegExp(found[1].replace(/\\$$/, \"\"), found[2]).test(filter)) {\r\n\t\troute.children.forEach((child) => isRouteMatching(child, filter));\r\n\t\tif (route.record.path !== \"/\" || filter === \"/\") {\r\n\t\t\troute.__vd_match = route.re.test(filter);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tconst path = route.record.path.toLowerCase();\r\n\tconst decodedPath = decode(path);\r\n\tif (!filter.startsWith(\"/\") && (decodedPath.includes(filter) || path.includes(filter))) return true;\r\n\tif (decodedPath.startsWith(filter) || path.startsWith(filter)) return true;\r\n\tif (route.record.name && String(route.record.name).includes(filter)) return true;\r\n\treturn route.children.some((child) => isRouteMatching(child, filter));\r\n}\r\nfunction omit(obj, keys) {\r\n\tconst ret = {};\r\n\tfor (const key in obj) if (!keys.includes(key)) ret[key] = obj[key];\r\n\treturn ret;\r\n}\r\n\r\n//#endregion\r\nexport { isBrowser as $, START as A, stringifyURL as B, computeScrollPosition as C, scrollToPosition as D, saveScrollPosition as E, isSameRouteLocation as F, encodePath as G, decode as H, isSameRouteLocationParams as I, assign as J, warn$1 as K, isSameRouteRecord as L, normalizeBase as M, NEW_stringifyURL as N, NavigationDirection as O, START_LOCATION_NORMALIZED as P, noop as Q, parseURL as R, isRouteName as S, getScrollKey as T, encodeHash as U, stripBase as V, encodeParam as W, isArray as X, identityFn as Y, mergeOptions as Z, ErrorTypes as _, loadRouteLocation as a, isNavigationFailure as b, useCallbacks as c, routerKey as d, routerViewLocationKey as f, stringifyQuery as g, parseQuery as h, guardToPromiseFn as i, createHref as j, NavigationType as k, matchedRouteKey as l, normalizeQuery as m, extractChangingRecords as n, onBeforeRouteLeave as o, viewDepthKey as p, applyToParams as q, extractComponentsGuards as r, onBeforeRouteUpdate as s, addDevtools as t, routeLocationKey as u, NavigationFailureType as v, getSavedScrollPosition as w, isRouteLocation as x, createRouterError as y, resolveRelativePath as z };", "/*!\r\n * vue-router v4.6.4\r\n * (c) 2025 Eduardo San Martin Morote\r\n * @license MIT\r\n */\r\nimport { $ as isBrowser, A as START, B as stringifyURL, C as computeScrollPosition, D as scrollToPosition, E as saveScrollPosition, F as isSameRouteLocation, H as decode, I as isSameRouteLocationParams, J as assign, K as warn$1, L as isSameRouteRecord, M as normalizeBase, O as NavigationDirection, P as START_LOCATION_NORMALIZED, Q as noop, R as parseURL, S as isRouteName, T as getScrollKey, U as encodeHash, V as stripBase, W as encodeParam, X as isArray, Z as mergeOptions, _ as ErrorTypes, a as loadRouteLocation, b as isNavigationFailure, c as useCallbacks, d as routerKey, f as routerViewLocationKey, g as stringifyQuery, h as parseQuery, i as guardToPromiseFn, j as createHref, k as NavigationType, l as matchedRouteKey, m as normalizeQuery, n as extractChangingRecords, o as onBeforeRouteLeave, p as viewDepthKey, q as applyToParams, r as extractComponentsGuards, s as onBeforeRouteUpdate, t as addDevtools, u as routeLocationKey, v as NavigationFailureType, w as getSavedScrollPosition, x as isRouteLocation, y as createRouterError } from \"./devtools-EWN81iOl.mjs\";\r\nimport { computed, defineComponent, getCurrentInstance, h, inject, nextTick, provide, reactive, ref, shallowReactive, shallowRef, unref, watch, watchEffect } from \"vue\";\r\n\r\n//#region src/history/html5.ts\r\nlet createBaseLocation = () => location.protocol + \"//\" + location.host;\r\n/**\r\n* Creates a normalized history location from a window.location object\r\n* @param base - The base path\r\n* @param location - The window.location object\r\n*/\r\nfunction createCurrentLocation(base, location$1) {\r\n\tconst { pathname, search, hash } = location$1;\r\n\tconst hashPos = base.indexOf(\"#\");\r\n\tif (hashPos > -1) {\r\n\t\tlet slicePos = hash.includes(base.slice(hashPos)) ? base.slice(hashPos).length : 1;\r\n\t\tlet pathFromHash = hash.slice(slicePos);\r\n\t\tif (pathFromHash[0] !== \"/\") pathFromHash = \"/\" + pathFromHash;\r\n\t\treturn stripBase(pathFromHash, \"\");\r\n\t}\r\n\treturn stripBase(pathname, base) + search + hash;\r\n}\r\nfunction useHistoryListeners(base, historyState, currentLocation, replace) {\r\n\tlet listeners = [];\r\n\tlet teardowns = [];\r\n\tlet pauseState = null;\r\n\tconst popStateHandler = ({ state }) => {\r\n\t\tconst to = createCurrentLocation(base, location);\r\n\t\tconst from = currentLocation.value;\r\n\t\tconst fromState = historyState.value;\r\n\t\tlet delta = 0;\r\n\t\tif (state) {\r\n\t\t\tcurrentLocation.value = to;\r\n\t\t\thistoryState.value = state;\r\n\t\t\tif (pauseState && pauseState === from) {\r\n\t\t\t\tpauseState = null;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdelta = fromState ? state.position - fromState.position : 0;\r\n\t\t} else replace(to);\r\n\t\tlisteners.forEach((listener) => {\r\n\t\t\tlistener(currentLocation.value, from, {\r\n\t\t\t\tdelta,\r\n\t\t\t\ttype: NavigationType.pop,\r\n\t\t\t\tdirection: delta ? delta > 0 ? NavigationDirection.forward : NavigationDirection.back : NavigationDirection.unknown\r\n\t\t\t});\r\n\t\t});\r\n\t};\r\n\tfunction pauseListeners() {\r\n\t\tpauseState = currentLocation.value;\r\n\t}\r\n\tfunction listen(callback) {\r\n\t\tlisteners.push(callback);\r\n\t\tconst teardown = () => {\r\n\t\t\tconst index = listeners.indexOf(callback);\r\n\t\t\tif (index > -1) listeners.splice(index, 1);\r\n\t\t};\r\n\t\tteardowns.push(teardown);\r\n\t\treturn teardown;\r\n\t}\r\n\tfunction beforeUnloadListener() {\r\n\t\tif (document.visibilityState === \"hidden\") {\r\n\t\t\tconst { history: history$1 } = window;\r\n\t\t\tif (!history$1.state) return;\r\n\t\t\thistory$1.replaceState(assign({}, history$1.state, { scroll: computeScrollPosition() }), \"\");\r\n\t\t}\r\n\t}\r\n\tfunction destroy() {\r\n\t\tfor (const teardown of teardowns) teardown();\r\n\t\tteardowns = [];\r\n\t\twindow.removeEventListener(\"popstate\", popStateHandler);\r\n\t\twindow.removeEventListener(\"pagehide\", beforeUnloadListener);\r\n\t\tdocument.removeEventListener(\"visibilitychange\", beforeUnloadListener);\r\n\t}\r\n\twindow.addEventListener(\"popstate\", popStateHandler);\r\n\twindow.addEventListener(\"pagehide\", beforeUnloadListener);\r\n\tdocument.addEventListener(\"visibilitychange\", beforeUnloadListener);\r\n\treturn {\r\n\t\tpauseListeners,\r\n\t\tlisten,\r\n\t\tdestroy\r\n\t};\r\n}\r\n/**\r\n* Creates a state object\r\n*/\r\nfunction buildState(back, current, forward, replaced = false, computeScroll = false) {\r\n\treturn {\r\n\t\tback,\r\n\t\tcurrent,\r\n\t\tforward,\r\n\t\treplaced,\r\n\t\tposition: window.history.length,\r\n\t\tscroll: computeScroll ? computeScrollPosition() : null\r\n\t};\r\n}\r\nfunction useHistoryStateNavigation(base) {\r\n\tconst { history: history$1, location: location$1 } = window;\r\n\tconst currentLocation = { value: createCurrentLocation(base, location$1) };\r\n\tconst historyState = { value: history$1.state };\r\n\tif (!historyState.value) changeLocation(currentLocation.value, {\r\n\t\tback: null,\r\n\t\tcurrent: currentLocation.value,\r\n\t\tforward: null,\r\n\t\tposition: history$1.length - 1,\r\n\t\treplaced: true,\r\n\t\tscroll: null\r\n\t}, true);\r\n\tfunction changeLocation(to, state, replace$1) {\r\n\t\t/**\r\n\t\t* if a base tag is provided, and we are on a normal domain, we have to\r\n\t\t* respect the provided `base` attribute because pushState() will use it and\r\n\t\t* potentially erase anything before the `#` like at\r\n\t\t* https://github.com/vuejs/router/issues/685 where a base of\r\n\t\t* `/folder/#` but a base of `/` would erase the `/folder/` section. If\r\n\t\t* there is no host, the `` tag makes no sense and if there isn't a\r\n\t\t* base tag we can just use everything after the `#`.\r\n\t\t*/\r\n\t\tconst hashIndex = base.indexOf(\"#\");\r\n\t\tconst url = hashIndex > -1 ? (location$1.host && document.querySelector(\"base\") ? base : base.slice(hashIndex)) + to : createBaseLocation() + base + to;\r\n\t\ttry {\r\n\t\t\thistory$1[replace$1 ? \"replaceState\" : \"pushState\"](state, \"\", url);\r\n\t\t\thistoryState.value = state;\r\n\t\t} catch (err) {\r\n\t\t\tif (process.env.NODE_ENV !== \"production\") warn$1(\"Error with push/replace State\", err);\r\n\t\t\telse console.error(err);\r\n\t\t\tlocation$1[replace$1 ? \"replace\" : \"assign\"](url);\r\n\t\t}\r\n\t}\r\n\tfunction replace(to, data) {\r\n\t\tchangeLocation(to, assign({}, history$1.state, buildState(historyState.value.back, to, historyState.value.forward, true), data, { position: historyState.value.position }), true);\r\n\t\tcurrentLocation.value = to;\r\n\t}\r\n\tfunction push(to, data) {\r\n\t\tconst currentState = assign({}, historyState.value, history$1.state, {\r\n\t\t\tforward: to,\r\n\t\t\tscroll: computeScrollPosition()\r\n\t\t});\r\n\t\tif (process.env.NODE_ENV !== \"production\" && !history$1.state) warn$1(\"history.state seems to have been manually replaced without preserving the necessary values. Make sure to preserve existing history state if you are manually calling history.replaceState:\\n\\nhistory.replaceState(history.state, '', url)\\n\\nYou can find more information at https://router.vuejs.org/guide/migration/#Usage-of-history-state\");\r\n\t\tchangeLocation(currentState.current, currentState, true);\r\n\t\tchangeLocation(to, assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data), false);\r\n\t\tcurrentLocation.value = to;\r\n\t}\r\n\treturn {\r\n\t\tlocation: currentLocation,\r\n\t\tstate: historyState,\r\n\t\tpush,\r\n\t\treplace\r\n\t};\r\n}\r\n/**\r\n* Creates an HTML5 history. Most common history for single page applications.\r\n*\r\n* @param base -\r\n*/\r\nfunction createWebHistory(base) {\r\n\tbase = normalizeBase(base);\r\n\tconst historyNavigation = useHistoryStateNavigation(base);\r\n\tconst historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace);\r\n\tfunction go(delta, triggerListeners = true) {\r\n\t\tif (!triggerListeners) historyListeners.pauseListeners();\r\n\t\thistory.go(delta);\r\n\t}\r\n\tconst routerHistory = assign({\r\n\t\tlocation: \"\",\r\n\t\tbase,\r\n\t\tgo,\r\n\t\tcreateHref: createHref.bind(null, base)\r\n\t}, historyNavigation, historyListeners);\r\n\tObject.defineProperty(routerHistory, \"location\", {\r\n\t\tenumerable: true,\r\n\t\tget: () => historyNavigation.location.value\r\n\t});\r\n\tObject.defineProperty(routerHistory, \"state\", {\r\n\t\tenumerable: true,\r\n\t\tget: () => historyNavigation.state.value\r\n\t});\r\n\treturn routerHistory;\r\n}\r\n\r\n//#endregion\r\n//#region src/history/memory.ts\r\n/**\r\n* Creates an in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere.\r\n* It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`.\r\n*\r\n* @param base - Base applied to all urls, defaults to '/'\r\n* @returns a history object that can be passed to the router constructor\r\n*/\r\nfunction createMemoryHistory(base = \"\") {\r\n\tlet listeners = [];\r\n\tlet queue = [[START, {}]];\r\n\tlet position = 0;\r\n\tbase = normalizeBase(base);\r\n\tfunction setLocation(location$1, state = {}) {\r\n\t\tposition++;\r\n\t\tif (position !== queue.length) queue.splice(position);\r\n\t\tqueue.push([location$1, state]);\r\n\t}\r\n\tfunction triggerListeners(to, from, { direction, delta }) {\r\n\t\tconst info = {\r\n\t\t\tdirection,\r\n\t\t\tdelta,\r\n\t\t\ttype: NavigationType.pop\r\n\t\t};\r\n\t\tfor (const callback of listeners) callback(to, from, info);\r\n\t}\r\n\tconst routerHistory = {\r\n\t\tlocation: START,\r\n\t\tstate: {},\r\n\t\tbase,\r\n\t\tcreateHref: createHref.bind(null, base),\r\n\t\treplace(to, state) {\r\n\t\t\tqueue.splice(position--, 1);\r\n\t\t\tsetLocation(to, state);\r\n\t\t},\r\n\t\tpush(to, state) {\r\n\t\t\tsetLocation(to, state);\r\n\t\t},\r\n\t\tlisten(callback) {\r\n\t\t\tlisteners.push(callback);\r\n\t\t\treturn () => {\r\n\t\t\t\tconst index = listeners.indexOf(callback);\r\n\t\t\t\tif (index > -1) listeners.splice(index, 1);\r\n\t\t\t};\r\n\t\t},\r\n\t\tdestroy() {\r\n\t\t\tlisteners = [];\r\n\t\t\tqueue = [[START, {}]];\r\n\t\t\tposition = 0;\r\n\t\t},\r\n\t\tgo(delta, shouldTrigger = true) {\r\n\t\t\tconst from = this.location;\r\n\t\t\tconst direction = delta < 0 ? NavigationDirection.back : NavigationDirection.forward;\r\n\t\t\tposition = Math.max(0, Math.min(position + delta, queue.length - 1));\r\n\t\t\tif (shouldTrigger) triggerListeners(this.location, from, {\r\n\t\t\t\tdirection,\r\n\t\t\t\tdelta\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\tObject.defineProperty(routerHistory, \"location\", {\r\n\t\tenumerable: true,\r\n\t\tget: () => queue[position][0]\r\n\t});\r\n\tObject.defineProperty(routerHistory, \"state\", {\r\n\t\tenumerable: true,\r\n\t\tget: () => queue[position][1]\r\n\t});\r\n\treturn routerHistory;\r\n}\r\n\r\n//#endregion\r\n//#region src/history/hash.ts\r\n/**\r\n* Creates a hash history. Useful for web applications with no host (e.g. `file://`) or when configuring a server to\r\n* handle any URL is not possible.\r\n*\r\n* @param base - optional base to provide. Defaults to `location.pathname + location.search` If there is a `` tag\r\n* in the `head`, its value will be ignored in favor of this parameter **but note it affects all the history.pushState()\r\n* calls**, meaning that if you use a `` tag, it's `href` value **has to match this parameter** (ignoring anything\r\n* after the `#`).\r\n*\r\n* @example\r\n* ```js\r\n* // at https://example.com/folder\r\n* createWebHashHistory() // gives a url of `https://example.com/folder#`\r\n* createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#`\r\n* // if the `#` is provided in the base, it won't be added by `createWebHashHistory`\r\n* createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/`\r\n* // you should avoid doing this because it changes the original url and breaks copying urls\r\n* createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#`\r\n*\r\n* // at file:///usr/etc/folder/index.html\r\n* // for locations with no `host`, the base is ignored\r\n* createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#`\r\n* ```\r\n*/\r\nfunction createWebHashHistory(base) {\r\n\tbase = location.host ? base || location.pathname + location.search : \"\";\r\n\tif (!base.includes(\"#\")) base += \"#\";\r\n\tif (process.env.NODE_ENV !== \"production\" && !base.endsWith(\"#/\") && !base.endsWith(\"#\")) warn$1(`A hash base must end with a \"#\":\\n\"${base}\" should be \"${base.replace(/#.*$/, \"#\")}\".`);\r\n\treturn createWebHistory(base);\r\n}\r\n\r\n//#endregion\r\n//#region src/matcher/pathTokenizer.ts\r\nlet TokenType = /* @__PURE__ */ function(TokenType$1) {\r\n\tTokenType$1[TokenType$1[\"Static\"] = 0] = \"Static\";\r\n\tTokenType$1[TokenType$1[\"Param\"] = 1] = \"Param\";\r\n\tTokenType$1[TokenType$1[\"Group\"] = 2] = \"Group\";\r\n\treturn TokenType$1;\r\n}({});\r\nvar TokenizerState = /* @__PURE__ */ function(TokenizerState$1) {\r\n\tTokenizerState$1[TokenizerState$1[\"Static\"] = 0] = \"Static\";\r\n\tTokenizerState$1[TokenizerState$1[\"Param\"] = 1] = \"Param\";\r\n\tTokenizerState$1[TokenizerState$1[\"ParamRegExp\"] = 2] = \"ParamRegExp\";\r\n\tTokenizerState$1[TokenizerState$1[\"ParamRegExpEnd\"] = 3] = \"ParamRegExpEnd\";\r\n\tTokenizerState$1[TokenizerState$1[\"EscapeNext\"] = 4] = \"EscapeNext\";\r\n\treturn TokenizerState$1;\r\n}(TokenizerState || {});\r\nconst ROOT_TOKEN = {\r\n\ttype: TokenType.Static,\r\n\tvalue: \"\"\r\n};\r\nconst VALID_PARAM_RE = /[a-zA-Z0-9_]/;\r\nfunction tokenizePath(path) {\r\n\tif (!path) return [[]];\r\n\tif (path === \"/\") return [[ROOT_TOKEN]];\r\n\tif (!path.startsWith(\"/\")) throw new Error(process.env.NODE_ENV !== \"production\" ? `Route paths should start with a \"/\": \"${path}\" should be \"/${path}\".` : `Invalid path \"${path}\"`);\r\n\tfunction crash(message) {\r\n\t\tthrow new Error(`ERR (${state})/\"${buffer}\": ${message}`);\r\n\t}\r\n\tlet state = TokenizerState.Static;\r\n\tlet previousState = state;\r\n\tconst tokens = [];\r\n\tlet segment;\r\n\tfunction finalizeSegment() {\r\n\t\tif (segment) tokens.push(segment);\r\n\t\tsegment = [];\r\n\t}\r\n\tlet i = 0;\r\n\tlet char;\r\n\tlet buffer = \"\";\r\n\tlet customRe = \"\";\r\n\tfunction consumeBuffer() {\r\n\t\tif (!buffer) return;\r\n\t\tif (state === TokenizerState.Static) segment.push({\r\n\t\t\ttype: TokenType.Static,\r\n\t\t\tvalue: buffer\r\n\t\t});\r\n\t\telse if (state === TokenizerState.Param || state === TokenizerState.ParamRegExp || state === TokenizerState.ParamRegExpEnd) {\r\n\t\t\tif (segment.length > 1 && (char === \"*\" || char === \"+\")) crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);\r\n\t\t\tsegment.push({\r\n\t\t\t\ttype: TokenType.Param,\r\n\t\t\t\tvalue: buffer,\r\n\t\t\t\tregexp: customRe,\r\n\t\t\t\trepeatable: char === \"*\" || char === \"+\",\r\n\t\t\t\toptional: char === \"*\" || char === \"?\"\r\n\t\t\t});\r\n\t\t} else crash(\"Invalid state to consume buffer\");\r\n\t\tbuffer = \"\";\r\n\t}\r\n\tfunction addCharToBuffer() {\r\n\t\tbuffer += char;\r\n\t}\r\n\twhile (i < path.length) {\r\n\t\tchar = path[i++];\r\n\t\tif (char === \"\\\\\" && state !== TokenizerState.ParamRegExp) {\r\n\t\t\tpreviousState = state;\r\n\t\t\tstate = TokenizerState.EscapeNext;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tswitch (state) {\r\n\t\t\tcase TokenizerState.Static:\r\n\t\t\t\tif (char === \"/\") {\r\n\t\t\t\t\tif (buffer) consumeBuffer();\r\n\t\t\t\t\tfinalizeSegment();\r\n\t\t\t\t} else if (char === \":\") {\r\n\t\t\t\t\tconsumeBuffer();\r\n\t\t\t\t\tstate = TokenizerState.Param;\r\n\t\t\t\t} else addCharToBuffer();\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenizerState.EscapeNext:\r\n\t\t\t\taddCharToBuffer();\r\n\t\t\t\tstate = previousState;\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenizerState.Param:\r\n\t\t\t\tif (char === \"(\") state = TokenizerState.ParamRegExp;\r\n\t\t\t\telse if (VALID_PARAM_RE.test(char)) addCharToBuffer();\r\n\t\t\t\telse {\r\n\t\t\t\t\tconsumeBuffer();\r\n\t\t\t\t\tstate = TokenizerState.Static;\r\n\t\t\t\t\tif (char !== \"*\" && char !== \"?\" && char !== \"+\") i--;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenizerState.ParamRegExp:\r\n\t\t\t\tif (char === \")\") if (customRe[customRe.length - 1] == \"\\\\\") customRe = customRe.slice(0, -1) + char;\r\n\t\t\t\telse state = TokenizerState.ParamRegExpEnd;\r\n\t\t\t\telse customRe += char;\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenizerState.ParamRegExpEnd:\r\n\t\t\t\tconsumeBuffer();\r\n\t\t\t\tstate = TokenizerState.Static;\r\n\t\t\t\tif (char !== \"*\" && char !== \"?\" && char !== \"+\") i--;\r\n\t\t\t\tcustomRe = \"\";\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tcrash(\"Unknown state\");\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tif (state === TokenizerState.ParamRegExp) crash(`Unfinished custom RegExp for param \"${buffer}\"`);\r\n\tconsumeBuffer();\r\n\tfinalizeSegment();\r\n\treturn tokens;\r\n}\r\n\r\n//#endregion\r\n//#region src/matcher/pathParserRanker.ts\r\nconst BASE_PARAM_PATTERN = \"[^/]+?\";\r\nconst BASE_PATH_PARSER_OPTIONS = {\r\n\tsensitive: false,\r\n\tstrict: false,\r\n\tstart: true,\r\n\tend: true\r\n};\r\nvar PathScore = /* @__PURE__ */ function(PathScore$1) {\r\n\tPathScore$1[PathScore$1[\"_multiplier\"] = 10] = \"_multiplier\";\r\n\tPathScore$1[PathScore$1[\"Root\"] = 90] = \"Root\";\r\n\tPathScore$1[PathScore$1[\"Segment\"] = 40] = \"Segment\";\r\n\tPathScore$1[PathScore$1[\"SubSegment\"] = 30] = \"SubSegment\";\r\n\tPathScore$1[PathScore$1[\"Static\"] = 40] = \"Static\";\r\n\tPathScore$1[PathScore$1[\"Dynamic\"] = 20] = \"Dynamic\";\r\n\tPathScore$1[PathScore$1[\"BonusCustomRegExp\"] = 10] = \"BonusCustomRegExp\";\r\n\tPathScore$1[PathScore$1[\"BonusWildcard\"] = -50] = \"BonusWildcard\";\r\n\tPathScore$1[PathScore$1[\"BonusRepeatable\"] = -20] = \"BonusRepeatable\";\r\n\tPathScore$1[PathScore$1[\"BonusOptional\"] = -8] = \"BonusOptional\";\r\n\tPathScore$1[PathScore$1[\"BonusStrict\"] = .7000000000000001] = \"BonusStrict\";\r\n\tPathScore$1[PathScore$1[\"BonusCaseSensitive\"] = .25] = \"BonusCaseSensitive\";\r\n\treturn PathScore$1;\r\n}(PathScore || {});\r\nconst REGEX_CHARS_RE = /[.+*?^${}()[\\]/\\\\]/g;\r\n/**\r\n* Creates a path parser from an array of Segments (a segment is an array of Tokens)\r\n*\r\n* @param segments - array of segments returned by tokenizePath\r\n* @param extraOptions - optional options for the regexp\r\n* @returns a PathParser\r\n*/\r\nfunction tokensToParser(segments, extraOptions) {\r\n\tconst options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions);\r\n\tconst score = [];\r\n\tlet pattern = options.start ? \"^\" : \"\";\r\n\tconst keys = [];\r\n\tfor (const segment of segments) {\r\n\t\tconst segmentScores = segment.length ? [] : [PathScore.Root];\r\n\t\tif (options.strict && !segment.length) pattern += \"/\";\r\n\t\tfor (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {\r\n\t\t\tconst token = segment[tokenIndex];\r\n\t\t\tlet subSegmentScore = PathScore.Segment + (options.sensitive ? PathScore.BonusCaseSensitive : 0);\r\n\t\t\tif (token.type === TokenType.Static) {\r\n\t\t\t\tif (!tokenIndex) pattern += \"/\";\r\n\t\t\t\tpattern += token.value.replace(REGEX_CHARS_RE, \"\\\\$&\");\r\n\t\t\t\tsubSegmentScore += PathScore.Static;\r\n\t\t\t} else if (token.type === TokenType.Param) {\r\n\t\t\t\tconst { value, repeatable, optional, regexp } = token;\r\n\t\t\t\tkeys.push({\r\n\t\t\t\t\tname: value,\r\n\t\t\t\t\trepeatable,\r\n\t\t\t\t\toptional\r\n\t\t\t\t});\r\n\t\t\t\tconst re$1 = regexp ? regexp : BASE_PARAM_PATTERN;\r\n\t\t\t\tif (re$1 !== BASE_PARAM_PATTERN) {\r\n\t\t\t\t\tsubSegmentScore += PathScore.BonusCustomRegExp;\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\t`${re$1}`;\r\n\t\t\t\t\t} catch (err) {\r\n\t\t\t\t\t\tthrow new Error(`Invalid custom RegExp for param \"${value}\" (${re$1}): ` + err.message);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tlet subPattern = repeatable ? `((?:${re$1})(?:/(?:${re$1}))*)` : `(${re$1})`;\r\n\t\t\t\tif (!tokenIndex) subPattern = optional && segment.length < 2 ? `(?:/${subPattern})` : \"/\" + subPattern;\r\n\t\t\t\tif (optional) subPattern += \"?\";\r\n\t\t\t\tpattern += subPattern;\r\n\t\t\t\tsubSegmentScore += PathScore.Dynamic;\r\n\t\t\t\tif (optional) subSegmentScore += PathScore.BonusOptional;\r\n\t\t\t\tif (repeatable) subSegmentScore += PathScore.BonusRepeatable;\r\n\t\t\t\tif (re$1 === \".*\") subSegmentScore += PathScore.BonusWildcard;\r\n\t\t\t}\r\n\t\t\tsegmentScores.push(subSegmentScore);\r\n\t\t}\r\n\t\tscore.push(segmentScores);\r\n\t}\r\n\tif (options.strict && options.end) {\r\n\t\tconst i = score.length - 1;\r\n\t\tscore[i][score[i].length - 1] += PathScore.BonusStrict;\r\n\t}\r\n\tif (!options.strict) pattern += \"/?\";\r\n\tif (options.end) pattern += \"$\";\r\n\telse if (options.strict && !pattern.endsWith(\"/\")) pattern += \"(?:/|$)\";\r\n\tconst re = new RegExp(pattern, options.sensitive ? \"\" : \"i\");\r\n\tfunction parse(path) {\r\n\t\tconst match = path.match(re);\r\n\t\tconst params = {};\r\n\t\tif (!match) return null;\r\n\t\tfor (let i = 1; i < match.length; i++) {\r\n\t\t\tconst value = match[i] || \"\";\r\n\t\t\tconst key = keys[i - 1];\r\n\t\t\tparams[key.name] = value && key.repeatable ? value.split(\"/\") : value;\r\n\t\t}\r\n\t\treturn params;\r\n\t}\r\n\tfunction stringify(params) {\r\n\t\tlet path = \"\";\r\n\t\tlet avoidDuplicatedSlash = false;\r\n\t\tfor (const segment of segments) {\r\n\t\t\tif (!avoidDuplicatedSlash || !path.endsWith(\"/\")) path += \"/\";\r\n\t\t\tavoidDuplicatedSlash = false;\r\n\t\t\tfor (const token of segment) if (token.type === TokenType.Static) path += token.value;\r\n\t\t\telse if (token.type === TokenType.Param) {\r\n\t\t\t\tconst { value, repeatable, optional } = token;\r\n\t\t\t\tconst param = value in params ? params[value] : \"\";\r\n\t\t\t\tif (isArray(param) && !repeatable) throw new Error(`Provided param \"${value}\" is an array but it is not repeatable (* or + modifiers)`);\r\n\t\t\t\tconst text = isArray(param) ? param.join(\"/\") : param;\r\n\t\t\t\tif (!text) if (optional) {\r\n\t\t\t\t\tif (segment.length < 2) if (path.endsWith(\"/\")) path = path.slice(0, -1);\r\n\t\t\t\t\telse avoidDuplicatedSlash = true;\r\n\t\t\t\t} else throw new Error(`Missing required param \"${value}\"`);\r\n\t\t\t\tpath += text;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn path || \"/\";\r\n\t}\r\n\treturn {\r\n\t\tre,\r\n\t\tscore,\r\n\t\tkeys,\r\n\t\tparse,\r\n\t\tstringify\r\n\t};\r\n}\r\n/**\r\n* Compares an array of numbers as used in PathParser.score and returns a\r\n* number. This function can be used to `sort` an array\r\n*\r\n* @param a - first array of numbers\r\n* @param b - second array of numbers\r\n* @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\r\n* should be sorted first\r\n*/\r\nfunction compareScoreArray(a, b) {\r\n\tlet i = 0;\r\n\twhile (i < a.length && i < b.length) {\r\n\t\tconst diff = b[i] - a[i];\r\n\t\tif (diff) return diff;\r\n\t\ti++;\r\n\t}\r\n\tif (a.length < b.length) return a.length === 1 && a[0] === PathScore.Static + PathScore.Segment ? -1 : 1;\r\n\telse if (a.length > b.length) return b.length === 1 && b[0] === PathScore.Static + PathScore.Segment ? 1 : -1;\r\n\treturn 0;\r\n}\r\n/**\r\n* Compare function that can be used with `sort` to sort an array of PathParser\r\n*\r\n* @param a - first PathParser\r\n* @param b - second PathParser\r\n* @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\r\n*/\r\nfunction comparePathParserScore(a, b) {\r\n\tlet i = 0;\r\n\tconst aScore = a.score;\r\n\tconst bScore = b.score;\r\n\twhile (i < aScore.length && i < bScore.length) {\r\n\t\tconst comp = compareScoreArray(aScore[i], bScore[i]);\r\n\t\tif (comp) return comp;\r\n\t\ti++;\r\n\t}\r\n\tif (Math.abs(bScore.length - aScore.length) === 1) {\r\n\t\tif (isLastScoreNegative(aScore)) return 1;\r\n\t\tif (isLastScoreNegative(bScore)) return -1;\r\n\t}\r\n\treturn bScore.length - aScore.length;\r\n}\r\n/**\r\n* This allows detecting splats at the end of a path: /home/:id(.*)*\r\n*\r\n* @param score - score to check\r\n* @returns true if the last entry is negative\r\n*/\r\nfunction isLastScoreNegative(score) {\r\n\tconst last = score[score.length - 1];\r\n\treturn score.length > 0 && last[last.length - 1] < 0;\r\n}\r\nconst PATH_PARSER_OPTIONS_DEFAULTS = {\r\n\tstrict: false,\r\n\tend: true,\r\n\tsensitive: false\r\n};\r\n\r\n//#endregion\r\n//#region src/matcher/pathMatcher.ts\r\nfunction createRouteRecordMatcher(record, parent, options) {\r\n\tconst parser = tokensToParser(tokenizePath(record.path), options);\r\n\tif (process.env.NODE_ENV !== \"production\") {\r\n\t\tconst existingKeys = /* @__PURE__ */ new Set();\r\n\t\tfor (const key of parser.keys) {\r\n\t\t\tif (existingKeys.has(key.name)) warn$1(`Found duplicated params with name \"${key.name}\" for path \"${record.path}\". Only the last one will be available on \"$route.params\".`);\r\n\t\t\texistingKeys.add(key.name);\r\n\t\t}\r\n\t}\r\n\tconst matcher = assign(parser, {\r\n\t\trecord,\r\n\t\tparent,\r\n\t\tchildren: [],\r\n\t\talias: []\r\n\t});\r\n\tif (parent) {\r\n\t\tif (!matcher.record.aliasOf === !parent.record.aliasOf) parent.children.push(matcher);\r\n\t}\r\n\treturn matcher;\r\n}\r\n\r\n//#endregion\r\n//#region src/matcher/index.ts\r\n/**\r\n* Creates a Router Matcher.\r\n*\r\n* @internal\r\n* @param routes - array of initial routes\r\n* @param globalOptions - global route options\r\n*/\r\nfunction createRouterMatcher(routes, globalOptions) {\r\n\tconst matchers = [];\r\n\tconst matcherMap = /* @__PURE__ */ new Map();\r\n\tglobalOptions = mergeOptions(PATH_PARSER_OPTIONS_DEFAULTS, globalOptions);\r\n\tfunction getRecordMatcher(name) {\r\n\t\treturn matcherMap.get(name);\r\n\t}\r\n\tfunction addRoute(record, parent, originalRecord) {\r\n\t\tconst isRootAdd = !originalRecord;\r\n\t\tconst mainNormalizedRecord = normalizeRouteRecord(record);\r\n\t\tif (process.env.NODE_ENV !== \"production\") checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent);\r\n\t\tmainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;\r\n\t\tconst options = mergeOptions(globalOptions, record);\r\n\t\tconst normalizedRecords = [mainNormalizedRecord];\r\n\t\tif (\"alias\" in record) {\r\n\t\t\tconst aliases = typeof record.alias === \"string\" ? [record.alias] : record.alias;\r\n\t\t\tfor (const alias of aliases) normalizedRecords.push(normalizeRouteRecord(assign({}, mainNormalizedRecord, {\r\n\t\t\t\tcomponents: originalRecord ? originalRecord.record.components : mainNormalizedRecord.components,\r\n\t\t\t\tpath: alias,\r\n\t\t\t\taliasOf: originalRecord ? originalRecord.record : mainNormalizedRecord\r\n\t\t\t})));\r\n\t\t}\r\n\t\tlet matcher;\r\n\t\tlet originalMatcher;\r\n\t\tfor (const normalizedRecord of normalizedRecords) {\r\n\t\t\tconst { path } = normalizedRecord;\r\n\t\t\tif (parent && path[0] !== \"/\") {\r\n\t\t\t\tconst parentPath = parent.record.path;\r\n\t\t\t\tconst connectingSlash = parentPath[parentPath.length - 1] === \"/\" ? \"\" : \"/\";\r\n\t\t\t\tnormalizedRecord.path = parent.record.path + (path && connectingSlash + path);\r\n\t\t\t}\r\n\t\t\tif (process.env.NODE_ENV !== \"production\" && normalizedRecord.path === \"*\") throw new Error(\"Catch all routes (\\\"*\\\") must now be defined using a param with a custom regexp.\\nSee more at https://router.vuejs.org/guide/migration/#Removed-star-or-catch-all-routes.\");\r\n\t\t\tmatcher = createRouteRecordMatcher(normalizedRecord, parent, options);\r\n\t\t\tif (process.env.NODE_ENV !== \"production\" && parent && path[0] === \"/\") checkMissingParamsInAbsolutePath(matcher, parent);\r\n\t\t\tif (originalRecord) {\r\n\t\t\t\toriginalRecord.alias.push(matcher);\r\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") checkSameParams(originalRecord, matcher);\r\n\t\t\t} else {\r\n\t\t\t\toriginalMatcher = originalMatcher || matcher;\r\n\t\t\t\tif (originalMatcher !== matcher) originalMatcher.alias.push(matcher);\r\n\t\t\t\tif (isRootAdd && record.name && !isAliasRecord(matcher)) {\r\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") checkSameNameAsAncestor(record, parent);\r\n\t\t\t\t\tremoveRoute(record.name);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (isMatchable(matcher)) insertMatcher(matcher);\r\n\t\t\tif (mainNormalizedRecord.children) {\r\n\t\t\t\tconst children = mainNormalizedRecord.children;\r\n\t\t\t\tfor (let i = 0; i < children.length; i++) addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);\r\n\t\t\t}\r\n\t\t\toriginalRecord = originalRecord || matcher;\r\n\t\t}\r\n\t\treturn originalMatcher ? () => {\r\n\t\t\tremoveRoute(originalMatcher);\r\n\t\t} : noop;\r\n\t}\r\n\tfunction removeRoute(matcherRef) {\r\n\t\tif (isRouteName(matcherRef)) {\r\n\t\t\tconst matcher = matcherMap.get(matcherRef);\r\n\t\t\tif (matcher) {\r\n\t\t\t\tmatcherMap.delete(matcherRef);\r\n\t\t\t\tmatchers.splice(matchers.indexOf(matcher), 1);\r\n\t\t\t\tmatcher.children.forEach(removeRoute);\r\n\t\t\t\tmatcher.alias.forEach(removeRoute);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconst index = matchers.indexOf(matcherRef);\r\n\t\t\tif (index > -1) {\r\n\t\t\t\tmatchers.splice(index, 1);\r\n\t\t\t\tif (matcherRef.record.name) matcherMap.delete(matcherRef.record.name);\r\n\t\t\t\tmatcherRef.children.forEach(removeRoute);\r\n\t\t\t\tmatcherRef.alias.forEach(removeRoute);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tfunction getRoutes() {\r\n\t\treturn matchers;\r\n\t}\r\n\tfunction insertMatcher(matcher) {\r\n\t\tconst index = findInsertionIndex(matcher, matchers);\r\n\t\tmatchers.splice(index, 0, matcher);\r\n\t\tif (matcher.record.name && !isAliasRecord(matcher)) matcherMap.set(matcher.record.name, matcher);\r\n\t}\r\n\tfunction resolve(location$1, currentLocation) {\r\n\t\tlet matcher;\r\n\t\tlet params = {};\r\n\t\tlet path;\r\n\t\tlet name;\r\n\t\tif (\"name\" in location$1 && location$1.name) {\r\n\t\t\tmatcher = matcherMap.get(location$1.name);\r\n\t\t\tif (!matcher) throw createRouterError(ErrorTypes.MATCHER_NOT_FOUND, { location: location$1 });\r\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\r\n\t\t\t\tconst invalidParams = Object.keys(location$1.params || {}).filter((paramName) => !matcher.keys.find((k) => k.name === paramName));\r\n\t\t\t\tif (invalidParams.length) warn$1(`Discarded invalid param(s) \"${invalidParams.join(\"\\\", \\\"\")}\" when navigating. See https://github.com/vuejs/router/blob/main/packages/router/CHANGELOG.md#414-2022-08-22 for more details.`);\r\n\t\t\t}\r\n\t\t\tname = matcher.record.name;\r\n\t\t\tparams = assign(pickParams(currentLocation.params, matcher.keys.filter((k) => !k.optional).concat(matcher.parent ? matcher.parent.keys.filter((k) => k.optional) : []).map((k) => k.name)), location$1.params && pickParams(location$1.params, matcher.keys.map((k) => k.name)));\r\n\t\t\tpath = matcher.stringify(params);\r\n\t\t} else if (location$1.path != null) {\r\n\t\t\tpath = location$1.path;\r\n\t\t\tif (process.env.NODE_ENV !== \"production\" && !path.startsWith(\"/\")) warn$1(`The Matcher cannot resolve relative paths but received \"${path}\". Unless you directly called \\`matcher.resolve(\"${path}\")\\`, this is probably a bug in vue-router. Please open an issue at https://github.com/vuejs/router/issues/new/choose.`);\r\n\t\t\tmatcher = matchers.find((m) => m.re.test(path));\r\n\t\t\tif (matcher) {\r\n\t\t\t\tparams = matcher.parse(path);\r\n\t\t\t\tname = matcher.record.name;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tmatcher = currentLocation.name ? matcherMap.get(currentLocation.name) : matchers.find((m) => m.re.test(currentLocation.path));\r\n\t\t\tif (!matcher) throw createRouterError(ErrorTypes.MATCHER_NOT_FOUND, {\r\n\t\t\t\tlocation: location$1,\r\n\t\t\t\tcurrentLocation\r\n\t\t\t});\r\n\t\t\tname = matcher.record.name;\r\n\t\t\tparams = assign({}, currentLocation.params, location$1.params);\r\n\t\t\tpath = matcher.stringify(params);\r\n\t\t}\r\n\t\tconst matched = [];\r\n\t\tlet parentMatcher = matcher;\r\n\t\twhile (parentMatcher) {\r\n\t\t\tmatched.unshift(parentMatcher.record);\r\n\t\t\tparentMatcher = parentMatcher.parent;\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tname,\r\n\t\t\tpath,\r\n\t\t\tparams,\r\n\t\t\tmatched,\r\n\t\t\tmeta: mergeMetaFields(matched)\r\n\t\t};\r\n\t}\r\n\troutes.forEach((route) => addRoute(route));\r\n\tfunction clearRoutes() {\r\n\t\tmatchers.length = 0;\r\n\t\tmatcherMap.clear();\r\n\t}\r\n\treturn {\r\n\t\taddRoute,\r\n\t\tresolve,\r\n\t\tremoveRoute,\r\n\t\tclearRoutes,\r\n\t\tgetRoutes,\r\n\t\tgetRecordMatcher\r\n\t};\r\n}\r\n/**\r\n* Picks an object param to contain only specified keys.\r\n*\r\n* @param params - params object to pick from\r\n* @param keys - keys to pick\r\n*/\r\nfunction pickParams(params, keys) {\r\n\tconst newParams = {};\r\n\tfor (const key of keys) if (key in params) newParams[key] = params[key];\r\n\treturn newParams;\r\n}\r\n/**\r\n* Normalizes a RouteRecordRaw. Creates a copy\r\n*\r\n* @param record\r\n* @returns the normalized version\r\n*/\r\nfunction normalizeRouteRecord(record) {\r\n\tconst normalized = {\r\n\t\tpath: record.path,\r\n\t\tredirect: record.redirect,\r\n\t\tname: record.name,\r\n\t\tmeta: record.meta || {},\r\n\t\taliasOf: record.aliasOf,\r\n\t\tbeforeEnter: record.beforeEnter,\r\n\t\tprops: normalizeRecordProps(record),\r\n\t\tchildren: record.children || [],\r\n\t\tinstances: {},\r\n\t\tleaveGuards: /* @__PURE__ */ new Set(),\r\n\t\tupdateGuards: /* @__PURE__ */ new Set(),\r\n\t\tenterCallbacks: {},\r\n\t\tcomponents: \"components\" in record ? record.components || null : record.component && { default: record.component }\r\n\t};\r\n\tObject.defineProperty(normalized, \"mods\", { value: {} });\r\n\treturn normalized;\r\n}\r\n/**\r\n* Normalize the optional `props` in a record to always be an object similar to\r\n* components. Also accept a boolean for components.\r\n* @param record\r\n*/\r\nfunction normalizeRecordProps(record) {\r\n\tconst propsObject = {};\r\n\tconst props = record.props || false;\r\n\tif (\"component\" in record) propsObject.default = props;\r\n\telse for (const name in record.components) propsObject[name] = typeof props === \"object\" ? props[name] : props;\r\n\treturn propsObject;\r\n}\r\n/**\r\n* Checks if a record or any of its parent is an alias\r\n* @param record\r\n*/\r\nfunction isAliasRecord(record) {\r\n\twhile (record) {\r\n\t\tif (record.record.aliasOf) return true;\r\n\t\trecord = record.parent;\r\n\t}\r\n\treturn false;\r\n}\r\n/**\r\n* Merge meta fields of an array of records\r\n*\r\n* @param matched - array of matched records\r\n*/\r\nfunction mergeMetaFields(matched) {\r\n\treturn matched.reduce((meta, record) => assign(meta, record.meta), {});\r\n}\r\nfunction isSameParam(a, b) {\r\n\treturn a.name === b.name && a.optional === b.optional && a.repeatable === b.repeatable;\r\n}\r\n/**\r\n* Check if a path and its alias have the same required params\r\n*\r\n* @param a - original record\r\n* @param b - alias record\r\n*/\r\nfunction checkSameParams(a, b) {\r\n\tfor (const key of a.keys) if (!key.optional && !b.keys.find(isSameParam.bind(null, key))) return warn$1(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\r\n\tfor (const key of b.keys) if (!key.optional && !a.keys.find(isSameParam.bind(null, key))) return warn$1(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\r\n}\r\n/**\r\n* A route with a name and a child with an empty path without a name should warn when adding the route\r\n*\r\n* @param mainNormalizedRecord - RouteRecordNormalized\r\n* @param parent - RouteRecordMatcher\r\n*/\r\nfunction checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent) {\r\n\tif (parent && parent.record.name && !mainNormalizedRecord.name && !mainNormalizedRecord.path) warn$1(`The route named \"${String(parent.record.name)}\" has a child without a name and an empty path. Using that name won't render the empty path child so you probably want to move the name to the child instead. If this is intentional, add a name to the child route to remove the warning.`);\r\n}\r\nfunction checkSameNameAsAncestor(record, parent) {\r\n\tfor (let ancestor = parent; ancestor; ancestor = ancestor.parent) if (ancestor.record.name === record.name) throw new Error(`A route named \"${String(record.name)}\" has been added as a ${parent === ancestor ? \"child\" : \"descendant\"} of a route with the same name. Route names must be unique and a nested route cannot use the same name as an ancestor.`);\r\n}\r\nfunction checkMissingParamsInAbsolutePath(record, parent) {\r\n\tfor (const key of parent.keys) if (!record.keys.find(isSameParam.bind(null, key))) return warn$1(`Absolute path \"${record.record.path}\" must have the exact same param named \"${key.name}\" as its parent \"${parent.record.path}\".`);\r\n}\r\n/**\r\n* Performs a binary search to find the correct insertion index for a new matcher.\r\n*\r\n* Matchers are primarily sorted by their score. If scores are tied then we also consider parent/child relationships,\r\n* with descendants coming before ancestors. If there's still a tie, new routes are inserted after existing routes.\r\n*\r\n* @param matcher - new matcher to be inserted\r\n* @param matchers - existing matchers\r\n*/\r\nfunction findInsertionIndex(matcher, matchers) {\r\n\tlet lower = 0;\r\n\tlet upper = matchers.length;\r\n\twhile (lower !== upper) {\r\n\t\tconst mid = lower + upper >> 1;\r\n\t\tif (comparePathParserScore(matcher, matchers[mid]) < 0) upper = mid;\r\n\t\telse lower = mid + 1;\r\n\t}\r\n\tconst insertionAncestor = getInsertionAncestor(matcher);\r\n\tif (insertionAncestor) {\r\n\t\tupper = matchers.lastIndexOf(insertionAncestor, upper - 1);\r\n\t\tif (process.env.NODE_ENV !== \"production\" && upper < 0) warn$1(`Finding ancestor route \"${insertionAncestor.record.path}\" failed for \"${matcher.record.path}\"`);\r\n\t}\r\n\treturn upper;\r\n}\r\nfunction getInsertionAncestor(matcher) {\r\n\tlet ancestor = matcher;\r\n\twhile (ancestor = ancestor.parent) if (isMatchable(ancestor) && comparePathParserScore(matcher, ancestor) === 0) return ancestor;\r\n}\r\n/**\r\n* Checks if a matcher can be reachable. This means if it's possible to reach it as a route. For example, routes without\r\n* a component, or name, or redirect, are just used to group other routes.\r\n* @param matcher\r\n* @param matcher.record record of the matcher\r\n* @returns\r\n*/\r\nfunction isMatchable({ record }) {\r\n\treturn !!(record.name || record.components && Object.keys(record.components).length || record.redirect);\r\n}\r\n\r\n//#endregion\r\n//#region src/RouterLink.ts\r\n/**\r\n* Returns the internal behavior of a {@link RouterLink} without the rendering part.\r\n*\r\n* @param props - a `to` location and an optional `replace` flag\r\n*/\r\nfunction useLink(props) {\r\n\tconst router = inject(routerKey);\r\n\tconst currentRoute = inject(routeLocationKey);\r\n\tlet hasPrevious = false;\r\n\tlet previousTo = null;\r\n\tconst route = computed(() => {\r\n\t\tconst to = unref(props.to);\r\n\t\tif (process.env.NODE_ENV !== \"production\" && (!hasPrevious || to !== previousTo)) {\r\n\t\t\tif (!isRouteLocation(to)) if (hasPrevious) warn$1(`Invalid value for prop \"to\" in useLink()\\n- to:`, to, `\\n- previous to:`, previousTo, `\\n- props:`, props);\r\n\t\t\telse warn$1(`Invalid value for prop \"to\" in useLink()\\n- to:`, to, `\\n- props:`, props);\r\n\t\t\tpreviousTo = to;\r\n\t\t\thasPrevious = true;\r\n\t\t}\r\n\t\treturn router.resolve(to);\r\n\t});\r\n\tconst activeRecordIndex = computed(() => {\r\n\t\tconst { matched } = route.value;\r\n\t\tconst { length } = matched;\r\n\t\tconst routeMatched = matched[length - 1];\r\n\t\tconst currentMatched = currentRoute.matched;\r\n\t\tif (!routeMatched || !currentMatched.length) return -1;\r\n\t\tconst index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));\r\n\t\tif (index > -1) return index;\r\n\t\tconst parentRecordPath = getOriginalPath(matched[length - 2]);\r\n\t\treturn length > 1 && getOriginalPath(routeMatched) === parentRecordPath && currentMatched[currentMatched.length - 1].path !== parentRecordPath ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2])) : index;\r\n\t});\r\n\tconst isActive = computed(() => activeRecordIndex.value > -1 && includesParams(currentRoute.params, route.value.params));\r\n\tconst isExactActive = computed(() => activeRecordIndex.value > -1 && activeRecordIndex.value === currentRoute.matched.length - 1 && isSameRouteLocationParams(currentRoute.params, route.value.params));\r\n\tfunction navigate(e = {}) {\r\n\t\tif (guardEvent(e)) {\r\n\t\t\tconst p = router[unref(props.replace) ? \"replace\" : \"push\"](unref(props.to)).catch(noop);\r\n\t\t\tif (props.viewTransition && typeof document !== \"undefined\" && \"startViewTransition\" in document) document.startViewTransition(() => p);\r\n\t\t\treturn p;\r\n\t\t}\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\tif ((process.env.NODE_ENV !== \"production\" || __VUE_PROD_DEVTOOLS__) && isBrowser) {\r\n\t\tconst instance = getCurrentInstance();\r\n\t\tif (instance) {\r\n\t\t\tconst linkContextDevtools = {\r\n\t\t\t\troute: route.value,\r\n\t\t\t\tisActive: isActive.value,\r\n\t\t\t\tisExactActive: isExactActive.value,\r\n\t\t\t\terror: null\r\n\t\t\t};\r\n\t\t\tinstance.__vrl_devtools = instance.__vrl_devtools || [];\r\n\t\t\tinstance.__vrl_devtools.push(linkContextDevtools);\r\n\t\t\twatchEffect(() => {\r\n\t\t\t\tlinkContextDevtools.route = route.value;\r\n\t\t\t\tlinkContextDevtools.isActive = isActive.value;\r\n\t\t\t\tlinkContextDevtools.isExactActive = isExactActive.value;\r\n\t\t\t\tlinkContextDevtools.error = isRouteLocation(unref(props.to)) ? null : \"Invalid \\\"to\\\" value\";\r\n\t\t\t}, { flush: \"post\" });\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t* NOTE: update {@link _RouterLinkI}'s `$slots` type when updating this\r\n\t*/\r\n\treturn {\r\n\t\troute,\r\n\t\thref: computed(() => route.value.href),\r\n\t\tisActive,\r\n\t\tisExactActive,\r\n\t\tnavigate\r\n\t};\r\n}\r\nfunction preferSingleVNode(vnodes) {\r\n\treturn vnodes.length === 1 ? vnodes[0] : vnodes;\r\n}\r\nconst RouterLinkImpl = /* @__PURE__ */ defineComponent({\r\n\tname: \"RouterLink\",\r\n\tcompatConfig: { MODE: 3 },\r\n\tprops: {\r\n\t\tto: {\r\n\t\t\ttype: [String, Object],\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\treplace: Boolean,\r\n\t\tactiveClass: String,\r\n\t\texactActiveClass: String,\r\n\t\tcustom: Boolean,\r\n\t\tariaCurrentValue: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"page\"\r\n\t\t},\r\n\t\tviewTransition: Boolean\r\n\t},\r\n\tuseLink,\r\n\tsetup(props, { slots }) {\r\n\t\tconst link = reactive(useLink(props));\r\n\t\tconst { options } = inject(routerKey);\r\n\t\tconst elClass = computed(() => ({\r\n\t\t\t[getLinkClass(props.activeClass, options.linkActiveClass, \"router-link-active\")]: link.isActive,\r\n\t\t\t[getLinkClass(props.exactActiveClass, options.linkExactActiveClass, \"router-link-exact-active\")]: link.isExactActive\r\n\t\t}));\r\n\t\treturn () => {\r\n\t\t\tconst children = slots.default && preferSingleVNode(slots.default(link));\r\n\t\t\treturn props.custom ? children : h(\"a\", {\r\n\t\t\t\t\"aria-current\": link.isExactActive ? props.ariaCurrentValue : null,\r\n\t\t\t\thref: link.href,\r\n\t\t\t\tonClick: link.navigate,\r\n\t\t\t\tclass: elClass.value\r\n\t\t\t}, children);\r\n\t\t};\r\n\t}\r\n});\r\n/**\r\n* Component to render a link that triggers a navigation on click.\r\n*/\r\nconst RouterLink = RouterLinkImpl;\r\nfunction guardEvent(e) {\r\n\tif (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return;\r\n\tif (e.defaultPrevented) return;\r\n\tif (e.button !== void 0 && e.button !== 0) return;\r\n\tif (e.currentTarget && e.currentTarget.getAttribute) {\r\n\t\tconst target = e.currentTarget.getAttribute(\"target\");\r\n\t\tif (/\\b_blank\\b/i.test(target)) return;\r\n\t}\r\n\tif (e.preventDefault) e.preventDefault();\r\n\treturn true;\r\n}\r\nfunction includesParams(outer, inner) {\r\n\tfor (const key in inner) {\r\n\t\tconst innerValue = inner[key];\r\n\t\tconst outerValue = outer[key];\r\n\t\tif (typeof innerValue === \"string\") {\r\n\t\t\tif (innerValue !== outerValue) return false;\r\n\t\t} else if (!isArray(outerValue) || outerValue.length !== innerValue.length || innerValue.some((value, i) => value.valueOf() !== outerValue[i].valueOf())) return false;\r\n\t}\r\n\treturn true;\r\n}\r\n/**\r\n* Get the original path value of a record by following its aliasOf\r\n* @param record\r\n*/\r\nfunction getOriginalPath(record) {\r\n\treturn record ? record.aliasOf ? record.aliasOf.path : record.path : \"\";\r\n}\r\n/**\r\n* Utility class to get the active class based on defaults.\r\n* @param propClass\r\n* @param globalClass\r\n* @param defaultClass\r\n*/\r\nconst getLinkClass = (propClass, globalClass, defaultClass) => propClass != null ? propClass : globalClass != null ? globalClass : defaultClass;\r\n\r\n//#endregion\r\n//#region src/RouterView.ts\r\nconst RouterViewImpl = /* @__PURE__ */ defineComponent({\r\n\tname: \"RouterView\",\r\n\tinheritAttrs: false,\r\n\tprops: {\r\n\t\tname: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"default\"\r\n\t\t},\r\n\t\troute: Object\r\n\t},\r\n\tcompatConfig: { MODE: 3 },\r\n\tsetup(props, { attrs, slots }) {\r\n\t\tprocess.env.NODE_ENV !== \"production\" && warnDeprecatedUsage();\r\n\t\tconst injectedRoute = inject(routerViewLocationKey);\r\n\t\tconst routeToDisplay = computed(() => props.route || injectedRoute.value);\r\n\t\tconst injectedDepth = inject(viewDepthKey, 0);\r\n\t\tconst depth = computed(() => {\r\n\t\t\tlet initialDepth = unref(injectedDepth);\r\n\t\t\tconst { matched } = routeToDisplay.value;\r\n\t\t\tlet matchedRoute;\r\n\t\t\twhile ((matchedRoute = matched[initialDepth]) && !matchedRoute.components) initialDepth++;\r\n\t\t\treturn initialDepth;\r\n\t\t});\r\n\t\tconst matchedRouteRef = computed(() => routeToDisplay.value.matched[depth.value]);\r\n\t\tprovide(viewDepthKey, computed(() => depth.value + 1));\r\n\t\tprovide(matchedRouteKey, matchedRouteRef);\r\n\t\tprovide(routerViewLocationKey, routeToDisplay);\r\n\t\tconst viewRef = ref();\r\n\t\twatch(() => [\r\n\t\t\tviewRef.value,\r\n\t\t\tmatchedRouteRef.value,\r\n\t\t\tprops.name\r\n\t\t], ([instance, to, name], [oldInstance, from, oldName]) => {\r\n\t\t\tif (to) {\r\n\t\t\t\tto.instances[name] = instance;\r\n\t\t\t\tif (from && from !== to && instance && instance === oldInstance) {\r\n\t\t\t\t\tif (!to.leaveGuards.size) to.leaveGuards = from.leaveGuards;\r\n\t\t\t\t\tif (!to.updateGuards.size) to.updateGuards = from.updateGuards;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (instance && to && (!from || !isSameRouteRecord(to, from) || !oldInstance)) (to.enterCallbacks[name] || []).forEach((callback) => callback(instance));\r\n\t\t}, { flush: \"post\" });\r\n\t\treturn () => {\r\n\t\t\tconst route = routeToDisplay.value;\r\n\t\t\tconst currentName = props.name;\r\n\t\t\tconst matchedRoute = matchedRouteRef.value;\r\n\t\t\tconst ViewComponent = matchedRoute && matchedRoute.components[currentName];\r\n\t\t\tif (!ViewComponent) return normalizeSlot(slots.default, {\r\n\t\t\t\tComponent: ViewComponent,\r\n\t\t\t\troute\r\n\t\t\t});\r\n\t\t\tconst routePropsOption = matchedRoute.props[currentName];\r\n\t\t\tconst routeProps = routePropsOption ? routePropsOption === true ? route.params : typeof routePropsOption === \"function\" ? routePropsOption(route) : routePropsOption : null;\r\n\t\t\tconst onVnodeUnmounted = (vnode) => {\r\n\t\t\t\tif (vnode.component.isUnmounted) matchedRoute.instances[currentName] = null;\r\n\t\t\t};\r\n\t\t\tconst component = h(ViewComponent, assign({}, routeProps, attrs, {\r\n\t\t\t\tonVnodeUnmounted,\r\n\t\t\t\tref: viewRef\r\n\t\t\t}));\r\n\t\t\tif ((process.env.NODE_ENV !== \"production\" || __VUE_PROD_DEVTOOLS__) && isBrowser && component.ref) {\r\n\t\t\t\tconst info = {\r\n\t\t\t\t\tdepth: depth.value,\r\n\t\t\t\t\tname: matchedRoute.name,\r\n\t\t\t\t\tpath: matchedRoute.path,\r\n\t\t\t\t\tmeta: matchedRoute.meta\r\n\t\t\t\t};\r\n\t\t\t\t(isArray(component.ref) ? component.ref.map((r) => r.i) : [component.ref.i]).forEach((instance) => {\r\n\t\t\t\t\tinstance.__vrv_devtools = info;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn normalizeSlot(slots.default, {\r\n\t\t\t\tComponent: component,\r\n\t\t\t\troute\r\n\t\t\t}) || component;\r\n\t\t};\r\n\t}\r\n});\r\nfunction normalizeSlot(slot, data) {\r\n\tif (!slot) return null;\r\n\tconst slotContent = slot(data);\r\n\treturn slotContent.length === 1 ? slotContent[0] : slotContent;\r\n}\r\n/**\r\n* Component to display the current route the user is at.\r\n*/\r\nconst RouterView = RouterViewImpl;\r\nfunction warnDeprecatedUsage() {\r\n\tconst instance = getCurrentInstance();\r\n\tconst parentName = instance.parent && instance.parent.type.name;\r\n\tconst parentSubTreeType = instance.parent && instance.parent.subTree && instance.parent.subTree.type;\r\n\tif (parentName && (parentName === \"KeepAlive\" || parentName.includes(\"Transition\")) && typeof parentSubTreeType === \"object\" && parentSubTreeType.name === \"RouterView\") {\r\n\t\tconst comp = parentName === \"KeepAlive\" ? \"keep-alive\" : \"transition\";\r\n\t\twarn$1(` can no longer be used directly inside or .\r\nUse slot props instead:\r\n\r\n\r\n <${comp}>\\n \\n \\n`);\r\n\t}\r\n}\r\n\r\n//#endregion\r\n//#region src/router.ts\r\n/**\r\n* Creates a Router instance that can be used by a Vue app.\r\n*\r\n* @param options - {@link RouterOptions}\r\n*/\r\nfunction createRouter(options) {\r\n\tconst matcher = createRouterMatcher(options.routes, options);\r\n\tconst parseQuery$1 = options.parseQuery || parseQuery;\r\n\tconst stringifyQuery$1 = options.stringifyQuery || stringifyQuery;\r\n\tconst routerHistory = options.history;\r\n\tif (process.env.NODE_ENV !== \"production\" && !routerHistory) throw new Error(\"Provide the \\\"history\\\" option when calling \\\"createRouter()\\\": https://router.vuejs.org/api/interfaces/RouterOptions.html#history\");\r\n\tconst beforeGuards = useCallbacks();\r\n\tconst beforeResolveGuards = useCallbacks();\r\n\tconst afterGuards = useCallbacks();\r\n\tconst currentRoute = shallowRef(START_LOCATION_NORMALIZED);\r\n\tlet pendingLocation = START_LOCATION_NORMALIZED;\r\n\tif (isBrowser && options.scrollBehavior && \"scrollRestoration\" in history) history.scrollRestoration = \"manual\";\r\n\tconst normalizeParams = applyToParams.bind(null, (paramValue) => \"\" + paramValue);\r\n\tconst encodeParams = applyToParams.bind(null, encodeParam);\r\n\tconst decodeParams = applyToParams.bind(null, decode);\r\n\tfunction addRoute(parentOrRoute, route) {\r\n\t\tlet parent;\r\n\t\tlet record;\r\n\t\tif (isRouteName(parentOrRoute)) {\r\n\t\t\tparent = matcher.getRecordMatcher(parentOrRoute);\r\n\t\t\tif (process.env.NODE_ENV !== \"production\" && !parent) warn$1(`Parent route \"${String(parentOrRoute)}\" not found when adding child route`, route);\r\n\t\t\trecord = route;\r\n\t\t} else record = parentOrRoute;\r\n\t\treturn matcher.addRoute(record, parent);\r\n\t}\r\n\tfunction removeRoute(name) {\r\n\t\tconst recordMatcher = matcher.getRecordMatcher(name);\r\n\t\tif (recordMatcher) matcher.removeRoute(recordMatcher);\r\n\t\telse if (process.env.NODE_ENV !== \"production\") warn$1(`Cannot remove non-existent route \"${String(name)}\"`);\r\n\t}\r\n\tfunction getRoutes() {\r\n\t\treturn matcher.getRoutes().map((routeMatcher) => routeMatcher.record);\r\n\t}\r\n\tfunction hasRoute(name) {\r\n\t\treturn !!matcher.getRecordMatcher(name);\r\n\t}\r\n\tfunction resolve(rawLocation, currentLocation) {\r\n\t\tcurrentLocation = assign({}, currentLocation || currentRoute.value);\r\n\t\tif (typeof rawLocation === \"string\") {\r\n\t\t\tconst locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);\r\n\t\t\tconst matchedRoute$1 = matcher.resolve({ path: locationNormalized.path }, currentLocation);\r\n\t\t\tconst href$1 = routerHistory.createHref(locationNormalized.fullPath);\r\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\r\n\t\t\t\tif (href$1.startsWith(\"//\")) warn$1(`Location \"${rawLocation}\" resolved to \"${href$1}\". A resolved location cannot start with multiple slashes.`);\r\n\t\t\t\telse if (!matchedRoute$1.matched.length) warn$1(`No match found for location with path \"${rawLocation}\"`);\r\n\t\t\t}\r\n\t\t\treturn assign(locationNormalized, matchedRoute$1, {\r\n\t\t\t\tparams: decodeParams(matchedRoute$1.params),\r\n\t\t\t\thash: decode(locationNormalized.hash),\r\n\t\t\t\tredirectedFrom: void 0,\r\n\t\t\t\thref: href$1\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (process.env.NODE_ENV !== \"production\" && !isRouteLocation(rawLocation)) {\r\n\t\t\twarn$1(`router.resolve() was passed an invalid location. This will fail in production.\\n- Location:`, rawLocation);\r\n\t\t\treturn resolve({});\r\n\t\t}\r\n\t\tlet matcherLocation;\r\n\t\tif (rawLocation.path != null) {\r\n\t\t\tif (process.env.NODE_ENV !== \"production\" && \"params\" in rawLocation && !(\"name\" in rawLocation) && Object.keys(rawLocation.params).length) warn$1(`Path \"${rawLocation.path}\" was passed with params but they will be ignored. Use a named route alongside params instead.`);\r\n\t\t\tmatcherLocation = assign({}, rawLocation, { path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path });\r\n\t\t} else {\r\n\t\t\tconst targetParams = assign({}, rawLocation.params);\r\n\t\t\tfor (const key in targetParams) if (targetParams[key] == null) delete targetParams[key];\r\n\t\t\tmatcherLocation = assign({}, rawLocation, { params: encodeParams(targetParams) });\r\n\t\t\tcurrentLocation.params = encodeParams(currentLocation.params);\r\n\t\t}\r\n\t\tconst matchedRoute = matcher.resolve(matcherLocation, currentLocation);\r\n\t\tconst hash = rawLocation.hash || \"\";\r\n\t\tif (process.env.NODE_ENV !== \"production\" && hash && !hash.startsWith(\"#\")) warn$1(`A \\`hash\\` should always start with the character \"#\". Replace \"${hash}\" with \"#${hash}\".`);\r\n\t\tmatchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));\r\n\t\tconst fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, {\r\n\t\t\thash: encodeHash(hash),\r\n\t\t\tpath: matchedRoute.path\r\n\t\t}));\r\n\t\tconst href = routerHistory.createHref(fullPath);\r\n\t\tif (process.env.NODE_ENV !== \"production\") {\r\n\t\t\tif (href.startsWith(\"//\")) warn$1(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\r\n\t\t\telse if (!matchedRoute.matched.length) warn$1(`No match found for location with path \"${rawLocation.path != null ? rawLocation.path : rawLocation}\"`);\r\n\t\t}\r\n\t\treturn assign({\r\n\t\t\tfullPath,\r\n\t\t\thash,\r\n\t\t\tquery: stringifyQuery$1 === stringifyQuery ? normalizeQuery(rawLocation.query) : rawLocation.query || {}\r\n\t\t}, matchedRoute, {\r\n\t\t\tredirectedFrom: void 0,\r\n\t\t\thref\r\n\t\t});\r\n\t}\r\n\tfunction locationAsObject(to) {\r\n\t\treturn typeof to === \"string\" ? parseURL(parseQuery$1, to, currentRoute.value.path) : assign({}, to);\r\n\t}\r\n\tfunction checkCanceledNavigation(to, from) {\r\n\t\tif (pendingLocation !== to) return createRouterError(ErrorTypes.NAVIGATION_CANCELLED, {\r\n\t\t\tfrom,\r\n\t\t\tto\r\n\t\t});\r\n\t}\r\n\tfunction push(to) {\r\n\t\treturn pushWithRedirect(to);\r\n\t}\r\n\tfunction replace(to) {\r\n\t\treturn push(assign(locationAsObject(to), { replace: true }));\r\n\t}\r\n\tfunction handleRedirectRecord(to, from) {\r\n\t\tconst lastMatched = to.matched[to.matched.length - 1];\r\n\t\tif (lastMatched && lastMatched.redirect) {\r\n\t\t\tconst { redirect } = lastMatched;\r\n\t\t\tlet newTargetLocation = typeof redirect === \"function\" ? redirect(to, from) : redirect;\r\n\t\t\tif (typeof newTargetLocation === \"string\") {\r\n\t\t\t\tnewTargetLocation = newTargetLocation.includes(\"?\") || newTargetLocation.includes(\"#\") ? newTargetLocation = locationAsObject(newTargetLocation) : { path: newTargetLocation };\r\n\t\t\t\tnewTargetLocation.params = {};\r\n\t\t\t}\r\n\t\t\tif (process.env.NODE_ENV !== \"production\" && newTargetLocation.path == null && !(\"name\" in newTargetLocation)) {\r\n\t\t\t\twarn$1(`Invalid redirect found:\\n${JSON.stringify(newTargetLocation, null, 2)}\\n when navigating to \"${to.fullPath}\". A redirect must contain a name or path. This will break in production.`);\r\n\t\t\t\tthrow new Error(\"Invalid redirect\");\r\n\t\t\t}\r\n\t\t\treturn assign({\r\n\t\t\t\tquery: to.query,\r\n\t\t\t\thash: to.hash,\r\n\t\t\t\tparams: newTargetLocation.path != null ? {} : to.params\r\n\t\t\t}, newTargetLocation);\r\n\t\t}\r\n\t}\r\n\tfunction pushWithRedirect(to, redirectedFrom) {\r\n\t\tconst targetLocation = pendingLocation = resolve(to);\r\n\t\tconst from = currentRoute.value;\r\n\t\tconst data = to.state;\r\n\t\tconst force = to.force;\r\n\t\tconst replace$1 = to.replace === true;\r\n\t\tconst shouldRedirect = handleRedirectRecord(targetLocation, from);\r\n\t\tif (shouldRedirect) return pushWithRedirect(assign(locationAsObject(shouldRedirect), {\r\n\t\t\tstate: typeof shouldRedirect === \"object\" ? assign({}, data, shouldRedirect.state) : data,\r\n\t\t\tforce,\r\n\t\t\treplace: replace$1\r\n\t\t}), redirectedFrom || targetLocation);\r\n\t\tconst toLocation = targetLocation;\r\n\t\ttoLocation.redirectedFrom = redirectedFrom;\r\n\t\tlet failure;\r\n\t\tif (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) {\r\n\t\t\tfailure = createRouterError(ErrorTypes.NAVIGATION_DUPLICATED, {\r\n\t\t\t\tto: toLocation,\r\n\t\t\t\tfrom\r\n\t\t\t});\r\n\t\t\thandleScroll(from, from, true, false);\r\n\t\t}\r\n\t\treturn (failure ? Promise.resolve(failure) : navigate(toLocation, from)).catch((error) => isNavigationFailure(error) ? isNavigationFailure(error, ErrorTypes.NAVIGATION_GUARD_REDIRECT) ? error : markAsReady(error) : triggerError(error, toLocation, from)).then((failure$1) => {\r\n\t\t\tif (failure$1) {\r\n\t\t\t\tif (isNavigationFailure(failure$1, ErrorTypes.NAVIGATION_GUARD_REDIRECT)) {\r\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\" && isSameRouteLocation(stringifyQuery$1, resolve(failure$1.to), toLocation) && redirectedFrom && (redirectedFrom._count = redirectedFrom._count ? redirectedFrom._count + 1 : 1) > 30) {\r\n\t\t\t\t\t\twarn$1(`Detected a possibly infinite redirection in a navigation guard when going from \"${from.fullPath}\" to \"${toLocation.fullPath}\". Aborting to avoid a Stack Overflow.\\n Are you always returning a new location within a navigation guard? That would lead to this error. Only return when redirecting or aborting, that should fix this. This might break in production if not fixed.`);\r\n\t\t\t\t\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Infinite redirect in navigation guard\"));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn pushWithRedirect(assign({ replace: replace$1 }, locationAsObject(failure$1.to), {\r\n\t\t\t\t\t\tstate: typeof failure$1.to === \"object\" ? assign({}, data, failure$1.to.state) : data,\r\n\t\t\t\t\t\tforce\r\n\t\t\t\t\t}), redirectedFrom || toLocation);\r\n\t\t\t\t}\r\n\t\t\t} else failure$1 = finalizeNavigation(toLocation, from, true, replace$1, data);\r\n\t\t\ttriggerAfterEach(toLocation, from, failure$1);\r\n\t\t\treturn failure$1;\r\n\t\t});\r\n\t}\r\n\t/**\r\n\t* Helper to reject and skip all navigation guards if a new navigation happened\r\n\t* @param to\r\n\t* @param from\r\n\t*/\r\n\tfunction checkCanceledNavigationAndReject(to, from) {\r\n\t\tconst error = checkCanceledNavigation(to, from);\r\n\t\treturn error ? Promise.reject(error) : Promise.resolve();\r\n\t}\r\n\tfunction runWithContext(fn) {\r\n\t\tconst app = installedApps.values().next().value;\r\n\t\treturn app && typeof app.runWithContext === \"function\" ? app.runWithContext(fn) : fn();\r\n\t}\r\n\tfunction navigate(to, from) {\r\n\t\tlet guards;\r\n\t\tconst [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from);\r\n\t\tguards = extractComponentsGuards(leavingRecords.reverse(), \"beforeRouteLeave\", to, from);\r\n\t\tfor (const record of leavingRecords) record.leaveGuards.forEach((guard) => {\r\n\t\t\tguards.push(guardToPromiseFn(guard, to, from));\r\n\t\t});\r\n\t\tconst canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from);\r\n\t\tguards.push(canceledNavigationCheck);\r\n\t\treturn runGuardQueue(guards).then(() => {\r\n\t\t\tguards = [];\r\n\t\t\tfor (const guard of beforeGuards.list()) guards.push(guardToPromiseFn(guard, to, from));\r\n\t\t\tguards.push(canceledNavigationCheck);\r\n\t\t\treturn runGuardQueue(guards);\r\n\t\t}).then(() => {\r\n\t\t\tguards = extractComponentsGuards(updatingRecords, \"beforeRouteUpdate\", to, from);\r\n\t\t\tfor (const record of updatingRecords) record.updateGuards.forEach((guard) => {\r\n\t\t\t\tguards.push(guardToPromiseFn(guard, to, from));\r\n\t\t\t});\r\n\t\t\tguards.push(canceledNavigationCheck);\r\n\t\t\treturn runGuardQueue(guards);\r\n\t\t}).then(() => {\r\n\t\t\tguards = [];\r\n\t\t\tfor (const record of enteringRecords) if (record.beforeEnter) if (isArray(record.beforeEnter)) for (const beforeEnter of record.beforeEnter) guards.push(guardToPromiseFn(beforeEnter, to, from));\r\n\t\t\telse guards.push(guardToPromiseFn(record.beforeEnter, to, from));\r\n\t\t\tguards.push(canceledNavigationCheck);\r\n\t\t\treturn runGuardQueue(guards);\r\n\t\t}).then(() => {\r\n\t\t\tto.matched.forEach((record) => record.enterCallbacks = {});\r\n\t\t\tguards = extractComponentsGuards(enteringRecords, \"beforeRouteEnter\", to, from, runWithContext);\r\n\t\t\tguards.push(canceledNavigationCheck);\r\n\t\t\treturn runGuardQueue(guards);\r\n\t\t}).then(() => {\r\n\t\t\tguards = [];\r\n\t\t\tfor (const guard of beforeResolveGuards.list()) guards.push(guardToPromiseFn(guard, to, from));\r\n\t\t\tguards.push(canceledNavigationCheck);\r\n\t\t\treturn runGuardQueue(guards);\r\n\t\t}).catch((err) => isNavigationFailure(err, ErrorTypes.NAVIGATION_CANCELLED) ? err : Promise.reject(err));\r\n\t}\r\n\tfunction triggerAfterEach(to, from, failure) {\r\n\t\tafterGuards.list().forEach((guard) => runWithContext(() => guard(to, from, failure)));\r\n\t}\r\n\t/**\r\n\t* - Cleans up any navigation guards\r\n\t* - Changes the url if necessary\r\n\t* - Calls the scrollBehavior\r\n\t*/\r\n\tfunction finalizeNavigation(toLocation, from, isPush, replace$1, data) {\r\n\t\tconst error = checkCanceledNavigation(toLocation, from);\r\n\t\tif (error) return error;\r\n\t\tconst isFirstNavigation = from === START_LOCATION_NORMALIZED;\r\n\t\tconst state = !isBrowser ? {} : history.state;\r\n\t\tif (isPush) if (replace$1 || isFirstNavigation) routerHistory.replace(toLocation.fullPath, assign({ scroll: isFirstNavigation && state && state.scroll }, data));\r\n\t\telse routerHistory.push(toLocation.fullPath, data);\r\n\t\tcurrentRoute.value = toLocation;\r\n\t\thandleScroll(toLocation, from, isPush, isFirstNavigation);\r\n\t\tmarkAsReady();\r\n\t}\r\n\tlet removeHistoryListener;\r\n\tfunction setupListeners() {\r\n\t\tif (removeHistoryListener) return;\r\n\t\tremoveHistoryListener = routerHistory.listen((to, _from, info) => {\r\n\t\t\tif (!router.listening) return;\r\n\t\t\tconst toLocation = resolve(to);\r\n\t\t\tconst shouldRedirect = handleRedirectRecord(toLocation, router.currentRoute.value);\r\n\t\t\tif (shouldRedirect) {\r\n\t\t\t\tpushWithRedirect(assign(shouldRedirect, {\r\n\t\t\t\t\treplace: true,\r\n\t\t\t\t\tforce: true\r\n\t\t\t\t}), toLocation).catch(noop);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tpendingLocation = toLocation;\r\n\t\t\tconst from = currentRoute.value;\r\n\t\t\tif (isBrowser) saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition());\r\n\t\t\tnavigate(toLocation, from).catch((error) => {\r\n\t\t\t\tif (isNavigationFailure(error, ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_CANCELLED)) return error;\r\n\t\t\t\tif (isNavigationFailure(error, ErrorTypes.NAVIGATION_GUARD_REDIRECT)) {\r\n\t\t\t\t\tpushWithRedirect(assign(locationAsObject(error.to), { force: true }), toLocation).then((failure) => {\r\n\t\t\t\t\t\tif (isNavigationFailure(failure, ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_DUPLICATED) && !info.delta && info.type === NavigationType.pop) routerHistory.go(-1, false);\r\n\t\t\t\t\t}).catch(noop);\r\n\t\t\t\t\treturn Promise.reject();\r\n\t\t\t\t}\r\n\t\t\t\tif (info.delta) routerHistory.go(-info.delta, false);\r\n\t\t\t\treturn triggerError(error, toLocation, from);\r\n\t\t\t}).then((failure) => {\r\n\t\t\t\tfailure = failure || finalizeNavigation(toLocation, from, false);\r\n\t\t\t\tif (failure) {\r\n\t\t\t\t\tif (info.delta && !isNavigationFailure(failure, ErrorTypes.NAVIGATION_CANCELLED)) routerHistory.go(-info.delta, false);\r\n\t\t\t\t\telse if (info.type === NavigationType.pop && isNavigationFailure(failure, ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_DUPLICATED)) routerHistory.go(-1, false);\r\n\t\t\t\t}\r\n\t\t\t\ttriggerAfterEach(toLocation, from, failure);\r\n\t\t\t}).catch(noop);\r\n\t\t});\r\n\t}\r\n\tlet readyHandlers = useCallbacks();\r\n\tlet errorListeners = useCallbacks();\r\n\tlet ready;\r\n\t/**\r\n\t* Trigger errorListeners added via onError and throws the error as well\r\n\t*\r\n\t* @param error - error to throw\r\n\t* @param to - location we were navigating to when the error happened\r\n\t* @param from - location we were navigating from when the error happened\r\n\t* @returns the error as a rejected promise\r\n\t*/\r\n\tfunction triggerError(error, to, from) {\r\n\t\tmarkAsReady(error);\r\n\t\tconst list = errorListeners.list();\r\n\t\tif (list.length) list.forEach((handler) => handler(error, to, from));\r\n\t\telse {\r\n\t\t\tif (process.env.NODE_ENV !== \"production\") warn$1(\"uncaught error during route navigation:\");\r\n\t\t\tconsole.error(error);\r\n\t\t}\r\n\t\treturn Promise.reject(error);\r\n\t}\r\n\tfunction isReady() {\r\n\t\tif (ready && currentRoute.value !== START_LOCATION_NORMALIZED) return Promise.resolve();\r\n\t\treturn new Promise((resolve$1, reject) => {\r\n\t\t\treadyHandlers.add([resolve$1, reject]);\r\n\t\t});\r\n\t}\r\n\tfunction markAsReady(err) {\r\n\t\tif (!ready) {\r\n\t\t\tready = !err;\r\n\t\t\tsetupListeners();\r\n\t\t\treadyHandlers.list().forEach(([resolve$1, reject]) => err ? reject(err) : resolve$1());\r\n\t\t\treadyHandlers.reset();\r\n\t\t}\r\n\t\treturn err;\r\n\t}\r\n\tfunction handleScroll(to, from, isPush, isFirstNavigation) {\r\n\t\tconst { scrollBehavior } = options;\r\n\t\tif (!isBrowser || !scrollBehavior) return Promise.resolve();\r\n\t\tconst scrollPosition = !isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0)) || (isFirstNavigation || !isPush) && history.state && history.state.scroll || null;\r\n\t\treturn nextTick().then(() => scrollBehavior(to, from, scrollPosition)).then((position) => position && scrollToPosition(position)).catch((err) => triggerError(err, to, from));\r\n\t}\r\n\tconst go = (delta) => routerHistory.go(delta);\r\n\tlet started;\r\n\tconst installedApps = /* @__PURE__ */ new Set();\r\n\tconst router = {\r\n\t\tcurrentRoute,\r\n\t\tlistening: true,\r\n\t\taddRoute,\r\n\t\tremoveRoute,\r\n\t\tclearRoutes: matcher.clearRoutes,\r\n\t\thasRoute,\r\n\t\tgetRoutes,\r\n\t\tresolve,\r\n\t\toptions,\r\n\t\tpush,\r\n\t\treplace,\r\n\t\tgo,\r\n\t\tback: () => go(-1),\r\n\t\tforward: () => go(1),\r\n\t\tbeforeEach: beforeGuards.add,\r\n\t\tbeforeResolve: beforeResolveGuards.add,\r\n\t\tafterEach: afterGuards.add,\r\n\t\tonError: errorListeners.add,\r\n\t\tisReady,\r\n\t\tinstall(app) {\r\n\t\t\tapp.component(\"RouterLink\", RouterLink);\r\n\t\t\tapp.component(\"RouterView\", RouterView);\r\n\t\t\tapp.config.globalProperties.$router = router;\r\n\t\t\tObject.defineProperty(app.config.globalProperties, \"$route\", {\r\n\t\t\t\tenumerable: true,\r\n\t\t\t\tget: () => unref(currentRoute)\r\n\t\t\t});\r\n\t\t\tif (isBrowser && !started && currentRoute.value === START_LOCATION_NORMALIZED) {\r\n\t\t\t\tstarted = true;\r\n\t\t\t\tpush(routerHistory.location).catch((err) => {\r\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") warn$1(\"Unexpected error when starting the router:\", err);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tconst reactiveRoute = {};\r\n\t\t\tfor (const key in START_LOCATION_NORMALIZED) Object.defineProperty(reactiveRoute, key, {\r\n\t\t\t\tget: () => currentRoute.value[key],\r\n\t\t\t\tenumerable: true\r\n\t\t\t});\r\n\t\t\tapp.provide(routerKey, router);\r\n\t\t\tapp.provide(routeLocationKey, shallowReactive(reactiveRoute));\r\n\t\t\tapp.provide(routerViewLocationKey, currentRoute);\r\n\t\t\tconst unmountApp = app.unmount;\r\n\t\t\tinstalledApps.add(app);\r\n\t\t\tapp.unmount = function() {\r\n\t\t\t\tinstalledApps.delete(app);\r\n\t\t\t\tif (installedApps.size < 1) {\r\n\t\t\t\t\tpendingLocation = START_LOCATION_NORMALIZED;\r\n\t\t\t\t\tremoveHistoryListener && removeHistoryListener();\r\n\t\t\t\t\tremoveHistoryListener = null;\r\n\t\t\t\t\tcurrentRoute.value = START_LOCATION_NORMALIZED;\r\n\t\t\t\t\tstarted = false;\r\n\t\t\t\t\tready = false;\r\n\t\t\t\t}\r\n\t\t\t\tunmountApp();\r\n\t\t\t};\r\n\t\t\tif ((process.env.NODE_ENV !== \"production\" || __VUE_PROD_DEVTOOLS__) && isBrowser) addDevtools(app, router, matcher);\r\n\t\t}\r\n\t};\r\n\tfunction runGuardQueue(guards) {\r\n\t\treturn guards.reduce((promise, guard) => promise.then(() => runWithContext(guard)), Promise.resolve());\r\n\t}\r\n\treturn router;\r\n}\r\n\r\n//#endregion\r\n//#region src/useApi.ts\r\n/**\r\n* Returns the router instance. Equivalent to using `$router` inside\r\n* templates.\r\n*/\r\nfunction useRouter() {\r\n\treturn inject(routerKey);\r\n}\r\n/**\r\n* Returns the current route location. Equivalent to using `$route` inside\r\n* templates.\r\n*/\r\nfunction useRoute(_name) {\r\n\treturn inject(routeLocationKey);\r\n}\r\n\r\n//#endregion\r\nexport { NavigationFailureType, RouterLink, RouterView, START_LOCATION_NORMALIZED as START_LOCATION, createMemoryHistory, createRouter, createRouterMatcher, createWebHashHistory, createWebHistory, isNavigationFailure, loadRouteLocation, matchedRouteKey, onBeforeRouteLeave, onBeforeRouteUpdate, parseQuery, routeLocationKey, routerKey, routerViewLocationKey, stringifyQuery, useLink, useRoute, useRouter, viewDepthKey };"], "mappings": "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", "names": ["location", "location"] } diff --git a/admin/node_modules/.vite/deps/vue.js b/admin/node_modules/.vite/deps/vue.js index ba31219c..e027c9c3 100644 --- a/admin/node_modules/.vite/deps/vue.js +++ b/admin/node_modules/.vite/deps/vue.js @@ -170,7 +170,7 @@ import { withMemo, withModifiers, withScopeId -} from "./chunk-H2732BJL.js"; +} from "./chunk-ELEEJBJQ.js"; import "./chunk-G3PMV62Z.js"; export { BaseTransition, diff --git a/admin/package-lock.json b/admin/package-lock.json index 832f4daa..e7f459dc 100644 --- a/admin/package-lock.json +++ b/admin/package-lock.json @@ -9,6 +9,8 @@ "version": "1.0.0", "dependencies": { "@element-plus/icons-vue": "^2.3.1", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", "axios": "^1.6.2", "dayjs": "^1.11.10", "echarts": "^5.4.3", @@ -69,6 +71,15 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/types": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", @@ -1254,6 +1265,12 @@ "win32" ] }, + "node_modules/@transloadit/prettier-bytes": { + "version": "0.0.7", + "resolved": "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz", + "integrity": "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==", + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -1261,6 +1278,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/@types/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==", + "license": "MIT" + }, "node_modules/@types/lodash": { "version": "4.17.23", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz", @@ -1272,6 +1295,7 @@ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", "license": "MIT", + "peer": true, "dependencies": { "@types/lodash": "*" } @@ -1282,6 +1306,63 @@ "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", "license": "MIT" }, + "node_modules/@uppy/companion-client": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/@uppy/companion-client/-/companion-client-2.2.2.tgz", + "integrity": "sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==", + "license": "MIT", + "dependencies": { + "@uppy/utils": "^4.1.2", + "namespace-emitter": "^2.0.1" + } + }, + "node_modules/@uppy/core": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/@uppy/core/-/core-2.3.4.tgz", + "integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@transloadit/prettier-bytes": "0.0.7", + "@uppy/store-default": "^2.1.1", + "@uppy/utils": "^4.1.3", + "lodash.throttle": "^4.1.1", + "mime-match": "^1.0.2", + "namespace-emitter": "^2.0.1", + "nanoid": "^3.1.25", + "preact": "^10.5.13" + } + }, + "node_modules/@uppy/store-default": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/@uppy/store-default/-/store-default-2.1.1.tgz", + "integrity": "sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==", + "license": "MIT" + }, + "node_modules/@uppy/utils": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@uppy/utils/-/utils-4.1.3.tgz", + "integrity": "sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==", + "license": "MIT", + "dependencies": { + "lodash.throttle": "^4.1.1" + } + }, + "node_modules/@uppy/xhr-upload": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz", + "integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@uppy/companion-client": "^2.2.2", + "@uppy/utils": "^4.1.2", + "nanoid": "^3.1.25" + }, + "peerDependencies": { + "@uppy/core": "^2.3.3" + } + }, "node_modules/@vitejs/plugin-vue": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", @@ -1438,6 +1519,168 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@wangeditor/basic-modules": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz", + "integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-url": "^1.2.4" + }, + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.throttle": "^4.1.1", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/code-highlight": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz", + "integrity": "sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.23.0" + }, + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/core": { + "version": "1.1.19", + "resolved": "https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz", + "integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/event-emitter": "^0.3.3", + "event-emitter": "^0.3.5", + "html-void-elements": "^2.0.0", + "i18next": "^20.4.0", + "scroll-into-view-if-needed": "^2.2.28", + "slate-history": "^0.66.0" + }, + "peerDependencies": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/editor": { + "version": "5.1.23", + "resolved": "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz", + "integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "^1.1.7", + "@wangeditor/code-highlight": "^1.0.3", + "@wangeditor/core": "^1.1.19", + "@wangeditor/list-module": "^1.0.5", + "@wangeditor/table-module": "^1.1.4", + "@wangeditor/upload-image-module": "^1.0.2", + "@wangeditor/video-module": "^1.1.4", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/editor-for-vue": { + "version": "5.1.12", + "resolved": "https://registry.npmmirror.com/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz", + "integrity": "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==", + "license": "MIT", + "peerDependencies": { + "@wangeditor/editor": ">=5.1.0", + "vue": "^3.0.5" + } + }, + "node_modules/@wangeditor/list-module": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz", + "integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==", + "license": "MIT", + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/table-module": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz", + "integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==", + "license": "MIT", + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/upload-image-module": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz", + "integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==", + "license": "MIT", + "peerDependencies": { + "@uppy/core": "^2.0.3", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "1.x", + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.foreach": "^4.5.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/video-module": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz", + "integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==", + "license": "MIT", + "peerDependencies": { + "@uppy/core": "^2.1.4", + "@uppy/xhr-upload": "^2.0.7", + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", @@ -1647,6 +1890,12 @@ "node": ">= 0.8" } }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==", + "license": "MIT" + }, "node_modules/confbox": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", @@ -1660,6 +1909,19 @@ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/dayjs": { "version": "1.11.19", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", @@ -1719,6 +1981,16 @@ "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", "license": "MIT" }, + "node_modules/dom7": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz", + "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==", + "license": "MIT", + "peer": true, + "dependencies": { + "ssr-window": "^3.0.0-alpha.1" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -1831,6 +2103,46 @@ "node": ">= 0.4" } }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -1883,12 +2195,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "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==", "license": "MIT" }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/exsolve": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", @@ -1896,6 +2233,15 @@ "dev": true, "license": "MIT" }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -2119,6 +2465,35 @@ "node": ">= 0.4" } }, + "node_modules/html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/i18next": { + "version": "20.6.1", + "resolved": "https://registry.npmmirror.com/i18next/-/i18next-20.6.1.tgz", + "integrity": "sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.0" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/immutable": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", @@ -2187,6 +2562,13 @@ "node": ">=0.10.0" } }, + "node_modules/is-hotkey": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz", + "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==", + "license": "MIT", + "peer": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2197,6 +2579,21 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "license": "MIT" + }, "node_modules/js-tokens": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", @@ -2237,13 +2634,15 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash-es": { "version": "4.17.22", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz", "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash-unified": { "version": "1.0.3", @@ -2256,6 +2655,56 @@ "lodash-es": "*" } }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==", + "license": "MIT", + "peer": true + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -2326,6 +2775,15 @@ "node": ">= 0.6" } }, + "node_modules/mime-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/mime-match/-/mime-match-1.0.2.tgz", + "integrity": "sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==", + "license": "ISC", + "dependencies": { + "wildcard": "^1.1.0" + } + }, "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", @@ -2374,6 +2832,12 @@ "dev": true, "license": "MIT" }, + "node_modules/namespace-emitter": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/namespace-emitter/-/namespace-emitter-2.0.1.tgz", + "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==", + "license": "MIT" + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -2385,6 +2849,7 @@ } ], "license": "MIT", + "peer": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -2392,6 +2857,12 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", @@ -2565,6 +3036,25 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/preact": { + "version": "10.28.3", + "resolved": "https://registry.npmmirror.com/preact/-/preact-10.28.3.tgz", + "integrity": "sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -2693,6 +3183,7 @@ "integrity": "sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -2762,6 +3253,7 @@ "integrity": "sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -2777,6 +3269,15 @@ "@parcel/watcher": "^2.4.1" } }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^1.0.20" + } + }, "node_modules/scule": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", @@ -2790,6 +3291,40 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "license": "ISC" }, + "node_modules/slate": { + "version": "0.72.8", + "resolved": "https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz", + "integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==", + "license": "MIT", + "peer": true, + "dependencies": { + "immer": "^9.0.6", + "is-plain-object": "^5.0.0", + "tiny-warning": "^1.0.3" + } + }, + "node_modules/slate-history": { + "version": "0.66.0", + "resolved": "https://registry.npmmirror.com/slate-history/-/slate-history-0.66.0.tgz", + "integrity": "sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^5.0.0" + }, + "peerDependencies": { + "slate": ">=0.65.3" + } + }, + "node_modules/snabbdom": { + "version": "3.6.3", + "resolved": "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.6.3.tgz", + "integrity": "sha512-W2lHLLw2qR2Vv0DcMmcxXqcfdBaIcoN+y/86SmHv8fn4DazEQSH6KN3TjZcWvwujW56OHiiirsbHWZb4vx/0fg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.17.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -2799,6 +3334,12 @@ "node": ">=0.10.0" } }, + "node_modules/ssr-window": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-3.0.0.tgz", + "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==", + "license": "MIT" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -2851,6 +3392,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2870,6 +3417,12 @@ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", "license": "0BSD" }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmmirror.com/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, "node_modules/ufo": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", @@ -3104,6 +3657,7 @@ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -3163,6 +3717,7 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.27.tgz", "integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==", "license": "MIT", + "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.27", "@vue/compiler-sfc": "3.5.27", @@ -3233,6 +3788,12 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "license": "ISC" }, + "node_modules/wildcard": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz", + "integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==", + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/admin/package.json b/admin/package.json index 9f201063..d81efb10 100644 --- a/admin/package.json +++ b/admin/package.json @@ -10,6 +10,8 @@ }, "dependencies": { "@element-plus/icons-vue": "^2.3.1", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", "axios": "^1.6.2", "dayjs": "^1.11.10", "echarts": "^5.4.3", diff --git a/admin/public/favicon.svg b/admin/public/favicon.svg deleted file mode 100644 index 1588314a..00000000 --- a/admin/public/favicon.svg +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/admin/public/logo.png b/admin/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..876f9c76264373335cda097740cb5817eff64877 GIT binary patch literal 179169 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 literal 0 HcmV?d00001 diff --git a/admin/src/api/admin.js b/admin/src/api/admin.js index a15e9428..f01b12e6 100644 --- a/admin/src/api/admin.js +++ b/admin/src/api/admin.js @@ -71,6 +71,12 @@ export const getPointOrders = params => request.get('/admin/point-orders', { par export const verifyOrder = id => request.post(`/admin/point-orders/${id}/verify`) export const verifyByCode = data => request.post('/admin/point-orders/verify-by-code', data) +// === 图文内容管理 === +export const getArticles = params => request.get('/admin/articles', { params }) +export const createArticle = data => request.post('/admin/articles', data) +export const updateArticle = (id, data) => request.put(`/admin/articles/${id}`, data) +export const deleteArticle = id => request.delete(`/admin/articles/${id}`) + // === 文件上传 === export const uploadImage = file => { const formData = new FormData() diff --git a/admin/src/layouts/MainLayout.vue b/admin/src/layouts/MainLayout.vue index ad6941aa..53681e49 100644 --- a/admin/src/layouts/MainLayout.vue +++ b/admin/src/layouts/MainLayout.vue @@ -3,7 +3,7 @@ diff --git a/admin/src/router/index.js b/admin/src/router/index.js index df69d8a5..ca9b35e5 100644 --- a/admin/src/router/index.js +++ b/admin/src/router/index.js @@ -67,6 +67,12 @@ const routes = [ component: () => import("@/views/points/orders.vue"), meta: { title: "兑换订单", icon: "List" }, }, + { + path: "articles", + name: "Articles", + component: () => import("@/views/article/index.vue"), + meta: { title: "活动公告", icon: "Document", superAdmin: true }, + }, { path: "system/users", name: "SystemUsers", diff --git a/admin/src/views/article/index.vue b/admin/src/views/article/index.vue new file mode 100644 index 00000000..462ea3da --- /dev/null +++ b/admin/src/views/article/index.vue @@ -0,0 +1,445 @@ + + + + + + diff --git a/admin/src/views/dashboard/index.vue b/admin/src/views/dashboard/index.vue index 329b6f76..3bf39ab8 100644 --- a/admin/src/views/dashboard/index.vue +++ b/admin/src/views/dashboard/index.vue @@ -529,7 +529,7 @@ const handleConfirmEnter = (e) => { // 搜索用户(自动完成) const handleSearchUsers = async (queryString, cb) => { - if (!queryString || queryString.trim().length < 2) { + if (!queryString || queryString.trim().length < 1) { cb([]) return } diff --git a/logo/logo.png b/logo/logo.png index d8b8d251c619805872c012e63460d727f1ec205a..876f9c76264373335cda097740cb5817eff64877 100644 GIT binary patch literal 179169 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 literal 132231 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 diff --git a/logo/logo.svg b/logo/logo.svg deleted file mode 100644 index 1588314a..00000000 --- a/logo/logo.svg +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/miniprogram/app.js b/miniprogram/app.js index bc729249..7324b4a0 100644 --- a/miniprogram/app.js +++ b/miniprogram/app.js @@ -413,6 +413,30 @@ App({ showCancel: false, }); break; + case "ranking_game_updated": + // 排位赛比分/匹配更新:刷新当前排位赛详情页 + try { + const pages3 = getCurrentPages(); + const currentPage3 = pages3[pages3.length - 1]; + if ( + currentPage3 && + currentPage3.route === "pages/match/ranking/index" + ) { + const targetCode = data.data && data.data.matchCode; + if ( + !targetCode || + !currentPage3.data || + currentPage3.data.matchCode === targetCode + ) { + if (typeof currentPage3.fetchMatchDetail === "function") { + currentPage3.fetchMatchDetail(); + } + } + } + } catch (e) { + console.error("处理 ranking_game_updated 消息失败:", e); + } + break; } }, diff --git a/miniprogram/app.json b/miniprogram/app.json index ca91daf4..4a03078b 100644 --- a/miniprogram/app.json +++ b/miniprogram/app.json @@ -7,6 +7,9 @@ "pages/match/challenge-detail/index", "pages/match/ranking/index", "pages/match/history/index", + "pages/match/recent/index", + "pages/article/list/index", + "pages/article/detail/index", "pages/points/mall/index", "pages/points/records/index", "pages/points/order/index", @@ -52,4 +55,4 @@ }, "style": "v2", "sitemapLocation": "sitemap.json" -} +} \ No newline at end of file diff --git a/miniprogram/pages/article/detail/index.js b/miniprogram/pages/article/detail/index.js new file mode 100644 index 00000000..161ea66b --- /dev/null +++ b/miniprogram/pages/article/detail/index.js @@ -0,0 +1,53 @@ +const app = getApp(); +const util = require("../../../utils/util"); + +Page({ + data: { + id: null, + article: { + title: "", + contentHtml: "", + timeText: "", + categoryName: "", + }, + }, + + onLoad(options) { + const id = options.id; + if (!id) { + wx.showToast({ title: "参数错误", icon: "none" }); + return; + } + this.setData({ id }); + this.fetchDetail(); + }, + + async fetchDetail() { + try { + const res = await app.request(`/api/article/${this.data.id}`); + const data = res.data || {}; + const categoryName = + data.category === "rules" + ? "比赛规则" + : data.category === "notice" + ? "公告" + : ""; + + this.setData({ + article: { + title: data.title || "", + contentHtml: data.contentHtml || "", + timeText: data.createdAt ? util.formatDate(data.createdAt) : "", + categoryName, + }, + }); + if (data.title) { + wx.setNavigationBarTitle({ title: data.title }); + } + } catch (e) { + console.error("获取文章详情失败:", e); + wx.showToast({ title: "内容加载失败", icon: "none" }); + } + }, +}); + diff --git a/miniprogram/pages/article/detail/index.json b/miniprogram/pages/article/detail/index.json new file mode 100644 index 00000000..86478913 --- /dev/null +++ b/miniprogram/pages/article/detail/index.json @@ -0,0 +1,3 @@ +{ + "navigationBarTitleText": "图文详情" +} \ No newline at end of file diff --git a/miniprogram/pages/article/detail/index.wxml b/miniprogram/pages/article/detail/index.wxml new file mode 100644 index 00000000..e2657c24 --- /dev/null +++ b/miniprogram/pages/article/detail/index.wxml @@ -0,0 +1,17 @@ + + + {{article.title}} + + {{article.timeText}} + · + {{article.categoryName}} + + + + + + + + + + diff --git a/miniprogram/pages/article/detail/index.wxss b/miniprogram/pages/article/detail/index.wxss new file mode 100644 index 00000000..20a2e8d7 --- /dev/null +++ b/miniprogram/pages/article/detail/index.wxss @@ -0,0 +1,57 @@ +.page { + min-height: 100vh; + background: #f7f8fa; + display: flex; + flex-direction: column; + padding: 24rpx 24rpx 40rpx; + box-sizing: border-box; +} + +.article-header { + padding-bottom: 16rpx; +} + +.title { + font-size: 34rpx; + font-weight: 600; + color: #111827; + line-height: 1.4; +} + +.meta { + margin-top: 10rpx; + display: flex; + align-items: center; + font-size: 24rpx; + color: #9ca3af; +} + +.dot { + margin: 0 8rpx; +} + +.category { + padding: 2rpx 10rpx; + border-radius: 999rpx; + background: rgba(37, 99, 235, 0.06); + color: #2563eb; +} + +.content-scroll { + flex: 1; + margin-top: 12rpx; +} + +.article-content { + padding: 20rpx; + border-radius: 18rpx; + background: #ffffff; + box-shadow: 0 6rpx 16rpx rgba(15, 23, 42, 0.04); +} + +.article-content rich-text { + font-size: 28rpx; + color: #111827; + line-height: 1.7; +} + diff --git a/miniprogram/pages/article/list/index.js b/miniprogram/pages/article/list/index.js new file mode 100644 index 00000000..9be4569c --- /dev/null +++ b/miniprogram/pages/article/list/index.js @@ -0,0 +1,59 @@ +const app = getApp(); +const util = require("../../../utils/util"); + +Page({ + data: { + articles: [], + loading: false, + }, + + onLoad() { + this.fetchArticles(); + }, + + onPullDownRefresh() { + this.fetchArticles().finally(() => { + wx.stopPullDownRefresh(); + }); + }, + + async fetchArticles() { + this.setData({ loading: true }); + try { + // 活动公告:按当前门店只拉取公告分类最近 10 条 + const storeId = app.globalData.currentStore && app.globalData.currentStore.storeId; + const data = { category: "notice", limit: 10 }; + if (storeId) { + data.store_id = storeId; + } + const res = await app.request("/api/article", { + method: "GET", + data, + }); + const raw = res.data || []; + const articles = raw.map((a) => ({ + id: a.id, + title: a.title, + category: a.category, + categoryName: a.category === "notice" ? "活动公告" : "", + summary: a.summary, + timeText: a.createdAt ? util.formatDate(a.createdAt) : "", + isTop: !!a.isTop, + })); + this.setData({ articles }); + } catch (e) { + console.error("获取文章列表失败:", e); + } finally { + this.setData({ loading: false }); + } + }, + + goDetail(e) { + const id = e.currentTarget.dataset.id; + if (!id) return; + wx.navigateTo({ + url: `/pages/article/detail/index?id=${id}`, + }); + }, +}); + diff --git a/miniprogram/pages/article/list/index.json b/miniprogram/pages/article/list/index.json new file mode 100644 index 00000000..7c14b531 --- /dev/null +++ b/miniprogram/pages/article/list/index.json @@ -0,0 +1,4 @@ +{ + "navigationBarTitleText": "活动公告", + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/miniprogram/pages/article/list/index.wxml b/miniprogram/pages/article/list/index.wxml new file mode 100644 index 00000000..d637ea85 --- /dev/null +++ b/miniprogram/pages/article/list/index.wxml @@ -0,0 +1,45 @@ + + + 活动公告 + 最新活动与重要通知 + + + + 加载中... + + + + 暂无内容 + 敬请期待更多活动与公告 + + + + + + + + {{item.title}} + 置顶 + + + + {{item.summary}} + + + + + + + + diff --git a/miniprogram/pages/article/list/index.wxss b/miniprogram/pages/article/list/index.wxss new file mode 100644 index 00000000..907fb36c --- /dev/null +++ b/miniprogram/pages/article/list/index.wxss @@ -0,0 +1,122 @@ +.page { + min-height: 100vh; + background: #f7f8fa; + padding: 24rpx 24rpx 40rpx; + box-sizing: border-box; +} + +.header { + margin-bottom: 24rpx; +} + +.title { + font-size: 32rpx; + font-weight: 600; + color: #111827; +} + +.subtitle { + margin-top: 8rpx; + font-size: 24rpx; + color: #6b7280; +} + +.loading, +.empty { + margin-top: 120rpx; + text-align: center; + color: #9ca3af; + font-size: 26rpx; +} + +.empty-title { + font-size: 28rpx; + color: #4b5563; +} + +.empty-subtitle { + margin-top: 8rpx; + font-size: 24rpx; + color: #9ca3af; +} + +.list-scroll { + max-height: calc(100vh - 140rpx); +} + +.article-list { + display: flex; + flex-direction: column; + gap: 16rpx; +} + +.article-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 20rpx 24rpx; + border-radius: 18rpx; + background: #ffffff; + box-shadow: 0 6rpx 16rpx rgba(15, 23, 42, 0.04); +} + +.article-main { + flex: 1; + min-width: 0; +} + +.article-title { + font-size: 28rpx; + color: #111827; + font-weight: 600; + margin-bottom: 8rpx; +} + +.article-title-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16rpx; +} + +.article-top-badge { + padding: 4rpx 14rpx; + border-radius: 999rpx; + font-size: 20rpx; + color: #f97316; + background: rgba(249, 115, 22, 0.1); + white-space: nowrap; +} + +.article-meta { + display: flex; + align-items: center; + gap: 12rpx; + margin-bottom: 6rpx; +} + +.article-category { + padding: 4rpx 12rpx; + border-radius: 999rpx; + font-size: 20rpx; + color: #2563eb; + background: rgba(37, 99, 235, 0.06); +} + +.article-time { + font-size: 22rpx; + color: #9ca3af; +} + +.article-summary { + font-size: 24rpx; + color: #6b7280; + line-height: 1.4; +} + +.article-arrow { + margin-left: 16rpx; + font-size: 40rpx; + color: #d1d5db; +} + diff --git a/miniprogram/pages/match/challenge-detail/index.js b/miniprogram/pages/match/challenge-detail/index.js index bccdde2c..ea88d8b4 100644 --- a/miniprogram/pages/match/challenge-detail/index.js +++ b/miniprogram/pages/match/challenge-detail/index.js @@ -4,6 +4,8 @@ Page({ data: { matchId: null, matchInfo: null, + challengerAvatarSrc: "/images/avatar-default.svg", + defenderAvatarSrc: "/images/avatar-default.svg", myRole: null, // 'challenger' | 'defender' | null canAccept: false, canReject: false, @@ -35,20 +37,20 @@ Page({ try { const res = await app.request(`/api/match/${this.data.matchId}`) console.log('API完整响应:', JSON.stringify(res, null, 2)) - + // app.request 返回的是 { code: 0, message, data } // 所以 res.data 才是真正的数据 const matchInfo = res.data console.log('比赛详情数据:', matchInfo) console.log('数据字段:', Object.keys(matchInfo || {})) - + if (!matchInfo) { console.error('比赛详情数据为空') wx.showToast({ title: '数据格式错误', icon: 'none' }) this.setData({ loading: false }) return } - + // 检查关键字段 console.log('关键字段检查:', { hasMyRole: 'myRole' in matchInfo, @@ -63,14 +65,14 @@ Page({ status: matchInfo.status, statusType: typeof matchInfo.status }) - + // 确保布尔值正确设置 let canAccept = Boolean(matchInfo.canAccept) let canReject = Boolean(matchInfo.canReject) let canSubmitScore = Boolean(matchInfo.canSubmitScore) let canConfirmScore = Boolean(matchInfo.canConfirmScore) let myRole = matchInfo.myRole || null - + // 临时方案:如果 myRole 为 null,尝试通过其他方式判断角色 // 适用于待接受状态(status=0)和进行中状态(status=1) if (!myRole && (matchInfo.status === 0 || matchInfo.status === 1)) { @@ -81,7 +83,7 @@ Page({ defender: matchInfo.defender ? { userId: matchInfo.defender.userId, phone: matchInfo.defender.phone } : null, challenger: matchInfo.challenger ? { userId: matchInfo.challenger.userId, phone: matchInfo.challenger.phone } : null }) - + if (currentUser) { // 尝试通过 user_id 判断 if (matchInfo.defender && matchInfo.defender.userId && matchInfo.defender.userId == currentUser.id) { @@ -111,23 +113,23 @@ Page({ } } } - + // 如果状态是待接受且角色是被挑战者,强制设置权限(即使后端没有返回) if (matchInfo.status === 0 && myRole === 'defender') { canAccept = true canReject = true console.log('强制设置接受/拒绝权限(状态=0,角色=defender)') } - + // 最后的备用方案:如果状态是待接受,且当前用户不是挑战者,则可能是被挑战者 // 这种情况下,显示按钮让用户尝试接受/拒绝(如果用户不是被挑战者,后端会拒绝) if (matchInfo.status === 0 && !myRole && !canAccept && !canReject) { // 检查当前用户是否是挑战者 const currentUser = app.globalData.userInfo - const isChallenger = currentUser && matchInfo.challenger && - (matchInfo.challenger.userId == currentUser.id || - (currentUser.phone && matchInfo.challenger.phone === currentUser.phone)) - + const isChallenger = currentUser && matchInfo.challenger && + (matchInfo.challenger.userId == currentUser.id || + (currentUser.phone && matchInfo.challenger.phone === currentUser.phone)) + // 如果不是挑战者,可能是被挑战者,显示按钮 if (!isChallenger) { myRole = 'defender' @@ -136,7 +138,7 @@ Page({ console.log('备用方案:状态为待接受且不是挑战者,假设是被挑战者,显示按钮') } } - + // 处理"进行中"状态(status=1)的操作权限 if (matchInfo.status === 1) { const game = matchInfo.games && matchInfo.games[0] @@ -149,7 +151,7 @@ Page({ canSubmitScore, canConfirmScore }) - + // 如果游戏状态为1(进行中)且未提交比分,双方都可以填写比分 if (game.status === 1 && !game.submitBy) { // 如果后端没有返回 canSubmitScore,但状态允许,则设置权限 @@ -163,7 +165,7 @@ Page({ else if (game.status === 2 && game.submitBy) { // 判断当前用户是否是提交者(submitBy 是 ladder_user_id) let isSubmitter = false - + if (myRole) { // 如果已识别角色,通过比较 submitBy 和 challenger/defender 的 id(ladder_user_id)来判断 if (myRole === 'challenger' && matchInfo.challenger && game.submitBy == matchInfo.challenger.id) { @@ -178,20 +180,20 @@ Page({ const currentUser = app.globalData.userInfo if (currentUser) { // 检查提交者是否是挑战者 - if (matchInfo.challenger && game.submitBy == matchInfo.challenger.id && - currentUser.id == matchInfo.challenger.userId) { + if (matchInfo.challenger && game.submitBy == matchInfo.challenger.id && + currentUser.id == matchInfo.challenger.userId) { isSubmitter = true console.log('当前用户是提交者(通过challenger判断)') } // 检查提交者是否是被挑战者 - else if (matchInfo.defender && game.submitBy == matchInfo.defender.id && - currentUser.id == matchInfo.defender.userId) { + else if (matchInfo.defender && game.submitBy == matchInfo.defender.id && + currentUser.id == matchInfo.defender.userId) { isSubmitter = true console.log('当前用户是提交者(通过defender判断)') } } } - + // 如果不是提交者,且确认状态为待确认,则可以确认比分 if (!isSubmitter && game.confirmStatus === 0) { if (!canConfirmScore) { @@ -206,7 +208,7 @@ Page({ } } } - + // 如果 myRole 仍然为 null,但状态是进行中,尝试通过游戏中的 player1_id 和 player2_id 判断 if (!myRole && game) { const currentUser = app.globalData.userInfo @@ -220,7 +222,7 @@ Page({ challengerUserId: matchInfo.challenger ? matchInfo.challenger.userId : null, defenderUserId: matchInfo.defender ? matchInfo.defender.userId : null }) - + // 通过比较 challenger/defender 的 id(ladder_user_id)和 player1_id/player2_id 来判断 if (matchInfo.challenger && matchInfo.challenger.id == game.player1Id) { // 如果当前用户是挑战者,且挑战者是 player1 @@ -235,7 +237,7 @@ Page({ console.log('通过游戏player2Id识别为挑战者') } } - + if (matchInfo.defender && matchInfo.defender.id == game.player1Id) { // 如果当前用户是被挑战者,且被挑战者是 player1 if (currentUser.id == matchInfo.defender.userId) { @@ -249,11 +251,11 @@ Page({ console.log('通过游戏player2Id识别为被挑战者') } } - + // 如果识别到角色,重新检查操作权限 if (myRole) { console.log('识别到角色后,重新检查操作权限:', { myRole, gameStatus: game.status, submitBy: game.submitBy }) - + // 如果游戏状态为1(进行中)且未提交比分,可以填写比分 if (game.status === 1 && !game.submitBy) { canSubmitScore = true @@ -263,8 +265,8 @@ Page({ else if (game.status === 2 && game.submitBy) { // 判断当前用户是否是提交者 const isSubmitter = (myRole === 'challenger' && matchInfo.challenger && game.submitBy == matchInfo.challenger.id) || - (myRole === 'defender' && matchInfo.defender && game.submitBy == matchInfo.defender.id) - + (myRole === 'defender' && matchInfo.defender && game.submitBy == matchInfo.defender.id) + if (!isSubmitter && game.confirmStatus === 0) { canConfirmScore = true console.log('识别角色后,设置确认比分权限') @@ -274,7 +276,7 @@ Page({ } } } - + console.log('最终设置的操作权限:', { canAccept, canReject, @@ -299,9 +301,11 @@ Page({ phone: app.globalData.userInfo.phone } : null }) - + this.setData({ matchInfo, + challengerAvatarSrc: this.normalizeAvatarSrc(matchInfo?.challenger?.avatar), + defenderAvatarSrc: this.normalizeAvatarSrc(matchInfo?.defender?.avatar), myRole, canAccept, canReject, @@ -309,7 +313,7 @@ Page({ canConfirmScore, loading: false }) - + // 再次检查,如果还是没有按钮,输出详细日志 if (matchInfo.status === 0 && !canAccept && !canReject) { console.error('警告:状态为待接受但没有操作按钮!', { @@ -331,6 +335,35 @@ Page({ } }, + normalizeAvatarSrc(avatar) { + const fallback = "/images/avatar-default.svg"; + if (!avatar) return fallback; + if (typeof avatar !== "string") return fallback; + const a = avatar.trim(); + if (!a) return fallback; + if (a === "null" || a === "undefined") return fallback; + + // 已经是网络地址或小程序临时文件 + if (/^https?:\/\//i.test(a) || a.startsWith("wxfile://")) return a; + + // 服务端可能返回 /uploads/xxx 或 uploads/xxx 之类的相对路径 + const baseUrl = app?.globalData?.baseUrl || ""; + if (!baseUrl) return a; // 没有 baseUrl 时保持原值,让 binderror 兜底 + + if (a.startsWith("/")) return `${baseUrl}${a}`; + return `${baseUrl}/${a}`; + }, + + onAvatarError(e) { + const role = e?.currentTarget?.dataset?.role; + const fallback = "/images/avatar-default.svg"; + if (role === "challenger") { + this.setData({ challengerAvatarSrc: fallback }); + } else if (role === "defender") { + this.setData({ defenderAvatarSrc: fallback }); + } + }, + // 处理挑战请求(从WebSocket调用) handleChallengeRequest(challengeData) { // 如果当前页面是挑战赛详情且是同一个比赛,显示弹框 @@ -457,7 +490,7 @@ Page({ wx.hideLoading() wx.showToast({ title: '比分已提交,等待对方确认', icon: 'success' }) this.closeScoreModal() - + // 刷新数据 setTimeout(() => { this.loadMatchDetail() diff --git a/miniprogram/pages/match/challenge-detail/index.wxml b/miniprogram/pages/match/challenge-detail/index.wxml index 31eea8e6..4cf5ef51 100644 --- a/miniprogram/pages/match/challenge-detail/index.wxml +++ b/miniprogram/pages/match/challenge-detail/index.wxml @@ -23,10 +23,19 @@ 挑战者 - + {{matchInfo.challenger.realName}} - Lv{{matchInfo.challenger.level}} · 战力{{matchInfo.challenger.powerScore}} + + Lv{{matchInfo.challenger.level}} + 战力 {{matchInfo.challenger.powerScore}} + @@ -38,10 +47,19 @@ 被挑战者 - + {{matchInfo.defender.realName}} - Lv{{matchInfo.defender.level}} · 战力{{matchInfo.defender.powerScore}} + + Lv{{matchInfo.defender.level}} + 战力 {{matchInfo.defender.powerScore}} + diff --git a/miniprogram/pages/match/challenge-detail/index.wxss b/miniprogram/pages/match/challenge-detail/index.wxss index 512420c2..8709304f 100644 --- a/miniprogram/pages/match/challenge-detail/index.wxss +++ b/miniprogram/pages/match/challenge-detail/index.wxss @@ -100,9 +100,34 @@ color: var(--text-primary); } -.opponent-level { - font-size: 24rpx; +.opponent-meta { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 12rpx; +} + +.meta-tag { + font-size: 22rpx; + line-height: 1; + padding: 8rpx 14rpx; + border-radius: 999rpx; + background: var(--bg-soft); color: var(--text-secondary); + border: 2rpx solid var(--border-soft); +} + +.meta-level { + background: rgba(93, 156, 236, 0.12); + color: rgba(45, 120, 210, 1); + border-color: rgba(93, 156, 236, 0.28); + font-weight: 600; +} + +.meta-power { + background: rgba(245, 154, 35, 0.12); + color: rgba(210, 115, 0, 1); + border-color: rgba(245, 154, 35, 0.28); } .vs-divider { diff --git a/miniprogram/pages/match/challenge/index.js b/miniprogram/pages/match/challenge/index.js index 23032703..f6e18af7 100644 --- a/miniprogram/pages/match/challenge/index.js +++ b/miniprogram/pages/match/challenge/index.js @@ -1,4 +1,5 @@ const app = getApp(); +const util = require("../../../utils/util"); Page({ data: { @@ -7,6 +8,7 @@ Page({ currentStore: null, ongoingMatches: [], // 正在进行中的比赛 pendingGames: [], // 待确认的比赛 + recentMatches: [], // 最近比赛(用于预览前10场) }, onLoad() { @@ -57,6 +59,7 @@ Page({ if (app.globalData.ladderUser) { this.fetchOngoingMatches(); this.fetchPendingGames(); + this.fetchRecentMatches(); } }, @@ -115,6 +118,53 @@ Page({ } }, + // 获取最近比赛(近7天,最多10场,用于比赛页预览) + async fetchRecentMatches() { + try { + const storeId = this.data.currentStore + ? this.data.currentStore.storeId + : null; + const res = await app.request("/api/match/display-list", { + store_id: storeId, + days: 7, + limit: 10, + }); + const raw = res.data || []; + const recentMatches = raw.map((item) => { + const time = item.startTime || item.createdAt || item.endTime || null; + const stageName = item.stageName || ""; + const statusName = item.statusName || ""; + const showStage = !!stageName && stageName !== statusName; + + let statusType = "pending"; + switch (item.status) { + case 1: + statusType = "ongoing"; + break; + case 2: + statusType = "finished"; + break; + case 3: + statusType = "cancelled"; + break; + default: + statusType = "pending"; + } + + return Object.assign({}, item, { + timeText: time ? util.formatDate(time) : "", + stageName, + statusName, + showStage, + statusType, + }); + }); + this.setData({ recentMatches }); + } catch (e) { + console.error("获取最近比赛失败:", e); + } + }, + startChallenge() { if (!this.data.ladderUser) { wx.showToast({ title: "请先加入天梯系统", icon: "none" }); @@ -259,6 +309,11 @@ Page({ wx.navigateTo({ url: "/pages/store/index" }); }, + // 跳转到最近比赛列表页 + goToRecentMatches() { + wx.navigateTo({ url: "/pages/match/recent/index" }); + }, + // 跳转到比赛详情 goToMatchDetail(e) { const match = e.currentTarget.dataset.match; diff --git a/miniprogram/pages/match/challenge/index.wxml b/miniprogram/pages/match/challenge/index.wxml index 3fe73198..c2d4d5df 100644 --- a/miniprogram/pages/match/challenge/index.wxml +++ b/miniprogram/pages/match/challenge/index.wxml @@ -73,7 +73,7 @@ 挑战赛 1v1 对决 - 权重 ×1.5 + 不服就干 @@ -86,12 +86,12 @@ - + - 进行中的比赛 + 当前比赛 {{ongoingMatches.length}} @@ -151,6 +151,37 @@ + + + + + + 最近比赛 + + + 最近7天 + + + + + + + {{item.name || (item.typeName + (item.matchCode || ''))}} + {{item.typeName}} + + + {{item.storeName}} + {{item.stageName}} + {{item.statusName}} + + + {{item.timeText}} + + + + + + diff --git a/miniprogram/pages/match/challenge/index.wxss b/miniprogram/pages/match/challenge/index.wxss index af11074f..4224f134 100644 --- a/miniprogram/pages/match/challenge/index.wxss +++ b/miniprogram/pages/match/challenge/index.wxss @@ -731,6 +731,149 @@ border: 2rpx solid rgba(255, 107, 53, 0.15); } +/* 最近比赛 */ +.recent-card { + margin-top: 24rpx; + margin-bottom: 24rpx; + padding: 24rpx; + border-radius: 20rpx; + background: #ffffff; + box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04); +} + +.recent-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 12rpx; +} + +.recent-header-left { + display: flex; + align-items: center; + gap: 8rpx; +} + +.recent-icon-img { + width: 32rpx; + height: 32rpx; +} + +.recent-title { + font-size: 28rpx; + font-weight: 600; + color: var(--text-primary); +} + +.recent-actions { + font-size: 24rpx; + color: var(--primary, #ff6b35); +} + +.recent-more-pill { + padding: 8rpx 20rpx; + border-radius: 999rpx; + border: 2rpx solid rgba(255, 107, 53, 0.4); + color: #ff6b35; + background: rgba(255, 248, 243, 0.9); + font-size: 22rpx; +} + +.recent-list { + display: flex; + flex-direction: column; + gap: 12rpx; +} + +.recent-item { + border-radius: 16rpx; + background: #fafafa; + padding: 16rpx 18rpx; + box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.02); +} + +.recent-item:last-child { +} + +.recent-item-inner { + flex: 1; +} + +.recent-line-1 { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 4rpx; +} + +.recent-name { + font-size: 26rpx; + color: var(--text-primary); + max-width: 420rpx; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.recent-type-tag { + font-size: 22rpx; + padding: 4rpx 12rpx; + border-radius: 999rpx; + background: rgba(25, 118, 210, 0.06); + color: #1565c0; +} + +.recent-type-tag.challenge { + background: rgba(255, 152, 0, 0.08); + color: #e65100; +} + +.recent-type-tag.ranking { + background: rgba(25, 118, 210, 0.08); + color: #1565c0; +} + +.recent-line-2 { + display: flex; + align-items: center; + gap: 10rpx; + font-size: 22rpx; + color: var(--text-muted); +} + +.recent-status { + font-weight: 500; + padding: 4rpx 10rpx; + border-radius: 16rpx; + font-size: 20rpx; +} + +.status-pending { + background: rgba(255, 193, 7, 0.12); + color: #ff8f00; +} + +.status-ongoing { + background: rgba(76, 175, 80, 0.12); + color: #2e7d32; +} + +.status-finished { + background: rgba(158, 158, 158, 0.12); + color: #616161; +} + +.status-cancelled { + background: rgba(244, 67, 54, 0.12); + color: #c62828; +} + +.recent-line-3 { + font-size: 22rpx; + color: var(--text-muted); + margin-top: 4rpx; +} + .pending-header { display: flex; align-items: center; @@ -835,6 +978,7 @@ border-radius: 28rpx; padding: 24rpx; box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.06); + margin-top: 0; } .rules-header { diff --git a/miniprogram/pages/match/ranking/index.js b/miniprogram/pages/match/ranking/index.js index 374a9a89..6e3db235 100644 --- a/miniprogram/pages/match/ranking/index.js +++ b/miniprogram/pages/match/ranking/index.js @@ -33,7 +33,7 @@ Page({ async handleSubmitScore() { const { myScoreInput, opponentScoreInput, currentGame } = this.data - + if (!myScoreInput || !opponentScoreInput) { wx.showToast({ title: '请输入比分', icon: 'none' }) return @@ -52,7 +52,7 @@ Page({ my_score: parseInt(myScoreInput), opponent_score: parseInt(opponentScoreInput) }, 'POST') - + wx.showToast({ title: '已提交,等待确认' }) this.fetchCurrentGame() } catch (e) { @@ -77,7 +77,7 @@ Page({ game_id: this.data.currentGame.id, confirm: true }, 'POST') - + wx.showToast({ title: '已确认' }) // 刷新页面以获取最新状态(包括新对局) this.fetchMatchDetail() @@ -105,7 +105,7 @@ Page({ game_id: this.data.currentGame.id, confirm: false }, 'POST') - + wx.showToast({ title: '已标记争议' }) this.fetchCurrentGame() } catch (e) { @@ -130,10 +130,12 @@ Page({ const myPlayer = res.data.players.find(p => p.ladderUserId == ladderUser.id) this.setData({ myPlayer }) - // 获取当前对局 - if (myPlayer && myPlayer.status === 'playing') { - this.fetchCurrentGame() - } + // 不再根据本地 myPlayer.status 决定是否拉取当前对局 + // 后端 /my-game 接口内部会负责: + // - 如果当前有对局:返回对手信息 + // - 如果没有对局但我在 waiting:尝试自动匹配并返回新对局 + // - 否则返回 currentGame: null + this.fetchCurrentGame() } } catch (e) { console.error('获取排位赛详情失败:', e) @@ -143,7 +145,22 @@ Page({ async fetchCurrentGame() { try { const res = await app.request(`/api/match/ranking/${this.data.matchCode}/my-game`) - this.setData({ currentGame: res.data.currentGame }) + const newGame = res.data.currentGame || null + + // 如果切换到了新的对局(或上一局结束变为 null),重置本地输入框 + const prevGameId = this.data.currentGame && this.data.currentGame.id + const newGameId = newGame && newGame.id + const gameChanged = prevGameId !== newGameId + + if (gameChanged) { + this.setData({ + currentGame: newGame, + myScoreInput: '', + opponentScoreInput: '' + }) + } else { + this.setData({ currentGame: newGame }) + } } catch (e) { console.error('获取当前对局失败:', e) } diff --git a/miniprogram/pages/match/ranking/index.wxss b/miniprogram/pages/match/ranking/index.wxss index d79ceb11..a2a3f17e 100644 --- a/miniprogram/pages/match/ranking/index.wxss +++ b/miniprogram/pages/match/ranking/index.wxss @@ -345,6 +345,13 @@ margin-bottom: 8rpx; } +.opponent-meta { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 14rpx; +} + .game-actions { margin-top: 24rpx; padding-top: 24rpx; @@ -480,8 +487,8 @@ } .level-tag { - padding: 4rpx 12rpx; - border-radius: 6rpx; + padding: 6rpx 14rpx; + border-radius: 8rpx; font-size: 20rpx; font-weight: 600; } @@ -510,6 +517,7 @@ .opponent-power { font-size: 24rpx; color: var(--text-secondary); + letter-spacing: 0.5rpx; } /* 参赛选手卡片 */ diff --git a/miniprogram/pages/match/recent/index.js b/miniprogram/pages/match/recent/index.js new file mode 100644 index 00000000..c4e4baa9 --- /dev/null +++ b/miniprogram/pages/match/recent/index.js @@ -0,0 +1,90 @@ +const app = getApp(); +const util = require("../../../utils/util"); + +Page({ + data: { + list: [], + loading: false, + }, + + onLoad() { + this.fetchList(); + }, + + onPullDownRefresh() { + this.fetchList().finally(() => { + wx.stopPullDownRefresh(); + }); + }, + + async fetchList() { + const currentStore = app.globalData.currentStore; + const storeId = currentStore ? currentStore.storeId : null; + + this.setData({ loading: true }); + try { + const res = await app.request("/api/match/display-list", { + store_id: storeId, + days: 7, + limit: 100, + }); + + const raw = res.data || []; + const list = raw.map((item) => { + const time = item.startTime || item.createdAt || item.endTime || null; + const stageName = item.stageName || ""; + const statusName = item.statusName || ""; + + // 如果阶段名和状态名一样(例如都是“已结束”),只显示一次状态 + const showStage = !!stageName && stageName !== statusName; + + // 根据状态生成样式类型 + let statusType = "pending"; + switch (item.status) { + case 1: + statusType = "ongoing"; + break; + case 2: + statusType = "finished"; + break; + case 3: + statusType = "cancelled"; + break; + default: + statusType = "pending"; + } + + return { + ...item, + timeText: time ? util.formatDate(time) : "", + stageName, + statusName, + showStage, + statusType, + }; + }); + + this.setData({ list }); + } catch (e) { + console.error("获取最近比赛列表失败:", e); + } finally { + this.setData({ loading: false }); + } + }, + + goDetail(e) { + const match = e.currentTarget.dataset.match; + if (!match) return; + + if (match.type === 1) { + wx.navigateTo({ + url: `/pages/match/challenge-detail/index?id=${match.id}`, + }); + } else { + wx.navigateTo({ + url: `/pages/match/ranking/index?code=${match.matchCode}`, + }); + } + }, +}); + diff --git a/miniprogram/pages/match/recent/index.json b/miniprogram/pages/match/recent/index.json new file mode 100644 index 00000000..88b6f33d --- /dev/null +++ b/miniprogram/pages/match/recent/index.json @@ -0,0 +1,6 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "最近比赛", + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark" +} \ No newline at end of file diff --git a/miniprogram/pages/match/recent/index.wxml b/miniprogram/pages/match/recent/index.wxml new file mode 100644 index 00000000..47095652 --- /dev/null +++ b/miniprogram/pages/match/recent/index.wxml @@ -0,0 +1,42 @@ + + + + 最近比赛 + 显示近7天内的比赛 + + + + 加载中... + + + + + 暂无比赛数据 + 最近7天内还没有比赛记录 + + + + + + + + {{item.name}} + + {{item.typeName}} + + + + {{item.storeName}} + {{item.stageName}} + {{item.statusName}} + + + {{item.timeText}} + + + + + + + + diff --git a/miniprogram/pages/match/recent/index.wxss b/miniprogram/pages/match/recent/index.wxss new file mode 100644 index 00000000..e2df53be --- /dev/null +++ b/miniprogram/pages/match/recent/index.wxss @@ -0,0 +1,156 @@ +.page { + display: flex; + flex-direction: column; + min-height: 100vh; + background: var(--bg-page); +} + +.header { + padding: 32rpx 24rpx 16rpx; +} + +.title { + font-size: 36rpx; + font-weight: 600; + color: var(--text-primary); +} + +.subtitle { + margin-top: 6rpx; + font-size: 24rpx; + color: var(--text-muted); +} + +.loading, +.empty { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + color: var(--text-muted); +} + +.empty-icon { + width: 200rpx; + height: 200rpx; + margin-bottom: 16rpx; +} + +.empty-title { + font-size: 28rpx; + color: var(--text-primary); + margin-bottom: 6rpx; +} + +.empty-desc { + font-size: 24rpx; + color: var(--text-muted); +} + +.list-scroll { + flex: 1; + padding: 0 24rpx 24rpx; + box-sizing: border-box; +} + +.match-list { + display: flex; + flex-direction: column; + gap: 16rpx; +} + +.match-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 20rpx 24rpx; + border-radius: 16rpx; + background: var(--bg-card, #ffffff); + box-shadow: var(--shadow-sm, 0 4rpx 12rpx rgba(0, 0, 0, 0.04)); +} + +.item-main { + flex: 1; +} + +.item-line1 { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 8rpx; +} + +.item-name { + font-size: 30rpx; + font-weight: 600; + color: var(--text-primary); + max-width: 420rpx; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.item-type { + font-size: 22rpx; + padding: 4rpx 12rpx; + border-radius: 20rpx; +} + +.item-type.challenge { + background: rgba(255, 152, 0, 0.12); + color: #e65100; +} + +.item-type.ranking { + background: rgba(25, 118, 210, 0.12); + color: #1565c0; +} + +.item-line2 { + display: flex; + align-items: center; + gap: 12rpx; + font-size: 22rpx; + color: var(--text-secondary); + margin-bottom: 4rpx; +} + +.item-status { + font-weight: 500; + padding: 4rpx 12rpx; + border-radius: 20rpx; + font-size: 20rpx; +} + +.status-pending { + background: rgba(255, 193, 7, 0.12); + color: #ff8f00; +} + +.status-ongoing { + background: rgba(76, 175, 80, 0.12); + color: #2e7d32; +} + +.status-finished { + background: rgba(158, 158, 158, 0.12); + color: #616161; +} + +.status-cancelled { + background: rgba(244, 67, 54, 0.12); + color: #c62828; +} + +.item-line3 { + font-size: 22rpx; + color: var(--text-muted); +} + +.item-arrow { + font-size: 40rpx; + color: var(--text-muted); + margin-left: 16rpx; +} + diff --git a/miniprogram/pages/user/index.js b/miniprogram/pages/user/index.js index a7270dc7..84735b44 100644 --- a/miniprogram/pages/user/index.js +++ b/miniprogram/pages/user/index.js @@ -1,4 +1,5 @@ const app = getApp(); +const util = require("../../utils/util"); Page({ data: { @@ -19,6 +20,9 @@ Page({ showGenderModal: false, registerGender: 0, + + // 活动公告(最近 10 条) + announcements: [], }, normalizeLadderUser(ladderUser) { @@ -51,6 +55,7 @@ Page({ ladderUser: this.normalizeLadderUser(app.globalData.ladderUser), currentStore: app.globalData.currentStore, }); + this.fetchAnnouncements(); } }, @@ -101,11 +106,39 @@ Page({ ladderUser: this.normalizeLadderUser(app.globalData.ladderUser), currentStore: app.globalData.currentStore, }); + + await this.fetchAnnouncements(); } catch (e) { console.error("获取用户信息失败:", e); } }, + // 获取当前门店的活动公告(最近 10 条) + async fetchAnnouncements() { + if (!app.globalData.token) return; + const store = app.globalData.currentStore; + if (!store || !store.storeId) return; + try { + const res = await app.request("/api/article", { + method: "GET", + data: { + limit: 10, + store_id: store.storeId, + }, + }); + const raw = res.data || []; + const list = raw.map((a) => ({ + id: a.id, + title: a.title || "", + isTop: !!a.isTop, + timeText: a.createdAt ? util.formatDate(a.createdAt) : "", + })); + this.setData({ announcements: list }); + } catch (e) { + console.error("获取活动公告失败:", e); + } + }, + // 获取手机号授权 async onGetPhoneNumber(e) { if (e.detail.errMsg !== "getPhoneNumber:ok") { @@ -153,6 +186,7 @@ Page({ ladderUser: this.normalizeLadderUser(app.globalData.ladderUser), currentStore: app.globalData.currentStore, }); + await this.fetchAnnouncements(); // 检查是否需要完善资料(没有头像或昵称为默认值) const needProfile = @@ -225,6 +259,7 @@ Page({ ladderUser: this.normalizeLadderUser(app.globalData.ladderUser), currentStore: app.globalData.currentStore, }); + await this.fetchAnnouncements(); const needProfile = !userInfo.avatar || @@ -256,6 +291,26 @@ Page({ } }, + // 查看更多活动公告 + goAnnouncementMore() { + if (!app.globalData.token) { + wx.showToast({ title: "请先登录", icon: "none" }); + return; + } + wx.navigateTo({ + url: "/pages/article/list/index", + }); + }, + + // 查看公告详情 + goAnnouncementDetail(e) { + const id = e.currentTarget.dataset.id; + if (!id) return; + wx.navigateTo({ + url: `/pages/article/detail/index?id=${id}`, + }); + }, + onCancelRegisterGender() { this._pendingPhoneLogin = null; this.setData({ showGenderModal: false, registerGender: 0 }); @@ -280,29 +335,29 @@ Page({ async onChooseAvatarNew(e) { const avatarUrl = e.detail.avatarUrl; console.log('选择头像:', avatarUrl); - + // 检查是否是临时文件 - if (avatarUrl && (avatarUrl.startsWith("wxfile://") || - avatarUrl.startsWith("http://tmp") || - avatarUrl.includes("/tmp/"))) { + if (avatarUrl && (avatarUrl.startsWith("wxfile://") || + avatarUrl.startsWith("http://tmp") || + avatarUrl.includes("/tmp/"))) { console.log('检测到临时头像,立即上传'); wx.showLoading({ title: "上传头像中..." }); - + try { const uploadedUrl = await this.uploadAvatar(avatarUrl); console.log('头像上传成功:', uploadedUrl); - + this.setData({ "profileForm.avatar": uploadedUrl, }); - + wx.hideLoading(); wx.showToast({ title: "头像上传成功", icon: "success", duration: 1500 }); } catch (uploadErr) { wx.hideLoading(); console.error("头像上传失败:", uploadErr); - wx.showToast({ - title: uploadErr.message || "头像上传失败", + wx.showToast({ + title: uploadErr.message || "头像上传失败", icon: "none", duration: 2000 }); @@ -425,7 +480,7 @@ Page({ console.log('文件路径:', filePath); console.log('上传URL:', `${app.globalData.baseUrl}/api/upload/avatar`); console.log('Token:', app.globalData.token); - + if (!app.globalData.token) { reject(new Error('未登录,无法上传头像')); return; @@ -442,12 +497,12 @@ Page({ try { console.log("上传头像响应状态:", res.statusCode); console.log("上传头像响应数据:", res.data); - + if (res.statusCode !== 200) { reject(new Error(`上传失败,状态码: ${res.statusCode}`)); return; } - + const data = JSON.parse(res.data); if (data.code === 0 && data.data && data.data.url) { console.log("头像上传成功:", data.data.url); diff --git a/miniprogram/pages/user/index.wxml b/miniprogram/pages/user/index.wxml index ddb02dc3..4b433da1 100644 --- a/miniprogram/pages/user/index.wxml +++ b/miniprogram/pages/user/index.wxml @@ -121,6 +121,49 @@ 请联系门店工作人员,开启你的天梯之旅 + + + + + + + + + 活动公告 + 最近 10 条活动通知 + + + + 查看更多 + + + + + 暂无公告 + + + + + {{item.title}} + 置顶 + + {{item.timeText}} + + + + diff --git a/miniprogram/pages/user/index.wxss b/miniprogram/pages/user/index.wxss index 9f2059b1..046c933b 100644 --- a/miniprogram/pages/user/index.wxss +++ b/miniprogram/pages/user/index.wxss @@ -548,6 +548,131 @@ line-height: 1.5; } +/* ========================================== + 活动公告卡片 + ========================================== */ +.announcement-card { + margin: 0 24rpx 20rpx; + padding: 24rpx 24rpx 16rpx; + background: var(--bg-white); + border-radius: var(--radius-xl); + box-shadow: var(--shadow-sm); +} + +.announcement-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 12rpx; +} + +.announcement-header-main { + display: flex; + align-items: center; + gap: 16rpx; +} + +.announcement-icon { + width: 72rpx; + height: 72rpx; + border-radius: 50%; + background: linear-gradient(135deg, #e3f2fd, #bbdefb); + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} + +.announcement-icon image { + width: 40rpx; + height: 40rpx; +} + +.announcement-text { + display: flex; + flex-direction: column; +} + +.announcement-title { + font-size: 26rpx; + font-weight: 600; + color: var(--text-primary); +} + +.announcement-subtitle { + margin-top: 6rpx; + font-size: 22rpx; + color: var(--text-secondary); +} + +.announcement-more { + display: flex; + align-items: center; + gap: 4rpx; +} + +.announcement-more-text { + font-size: 22rpx; + color: var(--primary); +} + +.announcement-more-arrow { + font-size: 40rpx; + color: var(--primary); +} + +.announcement-empty { + padding: 8rpx 0 4rpx; +} + +.announcement-empty-text { + font-size: 22rpx; + color: var(--text-secondary); +} + +.announcement-list { + margin-top: 4rpx; +} + +.announcement-item { + padding: 10rpx 0; + border-top: 1rpx solid #f3f4f6; +} + +.announcement-item:first-child { + border-top: none; +} + +.announcement-item-title-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12rpx; +} + +.announcement-item-title { + font-size: 24rpx; + color: var(--text-primary); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.announcement-item-top { + padding: 2rpx 10rpx; + border-radius: 999rpx; + font-size: 20rpx; + color: #f97316; + background: rgba(249, 115, 22, 0.1); + flex-shrink: 0; +} + +.announcement-item-time { + margin-top: 4rpx; + font-size: 20rpx; + color: var(--text-secondary); +} + /* ========================================== 功能菜单 - 网格布局 ========================================== */ diff --git a/server/src/app.js b/server/src/app.js index a72f2e33..bfe89b47 100644 --- a/server/src/app.js +++ b/server/src/app.js @@ -11,6 +11,7 @@ const userRoutes = require('./routes/user'); const storeRoutes = require('./routes/store'); const ladderRoutes = require('./routes/ladder'); const matchRoutes = require('./routes/match'); +const articleRoutes = require('./routes/article'); const pointsRoutes = require('./routes/points'); const adminRoutes = require('./routes/admin'); const uploadRoutes = require('./routes/upload'); @@ -36,6 +37,7 @@ app.use('/api/match', matchRoutes); app.use('/api/points', pointsRoutes); app.use('/api/admin', adminRoutes); app.use('/api/upload', uploadRoutes); +app.use('/api/article', articleRoutes); // 健康检查 app.get('/health', (req, res) => { diff --git a/server/src/controllers/adminController.js b/server/src/controllers/adminController.js index b52636bb..bbb0d254 100644 --- a/server/src/controllers/adminController.js +++ b/server/src/controllers/adminController.js @@ -146,23 +146,36 @@ class AdminController { async searchUsers(req, res) { try { const { keyword, pageSize = 10 } = req.query; - - if (!keyword || keyword.trim().length < 2) { + + const kw = (keyword || '').trim(); + if (!kw || kw.length < 1) { return res.json(success([])); } const where = { status: 1 // 只搜索正常状态的用户 }; - + where[Op.or] = [ - { nickname: { [Op.like]: `%${keyword.trim()}%` } }, - { phone: { [Op.like]: `%${keyword.trim()}%` } }, - { member_code: { [Op.like]: `%${keyword.trim()}%` } } + // 选手昵称(微信用户昵称) + { nickname: { [Op.like]: `%${kw}%` } }, + { phone: { [Op.like]: `%${kw}%` } }, + { member_code: { [Op.like]: `%${kw}%` } }, + // 天梯用户名称(ladder_users.real_name) + { '$ladderUsers.real_name$': { [Op.like]: `%${kw}%` } } ]; const users = await User.findAll({ where, + include: [ + { + model: LadderUser, + as: 'ladderUsers', + attributes: [], + required: false, + duplicating: false + } + ], limit: parseInt(pageSize) || 10, order: [['created_at', 'DESC']], attributes: ['id', 'nickname', 'phone', 'avatar', 'member_code'] @@ -184,7 +197,7 @@ class AdminController { async getUserDetail(req, res) { try { const { id } = req.params; - + const user = await User.findByPk(id, { include: [{ model: LadderUser, diff --git a/server/src/controllers/articleAdminController.js b/server/src/controllers/articleAdminController.js new file mode 100644 index 00000000..f9961174 --- /dev/null +++ b/server/src/controllers/articleAdminController.js @@ -0,0 +1,157 @@ +const { Article } = require('../models'); +const { success, error, getPagination, pageResult } = require('../utils/helper'); + +class ArticleAdminController { + // 后台列表 + async getArticles(req, res) { + try { + const { page = 1, pageSize = 20, status, category, keyword, is_top } = req.query; + const { limit, offset } = getPagination(page, pageSize); + + const where = {}; + if (status !== undefined && status !== '') { + where.status = parseInt(status, 10); + } + if (category) { + where.category = category; + } + if (keyword) { + where.title = { [require('sequelize').Op.like]: `%${keyword}%` }; + } + if (is_top !== undefined && is_top !== '') { + where.is_top = parseInt(is_top, 10); + } + + // 门店过滤:普通管理员仅能看自己门店,超管可查看所有或按 store_id 过滤 + const admin = req.admin; + const storeIdParam = req.query.store_id; + if (admin && admin.role !== 'super_admin') { + where.store_id = admin.store_id; + } else if (storeIdParam) { + where.store_id = parseInt(storeIdParam, 10); + } + + const { rows, count } = await Article.findAndCountAll({ + where, + // 置顶优先,其次自定义排序,最后创建时间 + order: [['is_top', 'DESC'], ['sort_order', 'DESC'], ['created_at', 'DESC']], + limit, + offset, + }); + + res.json(pageResult(rows, count, page, pageSize)); + } catch (err) { + console.error('获取文章列表失败:', err); + res.status(500).json(error('获取失败')); + } + } + + // 创建 + async createArticle(req, res) { + try { + const { + title, + category, + cover_image, + summary, + content_html, + status = 1, + sort_order = 0, + is_top = 0, + } = req.body; + + if (!title || !content_html) { + return res.status(400).json(error('标题和内容不能为空', 400)); + } + + // 门店关联 + const admin = req.admin; + let storeId = null; + if (admin.role === 'super_admin') { + storeId = req.body.store_id || null; + if (!storeId) { + return res.status(400).json(error('请选择门店', 400)); + } + } else { + storeId = admin.store_id; + if (!storeId) { + return res.status(400).json(error('当前账号未绑定门店,无法创建活动公告', 400)); + } + } + + const article = await Article.create({ + title, + category, + cover_image, + summary, + content_html, + status, + sort_order, + is_top, + store_id: storeId, + }); + + res.json(success({ id: article.id }, '创建成功')); + } catch (err) { + console.error('创建文章失败:', err); + res.status(500).json(error('创建失败')); + } + } + + // 更新 + async updateArticle(req, res) { + try { + const { id } = req.params; + const { title, category, cover_image, summary, content_html, status, sort_order, is_top, store_id } = req.body; + + const article = await Article.findByPk(id); + if (!article) { + return res.status(404).json(error('文章不存在', 404)); + } + + const updateData = { + title: title !== undefined ? title : article.title, + category: category !== undefined ? category : article.category, + cover_image: cover_image !== undefined ? cover_image : article.cover_image, + summary: summary !== undefined ? summary : article.summary, + content_html: content_html !== undefined ? content_html : article.content_html, + status: status !== undefined ? status : article.status, + sort_order: sort_order !== undefined ? sort_order : article.sort_order, + is_top: is_top !== undefined ? is_top : article.is_top, + }; + + // 仅超管允许修改门店 + if (req.admin && req.admin.role === 'super_admin' && store_id !== undefined) { + updateData.store_id = store_id; + } + + await article.update(updateData); + + res.json(success(null, '更新成功')); + } catch (err) { + console.error('更新文章失败:', err); + res.status(500).json(error('更新失败')); + } + } + + // 删除 + async deleteArticle(req, res) { + try { + const { id } = req.params; + const article = await Article.findByPk(id); + + if (!article) { + return res.status(404).json(error('文章不存在', 404)); + } + + await article.destroy(); + res.json(success(null, '删除成功')); + } catch (err) { + console.error('删除文章失败:', err); + res.status(500).json(error('删除失败')); + } + } +} + +module.exports = new ArticleAdminController(); + diff --git a/server/src/controllers/articleController.js b/server/src/controllers/articleController.js new file mode 100644 index 00000000..de60f90d --- /dev/null +++ b/server/src/controllers/articleController.js @@ -0,0 +1,80 @@ +const { Article } = require('../models'); +const { success, error } = require('../utils/helper'); +const { Op } = require('sequelize'); + +class ArticleController { + // 小程序端:文章列表(仅已发布) + async getList(req, res) { + try { + const { category, limit, store_id } = req.query; + + const where = { status: 1 }; + if (category) { + where.category = category; + } + if (store_id) { + where.store_id = store_id; + } + + const listLimit = parseInt(limit, 10) || 10; + + const articles = await Article.findAll({ + where, + order: [['is_top', 'DESC'], ['sort_order', 'DESC'], ['created_at', 'DESC']], + limit: listLimit, + attributes: ['id', 'title', 'category', 'cover_image', 'summary', 'created_at', 'is_top'], + }); + + const list = articles.map((a) => ({ + id: a.id, + title: a.title, + category: a.category, + coverImage: a.cover_image, + summary: a.summary, + createdAt: a.created_at, + isTop: a.is_top === 1, + })); + + res.json(success(list)); + } catch (err) { + console.error('获取文章列表失败:', err); + res.status(500).json(error('获取失败')); + } + } + + // 小程序端:文章详情 + async getDetail(req, res) { + try { + const { id } = req.params; + + const article = await Article.findOne({ + where: { + id, + status: 1, + }, + }); + + if (!article) { + return res.status(404).json(error('文章不存在或未发布', 404)); + } + + res.json( + success({ + id: article.id, + title: article.title, + category: article.category, + coverImage: article.cover_image, + summary: article.summary, + contentHtml: article.content_html, + createdAt: article.created_at, + }), + ); + } catch (err) { + console.error('获取文章详情失败:', err); + res.status(500).json(error('获取失败')); + } + } +} + +module.exports = new ArticleController(); + diff --git a/server/src/controllers/matchAdminController.js b/server/src/controllers/matchAdminController.js index 336ac2cb..ea7fac12 100644 --- a/server/src/controllers/matchAdminController.js +++ b/server/src/controllers/matchAdminController.js @@ -101,20 +101,97 @@ class MatchAdminController { const { id } = req.params; const match = await Match.findByPk(id, { + attributes: [ + 'id', + 'match_code', + 'type', + 'name', + 'weight', + 'status', + 'stage', + 'elimination_size', + 'store_id', + 'referee_id', + 'start_time', + 'end_time' + ], include: [ - { model: Store, as: 'store' }, - { model: User, as: 'referee' }, + { + model: Store, + as: 'store', + attributes: ['id', 'name'] + }, + { + model: User, + as: 'referee', + attributes: ['id', 'nickname'] + }, { model: MatchPlayer, as: 'players', - include: [{ model: LadderUser, as: 'ladderUser', include: [{ model: User, as: 'user' }] }] + separate: true, + attributes: [ + 'id', + 'ladder_user_id', + 'initial_power', + 'final_power', + 'win_count', + 'lose_count', + 'rank', + 'player_status' + ], + include: [ + { + model: LadderUser, + as: 'ladderUser', + attributes: ['id', 'real_name', 'level'], + include: [ + { + model: User, + as: 'user', + attributes: ['id', 'nickname'] + } + ] + } + ] }, { model: MatchRound, as: 'rounds', - include: [{ model: MatchGame, as: 'games' }] + separate: true, + attributes: ['id', 'round_number', 'round_type', 'round_name', 'status'], + include: [ + { + model: MatchGame, + as: 'games', + attributes: [ + 'id', + 'player1_id', + 'player2_id', + 'player1_score', + 'player2_score', + 'winner_id', + 'confirm_status', + 'status' + ] + } + ] }, - { model: MatchGame, as: 'games' } + { + model: MatchGame, + as: 'games', + separate: true, + attributes: [ + 'id', + 'player1_id', + 'player2_id', + 'player1_score', + 'player2_score', + 'winner_id', + 'confirm_status', + 'status' + ] + } ] }); @@ -246,7 +323,7 @@ class MatchAdminController { // 创建循环赛轮次和对局 const players = match.players; const n = players.length; - + // 生成单循环赛配对 const games = []; for (let i = 0; i < n; i++) { @@ -368,6 +445,18 @@ class MatchAdminController { }, { transaction: t }); } + // 将晋级淘汰赛的选手状态标记为进行中(playing),方便前端展示 + await MatchPlayer.update( + { player_status: 'playing' }, + { + where: { + match_id: match.id, + ladder_user_id: qualifiedPlayers.map(p => p.ladder_user_id) + }, + transaction: t + } + ); + await t.commit(); res.json(success(null, '淘汰赛已开始')); } catch (err) { @@ -408,14 +497,16 @@ class MatchAdminController { player_status: 'finished' }, { transaction: t }); - // 处理升降级(如果是月度排位赛) + // 处理升降级(排位赛规则) if (match.type === MATCH_TYPES.RANKING) { const promotion = PowerCalculator.determinePromotion(i + 1, players.length); if (promotion === 'promote' && ladderUser.level < 5) { + // 冠军:段位 +1 await ladderUser.update({ level: ladderUser.level + 1 }, { transaction: t }); - } else if (promotion === 'demote' && ladderUser.level > 1) { + } else if (promotion === 'demote' && (ladderUser.level === 4 || ladderUser.level === 5)) { + // 末位:只有 4、5 段才降一级 await ladderUser.update({ level: ladderUser.level - 1 }, { transaction: t }); - } + } // 其他情况不变 } } @@ -437,11 +528,16 @@ class MatchAdminController { // 修改对局结果 async updateGameResult(req, res) { try { - const { id, gameId } = req.params; + const { matchId, id, gameId } = req.params; + const match_id = matchId ?? id; const { player1_score, player2_score } = req.body; + if (!match_id || !gameId) { + return res.status(400).json(error('参数缺失', 400)); + } + const game = await MatchGame.findOne({ - where: { id: gameId, match_id: id } + where: { id: gameId, match_id } }); if (!game) { @@ -452,12 +548,24 @@ class MatchAdminController { return res.status(400).json(error('已确认的对局不能修改', 400)); } - const winnerId = player1_score > player2_score ? game.player1_id : game.player2_id; - const loserId = player1_score > player2_score ? game.player2_id : game.player1_id; + const p1 = Number(player1_score); + const p2 = Number(player2_score); + if (!Number.isFinite(p1) || !Number.isFinite(p2)) { + return res.status(400).json(error('比分无效', 400)); + } + if (p1 < 0 || p2 < 0) { + return res.status(400).json(error('比分不能为负数', 400)); + } + if (p1 === p2) { + return res.status(400).json(error('比分不能相同', 400)); + } + + const winnerId = p1 > p2 ? game.player1_id : game.player2_id; + const loserId = p1 > p2 ? game.player2_id : game.player1_id; await game.update({ - player1_score, - player2_score, + player1_score: p1, + player2_score: p2, winner_id: winnerId, loser_id: loserId }); @@ -470,14 +578,15 @@ class MatchAdminController { } // 裁判确认对局结果 - async confirmGameResult(req, res) { + confirmGameResult = async (req, res) => { const t = await sequelize.transaction(); try { const { id, gameId } = req.params; const game = await MatchGame.findOne({ where: { id: gameId, match_id: id }, - include: [{ model: Match, as: 'match' }] + include: [{ model: Match, as: 'match' }], + transaction: t }); if (!game) { @@ -536,7 +645,45 @@ class MatchAdminController { transaction: t }); + // 排位赛:根据阶段做不同处理 + if (game.match && game.match.type === MATCH_TYPES.RANKING) { + if (game.match.stage === RANKING_STAGE.ROUND_ROBIN) { + // 循环赛:确认后双方回到 waiting,并自动匹配下一位空闲对手 + await MatchPlayer.update( + { player_status: 'waiting', current_opponent_id: null }, + { + where: { + match_id: id, + ladder_user_id: [game.winner_id, game.loser_id] + }, + transaction: t + } + ); + + await this._autoMatchPlayers(game.match.id, t); + } else if (game.match.stage === RANKING_STAGE.ELIMINATION) { + // 淘汰赛:检查是否需要自动生成下一轮(例如 4 强打完自动生成决赛) + await this._maybeStartNextEliminationRound(game.match.id, t); + } + } + await t.commit(); + + // 排位赛:通知双方刷新当前对局(含新匹配) + if (game.match && game.match.type === MATCH_TYPES.RANKING) { + const rankingUserIds = [winner.user_id, loser.user_id].filter(Boolean); + if (rankingUserIds.length > 0) { + broadcastToUsers(rankingUserIds, { + type: 'ranking_game_updated', + data: { + matchId: game.match.id, + matchCode: game.match.match_code, + gameId: game.id + } + }); + } + } + res.json(success({ winnerChange, loserChange }, '确认成功')); } catch (err) { await t.rollback(); @@ -687,6 +834,70 @@ class MatchAdminController { } } } + + /** + * 当淘汰赛某轮全部结束时,自动生成下一轮。 + * 当前仅支持:4 强(半决赛)全部确认后自动生成决赛。 + */ + async _maybeStartNextEliminationRound(matchId, transaction) { + const match = await Match.findByPk(matchId, { + include: [{ + model: MatchRound, + as: 'rounds', + include: [{ model: MatchGame, as: 'games' }] + }], + transaction + }); + + if (!match || match.stage !== RANKING_STAGE.ELIMINATION || match.elimination_size !== 4) { + return; + } + + // 如果已经有决赛轮次,则不再生成 + const hasFinal = match.rounds.some(r => r.round_type === 'elimination' && r.round_name === '决赛'); + if (hasFinal) return; + + // 查找半决赛轮次 + const semiRound = match.rounds.find(r => r.round_type === 'elimination' && r.round_name === '半决赛'); + if (!semiRound || !semiRound.games || semiRound.games.length < 2) return; + + // 必须两场都已确认 + const allConfirmed = semiRound.games.every(g => g.confirm_status === CONFIRM_STATUS.CONFIRMED); + if (!allConfirmed) return; + + const winnerIds = semiRound.games.map(g => g.winner_id).filter(Boolean); + if (winnerIds.length < 2) return; + + // 创建决赛轮次 + const finalRound = await MatchRound.create({ + match_id: match.id, + round_number: semiRound.round_number + 1, + round_type: 'elimination', + round_name: '决赛', + status: 1 + }, { transaction }); + + // 创建决赛对局(两位半决赛胜者对决) + await MatchGame.create({ + match_id: match.id, + round_id: finalRound.id, + player1_id: winnerIds[0], + player2_id: winnerIds[1], + status: 0 + }, { transaction }); + + // 将两名决赛选手标记为进行中 + await MatchPlayer.update( + { player_status: 'playing', current_opponent_id: null }, + { + where: { + match_id: match.id, + ladder_user_id: winnerIds + }, + transaction + } + ); + } } module.exports = new MatchAdminController(); diff --git a/server/src/controllers/matchController.js b/server/src/controllers/matchController.js index 23f9587b..53eb7d0c 100644 --- a/server/src/controllers/matchController.js +++ b/server/src/controllers/matchController.js @@ -2,7 +2,7 @@ const { Match, MatchGame, MatchPlayer, MatchRound, LadderUser, User, Store, sequ const { MATCH_TYPES, MATCH_STATUS, CONFIRM_STATUS, RANKING_STAGE, MATCH_WEIGHTS, POWER_CALC } = require('../config/constants'); const { generateMatchCode, success, error, getPagination, pageResult } = require('../utils/helper'); const PowerCalculator = require('../services/powerCalculator'); -const { sendChallengeNotification, sendScoreConfirmNotification, sendMatchNotification } = require('../websocket'); +const { sendChallengeNotification, sendScoreConfirmNotification, sendMatchNotification, broadcastToUsers } = require('../websocket'); const matchAdminController = require('./matchAdminController'); const { Op } = require('sequelize'); @@ -610,25 +610,40 @@ class MatchController { status: MATCH_STATUS.FINISHED, end_time: new Date() }, { transaction: t }); - } else if (game.match.type === MATCH_TYPES.RANKING) { - // 排位赛:重置选手状态并尝试匹配下一场 + } else if (game.match.type === MATCH_TYPES.RANKING && game.match.stage === RANKING_STAGE.ROUND_ROBIN) { + // 排位赛循环赛阶段:重置选手状态并尝试匹配下一场 await MatchPlayer.update( { player_status: 'waiting', current_opponent_id: null }, - { - where: { - match_id: game.match.id, - ladder_user_id: [game.winner_id, game.loser_id] - }, - transaction: t + { + where: { + match_id: game.match.id, + ladder_user_id: [game.winner_id, game.loser_id] + }, + transaction: t } ); - // 触发自动匹配 + // 触发自动匹配(仅循环赛使用) await matchAdminController._autoMatchPlayers(game.match.id, t); } await t.commit(); + // 排位赛:通知双方刷新当前对局(含新匹配) + if (game.match.type === MATCH_TYPES.RANKING) { + const rankingUserIds = [winner.user_id, loser.user_id].filter(Boolean); + if (rankingUserIds.length > 0) { + broadcastToUsers(rankingUserIds, { + type: 'ranking_game_updated', + data: { + matchId: game.match.id, + matchCode: game.match.match_code, + gameId: game.id + } + }); + } + } + res.json(success({ winnerChange, loserChange, @@ -783,79 +798,108 @@ class MatchController { const { matchCode } = req.params; const user = req.user; - const match = await Match.findOne({ where: { match_code: matchCode } }); - if (!match) { - return res.status(404).json(error('比赛不存在', 404)); - } - - const ladderUser = await LadderUser.findOne({ - where: { user_id: user.id, store_id: match.store_id, status: 1 } - }); - - if (!ladderUser) { - return res.status(400).json(error('您不是参赛者', 400)); - } - - const player = await MatchPlayer.findOne({ - where: { match_id: match.id, ladder_user_id: ladderUser.id } - }); - - if (!player) { - return res.status(400).json(error('您不是参赛者', 400)); - } - - const currentGame = await MatchGame.findOne({ - where: { - match_id: match.id, - [Op.or]: [ - { player1_id: ladderUser.id }, - { player2_id: ladderUser.id } - ], - status: { [Op.in]: [1, 2] } - }, - include: [{ model: MatchRound, as: 'round' }], - order: [['status', 'DESC'], ['updated_at', 'DESC'], ['id', 'DESC']] - }); - - if (!currentGame) { - return res.json(success({ - status: player.player_status, - currentGame: null - })); - } - - // 获取对手信息 - const opponentId = currentGame.player1_id === ladderUser.id - ? currentGame.player2_id - : currentGame.player1_id; - const opponent = await LadderUser.findByPk(opponentId, { - include: [{ model: User, as: 'user' }] - }); - - res.json(success({ - status: player.player_status, - currentGame: { - id: currentGame.id, - roundName: currentGame.round?.round_name, - opponent: { - id: opponent.id, - realName: opponent.real_name, - nickname: opponent.user?.nickname, - avatar: opponent.user?.avatar, - level: opponent.level, - powerScore: opponent.power_score - }, - myScore: currentGame.player1_id === ladderUser.id - ? currentGame.player1_score - : currentGame.player2_score, - opponentScore: currentGame.player1_id === ladderUser.id - ? currentGame.player2_score - : currentGame.player1_score, - submitBy: currentGame.submit_by, // 添加提交者ID - confirmStatus: currentGame.confirm_status, - gameStatus: currentGame.status + const t = await sequelize.transaction(); + try { + const match = await Match.findOne({ + where: { match_code: matchCode }, + transaction: t + }); + if (!match) { + await t.rollback(); + return res.status(404).json(error('比赛不存在', 404)); } - })); + + const ladderUser = await LadderUser.findOne({ + where: { user_id: user.id, store_id: match.store_id, status: 1 }, + transaction: t + }); + + if (!ladderUser) { + await t.rollback(); + return res.status(400).json(error('您不是参赛者', 400)); + } + + const player = await MatchPlayer.findOne({ + where: { match_id: match.id, ladder_user_id: ladderUser.id }, + transaction: t + }); + + if (!player) { + await t.rollback(); + return res.status(400).json(error('您不是参赛者', 400)); + } + + const findCurrentGame = async () => MatchGame.findOne({ + where: { + match_id: match.id, + [Op.or]: [ + { player1_id: ladderUser.id }, + { player2_id: ladderUser.id } + ], + status: { [Op.in]: [1, 2] }, + // 已确认的对局不应再作为“当前对局”返回,否则前端会一直显示“待确认” + confirm_status: { [Op.ne]: CONFIRM_STATUS.CONFIRMED } + }, + include: [{ model: MatchRound, as: 'round' }], + order: [['status', 'DESC'], ['updated_at', 'DESC'], ['id', 'DESC']], + transaction: t + }); + + let currentGame = await findCurrentGame(); + + // 如果当前没有对局且我处于等待状态,尝试触发一次自动匹配 + if (!currentGame && player.player_status === 'waiting') { + await matchAdminController._autoMatchPlayers(match.id, t); + currentGame = await findCurrentGame(); + } + + if (!currentGame) { + await t.commit(); + return res.json(success({ + status: player.player_status, + currentGame: null + })); + } + + // 获取对手信息 + const opponentId = currentGame.player1_id === ladderUser.id + ? currentGame.player2_id + : currentGame.player1_id; + const opponent = await LadderUser.findByPk(opponentId, { + include: [{ model: User, as: 'user' }], + transaction: t + }); + + await t.commit(); + + res.json(success({ + status: currentGame.status === 1 ? 'playing' : player.player_status, + currentGame: { + id: currentGame.id, + roundName: currentGame.round?.round_name, + opponent: { + id: opponent.id, + realName: opponent.real_name, + nickname: opponent.user?.nickname, + avatar: opponent.user?.avatar, + level: opponent.level, + powerScore: opponent.power_score + }, + myScore: currentGame.player1_id === ladderUser.id + ? currentGame.player1_score + : currentGame.player2_score, + opponentScore: currentGame.player1_id === ladderUser.id + ? currentGame.player2_score + : currentGame.player1_score, + submitBy: currentGame.submit_by, // 添加提交者ID + confirmStatus: currentGame.confirm_status, + gameStatus: currentGame.status + } + })); + } catch (innerErr) { + await t.rollback(); + throw innerErr; + } } catch (err) { console.error('获取当前对局失败:', err); res.status(500).json(error('获取失败')); @@ -1200,13 +1244,13 @@ class MatchController { if (match.referee_id === user.id) { myRole = 'referee'; } else if (ladderUser) { - // ... (check if challenger/defender/player) + // ... (check if challenger/defender/player) } if (match.type === MATCH_TYPES.CHALLENGE) { // 挑战赛:获取对手信息 if (ladderUser && (match.challenger_id === ladderUser.id || match.defender_id === ladderUser.id)) { - const opponentId = match.challenger_id === ladderUser.id + const opponentId = match.challenger_id === ladderUser.id ? match.defender_id : match.challenger_id; const opponentLadder = await LadderUser.findByPk(opponentId, { @@ -1232,7 +1276,7 @@ class MatchController { }); if (player) { myStatus = player.player_status; - + // 获取当前对局 const game = await MatchGame.findOne({ where: { @@ -1245,7 +1289,7 @@ class MatchController { }, order: [['status', 'DESC'], ['updated_at', 'DESC'], ['id', 'DESC']] }); - + if (game) { const opponentId = game.player1_id === ladderUser.id ? game.player2_id @@ -1291,7 +1335,7 @@ class MatchController { status: match.status, statusName: match.status === MATCH_STATUS.PENDING ? '待开始' : '进行中', stage: match.stage, - stageName: match.type === MATCH_TYPES.RANKING ? + stageName: match.type === MATCH_TYPES.RANKING ? ['报名中', '循环赛', '淘汰赛', '已结束'][match.stage] : null, myStatus, opponent, @@ -1518,27 +1562,27 @@ class MatchController { console.log('用户是被挑战者(通过myLadderUser):', { myLadderUserId: myLadderUser.id, defenderId: match.defender_id }); } } - + // 方法2:如果 myLadderUser 为 null,通过挑战者和被挑战者的 user_id 来判断 if (!myRole && challengerLadder && defenderLadder) { // 检查挑战者的 user_id if (challengerLadder.user_id && challengerLadder.user_id == user.id) { myRole = 'challenger'; - console.log('用户是挑战者(通过user_id):', { - userId: user.id, + console.log('用户是挑战者(通过user_id):', { + userId: user.id, challengerUserId: challengerLadder.user_id }); - } + } // 检查被挑战者的 user_id else if (defenderLadder.user_id && defenderLadder.user_id == user.id) { myRole = 'defender'; - console.log('用户是被挑战者(通过user_id):', { - userId: user.id, + console.log('用户是被挑战者(通过user_id):', { + userId: user.id, defenderUserId: defenderLadder.user_id }); } } - + // 方法3:如果前两种方法都失败,尝试通过手机号匹配(如果天梯用户有手机号且用户有手机号) if (!myRole && challengerLadder && defenderLadder && user.phone) { if (challengerLadder.phone && challengerLadder.phone === user.phone) { @@ -1564,9 +1608,9 @@ class MatchController { const game = match.games?.[0]; if (game) { if (myRole === 'referee') { - // 裁判可以修改比分 - canSubmitScore = true; - canConfirmScore = true; + // 裁判可以修改比分 + canSubmitScore = true; + canConfirmScore = true; } else if (myLadderUser) { // 检查是否可以提交比分(必须是胜者且未提交) if (game.status === 1 && !game.submit_by) { diff --git a/server/src/models/Article.js b/server/src/models/Article.js new file mode 100644 index 00000000..09a38a32 --- /dev/null +++ b/server/src/models/Article.js @@ -0,0 +1,65 @@ +const { DataTypes } = require('sequelize'); +const sequelize = require('../config/database'); + +const Article = sequelize.define('Article', { + id: { + type: DataTypes.BIGINT, + primaryKey: true, + autoIncrement: true, + }, + store_id: { + type: DataTypes.BIGINT, + allowNull: true, + comment: '门店ID', + }, + title: { + type: DataTypes.STRING(200), + allowNull: false, + comment: '标题', + }, + category: { + type: DataTypes.STRING(50), + allowNull: true, + comment: '分类,如 rules, notice 等', + }, + cover_image: { + type: DataTypes.STRING(500), + allowNull: true, + comment: '封面图 URL', + }, + summary: { + type: DataTypes.STRING(500), + allowNull: true, + comment: '摘要', + }, + content_html: { + type: DataTypes.TEXT('long'), + allowNull: false, + comment: '富文本 HTML 内容', + }, + status: { + type: DataTypes.TINYINT, + defaultValue: 1, + comment: '状态: 0-草稿, 1-已发布', + }, + sort_order: { + type: DataTypes.INTEGER, + defaultValue: 0, + comment: '排序值,越大越靠前', + }, + is_top: { + type: DataTypes.TINYINT, + defaultValue: 0, + comment: '是否置顶: 0-否,1-是', + }, +}, { + tableName: 'articles', + indexes: [ + { fields: ['category'] }, + { fields: ['status'] }, + { fields: ['is_top'] }, + ], +}); + +module.exports = Article; + diff --git a/server/src/models/index.js b/server/src/models/index.js index b1906ff6..e8ec70e0 100644 --- a/server/src/models/index.js +++ b/server/src/models/index.js @@ -12,6 +12,7 @@ const PointRecord = require('./PointRecord'); const PointProduct = require('./PointProduct'); const PointOrder = require('./PointOrder'); const SystemUser = require('./SystemUser'); +const Article = require('./Article'); // 用户关联 User.hasMany(LadderUser, { foreignKey: 'user_id', as: 'ladderUsers' }); @@ -77,6 +78,10 @@ PointOrder.belongsTo(PointProduct, { foreignKey: 'product_id', as: 'product' }); User.hasMany(Match, { foreignKey: 'referee_id', as: 'refereeMatches' }); Match.belongsTo(User, { foreignKey: 'referee_id', as: 'referee' }); +// 门店-图文关联 +Store.hasMany(Article, { foreignKey: 'store_id', as: 'articles' }); +Article.belongsTo(Store, { foreignKey: 'store_id', as: 'store' }); + module.exports = { sequelize, User, @@ -91,5 +96,6 @@ module.exports = { PointRecord, PointProduct, PointOrder, - SystemUser + SystemUser, + Article, }; diff --git a/server/src/routes/admin.js b/server/src/routes/admin.js index 2a5ac72b..4015dbfe 100644 --- a/server/src/routes/admin.js +++ b/server/src/routes/admin.js @@ -4,6 +4,7 @@ const adminController = require('../controllers/adminController'); const ladderAdminController = require('../controllers/ladderAdminController'); const matchAdminController = require('../controllers/matchAdminController'); const pointsAdminController = require('../controllers/pointsAdminController'); +const articleAdminController = require('../controllers/articleAdminController'); const { authAdmin, requireSuperAdmin, checkStoreAccess } = require('../middlewares/auth'); // === 登录 === @@ -68,6 +69,12 @@ router.get('/point-orders', authAdmin, pointsAdminController.getOrders); router.post('/point-orders/:id/verify', authAdmin, pointsAdminController.verifyOrder); router.post('/point-orders/verify-by-code', authAdmin, pointsAdminController.verifyByCode); +// === 图文内容管理 === +router.get('/articles', authAdmin, requireSuperAdmin, articleAdminController.getArticles); +router.post('/articles', authAdmin, requireSuperAdmin, articleAdminController.createArticle); +router.put('/articles/:id', authAdmin, requireSuperAdmin, articleAdminController.updateArticle); +router.delete('/articles/:id', authAdmin, requireSuperAdmin, articleAdminController.deleteArticle); + // === 当前管理员信息 === router.get('/profile', authAdmin, adminController.getProfile); router.put('/profile', authAdmin, adminController.updateProfile); diff --git a/server/src/routes/article.js b/server/src/routes/article.js new file mode 100644 index 00000000..b9c717ba --- /dev/null +++ b/server/src/routes/article.js @@ -0,0 +1,10 @@ +const express = require('express'); +const router = express.Router(); +const articleController = require('../controllers/articleController'); + +// 小程序端:文章列表 & 详情(公开) +router.get('/', articleController.getList); +router.get('/:id', articleController.getDetail); + +module.exports = router; + diff --git a/server/src/services/powerCalculator.js b/server/src/services/powerCalculator.js index c62d64e2..2bf61c9a 100644 --- a/server/src/services/powerCalculator.js +++ b/server/src/services/powerCalculator.js @@ -53,11 +53,11 @@ class PowerCalculator { */ static canChallenge(lastMatchTime) { if (!lastMatchTime) return true; - + const cooldownDays = POWER_CALC.CHALLENGE_COOLDOWN; const cooldownMs = cooldownDays * 24 * 60 * 60 * 1000; const timeDiff = Date.now() - new Date(lastMatchTime).getTime(); - + return timeDiff >= cooldownMs; } @@ -68,30 +68,33 @@ class PowerCalculator { */ static getCooldownDays(lastMatchTime) { if (!lastMatchTime) return 0; - + const cooldownDays = POWER_CALC.CHALLENGE_COOLDOWN; const cooldownMs = cooldownDays * 24 * 60 * 60 * 1000; const timeDiff = Date.now() - new Date(lastMatchTime).getTime(); - + if (timeDiff >= cooldownMs) return 0; - + return Math.ceil((cooldownMs - timeDiff) / (24 * 60 * 60 * 1000)); } /** - * 判断升降级 + * 判断升降级(排位赛结束后) + * 规则: + * - 只有冠军晋级(+1 段位,最高不超过 5 段) + * - 只有最后一名且当前段位为 4 或 5 时降级(-1 段位) * @param {number} rank - 排名 (1-based) * @param {number} totalPlayers - 总人数 * @returns {string} 'promote' | 'demote' | 'stay' */ static determinePromotion(rank, totalPlayers) { - if (rank <= 2) { - return 'promote'; // 冠亚军晋升 + if (rank === 1) { + return 'promote'; // 仅冠军晋级 } if (rank === totalPlayers) { - return 'demote'; // 末位降级 + return 'demote'; // 仅最后一名有降级资格(具体是否降,看段位) } - return 'stay'; // 保持 + return 'stay'; // 其它名次保持不变 } /**