├── .npmrc ├── env.d.ts ├── composables ├── src │ ├── index.ts │ └── mouse │ │ ├── index.ts │ │ └── useMouse.ts ├── tsconfig.json ├── package.json └── vite.config.js ├── components ├── src │ ├── index.ts │ └── my-btn │ │ └── MyBtn.vue ├── components.d.ts ├── tsconfig.json ├── package.json └── vite.config.js ├── apps ├── application1 │ ├── public │ │ └── favicon.ico │ ├── .vscode │ │ └── extensions.json │ ├── tsconfig.vite-config.json │ ├── src │ │ ├── views │ │ │ ├── HomeView.vue │ │ │ ├── AboutView.vue │ │ │ └── HelloWorld.vue │ │ ├── assets │ │ │ ├── logo.svg │ │ │ └── base.css │ │ ├── components │ │ │ ├── icons │ │ │ │ ├── IconSupport.vue │ │ │ │ ├── IconTooling.vue │ │ │ │ ├── IconCommunity.vue │ │ │ │ ├── IconDocumentation.vue │ │ │ │ └── IconEcosystem.vue │ │ │ ├── HelloWorld.vue │ │ │ ├── WelcomeItem.vue │ │ │ └── TheWelcome.vue │ │ ├── main.ts │ │ ├── router │ │ │ └── index.ts │ │ └── App.vue │ ├── .gitignore │ ├── tsconfig.json │ ├── index.html │ ├── vite.config.ts │ ├── components.d.ts │ ├── package.json │ └── README.md └── application2 │ ├── public │ └── favicon.ico │ ├── .vscode │ └── extensions.json │ ├── tsconfig.vite-config.json │ ├── src │ ├── main.ts │ ├── assets │ │ ├── logo.svg │ │ └── base.css │ ├── components │ │ ├── icons │ │ │ ├── IconSupport.vue │ │ │ ├── IconTooling.vue │ │ │ ├── IconCommunity.vue │ │ │ ├── IconDocumentation.vue │ │ │ └── IconEcosystem.vue │ │ └── MyApp2.vue │ └── App.vue │ ├── .gitignore │ ├── tsconfig.json │ ├── index.html │ ├── components.d.ts │ ├── vite.config.ts │ ├── package.json │ └── README.md ├── pnpm-workspace.yaml ├── .prettierrc ├── .vscode ├── settings.json ├── extensions.json └── tasks.json ├── .gitignore ├── package.json ├── .eslintrc.js ├── README.md └── pnpm-lock.yaml /.npmrc: -------------------------------------------------------------------------------- 1 | enable-pre-post-scripts=true -------------------------------------------------------------------------------- /env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /composables/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './mouse/'; 2 | -------------------------------------------------------------------------------- /composables/src/mouse/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useMouse'; 2 | -------------------------------------------------------------------------------- /components/src/index.ts: -------------------------------------------------------------------------------- 1 | // Components 2 | export { default as MyBtn } from './my-btn/MyBtn.vue'; 3 | -------------------------------------------------------------------------------- /apps/application1/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghiscoding/vue3-pnpm-workspace/HEAD/apps/application1/public/favicon.ico -------------------------------------------------------------------------------- /apps/application2/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghiscoding/vue3-pnpm-workspace/HEAD/apps/application2/public/favicon.ico -------------------------------------------------------------------------------- /apps/application1/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["johnsoncodehk.volar", "johnsoncodehk.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /apps/application2/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["johnsoncodehk.volar", "johnsoncodehk.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'apps/application1/**' 3 | - 'apps/application2/**' 4 | - 'components/**' 5 | - 'composables/**' 6 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "semi": true, 4 | "tabWidth": 2, 5 | "proseWrap": "never", 6 | "trailingComma": "es5", 7 | "printWidth": 170, 8 | "bracketSpacing": true 9 | } 10 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.defaultFormatter": "esbenp.prettier-vscode", 3 | "editor.formatOnSave": true, 4 | "editor.formatOnPaste": false, 5 | "typescript.tsdk": "node_modules/typescript/lib" 6 | } 7 | -------------------------------------------------------------------------------- /apps/application1/tsconfig.vite-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.node.json", 3 | "include": ["vite.config.*"], 4 | "compilerOptions": { 5 | "composite": true, 6 | "types": ["node"] 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /apps/application2/tsconfig.vite-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.node.json", 3 | "include": ["vite.config.*"], 4 | "compilerOptions": { 5 | "composite": true, 6 | "types": ["node"] 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /apps/application1/src/views/HomeView.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | pnpm-debug.log* 5 | 6 | # misc 7 | node_modules 8 | .DS_Store 9 | dist 10 | dist-ssr 11 | coverage 12 | *.local 13 | 14 | # Editor directories and files 15 | .idea 16 | *.suo 17 | *.ntvs* 18 | *.njsproj 19 | *.sln 20 | *.sw? 21 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "antfu.vite", 4 | "dbaeumer.vscode-eslint", 5 | "rvest.vs-code-prettier-eslint", 6 | "Vue.volar", 7 | "andys8.jest-snippets", 8 | "editorconfig.editorconfig", 9 | "esbenp.prettier-vscode" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /apps/application2/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue'; 2 | import App from './App.vue'; 3 | 4 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 5 | import style from '@monotest/components/dist/style.css'; 6 | 7 | const app = createApp(App); 8 | 9 | app.mount('#app'); 10 | -------------------------------------------------------------------------------- /apps/application1/src/views/AboutView.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /apps/application1/src/assets/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/application2/src/assets/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/application1/src/components/icons/IconSupport.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /apps/application2/src/components/icons/IconSupport.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /apps/application1/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue'; 2 | import App from './App.vue'; 3 | import router from './router'; 4 | 5 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 6 | import style from '@monotest/components/dist/style.css'; 7 | 8 | const app = createApp(App); 9 | 10 | app.use(router); 11 | 12 | app.mount('#app'); 13 | -------------------------------------------------------------------------------- /apps/application1/.gitignore: -------------------------------------------------------------------------------- 1 | .chrome 2 | .DS_Store 3 | node_modules 4 | /dist 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | pnpm-debug.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | *.suo 17 | *.ntvs* 18 | *.njsproj 19 | *.sln 20 | *.sw? 21 | .env.development 22 | 23 | junit.xml 24 | 25 | coverage -------------------------------------------------------------------------------- /apps/application2/.gitignore: -------------------------------------------------------------------------------- 1 | .chrome 2 | .DS_Store 3 | node_modules 4 | /dist 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | pnpm-debug.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | *.suo 17 | *.ntvs* 18 | *.njsproj 19 | *.sln 20 | *.sw? 21 | .env.development 22 | 23 | junit.xml 24 | 25 | coverage -------------------------------------------------------------------------------- /apps/application1/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.web.json", 3 | "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "paths": { 7 | "@/*": ["./src/*"] 8 | }, 9 | "types": ["vite/client"] 10 | }, 11 | 12 | "references": [ 13 | { 14 | "path": "./tsconfig.vite-config.json" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /apps/application2/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.web.json", 3 | "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "paths": { 7 | "@/*": ["./src/*"] 8 | }, 9 | "types": ["vite/client"] 10 | }, 11 | 12 | "references": [ 13 | { 14 | "path": "./tsconfig.vite-config.json" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /apps/application1/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /apps/application2/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /components/components.d.ts: -------------------------------------------------------------------------------- 1 | // generated by unplugin-vue-components 2 | // We suggest you to commit this file into source control 3 | // Read more: https://github.com/vuejs/vue-next/pull/3399 4 | import '@vue/runtime-core' 5 | 6 | declare module '@vue/runtime-core' { 7 | export interface GlobalComponents { 8 | MyBtnMyBtn: typeof import('./src/my-btn/MyBtn.vue')['default'] 9 | RouterLink: typeof import('vue-router')['RouterLink'] 10 | RouterView: typeof import('vue-router')['RouterView'] 11 | } 12 | } 13 | 14 | export {} 15 | -------------------------------------------------------------------------------- /composables/src/mouse/useMouse.ts: -------------------------------------------------------------------------------- 1 | // mouse.js 2 | import { ref, onMounted, onUnmounted } from 'vue'; 3 | 4 | // by convention, composable function names start with "use" 5 | export function useMouse() { 6 | // state encapsulated and managed by the composable 7 | const x = ref(0); 8 | const y = ref(0); 9 | 10 | // a composable can update its managed state over time. 11 | function update(event: MouseEvent) { 12 | x.value = event.pageX; 13 | y.value = event.pageY; 14 | } 15 | 16 | // a composable can also hook into its owner component's 17 | // lifecycle to setup and teardown side effects. 18 | onMounted(() => window.addEventListener('mousemove', update)); 19 | onUnmounted(() => window.removeEventListener('mousemove', update)); 20 | 21 | // expose managed state as return value 22 | return { x, y }; 23 | } 24 | -------------------------------------------------------------------------------- /apps/application1/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | 17 | 40 | -------------------------------------------------------------------------------- /composables/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2018", 4 | "lib": ["DOM", "DOM.Iterable", "es2018"], 5 | "allowJs": true, 6 | "skipLibCheck": false, 7 | "esModuleInterop": false, 8 | "allowSyntheticDefaultImports": true, 9 | "jsx": "preserve", 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "esnext", 13 | "moduleResolution": "node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": false, 16 | "baseUrl": "./", 17 | "outDir": "dist", 18 | "declaration": true, 19 | "declarationDir": "dist", 20 | "declarationMap": true, 21 | "sourceMap": true, 22 | "paths": { 23 | "@/*": ["./*"] 24 | }, 25 | "types": ["vite/client"], 26 | "typeRoots": ["node_modules/@types"] 27 | }, 28 | "include": ["./src"], 29 | "exclude": ["node_modules", "../node_modules"] 30 | } 31 | -------------------------------------------------------------------------------- /components/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2018", 4 | "lib": ["DOM", "DOM.Iterable", "es2018"], 5 | "allowJs": true, 6 | "skipLibCheck": false, 7 | "esModuleInterop": false, 8 | "allowSyntheticDefaultImports": true, 9 | "jsx": "preserve", 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "esnext", 13 | "moduleResolution": "node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": false, 16 | "baseUrl": "./", 17 | "outDir": "dist", 18 | "declaration": true, 19 | "declarationDir": "dist", 20 | "declarationMap": true, 21 | "sourceMap": true, 22 | "paths": { 23 | "@/*": ["src/*"], 24 | "@composables": ["../composables/src/"] 25 | }, 26 | "types": ["vite/client"], 27 | "typeRoots": ["node_modules/@types"] 28 | }, 29 | "include": ["./src"], 30 | "exclude": ["node_modules", "../node_modules"] 31 | } 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "monotest", 3 | "private": true, 4 | "version": "0.1.0", 5 | "scripts": { 6 | "bootstrap": "pnpm install", 7 | "app1:predev": "pnpm -r --stream --filter components build", 8 | "app1:dev": "pnpm --filter \"{apps/application1/**}\" dev", 9 | "app2:predev": "pnpm -r --stream --filter components build", 10 | "app2:dev": "pnpm --filter \"{apps/application2/**}\" dev", 11 | "prebuild": "pnpm -r lint", 12 | "build": "pnpm -r --stream build", 13 | "app1:build": "pnpm -r --stream --filter components --filter \"{apps/application1/**}\" build", 14 | "app2:build": "pnpm -r --stream --filter components --filter \"{apps/application2/**}\" build", 15 | "build:components": "pnpm --filter components build", 16 | "build:composables": "pnpm --filter \"{composables/**}\" build", 17 | "build:watch": "pnpm -r --parallel build:watch", 18 | "lint": "pnpm -r lint" 19 | }, 20 | "devDependencies": { 21 | "pnpm": "^7.1.6" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /apps/application2/components.d.ts: -------------------------------------------------------------------------------- 1 | // generated by unplugin-vue-components 2 | // We suggest you to commit this file into source control 3 | // Read more: https://github.com/vuejs/vue-next/pull/3399 4 | import '@vue/runtime-core' 5 | 6 | declare module '@vue/runtime-core' { 7 | export interface GlobalComponents { 8 | IconsIconCommunity: typeof import('./src/components/icons/IconCommunity.vue')['default'] 9 | IconsIconDocumentation: typeof import('./src/components/icons/IconDocumentation.vue')['default'] 10 | IconsIconEcosystem: typeof import('./src/components/icons/IconEcosystem.vue')['default'] 11 | IconsIconSupport: typeof import('./src/components/icons/IconSupport.vue')['default'] 12 | IconsIconTooling: typeof import('./src/components/icons/IconTooling.vue')['default'] 13 | MyApp2: typeof import('./src/components/MyApp2.vue')['default'] 14 | RouterLink: typeof import('vue-router')['RouterLink'] 15 | RouterView: typeof import('vue-router')['RouterView'] 16 | } 17 | } 18 | 19 | export {} 20 | -------------------------------------------------------------------------------- /apps/application1/src/components/icons/IconTooling.vue: -------------------------------------------------------------------------------- 1 | 2 | 20 | -------------------------------------------------------------------------------- /apps/application2/src/components/icons/IconTooling.vue: -------------------------------------------------------------------------------- 1 | 2 | 20 | -------------------------------------------------------------------------------- /apps/application1/src/router/index.ts: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory } from 'vue-router'; 2 | import HomeView from '../views/HomeView.vue'; 3 | 4 | const router = createRouter({ 5 | history: createWebHistory(import.meta.env.BASE_URL), 6 | routes: [ 7 | { 8 | path: '/', 9 | name: 'home', 10 | component: HomeView, 11 | }, 12 | { 13 | path: '/about', 14 | name: 'about', 15 | // route level code-splitting 16 | // this generates a separate chunk (About.[hash].js) for this route 17 | // which is lazy-loaded when the route is visited. 18 | component: () => import('../views/AboutView.vue'), 19 | }, 20 | { 21 | path: '/hello', 22 | name: 'hello', 23 | // route level code-splitting 24 | // this generates a separate chunk (About.[hash].js) for this route 25 | // which is lazy-loaded when the route is visited. 26 | component: () => import('../views/HelloWorld.vue'), 27 | }, 28 | ], 29 | }); 30 | 31 | export default router; 32 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "Build (all)", 6 | "type": "shell", 7 | "command": "pnpm build", 8 | "problemMatcher": [] 9 | }, 10 | { 11 | "label": "Build (Components)", 12 | "type": "shell", 13 | "command": "pnpm build:components", 14 | "problemMatcher": [] 15 | }, 16 | { 17 | "label": "Build (Composables)", 18 | "type": "shell", 19 | "command": "pnpm build:composables", 20 | "problemMatcher": [] 21 | }, 22 | { 23 | "label": "Build Watch (Components and Composables)", 24 | "type": "shell", 25 | "command": "pnpm build:watch", 26 | "problemMatcher": [] 27 | }, 28 | { 29 | "label": "Dev Serve (App1)", 30 | "type": "shell", 31 | "command": "pnpm app1:dev", 32 | "problemMatcher": [] 33 | }, 34 | { 35 | "label": "Dev Serve (App2)", 36 | "type": "shell", 37 | "command": "pnpm app2:dev", 38 | "problemMatcher": [] 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /apps/application1/src/components/icons/IconCommunity.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /apps/application1/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'url'; 2 | 3 | import { defineConfig } from 'vite'; 4 | import vue from '@vitejs/plugin-vue'; 5 | import Components from 'unplugin-vue-components/vite'; 6 | import path from 'path'; 7 | 8 | // https://vitejs.dev/config/ 9 | export default defineConfig({ 10 | plugins: [ 11 | vue({ 12 | style: { 13 | filename: './style.css', 14 | }, 15 | }), 16 | Components({ 17 | dirs: ['src/components', '../components/src'], 18 | extensions: ['vue'], 19 | directoryAsNamespace: true, 20 | globalNamespaces: ['global'], 21 | include: [/\.vue$/, /\.vue\?vue/, /\.md$/], 22 | exclude: [/node_modules/, /\.git/], 23 | resolvers: [], 24 | }), 25 | ], 26 | resolve: { 27 | alias: { 28 | '@': fileURLToPath(new URL('./src', import.meta.url)), 29 | '@components': `${path.resolve(__dirname, '../components/src')}`, 30 | '@composables': `${path.resolve(__dirname, '../composables/src')}`, 31 | }, 32 | }, 33 | server: { 34 | port: 3000, 35 | }, 36 | }); 37 | -------------------------------------------------------------------------------- /apps/application2/src/components/icons/IconCommunity.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /apps/application2/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'url'; 2 | 3 | import { defineConfig } from 'vite'; 4 | import vue from '@vitejs/plugin-vue'; 5 | import Components from 'unplugin-vue-components/vite'; 6 | import path from 'path'; 7 | 8 | // https://vitejs.dev/config/ 9 | export default defineConfig({ 10 | plugins: [ 11 | vue({ 12 | style: { 13 | filename: './style.css', 14 | }, 15 | }), 16 | Components({ 17 | dirs: ['src/components', '../components/src'], 18 | extensions: ['vue'], 19 | directoryAsNamespace: true, 20 | globalNamespaces: ['global'], 21 | include: [/\.vue$/, /\.vue\?vue/, /\.md$/], 22 | exclude: [/node_modules/, /\.git/], 23 | resolvers: [], 24 | }), 25 | ], 26 | resolve: { 27 | alias: { 28 | '@': fileURLToPath(new URL('./src', import.meta.url)), 29 | '@components': `${path.resolve(__dirname, '../components/src')}`, 30 | '@composables': `${path.resolve(__dirname, '../composables/src')}`, 31 | }, 32 | }, 33 | server: { 34 | port: 4000, 35 | }, 36 | }); 37 | -------------------------------------------------------------------------------- /apps/application1/components.d.ts: -------------------------------------------------------------------------------- 1 | // generated by unplugin-vue-components 2 | // We suggest you to commit this file into source control 3 | // Read more: https://github.com/vuejs/vue-next/pull/3399 4 | import '@vue/runtime-core' 5 | 6 | declare module '@vue/runtime-core' { 7 | export interface GlobalComponents { 8 | HelloWorld: typeof import('./src/components/HelloWorld.vue')['default'] 9 | IconsIconCommunity: typeof import('./src/components/icons/IconCommunity.vue')['default'] 10 | IconsIconDocumentation: typeof import('./src/components/icons/IconDocumentation.vue')['default'] 11 | IconsIconEcosystem: typeof import('./src/components/icons/IconEcosystem.vue')['default'] 12 | IconsIconSupport: typeof import('./src/components/icons/IconSupport.vue')['default'] 13 | IconsIconTooling: typeof import('./src/components/icons/IconTooling.vue')['default'] 14 | RouterLink: typeof import('vue-router')['RouterLink'] 15 | RouterView: typeof import('vue-router')['RouterView'] 16 | TheWelcome: typeof import('./src/components/TheWelcome.vue')['default'] 17 | WelcomeItem: typeof import('./src/components/WelcomeItem.vue')['default'] 18 | } 19 | } 20 | 21 | export {} 22 | -------------------------------------------------------------------------------- /apps/application1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@monotest/application2", 3 | "version": "0.1.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vue-tsc --noEmit && vite build", 7 | "preview": "vite preview --port 5050", 8 | "typecheck": "vue-tsc --noEmit", 9 | "lint": "eslint --ext .ts,.vue src/ --ignore-path .gitignore" 10 | }, 11 | "dependencies": { 12 | "@monotest/components": "workspace:*", 13 | "@monotest/composables": "workspace:*", 14 | "vue": "^3.2.36", 15 | "vue-router": "^4.0.15" 16 | }, 17 | "devDependencies": { 18 | "@types/node": "^17.0.35", 19 | "@typescript-eslint/eslint-plugin": "^5.1.0", 20 | "@typescript-eslint/parser": "^5.1.0", 21 | "@vitejs/plugin-vue": "^2.3.3", 22 | "@vue/eslint-config-prettier": "^7.0.0", 23 | "@vue/eslint-config-typescript": "^10.0.0", 24 | "@vue/tsconfig": "^0.1.3", 25 | "eslint": "^8.16.0", 26 | "eslint-plugin-prettier": "^4.0.0", 27 | "eslint-plugin-vue": "^9.0.1", 28 | "prettier": "^2.6.2", 29 | "typescript": "^4.7.2", 30 | "unplugin-vue-components": "^0.19.6", 31 | "vite": "^2.9.9", 32 | "vue-eslint-parser": "^9.0.2", 33 | "vue-tsc": "^0.34.16" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /apps/application2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@monotest/application2", 3 | "version": "0.1.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vue-tsc --noEmit && vite build", 7 | "preview": "vite preview --port 5050", 8 | "typecheck": "vue-tsc --noEmit", 9 | "lint": "eslint --ext .ts,.vue src/ --ignore-path .gitignore" 10 | }, 11 | "dependencies": { 12 | "@monotest/components": "workspace:*", 13 | "@monotest/composables": "workspace:*", 14 | "vue": "^3.2.36", 15 | "vue-router": "^4.0.15" 16 | }, 17 | "devDependencies": { 18 | "@types/node": "^17.0.35", 19 | "@typescript-eslint/eslint-plugin": "^5.1.0", 20 | "@typescript-eslint/parser": "^5.1.0", 21 | "@vitejs/plugin-vue": "^2.3.3", 22 | "@vue/eslint-config-prettier": "^7.0.0", 23 | "@vue/eslint-config-typescript": "^10.0.0", 24 | "@vue/tsconfig": "^0.1.3", 25 | "eslint": "^8.16.0", 26 | "eslint-plugin-prettier": "^4.0.0", 27 | "eslint-plugin-vue": "^9.0.1", 28 | "prettier": "^2.6.2", 29 | "typescript": "^4.7.2", 30 | "unplugin-vue-components": "^0.19.6", 31 | "vite": "^2.9.9", 32 | "vue-eslint-parser": "^9.0.2", 33 | "vue-tsc": "^0.34.16" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /composables/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@monotest/composables", 3 | "version": "0.1.0", 4 | "license": "MIT", 5 | "author": "Ghislain B.", 6 | "module": "./dist/composables.es.js", 7 | "main": "./dist/composables.es.js", 8 | "exports": { 9 | ".": { 10 | "import": "./dist/composables.es.js" 11 | }, 12 | "./*": "./*" 13 | }, 14 | "types": "dist/index.d.ts", 15 | "typings": "dist/index.d.ts", 16 | "files": [ 17 | "dist" 18 | ], 19 | "sideEffects": [ 20 | "*.css", 21 | "*.scss" 22 | ], 23 | "scripts": { 24 | "build": "vite build && vue-tsc --emitDeclarationOnly", 25 | "build:watch": "vite build --watch", 26 | "build:types": "vue-tsc --emitDeclarationOnly", 27 | "lint": "eslint --ext .ts,.vue src/ --ignore-path ../.gitignore" 28 | }, 29 | "dependencies": { 30 | "sass": "^1.52.1", 31 | "vue": "^3.2.36" 32 | }, 33 | "peerDependencies": { 34 | "vue": "3.x" 35 | }, 36 | "devDependencies": { 37 | "@vitejs/plugin-vue": "^2.3.3", 38 | "eslint": "^8.16.0", 39 | "typescript": "^4.7.2", 40 | "unplugin-vue-components": "^0.19.6", 41 | "vite": "^2.9.9", 42 | "vue-eslint-parser": "^9.0.2", 43 | "vue-tsc": "^0.34.16" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /components/src/my-btn/MyBtn.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 16 | 17 | 50 | -------------------------------------------------------------------------------- /apps/application1/src/components/icons/IconDocumentation.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /apps/application2/src/components/icons/IconDocumentation.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: 'vue-eslint-parser', 3 | root: true, 4 | env: { 5 | node: true, 6 | }, 7 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:vue/vue3-recommended', '@vue/typescript/recommended', '@vue/prettier'], 8 | parserOptions: { 9 | parser: '@typescript-eslint/parser', 10 | ecmaVersion: 2020, 11 | ecmaFeatures: { 12 | jsx: false, 13 | }, 14 | }, 15 | rules: { 16 | 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 17 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 18 | 'no-use-before-define': 'off', 19 | 'prettier/prettier': ['error', { endOfLine: 'auto' }], 20 | semi: 2, 21 | '@typescript-eslint/no-inferrable-types': 'off', 22 | '@typescript-eslint/indent': ['warn', 2], 23 | '@typescript-eslint/no-empty-function': 'off', 24 | '@typescript-eslint/no-var-requires': 0, 25 | '@typescript-eslint/no-explicit-any': 0, 26 | '@typescript-eslint/no-use-before-define': ['error', { functions: false, variables: false, classes: false }], 27 | }, 28 | overrides: [ 29 | { 30 | files: ['**/__tests__/*.{j,t}s', '**/tests/unit/**/*.spec.{j,t}s'], 31 | env: { 32 | jest: true, 33 | }, 34 | }, 35 | ], 36 | }; 37 | -------------------------------------------------------------------------------- /components/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@monotest/components", 3 | "version": "0.1.0", 4 | "license": "MIT", 5 | "author": "Ghislain B.", 6 | "module": "./dist/components.es.js", 7 | "main": "./dist/components.umd.js", 8 | "exports": { 9 | ".": { 10 | "import": "./dist/components.es.js", 11 | "require": "./dist/my-component-lib.umd.js" 12 | }, 13 | "./*": "./*" 14 | }, 15 | "types": "./dist/types/index.d.ts", 16 | "typings": "dist/index.d.ts", 17 | "files": [ 18 | "dist" 19 | ], 20 | "sideEffects": [ 21 | "*.css", 22 | "*.scss" 23 | ], 24 | "scripts": { 25 | "build": "vite build && vue-tsc --emitDeclarationOnly", 26 | "build:watch": "vite build --watch", 27 | "build:types": "vue-tsc --emitDeclarationOnly", 28 | "lint": "eslint --ext .ts,.vue src/ --ignore-path ../.gitignore" 29 | }, 30 | "dependencies": { 31 | "@monotest/composables": "workspace:*", 32 | "sass": "^1.52.1", 33 | "vue": "^3.2.36" 34 | }, 35 | "peerDependencies": { 36 | "vue": "3.2.36" 37 | }, 38 | "devDependencies": { 39 | "@vitejs/plugin-vue": "^2.3.3", 40 | "eslint": "^8.16.0", 41 | "typescript": "^4.7.2", 42 | "unplugin-vue-components": "^0.19.6", 43 | "vite": "^2.9.9", 44 | "vue-eslint-parser": "^9.0.2", 45 | "vue-tsc": "^0.34.16" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /apps/application2/src/components/MyApp2.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 36 | 37 | 66 | -------------------------------------------------------------------------------- /apps/application1/src/components/WelcomeItem.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 87 | -------------------------------------------------------------------------------- /apps/application1/README.md: -------------------------------------------------------------------------------- 1 | # vite-demo 2 | 3 | This template should help get you started developing with Vue 3 in Vite. 4 | 5 | ## Recommended IDE Setup 6 | 7 | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.vscode-typescript-vue-plugin). 8 | 9 | ## Type Support for `.vue` Imports in TS 10 | 11 | TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types. 12 | 13 | If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: 14 | 15 | 1. Disable the built-in TypeScript Extension 16 | 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette 17 | 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` 18 | 2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. 19 | 20 | ## Customize configuration 21 | 22 | See [Vite Configuration Reference](https://vitejs.dev/config/). 23 | 24 | ## Project Setup 25 | 26 | ```sh 27 | npm install 28 | ``` 29 | 30 | ### Compile and Hot-Reload for Development 31 | 32 | ```sh 33 | npm run dev 34 | ``` 35 | 36 | ### Type-Check, Compile and Minify for Production 37 | 38 | ```sh 39 | npm run build 40 | ``` 41 | 42 | ### Lint with [ESLint](https://eslint.org/) 43 | 44 | ```sh 45 | npm run lint 46 | ``` 47 | -------------------------------------------------------------------------------- /apps/application2/README.md: -------------------------------------------------------------------------------- 1 | # vite-demo 2 | 3 | This template should help get you started developing with Vue 3 in Vite. 4 | 5 | ## Recommended IDE Setup 6 | 7 | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.vscode-typescript-vue-plugin). 8 | 9 | ## Type Support for `.vue` Imports in TS 10 | 11 | TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types. 12 | 13 | If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: 14 | 15 | 1. Disable the built-in TypeScript Extension 16 | 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette 17 | 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` 18 | 2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. 19 | 20 | ## Customize configuration 21 | 22 | See [Vite Configuration Reference](https://vitejs.dev/config/). 23 | 24 | ## Project Setup 25 | 26 | ```sh 27 | npm install 28 | ``` 29 | 30 | ### Compile and Hot-Reload for Development 31 | 32 | ```sh 33 | npm run dev 34 | ``` 35 | 36 | ### Type-Check, Compile and Minify for Production 37 | 38 | ```sh 39 | npm run build 40 | ``` 41 | 42 | ### Lint with [ESLint](https://eslint.org/) 43 | 44 | ```sh 45 | npm run lint 46 | ``` 47 | -------------------------------------------------------------------------------- /components/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import vue from '@vitejs/plugin-vue'; 3 | import Components from 'unplugin-vue-components/vite'; 4 | 5 | import path from 'node:path'; 6 | import { fileURLToPath } from 'node:url'; 7 | 8 | const filename = fileURLToPath(import.meta.url); 9 | const dirname = path.dirname(filename); 10 | 11 | export default defineConfig({ 12 | server: { 13 | fs: { 14 | allow: ['..'], 15 | }, 16 | }, 17 | plugins: [ 18 | vue({ 19 | style: { 20 | filename: './style.css', 21 | }, 22 | }), 23 | Components({ 24 | dirs: ['src'], 25 | extensions: ['vue'], 26 | directoryAsNamespace: true, 27 | globalNamespaces: ['global'], 28 | include: [/\.vue$/, /\.vue\?vue/, /\.md$/], 29 | exclude: [/node_modules/, /\.git/], 30 | resolvers: [], 31 | }), 32 | ], 33 | build: { 34 | lib: { 35 | entry: path.resolve(dirname, 'src/index.ts'), 36 | name: 'components', 37 | }, 38 | sourcemap: true, 39 | rollupOptions: { 40 | // manualChunks: (id) => { 41 | // if (id.includes('node_modules')) { 42 | // return 'vendor'; 43 | // } 44 | // if (id.includes('composables')) { 45 | // return 'composables'; 46 | // } 47 | // // return path.parse(id).name; 48 | // }, 49 | external: ['vue'], 50 | output: { 51 | // minifyInternalExports: false, 52 | // chunkFileNames: '[name].js', 53 | // Provide global variables to use in the UMD build 54 | // for externalized deps 55 | globals: { 56 | vue: 'Vue', 57 | }, 58 | }, 59 | }, 60 | }, 61 | resolve: { 62 | alias: { 63 | '@': path.resolve(dirname, '/'), 64 | '@components': path.resolve(dirname, 'src'), 65 | '@composables': path.resolve(dirname, '../composables/src/'), 66 | }, 67 | }, 68 | }); 69 | -------------------------------------------------------------------------------- /composables/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import vue from '@vitejs/plugin-vue'; 3 | import Components from 'unplugin-vue-components/vite'; 4 | import path from 'node:path'; 5 | import { fileURLToPath } from 'node:url'; 6 | 7 | const filename = fileURLToPath(import.meta.url); 8 | const dirname = path.dirname(filename); 9 | 10 | export default defineConfig({ 11 | server: { 12 | fs: { 13 | allow: ['..'], 14 | }, 15 | }, 16 | plugins: [ 17 | vue({ 18 | style: { 19 | filename: './style.css', 20 | }, 21 | }), 22 | Components({ 23 | dirs: ['src'], 24 | extensions: ['vue'], 25 | directoryAsNamespace: true, 26 | globalNamespaces: ['global'], 27 | include: [/\.vue$/, /\.vue\?vue/, /\.md$/], 28 | exclude: [/node_modules/, /\.git/], 29 | resolvers: [], 30 | }), 31 | ], 32 | build: { 33 | lib: { 34 | entry: path.resolve(dirname, 'src/index.ts'), 35 | name: 'components', 36 | // fileName: (format) => `my-lib.${format}.js` 37 | // formats: ["es"], 38 | }, 39 | sourcemap: true, 40 | rollupOptions: { 41 | manualChunks: (id) => { 42 | if (id.includes('node_modules')) { 43 | return 'vendor'; 44 | } 45 | if (id.includes('composables')) { 46 | return 'composables'; 47 | } 48 | // return path.parse(id).name; 49 | }, 50 | external: ['vue'], 51 | output: { 52 | minifyInternalExports: false, 53 | chunkFileNames: '[name].js', 54 | // Provide global variables to use in the UMD build 55 | // for externalized deps 56 | globals: { 57 | vue: 'Vue', 58 | }, 59 | }, 60 | }, 61 | }, 62 | resolve: { 63 | alias: { 64 | '@': path.resolve(dirname, '/'), 65 | '@components': path.resolve(dirname, 'src'), 66 | '@composables': path.resolve(dirname, '../composables/src/'), 67 | }, 68 | }, 69 | }); 70 | -------------------------------------------------------------------------------- /apps/application1/src/components/icons/IconEcosystem.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /apps/application2/src/components/icons/IconEcosystem.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /apps/application1/src/assets/base.css: -------------------------------------------------------------------------------- 1 | /* color palette from */ 2 | :root { 3 | --vt-c-white: #ffffff; 4 | --vt-c-white-soft: #f8f8f8; 5 | --vt-c-white-mute: #f2f2f2; 6 | 7 | --vt-c-black: #181818; 8 | --vt-c-black-soft: #222222; 9 | --vt-c-black-mute: #282828; 10 | 11 | --vt-c-indigo: #2c3e50; 12 | 13 | --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); 14 | --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); 15 | --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); 16 | --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); 17 | 18 | --vt-c-text-light-1: var(--vt-c-indigo); 19 | --vt-c-text-light-2: rgba(60, 60, 60, 0.66); 20 | --vt-c-text-dark-1: var(--vt-c-white); 21 | --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); 22 | } 23 | 24 | /* semantic color variables for this project */ 25 | :root { 26 | --color-background: var(--vt-c-white); 27 | --color-background-soft: var(--vt-c-white-soft); 28 | --color-background-mute: var(--vt-c-white-mute); 29 | 30 | --color-border: var(--vt-c-divider-light-2); 31 | --color-border-hover: var(--vt-c-divider-light-1); 32 | 33 | --color-heading: var(--vt-c-text-light-1); 34 | --color-text: var(--vt-c-text-light-1); 35 | 36 | --section-gap: 160px; 37 | } 38 | 39 | @media (prefers-color-scheme: dark) { 40 | :root { 41 | --color-background: var(--vt-c-black); 42 | --color-background-soft: var(--vt-c-black-soft); 43 | --color-background-mute: var(--vt-c-black-mute); 44 | 45 | --color-border: var(--vt-c-divider-dark-2); 46 | --color-border-hover: var(--vt-c-divider-dark-1); 47 | 48 | --color-heading: var(--vt-c-text-dark-1); 49 | --color-text: var(--vt-c-text-dark-2); 50 | } 51 | } 52 | 53 | *, 54 | *::before, 55 | *::after { 56 | box-sizing: border-box; 57 | margin: 0; 58 | position: relative; 59 | font-weight: normal; 60 | } 61 | 62 | body { 63 | min-height: 100vh; 64 | color: var(--color-text); 65 | background: var(--color-background); 66 | transition: color 0.5s, background-color 0.5s; 67 | line-height: 1.6; 68 | font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, 69 | Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; 70 | font-size: 15px; 71 | text-rendering: optimizeLegibility; 72 | -webkit-font-smoothing: antialiased; 73 | -moz-osx-font-smoothing: grayscale; 74 | } 75 | -------------------------------------------------------------------------------- /apps/application2/src/App.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 14 | 15 | 120 | -------------------------------------------------------------------------------- /apps/application2/src/assets/base.css: -------------------------------------------------------------------------------- 1 | /* color palette from */ 2 | :root { 3 | --vt-c-white: #ffffff; 4 | --vt-c-white-soft: #f8f8f8; 5 | --vt-c-white-mute: #f2f2f2; 6 | 7 | --vt-c-black: #181818; 8 | --vt-c-black-soft: #222222; 9 | --vt-c-black-mute: #282828; 10 | 11 | --vt-c-indigo: #2c3e50; 12 | 13 | --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); 14 | --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); 15 | --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); 16 | --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); 17 | 18 | --vt-c-text-light-1: var(--vt-c-indigo); 19 | --vt-c-text-light-2: rgba(60, 60, 60, 0.66); 20 | --vt-c-text-dark-1: var(--vt-c-white); 21 | --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); 22 | } 23 | 24 | /* semantic color variables for this project */ 25 | :root { 26 | --color-background: var(--vt-c-white); 27 | --color-background-soft: var(--vt-c-white-soft); 28 | --color-background-mute: var(--vt-c-white-mute); 29 | 30 | --color-border: var(--vt-c-divider-light-2); 31 | --color-border-hover: var(--vt-c-divider-light-1); 32 | 33 | --color-heading: var(--vt-c-text-light-1); 34 | --color-text: var(--vt-c-text-light-1); 35 | 36 | --section-gap: 160px; 37 | } 38 | 39 | @media (prefers-color-scheme: dark) { 40 | :root { 41 | --color-background: var(--vt-c-black); 42 | --color-background-soft: var(--vt-c-black-soft); 43 | --color-background-mute: var(--vt-c-black-mute); 44 | 45 | --color-border: var(--vt-c-divider-dark-2); 46 | --color-border-hover: var(--vt-c-divider-dark-1); 47 | 48 | --color-heading: var(--vt-c-text-dark-1); 49 | --color-text: var(--vt-c-text-dark-2); 50 | } 51 | } 52 | 53 | *, 54 | *::before, 55 | *::after { 56 | box-sizing: border-box; 57 | margin: 0; 58 | position: relative; 59 | font-weight: normal; 60 | } 61 | 62 | body { 63 | min-height: 100vh; 64 | color: var(--color-text); 65 | background: var(--color-background); 66 | transition: color 0.5s, background-color 0.5s; 67 | line-height: 1.6; 68 | font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, 69 | Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; 70 | font-size: 15px; 71 | text-rendering: optimizeLegibility; 72 | -webkit-font-smoothing: antialiased; 73 | -moz-osx-font-smoothing: grayscale; 74 | } 75 | -------------------------------------------------------------------------------- /apps/application1/src/App.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 27 | 28 | 133 | -------------------------------------------------------------------------------- /apps/application1/src/views/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 68 | 69 | 101 | -------------------------------------------------------------------------------- /apps/application1/src/components/TheWelcome.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 77 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vue 3 and pnpm workspace boilerplate 2 | 3 | ### Reuse Components & Composables across multiple Applications 4 | 5 | ## Description 6 | 7 | This boilerplate is to demo a setup where we can take advantage of [pnpm workspaces](https://pnpm.io/workspaces) where multiple Vue 3 applications can share Components and Composables. This setup will provide the ability for different teams to work on different applications while being able to share reusable Components & Composables to follow a DRY (Don't Repeat Yourself) setup. 8 | 9 | The other ability that pnpm workspace is providing us is the ability to have our workspace running with and even without publishing the Component, Composable packages on NPM (under an [npm organization](https://docs.npmjs.com/organizations) to take advantage or workspace) or locally with [Verdaccio](https://verdaccio.org/)... in other words you could publish each packages of the workspace (in this demo that would be 4 of them: [application1](/apps/application1), [application2](/apps/application2), [components](/components) and [composables](/composables)) or simply skip all of that and simply build & run them locally without ever publishing them anywhere. 10 | 11 | For a great versioning/publishing tool in a workspace environment, take a look at [Lerna-Lite](https://github.com/ghiscoding/lerna-lite) which is what I use in a workspace monorepo structure. 12 | 13 | ## What is included/configured 14 | 15 | - [Vite](https://vitejs.dev/) 16 | - [Vue 3 - Composition API](https://vuejs.org/api/composition-api-setup.html#composition-api-setup) 17 | - we use the `script setup` syntax in a TypeScript environment, more info in this Medium [article](https://medium.com/@AzilenTech/using-script-setup-for-vue-3-ec4b6173b7f4) 18 | - [pnpm workspaces](https://pnpm.io/workspaces) 19 | - [ESLint](https://eslint.org/) with [Prettier](https://prettier.io/) using [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) 20 | - [unplugin-vue-components](https://github.com/antfu/unplugin-vue-components) to auto-import Vue Components (to avoid adding `.use()` on each) 21 | - [TypeScript](https://www.typescriptlang.org/) 22 | 23 | ## How does it work? 24 | 25 | Since we are using pnpm workspace and Vite, we can take advantage of Vite's [library mode](https://vitejs.dev/guide/build.html#library-mode) and build the `Components` and `Composables` packages in that mode and make them available as distributed libraries/packages (via their `dist` folder), then we can use them in `application1` and/or `application2` separately. What if you need develop a Component or Composables, do we need to rebuild every single time? Yes we do, but for that we can take advantage of Vite's [build.watch](https://vitejs.dev/config/#build-watch), which will rebuild for us and allow us to develop faster. 26 | 27 | For more info about Vite library mode, this [article](https://dev.to/josip2312/build-a-typescript-component-library-with-vite-58dh) explains it well. 28 | 29 | ## Project structure 30 | 31 | #### Components ([/components](/components)) 32 | 33 | A very simple `MyButton` Component is provided as an example of a reusable component 34 | 35 | #### Composables ([/composables](/composables)) 36 | 37 | A very simple `useMouse` Composable, which is a mouse position tracker, is provided as an example of a reusable composable. 38 | 39 | #### Apps ([/apps](/apps)) 40 | 41 | The `Apps` folder is where you will want to include all your applications. 42 | 43 | ### Can we expand on this? 44 | 45 | Sure, you could maybe add Directives and/or anything else that you deemed reusable. The steps are simple, just add a folder (probably easier to copy `Component` and rename/remove what is different) and then add it to the pnpm workspace via the [pnpm-workspace.yaml](/ghiscoding/vue3-pnpm-workspace/blob/main/pnpm-workspace.yaml) file and add proper build scripts in the [package.json](/ghiscoding/vue3-pnpm-workspace/blob/main/package.json) file in the project root. 46 | 47 | ## Inspiration 48 | 49 | All credit goes to the [Gun-Vue](https://github.com/DeFUCC/gun-vue) project when I was researching on how to do a Vue 3 pnpm workspace structure for reusability. I did not know how to build the Components/Composables as libraries and that project got me started. Thanks to them. 50 | 51 | ## Contributions 52 | 53 | Feel free to contribution to the project if you think that you can improve it. 54 | 55 | ## Installation 56 | 57 | The steps should be straightforward, simply run pnpm install, execute a build of all packages and then run application1 or application2. The steps assume that you already have installed pnpm, if not then follow the [pnpm installation](https://pnpm.io/installation) 58 | 59 | 1. run pnpm install 60 | 61 | ```sh 62 | pnpm install # or pnpm i 63 | ``` 64 | 65 | 2. run a build 66 | 67 | ```sh 68 | # run a full build of everything 69 | pnpm build 70 | 71 | # or run Components build separately 72 | pnpm build:components 73 | 74 | # or run Composables build separately 75 | pnpm build:composables 76 | 77 | # or run a build watch, which will be picked up by both the Components & Composables 78 | pnpm build:watch 79 | ``` 80 | 81 | 3. run dev server (app1 or app2) 82 | 83 | ```sh 84 | pnpm app1:dev 85 | ``` 86 | 87 | 4. run prod build (app1 or app2) 88 | 89 | ```sh 90 | pnpm app1:build 91 | 92 | # or run a full build of everything 93 | pnpm build 94 | ``` 95 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | importers: 4 | 5 | .: 6 | specifiers: 7 | pnpm: ^7.1.6 8 | devDependencies: 9 | pnpm: 7.1.6 10 | 11 | apps/application1: 12 | specifiers: 13 | '@monotest/components': workspace:* 14 | '@monotest/composables': workspace:* 15 | '@types/node': ^17.0.35 16 | '@typescript-eslint/eslint-plugin': ^5.1.0 17 | '@typescript-eslint/parser': ^5.1.0 18 | '@vitejs/plugin-vue': ^2.3.3 19 | '@vue/eslint-config-prettier': ^7.0.0 20 | '@vue/eslint-config-typescript': ^10.0.0 21 | '@vue/tsconfig': ^0.1.3 22 | eslint: ^8.16.0 23 | eslint-plugin-prettier: ^4.0.0 24 | eslint-plugin-vue: ^9.0.1 25 | prettier: ^2.6.2 26 | typescript: ^4.7.2 27 | unplugin-vue-components: ^0.19.6 28 | vite: ^2.9.9 29 | vue: ^3.2.36 30 | vue-eslint-parser: ^9.0.2 31 | vue-router: ^4.0.15 32 | vue-tsc: ^0.34.16 33 | dependencies: 34 | '@monotest/components': link:../../components 35 | '@monotest/composables': link:../../composables 36 | vue: 3.2.36 37 | vue-router: 4.0.15_vue@3.2.36 38 | devDependencies: 39 | '@types/node': 17.0.35 40 | '@typescript-eslint/eslint-plugin': 5.26.0_hzuh7e2up357pvq3mkokjvu2lq 41 | '@typescript-eslint/parser': 5.26.0_xztl6dhthcahlo6akmb2bmjmle 42 | '@vitejs/plugin-vue': 2.3.3_vite@2.9.9+vue@3.2.36 43 | '@vue/eslint-config-prettier': 7.0.0_yzlwycfcjzj3trzruaflx2c53m 44 | '@vue/eslint-config-typescript': 10.0.0_lgr7dxlaj7q4ptuy6cz7mqitfi 45 | '@vue/tsconfig': 0.1.3_@types+node@17.0.35 46 | eslint: 8.16.0 47 | eslint-plugin-prettier: 4.0.0_yzlwycfcjzj3trzruaflx2c53m 48 | eslint-plugin-vue: 9.0.1_eslint@8.16.0 49 | prettier: 2.6.2 50 | typescript: 4.7.2 51 | unplugin-vue-components: 0.19.6_vite@2.9.9+vue@3.2.36 52 | vite: 2.9.9 53 | vue-eslint-parser: 9.0.2_eslint@8.16.0 54 | vue-tsc: 0.34.16_typescript@4.7.2 55 | 56 | apps/application2: 57 | specifiers: 58 | '@monotest/components': workspace:* 59 | '@monotest/composables': workspace:* 60 | '@types/node': ^17.0.35 61 | '@typescript-eslint/eslint-plugin': ^5.1.0 62 | '@typescript-eslint/parser': ^5.1.0 63 | '@vitejs/plugin-vue': ^2.3.3 64 | '@vue/eslint-config-prettier': ^7.0.0 65 | '@vue/eslint-config-typescript': ^10.0.0 66 | '@vue/tsconfig': ^0.1.3 67 | eslint: ^8.16.0 68 | eslint-plugin-prettier: ^4.0.0 69 | eslint-plugin-vue: ^9.0.1 70 | prettier: ^2.6.2 71 | typescript: ^4.7.2 72 | unplugin-vue-components: ^0.19.6 73 | vite: ^2.9.9 74 | vue: ^3.2.36 75 | vue-eslint-parser: ^9.0.2 76 | vue-router: ^4.0.15 77 | vue-tsc: ^0.34.16 78 | dependencies: 79 | '@monotest/components': link:../../components 80 | '@monotest/composables': link:../../composables 81 | vue: 3.2.36 82 | vue-router: 4.0.15_vue@3.2.36 83 | devDependencies: 84 | '@types/node': 17.0.35 85 | '@typescript-eslint/eslint-plugin': 5.26.0_hzuh7e2up357pvq3mkokjvu2lq 86 | '@typescript-eslint/parser': 5.26.0_xztl6dhthcahlo6akmb2bmjmle 87 | '@vitejs/plugin-vue': 2.3.3_vite@2.9.9+vue@3.2.36 88 | '@vue/eslint-config-prettier': 7.0.0_yzlwycfcjzj3trzruaflx2c53m 89 | '@vue/eslint-config-typescript': 10.0.0_lgr7dxlaj7q4ptuy6cz7mqitfi 90 | '@vue/tsconfig': 0.1.3_@types+node@17.0.35 91 | eslint: 8.16.0 92 | eslint-plugin-prettier: 4.0.0_yzlwycfcjzj3trzruaflx2c53m 93 | eslint-plugin-vue: 9.0.1_eslint@8.16.0 94 | prettier: 2.6.2 95 | typescript: 4.7.2 96 | unplugin-vue-components: 0.19.6_vite@2.9.9+vue@3.2.36 97 | vite: 2.9.9 98 | vue-eslint-parser: 9.0.2_eslint@8.16.0 99 | vue-tsc: 0.34.16_typescript@4.7.2 100 | 101 | components: 102 | specifiers: 103 | '@monotest/composables': workspace:* 104 | '@vitejs/plugin-vue': ^2.3.3 105 | eslint: ^8.16.0 106 | sass: ^1.52.1 107 | typescript: ^4.7.2 108 | unplugin-vue-components: ^0.19.6 109 | vite: ^2.9.9 110 | vue: ^3.2.36 111 | vue-eslint-parser: ^9.0.2 112 | vue-tsc: ^0.34.16 113 | dependencies: 114 | '@monotest/composables': link:../composables 115 | sass: 1.52.1 116 | vue: 3.2.36 117 | devDependencies: 118 | '@vitejs/plugin-vue': 2.3.3_vite@2.9.9+vue@3.2.36 119 | eslint: 8.16.0 120 | typescript: 4.7.2 121 | unplugin-vue-components: 0.19.6_vite@2.9.9+vue@3.2.36 122 | vite: 2.9.9_sass@1.52.1 123 | vue-eslint-parser: 9.0.2_eslint@8.16.0 124 | vue-tsc: 0.34.16_typescript@4.7.2 125 | 126 | composables: 127 | specifiers: 128 | '@vitejs/plugin-vue': ^2.3.3 129 | eslint: ^8.16.0 130 | sass: ^1.52.1 131 | typescript: ^4.7.2 132 | unplugin-vue-components: ^0.19.6 133 | vite: ^2.9.9 134 | vue: ^3.2.36 135 | vue-eslint-parser: ^9.0.2 136 | vue-tsc: ^0.34.16 137 | dependencies: 138 | sass: 1.52.1 139 | vue: 3.2.36 140 | devDependencies: 141 | '@vitejs/plugin-vue': 2.3.3_vite@2.9.9+vue@3.2.36 142 | eslint: 8.16.0 143 | typescript: 4.7.2 144 | unplugin-vue-components: 0.19.6_vite@2.9.9+vue@3.2.36 145 | vite: 2.9.9_sass@1.52.1 146 | vue-eslint-parser: 9.0.2_eslint@8.16.0 147 | vue-tsc: 0.34.16_typescript@4.7.2 148 | 149 | packages: 150 | 151 | /@antfu/utils/0.5.2: 152 | resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==} 153 | dev: true 154 | 155 | /@babel/helper-validator-identifier/7.16.7: 156 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} 157 | engines: {node: '>=6.9.0'} 158 | 159 | /@babel/parser/7.18.0: 160 | resolution: {integrity: sha512-AqDccGC+m5O/iUStSJy3DGRIUFu7WbY/CppZYwrEUB4N0tZlnI8CSTsgL7v5fHVFmUbRv2sd+yy27o8Ydt4MGg==} 161 | engines: {node: '>=6.0.0'} 162 | hasBin: true 163 | dependencies: 164 | '@babel/types': 7.18.0 165 | 166 | /@babel/types/7.18.0: 167 | resolution: {integrity: sha512-vhAmLPAiC8j9K2GnsnLPCIH5wCrPpYIVBCWRBFDCB7Y/BXLqi/O+1RSTTM2bsmg6U/551+FCf9PNPxjABmxHTw==} 168 | engines: {node: '>=6.9.0'} 169 | dependencies: 170 | '@babel/helper-validator-identifier': 7.16.7 171 | to-fast-properties: 2.0.0 172 | 173 | /@eslint/eslintrc/1.3.0: 174 | resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==} 175 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 176 | dependencies: 177 | ajv: 6.12.6 178 | debug: 4.3.4 179 | espree: 9.3.2 180 | globals: 13.15.0 181 | ignore: 5.2.0 182 | import-fresh: 3.3.0 183 | js-yaml: 4.1.0 184 | minimatch: 3.1.2 185 | strip-json-comments: 3.1.1 186 | transitivePeerDependencies: 187 | - supports-color 188 | dev: true 189 | 190 | /@humanwhocodes/config-array/0.9.5: 191 | resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} 192 | engines: {node: '>=10.10.0'} 193 | dependencies: 194 | '@humanwhocodes/object-schema': 1.2.1 195 | debug: 4.3.4 196 | minimatch: 3.1.2 197 | transitivePeerDependencies: 198 | - supports-color 199 | dev: true 200 | 201 | /@humanwhocodes/object-schema/1.2.1: 202 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 203 | dev: true 204 | 205 | /@nodelib/fs.scandir/2.1.5: 206 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 207 | engines: {node: '>= 8'} 208 | dependencies: 209 | '@nodelib/fs.stat': 2.0.5 210 | run-parallel: 1.2.0 211 | dev: true 212 | 213 | /@nodelib/fs.stat/2.0.5: 214 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 215 | engines: {node: '>= 8'} 216 | dev: true 217 | 218 | /@nodelib/fs.walk/1.2.8: 219 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 220 | engines: {node: '>= 8'} 221 | dependencies: 222 | '@nodelib/fs.scandir': 2.1.5 223 | fastq: 1.13.0 224 | dev: true 225 | 226 | /@rollup/pluginutils/4.2.1: 227 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 228 | engines: {node: '>= 8.0.0'} 229 | dependencies: 230 | estree-walker: 2.0.2 231 | picomatch: 2.3.1 232 | dev: true 233 | 234 | /@types/json-schema/7.0.11: 235 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} 236 | dev: true 237 | 238 | /@types/node/17.0.35: 239 | resolution: {integrity: sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==} 240 | dev: true 241 | 242 | /@typescript-eslint/eslint-plugin/5.26.0_hzuh7e2up357pvq3mkokjvu2lq: 243 | resolution: {integrity: sha512-oGCmo0PqnRZZndr+KwvvAUvD3kNE4AfyoGCwOZpoCncSh4MVD06JTE8XQa2u9u+NX5CsyZMBTEc2C72zx38eYA==} 244 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 245 | peerDependencies: 246 | '@typescript-eslint/parser': ^5.0.0 247 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 248 | typescript: '*' 249 | peerDependenciesMeta: 250 | typescript: 251 | optional: true 252 | dependencies: 253 | '@typescript-eslint/parser': 5.26.0_xztl6dhthcahlo6akmb2bmjmle 254 | '@typescript-eslint/scope-manager': 5.26.0 255 | '@typescript-eslint/type-utils': 5.26.0_xztl6dhthcahlo6akmb2bmjmle 256 | '@typescript-eslint/utils': 5.26.0_xztl6dhthcahlo6akmb2bmjmle 257 | debug: 4.3.4 258 | eslint: 8.16.0 259 | functional-red-black-tree: 1.0.1 260 | ignore: 5.2.0 261 | regexpp: 3.2.0 262 | semver: 7.3.7 263 | tsutils: 3.21.0_typescript@4.7.2 264 | typescript: 4.7.2 265 | transitivePeerDependencies: 266 | - supports-color 267 | dev: true 268 | 269 | /@typescript-eslint/parser/5.26.0_xztl6dhthcahlo6akmb2bmjmle: 270 | resolution: {integrity: sha512-n/IzU87ttzIdnAH5vQ4BBDnLPly7rC5VnjN3m0xBG82HK6rhRxnCb3w/GyWbNDghPd+NktJqB/wl6+YkzZ5T5Q==} 271 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 272 | peerDependencies: 273 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 274 | typescript: '*' 275 | peerDependenciesMeta: 276 | typescript: 277 | optional: true 278 | dependencies: 279 | '@typescript-eslint/scope-manager': 5.26.0 280 | '@typescript-eslint/types': 5.26.0 281 | '@typescript-eslint/typescript-estree': 5.26.0_typescript@4.7.2 282 | debug: 4.3.4 283 | eslint: 8.16.0 284 | typescript: 4.7.2 285 | transitivePeerDependencies: 286 | - supports-color 287 | dev: true 288 | 289 | /@typescript-eslint/scope-manager/5.26.0: 290 | resolution: {integrity: sha512-gVzTJUESuTwiju/7NiTb4c5oqod8xt5GhMbExKsCTp6adU3mya6AGJ4Pl9xC7x2DX9UYFsjImC0mA62BCY22Iw==} 291 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 292 | dependencies: 293 | '@typescript-eslint/types': 5.26.0 294 | '@typescript-eslint/visitor-keys': 5.26.0 295 | dev: true 296 | 297 | /@typescript-eslint/type-utils/5.26.0_xztl6dhthcahlo6akmb2bmjmle: 298 | resolution: {integrity: sha512-7ccbUVWGLmcRDSA1+ADkDBl5fP87EJt0fnijsMFTVHXKGduYMgienC/i3QwoVhDADUAPoytgjbZbCOMj4TY55A==} 299 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 300 | peerDependencies: 301 | eslint: '*' 302 | typescript: '*' 303 | peerDependenciesMeta: 304 | typescript: 305 | optional: true 306 | dependencies: 307 | '@typescript-eslint/utils': 5.26.0_xztl6dhthcahlo6akmb2bmjmle 308 | debug: 4.3.4 309 | eslint: 8.16.0 310 | tsutils: 3.21.0_typescript@4.7.2 311 | typescript: 4.7.2 312 | transitivePeerDependencies: 313 | - supports-color 314 | dev: true 315 | 316 | /@typescript-eslint/types/5.26.0: 317 | resolution: {integrity: sha512-8794JZFE1RN4XaExLWLI2oSXsVImNkl79PzTOOWt9h0UHROwJedNOD2IJyfL0NbddFllcktGIO2aOu10avQQyA==} 318 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 319 | dev: true 320 | 321 | /@typescript-eslint/typescript-estree/5.26.0_typescript@4.7.2: 322 | resolution: {integrity: sha512-EyGpw6eQDsfD6jIqmXP3rU5oHScZ51tL/cZgFbFBvWuCwrIptl+oueUZzSmLtxFuSOQ9vDcJIs+279gnJkfd1w==} 323 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 324 | peerDependencies: 325 | typescript: '*' 326 | peerDependenciesMeta: 327 | typescript: 328 | optional: true 329 | dependencies: 330 | '@typescript-eslint/types': 5.26.0 331 | '@typescript-eslint/visitor-keys': 5.26.0 332 | debug: 4.3.4 333 | globby: 11.1.0 334 | is-glob: 4.0.3 335 | semver: 7.3.7 336 | tsutils: 3.21.0_typescript@4.7.2 337 | typescript: 4.7.2 338 | transitivePeerDependencies: 339 | - supports-color 340 | dev: true 341 | 342 | /@typescript-eslint/utils/5.26.0_xztl6dhthcahlo6akmb2bmjmle: 343 | resolution: {integrity: sha512-PJFwcTq2Pt4AMOKfe3zQOdez6InIDOjUJJD3v3LyEtxHGVVRK3Vo7Dd923t/4M9hSH2q2CLvcTdxlLPjcIk3eg==} 344 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 345 | peerDependencies: 346 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 347 | dependencies: 348 | '@types/json-schema': 7.0.11 349 | '@typescript-eslint/scope-manager': 5.26.0 350 | '@typescript-eslint/types': 5.26.0 351 | '@typescript-eslint/typescript-estree': 5.26.0_typescript@4.7.2 352 | eslint: 8.16.0 353 | eslint-scope: 5.1.1 354 | eslint-utils: 3.0.0_eslint@8.16.0 355 | transitivePeerDependencies: 356 | - supports-color 357 | - typescript 358 | dev: true 359 | 360 | /@typescript-eslint/visitor-keys/5.26.0: 361 | resolution: {integrity: sha512-wei+ffqHanYDOQgg/fS6Hcar6wAWv0CUPQ3TZzOWd2BLfgP539rb49bwua8WRAs7R6kOSLn82rfEu2ro6Llt8Q==} 362 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 363 | dependencies: 364 | '@typescript-eslint/types': 5.26.0 365 | eslint-visitor-keys: 3.3.0 366 | dev: true 367 | 368 | /@vitejs/plugin-vue/2.3.3_vite@2.9.9+vue@3.2.36: 369 | resolution: {integrity: sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==} 370 | engines: {node: '>=12.0.0'} 371 | peerDependencies: 372 | vite: ^2.5.10 373 | vue: ^3.2.25 374 | dependencies: 375 | vite: 2.9.9_sass@1.52.1 376 | vue: 3.2.36 377 | dev: true 378 | 379 | /@volar/code-gen/0.34.16: 380 | resolution: {integrity: sha512-ep5us1iF66WlwzCFjTHMIdULIHzu6661228NknkSBGEAh878GPO+AgUqyQn9tY+al0KrsLuDRQVt6pwmeLoqwQ==} 381 | dependencies: 382 | '@volar/source-map': 0.34.16 383 | dev: true 384 | 385 | /@volar/source-map/0.34.16: 386 | resolution: {integrity: sha512-50F1XWcVRzKVXqwO7J39hZ4qd/htzHj62dsywz7FfhZZSOaQ43XT3uEy7cBAVgw7gs+qChFaUJAhM1iHb0FyOQ==} 387 | dev: true 388 | 389 | /@volar/vue-code-gen/0.34.16: 390 | resolution: {integrity: sha512-R8OGn26pCQsctXLa6mZi3BIkyXemcrhibTRGrVh1z2TqWMtnCIT/NiAYXR7kAH4UzFEpglOJAIxrjwnodJ7x6w==} 391 | dependencies: 392 | '@volar/code-gen': 0.34.16 393 | '@volar/source-map': 0.34.16 394 | '@vue/compiler-core': 3.2.36 395 | '@vue/compiler-dom': 3.2.36 396 | '@vue/shared': 3.2.36 397 | dev: true 398 | 399 | /@volar/vue-typescript/0.34.16: 400 | resolution: {integrity: sha512-Jmo19pKRJAIhbAmr/1974knqKws9FZlnYWuCDvvg9wimKHTFosjDhDysORIMVHZ97og/0idK70iIKbcsyDadvw==} 401 | dependencies: 402 | '@volar/code-gen': 0.34.16 403 | '@volar/source-map': 0.34.16 404 | '@volar/vue-code-gen': 0.34.16 405 | '@vue/compiler-sfc': 3.2.36 406 | '@vue/reactivity': 3.2.36 407 | dev: true 408 | 409 | /@vue/compiler-core/3.2.36: 410 | resolution: {integrity: sha512-bbyZM5hvBicv0PW3KUfVi+x3ylHnfKG7DOn5wM+f2OztTzTjLEyBb/5yrarIYpmnGitVGbjZqDbODyW4iK8hqw==} 411 | dependencies: 412 | '@babel/parser': 7.18.0 413 | '@vue/shared': 3.2.36 414 | estree-walker: 2.0.2 415 | source-map: 0.6.1 416 | 417 | /@vue/compiler-dom/3.2.36: 418 | resolution: {integrity: sha512-tcOTAOiW4s24QLnq+ON6J+GRONXJ+A/mqKCORi0LSlIh8XQlNnlm24y8xIL8la+ZDgkdbjarQ9ZqYSvEja6gVA==} 419 | dependencies: 420 | '@vue/compiler-core': 3.2.36 421 | '@vue/shared': 3.2.36 422 | 423 | /@vue/compiler-sfc/3.2.36: 424 | resolution: {integrity: sha512-AvGb4bTj4W8uQ4BqaSxo7UwTEqX5utdRSMyHy58OragWlt8nEACQ9mIeQh3K4di4/SX+41+pJrLIY01lHAOFOA==} 425 | dependencies: 426 | '@babel/parser': 7.18.0 427 | '@vue/compiler-core': 3.2.36 428 | '@vue/compiler-dom': 3.2.36 429 | '@vue/compiler-ssr': 3.2.36 430 | '@vue/reactivity-transform': 3.2.36 431 | '@vue/shared': 3.2.36 432 | estree-walker: 2.0.2 433 | magic-string: 0.25.9 434 | postcss: 8.4.14 435 | source-map: 0.6.1 436 | 437 | /@vue/compiler-ssr/3.2.36: 438 | resolution: {integrity: sha512-+KugInUFRvOxEdLkZwE+W43BqHyhBh0jpYXhmqw1xGq2dmE6J9eZ8UUSOKNhdHtQ/iNLWWeK/wPZkVLUf3YGaw==} 439 | dependencies: 440 | '@vue/compiler-dom': 3.2.36 441 | '@vue/shared': 3.2.36 442 | 443 | /@vue/devtools-api/6.1.4: 444 | resolution: {integrity: sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==} 445 | dev: false 446 | 447 | /@vue/eslint-config-prettier/7.0.0_yzlwycfcjzj3trzruaflx2c53m: 448 | resolution: {integrity: sha512-/CTc6ML3Wta1tCe1gUeO0EYnVXfo3nJXsIhZ8WJr3sov+cGASr6yuiibJTL6lmIBm7GobopToOuB3B6AWyV0Iw==} 449 | peerDependencies: 450 | eslint: '>= 7.28.0' 451 | prettier: '>= 2.0.0' 452 | dependencies: 453 | eslint: 8.16.0 454 | eslint-config-prettier: 8.5.0_eslint@8.16.0 455 | eslint-plugin-prettier: 4.0.0_j7rsahgqtkecno6yauhsgsglf4 456 | prettier: 2.6.2 457 | dev: true 458 | 459 | /@vue/eslint-config-typescript/10.0.0_lgr7dxlaj7q4ptuy6cz7mqitfi: 460 | resolution: {integrity: sha512-F94cL8ug3FaYXlCfU5/wiGjk1qeadmoBpRGAOBq+qre3Smdupa59dd6ZJrsfRODpsMPyTG7330juMDsUvpZ3Rw==} 461 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 462 | peerDependencies: 463 | eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 464 | eslint-plugin-vue: ^8.0.1 465 | typescript: '*' 466 | peerDependenciesMeta: 467 | typescript: 468 | optional: true 469 | dependencies: 470 | '@typescript-eslint/eslint-plugin': 5.26.0_hzuh7e2up357pvq3mkokjvu2lq 471 | '@typescript-eslint/parser': 5.26.0_xztl6dhthcahlo6akmb2bmjmle 472 | eslint: 8.16.0 473 | eslint-plugin-vue: 9.0.1_eslint@8.16.0 474 | typescript: 4.7.2 475 | vue-eslint-parser: 8.3.0_eslint@8.16.0 476 | transitivePeerDependencies: 477 | - supports-color 478 | dev: true 479 | 480 | /@vue/reactivity-transform/3.2.36: 481 | resolution: {integrity: sha512-Jk5o2BhpODC9XTA7o4EL8hSJ4JyrFWErLtClG3NH8wDS7ri9jBDWxI7/549T7JY9uilKsaNM+4pJASLj5dtRwA==} 482 | dependencies: 483 | '@babel/parser': 7.18.0 484 | '@vue/compiler-core': 3.2.36 485 | '@vue/shared': 3.2.36 486 | estree-walker: 2.0.2 487 | magic-string: 0.25.9 488 | 489 | /@vue/reactivity/3.2.36: 490 | resolution: {integrity: sha512-c2qvopo0crh9A4GXi2/2kfGYMxsJW4tVILrqRPydVGZHhq0fnzy6qmclWOhBFckEhmyxmpHpdJtIRYGeKcuhnA==} 491 | dependencies: 492 | '@vue/shared': 3.2.36 493 | 494 | /@vue/runtime-core/3.2.36: 495 | resolution: {integrity: sha512-PTWBD+Lub+1U3/KhbCExrfxyS14hstLX+cBboxVHaz+kXoiDLNDEYAovPtxeTutbqtClIXtft+wcGdC+FUQ9qQ==} 496 | dependencies: 497 | '@vue/reactivity': 3.2.36 498 | '@vue/shared': 3.2.36 499 | 500 | /@vue/runtime-dom/3.2.36: 501 | resolution: {integrity: sha512-gYPYblm7QXHVuBohqNRRT7Wez0f2Mx2D40rb4fleehrJU9CnkjG0phhcGEZFfGwCmHZRqBCRgbFWE98bPULqkg==} 502 | dependencies: 503 | '@vue/runtime-core': 3.2.36 504 | '@vue/shared': 3.2.36 505 | csstype: 2.6.20 506 | 507 | /@vue/server-renderer/3.2.36_vue@3.2.36: 508 | resolution: {integrity: sha512-uZE0+jfye6yYXWvAQYeHZv+f50sRryvy16uiqzk3jn8hEY8zTjI+rzlmZSGoE915k+W/Ol9XSw6vxOUD8dGkUg==} 509 | peerDependencies: 510 | vue: 3.2.36 511 | dependencies: 512 | '@vue/compiler-ssr': 3.2.36 513 | '@vue/shared': 3.2.36 514 | vue: 3.2.36 515 | 516 | /@vue/shared/3.2.36: 517 | resolution: {integrity: sha512-JtB41wXl7Au3+Nl3gD16Cfpj7k/6aCroZ6BbOiCMFCMvrOpkg/qQUXTso2XowaNqBbnkuGHurLAqkLBxNGc1hQ==} 518 | 519 | /@vue/tsconfig/0.1.3_@types+node@17.0.35: 520 | resolution: {integrity: sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg==} 521 | peerDependencies: 522 | '@types/node': '*' 523 | peerDependenciesMeta: 524 | '@types/node': 525 | optional: true 526 | dependencies: 527 | '@types/node': 17.0.35 528 | dev: true 529 | 530 | /acorn-jsx/5.3.2_acorn@8.7.1: 531 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 532 | peerDependencies: 533 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 534 | dependencies: 535 | acorn: 8.7.1 536 | dev: true 537 | 538 | /acorn/8.7.1: 539 | resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==} 540 | engines: {node: '>=0.4.0'} 541 | hasBin: true 542 | dev: true 543 | 544 | /ajv/6.12.6: 545 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 546 | dependencies: 547 | fast-deep-equal: 3.1.3 548 | fast-json-stable-stringify: 2.1.0 549 | json-schema-traverse: 0.4.1 550 | uri-js: 4.4.1 551 | dev: true 552 | 553 | /ansi-regex/5.0.1: 554 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 555 | engines: {node: '>=8'} 556 | dev: true 557 | 558 | /ansi-styles/4.3.0: 559 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 560 | engines: {node: '>=8'} 561 | dependencies: 562 | color-convert: 2.0.1 563 | dev: true 564 | 565 | /anymatch/3.1.2: 566 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 567 | engines: {node: '>= 8'} 568 | dependencies: 569 | normalize-path: 3.0.0 570 | picomatch: 2.3.1 571 | 572 | /argparse/2.0.1: 573 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 574 | dev: true 575 | 576 | /array-union/2.1.0: 577 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 578 | engines: {node: '>=8'} 579 | dev: true 580 | 581 | /balanced-match/1.0.2: 582 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 583 | dev: true 584 | 585 | /binary-extensions/2.2.0: 586 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 587 | engines: {node: '>=8'} 588 | 589 | /boolbase/1.0.0: 590 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 591 | dev: true 592 | 593 | /brace-expansion/1.1.11: 594 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 595 | dependencies: 596 | balanced-match: 1.0.2 597 | concat-map: 0.0.1 598 | dev: true 599 | 600 | /brace-expansion/2.0.1: 601 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 602 | dependencies: 603 | balanced-match: 1.0.2 604 | dev: true 605 | 606 | /braces/3.0.2: 607 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 608 | engines: {node: '>=8'} 609 | dependencies: 610 | fill-range: 7.0.1 611 | 612 | /callsites/3.1.0: 613 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 614 | engines: {node: '>=6'} 615 | dev: true 616 | 617 | /chalk/4.1.2: 618 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 619 | engines: {node: '>=10'} 620 | dependencies: 621 | ansi-styles: 4.3.0 622 | supports-color: 7.2.0 623 | dev: true 624 | 625 | /chokidar/3.5.3: 626 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 627 | engines: {node: '>= 8.10.0'} 628 | dependencies: 629 | anymatch: 3.1.2 630 | braces: 3.0.2 631 | glob-parent: 5.1.2 632 | is-binary-path: 2.1.0 633 | is-glob: 4.0.3 634 | normalize-path: 3.0.0 635 | readdirp: 3.6.0 636 | optionalDependencies: 637 | fsevents: 2.3.2 638 | 639 | /color-convert/2.0.1: 640 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 641 | engines: {node: '>=7.0.0'} 642 | dependencies: 643 | color-name: 1.1.4 644 | dev: true 645 | 646 | /color-name/1.1.4: 647 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 648 | dev: true 649 | 650 | /concat-map/0.0.1: 651 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 652 | dev: true 653 | 654 | /cross-spawn/7.0.3: 655 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 656 | engines: {node: '>= 8'} 657 | dependencies: 658 | path-key: 3.1.1 659 | shebang-command: 2.0.0 660 | which: 2.0.2 661 | dev: true 662 | 663 | /cssesc/3.0.0: 664 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 665 | engines: {node: '>=4'} 666 | hasBin: true 667 | dev: true 668 | 669 | /csstype/2.6.20: 670 | resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} 671 | 672 | /debug/4.3.4: 673 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 674 | engines: {node: '>=6.0'} 675 | peerDependencies: 676 | supports-color: '*' 677 | peerDependenciesMeta: 678 | supports-color: 679 | optional: true 680 | dependencies: 681 | ms: 2.1.2 682 | dev: true 683 | 684 | /deep-is/0.1.4: 685 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 686 | dev: true 687 | 688 | /dir-glob/3.0.1: 689 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 690 | engines: {node: '>=8'} 691 | dependencies: 692 | path-type: 4.0.0 693 | dev: true 694 | 695 | /doctrine/3.0.0: 696 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 697 | engines: {node: '>=6.0.0'} 698 | dependencies: 699 | esutils: 2.0.3 700 | dev: true 701 | 702 | /esbuild-android-64/0.14.39: 703 | resolution: {integrity: sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==} 704 | engines: {node: '>=12'} 705 | cpu: [x64] 706 | os: [android] 707 | requiresBuild: true 708 | dev: true 709 | optional: true 710 | 711 | /esbuild-android-arm64/0.14.39: 712 | resolution: {integrity: sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==} 713 | engines: {node: '>=12'} 714 | cpu: [arm64] 715 | os: [android] 716 | requiresBuild: true 717 | dev: true 718 | optional: true 719 | 720 | /esbuild-darwin-64/0.14.39: 721 | resolution: {integrity: sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==} 722 | engines: {node: '>=12'} 723 | cpu: [x64] 724 | os: [darwin] 725 | requiresBuild: true 726 | dev: true 727 | optional: true 728 | 729 | /esbuild-darwin-arm64/0.14.39: 730 | resolution: {integrity: sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==} 731 | engines: {node: '>=12'} 732 | cpu: [arm64] 733 | os: [darwin] 734 | requiresBuild: true 735 | dev: true 736 | optional: true 737 | 738 | /esbuild-freebsd-64/0.14.39: 739 | resolution: {integrity: sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==} 740 | engines: {node: '>=12'} 741 | cpu: [x64] 742 | os: [freebsd] 743 | requiresBuild: true 744 | dev: true 745 | optional: true 746 | 747 | /esbuild-freebsd-arm64/0.14.39: 748 | resolution: {integrity: sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==} 749 | engines: {node: '>=12'} 750 | cpu: [arm64] 751 | os: [freebsd] 752 | requiresBuild: true 753 | dev: true 754 | optional: true 755 | 756 | /esbuild-linux-32/0.14.39: 757 | resolution: {integrity: sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==} 758 | engines: {node: '>=12'} 759 | cpu: [ia32] 760 | os: [linux] 761 | requiresBuild: true 762 | dev: true 763 | optional: true 764 | 765 | /esbuild-linux-64/0.14.39: 766 | resolution: {integrity: sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==} 767 | engines: {node: '>=12'} 768 | cpu: [x64] 769 | os: [linux] 770 | requiresBuild: true 771 | dev: true 772 | optional: true 773 | 774 | /esbuild-linux-arm/0.14.39: 775 | resolution: {integrity: sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==} 776 | engines: {node: '>=12'} 777 | cpu: [arm] 778 | os: [linux] 779 | requiresBuild: true 780 | dev: true 781 | optional: true 782 | 783 | /esbuild-linux-arm64/0.14.39: 784 | resolution: {integrity: sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==} 785 | engines: {node: '>=12'} 786 | cpu: [arm64] 787 | os: [linux] 788 | requiresBuild: true 789 | dev: true 790 | optional: true 791 | 792 | /esbuild-linux-mips64le/0.14.39: 793 | resolution: {integrity: sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==} 794 | engines: {node: '>=12'} 795 | cpu: [mips64el] 796 | os: [linux] 797 | requiresBuild: true 798 | dev: true 799 | optional: true 800 | 801 | /esbuild-linux-ppc64le/0.14.39: 802 | resolution: {integrity: sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==} 803 | engines: {node: '>=12'} 804 | cpu: [ppc64] 805 | os: [linux] 806 | requiresBuild: true 807 | dev: true 808 | optional: true 809 | 810 | /esbuild-linux-riscv64/0.14.39: 811 | resolution: {integrity: sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==} 812 | engines: {node: '>=12'} 813 | cpu: [riscv64] 814 | os: [linux] 815 | requiresBuild: true 816 | dev: true 817 | optional: true 818 | 819 | /esbuild-linux-s390x/0.14.39: 820 | resolution: {integrity: sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==} 821 | engines: {node: '>=12'} 822 | cpu: [s390x] 823 | os: [linux] 824 | requiresBuild: true 825 | dev: true 826 | optional: true 827 | 828 | /esbuild-netbsd-64/0.14.39: 829 | resolution: {integrity: sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==} 830 | engines: {node: '>=12'} 831 | cpu: [x64] 832 | os: [netbsd] 833 | requiresBuild: true 834 | dev: true 835 | optional: true 836 | 837 | /esbuild-openbsd-64/0.14.39: 838 | resolution: {integrity: sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==} 839 | engines: {node: '>=12'} 840 | cpu: [x64] 841 | os: [openbsd] 842 | requiresBuild: true 843 | dev: true 844 | optional: true 845 | 846 | /esbuild-sunos-64/0.14.39: 847 | resolution: {integrity: sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==} 848 | engines: {node: '>=12'} 849 | cpu: [x64] 850 | os: [sunos] 851 | requiresBuild: true 852 | dev: true 853 | optional: true 854 | 855 | /esbuild-windows-32/0.14.39: 856 | resolution: {integrity: sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==} 857 | engines: {node: '>=12'} 858 | cpu: [ia32] 859 | os: [win32] 860 | requiresBuild: true 861 | dev: true 862 | optional: true 863 | 864 | /esbuild-windows-64/0.14.39: 865 | resolution: {integrity: sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==} 866 | engines: {node: '>=12'} 867 | cpu: [x64] 868 | os: [win32] 869 | requiresBuild: true 870 | dev: true 871 | optional: true 872 | 873 | /esbuild-windows-arm64/0.14.39: 874 | resolution: {integrity: sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==} 875 | engines: {node: '>=12'} 876 | cpu: [arm64] 877 | os: [win32] 878 | requiresBuild: true 879 | dev: true 880 | optional: true 881 | 882 | /esbuild/0.14.39: 883 | resolution: {integrity: sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==} 884 | engines: {node: '>=12'} 885 | hasBin: true 886 | requiresBuild: true 887 | optionalDependencies: 888 | esbuild-android-64: 0.14.39 889 | esbuild-android-arm64: 0.14.39 890 | esbuild-darwin-64: 0.14.39 891 | esbuild-darwin-arm64: 0.14.39 892 | esbuild-freebsd-64: 0.14.39 893 | esbuild-freebsd-arm64: 0.14.39 894 | esbuild-linux-32: 0.14.39 895 | esbuild-linux-64: 0.14.39 896 | esbuild-linux-arm: 0.14.39 897 | esbuild-linux-arm64: 0.14.39 898 | esbuild-linux-mips64le: 0.14.39 899 | esbuild-linux-ppc64le: 0.14.39 900 | esbuild-linux-riscv64: 0.14.39 901 | esbuild-linux-s390x: 0.14.39 902 | esbuild-netbsd-64: 0.14.39 903 | esbuild-openbsd-64: 0.14.39 904 | esbuild-sunos-64: 0.14.39 905 | esbuild-windows-32: 0.14.39 906 | esbuild-windows-64: 0.14.39 907 | esbuild-windows-arm64: 0.14.39 908 | dev: true 909 | 910 | /escape-string-regexp/4.0.0: 911 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 912 | engines: {node: '>=10'} 913 | dev: true 914 | 915 | /eslint-config-prettier/8.5.0_eslint@8.16.0: 916 | resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} 917 | hasBin: true 918 | peerDependencies: 919 | eslint: '>=7.0.0' 920 | dependencies: 921 | eslint: 8.16.0 922 | dev: true 923 | 924 | /eslint-plugin-prettier/4.0.0_j7rsahgqtkecno6yauhsgsglf4: 925 | resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} 926 | engines: {node: '>=6.0.0'} 927 | peerDependencies: 928 | eslint: '>=7.28.0' 929 | eslint-config-prettier: '*' 930 | prettier: '>=2.0.0' 931 | peerDependenciesMeta: 932 | eslint-config-prettier: 933 | optional: true 934 | dependencies: 935 | eslint: 8.16.0 936 | eslint-config-prettier: 8.5.0_eslint@8.16.0 937 | prettier: 2.6.2 938 | prettier-linter-helpers: 1.0.0 939 | dev: true 940 | 941 | /eslint-plugin-prettier/4.0.0_yzlwycfcjzj3trzruaflx2c53m: 942 | resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} 943 | engines: {node: '>=6.0.0'} 944 | peerDependencies: 945 | eslint: '>=7.28.0' 946 | eslint-config-prettier: '*' 947 | prettier: '>=2.0.0' 948 | peerDependenciesMeta: 949 | eslint-config-prettier: 950 | optional: true 951 | dependencies: 952 | eslint: 8.16.0 953 | prettier: 2.6.2 954 | prettier-linter-helpers: 1.0.0 955 | dev: true 956 | 957 | /eslint-plugin-vue/9.0.1_eslint@8.16.0: 958 | resolution: {integrity: sha512-/w/9/vzz+4bSYtp5UqXgJ0CfycXTMtpp6lkz7/fMp0CcJxPWyRP6Pr88ihhrsNEcVt2ZweMupWRNYa+5Md41LQ==} 959 | engines: {node: ^14.17.0 || >=16.0.0} 960 | peerDependencies: 961 | eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 962 | dependencies: 963 | eslint: 8.16.0 964 | eslint-utils: 3.0.0_eslint@8.16.0 965 | natural-compare: 1.4.0 966 | nth-check: 2.1.1 967 | postcss-selector-parser: 6.0.10 968 | semver: 7.3.7 969 | vue-eslint-parser: 9.0.2_eslint@8.16.0 970 | xml-name-validator: 4.0.0 971 | transitivePeerDependencies: 972 | - supports-color 973 | dev: true 974 | 975 | /eslint-scope/5.1.1: 976 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 977 | engines: {node: '>=8.0.0'} 978 | dependencies: 979 | esrecurse: 4.3.0 980 | estraverse: 4.3.0 981 | dev: true 982 | 983 | /eslint-scope/7.1.1: 984 | resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} 985 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 986 | dependencies: 987 | esrecurse: 4.3.0 988 | estraverse: 5.3.0 989 | dev: true 990 | 991 | /eslint-utils/3.0.0_eslint@8.16.0: 992 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 993 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 994 | peerDependencies: 995 | eslint: '>=5' 996 | dependencies: 997 | eslint: 8.16.0 998 | eslint-visitor-keys: 2.1.0 999 | dev: true 1000 | 1001 | /eslint-visitor-keys/2.1.0: 1002 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 1003 | engines: {node: '>=10'} 1004 | dev: true 1005 | 1006 | /eslint-visitor-keys/3.3.0: 1007 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} 1008 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1009 | dev: true 1010 | 1011 | /eslint/8.16.0: 1012 | resolution: {integrity: sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==} 1013 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1014 | hasBin: true 1015 | dependencies: 1016 | '@eslint/eslintrc': 1.3.0 1017 | '@humanwhocodes/config-array': 0.9.5 1018 | ajv: 6.12.6 1019 | chalk: 4.1.2 1020 | cross-spawn: 7.0.3 1021 | debug: 4.3.4 1022 | doctrine: 3.0.0 1023 | escape-string-regexp: 4.0.0 1024 | eslint-scope: 7.1.1 1025 | eslint-utils: 3.0.0_eslint@8.16.0 1026 | eslint-visitor-keys: 3.3.0 1027 | espree: 9.3.2 1028 | esquery: 1.4.0 1029 | esutils: 2.0.3 1030 | fast-deep-equal: 3.1.3 1031 | file-entry-cache: 6.0.1 1032 | functional-red-black-tree: 1.0.1 1033 | glob-parent: 6.0.2 1034 | globals: 13.15.0 1035 | ignore: 5.2.0 1036 | import-fresh: 3.3.0 1037 | imurmurhash: 0.1.4 1038 | is-glob: 4.0.3 1039 | js-yaml: 4.1.0 1040 | json-stable-stringify-without-jsonify: 1.0.1 1041 | levn: 0.4.1 1042 | lodash.merge: 4.6.2 1043 | minimatch: 3.1.2 1044 | natural-compare: 1.4.0 1045 | optionator: 0.9.1 1046 | regexpp: 3.2.0 1047 | strip-ansi: 6.0.1 1048 | strip-json-comments: 3.1.1 1049 | text-table: 0.2.0 1050 | v8-compile-cache: 2.3.0 1051 | transitivePeerDependencies: 1052 | - supports-color 1053 | dev: true 1054 | 1055 | /espree/9.3.2: 1056 | resolution: {integrity: sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==} 1057 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1058 | dependencies: 1059 | acorn: 8.7.1 1060 | acorn-jsx: 5.3.2_acorn@8.7.1 1061 | eslint-visitor-keys: 3.3.0 1062 | dev: true 1063 | 1064 | /esquery/1.4.0: 1065 | resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} 1066 | engines: {node: '>=0.10'} 1067 | dependencies: 1068 | estraverse: 5.3.0 1069 | dev: true 1070 | 1071 | /esrecurse/4.3.0: 1072 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1073 | engines: {node: '>=4.0'} 1074 | dependencies: 1075 | estraverse: 5.3.0 1076 | dev: true 1077 | 1078 | /estraverse/4.3.0: 1079 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1080 | engines: {node: '>=4.0'} 1081 | dev: true 1082 | 1083 | /estraverse/5.3.0: 1084 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1085 | engines: {node: '>=4.0'} 1086 | dev: true 1087 | 1088 | /estree-walker/2.0.2: 1089 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1090 | 1091 | /esutils/2.0.3: 1092 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1093 | engines: {node: '>=0.10.0'} 1094 | dev: true 1095 | 1096 | /fast-deep-equal/3.1.3: 1097 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1098 | dev: true 1099 | 1100 | /fast-diff/1.2.0: 1101 | resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} 1102 | dev: true 1103 | 1104 | /fast-glob/3.2.11: 1105 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} 1106 | engines: {node: '>=8.6.0'} 1107 | dependencies: 1108 | '@nodelib/fs.stat': 2.0.5 1109 | '@nodelib/fs.walk': 1.2.8 1110 | glob-parent: 5.1.2 1111 | merge2: 1.4.1 1112 | micromatch: 4.0.5 1113 | dev: true 1114 | 1115 | /fast-json-stable-stringify/2.1.0: 1116 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1117 | dev: true 1118 | 1119 | /fast-levenshtein/2.0.6: 1120 | resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} 1121 | dev: true 1122 | 1123 | /fastq/1.13.0: 1124 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 1125 | dependencies: 1126 | reusify: 1.0.4 1127 | dev: true 1128 | 1129 | /file-entry-cache/6.0.1: 1130 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1131 | engines: {node: ^10.12.0 || >=12.0.0} 1132 | dependencies: 1133 | flat-cache: 3.0.4 1134 | dev: true 1135 | 1136 | /fill-range/7.0.1: 1137 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1138 | engines: {node: '>=8'} 1139 | dependencies: 1140 | to-regex-range: 5.0.1 1141 | 1142 | /flat-cache/3.0.4: 1143 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1144 | engines: {node: ^10.12.0 || >=12.0.0} 1145 | dependencies: 1146 | flatted: 3.2.5 1147 | rimraf: 3.0.2 1148 | dev: true 1149 | 1150 | /flatted/3.2.5: 1151 | resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} 1152 | dev: true 1153 | 1154 | /fs.realpath/1.0.0: 1155 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} 1156 | dev: true 1157 | 1158 | /fsevents/2.3.2: 1159 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1160 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1161 | os: [darwin] 1162 | requiresBuild: true 1163 | optional: true 1164 | 1165 | /function-bind/1.1.1: 1166 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1167 | dev: true 1168 | 1169 | /functional-red-black-tree/1.0.1: 1170 | resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} 1171 | dev: true 1172 | 1173 | /glob-parent/5.1.2: 1174 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1175 | engines: {node: '>= 6'} 1176 | dependencies: 1177 | is-glob: 4.0.3 1178 | 1179 | /glob-parent/6.0.2: 1180 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1181 | engines: {node: '>=10.13.0'} 1182 | dependencies: 1183 | is-glob: 4.0.3 1184 | dev: true 1185 | 1186 | /glob/7.2.3: 1187 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1188 | dependencies: 1189 | fs.realpath: 1.0.0 1190 | inflight: 1.0.6 1191 | inherits: 2.0.4 1192 | minimatch: 3.1.2 1193 | once: 1.4.0 1194 | path-is-absolute: 1.0.1 1195 | dev: true 1196 | 1197 | /globals/13.15.0: 1198 | resolution: {integrity: sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==} 1199 | engines: {node: '>=8'} 1200 | dependencies: 1201 | type-fest: 0.20.2 1202 | dev: true 1203 | 1204 | /globby/11.1.0: 1205 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1206 | engines: {node: '>=10'} 1207 | dependencies: 1208 | array-union: 2.1.0 1209 | dir-glob: 3.0.1 1210 | fast-glob: 3.2.11 1211 | ignore: 5.2.0 1212 | merge2: 1.4.1 1213 | slash: 3.0.0 1214 | dev: true 1215 | 1216 | /has-flag/4.0.0: 1217 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1218 | engines: {node: '>=8'} 1219 | dev: true 1220 | 1221 | /has/1.0.3: 1222 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1223 | engines: {node: '>= 0.4.0'} 1224 | dependencies: 1225 | function-bind: 1.1.1 1226 | dev: true 1227 | 1228 | /ignore/5.2.0: 1229 | resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} 1230 | engines: {node: '>= 4'} 1231 | dev: true 1232 | 1233 | /immutable/4.1.0: 1234 | resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==} 1235 | 1236 | /import-fresh/3.3.0: 1237 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1238 | engines: {node: '>=6'} 1239 | dependencies: 1240 | parent-module: 1.0.1 1241 | resolve-from: 4.0.0 1242 | dev: true 1243 | 1244 | /imurmurhash/0.1.4: 1245 | resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} 1246 | engines: {node: '>=0.8.19'} 1247 | dev: true 1248 | 1249 | /inflight/1.0.6: 1250 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} 1251 | dependencies: 1252 | once: 1.4.0 1253 | wrappy: 1.0.2 1254 | dev: true 1255 | 1256 | /inherits/2.0.4: 1257 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1258 | dev: true 1259 | 1260 | /is-binary-path/2.1.0: 1261 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1262 | engines: {node: '>=8'} 1263 | dependencies: 1264 | binary-extensions: 2.2.0 1265 | 1266 | /is-core-module/2.9.0: 1267 | resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} 1268 | dependencies: 1269 | has: 1.0.3 1270 | dev: true 1271 | 1272 | /is-extglob/2.1.1: 1273 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 1274 | engines: {node: '>=0.10.0'} 1275 | 1276 | /is-glob/4.0.3: 1277 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1278 | engines: {node: '>=0.10.0'} 1279 | dependencies: 1280 | is-extglob: 2.1.1 1281 | 1282 | /is-number/7.0.0: 1283 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1284 | engines: {node: '>=0.12.0'} 1285 | 1286 | /isexe/2.0.0: 1287 | resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} 1288 | dev: true 1289 | 1290 | /js-yaml/4.1.0: 1291 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1292 | hasBin: true 1293 | dependencies: 1294 | argparse: 2.0.1 1295 | dev: true 1296 | 1297 | /json-schema-traverse/0.4.1: 1298 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1299 | dev: true 1300 | 1301 | /json-stable-stringify-without-jsonify/1.0.1: 1302 | resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} 1303 | dev: true 1304 | 1305 | /levn/0.4.1: 1306 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1307 | engines: {node: '>= 0.8.0'} 1308 | dependencies: 1309 | prelude-ls: 1.2.1 1310 | type-check: 0.4.0 1311 | dev: true 1312 | 1313 | /local-pkg/0.4.1: 1314 | resolution: {integrity: sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==} 1315 | engines: {node: '>=14'} 1316 | dev: true 1317 | 1318 | /lodash.merge/4.6.2: 1319 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1320 | dev: true 1321 | 1322 | /lodash/4.17.21: 1323 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1324 | dev: true 1325 | 1326 | /lru-cache/6.0.0: 1327 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1328 | engines: {node: '>=10'} 1329 | dependencies: 1330 | yallist: 4.0.0 1331 | dev: true 1332 | 1333 | /magic-string/0.25.9: 1334 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 1335 | dependencies: 1336 | sourcemap-codec: 1.4.8 1337 | 1338 | /magic-string/0.26.2: 1339 | resolution: {integrity: sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==} 1340 | engines: {node: '>=12'} 1341 | dependencies: 1342 | sourcemap-codec: 1.4.8 1343 | dev: true 1344 | 1345 | /merge2/1.4.1: 1346 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1347 | engines: {node: '>= 8'} 1348 | dev: true 1349 | 1350 | /micromatch/4.0.5: 1351 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1352 | engines: {node: '>=8.6'} 1353 | dependencies: 1354 | braces: 3.0.2 1355 | picomatch: 2.3.1 1356 | dev: true 1357 | 1358 | /minimatch/3.1.2: 1359 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1360 | dependencies: 1361 | brace-expansion: 1.1.11 1362 | dev: true 1363 | 1364 | /minimatch/5.1.0: 1365 | resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} 1366 | engines: {node: '>=10'} 1367 | dependencies: 1368 | brace-expansion: 2.0.1 1369 | dev: true 1370 | 1371 | /ms/2.1.2: 1372 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1373 | dev: true 1374 | 1375 | /nanoid/3.3.4: 1376 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 1377 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1378 | hasBin: true 1379 | 1380 | /natural-compare/1.4.0: 1381 | resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} 1382 | dev: true 1383 | 1384 | /normalize-path/3.0.0: 1385 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1386 | engines: {node: '>=0.10.0'} 1387 | 1388 | /nth-check/2.1.1: 1389 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 1390 | dependencies: 1391 | boolbase: 1.0.0 1392 | dev: true 1393 | 1394 | /once/1.4.0: 1395 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} 1396 | dependencies: 1397 | wrappy: 1.0.2 1398 | dev: true 1399 | 1400 | /optionator/0.9.1: 1401 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 1402 | engines: {node: '>= 0.8.0'} 1403 | dependencies: 1404 | deep-is: 0.1.4 1405 | fast-levenshtein: 2.0.6 1406 | levn: 0.4.1 1407 | prelude-ls: 1.2.1 1408 | type-check: 0.4.0 1409 | word-wrap: 1.2.3 1410 | dev: true 1411 | 1412 | /parent-module/1.0.1: 1413 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1414 | engines: {node: '>=6'} 1415 | dependencies: 1416 | callsites: 3.1.0 1417 | dev: true 1418 | 1419 | /path-is-absolute/1.0.1: 1420 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} 1421 | engines: {node: '>=0.10.0'} 1422 | dev: true 1423 | 1424 | /path-key/3.1.1: 1425 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1426 | engines: {node: '>=8'} 1427 | dev: true 1428 | 1429 | /path-parse/1.0.7: 1430 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1431 | dev: true 1432 | 1433 | /path-type/4.0.0: 1434 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1435 | engines: {node: '>=8'} 1436 | dev: true 1437 | 1438 | /picocolors/1.0.0: 1439 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1440 | 1441 | /picomatch/2.3.1: 1442 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1443 | engines: {node: '>=8.6'} 1444 | 1445 | /pnpm/7.1.6: 1446 | resolution: {integrity: sha512-ZReCitIDPkdJ8DcKqJ2CLvl7FhwOJiDiTN1c5ElaxmCvivptJaRIDd3IDTnydDhVUWk1rtaP5/mK6oktD5WH9A==} 1447 | engines: {node: '>=14.19'} 1448 | hasBin: true 1449 | dev: true 1450 | 1451 | /postcss-selector-parser/6.0.10: 1452 | resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} 1453 | engines: {node: '>=4'} 1454 | dependencies: 1455 | cssesc: 3.0.0 1456 | util-deprecate: 1.0.2 1457 | dev: true 1458 | 1459 | /postcss/8.4.14: 1460 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} 1461 | engines: {node: ^10 || ^12 || >=14} 1462 | dependencies: 1463 | nanoid: 3.3.4 1464 | picocolors: 1.0.0 1465 | source-map-js: 1.0.2 1466 | 1467 | /prelude-ls/1.2.1: 1468 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1469 | engines: {node: '>= 0.8.0'} 1470 | dev: true 1471 | 1472 | /prettier-linter-helpers/1.0.0: 1473 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1474 | engines: {node: '>=6.0.0'} 1475 | dependencies: 1476 | fast-diff: 1.2.0 1477 | dev: true 1478 | 1479 | /prettier/2.6.2: 1480 | resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==} 1481 | engines: {node: '>=10.13.0'} 1482 | hasBin: true 1483 | dev: true 1484 | 1485 | /punycode/2.1.1: 1486 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} 1487 | engines: {node: '>=6'} 1488 | dev: true 1489 | 1490 | /queue-microtask/1.2.3: 1491 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1492 | dev: true 1493 | 1494 | /readdirp/3.6.0: 1495 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1496 | engines: {node: '>=8.10.0'} 1497 | dependencies: 1498 | picomatch: 2.3.1 1499 | 1500 | /regexpp/3.2.0: 1501 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 1502 | engines: {node: '>=8'} 1503 | dev: true 1504 | 1505 | /resolve-from/4.0.0: 1506 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1507 | engines: {node: '>=4'} 1508 | dev: true 1509 | 1510 | /resolve/1.22.0: 1511 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 1512 | hasBin: true 1513 | dependencies: 1514 | is-core-module: 2.9.0 1515 | path-parse: 1.0.7 1516 | supports-preserve-symlinks-flag: 1.0.0 1517 | dev: true 1518 | 1519 | /reusify/1.0.4: 1520 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1521 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1522 | dev: true 1523 | 1524 | /rimraf/3.0.2: 1525 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1526 | hasBin: true 1527 | dependencies: 1528 | glob: 7.2.3 1529 | dev: true 1530 | 1531 | /rollup/2.74.1: 1532 | resolution: {integrity: sha512-K2zW7kV8Voua5eGkbnBtWYfMIhYhT9Pel2uhBk2WO5eMee161nPze/XRfvEQPFYz7KgrCCnmh2Wy0AMFLGGmMA==} 1533 | engines: {node: '>=10.0.0'} 1534 | hasBin: true 1535 | optionalDependencies: 1536 | fsevents: 2.3.2 1537 | dev: true 1538 | 1539 | /run-parallel/1.2.0: 1540 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1541 | dependencies: 1542 | queue-microtask: 1.2.3 1543 | dev: true 1544 | 1545 | /sass/1.52.1: 1546 | resolution: {integrity: sha512-fSzYTbr7z8oQnVJ3Acp9hV80dM1fkMN7mSD/25mpcct9F7FPBMOI8krEYALgU1aZoqGhQNhTPsuSmxjnIvAm4Q==} 1547 | engines: {node: '>=12.0.0'} 1548 | hasBin: true 1549 | dependencies: 1550 | chokidar: 3.5.3 1551 | immutable: 4.1.0 1552 | source-map-js: 1.0.2 1553 | 1554 | /semver/7.3.7: 1555 | resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} 1556 | engines: {node: '>=10'} 1557 | hasBin: true 1558 | dependencies: 1559 | lru-cache: 6.0.0 1560 | dev: true 1561 | 1562 | /shebang-command/2.0.0: 1563 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1564 | engines: {node: '>=8'} 1565 | dependencies: 1566 | shebang-regex: 3.0.0 1567 | dev: true 1568 | 1569 | /shebang-regex/3.0.0: 1570 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1571 | engines: {node: '>=8'} 1572 | dev: true 1573 | 1574 | /slash/3.0.0: 1575 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1576 | engines: {node: '>=8'} 1577 | dev: true 1578 | 1579 | /source-map-js/1.0.2: 1580 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1581 | engines: {node: '>=0.10.0'} 1582 | 1583 | /source-map/0.6.1: 1584 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1585 | engines: {node: '>=0.10.0'} 1586 | 1587 | /sourcemap-codec/1.4.8: 1588 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 1589 | 1590 | /strip-ansi/6.0.1: 1591 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1592 | engines: {node: '>=8'} 1593 | dependencies: 1594 | ansi-regex: 5.0.1 1595 | dev: true 1596 | 1597 | /strip-json-comments/3.1.1: 1598 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1599 | engines: {node: '>=8'} 1600 | dev: true 1601 | 1602 | /supports-color/7.2.0: 1603 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1604 | engines: {node: '>=8'} 1605 | dependencies: 1606 | has-flag: 4.0.0 1607 | dev: true 1608 | 1609 | /supports-preserve-symlinks-flag/1.0.0: 1610 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1611 | engines: {node: '>= 0.4'} 1612 | dev: true 1613 | 1614 | /text-table/0.2.0: 1615 | resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} 1616 | dev: true 1617 | 1618 | /to-fast-properties/2.0.0: 1619 | resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} 1620 | engines: {node: '>=4'} 1621 | 1622 | /to-regex-range/5.0.1: 1623 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1624 | engines: {node: '>=8.0'} 1625 | dependencies: 1626 | is-number: 7.0.0 1627 | 1628 | /tslib/1.14.1: 1629 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 1630 | dev: true 1631 | 1632 | /tsutils/3.21.0_typescript@4.7.2: 1633 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 1634 | engines: {node: '>= 6'} 1635 | peerDependencies: 1636 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 1637 | dependencies: 1638 | tslib: 1.14.1 1639 | typescript: 4.7.2 1640 | dev: true 1641 | 1642 | /type-check/0.4.0: 1643 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1644 | engines: {node: '>= 0.8.0'} 1645 | dependencies: 1646 | prelude-ls: 1.2.1 1647 | dev: true 1648 | 1649 | /type-fest/0.20.2: 1650 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1651 | engines: {node: '>=10'} 1652 | dev: true 1653 | 1654 | /typescript/4.7.2: 1655 | resolution: {integrity: sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==} 1656 | engines: {node: '>=4.2.0'} 1657 | hasBin: true 1658 | dev: true 1659 | 1660 | /unplugin-vue-components/0.19.6_vite@2.9.9+vue@3.2.36: 1661 | resolution: {integrity: sha512-APvrJ9Hpid1MLT0G4PWerMJgARhNw6dzz0pcCwCxaO2DR7VyvDacMqjOQNC6ukq7FSw3wzD8VH+9i3EFXwkGmw==} 1662 | engines: {node: '>=14'} 1663 | peerDependencies: 1664 | '@babel/parser': ^7.15.8 1665 | '@babel/traverse': ^7.15.4 1666 | vue: 2 || 3 1667 | peerDependenciesMeta: 1668 | '@babel/parser': 1669 | optional: true 1670 | '@babel/traverse': 1671 | optional: true 1672 | dependencies: 1673 | '@antfu/utils': 0.5.2 1674 | '@rollup/pluginutils': 4.2.1 1675 | chokidar: 3.5.3 1676 | debug: 4.3.4 1677 | fast-glob: 3.2.11 1678 | local-pkg: 0.4.1 1679 | magic-string: 0.26.2 1680 | minimatch: 5.1.0 1681 | resolve: 1.22.0 1682 | unplugin: 0.6.3_vite@2.9.9 1683 | vue: 3.2.36 1684 | transitivePeerDependencies: 1685 | - esbuild 1686 | - rollup 1687 | - supports-color 1688 | - vite 1689 | - webpack 1690 | dev: true 1691 | 1692 | /unplugin/0.6.3_vite@2.9.9: 1693 | resolution: {integrity: sha512-CoW88FQfCW/yabVc4bLrjikN9HC8dEvMU4O7B6K2jsYMPK0l6iAnd9dpJwqGcmXJKRCU9vwSsy653qg+RK0G6A==} 1694 | peerDependencies: 1695 | esbuild: '>=0.13' 1696 | rollup: ^2.50.0 1697 | vite: ^2.3.0 1698 | webpack: 4 || 5 1699 | peerDependenciesMeta: 1700 | esbuild: 1701 | optional: true 1702 | rollup: 1703 | optional: true 1704 | vite: 1705 | optional: true 1706 | webpack: 1707 | optional: true 1708 | dependencies: 1709 | chokidar: 3.5.3 1710 | vite: 2.9.9_sass@1.52.1 1711 | webpack-sources: 3.2.3 1712 | webpack-virtual-modules: 0.4.3 1713 | dev: true 1714 | 1715 | /uri-js/4.4.1: 1716 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1717 | dependencies: 1718 | punycode: 2.1.1 1719 | dev: true 1720 | 1721 | /util-deprecate/1.0.2: 1722 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} 1723 | dev: true 1724 | 1725 | /v8-compile-cache/2.3.0: 1726 | resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} 1727 | dev: true 1728 | 1729 | /vite/2.9.9: 1730 | resolution: {integrity: sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==} 1731 | engines: {node: '>=12.2.0'} 1732 | hasBin: true 1733 | peerDependencies: 1734 | less: '*' 1735 | sass: '*' 1736 | stylus: '*' 1737 | peerDependenciesMeta: 1738 | less: 1739 | optional: true 1740 | sass: 1741 | optional: true 1742 | stylus: 1743 | optional: true 1744 | dependencies: 1745 | esbuild: 0.14.39 1746 | postcss: 8.4.14 1747 | resolve: 1.22.0 1748 | rollup: 2.74.1 1749 | optionalDependencies: 1750 | fsevents: 2.3.2 1751 | dev: true 1752 | 1753 | /vite/2.9.9_sass@1.52.1: 1754 | resolution: {integrity: sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==} 1755 | engines: {node: '>=12.2.0'} 1756 | hasBin: true 1757 | peerDependencies: 1758 | less: '*' 1759 | sass: '*' 1760 | stylus: '*' 1761 | peerDependenciesMeta: 1762 | less: 1763 | optional: true 1764 | sass: 1765 | optional: true 1766 | stylus: 1767 | optional: true 1768 | dependencies: 1769 | esbuild: 0.14.39 1770 | postcss: 8.4.14 1771 | resolve: 1.22.0 1772 | rollup: 2.74.1 1773 | sass: 1.52.1 1774 | optionalDependencies: 1775 | fsevents: 2.3.2 1776 | dev: true 1777 | 1778 | /vue-eslint-parser/8.3.0_eslint@8.16.0: 1779 | resolution: {integrity: sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==} 1780 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1781 | peerDependencies: 1782 | eslint: '>=6.0.0' 1783 | dependencies: 1784 | debug: 4.3.4 1785 | eslint: 8.16.0 1786 | eslint-scope: 7.1.1 1787 | eslint-visitor-keys: 3.3.0 1788 | espree: 9.3.2 1789 | esquery: 1.4.0 1790 | lodash: 4.17.21 1791 | semver: 7.3.7 1792 | transitivePeerDependencies: 1793 | - supports-color 1794 | dev: true 1795 | 1796 | /vue-eslint-parser/9.0.2_eslint@8.16.0: 1797 | resolution: {integrity: sha512-uCPQwTGjOtAYrwnU+76pYxalhjsh7iFBsHwBqDHiOPTxtICDaraO4Szw54WFTNZTAEsgHHzqFOu1mmnBOBRzDA==} 1798 | engines: {node: ^14.17.0 || >=16.0.0} 1799 | peerDependencies: 1800 | eslint: '>=6.0.0' 1801 | dependencies: 1802 | debug: 4.3.4 1803 | eslint: 8.16.0 1804 | eslint-scope: 7.1.1 1805 | eslint-visitor-keys: 3.3.0 1806 | espree: 9.3.2 1807 | esquery: 1.4.0 1808 | lodash: 4.17.21 1809 | semver: 7.3.7 1810 | transitivePeerDependencies: 1811 | - supports-color 1812 | dev: true 1813 | 1814 | /vue-router/4.0.15_vue@3.2.36: 1815 | resolution: {integrity: sha512-xa+pIN9ZqORdIW1MkN2+d9Ui2pCM1b/UMgwYUCZOiFYHAvz/slKKBDha8DLrh5aCG/RibtrpyhKjKOZ85tYyWg==} 1816 | peerDependencies: 1817 | vue: ^3.2.0 1818 | dependencies: 1819 | '@vue/devtools-api': 6.1.4 1820 | vue: 3.2.36 1821 | dev: false 1822 | 1823 | /vue-tsc/0.34.16_typescript@4.7.2: 1824 | resolution: {integrity: sha512-9tYBQIOyl3Tz8ZrlYUKtftu5m/wXHfxCalyjR22QzSaUJoBJmZeNOoVs/QEllc0z4ideEZxvvU+pBFdoY3O16A==} 1825 | hasBin: true 1826 | peerDependencies: 1827 | typescript: '*' 1828 | dependencies: 1829 | '@volar/vue-typescript': 0.34.16 1830 | typescript: 4.7.2 1831 | dev: true 1832 | 1833 | /vue/3.2.36: 1834 | resolution: {integrity: sha512-5yTXmrE6gW8IQgttzHW5bfBiFA6mx35ZXHjGLDmKYzW6MMmYvCwuKybANRepwkMYeXw2v1buGg3/lPICY5YlZw==} 1835 | dependencies: 1836 | '@vue/compiler-dom': 3.2.36 1837 | '@vue/compiler-sfc': 3.2.36 1838 | '@vue/runtime-dom': 3.2.36 1839 | '@vue/server-renderer': 3.2.36_vue@3.2.36 1840 | '@vue/shared': 3.2.36 1841 | 1842 | /webpack-sources/3.2.3: 1843 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} 1844 | engines: {node: '>=10.13.0'} 1845 | dev: true 1846 | 1847 | /webpack-virtual-modules/0.4.3: 1848 | resolution: {integrity: sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==} 1849 | dev: true 1850 | 1851 | /which/2.0.2: 1852 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1853 | engines: {node: '>= 8'} 1854 | hasBin: true 1855 | dependencies: 1856 | isexe: 2.0.0 1857 | dev: true 1858 | 1859 | /word-wrap/1.2.3: 1860 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 1861 | engines: {node: '>=0.10.0'} 1862 | dev: true 1863 | 1864 | /wrappy/1.0.2: 1865 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} 1866 | dev: true 1867 | 1868 | /xml-name-validator/4.0.0: 1869 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} 1870 | engines: {node: '>=12'} 1871 | dev: true 1872 | 1873 | /yallist/4.0.0: 1874 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1875 | dev: true 1876 | --------------------------------------------------------------------------------