5 | Vue.js is detected on this page.
6 | Devtools inspection is not available because it's in production mode or
7 | explicitly disabled by the author.
8 |
9 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | # 文档编码格式
5 | charset = utf-8
6 | # 换行符的使用形式(主要是解决window 和 mac或unix 的不同)
7 | end_of_line = lf
8 | # 缩进的大小
9 | indent_size = 2
10 | # 缩进的方式
11 | indent_style = space
12 | # 文档是否需要以换行结尾(/n)
13 | insert_final_newline = true
14 | # 文件结尾是否允许空格
15 | trim_trailing_whitespace = true
16 |
17 | # 对后缀名为 md 的文件生效
18 | [*.md]
19 | trim_trailing_whitespace = false
--------------------------------------------------------------------------------
/src/popups/popup.css:
--------------------------------------------------------------------------------
1 | body {
2 | font-family: Roboto, Avenir, Helvetica, Arial, sans-serif;
3 | font-size: 14px;
4 | font-weight: 400;
5 | line-height: 1.4;
6 | padding: 10px 12px 12px 12px;
7 | color: #2c3e50;
8 | }
9 |
10 | body,
11 | p {
12 | margin: 0;
13 | }
14 |
15 | p {
16 | min-width: 200px;
17 | max-width: 300px;
18 | }
19 |
20 | .short-paragraph {
21 | min-width: initial;
22 | white-space: nowrap;
23 | }
24 |
--------------------------------------------------------------------------------
/src/utils/index.ts:
--------------------------------------------------------------------------------
1 | import {
2 | VUE_DEVTOOLS_MESSAGE_KEY,
3 | LEGACY_VUE_DEVTOOLS_MESSAGE_KEY,
4 | VueDevtoolsMessage,
5 | LegacyVueDevtoolsMessage,
6 | VueDevtoolsMessageDetail,
7 | } from '../types/message';
8 |
9 | export const unpackVueDevtoolsMessage = (
10 | data: VueDevtoolsMessage | LegacyVueDevtoolsMessage,
11 | ): VueDevtoolsMessageDetail =>
12 | VUE_DEVTOOLS_MESSAGE_KEY === data.key
13 | ? data.data
14 | : LEGACY_VUE_DEVTOOLS_MESSAGE_KEY === data.key
15 | ? data.message
16 | : data;
17 |
--------------------------------------------------------------------------------
/src/plugins/enablePiniaDevtools.ts:
--------------------------------------------------------------------------------
1 | import { devtoolsPlugin, registerPiniaDevtools } from './vendors/pinia';
2 |
3 | export const enablePiniaDevtools = (vueRootInstance, vueVersion) => {
4 | if (vueVersion === 2) {
5 | // There are no plans to support the Vue2 version of Pinia. If needed, please submit an issue and let me know
6 | return;
7 | }
8 |
9 | const pinia = vueRootInstance.config.globalProperties.$pinia;
10 | if (!pinia) return;
11 | pinia.use(devtoolsPlugin);
12 | registerPiniaDevtools(vueRootInstance, pinia);
13 | };
14 |
--------------------------------------------------------------------------------
/src/detector.ts:
--------------------------------------------------------------------------------
1 | import { unpackVueDevtoolsMessage } from './utils/index';
2 |
3 | // Light up my extension icon
4 | window.addEventListener('message', (e) => {
5 | const data = unpackVueDevtoolsMessage(e.data);
6 | if (e.source === window && data.vueDetected) {
7 | chrome.runtime.sendMessage(data);
8 | }
9 | });
10 |
11 | const script = document.createElement('script');
12 | script.src = chrome.runtime.getURL('detectorExec.js');
13 | script.onload = () => {
14 | script.remove();
15 | };
16 | (document.head || document.documentElement).appendChild(script);
17 |
--------------------------------------------------------------------------------
/src/background.ts:
--------------------------------------------------------------------------------
1 | import type { VueDevtoolsMessageDetail } from './types/message';
2 |
3 | chrome.runtime.onMessage.addListener(
4 | (req: VueDevtoolsMessageDetail, sender) => {
5 | if (sender.tab && req.vueDetected) {
6 | chrome.action.setIcon({
7 | tabId: sender.tab.id,
8 | path: {
9 | 16: `icons/16.png`,
10 | 48: `icons/48.png`,
11 | 128: `icons/128.png`,
12 | },
13 | });
14 | chrome.action.setPopup({
15 | tabId: sender.tab.id,
16 | popup: `popups/enabled.html`,
17 | });
18 | }
19 | },
20 | );
21 |
--------------------------------------------------------------------------------
/src/utils/console.ts:
--------------------------------------------------------------------------------
1 | const COLOR = {
2 | log: '#1475b2',
3 | info: '#606060',
4 | error: '#42b883',
5 | };
6 | const message = ({ type, params }) => {
7 | const LOG_MARK = [
8 | '%c vue-force-dev',
9 | `padding: 1px; border-radius: 0 3px 3px 0; color: #fff; background:${COLOR[type]}`,
10 | ];
11 | console[type](
12 | ...LOG_MARK,
13 | ...params,
14 | '\n\nreport issues: https://github.com/hzmming/vue-force-dev/issues',
15 | );
16 | };
17 |
18 | export function error(...params) {
19 | message({ type: 'error', params });
20 | }
21 |
22 | export function log(...params) {
23 | message({ type: 'log', params });
24 | }
25 |
26 | export function info(...params) {
27 | message({ type: 'info', params });
28 | }
29 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## 2.1.1 (2024-12-08)
2 |
3 | - fix: remove redundant and incomplete judgments
4 |
5 |
6 |
7 | ## 2.1.0 (2024-11-17)
8 |
9 | - feat: support Vue.js devtools 7.6.4
10 |
11 |
12 |
13 | ## 2.0.0 (2024-04-05)
14 |
15 | - feat: migrate to manifest v3 and support Pinia
16 |
17 |
18 |
19 | ## 1.4.0 (2024-03-03)
20 |
21 | - feat: pass the correct symbol value
22 |
23 |
24 |
25 | ## 1.3.0 (2024-03-01)
26 |
27 | - feat: support Vue Devtools v6.6.1
28 |
29 |
30 |
31 | ## 1.2.0 (2023-11-12)
32 |
33 | - feat: Update detector to repeat detections
34 |
35 |
36 |
37 | ## 1.1.0 (2022-10-12)
38 |
39 | - feat: improve the console log
40 | - fix: Vue may not be finished yet (#7)
41 |
42 |
43 |
44 | ## 1.0.0 (2022-10-03)
45 |
46 | - feat: refactor and support vue3
47 |
48 |
49 |
50 | ## 0.1.0 (2020-09-01)
51 |
52 | - feat: support vue2
53 |
--------------------------------------------------------------------------------
/src/types/message.ts:
--------------------------------------------------------------------------------
1 | export const VUE_DEVTOOLS_MESSAGE_KEY = '__VUE_DEVTOOLS_VUE_DETECTED_EVENT__';
2 |
3 | export interface VueDevtoolsMessageDetail {
4 | devtoolsEnabled: boolean;
5 | vueDetected: boolean;
6 | nuxtDetected: boolean;
7 | vue2Detected: boolean;
8 | vitePressDetected: boolean;
9 | vitePluginDetected: boolean;
10 | vitePluginClientUrl: string;
11 | }
12 |
13 | export interface VueDevtoolsMessage {
14 | key: typeof VUE_DEVTOOLS_MESSAGE_KEY;
15 | data: VueDevtoolsMessageDetail;
16 | }
17 |
18 | // The key used by devtools v6 will be removed in the future
19 | export const LEGACY_VUE_DEVTOOLS_MESSAGE_KEY = '_vue-devtools-send-message';
20 |
21 | // The message structure used by devtools v6 will be removed in the future
22 | export interface LegacyVueDevtoolsMessage {
23 | key: typeof LEGACY_VUE_DEVTOOLS_MESSAGE_KEY;
24 | message: VueDevtoolsMessageDetail;
25 | }
26 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Vue force dev
2 |
3 | [TOC]
4 |
5 | A tool forces Vue to run in development.
6 |
7 | Easy to debug online Vue code.
8 |
9 | ## Install
10 |
11 | [Chrome](https://chrome.google.com/webstore/detail/oohfffedbkbjnbpbbedapppafmlnccmb/reviews)
12 |
13 | [Firefox](https://addons.mozilla.org/en-US/firefox/addon/vue-force-dev/)
14 |
15 | ## Screenshot
16 |
17 | 
18 |
19 | 
20 |
21 | ## FAQ
22 |
23 | ### How to update Pinia
24 |
25 | 1. Open this website: https://cdn.jsdelivr.net/npm/pinia/dist/pinia.mjs
26 |
27 | 2. Copy it's content to `src/plugins/vendors/pinia.js`
28 |
29 | 3. Modify the code as follows
30 |
31 | ```diff
32 | - function devtoolsPlugin({ app, store, options }) {
33 | + export function devtoolsPlugin({ app, store, options }) {
34 | ```
35 |
36 | ```diff
37 | - function registerPiniaDevtools(app, pinia) {
38 | + export function registerPiniaDevtools(app, pinia) {
39 | ```
40 |
41 |
42 |
--------------------------------------------------------------------------------
/scripts/build-zip.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs-extra');
2 | const path = require('path');
3 | const archiver = require('archiver');
4 |
5 | const cwd = process.cwd();
6 | function resolve(...dir) {
7 | return path.join(cwd, ...dir);
8 | }
9 |
10 | const DEST_ZIP_DIR = resolve('./dist-zip');
11 |
12 | const hyphenate = (str) => {
13 | return str.split(' ').reduce((i, j) => {
14 | i = i ? i + '-' : i;
15 | return i + j.toLowerCase();
16 | }, '');
17 | };
18 |
19 | function main() {
20 | const { name, version } = require('../dist/manifest.json');
21 | const zipFilename = `${hyphenate(name)}-v${version}.zip`;
22 |
23 | fs.emptyDirSync(DEST_ZIP_DIR);
24 |
25 | console.info(`Building ${zipFilename}...`);
26 | const archive = archiver('zip', { zlib: { level: 9 } });
27 | const stream = fs.createWriteStream(path.join(DEST_ZIP_DIR, zipFilename));
28 |
29 | archive.directory('dist', false).pipe(stream);
30 |
31 | archive.finalize();
32 | }
33 |
34 | main();
35 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "version": "2.1.1",
4 | "scripts": {
5 | "dev": "rollup -c -w",
6 | "build": "rollup -c",
7 | "zip": "yarn build && node scripts/build-zip.js",
8 | "prepare": "husky"
9 | },
10 | "engines": {
11 | "node": "20"
12 | },
13 | "keywords": [],
14 | "author": "LoryHuang",
15 | "license": "MIT",
16 | "devDependencies": {
17 | "@rollup/plugin-node-resolve": "^15.2.3",
18 | "@rollup/plugin-replace": "^5.0.5",
19 | "@rollup/plugin-typescript": "^11.1.6",
20 | "@types/chrome": "^0.0.197",
21 | "archiver": "^5.3.0",
22 | "eslint": "^8.24.0",
23 | "fs-extra": "^10.0.0",
24 | "husky": "^9.0.11",
25 | "prettier": "^3.2.5",
26 | "pretty-quick": "^4.0.0",
27 | "rollup": "^4.13.0",
28 | "rollup-plugin-copy": "^3.5.0",
29 | "tslib": "^2.6.2",
30 | "typescript": "^5.4.3"
31 | },
32 | "dependencies": {
33 | "@vue/composition-api": "^1.7.2",
34 | "@vue/devtools-api": "^6.6.1",
35 | "vue": "^3.4.21",
36 | "vue-demi": "^0.14.7"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Vue force dev",
3 | "description": "A tool forces vue to run in development",
4 | "version": "__PACKAGE_JSON_VERSION__",
5 | "manifest_version": 3,
6 | "action": {
7 | "default_popup": "popups/not-found.html",
8 | "default_title": "Vue force dev",
9 | "default_icon": {
10 | "16": "icons/16-gray.png",
11 | "48": "icons/48-gray.png",
12 | "128": "icons/128-gray.png"
13 | }
14 | },
15 | "web_accessible_resources": [
16 | {
17 | "resources": ["detectorExec.js"],
18 | "matches": [""],
19 | "extension_ids": []
20 | }
21 | ],
22 | "icons": {
23 | "16": "icons/16.png",
24 | "48": "icons/48.png",
25 | "128": "icons/128.png"
26 | },
27 | "background": {
28 | "service_worker": "background.js",
29 | "scripts": ["background.js"]
30 | },
31 | "host_permissions": [""],
32 | "content_scripts": [
33 | {
34 | "matches": [""],
35 | "js": ["detector.js"],
36 | "run_at": "document_start"
37 | }
38 | ]
39 | }
40 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2020 Lory Huang
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/rollup.config.mjs:
--------------------------------------------------------------------------------
1 | import typescript from '@rollup/plugin-typescript';
2 | import { nodeResolve } from '@rollup/plugin-node-resolve';
3 | import replace from '@rollup/plugin-replace';
4 | import copy from 'rollup-plugin-copy';
5 | import { createRequire } from 'module';
6 |
7 | const require = createRequire(import.meta.url);
8 |
9 | const pkg = require('./package.json');
10 |
11 | const DIST_PATH = 'dist';
12 |
13 | export default [
14 | {
15 | input: 'src/detector.ts',
16 | output: {
17 | dir: DIST_PATH,
18 | },
19 | plugins: [typescript(), nodeResolve()],
20 | },
21 | {
22 | input: 'src/detectorExec.ts',
23 | output: {
24 | dir: DIST_PATH,
25 | format: 'iife',
26 | },
27 | plugins: [
28 | typescript(),
29 | nodeResolve(),
30 | replace({
31 | 'process.env.NODE_ENV': JSON.stringify('production'),
32 | preventAssignment: true,
33 | }),
34 | ],
35 | },
36 | {
37 | input: ['src/background.ts'],
38 | output: {
39 | dir: DIST_PATH,
40 | },
41 | plugins: [
42 | typescript(),
43 | nodeResolve(),
44 | copy({
45 | targets: [
46 | {
47 | src: 'src/popups',
48 | dest: DIST_PATH,
49 | },
50 | {
51 | src: 'src/icons',
52 | dest: DIST_PATH,
53 | },
54 | {
55 | src: 'src/manifest.json',
56 | dest: DIST_PATH,
57 | transform: (contents) =>
58 | contents
59 | .toString()
60 | .replace('__PACKAGE_JSON_VERSION__', pkg.version),
61 | },
62 | ],
63 | }),
64 | ],
65 | },
66 | ];
67 |
--------------------------------------------------------------------------------
/src/detectorExec.ts:
--------------------------------------------------------------------------------
1 | import { error } from './utils/console';
2 | import type {
3 | VueDevtoolsMessage,
4 | LegacyVueDevtoolsMessage,
5 | VueDevtoolsMessageDetail,
6 | } from './types/message';
7 | import { unpackVueDevtoolsMessage } from './utils/index';
8 | import { crack } from './crack';
9 |
10 | // Receive the message of vue devtools, crack and replay it.
11 | function listenVueDevtoolsMessage() {
12 | const messageHandler = (
13 | e: MessageEvent,
14 | ) => {
15 | try {
16 | if (!window.__VUE_DEVTOOLS_GLOBAL_HOOK__) return;
17 |
18 | const data: VueDevtoolsMessageDetail = unpackVueDevtoolsMessage(e.data);
19 | if (e.source === window && data.vueDetected) {
20 | // skip
21 | if (data.devtoolsEnabled) {
22 | window.removeEventListener('message', messageHandler);
23 | return;
24 | }
25 |
26 | detect(e);
27 | }
28 | } catch (e) {
29 | error(e);
30 | window.removeEventListener('message', messageHandler);
31 | }
32 | };
33 |
34 | window.addEventListener('message', messageHandler);
35 | }
36 |
37 | function detect(
38 | e: MessageEvent,
39 | ) {
40 | const data = unpackVueDevtoolsMessage(e.data);
41 | let delay = 1000;
42 | let detectRemainingTries = 10;
43 |
44 | function executeDetection() {
45 | // force devtools to be enabled
46 | if (crack(data)) {
47 | // replay
48 | window.postMessage(e.data, '*');
49 | return;
50 | }
51 |
52 | if (detectRemainingTries > 0) {
53 | detectRemainingTries--;
54 | setTimeout(() => {
55 | executeDetection();
56 | }, delay);
57 | delay *= 5;
58 | }
59 | }
60 |
61 | setTimeout(() => {
62 | executeDetection();
63 | }, 100);
64 | }
65 |
66 | // inject the hook
67 | if (document instanceof Document) {
68 | listenVueDevtoolsMessage();
69 | }
70 |
--------------------------------------------------------------------------------
/src/crack.ts:
--------------------------------------------------------------------------------
1 | import { error } from './utils/console';
2 | import { enablePiniaDevtools } from './plugins/index';
3 | import type { VueDevtoolsMessageDetail } from './types/message';
4 |
5 | export function crack(data: VueDevtoolsMessageDetail) {
6 | let result;
7 |
8 | if (window.__VUE__) {
9 | result = crackVue3();
10 | }
11 | // Vue 2
12 | else {
13 | result = crackVue2();
14 | }
15 |
16 | if (result) data.devtoolsEnabled = true;
17 |
18 | return result;
19 | }
20 |
21 | function crackVue2(Vue?) {
22 | if (!Vue) {
23 | const app = getVueRootInstance(2);
24 | if (!app) return false; // Vue may not be finished yet
25 | Vue = Object.getPrototypeOf(app).constructor;
26 | while (Vue.super) {
27 | Vue = Vue.super;
28 | }
29 | }
30 |
31 | const devtools = window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
32 | Vue.config.devtools = true;
33 | devtools.emit('init', Vue);
34 |
35 | return true;
36 | }
37 |
38 | function crackVue3() {
39 | const app = getVueRootInstance(3);
40 | if (!app) return false; // Vue may not be finished yet
41 | const devtools = window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
42 | devtools.enabled = true;
43 | const version = app.version;
44 | devtools.emit('app:init' /* APP_INIT */, app, version, {
45 | Fragment: Symbol.for('v-fgt'),
46 | Text: Symbol.for('v-txt'),
47 | Comment: Symbol.for('v-cmt'),
48 | Static: Symbol.for('v-stc'),
49 | });
50 |
51 | // TODO How to trigger the devtools refresh when vue instance changed.
52 | // Maybe `devtools.emit("flush")` can be used, but i don't know when, where and how to use it.
53 |
54 | try {
55 | enablePiniaDevtools(app, 3);
56 | } catch (e) {
57 | error(e);
58 | }
59 |
60 | return true;
61 | }
62 |
63 | function getVueRootInstance(version: number) {
64 | const signProperty = version === 2 ? '__vue__' : '__vue_app__';
65 | const all = document.querySelectorAll('*');
66 | for (let i = 0; i < all.length; i++) {
67 | if (all[i][signProperty]) {
68 | return all[i][signProperty];
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@aashutoshrathi/word-wrap@^1.2.3":
6 | version "1.2.6"
7 | resolved "https://registry.npmmirror.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
9 |
10 | "@babel/parser@^7.23.9":
11 | version "7.24.4"
12 | resolved "https://r.cnpmjs.org/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88"
13 | integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==
14 |
15 | "@eslint-community/eslint-utils@^4.2.0":
16 | version "4.4.0"
17 | resolved "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
18 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
19 | dependencies:
20 | eslint-visitor-keys "^3.3.0"
21 |
22 | "@eslint-community/regexpp@^4.6.1":
23 | version "4.10.0"
24 | resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
25 | integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
26 |
27 | "@eslint/eslintrc@^2.1.4":
28 | version "2.1.4"
29 | resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
30 | integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
31 | dependencies:
32 | ajv "^6.12.4"
33 | debug "^4.3.2"
34 | espree "^9.6.0"
35 | globals "^13.19.0"
36 | ignore "^5.2.0"
37 | import-fresh "^3.2.1"
38 | js-yaml "^4.1.0"
39 | minimatch "^3.1.2"
40 | strip-json-comments "^3.1.1"
41 |
42 | "@eslint/js@8.57.0":
43 | version "8.57.0"
44 | resolved "https://registry.npmmirror.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
45 | integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
46 |
47 | "@humanwhocodes/config-array@^0.11.14":
48 | version "0.11.14"
49 | resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
50 | integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
51 | dependencies:
52 | "@humanwhocodes/object-schema" "^2.0.2"
53 | debug "^4.3.1"
54 | minimatch "^3.0.5"
55 |
56 | "@humanwhocodes/module-importer@^1.0.1":
57 | version "1.0.1"
58 | resolved "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
59 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
60 |
61 | "@humanwhocodes/object-schema@^2.0.2":
62 | version "2.0.2"
63 | resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917"
64 | integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==
65 |
66 | "@jridgewell/sourcemap-codec@^1.4.15":
67 | version "1.4.15"
68 | resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
69 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
70 |
71 | "@nodelib/fs.scandir@2.1.5":
72 | version "2.1.5"
73 | resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
74 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
75 | dependencies:
76 | "@nodelib/fs.stat" "2.0.5"
77 | run-parallel "^1.1.9"
78 |
79 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
80 | version "2.0.5"
81 | resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
82 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
83 |
84 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
85 | version "1.2.8"
86 | resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
87 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
88 | dependencies:
89 | "@nodelib/fs.scandir" "2.1.5"
90 | fastq "^1.6.0"
91 |
92 | "@rollup/plugin-node-resolve@^15.2.3":
93 | version "15.2.3"
94 | resolved "https://registry.npmmirror.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz#e5e0b059bd85ca57489492f295ce88c2d4b0daf9"
95 | integrity sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==
96 | dependencies:
97 | "@rollup/pluginutils" "^5.0.1"
98 | "@types/resolve" "1.20.2"
99 | deepmerge "^4.2.2"
100 | is-builtin-module "^3.2.1"
101 | is-module "^1.0.0"
102 | resolve "^1.22.1"
103 |
104 | "@rollup/plugin-replace@^5.0.5":
105 | version "5.0.5"
106 | resolved "https://r.cnpmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz#33d5653dce6d03cb24ef98bef7f6d25b57faefdf"
107 | integrity sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==
108 | dependencies:
109 | "@rollup/pluginutils" "^5.0.1"
110 | magic-string "^0.30.3"
111 |
112 | "@rollup/plugin-typescript@^11.1.6":
113 | version "11.1.6"
114 | resolved "https://registry.npmmirror.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz#724237d5ec12609ec01429f619d2a3e7d4d1b22b"
115 | integrity sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==
116 | dependencies:
117 | "@rollup/pluginutils" "^5.1.0"
118 | resolve "^1.22.1"
119 |
120 | "@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.1.0":
121 | version "5.1.0"
122 | resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0"
123 | integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==
124 | dependencies:
125 | "@types/estree" "^1.0.0"
126 | estree-walker "^2.0.2"
127 | picomatch "^2.3.1"
128 |
129 | "@rollup/rollup-android-arm-eabi@4.13.0":
130 | version "4.13.0"
131 | resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz#b98786c1304b4ff8db3a873180b778649b5dff2b"
132 | integrity sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==
133 |
134 | "@rollup/rollup-android-arm64@4.13.0":
135 | version "4.13.0"
136 | resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz#8833679af11172b1bf1ab7cb3bad84df4caf0c9e"
137 | integrity sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==
138 |
139 | "@rollup/rollup-darwin-arm64@4.13.0":
140 | version "4.13.0"
141 | resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz#ef02d73e0a95d406e0eb4fd61a53d5d17775659b"
142 | integrity sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==
143 |
144 | "@rollup/rollup-darwin-x64@4.13.0":
145 | version "4.13.0"
146 | resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz#3ce5b9bcf92b3341a5c1c58a3e6bcce0ea9e7455"
147 | integrity sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==
148 |
149 | "@rollup/rollup-linux-arm-gnueabihf@4.13.0":
150 | version "4.13.0"
151 | resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz#3d3d2c018bdd8e037c6bfedd52acfff1c97e4be4"
152 | integrity sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==
153 |
154 | "@rollup/rollup-linux-arm64-gnu@4.13.0":
155 | version "4.13.0"
156 | resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz#5fc8cc978ff396eaa136d7bfe05b5b9138064143"
157 | integrity sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==
158 |
159 | "@rollup/rollup-linux-arm64-musl@4.13.0":
160 | version "4.13.0"
161 | resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz#f2ae7d7bed416ffa26d6b948ac5772b520700eef"
162 | integrity sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==
163 |
164 | "@rollup/rollup-linux-riscv64-gnu@4.13.0":
165 | version "4.13.0"
166 | resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz#303d57a328ee9a50c85385936f31cf62306d30b6"
167 | integrity sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==
168 |
169 | "@rollup/rollup-linux-x64-gnu@4.13.0":
170 | version "4.13.0"
171 | resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz#f672f6508f090fc73f08ba40ff76c20b57424778"
172 | integrity sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==
173 |
174 | "@rollup/rollup-linux-x64-musl@4.13.0":
175 | version "4.13.0"
176 | resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz#d2f34b1b157f3e7f13925bca3288192a66755a89"
177 | integrity sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==
178 |
179 | "@rollup/rollup-win32-arm64-msvc@4.13.0":
180 | version "4.13.0"
181 | resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz#8ffecc980ae4d9899eb2f9c4ae471a8d58d2da6b"
182 | integrity sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==
183 |
184 | "@rollup/rollup-win32-ia32-msvc@4.13.0":
185 | version "4.13.0"
186 | resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz#a7505884f415662e088365b9218b2b03a88fc6f2"
187 | integrity sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==
188 |
189 | "@rollup/rollup-win32-x64-msvc@4.13.0":
190 | version "4.13.0"
191 | resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz#6abd79db7ff8d01a58865ba20a63cfd23d9e2a10"
192 | integrity sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==
193 |
194 | "@types/chrome@^0.0.197":
195 | version "0.0.197"
196 | resolved "https://registry.npmmirror.com/@types/chrome/-/chrome-0.0.197.tgz#c1b50cdb72ee40f9bc1411506031a9f8a925ab35"
197 | integrity sha512-m1NfS5bOjaypyqQfaX6CxmJodZVcvj5+Mt/K94EBHkflYjPNmXHAzbxfifdLMa0YM3PDyOxohoTS5ug/e6p5jA==
198 | dependencies:
199 | "@types/filesystem" "*"
200 | "@types/har-format" "*"
201 |
202 | "@types/estree@1.0.5", "@types/estree@^1.0.0":
203 | version "1.0.5"
204 | resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
205 | integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
206 |
207 | "@types/filesystem@*":
208 | version "0.0.36"
209 | resolved "https://registry.npmmirror.com/@types/filesystem/-/filesystem-0.0.36.tgz#7227c2d76bfed1b21819db310816c7821d303857"
210 | integrity sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==
211 | dependencies:
212 | "@types/filewriter" "*"
213 |
214 | "@types/filewriter@*":
215 | version "0.0.33"
216 | resolved "https://registry.npmmirror.com/@types/filewriter/-/filewriter-0.0.33.tgz#d9d611db9d9cd99ae4e458de420eeb64ad604ea8"
217 | integrity sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==
218 |
219 | "@types/fs-extra@^8.0.1":
220 | version "8.1.5"
221 | resolved "https://registry.npmmirror.com/@types/fs-extra/-/fs-extra-8.1.5.tgz#33aae2962d3b3ec9219b5aca2555ee00274f5927"
222 | integrity sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==
223 | dependencies:
224 | "@types/node" "*"
225 |
226 | "@types/glob@^7.1.1":
227 | version "7.2.0"
228 | resolved "https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
229 | integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
230 | dependencies:
231 | "@types/minimatch" "*"
232 | "@types/node" "*"
233 |
234 | "@types/har-format@*":
235 | version "1.2.15"
236 | resolved "https://registry.npmmirror.com/@types/har-format/-/har-format-1.2.15.tgz#f352493638c2f89d706438a19a9eb300b493b506"
237 | integrity sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==
238 |
239 | "@types/minimatch@*":
240 | version "5.1.2"
241 | resolved "https://registry.npmmirror.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca"
242 | integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==
243 |
244 | "@types/node@*":
245 | version "20.11.30"
246 | resolved "https://registry.npmmirror.com/@types/node/-/node-20.11.30.tgz#9c33467fc23167a347e73834f788f4b9f399d66f"
247 | integrity sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==
248 | dependencies:
249 | undici-types "~5.26.4"
250 |
251 | "@types/resolve@1.20.2":
252 | version "1.20.2"
253 | resolved "https://registry.npmmirror.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975"
254 | integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==
255 |
256 | "@ungap/structured-clone@^1.2.0":
257 | version "1.2.0"
258 | resolved "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
259 | integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
260 |
261 | "@vue/compiler-core@3.4.21":
262 | version "3.4.21"
263 | resolved "https://r.cnpmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz#868b7085378fc24e58c9aed14c8d62110a62be1a"
264 | integrity sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==
265 | dependencies:
266 | "@babel/parser" "^7.23.9"
267 | "@vue/shared" "3.4.21"
268 | entities "^4.5.0"
269 | estree-walker "^2.0.2"
270 | source-map-js "^1.0.2"
271 |
272 | "@vue/compiler-dom@3.4.21":
273 | version "3.4.21"
274 | resolved "https://r.cnpmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz#0077c355e2008207283a5a87d510330d22546803"
275 | integrity sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==
276 | dependencies:
277 | "@vue/compiler-core" "3.4.21"
278 | "@vue/shared" "3.4.21"
279 |
280 | "@vue/compiler-sfc@3.4.21":
281 | version "3.4.21"
282 | resolved "https://r.cnpmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz#4af920dc31ab99e1ff5d152b5fe0ad12181145b2"
283 | integrity sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==
284 | dependencies:
285 | "@babel/parser" "^7.23.9"
286 | "@vue/compiler-core" "3.4.21"
287 | "@vue/compiler-dom" "3.4.21"
288 | "@vue/compiler-ssr" "3.4.21"
289 | "@vue/shared" "3.4.21"
290 | estree-walker "^2.0.2"
291 | magic-string "^0.30.7"
292 | postcss "^8.4.35"
293 | source-map-js "^1.0.2"
294 |
295 | "@vue/compiler-ssr@3.4.21":
296 | version "3.4.21"
297 | resolved "https://r.cnpmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz#b84ae64fb9c265df21fc67f7624587673d324fef"
298 | integrity sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==
299 | dependencies:
300 | "@vue/compiler-dom" "3.4.21"
301 | "@vue/shared" "3.4.21"
302 |
303 | "@vue/composition-api@^1.7.2":
304 | version "1.7.2"
305 | resolved "https://r.cnpmjs.org/@vue/composition-api/-/composition-api-1.7.2.tgz#0b656f3ec39fefc2cf40aaa8c12426bcfeae1b44"
306 | integrity sha512-M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw==
307 |
308 | "@vue/devtools-api@^6.6.1":
309 | version "6.6.1"
310 | resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.1.tgz#7c14346383751d9f6ad4bea0963245b30220ef83"
311 | integrity sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==
312 |
313 | "@vue/reactivity@3.4.21":
314 | version "3.4.21"
315 | resolved "https://r.cnpmjs.org/@vue/reactivity/-/reactivity-3.4.21.tgz#affd3415115b8ebf4927c8d2a0d6a24bccfa9f02"
316 | integrity sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==
317 | dependencies:
318 | "@vue/shared" "3.4.21"
319 |
320 | "@vue/runtime-core@3.4.21":
321 | version "3.4.21"
322 | resolved "https://r.cnpmjs.org/@vue/runtime-core/-/runtime-core-3.4.21.tgz#3749c3f024a64c4c27ecd75aea4ca35634db0062"
323 | integrity sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==
324 | dependencies:
325 | "@vue/reactivity" "3.4.21"
326 | "@vue/shared" "3.4.21"
327 |
328 | "@vue/runtime-dom@3.4.21":
329 | version "3.4.21"
330 | resolved "https://r.cnpmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz#91f867ef64eff232cac45095ab28ebc93ac74588"
331 | integrity sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==
332 | dependencies:
333 | "@vue/runtime-core" "3.4.21"
334 | "@vue/shared" "3.4.21"
335 | csstype "^3.1.3"
336 |
337 | "@vue/server-renderer@3.4.21":
338 | version "3.4.21"
339 | resolved "https://r.cnpmjs.org/@vue/server-renderer/-/server-renderer-3.4.21.tgz#150751579d26661ee3ed26a28604667fa4222a97"
340 | integrity sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==
341 | dependencies:
342 | "@vue/compiler-ssr" "3.4.21"
343 | "@vue/shared" "3.4.21"
344 |
345 | "@vue/shared@3.4.21":
346 | version "3.4.21"
347 | resolved "https://r.cnpmjs.org/@vue/shared/-/shared-3.4.21.tgz#de526a9059d0a599f0b429af7037cd0c3ed7d5a1"
348 | integrity sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==
349 |
350 | acorn-jsx@^5.3.2:
351 | version "5.3.2"
352 | resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
353 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
354 |
355 | acorn@^8.9.0:
356 | version "8.11.3"
357 | resolved "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
358 | integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
359 |
360 | ajv@^6.12.4:
361 | version "6.12.6"
362 | resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
363 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
364 | dependencies:
365 | fast-deep-equal "^3.1.1"
366 | fast-json-stable-stringify "^2.0.0"
367 | json-schema-traverse "^0.4.1"
368 | uri-js "^4.2.2"
369 |
370 | ansi-regex@^5.0.1:
371 | version "5.0.1"
372 | resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
373 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
374 |
375 | ansi-styles@^4.1.0:
376 | version "4.3.0"
377 | resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
378 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
379 | dependencies:
380 | color-convert "^2.0.1"
381 |
382 | archiver-utils@^2.1.0:
383 | version "2.1.0"
384 | resolved "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2"
385 | integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==
386 | dependencies:
387 | glob "^7.1.4"
388 | graceful-fs "^4.2.0"
389 | lazystream "^1.0.0"
390 | lodash.defaults "^4.2.0"
391 | lodash.difference "^4.5.0"
392 | lodash.flatten "^4.4.0"
393 | lodash.isplainobject "^4.0.6"
394 | lodash.union "^4.6.0"
395 | normalize-path "^3.0.0"
396 | readable-stream "^2.0.0"
397 |
398 | archiver-utils@^3.0.4:
399 | version "3.0.4"
400 | resolved "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-3.0.4.tgz#a0d201f1cf8fce7af3b5a05aea0a337329e96ec7"
401 | integrity sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==
402 | dependencies:
403 | glob "^7.2.3"
404 | graceful-fs "^4.2.0"
405 | lazystream "^1.0.0"
406 | lodash.defaults "^4.2.0"
407 | lodash.difference "^4.5.0"
408 | lodash.flatten "^4.4.0"
409 | lodash.isplainobject "^4.0.6"
410 | lodash.union "^4.6.0"
411 | normalize-path "^3.0.0"
412 | readable-stream "^3.6.0"
413 |
414 | archiver@^5.3.0:
415 | version "5.3.2"
416 | resolved "https://registry.npmmirror.com/archiver/-/archiver-5.3.2.tgz#99991d5957e53bd0303a392979276ac4ddccf3b0"
417 | integrity sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==
418 | dependencies:
419 | archiver-utils "^2.1.0"
420 | async "^3.2.4"
421 | buffer-crc32 "^0.2.1"
422 | readable-stream "^3.6.0"
423 | readdir-glob "^1.1.2"
424 | tar-stream "^2.2.0"
425 | zip-stream "^4.1.0"
426 |
427 | argparse@^2.0.1:
428 | version "2.0.1"
429 | resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
430 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
431 |
432 | array-union@^2.1.0:
433 | version "2.1.0"
434 | resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
435 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
436 |
437 | async@^3.2.4:
438 | version "3.2.5"
439 | resolved "https://registry.npmmirror.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66"
440 | integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==
441 |
442 | balanced-match@^1.0.0:
443 | version "1.0.2"
444 | resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
445 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
446 |
447 | base64-js@^1.3.1:
448 | version "1.5.1"
449 | resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
450 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
451 |
452 | bl@^4.0.3:
453 | version "4.1.0"
454 | resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
455 | integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
456 | dependencies:
457 | buffer "^5.5.0"
458 | inherits "^2.0.4"
459 | readable-stream "^3.4.0"
460 |
461 | brace-expansion@^1.1.7:
462 | version "1.1.11"
463 | resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
464 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
465 | dependencies:
466 | balanced-match "^1.0.0"
467 | concat-map "0.0.1"
468 |
469 | brace-expansion@^2.0.1:
470 | version "2.0.1"
471 | resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
472 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
473 | dependencies:
474 | balanced-match "^1.0.0"
475 |
476 | braces@^3.0.2:
477 | version "3.0.2"
478 | resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
479 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
480 | dependencies:
481 | fill-range "^7.0.1"
482 |
483 | buffer-crc32@^0.2.1, buffer-crc32@^0.2.13:
484 | version "0.2.13"
485 | resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
486 | integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
487 |
488 | buffer@^5.5.0:
489 | version "5.7.1"
490 | resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
491 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
492 | dependencies:
493 | base64-js "^1.3.1"
494 | ieee754 "^1.1.13"
495 |
496 | builtin-modules@^3.3.0:
497 | version "3.3.0"
498 | resolved "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
499 | integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
500 |
501 | callsites@^3.0.0:
502 | version "3.1.0"
503 | resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
504 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
505 |
506 | chalk@^4.0.0:
507 | version "4.1.2"
508 | resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
509 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
510 | dependencies:
511 | ansi-styles "^4.1.0"
512 | supports-color "^7.1.0"
513 |
514 | color-convert@^2.0.1:
515 | version "2.0.1"
516 | resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
517 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
518 | dependencies:
519 | color-name "~1.1.4"
520 |
521 | color-name@~1.1.4:
522 | version "1.1.4"
523 | resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
524 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
525 |
526 | colorette@^1.1.0:
527 | version "1.4.0"
528 | resolved "https://registry.npmmirror.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40"
529 | integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==
530 |
531 | compress-commons@^4.1.2:
532 | version "4.1.2"
533 | resolved "https://registry.npmmirror.com/compress-commons/-/compress-commons-4.1.2.tgz#6542e59cb63e1f46a8b21b0e06f9a32e4c8b06df"
534 | integrity sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==
535 | dependencies:
536 | buffer-crc32 "^0.2.13"
537 | crc32-stream "^4.0.2"
538 | normalize-path "^3.0.0"
539 | readable-stream "^3.6.0"
540 |
541 | concat-map@0.0.1:
542 | version "0.0.1"
543 | resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
544 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
545 |
546 | core-util-is@~1.0.0:
547 | version "1.0.3"
548 | resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
549 | integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
550 |
551 | crc-32@^1.2.0:
552 | version "1.2.2"
553 | resolved "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff"
554 | integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==
555 |
556 | crc32-stream@^4.0.2:
557 | version "4.0.3"
558 | resolved "https://registry.npmmirror.com/crc32-stream/-/crc32-stream-4.0.3.tgz#85dd677eb78fa7cad1ba17cc506a597d41fc6f33"
559 | integrity sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==
560 | dependencies:
561 | crc-32 "^1.2.0"
562 | readable-stream "^3.4.0"
563 |
564 | cross-spawn@^7.0.2, cross-spawn@^7.0.3:
565 | version "7.0.3"
566 | resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
567 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
568 | dependencies:
569 | path-key "^3.1.0"
570 | shebang-command "^2.0.0"
571 | which "^2.0.1"
572 |
573 | csstype@^3.1.3:
574 | version "3.1.3"
575 | resolved "https://r.cnpmjs.org/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
576 | integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
577 |
578 | debug@^4.3.1, debug@^4.3.2:
579 | version "4.3.4"
580 | resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
581 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
582 | dependencies:
583 | ms "2.1.2"
584 |
585 | deep-is@^0.1.3:
586 | version "0.1.4"
587 | resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
588 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
589 |
590 | deepmerge@^4.2.2:
591 | version "4.3.1"
592 | resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
593 | integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
594 |
595 | dir-glob@^3.0.1:
596 | version "3.0.1"
597 | resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
598 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
599 | dependencies:
600 | path-type "^4.0.0"
601 |
602 | doctrine@^3.0.0:
603 | version "3.0.0"
604 | resolved "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
605 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
606 | dependencies:
607 | esutils "^2.0.2"
608 |
609 | end-of-stream@^1.4.1:
610 | version "1.4.4"
611 | resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
612 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
613 | dependencies:
614 | once "^1.4.0"
615 |
616 | entities@^4.5.0:
617 | version "4.5.0"
618 | resolved "https://r.cnpmjs.org/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
619 | integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
620 |
621 | escape-string-regexp@^4.0.0:
622 | version "4.0.0"
623 | resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
624 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
625 |
626 | eslint-scope@^7.2.2:
627 | version "7.2.2"
628 | resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
629 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
630 | dependencies:
631 | esrecurse "^4.3.0"
632 | estraverse "^5.2.0"
633 |
634 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
635 | version "3.4.3"
636 | resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
637 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
638 |
639 | eslint@^8.24.0:
640 | version "8.57.0"
641 | resolved "https://registry.npmmirror.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
642 | integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
643 | dependencies:
644 | "@eslint-community/eslint-utils" "^4.2.0"
645 | "@eslint-community/regexpp" "^4.6.1"
646 | "@eslint/eslintrc" "^2.1.4"
647 | "@eslint/js" "8.57.0"
648 | "@humanwhocodes/config-array" "^0.11.14"
649 | "@humanwhocodes/module-importer" "^1.0.1"
650 | "@nodelib/fs.walk" "^1.2.8"
651 | "@ungap/structured-clone" "^1.2.0"
652 | ajv "^6.12.4"
653 | chalk "^4.0.0"
654 | cross-spawn "^7.0.2"
655 | debug "^4.3.2"
656 | doctrine "^3.0.0"
657 | escape-string-regexp "^4.0.0"
658 | eslint-scope "^7.2.2"
659 | eslint-visitor-keys "^3.4.3"
660 | espree "^9.6.1"
661 | esquery "^1.4.2"
662 | esutils "^2.0.2"
663 | fast-deep-equal "^3.1.3"
664 | file-entry-cache "^6.0.1"
665 | find-up "^5.0.0"
666 | glob-parent "^6.0.2"
667 | globals "^13.19.0"
668 | graphemer "^1.4.0"
669 | ignore "^5.2.0"
670 | imurmurhash "^0.1.4"
671 | is-glob "^4.0.0"
672 | is-path-inside "^3.0.3"
673 | js-yaml "^4.1.0"
674 | json-stable-stringify-without-jsonify "^1.0.1"
675 | levn "^0.4.1"
676 | lodash.merge "^4.6.2"
677 | minimatch "^3.1.2"
678 | natural-compare "^1.4.0"
679 | optionator "^0.9.3"
680 | strip-ansi "^6.0.1"
681 | text-table "^0.2.0"
682 |
683 | espree@^9.6.0, espree@^9.6.1:
684 | version "9.6.1"
685 | resolved "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
686 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
687 | dependencies:
688 | acorn "^8.9.0"
689 | acorn-jsx "^5.3.2"
690 | eslint-visitor-keys "^3.4.1"
691 |
692 | esquery@^1.4.2:
693 | version "1.5.0"
694 | resolved "https://registry.npmmirror.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
695 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
696 | dependencies:
697 | estraverse "^5.1.0"
698 |
699 | esrecurse@^4.3.0:
700 | version "4.3.0"
701 | resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
702 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
703 | dependencies:
704 | estraverse "^5.2.0"
705 |
706 | estraverse@^5.1.0, estraverse@^5.2.0:
707 | version "5.3.0"
708 | resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
709 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
710 |
711 | estree-walker@^2.0.2:
712 | version "2.0.2"
713 | resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
714 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
715 |
716 | esutils@^2.0.2:
717 | version "2.0.3"
718 | resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
719 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
720 |
721 | execa@^5.1.1:
722 | version "5.1.1"
723 | resolved "https://r2.cnpmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
724 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
725 | dependencies:
726 | cross-spawn "^7.0.3"
727 | get-stream "^6.0.0"
728 | human-signals "^2.1.0"
729 | is-stream "^2.0.0"
730 | merge-stream "^2.0.0"
731 | npm-run-path "^4.0.1"
732 | onetime "^5.1.2"
733 | signal-exit "^3.0.3"
734 | strip-final-newline "^2.0.0"
735 |
736 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
737 | version "3.1.3"
738 | resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
739 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
740 |
741 | fast-glob@^3.0.3:
742 | version "3.3.2"
743 | resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
744 | integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
745 | dependencies:
746 | "@nodelib/fs.stat" "^2.0.2"
747 | "@nodelib/fs.walk" "^1.2.3"
748 | glob-parent "^5.1.2"
749 | merge2 "^1.3.0"
750 | micromatch "^4.0.4"
751 |
752 | fast-json-stable-stringify@^2.0.0:
753 | version "2.1.0"
754 | resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
755 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
756 |
757 | fast-levenshtein@^2.0.6:
758 | version "2.0.6"
759 | resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
760 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
761 |
762 | fastq@^1.6.0:
763 | version "1.17.1"
764 | resolved "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
765 | integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
766 | dependencies:
767 | reusify "^1.0.4"
768 |
769 | file-entry-cache@^6.0.1:
770 | version "6.0.1"
771 | resolved "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
772 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
773 | dependencies:
774 | flat-cache "^3.0.4"
775 |
776 | fill-range@^7.0.1:
777 | version "7.0.1"
778 | resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
779 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
780 | dependencies:
781 | to-regex-range "^5.0.1"
782 |
783 | find-up@^5.0.0:
784 | version "5.0.0"
785 | resolved "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
786 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
787 | dependencies:
788 | locate-path "^6.0.0"
789 | path-exists "^4.0.0"
790 |
791 | flat-cache@^3.0.4:
792 | version "3.2.0"
793 | resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
794 | integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
795 | dependencies:
796 | flatted "^3.2.9"
797 | keyv "^4.5.3"
798 | rimraf "^3.0.2"
799 |
800 | flatted@^3.2.9:
801 | version "3.3.1"
802 | resolved "https://registry.npmmirror.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
803 | integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
804 |
805 | fs-constants@^1.0.0:
806 | version "1.0.0"
807 | resolved "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
808 | integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
809 |
810 | fs-extra@^10.0.0:
811 | version "10.1.0"
812 | resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
813 | integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
814 | dependencies:
815 | graceful-fs "^4.2.0"
816 | jsonfile "^6.0.1"
817 | universalify "^2.0.0"
818 |
819 | fs-extra@^8.1.0:
820 | version "8.1.0"
821 | resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
822 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
823 | dependencies:
824 | graceful-fs "^4.2.0"
825 | jsonfile "^4.0.0"
826 | universalify "^0.1.0"
827 |
828 | fs.realpath@^1.0.0:
829 | version "1.0.0"
830 | resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
831 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
832 |
833 | fsevents@~2.3.2:
834 | version "2.3.3"
835 | resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
836 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
837 |
838 | function-bind@^1.1.2:
839 | version "1.1.2"
840 | resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
841 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
842 |
843 | get-stream@^6.0.0:
844 | version "6.0.1"
845 | resolved "https://r2.cnpmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
846 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
847 |
848 | glob-parent@^5.1.2:
849 | version "5.1.2"
850 | resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
851 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
852 | dependencies:
853 | is-glob "^4.0.1"
854 |
855 | glob-parent@^6.0.2:
856 | version "6.0.2"
857 | resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
858 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
859 | dependencies:
860 | is-glob "^4.0.3"
861 |
862 | glob@^7.1.3, glob@^7.1.4, glob@^7.2.3:
863 | version "7.2.3"
864 | resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
865 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
866 | dependencies:
867 | fs.realpath "^1.0.0"
868 | inflight "^1.0.4"
869 | inherits "2"
870 | minimatch "^3.1.1"
871 | once "^1.3.0"
872 | path-is-absolute "^1.0.0"
873 |
874 | globals@^13.19.0:
875 | version "13.24.0"
876 | resolved "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
877 | integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
878 | dependencies:
879 | type-fest "^0.20.2"
880 |
881 | globby@10.0.1:
882 | version "10.0.1"
883 | resolved "https://registry.npmmirror.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22"
884 | integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==
885 | dependencies:
886 | "@types/glob" "^7.1.1"
887 | array-union "^2.1.0"
888 | dir-glob "^3.0.1"
889 | fast-glob "^3.0.3"
890 | glob "^7.1.3"
891 | ignore "^5.1.1"
892 | merge2 "^1.2.3"
893 | slash "^3.0.0"
894 |
895 | graceful-fs@^4.1.6, graceful-fs@^4.2.0:
896 | version "4.2.11"
897 | resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
898 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
899 |
900 | graphemer@^1.4.0:
901 | version "1.4.0"
902 | resolved "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
903 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
904 |
905 | has-flag@^4.0.0:
906 | version "4.0.0"
907 | resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
908 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
909 |
910 | hasown@^2.0.0:
911 | version "2.0.2"
912 | resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
913 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
914 | dependencies:
915 | function-bind "^1.1.2"
916 |
917 | human-signals@^2.1.0:
918 | version "2.1.0"
919 | resolved "https://r2.cnpmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
920 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
921 |
922 | husky@^9.0.11:
923 | version "9.0.11"
924 | resolved "https://r.cnpmjs.org/husky/-/husky-9.0.11.tgz#fc91df4c756050de41b3e478b2158b87c1e79af9"
925 | integrity sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==
926 |
927 | ieee754@^1.1.13:
928 | version "1.2.1"
929 | resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
930 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
931 |
932 | ignore@^5.1.1, ignore@^5.2.0, ignore@^5.3.0:
933 | version "5.3.1"
934 | resolved "https://registry.npmmirror.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
935 | integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
936 |
937 | import-fresh@^3.2.1:
938 | version "3.3.0"
939 | resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
940 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
941 | dependencies:
942 | parent-module "^1.0.0"
943 | resolve-from "^4.0.0"
944 |
945 | imurmurhash@^0.1.4:
946 | version "0.1.4"
947 | resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
948 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
949 |
950 | inflight@^1.0.4:
951 | version "1.0.6"
952 | resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
953 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
954 | dependencies:
955 | once "^1.3.0"
956 | wrappy "1"
957 |
958 | inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
959 | version "2.0.4"
960 | resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
961 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
962 |
963 | is-builtin-module@^3.2.1:
964 | version "3.2.1"
965 | resolved "https://registry.npmmirror.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169"
966 | integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==
967 | dependencies:
968 | builtin-modules "^3.3.0"
969 |
970 | is-core-module@^2.13.0:
971 | version "2.13.1"
972 | resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
973 | integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
974 | dependencies:
975 | hasown "^2.0.0"
976 |
977 | is-extglob@^2.1.1:
978 | version "2.1.1"
979 | resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
980 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
981 |
982 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
983 | version "4.0.3"
984 | resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
985 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
986 | dependencies:
987 | is-extglob "^2.1.1"
988 |
989 | is-module@^1.0.0:
990 | version "1.0.0"
991 | resolved "https://registry.npmmirror.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
992 | integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==
993 |
994 | is-number@^7.0.0:
995 | version "7.0.0"
996 | resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
997 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
998 |
999 | is-path-inside@^3.0.3:
1000 | version "3.0.3"
1001 | resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
1002 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
1003 |
1004 | is-plain-object@^3.0.0:
1005 | version "3.0.1"
1006 | resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b"
1007 | integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==
1008 |
1009 | is-stream@^2.0.0:
1010 | version "2.0.1"
1011 | resolved "https://r2.cnpmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
1012 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
1013 |
1014 | isarray@~1.0.0:
1015 | version "1.0.0"
1016 | resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1017 | integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
1018 |
1019 | isexe@^2.0.0:
1020 | version "2.0.0"
1021 | resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1022 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1023 |
1024 | js-yaml@^4.1.0:
1025 | version "4.1.0"
1026 | resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
1027 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
1028 | dependencies:
1029 | argparse "^2.0.1"
1030 |
1031 | json-buffer@3.0.1:
1032 | version "3.0.1"
1033 | resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
1034 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
1035 |
1036 | json-schema-traverse@^0.4.1:
1037 | version "0.4.1"
1038 | resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1039 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1040 |
1041 | json-stable-stringify-without-jsonify@^1.0.1:
1042 | version "1.0.1"
1043 | resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1044 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
1045 |
1046 | jsonfile@^4.0.0:
1047 | version "4.0.0"
1048 | resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
1049 | integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
1050 | optionalDependencies:
1051 | graceful-fs "^4.1.6"
1052 |
1053 | jsonfile@^6.0.1:
1054 | version "6.1.0"
1055 | resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
1056 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
1057 | dependencies:
1058 | universalify "^2.0.0"
1059 | optionalDependencies:
1060 | graceful-fs "^4.1.6"
1061 |
1062 | keyv@^4.5.3:
1063 | version "4.5.4"
1064 | resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
1065 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
1066 | dependencies:
1067 | json-buffer "3.0.1"
1068 |
1069 | lazystream@^1.0.0:
1070 | version "1.0.1"
1071 | resolved "https://registry.npmmirror.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638"
1072 | integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==
1073 | dependencies:
1074 | readable-stream "^2.0.5"
1075 |
1076 | levn@^0.4.1:
1077 | version "0.4.1"
1078 | resolved "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
1079 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
1080 | dependencies:
1081 | prelude-ls "^1.2.1"
1082 | type-check "~0.4.0"
1083 |
1084 | locate-path@^6.0.0:
1085 | version "6.0.0"
1086 | resolved "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
1087 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
1088 | dependencies:
1089 | p-locate "^5.0.0"
1090 |
1091 | lodash.defaults@^4.2.0:
1092 | version "4.2.0"
1093 | resolved "https://registry.npmmirror.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
1094 | integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==
1095 |
1096 | lodash.difference@^4.5.0:
1097 | version "4.5.0"
1098 | resolved "https://registry.npmmirror.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
1099 | integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==
1100 |
1101 | lodash.flatten@^4.4.0:
1102 | version "4.4.0"
1103 | resolved "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
1104 | integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==
1105 |
1106 | lodash.isplainobject@^4.0.6:
1107 | version "4.0.6"
1108 | resolved "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
1109 | integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
1110 |
1111 | lodash.merge@^4.6.2:
1112 | version "4.6.2"
1113 | resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
1114 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
1115 |
1116 | lodash.union@^4.6.0:
1117 | version "4.6.0"
1118 | resolved "https://registry.npmmirror.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
1119 | integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==
1120 |
1121 | magic-string@^0.30.3, magic-string@^0.30.7:
1122 | version "0.30.9"
1123 | resolved "https://r.cnpmjs.org/magic-string/-/magic-string-0.30.9.tgz#8927ae21bfdd856310e07a1bc8dd5e73cb6c251d"
1124 | integrity sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==
1125 | dependencies:
1126 | "@jridgewell/sourcemap-codec" "^1.4.15"
1127 |
1128 | merge-stream@^2.0.0:
1129 | version "2.0.0"
1130 | resolved "https://r2.cnpmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1131 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1132 |
1133 | merge2@^1.2.3, merge2@^1.3.0:
1134 | version "1.4.1"
1135 | resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1136 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1137 |
1138 | micromatch@^4.0.4:
1139 | version "4.0.5"
1140 | resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
1141 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
1142 | dependencies:
1143 | braces "^3.0.2"
1144 | picomatch "^2.3.1"
1145 |
1146 | mimic-fn@^2.1.0:
1147 | version "2.1.0"
1148 | resolved "https://r2.cnpmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
1149 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
1150 |
1151 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
1152 | version "3.1.2"
1153 | resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1154 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1155 | dependencies:
1156 | brace-expansion "^1.1.7"
1157 |
1158 | minimatch@^5.1.0:
1159 | version "5.1.6"
1160 | resolved "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
1161 | integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
1162 | dependencies:
1163 | brace-expansion "^2.0.1"
1164 |
1165 | mri@^1.2.0:
1166 | version "1.2.0"
1167 | resolved "https://r2.cnpmjs.org/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
1168 | integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==
1169 |
1170 | ms@2.1.2:
1171 | version "2.1.2"
1172 | resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1173 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1174 |
1175 | nanoid@^3.3.7:
1176 | version "3.3.7"
1177 | resolved "https://r.cnpmjs.org/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
1178 | integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
1179 |
1180 | natural-compare@^1.4.0:
1181 | version "1.4.0"
1182 | resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1183 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
1184 |
1185 | normalize-path@^3.0.0:
1186 | version "3.0.0"
1187 | resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1188 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1189 |
1190 | npm-run-path@^4.0.1:
1191 | version "4.0.1"
1192 | resolved "https://r2.cnpmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
1193 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
1194 | dependencies:
1195 | path-key "^3.0.0"
1196 |
1197 | once@^1.3.0, once@^1.4.0:
1198 | version "1.4.0"
1199 | resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1200 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
1201 | dependencies:
1202 | wrappy "1"
1203 |
1204 | onetime@^5.1.2:
1205 | version "5.1.2"
1206 | resolved "https://r2.cnpmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
1207 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
1208 | dependencies:
1209 | mimic-fn "^2.1.0"
1210 |
1211 | optionator@^0.9.3:
1212 | version "0.9.3"
1213 | resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
1214 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
1215 | dependencies:
1216 | "@aashutoshrathi/word-wrap" "^1.2.3"
1217 | deep-is "^0.1.3"
1218 | fast-levenshtein "^2.0.6"
1219 | levn "^0.4.1"
1220 | prelude-ls "^1.2.1"
1221 | type-check "^0.4.0"
1222 |
1223 | p-limit@^3.0.2:
1224 | version "3.1.0"
1225 | resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1226 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1227 | dependencies:
1228 | yocto-queue "^0.1.0"
1229 |
1230 | p-locate@^5.0.0:
1231 | version "5.0.0"
1232 | resolved "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
1233 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
1234 | dependencies:
1235 | p-limit "^3.0.2"
1236 |
1237 | parent-module@^1.0.0:
1238 | version "1.0.1"
1239 | resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1240 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1241 | dependencies:
1242 | callsites "^3.0.0"
1243 |
1244 | path-exists@^4.0.0:
1245 | version "4.0.0"
1246 | resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1247 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1248 |
1249 | path-is-absolute@^1.0.0:
1250 | version "1.0.1"
1251 | resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1252 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
1253 |
1254 | path-key@^3.0.0, path-key@^3.1.0:
1255 | version "3.1.1"
1256 | resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1257 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1258 |
1259 | path-parse@^1.0.7:
1260 | version "1.0.7"
1261 | resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1262 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1263 |
1264 | path-type@^4.0.0:
1265 | version "4.0.0"
1266 | resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1267 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1268 |
1269 | picocolors@^1.0.0:
1270 | version "1.0.0"
1271 | resolved "https://r2.cnpmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
1272 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
1273 |
1274 | picomatch@^2.3.1:
1275 | version "2.3.1"
1276 | resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1277 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1278 |
1279 | picomatch@^3.0.1:
1280 | version "3.0.1"
1281 | resolved "https://r.cnpmjs.org/picomatch/-/picomatch-3.0.1.tgz#817033161def55ec9638567a2f3bbc876b3e7516"
1282 | integrity sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==
1283 |
1284 | postcss@^8.4.35:
1285 | version "8.4.38"
1286 | resolved "https://r.cnpmjs.org/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e"
1287 | integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
1288 | dependencies:
1289 | nanoid "^3.3.7"
1290 | picocolors "^1.0.0"
1291 | source-map-js "^1.2.0"
1292 |
1293 | prelude-ls@^1.2.1:
1294 | version "1.2.1"
1295 | resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1296 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1297 |
1298 | prettier@^3.2.5:
1299 | version "3.2.5"
1300 | resolved "https://registry.npmmirror.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368"
1301 | integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==
1302 |
1303 | pretty-quick@^4.0.0:
1304 | version "4.0.0"
1305 | resolved "https://r.cnpmjs.org/pretty-quick/-/pretty-quick-4.0.0.tgz#ea5cce85a5804bfbec7327b0e064509155d03f39"
1306 | integrity sha512-M+2MmeufXb/M7Xw3Afh1gxcYpj+sK0AxEfnfF958ktFeAyi5MsKY5brymVURQLgPLV1QaF5P4pb2oFJ54H3yzQ==
1307 | dependencies:
1308 | execa "^5.1.1"
1309 | find-up "^5.0.0"
1310 | ignore "^5.3.0"
1311 | mri "^1.2.0"
1312 | picocolors "^1.0.0"
1313 | picomatch "^3.0.1"
1314 | tslib "^2.6.2"
1315 |
1316 | process-nextick-args@~2.0.0:
1317 | version "2.0.1"
1318 | resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
1319 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
1320 |
1321 | punycode@^2.1.0:
1322 | version "2.3.1"
1323 | resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
1324 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
1325 |
1326 | queue-microtask@^1.2.2:
1327 | version "1.2.3"
1328 | resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1329 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1330 |
1331 | readable-stream@^2.0.0, readable-stream@^2.0.5:
1332 | version "2.3.8"
1333 | resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
1334 | integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
1335 | dependencies:
1336 | core-util-is "~1.0.0"
1337 | inherits "~2.0.3"
1338 | isarray "~1.0.0"
1339 | process-nextick-args "~2.0.0"
1340 | safe-buffer "~5.1.1"
1341 | string_decoder "~1.1.1"
1342 | util-deprecate "~1.0.1"
1343 |
1344 | readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
1345 | version "3.6.2"
1346 | resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
1347 | integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
1348 | dependencies:
1349 | inherits "^2.0.3"
1350 | string_decoder "^1.1.1"
1351 | util-deprecate "^1.0.1"
1352 |
1353 | readdir-glob@^1.1.2:
1354 | version "1.1.3"
1355 | resolved "https://registry.npmmirror.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584"
1356 | integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==
1357 | dependencies:
1358 | minimatch "^5.1.0"
1359 |
1360 | resolve-from@^4.0.0:
1361 | version "4.0.0"
1362 | resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1363 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1364 |
1365 | resolve@^1.22.1:
1366 | version "1.22.8"
1367 | resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
1368 | integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
1369 | dependencies:
1370 | is-core-module "^2.13.0"
1371 | path-parse "^1.0.7"
1372 | supports-preserve-symlinks-flag "^1.0.0"
1373 |
1374 | reusify@^1.0.4:
1375 | version "1.0.4"
1376 | resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
1377 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
1378 |
1379 | rimraf@^3.0.2:
1380 | version "3.0.2"
1381 | resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1382 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1383 | dependencies:
1384 | glob "^7.1.3"
1385 |
1386 | rollup-plugin-copy@^3.5.0:
1387 | version "3.5.0"
1388 | resolved "https://registry.npmmirror.com/rollup-plugin-copy/-/rollup-plugin-copy-3.5.0.tgz#7ffa2a7a8303e143876fa64fb5eed9022d304eeb"
1389 | integrity sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==
1390 | dependencies:
1391 | "@types/fs-extra" "^8.0.1"
1392 | colorette "^1.1.0"
1393 | fs-extra "^8.1.0"
1394 | globby "10.0.1"
1395 | is-plain-object "^3.0.0"
1396 |
1397 | rollup@^4.13.0:
1398 | version "4.13.0"
1399 | resolved "https://registry.npmmirror.com/rollup/-/rollup-4.13.0.tgz#dd2ae144b4cdc2ea25420477f68d4937a721237a"
1400 | integrity sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==
1401 | dependencies:
1402 | "@types/estree" "1.0.5"
1403 | optionalDependencies:
1404 | "@rollup/rollup-android-arm-eabi" "4.13.0"
1405 | "@rollup/rollup-android-arm64" "4.13.0"
1406 | "@rollup/rollup-darwin-arm64" "4.13.0"
1407 | "@rollup/rollup-darwin-x64" "4.13.0"
1408 | "@rollup/rollup-linux-arm-gnueabihf" "4.13.0"
1409 | "@rollup/rollup-linux-arm64-gnu" "4.13.0"
1410 | "@rollup/rollup-linux-arm64-musl" "4.13.0"
1411 | "@rollup/rollup-linux-riscv64-gnu" "4.13.0"
1412 | "@rollup/rollup-linux-x64-gnu" "4.13.0"
1413 | "@rollup/rollup-linux-x64-musl" "4.13.0"
1414 | "@rollup/rollup-win32-arm64-msvc" "4.13.0"
1415 | "@rollup/rollup-win32-ia32-msvc" "4.13.0"
1416 | "@rollup/rollup-win32-x64-msvc" "4.13.0"
1417 | fsevents "~2.3.2"
1418 |
1419 | run-parallel@^1.1.9:
1420 | version "1.2.0"
1421 | resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
1422 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
1423 | dependencies:
1424 | queue-microtask "^1.2.2"
1425 |
1426 | safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1427 | version "5.1.2"
1428 | resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
1429 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
1430 |
1431 | safe-buffer@~5.2.0:
1432 | version "5.2.1"
1433 | resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1434 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1435 |
1436 | shebang-command@^2.0.0:
1437 | version "2.0.0"
1438 | resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1439 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1440 | dependencies:
1441 | shebang-regex "^3.0.0"
1442 |
1443 | shebang-regex@^3.0.0:
1444 | version "3.0.0"
1445 | resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1446 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1447 |
1448 | signal-exit@^3.0.3:
1449 | version "3.0.7"
1450 | resolved "https://r.cnpmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
1451 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
1452 |
1453 | slash@^3.0.0:
1454 | version "3.0.0"
1455 | resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
1456 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
1457 |
1458 | source-map-js@^1.0.2, source-map-js@^1.2.0:
1459 | version "1.2.0"
1460 | resolved "https://r.cnpmjs.org/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
1461 | integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
1462 |
1463 | string_decoder@^1.1.1:
1464 | version "1.3.0"
1465 | resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
1466 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
1467 | dependencies:
1468 | safe-buffer "~5.2.0"
1469 |
1470 | string_decoder@~1.1.1:
1471 | version "1.1.1"
1472 | resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
1473 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
1474 | dependencies:
1475 | safe-buffer "~5.1.0"
1476 |
1477 | strip-ansi@^6.0.1:
1478 | version "6.0.1"
1479 | resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1480 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1481 | dependencies:
1482 | ansi-regex "^5.0.1"
1483 |
1484 | strip-final-newline@^2.0.0:
1485 | version "2.0.0"
1486 | resolved "https://r2.cnpmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
1487 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
1488 |
1489 | strip-json-comments@^3.1.1:
1490 | version "3.1.1"
1491 | resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1492 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1493 |
1494 | supports-color@^7.1.0:
1495 | version "7.2.0"
1496 | resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1497 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1498 | dependencies:
1499 | has-flag "^4.0.0"
1500 |
1501 | supports-preserve-symlinks-flag@^1.0.0:
1502 | version "1.0.0"
1503 | resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
1504 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
1505 |
1506 | tar-stream@^2.2.0:
1507 | version "2.2.0"
1508 | resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
1509 | integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
1510 | dependencies:
1511 | bl "^4.0.3"
1512 | end-of-stream "^1.4.1"
1513 | fs-constants "^1.0.0"
1514 | inherits "^2.0.3"
1515 | readable-stream "^3.1.1"
1516 |
1517 | text-table@^0.2.0:
1518 | version "0.2.0"
1519 | resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1520 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
1521 |
1522 | to-regex-range@^5.0.1:
1523 | version "5.0.1"
1524 | resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1525 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1526 | dependencies:
1527 | is-number "^7.0.0"
1528 |
1529 | tslib@^2.6.2:
1530 | version "2.6.2"
1531 | resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
1532 | integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
1533 |
1534 | type-check@^0.4.0, type-check@~0.4.0:
1535 | version "0.4.0"
1536 | resolved "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
1537 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
1538 | dependencies:
1539 | prelude-ls "^1.2.1"
1540 |
1541 | type-fest@^0.20.2:
1542 | version "0.20.2"
1543 | resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
1544 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
1545 |
1546 | typescript@^5.4.3:
1547 | version "5.4.3"
1548 | resolved "https://registry.npmmirror.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff"
1549 | integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==
1550 |
1551 | undici-types@~5.26.4:
1552 | version "5.26.5"
1553 | resolved "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
1554 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
1555 |
1556 | universalify@^0.1.0:
1557 | version "0.1.2"
1558 | resolved "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
1559 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
1560 |
1561 | universalify@^2.0.0:
1562 | version "2.0.1"
1563 | resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
1564 | integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
1565 |
1566 | uri-js@^4.2.2:
1567 | version "4.4.1"
1568 | resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
1569 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
1570 | dependencies:
1571 | punycode "^2.1.0"
1572 |
1573 | util-deprecate@^1.0.1, util-deprecate@~1.0.1:
1574 | version "1.0.2"
1575 | resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1576 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
1577 |
1578 | vue-demi@^0.14.7:
1579 | version "0.14.7"
1580 | resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2"
1581 | integrity sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==
1582 |
1583 | vue@^3.4.21:
1584 | version "3.4.21"
1585 | resolved "https://r.cnpmjs.org/vue/-/vue-3.4.21.tgz#69ec30e267d358ee3a0ce16612ba89e00aaeb731"
1586 | integrity sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==
1587 | dependencies:
1588 | "@vue/compiler-dom" "3.4.21"
1589 | "@vue/compiler-sfc" "3.4.21"
1590 | "@vue/runtime-dom" "3.4.21"
1591 | "@vue/server-renderer" "3.4.21"
1592 | "@vue/shared" "3.4.21"
1593 |
1594 | which@^2.0.1:
1595 | version "2.0.2"
1596 | resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1597 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1598 | dependencies:
1599 | isexe "^2.0.0"
1600 |
1601 | wrappy@1:
1602 | version "1.0.2"
1603 | resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1604 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
1605 |
1606 | yocto-queue@^0.1.0:
1607 | version "0.1.0"
1608 | resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
1609 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
1610 |
1611 | zip-stream@^4.1.0:
1612 | version "4.1.1"
1613 | resolved "https://registry.npmmirror.com/zip-stream/-/zip-stream-4.1.1.tgz#1337fe974dbaffd2fa9a1ba09662a66932bd7135"
1614 | integrity sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==
1615 | dependencies:
1616 | archiver-utils "^3.0.4"
1617 | compress-commons "^4.1.2"
1618 | readable-stream "^3.6.0"
1619 |
--------------------------------------------------------------------------------
/src/plugins/vendors/pinia.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * pinia v2.1.7
3 | * (c) 2023 Eduardo San Martin Morote
4 | * @license MIT
5 | */
6 | import { hasInjectionContext, inject, toRaw, watch, unref, markRaw, effectScope, ref, isVue2, isRef, isReactive, set, getCurrentScope, onScopeDispose, getCurrentInstance, reactive, toRef, del, nextTick, computed, toRefs } from 'vue-demi';
7 | import { setupDevtoolsPlugin } from '@vue/devtools-api';
8 |
9 | /**
10 | * setActivePinia must be called to handle SSR at the top of functions like
11 | * `fetch`, `setup`, `serverPrefetch` and others
12 | */
13 | let activePinia;
14 | /**
15 | * Sets or unsets the active pinia. Used in SSR and internally when calling
16 | * actions and getters
17 | *
18 | * @param pinia - Pinia instance
19 | */
20 | // @ts-expect-error: cannot constrain the type of the return
21 | const setActivePinia = (pinia) => (activePinia = pinia);
22 | /**
23 | * Get the currently active pinia if there is any.
24 | */
25 | const getActivePinia = () => (hasInjectionContext() && inject(piniaSymbol)) || activePinia;
26 | const piniaSymbol = ((process.env.NODE_ENV !== 'production') ? Symbol('pinia') : /* istanbul ignore next */ Symbol());
27 |
28 | function isPlainObject(
29 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
30 | o) {
31 | return (o &&
32 | typeof o === 'object' &&
33 | Object.prototype.toString.call(o) === '[object Object]' &&
34 | typeof o.toJSON !== 'function');
35 | }
36 | // type DeepReadonly = { readonly [P in keyof T]: DeepReadonly }
37 | // TODO: can we change these to numbers?
38 | /**
39 | * Possible types for SubscriptionCallback
40 | */
41 | var MutationType;
42 | (function (MutationType) {
43 | /**
44 | * Direct mutation of the state:
45 | *
46 | * - `store.name = 'new name'`
47 | * - `store.$state.name = 'new name'`
48 | * - `store.list.push('new item')`
49 | */
50 | MutationType["direct"] = "direct";
51 | /**
52 | * Mutated the state with `$patch` and an object
53 | *
54 | * - `store.$patch({ name: 'newName' })`
55 | */
56 | MutationType["patchObject"] = "patch object";
57 | /**
58 | * Mutated the state with `$patch` and a function
59 | *
60 | * - `store.$patch(state => state.name = 'newName')`
61 | */
62 | MutationType["patchFunction"] = "patch function";
63 | // maybe reset? for $state = {} and $reset
64 | })(MutationType || (MutationType = {}));
65 |
66 | const IS_CLIENT = typeof window !== 'undefined';
67 | /**
68 | * Should we add the devtools plugins.
69 | * - only if dev mode or forced through the prod devtools flag
70 | * - not in test
71 | * - only if window exists (could change in the future)
72 | */
73 | const USE_DEVTOOLS = ((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test') && IS_CLIENT;
74 |
75 | /*
76 | * FileSaver.js A saveAs() FileSaver implementation.
77 | *
78 | * Originally by Eli Grey, adapted as an ESM module by Eduardo San Martin
79 | * Morote.
80 | *
81 | * License : MIT
82 | */
83 | // The one and only way of getting global scope in all environments
84 | // https://stackoverflow.com/q/3277182/1008999
85 | const _global = /*#__PURE__*/ (() => typeof window === 'object' && window.window === window
86 | ? window
87 | : typeof self === 'object' && self.self === self
88 | ? self
89 | : typeof global === 'object' && global.global === global
90 | ? global
91 | : typeof globalThis === 'object'
92 | ? globalThis
93 | : { HTMLElement: null })();
94 | function bom(blob, { autoBom = false } = {}) {
95 | // prepend BOM for UTF-8 XML and text/* types (including HTML)
96 | // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
97 | if (autoBom &&
98 | /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
99 | return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });
100 | }
101 | return blob;
102 | }
103 | function download(url, name, opts) {
104 | const xhr = new XMLHttpRequest();
105 | xhr.open('GET', url);
106 | xhr.responseType = 'blob';
107 | xhr.onload = function () {
108 | saveAs(xhr.response, name, opts);
109 | };
110 | xhr.onerror = function () {
111 | console.error('could not download file');
112 | };
113 | xhr.send();
114 | }
115 | function corsEnabled(url) {
116 | const xhr = new XMLHttpRequest();
117 | // use sync to avoid popup blocker
118 | xhr.open('HEAD', url, false);
119 | try {
120 | xhr.send();
121 | }
122 | catch (e) { }
123 | return xhr.status >= 200 && xhr.status <= 299;
124 | }
125 | // `a.click()` doesn't work for all browsers (#465)
126 | function click(node) {
127 | try {
128 | node.dispatchEvent(new MouseEvent('click'));
129 | }
130 | catch (e) {
131 | const evt = document.createEvent('MouseEvents');
132 | evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);
133 | node.dispatchEvent(evt);
134 | }
135 | }
136 | const _navigator =
137 | typeof navigator === 'object' ? navigator : { userAgent: '' };
138 | // Detect WebView inside a native macOS app by ruling out all browsers
139 | // We just need to check for 'Safari' because all other browsers (besides Firefox) include that too
140 | // https://www.whatismybrowser.com/guides/the-latest-user-agent/macos
141 | const isMacOSWebView = /*#__PURE__*/ (() => /Macintosh/.test(_navigator.userAgent) &&
142 | /AppleWebKit/.test(_navigator.userAgent) &&
143 | !/Safari/.test(_navigator.userAgent))();
144 | const saveAs = !IS_CLIENT
145 | ? () => { } // noop
146 | : // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program
147 | typeof HTMLAnchorElement !== 'undefined' &&
148 | 'download' in HTMLAnchorElement.prototype &&
149 | !isMacOSWebView
150 | ? downloadSaveAs
151 | : // Use msSaveOrOpenBlob as a second approach
152 | 'msSaveOrOpenBlob' in _navigator
153 | ? msSaveAs
154 | : // Fallback to using FileReader and a popup
155 | fileSaverSaveAs;
156 | function downloadSaveAs(blob, name = 'download', opts) {
157 | const a = document.createElement('a');
158 | a.download = name;
159 | a.rel = 'noopener'; // tabnabbing
160 | // TODO: detect chrome extensions & packaged apps
161 | // a.target = '_blank'
162 | if (typeof blob === 'string') {
163 | // Support regular links
164 | a.href = blob;
165 | if (a.origin !== location.origin) {
166 | if (corsEnabled(a.href)) {
167 | download(blob, name, opts);
168 | }
169 | else {
170 | a.target = '_blank';
171 | click(a);
172 | }
173 | }
174 | else {
175 | click(a);
176 | }
177 | }
178 | else {
179 | // Support blobs
180 | a.href = URL.createObjectURL(blob);
181 | setTimeout(function () {
182 | URL.revokeObjectURL(a.href);
183 | }, 4e4); // 40s
184 | setTimeout(function () {
185 | click(a);
186 | }, 0);
187 | }
188 | }
189 | function msSaveAs(blob, name = 'download', opts) {
190 | if (typeof blob === 'string') {
191 | if (corsEnabled(blob)) {
192 | download(blob, name, opts);
193 | }
194 | else {
195 | const a = document.createElement('a');
196 | a.href = blob;
197 | a.target = '_blank';
198 | setTimeout(function () {
199 | click(a);
200 | });
201 | }
202 | }
203 | else {
204 | // @ts-ignore: works on windows
205 | navigator.msSaveOrOpenBlob(bom(blob, opts), name);
206 | }
207 | }
208 | function fileSaverSaveAs(blob, name, opts, popup) {
209 | // Open a popup immediately do go around popup blocker
210 | // Mostly only available on user interaction and the fileReader is async so...
211 | popup = popup || open('', '_blank');
212 | if (popup) {
213 | popup.document.title = popup.document.body.innerText = 'downloading...';
214 | }
215 | if (typeof blob === 'string')
216 | return download(blob, name, opts);
217 | const force = blob.type === 'application/octet-stream';
218 | const isSafari = /constructor/i.test(String(_global.HTMLElement)) || 'safari' in _global;
219 | const isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent);
220 | if ((isChromeIOS || (force && isSafari) || isMacOSWebView) &&
221 | typeof FileReader !== 'undefined') {
222 | // Safari doesn't allow downloading of blob URLs
223 | const reader = new FileReader();
224 | reader.onloadend = function () {
225 | let url = reader.result;
226 | if (typeof url !== 'string') {
227 | popup = null;
228 | throw new Error('Wrong reader.result type');
229 | }
230 | url = isChromeIOS
231 | ? url
232 | : url.replace(/^data:[^;]*;/, 'data:attachment/file;');
233 | if (popup) {
234 | popup.location.href = url;
235 | }
236 | else {
237 | location.assign(url);
238 | }
239 | popup = null; // reverse-tabnabbing #460
240 | };
241 | reader.readAsDataURL(blob);
242 | }
243 | else {
244 | const url = URL.createObjectURL(blob);
245 | if (popup)
246 | popup.location.assign(url);
247 | else
248 | location.href = url;
249 | popup = null; // reverse-tabnabbing #460
250 | setTimeout(function () {
251 | URL.revokeObjectURL(url);
252 | }, 4e4); // 40s
253 | }
254 | }
255 |
256 | /**
257 | * Shows a toast or console.log
258 | *
259 | * @param message - message to log
260 | * @param type - different color of the tooltip
261 | */
262 | function toastMessage(message, type) {
263 | const piniaMessage = '🍍 ' + message;
264 | if (typeof __VUE_DEVTOOLS_TOAST__ === 'function') {
265 | // No longer available :(
266 | __VUE_DEVTOOLS_TOAST__(piniaMessage, type);
267 | }
268 | else if (type === 'error') {
269 | console.error(piniaMessage);
270 | }
271 | else if (type === 'warn') {
272 | console.warn(piniaMessage);
273 | }
274 | else {
275 | console.log(piniaMessage);
276 | }
277 | }
278 | function isPinia(o) {
279 | return '_a' in o && 'install' in o;
280 | }
281 |
282 | /**
283 | * This file contain devtools actions, they are not Pinia actions.
284 | */
285 | // ---
286 | function checkClipboardAccess() {
287 | if (!('clipboard' in navigator)) {
288 | toastMessage(`Your browser doesn't support the Clipboard API`, 'error');
289 | return true;
290 | }
291 | }
292 | function checkNotFocusedError(error) {
293 | if (error instanceof Error &&
294 | error.message.toLowerCase().includes('document is not focused')) {
295 | toastMessage('You need to activate the "Emulate a focused page" setting in the "Rendering" panel of devtools.', 'warn');
296 | return true;
297 | }
298 | return false;
299 | }
300 | async function actionGlobalCopyState(pinia) {
301 | if (checkClipboardAccess())
302 | return;
303 | try {
304 | await navigator.clipboard.writeText(JSON.stringify(pinia.state.value));
305 | toastMessage('Global state copied to clipboard.');
306 | }
307 | catch (error) {
308 | if (checkNotFocusedError(error))
309 | return;
310 | toastMessage(`Failed to serialize the state. Check the console for more details.`, 'error');
311 | console.error(error);
312 | }
313 | }
314 | async function actionGlobalPasteState(pinia) {
315 | if (checkClipboardAccess())
316 | return;
317 | try {
318 | loadStoresState(pinia, JSON.parse(await navigator.clipboard.readText()));
319 | toastMessage('Global state pasted from clipboard.');
320 | }
321 | catch (error) {
322 | if (checkNotFocusedError(error))
323 | return;
324 | toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, 'error');
325 | console.error(error);
326 | }
327 | }
328 | async function actionGlobalSaveState(pinia) {
329 | try {
330 | saveAs(new Blob([JSON.stringify(pinia.state.value)], {
331 | type: 'text/plain;charset=utf-8',
332 | }), 'pinia-state.json');
333 | }
334 | catch (error) {
335 | toastMessage(`Failed to export the state as JSON. Check the console for more details.`, 'error');
336 | console.error(error);
337 | }
338 | }
339 | let fileInput;
340 | function getFileOpener() {
341 | if (!fileInput) {
342 | fileInput = document.createElement('input');
343 | fileInput.type = 'file';
344 | fileInput.accept = '.json';
345 | }
346 | function openFile() {
347 | return new Promise((resolve, reject) => {
348 | fileInput.onchange = async () => {
349 | const files = fileInput.files;
350 | if (!files)
351 | return resolve(null);
352 | const file = files.item(0);
353 | if (!file)
354 | return resolve(null);
355 | return resolve({ text: await file.text(), file });
356 | };
357 | // @ts-ignore: TODO: changed from 4.3 to 4.4
358 | fileInput.oncancel = () => resolve(null);
359 | fileInput.onerror = reject;
360 | fileInput.click();
361 | });
362 | }
363 | return openFile;
364 | }
365 | async function actionGlobalOpenStateFile(pinia) {
366 | try {
367 | const open = getFileOpener();
368 | const result = await open();
369 | if (!result)
370 | return;
371 | const { text, file } = result;
372 | loadStoresState(pinia, JSON.parse(text));
373 | toastMessage(`Global state imported from "${file.name}".`);
374 | }
375 | catch (error) {
376 | toastMessage(`Failed to import the state from JSON. Check the console for more details.`, 'error');
377 | console.error(error);
378 | }
379 | }
380 | function loadStoresState(pinia, state) {
381 | for (const key in state) {
382 | const storeState = pinia.state.value[key];
383 | // store is already instantiated, patch it
384 | if (storeState) {
385 | Object.assign(storeState, state[key]);
386 | }
387 | else {
388 | // store is not instantiated, set the initial state
389 | pinia.state.value[key] = state[key];
390 | }
391 | }
392 | }
393 |
394 | function formatDisplay(display) {
395 | return {
396 | _custom: {
397 | display,
398 | },
399 | };
400 | }
401 | const PINIA_ROOT_LABEL = '🍍 Pinia (root)';
402 | const PINIA_ROOT_ID = '_root';
403 | function formatStoreForInspectorTree(store) {
404 | return isPinia(store)
405 | ? {
406 | id: PINIA_ROOT_ID,
407 | label: PINIA_ROOT_LABEL,
408 | }
409 | : {
410 | id: store.$id,
411 | label: store.$id,
412 | };
413 | }
414 | function formatStoreForInspectorState(store) {
415 | if (isPinia(store)) {
416 | const storeNames = Array.from(store._s.keys());
417 | const storeMap = store._s;
418 | const state = {
419 | state: storeNames.map((storeId) => ({
420 | editable: true,
421 | key: storeId,
422 | value: store.state.value[storeId],
423 | })),
424 | getters: storeNames
425 | .filter((id) => storeMap.get(id)._getters)
426 | .map((id) => {
427 | const store = storeMap.get(id);
428 | return {
429 | editable: false,
430 | key: id,
431 | value: store._getters.reduce((getters, key) => {
432 | getters[key] = store[key];
433 | return getters;
434 | }, {}),
435 | };
436 | }),
437 | };
438 | return state;
439 | }
440 | const state = {
441 | state: Object.keys(store.$state).map((key) => ({
442 | editable: true,
443 | key,
444 | value: store.$state[key],
445 | })),
446 | };
447 | // avoid adding empty getters
448 | if (store._getters && store._getters.length) {
449 | state.getters = store._getters.map((getterName) => ({
450 | editable: false,
451 | key: getterName,
452 | value: store[getterName],
453 | }));
454 | }
455 | if (store._customProperties.size) {
456 | state.customProperties = Array.from(store._customProperties).map((key) => ({
457 | editable: true,
458 | key,
459 | value: store[key],
460 | }));
461 | }
462 | return state;
463 | }
464 | function formatEventData(events) {
465 | if (!events)
466 | return {};
467 | if (Array.isArray(events)) {
468 | // TODO: handle add and delete for arrays and objects
469 | return events.reduce((data, event) => {
470 | data.keys.push(event.key);
471 | data.operations.push(event.type);
472 | data.oldValue[event.key] = event.oldValue;
473 | data.newValue[event.key] = event.newValue;
474 | return data;
475 | }, {
476 | oldValue: {},
477 | keys: [],
478 | operations: [],
479 | newValue: {},
480 | });
481 | }
482 | else {
483 | return {
484 | operation: formatDisplay(events.type),
485 | key: formatDisplay(events.key),
486 | oldValue: events.oldValue,
487 | newValue: events.newValue,
488 | };
489 | }
490 | }
491 | function formatMutationType(type) {
492 | switch (type) {
493 | case MutationType.direct:
494 | return 'mutation';
495 | case MutationType.patchFunction:
496 | return '$patch';
497 | case MutationType.patchObject:
498 | return '$patch';
499 | default:
500 | return 'unknown';
501 | }
502 | }
503 |
504 | // timeline can be paused when directly changing the state
505 | let isTimelineActive = true;
506 | const componentStateTypes = [];
507 | const MUTATIONS_LAYER_ID = 'pinia:mutations';
508 | const INSPECTOR_ID = 'pinia';
509 | const { assign: assign$1 } = Object;
510 | /**
511 | * Gets the displayed name of a store in devtools
512 | *
513 | * @param id - id of the store
514 | * @returns a formatted string
515 | */
516 | const getStoreType = (id) => '🍍 ' + id;
517 | /**
518 | * Add the pinia plugin without any store. Allows displaying a Pinia plugin tab
519 | * as soon as it is added to the application.
520 | *
521 | * @param app - Vue application
522 | * @param pinia - pinia instance
523 | */
524 | export function registerPiniaDevtools(app, pinia) {
525 | setupDevtoolsPlugin({
526 | id: 'dev.esm.pinia',
527 | label: 'Pinia 🍍',
528 | logo: 'https://pinia.vuejs.org/logo.svg',
529 | packageName: 'pinia',
530 | homepage: 'https://pinia.vuejs.org',
531 | componentStateTypes,
532 | app,
533 | }, (api) => {
534 | if (typeof api.now !== 'function') {
535 | 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.');
536 | }
537 | api.addTimelineLayer({
538 | id: MUTATIONS_LAYER_ID,
539 | label: `Pinia 🍍`,
540 | color: 0xe5df88,
541 | });
542 | api.addInspector({
543 | id: INSPECTOR_ID,
544 | label: 'Pinia 🍍',
545 | icon: 'storage',
546 | treeFilterPlaceholder: 'Search stores',
547 | actions: [
548 | {
549 | icon: 'content_copy',
550 | action: () => {
551 | actionGlobalCopyState(pinia);
552 | },
553 | tooltip: 'Serialize and copy the state',
554 | },
555 | {
556 | icon: 'content_paste',
557 | action: async () => {
558 | await actionGlobalPasteState(pinia);
559 | api.sendInspectorTree(INSPECTOR_ID);
560 | api.sendInspectorState(INSPECTOR_ID);
561 | },
562 | tooltip: 'Replace the state with the content of your clipboard',
563 | },
564 | {
565 | icon: 'save',
566 | action: () => {
567 | actionGlobalSaveState(pinia);
568 | },
569 | tooltip: 'Save the state as a JSON file',
570 | },
571 | {
572 | icon: 'folder_open',
573 | action: async () => {
574 | await actionGlobalOpenStateFile(pinia);
575 | api.sendInspectorTree(INSPECTOR_ID);
576 | api.sendInspectorState(INSPECTOR_ID);
577 | },
578 | tooltip: 'Import the state from a JSON file',
579 | },
580 | ],
581 | nodeActions: [
582 | {
583 | icon: 'restore',
584 | tooltip: 'Reset the state (with "$reset")',
585 | action: (nodeId) => {
586 | const store = pinia._s.get(nodeId);
587 | if (!store) {
588 | toastMessage(`Cannot reset "${nodeId}" store because it wasn't found.`, 'warn');
589 | }
590 | else if (typeof store.$reset !== 'function') {
591 | toastMessage(`Cannot reset "${nodeId}" store because it doesn't have a "$reset" method implemented.`, 'warn');
592 | }
593 | else {
594 | store.$reset();
595 | toastMessage(`Store "${nodeId}" reset.`);
596 | }
597 | },
598 | },
599 | ],
600 | });
601 | api.on.inspectComponent((payload, ctx) => {
602 | const proxy = (payload.componentInstance &&
603 | payload.componentInstance.proxy);
604 | if (proxy && proxy._pStores) {
605 | const piniaStores = payload.componentInstance.proxy._pStores;
606 | Object.values(piniaStores).forEach((store) => {
607 | payload.instanceData.state.push({
608 | type: getStoreType(store.$id),
609 | key: 'state',
610 | editable: true,
611 | value: store._isOptionsAPI
612 | ? {
613 | _custom: {
614 | value: toRaw(store.$state),
615 | actions: [
616 | {
617 | icon: 'restore',
618 | tooltip: 'Reset the state of this store',
619 | action: () => store.$reset(),
620 | },
621 | ],
622 | },
623 | }
624 | : // NOTE: workaround to unwrap transferred refs
625 | Object.keys(store.$state).reduce((state, key) => {
626 | state[key] = store.$state[key];
627 | return state;
628 | }, {}),
629 | });
630 | if (store._getters && store._getters.length) {
631 | payload.instanceData.state.push({
632 | type: getStoreType(store.$id),
633 | key: 'getters',
634 | editable: false,
635 | value: store._getters.reduce((getters, key) => {
636 | try {
637 | getters[key] = store[key];
638 | }
639 | catch (error) {
640 | // @ts-expect-error: we just want to show it in devtools
641 | getters[key] = error;
642 | }
643 | return getters;
644 | }, {}),
645 | });
646 | }
647 | });
648 | }
649 | });
650 | api.on.getInspectorTree((payload) => {
651 | if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
652 | let stores = [pinia];
653 | stores = stores.concat(Array.from(pinia._s.values()));
654 | payload.rootNodes = (payload.filter
655 | ? stores.filter((store) => '$id' in store
656 | ? store.$id
657 | .toLowerCase()
658 | .includes(payload.filter.toLowerCase())
659 | : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase()))
660 | : stores).map(formatStoreForInspectorTree);
661 | }
662 | });
663 | api.on.getInspectorState((payload) => {
664 | if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
665 | const inspectedStore = payload.nodeId === PINIA_ROOT_ID
666 | ? pinia
667 | : pinia._s.get(payload.nodeId);
668 | if (!inspectedStore) {
669 | // this could be the selected store restored for a different project
670 | // so it's better not to say anything here
671 | return;
672 | }
673 | if (inspectedStore) {
674 | payload.state = formatStoreForInspectorState(inspectedStore);
675 | }
676 | }
677 | });
678 | api.on.editInspectorState((payload, ctx) => {
679 | if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
680 | const inspectedStore = payload.nodeId === PINIA_ROOT_ID
681 | ? pinia
682 | : pinia._s.get(payload.nodeId);
683 | if (!inspectedStore) {
684 | return toastMessage(`store "${payload.nodeId}" not found`, 'error');
685 | }
686 | const { path } = payload;
687 | if (!isPinia(inspectedStore)) {
688 | // access only the state
689 | if (path.length !== 1 ||
690 | !inspectedStore._customProperties.has(path[0]) ||
691 | path[0] in inspectedStore.$state) {
692 | path.unshift('$state');
693 | }
694 | }
695 | else {
696 | // Root access, we can omit the `.value` because the devtools API does it for us
697 | path.unshift('state');
698 | }
699 | isTimelineActive = false;
700 | payload.set(inspectedStore, path, payload.state.value);
701 | isTimelineActive = true;
702 | }
703 | });
704 | api.on.editComponentState((payload) => {
705 | if (payload.type.startsWith('🍍')) {
706 | const storeId = payload.type.replace(/^🍍\s*/, '');
707 | const store = pinia._s.get(storeId);
708 | if (!store) {
709 | return toastMessage(`store "${storeId}" not found`, 'error');
710 | }
711 | const { path } = payload;
712 | if (path[0] !== 'state') {
713 | return toastMessage(`Invalid path for store "${storeId}":\n${path}\nOnly state can be modified.`);
714 | }
715 | // rewrite the first entry to be able to directly set the state as
716 | // well as any other path
717 | path[0] = '$state';
718 | isTimelineActive = false;
719 | payload.set(store, path, payload.state.value);
720 | isTimelineActive = true;
721 | }
722 | });
723 | });
724 | }
725 | function addStoreToDevtools(app, store) {
726 | if (!componentStateTypes.includes(getStoreType(store.$id))) {
727 | componentStateTypes.push(getStoreType(store.$id));
728 | }
729 | setupDevtoolsPlugin({
730 | id: 'dev.esm.pinia',
731 | label: 'Pinia 🍍',
732 | logo: 'https://pinia.vuejs.org/logo.svg',
733 | packageName: 'pinia',
734 | homepage: 'https://pinia.vuejs.org',
735 | componentStateTypes,
736 | app,
737 | settings: {
738 | logStoreChanges: {
739 | label: 'Notify about new/deleted stores',
740 | type: 'boolean',
741 | defaultValue: true,
742 | },
743 | // useEmojis: {
744 | // label: 'Use emojis in messages ⚡️',
745 | // type: 'boolean',
746 | // defaultValue: true,
747 | // },
748 | },
749 | }, (api) => {
750 | // gracefully handle errors
751 | const now = typeof api.now === 'function' ? api.now.bind(api) : Date.now;
752 | store.$onAction(({ after, onError, name, args }) => {
753 | const groupId = runningActionId++;
754 | api.addTimelineEvent({
755 | layerId: MUTATIONS_LAYER_ID,
756 | event: {
757 | time: now(),
758 | title: '🛫 ' + name,
759 | subtitle: 'start',
760 | data: {
761 | store: formatDisplay(store.$id),
762 | action: formatDisplay(name),
763 | args,
764 | },
765 | groupId,
766 | },
767 | });
768 | after((result) => {
769 | activeAction = undefined;
770 | api.addTimelineEvent({
771 | layerId: MUTATIONS_LAYER_ID,
772 | event: {
773 | time: now(),
774 | title: '🛬 ' + name,
775 | subtitle: 'end',
776 | data: {
777 | store: formatDisplay(store.$id),
778 | action: formatDisplay(name),
779 | args,
780 | result,
781 | },
782 | groupId,
783 | },
784 | });
785 | });
786 | onError((error) => {
787 | activeAction = undefined;
788 | api.addTimelineEvent({
789 | layerId: MUTATIONS_LAYER_ID,
790 | event: {
791 | time: now(),
792 | logType: 'error',
793 | title: '💥 ' + name,
794 | subtitle: 'end',
795 | data: {
796 | store: formatDisplay(store.$id),
797 | action: formatDisplay(name),
798 | args,
799 | error,
800 | },
801 | groupId,
802 | },
803 | });
804 | });
805 | }, true);
806 | store._customProperties.forEach((name) => {
807 | watch(() => unref(store[name]), (newValue, oldValue) => {
808 | api.notifyComponentUpdate();
809 | api.sendInspectorState(INSPECTOR_ID);
810 | if (isTimelineActive) {
811 | api.addTimelineEvent({
812 | layerId: MUTATIONS_LAYER_ID,
813 | event: {
814 | time: now(),
815 | title: 'Change',
816 | subtitle: name,
817 | data: {
818 | newValue,
819 | oldValue,
820 | },
821 | groupId: activeAction,
822 | },
823 | });
824 | }
825 | }, { deep: true });
826 | });
827 | store.$subscribe(({ events, type }, state) => {
828 | api.notifyComponentUpdate();
829 | api.sendInspectorState(INSPECTOR_ID);
830 | if (!isTimelineActive)
831 | return;
832 | // rootStore.state[store.id] = state
833 | const eventData = {
834 | time: now(),
835 | title: formatMutationType(type),
836 | data: assign$1({ store: formatDisplay(store.$id) }, formatEventData(events)),
837 | groupId: activeAction,
838 | };
839 | if (type === MutationType.patchFunction) {
840 | eventData.subtitle = '⤵️';
841 | }
842 | else if (type === MutationType.patchObject) {
843 | eventData.subtitle = '🧩';
844 | }
845 | else if (events && !Array.isArray(events)) {
846 | eventData.subtitle = events.type;
847 | }
848 | if (events) {
849 | eventData.data['rawEvent(s)'] = {
850 | _custom: {
851 | display: 'DebuggerEvent',
852 | type: 'object',
853 | tooltip: 'raw DebuggerEvent[]',
854 | value: events,
855 | },
856 | };
857 | }
858 | api.addTimelineEvent({
859 | layerId: MUTATIONS_LAYER_ID,
860 | event: eventData,
861 | });
862 | }, { detached: true, flush: 'sync' });
863 | const hotUpdate = store._hotUpdate;
864 | store._hotUpdate = markRaw((newStore) => {
865 | hotUpdate(newStore);
866 | api.addTimelineEvent({
867 | layerId: MUTATIONS_LAYER_ID,
868 | event: {
869 | time: now(),
870 | title: '🔥 ' + store.$id,
871 | subtitle: 'HMR update',
872 | data: {
873 | store: formatDisplay(store.$id),
874 | info: formatDisplay(`HMR update`),
875 | },
876 | },
877 | });
878 | // update the devtools too
879 | api.notifyComponentUpdate();
880 | api.sendInspectorTree(INSPECTOR_ID);
881 | api.sendInspectorState(INSPECTOR_ID);
882 | });
883 | const { $dispose } = store;
884 | store.$dispose = () => {
885 | $dispose();
886 | api.notifyComponentUpdate();
887 | api.sendInspectorTree(INSPECTOR_ID);
888 | api.sendInspectorState(INSPECTOR_ID);
889 | api.getSettings().logStoreChanges &&
890 | toastMessage(`Disposed "${store.$id}" store 🗑`);
891 | };
892 | // trigger an update so it can display new registered stores
893 | api.notifyComponentUpdate();
894 | api.sendInspectorTree(INSPECTOR_ID);
895 | api.sendInspectorState(INSPECTOR_ID);
896 | api.getSettings().logStoreChanges &&
897 | toastMessage(`"${store.$id}" store installed 🆕`);
898 | });
899 | }
900 | let runningActionId = 0;
901 | let activeAction;
902 | /**
903 | * Patches a store to enable action grouping in devtools by wrapping the store with a Proxy that is passed as the
904 | * context of all actions, allowing us to set `runningAction` on each access and effectively associating any state
905 | * mutation to the action.
906 | *
907 | * @param store - store to patch
908 | * @param actionNames - list of actionst to patch
909 | */
910 | function patchActionForGrouping(store, actionNames, wrapWithProxy) {
911 | // original actions of the store as they are given by pinia. We are going to override them
912 | const actions = actionNames.reduce((storeActions, actionName) => {
913 | // use toRaw to avoid tracking #541
914 | storeActions[actionName] = toRaw(store)[actionName];
915 | return storeActions;
916 | }, {});
917 | for (const actionName in actions) {
918 | store[actionName] = function () {
919 | // the running action id is incremented in a before action hook
920 | const _actionId = runningActionId;
921 | const trackedStore = wrapWithProxy
922 | ? new Proxy(store, {
923 | get(...args) {
924 | activeAction = _actionId;
925 | return Reflect.get(...args);
926 | },
927 | set(...args) {
928 | activeAction = _actionId;
929 | return Reflect.set(...args);
930 | },
931 | })
932 | : store;
933 | // For Setup Stores we need https://github.com/tc39/proposal-async-context
934 | activeAction = _actionId;
935 | const retValue = actions[actionName].apply(trackedStore, arguments);
936 | // this is safer as async actions in Setup Stores would associate mutations done outside of the action
937 | activeAction = undefined;
938 | return retValue;
939 | };
940 | }
941 | }
942 | /**
943 | * pinia.use(devtoolsPlugin)
944 | */
945 | export function devtoolsPlugin({ app, store, options }) {
946 | // HMR module
947 | if (store.$id.startsWith('__hot:')) {
948 | return;
949 | }
950 | // detect option api vs setup api
951 | store._isOptionsAPI = !!options.state;
952 | patchActionForGrouping(store, Object.keys(options.actions), store._isOptionsAPI);
953 | // Upgrade the HMR to also update the new actions
954 | const originalHotUpdate = store._hotUpdate;
955 | toRaw(store)._hotUpdate = function (newStore) {
956 | originalHotUpdate.apply(this, arguments);
957 | patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions), !!store._isOptionsAPI);
958 | };
959 | addStoreToDevtools(app,
960 | // FIXME: is there a way to allow the assignment from Store to StoreGeneric?
961 | store);
962 | }
963 |
964 | /**
965 | * Creates a Pinia instance to be used by the application
966 | */
967 | function createPinia() {
968 | const scope = effectScope(true);
969 | // NOTE: here we could check the window object for a state and directly set it
970 | // if there is anything like it with Vue 3 SSR
971 | const state = scope.run(() => ref({}));
972 | let _p = [];
973 | // plugins added before calling app.use(pinia)
974 | let toBeInstalled = [];
975 | const pinia = markRaw({
976 | install(app) {
977 | // this allows calling useStore() outside of a component setup after
978 | // installing pinia's plugin
979 | setActivePinia(pinia);
980 | if (!isVue2) {
981 | pinia._a = app;
982 | app.provide(piniaSymbol, pinia);
983 | app.config.globalProperties.$pinia = pinia;
984 | /* istanbul ignore else */
985 | if (USE_DEVTOOLS) {
986 | registerPiniaDevtools(app, pinia);
987 | }
988 | toBeInstalled.forEach((plugin) => _p.push(plugin));
989 | toBeInstalled = [];
990 | }
991 | },
992 | use(plugin) {
993 | if (!this._a && !isVue2) {
994 | toBeInstalled.push(plugin);
995 | }
996 | else {
997 | _p.push(plugin);
998 | }
999 | return this;
1000 | },
1001 | _p,
1002 | // it's actually undefined here
1003 | // @ts-expect-error
1004 | _a: null,
1005 | _e: scope,
1006 | _s: new Map(),
1007 | state,
1008 | });
1009 | // pinia devtools rely on dev only features so they cannot be forced unless
1010 | // the dev build of Vue is used. Avoid old browsers like IE11.
1011 | if (USE_DEVTOOLS && typeof Proxy !== 'undefined') {
1012 | pinia.use(devtoolsPlugin);
1013 | }
1014 | return pinia;
1015 | }
1016 |
1017 | /**
1018 | * Checks if a function is a `StoreDefinition`.
1019 | *
1020 | * @param fn - object to test
1021 | * @returns true if `fn` is a StoreDefinition
1022 | */
1023 | const isUseStore = (fn) => {
1024 | return typeof fn === 'function' && typeof fn.$id === 'string';
1025 | };
1026 | /**
1027 | * Mutates in place `newState` with `oldState` to _hot update_ it. It will
1028 | * remove any key not existing in `newState` and recursively merge plain
1029 | * objects.
1030 | *
1031 | * @param newState - new state object to be patched
1032 | * @param oldState - old state that should be used to patch newState
1033 | * @returns - newState
1034 | */
1035 | function patchObject(newState, oldState) {
1036 | // no need to go through symbols because they cannot be serialized anyway
1037 | for (const key in oldState) {
1038 | const subPatch = oldState[key];
1039 | // skip the whole sub tree
1040 | if (!(key in newState)) {
1041 | continue;
1042 | }
1043 | const targetValue = newState[key];
1044 | if (isPlainObject(targetValue) &&
1045 | isPlainObject(subPatch) &&
1046 | !isRef(subPatch) &&
1047 | !isReactive(subPatch)) {
1048 | newState[key] = patchObject(targetValue, subPatch);
1049 | }
1050 | else {
1051 | // objects are either a bit more complex (e.g. refs) or primitives, so we
1052 | // just set the whole thing
1053 | if (isVue2) {
1054 | set(newState, key, subPatch);
1055 | }
1056 | else {
1057 | newState[key] = subPatch;
1058 | }
1059 | }
1060 | }
1061 | return newState;
1062 | }
1063 | /**
1064 | * Creates an _accept_ function to pass to `import.meta.hot` in Vite applications.
1065 | *
1066 | * @example
1067 | * ```js
1068 | * const useUser = defineStore(...)
1069 | * if (import.meta.hot) {
1070 | * import.meta.hot.accept(acceptHMRUpdate(useUser, import.meta.hot))
1071 | * }
1072 | * ```
1073 | *
1074 | * @param initialUseStore - return of the defineStore to hot update
1075 | * @param hot - `import.meta.hot`
1076 | */
1077 | function acceptHMRUpdate(initialUseStore, hot) {
1078 | // strip as much as possible from iife.prod
1079 | if (!(process.env.NODE_ENV !== 'production')) {
1080 | return () => { };
1081 | }
1082 | return (newModule) => {
1083 | const pinia = hot.data.pinia || initialUseStore._pinia;
1084 | if (!pinia) {
1085 | // this store is still not used
1086 | return;
1087 | }
1088 | // preserve the pinia instance across loads
1089 | hot.data.pinia = pinia;
1090 | // console.log('got data', newStore)
1091 | for (const exportName in newModule) {
1092 | const useStore = newModule[exportName];
1093 | // console.log('checking for', exportName)
1094 | if (isUseStore(useStore) && pinia._s.has(useStore.$id)) {
1095 | // console.log('Accepting update for', useStore.$id)
1096 | const id = useStore.$id;
1097 | if (id !== initialUseStore.$id) {
1098 | console.warn(`The id of the store changed from "${initialUseStore.$id}" to "${id}". Reloading.`);
1099 | // return import.meta.hot.invalidate()
1100 | return hot.invalidate();
1101 | }
1102 | const existingStore = pinia._s.get(id);
1103 | if (!existingStore) {
1104 | console.log(`[Pinia]: skipping hmr because store doesn't exist yet`);
1105 | return;
1106 | }
1107 | useStore(pinia, existingStore);
1108 | }
1109 | }
1110 | };
1111 | }
1112 |
1113 | const noop = () => { };
1114 | function addSubscription(subscriptions, callback, detached, onCleanup = noop) {
1115 | subscriptions.push(callback);
1116 | const removeSubscription = () => {
1117 | const idx = subscriptions.indexOf(callback);
1118 | if (idx > -1) {
1119 | subscriptions.splice(idx, 1);
1120 | onCleanup();
1121 | }
1122 | };
1123 | if (!detached && getCurrentScope()) {
1124 | onScopeDispose(removeSubscription);
1125 | }
1126 | return removeSubscription;
1127 | }
1128 | function triggerSubscriptions(subscriptions, ...args) {
1129 | subscriptions.slice().forEach((callback) => {
1130 | callback(...args);
1131 | });
1132 | }
1133 |
1134 | const fallbackRunWithContext = (fn) => fn();
1135 | function mergeReactiveObjects(target, patchToApply) {
1136 | // Handle Map instances
1137 | if (target instanceof Map && patchToApply instanceof Map) {
1138 | patchToApply.forEach((value, key) => target.set(key, value));
1139 | }
1140 | // Handle Set instances
1141 | if (target instanceof Set && patchToApply instanceof Set) {
1142 | patchToApply.forEach(target.add, target);
1143 | }
1144 | // no need to go through symbols because they cannot be serialized anyway
1145 | for (const key in patchToApply) {
1146 | if (!patchToApply.hasOwnProperty(key))
1147 | continue;
1148 | const subPatch = patchToApply[key];
1149 | const targetValue = target[key];
1150 | if (isPlainObject(targetValue) &&
1151 | isPlainObject(subPatch) &&
1152 | target.hasOwnProperty(key) &&
1153 | !isRef(subPatch) &&
1154 | !isReactive(subPatch)) {
1155 | // NOTE: here I wanted to warn about inconsistent types but it's not possible because in setup stores one might
1156 | // start the value of a property as a certain type e.g. a Map, and then for some reason, during SSR, change that
1157 | // to `undefined`. When trying to hydrate, we want to override the Map with `undefined`.
1158 | target[key] = mergeReactiveObjects(targetValue, subPatch);
1159 | }
1160 | else {
1161 | // @ts-expect-error: subPatch is a valid value
1162 | target[key] = subPatch;
1163 | }
1164 | }
1165 | return target;
1166 | }
1167 | const skipHydrateSymbol = (process.env.NODE_ENV !== 'production')
1168 | ? Symbol('pinia:skipHydration')
1169 | : /* istanbul ignore next */ Symbol();
1170 | const skipHydrateMap = /*#__PURE__*/ new WeakMap();
1171 | /**
1172 | * Tells Pinia to skip the hydration process of a given object. This is useful in setup stores (only) when you return a
1173 | * stateful object in the store but it isn't really state. e.g. returning a router instance in a setup store.
1174 | *
1175 | * @param obj - target object
1176 | * @returns obj
1177 | */
1178 | function skipHydrate(obj) {
1179 | return isVue2
1180 | ? // in @vue/composition-api, the refs are sealed so defineProperty doesn't work...
1181 | /* istanbul ignore next */ skipHydrateMap.set(obj, 1) && obj
1182 | : Object.defineProperty(obj, skipHydrateSymbol, {});
1183 | }
1184 | /**
1185 | * Returns whether a value should be hydrated
1186 | *
1187 | * @param obj - target variable
1188 | * @returns true if `obj` should be hydrated
1189 | */
1190 | function shouldHydrate(obj) {
1191 | return isVue2
1192 | ? /* istanbul ignore next */ !skipHydrateMap.has(obj)
1193 | : !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);
1194 | }
1195 | const { assign } = Object;
1196 | function isComputed(o) {
1197 | return !!(isRef(o) && o.effect);
1198 | }
1199 | function createOptionsStore(id, options, pinia, hot) {
1200 | const { state, actions, getters } = options;
1201 | const initialState = pinia.state.value[id];
1202 | let store;
1203 | function setup() {
1204 | if (!initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {
1205 | /* istanbul ignore if */
1206 | if (isVue2) {
1207 | set(pinia.state.value, id, state ? state() : {});
1208 | }
1209 | else {
1210 | pinia.state.value[id] = state ? state() : {};
1211 | }
1212 | }
1213 | // avoid creating a state in pinia.state.value
1214 | const localState = (process.env.NODE_ENV !== 'production') && hot
1215 | ? // use ref() to unwrap refs inside state TODO: check if this is still necessary
1216 | toRefs(ref(state ? state() : {}).value)
1217 | : toRefs(pinia.state.value[id]);
1218 | return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {
1219 | if ((process.env.NODE_ENV !== 'production') && name in localState) {
1220 | console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with "${name}" in store "${id}".`);
1221 | }
1222 | computedGetters[name] = markRaw(computed(() => {
1223 | setActivePinia(pinia);
1224 | // it was created just before
1225 | const store = pinia._s.get(id);
1226 | // allow cross using stores
1227 | /* istanbul ignore next */
1228 | if (isVue2 && !store._r)
1229 | return;
1230 | // @ts-expect-error
1231 | // return getters![name].call(context, context)
1232 | // TODO: avoid reading the getter while assigning with a global variable
1233 | return getters[name].call(store, store);
1234 | }));
1235 | return computedGetters;
1236 | }, {}));
1237 | }
1238 | store = createSetupStore(id, setup, options, pinia, hot, true);
1239 | return store;
1240 | }
1241 | function createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {
1242 | let scope;
1243 | const optionsForPlugin = assign({ actions: {} }, options);
1244 | /* istanbul ignore if */
1245 | if ((process.env.NODE_ENV !== 'production') && !pinia._e.active) {
1246 | throw new Error('Pinia destroyed');
1247 | }
1248 | // watcher options for $subscribe
1249 | const $subscribeOptions = {
1250 | deep: true,
1251 | // flush: 'post',
1252 | };
1253 | /* istanbul ignore else */
1254 | if ((process.env.NODE_ENV !== 'production') && !isVue2) {
1255 | $subscribeOptions.onTrigger = (event) => {
1256 | /* istanbul ignore else */
1257 | if (isListening) {
1258 | debuggerEvents = event;
1259 | // avoid triggering this while the store is being built and the state is being set in pinia
1260 | }
1261 | else if (isListening == false && !store._hotUpdating) {
1262 | // let patch send all the events together later
1263 | /* istanbul ignore else */
1264 | if (Array.isArray(debuggerEvents)) {
1265 | debuggerEvents.push(event);
1266 | }
1267 | else {
1268 | console.error('🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.');
1269 | }
1270 | }
1271 | };
1272 | }
1273 | // internal state
1274 | let isListening; // set to true at the end
1275 | let isSyncListening; // set to true at the end
1276 | let subscriptions = [];
1277 | let actionSubscriptions = [];
1278 | let debuggerEvents;
1279 | const initialState = pinia.state.value[$id];
1280 | // avoid setting the state for option stores if it is set
1281 | // by the setup
1282 | if (!isOptionsStore && !initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {
1283 | /* istanbul ignore if */
1284 | if (isVue2) {
1285 | set(pinia.state.value, $id, {});
1286 | }
1287 | else {
1288 | pinia.state.value[$id] = {};
1289 | }
1290 | }
1291 | const hotState = ref({});
1292 | // avoid triggering too many listeners
1293 | // https://github.com/vuejs/pinia/issues/1129
1294 | let activeListener;
1295 | function $patch(partialStateOrMutator) {
1296 | let subscriptionMutation;
1297 | isListening = isSyncListening = false;
1298 | // reset the debugger events since patches are sync
1299 | /* istanbul ignore else */
1300 | if ((process.env.NODE_ENV !== 'production')) {
1301 | debuggerEvents = [];
1302 | }
1303 | if (typeof partialStateOrMutator === 'function') {
1304 | partialStateOrMutator(pinia.state.value[$id]);
1305 | subscriptionMutation = {
1306 | type: MutationType.patchFunction,
1307 | storeId: $id,
1308 | events: debuggerEvents,
1309 | };
1310 | }
1311 | else {
1312 | mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);
1313 | subscriptionMutation = {
1314 | type: MutationType.patchObject,
1315 | payload: partialStateOrMutator,
1316 | storeId: $id,
1317 | events: debuggerEvents,
1318 | };
1319 | }
1320 | const myListenerId = (activeListener = Symbol());
1321 | nextTick().then(() => {
1322 | if (activeListener === myListenerId) {
1323 | isListening = true;
1324 | }
1325 | });
1326 | isSyncListening = true;
1327 | // because we paused the watcher, we need to manually call the subscriptions
1328 | triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);
1329 | }
1330 | const $reset = isOptionsStore
1331 | ? function $reset() {
1332 | const { state } = options;
1333 | const newState = state ? state() : {};
1334 | // we use a patch to group all changes into one single subscription
1335 | this.$patch(($state) => {
1336 | assign($state, newState);
1337 | });
1338 | }
1339 | : /* istanbul ignore next */
1340 | (process.env.NODE_ENV !== 'production')
1341 | ? () => {
1342 | throw new Error(`🍍: Store "${$id}" is built using the setup syntax and does not implement $reset().`);
1343 | }
1344 | : noop;
1345 | function $dispose() {
1346 | scope.stop();
1347 | subscriptions = [];
1348 | actionSubscriptions = [];
1349 | pinia._s.delete($id);
1350 | }
1351 | /**
1352 | * Wraps an action to handle subscriptions.
1353 | *
1354 | * @param name - name of the action
1355 | * @param action - action to wrap
1356 | * @returns a wrapped action to handle subscriptions
1357 | */
1358 | function wrapAction(name, action) {
1359 | return function () {
1360 | setActivePinia(pinia);
1361 | const args = Array.from(arguments);
1362 | const afterCallbackList = [];
1363 | const onErrorCallbackList = [];
1364 | function after(callback) {
1365 | afterCallbackList.push(callback);
1366 | }
1367 | function onError(callback) {
1368 | onErrorCallbackList.push(callback);
1369 | }
1370 | // @ts-expect-error
1371 | triggerSubscriptions(actionSubscriptions, {
1372 | args,
1373 | name,
1374 | store,
1375 | after,
1376 | onError,
1377 | });
1378 | let ret;
1379 | try {
1380 | ret = action.apply(this && this.$id === $id ? this : store, args);
1381 | // handle sync errors
1382 | }
1383 | catch (error) {
1384 | triggerSubscriptions(onErrorCallbackList, error);
1385 | throw error;
1386 | }
1387 | if (ret instanceof Promise) {
1388 | return ret
1389 | .then((value) => {
1390 | triggerSubscriptions(afterCallbackList, value);
1391 | return value;
1392 | })
1393 | .catch((error) => {
1394 | triggerSubscriptions(onErrorCallbackList, error);
1395 | return Promise.reject(error);
1396 | });
1397 | }
1398 | // trigger after callbacks
1399 | triggerSubscriptions(afterCallbackList, ret);
1400 | return ret;
1401 | };
1402 | }
1403 | const _hmrPayload = /*#__PURE__*/ markRaw({
1404 | actions: {},
1405 | getters: {},
1406 | state: [],
1407 | hotState,
1408 | });
1409 | const partialStore = {
1410 | _p: pinia,
1411 | // _s: scope,
1412 | $id,
1413 | $onAction: addSubscription.bind(null, actionSubscriptions),
1414 | $patch,
1415 | $reset,
1416 | $subscribe(callback, options = {}) {
1417 | const removeSubscription = addSubscription(subscriptions, callback, options.detached, () => stopWatcher());
1418 | const stopWatcher = scope.run(() => watch(() => pinia.state.value[$id], (state) => {
1419 | if (options.flush === 'sync' ? isSyncListening : isListening) {
1420 | callback({
1421 | storeId: $id,
1422 | type: MutationType.direct,
1423 | events: debuggerEvents,
1424 | }, state);
1425 | }
1426 | }, assign({}, $subscribeOptions, options)));
1427 | return removeSubscription;
1428 | },
1429 | $dispose,
1430 | };
1431 | /* istanbul ignore if */
1432 | if (isVue2) {
1433 | // start as non ready
1434 | partialStore._r = false;
1435 | }
1436 | const store = reactive((process.env.NODE_ENV !== 'production') || USE_DEVTOOLS
1437 | ? assign({
1438 | _hmrPayload,
1439 | _customProperties: markRaw(new Set()), // devtools custom properties
1440 | }, partialStore
1441 | // must be added later
1442 | // setupStore
1443 | )
1444 | : partialStore);
1445 | // store the partial store now so the setup of stores can instantiate each other before they are finished without
1446 | // creating infinite loops.
1447 | pinia._s.set($id, store);
1448 | const runWithContext = (pinia._a && pinia._a.runWithContext) || fallbackRunWithContext;
1449 | // TODO: idea create skipSerialize that marks properties as non serializable and they are skipped
1450 | const setupStore = runWithContext(() => pinia._e.run(() => (scope = effectScope()).run(setup)));
1451 | // overwrite existing actions to support $onAction
1452 | for (const key in setupStore) {
1453 | const prop = setupStore[key];
1454 | if ((isRef(prop) && !isComputed(prop)) || isReactive(prop)) {
1455 | // mark it as a piece of state to be serialized
1456 | if ((process.env.NODE_ENV !== 'production') && hot) {
1457 | set(hotState.value, key, toRef(setupStore, key));
1458 | // createOptionStore directly sets the state in pinia.state.value so we
1459 | // can just skip that
1460 | }
1461 | else if (!isOptionsStore) {
1462 | // in setup stores we must hydrate the state and sync pinia state tree with the refs the user just created
1463 | if (initialState && shouldHydrate(prop)) {
1464 | if (isRef(prop)) {
1465 | prop.value = initialState[key];
1466 | }
1467 | else {
1468 | // probably a reactive object, lets recursively assign
1469 | // @ts-expect-error: prop is unknown
1470 | mergeReactiveObjects(prop, initialState[key]);
1471 | }
1472 | }
1473 | // transfer the ref to the pinia state to keep everything in sync
1474 | /* istanbul ignore if */
1475 | if (isVue2) {
1476 | set(pinia.state.value[$id], key, prop);
1477 | }
1478 | else {
1479 | pinia.state.value[$id][key] = prop;
1480 | }
1481 | }
1482 | /* istanbul ignore else */
1483 | if ((process.env.NODE_ENV !== 'production')) {
1484 | _hmrPayload.state.push(key);
1485 | }
1486 | // action
1487 | }
1488 | else if (typeof prop === 'function') {
1489 | // @ts-expect-error: we are overriding the function we avoid wrapping if
1490 | const actionValue = (process.env.NODE_ENV !== 'production') && hot ? prop : wrapAction(key, prop);
1491 | // this a hot module replacement store because the hotUpdate method needs
1492 | // to do it with the right context
1493 | /* istanbul ignore if */
1494 | if (isVue2) {
1495 | set(setupStore, key, actionValue);
1496 | }
1497 | else {
1498 | // @ts-expect-error
1499 | setupStore[key] = actionValue;
1500 | }
1501 | /* istanbul ignore else */
1502 | if ((process.env.NODE_ENV !== 'production')) {
1503 | _hmrPayload.actions[key] = prop;
1504 | }
1505 | // list actions so they can be used in plugins
1506 | // @ts-expect-error
1507 | optionsForPlugin.actions[key] = prop;
1508 | }
1509 | else if ((process.env.NODE_ENV !== 'production')) {
1510 | // add getters for devtools
1511 | if (isComputed(prop)) {
1512 | _hmrPayload.getters[key] = isOptionsStore
1513 | ? // @ts-expect-error
1514 | options.getters[key]
1515 | : prop;
1516 | if (IS_CLIENT) {
1517 | const getters = setupStore._getters ||
1518 | // @ts-expect-error: same
1519 | (setupStore._getters = markRaw([]));
1520 | getters.push(key);
1521 | }
1522 | }
1523 | }
1524 | }
1525 | // add the state, getters, and action properties
1526 | /* istanbul ignore if */
1527 | if (isVue2) {
1528 | Object.keys(setupStore).forEach((key) => {
1529 | set(store, key, setupStore[key]);
1530 | });
1531 | }
1532 | else {
1533 | assign(store, setupStore);
1534 | // allows retrieving reactive objects with `storeToRefs()`. Must be called after assigning to the reactive object.
1535 | // Make `storeToRefs()` work with `reactive()` #799
1536 | assign(toRaw(store), setupStore);
1537 | }
1538 | // use this instead of a computed with setter to be able to create it anywhere
1539 | // without linking the computed lifespan to wherever the store is first
1540 | // created.
1541 | Object.defineProperty(store, '$state', {
1542 | get: () => ((process.env.NODE_ENV !== 'production') && hot ? hotState.value : pinia.state.value[$id]),
1543 | set: (state) => {
1544 | /* istanbul ignore if */
1545 | if ((process.env.NODE_ENV !== 'production') && hot) {
1546 | throw new Error('cannot set hotState');
1547 | }
1548 | $patch(($state) => {
1549 | assign($state, state);
1550 | });
1551 | },
1552 | });
1553 | // add the hotUpdate before plugins to allow them to override it
1554 | /* istanbul ignore else */
1555 | if ((process.env.NODE_ENV !== 'production')) {
1556 | store._hotUpdate = markRaw((newStore) => {
1557 | store._hotUpdating = true;
1558 | newStore._hmrPayload.state.forEach((stateKey) => {
1559 | if (stateKey in store.$state) {
1560 | const newStateTarget = newStore.$state[stateKey];
1561 | const oldStateSource = store.$state[stateKey];
1562 | if (typeof newStateTarget === 'object' &&
1563 | isPlainObject(newStateTarget) &&
1564 | isPlainObject(oldStateSource)) {
1565 | patchObject(newStateTarget, oldStateSource);
1566 | }
1567 | else {
1568 | // transfer the ref
1569 | newStore.$state[stateKey] = oldStateSource;
1570 | }
1571 | }
1572 | // patch direct access properties to allow store.stateProperty to work as
1573 | // store.$state.stateProperty
1574 | set(store, stateKey, toRef(newStore.$state, stateKey));
1575 | });
1576 | // remove deleted state properties
1577 | Object.keys(store.$state).forEach((stateKey) => {
1578 | if (!(stateKey in newStore.$state)) {
1579 | del(store, stateKey);
1580 | }
1581 | });
1582 | // avoid devtools logging this as a mutation
1583 | isListening = false;
1584 | isSyncListening = false;
1585 | pinia.state.value[$id] = toRef(newStore._hmrPayload, 'hotState');
1586 | isSyncListening = true;
1587 | nextTick().then(() => {
1588 | isListening = true;
1589 | });
1590 | for (const actionName in newStore._hmrPayload.actions) {
1591 | const action = newStore[actionName];
1592 | set(store, actionName, wrapAction(actionName, action));
1593 | }
1594 | // TODO: does this work in both setup and option store?
1595 | for (const getterName in newStore._hmrPayload.getters) {
1596 | const getter = newStore._hmrPayload.getters[getterName];
1597 | const getterValue = isOptionsStore
1598 | ? // special handling of options api
1599 | computed(() => {
1600 | setActivePinia(pinia);
1601 | return getter.call(store, store);
1602 | })
1603 | : getter;
1604 | set(store, getterName, getterValue);
1605 | }
1606 | // remove deleted getters
1607 | Object.keys(store._hmrPayload.getters).forEach((key) => {
1608 | if (!(key in newStore._hmrPayload.getters)) {
1609 | del(store, key);
1610 | }
1611 | });
1612 | // remove old actions
1613 | Object.keys(store._hmrPayload.actions).forEach((key) => {
1614 | if (!(key in newStore._hmrPayload.actions)) {
1615 | del(store, key);
1616 | }
1617 | });
1618 | // update the values used in devtools and to allow deleting new properties later on
1619 | store._hmrPayload = newStore._hmrPayload;
1620 | store._getters = newStore._getters;
1621 | store._hotUpdating = false;
1622 | });
1623 | }
1624 | if (USE_DEVTOOLS) {
1625 | const nonEnumerable = {
1626 | writable: true,
1627 | configurable: true,
1628 | // avoid warning on devtools trying to display this property
1629 | enumerable: false,
1630 | };
1631 | ['_p', '_hmrPayload', '_getters', '_customProperties'].forEach((p) => {
1632 | Object.defineProperty(store, p, assign({ value: store[p] }, nonEnumerable));
1633 | });
1634 | }
1635 | /* istanbul ignore if */
1636 | if (isVue2) {
1637 | // mark the store as ready before plugins
1638 | store._r = true;
1639 | }
1640 | // apply all plugins
1641 | pinia._p.forEach((extender) => {
1642 | /* istanbul ignore else */
1643 | if (USE_DEVTOOLS) {
1644 | const extensions = scope.run(() => extender({
1645 | store,
1646 | app: pinia._a,
1647 | pinia,
1648 | options: optionsForPlugin,
1649 | }));
1650 | Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));
1651 | assign(store, extensions);
1652 | }
1653 | else {
1654 | assign(store, scope.run(() => extender({
1655 | store,
1656 | app: pinia._a,
1657 | pinia,
1658 | options: optionsForPlugin,
1659 | })));
1660 | }
1661 | });
1662 | if ((process.env.NODE_ENV !== 'production') &&
1663 | store.$state &&
1664 | typeof store.$state === 'object' &&
1665 | typeof store.$state.constructor === 'function' &&
1666 | !store.$state.constructor.toString().includes('[native code]')) {
1667 | console.warn(`[🍍]: The "state" must be a plain object. It cannot be\n` +
1668 | `\tstate: () => new MyClass()\n` +
1669 | `Found in store "${store.$id}".`);
1670 | }
1671 | // only apply hydrate to option stores with an initial state in pinia
1672 | if (initialState &&
1673 | isOptionsStore &&
1674 | options.hydrate) {
1675 | options.hydrate(store.$state, initialState);
1676 | }
1677 | isListening = true;
1678 | isSyncListening = true;
1679 | return store;
1680 | }
1681 | function defineStore(
1682 | // TODO: add proper types from above
1683 | idOrOptions, setup, setupOptions) {
1684 | let id;
1685 | let options;
1686 | const isSetupStore = typeof setup === 'function';
1687 | if (typeof idOrOptions === 'string') {
1688 | id = idOrOptions;
1689 | // the option store setup will contain the actual options in this case
1690 | options = isSetupStore ? setupOptions : setup;
1691 | }
1692 | else {
1693 | options = idOrOptions;
1694 | id = idOrOptions.id;
1695 | if ((process.env.NODE_ENV !== 'production') && typeof id !== 'string') {
1696 | throw new Error(`[🍍]: "defineStore()" must be passed a store id as its first argument.`);
1697 | }
1698 | }
1699 | function useStore(pinia, hot) {
1700 | const hasContext = hasInjectionContext();
1701 | pinia =
1702 | // in test mode, ignore the argument provided as we can always retrieve a
1703 | // pinia instance with getActivePinia()
1704 | ((process.env.NODE_ENV === 'test') && activePinia && activePinia._testing ? null : pinia) ||
1705 | (hasContext ? inject(piniaSymbol, null) : null);
1706 | if (pinia)
1707 | setActivePinia(pinia);
1708 | if ((process.env.NODE_ENV !== 'production') && !activePinia) {
1709 | 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` +
1710 | `See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.\n` +
1711 | `This will fail in production.`);
1712 | }
1713 | pinia = activePinia;
1714 | if (!pinia._s.has(id)) {
1715 | // creating the store registers it in `pinia._s`
1716 | if (isSetupStore) {
1717 | createSetupStore(id, setup, options, pinia);
1718 | }
1719 | else {
1720 | createOptionsStore(id, options, pinia);
1721 | }
1722 | /* istanbul ignore else */
1723 | if ((process.env.NODE_ENV !== 'production')) {
1724 | // @ts-expect-error: not the right inferred type
1725 | useStore._pinia = pinia;
1726 | }
1727 | }
1728 | const store = pinia._s.get(id);
1729 | if ((process.env.NODE_ENV !== 'production') && hot) {
1730 | const hotId = '__hot:' + id;
1731 | const newStore = isSetupStore
1732 | ? createSetupStore(hotId, setup, options, pinia, true)
1733 | : createOptionsStore(hotId, assign({}, options), pinia, true);
1734 | hot._hotUpdate(newStore);
1735 | // cleanup the state properties and the store from the cache
1736 | delete pinia.state.value[hotId];
1737 | pinia._s.delete(hotId);
1738 | }
1739 | if ((process.env.NODE_ENV !== 'production') && IS_CLIENT) {
1740 | const currentInstance = getCurrentInstance();
1741 | // save stores in instances to access them devtools
1742 | if (currentInstance &&
1743 | currentInstance.proxy &&
1744 | // avoid adding stores that are just built for hot module replacement
1745 | !hot) {
1746 | const vm = currentInstance.proxy;
1747 | const cache = '_pStores' in vm ? vm._pStores : (vm._pStores = {});
1748 | cache[id] = store;
1749 | }
1750 | }
1751 | // StoreGeneric cannot be casted towards Store
1752 | return store;
1753 | }
1754 | useStore.$id = id;
1755 | return useStore;
1756 | }
1757 |
1758 | let mapStoreSuffix = 'Store';
1759 | /**
1760 | * Changes the suffix added by `mapStores()`. Can be set to an empty string.
1761 | * Defaults to `"Store"`. Make sure to extend the MapStoresCustomization
1762 | * interface if you are using TypeScript.
1763 | *
1764 | * @param suffix - new suffix
1765 | */
1766 | function setMapStoreSuffix(suffix // could be 'Store' but that would be annoying for JS
1767 | ) {
1768 | mapStoreSuffix = suffix;
1769 | }
1770 | /**
1771 | * Allows using stores without the composition API (`setup()`) by generating an
1772 | * object to be spread in the `computed` field of a component. It accepts a list
1773 | * of store definitions.
1774 | *
1775 | * @example
1776 | * ```js
1777 | * export default {
1778 | * computed: {
1779 | * // other computed properties
1780 | * ...mapStores(useUserStore, useCartStore)
1781 | * },
1782 | *
1783 | * created() {
1784 | * this.userStore // store with id "user"
1785 | * this.cartStore // store with id "cart"
1786 | * }
1787 | * }
1788 | * ```
1789 | *
1790 | * @param stores - list of stores to map to an object
1791 | */
1792 | function mapStores(...stores) {
1793 | if ((process.env.NODE_ENV !== 'production') && Array.isArray(stores[0])) {
1794 | console.warn(`[🍍]: Directly pass all stores to "mapStores()" without putting them in an array:\n` +
1795 | `Replace\n` +
1796 | `\tmapStores([useAuthStore, useCartStore])\n` +
1797 | `with\n` +
1798 | `\tmapStores(useAuthStore, useCartStore)\n` +
1799 | `This will fail in production if not fixed.`);
1800 | stores = stores[0];
1801 | }
1802 | return stores.reduce((reduced, useStore) => {
1803 | // @ts-expect-error: $id is added by defineStore
1804 | reduced[useStore.$id + mapStoreSuffix] = function () {
1805 | return useStore(this.$pinia);
1806 | };
1807 | return reduced;
1808 | }, {});
1809 | }
1810 | /**
1811 | * Allows using state and getters from one store without using the composition
1812 | * API (`setup()`) by generating an object to be spread in the `computed` field
1813 | * of a component.
1814 | *
1815 | * @param useStore - store to map from
1816 | * @param keysOrMapper - array or object
1817 | */
1818 | function mapState(useStore, keysOrMapper) {
1819 | return Array.isArray(keysOrMapper)
1820 | ? keysOrMapper.reduce((reduced, key) => {
1821 | reduced[key] = function () {
1822 | return useStore(this.$pinia)[key];
1823 | };
1824 | return reduced;
1825 | }, {})
1826 | : Object.keys(keysOrMapper).reduce((reduced, key) => {
1827 | // @ts-expect-error
1828 | reduced[key] = function () {
1829 | const store = useStore(this.$pinia);
1830 | const storeKey = keysOrMapper[key];
1831 | // for some reason TS is unable to infer the type of storeKey to be a
1832 | // function
1833 | return typeof storeKey === 'function'
1834 | ? storeKey.call(this, store)
1835 | : store[storeKey];
1836 | };
1837 | return reduced;
1838 | }, {});
1839 | }
1840 | /**
1841 | * Alias for `mapState()`. You should use `mapState()` instead.
1842 | * @deprecated use `mapState()` instead.
1843 | */
1844 | const mapGetters = mapState;
1845 | /**
1846 | * Allows directly using actions from your store without using the composition
1847 | * API (`setup()`) by generating an object to be spread in the `methods` field
1848 | * of a component.
1849 | *
1850 | * @param useStore - store to map from
1851 | * @param keysOrMapper - array or object
1852 | */
1853 | function mapActions(useStore, keysOrMapper) {
1854 | return Array.isArray(keysOrMapper)
1855 | ? keysOrMapper.reduce((reduced, key) => {
1856 | // @ts-expect-error
1857 | reduced[key] = function (...args) {
1858 | return useStore(this.$pinia)[key](...args);
1859 | };
1860 | return reduced;
1861 | }, {})
1862 | : Object.keys(keysOrMapper).reduce((reduced, key) => {
1863 | // @ts-expect-error
1864 | reduced[key] = function (...args) {
1865 | return useStore(this.$pinia)[keysOrMapper[key]](...args);
1866 | };
1867 | return reduced;
1868 | }, {});
1869 | }
1870 | /**
1871 | * Allows using state and getters from one store without using the composition
1872 | * API (`setup()`) by generating an object to be spread in the `computed` field
1873 | * of a component.
1874 | *
1875 | * @param useStore - store to map from
1876 | * @param keysOrMapper - array or object
1877 | */
1878 | function mapWritableState(useStore, keysOrMapper) {
1879 | return Array.isArray(keysOrMapper)
1880 | ? keysOrMapper.reduce((reduced, key) => {
1881 | // @ts-ignore
1882 | reduced[key] = {
1883 | get() {
1884 | return useStore(this.$pinia)[key];
1885 | },
1886 | set(value) {
1887 | // it's easier to type it here as any
1888 | return (useStore(this.$pinia)[key] = value);
1889 | },
1890 | };
1891 | return reduced;
1892 | }, {})
1893 | : Object.keys(keysOrMapper).reduce((reduced, key) => {
1894 | // @ts-ignore
1895 | reduced[key] = {
1896 | get() {
1897 | return useStore(this.$pinia)[keysOrMapper[key]];
1898 | },
1899 | set(value) {
1900 | // it's easier to type it here as any
1901 | return (useStore(this.$pinia)[keysOrMapper[key]] = value);
1902 | },
1903 | };
1904 | return reduced;
1905 | }, {});
1906 | }
1907 |
1908 | /**
1909 | * Creates an object of references with all the state, getters, and plugin-added
1910 | * state properties of the store. Similar to `toRefs()` but specifically
1911 | * designed for Pinia stores so methods and non reactive properties are
1912 | * completely ignored.
1913 | *
1914 | * @param store - store to extract the refs from
1915 | */
1916 | function storeToRefs(store) {
1917 | // See https://github.com/vuejs/pinia/issues/852
1918 | // It's easier to just use toRefs() even if it includes more stuff
1919 | if (isVue2) {
1920 | // @ts-expect-error: toRefs include methods and others
1921 | return toRefs(store);
1922 | }
1923 | else {
1924 | store = toRaw(store);
1925 | const refs = {};
1926 | for (const key in store) {
1927 | const value = store[key];
1928 | if (isRef(value) || isReactive(value)) {
1929 | // @ts-expect-error: the key is state or getter
1930 | refs[key] =
1931 | // ---
1932 | toRef(store, key);
1933 | }
1934 | }
1935 | return refs;
1936 | }
1937 | }
1938 |
1939 | /**
1940 | * Vue 2 Plugin that must be installed for pinia to work. Note **you don't need
1941 | * this plugin if you are using Nuxt.js**. Use the `buildModule` instead:
1942 | * https://pinia.vuejs.org/ssr/nuxt.html.
1943 | *
1944 | * @example
1945 | * ```js
1946 | * import Vue from 'vue'
1947 | * import { PiniaVuePlugin, createPinia } from 'pinia'
1948 | *
1949 | * Vue.use(PiniaVuePlugin)
1950 | * const pinia = createPinia()
1951 | *
1952 | * new Vue({
1953 | * el: '#app',
1954 | * // ...
1955 | * pinia,
1956 | * })
1957 | * ```
1958 | *
1959 | * @param _Vue - `Vue` imported from 'vue'.
1960 | */
1961 | const PiniaVuePlugin = function (_Vue) {
1962 | // Equivalent of
1963 | // app.config.globalProperties.$pinia = pinia
1964 | _Vue.mixin({
1965 | beforeCreate() {
1966 | const options = this.$options;
1967 | if (options.pinia) {
1968 | const pinia = options.pinia;
1969 | // HACK: taken from provide(): https://github.com/vuejs/composition-api/blob/main/src/apis/inject.ts#L31
1970 | /* istanbul ignore else */
1971 | if (!this._provided) {
1972 | const provideCache = {};
1973 | Object.defineProperty(this, '_provided', {
1974 | get: () => provideCache,
1975 | set: (v) => Object.assign(provideCache, v),
1976 | });
1977 | }
1978 | this._provided[piniaSymbol] = pinia;
1979 | // propagate the pinia instance in an SSR friendly way
1980 | // avoid adding it to nuxt twice
1981 | /* istanbul ignore else */
1982 | if (!this.$pinia) {
1983 | this.$pinia = pinia;
1984 | }
1985 | pinia._a = this;
1986 | if (IS_CLIENT) {
1987 | // this allows calling useStore() outside of a component setup after
1988 | // installing pinia's plugin
1989 | setActivePinia(pinia);
1990 | }
1991 | if (USE_DEVTOOLS) {
1992 | registerPiniaDevtools(pinia._a, pinia);
1993 | }
1994 | }
1995 | else if (!this.$pinia && options.parent && options.parent.$pinia) {
1996 | this.$pinia = options.parent.$pinia;
1997 | }
1998 | },
1999 | destroyed() {
2000 | delete this._pStores;
2001 | },
2002 | });
2003 | };
2004 |
2005 | export { MutationType, PiniaVuePlugin, acceptHMRUpdate, createPinia, defineStore, getActivePinia, mapActions, mapGetters, mapState, mapStores, mapWritableState, setActivePinia, setMapStoreSuffix, skipHydrate, storeToRefs };
2006 |
--------------------------------------------------------------------------------