├── env.d.ts
├── src
├── crypto
│ ├── index.ts
│ └── crypto.ts
├── vite-env.d.ts
├── utils
│ ├── time.ts
│ └── base64.ts
├── totp
│ └── index.ts
├── main.ts
├── components
│ ├── AppHeader.vue
│ └── TOTP.vue
├── App.vue
├── components.d.ts
├── router
│ └── index.ts
├── views
│ ├── Unlock.vue
│ ├── Login.vue
│ ├── Home.vue
│ └── Register.vue
├── stores
│ ├── database.ts
│ └── account.ts
└── auto-imports.d.ts
├── vercel.json
├── .prettierignore
├── .prettierrc.json
├── public
└── favicon.ico
├── .vscode
└── extensions.json
├── tsconfig.json
├── tsconfig.node.json
├── tsconfig.app.json
├── index.html
├── .gitignore
├── README.md
├── package.json
├── vite.config.ts
├── LICENSE
└── pnpm-lock.yaml
/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/src/crypto/index.ts:
--------------------------------------------------------------------------------
1 | export * from './crypto';
2 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "github": { "silent": true }
3 | }
4 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | pnpm-lock.yaml
4 |
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "singleQuote": true
4 | }
5 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gizmo-ds/simple-authenticator/main/public/favicon.ico
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
3 | }
4 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | {
5 | "path": "./tsconfig.node.json"
6 | },
7 | {
8 | "path": "./tsconfig.app.json"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/src/utils/time.ts:
--------------------------------------------------------------------------------
1 | export function timestamp() {
2 | return Math.round(new Date().getTime() / 1000)
3 | }
4 |
5 | export function countdown(period: number) {
6 | return period - (timestamp() % period)
7 | }
8 |
--------------------------------------------------------------------------------
/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@vue/tsconfig/tsconfig.node.json",
3 | "include": ["vite.config.*", "cypress.config.*", "playwright.config.*"],
4 | "compilerOptions": {
5 | "composite": true,
6 | "types": ["node"]
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/totp/index.ts:
--------------------------------------------------------------------------------
1 | import { init as init_wasm } from 'totp-wasm/packages/totp-wasm'
2 | import wasm_url from 'totp-wasm/packages/totp-wasm/dist/totp_wasm_bg.wasm?url'
3 | export { hotp, totp, steam } from 'totp-wasm/packages/totp-wasm'
4 |
5 | export async function init_totp() {
6 | await init_wasm(wasm_url)
7 | }
8 |
--------------------------------------------------------------------------------
/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@vue/tsconfig/tsconfig.web.json",
3 | "include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
4 | "exclude": ["src/**/__tests__/*"],
5 | "compilerOptions": {
6 | "composite": true,
7 | "baseUrl": ".",
8 | "paths": {
9 | "@/*": ["./src/*"]
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Simple Authenticator
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import { createApp, markRaw } from 'vue'
2 | import { createPinia } from 'pinia'
3 | import App from './App.vue'
4 | import router from './router'
5 |
6 | import 'vfonts/FiraCode.css'
7 |
8 | const app = createApp(App)
9 | const pinia = createPinia()
10 |
11 | pinia.use(({ store }) => {
12 | store.$router = markRaw(router)
13 | })
14 |
15 | app.use(pinia)
16 | app.use(router)
17 |
18 | app.mount('#app')
19 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | .DS_Store
12 | dist
13 | dist-ssr
14 | coverage
15 | *.local
16 |
17 | /cypress/videos/
18 | /cypress/screenshots/
19 |
20 | # Editor directories and files
21 | .vscode/*
22 | !.vscode/extensions.json
23 | .idea
24 | *.suo
25 | *.ntvs*
26 | *.njsproj
27 | *.sln
28 | *.sw?
29 |
30 | .vercel
31 |
--------------------------------------------------------------------------------
/src/utils/base64.ts:
--------------------------------------------------------------------------------
1 | export function encode_base64(buf: ArrayBuffer) {
2 | const bytes = new Uint8Array(buf)
3 | let bs = ''
4 | for (let i = 0; i < bytes.byteLength; i++) bs += String.fromCharCode(bytes[i])
5 | return btoa(bs)
6 | }
7 |
8 | export function decode_base64(str: string) {
9 | const binary = atob(str)
10 | const length = binary.length
11 | const arr = new Uint8Array(length)
12 | for (let i = 0; i < length; i++) arr[i] = binary.charCodeAt(i)
13 | return arr
14 | }
15 |
--------------------------------------------------------------------------------
/src/components/AppHeader.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 |
27 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Simple Authenticator
2 |
3 | A simple authenticator for the web.
4 |
5 | > **Warning**
6 | > This project is still in the early stage of development, and is not ready for production use.
7 |
8 | ## Project Setup
9 |
10 | ```sh
11 | pnpm install
12 | ```
13 |
14 | ### Compile and Hot-Reload for Development
15 |
16 | ```sh
17 | pnpm dev
18 | ```
19 |
20 | ### Compile and Minify for Production
21 |
22 | ```sh
23 | pnpm build
24 | ```
25 |
26 | ## License
27 |
28 | Code is distributed under [MIT](./LICENSE) license, feel free to use it in your proprietary projects as well.
29 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
33 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "simple-authenticator",
3 | "version": "0.0.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "vite",
7 | "build": "run-p build-only",
8 | "preview": "vite preview",
9 | "build-only": "vite build"
10 | },
11 | "dependencies": {
12 | "@vueuse/components": "^10.1.0",
13 | "@vueuse/core": "^10.1.0",
14 | "pinia": "^2.0.35",
15 | "totp-wasm": "github:gizmo-ds/totp-wasm",
16 | "vue": "^3.2.47",
17 | "vue-router": "^4.1.6"
18 | },
19 | "devDependencies": {
20 | "@types/node": "^18.14.2",
21 | "@vitejs/plugin-vue": "^4.0.0",
22 | "@vue/tsconfig": "^0.1.3",
23 | "naive-ui": "^2.34.3",
24 | "npm-run-all": "^4.1.5",
25 | "sass": "^1.62.0",
26 | "typescript": "^5.0.4",
27 | "unplugin-auto-import": "^0.15.3",
28 | "unplugin-vue-components": "^0.24.1",
29 | "vfonts": "^0.0.3",
30 | "vite": "^4.1.4",
31 | "vooks": "^0.2.12",
32 | "vue-tsc": "^1.2.0"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { fileURLToPath, URL } from 'node:url'
2 | import path from 'node:path'
3 |
4 | import { defineConfig } from 'vite'
5 | import vue from '@vitejs/plugin-vue'
6 | import AutoImport from 'unplugin-auto-import/vite'
7 | import Components from 'unplugin-vue-components/vite'
8 | import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'
9 |
10 | export default defineConfig({
11 | plugins: [
12 | vue({
13 | reactivityTransform: true,
14 | }),
15 | AutoImport({
16 | imports: [
17 | 'vue',
18 | {
19 | 'naive-ui': [
20 | 'useDialog',
21 | 'useMessage',
22 | 'useNotification',
23 | 'useLoadingBar',
24 | ],
25 | },
26 | ],
27 | dts: path.resolve('src/auto-imports.d.ts'),
28 | }),
29 | Components({
30 | resolvers: [NaiveUiResolver()],
31 | dts: path.resolve('src/components.d.ts'),
32 | }),
33 | ],
34 | resolve: {
35 | alias: {
36 | '@': fileURLToPath(new URL('./src', import.meta.url)),
37 | },
38 | },
39 | })
40 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Gizmo
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/src/components.d.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* prettier-ignore */
3 | // @ts-nocheck
4 | // Generated by unplugin-vue-components
5 | // Read more: https://github.com/vuejs/core/pull/3399
6 | import '@vue/runtime-core'
7 |
8 | export {}
9 |
10 | declare module '@vue/runtime-core' {
11 | export interface GlobalComponents {
12 | AppHeader: typeof import('./components/AppHeader.vue')['default']
13 | NButton: typeof import('naive-ui')['NButton']
14 | NCard: typeof import('naive-ui')['NCard']
15 | NConfigProvider: typeof import('naive-ui')['NConfigProvider']
16 | NDivider: typeof import('naive-ui')['NDivider']
17 | NForm: typeof import('naive-ui')['NForm']
18 | NFormItem: typeof import('naive-ui')['NFormItem']
19 | NGlobalStyle: typeof import('naive-ui')['NGlobalStyle']
20 | NInput: typeof import('naive-ui')['NInput']
21 | NLayout: typeof import('naive-ui')['NLayout']
22 | NMessageProvider: typeof import('naive-ui')['NMessageProvider']
23 | NP: typeof import('naive-ui')['NP']
24 | NProgress: typeof import('naive-ui')['NProgress']
25 | NSpace: typeof import('naive-ui')['NSpace']
26 | RouterLink: typeof import('vue-router')['RouterLink']
27 | RouterView: typeof import('vue-router')['RouterView']
28 | TOTP: typeof import('./components/TOTP.vue')['default']
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/router/index.ts:
--------------------------------------------------------------------------------
1 | import { createRouter, createWebHashHistory } from 'vue-router'
2 | import Unlock from '@/views/Unlock.vue'
3 | import Login from '@/views/Login.vue'
4 | import { useAccountStore } from '@/stores/account'
5 |
6 | const router = createRouter({
7 | history: createWebHashHistory(import.meta.env.BASE_URL),
8 | routes: [
9 | {
10 | path: '/',
11 | name: 'home',
12 | component: () => import('@/views/Home.vue'),
13 | meta: {
14 | require_unlock: true,
15 | },
16 | },
17 | {
18 | path: '/unlock',
19 | name: 'unlock',
20 | component: Unlock,
21 | },
22 | {
23 | path: '/login',
24 | name: 'login',
25 | component: Login,
26 | },
27 | {
28 | path: '/register',
29 | name: 'register',
30 | component: () => import('../views/Register.vue'),
31 | meta: {
32 | header_title: 'Create Account',
33 | },
34 | },
35 | ],
36 | })
37 |
38 | router.beforeResolve(async (to, from, next) => {
39 | const account = localStorage.getItem('account')
40 | if (to.meta.require_unlock && !account) return next({ name: 'login' })
41 | const account_store = useAccountStore()
42 | if (to.meta.require_unlock && !account_store.account)
43 | return next({ name: 'unlock' })
44 | next()
45 | })
46 |
47 | export default router
48 |
--------------------------------------------------------------------------------
/src/views/Unlock.vue:
--------------------------------------------------------------------------------
1 |
23 |
24 |
25 |
26 |
27 |
28 |
36 |
37 |
38 |
39 | Unlock
40 |
41 |
42 |
43 |
44 |
45 |
52 |
--------------------------------------------------------------------------------
/src/stores/database.ts:
--------------------------------------------------------------------------------
1 | export class Database {
2 | private db: IDBDatabase | undefined
3 |
4 | constructor(public db_name: string, public store_name: string) {
5 | if (!('indexedDB' in window))
6 | throw new Error('browser does not support IndexedDB')
7 | }
8 |
9 | private async init_store(): Promise {
10 | return new Promise((resolve, reject) => {
11 | const request = indexedDB.open(this.db_name)
12 | request.onupgradeneeded = () =>
13 | request.result.createObjectStore(this.store_name, {
14 | autoIncrement: true,
15 | })
16 | request.onerror = () => reject(request.error)
17 | request.onsuccess = () => resolve(request.result)
18 | })
19 | }
20 |
21 | private tx(mode: IDBTransactionMode) {
22 | if (!this.db) throw new Error('database not connected')
23 | return this.db
24 | .transaction(this.store_name, mode)
25 | .objectStore(this.store_name)
26 | }
27 |
28 | public async connect() {
29 | if (this.db) return
30 | this.db = await this.init_store()
31 | }
32 | public put(value: T, key?: IDBValidKey): Promise {
33 | return new Promise((resolve, reject) => {
34 | const request = this.tx('readwrite').put(value, key)
35 | request.onerror = () => reject(request.error)
36 | request.onsuccess = () => resolve(request.result)
37 | })
38 | }
39 | public get(key: IDBValidKey): Promise {
40 | return new Promise((resolve, reject) => {
41 | const request = this.tx('readonly').get(key)
42 | request.onerror = () => reject(request.error)
43 | request.onsuccess = () => resolve(request.result)
44 | })
45 | }
46 | public delete(key: IDBValidKey): Promise {
47 | return new Promise((resolve, reject) => {
48 | const request = this.tx('readwrite').delete(key)
49 | request.onerror = () => reject(request.error)
50 | request.onsuccess = () => resolve()
51 | })
52 | }
53 | public async list(query?: IDBValidKey, count = 10): Promise {
54 | return new Promise((resolve, reject) => {
55 | const request = this.tx('readonly').getAll(query, count)
56 | request.onerror = () => reject(request.error)
57 | request.onsuccess = () => resolve(request.result)
58 | })
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/views/Login.vue:
--------------------------------------------------------------------------------
1 |
46 |
47 |
48 |
49 |
50 |
51 |
58 |
59 |
60 |
68 |
69 |
70 |
71 |
72 | Login
73 |
74 |
75 |
76 |
77 |
78 |
79 | Don't have an account?
80 | Create account
81 |
82 |
83 |
84 |
85 |
96 |
--------------------------------------------------------------------------------
/src/views/Home.vue:
--------------------------------------------------------------------------------
1 |
70 |
71 |
72 |
73 |
74 | Symmetric Key:
75 | {{
76 | account_store.sym_key
77 | ? encode_base64(account_store.sym_key.key)
78 | : 'null'
79 | }}
80 |
81 |
82 |
83 |
84 |
85 | Encrypt
86 | Decrypt
87 |
88 |
89 |
90 |
91 |
92 |
99 |
100 |
101 |
102 |
103 |
104 |
111 |
--------------------------------------------------------------------------------
/src/stores/account.ts:
--------------------------------------------------------------------------------
1 | import { defineStore } from 'pinia'
2 | import { ref } from 'vue'
3 | import {
4 | aes_decrypt,
5 | aes_encrypt,
6 | Cipher,
7 | gen_sym_key,
8 | pbkdf2,
9 | stretch_key,
10 | SymmetricCryptoKey,
11 | } from '@/crypto'
12 | import { encode_base64 } from '@/utils/base64'
13 |
14 | export const useAccountStore = defineStore('account', () => {
15 | const account = ref('')
16 | const sym_key = ref(undefined as SymmetricCryptoKey | undefined)
17 |
18 | async function create_account(account: string, password: string) {
19 | let pwd: Uint8Array | null = new TextEncoder().encode(password)
20 | let master_key: ArrayBuffer | null = await pbkdf2(
21 | pwd,
22 | new TextEncoder().encode(account),
23 | 500_000
24 | )
25 | const master_key_hash = await pbkdf2(master_key, pwd, 1)
26 | // remove pwd from memory
27 | pwd = null
28 |
29 | let stretched_master_key: SymmetricCryptoKey | null = await stretch_key(
30 | master_key
31 | )
32 | // remove master_key from memory
33 | master_key = null
34 |
35 | let _sym_key: SymmetricCryptoKey | null = gen_sym_key()
36 | const protected_sym_key = await aes_encrypt(
37 | _sym_key.key,
38 | stretched_master_key.enc,
39 | stretched_master_key.mac
40 | )
41 | // remove sym_key from memory
42 | _sym_key = null
43 | // remove stretched_master_key from memory
44 | stretched_master_key = null
45 |
46 | localStorage.setItem('account', account)
47 | localStorage.setItem('master_key_hash', encode_base64(master_key_hash))
48 | localStorage.setItem('sym_key', protected_sym_key.string)
49 | }
50 |
51 | async function unlock(_account: string, password: string) {
52 | const store_master_key_hash = localStorage.getItem('master_key_hash')
53 | if (!store_master_key_hash) throw new Error('No master key hash found')
54 |
55 | const store_sym_key = localStorage.getItem('sym_key')
56 | if (!store_sym_key) throw new Error('No stretch key found')
57 |
58 | let pwd: Uint8Array | null = new TextEncoder().encode(password)
59 | let master_key: ArrayBuffer | null = await pbkdf2(
60 | pwd,
61 | new TextEncoder().encode(_account),
62 | 500_000
63 | )
64 | const master_key_hash = await pbkdf2(master_key, pwd, 1)
65 | // remove pwd from memory
66 | pwd = null
67 |
68 | if (encode_base64(master_key_hash) !== store_master_key_hash)
69 | throw new Error('Wrong password')
70 |
71 | let stretched_master_key: SymmetricCryptoKey | null = await stretch_key(
72 | master_key
73 | )
74 | // remove master_key from memory
75 | master_key = null
76 |
77 | const sym_key_buf = await aes_decrypt(
78 | Cipher.from_string(store_sym_key),
79 | stretched_master_key.enc,
80 | stretched_master_key.mac
81 | )
82 | // remove stretched_master_key from memory
83 | stretched_master_key = null
84 |
85 | account.value = _account
86 | sym_key.value = new SymmetricCryptoKey(sym_key_buf)
87 | }
88 |
89 | return { account, sym_key, create_account, unlock }
90 | })
91 |
--------------------------------------------------------------------------------
/src/components/TOTP.vue:
--------------------------------------------------------------------------------
1 |
36 |
37 |
38 |
39 |
40 |
46 |
47 | {{ countdown }}
48 |
49 |
50 |
51 |
52 |
59 |
Example (alice@example.com)
60 |
61 | {{
62 | code.length === 6
63 | ? code
64 | .split('')
65 | .map((c, i) => (i > 0 && i % 3 === 0 ? ' ' + c : c))
66 | .join('')
67 | : code
68 | }}
69 |
70 |
71 |
72 |
73 |
76 |
77 |
78 |
125 |
--------------------------------------------------------------------------------
/src/views/Register.vue:
--------------------------------------------------------------------------------
1 |
56 |
57 |
58 |
59 |
60 |
61 |
67 |
68 |
69 |
75 |
76 |
77 |
83 |
84 |
85 |
86 |
93 | Create account
94 |
95 |
96 |
97 |
98 |
99 |
100 | Already have an account?
101 | Login
102 |
103 |
104 |
105 |
106 |
117 |
--------------------------------------------------------------------------------
/src/auto-imports.d.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* prettier-ignore */
3 | // @ts-nocheck
4 | // Generated by unplugin-auto-import
5 | export {}
6 | declare global {
7 | const EffectScope: typeof import('vue')['EffectScope']
8 | const computed: typeof import('vue')['computed']
9 | const createApp: typeof import('vue')['createApp']
10 | const customRef: typeof import('vue')['customRef']
11 | const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
12 | const defineComponent: typeof import('vue')['defineComponent']
13 | const effectScope: typeof import('vue')['effectScope']
14 | const getCurrentInstance: typeof import('vue')['getCurrentInstance']
15 | const getCurrentScope: typeof import('vue')['getCurrentScope']
16 | const h: typeof import('vue')['h']
17 | const inject: typeof import('vue')['inject']
18 | const isProxy: typeof import('vue')['isProxy']
19 | const isReactive: typeof import('vue')['isReactive']
20 | const isReadonly: typeof import('vue')['isReadonly']
21 | const isRef: typeof import('vue')['isRef']
22 | const markRaw: typeof import('vue')['markRaw']
23 | const nextTick: typeof import('vue')['nextTick']
24 | const onActivated: typeof import('vue')['onActivated']
25 | const onBeforeMount: typeof import('vue')['onBeforeMount']
26 | const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
27 | const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
28 | const onDeactivated: typeof import('vue')['onDeactivated']
29 | const onErrorCaptured: typeof import('vue')['onErrorCaptured']
30 | const onMounted: typeof import('vue')['onMounted']
31 | const onRenderTracked: typeof import('vue')['onRenderTracked']
32 | const onRenderTriggered: typeof import('vue')['onRenderTriggered']
33 | const onScopeDispose: typeof import('vue')['onScopeDispose']
34 | const onServerPrefetch: typeof import('vue')['onServerPrefetch']
35 | const onUnmounted: typeof import('vue')['onUnmounted']
36 | const onUpdated: typeof import('vue')['onUpdated']
37 | const provide: typeof import('vue')['provide']
38 | const reactive: typeof import('vue')['reactive']
39 | const readonly: typeof import('vue')['readonly']
40 | const ref: typeof import('vue')['ref']
41 | const resolveComponent: typeof import('vue')['resolveComponent']
42 | const shallowReactive: typeof import('vue')['shallowReactive']
43 | const shallowReadonly: typeof import('vue')['shallowReadonly']
44 | const shallowRef: typeof import('vue')['shallowRef']
45 | const toRaw: typeof import('vue')['toRaw']
46 | const toRef: typeof import('vue')['toRef']
47 | const toRefs: typeof import('vue')['toRefs']
48 | const triggerRef: typeof import('vue')['triggerRef']
49 | const unref: typeof import('vue')['unref']
50 | const useAttrs: typeof import('vue')['useAttrs']
51 | const useCssModule: typeof import('vue')['useCssModule']
52 | const useCssVars: typeof import('vue')['useCssVars']
53 | const useDialog: typeof import('naive-ui')['useDialog']
54 | const useLoadingBar: typeof import('naive-ui')['useLoadingBar']
55 | const useMessage: typeof import('naive-ui')['useMessage']
56 | const useNotification: typeof import('naive-ui')['useNotification']
57 | const useSlots: typeof import('vue')['useSlots']
58 | const watch: typeof import('vue')['watch']
59 | const watchEffect: typeof import('vue')['watchEffect']
60 | const watchPostEffect: typeof import('vue')['watchPostEffect']
61 | const watchSyncEffect: typeof import('vue')['watchSyncEffect']
62 | }
63 | // for type re-export
64 | declare global {
65 | // @ts-ignore
66 | export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from 'vue'
67 | }
68 |
--------------------------------------------------------------------------------
/src/crypto/crypto.ts:
--------------------------------------------------------------------------------
1 | import { decode_base64, encode_base64 } from '@/utils/base64'
2 |
3 | export async function pbkdf2(
4 | key: BufferSource,
5 | salt: BufferSource,
6 | iterations: number
7 | ) {
8 | const _key = await crypto.subtle.importKey(
9 | 'raw',
10 | key,
11 | { name: 'PBKDF2' },
12 | false,
13 | ['deriveBits']
14 | )
15 | return await crypto.subtle.deriveBits(
16 | { name: 'PBKDF2', salt, iterations, hash: 'SHA-256' },
17 | _key,
18 | 256
19 | )
20 | }
21 |
22 | export class SymmetricCryptoKey {
23 | public key: Uint8Array
24 | public enc: Uint8Array
25 | public mac: Uint8Array
26 | constructor(buf: ArrayBuffer) {
27 | this.enc = new Uint8Array(buf, 0, buf.byteLength / 2)
28 | this.mac = new Uint8Array(buf, buf.byteLength / 2)
29 | this.key = new Uint8Array(buf)
30 | }
31 | }
32 |
33 | export async function stretch_key(key: BufferSource) {
34 | const enc = await hkdf_expand(key, new TextEncoder().encode('enc'), 32)
35 | const mac = await hkdf_expand(key, new TextEncoder().encode('mac'), 32)
36 | const new_key = new Uint8Array(64)
37 | new_key.set(enc)
38 | new_key.set(mac, 32)
39 | return new SymmetricCryptoKey(new_key.buffer)
40 | }
41 |
42 | export async function hkdf_expand(
43 | prk: BufferSource,
44 | info: Uint8Array,
45 | size: number
46 | ) {
47 | const alg = { name: 'HMAC', hash: { name: 'SHA-256' } }
48 | const key = await crypto.subtle.importKey('raw', prk, alg, false, ['sign'])
49 | const okm = new Uint8Array(size)
50 | let pt = new Uint8Array(0)
51 | const n = Math.ceil(size / 32)
52 | for (let i = 0; i < n; i++) {
53 | const t = new Uint8Array(pt.length + info.length + 1)
54 | t.set(pt)
55 | t.set(info, pt.length)
56 | t.set([i + 1], t.length - 1)
57 | pt = new Uint8Array(await crypto.subtle.sign(alg, key, t.buffer))
58 | okm.set(pt, i * 32)
59 | }
60 | return okm
61 | }
62 |
63 | export function gen_sym_key() {
64 | const key = new Uint8Array(64)
65 | crypto.getRandomValues(key)
66 | return new SymmetricCryptoKey(key.buffer)
67 | }
68 |
69 | export class RSAKeyPair {
70 | constructor(public public_key: Uint8Array, public private_key: Uint8Array) {}
71 | }
72 |
73 | export async function gen_rsa_keys() {
74 | const pair = await crypto.subtle.generateKey(
75 | {
76 | name: 'RSA-OAEP',
77 | modulusLength: 2048,
78 | publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
79 | hash: { name: 'SHA-1' },
80 | },
81 | true,
82 | ['encrypt', 'decrypt']
83 | )
84 | const public_key = new Uint8Array(
85 | await crypto.subtle.exportKey('spki', pair.publicKey)
86 | )
87 | const private_key = new Uint8Array(
88 | await crypto.subtle.exportKey('pkcs8', pair.privateKey)
89 | )
90 | return new RSAKeyPair(public_key, private_key)
91 | }
92 |
93 | async function macs_equal(
94 | mac1: BufferSource,
95 | mac2: BufferSource,
96 | key: BufferSource
97 | ) {
98 | const alg = {
99 | name: 'HMAC',
100 | hash: { name: 'SHA-256' },
101 | }
102 | const _key = await crypto.subtle.importKey('raw', key, alg, false, ['sign'])
103 | const _mac1 = await crypto.subtle.sign(alg, _key, mac1)
104 | const _mac2 = await crypto.subtle.sign(alg, _key, mac2)
105 | if (_mac1.byteLength !== _mac2.byteLength) return false
106 | const mac1_arr = new Uint8Array(_mac1)
107 | const mac2_arr = new Uint8Array(_mac2)
108 | for (let i = 0; i < mac2_arr.length; i++)
109 | if (mac1_arr[i] !== mac2_arr[i]) return false
110 | return true
111 | }
112 |
113 | export class Cipher {
114 | public string: string
115 | constructor(
116 | public iv: Uint8Array,
117 | public encrypted: Uint8Array,
118 | public mac_data: Uint8Array
119 | ) {
120 | this.string =
121 | encode_base64(iv) +
122 | '|' +
123 | encode_base64(encrypted) +
124 | '|' +
125 | encode_base64(mac_data)
126 | }
127 |
128 | static from_string(str: string) {
129 | const [iv, encrypted, mac_data] = str.split('|').map(decode_base64)
130 | if (!iv || !encrypted || !mac_data) throw new Error('Invalid cipher')
131 | return new Cipher(iv, encrypted, mac_data)
132 | }
133 | }
134 |
135 | export async function aes_encrypt(
136 | data: BufferSource,
137 | enc: BufferSource,
138 | mac: BufferSource,
139 | iv?: Uint8Array
140 | ) {
141 | const enc_options = {
142 | name: 'AES-CBC',
143 | iv: new Uint8Array(16),
144 | }
145 | if (iv) enc_options.iv = iv
146 | else crypto.getRandomValues(enc_options.iv)
147 |
148 | const key = await crypto.subtle.importKey(
149 | 'raw',
150 | enc,
151 | { name: 'AES-CBC' },
152 | false,
153 | ['encrypt']
154 | )
155 | const encrypted = new Uint8Array(
156 | await crypto.subtle.encrypt(enc_options, key, data)
157 | )
158 |
159 | const t_data_mac = new Uint8Array(
160 | enc_options.iv.byteLength + encrypted.byteLength
161 | )
162 | t_data_mac.set(enc_options.iv, 0)
163 | t_data_mac.set(encrypted, enc_options.iv.byteLength)
164 | const mac_buf = await crypto.subtle.sign(
165 | { name: 'HMAC', hash: { name: 'SHA-256' } },
166 | await crypto.subtle.importKey(
167 | 'raw',
168 | mac,
169 | { name: 'HMAC', hash: { name: 'SHA-256' } },
170 | false,
171 | ['sign']
172 | ),
173 | t_data_mac
174 | )
175 | const mac_data = new Uint8Array(mac_buf)
176 | return new Cipher(enc_options.iv, encrypted, mac_data)
177 | }
178 |
179 | export async function aes_decrypt(
180 | cipher: Cipher,
181 | enc: BufferSource,
182 | mac: BufferSource
183 | ) {
184 | const t_data_mac = new Uint8Array(
185 | cipher.iv.byteLength + cipher.encrypted.byteLength
186 | )
187 | t_data_mac.set(cipher.iv, 0)
188 | t_data_mac.set(cipher.encrypted, cipher.iv.byteLength)
189 | const mac_buf = await crypto.subtle.sign(
190 | { name: 'HMAC', hash: { name: 'SHA-256' } },
191 | await crypto.subtle.importKey(
192 | 'raw',
193 | mac,
194 | { name: 'HMAC', hash: { name: 'SHA-256' } },
195 | false,
196 | ['sign']
197 | ),
198 | t_data_mac
199 | )
200 | if (!(await macs_equal(cipher.mac_data, mac_buf, enc))) throw 'Invalid MAC'
201 |
202 | const key = await crypto.subtle.importKey(
203 | 'raw',
204 | enc,
205 | { name: 'AES-CBC' },
206 | false,
207 | ['decrypt']
208 | )
209 | return await crypto.subtle.decrypt(
210 | { name: 'AES-CBC', iv: cipher.iv },
211 | key,
212 | cipher.encrypted
213 | )
214 | }
215 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | dependencies:
4 | '@vueuse/components':
5 | specifier: ^10.1.0
6 | version: 10.1.0(vue@3.2.47)
7 | '@vueuse/core':
8 | specifier: ^10.1.0
9 | version: 10.1.0(vue@3.2.47)
10 | pinia:
11 | specifier: ^2.0.35
12 | version: 2.0.35(typescript@5.0.4)(vue@3.2.47)
13 | totp-wasm:
14 | specifier: github:gizmo-ds/totp-wasm
15 | version: github.com/gizmo-ds/totp-wasm/7b91ef831b6b93854ffa70786699effd4c944d14
16 | vue:
17 | specifier: ^3.2.47
18 | version: 3.2.47
19 | vue-router:
20 | specifier: ^4.1.6
21 | version: 4.1.6(vue@3.2.47)
22 |
23 | devDependencies:
24 | '@types/node':
25 | specifier: ^18.14.2
26 | version: 18.16.0
27 | '@vitejs/plugin-vue':
28 | specifier: ^4.0.0
29 | version: 4.1.0(vite@4.3.1)(vue@3.2.47)
30 | '@vue/tsconfig':
31 | specifier: ^0.1.3
32 | version: 0.1.3(@types/node@18.16.0)
33 | naive-ui:
34 | specifier: ^2.34.3
35 | version: 2.34.3(vue@3.2.47)
36 | npm-run-all:
37 | specifier: ^4.1.5
38 | version: 4.1.5
39 | sass:
40 | specifier: ^1.62.0
41 | version: 1.62.0
42 | typescript:
43 | specifier: ^5.0.4
44 | version: 5.0.4
45 | unplugin-auto-import:
46 | specifier: ^0.15.3
47 | version: 0.15.3(@vueuse/core@10.1.0)
48 | unplugin-vue-components:
49 | specifier: ^0.24.1
50 | version: 0.24.1(vue@3.2.47)
51 | vfonts:
52 | specifier: ^0.0.3
53 | version: 0.0.3
54 | vite:
55 | specifier: ^4.1.4
56 | version: 4.3.1(@types/node@18.16.0)(sass@1.62.0)
57 | vooks:
58 | specifier: ^0.2.12
59 | version: 0.2.12(vue@3.2.47)
60 | vue-tsc:
61 | specifier: ^1.2.0
62 | version: 1.4.4(typescript@5.0.4)
63 |
64 | packages:
65 |
66 | /@antfu/utils@0.7.2:
67 | resolution: {integrity: sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==}
68 | dev: true
69 |
70 | /@babel/helper-string-parser@7.19.4:
71 | resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
72 | engines: {node: '>=6.9.0'}
73 |
74 | /@babel/helper-validator-identifier@7.19.1:
75 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
76 | engines: {node: '>=6.9.0'}
77 |
78 | /@babel/parser@7.21.4:
79 | resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==}
80 | engines: {node: '>=6.0.0'}
81 | hasBin: true
82 | dependencies:
83 | '@babel/types': 7.21.4
84 |
85 | /@babel/types@7.21.4:
86 | resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==}
87 | engines: {node: '>=6.9.0'}
88 | dependencies:
89 | '@babel/helper-string-parser': 7.19.4
90 | '@babel/helper-validator-identifier': 7.19.1
91 | to-fast-properties: 2.0.0
92 |
93 | /@css-render/plugin-bem@0.15.12(css-render@0.15.12):
94 | resolution: {integrity: sha512-Lq2jSOZn+wYQtsyaFj6QRz2EzAnd3iW5fZeHO1WSXQdVYwvwGX0ZiH3X2JQgtgYLT1yeGtrwrqJdNdMEUD2xTw==}
95 | peerDependencies:
96 | css-render: ~0.15.12
97 | dependencies:
98 | css-render: 0.15.12
99 | dev: true
100 |
101 | /@css-render/vue3-ssr@0.15.12(vue@3.2.47):
102 | resolution: {integrity: sha512-AQLGhhaE0F+rwybRCkKUdzBdTEM/5PZBYy+fSYe1T9z9+yxMuV/k7ZRqa4M69X+EI1W8pa4kc9Iq2VjQkZx4rg==}
103 | peerDependencies:
104 | vue: ^3.0.11
105 | dependencies:
106 | vue: 3.2.47
107 | dev: true
108 |
109 | /@emotion/hash@0.8.0:
110 | resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
111 | dev: true
112 |
113 | /@esbuild/android-arm64@0.17.18:
114 | resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==}
115 | engines: {node: '>=12'}
116 | cpu: [arm64]
117 | os: [android]
118 | requiresBuild: true
119 | dev: true
120 | optional: true
121 |
122 | /@esbuild/android-arm@0.17.18:
123 | resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==}
124 | engines: {node: '>=12'}
125 | cpu: [arm]
126 | os: [android]
127 | requiresBuild: true
128 | dev: true
129 | optional: true
130 |
131 | /@esbuild/android-x64@0.17.18:
132 | resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==}
133 | engines: {node: '>=12'}
134 | cpu: [x64]
135 | os: [android]
136 | requiresBuild: true
137 | dev: true
138 | optional: true
139 |
140 | /@esbuild/darwin-arm64@0.17.18:
141 | resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==}
142 | engines: {node: '>=12'}
143 | cpu: [arm64]
144 | os: [darwin]
145 | requiresBuild: true
146 | dev: true
147 | optional: true
148 |
149 | /@esbuild/darwin-x64@0.17.18:
150 | resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==}
151 | engines: {node: '>=12'}
152 | cpu: [x64]
153 | os: [darwin]
154 | requiresBuild: true
155 | dev: true
156 | optional: true
157 |
158 | /@esbuild/freebsd-arm64@0.17.18:
159 | resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==}
160 | engines: {node: '>=12'}
161 | cpu: [arm64]
162 | os: [freebsd]
163 | requiresBuild: true
164 | dev: true
165 | optional: true
166 |
167 | /@esbuild/freebsd-x64@0.17.18:
168 | resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==}
169 | engines: {node: '>=12'}
170 | cpu: [x64]
171 | os: [freebsd]
172 | requiresBuild: true
173 | dev: true
174 | optional: true
175 |
176 | /@esbuild/linux-arm64@0.17.18:
177 | resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==}
178 | engines: {node: '>=12'}
179 | cpu: [arm64]
180 | os: [linux]
181 | requiresBuild: true
182 | dev: true
183 | optional: true
184 |
185 | /@esbuild/linux-arm@0.17.18:
186 | resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==}
187 | engines: {node: '>=12'}
188 | cpu: [arm]
189 | os: [linux]
190 | requiresBuild: true
191 | dev: true
192 | optional: true
193 |
194 | /@esbuild/linux-ia32@0.17.18:
195 | resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==}
196 | engines: {node: '>=12'}
197 | cpu: [ia32]
198 | os: [linux]
199 | requiresBuild: true
200 | dev: true
201 | optional: true
202 |
203 | /@esbuild/linux-loong64@0.17.18:
204 | resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==}
205 | engines: {node: '>=12'}
206 | cpu: [loong64]
207 | os: [linux]
208 | requiresBuild: true
209 | dev: true
210 | optional: true
211 |
212 | /@esbuild/linux-mips64el@0.17.18:
213 | resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==}
214 | engines: {node: '>=12'}
215 | cpu: [mips64el]
216 | os: [linux]
217 | requiresBuild: true
218 | dev: true
219 | optional: true
220 |
221 | /@esbuild/linux-ppc64@0.17.18:
222 | resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==}
223 | engines: {node: '>=12'}
224 | cpu: [ppc64]
225 | os: [linux]
226 | requiresBuild: true
227 | dev: true
228 | optional: true
229 |
230 | /@esbuild/linux-riscv64@0.17.18:
231 | resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==}
232 | engines: {node: '>=12'}
233 | cpu: [riscv64]
234 | os: [linux]
235 | requiresBuild: true
236 | dev: true
237 | optional: true
238 |
239 | /@esbuild/linux-s390x@0.17.18:
240 | resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==}
241 | engines: {node: '>=12'}
242 | cpu: [s390x]
243 | os: [linux]
244 | requiresBuild: true
245 | dev: true
246 | optional: true
247 |
248 | /@esbuild/linux-x64@0.17.18:
249 | resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==}
250 | engines: {node: '>=12'}
251 | cpu: [x64]
252 | os: [linux]
253 | requiresBuild: true
254 | dev: true
255 | optional: true
256 |
257 | /@esbuild/netbsd-x64@0.17.18:
258 | resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==}
259 | engines: {node: '>=12'}
260 | cpu: [x64]
261 | os: [netbsd]
262 | requiresBuild: true
263 | dev: true
264 | optional: true
265 |
266 | /@esbuild/openbsd-x64@0.17.18:
267 | resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==}
268 | engines: {node: '>=12'}
269 | cpu: [x64]
270 | os: [openbsd]
271 | requiresBuild: true
272 | dev: true
273 | optional: true
274 |
275 | /@esbuild/sunos-x64@0.17.18:
276 | resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==}
277 | engines: {node: '>=12'}
278 | cpu: [x64]
279 | os: [sunos]
280 | requiresBuild: true
281 | dev: true
282 | optional: true
283 |
284 | /@esbuild/win32-arm64@0.17.18:
285 | resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==}
286 | engines: {node: '>=12'}
287 | cpu: [arm64]
288 | os: [win32]
289 | requiresBuild: true
290 | dev: true
291 | optional: true
292 |
293 | /@esbuild/win32-ia32@0.17.18:
294 | resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==}
295 | engines: {node: '>=12'}
296 | cpu: [ia32]
297 | os: [win32]
298 | requiresBuild: true
299 | dev: true
300 | optional: true
301 |
302 | /@esbuild/win32-x64@0.17.18:
303 | resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==}
304 | engines: {node: '>=12'}
305 | cpu: [x64]
306 | os: [win32]
307 | requiresBuild: true
308 | dev: true
309 | optional: true
310 |
311 | /@jridgewell/sourcemap-codec@1.4.15:
312 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
313 | dev: true
314 |
315 | /@juggle/resize-observer@3.4.0:
316 | resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
317 | dev: true
318 |
319 | /@nodelib/fs.scandir@2.1.5:
320 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
321 | engines: {node: '>= 8'}
322 | dependencies:
323 | '@nodelib/fs.stat': 2.0.5
324 | run-parallel: 1.2.0
325 | dev: true
326 |
327 | /@nodelib/fs.stat@2.0.5:
328 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
329 | engines: {node: '>= 8'}
330 | dev: true
331 |
332 | /@nodelib/fs.walk@1.2.8:
333 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
334 | engines: {node: '>= 8'}
335 | dependencies:
336 | '@nodelib/fs.scandir': 2.1.5
337 | fastq: 1.15.0
338 | dev: true
339 |
340 | /@rollup/pluginutils@5.0.2:
341 | resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
342 | engines: {node: '>=14.0.0'}
343 | peerDependencies:
344 | rollup: ^1.20.0||^2.0.0||^3.0.0
345 | peerDependenciesMeta:
346 | rollup:
347 | optional: true
348 | dependencies:
349 | '@types/estree': 1.0.1
350 | estree-walker: 2.0.2
351 | picomatch: 2.3.1
352 | dev: true
353 |
354 | /@types/estree@1.0.1:
355 | resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
356 | dev: true
357 |
358 | /@types/katex@0.14.0:
359 | resolution: {integrity: sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==}
360 | dev: true
361 |
362 | /@types/lodash-es@4.17.7:
363 | resolution: {integrity: sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==}
364 | dependencies:
365 | '@types/lodash': 4.14.194
366 | dev: true
367 |
368 | /@types/lodash@4.14.194:
369 | resolution: {integrity: sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==}
370 | dev: true
371 |
372 | /@types/node@18.16.0:
373 | resolution: {integrity: sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ==}
374 | dev: true
375 |
376 | /@types/web-bluetooth@0.0.16:
377 | resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
378 |
379 | /@vitejs/plugin-vue@4.1.0(vite@4.3.1)(vue@3.2.47):
380 | resolution: {integrity: sha512-++9JOAFdcXI3lyer9UKUV4rfoQ3T1RN8yDqoCLar86s0xQct5yblxAE+yWgRnU5/0FOlVCpTZpYSBV/bGWrSrQ==}
381 | engines: {node: ^14.18.0 || >=16.0.0}
382 | peerDependencies:
383 | vite: ^4.0.0
384 | vue: ^3.2.25
385 | dependencies:
386 | vite: 4.3.1(@types/node@18.16.0)(sass@1.62.0)
387 | vue: 3.2.47
388 | dev: true
389 |
390 | /@volar/language-core@1.4.1:
391 | resolution: {integrity: sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ==}
392 | dependencies:
393 | '@volar/source-map': 1.4.1
394 | dev: true
395 |
396 | /@volar/source-map@1.4.1:
397 | resolution: {integrity: sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA==}
398 | dependencies:
399 | muggle-string: 0.2.2
400 | dev: true
401 |
402 | /@volar/typescript@1.4.1(typescript@5.0.4):
403 | resolution: {integrity: sha512-phTy6p9yG6bgMIKQWEeDOi/aeT0njZsb1a/G1mrEuDsLmAn24Le4gDwSsGNhea6Uhu+3gdpUZn2PmZXa+WG2iQ==}
404 | peerDependencies:
405 | typescript: '*'
406 | dependencies:
407 | '@volar/language-core': 1.4.1
408 | typescript: 5.0.4
409 | dev: true
410 |
411 | /@volar/vue-language-core@1.4.4:
412 | resolution: {integrity: sha512-c3hL6un+CfoOlusGvpypcodmk9ke/ImrWIUc0GkgI+imoQpUGzgu3tEQWlPs604R7AhxeZwWUi8hQNfax0R/zA==}
413 | dependencies:
414 | '@volar/language-core': 1.4.1
415 | '@volar/source-map': 1.4.1
416 | '@vue/compiler-dom': 3.2.47
417 | '@vue/compiler-sfc': 3.2.47
418 | '@vue/reactivity': 3.2.47
419 | '@vue/shared': 3.2.47
420 | minimatch: 9.0.0
421 | muggle-string: 0.2.2
422 | vue-template-compiler: 2.7.14
423 | dev: true
424 |
425 | /@volar/vue-typescript@1.4.4(typescript@5.0.4):
426 | resolution: {integrity: sha512-L61Fk15jlJw3QtIddD4cVE5jei5i6zbLJRiaEMYDDnUKB259/qUrdvnMfnZUFVyDwlevzdstjtaUyreeG/0nPQ==}
427 | peerDependencies:
428 | typescript: '*'
429 | dependencies:
430 | '@volar/typescript': 1.4.1(typescript@5.0.4)
431 | '@volar/vue-language-core': 1.4.4
432 | typescript: 5.0.4
433 | dev: true
434 |
435 | /@vue/compiler-core@3.2.47:
436 | resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
437 | dependencies:
438 | '@babel/parser': 7.21.4
439 | '@vue/shared': 3.2.47
440 | estree-walker: 2.0.2
441 | source-map: 0.6.1
442 |
443 | /@vue/compiler-dom@3.2.47:
444 | resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==}
445 | dependencies:
446 | '@vue/compiler-core': 3.2.47
447 | '@vue/shared': 3.2.47
448 |
449 | /@vue/compiler-sfc@3.2.47:
450 | resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==}
451 | dependencies:
452 | '@babel/parser': 7.21.4
453 | '@vue/compiler-core': 3.2.47
454 | '@vue/compiler-dom': 3.2.47
455 | '@vue/compiler-ssr': 3.2.47
456 | '@vue/reactivity-transform': 3.2.47
457 | '@vue/shared': 3.2.47
458 | estree-walker: 2.0.2
459 | magic-string: 0.25.9
460 | postcss: 8.4.23
461 | source-map: 0.6.1
462 |
463 | /@vue/compiler-ssr@3.2.47:
464 | resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==}
465 | dependencies:
466 | '@vue/compiler-dom': 3.2.47
467 | '@vue/shared': 3.2.47
468 |
469 | /@vue/devtools-api@6.5.0:
470 | resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
471 | dev: false
472 |
473 | /@vue/reactivity-transform@3.2.47:
474 | resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==}
475 | dependencies:
476 | '@babel/parser': 7.21.4
477 | '@vue/compiler-core': 3.2.47
478 | '@vue/shared': 3.2.47
479 | estree-walker: 2.0.2
480 | magic-string: 0.25.9
481 |
482 | /@vue/reactivity@3.2.47:
483 | resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==}
484 | dependencies:
485 | '@vue/shared': 3.2.47
486 |
487 | /@vue/runtime-core@3.2.47:
488 | resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==}
489 | dependencies:
490 | '@vue/reactivity': 3.2.47
491 | '@vue/shared': 3.2.47
492 |
493 | /@vue/runtime-dom@3.2.47:
494 | resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==}
495 | dependencies:
496 | '@vue/runtime-core': 3.2.47
497 | '@vue/shared': 3.2.47
498 | csstype: 2.6.21
499 |
500 | /@vue/server-renderer@3.2.47(vue@3.2.47):
501 | resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==}
502 | peerDependencies:
503 | vue: 3.2.47
504 | dependencies:
505 | '@vue/compiler-ssr': 3.2.47
506 | '@vue/shared': 3.2.47
507 | vue: 3.2.47
508 |
509 | /@vue/shared@3.2.47:
510 | resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==}
511 |
512 | /@vue/tsconfig@0.1.3(@types/node@18.16.0):
513 | resolution: {integrity: sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg==}
514 | peerDependencies:
515 | '@types/node': '*'
516 | peerDependenciesMeta:
517 | '@types/node':
518 | optional: true
519 | dependencies:
520 | '@types/node': 18.16.0
521 | dev: true
522 |
523 | /@vueuse/components@10.1.0(vue@3.2.47):
524 | resolution: {integrity: sha512-U3c5tPUAxfwWoBSpFbCNFMEM8/jSZ0+5M1n9YWcahyb+uRNo4UmsofX/Hzs6K56PSm0g+uuhZVwSnMq8ttD8Lw==}
525 | dependencies:
526 | '@vueuse/core': 10.1.0(vue@3.2.47)
527 | '@vueuse/shared': 10.1.0(vue@3.2.47)
528 | vue-demi: 0.14.0(vue@3.2.47)
529 | transitivePeerDependencies:
530 | - '@vue/composition-api'
531 | - vue
532 | dev: false
533 |
534 | /@vueuse/core@10.1.0(vue@3.2.47):
535 | resolution: {integrity: sha512-3Znoa5m5RO+z4/C9w6DRaKTR3wCVJvD5rav8HTDGsr+7rOZRHtcgFJ8NcCs0ZvIpmev2kExTa311ns5j2RbzDQ==}
536 | dependencies:
537 | '@types/web-bluetooth': 0.0.16
538 | '@vueuse/metadata': 10.1.0
539 | '@vueuse/shared': 10.1.0(vue@3.2.47)
540 | vue-demi: 0.14.0(vue@3.2.47)
541 | transitivePeerDependencies:
542 | - '@vue/composition-api'
543 | - vue
544 |
545 | /@vueuse/metadata@10.1.0:
546 | resolution: {integrity: sha512-cM28HjDEw5FIrPE9rgSPFZvQ0ZYnOLAOr8hl1XM6tFl80U3WAR5ROdnAqiYybniwP5gt9MKKAJAqd/ab2aHkqg==}
547 |
548 | /@vueuse/shared@10.1.0(vue@3.2.47):
549 | resolution: {integrity: sha512-2X52ogu12i9DkKOQ01yeb/BKg9UO87RNnpm5sXkQvyORlbq8ONS5l39MYkjkeVWWjdT0teJru7a2S41dmHmqjQ==}
550 | dependencies:
551 | vue-demi: 0.14.0(vue@3.2.47)
552 | transitivePeerDependencies:
553 | - '@vue/composition-api'
554 | - vue
555 |
556 | /acorn@8.8.2:
557 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
558 | engines: {node: '>=0.4.0'}
559 | hasBin: true
560 | dev: true
561 |
562 | /ansi-styles@3.2.1:
563 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
564 | engines: {node: '>=4'}
565 | dependencies:
566 | color-convert: 1.9.3
567 | dev: true
568 |
569 | /anymatch@3.1.3:
570 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
571 | engines: {node: '>= 8'}
572 | dependencies:
573 | normalize-path: 3.0.0
574 | picomatch: 2.3.1
575 | dev: true
576 |
577 | /array-buffer-byte-length@1.0.0:
578 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
579 | dependencies:
580 | call-bind: 1.0.2
581 | is-array-buffer: 3.0.2
582 | dev: true
583 |
584 | /async-validator@4.2.5:
585 | resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
586 | dev: true
587 |
588 | /available-typed-arrays@1.0.5:
589 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
590 | engines: {node: '>= 0.4'}
591 | dev: true
592 |
593 | /balanced-match@1.0.2:
594 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
595 | dev: true
596 |
597 | /binary-extensions@2.2.0:
598 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
599 | engines: {node: '>=8'}
600 | dev: true
601 |
602 | /brace-expansion@1.1.11:
603 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
604 | dependencies:
605 | balanced-match: 1.0.2
606 | concat-map: 0.0.1
607 | dev: true
608 |
609 | /brace-expansion@2.0.1:
610 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
611 | dependencies:
612 | balanced-match: 1.0.2
613 | dev: true
614 |
615 | /braces@3.0.2:
616 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
617 | engines: {node: '>=8'}
618 | dependencies:
619 | fill-range: 7.0.1
620 | dev: true
621 |
622 | /call-bind@1.0.2:
623 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
624 | dependencies:
625 | function-bind: 1.1.1
626 | get-intrinsic: 1.2.0
627 | dev: true
628 |
629 | /chalk@2.4.2:
630 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
631 | engines: {node: '>=4'}
632 | dependencies:
633 | ansi-styles: 3.2.1
634 | escape-string-regexp: 1.0.5
635 | supports-color: 5.5.0
636 | dev: true
637 |
638 | /chokidar@3.5.3:
639 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
640 | engines: {node: '>= 8.10.0'}
641 | dependencies:
642 | anymatch: 3.1.3
643 | braces: 3.0.2
644 | glob-parent: 5.1.2
645 | is-binary-path: 2.1.0
646 | is-glob: 4.0.3
647 | normalize-path: 3.0.0
648 | readdirp: 3.6.0
649 | optionalDependencies:
650 | fsevents: 2.3.2
651 | dev: true
652 |
653 | /color-convert@1.9.3:
654 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
655 | dependencies:
656 | color-name: 1.1.3
657 | dev: true
658 |
659 | /color-name@1.1.3:
660 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
661 | dev: true
662 |
663 | /concat-map@0.0.1:
664 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
665 | dev: true
666 |
667 | /cross-spawn@6.0.5:
668 | resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
669 | engines: {node: '>=4.8'}
670 | dependencies:
671 | nice-try: 1.0.5
672 | path-key: 2.0.1
673 | semver: 5.7.1
674 | shebang-command: 1.2.0
675 | which: 1.3.1
676 | dev: true
677 |
678 | /css-render@0.15.12:
679 | resolution: {integrity: sha512-eWzS66patiGkTTik+ipO9qNGZ+uNuGyTmnz6/+EJIiFg8+3yZRpnMwgFo8YdXhQRsiePzehnusrxVvugNjXzbw==}
680 | dependencies:
681 | '@emotion/hash': 0.8.0
682 | csstype: 3.0.11
683 | dev: true
684 |
685 | /csstype@2.6.21:
686 | resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
687 |
688 | /csstype@3.0.11:
689 | resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
690 | dev: true
691 |
692 | /date-fns-tz@1.3.8(date-fns@2.29.3):
693 | resolution: {integrity: sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==}
694 | peerDependencies:
695 | date-fns: '>=2.0.0'
696 | dependencies:
697 | date-fns: 2.29.3
698 | dev: true
699 |
700 | /date-fns@2.29.3:
701 | resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==}
702 | engines: {node: '>=0.11'}
703 | dev: true
704 |
705 | /de-indent@1.0.2:
706 | resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
707 | dev: true
708 |
709 | /debug@4.3.4:
710 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
711 | engines: {node: '>=6.0'}
712 | peerDependencies:
713 | supports-color: '*'
714 | peerDependenciesMeta:
715 | supports-color:
716 | optional: true
717 | dependencies:
718 | ms: 2.1.2
719 | dev: true
720 |
721 | /define-properties@1.2.0:
722 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
723 | engines: {node: '>= 0.4'}
724 | dependencies:
725 | has-property-descriptors: 1.0.0
726 | object-keys: 1.1.1
727 | dev: true
728 |
729 | /error-ex@1.3.2:
730 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
731 | dependencies:
732 | is-arrayish: 0.2.1
733 | dev: true
734 |
735 | /es-abstract@1.21.2:
736 | resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==}
737 | engines: {node: '>= 0.4'}
738 | dependencies:
739 | array-buffer-byte-length: 1.0.0
740 | available-typed-arrays: 1.0.5
741 | call-bind: 1.0.2
742 | es-set-tostringtag: 2.0.1
743 | es-to-primitive: 1.2.1
744 | function.prototype.name: 1.1.5
745 | get-intrinsic: 1.2.0
746 | get-symbol-description: 1.0.0
747 | globalthis: 1.0.3
748 | gopd: 1.0.1
749 | has: 1.0.3
750 | has-property-descriptors: 1.0.0
751 | has-proto: 1.0.1
752 | has-symbols: 1.0.3
753 | internal-slot: 1.0.5
754 | is-array-buffer: 3.0.2
755 | is-callable: 1.2.7
756 | is-negative-zero: 2.0.2
757 | is-regex: 1.1.4
758 | is-shared-array-buffer: 1.0.2
759 | is-string: 1.0.7
760 | is-typed-array: 1.1.10
761 | is-weakref: 1.0.2
762 | object-inspect: 1.12.3
763 | object-keys: 1.1.1
764 | object.assign: 4.1.4
765 | regexp.prototype.flags: 1.5.0
766 | safe-regex-test: 1.0.0
767 | string.prototype.trim: 1.2.7
768 | string.prototype.trimend: 1.0.6
769 | string.prototype.trimstart: 1.0.6
770 | typed-array-length: 1.0.4
771 | unbox-primitive: 1.0.2
772 | which-typed-array: 1.1.9
773 | dev: true
774 |
775 | /es-set-tostringtag@2.0.1:
776 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
777 | engines: {node: '>= 0.4'}
778 | dependencies:
779 | get-intrinsic: 1.2.0
780 | has: 1.0.3
781 | has-tostringtag: 1.0.0
782 | dev: true
783 |
784 | /es-to-primitive@1.2.1:
785 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
786 | engines: {node: '>= 0.4'}
787 | dependencies:
788 | is-callable: 1.2.7
789 | is-date-object: 1.0.5
790 | is-symbol: 1.0.4
791 | dev: true
792 |
793 | /esbuild@0.17.18:
794 | resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==}
795 | engines: {node: '>=12'}
796 | hasBin: true
797 | requiresBuild: true
798 | optionalDependencies:
799 | '@esbuild/android-arm': 0.17.18
800 | '@esbuild/android-arm64': 0.17.18
801 | '@esbuild/android-x64': 0.17.18
802 | '@esbuild/darwin-arm64': 0.17.18
803 | '@esbuild/darwin-x64': 0.17.18
804 | '@esbuild/freebsd-arm64': 0.17.18
805 | '@esbuild/freebsd-x64': 0.17.18
806 | '@esbuild/linux-arm': 0.17.18
807 | '@esbuild/linux-arm64': 0.17.18
808 | '@esbuild/linux-ia32': 0.17.18
809 | '@esbuild/linux-loong64': 0.17.18
810 | '@esbuild/linux-mips64el': 0.17.18
811 | '@esbuild/linux-ppc64': 0.17.18
812 | '@esbuild/linux-riscv64': 0.17.18
813 | '@esbuild/linux-s390x': 0.17.18
814 | '@esbuild/linux-x64': 0.17.18
815 | '@esbuild/netbsd-x64': 0.17.18
816 | '@esbuild/openbsd-x64': 0.17.18
817 | '@esbuild/sunos-x64': 0.17.18
818 | '@esbuild/win32-arm64': 0.17.18
819 | '@esbuild/win32-ia32': 0.17.18
820 | '@esbuild/win32-x64': 0.17.18
821 | dev: true
822 |
823 | /escape-string-regexp@1.0.5:
824 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
825 | engines: {node: '>=0.8.0'}
826 | dev: true
827 |
828 | /escape-string-regexp@5.0.0:
829 | resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
830 | engines: {node: '>=12'}
831 | dev: true
832 |
833 | /estree-walker@2.0.2:
834 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
835 |
836 | /evtd@0.2.4:
837 | resolution: {integrity: sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==}
838 | dev: true
839 |
840 | /fast-glob@3.2.12:
841 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
842 | engines: {node: '>=8.6.0'}
843 | dependencies:
844 | '@nodelib/fs.stat': 2.0.5
845 | '@nodelib/fs.walk': 1.2.8
846 | glob-parent: 5.1.2
847 | merge2: 1.4.1
848 | micromatch: 4.0.5
849 | dev: true
850 |
851 | /fastq@1.15.0:
852 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
853 | dependencies:
854 | reusify: 1.0.4
855 | dev: true
856 |
857 | /fill-range@7.0.1:
858 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
859 | engines: {node: '>=8'}
860 | dependencies:
861 | to-regex-range: 5.0.1
862 | dev: true
863 |
864 | /for-each@0.3.3:
865 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
866 | dependencies:
867 | is-callable: 1.2.7
868 | dev: true
869 |
870 | /fsevents@2.3.2:
871 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
872 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
873 | os: [darwin]
874 | requiresBuild: true
875 | dev: true
876 | optional: true
877 |
878 | /function-bind@1.1.1:
879 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
880 | dev: true
881 |
882 | /function.prototype.name@1.1.5:
883 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
884 | engines: {node: '>= 0.4'}
885 | dependencies:
886 | call-bind: 1.0.2
887 | define-properties: 1.2.0
888 | es-abstract: 1.21.2
889 | functions-have-names: 1.2.3
890 | dev: true
891 |
892 | /functions-have-names@1.2.3:
893 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
894 | dev: true
895 |
896 | /get-intrinsic@1.2.0:
897 | resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==}
898 | dependencies:
899 | function-bind: 1.1.1
900 | has: 1.0.3
901 | has-symbols: 1.0.3
902 | dev: true
903 |
904 | /get-symbol-description@1.0.0:
905 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
906 | engines: {node: '>= 0.4'}
907 | dependencies:
908 | call-bind: 1.0.2
909 | get-intrinsic: 1.2.0
910 | dev: true
911 |
912 | /glob-parent@5.1.2:
913 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
914 | engines: {node: '>= 6'}
915 | dependencies:
916 | is-glob: 4.0.3
917 | dev: true
918 |
919 | /globalthis@1.0.3:
920 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
921 | engines: {node: '>= 0.4'}
922 | dependencies:
923 | define-properties: 1.2.0
924 | dev: true
925 |
926 | /gopd@1.0.1:
927 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
928 | dependencies:
929 | get-intrinsic: 1.2.0
930 | dev: true
931 |
932 | /graceful-fs@4.2.11:
933 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
934 | dev: true
935 |
936 | /has-bigints@1.0.2:
937 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
938 | dev: true
939 |
940 | /has-flag@3.0.0:
941 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
942 | engines: {node: '>=4'}
943 | dev: true
944 |
945 | /has-property-descriptors@1.0.0:
946 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
947 | dependencies:
948 | get-intrinsic: 1.2.0
949 | dev: true
950 |
951 | /has-proto@1.0.1:
952 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
953 | engines: {node: '>= 0.4'}
954 | dev: true
955 |
956 | /has-symbols@1.0.3:
957 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
958 | engines: {node: '>= 0.4'}
959 | dev: true
960 |
961 | /has-tostringtag@1.0.0:
962 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
963 | engines: {node: '>= 0.4'}
964 | dependencies:
965 | has-symbols: 1.0.3
966 | dev: true
967 |
968 | /has@1.0.3:
969 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
970 | engines: {node: '>= 0.4.0'}
971 | dependencies:
972 | function-bind: 1.1.1
973 | dev: true
974 |
975 | /he@1.2.0:
976 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
977 | hasBin: true
978 | dev: true
979 |
980 | /highlight.js@11.7.0:
981 | resolution: {integrity: sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==}
982 | engines: {node: '>=12.0.0'}
983 | dev: true
984 |
985 | /hosted-git-info@2.8.9:
986 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
987 | dev: true
988 |
989 | /immutable@4.3.0:
990 | resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==}
991 | dev: true
992 |
993 | /internal-slot@1.0.5:
994 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
995 | engines: {node: '>= 0.4'}
996 | dependencies:
997 | get-intrinsic: 1.2.0
998 | has: 1.0.3
999 | side-channel: 1.0.4
1000 | dev: true
1001 |
1002 | /is-array-buffer@3.0.2:
1003 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
1004 | dependencies:
1005 | call-bind: 1.0.2
1006 | get-intrinsic: 1.2.0
1007 | is-typed-array: 1.1.10
1008 | dev: true
1009 |
1010 | /is-arrayish@0.2.1:
1011 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
1012 | dev: true
1013 |
1014 | /is-bigint@1.0.4:
1015 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
1016 | dependencies:
1017 | has-bigints: 1.0.2
1018 | dev: true
1019 |
1020 | /is-binary-path@2.1.0:
1021 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1022 | engines: {node: '>=8'}
1023 | dependencies:
1024 | binary-extensions: 2.2.0
1025 | dev: true
1026 |
1027 | /is-boolean-object@1.1.2:
1028 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
1029 | engines: {node: '>= 0.4'}
1030 | dependencies:
1031 | call-bind: 1.0.2
1032 | has-tostringtag: 1.0.0
1033 | dev: true
1034 |
1035 | /is-callable@1.2.7:
1036 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
1037 | engines: {node: '>= 0.4'}
1038 | dev: true
1039 |
1040 | /is-core-module@2.12.0:
1041 | resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==}
1042 | dependencies:
1043 | has: 1.0.3
1044 | dev: true
1045 |
1046 | /is-date-object@1.0.5:
1047 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
1048 | engines: {node: '>= 0.4'}
1049 | dependencies:
1050 | has-tostringtag: 1.0.0
1051 | dev: true
1052 |
1053 | /is-extglob@2.1.1:
1054 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1055 | engines: {node: '>=0.10.0'}
1056 | dev: true
1057 |
1058 | /is-glob@4.0.3:
1059 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1060 | engines: {node: '>=0.10.0'}
1061 | dependencies:
1062 | is-extglob: 2.1.1
1063 | dev: true
1064 |
1065 | /is-negative-zero@2.0.2:
1066 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
1067 | engines: {node: '>= 0.4'}
1068 | dev: true
1069 |
1070 | /is-number-object@1.0.7:
1071 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
1072 | engines: {node: '>= 0.4'}
1073 | dependencies:
1074 | has-tostringtag: 1.0.0
1075 | dev: true
1076 |
1077 | /is-number@7.0.0:
1078 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1079 | engines: {node: '>=0.12.0'}
1080 | dev: true
1081 |
1082 | /is-regex@1.1.4:
1083 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
1084 | engines: {node: '>= 0.4'}
1085 | dependencies:
1086 | call-bind: 1.0.2
1087 | has-tostringtag: 1.0.0
1088 | dev: true
1089 |
1090 | /is-shared-array-buffer@1.0.2:
1091 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
1092 | dependencies:
1093 | call-bind: 1.0.2
1094 | dev: true
1095 |
1096 | /is-string@1.0.7:
1097 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
1098 | engines: {node: '>= 0.4'}
1099 | dependencies:
1100 | has-tostringtag: 1.0.0
1101 | dev: true
1102 |
1103 | /is-symbol@1.0.4:
1104 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
1105 | engines: {node: '>= 0.4'}
1106 | dependencies:
1107 | has-symbols: 1.0.3
1108 | dev: true
1109 |
1110 | /is-typed-array@1.1.10:
1111 | resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==}
1112 | engines: {node: '>= 0.4'}
1113 | dependencies:
1114 | available-typed-arrays: 1.0.5
1115 | call-bind: 1.0.2
1116 | for-each: 0.3.3
1117 | gopd: 1.0.1
1118 | has-tostringtag: 1.0.0
1119 | dev: true
1120 |
1121 | /is-weakref@1.0.2:
1122 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
1123 | dependencies:
1124 | call-bind: 1.0.2
1125 | dev: true
1126 |
1127 | /isexe@2.0.0:
1128 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1129 | dev: true
1130 |
1131 | /json-parse-better-errors@1.0.2:
1132 | resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
1133 | dev: true
1134 |
1135 | /jsonc-parser@3.2.0:
1136 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
1137 | dev: true
1138 |
1139 | /load-json-file@4.0.0:
1140 | resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
1141 | engines: {node: '>=4'}
1142 | dependencies:
1143 | graceful-fs: 4.2.11
1144 | parse-json: 4.0.0
1145 | pify: 3.0.0
1146 | strip-bom: 3.0.0
1147 | dev: true
1148 |
1149 | /local-pkg@0.4.3:
1150 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
1151 | engines: {node: '>=14'}
1152 | dev: true
1153 |
1154 | /lodash-es@4.17.21:
1155 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
1156 | dev: true
1157 |
1158 | /lodash@4.17.21:
1159 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
1160 | dev: true
1161 |
1162 | /lru-cache@6.0.0:
1163 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
1164 | engines: {node: '>=10'}
1165 | dependencies:
1166 | yallist: 4.0.0
1167 | dev: true
1168 |
1169 | /magic-string@0.25.9:
1170 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
1171 | dependencies:
1172 | sourcemap-codec: 1.4.8
1173 |
1174 | /magic-string@0.30.0:
1175 | resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==}
1176 | engines: {node: '>=12'}
1177 | dependencies:
1178 | '@jridgewell/sourcemap-codec': 1.4.15
1179 | dev: true
1180 |
1181 | /memorystream@0.3.1:
1182 | resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
1183 | engines: {node: '>= 0.10.0'}
1184 | dev: true
1185 |
1186 | /merge2@1.4.1:
1187 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1188 | engines: {node: '>= 8'}
1189 | dev: true
1190 |
1191 | /micromatch@4.0.5:
1192 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1193 | engines: {node: '>=8.6'}
1194 | dependencies:
1195 | braces: 3.0.2
1196 | picomatch: 2.3.1
1197 | dev: true
1198 |
1199 | /minimatch@3.1.2:
1200 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1201 | dependencies:
1202 | brace-expansion: 1.1.11
1203 | dev: true
1204 |
1205 | /minimatch@7.4.6:
1206 | resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==}
1207 | engines: {node: '>=10'}
1208 | dependencies:
1209 | brace-expansion: 2.0.1
1210 | dev: true
1211 |
1212 | /minimatch@9.0.0:
1213 | resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==}
1214 | engines: {node: '>=16 || 14 >=14.17'}
1215 | dependencies:
1216 | brace-expansion: 2.0.1
1217 | dev: true
1218 |
1219 | /mlly@1.2.0:
1220 | resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==}
1221 | dependencies:
1222 | acorn: 8.8.2
1223 | pathe: 1.1.0
1224 | pkg-types: 1.0.2
1225 | ufo: 1.1.1
1226 | dev: true
1227 |
1228 | /ms@2.1.2:
1229 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1230 | dev: true
1231 |
1232 | /muggle-string@0.2.2:
1233 | resolution: {integrity: sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==}
1234 | dev: true
1235 |
1236 | /naive-ui@2.34.3(vue@3.2.47):
1237 | resolution: {integrity: sha512-fUMr0dzb/iGsOTWgoblPVobY5X5dihQ1eam5dA+H74oyLYAvgX4pL96xQFPBLIYqvyRFBAsN85kHN5pLqdtpxA==}
1238 | peerDependencies:
1239 | vue: ^3.0.0
1240 | dependencies:
1241 | '@css-render/plugin-bem': 0.15.12(css-render@0.15.12)
1242 | '@css-render/vue3-ssr': 0.15.12(vue@3.2.47)
1243 | '@types/katex': 0.14.0
1244 | '@types/lodash': 4.14.194
1245 | '@types/lodash-es': 4.17.7
1246 | async-validator: 4.2.5
1247 | css-render: 0.15.12
1248 | date-fns: 2.29.3
1249 | date-fns-tz: 1.3.8(date-fns@2.29.3)
1250 | evtd: 0.2.4
1251 | highlight.js: 11.7.0
1252 | lodash: 4.17.21
1253 | lodash-es: 4.17.21
1254 | seemly: 0.3.6
1255 | treemate: 0.3.11
1256 | vdirs: 0.1.8(vue@3.2.47)
1257 | vooks: 0.2.12(vue@3.2.47)
1258 | vue: 3.2.47
1259 | vueuc: 0.4.51(vue@3.2.47)
1260 | dev: true
1261 |
1262 | /nanoid@3.3.6:
1263 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
1264 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1265 | hasBin: true
1266 |
1267 | /nice-try@1.0.5:
1268 | resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
1269 | dev: true
1270 |
1271 | /normalize-package-data@2.5.0:
1272 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
1273 | dependencies:
1274 | hosted-git-info: 2.8.9
1275 | resolve: 1.22.2
1276 | semver: 5.7.1
1277 | validate-npm-package-license: 3.0.4
1278 | dev: true
1279 |
1280 | /normalize-path@3.0.0:
1281 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1282 | engines: {node: '>=0.10.0'}
1283 | dev: true
1284 |
1285 | /npm-run-all@4.1.5:
1286 | resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==}
1287 | engines: {node: '>= 4'}
1288 | hasBin: true
1289 | dependencies:
1290 | ansi-styles: 3.2.1
1291 | chalk: 2.4.2
1292 | cross-spawn: 6.0.5
1293 | memorystream: 0.3.1
1294 | minimatch: 3.1.2
1295 | pidtree: 0.3.1
1296 | read-pkg: 3.0.0
1297 | shell-quote: 1.8.1
1298 | string.prototype.padend: 3.1.4
1299 | dev: true
1300 |
1301 | /object-inspect@1.12.3:
1302 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
1303 | dev: true
1304 |
1305 | /object-keys@1.1.1:
1306 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
1307 | engines: {node: '>= 0.4'}
1308 | dev: true
1309 |
1310 | /object.assign@4.1.4:
1311 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
1312 | engines: {node: '>= 0.4'}
1313 | dependencies:
1314 | call-bind: 1.0.2
1315 | define-properties: 1.2.0
1316 | has-symbols: 1.0.3
1317 | object-keys: 1.1.1
1318 | dev: true
1319 |
1320 | /parse-json@4.0.0:
1321 | resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
1322 | engines: {node: '>=4'}
1323 | dependencies:
1324 | error-ex: 1.3.2
1325 | json-parse-better-errors: 1.0.2
1326 | dev: true
1327 |
1328 | /path-key@2.0.1:
1329 | resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
1330 | engines: {node: '>=4'}
1331 | dev: true
1332 |
1333 | /path-parse@1.0.7:
1334 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1335 | dev: true
1336 |
1337 | /path-type@3.0.0:
1338 | resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
1339 | engines: {node: '>=4'}
1340 | dependencies:
1341 | pify: 3.0.0
1342 | dev: true
1343 |
1344 | /pathe@1.1.0:
1345 | resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==}
1346 | dev: true
1347 |
1348 | /picocolors@1.0.0:
1349 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1350 |
1351 | /picomatch@2.3.1:
1352 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1353 | engines: {node: '>=8.6'}
1354 | dev: true
1355 |
1356 | /pidtree@0.3.1:
1357 | resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==}
1358 | engines: {node: '>=0.10'}
1359 | hasBin: true
1360 | dev: true
1361 |
1362 | /pify@3.0.0:
1363 | resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
1364 | engines: {node: '>=4'}
1365 | dev: true
1366 |
1367 | /pinia@2.0.35(typescript@5.0.4)(vue@3.2.47):
1368 | resolution: {integrity: sha512-P1IKKQWhxGXiiZ3atOaNI75bYlFUbRxtJdhPLX059Z7+b9Z04rnTZdSY8Aph1LA+/4QEMAYHsTQ638Wfe+6K5g==}
1369 | peerDependencies:
1370 | '@vue/composition-api': ^1.4.0
1371 | typescript: '>=4.4.4'
1372 | vue: ^2.6.14 || ^3.2.0
1373 | peerDependenciesMeta:
1374 | '@vue/composition-api':
1375 | optional: true
1376 | typescript:
1377 | optional: true
1378 | dependencies:
1379 | '@vue/devtools-api': 6.5.0
1380 | typescript: 5.0.4
1381 | vue: 3.2.47
1382 | vue-demi: 0.14.0(vue@3.2.47)
1383 | dev: false
1384 |
1385 | /pkg-types@1.0.2:
1386 | resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==}
1387 | dependencies:
1388 | jsonc-parser: 3.2.0
1389 | mlly: 1.2.0
1390 | pathe: 1.1.0
1391 | dev: true
1392 |
1393 | /postcss@8.4.23:
1394 | resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==}
1395 | engines: {node: ^10 || ^12 || >=14}
1396 | dependencies:
1397 | nanoid: 3.3.6
1398 | picocolors: 1.0.0
1399 | source-map-js: 1.0.2
1400 |
1401 | /queue-microtask@1.2.3:
1402 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1403 | dev: true
1404 |
1405 | /read-pkg@3.0.0:
1406 | resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
1407 | engines: {node: '>=4'}
1408 | dependencies:
1409 | load-json-file: 4.0.0
1410 | normalize-package-data: 2.5.0
1411 | path-type: 3.0.0
1412 | dev: true
1413 |
1414 | /readdirp@3.6.0:
1415 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1416 | engines: {node: '>=8.10.0'}
1417 | dependencies:
1418 | picomatch: 2.3.1
1419 | dev: true
1420 |
1421 | /regexp.prototype.flags@1.5.0:
1422 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==}
1423 | engines: {node: '>= 0.4'}
1424 | dependencies:
1425 | call-bind: 1.0.2
1426 | define-properties: 1.2.0
1427 | functions-have-names: 1.2.3
1428 | dev: true
1429 |
1430 | /resolve@1.22.2:
1431 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
1432 | hasBin: true
1433 | dependencies:
1434 | is-core-module: 2.12.0
1435 | path-parse: 1.0.7
1436 | supports-preserve-symlinks-flag: 1.0.0
1437 | dev: true
1438 |
1439 | /reusify@1.0.4:
1440 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1441 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1442 | dev: true
1443 |
1444 | /rollup@3.21.0:
1445 | resolution: {integrity: sha512-ANPhVcyeHvYdQMUyCbczy33nbLzI7RzrBje4uvNiTDJGIMtlKoOStmympwr9OtS1LZxiDmE2wvxHyVhoLtf1KQ==}
1446 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
1447 | hasBin: true
1448 | optionalDependencies:
1449 | fsevents: 2.3.2
1450 | dev: true
1451 |
1452 | /run-parallel@1.2.0:
1453 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1454 | dependencies:
1455 | queue-microtask: 1.2.3
1456 | dev: true
1457 |
1458 | /safe-regex-test@1.0.0:
1459 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
1460 | dependencies:
1461 | call-bind: 1.0.2
1462 | get-intrinsic: 1.2.0
1463 | is-regex: 1.1.4
1464 | dev: true
1465 |
1466 | /sass@1.62.0:
1467 | resolution: {integrity: sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==}
1468 | engines: {node: '>=14.0.0'}
1469 | hasBin: true
1470 | dependencies:
1471 | chokidar: 3.5.3
1472 | immutable: 4.3.0
1473 | source-map-js: 1.0.2
1474 | dev: true
1475 |
1476 | /scule@1.0.0:
1477 | resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==}
1478 | dev: true
1479 |
1480 | /seemly@0.3.6:
1481 | resolution: {integrity: sha512-lEV5VB8BUKTo/AfktXJcy+JeXns26ylbMkIUco8CYREsQijuz4mrXres2Q+vMLdwkuLxJdIPQ8IlCIxLYm71Yw==}
1482 | dev: true
1483 |
1484 | /semver@5.7.1:
1485 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
1486 | hasBin: true
1487 | dev: true
1488 |
1489 | /semver@7.5.0:
1490 | resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==}
1491 | engines: {node: '>=10'}
1492 | hasBin: true
1493 | dependencies:
1494 | lru-cache: 6.0.0
1495 | dev: true
1496 |
1497 | /shebang-command@1.2.0:
1498 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
1499 | engines: {node: '>=0.10.0'}
1500 | dependencies:
1501 | shebang-regex: 1.0.0
1502 | dev: true
1503 |
1504 | /shebang-regex@1.0.0:
1505 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
1506 | engines: {node: '>=0.10.0'}
1507 | dev: true
1508 |
1509 | /shell-quote@1.8.1:
1510 | resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
1511 | dev: true
1512 |
1513 | /side-channel@1.0.4:
1514 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
1515 | dependencies:
1516 | call-bind: 1.0.2
1517 | get-intrinsic: 1.2.0
1518 | object-inspect: 1.12.3
1519 | dev: true
1520 |
1521 | /source-map-js@1.0.2:
1522 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1523 | engines: {node: '>=0.10.0'}
1524 |
1525 | /source-map@0.6.1:
1526 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1527 | engines: {node: '>=0.10.0'}
1528 |
1529 | /sourcemap-codec@1.4.8:
1530 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
1531 | deprecated: Please use @jridgewell/sourcemap-codec instead
1532 |
1533 | /spdx-correct@3.2.0:
1534 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
1535 | dependencies:
1536 | spdx-expression-parse: 3.0.1
1537 | spdx-license-ids: 3.0.13
1538 | dev: true
1539 |
1540 | /spdx-exceptions@2.3.0:
1541 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
1542 | dev: true
1543 |
1544 | /spdx-expression-parse@3.0.1:
1545 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
1546 | dependencies:
1547 | spdx-exceptions: 2.3.0
1548 | spdx-license-ids: 3.0.13
1549 | dev: true
1550 |
1551 | /spdx-license-ids@3.0.13:
1552 | resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==}
1553 | dev: true
1554 |
1555 | /string.prototype.padend@3.1.4:
1556 | resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==}
1557 | engines: {node: '>= 0.4'}
1558 | dependencies:
1559 | call-bind: 1.0.2
1560 | define-properties: 1.2.0
1561 | es-abstract: 1.21.2
1562 | dev: true
1563 |
1564 | /string.prototype.trim@1.2.7:
1565 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==}
1566 | engines: {node: '>= 0.4'}
1567 | dependencies:
1568 | call-bind: 1.0.2
1569 | define-properties: 1.2.0
1570 | es-abstract: 1.21.2
1571 | dev: true
1572 |
1573 | /string.prototype.trimend@1.0.6:
1574 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
1575 | dependencies:
1576 | call-bind: 1.0.2
1577 | define-properties: 1.2.0
1578 | es-abstract: 1.21.2
1579 | dev: true
1580 |
1581 | /string.prototype.trimstart@1.0.6:
1582 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
1583 | dependencies:
1584 | call-bind: 1.0.2
1585 | define-properties: 1.2.0
1586 | es-abstract: 1.21.2
1587 | dev: true
1588 |
1589 | /strip-bom@3.0.0:
1590 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
1591 | engines: {node: '>=4'}
1592 | dev: true
1593 |
1594 | /strip-literal@1.0.1:
1595 | resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==}
1596 | dependencies:
1597 | acorn: 8.8.2
1598 | dev: true
1599 |
1600 | /supports-color@5.5.0:
1601 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
1602 | engines: {node: '>=4'}
1603 | dependencies:
1604 | has-flag: 3.0.0
1605 | dev: true
1606 |
1607 | /supports-preserve-symlinks-flag@1.0.0:
1608 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1609 | engines: {node: '>= 0.4'}
1610 | dev: true
1611 |
1612 | /to-fast-properties@2.0.0:
1613 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
1614 | engines: {node: '>=4'}
1615 |
1616 | /to-regex-range@5.0.1:
1617 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1618 | engines: {node: '>=8.0'}
1619 | dependencies:
1620 | is-number: 7.0.0
1621 | dev: true
1622 |
1623 | /treemate@0.3.11:
1624 | resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==}
1625 | dev: true
1626 |
1627 | /typed-array-length@1.0.4:
1628 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
1629 | dependencies:
1630 | call-bind: 1.0.2
1631 | for-each: 0.3.3
1632 | is-typed-array: 1.1.10
1633 | dev: true
1634 |
1635 | /typescript@5.0.4:
1636 | resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==}
1637 | engines: {node: '>=12.20'}
1638 | hasBin: true
1639 |
1640 | /ufo@1.1.1:
1641 | resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==}
1642 | dev: true
1643 |
1644 | /unbox-primitive@1.0.2:
1645 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
1646 | dependencies:
1647 | call-bind: 1.0.2
1648 | has-bigints: 1.0.2
1649 | has-symbols: 1.0.3
1650 | which-boxed-primitive: 1.0.2
1651 | dev: true
1652 |
1653 | /unimport@3.0.6:
1654 | resolution: {integrity: sha512-GYxGJ1Bri1oqx8VFDjdgooGzeK7jBk3bvhXmamTIpu3nONOcUMGwZbX7X0L5RA7OWMXpR4vzpSQP7pXUzJg1/Q==}
1655 | dependencies:
1656 | '@rollup/pluginutils': 5.0.2
1657 | escape-string-regexp: 5.0.0
1658 | fast-glob: 3.2.12
1659 | local-pkg: 0.4.3
1660 | magic-string: 0.30.0
1661 | mlly: 1.2.0
1662 | pathe: 1.1.0
1663 | pkg-types: 1.0.2
1664 | scule: 1.0.0
1665 | strip-literal: 1.0.1
1666 | unplugin: 1.3.1
1667 | transitivePeerDependencies:
1668 | - rollup
1669 | dev: true
1670 |
1671 | /unplugin-auto-import@0.15.3(@vueuse/core@10.1.0):
1672 | resolution: {integrity: sha512-RLT8SqbPn4bT7yBshZId0uPSofKWnwr66RyDaxWaFb/+f7OTDOWAsVNz+hOQLBWSjvbekr2xZY9ccS8TDHJbCQ==}
1673 | engines: {node: '>=14'}
1674 | peerDependencies:
1675 | '@nuxt/kit': ^3.2.2
1676 | '@vueuse/core': '*'
1677 | peerDependenciesMeta:
1678 | '@nuxt/kit':
1679 | optional: true
1680 | '@vueuse/core':
1681 | optional: true
1682 | dependencies:
1683 | '@antfu/utils': 0.7.2
1684 | '@rollup/pluginutils': 5.0.2
1685 | '@vueuse/core': 10.1.0(vue@3.2.47)
1686 | local-pkg: 0.4.3
1687 | magic-string: 0.30.0
1688 | minimatch: 9.0.0
1689 | unimport: 3.0.6
1690 | unplugin: 1.3.1
1691 | transitivePeerDependencies:
1692 | - rollup
1693 | dev: true
1694 |
1695 | /unplugin-vue-components@0.24.1(vue@3.2.47):
1696 | resolution: {integrity: sha512-T3A8HkZoIE1Cja95xNqolwza0yD5IVlgZZ1PVAGvVCx8xthmjsv38xWRCtHtwl+rvZyL9uif42SRkDGw9aCfMA==}
1697 | engines: {node: '>=14'}
1698 | peerDependencies:
1699 | '@babel/parser': ^7.15.8
1700 | '@nuxt/kit': ^3.2.2
1701 | vue: 2 || 3
1702 | peerDependenciesMeta:
1703 | '@babel/parser':
1704 | optional: true
1705 | '@nuxt/kit':
1706 | optional: true
1707 | dependencies:
1708 | '@antfu/utils': 0.7.2
1709 | '@rollup/pluginutils': 5.0.2
1710 | chokidar: 3.5.3
1711 | debug: 4.3.4
1712 | fast-glob: 3.2.12
1713 | local-pkg: 0.4.3
1714 | magic-string: 0.30.0
1715 | minimatch: 7.4.6
1716 | resolve: 1.22.2
1717 | unplugin: 1.3.1
1718 | vue: 3.2.47
1719 | transitivePeerDependencies:
1720 | - rollup
1721 | - supports-color
1722 | dev: true
1723 |
1724 | /unplugin@1.3.1:
1725 | resolution: {integrity: sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==}
1726 | dependencies:
1727 | acorn: 8.8.2
1728 | chokidar: 3.5.3
1729 | webpack-sources: 3.2.3
1730 | webpack-virtual-modules: 0.5.0
1731 | dev: true
1732 |
1733 | /validate-npm-package-license@3.0.4:
1734 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
1735 | dependencies:
1736 | spdx-correct: 3.2.0
1737 | spdx-expression-parse: 3.0.1
1738 | dev: true
1739 |
1740 | /vdirs@0.1.8(vue@3.2.47):
1741 | resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==}
1742 | peerDependencies:
1743 | vue: ^3.0.11
1744 | dependencies:
1745 | evtd: 0.2.4
1746 | vue: 3.2.47
1747 | dev: true
1748 |
1749 | /vfonts@0.0.3:
1750 | resolution: {integrity: sha512-nguyw8L6Un8eelg1vQ31vIU2ESxqid7EYmy8V+MDeMaHBqaRSkg3dTBToC1PR00D89UzS/SLkfYPnx0Wf23IQQ==}
1751 | dev: true
1752 |
1753 | /vite@4.3.1(@types/node@18.16.0)(sass@1.62.0):
1754 | resolution: {integrity: sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==}
1755 | engines: {node: ^14.18.0 || >=16.0.0}
1756 | hasBin: true
1757 | peerDependencies:
1758 | '@types/node': '>= 14'
1759 | less: '*'
1760 | sass: '*'
1761 | stylus: '*'
1762 | sugarss: '*'
1763 | terser: ^5.4.0
1764 | peerDependenciesMeta:
1765 | '@types/node':
1766 | optional: true
1767 | less:
1768 | optional: true
1769 | sass:
1770 | optional: true
1771 | stylus:
1772 | optional: true
1773 | sugarss:
1774 | optional: true
1775 | terser:
1776 | optional: true
1777 | dependencies:
1778 | '@types/node': 18.16.0
1779 | esbuild: 0.17.18
1780 | postcss: 8.4.23
1781 | rollup: 3.21.0
1782 | sass: 1.62.0
1783 | optionalDependencies:
1784 | fsevents: 2.3.2
1785 | dev: true
1786 |
1787 | /vooks@0.2.12(vue@3.2.47):
1788 | resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==}
1789 | peerDependencies:
1790 | vue: ^3.0.0
1791 | dependencies:
1792 | evtd: 0.2.4
1793 | vue: 3.2.47
1794 | dev: true
1795 |
1796 | /vue-demi@0.14.0(vue@3.2.47):
1797 | resolution: {integrity: sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==}
1798 | engines: {node: '>=12'}
1799 | hasBin: true
1800 | requiresBuild: true
1801 | peerDependencies:
1802 | '@vue/composition-api': ^1.0.0-rc.1
1803 | vue: ^3.0.0-0 || ^2.6.0
1804 | peerDependenciesMeta:
1805 | '@vue/composition-api':
1806 | optional: true
1807 | dependencies:
1808 | vue: 3.2.47
1809 |
1810 | /vue-router@4.1.6(vue@3.2.47):
1811 | resolution: {integrity: sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==}
1812 | peerDependencies:
1813 | vue: ^3.2.0
1814 | dependencies:
1815 | '@vue/devtools-api': 6.5.0
1816 | vue: 3.2.47
1817 | dev: false
1818 |
1819 | /vue-template-compiler@2.7.14:
1820 | resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==}
1821 | dependencies:
1822 | de-indent: 1.0.2
1823 | he: 1.2.0
1824 | dev: true
1825 |
1826 | /vue-tsc@1.4.4(typescript@5.0.4):
1827 | resolution: {integrity: sha512-2XsCjF2mLo6gwOVcOpngwJkP8GzYQjNh20A+Pr2FGdsWzr9jjXJ0k08/DfcslfncsuCrTrnWtb4KEL3gcDtlNA==}
1828 | hasBin: true
1829 | peerDependencies:
1830 | typescript: '*'
1831 | dependencies:
1832 | '@volar/vue-language-core': 1.4.4
1833 | '@volar/vue-typescript': 1.4.4(typescript@5.0.4)
1834 | semver: 7.5.0
1835 | typescript: 5.0.4
1836 | dev: true
1837 |
1838 | /vue@3.2.47:
1839 | resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==}
1840 | dependencies:
1841 | '@vue/compiler-dom': 3.2.47
1842 | '@vue/compiler-sfc': 3.2.47
1843 | '@vue/runtime-dom': 3.2.47
1844 | '@vue/server-renderer': 3.2.47(vue@3.2.47)
1845 | '@vue/shared': 3.2.47
1846 |
1847 | /vueuc@0.4.51(vue@3.2.47):
1848 | resolution: {integrity: sha512-pLiMChM4f+W8czlIClGvGBYo656lc2Y0/mXFSCydcSmnCR1izlKPGMgiYBGjbY9FDkFG8a2HEVz7t0DNzBWbDw==}
1849 | peerDependencies:
1850 | vue: ^3.0.11
1851 | dependencies:
1852 | '@css-render/vue3-ssr': 0.15.12(vue@3.2.47)
1853 | '@juggle/resize-observer': 3.4.0
1854 | css-render: 0.15.12
1855 | evtd: 0.2.4
1856 | seemly: 0.3.6
1857 | vdirs: 0.1.8(vue@3.2.47)
1858 | vooks: 0.2.12(vue@3.2.47)
1859 | vue: 3.2.47
1860 | dev: true
1861 |
1862 | /webpack-sources@3.2.3:
1863 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
1864 | engines: {node: '>=10.13.0'}
1865 | dev: true
1866 |
1867 | /webpack-virtual-modules@0.5.0:
1868 | resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==}
1869 | dev: true
1870 |
1871 | /which-boxed-primitive@1.0.2:
1872 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
1873 | dependencies:
1874 | is-bigint: 1.0.4
1875 | is-boolean-object: 1.1.2
1876 | is-number-object: 1.0.7
1877 | is-string: 1.0.7
1878 | is-symbol: 1.0.4
1879 | dev: true
1880 |
1881 | /which-typed-array@1.1.9:
1882 | resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
1883 | engines: {node: '>= 0.4'}
1884 | dependencies:
1885 | available-typed-arrays: 1.0.5
1886 | call-bind: 1.0.2
1887 | for-each: 0.3.3
1888 | gopd: 1.0.1
1889 | has-tostringtag: 1.0.0
1890 | is-typed-array: 1.1.10
1891 | dev: true
1892 |
1893 | /which@1.3.1:
1894 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
1895 | hasBin: true
1896 | dependencies:
1897 | isexe: 2.0.0
1898 | dev: true
1899 |
1900 | /yallist@4.0.0:
1901 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
1902 | dev: true
1903 |
1904 | github.com/gizmo-ds/totp-wasm/7b91ef831b6b93854ffa70786699effd4c944d14:
1905 | resolution: {tarball: https://codeload.github.com/gizmo-ds/totp-wasm/tar.gz/7b91ef831b6b93854ffa70786699effd4c944d14}
1906 | name: totp-wasm
1907 | version: 1.0.0
1908 | dev: false
1909 |
--------------------------------------------------------------------------------