From 02937ca33ce7eae1a5d823b009d2e6cad4bbf5b0 Mon Sep 17 00:00:00 2001 From: ethanfly Date: Mon, 2 Feb 2026 03:22:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=A4=A9=E6=A2=AF):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E9=80=89=E6=89=8B=E5=AE=9A=E4=BD=8D=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8C=91=E6=88=98=E8=B5=9B=E6=9D=83=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在小程序天梯排名页添加“定位我”按钮,点击可滚动到当前用户所在位置 - 新增获取用户排名接口 `/ladder/my-rank` 用于定位计算 - 调整挑战赛权重从 1.5 降至 1.0,与日常畅打保持一致 - 新增数据库脚本 `setChallengeMatchWeightTo1.js` 用于更新历史数据 - 在管理员界面创建天梯用户时,根据所选等级自动填充默认战力值 - 修复管理员更新比赛时挑战赛权重强制设置为 1.0 的问题 - 新增天梯汇总大屏页面及相关路由 - 添加大屏比赛列表接口 `/match/display-list` 用于展示进行中和近期比赛 - 优化用户详情页的胜负场和胜率显示逻辑 - 修复小程序用户注册时的性别选择逻辑 --- .../.vite/deps/@element-plus_icons-vue.js | 4 +- admin/node_modules/.vite/deps/_metadata.json | 324 +++--- 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/src/api/display.js | 3 + admin/src/router/index.js | 12 + admin/src/views/dashboard/index.vue | 4 + admin/src/views/display/LadderSummary.vue | 885 +++++++++++++++++ .../src/views/display/LadderSummaryOrange.vue | 887 +++++++++++++++++ admin/src/views/display/RankingBoard.vue | 552 ++++++++++- .../src/views/display/RankingBoardOrange.vue | 920 ++++++++++++++---- admin/src/views/ladder/index.vue | 18 +- admin/src/views/user/index.vue | 366 +++++-- miniprogram/app.js | 146 ++- miniprogram/pages/index/index.js | 114 ++- miniprogram/pages/index/index.wxml | 56 +- miniprogram/pages/index/index.wxss | 82 +- miniprogram/pages/user/index.js | 163 +++- miniprogram/pages/user/index.wxml | 48 +- miniprogram/pages/user/index.wxss | 214 +++- server/package.json | 3 +- server/src/config/constants.js | 2 +- server/src/controllers/ladderController.js | 136 ++- .../src/controllers/matchAdminController.js | 18 +- server/src/controllers/matchController.js | 64 ++ .../src/controllers/pointsAdminController.js | 439 ++++++--- server/src/controllers/userController.js | 589 ++++++----- server/src/routes/ladder.js | 17 +- server/src/routes/match.js | 67 +- .../src/scripts/setChallengeMatchWeightTo1.js | 23 + 92 files changed, 5199 insertions(+), 1219 deletions(-) create mode 100644 admin/src/views/display/LadderSummary.vue create mode 100644 admin/src/views/display/LadderSummaryOrange.vue create mode 100644 server/src/scripts/setChallengeMatchWeightTo1.js 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 90d13190..8a7a131b 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-L7WLSQ4R.js"; -import "./chunk-ELEEJBJQ.js"; +} from "./chunk-OP4ZUAFM.js"; +import "./chunk-H2732BJL.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 7f8ca2fe..61a3defc 100644 --- a/admin/node_modules/.vite/deps/_metadata.json +++ b/admin/node_modules/.vite/deps/_metadata.json @@ -1,358 +1,346 @@ { - "hash": "02b9d14d", - "configHash": "502f42c3", + "hash": "0b0fcdca", + "configHash": "0bd4dba1", "lockfileHash": "45a4e0fd", - "browserHash": "e5c88585", + "browserHash": "2a9cc92b", "optimized": { "@element-plus/icons-vue": { "src": "../../@element-plus/icons-vue/dist/index.js", "file": "@element-plus_icons-vue.js", - "fileHash": "4df6a1b3", + "fileHash": "0ce2075a", "needsInterop": false }, "axios": { "src": "../../axios/index.js", "file": "axios.js", - "fileHash": "43b194e5", + "fileHash": "e0339058", "needsInterop": false }, "dayjs": { "src": "../../dayjs/dayjs.min.js", "file": "dayjs.js", - "fileHash": "ee47ac98", + "fileHash": "d6bd156a", "needsInterop": true }, "element-plus": { "src": "../../element-plus/es/index.mjs", "file": "element-plus.js", - "fileHash": "a2307ed3", + "fileHash": "eb6d080f", "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": "ab38f2b9", + "fileHash": "23bb7a06", "needsInterop": false }, "pinia": { "src": "../../pinia/dist/pinia.mjs", "file": "pinia.js", - "fileHash": "3fe9af82", + "fileHash": "3e06a4e4", "needsInterop": false }, "qrcode": { "src": "../../qrcode/lib/browser.js", "file": "qrcode.js", - "fileHash": "c89f7311", + "fileHash": "b1dc1626", "needsInterop": true }, "vue": { "src": "../../vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "0d9f3b0d", + "fileHash": "cf2fc702", "needsInterop": false }, "vue-router": { "src": "../../vue-router/dist/vue-router.mjs", "file": "vue-router.js", - "fileHash": "a57ec867", + "fileHash": "731df609", "needsInterop": false }, "element-plus/es": { "src": "../../element-plus/es/index.mjs", "file": "element-plus_es.js", - "fileHash": "ffb2b783", + "fileHash": "a8df203a", "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": "3a6cacdf", - "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": "da37a236", - "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": "eb41d819", - "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": "b7497adf", - "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": "5da3bed7", + "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": "06dd3372", + "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", + "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", + "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", + "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", "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": "6d1afd0d", + "fileHash": "98a7fc8d", "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": "240bd7ee", + "fileHash": "06ad125e", "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": "41bb0592", + "fileHash": "0d145a75", "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": "6969c6d1", + "fileHash": "59eef490", "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": "825caf98", + "fileHash": "14e34d1b", "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": "ff1984bb", + "fileHash": "b27e43bb", "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": "4b4a4a1d", + "fileHash": "2a5e4249", "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": "3c495fad", + "fileHash": "429623db", "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": "3d5b413c", + "fileHash": "41266817", "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": "7b9f21f2", + "fileHash": "7d5a15fd", "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": "bf30c0ea", + "fileHash": "16c1dd4d", "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": "9d2c02ba", + "fileHash": "61715a00", "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": "3758817f", + "fileHash": "dadfdc54", "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": "c0aa2e6f", + "fileHash": "fe1a5065", "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": "e2cec4e0", + "fileHash": "18633b2b", "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": "df646624", + "fileHash": "9560cfd1", "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": "ee0b3ee3", + "fileHash": "28bb8b75", "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": "3912ea08", + "fileHash": "e29b5cd8", "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": "c7565ad8", - "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": "0fdf620f", - "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": "957ebe8c", - "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": "78632d60", - "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": "fbf0885c", - "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": "a3645e7c", - "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": "1643aa99", - "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": "8d67fb6e", - "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": "a3326872", - "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": "348ec1fe", - "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": "f4e21a7c", - "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": "e8cb2b84", - "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": "86b9c070", + "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": "f73dd83d", + "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": "23ae7ef7", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", "needsInterop": false } }, "chunks": { - "chunk-LZQ3XESL": { - "file": "chunk-LZQ3XESL.js" + "chunk-4PW274X2": { + "file": "chunk-4PW274X2.js" }, - "chunk-SB5RV2IU": { - "file": "chunk-SB5RV2IU.js" + "chunk-B2YDYSZR": { + "file": "chunk-B2YDYSZR.js" }, - "chunk-JJYIKYUB": { - "file": "chunk-JJYIKYUB.js" + "chunk-75C4BP7B": { + "file": "chunk-75C4BP7B.js" }, - "chunk-P5E57UKJ": { - "file": "chunk-P5E57UKJ.js" + "chunk-UBLR4G7Q": { + "file": "chunk-UBLR4G7Q.js" }, - "chunk-62JQAJRX": { - "file": "chunk-62JQAJRX.js" + "chunk-5KK3TTMN": { + "file": "chunk-5KK3TTMN.js" }, - "chunk-3Y6T2BWZ": { - "file": "chunk-3Y6T2BWZ.js" + "chunk-R5DNQ3QC": { + "file": "chunk-R5DNQ3QC.js" }, - "chunk-ZCVI6XFC": { - "file": "chunk-ZCVI6XFC.js" + "chunk-NKQWFVTF": { + "file": "chunk-NKQWFVTF.js" }, - "chunk-MGVC5NZO": { - "file": "chunk-MGVC5NZO.js" + "chunk-REWOA3VH": { + "file": "chunk-REWOA3VH.js" }, - "chunk-2XFUNMCG": { - "file": "chunk-2XFUNMCG.js" + "chunk-TX5YLZ4O": { + "file": "chunk-TX5YLZ4O.js" }, - "chunk-VID4RN2V": { - "file": "chunk-VID4RN2V.js" + "chunk-SMFPDFTD": { + "file": "chunk-SMFPDFTD.js" }, - "chunk-BXHXCFF5": { - "file": "chunk-BXHXCFF5.js" + "chunk-JUCAMQ7P": { + "file": "chunk-JUCAMQ7P.js" }, - "chunk-TBYZ47XG": { - "file": "chunk-TBYZ47XG.js" + "chunk-IV6PSERC": { + "file": "chunk-IV6PSERC.js" }, - "chunk-WNNLDN6V": { - "file": "chunk-WNNLDN6V.js" + "chunk-6CKQ2YFZ": { + "file": "chunk-6CKQ2YFZ.js" }, - "chunk-WDY4WTIC": { - "file": "chunk-WDY4WTIC.js" - }, - "chunk-L7WLSQ4R": { - "file": "chunk-L7WLSQ4R.js" - }, - "chunk-YAGW2SQC": { - "file": "chunk-YAGW2SQC.js" + "chunk-OP4ZUAFM": { + "file": "chunk-OP4ZUAFM.js" }, "chunk-QZC7O2C6": { "file": "chunk-QZC7O2C6.js" }, - "chunk-ELEEJBJQ": { - "file": "chunk-ELEEJBJQ.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 6168fcfe..55b08e85 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';\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"], + "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"], "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 71d9aa01..41576738 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-WDY4WTIC.js"; -import "./chunk-L7WLSQ4R.js"; -import "./chunk-YAGW2SQC.js"; +} from "./chunk-6CKQ2YFZ.js"; +import "./chunk-OP4ZUAFM.js"; import "./chunk-QZC7O2C6.js"; -import "./chunk-ELEEJBJQ.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 e86e901d..d0e70c5a 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 */\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"], + "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"], "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 ad98a8c3..4b4bc581 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-WDY4WTIC.js"; -import "./chunk-L7WLSQ4R.js"; -import "./chunk-YAGW2SQC.js"; +} from "./chunk-6CKQ2YFZ.js"; +import "./chunk-OP4ZUAFM.js"; import "./chunk-QZC7O2C6.js"; -import "./chunk-ELEEJBJQ.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 2fb6fc74..2b8c47e2 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/aside/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-aside.css"; +import "E:/workspace/yingsha/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 503f0aae..293247ca 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';\r\nimport 'element-plus/theme-chalk/el-aside.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-aside.css';\n//# sourceMappingURL=css.mjs.map\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 b30b8c6e..ec8b6658 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/avatar/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-avatar.css"; +import "E:/workspace/yingsha/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 d424bd7c..1edc2683 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';\r\nimport 'element-plus/theme-chalk/el-avatar.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-avatar.css';\n//# sourceMappingURL=css.mjs.map\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 ad687780..edd4c988 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.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 684a754f..639e0de7 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/breadcrumb-item/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-breadcrumb-item.css"; +import "E:/workspace/yingsha/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 69d0a428..dce04c55 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';\r\nimport 'element-plus/theme-chalk/el-breadcrumb-item.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-breadcrumb-item.css';\n//# sourceMappingURL=css.mjs.map\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 26c43530..1b27f39b 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/breadcrumb/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-breadcrumb.css"; +import "E:/workspace/yingsha/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 9c1d5a89..8f9bf364 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';\r\nimport 'element-plus/theme-chalk/el-breadcrumb.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-breadcrumb.css';\n//# sourceMappingURL=css.mjs.map\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 cbaca0fb..271c2943 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-BXHXCFF5.js"; -import "./chunk-WNNLDN6V.js"; +import "./chunk-SMFPDFTD.js"; +import "./chunk-IV6PSERC.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 01c7dbf6..39a9ac5f 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/col/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-col.css"; +import "E:/workspace/yingsha/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 4d743abb..5960cba6 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';\r\nimport 'element-plus/theme-chalk/el-col.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-col.css';\n//# sourceMappingURL=css.mjs.map\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 62e275d0..42ff6285 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/container/style/css.mjs -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"; +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"; //# 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 269e96f4..caa0b1f6 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';\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"], + "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"], "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 93dbda6e..979882ee 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/dialog/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-dialog.css"; +import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-dialog.css"; // node_modules/element-plus/es/components/overlay/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-overlay.css"; +import "E:/workspace/yingsha/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 5a618ff1..8e7d07ca 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';\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"], + "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"], "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 b990a2fb..1a945b55 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/dropdown-item/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-dropdown-item.css"; +import "E:/workspace/yingsha/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 3b9f82e4..c8e7fb5c 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';\r\nimport 'element-plus/theme-chalk/el-dropdown-item.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-dropdown-item.css';\n//# sourceMappingURL=css.mjs.map\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 f58c1c24..48514692 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/dropdown-menu/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-dropdown-menu.css"; +import "E:/workspace/yingsha/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 7ff85599..acec34af 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';\r\nimport 'element-plus/theme-chalk/el-dropdown-menu.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-dropdown-menu.css';\n//# sourceMappingURL=css.mjs.map\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 ae1a02c1..fea2e829 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-MGVC5NZO.js"; -import "./chunk-2XFUNMCG.js"; -import "./chunk-BXHXCFF5.js"; -import "./chunk-WNNLDN6V.js"; +import "./chunk-REWOA3VH.js"; +import "./chunk-TX5YLZ4O.js"; +import "./chunk-SMFPDFTD.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/button-group/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-button-group.css"; +import "E:/workspace/yingsha/admin/node_modules/element-plus/theme-chalk/el-button-group.css"; // node_modules/element-plus/es/components/dropdown/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-dropdown.css"; +import "E:/workspace/yingsha/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 1efad15b..439a897e 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';\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"], + "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"], "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 4b7a0168..5ca8d16c 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/form-item/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-form-item.css"; +import "E:/workspace/yingsha/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 f1fee750..905ea55d 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';\r\nimport 'element-plus/theme-chalk/el-form-item.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-form-item.css';\n//# sourceMappingURL=css.mjs.map\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 6d2a1db1..cced46e6 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/form/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-form.css"; +import "E:/workspace/yingsha/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 696b41fe..d9c66f32 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';\r\nimport 'element-plus/theme-chalk/el-form.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-form.css';\n//# sourceMappingURL=css.mjs.map\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 f7984f99..0d11e06b 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/header/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-header.css"; +import "E:/workspace/yingsha/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 2ad14574..6cb9b3f8 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';\r\nimport 'element-plus/theme-chalk/el-header.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-header.css';\n//# sourceMappingURL=css.mjs.map\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 4a25880a..e6d4ee58 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.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 9e110248..85aa8efa 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-TBYZ47XG.js"; -import "./chunk-WNNLDN6V.js"; +import "./chunk-NKQWFVTF.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/input-number/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-input-number.css"; +import "E:/workspace/yingsha/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 2fe9053d..9d5778d0 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';\r\nimport '../../input/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-input-number.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "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"], "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 42c91686..007aa002 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-TBYZ47XG.js"; -import "./chunk-WNNLDN6V.js"; +import "./chunk-NKQWFVTF.js"; +import "./chunk-IV6PSERC.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 fe48db41..f4f52e13 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/loading/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-loading.css"; +import "E:/workspace/yingsha/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 e944c8e9..2c2798e3 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';\r\nimport 'element-plus/theme-chalk/el-loading.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-loading.css';\n//# sourceMappingURL=css.mjs.map\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 23965184..3abb6bdb 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/main/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-main.css"; +import "E:/workspace/yingsha/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 7d20c1c6..4e6933a4 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';\r\nimport 'element-plus/theme-chalk/el-main.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-main.css';\n//# sourceMappingURL=css.mjs.map\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 2c2fb597..505cb928 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/menu-item/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-menu-item.css"; +import "E:/workspace/yingsha/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 ebfcfec6..020764d0 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';\r\nimport 'element-plus/theme-chalk/el-menu-item.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-menu-item.css';\n//# sourceMappingURL=css.mjs.map\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 0916de1c..c0cbac03 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-ZCVI6XFC.js"; -import "./chunk-2XFUNMCG.js"; -import "./chunk-WNNLDN6V.js"; +import "./chunk-R5DNQ3QC.js"; +import "./chunk-TX5YLZ4O.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/menu/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-menu.css"; +import "E:/workspace/yingsha/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 c990d0a0..4099cadd 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';\r\nimport 'element-plus/theme-chalk/el-menu.css';\r\nimport '../../tooltip/style/css.mjs';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "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"], "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 a92180fd..e5ddc4c1 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-SB5RV2IU.js"; -import "./chunk-WNNLDN6V.js"; +import "./chunk-UBLR4G7Q.js"; +import "./chunk-IV6PSERC.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 2be88578..231a9f7e 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-LZQ3XESL.js"; -import "./chunk-SB5RV2IU.js"; -import "./chunk-P5E57UKJ.js"; -import "./chunk-MGVC5NZO.js"; -import "./chunk-2XFUNMCG.js"; -import "./chunk-TBYZ47XG.js"; -import "./chunk-WNNLDN6V.js"; +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"; // node_modules/element-plus/es/components/pagination/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-pagination.css"; +import "E:/workspace/yingsha/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 7067c1e6..30f0f2cb 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';\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"], + "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"], "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 60e61378..14776b4b 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-JJYIKYUB.js"; -import "./chunk-WNNLDN6V.js"; +import "./chunk-4PW274X2.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/radio-group/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-radio-group.css"; +import "E:/workspace/yingsha/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 7690a5ec..babb2a5f 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';\r\nimport '../../radio/style/css.mjs';\r\nimport 'element-plus/theme-chalk/el-radio-group.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "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"], "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 f47b21ae..40b73611 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-JJYIKYUB.js"; -import "./chunk-WNNLDN6V.js"; +import "./chunk-4PW274X2.js"; +import "./chunk-IV6PSERC.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 7ca126ab..00901008 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-WNNLDN6V.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/row/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-row.css"; +import "E:/workspace/yingsha/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 06bf7438..61363761 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';\r\nimport 'element-plus/theme-chalk/el-row.css';\r\n//# sourceMappingURL=css.mjs.map\r\n"], + "sourcesContent": ["import '../../base/style/css.mjs';\nimport 'element-plus/theme-chalk/el-row.css';\n//# sourceMappingURL=css.mjs.map\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 00f0c5c6..66002177 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-LZQ3XESL.js"; -import "./chunk-SB5RV2IU.js"; -import "./chunk-P5E57UKJ.js"; -import "./chunk-MGVC5NZO.js"; -import "./chunk-2XFUNMCG.js"; -import "./chunk-WNNLDN6V.js"; +import "./chunk-75C4BP7B.js"; +import "./chunk-UBLR4G7Q.js"; +import "./chunk-5KK3TTMN.js"; +import "./chunk-REWOA3VH.js"; +import "./chunk-TX5YLZ4O.js"; +import "./chunk-IV6PSERC.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 31c17043..66d448f9 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-P5E57UKJ.js"; -import "./chunk-3Y6T2BWZ.js"; -import "./chunk-WNNLDN6V.js"; +import "./chunk-B2YDYSZR.js"; +import "./chunk-5KK3TTMN.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/table-column/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-table-column.css"; +import "E:/workspace/yingsha/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 9812cdea..923eadcf 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';\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"], + "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"], "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 1f40b730..5bf77a91 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-3Y6T2BWZ.js"; -import "./chunk-ZCVI6XFC.js"; -import "./chunk-MGVC5NZO.js"; -import "./chunk-2XFUNMCG.js"; -import "./chunk-WNNLDN6V.js"; +import "./chunk-B2YDYSZR.js"; +import "./chunk-R5DNQ3QC.js"; +import "./chunk-REWOA3VH.js"; +import "./chunk-TX5YLZ4O.js"; +import "./chunk-IV6PSERC.js"; // node_modules/element-plus/es/components/table/style/css.mjs -import "E:/workspace/yingsa/admin/node_modules/element-plus/theme-chalk/el-table.css"; +import "E:/workspace/yingsha/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 0b630233..9386b0a1 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';\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"], + "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"], "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 50d8cf04..2000ad31 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-P5E57UKJ.js"; -import "./chunk-WNNLDN6V.js"; +import "./chunk-5KK3TTMN.js"; +import "./chunk-IV6PSERC.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 6da4e39b..5693484f 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-VID4RN2V.js"; +} from "./chunk-YFT6OQ5R.js"; import { del, isVue2, set -} from "./chunk-YAGW2SQC.js"; +} from "./chunk-HYZ2CRGS.js"; import { computed, effectScope, @@ -25,7 +25,7 @@ import { toRefs, unref, watch -} from "./chunk-ELEEJBJQ.js"; +} from "./chunk-H2732BJL.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 1a858daf..65535905 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": ["/*!\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"], + "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"], "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 1ed8dc14..6282a476 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\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"], + "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"], "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 d0d2f249..e4c56739 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-VID4RN2V.js"; +} from "./chunk-YFT6OQ5R.js"; import { computed, defineComponent, @@ -19,7 +19,7 @@ import { unref, watch, watchEffect -} from "./chunk-ELEEJBJQ.js"; +} from "./chunk-H2732BJL.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 1a5c7071..1955f264 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": ["/*!\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 };"], + "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 };"], "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAM,YAAY,OAAO,aAAa;AAkBtC,SAAS,iBAAiB,WAAW;AACpC,SAAO,OAAO,cAAc,YAAY,iBAAiB,aAAa,WAAW,aAAa,eAAe;AAC9G;AACA,SAAS,WAAW,KAAK;AACxB,SAAO,IAAI,cAAc,IAAI,OAAO,WAAW,MAAM,YAAY,IAAI,WAAW,iBAAiB,IAAI,OAAO;AAC7G;AACA,IAAM,SAAS,OAAO;AACtB,SAAS,cAAc,IAAI,QAAQ;AAClC,QAAM,YAAY,CAAC;AACnB,aAAW,OAAO,QAAQ;AACzB,UAAM,QAAQ,OAAO,GAAG;AACxB,cAAU,GAAG,IAAI,QAAQ,KAAK,IAAI,MAAM,IAAI,EAAE,IAAI,GAAG,KAAK;AAAA,EAC3D;AACA,SAAO;AACR;AACA,IAAM,OAAO,MAAM;AAAC;AAOpB,IAAM,UAAU,MAAM;AACtB,SAAS,aAAa,UAAU,gBAAgB;AAC/C,QAAM,UAAU,CAAC;AACjB,aAAW,OAAO,SAAU,SAAQ,GAAG,IAAI,OAAO,iBAAiB,eAAe,GAAG,IAAI,SAAS,GAAG;AACrG,SAAO;AACR;AAIA,SAAS,OAAO,KAAK;AACpB,QAAM,OAAO,MAAM,KAAK,SAAS,EAAE,MAAM,CAAC;AAC1C,UAAQ,KAAK,MAAM,SAAS,CAAC,wBAAwB,GAAG,EAAE,OAAO,IAAI,CAAC;AACvE;AAqBA,IAAM,UAAU;AAChB,IAAM,eAAe;AACrB,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,QAAQ;AACd,IAAM,UAAU;AAehB,IAAM,sBAAsB;AAC5B,IAAM,uBAAuB;AAC7B,IAAM,eAAe;AACrB,IAAM,kBAAkB;AACxB,IAAM,oBAAoB;AAC1B,IAAM,cAAc;AACpB,IAAM,qBAAqB;AAC3B,IAAM,eAAe;AASrB,SAAS,aAAa,MAAM;AAC3B,SAAO,QAAQ,OAAO,KAAK,UAAU,KAAK,IAAI,EAAE,QAAQ,aAAa,GAAG,EAAE,QAAQ,qBAAqB,GAAG,EAAE,QAAQ,sBAAsB,GAAG;AAC9I;AAOA,SAAS,WAAW,MAAM;AACzB,SAAO,aAAa,IAAI,EAAE,QAAQ,mBAAmB,GAAG,EAAE,QAAQ,oBAAoB,GAAG,EAAE,QAAQ,cAAc,GAAG;AACrH;AAQA,SAAS,iBAAiB,MAAM;AAC/B,SAAO,aAAa,IAAI,EAAE,QAAQ,SAAS,KAAK,EAAE,QAAQ,cAAc,GAAG,EAAE,QAAQ,SAAS,KAAK,EAAE,QAAQ,cAAc,KAAK,EAAE,QAAQ,iBAAiB,GAAG,EAAE,QAAQ,mBAAmB,GAAG,EAAE,QAAQ,oBAAoB,GAAG,EAAE,QAAQ,cAAc,GAAG;AAC3P;AAMA,SAAS,eAAe,MAAM;AAC7B,SAAO,iBAAiB,IAAI,EAAE,QAAQ,UAAU,KAAK;AACtD;AAOA,SAAS,WAAW,MAAM;AACzB,SAAO,aAAa,IAAI,EAAE,QAAQ,SAAS,KAAK,EAAE,QAAQ,OAAO,KAAK;AACvE;AAUA,SAAS,YAAY,MAAM;AAC1B,SAAO,WAAW,IAAI,EAAE,QAAQ,UAAU,KAAK;AAChD;AACA,SAAS,OAAO,MAAM;AACrB,MAAI,QAAQ,KAAM,QAAO;AACzB,MAAI;AACH,WAAO,mBAAmB,KAAK,IAAI;AAAA,EACpC,SAAS,KAAK;AACb,IAAyC,OAAO,mBAAmB,IAAI,yBAAyB;AAAA,EACjG;AACA,SAAO,KAAK;AACb;AAIA,IAAM,oBAAoB;AAC1B,IAAM,sBAAsB,CAAC,SAAS,KAAK,QAAQ,mBAAmB,EAAE;AAUxE,SAAS,SAAS,cAAcA,WAAU,kBAAkB,KAAK;AAChE,MAAI,MAAM,QAAQ,CAAC,GAAG,eAAe,IAAI,OAAO;AAChD,QAAM,UAAUA,UAAS,QAAQ,GAAG;AACpC,MAAI,YAAYA,UAAS,QAAQ,GAAG;AACpC,cAAY,WAAW,KAAK,YAAY,UAAU,KAAK;AACvD,MAAI,aAAa,GAAG;AACnB,WAAOA,UAAS,MAAM,GAAG,SAAS;AAClC,mBAAeA,UAAS,MAAM,WAAW,UAAU,IAAI,UAAUA,UAAS,MAAM;AAChF,YAAQ,aAAa,aAAa,MAAM,CAAC,CAAC;AAAA,EAC3C;AACA,MAAI,WAAW,GAAG;AACjB,WAAO,QAAQA,UAAS,MAAM,GAAG,OAAO;AACxC,WAAOA,UAAS,MAAM,SAASA,UAAS,MAAM;AAAA,EAC/C;AACA,SAAO,oBAAoB,QAAQ,OAAO,OAAOA,WAAU,eAAe;AAC1E,SAAO;AAAA,IACN,UAAU,OAAO,eAAe;AAAA,IAChC;AAAA,IACA;AAAA,IACA,MAAM,OAAO,IAAI;AAAA,EAClB;AACD;AAWA,SAAS,aAAa,kBAAkBC,WAAU;AACjD,QAAM,QAAQA,UAAS,QAAQ,iBAAiBA,UAAS,KAAK,IAAI;AAClE,SAAOA,UAAS,QAAQ,SAAS,OAAO,SAASA,UAAS,QAAQ;AACnE;AAOA,SAAS,UAAU,UAAU,MAAM;AAClC,MAAI,CAAC,QAAQ,CAAC,SAAS,YAAY,EAAE,WAAW,KAAK,YAAY,CAAC,EAAG,QAAO;AAC5E,SAAO,SAAS,MAAM,KAAK,MAAM,KAAK;AACvC;AAUA,SAAS,oBAAoB,kBAAkB,GAAG,GAAG;AACpD,QAAM,aAAa,EAAE,QAAQ,SAAS;AACtC,QAAM,aAAa,EAAE,QAAQ,SAAS;AACtC,SAAO,aAAa,MAAM,eAAe,cAAc,kBAAkB,EAAE,QAAQ,UAAU,GAAG,EAAE,QAAQ,UAAU,CAAC,KAAK,0BAA0B,EAAE,QAAQ,EAAE,MAAM,KAAK,iBAAiB,EAAE,KAAK,MAAM,iBAAiB,EAAE,KAAK,KAAK,EAAE,SAAS,EAAE;AACpP;AAQA,SAAS,kBAAkB,GAAG,GAAG;AAChC,UAAQ,EAAE,WAAW,QAAQ,EAAE,WAAW;AAC3C;AACA,SAAS,0BAA0B,GAAG,GAAG;AACxC,MAAI,OAAO,KAAK,CAAC,EAAE,WAAW,OAAO,KAAK,CAAC,EAAE,OAAQ,QAAO;AAC5D,WAAS,OAAO,EAAG,KAAI,CAAC,+BAA+B,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,EAAG,QAAO;AAC/E,SAAO;AACR;AACA,SAAS,+BAA+B,GAAG,GAAG;AAC7C,SAAO,QAAQ,CAAC,IAAI,kBAAkB,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,kBAAkB,GAAG,CAAC,KAAI,uBAAG,gBAAc,uBAAG;AAC1G;AAQA,SAAS,kBAAkB,GAAG,GAAG;AAChC,SAAO,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,MAAM,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,EAAE,CAAC,MAAM;AACjH;AAOA,SAAS,oBAAoB,IAAI,MAAM;AACtC,MAAI,GAAG,WAAW,GAAG,EAAG,QAAO;AAC/B,MAA6C,CAAC,KAAK,WAAW,GAAG,GAAG;AACnE,WAAO,mFAAmF,EAAE,WAAW,IAAI,4BAA4B,IAAI,IAAI;AAC/I,WAAO;AAAA,EACR;AACA,MAAI,CAAC,GAAI,QAAO;AAChB,QAAM,eAAe,KAAK,MAAM,GAAG;AACnC,QAAM,aAAa,GAAG,MAAM,GAAG;AAC/B,QAAM,gBAAgB,WAAW,WAAW,SAAS,CAAC;AACtD,MAAI,kBAAkB,QAAQ,kBAAkB,IAAK,YAAW,KAAK,EAAE;AACvE,MAAI,WAAW,aAAa,SAAS;AACrC,MAAI;AACJ,MAAI;AACJ,OAAK,aAAa,GAAG,aAAa,WAAW,QAAQ,cAAc;AAClE,cAAU,WAAW,UAAU;AAC/B,QAAI,YAAY,IAAK;AACrB,QAAI,YAAY,MAAM;AACrB,UAAI,WAAW,EAAG;AAAA,IACnB,MAAO;AAAA,EACR;AACA,SAAO,aAAa,MAAM,GAAG,QAAQ,EAAE,KAAK,GAAG,IAAI,MAAM,WAAW,MAAM,UAAU,EAAE,KAAK,GAAG;AAC/F;AAgBA,IAAM,4BAA4B;AAAA,EACjC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ,CAAC;AAAA,EACT,OAAO,CAAC;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS,CAAC;AAAA,EACV,MAAM,CAAC;AAAA,EACP,gBAAgB;AACjB;AAIA,IAAI,iBAAiC,SAAS,kBAAkB;AAC/D,mBAAiB,KAAK,IAAI;AAC1B,mBAAiB,MAAM,IAAI;AAC3B,SAAO;AACR,EAAE,CAAC,CAAC;AACJ,IAAI,sBAAsC,SAAS,uBAAuB;AACzE,wBAAsB,MAAM,IAAI;AAChC,wBAAsB,SAAS,IAAI;AACnC,wBAAsB,SAAS,IAAI;AACnC,SAAO;AACR,EAAE,CAAC,CAAC;AAIJ,IAAM,QAAQ;AAOd,SAAS,cAAc,MAAM;AAC5B,MAAI,CAAC,KAAM,KAAI,WAAW;AACzB,UAAM,SAAS,SAAS,cAAc,MAAM;AAC5C,WAAO,UAAU,OAAO,aAAa,MAAM,KAAK;AAChD,WAAO,KAAK,QAAQ,mBAAmB,EAAE;AAAA,EAC1C,MAAO,QAAO;AACd,MAAI,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,IAAK,QAAO,MAAM;AACrD,SAAO,oBAAoB,IAAI;AAChC;AACA,IAAM,iBAAiB;AACvB,SAAS,WAAW,MAAMA,WAAU;AACnC,SAAO,KAAK,QAAQ,gBAAgB,GAAG,IAAIA;AAC5C;AAIA,SAAS,mBAAmB,IAAI,QAAQ;AACvC,QAAM,UAAU,SAAS,gBAAgB,sBAAsB;AAC/D,QAAM,SAAS,GAAG,sBAAsB;AACxC,SAAO;AAAA,IACN,UAAU,OAAO;AAAA,IACjB,MAAM,OAAO,OAAO,QAAQ,QAAQ,OAAO,QAAQ;AAAA,IACnD,KAAK,OAAO,MAAM,QAAQ,OAAO,OAAO,OAAO;AAAA,EAChD;AACD;AACA,IAAM,wBAAwB,OAAO;AAAA,EACpC,MAAM,OAAO;AAAA,EACb,KAAK,OAAO;AACb;AACA,SAAS,iBAAiB,UAAU;AACnC,MAAI;AACJ,MAAI,QAAQ,UAAU;AACrB,UAAM,aAAa,SAAS;AAC5B,UAAM,eAAe,OAAO,eAAe,YAAY,WAAW,WAAW,GAAG;AAsBhF,QAA6C,OAAO,SAAS,OAAO,UAAU;AAC7E,UAAI,CAAC,gBAAgB,CAAC,SAAS,eAAe,SAAS,GAAG,MAAM,CAAC,CAAC,EAAG,KAAI;AACxE,cAAM,UAAU,SAAS,cAAc,SAAS,EAAE;AAClD,YAAI,gBAAgB,SAAS;AAC5B,iBAAO,iBAAiB,SAAS,EAAE,sDAAsD,SAAS,EAAE,iCAAiC;AACrI;AAAA,QACD;AAAA,MACD,SAAS,KAAK;AACb,eAAO,iBAAiB,SAAS,EAAE,4QAA4Q;AAC/S;AAAA,MACD;AAAA,IACD;AACA,UAAM,KAAK,OAAO,eAAe,WAAW,eAAe,SAAS,eAAe,WAAW,MAAM,CAAC,CAAC,IAAI,SAAS,cAAc,UAAU,IAAI;AAC/I,QAAI,CAAC,IAAI;AACR,MAAyC,OAAO,yCAAyC,SAAS,EAAE,+BAA+B;AACnI;AAAA,IACD;AACA,sBAAkB,mBAAmB,IAAI,QAAQ;AAAA,EAClD,MAAO,mBAAkB;AACzB,MAAI,oBAAoB,SAAS,gBAAgB,MAAO,QAAO,SAAS,eAAe;AAAA,MAClF,QAAO,SAAS,gBAAgB,QAAQ,OAAO,gBAAgB,OAAO,OAAO,SAAS,gBAAgB,OAAO,OAAO,gBAAgB,MAAM,OAAO,OAAO;AAC9J;AACA,SAAS,aAAa,MAAM,OAAO;AAClC,UAAQ,QAAQ,QAAQ,QAAQ,MAAM,WAAW,QAAQ,MAAM;AAChE;AACA,IAAM,kBAAkC,oBAAI,IAAI;AAChD,SAAS,mBAAmB,KAAK,gBAAgB;AAChD,kBAAgB,IAAI,KAAK,cAAc;AACxC;AACA,SAAS,uBAAuB,KAAK;AACpC,QAAM,SAAS,gBAAgB,IAAI,GAAG;AACtC,kBAAgB,OAAO,GAAG;AAC1B,SAAO;AACR;AAQA,SAAS,gBAAgB,OAAO;AAC/B,SAAO,OAAO,UAAU,YAAY,SAAS,OAAO,UAAU;AAC/D;AACA,SAAS,YAAY,MAAM;AAC1B,SAAO,OAAO,SAAS,YAAY,OAAO,SAAS;AACpD;AAUA,IAAI,aAA6B,SAAS,cAAc;AACvD,eAAa,aAAa,mBAAmB,IAAI,CAAC,IAAI;AACtD,eAAa,aAAa,2BAA2B,IAAI,CAAC,IAAI;AAC9D,eAAa,aAAa,oBAAoB,IAAI,CAAC,IAAI;AACvD,eAAa,aAAa,sBAAsB,IAAI,CAAC,IAAI;AACzD,eAAa,aAAa,uBAAuB,IAAI,EAAE,IAAI;AAC3D,SAAO;AACR,EAAE,CAAC,CAAC;AACJ,IAAM,0BAA0B,OAAO,OAAwC,uBAAuB,EAAE;AAKxG,IAAI,wBAAwC,SAAS,yBAAyB;AAK7E,0BAAwB,wBAAwB,SAAS,IAAI,CAAC,IAAI;AAKlE,0BAAwB,wBAAwB,WAAW,IAAI,CAAC,IAAI;AAKpE,0BAAwB,wBAAwB,YAAY,IAAI,EAAE,IAAI;AACtE,SAAO;AACR,EAAE,CAAC,CAAC;AACJ,IAAM,oBAAoB;AAAA,EACzB,CAAC,WAAW,iBAAiB,EAAE,EAAE,UAAAA,WAAU,gBAAgB,GAAG;AAC7D,WAAO;AAAA,GAAkB,KAAK,UAAUA,SAAQ,CAAC,GAAG,kBAAkB,uBAAuB,KAAK,UAAU,eAAe,IAAI,EAAE;AAAA,EAClI;AAAA,EACA,CAAC,WAAW,yBAAyB,EAAE,EAAE,MAAM,GAAG,GAAG;AACpD,WAAO,oBAAoB,KAAK,QAAQ,SAAS,eAAe,EAAE,CAAC;AAAA,EACpE;AAAA,EACA,CAAC,WAAW,kBAAkB,EAAE,EAAE,MAAM,GAAG,GAAG;AAC7C,WAAO,4BAA4B,KAAK,QAAQ,SAAS,GAAG,QAAQ;AAAA,EACrE;AAAA,EACA,CAAC,WAAW,oBAAoB,EAAE,EAAE,MAAM,GAAG,GAAG;AAC/C,WAAO,8BAA8B,KAAK,QAAQ,SAAS,GAAG,QAAQ;AAAA,EACvE;AAAA,EACA,CAAC,WAAW,qBAAqB,EAAE,EAAE,MAAM,GAAG,GAAG;AAChD,WAAO,sDAAsD,KAAK,QAAQ;AAAA,EAC3E;AACD;AAOA,SAAS,kBAAkB,MAAM,QAAQ;AACxC,MAAI,KAAgD,QAAO,OAAO,IAAI,MAAM,kBAAkB,IAAI,EAAE,MAAM,CAAC,GAAG;AAAA,IAC7G;AAAA,IACA,CAAC,uBAAuB,GAAG;AAAA,EAC5B,GAAG,MAAM;AAAA,MACJ,QAAO,OAAuB,IAAI,MAAM,GAAG;AAAA,IAC/C;AAAA,IACA,CAAC,uBAAuB,GAAG;AAAA,EAC5B,GAAG,MAAM;AACV;AACA,SAAS,oBAAoB,OAAO,MAAM;AACzC,SAAO,iBAAiB,SAAS,2BAA2B,UAAU,QAAQ,QAAQ,CAAC,EAAE,MAAM,OAAO;AACvG;AACA,IAAM,kBAAkB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AACD;AACA,SAAS,eAAe,IAAI;AAC3B,MAAI,OAAO,OAAO,SAAU,QAAO;AACnC,MAAI,GAAG,QAAQ,KAAM,QAAO,GAAG;AAC/B,QAAMA,YAAW,CAAC;AAClB,aAAW,OAAO,gBAAiB,KAAI,OAAO,GAAI,CAAAA,UAAS,GAAG,IAAI,GAAG,GAAG;AACxE,SAAO,KAAK,UAAUA,WAAU,MAAM,CAAC;AACxC;AAaA,SAAS,WAAW,QAAQ;AAC3B,QAAM,QAAQ,CAAC;AACf,MAAI,WAAW,MAAM,WAAW,IAAK,QAAO;AAC5C,QAAM,gBAAgB,OAAO,CAAC,MAAM,MAAM,OAAO,MAAM,CAAC,IAAI,QAAQ,MAAM,GAAG;AAC7E,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,EAAE,GAAG;AAC7C,UAAM,cAAc,aAAa,CAAC,EAAE,QAAQ,SAAS,GAAG;AACxD,UAAM,QAAQ,YAAY,QAAQ,GAAG;AACrC,UAAM,MAAM,OAAO,QAAQ,IAAI,cAAc,YAAY,MAAM,GAAG,KAAK,CAAC;AACxE,UAAM,QAAQ,QAAQ,IAAI,OAAO,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC;AACpE,QAAI,OAAO,OAAO;AACjB,UAAI,eAAe,MAAM,GAAG;AAC5B,UAAI,CAAC,QAAQ,YAAY,EAAG,gBAAe,MAAM,GAAG,IAAI,CAAC,YAAY;AACrE,mBAAa,KAAK,KAAK;AAAA,IACxB,MAAO,OAAM,GAAG,IAAI;AAAA,EACrB;AACA,SAAO;AACR;AAUA,SAAS,eAAe,OAAO;AAC9B,MAAI,SAAS;AACb,WAAS,OAAO,OAAO;AACtB,UAAM,QAAQ,MAAM,GAAG;AACvB,UAAM,eAAe,GAAG;AACxB,QAAI,SAAS,MAAM;AAClB,UAAI,UAAU,OAAQ,YAAW,OAAO,SAAS,MAAM,MAAM;AAC7D;AAAA,IACD;AACA,KAAC,QAAQ,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,KAAK,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,iBAAiB,KAAK,CAAC,GAAG,QAAQ,CAAC,YAAY;AACvH,UAAI,YAAY,QAAQ;AACvB,mBAAW,OAAO,SAAS,MAAM,MAAM;AACvC,YAAI,WAAW,KAAM,WAAU,MAAM;AAAA,MACtC;AAAA,IACD,CAAC;AAAA,EACF;AACA,SAAO;AACR;AASA,SAAS,eAAe,OAAO;AAC9B,QAAM,kBAAkB,CAAC;AACzB,aAAW,OAAO,OAAO;AACxB,UAAM,QAAQ,MAAM,GAAG;AACvB,QAAI,UAAU,OAAQ,iBAAgB,GAAG,IAAI,QAAQ,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,KAAK,OAAO,OAAO,KAAK,CAAC,IAAI,SAAS,OAAO,QAAQ,KAAK;AAAA,EAC1I;AACA,SAAO;AACR;AAWA,IAAM,kBAAkB,OAAO,OAAwC,iCAAiC,EAAE;AAO1G,IAAM,eAAe,OAAO,OAAwC,sBAAsB,EAAE;AAO5F,IAAM,YAAY,OAAO,OAAwC,WAAW,EAAE;AAO9E,IAAM,mBAAmB,OAAO,OAAwC,mBAAmB,EAAE;AAO7F,IAAM,wBAAwB,OAAO,OAAwC,yBAAyB,EAAE;AAOxG,SAAS,eAAe;AACvB,MAAI,WAAW,CAAC;AAChB,WAAS,IAAI,SAAS;AACrB,aAAS,KAAK,OAAO;AACrB,WAAO,MAAM;AACZ,YAAM,IAAI,SAAS,QAAQ,OAAO;AAClC,UAAI,IAAI,GAAI,UAAS,OAAO,GAAG,CAAC;AAAA,IACjC;AAAA,EACD;AACA,WAAS,QAAQ;AAChB,eAAW,CAAC;AAAA,EACb;AACA,SAAO;AAAA,IACN;AAAA,IACA,MAAM,MAAM,SAAS,MAAM;AAAA,IAC3B;AAAA,EACD;AACD;AAIA,SAAS,cAAc,QAAQ,MAAM,OAAO;AAC3C,QAAM,iBAAiB,MAAM;AAC5B,WAAO,IAAI,EAAE,OAAO,KAAK;AAAA,EAC1B;AACA,cAAY,cAAc;AAC1B,gBAAc,cAAc;AAC5B,cAAY,MAAM;AACjB,WAAO,IAAI,EAAE,IAAI,KAAK;AAAA,EACvB,CAAC;AACD,SAAO,IAAI,EAAE,IAAI,KAAK;AACvB;AAQA,SAAS,mBAAmB,YAAY;AACvC,MAA6C,CAAC,mBAAmB,GAAG;AACnE,WAAO,wGAAwG;AAC/G;AAAA,EACD;AACA,QAAM,eAAe,OAAO,iBAAiB,CAAC,CAAC,EAAE;AACjD,MAAI,CAAC,cAAc;AAClB,IAAyC,OAAO,0LAA0L;AAC1O;AAAA,EACD;AACA,gBAAc,cAAc,eAAe,UAAU;AACtD;AAQA,SAAS,oBAAoB,aAAa;AACzC,MAA6C,CAAC,mBAAmB,GAAG;AACnE,WAAO,yGAAyG;AAChH;AAAA,EACD;AACA,QAAM,eAAe,OAAO,iBAAiB,CAAC,CAAC,EAAE;AACjD,MAAI,CAAC,cAAc;AAClB,IAAyC,OAAO,2LAA2L;AAC3O;AAAA,EACD;AACA,gBAAc,cAAc,gBAAgB,WAAW;AACxD;AACA,SAAS,iBAAiB,OAAO,IAAI,MAAM,QAAQ,MAAM,iBAAiB,CAAC,OAAO,GAAG,GAAG;AACvF,QAAM,qBAAqB,WAAW,OAAO,eAAe,IAAI,IAAI,OAAO,eAAe,IAAI,KAAK,CAAC;AACpG,SAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC7C,UAAM,OAAO,CAAC,UAAU;AACvB,UAAI,UAAU,MAAO,QAAO,kBAAkB,WAAW,oBAAoB;AAAA,QAC5E;AAAA,QACA;AAAA,MACD,CAAC,CAAC;AAAA,eACO,iBAAiB,MAAO,QAAO,KAAK;AAAA,eACpC,gBAAgB,KAAK,EAAG,QAAO,kBAAkB,WAAW,2BAA2B;AAAA,QAC/F,MAAM;AAAA,QACN,IAAI;AAAA,MACL,CAAC,CAAC;AAAA,WACG;AACJ,YAAI,sBAAsB,OAAO,eAAe,IAAI,MAAM,sBAAsB,OAAO,UAAU,WAAY,oBAAmB,KAAK,KAAK;AAC1I,gBAAQ;AAAA,MACT;AAAA,IACD;AACA,UAAM,cAAc,eAAe,MAAM,MAAM,KAAK,UAAU,OAAO,UAAU,IAAI,GAAG,IAAI,MAAM,OAAwC,oBAAoB,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC;AACnL,QAAI,YAAY,QAAQ,QAAQ,WAAW;AAC3C,QAAI,MAAM,SAAS,EAAG,aAAY,UAAU,KAAK,IAAI;AACrD,QAA6C,MAAM,SAAS,GAAG;AAC9D,YAAM,UAAU,kDAAkD,MAAM,OAAO,MAAO,MAAM,OAAO,MAAO,EAAE;AAAA,EAAM,MAAM,SAAS,CAAC;AAAA;AAClI,UAAI,OAAO,gBAAgB,YAAY,UAAU,YAAa,aAAY,UAAU,KAAK,CAAC,kBAAkB;AAC3G,YAAI,CAAC,KAAK,SAAS;AAClB,iBAAO,OAAO;AACd,iBAAO,QAAQ,OAAuB,IAAI,MAAM,0BAA0B,CAAC;AAAA,QAC5E;AACA,eAAO;AAAA,MACR,CAAC;AAAA,eACQ,gBAAgB,QAAQ;AAChC,YAAI,CAAC,KAAK,SAAS;AAClB,iBAAO,OAAO;AACd,iBAAuB,IAAI,MAAM,0BAA0B,CAAC;AAC5D;AAAA,QACD;AAAA,MACD;AAAA,IACD;AACA,cAAU,MAAM,CAAC,QAAQ,OAAO,GAAG,CAAC;AAAA,EACrC,CAAC;AACF;AACA,SAAS,oBAAoB,MAAM,IAAI,MAAM;AAC5C,MAAI,SAAS;AACb,SAAO,WAAW;AACjB,QAAI,aAAa,EAAG,QAAO,0FAA0F,KAAK,QAAQ,SAAS,GAAG,QAAQ,iGAAiG;AACvP,SAAK,UAAU;AACf,QAAI,WAAW,EAAG,MAAK,MAAM,MAAM,SAAS;AAAA,EAC7C;AACD;AACA,SAAS,wBAAwB,SAAS,WAAW,IAAI,MAAM,iBAAiB,CAAC,OAAO,GAAG,GAAG;AAC7F,QAAM,SAAS,CAAC;AAChB,aAAW,UAAU,SAAS;AAC7B,QAA6C,CAAC,OAAO,cAAc,OAAO,YAAY,CAAC,OAAO,SAAS,OAAQ,QAAO,qBAAqB,OAAO,IAAI,8DAA8D;AACpN,eAAW,QAAQ,OAAO,YAAY;AACrC,UAAI,eAAe,OAAO,WAAW,IAAI;AACzC,UAAI,MAAuC;AAC1C,YAAI,CAAC,gBAAgB,OAAO,iBAAiB,YAAY,OAAO,iBAAiB,YAAY;AAC5F,iBAAO,cAAc,IAAI,0BAA0B,OAAO,IAAI,yCAAyC,OAAO,YAAY,CAAC,IAAI;AAC/H,gBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC1C,WAAW,UAAU,cAAc;AAClC,iBAAO,cAAc,IAAI,0BAA0B,OAAO,IAAI,6LAA6L;AAC3P,gBAAM,UAAU;AAChB,yBAAe,MAAM;AAAA,QACtB,WAAW,aAAa,iBAAiB,CAAC,aAAa,qBAAqB;AAC3E,uBAAa,sBAAsB;AACnC,iBAAO,cAAc,IAAI,0BAA0B,OAAO,IAAI,oJAAoJ;AAAA,QACnN;AAAA,MACD;AACA,UAAI,cAAc,sBAAsB,CAAC,OAAO,UAAU,IAAI,EAAG;AACjE,UAAI,iBAAiB,YAAY,GAAG;AACnC,cAAM,SAAS,aAAa,aAAa,cAAc,SAAS;AAChE,iBAAS,OAAO,KAAK,iBAAiB,OAAO,IAAI,MAAM,QAAQ,MAAM,cAAc,CAAC;AAAA,MACrF,OAAO;AACN,YAAI,mBAAmB,aAAa;AACpC,YAA6C,EAAE,WAAW,mBAAmB;AAC5E,iBAAO,cAAc,IAAI,0BAA0B,OAAO,IAAI,4LAA4L;AAC1P,6BAAmB,QAAQ,QAAQ,gBAAgB;AAAA,QACpD;AACA,eAAO,KAAK,MAAM,iBAAiB,KAAK,CAAC,aAAa;AACrD,cAAI,CAAC,SAAU,OAAM,IAAI,MAAM,+BAA+B,IAAI,SAAS,OAAO,IAAI,GAAG;AACzF,gBAAM,oBAAoB,WAAW,QAAQ,IAAI,SAAS,UAAU;AACpE,iBAAO,KAAK,IAAI,IAAI;AACpB,iBAAO,WAAW,IAAI,IAAI;AAC1B,gBAAM,SAAS,kBAAkB,aAAa,mBAAmB,SAAS;AAC1E,iBAAO,SAAS,iBAAiB,OAAO,IAAI,MAAM,QAAQ,MAAM,cAAc,EAAE;AAAA,QACjF,CAAC,CAAC;AAAA,MACH;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR;AAMA,SAAS,kBAAkB,OAAO;AACjC,SAAO,MAAM,QAAQ,MAAM,CAAC,WAAW,OAAO,QAAQ,IAAI,QAAQ,OAAuB,IAAI,MAAM,qCAAqC,CAAC,IAAI,QAAQ,IAAI,MAAM,QAAQ,IAAI,CAAC,WAAW,OAAO,cAAc,QAAQ,IAAI,OAAO,KAAK,OAAO,UAAU,EAAE,OAAO,CAAC,UAAU,SAAS;AACjR,UAAM,eAAe,OAAO,WAAW,IAAI;AAC3C,QAAI,OAAO,iBAAiB,cAAc,EAAE,iBAAiB,cAAe,UAAS,KAAK,aAAa,EAAE,KAAK,CAAC,aAAa;AAC3H,UAAI,CAAC,SAAU,QAAO,QAAQ,OAAuB,IAAI,MAAM,+BAA+B,IAAI,SAAS,OAAO,IAAI,yDAAyD,CAAC;AAChL,YAAM,oBAAoB,WAAW,QAAQ,IAAI,SAAS,UAAU;AACpE,aAAO,KAAK,IAAI,IAAI;AACpB,aAAO,WAAW,IAAI,IAAI;AAAA,IAC3B,CAAC,CAAC;AACF,WAAO;AAAA,EACR,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,KAAK;AAC3B;AAQA,SAAS,uBAAuB,IAAI,MAAM;AACzC,QAAM,iBAAiB,CAAC;AACxB,QAAM,kBAAkB,CAAC;AACzB,QAAM,kBAAkB,CAAC;AACzB,QAAM,MAAM,KAAK,IAAI,KAAK,QAAQ,QAAQ,GAAG,QAAQ,MAAM;AAC3D,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC7B,UAAM,aAAa,KAAK,QAAQ,CAAC;AACjC,QAAI,WAAY,KAAI,GAAG,QAAQ,KAAK,CAAC,WAAW,kBAAkB,QAAQ,UAAU,CAAC,EAAG,iBAAgB,KAAK,UAAU;AAAA,QAClH,gBAAe,KAAK,UAAU;AACnC,UAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,QAAI,UAAU;AACb,UAAI,CAAC,KAAK,QAAQ,KAAK,CAAC,WAAW,kBAAkB,QAAQ,QAAQ,CAAC,EAAG,iBAAgB,KAAK,QAAQ;AAAA,IACvG;AAAA,EACD;AACA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAWA,SAAS,oBAAoB,eAAe,SAAS;AACpD,QAAM,OAAO,OAAO,CAAC,GAAG,eAAe,EAAE,SAAS,cAAc,QAAQ,IAAI,CAAC,YAAY,KAAK,SAAS;AAAA,IACtG;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC,CAAC,EAAE,CAAC;AACL,SAAO,EAAE,SAAS;AAAA,IACjB,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS,cAAc;AAAA,IACvB;AAAA,IACA,OAAO;AAAA,EACR,EAAE;AACH;AACA,SAAS,cAAc,SAAS;AAC/B,SAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AAC/B;AACA,IAAI,WAAW;AACf,SAAS,YAAY,KAAK,QAAQ,SAAS;AAC1C,MAAI,OAAO,cAAe;AAC1B,SAAO,gBAAgB;AACvB,QAAM,KAAK;AACX,sBAAoB;AAAA,IACnB,IAAI,sBAAsB,KAAK,MAAM,KAAK;AAAA,IAC1C,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,qBAAqB,CAAC,SAAS;AAAA,IAC/B;AAAA,EACD,GAAG,CAAC,QAAQ;AACX,QAAI,OAAO,IAAI,QAAQ,WAAY,QAAO,uNAAuN;AACjQ,QAAI,GAAG,iBAAiB,CAAC,SAAS,QAAQ;AACzC,UAAI,QAAQ,aAAc,SAAQ,aAAa,MAAM,KAAK;AAAA,QACzD,MAAM;AAAA,QACN,KAAK;AAAA,QACL,UAAU;AAAA,QACV,OAAO,oBAAoB,OAAO,aAAa,OAAO,eAAe;AAAA,MACtE,CAAC;AAAA,IACF,CAAC;AACD,QAAI,GAAG,mBAAmB,CAAC,EAAE,UAAU,MAAM,kBAAkB,MAAM;AACpE,UAAI,kBAAkB,gBAAgB;AACrC,cAAM,OAAO,kBAAkB;AAC/B,aAAK,KAAK,KAAK;AAAA,UACd,QAAQ,KAAK,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,OAAO,MAAM,KAAK;AAAA,UAC7D,WAAW;AAAA,UACX,SAAS;AAAA,UACT,iBAAiB;AAAA,QAClB,CAAC;AAAA,MACF;AACA,UAAI,QAAQ,kBAAkB,cAAc,GAAG;AAC9C,0BAAkB,gBAAgB;AAClC,0BAAkB,eAAe,QAAQ,CAAC,iBAAiB;AAC1D,cAAI,QAAQ,aAAa,MAAM;AAC/B,cAAI,kBAAkB;AACtB,cAAI,UAAU;AACd,cAAI,YAAY;AAChB,cAAI,aAAa,OAAO;AACvB,oBAAQ,aAAa;AACrB,8BAAkB;AAClB,wBAAY;AAAA,UACb,WAAW,aAAa,eAAe;AACtC,8BAAkB;AAClB,sBAAU;AAAA,UACX,WAAW,aAAa,UAAU;AACjC,8BAAkB;AAClB,sBAAU;AAAA,UACX;AACA,eAAK,KAAK,KAAK;AAAA,YACd;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACF;AAAA,IACD,CAAC;AACD,UAAM,OAAO,cAAc,MAAM;AAChC,wBAAkB;AAClB,UAAI,sBAAsB;AAC1B,UAAI,kBAAkB,iBAAiB;AACvC,UAAI,mBAAmB,iBAAiB;AAAA,IACzC,CAAC;AACD,UAAM,qBAAqB,wBAAwB;AACnD,QAAI,iBAAiB;AAAA,MACpB,IAAI;AAAA,MACJ,OAAO,SAAS,KAAK,MAAM,KAAK,EAAE;AAAA,MAClC,OAAO;AAAA,IACR,CAAC;AACD,WAAO,QAAQ,CAAC,OAAO,OAAO;AAC7B,UAAI,iBAAiB;AAAA,QACpB,SAAS;AAAA,QACT,OAAO;AAAA,UACN,OAAO;AAAA,UACP,UAAU,GAAG;AAAA,UACb,SAAS;AAAA,UACT,MAAM,IAAI,IAAI;AAAA,UACd,MAAM,EAAE,MAAM;AAAA,UACd,SAAS,GAAG,KAAK;AAAA,QAClB;AAAA,MACD,CAAC;AAAA,IACF,CAAC;AACD,QAAI,eAAe;AACnB,WAAO,WAAW,CAAC,IAAI,SAAS;AAC/B,YAAM,OAAO;AAAA,QACZ,OAAO,cAAc,YAAY;AAAA,QACjC,MAAM,oBAAoB,MAAM,yCAAyC;AAAA,QACzE,IAAI,oBAAoB,IAAI,iBAAiB;AAAA,MAC9C;AACA,aAAO,eAAe,GAAG,MAAM,kBAAkB,EAAE,OAAO,eAAe,CAAC;AAC1E,UAAI,iBAAiB;AAAA,QACpB,SAAS;AAAA,QACT,OAAO;AAAA,UACN,MAAM,IAAI,IAAI;AAAA,UACd,OAAO;AAAA,UACP,UAAU,GAAG;AAAA,UACb;AAAA,UACA,SAAS,GAAG,KAAK;AAAA,QAClB;AAAA,MACD,CAAC;AAAA,IACF,CAAC;AACD,WAAO,UAAU,CAAC,IAAI,MAAM,YAAY;AACvC,YAAM,OAAO,EAAE,OAAO,cAAc,WAAW,EAAE;AACjD,UAAI,SAAS;AACZ,aAAK,UAAU,EAAE,SAAS;AAAA,UACzB,MAAM;AAAA,UACN,UAAU;AAAA,UACV,SAAS,UAAU,QAAQ,UAAU;AAAA,UACrC,SAAS;AAAA,UACT,OAAO;AAAA,QACR,EAAE;AACF,aAAK,SAAS,cAAc,GAAG;AAAA,MAChC,MAAO,MAAK,SAAS,cAAc,GAAG;AACtC,WAAK,OAAO,oBAAoB,MAAM,yCAAyC;AAC/E,WAAK,KAAK,oBAAoB,IAAI,iBAAiB;AACnD,UAAI,iBAAiB;AAAA,QACpB,SAAS;AAAA,QACT,OAAO;AAAA,UACN,OAAO;AAAA,UACP,UAAU,GAAG;AAAA,UACb,MAAM,IAAI,IAAI;AAAA,UACd;AAAA,UACA,SAAS,UAAU,YAAY;AAAA,UAC/B,SAAS,GAAG,KAAK;AAAA,QAClB;AAAA,MACD,CAAC;AAAA,IACF,CAAC;AAID,UAAM,oBAAoB,sBAAsB;AAChD,QAAI,aAAa;AAAA,MAChB,IAAI;AAAA,MACJ,OAAO,YAAY,KAAK,MAAM,KAAK;AAAA,MACnC,MAAM;AAAA,MACN,uBAAuB;AAAA,IACxB,CAAC;AACD,aAAS,oBAAoB;AAC5B,UAAI,CAAC,oBAAqB;AAC1B,YAAM,UAAU;AAChB,UAAI,SAAS,QAAQ,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,UAAU,CAAC,MAAM,OAAO,OAAO,UAAU;AACnG,aAAO,QAAQ,4BAA4B;AAC3C,UAAI,QAAQ,OAAQ,UAAS,OAAO,OAAO,CAAC,UAAU,gBAAgB,OAAO,QAAQ,OAAO,YAAY,CAAC,CAAC;AAC1G,aAAO,QAAQ,CAAC,UAAU,sBAAsB,OAAO,OAAO,aAAa,KAAK,CAAC;AACjF,cAAQ,YAAY,OAAO,IAAI,6BAA6B;AAAA,IAC7D;AACA,QAAI;AACJ,QAAI,GAAG,iBAAiB,CAAC,YAAY;AACpC,4BAAsB;AACtB,UAAI,QAAQ,QAAQ,OAAO,QAAQ,gBAAgB,kBAAmB,mBAAkB;AAAA,IACzF,CAAC;AAID,QAAI,GAAG,kBAAkB,CAAC,YAAY;AACrC,UAAI,QAAQ,QAAQ,OAAO,QAAQ,gBAAgB,mBAAmB;AACrE,cAAM,QAAQ,QAAQ,UAAU,EAAE,KAAK,CAAC,YAAY,QAAQ,OAAO,YAAY,QAAQ,MAAM;AAC7F,YAAI,MAAO,SAAQ,QAAQ,EAAE,SAAS,0CAA0C,KAAK,EAAE;AAAA,MACxF;AAAA,IACD,CAAC;AACD,QAAI,kBAAkB,iBAAiB;AACvC,QAAI,mBAAmB,iBAAiB;AAAA,EACzC,CAAC;AACF;AACA,SAAS,eAAe,KAAK;AAC5B,MAAI,IAAI,SAAU,QAAO,IAAI,aAAa,MAAM;AAAA,MAC3C,QAAO,IAAI,aAAa,MAAM;AACpC;AACA,SAAS,0CAA0C,OAAO;AACzD,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,SAAS,CAAC;AAAA,IACf,UAAU;AAAA,IACV,KAAK;AAAA,IACL,OAAO,OAAO;AAAA,EACf,CAAC;AACD,MAAI,OAAO,QAAQ,KAAM,QAAO,KAAK;AAAA,IACpC,UAAU;AAAA,IACV,KAAK;AAAA,IACL,OAAO,OAAO;AAAA,EACf,CAAC;AACD,SAAO,KAAK;AAAA,IACX,UAAU;AAAA,IACV,KAAK;AAAA,IACL,OAAO,MAAM;AAAA,EACd,CAAC;AACD,MAAI,MAAM,KAAK,OAAQ,QAAO,KAAK;AAAA,IAClC,UAAU;AAAA,IACV,KAAK;AAAA,IACL,OAAO,EAAE,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS,MAAM,KAAK,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,GAAG,eAAe,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG;AAAA,MAC9E,SAAS;AAAA,MACT,OAAO,MAAM;AAAA,IACd,EAAE;AAAA,EACH,CAAC;AACD,MAAI,OAAO,YAAY,KAAM,QAAO,KAAK;AAAA,IACxC,UAAU;AAAA,IACV,KAAK;AAAA,IACL,OAAO,OAAO;AAAA,EACf,CAAC;AACD,MAAI,MAAM,MAAM,OAAQ,QAAO,KAAK;AAAA,IACnC,UAAU;AAAA,IACV,KAAK;AAAA,IACL,OAAO,MAAM,MAAM,IAAI,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EACpD,CAAC;AACD,MAAI,OAAO,KAAK,MAAM,OAAO,IAAI,EAAE,OAAQ,QAAO,KAAK;AAAA,IACtD,UAAU;AAAA,IACV,KAAK;AAAA,IACL,OAAO,MAAM,OAAO;AAAA,EACrB,CAAC;AACD,SAAO,KAAK;AAAA,IACX,KAAK;AAAA,IACL,UAAU;AAAA,IACV,OAAO,EAAE,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS,MAAM,MAAM,IAAI,CAAC,UAAU,MAAM,KAAK,IAAI,CAAC,EAAE,KAAK,KAAK;AAAA,MAChE,SAAS;AAAA,MACT,OAAO,MAAM;AAAA,IACd,EAAE;AAAA,EACH,CAAC;AACD,SAAO;AACR;AAIA,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,aAAa;AACnB,IAAM,OAAO;AACb,IAAM,UAAU;AAChB,IAAM,UAAU;AAChB,SAAS,8BAA8B,OAAO;AAC7C,QAAM,OAAO,CAAC;AACd,QAAM,EAAE,OAAO,IAAI;AACnB,MAAI,OAAO,QAAQ,KAAM,MAAK,KAAK;AAAA,IAClC,OAAO,OAAO,OAAO,IAAI;AAAA,IACzB,WAAW;AAAA,IACX,iBAAiB;AAAA,EAClB,CAAC;AACD,MAAI,OAAO,QAAS,MAAK,KAAK;AAAA,IAC7B,OAAO;AAAA,IACP,WAAW;AAAA,IACX,iBAAiB;AAAA,EAClB,CAAC;AACD,MAAI,MAAM,WAAY,MAAK,KAAK;AAAA,IAC/B,OAAO;AAAA,IACP,WAAW;AAAA,IACX,iBAAiB;AAAA,EAClB,CAAC;AACD,MAAI,MAAM,iBAAkB,MAAK,KAAK;AAAA,IACrC,OAAO;AAAA,IACP,WAAW;AAAA,IACX,iBAAiB;AAAA,EAClB,CAAC;AACD,MAAI,MAAM,YAAa,MAAK,KAAK;AAAA,IAChC,OAAO;AAAA,IACP,WAAW;AAAA,IACX,iBAAiB;AAAA,EAClB,CAAC;AACD,MAAI,OAAO,SAAU,MAAK,KAAK;AAAA,IAC9B,OAAO,OAAO,OAAO,aAAa,WAAW,aAAa,OAAO,QAAQ,KAAK;AAAA,IAC9E,WAAW;AAAA,IACX,iBAAiB;AAAA,EAClB,CAAC;AACD,MAAI,KAAK,OAAO;AAChB,MAAI,MAAM,MAAM;AACf,SAAK,OAAO,eAAe;AAC3B,WAAO,UAAU;AAAA,EAClB;AACA,SAAO;AAAA,IACN;AAAA,IACA,OAAO,OAAO;AAAA,IACd;AAAA,IACA,UAAU,MAAM,SAAS,IAAI,6BAA6B;AAAA,EAC3D;AACD;AACA,IAAI,gBAAgB;AACpB,IAAM,oBAAoB;AAC1B,SAAS,sBAAsB,OAAO,cAAc;AACnD,QAAM,gBAAgB,aAAa,QAAQ,UAAU,kBAAkB,aAAa,QAAQ,aAAa,QAAQ,SAAS,CAAC,GAAG,MAAM,MAAM;AAC1I,QAAM,mBAAmB,MAAM,cAAc;AAC7C,MAAI,CAAC,cAAe,OAAM,cAAc,aAAa,QAAQ,KAAK,CAAC,UAAU,kBAAkB,OAAO,MAAM,MAAM,CAAC;AACnH,QAAM,SAAS,QAAQ,CAAC,eAAe,sBAAsB,YAAY,YAAY,CAAC;AACvF;AACA,SAAS,6BAA6B,OAAO;AAC5C,QAAM,aAAa;AACnB,QAAM,SAAS,QAAQ,4BAA4B;AACpD;AACA,SAAS,gBAAgB,OAAO,QAAQ;AACvC,QAAM,QAAQ,OAAO,MAAM,EAAE,EAAE,MAAM,iBAAiB;AACtD,QAAM,aAAa;AACnB,MAAI,CAAC,SAAS,MAAM,SAAS,EAAG,QAAO;AACvC,MAAI,IAAI,OAAO,MAAM,CAAC,EAAE,QAAQ,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,MAAM,GAAG;AACnE,UAAM,SAAS,QAAQ,CAAC,UAAU,gBAAgB,OAAO,MAAM,CAAC;AAChE,QAAI,MAAM,OAAO,SAAS,OAAO,WAAW,KAAK;AAChD,YAAM,aAAa,MAAM,GAAG,KAAK,MAAM;AACvC,aAAO;AAAA,IACR;AACA,WAAO;AAAA,EACR;AACA,QAAM,OAAO,MAAM,OAAO,KAAK,YAAY;AAC3C,QAAM,cAAc,OAAO,IAAI;AAC/B,MAAI,CAAC,OAAO,WAAW,GAAG,MAAM,YAAY,SAAS,MAAM,KAAK,KAAK,SAAS,MAAM,GAAI,QAAO;AAC/F,MAAI,YAAY,WAAW,MAAM,KAAK,KAAK,WAAW,MAAM,EAAG,QAAO;AACtE,MAAI,MAAM,OAAO,QAAQ,OAAO,MAAM,OAAO,IAAI,EAAE,SAAS,MAAM,EAAG,QAAO;AAC5E,SAAO,MAAM,SAAS,KAAK,CAAC,UAAU,gBAAgB,OAAO,MAAM,CAAC;AACrE;AACA,SAAS,KAAK,KAAK,MAAM;AACxB,QAAM,MAAM,CAAC;AACb,aAAW,OAAO,IAAK,KAAI,CAAC,KAAK,SAAS,GAAG,EAAG,KAAI,GAAG,IAAI,IAAI,GAAG;AAClE,SAAO;AACR;;;ACvrCA,IAAI,qBAAqB,MAAM,SAAS,WAAW,OAAO,SAAS;AAMnE,SAAS,sBAAsB,MAAM,YAAY;AAChD,QAAM,EAAE,UAAU,QAAQ,KAAK,IAAI;AACnC,QAAM,UAAU,KAAK,QAAQ,GAAG;AAChC,MAAI,UAAU,IAAI;AACjB,QAAI,WAAW,KAAK,SAAS,KAAK,MAAM,OAAO,CAAC,IAAI,KAAK,MAAM,OAAO,EAAE,SAAS;AACjF,QAAI,eAAe,KAAK,MAAM,QAAQ;AACtC,QAAI,aAAa,CAAC,MAAM,IAAK,gBAAe,MAAM;AAClD,WAAO,UAAU,cAAc,EAAE;AAAA,EAClC;AACA,SAAO,UAAU,UAAU,IAAI,IAAI,SAAS;AAC7C;AACA,SAAS,oBAAoB,MAAM,cAAc,iBAAiB,SAAS;AAC1E,MAAI,YAAY,CAAC;AACjB,MAAI,YAAY,CAAC;AACjB,MAAI,aAAa;AACjB,QAAM,kBAAkB,CAAC,EAAE,MAAM,MAAM;AACtC,UAAM,KAAK,sBAAsB,MAAM,QAAQ;AAC/C,UAAM,OAAO,gBAAgB;AAC7B,UAAM,YAAY,aAAa;AAC/B,QAAI,QAAQ;AACZ,QAAI,OAAO;AACV,sBAAgB,QAAQ;AACxB,mBAAa,QAAQ;AACrB,UAAI,cAAc,eAAe,MAAM;AACtC,qBAAa;AACb;AAAA,MACD;AACA,cAAQ,YAAY,MAAM,WAAW,UAAU,WAAW;AAAA,IAC3D,MAAO,SAAQ,EAAE;AACjB,cAAU,QAAQ,CAAC,aAAa;AAC/B,eAAS,gBAAgB,OAAO,MAAM;AAAA,QACrC;AAAA,QACA,MAAM,eAAe;AAAA,QACrB,WAAW,QAAQ,QAAQ,IAAI,oBAAoB,UAAU,oBAAoB,OAAO,oBAAoB;AAAA,MAC7G,CAAC;AAAA,IACF,CAAC;AAAA,EACF;AACA,WAAS,iBAAiB;AACzB,iBAAa,gBAAgB;AAAA,EAC9B;AACA,WAAS,OAAO,UAAU;AACzB,cAAU,KAAK,QAAQ;AACvB,UAAM,WAAW,MAAM;AACtB,YAAM,QAAQ,UAAU,QAAQ,QAAQ;AACxC,UAAI,QAAQ,GAAI,WAAU,OAAO,OAAO,CAAC;AAAA,IAC1C;AACA,cAAU,KAAK,QAAQ;AACvB,WAAO;AAAA,EACR;AACA,WAAS,uBAAuB;AAC/B,QAAI,SAAS,oBAAoB,UAAU;AAC1C,YAAM,EAAE,SAAS,UAAU,IAAI;AAC/B,UAAI,CAAC,UAAU,MAAO;AACtB,gBAAU,aAAa,OAAO,CAAC,GAAG,UAAU,OAAO,EAAE,QAAQ,sBAAsB,EAAE,CAAC,GAAG,EAAE;AAAA,IAC5F;AAAA,EACD;AACA,WAAS,UAAU;AAClB,eAAW,YAAY,UAAW,UAAS;AAC3C,gBAAY,CAAC;AACb,WAAO,oBAAoB,YAAY,eAAe;AACtD,WAAO,oBAAoB,YAAY,oBAAoB;AAC3D,aAAS,oBAAoB,oBAAoB,oBAAoB;AAAA,EACtE;AACA,SAAO,iBAAiB,YAAY,eAAe;AACnD,SAAO,iBAAiB,YAAY,oBAAoB;AACxD,WAAS,iBAAiB,oBAAoB,oBAAoB;AAClE,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAIA,SAAS,WAAW,MAAM,SAAS,SAAS,WAAW,OAAO,gBAAgB,OAAO;AACpF,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,OAAO,QAAQ;AAAA,IACzB,QAAQ,gBAAgB,sBAAsB,IAAI;AAAA,EACnD;AACD;AACA,SAAS,0BAA0B,MAAM;AACxC,QAAM,EAAE,SAAS,WAAW,UAAU,WAAW,IAAI;AACrD,QAAM,kBAAkB,EAAE,OAAO,sBAAsB,MAAM,UAAU,EAAE;AACzE,QAAM,eAAe,EAAE,OAAO,UAAU,MAAM;AAC9C,MAAI,CAAC,aAAa,MAAO,gBAAe,gBAAgB,OAAO;AAAA,IAC9D,MAAM;AAAA,IACN,SAAS,gBAAgB;AAAA,IACzB,SAAS;AAAA,IACT,UAAU,UAAU,SAAS;AAAA,IAC7B,UAAU;AAAA,IACV,QAAQ;AAAA,EACT,GAAG,IAAI;AACP,WAAS,eAAe,IAAI,OAAO,WAAW;AAU7C,UAAM,YAAY,KAAK,QAAQ,GAAG;AAClC,UAAM,MAAM,YAAY,MAAM,WAAW,QAAQ,SAAS,cAAc,MAAM,IAAI,OAAO,KAAK,MAAM,SAAS,KAAK,KAAK,mBAAmB,IAAI,OAAO;AACrJ,QAAI;AACH,gBAAU,YAAY,iBAAiB,WAAW,EAAE,OAAO,IAAI,GAAG;AAClE,mBAAa,QAAQ;AAAA,IACtB,SAAS,KAAK;AACb,UAAI,KAAuC,QAAO,iCAAiC,GAAG;AAAA,UACjF,SAAQ,MAAM,GAAG;AACtB,iBAAW,YAAY,YAAY,QAAQ,EAAE,GAAG;AAAA,IACjD;AAAA,EACD;AACA,WAAS,QAAQ,IAAI,MAAM;AAC1B,mBAAe,IAAI,OAAO,CAAC,GAAG,UAAU,OAAO,WAAW,aAAa,MAAM,MAAM,IAAI,aAAa,MAAM,SAAS,IAAI,GAAG,MAAM,EAAE,UAAU,aAAa,MAAM,SAAS,CAAC,GAAG,IAAI;AAChL,oBAAgB,QAAQ;AAAA,EACzB;AACA,WAAS,KAAK,IAAI,MAAM;AACvB,UAAM,eAAe,OAAO,CAAC,GAAG,aAAa,OAAO,UAAU,OAAO;AAAA,MACpE,SAAS;AAAA,MACT,QAAQ,sBAAsB;AAAA,IAC/B,CAAC;AACD,QAA6C,CAAC,UAAU,MAAO,QAAO,iVAAiV;AACvZ,mBAAe,aAAa,SAAS,cAAc,IAAI;AACvD,mBAAe,IAAI,OAAO,CAAC,GAAG,WAAW,gBAAgB,OAAO,IAAI,IAAI,GAAG,EAAE,UAAU,aAAa,WAAW,EAAE,GAAG,IAAI,GAAG,KAAK;AAChI,oBAAgB,QAAQ;AAAA,EACzB;AACA,SAAO;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACD;AACD;AAMA,SAAS,iBAAiB,MAAM;AAC/B,SAAO,cAAc,IAAI;AACzB,QAAM,oBAAoB,0BAA0B,IAAI;AACxD,QAAM,mBAAmB,oBAAoB,MAAM,kBAAkB,OAAO,kBAAkB,UAAU,kBAAkB,OAAO;AACjI,WAAS,GAAG,OAAO,mBAAmB,MAAM;AAC3C,QAAI,CAAC,iBAAkB,kBAAiB,eAAe;AACvD,YAAQ,GAAG,KAAK;AAAA,EACjB;AACA,QAAM,gBAAgB,OAAO;AAAA,IAC5B,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,YAAY,WAAW,KAAK,MAAM,IAAI;AAAA,EACvC,GAAG,mBAAmB,gBAAgB;AACtC,SAAO,eAAe,eAAe,YAAY;AAAA,IAChD,YAAY;AAAA,IACZ,KAAK,MAAM,kBAAkB,SAAS;AAAA,EACvC,CAAC;AACD,SAAO,eAAe,eAAe,SAAS;AAAA,IAC7C,YAAY;AAAA,IACZ,KAAK,MAAM,kBAAkB,MAAM;AAAA,EACpC,CAAC;AACD,SAAO;AACR;AAWA,SAAS,oBAAoB,OAAO,IAAI;AACvC,MAAI,YAAY,CAAC;AACjB,MAAI,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACxB,MAAI,WAAW;AACf,SAAO,cAAc,IAAI;AACzB,WAAS,YAAY,YAAY,QAAQ,CAAC,GAAG;AAC5C;AACA,QAAI,aAAa,MAAM,OAAQ,OAAM,OAAO,QAAQ;AACpD,UAAM,KAAK,CAAC,YAAY,KAAK,CAAC;AAAA,EAC/B;AACA,WAAS,iBAAiB,IAAI,MAAM,EAAE,WAAW,MAAM,GAAG;AACzD,UAAM,OAAO;AAAA,MACZ;AAAA,MACA;AAAA,MACA,MAAM,eAAe;AAAA,IACtB;AACA,eAAW,YAAY,UAAW,UAAS,IAAI,MAAM,IAAI;AAAA,EAC1D;AACA,QAAM,gBAAgB;AAAA,IACrB,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR;AAAA,IACA,YAAY,WAAW,KAAK,MAAM,IAAI;AAAA,IACtC,QAAQ,IAAI,OAAO;AAClB,YAAM,OAAO,YAAY,CAAC;AAC1B,kBAAY,IAAI,KAAK;AAAA,IACtB;AAAA,IACA,KAAK,IAAI,OAAO;AACf,kBAAY,IAAI,KAAK;AAAA,IACtB;AAAA,IACA,OAAO,UAAU;AAChB,gBAAU,KAAK,QAAQ;AACvB,aAAO,MAAM;AACZ,cAAM,QAAQ,UAAU,QAAQ,QAAQ;AACxC,YAAI,QAAQ,GAAI,WAAU,OAAO,OAAO,CAAC;AAAA,MAC1C;AAAA,IACD;AAAA,IACA,UAAU;AACT,kBAAY,CAAC;AACb,cAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACpB,iBAAW;AAAA,IACZ;AAAA,IACA,GAAG,OAAO,gBAAgB,MAAM;AAC/B,YAAM,OAAO,KAAK;AAClB,YAAM,YAAY,QAAQ,IAAI,oBAAoB,OAAO,oBAAoB;AAC7E,iBAAW,KAAK,IAAI,GAAG,KAAK,IAAI,WAAW,OAAO,MAAM,SAAS,CAAC,CAAC;AACnE,UAAI,cAAe,kBAAiB,KAAK,UAAU,MAAM;AAAA,QACxD;AAAA,QACA;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AACA,SAAO,eAAe,eAAe,YAAY;AAAA,IAChD,YAAY;AAAA,IACZ,KAAK,MAAM,MAAM,QAAQ,EAAE,CAAC;AAAA,EAC7B,CAAC;AACD,SAAO,eAAe,eAAe,SAAS;AAAA,IAC7C,YAAY;AAAA,IACZ,KAAK,MAAM,MAAM,QAAQ,EAAE,CAAC;AAAA,EAC7B,CAAC;AACD,SAAO;AACR;AA4BA,SAAS,qBAAqB,MAAM;AACnC,SAAO,SAAS,OAAO,QAAQ,SAAS,WAAW,SAAS,SAAS;AACrE,MAAI,CAAC,KAAK,SAAS,GAAG,EAAG,SAAQ;AACjC,MAA6C,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,SAAS,GAAG,EAAG,QAAO;AAAA,GAAsC,IAAI,gBAAgB,KAAK,QAAQ,QAAQ,GAAG,CAAC,IAAI;AACxL,SAAO,iBAAiB,IAAI;AAC7B;AAIA,IAAI,YAA4B,SAAS,aAAa;AACrD,cAAY,YAAY,QAAQ,IAAI,CAAC,IAAI;AACzC,cAAY,YAAY,OAAO,IAAI,CAAC,IAAI;AACxC,cAAY,YAAY,OAAO,IAAI,CAAC,IAAI;AACxC,SAAO;AACR,EAAE,CAAC,CAAC;AACJ,IAAI,iBAAiC,SAAS,kBAAkB;AAC/D,mBAAiB,iBAAiB,QAAQ,IAAI,CAAC,IAAI;AACnD,mBAAiB,iBAAiB,OAAO,IAAI,CAAC,IAAI;AAClD,mBAAiB,iBAAiB,aAAa,IAAI,CAAC,IAAI;AACxD,mBAAiB,iBAAiB,gBAAgB,IAAI,CAAC,IAAI;AAC3D,mBAAiB,iBAAiB,YAAY,IAAI,CAAC,IAAI;AACvD,SAAO;AACR,EAAE,kBAAkB,CAAC,CAAC;AACtB,IAAM,aAAa;AAAA,EAClB,MAAM,UAAU;AAAA,EAChB,OAAO;AACR;AACA,IAAM,iBAAiB;AACvB,SAAS,aAAa,MAAM;AAC3B,MAAI,CAAC,KAAM,QAAO,CAAC,CAAC,CAAC;AACrB,MAAI,SAAS,IAAK,QAAO,CAAC,CAAC,UAAU,CAAC;AACtC,MAAI,CAAC,KAAK,WAAW,GAAG,EAAG,OAAM,IAAI,MAAM,OAAwC,yCAAyC,IAAI,iBAAiB,IAAI,OAAO,iBAAiB,IAAI,GAAG;AACpL,WAAS,MAAM,SAAS;AACvB,UAAM,IAAI,MAAM,QAAQ,KAAK,MAAM,MAAM,MAAM,OAAO,EAAE;AAAA,EACzD;AACA,MAAI,QAAQ,eAAe;AAC3B,MAAI,gBAAgB;AACpB,QAAM,SAAS,CAAC;AAChB,MAAI;AACJ,WAAS,kBAAkB;AAC1B,QAAI,QAAS,QAAO,KAAK,OAAO;AAChC,cAAU,CAAC;AAAA,EACZ;AACA,MAAI,IAAI;AACR,MAAI;AACJ,MAAI,SAAS;AACb,MAAI,WAAW;AACf,WAAS,gBAAgB;AACxB,QAAI,CAAC,OAAQ;AACb,QAAI,UAAU,eAAe,OAAQ,SAAQ,KAAK;AAAA,MACjD,MAAM,UAAU;AAAA,MAChB,OAAO;AAAA,IACR,CAAC;AAAA,aACQ,UAAU,eAAe,SAAS,UAAU,eAAe,eAAe,UAAU,eAAe,gBAAgB;AAC3H,UAAI,QAAQ,SAAS,MAAM,SAAS,OAAO,SAAS,KAAM,OAAM,uBAAuB,MAAM,8CAA8C;AAC3I,cAAQ,KAAK;AAAA,QACZ,MAAM,UAAU;AAAA,QAChB,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAY,SAAS,OAAO,SAAS;AAAA,QACrC,UAAU,SAAS,OAAO,SAAS;AAAA,MACpC,CAAC;AAAA,IACF,MAAO,OAAM,iCAAiC;AAC9C,aAAS;AAAA,EACV;AACA,WAAS,kBAAkB;AAC1B,cAAU;AAAA,EACX;AACA,SAAO,IAAI,KAAK,QAAQ;AACvB,WAAO,KAAK,GAAG;AACf,QAAI,SAAS,QAAQ,UAAU,eAAe,aAAa;AAC1D,sBAAgB;AAChB,cAAQ,eAAe;AACvB;AAAA,IACD;AACA,YAAQ,OAAO;AAAA,MACd,KAAK,eAAe;AACnB,YAAI,SAAS,KAAK;AACjB,cAAI,OAAQ,eAAc;AAC1B,0BAAgB;AAAA,QACjB,WAAW,SAAS,KAAK;AACxB,wBAAc;AACd,kBAAQ,eAAe;AAAA,QACxB,MAAO,iBAAgB;AACvB;AAAA,MACD,KAAK,eAAe;AACnB,wBAAgB;AAChB,gBAAQ;AACR;AAAA,MACD,KAAK,eAAe;AACnB,YAAI,SAAS,IAAK,SAAQ,eAAe;AAAA,iBAChC,eAAe,KAAK,IAAI,EAAG,iBAAgB;AAAA,aAC/C;AACJ,wBAAc;AACd,kBAAQ,eAAe;AACvB,cAAI,SAAS,OAAO,SAAS,OAAO,SAAS,IAAK;AAAA,QACnD;AACA;AAAA,MACD,KAAK,eAAe;AACnB,YAAI,SAAS,IAAK,KAAI,SAAS,SAAS,SAAS,CAAC,KAAK,KAAM,YAAW,SAAS,MAAM,GAAG,EAAE,IAAI;AAAA,YAC3F,SAAQ,eAAe;AAAA,YACvB,aAAY;AACjB;AAAA,MACD,KAAK,eAAe;AACnB,sBAAc;AACd,gBAAQ,eAAe;AACvB,YAAI,SAAS,OAAO,SAAS,OAAO,SAAS,IAAK;AAClD,mBAAW;AACX;AAAA,MACD;AACC,cAAM,eAAe;AACrB;AAAA,IACF;AAAA,EACD;AACA,MAAI,UAAU,eAAe,YAAa,OAAM,uCAAuC,MAAM,GAAG;AAChG,gBAAc;AACd,kBAAgB;AAChB,SAAO;AACR;AAIA,IAAM,qBAAqB;AAC3B,IAAM,2BAA2B;AAAA,EAChC,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AACN;AACA,IAAI,YAA4B,SAAS,aAAa;AACrD,cAAY,YAAY,aAAa,IAAI,EAAE,IAAI;AAC/C,cAAY,YAAY,MAAM,IAAI,EAAE,IAAI;AACxC,cAAY,YAAY,SAAS,IAAI,EAAE,IAAI;AAC3C,cAAY,YAAY,YAAY,IAAI,EAAE,IAAI;AAC9C,cAAY,YAAY,QAAQ,IAAI,EAAE,IAAI;AAC1C,cAAY,YAAY,SAAS,IAAI,EAAE,IAAI;AAC3C,cAAY,YAAY,mBAAmB,IAAI,EAAE,IAAI;AACrD,cAAY,YAAY,eAAe,IAAI,GAAG,IAAI;AAClD,cAAY,YAAY,iBAAiB,IAAI,GAAG,IAAI;AACpD,cAAY,YAAY,eAAe,IAAI,EAAE,IAAI;AACjD,cAAY,YAAY,aAAa,IAAI,kBAAiB,IAAI;AAC9D,cAAY,YAAY,oBAAoB,IAAI,IAAG,IAAI;AACvD,SAAO;AACR,EAAE,aAAa,CAAC,CAAC;AACjB,IAAM,iBAAiB;AAQvB,SAAS,eAAe,UAAU,cAAc;AAC/C,QAAM,UAAU,OAAO,CAAC,GAAG,0BAA0B,YAAY;AACjE,QAAM,QAAQ,CAAC;AACf,MAAI,UAAU,QAAQ,QAAQ,MAAM;AACpC,QAAM,OAAO,CAAC;AACd,aAAW,WAAW,UAAU;AAC/B,UAAM,gBAAgB,QAAQ,SAAS,CAAC,IAAI,CAAC,UAAU,IAAI;AAC3D,QAAI,QAAQ,UAAU,CAAC,QAAQ,OAAQ,YAAW;AAClD,aAAS,aAAa,GAAG,aAAa,QAAQ,QAAQ,cAAc;AACnE,YAAM,QAAQ,QAAQ,UAAU;AAChC,UAAI,kBAAkB,UAAU,WAAW,QAAQ,YAAY,UAAU,qBAAqB;AAC9F,UAAI,MAAM,SAAS,UAAU,QAAQ;AACpC,YAAI,CAAC,WAAY,YAAW;AAC5B,mBAAW,MAAM,MAAM,QAAQ,gBAAgB,MAAM;AACrD,2BAAmB,UAAU;AAAA,MAC9B,WAAW,MAAM,SAAS,UAAU,OAAO;AAC1C,cAAM,EAAE,OAAO,YAAY,UAAU,OAAO,IAAI;AAChD,aAAK,KAAK;AAAA,UACT,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACD,CAAC;AACD,cAAM,OAAO,SAAS,SAAS;AAC/B,YAAI,SAAS,oBAAoB;AAChC,6BAAmB,UAAU;AAC7B,cAAI;AACH,eAAG,IAAI;AAAA,UACR,SAAS,KAAK;AACb,kBAAM,IAAI,MAAM,oCAAoC,KAAK,MAAM,IAAI,QAAQ,IAAI,OAAO;AAAA,UACvF;AAAA,QACD;AACA,YAAI,aAAa,aAAa,OAAO,IAAI,WAAW,IAAI,SAAS,IAAI,IAAI;AACzE,YAAI,CAAC,WAAY,cAAa,YAAY,QAAQ,SAAS,IAAI,OAAO,UAAU,MAAM,MAAM;AAC5F,YAAI,SAAU,eAAc;AAC5B,mBAAW;AACX,2BAAmB,UAAU;AAC7B,YAAI,SAAU,oBAAmB,UAAU;AAC3C,YAAI,WAAY,oBAAmB,UAAU;AAC7C,YAAI,SAAS,KAAM,oBAAmB,UAAU;AAAA,MACjD;AACA,oBAAc,KAAK,eAAe;AAAA,IACnC;AACA,UAAM,KAAK,aAAa;AAAA,EACzB;AACA,MAAI,QAAQ,UAAU,QAAQ,KAAK;AAClC,UAAM,IAAI,MAAM,SAAS;AACzB,UAAM,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,KAAK,UAAU;AAAA,EAC5C;AACA,MAAI,CAAC,QAAQ,OAAQ,YAAW;AAChC,MAAI,QAAQ,IAAK,YAAW;AAAA,WACnB,QAAQ,UAAU,CAAC,QAAQ,SAAS,GAAG,EAAG,YAAW;AAC9D,QAAM,KAAK,IAAI,OAAO,SAAS,QAAQ,YAAY,KAAK,GAAG;AAC3D,WAAS,MAAM,MAAM;AACpB,UAAM,QAAQ,KAAK,MAAM,EAAE;AAC3B,UAAM,SAAS,CAAC;AAChB,QAAI,CAAC,MAAO,QAAO;AACnB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,YAAM,QAAQ,MAAM,CAAC,KAAK;AAC1B,YAAM,MAAM,KAAK,IAAI,CAAC;AACtB,aAAO,IAAI,IAAI,IAAI,SAAS,IAAI,aAAa,MAAM,MAAM,GAAG,IAAI;AAAA,IACjE;AACA,WAAO;AAAA,EACR;AACA,WAAS,UAAU,QAAQ;AAC1B,QAAI,OAAO;AACX,QAAI,uBAAuB;AAC3B,eAAW,WAAW,UAAU;AAC/B,UAAI,CAAC,wBAAwB,CAAC,KAAK,SAAS,GAAG,EAAG,SAAQ;AAC1D,6BAAuB;AACvB,iBAAW,SAAS,QAAS,KAAI,MAAM,SAAS,UAAU,OAAQ,SAAQ,MAAM;AAAA,eACvE,MAAM,SAAS,UAAU,OAAO;AACxC,cAAM,EAAE,OAAO,YAAY,SAAS,IAAI;AACxC,cAAM,QAAQ,SAAS,SAAS,OAAO,KAAK,IAAI;AAChD,YAAI,QAAQ,KAAK,KAAK,CAAC,WAAY,OAAM,IAAI,MAAM,mBAAmB,KAAK,2DAA2D;AACtI,cAAM,OAAO,QAAQ,KAAK,IAAI,MAAM,KAAK,GAAG,IAAI;AAChD,YAAI,CAAC,KAAM,KAAI,UAAU;AACxB,cAAI,QAAQ,SAAS,EAAG,KAAI,KAAK,SAAS,GAAG,EAAG,QAAO,KAAK,MAAM,GAAG,EAAE;AAAA,cAClE,wBAAuB;AAAA,QAC7B,MAAO,OAAM,IAAI,MAAM,2BAA2B,KAAK,GAAG;AAC1D,gBAAQ;AAAA,MACT;AAAA,IACD;AACA,WAAO,QAAQ;AAAA,EAChB;AACA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAUA,SAAS,kBAAkB,GAAG,GAAG;AAChC,MAAI,IAAI;AACR,SAAO,IAAI,EAAE,UAAU,IAAI,EAAE,QAAQ;AACpC,UAAM,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;AACvB,QAAI,KAAM,QAAO;AACjB;AAAA,EACD;AACA,MAAI,EAAE,SAAS,EAAE,OAAQ,QAAO,EAAE,WAAW,KAAK,EAAE,CAAC,MAAM,UAAU,SAAS,UAAU,UAAU,KAAK;AAAA,WAC9F,EAAE,SAAS,EAAE,OAAQ,QAAO,EAAE,WAAW,KAAK,EAAE,CAAC,MAAM,UAAU,SAAS,UAAU,UAAU,IAAI;AAC3G,SAAO;AACR;AAQA,SAAS,uBAAuB,GAAG,GAAG;AACrC,MAAI,IAAI;AACR,QAAM,SAAS,EAAE;AACjB,QAAM,SAAS,EAAE;AACjB,SAAO,IAAI,OAAO,UAAU,IAAI,OAAO,QAAQ;AAC9C,UAAM,OAAO,kBAAkB,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACnD,QAAI,KAAM,QAAO;AACjB;AAAA,EACD;AACA,MAAI,KAAK,IAAI,OAAO,SAAS,OAAO,MAAM,MAAM,GAAG;AAClD,QAAI,oBAAoB,MAAM,EAAG,QAAO;AACxC,QAAI,oBAAoB,MAAM,EAAG,QAAO;AAAA,EACzC;AACA,SAAO,OAAO,SAAS,OAAO;AAC/B;AAOA,SAAS,oBAAoB,OAAO;AACnC,QAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,SAAO,MAAM,SAAS,KAAK,KAAK,KAAK,SAAS,CAAC,IAAI;AACpD;AACA,IAAM,+BAA+B;AAAA,EACpC,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,WAAW;AACZ;AAIA,SAAS,yBAAyB,QAAQ,QAAQ,SAAS;AAC1D,QAAM,SAAS,eAAe,aAAa,OAAO,IAAI,GAAG,OAAO;AAChE,MAAI,MAAuC;AAC1C,UAAM,eAA+B,oBAAI,IAAI;AAC7C,eAAW,OAAO,OAAO,MAAM;AAC9B,UAAI,aAAa,IAAI,IAAI,IAAI,EAAG,QAAO,sCAAsC,IAAI,IAAI,eAAe,OAAO,IAAI,4DAA4D;AAC3K,mBAAa,IAAI,IAAI,IAAI;AAAA,IAC1B;AAAA,EACD;AACA,QAAM,UAAU,OAAO,QAAQ;AAAA,IAC9B;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,IACX,OAAO,CAAC;AAAA,EACT,CAAC;AACD,MAAI,QAAQ;AACX,QAAI,CAAC,QAAQ,OAAO,YAAY,CAAC,OAAO,OAAO,QAAS,QAAO,SAAS,KAAK,OAAO;AAAA,EACrF;AACA,SAAO;AACR;AAWA,SAAS,oBAAoB,QAAQ,eAAe;AACnD,QAAM,WAAW,CAAC;AAClB,QAAM,aAA6B,oBAAI,IAAI;AAC3C,kBAAgB,aAAa,8BAA8B,aAAa;AACxE,WAAS,iBAAiB,MAAM;AAC/B,WAAO,WAAW,IAAI,IAAI;AAAA,EAC3B;AACA,WAAS,SAAS,QAAQ,QAAQ,gBAAgB;AACjD,UAAM,YAAY,CAAC;AACnB,UAAM,uBAAuB,qBAAqB,MAAM;AACxD,QAAI,KAAuC,oCAAmC,sBAAsB,MAAM;AAC1G,yBAAqB,UAAU,kBAAkB,eAAe;AAChE,UAAM,UAAU,aAAa,eAAe,MAAM;AAClD,UAAM,oBAAoB,CAAC,oBAAoB;AAC/C,QAAI,WAAW,QAAQ;AACtB,YAAM,UAAU,OAAO,OAAO,UAAU,WAAW,CAAC,OAAO,KAAK,IAAI,OAAO;AAC3E,iBAAW,SAAS,QAAS,mBAAkB,KAAK,qBAAqB,OAAO,CAAC,GAAG,sBAAsB;AAAA,QACzG,YAAY,iBAAiB,eAAe,OAAO,aAAa,qBAAqB;AAAA,QACrF,MAAM;AAAA,QACN,SAAS,iBAAiB,eAAe,SAAS;AAAA,MACnD,CAAC,CAAC,CAAC;AAAA,IACJ;AACA,QAAI;AACJ,QAAI;AACJ,eAAW,oBAAoB,mBAAmB;AACjD,YAAM,EAAE,KAAK,IAAI;AACjB,UAAI,UAAU,KAAK,CAAC,MAAM,KAAK;AAC9B,cAAM,aAAa,OAAO,OAAO;AACjC,cAAM,kBAAkB,WAAW,WAAW,SAAS,CAAC,MAAM,MAAM,KAAK;AACzE,yBAAiB,OAAO,OAAO,OAAO,QAAQ,QAAQ,kBAAkB;AAAA,MACzE;AACA,UAA6C,iBAAiB,SAAS,IAAK,OAAM,IAAI,MAAM,yKAA2K;AACvQ,gBAAU,yBAAyB,kBAAkB,QAAQ,OAAO;AACpE,UAA6C,UAAU,KAAK,CAAC,MAAM,IAAK,kCAAiC,SAAS,MAAM;AACxH,UAAI,gBAAgB;AACnB,uBAAe,MAAM,KAAK,OAAO;AACjC,YAAI,KAAuC,iBAAgB,gBAAgB,OAAO;AAAA,MACnF,OAAO;AACN,0BAAkB,mBAAmB;AACrC,YAAI,oBAAoB,QAAS,iBAAgB,MAAM,KAAK,OAAO;AACnE,YAAI,aAAa,OAAO,QAAQ,CAAC,cAAc,OAAO,GAAG;AACxD,cAAI,KAAuC,yBAAwB,QAAQ,MAAM;AACjF,sBAAY,OAAO,IAAI;AAAA,QACxB;AAAA,MACD;AACA,UAAI,YAAY,OAAO,EAAG,eAAc,OAAO;AAC/C,UAAI,qBAAqB,UAAU;AAClC,cAAM,WAAW,qBAAqB;AACtC,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAK,UAAS,SAAS,CAAC,GAAG,SAAS,kBAAkB,eAAe,SAAS,CAAC,CAAC;AAAA,MACtH;AACA,uBAAiB,kBAAkB;AAAA,IACpC;AACA,WAAO,kBAAkB,MAAM;AAC9B,kBAAY,eAAe;AAAA,IAC5B,IAAI;AAAA,EACL;AACA,WAAS,YAAY,YAAY;AAChC,QAAI,YAAY,UAAU,GAAG;AAC5B,YAAM,UAAU,WAAW,IAAI,UAAU;AACzC,UAAI,SAAS;AACZ,mBAAW,OAAO,UAAU;AAC5B,iBAAS,OAAO,SAAS,QAAQ,OAAO,GAAG,CAAC;AAC5C,gBAAQ,SAAS,QAAQ,WAAW;AACpC,gBAAQ,MAAM,QAAQ,WAAW;AAAA,MAClC;AAAA,IACD,OAAO;AACN,YAAM,QAAQ,SAAS,QAAQ,UAAU;AACzC,UAAI,QAAQ,IAAI;AACf,iBAAS,OAAO,OAAO,CAAC;AACxB,YAAI,WAAW,OAAO,KAAM,YAAW,OAAO,WAAW,OAAO,IAAI;AACpE,mBAAW,SAAS,QAAQ,WAAW;AACvC,mBAAW,MAAM,QAAQ,WAAW;AAAA,MACrC;AAAA,IACD;AAAA,EACD;AACA,WAAS,YAAY;AACpB,WAAO;AAAA,EACR;AACA,WAAS,cAAc,SAAS;AAC/B,UAAM,QAAQ,mBAAmB,SAAS,QAAQ;AAClD,aAAS,OAAO,OAAO,GAAG,OAAO;AACjC,QAAI,QAAQ,OAAO,QAAQ,CAAC,cAAc,OAAO,EAAG,YAAW,IAAI,QAAQ,OAAO,MAAM,OAAO;AAAA,EAChG;AACA,WAAS,QAAQ,YAAY,iBAAiB;AAC7C,QAAI;AACJ,QAAI,SAAS,CAAC;AACd,QAAI;AACJ,QAAI;AACJ,QAAI,UAAU,cAAc,WAAW,MAAM;AAC5C,gBAAU,WAAW,IAAI,WAAW,IAAI;AACxC,UAAI,CAAC,QAAS,OAAM,kBAAkB,WAAW,mBAAmB,EAAE,UAAU,WAAW,CAAC;AAC5F,UAAI,MAAuC;AAC1C,cAAM,gBAAgB,OAAO,KAAK,WAAW,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,EAAE,SAAS,SAAS,CAAC;AAChI,YAAI,cAAc,OAAQ,QAAO,+BAA+B,cAAc,KAAK,MAAQ,CAAC,gIAAgI;AAAA,MAC7N;AACA,aAAO,QAAQ,OAAO;AACtB,eAAS,OAAO,WAAW,gBAAgB,QAAQ,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,QAAQ,SAAS,QAAQ,OAAO,KAAK,OAAO,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,WAAW,UAAU,WAAW,WAAW,QAAQ,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC/Q,aAAO,QAAQ,UAAU,MAAM;AAAA,IAChC,WAAW,WAAW,QAAQ,MAAM;AACnC,aAAO,WAAW;AAClB,UAA6C,CAAC,KAAK,WAAW,GAAG,EAAG,QAAO,2DAA2D,IAAI,oDAAoD,IAAI,wHAAwH;AAC1T,gBAAU,SAAS,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;AAC9C,UAAI,SAAS;AACZ,iBAAS,QAAQ,MAAM,IAAI;AAC3B,eAAO,QAAQ,OAAO;AAAA,MACvB;AAAA,IACD,OAAO;AACN,gBAAU,gBAAgB,OAAO,WAAW,IAAI,gBAAgB,IAAI,IAAI,SAAS,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,gBAAgB,IAAI,CAAC;AAC5H,UAAI,CAAC,QAAS,OAAM,kBAAkB,WAAW,mBAAmB;AAAA,QACnE,UAAU;AAAA,QACV;AAAA,MACD,CAAC;AACD,aAAO,QAAQ,OAAO;AACtB,eAAS,OAAO,CAAC,GAAG,gBAAgB,QAAQ,WAAW,MAAM;AAC7D,aAAO,QAAQ,UAAU,MAAM;AAAA,IAChC;AACA,UAAM,UAAU,CAAC;AACjB,QAAI,gBAAgB;AACpB,WAAO,eAAe;AACrB,cAAQ,QAAQ,cAAc,MAAM;AACpC,sBAAgB,cAAc;AAAA,IAC/B;AACA,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,gBAAgB,OAAO;AAAA,IAC9B;AAAA,EACD;AACA,SAAO,QAAQ,CAAC,UAAU,SAAS,KAAK,CAAC;AACzC,WAAS,cAAc;AACtB,aAAS,SAAS;AAClB,eAAW,MAAM;AAAA,EAClB;AACA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAOA,SAAS,WAAW,QAAQ,MAAM;AACjC,QAAM,YAAY,CAAC;AACnB,aAAW,OAAO,KAAM,KAAI,OAAO,OAAQ,WAAU,GAAG,IAAI,OAAO,GAAG;AACtE,SAAO;AACR;AAOA,SAAS,qBAAqB,QAAQ;AACrC,QAAM,aAAa;AAAA,IAClB,MAAM,OAAO;AAAA,IACb,UAAU,OAAO;AAAA,IACjB,MAAM,OAAO;AAAA,IACb,MAAM,OAAO,QAAQ,CAAC;AAAA,IACtB,SAAS,OAAO;AAAA,IAChB,aAAa,OAAO;AAAA,IACpB,OAAO,qBAAqB,MAAM;AAAA,IAClC,UAAU,OAAO,YAAY,CAAC;AAAA,IAC9B,WAAW,CAAC;AAAA,IACZ,aAA6B,oBAAI,IAAI;AAAA,IACrC,cAA8B,oBAAI,IAAI;AAAA,IACtC,gBAAgB,CAAC;AAAA,IACjB,YAAY,gBAAgB,SAAS,OAAO,cAAc,OAAO,OAAO,aAAa,EAAE,SAAS,OAAO,UAAU;AAAA,EAClH;AACA,SAAO,eAAe,YAAY,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AACvD,SAAO;AACR;AAMA,SAAS,qBAAqB,QAAQ;AACrC,QAAM,cAAc,CAAC;AACrB,QAAM,QAAQ,OAAO,SAAS;AAC9B,MAAI,eAAe,OAAQ,aAAY,UAAU;AAAA,MAC5C,YAAW,QAAQ,OAAO,WAAY,aAAY,IAAI,IAAI,OAAO,UAAU,WAAW,MAAM,IAAI,IAAI;AACzG,SAAO;AACR;AAKA,SAAS,cAAc,QAAQ;AAC9B,SAAO,QAAQ;AACd,QAAI,OAAO,OAAO,QAAS,QAAO;AAClC,aAAS,OAAO;AAAA,EACjB;AACA,SAAO;AACR;AAMA,SAAS,gBAAgB,SAAS;AACjC,SAAO,QAAQ,OAAO,CAAC,MAAM,WAAW,OAAO,MAAM,OAAO,IAAI,GAAG,CAAC,CAAC;AACtE;AACA,SAAS,YAAY,GAAG,GAAG;AAC1B,SAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE;AAC7E;AAOA,SAAS,gBAAgB,GAAG,GAAG;AAC9B,aAAW,OAAO,EAAE,KAAM,KAAI,CAAC,IAAI,YAAY,CAAC,EAAE,KAAK,KAAK,YAAY,KAAK,MAAM,GAAG,CAAC,EAAG,QAAO,OAAO,UAAU,EAAE,OAAO,IAAI,+BAA+B,EAAE,OAAO,IAAI,2CAA2C,IAAI,IAAI,GAAG;AACjO,aAAW,OAAO,EAAE,KAAM,KAAI,CAAC,IAAI,YAAY,CAAC,EAAE,KAAK,KAAK,YAAY,KAAK,MAAM,GAAG,CAAC,EAAG,QAAO,OAAO,UAAU,EAAE,OAAO,IAAI,+BAA+B,EAAE,OAAO,IAAI,2CAA2C,IAAI,IAAI,GAAG;AAClO;AAOA,SAAS,mCAAmC,sBAAsB,QAAQ;AACzE,MAAI,UAAU,OAAO,OAAO,QAAQ,CAAC,qBAAqB,QAAQ,CAAC,qBAAqB,KAAM,QAAO,oBAAoB,OAAO,OAAO,OAAO,IAAI,CAAC,4OAA4O;AAChY;AACA,SAAS,wBAAwB,QAAQ,QAAQ;AAChD,WAAS,WAAW,QAAQ,UAAU,WAAW,SAAS,OAAQ,KAAI,SAAS,OAAO,SAAS,OAAO,KAAM,OAAM,IAAI,MAAM,kBAAkB,OAAO,OAAO,IAAI,CAAC,yBAAyB,WAAW,WAAW,UAAU,YAAY,wHAAwH;AAC/V;AACA,SAAS,iCAAiC,QAAQ,QAAQ;AACzD,aAAW,OAAO,OAAO,KAAM,KAAI,CAAC,OAAO,KAAK,KAAK,YAAY,KAAK,MAAM,GAAG,CAAC,EAAG,QAAO,OAAO,kBAAkB,OAAO,OAAO,IAAI,2CAA2C,IAAI,IAAI,oBAAoB,OAAO,OAAO,IAAI,IAAI;AACnO;AAUA,SAAS,mBAAmB,SAAS,UAAU;AAC9C,MAAI,QAAQ;AACZ,MAAI,QAAQ,SAAS;AACrB,SAAO,UAAU,OAAO;AACvB,UAAM,MAAM,QAAQ,SAAS;AAC7B,QAAI,uBAAuB,SAAS,SAAS,GAAG,CAAC,IAAI,EAAG,SAAQ;AAAA,QAC3D,SAAQ,MAAM;AAAA,EACpB;AACA,QAAM,oBAAoB,qBAAqB,OAAO;AACtD,MAAI,mBAAmB;AACtB,YAAQ,SAAS,YAAY,mBAAmB,QAAQ,CAAC;AACzD,QAA6C,QAAQ,EAAG,QAAO,2BAA2B,kBAAkB,OAAO,IAAI,iBAAiB,QAAQ,OAAO,IAAI,GAAG;AAAA,EAC/J;AACA,SAAO;AACR;AACA,SAAS,qBAAqB,SAAS;AACtC,MAAI,WAAW;AACf,SAAO,WAAW,SAAS,OAAQ,KAAI,YAAY,QAAQ,KAAK,uBAAuB,SAAS,QAAQ,MAAM,EAAG,QAAO;AACzH;AAQA,SAAS,YAAY,EAAE,OAAO,GAAG;AAChC,SAAO,CAAC,EAAE,OAAO,QAAQ,OAAO,cAAc,OAAO,KAAK,OAAO,UAAU,EAAE,UAAU,OAAO;AAC/F;AASA,SAAS,QAAQ,OAAO;AACvB,QAAM,SAAS,OAAO,SAAS;AAC/B,QAAM,eAAe,OAAO,gBAAgB;AAC5C,MAAI,cAAc;AAClB,MAAI,aAAa;AACjB,QAAM,QAAQ,SAAS,MAAM;AAC5B,UAAM,KAAK,MAAM,MAAM,EAAE;AACzB,QAA8C,CAAC,eAAe,OAAO,YAAa;AACjF,UAAI,CAAC,gBAAgB,EAAE,EAAG,KAAI,YAAa,QAAO;AAAA,QAAmD,IAAI;AAAA,iBAAoB,YAAY;AAAA,WAAc,KAAK;AAAA,UACvJ,QAAO;AAAA,QAAmD,IAAI;AAAA,WAAc,KAAK;AACtF,mBAAa;AACb,oBAAc;AAAA,IACf;AACA,WAAO,OAAO,QAAQ,EAAE;AAAA,EACzB,CAAC;AACD,QAAM,oBAAoB,SAAS,MAAM;AACxC,UAAM,EAAE,QAAQ,IAAI,MAAM;AAC1B,UAAM,EAAE,OAAO,IAAI;AACnB,UAAM,eAAe,QAAQ,SAAS,CAAC;AACvC,UAAM,iBAAiB,aAAa;AACpC,QAAI,CAAC,gBAAgB,CAAC,eAAe,OAAQ,QAAO;AACpD,UAAM,QAAQ,eAAe,UAAU,kBAAkB,KAAK,MAAM,YAAY,CAAC;AACjF,QAAI,QAAQ,GAAI,QAAO;AACvB,UAAM,mBAAmB,gBAAgB,QAAQ,SAAS,CAAC,CAAC;AAC5D,WAAO,SAAS,KAAK,gBAAgB,YAAY,MAAM,oBAAoB,eAAe,eAAe,SAAS,CAAC,EAAE,SAAS,mBAAmB,eAAe,UAAU,kBAAkB,KAAK,MAAM,QAAQ,SAAS,CAAC,CAAC,CAAC,IAAI;AAAA,EAChO,CAAC;AACD,QAAM,WAAW,SAAS,MAAM,kBAAkB,QAAQ,MAAM,eAAe,aAAa,QAAQ,MAAM,MAAM,MAAM,CAAC;AACvH,QAAM,gBAAgB,SAAS,MAAM,kBAAkB,QAAQ,MAAM,kBAAkB,UAAU,aAAa,QAAQ,SAAS,KAAK,0BAA0B,aAAa,QAAQ,MAAM,MAAM,MAAM,CAAC;AACtM,WAAS,SAAS,IAAI,CAAC,GAAG;AACzB,QAAI,WAAW,CAAC,GAAG;AAClB,YAAM,IAAI,OAAO,MAAM,MAAM,OAAO,IAAI,YAAY,MAAM,EAAE,MAAM,MAAM,EAAE,CAAC,EAAE,MAAM,IAAI;AACvF,UAAI,MAAM,kBAAkB,OAAO,aAAa,eAAe,yBAAyB,SAAU,UAAS,oBAAoB,MAAM,CAAC;AACtI,aAAO;AAAA,IACR;AACA,WAAO,QAAQ,QAAQ;AAAA,EACxB;AACA,MAAwE,WAAW;AAClF,UAAM,WAAW,mBAAmB;AACpC,QAAI,UAAU;AACb,YAAM,sBAAsB;AAAA,QAC3B,OAAO,MAAM;AAAA,QACb,UAAU,SAAS;AAAA,QACnB,eAAe,cAAc;AAAA,QAC7B,OAAO;AAAA,MACR;AACA,eAAS,iBAAiB,SAAS,kBAAkB,CAAC;AACtD,eAAS,eAAe,KAAK,mBAAmB;AAChD,kBAAY,MAAM;AACjB,4BAAoB,QAAQ,MAAM;AAClC,4BAAoB,WAAW,SAAS;AACxC,4BAAoB,gBAAgB,cAAc;AAClD,4BAAoB,QAAQ,gBAAgB,MAAM,MAAM,EAAE,CAAC,IAAI,OAAO;AAAA,MACvE,GAAG,EAAE,OAAO,OAAO,CAAC;AAAA,IACrB;AAAA,EACD;AAIA,SAAO;AAAA,IACN;AAAA,IACA,MAAM,SAAS,MAAM,MAAM,MAAM,IAAI;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AACA,SAAS,kBAAkB,QAAQ;AAClC,SAAO,OAAO,WAAW,IAAI,OAAO,CAAC,IAAI;AAC1C;AACA,IAAM,iBAAiC,gBAAgB;AAAA,EACtD,MAAM;AAAA,EACN,cAAc,EAAE,MAAM,EAAE;AAAA,EACxB,OAAO;AAAA,IACN,IAAI;AAAA,MACH,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,UAAU;AAAA,IACX;AAAA,IACA,SAAS;AAAA,IACT,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,kBAAkB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACA,gBAAgB;AAAA,EACjB;AAAA,EACA;AAAA,EACA,MAAM,OAAO,EAAE,MAAM,GAAG;AACvB,UAAM,OAAO,SAAS,QAAQ,KAAK,CAAC;AACpC,UAAM,EAAE,QAAQ,IAAI,OAAO,SAAS;AACpC,UAAM,UAAU,SAAS,OAAO;AAAA,MAC/B,CAAC,aAAa,MAAM,aAAa,QAAQ,iBAAiB,oBAAoB,CAAC,GAAG,KAAK;AAAA,MACvF,CAAC,aAAa,MAAM,kBAAkB,QAAQ,sBAAsB,0BAA0B,CAAC,GAAG,KAAK;AAAA,IACxG,EAAE;AACF,WAAO,MAAM;AACZ,YAAM,WAAW,MAAM,WAAW,kBAAkB,MAAM,QAAQ,IAAI,CAAC;AACvE,aAAO,MAAM,SAAS,WAAW,EAAE,KAAK;AAAA,QACvC,gBAAgB,KAAK,gBAAgB,MAAM,mBAAmB;AAAA,QAC9D,MAAM,KAAK;AAAA,QACX,SAAS,KAAK;AAAA,QACd,OAAO,QAAQ;AAAA,MAChB,GAAG,QAAQ;AAAA,IACZ;AAAA,EACD;AACD,CAAC;AAID,IAAM,aAAa;AACnB,SAAS,WAAW,GAAG;AACtB,MAAI,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,SAAU;AACtD,MAAI,EAAE,iBAAkB;AACxB,MAAI,EAAE,WAAW,UAAU,EAAE,WAAW,EAAG;AAC3C,MAAI,EAAE,iBAAiB,EAAE,cAAc,cAAc;AACpD,UAAM,SAAS,EAAE,cAAc,aAAa,QAAQ;AACpD,QAAI,cAAc,KAAK,MAAM,EAAG;AAAA,EACjC;AACA,MAAI,EAAE,eAAgB,GAAE,eAAe;AACvC,SAAO;AACR;AACA,SAAS,eAAe,OAAO,OAAO;AACrC,aAAW,OAAO,OAAO;AACxB,UAAM,aAAa,MAAM,GAAG;AAC5B,UAAM,aAAa,MAAM,GAAG;AAC5B,QAAI,OAAO,eAAe,UAAU;AACnC,UAAI,eAAe,WAAY,QAAO;AAAA,IACvC,WAAW,CAAC,QAAQ,UAAU,KAAK,WAAW,WAAW,WAAW,UAAU,WAAW,KAAK,CAAC,OAAO,MAAM,MAAM,QAAQ,MAAM,WAAW,CAAC,EAAE,QAAQ,CAAC,EAAG,QAAO;AAAA,EAClK;AACA,SAAO;AACR;AAKA,SAAS,gBAAgB,QAAQ;AAChC,SAAO,SAAS,OAAO,UAAU,OAAO,QAAQ,OAAO,OAAO,OAAO;AACtE;AAOA,IAAM,eAAe,CAAC,WAAW,aAAa,iBAAiB,aAAa,OAAO,YAAY,eAAe,OAAO,cAAc;AAInI,IAAM,iBAAiC,gBAAgB;AAAA,EACtD,MAAM;AAAA,EACN,cAAc;AAAA,EACd,OAAO;AAAA,IACN,MAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EACA,cAAc,EAAE,MAAM,EAAE;AAAA,EACxB,MAAM,OAAO,EAAE,OAAO,MAAM,GAAG;AAC9B,IAAyC,oBAAoB;AAC7D,UAAM,gBAAgB,OAAO,qBAAqB;AAClD,UAAM,iBAAiB,SAAS,MAAM,MAAM,SAAS,cAAc,KAAK;AACxE,UAAM,gBAAgB,OAAO,cAAc,CAAC;AAC5C,UAAM,QAAQ,SAAS,MAAM;AAC5B,UAAI,eAAe,MAAM,aAAa;AACtC,YAAM,EAAE,QAAQ,IAAI,eAAe;AACnC,UAAI;AACJ,cAAQ,eAAe,QAAQ,YAAY,MAAM,CAAC,aAAa,WAAY;AAC3E,aAAO;AAAA,IACR,CAAC;AACD,UAAM,kBAAkB,SAAS,MAAM,eAAe,MAAM,QAAQ,MAAM,KAAK,CAAC;AAChF,YAAQ,cAAc,SAAS,MAAM,MAAM,QAAQ,CAAC,CAAC;AACrD,YAAQ,iBAAiB,eAAe;AACxC,YAAQ,uBAAuB,cAAc;AAC7C,UAAM,UAAU,IAAI;AACpB,UAAM,MAAM;AAAA,MACX,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,MAAM;AAAA,IACP,GAAG,CAAC,CAAC,UAAU,IAAI,IAAI,GAAG,CAAC,aAAa,MAAM,OAAO,MAAM;AAC1D,UAAI,IAAI;AACP,WAAG,UAAU,IAAI,IAAI;AACrB,YAAI,QAAQ,SAAS,MAAM,YAAY,aAAa,aAAa;AAChE,cAAI,CAAC,GAAG,YAAY,KAAM,IAAG,cAAc,KAAK;AAChD,cAAI,CAAC,GAAG,aAAa,KAAM,IAAG,eAAe,KAAK;AAAA,QACnD;AAAA,MACD;AACA,UAAI,YAAY,OAAO,CAAC,QAAQ,CAAC,kBAAkB,IAAI,IAAI,KAAK,CAAC,aAAc,EAAC,GAAG,eAAe,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,aAAa,SAAS,QAAQ,CAAC;AAAA,IACxJ,GAAG,EAAE,OAAO,OAAO,CAAC;AACpB,WAAO,MAAM;AACZ,YAAM,QAAQ,eAAe;AAC7B,YAAM,cAAc,MAAM;AAC1B,YAAM,eAAe,gBAAgB;AACrC,YAAM,gBAAgB,gBAAgB,aAAa,WAAW,WAAW;AACzE,UAAI,CAAC,cAAe,QAAO,cAAc,MAAM,SAAS;AAAA,QACvD,WAAW;AAAA,QACX;AAAA,MACD,CAAC;AACD,YAAM,mBAAmB,aAAa,MAAM,WAAW;AACvD,YAAM,aAAa,mBAAmB,qBAAqB,OAAO,MAAM,SAAS,OAAO,qBAAqB,aAAa,iBAAiB,KAAK,IAAI,mBAAmB;AACvK,YAAM,mBAAmB,CAAC,UAAU;AACnC,YAAI,MAAM,UAAU,YAAa,cAAa,UAAU,WAAW,IAAI;AAAA,MACxE;AACA,YAAM,YAAY,EAAE,eAAe,OAAO,CAAC,GAAG,YAAY,OAAO;AAAA,QAChE;AAAA,QACA,KAAK;AAAA,MACN,CAAC,CAAC;AACF,UAAwE,aAAa,UAAU,KAAK;AACnG,cAAM,OAAO;AAAA,UACZ,OAAO,MAAM;AAAA,UACb,MAAM,aAAa;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,MAAM,aAAa;AAAA,QACpB;AACA,SAAC,QAAQ,UAAU,GAAG,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,QAAQ,CAAC,aAAa;AAClG,mBAAS,iBAAiB;AAAA,QAC3B,CAAC;AAAA,MACF;AACA,aAAO,cAAc,MAAM,SAAS;AAAA,QACnC,WAAW;AAAA,QACX;AAAA,MACD,CAAC,KAAK;AAAA,IACP;AAAA,EACD;AACD,CAAC;AACD,SAAS,cAAc,MAAM,MAAM;AAClC,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,cAAc,KAAK,IAAI;AAC7B,SAAO,YAAY,WAAW,IAAI,YAAY,CAAC,IAAI;AACpD;AAIA,IAAM,aAAa;AACnB,SAAS,sBAAsB;AAC9B,QAAM,WAAW,mBAAmB;AACpC,QAAM,aAAa,SAAS,UAAU,SAAS,OAAO,KAAK;AAC3D,QAAM,oBAAoB,SAAS,UAAU,SAAS,OAAO,WAAW,SAAS,OAAO,QAAQ;AAChG,MAAI,eAAe,eAAe,eAAe,WAAW,SAAS,YAAY,MAAM,OAAO,sBAAsB,YAAY,kBAAkB,SAAS,cAAc;AACxK,UAAM,OAAO,eAAe,cAAc,eAAe;AACzD,WAAO;AAAA;AAAA;AAAA;AAAA,KAIJ,IAAI;AAAA;AAAA,MAA6C,IAAI;AAAA,eAAmB;AAAA,EAC5E;AACD;AASA,SAAS,aAAa,SAAS;AAC9B,QAAM,UAAU,oBAAoB,QAAQ,QAAQ,OAAO;AAC3D,QAAM,eAAe,QAAQ,cAAc;AAC3C,QAAM,mBAAmB,QAAQ,kBAAkB;AACnD,QAAM,gBAAgB,QAAQ;AAC9B,MAA6C,CAAC,cAAe,OAAM,IAAI,MAAM,gIAAoI;AACjN,QAAM,eAAe,aAAa;AAClC,QAAM,sBAAsB,aAAa;AACzC,QAAM,cAAc,aAAa;AACjC,QAAM,eAAe,WAAW,yBAAyB;AACzD,MAAI,kBAAkB;AACtB,MAAI,aAAa,QAAQ,kBAAkB,uBAAuB,QAAS,SAAQ,oBAAoB;AACvG,QAAM,kBAAkB,cAAc,KAAK,MAAM,CAAC,eAAe,KAAK,UAAU;AAChF,QAAM,eAAe,cAAc,KAAK,MAAM,WAAW;AACzD,QAAM,eAAe,cAAc,KAAK,MAAM,MAAM;AACpD,WAAS,SAAS,eAAe,OAAO;AACvC,QAAI;AACJ,QAAI;AACJ,QAAI,YAAY,aAAa,GAAG;AAC/B,eAAS,QAAQ,iBAAiB,aAAa;AAC/C,UAA6C,CAAC,OAAQ,QAAO,iBAAiB,OAAO,aAAa,CAAC,uCAAuC,KAAK;AAC/I,eAAS;AAAA,IACV,MAAO,UAAS;AAChB,WAAO,QAAQ,SAAS,QAAQ,MAAM;AAAA,EACvC;AACA,WAAS,YAAY,MAAM;AAC1B,UAAM,gBAAgB,QAAQ,iBAAiB,IAAI;AACnD,QAAI,cAAe,SAAQ,YAAY,aAAa;AAAA,aAC3C,KAAuC,QAAO,qCAAqC,OAAO,IAAI,CAAC,GAAG;AAAA,EAC5G;AACA,WAAS,YAAY;AACpB,WAAO,QAAQ,UAAU,EAAE,IAAI,CAAC,iBAAiB,aAAa,MAAM;AAAA,EACrE;AACA,WAAS,SAAS,MAAM;AACvB,WAAO,CAAC,CAAC,QAAQ,iBAAiB,IAAI;AAAA,EACvC;AACA,WAAS,QAAQ,aAAa,iBAAiB;AAC9C,sBAAkB,OAAO,CAAC,GAAG,mBAAmB,aAAa,KAAK;AAClE,QAAI,OAAO,gBAAgB,UAAU;AACpC,YAAM,qBAAqB,SAAS,cAAc,aAAa,gBAAgB,IAAI;AACnF,YAAM,iBAAiB,QAAQ,QAAQ,EAAE,MAAM,mBAAmB,KAAK,GAAG,eAAe;AACzF,YAAM,SAAS,cAAc,WAAW,mBAAmB,QAAQ;AACnE,UAAI,MAAuC;AAC1C,YAAI,OAAO,WAAW,IAAI,EAAG,QAAO,aAAa,WAAW,kBAAkB,MAAM,4DAA4D;AAAA,iBACvI,CAAC,eAAe,QAAQ,OAAQ,QAAO,0CAA0C,WAAW,GAAG;AAAA,MACzG;AACA,aAAO,OAAO,oBAAoB,gBAAgB;AAAA,QACjD,QAAQ,aAAa,eAAe,MAAM;AAAA,QAC1C,MAAM,OAAO,mBAAmB,IAAI;AAAA,QACpC,gBAAgB;AAAA,QAChB,MAAM;AAAA,MACP,CAAC;AAAA,IACF;AACA,QAA6C,CAAC,gBAAgB,WAAW,GAAG;AAC3E,aAAO;AAAA,cAA+F,WAAW;AACjH,aAAO,QAAQ,CAAC,CAAC;AAAA,IAClB;AACA,QAAI;AACJ,QAAI,YAAY,QAAQ,MAAM;AAC7B,UAA6C,YAAY,eAAe,EAAE,UAAU,gBAAgB,OAAO,KAAK,YAAY,MAAM,EAAE,OAAQ,QAAO,SAAS,YAAY,IAAI,gGAAgG;AAC5Q,wBAAkB,OAAO,CAAC,GAAG,aAAa,EAAE,MAAM,SAAS,cAAc,YAAY,MAAM,gBAAgB,IAAI,EAAE,KAAK,CAAC;AAAA,IACxH,OAAO;AACN,YAAM,eAAe,OAAO,CAAC,GAAG,YAAY,MAAM;AAClD,iBAAW,OAAO,aAAc,KAAI,aAAa,GAAG,KAAK,KAAM,QAAO,aAAa,GAAG;AACtF,wBAAkB,OAAO,CAAC,GAAG,aAAa,EAAE,QAAQ,aAAa,YAAY,EAAE,CAAC;AAChF,sBAAgB,SAAS,aAAa,gBAAgB,MAAM;AAAA,IAC7D;AACA,UAAM,eAAe,QAAQ,QAAQ,iBAAiB,eAAe;AACrE,UAAM,OAAO,YAAY,QAAQ;AACjC,QAA6C,QAAQ,CAAC,KAAK,WAAW,GAAG,EAAG,QAAO,mEAAmE,IAAI,YAAY,IAAI,IAAI;AAC9K,iBAAa,SAAS,gBAAgB,aAAa,aAAa,MAAM,CAAC;AACvE,UAAM,WAAW,aAAa,kBAAkB,OAAO,CAAC,GAAG,aAAa;AAAA,MACvE,MAAM,WAAW,IAAI;AAAA,MACrB,MAAM,aAAa;AAAA,IACpB,CAAC,CAAC;AACF,UAAM,OAAO,cAAc,WAAW,QAAQ;AAC9C,QAAI,MAAuC;AAC1C,UAAI,KAAK,WAAW,IAAI,EAAG,QAAO,aAAa,WAAW,kBAAkB,IAAI,4DAA4D;AAAA,eACnI,CAAC,aAAa,QAAQ,OAAQ,QAAO,0CAA0C,YAAY,QAAQ,OAAO,YAAY,OAAO,WAAW,GAAG;AAAA,IACrJ;AACA,WAAO,OAAO;AAAA,MACb;AAAA,MACA;AAAA,MACA,OAAO,qBAAqB,iBAAiB,eAAe,YAAY,KAAK,IAAI,YAAY,SAAS,CAAC;AAAA,IACxG,GAAG,cAAc;AAAA,MAChB,gBAAgB;AAAA,MAChB;AAAA,IACD,CAAC;AAAA,EACF;AACA,WAAS,iBAAiB,IAAI;AAC7B,WAAO,OAAO,OAAO,WAAW,SAAS,cAAc,IAAI,aAAa,MAAM,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE;AAAA,EACpG;AACA,WAAS,wBAAwB,IAAI,MAAM;AAC1C,QAAI,oBAAoB,GAAI,QAAO,kBAAkB,WAAW,sBAAsB;AAAA,MACrF;AAAA,MACA;AAAA,IACD,CAAC;AAAA,EACF;AACA,WAAS,KAAK,IAAI;AACjB,WAAO,iBAAiB,EAAE;AAAA,EAC3B;AACA,WAAS,QAAQ,IAAI;AACpB,WAAO,KAAK,OAAO,iBAAiB,EAAE,GAAG,EAAE,SAAS,KAAK,CAAC,CAAC;AAAA,EAC5D;AACA,WAAS,qBAAqB,IAAI,MAAM;AACvC,UAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,SAAS,CAAC;AACpD,QAAI,eAAe,YAAY,UAAU;AACxC,YAAM,EAAE,SAAS,IAAI;AACrB,UAAI,oBAAoB,OAAO,aAAa,aAAa,SAAS,IAAI,IAAI,IAAI;AAC9E,UAAI,OAAO,sBAAsB,UAAU;AAC1C,4BAAoB,kBAAkB,SAAS,GAAG,KAAK,kBAAkB,SAAS,GAAG,IAAI,oBAAoB,iBAAiB,iBAAiB,IAAI,EAAE,MAAM,kBAAkB;AAC7K,0BAAkB,SAAS,CAAC;AAAA,MAC7B;AACA,UAA6C,kBAAkB,QAAQ,QAAQ,EAAE,UAAU,oBAAoB;AAC9G,eAAO;AAAA,EAA4B,KAAK,UAAU,mBAAmB,MAAM,CAAC,CAAC;AAAA,uBAA0B,GAAG,QAAQ,2EAA2E;AAC7L,cAAM,IAAI,MAAM,kBAAkB;AAAA,MACnC;AACA,aAAO,OAAO;AAAA,QACb,OAAO,GAAG;AAAA,QACV,MAAM,GAAG;AAAA,QACT,QAAQ,kBAAkB,QAAQ,OAAO,CAAC,IAAI,GAAG;AAAA,MAClD,GAAG,iBAAiB;AAAA,IACrB;AAAA,EACD;AACA,WAAS,iBAAiB,IAAI,gBAAgB;AAC7C,UAAM,iBAAiB,kBAAkB,QAAQ,EAAE;AACnD,UAAM,OAAO,aAAa;AAC1B,UAAM,OAAO,GAAG;AAChB,UAAM,QAAQ,GAAG;AACjB,UAAM,YAAY,GAAG,YAAY;AACjC,UAAM,iBAAiB,qBAAqB,gBAAgB,IAAI;AAChE,QAAI,eAAgB,QAAO,iBAAiB,OAAO,iBAAiB,cAAc,GAAG;AAAA,MACpF,OAAO,OAAO,mBAAmB,WAAW,OAAO,CAAC,GAAG,MAAM,eAAe,KAAK,IAAI;AAAA,MACrF;AAAA,MACA,SAAS;AAAA,IACV,CAAC,GAAG,kBAAkB,cAAc;AACpC,UAAM,aAAa;AACnB,eAAW,iBAAiB;AAC5B,QAAI;AACJ,QAAI,CAAC,SAAS,oBAAoB,kBAAkB,MAAM,cAAc,GAAG;AAC1E,gBAAU,kBAAkB,WAAW,uBAAuB;AAAA,QAC7D,IAAI;AAAA,QACJ;AAAA,MACD,CAAC;AACD,mBAAa,MAAM,MAAM,MAAM,KAAK;AAAA,IACrC;AACA,YAAQ,UAAU,QAAQ,QAAQ,OAAO,IAAI,SAAS,YAAY,IAAI,GAAG,MAAM,CAAC,UAAU,oBAAoB,KAAK,IAAI,oBAAoB,OAAO,WAAW,yBAAyB,IAAI,QAAQ,YAAY,KAAK,IAAI,aAAa,OAAO,YAAY,IAAI,CAAC,EAAE,KAAK,CAAC,cAAc;AACjR,UAAI,WAAW;AACd,YAAI,oBAAoB,WAAW,WAAW,yBAAyB,GAAG;AACzE,cAA6C,oBAAoB,kBAAkB,QAAQ,UAAU,EAAE,GAAG,UAAU,KAAK,mBAAmB,eAAe,SAAS,eAAe,SAAS,eAAe,SAAS,IAAI,KAAK,IAAI;AAChO,mBAAO,mFAAmF,KAAK,QAAQ,SAAS,WAAW,QAAQ;AAAA,gNAAyP;AAC5X,mBAAO,QAAQ,OAAuB,IAAI,MAAM,uCAAuC,CAAC;AAAA,UACzF;AACA,iBAAO,iBAAiB,OAAO,EAAE,SAAS,UAAU,GAAG,iBAAiB,UAAU,EAAE,GAAG;AAAA,YACtF,OAAO,OAAO,UAAU,OAAO,WAAW,OAAO,CAAC,GAAG,MAAM,UAAU,GAAG,KAAK,IAAI;AAAA,YACjF;AAAA,UACD,CAAC,GAAG,kBAAkB,UAAU;AAAA,QACjC;AAAA,MACD,MAAO,aAAY,mBAAmB,YAAY,MAAM,MAAM,WAAW,IAAI;AAC7E,uBAAiB,YAAY,MAAM,SAAS;AAC5C,aAAO;AAAA,IACR,CAAC;AAAA,EACF;AAMA,WAAS,iCAAiC,IAAI,MAAM;AACnD,UAAM,QAAQ,wBAAwB,IAAI,IAAI;AAC9C,WAAO,QAAQ,QAAQ,OAAO,KAAK,IAAI,QAAQ,QAAQ;AAAA,EACxD;AACA,WAAS,eAAe,IAAI;AAC3B,UAAM,MAAM,cAAc,OAAO,EAAE,KAAK,EAAE;AAC1C,WAAO,OAAO,OAAO,IAAI,mBAAmB,aAAa,IAAI,eAAe,EAAE,IAAI,GAAG;AAAA,EACtF;AACA,WAAS,SAAS,IAAI,MAAM;AAC3B,QAAI;AACJ,UAAM,CAAC,gBAAgB,iBAAiB,eAAe,IAAI,uBAAuB,IAAI,IAAI;AAC1F,aAAS,wBAAwB,eAAe,QAAQ,GAAG,oBAAoB,IAAI,IAAI;AACvF,eAAW,UAAU,eAAgB,QAAO,YAAY,QAAQ,CAAC,UAAU;AAC1E,aAAO,KAAK,iBAAiB,OAAO,IAAI,IAAI,CAAC;AAAA,IAC9C,CAAC;AACD,UAAM,0BAA0B,iCAAiC,KAAK,MAAM,IAAI,IAAI;AACpF,WAAO,KAAK,uBAAuB;AACnC,WAAO,cAAc,MAAM,EAAE,KAAK,MAAM;AACvC,eAAS,CAAC;AACV,iBAAW,SAAS,aAAa,KAAK,EAAG,QAAO,KAAK,iBAAiB,OAAO,IAAI,IAAI,CAAC;AACtF,aAAO,KAAK,uBAAuB;AACnC,aAAO,cAAc,MAAM;AAAA,IAC5B,CAAC,EAAE,KAAK,MAAM;AACb,eAAS,wBAAwB,iBAAiB,qBAAqB,IAAI,IAAI;AAC/E,iBAAW,UAAU,gBAAiB,QAAO,aAAa,QAAQ,CAAC,UAAU;AAC5E,eAAO,KAAK,iBAAiB,OAAO,IAAI,IAAI,CAAC;AAAA,MAC9C,CAAC;AACD,aAAO,KAAK,uBAAuB;AACnC,aAAO,cAAc,MAAM;AAAA,IAC5B,CAAC,EAAE,KAAK,MAAM;AACb,eAAS,CAAC;AACV,iBAAW,UAAU,gBAAiB,KAAI,OAAO,YAAa,KAAI,QAAQ,OAAO,WAAW,EAAG,YAAW,eAAe,OAAO,YAAa,QAAO,KAAK,iBAAiB,aAAa,IAAI,IAAI,CAAC;AAAA,UAC3L,QAAO,KAAK,iBAAiB,OAAO,aAAa,IAAI,IAAI,CAAC;AAC/D,aAAO,KAAK,uBAAuB;AACnC,aAAO,cAAc,MAAM;AAAA,IAC5B,CAAC,EAAE,KAAK,MAAM;AACb,SAAG,QAAQ,QAAQ,CAAC,WAAW,OAAO,iBAAiB,CAAC,CAAC;AACzD,eAAS,wBAAwB,iBAAiB,oBAAoB,IAAI,MAAM,cAAc;AAC9F,aAAO,KAAK,uBAAuB;AACnC,aAAO,cAAc,MAAM;AAAA,IAC5B,CAAC,EAAE,KAAK,MAAM;AACb,eAAS,CAAC;AACV,iBAAW,SAAS,oBAAoB,KAAK,EAAG,QAAO,KAAK,iBAAiB,OAAO,IAAI,IAAI,CAAC;AAC7F,aAAO,KAAK,uBAAuB;AACnC,aAAO,cAAc,MAAM;AAAA,IAC5B,CAAC,EAAE,MAAM,CAAC,QAAQ,oBAAoB,KAAK,WAAW,oBAAoB,IAAI,MAAM,QAAQ,OAAO,GAAG,CAAC;AAAA,EACxG;AACA,WAAS,iBAAiB,IAAI,MAAM,SAAS;AAC5C,gBAAY,KAAK,EAAE,QAAQ,CAAC,UAAU,eAAe,MAAM,MAAM,IAAI,MAAM,OAAO,CAAC,CAAC;AAAA,EACrF;AAMA,WAAS,mBAAmB,YAAY,MAAM,QAAQ,WAAW,MAAM;AACtE,UAAM,QAAQ,wBAAwB,YAAY,IAAI;AACtD,QAAI,MAAO,QAAO;AAClB,UAAM,oBAAoB,SAAS;AACnC,UAAM,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ;AACxC,QAAI,OAAQ,KAAI,aAAa,kBAAmB,eAAc,QAAQ,WAAW,UAAU,OAAO,EAAE,QAAQ,qBAAqB,SAAS,MAAM,OAAO,GAAG,IAAI,CAAC;AAAA,QAC1J,eAAc,KAAK,WAAW,UAAU,IAAI;AACjD,iBAAa,QAAQ;AACrB,iBAAa,YAAY,MAAM,QAAQ,iBAAiB;AACxD,gBAAY;AAAA,EACb;AACA,MAAI;AACJ,WAAS,iBAAiB;AACzB,QAAI,sBAAuB;AAC3B,4BAAwB,cAAc,OAAO,CAAC,IAAI,OAAO,SAAS;AACjE,UAAI,CAAC,OAAO,UAAW;AACvB,YAAM,aAAa,QAAQ,EAAE;AAC7B,YAAM,iBAAiB,qBAAqB,YAAY,OAAO,aAAa,KAAK;AACjF,UAAI,gBAAgB;AACnB,yBAAiB,OAAO,gBAAgB;AAAA,UACvC,SAAS;AAAA,UACT,OAAO;AAAA,QACR,CAAC,GAAG,UAAU,EAAE,MAAM,IAAI;AAC1B;AAAA,MACD;AACA,wBAAkB;AAClB,YAAM,OAAO,aAAa;AAC1B,UAAI,UAAW,oBAAmB,aAAa,KAAK,UAAU,KAAK,KAAK,GAAG,sBAAsB,CAAC;AAClG,eAAS,YAAY,IAAI,EAAE,MAAM,CAAC,UAAU;AAC3C,YAAI,oBAAoB,OAAO,WAAW,qBAAqB,WAAW,oBAAoB,EAAG,QAAO;AACxG,YAAI,oBAAoB,OAAO,WAAW,yBAAyB,GAAG;AACrE,2BAAiB,OAAO,iBAAiB,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,YAAY;AACnG,gBAAI,oBAAoB,SAAS,WAAW,qBAAqB,WAAW,qBAAqB,KAAK,CAAC,KAAK,SAAS,KAAK,SAAS,eAAe,IAAK,eAAc,GAAG,IAAI,KAAK;AAAA,UAClL,CAAC,EAAE,MAAM,IAAI;AACb,iBAAO,QAAQ,OAAO;AAAA,QACvB;AACA,YAAI,KAAK,MAAO,eAAc,GAAG,CAAC,KAAK,OAAO,KAAK;AACnD,eAAO,aAAa,OAAO,YAAY,IAAI;AAAA,MAC5C,CAAC,EAAE,KAAK,CAAC,YAAY;AACpB,kBAAU,WAAW,mBAAmB,YAAY,MAAM,KAAK;AAC/D,YAAI,SAAS;AACZ,cAAI,KAAK,SAAS,CAAC,oBAAoB,SAAS,WAAW,oBAAoB,EAAG,eAAc,GAAG,CAAC,KAAK,OAAO,KAAK;AAAA,mBAC5G,KAAK,SAAS,eAAe,OAAO,oBAAoB,SAAS,WAAW,qBAAqB,WAAW,qBAAqB,EAAG,eAAc,GAAG,IAAI,KAAK;AAAA,QACxK;AACA,yBAAiB,YAAY,MAAM,OAAO;AAAA,MAC3C,CAAC,EAAE,MAAM,IAAI;AAAA,IACd,CAAC;AAAA,EACF;AACA,MAAI,gBAAgB,aAAa;AACjC,MAAI,iBAAiB,aAAa;AAClC,MAAI;AASJ,WAAS,aAAa,OAAO,IAAI,MAAM;AACtC,gBAAY,KAAK;AACjB,UAAM,OAAO,eAAe,KAAK;AACjC,QAAI,KAAK,OAAQ,MAAK,QAAQ,CAAC,YAAY,QAAQ,OAAO,IAAI,IAAI,CAAC;AAAA,SAC9D;AACJ,UAAI,KAAuC,QAAO,yCAAyC;AAC3F,cAAQ,MAAM,KAAK;AAAA,IACpB;AACA,WAAO,QAAQ,OAAO,KAAK;AAAA,EAC5B;AACA,WAAS,UAAU;AAClB,QAAI,SAAS,aAAa,UAAU,0BAA2B,QAAO,QAAQ,QAAQ;AACtF,WAAO,IAAI,QAAQ,CAAC,WAAW,WAAW;AACzC,oBAAc,IAAI,CAAC,WAAW,MAAM,CAAC;AAAA,IACtC,CAAC;AAAA,EACF;AACA,WAAS,YAAY,KAAK;AACzB,QAAI,CAAC,OAAO;AACX,cAAQ,CAAC;AACT,qBAAe;AACf,oBAAc,KAAK,EAAE,QAAQ,CAAC,CAAC,WAAW,MAAM,MAAM,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC;AACrF,oBAAc,MAAM;AAAA,IACrB;AACA,WAAO;AAAA,EACR;AACA,WAAS,aAAa,IAAI,MAAM,QAAQ,mBAAmB;AAC1D,UAAM,EAAE,eAAe,IAAI;AAC3B,QAAI,CAAC,aAAa,CAAC,eAAgB,QAAO,QAAQ,QAAQ;AAC1D,UAAM,iBAAiB,CAAC,UAAU,uBAAuB,aAAa,GAAG,UAAU,CAAC,CAAC,MAAM,qBAAqB,CAAC,WAAW,QAAQ,SAAS,QAAQ,MAAM,UAAU;AACrK,WAAO,SAAS,EAAE,KAAK,MAAM,eAAe,IAAI,MAAM,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,YAAY,iBAAiB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,aAAa,KAAK,IAAI,IAAI,CAAC;AAAA,EAC7K;AACA,QAAM,KAAK,CAAC,UAAU,cAAc,GAAG,KAAK;AAC5C,MAAI;AACJ,QAAM,gBAAgC,oBAAI,IAAI;AAC9C,QAAM,SAAS;AAAA,IACd;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,aAAa,QAAQ;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,MAAM,GAAG,EAAE;AAAA,IACjB,SAAS,MAAM,GAAG,CAAC;AAAA,IACnB,YAAY,aAAa;AAAA,IACzB,eAAe,oBAAoB;AAAA,IACnC,WAAW,YAAY;AAAA,IACvB,SAAS,eAAe;AAAA,IACxB;AAAA,IACA,QAAQ,KAAK;AACZ,UAAI,UAAU,cAAc,UAAU;AACtC,UAAI,UAAU,cAAc,UAAU;AACtC,UAAI,OAAO,iBAAiB,UAAU;AACtC,aAAO,eAAe,IAAI,OAAO,kBAAkB,UAAU;AAAA,QAC5D,YAAY;AAAA,QACZ,KAAK,MAAM,MAAM,YAAY;AAAA,MAC9B,CAAC;AACD,UAAI,aAAa,CAAC,WAAW,aAAa,UAAU,2BAA2B;AAC9E,kBAAU;AACV,aAAK,cAAc,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC3C,cAAI,KAAuC,QAAO,8CAA8C,GAAG;AAAA,QACpG,CAAC;AAAA,MACF;AACA,YAAM,gBAAgB,CAAC;AACvB,iBAAW,OAAO,0BAA2B,QAAO,eAAe,eAAe,KAAK;AAAA,QACtF,KAAK,MAAM,aAAa,MAAM,GAAG;AAAA,QACjC,YAAY;AAAA,MACb,CAAC;AACD,UAAI,QAAQ,WAAW,MAAM;AAC7B,UAAI,QAAQ,kBAAkB,gBAAgB,aAAa,CAAC;AAC5D,UAAI,QAAQ,uBAAuB,YAAY;AAC/C,YAAM,aAAa,IAAI;AACvB,oBAAc,IAAI,GAAG;AACrB,UAAI,UAAU,WAAW;AACxB,sBAAc,OAAO,GAAG;AACxB,YAAI,cAAc,OAAO,GAAG;AAC3B,4BAAkB;AAClB,mCAAyB,sBAAsB;AAC/C,kCAAwB;AACxB,uBAAa,QAAQ;AACrB,oBAAU;AACV,kBAAQ;AAAA,QACT;AACA,mBAAW;AAAA,MACZ;AACA,UAAwE,UAAW,aAAY,KAAK,QAAQ,OAAO;AAAA,IACpH;AAAA,EACD;AACA,WAAS,cAAc,QAAQ;AAC9B,WAAO,OAAO,OAAO,CAAC,SAAS,UAAU,QAAQ,KAAK,MAAM,eAAe,KAAK,CAAC,GAAG,QAAQ,QAAQ,CAAC;AAAA,EACtG;AACA,SAAO;AACR;AAQA,SAAS,YAAY;AACpB,SAAO,OAAO,SAAS;AACxB;AAKA,SAAS,SAAS,OAAO;AACxB,SAAO,OAAO,gBAAgB;AAC/B;", "names": ["location", "location"] } diff --git a/admin/node_modules/.vite/deps/vue.js b/admin/node_modules/.vite/deps/vue.js index e027c9c3..ba31219c 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-ELEEJBJQ.js"; +} from "./chunk-H2732BJL.js"; import "./chunk-G3PMV62Z.js"; export { BaseTransition, diff --git a/admin/src/api/display.js b/admin/src/api/display.js index b83046c0..837c1372 100644 --- a/admin/src/api/display.js +++ b/admin/src/api/display.js @@ -5,3 +5,6 @@ export const getPublicStores = () => request.get('/store/list') // 获取公开天梯排名 export const getPublicRanking = (params) => request.get('/ladder/ranking', { params }) + +// 大屏:进行中/近7天比赛列表 +export const getDisplayMatches = (params) => request.get('/match/display-list', { params }) diff --git a/admin/src/router/index.js b/admin/src/router/index.js index 0a00bee4..df69d8a5 100644 --- a/admin/src/router/index.js +++ b/admin/src/router/index.js @@ -87,6 +87,18 @@ const routes = [ component: () => import("@/views/display/RankingBoardOrange.vue"), meta: { title: "天梯排行大屏(橙色)", public: true }, }, + { + path: "/display/ladder-summary", + name: "LadderSummary", + component: () => import("@/views/display/LadderSummary.vue"), + meta: { title: "天梯汇总大屏", public: true }, + }, + { + path: "/display/ladder-summary-orange", + name: "LadderSummaryOrange", + component: () => import("@/views/display/LadderSummaryOrange.vue"), + meta: { title: "天梯汇总大屏(橙色)", public: true }, + }, ]; const router = createRouter({ diff --git a/admin/src/views/dashboard/index.vue b/admin/src/views/dashboard/index.vue index efe9f89f..329b6f76 100644 --- a/admin/src/views/dashboard/index.vue +++ b/admin/src/views/dashboard/index.vue @@ -59,6 +59,10 @@ 天梯大屏(橙) +
+ + 天梯汇总大屏 +
diff --git a/admin/src/views/display/LadderSummary.vue b/admin/src/views/display/LadderSummary.vue new file mode 100644 index 00000000..fa19e538 --- /dev/null +++ b/admin/src/views/display/LadderSummary.vue @@ -0,0 +1,885 @@ + + + + + diff --git a/admin/src/views/display/LadderSummaryOrange.vue b/admin/src/views/display/LadderSummaryOrange.vue new file mode 100644 index 00000000..349f44a1 --- /dev/null +++ b/admin/src/views/display/LadderSummaryOrange.vue @@ -0,0 +1,887 @@ + + + + + + diff --git a/admin/src/views/display/RankingBoard.vue b/admin/src/views/display/RankingBoard.vue index 1630182f..948af438 100644 --- a/admin/src/views/display/RankingBoard.vue +++ b/admin/src/views/display/RankingBoard.vue @@ -19,7 +19,23 @@ 切换 Premium 风格 -
+
+
+ 男女分榜 +
+
+ 全部 +
+
+
当前场馆: {{ currentStore?.name || "请选择" }} -
+
@@ -58,7 +74,257 @@ -
+
+
+
男子榜
+
+
排名
+
选手
+
等级
+
场次/胜率
+
战力值
+
+ +
+
+
+
+
+ {{ player.rank }} +
+ {{ player.rank }} +
+
+
+ + {{ player.realName?.[0] || player.nickname?.[0] || "?" }} + +
+ {{ player.realName }} + {{ player.nickname }} +
+
+
+
+ + {{ player.levelName }} + +
+
+
+ {{ player.matchCount }}场 + {{ player.winRate }}% 胜率 +
+
+
+
+ {{ player.powerScore }} +
+
+
+
+
+
+ +
+
+
+ {{ player.rank }} +
+ {{ player.rank }} +
+
+
+ + {{ player.realName?.[0] || player.nickname?.[0] || "?" }} + +
+ {{ player.realName }} + {{ player.nickname }} +
+
+
+
+ + {{ player.levelName }} + +
+
+
+ {{ player.matchCount }}场 + {{ player.winRate }}% 胜率 +
+
+
+
+ {{ player.powerScore }} +
+
+
+
+
+
+
+ +
+ 暂无排行数据 +
+
+
+ +
+
女子榜
+
+
排名
+
选手
+
等级
+
场次/胜率
+
战力值
+
+ +
+
+
+
+
+ {{ player.rank }} +
+ {{ player.rank }} +
+
+
+ + {{ player.realName?.[0] || player.nickname?.[0] || "?" }} + +
+ {{ player.realName }} + {{ player.nickname }} +
+
+
+
+ + {{ player.levelName }} + +
+
+
+ {{ player.matchCount }}场 + {{ player.winRate }}% 胜率 +
+
+
+
+ {{ player.powerScore }} +
+
+
+
+
+
+ +
+
+
+ {{ player.rank }} +
+ {{ player.rank }} +
+
+
+ + {{ player.realName?.[0] || player.nickname?.[0] || "?" }} + +
+ {{ player.realName }} + {{ player.nickname }} +
+
+
+
+ + {{ player.levelName }} + +
+
+
+ {{ player.matchCount }}场 + {{ player.winRate }}% 胜率 +
+
+
+
+ {{ player.powerScore }} +
+
+
+
+
+
+
+ +
+ 暂无排行数据 +
+
+
+
+ +
排名
选手
@@ -70,7 +336,7 @@
+ :style="{ transform: `translateY(${scrollYAll}px)` }">
{ @@ -233,31 +507,31 @@ }; // 连续无缝滚动逻辑 (使用 Transform 性能更好) - const startContinuousScroll = () => { - if (scrollReqId.value) cancelAnimationFrame(scrollReqId.value); + const startContinuousScroll = (listRef, scrollYRef, reqIdRef) => { + if (reqIdRef.value) cancelAnimationFrame(reqIdRef.value); const scroll = () => { - if (isRefreshing.value || rankingList.value.length === 0) { - scrollReqId.value = requestAnimationFrame(scroll); + if (isRefreshing.value || listRef.value.length === 0) { + reqIdRef.value = requestAnimationFrame(scroll); return; } // 每一帧移动的像素 (降低速度,使其更易阅读) - scrollY.value -= 0.6; + scrollYRef.value -= 0.6; // 计算单份数据的高度:100条 * (90px行高 + 12px间距) - const singleSetHeight = rankingList.value.length * 102; + const singleSetHeight = listRef.value.length * 102; // 如果滚完了一整套数据,瞬间重置回 0 - if (Math.abs(scrollY.value) >= singleSetHeight) { - scrollY.value = 0; + if (Math.abs(scrollYRef.value) >= singleSetHeight) { + scrollYRef.value = 0; } - scrollReqId.value = requestAnimationFrame(scroll); + reqIdRef.value = requestAnimationFrame(scroll); }; setTimeout(() => { - scrollReqId.value = requestAnimationFrame(scroll); + reqIdRef.value = requestAnimationFrame(scroll); }, 500); }; @@ -289,27 +563,77 @@ } }; + const setGenderMode = (mode) => { + if (mode !== "split" && mode !== "all") return; + if (genderMode.value === mode) return; + genderMode.value = mode; + router.replace({ query: { ...route.query, gender_mode: mode } }); + fetchRanking(); + }; + // 获取排名数据 const fetchRanking = async () => { if (!currentStore.value) return; isRefreshing.value = true; try { - const res = await getPublicRanking({ - store_id: currentStore.value.id, - pageSize: 100, // 大屏展示前100名 - is_display: 1, // 告知后端是大屏展示,可以忽略每月最低场次限制 - }); + if (genderMode.value === "split") { + const [maleRes, femaleRes] = await Promise.all([ + getPublicRanking({ + store_id: currentStore.value.id, + gender: 1, + pageSize: 100, + is_display: 1, + }), + getPublicRanking({ + store_id: currentStore.value.id, + gender: 2, + pageSize: 100, + is_display: 1, + }), + ]); - // 如果数据没变,不重置滚动位置 - const newList = res.data?.list || []; - rankingList.value = newList; + rankingListMale.value = maleRes.data?.list || []; + rankingListFemale.value = femaleRes.data?.list || []; + scrollYMale.value = 0; + scrollYFemale.value = 0; - // 数据加载后开始滚动 - if (rankingList.value.length > 0) { - nextTick(() => { - startContinuousScroll(); + if ( + rankingListMale.value.length > 0 || + rankingListFemale.value.length > 0 + ) { + nextTick(() => { + if (rankingListMale.value.length > 0) { + startContinuousScroll( + rankingListMale, + scrollYMale, + scrollReqIdMale, + ); + } + if (rankingListFemale.value.length > 0) { + startContinuousScroll( + rankingListFemale, + scrollYFemale, + scrollReqIdFemale, + ); + } + }); + } + } else { + const res = await getPublicRanking({ + store_id: currentStore.value.id, + pageSize: 100, // 大屏展示前100名 + is_display: 1, // 告知后端是大屏展示,可以忽略每月最低场次限制 }); + + rankingList.value = res.data?.list || []; + scrollYAll.value = 0; + + if (rankingList.value.length > 0) { + nextTick(() => { + startContinuousScroll(rankingList, scrollYAll, scrollReqIdAll); + }); + } } } catch (err) { console.error("获取排名失败:", err); @@ -326,7 +650,13 @@ currentStore.value = store; showStoreMenu.value = false; // 更新 URL 方便分享/刷新 - router.replace({ query: { ...route.query, store_id: store.id } }); + router.replace({ + query: { + ...route.query, + store_id: store.id, + gender_mode: genderMode.value, + }, + }); fetchRanking(); }; @@ -336,24 +666,27 @@ refreshTimer = setInterval(fetchRanking, 30 * 1000); // 30秒刷新一次,避免过于频繁影响滚动感 // 点击外部关闭菜单 - window.addEventListener("click", () => { + handleWindowClick = () => { showStoreMenu.value = false; - }); + }; + window.addEventListener("click", handleWindowClick); }); onUnmounted(() => { if (timer) clearInterval(timer); if (refreshTimer) clearInterval(refreshTimer); - if (scrollReqId.value) cancelAnimationFrame(scrollReqId.value); - window.removeEventListener("click", () => { - showStoreMenu.value = false; - }); + if (scrollReqIdAll.value) cancelAnimationFrame(scrollReqIdAll.value); + if (scrollReqIdMale.value) cancelAnimationFrame(scrollReqIdMale.value); + if (scrollReqIdFemale.value) cancelAnimationFrame(scrollReqIdFemale.value); + if (handleWindowClick) { + window.removeEventListener("click", handleWindowClick); + } }); // 监听路由参数变化(比如用户直接修改 URL) watch( - () => route.query.store_id, - (newId) => { + () => [route.query.store_id, route.query.gender_mode], + ([newId, newMode]) => { if (newId && stores.value.length > 0) { const found = stores.value.find((s) => s.id === parseInt(newId)); if (found && found.id !== currentStore.value?.id) { @@ -361,6 +694,12 @@ fetchRanking(); } } + + const mode = newMode === "all" ? "all" : "split"; + if (mode !== genderMode.value) { + genderMode.value = mode; + fetchRanking(); + } }, ); @@ -428,11 +767,12 @@ justify-content: space-between; padding: 0 40px; position: relative; - z-index: 10; + z-index: 100; background: linear-gradient(to bottom, rgba(10, 25, 51, 0.8), transparent); .header-left { - flex: 1; + flex: 0 0 auto; + min-width: 240px; .current-time { font-size: 24px; font-weight: 300; @@ -443,9 +783,14 @@ } .header-center { - flex: 2; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 60%; display: flex; justify-content: center; + pointer-events: none; .title-bg { position: relative; @@ -482,11 +827,14 @@ } .header-right { - flex: 1; + flex: 0 0 auto; display: flex; justify-content: flex-end; align-items: center; gap: 20px; + flex-wrap: nowrap; + position: relative; + z-index: 30; .style-switcher { display: flex; @@ -494,12 +842,26 @@ gap: 8px; background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(0, 242, 255, 0.2); - padding: 8px 15px; + height: 38px; + padding: 0 14px; border-radius: 4px; cursor: pointer; color: #a5d8ff; font-size: 14px; transition: all 0.3s; + box-sizing: border-box; + flex-shrink: 0; + white-space: nowrap; + + span { + line-height: 1; + } + + :deep(.el-icon) { + display: inline-flex; + align-items: center; + justify-content: center; + } &:hover { background: rgba(0, 242, 255, 0.1); @@ -509,10 +871,48 @@ } } + .gender-toggle { + display: flex; + height: 38px; + background: rgba(255, 255, 255, 0.05); + border: 1px solid rgba(0, 242, 255, 0.2); + border-radius: 4px; + overflow: hidden; + box-sizing: border-box; + flex-shrink: 0; + + .toggle-item { + display: flex; + align-items: center; + padding: 0 12px; + font-size: 14px; + color: #a5d8ff; + cursor: pointer; + user-select: none; + transition: all 0.2s; + border-right: 1px solid rgba(0, 242, 255, 0.12); + line-height: 1; + + &:last-child { + border-right: none; + } + + &.active { + color: #00f2ff; + background: rgba(0, 242, 255, 0.12); + } + + &:hover { + background: rgba(0, 242, 255, 0.08); + } + } + } + .store-selector { background: rgba(0, 242, 255, 0.1); border: 1px solid rgba(0, 242, 255, 0.3); - padding: 8px 20px; + height: 38px; + padding: 0 14px; border-radius: 4px; cursor: pointer; display: flex; @@ -520,6 +920,10 @@ gap: 12px; position: relative; transition: all 0.3s; + box-sizing: border-box; + user-select: none; + z-index: 40; + flex-shrink: 0; &:hover { background: rgba(0, 242, 255, 0.2); @@ -529,15 +933,24 @@ .store-label { font-size: 14px; color: #a5d8ff; + line-height: 1; } .store-name { - font-size: 20px; + font-size: 16px; font-weight: 600; color: #00f2ff; + max-width: 180px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + line-height: 1; } .arrow-icon { + display: inline-flex; + align-items: center; + justify-content: center; transition: transform 0.3s; &.rotate { transform: rotate(180deg); @@ -546,7 +959,7 @@ .store-menu { position: absolute; - top: 110%; + top: calc(100% + 8px); right: 0; width: 200px; background: #0a1933; @@ -554,12 +967,13 @@ border-radius: 4px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5); padding: 10px 0; - z-index: 100; + z-index: 200; .store-item { padding: 12px 20px; transition: all 0.3s; font-size: 16px; + cursor: pointer; &:hover { background: rgba(0, 242, 255, 0.1); @@ -586,6 +1000,12 @@ flex-direction: column; min-height: 0; /* 确保子元素 flex 正确 */ + &.split { + flex-direction: row; + gap: 24px; + padding: 20px 40px; + } + .side-decoration { position: absolute; top: 50%; @@ -641,7 +1061,7 @@ letter-spacing: 3px; border-bottom: 2px solid rgba(0, 242, 255, 0.3); position: relative; - z-index: 10; + z-index: 1; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); div { @@ -662,6 +1082,44 @@ } } + .split-wrapper { + display: flex; + flex-direction: row; + gap: 24px; + padding: 18px; + box-sizing: border-box; + + .split-column { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + } + + .gender-title { + font-size: 18px; + font-weight: 700; + color: #00f2ff; + letter-spacing: 2px; + margin: 0 0 10px 6px; + text-shadow: 0 0 12px rgba(0, 242, 255, 0.25); + opacity: 0.9; + } + + .list-header { + border-radius: 10px; + margin-bottom: 10px; + } + + .list-body { + border-radius: 10px; + background: rgba(255, 255, 255, 0.01); + border: 1px solid rgba(0, 242, 255, 0.12); + overflow: hidden; + padding: 10px 0; + } + } + .scroll-content { display: flex; flex-direction: column; diff --git a/admin/src/views/display/RankingBoardOrange.vue b/admin/src/views/display/RankingBoardOrange.vue index 5fe7e20a..db567c41 100644 --- a/admin/src/views/display/RankingBoardOrange.vue +++ b/admin/src/views/display/RankingBoardOrange.vue @@ -21,7 +21,21 @@ 切换经典风格
-
+
+
+ 男女分榜 +
+
+ 全部 +
+
+
场馆: {{ currentStore?.name || "未选择" }} @@ -42,173 +56,455 @@
-
- -
-
HALL OF FAME
-
- -
-
NO.2
-
- - {{ rankingList[1].realName?.[0] || "?" }} - -
🥈
-
-
-
{{ rankingList[1].realName }}
-
{{ rankingList[1].powerScore }}
-
- {{ rankingList[1].levelName }} - {{ - Math.round( - (rankingList[1].matchCount * rankingList[1].winRate) / - 100, - ) - }}胜 +
+
+
+
男子榜
+
+
+
+
NO.2
+
+ + {{ rankingListMale[1].realName?.[0] || "?" }} + +
🥈
+
+
+
{{ rankingListMale[1].realName }}
+
{{ rankingListMale[1].powerScore }}
+
+
+ +
+
NO.1
+
+ + {{ rankingListMale[0].realName?.[0] || "?" }} + +
👑
+
+
+
{{ rankingListMale[0].realName }}
+
{{ rankingListMale[0].powerScore }}
+
+
+ +
+
NO.3
+
+ + {{ rankingListMale[2].realName?.[0] || "?" }} + +
🥉
+
+
+
{{ rankingListMale[2].realName }}
+
{{ rankingListMale[2].powerScore }}
+
- -
-
CHAMPION
-
- - {{ rankingList[0].realName?.[0] || "?" }} - -
👑
-
-
-
{{ rankingList[0].realName }}
-
{{ rankingList[0].powerScore }}
-
- {{ rankingList[0].levelName }} - {{ - Math.round( - (rankingList[0].matchCount * rankingList[0].winRate) / - 100, - ) - }}胜 +
+
+
MEN
+
+ 同步中 +
+
+
+
+
+
+
+
{{ player.rank }}
+
+ + {{ player.realName?.[0] || "?" }} + +
+
+
{{ player.realName }}
+
+ {{ player.levelName }} + {{ + Math.round( + (player.matchCount * player.winRate) / 100, + ) + }}胜 + {{ player.winRate }}% +
+
+
{{ player.powerScore }}
+
+
+
+
+
{{ player.rank }}
+
+ + {{ player.realName?.[0] || "?" }} + +
+
+
{{ player.realName }}
+
+ {{ player.levelName }} + {{ + Math.round( + (player.matchCount * player.winRate) / 100, + ) + }}胜 + {{ player.winRate }}% +
+
+
{{ player.powerScore }}
+
+
+
+
+
+
+
+
+ +
+
女子榜
+
+
+
+
NO.2
+
+ + {{ rankingListFemale[1].realName?.[0] || "?" }} + +
🥈
+
+
+
{{ rankingListFemale[1].realName }}
+
{{ rankingListFemale[1].powerScore }}
+
+
+ +
+
NO.1
+
+ + {{ rankingListFemale[0].realName?.[0] || "?" }} + +
👑
+
+
+
{{ rankingListFemale[0].realName }}
+
{{ rankingListFemale[0].powerScore }}
+
+
+ +
+
NO.3
+
+ + {{ rankingListFemale[2].realName?.[0] || "?" }} + +
🥉
+
+
+
{{ rankingListFemale[2].realName }}
+
{{ rankingListFemale[2].powerScore }}
+
-
- -
-
NO.3
-
- - {{ rankingList[2].realName?.[0] || "?" }} - -
🥉
-
-
-
{{ rankingList[2].realName }}
-
{{ rankingList[2].powerScore }}
-
- {{ rankingList[2].levelName }} - {{ - Math.round( - (rankingList[2].matchCount * rankingList[2].winRate) / - 100, - ) - }}胜 +
+
+
WOMEN
+
+ 同步中
+
+
+
+
+
+
{{ player.rank }}
+
+ + {{ player.realName?.[0] || "?" }} + +
+
+
{{ player.realName }}
+
+ {{ player.levelName }} + {{ + Math.round( + (player.matchCount * player.winRate) / 100, + ) + }}胜 + {{ player.winRate }}% +
+
+
{{ player.powerScore }}
+
+
+
+
+
{{ player.rank }}
+
+ + {{ player.realName?.[0] || "?" }} + +
+
+
{{ player.realName }}
+
+ {{ player.levelName }} + {{ + Math.round( + (player.matchCount * player.winRate) / 100, + ) + }}胜 + {{ player.winRate }}% +
+
+
{{ player.powerScore }}
+
+
+
+
+
+
- -
-
-
CONTENDERS
-
- 同步中 -
-
- -
-
-
- -
-
-
{{ player.rank }}
-
- - {{ player.realName?.[0] || "?" }} - -
-
-
{{ player.realName }}
-
- {{ player.levelName }} - {{ - Math.round( - (player.matchCount * player.winRate) / 100, - ) - }}胜 - {{ player.winRate }}% -
-
-
{{ player.powerScore }}
+
@@ -234,47 +530,52 @@ const stores = ref([]); const currentStore = ref(null); const rankingList = ref([]); + const genderMode = ref(route.query.gender_mode === "all" ? "all" : "split"); + const rankingListMale = ref([]); + const rankingListFemale = ref([]); const loading = ref(false); const showStoreMenu = ref(false); const scrollContainer = ref(null); const isRefreshing = ref(false); let timer = null; let refreshTimer = null; + let handleWindowClick = null; const group1 = ref(null); const scrollReqId = ref(null); const scrollY = ref(0); + const groupMale = ref(null); + const groupFemale = ref(null); + const scrollReqIdMale = ref(null); + const scrollReqIdFemale = ref(null); + const scrollYMale = ref(0); + const scrollYFemale = ref(0); const updateTime = () => { currentTime.value = dayjs().format("HH:mm:ss"); }; - const startContinuousScroll = () => { - if (scrollReqId.value) cancelAnimationFrame(scrollReqId.value); + const startContinuousScroll = (listRef, scrollYRef, reqIdRef, groupRef) => { + if (reqIdRef.value) cancelAnimationFrame(reqIdRef.value); const scroll = () => { - if ( - isRefreshing.value || - rankingList.value.length <= 3 || - !group1.value - ) { - scrollReqId.value = requestAnimationFrame(scroll); + if (isRefreshing.value || listRef.value.length <= 3 || !groupRef.value) { + reqIdRef.value = requestAnimationFrame(scroll); return; } - scrollY.value -= 0.6; + scrollYRef.value -= 0.6; - // 直接获取第一组数据的高度,最准确 - const singleSetHeight = group1.value.offsetHeight + 12; // 高度 + gap + const singleSetHeight = groupRef.value.offsetHeight + 12; - if (Math.abs(scrollY.value) >= singleSetHeight) { - scrollY.value = 0; + if (Math.abs(scrollYRef.value) >= singleSetHeight) { + scrollYRef.value = 0; } - scrollReqId.value = requestAnimationFrame(scroll); + reqIdRef.value = requestAnimationFrame(scroll); }; setTimeout(() => { - scrollReqId.value = requestAnimationFrame(scroll); + reqIdRef.value = requestAnimationFrame(scroll); }, 1000); }; @@ -296,18 +597,75 @@ } }; + const setGenderMode = (mode) => { + if (mode !== "split" && mode !== "all") return; + if (genderMode.value === mode) return; + genderMode.value = mode; + router.replace({ query: { ...route.query, gender_mode: mode } }); + fetchRanking(); + }; + const fetchRanking = async () => { if (!currentStore.value) return; isRefreshing.value = true; try { - const res = await getPublicRanking({ - store_id: currentStore.value.id, - pageSize: 100, - is_display: 1, - }); - rankingList.value = res.data?.list || []; - if (rankingList.value.length > 3) { - nextTick(() => startContinuousScroll()); + if (genderMode.value === "split") { + const [maleRes, femaleRes] = await Promise.all([ + getPublicRanking({ + store_id: currentStore.value.id, + gender: 1, + pageSize: 100, + is_display: 1, + }), + getPublicRanking({ + store_id: currentStore.value.id, + gender: 2, + pageSize: 100, + is_display: 1, + }), + ]); + + rankingListMale.value = maleRes.data?.list || []; + rankingListFemale.value = femaleRes.data?.list || []; + scrollYMale.value = 0; + scrollYFemale.value = 0; + + if ( + rankingListMale.value.length > 3 || + rankingListFemale.value.length > 3 + ) { + nextTick(() => { + if (rankingListMale.value.length > 3) { + startContinuousScroll( + rankingListMale, + scrollYMale, + scrollReqIdMale, + groupMale, + ); + } + if (rankingListFemale.value.length > 3) { + startContinuousScroll( + rankingListFemale, + scrollYFemale, + scrollReqIdFemale, + groupFemale, + ); + } + }); + } + } else { + const res = await getPublicRanking({ + store_id: currentStore.value.id, + pageSize: 100, + is_display: 1, + }); + rankingList.value = res.data?.list || []; + scrollY.value = 0; + if (rankingList.value.length > 3) { + nextTick(() => { + startContinuousScroll(rankingList, scrollY, scrollReqId, group1); + }); + } } } catch (err) { console.error("Fetch ranking error:", err); @@ -322,7 +680,13 @@ const selectStore = (store) => { currentStore.value = store; showStoreMenu.value = false; - router.replace({ query: { ...route.query, store_id: store.id } }); + router.replace({ + query: { + ...route.query, + store_id: store.id, + gender_mode: genderMode.value, + }, + }); fetchRanking(); }; @@ -330,16 +694,40 @@ fetchStores(); timer = setInterval(updateTime, 1000); refreshTimer = setInterval(fetchRanking, 30 * 1000); - window.addEventListener("click", () => { + handleWindowClick = () => { showStoreMenu.value = false; - }); + }; + window.addEventListener("click", handleWindowClick); }); onUnmounted(() => { if (timer) clearInterval(timer); if (refreshTimer) clearInterval(refreshTimer); if (scrollReqId.value) cancelAnimationFrame(scrollReqId.value); + if (scrollReqIdMale.value) cancelAnimationFrame(scrollReqIdMale.value); + if (scrollReqIdFemale.value) cancelAnimationFrame(scrollReqIdFemale.value); + if (handleWindowClick) { + window.removeEventListener("click", handleWindowClick); + } }); + + watch( + () => [route.query.store_id, route.query.gender_mode], + ([newStoreId, newMode]) => { + const mode = newMode === "all" ? "all" : "split"; + if (mode !== genderMode.value) { + genderMode.value = mode; + fetchRanking(); + } + + if (!newStoreId) return; + const found = stores.value.find((s) => s.id === parseInt(newStoreId)); + if (found && found.id !== currentStore.value?.id) { + currentStore.value = found; + fetchRanking(); + } + }, + ); diff --git a/miniprogram/app.js b/miniprogram/app.js index 1afb139f..210e7a52 100644 --- a/miniprogram/app.js +++ b/miniprogram/app.js @@ -89,29 +89,38 @@ App({ if (loginRes.data.code === 0) { this.globalData.token = loginRes.data.data.token; this.globalData.userInfo = loginRes.data.data.userInfo; - + // 处理天梯用户信息 - if (loginRes.data.data.userInfo.ladderUsers && loginRes.data.data.userInfo.ladderUsers.length > 0) { + if ( + loginRes.data.data.userInfo.ladderUsers && + loginRes.data.data.userInfo.ladderUsers.length > 0 + ) { // 如果有当前门店,优先选择当前门店的天梯用户 - if (this.globalData.currentStore && this.globalData.currentStore.storeId) { - const currentStoreLadderUser = loginRes.data.data.userInfo.ladderUsers.find( - lu => lu.storeId === this.globalData.currentStore.storeId - ); + if ( + this.globalData.currentStore && + this.globalData.currentStore.storeId + ) { + const currentStoreLadderUser = + loginRes.data.data.userInfo.ladderUsers.find( + (lu) => lu.storeId === this.globalData.currentStore.storeId, + ); if (currentStoreLadderUser) { this.globalData.ladderUser = currentStoreLadderUser; } else { // 当前门店没有天梯用户,取第一个 - this.globalData.ladderUser = loginRes.data.data.userInfo.ladderUsers[0]; + this.globalData.ladderUser = + loginRes.data.data.userInfo.ladderUsers[0]; } } else { // 没有当前门店,取第一个天梯用户 - this.globalData.ladderUser = loginRes.data.data.userInfo.ladderUsers[0]; + this.globalData.ladderUser = + loginRes.data.data.userInfo.ladderUsers[0]; } } else { // 没有天梯用户 this.globalData.ladderUser = null; } - + wx.setStorageSync("token", loginRes.data.data.token); this.connectWebSocket(); resolve(loginRes.data.data); @@ -135,13 +144,16 @@ App({ this.request("/api/user/info") .then((res) => { this.globalData.userInfo = res.data; - + // 处理天梯用户信息 if (res.data.ladderUsers && res.data.ladderUsers.length > 0) { // 如果有当前门店,优先选择当前门店的天梯用户 - if (this.globalData.currentStore && this.globalData.currentStore.storeId) { + if ( + this.globalData.currentStore && + this.globalData.currentStore.storeId + ) { const currentStoreLadderUser = res.data.ladderUsers.find( - lu => lu.storeId === this.globalData.currentStore.storeId + (lu) => lu.storeId === this.globalData.currentStore.storeId, ); if (currentStoreLadderUser) { this.globalData.ladderUser = currentStoreLadderUser; @@ -157,7 +169,7 @@ App({ // 没有天梯用户 this.globalData.ladderUser = null; } - + this.connectWebSocket(); resolve(res.data); }) @@ -177,16 +189,20 @@ App({ }) .then((res) => { this.globalData.currentStore = res.data; - + // 如果当前门店有 ladderUserId,获取该门店的天梯用户信息 if (res.data && res.data.ladderUserId) { this.getLadderUser(res.data.storeId); } else if (res.data && res.data.storeId) { // 如果当前门店没有 ladderUserId,但用户信息中有该门店的天梯用户,使用它 - if (this.globalData.userInfo && this.globalData.userInfo.ladderUsers) { - const currentStoreLadderUser = this.globalData.userInfo.ladderUsers.find( - lu => lu.storeId === res.data.storeId - ); + if ( + this.globalData.userInfo && + this.globalData.userInfo.ladderUsers + ) { + const currentStoreLadderUser = + this.globalData.userInfo.ladderUsers.find( + (lu) => lu.storeId === res.data.storeId, + ); if (currentStoreLadderUser) { this.globalData.ladderUser = currentStoreLadderUser; } else { @@ -195,7 +211,7 @@ App({ } } } - + resolve(res.data); }) .catch(reject); @@ -205,16 +221,20 @@ App({ this.request("/api/user/current-store") .then((res) => { this.globalData.currentStore = res.data; - + // 如果当前门店有 ladderUserId,获取该门店的天梯用户信息 if (res.data && res.data.ladderUserId) { this.getLadderUser(res.data.storeId); } else if (res.data && res.data.storeId) { // 如果当前门店没有 ladderUserId,但用户信息中有该门店的天梯用户,使用它 - if (this.globalData.userInfo && this.globalData.userInfo.ladderUsers) { - const currentStoreLadderUser = this.globalData.userInfo.ladderUsers.find( - lu => lu.storeId === res.data.storeId - ); + if ( + this.globalData.userInfo && + this.globalData.userInfo.ladderUsers + ) { + const currentStoreLadderUser = + this.globalData.userInfo.ladderUsers.find( + (lu) => lu.storeId === res.data.storeId, + ); if (currentStoreLadderUser) { this.globalData.ladderUser = currentStoreLadderUser; } else { @@ -223,7 +243,7 @@ App({ } } } - + resolve(res.data); }) .catch(reject); @@ -243,7 +263,7 @@ App({ this.globalData.ladderUser = null; } return res.data; - } + }, ); }, @@ -299,9 +319,12 @@ App({ const challengeData = data.data; const pages = getCurrentPages(); const currentPage = pages[pages.length - 1]; - + // 如果当前页面有处理挑战请求的方法,调用它 - if (currentPage && typeof currentPage.handleChallengeRequest === 'function') { + if ( + currentPage && + typeof currentPage.handleChallengeRequest === "function" + ) { currentPage.handleChallengeRequest(challengeData); } else { // 否则使用系统弹框 @@ -317,42 +340,47 @@ App({ match_id: challengeData.matchId, accept: res.confirm, }, - "POST" - ).then(() => { - if (res.confirm) { - wx.showToast({ title: '已接受挑战', icon: 'success' }); - // 跳转到挑战赛详情 - setTimeout(() => { - wx.navigateTo({ - url: `/pages/match/challenge-detail/index?id=${challengeData.matchId}` - }); - }, 1500); - } else { - wx.showToast({ title: '已拒绝挑战', icon: 'success' }); - } - }).catch(err => { - console.error('响应挑战失败:', err); - wx.showToast({ title: '操作失败', icon: 'none' }); - }); + "POST", + ) + .then(() => { + if (res.confirm) { + wx.showToast({ title: "已接受挑战", icon: "success" }); + // 跳转到挑战赛详情 + setTimeout(() => { + wx.navigateTo({ + url: `/pages/match/challenge-detail/index?id=${challengeData.matchId}`, + }); + }, 1500); + } else { + wx.showToast({ title: "已拒绝挑战", icon: "success" }); + } + }) + .catch((err) => { + console.error("响应挑战失败:", err); + wx.showToast({ title: "操作失败", icon: "none" }); + }); }, }); } break; case "challenge_accepted": // 挑战被接受 - wx.showToast({ title: '对方已接受挑战', icon: 'success' }); + wx.showToast({ title: "对方已接受挑战", icon: "success" }); // 如果当前在挑战赛详情页面,刷新数据 const pages2 = getCurrentPages(); const currentPage2 = pages2[pages2.length - 1]; - if (currentPage2 && currentPage2.route === 'pages/match/challenge-detail/index') { - if (typeof currentPage2.loadMatchDetail === 'function') { + if ( + currentPage2 && + currentPage2.route === "pages/match/challenge-detail/index" + ) { + if (typeof currentPage2.loadMatchDetail === "function") { currentPage2.loadMatchDetail(); } } break; case "challenge_rejected": // 挑战被拒绝 - wx.showToast({ title: '对方已拒绝挑战', icon: 'none' }); + wx.showToast({ title: "对方已拒绝挑战", icon: "none" }); break; case "score_confirm_request": // 收到比分确认请求 @@ -368,7 +396,7 @@ App({ game_id: data.data.gameId, confirm: res.confirm, }, - "POST" + "POST", ); }, }); @@ -387,6 +415,12 @@ App({ // 封装请求 request(url, data = {}, method = "GET") { return new Promise((resolve, reject) => { + const showErrorToast = (message) => { + const title = + (message && String(message).trim()) || "网络异常,请稍后重试"; + wx.showToast({ title, icon: "none" }); + }; + wx.request({ url: `${this.globalData.baseUrl}${url}`, method, @@ -401,14 +435,18 @@ App({ // 登录过期 this.globalData.token = null; wx.removeStorageSync("token"); + showErrorToast("登录已过期,请重新登录"); wx.reLaunch({ url: "/pages/user/index" }); - reject(res.data); + reject({ message: res.data.message || "登录已过期", ...res.data }); } else { - wx.showToast({ title: res.data.message, icon: "none" }); - reject(res.data); + showErrorToast(res.data.message || "请求失败"); + reject({ message: res.data.message || "请求失败", ...res.data }); } }, - fail: reject, + fail: (err) => { + showErrorToast("网络异常,请检查网络后重试"); + reject({ message: "网络异常,请检查网络后重试", err }); + }, }); }); }, diff --git a/miniprogram/pages/index/index.js b/miniprogram/pages/index/index.js index 2024f7d3..1282c95f 100644 --- a/miniprogram/pages/index/index.js +++ b/miniprogram/pages/index/index.js @@ -1,15 +1,17 @@ const app = getApp(); const util = require("../../utils/util"); +const ALL_PAGE_SIZE = 5000; + Page({ data: { currentStore: null, gender: "", list: [], loading: false, - page: 1, - pageSize: 20, - hasMore: true, + locating: false, + myLadderUserId: null, + pageSize: ALL_PAGE_SIZE, }, onLoad() { @@ -26,9 +28,8 @@ Page({ if (newStore && newStore.storeId !== oldStoreId) { this.setData({ currentStore: newStore, - page: 1, - hasMore: true, list: [], + myLadderUserId: null, }); this.fetchData(); } else if (app.globalData.storeChanged) { @@ -36,27 +37,20 @@ Page({ app.globalData.storeChanged = false; this.setData({ currentStore: newStore, - page: 1, - hasMore: true, list: [], + myLadderUserId: null, }); this.fetchData(); } }, onPullDownRefresh() { - this.setData({ page: 1, hasMore: true }); + this.setData({ list: [], myLadderUserId: null }); this.fetchData().then(() => { wx.stopPullDownRefresh(); }); }, - onReachBottom() { - if (this.data.hasMore && !this.data.loading) { - this.loadMore(); - } - }, - async initData() { // 检查是否已登录(有 token) if (!app.globalData.token) { @@ -88,14 +82,14 @@ Page({ const res = await app.request("/api/ladder/ranking", { store_id: this.data.currentStore.storeId, gender: this.data.gender, - page: this.data.page, + page: 1, pageSize: this.data.pageSize, + no_count: 1, }); const list = res.data.list || []; this.setData({ - list: this.data.page === 1 ? list : this.data.list.concat(list), - hasMore: list.length >= this.data.pageSize, + list, }); } catch (e) { console.error("获取排名失败:", e); @@ -104,14 +98,9 @@ Page({ } }, - loadMore() { - this.setData({ page: this.data.page + 1 }); - this.fetchData(); - }, - setGender(e) { const gender = e.currentTarget.dataset.gender; - this.setData({ gender, page: 1, hasMore: true }); + this.setData({ gender, list: [], myLadderUserId: null }); this.fetchData(); }, @@ -119,6 +108,85 @@ Page({ wx.navigateTo({ url: "/pages/store/index" }); }, + scrollToMeInMiddle(tryCount = 0) { + const id = this.data.myLadderUserId; + if (!id) return; + + const selector = `#player-${id}`; + const systemInfo = wx.getSystemInfoSync(); + const windowHeight = + systemInfo && systemInfo.windowHeight ? systemInfo.windowHeight : 0; + + wx.createSelectorQuery() + .select(selector) + .boundingClientRect() + .selectViewport() + .scrollOffset() + .exec((res) => { + const rect = res && res[0] ? res[0] : null; + const scroll = res && res[1] ? res[1] : null; + if (!rect || !scroll || typeof scroll.scrollTop !== "number") { + if (tryCount < 10) { + setTimeout(() => { + this.scrollToMeInMiddle(tryCount + 1); + }, 100); + } + return; + } + + const targetScrollTop = + scroll.scrollTop + rect.top - windowHeight / 2 + rect.height / 2; + + wx.pageScrollTo({ + scrollTop: Math.max(0, targetScrollTop), + duration: 300, + }); + }); + }, + + async locateMe() { + if (!this.data.currentStore || !this.data.currentStore.storeId) return; + if (this.data.locating) return; + + this.setData({ locating: true }); + try { + const res = await app.request("/api/ladder/my-rank", { + store_id: this.data.currentStore.storeId, + gender: this.data.gender, + }); + + const data = res && res.data ? res.data : null; + if (!data) return; + + if (data.qualified === false) { + wx.showToast({ + title: `本月场次不足(${data.monthlyMatchCount}/${data.minMonthlyMatches})`, + icon: "none", + }); + return; + } + + if (!data.ladderUserId || !data.page) { + return; + } + + const shouldRefetch = !this.data.list || this.data.list.length === 0; + this.setData({ myLadderUserId: data.ladderUserId }); + + if (shouldRefetch) { + await this.fetchData(); + } + + setTimeout(() => { + this.scrollToMeInMiddle(); + }, 50); + } catch (e) { + console.error("定位我的排名失败:", e); + } finally { + this.setData({ locating: false }); + } + }, + viewPlayer(e) { const player = e.currentTarget.dataset.player; const id = player && player.id ? player.id : e.currentTarget.dataset.id; diff --git a/miniprogram/pages/index/index.wxml b/miniprogram/pages/index/index.wxml index 45a47157..49668f91 100644 --- a/miniprogram/pages/index/index.wxml +++ b/miniprogram/pages/index/index.wxml @@ -1,10 +1,9 @@ - + - @@ -16,62 +15,43 @@ - 天梯排名 挑战自我,超越巅峰 - - - 全部 + + + 全部 + + + 男子 + + + 女子 + - - 男子 - - - 女子 + + {{locating ? '定位中' : '定位我'}} - - + {{item.rank}} - - {{item.realName}} @@ -80,7 +60,6 @@ 胜率 {{item.winRate}}% - {{item.powerScore}} @@ -88,23 +67,20 @@ - 暂无排名数据 每月完成3场比赛即可上榜 - 加载中... - - + — 已显示全部选手 — - + \ No newline at end of file diff --git a/miniprogram/pages/index/index.wxss b/miniprogram/pages/index/index.wxss index 2965a154..d19a9415 100644 --- a/miniprogram/pages/index/index.wxss +++ b/miniprogram/pages/index/index.wxss @@ -132,6 +132,13 @@ /* 筛选标签栏 */ .filter-bar { + display: flex; + align-items: center; + gap: 16rpx; +} + +.filter-items { + flex: 1; display: flex; gap: 16rpx; } @@ -159,6 +166,28 @@ transform: scale(0.96); } +.locate-btn { + flex-shrink: 0; + padding: 20rpx 26rpx; + background: var(--bg-white); + border-radius: var(--radius-full); + text-align: center; + font-size: 26rpx; + color: var(--primary); + box-shadow: var(--shadow-sm); + border: 1rpx solid var(--border-primary); + font-weight: 600; + transition: all 0.3s ease; +} + +.locate-btn:active { + transform: scale(0.96); +} + +.locate-btn.disabled { + opacity: 0.6; +} + /* 排名列表 */ .ranking-list { padding: 0 24rpx 40rpx; @@ -186,11 +215,20 @@ } .ranking-item.top-rank { - background: linear-gradient(135deg, var(--primary-soft) 0%, var(--bg-white) 100%); + background: linear-gradient( + 135deg, + var(--primary-soft) 0%, + var(--bg-white) 100% + ); border: 2rpx solid var(--border-primary); box-shadow: var(--shadow-primary); } +.ranking-item.is-me { + border: 2rpx solid rgba(255, 107, 53, 0.55); + box-shadow: 0 10rpx 28rpx rgba(255, 107, 53, 0.18); +} + /* 排名徽章 */ .rank-badge { width: 56rpx; @@ -206,8 +244,8 @@ } .rank-badge.top1 { - background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%); - color: #8B4513; + background: linear-gradient(135deg, #ffd700 0%, #ffa500 100%); + color: #8b4513; box-shadow: 0 6rpx 20rpx rgba(255, 215, 0, 0.5); font-size: 32rpx; width: 64rpx; @@ -215,8 +253,8 @@ } .rank-badge.top2 { - background: linear-gradient(135deg, #E8E8E8 0%, #C0C0C0 100%); - color: #4A4A4A; + background: linear-gradient(135deg, #e8e8e8 0%, #c0c0c0 100%); + color: #4a4a4a; box-shadow: 0 4rpx 16rpx rgba(192, 192, 192, 0.5); font-size: 32rpx; width: 64rpx; @@ -224,7 +262,7 @@ } .rank-badge.top3 { - background: linear-gradient(135deg, #CD853F 0%, #B8860B 100%); + background: linear-gradient(135deg, #cd853f 0%, #b8860b 100%); color: #fff; box-shadow: 0 4rpx 16rpx rgba(205, 133, 63, 0.5); font-size: 32rpx; @@ -233,7 +271,11 @@ } .rank-badge.normal { - background: linear-gradient(135deg, var(--bg-soft) 0%, var(--bg-card-hover) 100%); + background: linear-gradient( + 135deg, + var(--bg-soft) 0%, + var(--bg-card-hover) 100% + ); color: var(--text-secondary); font-weight: 600; } @@ -284,11 +326,26 @@ line-height: 1.2; } -.player-level.lv1 { background: #E8F5E9; color: #2E7D32; } -.player-level.lv2 { background: #E3F2FD; color: #1565C0; } -.player-level.lv3 { background: #FFF3E0; color: #E65100; } -.player-level.lv4 { background: #FCE4EC; color: #C2185B; } -.player-level.lv5 { background: #F3E5F5; color: #7B1FA2; } +.player-level.lv1 { + background: #e8f5e9; + color: #2e7d32; +} +.player-level.lv2 { + background: #e3f2fd; + color: #1565c0; +} +.player-level.lv3 { + background: #fff3e0; + color: #e65100; +} +.player-level.lv4 { + background: #fce4ec; + color: #c2185b; +} +.player-level.lv5 { + background: #f3e5f5; + color: #7b1fa2; +} .player-stats { font-size: 24rpx; @@ -360,4 +417,3 @@ color: var(--text-muted); font-size: 26rpx; } - diff --git a/miniprogram/pages/user/index.js b/miniprogram/pages/user/index.js index 34b1eb32..28f61eff 100644 --- a/miniprogram/pages/user/index.js +++ b/miniprogram/pages/user/index.js @@ -13,8 +13,26 @@ Page({ profileForm: { avatar: "", nickname: "", + gender: 0, }, isEditMode: false, // true: 编辑模式,false: 完善模式(登录时) + + showGenderModal: false, + registerGender: 0, + }, + + normalizeLadderUser(ladderUser) { + if (!ladderUser) return null; + const matchCount = Number(ladderUser.matchCount || 0); + const winCount = Number(ladderUser.winCount || 0); + const loseCount = Math.max(matchCount - winCount, 0); + const winRate = matchCount > 0 ? Math.round((winCount / matchCount) * 100) : 0; + return Object.assign({}, ladderUser, { + matchCount, + winCount, + loseCount, + winRate, + }); }, onLoad() { @@ -30,7 +48,7 @@ Page({ // 同步最新数据 this.setData({ userInfo: app.globalData.userInfo, - ladderUser: app.globalData.ladderUser, + ladderUser: this.normalizeLadderUser(app.globalData.ladderUser), currentStore: app.globalData.currentStore, }); } @@ -80,7 +98,7 @@ Page({ this.setData({ userInfo: app.globalData.userInfo, - ladderUser: app.globalData.ladderUser, + ladderUser: this.normalizeLadderUser(app.globalData.ladderUser), currentStore: app.globalData.currentStore, }); } catch (e) { @@ -95,16 +113,35 @@ Page({ return; } - wx.showLoading({ title: "登录中..." }); - try { + wx.showLoading({ title: "登录中..." }); + // 如果没有微信登录信息,先登录 if (!app.globalData.wxLoginInfo) { await app.wxLogin(); } - // 手机号登录(先不传头像昵称) - await app.phoneLogin(e.detail.encryptedData, e.detail.iv, null); + const needGender = + app.globalData.wxLoginInfo && app.globalData.wxLoginInfo.isNewUser; + + if ( + needGender && + !(this.data.registerGender === 1 || this.data.registerGender === 2) + ) { + this._pendingPhoneLogin = { + encryptedData: e.detail.encryptedData, + iv: e.detail.iv, + }; + wx.hideLoading(); + this.setData({ showGenderModal: true }); + return; + } + + await this.doPhoneLogin( + e.detail.encryptedData, + e.detail.iv, + needGender ? this.data.registerGender : 0, + ); // 获取门店信息 await app.getCurrentStore(); @@ -113,12 +150,10 @@ Page({ this.setData({ userInfo: userInfo, - ladderUser: app.globalData.ladderUser, + ladderUser: this.normalizeLadderUser(app.globalData.ladderUser), currentStore: app.globalData.currentStore, }); - wx.hideLoading(); - // 检查是否需要完善资料(没有头像或昵称为默认值) const needProfile = !userInfo.avatar || @@ -143,12 +178,89 @@ Page({ wx.showToast({ title: "登录成功", icon: "success" }); } } catch (e) { - wx.hideLoading(); console.error("登录失败:", e); wx.showToast({ title: e.message || "登录失败", icon: "none" }); + } finally { + wx.hideLoading(); } }, + async doPhoneLogin(encryptedData, iv, gender) { + const g = gender === 1 || gender === 2 ? gender : 0; + await app.phoneLogin(encryptedData, iv, g ? { gender: g } : null); + this._pendingPhoneLogin = null; + this.setData({ showGenderModal: false }); + }, + + onSelectRegisterGender(e) { + const gender = Number(e.currentTarget.dataset.gender); + if (gender !== 1 && gender !== 2) return; + this.setData({ registerGender: gender }); + }, + + async onConfirmRegisterGender() { + if (!(this.data.registerGender === 1 || this.data.registerGender === 2)) { + wx.showToast({ title: "请选择性别", icon: "none" }); + return; + } + + const pending = this._pendingPhoneLogin; + if (!pending) { + this.setData({ showGenderModal: false }); + return; + } + + wx.showLoading({ title: "登录中..." }); + try { + await this.doPhoneLogin( + pending.encryptedData, + pending.iv, + this.data.registerGender, + ); + + await app.getCurrentStore(); + const userInfo = app.globalData.userInfo; + this.setData({ + userInfo: userInfo, + ladderUser: this.normalizeLadderUser(app.globalData.ladderUser), + currentStore: app.globalData.currentStore, + }); + + const needProfile = + !userInfo.avatar || + userInfo.avatar === "" || + !userInfo.nickname || + userInfo.nickname === "新用户" || + userInfo.nickname === ""; + + if (needProfile) { + this.setData({ + showProfileModal: true, + isEditMode: false, + profileForm: { + avatar: userInfo.avatar || "/images/avatar-default.svg", + nickname: + userInfo.nickname === "新用户" ? "" : userInfo.nickname || "", + gender: userInfo.gender || 0, + }, + }); + wx.showToast({ title: "登录成功,请完善资料", icon: "none" }); + } else { + wx.showToast({ title: "登录成功", icon: "success" }); + } + } catch (e) { + console.error("登录失败:", e); + wx.showToast({ title: e.message || "登录失败", icon: "none" }); + } finally { + wx.hideLoading(); + } + }, + + onCancelRegisterGender() { + this._pendingPhoneLogin = null; + this.setData({ showGenderModal: false, registerGender: 0 }); + }, + // 点击头像,打开编辑资料弹框 onTapAvatar() { if (!this.data.userInfo || !this.data.userInfo.phone) return; @@ -159,6 +271,7 @@ Page({ profileForm: { avatar: this.data.userInfo.avatar || "/images/avatar-default.svg", nickname: this.data.userInfo.nickname || "", + gender: this.data.userInfo.gender || 0, }, }); }, @@ -178,9 +291,17 @@ Page({ }); }, + onProfileGenderSelect(e) { + const gender = Number(e.currentTarget.dataset.gender); + if (gender !== 1 && gender !== 2) return; + this.setData({ + "profileForm.gender": gender, + }); + }, + // 确认保存资料 async saveProfile() { - const { avatar, nickname } = this.data.profileForm; + const { avatar, nickname, gender } = this.data.profileForm; if (!nickname || nickname.trim() === "") { wx.showToast({ title: "请输入昵称", icon: "none" }); @@ -200,26 +321,28 @@ Page({ } // 调用更新资料接口 - const res = await app.request( - "/api/user/profile", - { - nickname: nickname.trim(), - avatar: avatarUrl, - }, - "PUT", - ); + const payload = { + nickname: nickname.trim(), + avatar: avatarUrl, + }; + if (gender === 1 || gender === 2) { + payload.gender = gender; + } + + const res = await app.request("/api/user/profile", payload, "PUT"); // 更新本地数据(服务端已返回完整URL) const userInfo = Object.assign({}, this.data.userInfo, { nickname: (res.data && res.data.nickname) || nickname.trim(), avatar: (res.data && res.data.avatar) || avatarUrl, + gender: (res.data && res.data.gender) || this.data.userInfo.gender || 0, }); app.globalData.userInfo = userInfo; this.setData({ userInfo: userInfo, showProfileModal: false, - profileForm: { avatar: "", nickname: "" }, + profileForm: { avatar: "", nickname: "", gender: 0 }, }); wx.hideLoading(); diff --git a/miniprogram/pages/user/index.wxml b/miniprogram/pages/user/index.wxml index 99ce10b6..ddb02dc3 100644 --- a/miniprogram/pages/user/index.wxml +++ b/miniprogram/pages/user/index.wxml @@ -101,15 +101,11 @@ 胜场 - - {{(ladderUser.matchCount || 0) - (ladderUser.winCount || 0)}} - + {{ladderUser.loseCount || 0}} 负场 - - {{(ladderUser.matchCount > 0 && ladderUser.winCount !== null && ladderUser.winCount !== undefined) ? Math.round((Number(ladderUser.winCount) || 0) / Number(ladderUser.matchCount) * 100) : 0}}% - + {{ladderUser.winRate || 0}}% 胜率 @@ -155,6 +151,34 @@ + + + + + 请选择性别 + × + + + + 新用户注册需填写性别 + + + + 👦 + + + + 👧 + + + + + + + + + + @@ -220,6 +244,18 @@ 昵称 + + + 性别 + + + 男 + + + 女 + + +