├── src
├── global.d.ts
├── useApi.ts
├── globalExtensions.ts
├── injectionSymbols.ts
├── types.ts
├── index.ts
└── utils
│ └── index.ts
├── .gitignore
├── .prettierrc
├── playground
├── tsconfig.json
├── shim.d.ts
├── vite.config.js
├── package.json
├── index.html
├── src
│ ├── main.ts
│ └── App.vue
└── yarn.lock
├── jest.config.js
├── CHANGELOG.md
├── tsconfig.json
├── scripts
├── verifyCommit.js
└── release.js
├── LICENSE
├── api-extractor.json
├── __tests__
├── utils.spec.ts
└── i18n.spec.ts
├── README.md
├── package.json
└── rollup.config.js
/src/global.d.ts:
--------------------------------------------------------------------------------
1 | declare var __DEV__: boolean
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | temp
4 | .idea
5 | .DS_Store
6 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "trailingComma": "es5",
4 | "singleQuote": true,
5 | "arrowParens": "avoid"
6 | }
7 |
--------------------------------------------------------------------------------
/playground/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "include": [
3 | "*.ts",
4 | "../src/global.d.ts",
5 | "shim.d.ts"
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/playground/shim.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.vue' {
2 | import { Component } from 'vue'
3 | var component: Component
4 | export default component
5 | }
6 |
--------------------------------------------------------------------------------
/playground/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import vue from '@vitejs/plugin-vue'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [vue()],
7 | })
8 |
--------------------------------------------------------------------------------
/src/useApi.ts:
--------------------------------------------------------------------------------
1 | import { inject } from 'vue'
2 | import { vueI18nKey } from './injectionSymbols'
3 | import { I18n } from './types'
4 |
5 | /**
6 | * Returns the i18n instance.
7 | */
8 | export function useI18n(): I18n {
9 | return inject(vueI18nKey)!
10 | }
11 |
--------------------------------------------------------------------------------
/src/globalExtensions.ts:
--------------------------------------------------------------------------------
1 | import { I18nLocale, I18nValues } from './types'
2 |
3 | declare module '@vue/runtime-core' {
4 | export interface ComponentCustomProperties {
5 | $t(key: string, values?: I18nValues): string
6 | $t(key: string, locale: I18nLocale): string
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/playground/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "playground",
3 | "version": "1.0.0",
4 | "license": "MIT",
5 | "scripts": {
6 | "serve": "vite"
7 | },
8 | "dependencies": {
9 | "@vue/compiler-sfc": "^3.0.11"
10 | },
11 | "devDependencies": {
12 | "@vitejs/plugin-vue": "^1.2.2",
13 | "@vitejs/plugin-vue-jsx": "^1.1.3",
14 | "vite": "^2.2.3"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/playground/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vue i18n lite
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/injectionSymbols.ts:
--------------------------------------------------------------------------------
1 | import { InjectionKey } from 'vue'
2 | import { I18n } from './types'
3 |
4 | export const hasSymbol =
5 | typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'
6 |
7 | export const PolySymbol = (name: string) =>
8 | hasSymbol ? Symbol(name) : '_vt_' + name
9 |
10 | export const vueI18nKey = /*#__PURE__*/ PolySymbol('i18n') as InjectionKey
11 |
--------------------------------------------------------------------------------
/playground/src/main.ts:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from './App.vue'
3 | import { createI18n } from '../../src'
4 |
5 | const i18n = createI18n({
6 | locale: 'en',
7 | messages: {
8 | en: {
9 | button: {
10 | add: 'Add new',
11 | },
12 | },
13 | vi: {
14 | button: {
15 | add: 'Thêm mới',
16 | },
17 | },
18 | },
19 | })
20 |
21 | const app = createApp(App)
22 | app.use(i18n)
23 | app.mount('#app')
24 |
--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: 'ts-jest',
3 | globals: {
4 | __DEV__: true,
5 | __BROWSER__: true,
6 | },
7 | coverageDirectory: 'coverage',
8 | coverageReporters: ['html', 'lcov', 'text'],
9 | collectCoverageFrom: ['src/**/*.ts'],
10 | coveragePathIgnorePatterns: [
11 | '/node_modules/',
12 | 'src/index.ts',
13 | ],
14 | testMatch: ['/__tests__/**/*.spec.ts?(x)'],
15 | watchPathIgnorePatterns: ['/node_modules'],
16 | testEnvironment: 'jsdom',
17 | }
18 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## [1.0.2](https://github.com/FrontLabsOfficial/vue-i18n-lite/compare/v1.0.1...v1.0.2) (2021-08-05)
2 |
3 |
4 | ### Features
5 |
6 | * add fallback locale ([e085e3b](https://github.com/FrontLabsOfficial/vue-i18n-lite/commit/e085e3b43546c316dcdf0affd875d3d142853975))
7 |
8 |
9 |
10 | ## [1.0.1](https://github.com/FrontLabsOfficial/vue-i18n-lite/compare/v1.0.0...v1.0.1) (2021-05-04)
11 |
12 |
13 | ### Bug Fixes
14 |
15 | * optional chaining ([26b83b7](https://github.com/FrontLabsOfficial/vue-i18n-lite/commit/26b83b73bb2b54ec56a7caff353b1dd27aef35f0))
16 |
17 |
18 |
19 | # 1.0.0 (2021-05-01)
20 |
21 |
22 | ### Features
23 |
24 | * init ([71a5641](https://github.com/FrontLabsOfficial/vue-i18n-lite/commit/71a5641dd615887870e8b93ee7b299cd8c83a679))
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "include": ["src/global.d.ts", "src/**/*.ts", "__tests__/**/*.ts"],
3 | "compilerOptions": {
4 | "baseUrl": ".",
5 | "rootDir": ".",
6 | "outDir": "dist",
7 | "sourceMap": false,
8 | "noEmit": true,
9 |
10 | "target": "esnext",
11 | "module": "esnext",
12 | "moduleResolution": "node",
13 | "allowJs": false,
14 |
15 | "noUnusedLocals": true,
16 | "strictNullChecks": true,
17 | "noImplicitAny": true,
18 | "noImplicitThis": true,
19 | "noImplicitReturns": true,
20 | "strict": true,
21 | "isolatedModules": false,
22 |
23 | "experimentalDecorators": true,
24 | "resolveJsonModule": true,
25 | "esModuleInterop": true,
26 | "removeComments": false,
27 | "jsx": "preserve",
28 | "lib": ["esnext", "dom"],
29 | "types": ["jest", "node"]
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/scripts/verifyCommit.js:
--------------------------------------------------------------------------------
1 | // Invoked on the commit-msg git hook by yorkie.
2 |
3 | const chalk = require('chalk')
4 | const msgPath = process.env.GIT_PARAMS
5 | const msg = require('fs').readFileSync(msgPath, 'utf-8').trim()
6 |
7 | const commitRE = /^(revert: )?(feat|fix|docs|dx|style|refactor|perf|test|workflow|build|ci|chore|types|wip|release)(\(.+\))?: .{1,50}/
8 |
9 | if (!commitRE.test(msg)) {
10 | console.log()
11 | console.error(
12 | ` ${chalk.bgRed.white(' ERROR ')} ${chalk.red(
13 | `invalid commit message format.`
14 | )}\n\n` +
15 | chalk.red(
16 | ` Proper commit message format is required for automated changelog generation. Examples:\n\n`
17 | ) +
18 | ` ${chalk.green(
19 | `fix(view): handle keep-alive with aborted navigations`
20 | )}\n` +
21 | ` ${chalk.green(
22 | `fix(view): handle keep-alive with aborted navigations (close #28)`
23 | )}\n\n` +
24 | chalk.red(` See .github/commit-convention.md for more details.\n`)
25 | )
26 | process.exit(1)
27 | }
28 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Front Labs
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.
22 |
--------------------------------------------------------------------------------
/api-extractor.json:
--------------------------------------------------------------------------------
1 | // this the shared base config for all packages.
2 | {
3 | "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
4 |
5 | "mainEntryPointFilePath": "./dist/src/index.d.ts",
6 |
7 | "apiReport": {
8 | "enabled": true,
9 | "reportFolder": "/temp/"
10 | },
11 |
12 | "docModel": {
13 | "enabled": true
14 | },
15 |
16 | "dtsRollup": {
17 | "enabled": true,
18 | "untrimmedFilePath": "./dist/.d.ts"
19 | },
20 |
21 | "tsdocMetadata": {
22 | "enabled": false
23 | },
24 |
25 | "messages": {
26 | "compilerMessageReporting": {
27 | "default": {
28 | "logLevel": "warning"
29 | }
30 | },
31 |
32 | "extractorMessageReporting": {
33 | "default": {
34 | "logLevel": "warning",
35 | "addToApiReportFile": true
36 | },
37 |
38 | "ae-missing-release-tag": {
39 | "logLevel": "none"
40 | }
41 | },
42 |
43 | "tsdocMessageReporting": {
44 | "default": {
45 | "logLevel": "warning"
46 | }
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/__tests__/utils.spec.ts:
--------------------------------------------------------------------------------
1 | import {
2 | getMessage,
3 | isValidPath,
4 | parseLocaleValues,
5 | parsePath,
6 | replaceLocaleValues,
7 | } from '../src/utils'
8 |
9 | describe('Utils', () => {
10 | describe('parsePath', () => {
11 | it('valid path', () => {
12 | const paths = parsePath('a.b.c')
13 | expect(paths).toEqual(['a', 'b', 'c'])
14 | })
15 |
16 | it('invalid path', () => {
17 | const paths = parsePath('a/b/c')
18 | expect(paths).toHaveLength(1)
19 | })
20 | })
21 |
22 | describe('isValidPath', () => {
23 | it('valid', () => {
24 | expect(isValidPath(['a', 'b', 'c'])).toBeTruthy()
25 | })
26 | })
27 |
28 | describe('getMessages', () => {
29 | it('default', () => {
30 | expect(getMessage({ home: 'Home' }, 'home')).toEqual('Home')
31 | })
32 |
33 | it('not exists', () => {
34 | expect(getMessage({}, 'home.button.add')).toEqual('')
35 | })
36 | })
37 |
38 | describe('locale values', () => {
39 | const message = 'Total: {total}. Amount: ${amount}'
40 | const values = { total: 10, amount: 100 }
41 |
42 | it('values is object', () => {
43 | expect(parseLocaleValues(message, values)).toEqual(values)
44 | })
45 |
46 | it('values is array', () => {
47 | expect(parseLocaleValues(message, [10, 100])).toEqual(values)
48 | })
49 |
50 | it('replace values', () => {
51 | expect(replaceLocaleValues(message, values)).toEqual(
52 | 'Total: 10. Amount: $100'
53 | )
54 | })
55 | })
56 | })
57 |
--------------------------------------------------------------------------------
/src/types.ts:
--------------------------------------------------------------------------------
1 | import { App, Ref } from 'vue'
2 | import { DeepReadonly, UnwrapNestedRefs } from '@vue/reactivity'
3 |
4 | /**
5 | * I18n options
6 | */
7 | export type I18nOptions = {
8 | locale?: string
9 | fallbackLocale?: string
10 | messages?: {
11 | [locale: string]: I18nLocaleMessages
12 | }
13 | }
14 |
15 | /**
16 | * I18n value
17 | */
18 | export type I18nValue = number | string
19 |
20 | /**
21 | * I18n value object
22 | */
23 | export type I18nValueObject = { [k: string]: I18nValue }
24 |
25 | /**
26 | * I18n values
27 | */
28 | export type I18nValues = I18nValue[] | I18nValueObject
29 |
30 | /**
31 | * I18n locale
32 | */
33 | export type I18nLocale = string
34 |
35 | /**
36 | * I18n locale message
37 | */
38 | export type I18nLocaleMessage = string
39 |
40 | /**
41 | * I18n locale message object
42 | */
43 | export type I18nLocaleMessageObject = {
44 | [k: string]: I18nLocaleMessageObject | I18nLocaleMessage
45 | }
46 |
47 | /**
48 | * I18n locale messages
49 | */
50 | export type I18nLocaleMessages = {
51 | [k: string]: I18nLocaleMessageObject | I18nLocaleMessage
52 | }
53 |
54 | /**
55 | * I18n locales
56 | */
57 | export type I18nLocales = UnwrapNestedRefs<{
58 | [k: string]: I18nLocaleMessages
59 | }>
60 |
61 | /**
62 | * I18n instance
63 | */
64 | export type I18n = {
65 | current: DeepReadonly>>
66 | options: DeepReadonly>
67 | setLocaleMessage(locale: I18nLocale, messages: I18nLocaleMessages): void
68 | getLocaleMessage(locale: I18nLocale): I18nLocaleMessages
69 | changeLocale(locale: I18nLocale): void
70 | install(app: App): void
71 | t(key: string, values?: I18nValues): string
72 | t(key: string, locale?: I18nLocale): string
73 | }
74 |
--------------------------------------------------------------------------------
/playground/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 | {{ $t('button.add') }}
3 | Current: {{ current }}
4 | Missing key: {{ $t('button.description') }}
5 |
13 |
14 |
15 |
16 |
17 |
18 |
69 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## 🔥️ Vue I18n Lite
2 |
3 | A super lightweight and minimal plugin that introduces internationalization into your Vue.js app with a simple API
4 |
5 | ## 🚀 Usage
6 | ### Plugin
7 |
8 | ```ts
9 | import { createApp } from 'vue';
10 | import { createI18n } from 'vue-i18n-lite';
11 | import App from './App.vue';
12 |
13 | const i18n = createI18n({
14 | locale: 'en',
15 | fallbackLocale: 'en',
16 | messages: {
17 | 'en': {
18 | home: 'Home'
19 | }
20 | }
21 | })
22 |
23 | const app = createApp(App);
24 | app.use(i18n);
25 |
26 | ```
27 | ### Composition API
28 |
29 | ```ts
30 | import { useI18n } from 'vue-i18n-lite';
31 |
32 | export default {
33 | setup() {
34 | const i18n = useI18n()
35 | i18n.createI18n({
36 | locale: 'en',
37 | fallbackLocale: 'en',
38 | messages: {
39 | 'en': {
40 | home: 'Home'
41 | }
42 | }
43 | })
44 |
45 | const { current, changeLocale } = i18n
46 |
47 | return {
48 | current,
49 | changeLocale
50 | }
51 | }
52 | }
53 | ```
54 |
55 | ## 📦 Install
56 |
57 | ```bash
58 | yarn add vue-i18n-lite
59 | ```
60 |
61 | ### CDN
62 |
63 | ```html
64 |
65 | ```
66 |
67 | It will be exposed to global as `window.VueI18nLite`
68 |
69 | ## Changelog
70 |
71 | Detail changes for each release are documented in the [`CHANGELOG.md file`](https://github.com/FrontLabsOfficial/vue-i18n-lite/blob/master/CHANGELOG.md).
72 |
73 | ## ❤️ Thanks
74 |
75 | This project is inspired by the following awesome projects.
76 | - [dot-prop](https://github.com/sindresorhus/dot-prop)
77 | - [vue-i18n](https://github.com/kazupon/vue-i18n)
78 |
79 | ## 📄 License
80 |
81 | MIT License © 2021 [Erik Pham](https://github.com/erikpham)
82 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { App, ref, reactive, readonly, toRaw } from 'vue'
2 | import {
3 | getMessage,
4 | isEmpty,
5 | mergeDeep,
6 | parseLocaleValues,
7 | replaceLocaleValues,
8 | } from './utils'
9 | import {
10 | I18nOptions,
11 | I18nLocale,
12 | I18nLocales,
13 | I18n,
14 | I18nValues,
15 | I18nLocaleMessages,
16 | } from './types'
17 | import { vueI18nKey } from './injectionSymbols'
18 |
19 | /**
20 | * Creates a I18n instance that can be used by a Vue app.
21 | *
22 | * @param options - {@link I18nOptions}
23 | */
24 | export function createI18n(options?: I18nOptions): I18n {
25 | const initOptions = Object.assign(
26 | { locale: 'en', fallbackLocale: 'en', messages: {} },
27 | options
28 | )
29 | const current = ref(initOptions.locale)
30 | const locales: I18nLocales = reactive({})
31 | Object.entries(initOptions.messages).forEach(([key, messages]) => {
32 | locales[key] = messages
33 | })
34 |
35 | return {
36 | t(key: string, option?: I18nLocale | I18nValues): string {
37 | if (!key) {
38 | return ''
39 | }
40 |
41 | const locale =
42 | typeof option === 'string' && option ? option : current.value
43 |
44 | let message =
45 | getMessage(locales[locale], key) ||
46 | getMessage(locales[initOptions.fallbackLocale], key)
47 | if (option && typeof option !== 'string') {
48 | const values = parseLocaleValues(message, option)
49 | if (!isEmpty(values)) {
50 | message = replaceLocaleValues(message, values)
51 | }
52 | }
53 |
54 | return message || key
55 | },
56 | current: readonly(current),
57 | options: readonly(options || {}),
58 | install(app: App) {
59 | const context = this
60 | app.config.globalProperties.$t = context.t
61 | app.provide(vueI18nKey, context)
62 | },
63 | changeLocale(locale: string) {
64 | current.value = locale
65 | },
66 | setLocaleMessage(locale: string, messages: I18nLocaleMessages) {
67 | locales[locale] = mergeDeep(toRaw(locales[locale] || {}), messages)
68 | },
69 | getLocaleMessage(locale: I18nLocale): I18nLocaleMessages {
70 | return locales[locale] || {}
71 | },
72 | }
73 | }
74 |
75 | export * from './useApi'
76 | export * from './globalExtensions'
77 | export * from './types'
78 |
79 | /**
80 | * Super lightweight internationalization (i18n) plugin for Vue 3
81 | *
82 | * @packageDocumentation
83 | */
84 |
--------------------------------------------------------------------------------
/__tests__/i18n.spec.ts:
--------------------------------------------------------------------------------
1 | import { createI18n } from '../src'
2 | import { I18n } from '../src'
3 |
4 | const defaultMessages = {
5 | home: {
6 | general: {
7 | button: 'Home',
8 | },
9 | },
10 | }
11 |
12 | describe('i18n', () => {
13 | describe('Init', () => {
14 | it('create plugin', () => {
15 | const plugin = createI18n()
16 | expect(plugin.current.value).toEqual('en')
17 | })
18 |
19 | it('create plugin with options', () => {
20 | const plugin = createI18n({
21 | locale: 'vi',
22 | })
23 | expect(plugin.current.value).toEqual('vi')
24 | })
25 | })
26 |
27 | describe('Plugin', () => {
28 | let plugin: I18n
29 | beforeEach(() => {
30 | plugin = createI18n({
31 | locale: 'en',
32 | messages: {
33 | en: defaultMessages,
34 | },
35 | })
36 | })
37 |
38 | it('message', () => {
39 | expect(plugin.t('home.general.button')).toEqual('Home')
40 | })
41 |
42 | it('extend and override message', () => {
43 | const messages = {
44 | home: {
45 | general: {
46 | button: 'Add to cart',
47 | cancel: 'Cancel',
48 | },
49 | },
50 | }
51 |
52 | plugin.setLocaleMessage('en', messages)
53 | expect(plugin.t('home.general.button')).toEqual(
54 | messages.home.general.button
55 | )
56 | expect(plugin.t('home.general.cancel')).toEqual(
57 | messages.home.general.cancel
58 | )
59 | })
60 |
61 | it('change locale', () => {
62 | const messages = {
63 | home: {
64 | general: {
65 | button: 'Trang chủ',
66 | },
67 | },
68 | }
69 |
70 | plugin.setLocaleMessage('vi', messages)
71 | plugin.changeLocale('vi')
72 | expect(plugin.t('home.general.button')).toEqual(
73 | messages.home.general.button
74 | )
75 | })
76 |
77 | it('message with values', () => {
78 | const messages = {
79 | cart: {
80 | alert: 'Total products {total}. Total amount: ${amount}',
81 | },
82 | }
83 |
84 | plugin.setLocaleMessage('en', messages)
85 | expect(plugin.t('cart.alert', { total: 10, amount: 9999 })).toEqual(
86 | 'Total products 10. Total amount: $9999'
87 | )
88 | expect(plugin.t('cart.alert', [10])).toEqual(
89 | 'Total products 10. Total amount: ${amount}'
90 | )
91 | })
92 | })
93 | })
94 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-i18n-lite",
3 | "version": "1.0.2",
4 | "main": "dist/vue-i18n-lite.cjs.js",
5 | "unpkg": "dist/vue-i18n-lite.global.js",
6 | "jsdelivr": "dist/vue-i18n-lite.global.js",
7 | "module": "dist/vue-i18n-lite.esm-bundler.js",
8 | "types": "dist/vue-i18n-lite.d.ts",
9 | "sideEffects": false,
10 | "scripts": {
11 | "serve": "cd playground && yarn serve",
12 | "build": "rollup -c rollup.config.js",
13 | "build:dts": "api-extractor run --local --verbose && tail -n +2 src/globalExtensions.ts >> dist/vue-i18n-lite.d.ts",
14 | "test": "jest",
15 | "release": "node scripts/release.js",
16 | "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 1"
17 | },
18 | "repository": {
19 | "type": "git",
20 | "url": "git+https://github.com/FrontLabsOfficial/vue-i18n-lite.git"
21 | },
22 | "keywords": [
23 | "vue",
24 | "i18n",
25 | "vue-i18n",
26 | "vue-i18n-lite"
27 | ],
28 | "author": "Erik Pham",
29 | "license": "MIT",
30 | "bugs": {
31 | "url": "https://github.com/FrontLabsOfficial/vue-i18n-lite/issues"
32 | },
33 | "homepage": "https://github.com/FrontLabsOfficial/vue-i18n-lite/tree/master#readme",
34 | "files": [
35 | "dist/*.js",
36 | "dist/vue-i18n-lite.d.ts",
37 | "README.md"
38 | ],
39 | "devDependencies": {
40 | "@microsoft/api-extractor": "^7.14.0",
41 | "@rollup/plugin-commonjs": "^18.0.0",
42 | "@rollup/plugin-node-resolve": "^11.2.1",
43 | "@rollup/plugin-replace": "^2.4.2",
44 | "@types/jest": "^26.0.23",
45 | "@vitejs/plugin-vue": "^1.3.0",
46 | "@vue/compiler-sfc": "^3.1.5",
47 | "chalk": "^4.1.1",
48 | "conventional-changelog-cli": "^2.1.1",
49 | "enquirer": "^2.3.6",
50 | "execa": "^5.0.0",
51 | "jest": "^26.6.3",
52 | "lint-staged": "^10.5.4",
53 | "minimist": "^1.2.5",
54 | "prettier": "2.2.1",
55 | "rollup": "^2.45.2",
56 | "rollup-plugin-terser": "^7.0.2",
57 | "rollup-plugin-typescript2": "^0.30.0",
58 | "semver": "^7.3.5",
59 | "ts-jest": "^26.5.5",
60 | "typescript": "^4.2.4",
61 | "vite": "^2.4.4",
62 | "vue": "3.0.11",
63 | "yorkie": "^2.0.0"
64 | },
65 | "gitHooks": {
66 | "pre-commit": "lint-staged",
67 | "commit-msg": "node scripts/verifyCommit.js"
68 | },
69 | "lint-staged": {
70 | "*.js": [
71 | "prettier --write"
72 | ],
73 | "*.ts?(x)": [
74 | "prettier --parser=typescript --write"
75 | ]
76 | },
77 | "peerDependencies": {
78 | "vue": "^3.0.0"
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/src/utils/index.ts:
--------------------------------------------------------------------------------
1 | import { I18nLocaleMessageObject, I18nValueObject, I18nValues } from '../types'
2 |
3 | const disallowedKeys = ['__proto__', 'prototype', 'constructor']
4 |
5 | /**
6 | * Is object
7 | * @param value
8 | */
9 | export function isObject(value: any): boolean {
10 | const type = typeof value
11 | return value !== null && (type === 'object' || type === 'function')
12 | }
13 |
14 | /**
15 | * Check is empty
16 | * @param obj
17 | */
18 | export function isEmpty(obj: Array | Object): boolean {
19 | return !(Array.isArray(obj) ? obj.length : Object.keys(obj).length)
20 | }
21 |
22 | /**
23 | * Is valid path
24 | * @param segments
25 | */
26 | export function isValidPath(segments: Array): boolean {
27 | return !segments.some(
28 | (segment: string) => disallowedKeys.indexOf(segment) !== -1
29 | )
30 | }
31 |
32 | /**
33 | * Parse path
34 | * @param path
35 | */
36 | export function parsePath(path: string): Array {
37 | const pathArray = path.split('.')
38 | const parts = []
39 |
40 | for (let i = 0; i < pathArray.length; i++) {
41 | let p = pathArray[i]
42 |
43 | while (p[p.length - 1] === '\\' && pathArray[i + 1] !== undefined) {
44 | p = p.slice(0, -1) + '.'
45 | p += pathArray[++i]
46 | }
47 |
48 | parts.push(p)
49 | }
50 |
51 | if (!isValidPath(parts)) {
52 | return []
53 | }
54 |
55 | return parts
56 | }
57 |
58 | /**
59 | * Get object value by path
60 | * @param object
61 | * @param path
62 | */
63 | export function getMessage(
64 | object: I18nLocaleMessageObject,
65 | path: string
66 | ): string {
67 | if (!isObject(object)) {
68 | return ''
69 | }
70 |
71 | const paths = parsePath(path)
72 | if (paths.length === 0) {
73 | return ''
74 | }
75 |
76 | let rawObject = Object.assign({}, object)
77 | for (let i = 0; i < paths.length; i++) {
78 | if (typeof rawObject[paths[i]] === 'string') {
79 | return rawObject[paths[i]] as string
80 | }
81 |
82 | rawObject = rawObject[paths[i]] as I18nLocaleMessageObject
83 | if (rawObject === undefined || rawObject === null) {
84 | if (i !== paths.length - 1) {
85 | return ''
86 | }
87 |
88 | break
89 | }
90 | }
91 |
92 | return ''
93 | }
94 |
95 | /**
96 | * Parse locale values
97 | * @param message
98 | * @param values
99 | */
100 | export function parseLocaleValues(
101 | message: string,
102 | values: I18nValues
103 | ): I18nValueObject {
104 | if (Array.isArray(values)) {
105 | const parseValues: I18nValueObject = {}
106 | const matches = [...message.matchAll(/{(.+?)}/g)]
107 | if (matches) {
108 | matches.forEach((match, index) => {
109 | if (values[index]) {
110 | parseValues[match[1]] = values[index]
111 | }
112 | })
113 | }
114 |
115 | return parseValues
116 | }
117 |
118 | return values as I18nValueObject
119 | }
120 |
121 | /**
122 | * Replace locale values to message
123 | * @param message
124 | * @param values
125 | */
126 | export function replaceLocaleValues(
127 | message: string,
128 | values: I18nValueObject
129 | ): string {
130 | for (const key in values) {
131 | message = message.replace(`{${key}}`, String(values[key]))
132 | }
133 |
134 | return message
135 | }
136 |
137 | /**
138 | * Merge deep
139 | * @param target
140 | * @param source
141 | */
142 | export function mergeDeep(
143 | target: Record,
144 | source: Record
145 | ): Record {
146 | Object.keys(source).forEach(key => {
147 | if (source[key] instanceof Object && key in target) {
148 | source[key] = { ...source[key], ...mergeDeep(target[key], source[key]) }
149 | }
150 | })
151 |
152 | return { ...(target || {}), ...source }
153 | }
154 |
--------------------------------------------------------------------------------
/scripts/release.js:
--------------------------------------------------------------------------------
1 | const args = require('minimist')(process.argv.slice(2))
2 | const path = require('path')
3 | const fs = require('fs')
4 | const chalk = require('chalk')
5 | const semver = require('semver')
6 | const currentVersion = require('../package.json').version
7 | const { prompt } = require('enquirer')
8 | const execa = require('execa')
9 | const step = msg => console.log(chalk.cyan(msg))
10 |
11 | const preId =
12 | args.preid ||
13 | (semver.prerelease(currentVersion) && semver.prerelease(currentVersion)[0])
14 | const isDryRun = args.dry
15 | const skipTests = args.skipTests
16 |
17 | const versionIncrements = [
18 | 'patch',
19 | 'minor',
20 | 'major',
21 | ...(preId ? ['prepatch', 'preminor', 'premajor', 'prerelease'] : []),
22 | ]
23 |
24 | const inc = i => semver.inc(currentVersion, i, preId)
25 | const bin = name => path.resolve(__dirname, '../node_modules/.bin/' + name)
26 | const run = (bin, args, opts = {}) =>
27 | execa(bin, args, { stdio: 'inherit', ...opts })
28 | const dryRun = (bin, args, opts = {}) =>
29 | console.log(chalk.blue(`[dryrun] ${bin} ${args.join(' ')}`), opts)
30 | const runIfNotDry = isDryRun ? dryRun : run
31 |
32 | async function main() {
33 | let targetVersion = args._[0]
34 |
35 | if (!targetVersion) {
36 | // no explicit version, offer suggestions
37 | const { release } = await prompt({
38 | type: 'select',
39 | name: 'release',
40 | message: 'Select release type',
41 | choices: versionIncrements
42 | .map(i => `${i} (${inc(i)})`)
43 | .concat(['custom']),
44 | })
45 |
46 | if (release === 'custom') {
47 | targetVersion = (
48 | await prompt({
49 | type: 'input',
50 | name: 'version',
51 | message: 'Input custom version',
52 | initial: currentVersion,
53 | })
54 | ).version
55 | } else {
56 | targetVersion = release.match(/\((.*)\)/)[1]
57 | }
58 | }
59 |
60 | if (!semver.valid(targetVersion)) {
61 | throw new Error(`invalid target version: ${targetVersion}`)
62 | }
63 |
64 | const { yes } = await prompt({
65 | type: 'confirm',
66 | name: 'yes',
67 | message: `Releasing v${targetVersion}. Confirm?`,
68 | })
69 |
70 | if (!yes) {
71 | return
72 | }
73 |
74 | // Run test
75 | step('\nRunning tests...')
76 | if (!skipTests && !isDryRun) {
77 | await run(bin('jest'), ['--clearCache'])
78 | await run('yarn', ['test', '--bail'])
79 | } else {
80 | console.log(`(skipped)`)
81 | }
82 |
83 | // Update package
84 | step('\nUpdate package')
85 | if (!isDryRun) {
86 | await updatePackage(targetVersion)
87 | } else {
88 | console.log(`(skipped)`)
89 | }
90 |
91 | step('\nBuilding package...')
92 | if (!isDryRun) {
93 | await run('yarn', ['build'])
94 | await run('yarn', ['build:dts'])
95 | } else {
96 | console.log(`(skipped)`)
97 | }
98 |
99 | // Generate changelog
100 | if (!isDryRun) {
101 | await run(`yarn`, ['changelog'])
102 | }
103 |
104 | const { stdout } = await run('git', ['diff'], { stdio: 'pipe' })
105 | if (stdout) {
106 | step('\nCommitting changes...')
107 | await runIfNotDry('git', ['add', '-A'])
108 | await runIfNotDry('git', ['commit', '-m', `release: v${targetVersion}`])
109 | } else {
110 | console.log('No changes to commit.')
111 | }
112 |
113 | // Publish packages
114 | await publishPackage(targetVersion, runIfNotDry)
115 |
116 | // Push to GitHub
117 | step('\nPushing to GitHub...')
118 | await runIfNotDry('git', ['tag', `v${targetVersion}`])
119 | await runIfNotDry('git', ['push', 'origin', `refs/tags/v${targetVersion}`])
120 | await runIfNotDry('git', ['push'])
121 |
122 | if (isDryRun) {
123 | console.log(`\nDry run finished - run git diff to see package changes.`)
124 | }
125 | console.log()
126 | }
127 |
128 | /**
129 | * Public package to npm
130 | * @param version
131 | * @param runIfNotDry
132 | * @returns {Promise}
133 | */
134 | async function publishPackage(version, runIfNotDry) {
135 | const root = path.resolve(__dirname, '..')
136 | const pkgPath = path.resolve(root, 'package.json')
137 | const pkg = require(pkgPath)
138 | const pkgName = pkg.name
139 | if (pkg.private) {
140 | return
141 | }
142 |
143 | const prerelease = semver.prerelease(version)
144 | const releaseTag = prerelease ? prerelease[0] : null
145 |
146 | step(`Publishing ${pkgName}...`)
147 | try {
148 | await runIfNotDry(
149 | 'yarn',
150 | [
151 | 'publish',
152 | '--new-version',
153 | version,
154 | ...(releaseTag ? ['--tag', releaseTag] : []),
155 | '--access',
156 | 'public',
157 | ],
158 | {
159 | cwd: root,
160 | stdio: 'pipe',
161 | }
162 | )
163 | console.log(chalk.green(`Successfully published ${pkgName}@${version}`))
164 | } catch (e) {
165 | if (e.stderr.match(/previously published/)) {
166 | console.log(chalk.red(`Skipping already published: ${pkgName}`))
167 | } else {
168 | throw e
169 | }
170 | }
171 | }
172 |
173 | /**
174 | * Update package version
175 | * @param version
176 | * @returns {Promise}
177 | */
178 | async function updatePackage(version) {
179 | const root = path.resolve(__dirname, '..')
180 | const pkgPath = path.resolve(root, 'package.json')
181 | const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))
182 | pkg.version = version
183 | fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n')
184 | }
185 |
186 | main().catch(e => {
187 | console.error(e)
188 | })
189 |
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 | import path from 'path'
2 | import ts from 'rollup-plugin-typescript2'
3 | import replace from '@rollup/plugin-replace'
4 | import resolve from '@rollup/plugin-node-resolve'
5 | import commonjs from '@rollup/plugin-commonjs'
6 |
7 | const pkg = require('./package.json')
8 | const name = pkg.name
9 |
10 | const banner = `/*!
11 | * ${pkg.name} v${pkg.version}
12 | * (c) ${new Date().getFullYear()} Erik Pham
13 | * @license MIT
14 | */`
15 |
16 | // ensure TS checks only once for each build
17 | let hasTSChecked = false
18 |
19 | const outputConfigs = {
20 | // each file name has the format: `dist/${name}.${format}.js`
21 | // format being a key of this object
22 | 'esm-bundler': {
23 | file: pkg.module,
24 | format: `es`,
25 | },
26 | cjs: {
27 | file: pkg.main,
28 | format: `cjs`,
29 | },
30 | global: {
31 | file: pkg.unpkg,
32 | format: `iife`,
33 | },
34 | esm: {
35 | file: pkg.browser || pkg.module.replace('bundler', 'browser'),
36 | format: `es`,
37 | },
38 | }
39 |
40 | const allFormats = Object.keys(outputConfigs)
41 | const packageFormats = allFormats
42 | const packageConfigs = packageFormats.map(format =>
43 | createConfig(format, outputConfigs[format])
44 | )
45 |
46 | // only add the production ready if we are bundling the options
47 | packageFormats.forEach(format => {
48 | if (format === 'cjs') {
49 | packageConfigs.push(createProductionConfig(format))
50 | } else if (format === 'global') {
51 | packageConfigs.push(createMinifiedConfig(format))
52 | }
53 | })
54 |
55 | export default packageConfigs
56 |
57 | function createConfig(format, output, plugins = []) {
58 | if (!output) {
59 | console.log(require('chalk').yellow(`invalid format: "${format}"`))
60 | process.exit(1)
61 | }
62 |
63 | output.sourcemap = !!process.env.SOURCE_MAP
64 | output.banner = banner
65 | output.externalLiveBindings = false
66 | output.globals = {
67 | vue: 'Vue',
68 | }
69 |
70 | const isProductionBuild = /\.prod\.js$/.test(output.file)
71 | const isGlobalBuild = format === 'global'
72 | const isRawESMBuild = format === 'esm'
73 | const isNodeBuild = format === 'cjs'
74 | const isBundlerESMBuild = /esm-bundler/.test(format)
75 |
76 | if (isGlobalBuild) {
77 | output.name = 'VueI18nLite'
78 | }
79 |
80 | const shouldEmitDeclarations = !hasTSChecked
81 |
82 | const tsPlugin = ts({
83 | check: !hasTSChecked,
84 | tsconfig: path.resolve(__dirname, 'tsconfig.json'),
85 | cacheRoot: path.resolve(__dirname, 'node_modules/.rts2_cache'),
86 | tsconfigOverride: {
87 | compilerOptions: {
88 | sourceMap: output.sourcemap,
89 | declaration: shouldEmitDeclarations,
90 | declarationMap: shouldEmitDeclarations,
91 | },
92 | exclude: ['__tests__', 'test-dts'],
93 | },
94 | })
95 | // we only need to check TS and generate declarations once for each build.
96 | // it also seems to run into weird issues when checking multiple times
97 | // during a single build.
98 | hasTSChecked = true
99 |
100 | const external = [
101 | 'vue',
102 | ]
103 |
104 | const nodePlugins = [resolve(), commonjs()]
105 |
106 | return {
107 | input: `src/index.ts`,
108 | // Global and Browser ESM builds inlines everything so that they can be
109 | // used alone.
110 | external,
111 | plugins: [
112 | tsPlugin,
113 | createReplacePlugin(
114 | isProductionBuild,
115 | isBundlerESMBuild,
116 | // isBrowserBuild?
117 | isGlobalBuild || isRawESMBuild || isBundlerESMBuild,
118 | isGlobalBuild,
119 | isNodeBuild
120 | ),
121 | ...nodePlugins,
122 | ...plugins,
123 | ],
124 | output,
125 | }
126 | }
127 |
128 | function createReplacePlugin(
129 | isProduction,
130 | isBundlerESMBuild,
131 | isBrowserBuild,
132 | isGlobalBuild,
133 | isNodeBuild
134 | ) {
135 | const replacements = {
136 | __COMMIT__: `"${process.env.COMMIT}"`,
137 | __VERSION__: `"${pkg.version}"`,
138 | __DEV__: isBundlerESMBuild
139 | ? // preserve to be handled by bundlers
140 | `(process.env.NODE_ENV !== 'production')`
141 | : // hard coded dev/prod builds
142 | !isProduction,
143 | // this is only used during tests
144 | __TEST__: isBundlerESMBuild ? `(process.env.NODE_ENV === 'test')` : false,
145 | // If the build is expected to run directly in the browser (global / esm builds)
146 | __BROWSER__: isBrowserBuild,
147 | __FEATURE_PROD_DEVTOOLS__: isBundlerESMBuild
148 | ? `__VUE_PROD_DEVTOOLS__`
149 | : false,
150 | // is targeting bundlers?
151 | __BUNDLER__: isBundlerESMBuild,
152 | __GLOBAL__: isGlobalBuild,
153 | // is targeting Node (SSR)?
154 | __NODE_JS__: isNodeBuild,
155 | }
156 | // allow inline overrides like
157 | //__RUNTIME_COMPILE__=true yarn build
158 | Object.keys(replacements).forEach(key => {
159 | if (key in process.env) {
160 | replacements[key] = process.env[key]
161 | }
162 | })
163 | return replace(replacements)
164 | }
165 |
166 | function createProductionConfig(format) {
167 | return createConfig(format, {
168 | file: `dist/${name}.${format}.prod.js`,
169 | format: outputConfigs[format].format,
170 | })
171 | }
172 |
173 | function createMinifiedConfig(format) {
174 | const { terser } = require('rollup-plugin-terser')
175 | return createConfig(
176 | format,
177 | {
178 | file: `dist/${name}.${format}.prod.js`,
179 | format: outputConfigs[format].format,
180 | },
181 | [
182 | terser({
183 | module: /^esm/.test(format),
184 | compress: {
185 | ecma: 2015,
186 | pure_getters: true,
187 | },
188 | }),
189 | ]
190 | )
191 | }
192 |
--------------------------------------------------------------------------------
/playground/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@^7.12.13":
6 | version "7.12.13"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658"
8 | integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==
9 | dependencies:
10 | "@babel/highlight" "^7.12.13"
11 |
12 | "@babel/compat-data@^7.13.15":
13 | version "7.13.15"
14 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4"
15 | integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==
16 |
17 | "@babel/core@^7.12.10":
18 | version "7.13.16"
19 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.16.tgz#7756ab24396cc9675f1c3fcd5b79fcce192ea96a"
20 | integrity sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==
21 | dependencies:
22 | "@babel/code-frame" "^7.12.13"
23 | "@babel/generator" "^7.13.16"
24 | "@babel/helper-compilation-targets" "^7.13.16"
25 | "@babel/helper-module-transforms" "^7.13.14"
26 | "@babel/helpers" "^7.13.16"
27 | "@babel/parser" "^7.13.16"
28 | "@babel/template" "^7.12.13"
29 | "@babel/traverse" "^7.13.15"
30 | "@babel/types" "^7.13.16"
31 | convert-source-map "^1.7.0"
32 | debug "^4.1.0"
33 | gensync "^1.0.0-beta.2"
34 | json5 "^2.1.2"
35 | semver "^6.3.0"
36 | source-map "^0.5.0"
37 |
38 | "@babel/generator@^7.13.16":
39 | version "7.13.16"
40 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.16.tgz#0befc287031a201d84cdfc173b46b320ae472d14"
41 | integrity sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==
42 | dependencies:
43 | "@babel/types" "^7.13.16"
44 | jsesc "^2.5.1"
45 | source-map "^0.5.0"
46 |
47 | "@babel/helper-compilation-targets@^7.13.16":
48 | version "7.13.16"
49 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c"
50 | integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==
51 | dependencies:
52 | "@babel/compat-data" "^7.13.15"
53 | "@babel/helper-validator-option" "^7.12.17"
54 | browserslist "^4.14.5"
55 | semver "^6.3.0"
56 |
57 | "@babel/helper-create-class-features-plugin@^7.13.0":
58 | version "7.13.11"
59 | resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6"
60 | integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==
61 | dependencies:
62 | "@babel/helper-function-name" "^7.12.13"
63 | "@babel/helper-member-expression-to-functions" "^7.13.0"
64 | "@babel/helper-optimise-call-expression" "^7.12.13"
65 | "@babel/helper-replace-supers" "^7.13.0"
66 | "@babel/helper-split-export-declaration" "^7.12.13"
67 |
68 | "@babel/helper-function-name@^7.12.13":
69 | version "7.12.13"
70 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a"
71 | integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==
72 | dependencies:
73 | "@babel/helper-get-function-arity" "^7.12.13"
74 | "@babel/template" "^7.12.13"
75 | "@babel/types" "^7.12.13"
76 |
77 | "@babel/helper-get-function-arity@^7.12.13":
78 | version "7.12.13"
79 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583"
80 | integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==
81 | dependencies:
82 | "@babel/types" "^7.12.13"
83 |
84 | "@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12":
85 | version "7.13.12"
86 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72"
87 | integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==
88 | dependencies:
89 | "@babel/types" "^7.13.12"
90 |
91 | "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.13.12":
92 | version "7.13.12"
93 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977"
94 | integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==
95 | dependencies:
96 | "@babel/types" "^7.13.12"
97 |
98 | "@babel/helper-module-transforms@^7.13.14":
99 | version "7.13.14"
100 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef"
101 | integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==
102 | dependencies:
103 | "@babel/helper-module-imports" "^7.13.12"
104 | "@babel/helper-replace-supers" "^7.13.12"
105 | "@babel/helper-simple-access" "^7.13.12"
106 | "@babel/helper-split-export-declaration" "^7.12.13"
107 | "@babel/helper-validator-identifier" "^7.12.11"
108 | "@babel/template" "^7.12.13"
109 | "@babel/traverse" "^7.13.13"
110 | "@babel/types" "^7.13.14"
111 |
112 | "@babel/helper-optimise-call-expression@^7.12.13":
113 | version "7.12.13"
114 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea"
115 | integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==
116 | dependencies:
117 | "@babel/types" "^7.12.13"
118 |
119 | "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0":
120 | version "7.13.0"
121 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af"
122 | integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==
123 |
124 | "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12":
125 | version "7.13.12"
126 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804"
127 | integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==
128 | dependencies:
129 | "@babel/helper-member-expression-to-functions" "^7.13.12"
130 | "@babel/helper-optimise-call-expression" "^7.12.13"
131 | "@babel/traverse" "^7.13.0"
132 | "@babel/types" "^7.13.12"
133 |
134 | "@babel/helper-simple-access@^7.13.12":
135 | version "7.13.12"
136 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6"
137 | integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==
138 | dependencies:
139 | "@babel/types" "^7.13.12"
140 |
141 | "@babel/helper-split-export-declaration@^7.12.13":
142 | version "7.12.13"
143 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05"
144 | integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==
145 | dependencies:
146 | "@babel/types" "^7.12.13"
147 |
148 | "@babel/helper-validator-identifier@^7.12.11":
149 | version "7.12.11"
150 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
151 | integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
152 |
153 | "@babel/helper-validator-option@^7.12.17":
154 | version "7.12.17"
155 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831"
156 | integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==
157 |
158 | "@babel/helpers@^7.13.16":
159 | version "7.13.17"
160 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.17.tgz#b497c7a00e9719d5b613b8982bda6ed3ee94caf6"
161 | integrity sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==
162 | dependencies:
163 | "@babel/template" "^7.12.13"
164 | "@babel/traverse" "^7.13.17"
165 | "@babel/types" "^7.13.17"
166 |
167 | "@babel/highlight@^7.12.13":
168 | version "7.13.10"
169 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1"
170 | integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==
171 | dependencies:
172 | "@babel/helper-validator-identifier" "^7.12.11"
173 | chalk "^2.0.0"
174 | js-tokens "^4.0.0"
175 |
176 | "@babel/parser@^7.12.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.16", "@babel/parser@^7.13.9":
177 | version "7.13.16"
178 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37"
179 | integrity sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==
180 |
181 | "@babel/plugin-syntax-import-meta@^7.10.4":
182 | version "7.10.4"
183 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
184 | integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
185 | dependencies:
186 | "@babel/helper-plugin-utils" "^7.10.4"
187 |
188 | "@babel/plugin-syntax-jsx@^7.0.0":
189 | version "7.12.13"
190 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15"
191 | integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==
192 | dependencies:
193 | "@babel/helper-plugin-utils" "^7.12.13"
194 |
195 | "@babel/plugin-syntax-typescript@^7.12.13":
196 | version "7.12.13"
197 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz#9dff111ca64154cef0f4dc52cf843d9f12ce4474"
198 | integrity sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==
199 | dependencies:
200 | "@babel/helper-plugin-utils" "^7.12.13"
201 |
202 | "@babel/plugin-transform-typescript@^7.12.1":
203 | version "7.13.0"
204 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853"
205 | integrity sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==
206 | dependencies:
207 | "@babel/helper-create-class-features-plugin" "^7.13.0"
208 | "@babel/helper-plugin-utils" "^7.13.0"
209 | "@babel/plugin-syntax-typescript" "^7.12.13"
210 |
211 | "@babel/template@^7.0.0", "@babel/template@^7.12.13":
212 | version "7.12.13"
213 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327"
214 | integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==
215 | dependencies:
216 | "@babel/code-frame" "^7.12.13"
217 | "@babel/parser" "^7.12.13"
218 | "@babel/types" "^7.12.13"
219 |
220 | "@babel/traverse@^7.0.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.13.15", "@babel/traverse@^7.13.17":
221 | version "7.13.17"
222 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.17.tgz#c85415e0c7d50ac053d758baec98b28b2ecfeea3"
223 | integrity sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==
224 | dependencies:
225 | "@babel/code-frame" "^7.12.13"
226 | "@babel/generator" "^7.13.16"
227 | "@babel/helper-function-name" "^7.12.13"
228 | "@babel/helper-split-export-declaration" "^7.12.13"
229 | "@babel/parser" "^7.13.16"
230 | "@babel/types" "^7.13.17"
231 | debug "^4.1.0"
232 | globals "^11.1.0"
233 |
234 | "@babel/types@^7.0.0", "@babel/types@^7.12.0", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.13.16", "@babel/types@^7.13.17":
235 | version "7.13.17"
236 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.17.tgz#48010a115c9fba7588b4437dd68c9469012b38b4"
237 | integrity sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==
238 | dependencies:
239 | "@babel/helper-validator-identifier" "^7.12.11"
240 | to-fast-properties "^2.0.0"
241 |
242 | "@vitejs/plugin-vue-jsx@^1.1.3":
243 | version "1.1.3"
244 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-1.1.3.tgz#426c68f8a367a603acb82fca6e2b12506ba9fc8e"
245 | integrity sha512-R9wsuNDEKTDG5oXJaFictrw9E5uokniGzi6tvyO5Od02tE4TnOPfgY2BeHKB4f4ldgiZRMhdUhNEsgjoWnct6A==
246 | dependencies:
247 | "@babel/core" "^7.12.10"
248 | "@babel/plugin-syntax-import-meta" "^7.10.4"
249 | "@babel/plugin-transform-typescript" "^7.12.1"
250 | "@vue/babel-plugin-jsx" "^1.0.3"
251 | hash-sum "^2.0.0"
252 |
253 | "@vitejs/plugin-vue@^1.2.2":
254 | version "1.2.2"
255 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.2.2.tgz#b0038fc11b9099f4cd01fcbf0ee419adda417b52"
256 | integrity sha512-5BI2WFfs/Z0pAV4S/IQf1oH3bmFYlL5ATMBHgTt1Lf7hAnfpNd5oUAAs6hZPfk3QhvyUQgtk0rJBlabwNFcBJQ==
257 |
258 | "@vue/babel-helper-vue-transform-on@^1.0.2":
259 | version "1.0.2"
260 | resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz#9b9c691cd06fc855221a2475c3cc831d774bc7dc"
261 | integrity sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==
262 |
263 | "@vue/babel-plugin-jsx@^1.0.3":
264 | version "1.0.5"
265 | resolved "https://registry.yarnpkg.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.0.5.tgz#72820d5fb371c41d2113b31b16787995e8bdf69a"
266 | integrity sha512-Jtipy7oI0am5e1q5Ahunm/cCcCh5ssf5VkMQsLR383S3un5Qh7NBfxgSK9kmWf4IXJEhDeYp9kHv8G/EnMai9A==
267 | dependencies:
268 | "@babel/helper-module-imports" "^7.0.0"
269 | "@babel/plugin-syntax-jsx" "^7.0.0"
270 | "@babel/template" "^7.0.0"
271 | "@babel/traverse" "^7.0.0"
272 | "@babel/types" "^7.0.0"
273 | "@vue/babel-helper-vue-transform-on" "^1.0.2"
274 | camelcase "^6.0.0"
275 | html-tags "^3.1.0"
276 | svg-tags "^1.0.0"
277 |
278 | "@vue/compiler-core@3.0.11":
279 | version "3.0.11"
280 | resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.11.tgz#5ef579e46d7b336b8735228758d1c2c505aae69a"
281 | integrity sha512-6sFj6TBac1y2cWCvYCA8YzHJEbsVkX7zdRs/3yK/n1ilvRqcn983XvpBbnN3v4mZ1UiQycTvOiajJmOgN9EVgw==
282 | dependencies:
283 | "@babel/parser" "^7.12.0"
284 | "@babel/types" "^7.12.0"
285 | "@vue/shared" "3.0.11"
286 | estree-walker "^2.0.1"
287 | source-map "^0.6.1"
288 |
289 | "@vue/compiler-dom@3.0.11":
290 | version "3.0.11"
291 | resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.0.11.tgz#b15fc1c909371fd671746020ba55b5dab4a730ee"
292 | integrity sha512-+3xB50uGeY5Fv9eMKVJs2WSRULfgwaTJsy23OIltKgMrynnIj8hTYY2UL97HCoz78aDw1VDXdrBQ4qepWjnQcw==
293 | dependencies:
294 | "@vue/compiler-core" "3.0.11"
295 | "@vue/shared" "3.0.11"
296 |
297 | "@vue/compiler-sfc@^3.0.11":
298 | version "3.0.11"
299 | resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.0.11.tgz#cd8ca2154b88967b521f5ad3b10f5f8b6b665679"
300 | integrity sha512-7fNiZuCecRleiyVGUWNa6pn8fB2fnuJU+3AGjbjl7r1P5wBivfl02H4pG+2aJP5gh2u+0wXov1W38tfWOphsXw==
301 | dependencies:
302 | "@babel/parser" "^7.13.9"
303 | "@babel/types" "^7.13.0"
304 | "@vue/compiler-core" "3.0.11"
305 | "@vue/compiler-dom" "3.0.11"
306 | "@vue/compiler-ssr" "3.0.11"
307 | "@vue/shared" "3.0.11"
308 | consolidate "^0.16.0"
309 | estree-walker "^2.0.1"
310 | hash-sum "^2.0.0"
311 | lru-cache "^5.1.1"
312 | magic-string "^0.25.7"
313 | merge-source-map "^1.1.0"
314 | postcss "^8.1.10"
315 | postcss-modules "^4.0.0"
316 | postcss-selector-parser "^6.0.4"
317 | source-map "^0.6.1"
318 |
319 | "@vue/compiler-ssr@3.0.11":
320 | version "3.0.11"
321 | resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.0.11.tgz#ac5a05fd1257412fa66079c823d8203b6a889a13"
322 | integrity sha512-66yUGI8SGOpNvOcrQybRIhl2M03PJ+OrDPm78i7tvVln86MHTKhM3ERbALK26F7tXl0RkjX4sZpucCpiKs3MnA==
323 | dependencies:
324 | "@vue/compiler-dom" "3.0.11"
325 | "@vue/shared" "3.0.11"
326 |
327 | "@vue/shared@3.0.11":
328 | version "3.0.11"
329 | resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.11.tgz#20d22dd0da7d358bb21c17f9bde8628152642c77"
330 | integrity sha512-b+zB8A2so8eCE0JsxjL24J7vdGl8rzPQ09hZNhystm+KqSbKcAej1A+Hbva1rCMmTTqA+hFnUSDc5kouEo0JzA==
331 |
332 | ansi-styles@^3.2.1:
333 | version "3.2.1"
334 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
335 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
336 | dependencies:
337 | color-convert "^1.9.0"
338 |
339 | big.js@^5.2.2:
340 | version "5.2.2"
341 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
342 | integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
343 |
344 | bluebird@^3.7.2:
345 | version "3.7.2"
346 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
347 | integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
348 |
349 | browserslist@^4.14.5:
350 | version "4.16.5"
351 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.5.tgz#952825440bca8913c62d0021334cbe928ef062ae"
352 | integrity sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==
353 | dependencies:
354 | caniuse-lite "^1.0.30001214"
355 | colorette "^1.2.2"
356 | electron-to-chromium "^1.3.719"
357 | escalade "^3.1.1"
358 | node-releases "^1.1.71"
359 |
360 | camelcase@^6.0.0:
361 | version "6.2.0"
362 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
363 | integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
364 |
365 | caniuse-lite@^1.0.30001214:
366 | version "1.0.30001219"
367 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz#5bfa5d0519f41f993618bd318f606a4c4c16156b"
368 | integrity sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ==
369 |
370 | chalk@^2.0.0:
371 | version "2.4.2"
372 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
373 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
374 | dependencies:
375 | ansi-styles "^3.2.1"
376 | escape-string-regexp "^1.0.5"
377 | supports-color "^5.3.0"
378 |
379 | color-convert@^1.9.0:
380 | version "1.9.3"
381 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
382 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
383 | dependencies:
384 | color-name "1.1.3"
385 |
386 | color-name@1.1.3:
387 | version "1.1.3"
388 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
389 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
390 |
391 | colorette@^1.2.2:
392 | version "1.2.2"
393 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
394 | integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
395 |
396 | consolidate@^0.16.0:
397 | version "0.16.0"
398 | resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.16.0.tgz#a11864768930f2f19431660a65906668f5fbdc16"
399 | integrity sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==
400 | dependencies:
401 | bluebird "^3.7.2"
402 |
403 | convert-source-map@^1.7.0:
404 | version "1.7.0"
405 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
406 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
407 | dependencies:
408 | safe-buffer "~5.1.1"
409 |
410 | cssesc@^3.0.0:
411 | version "3.0.0"
412 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
413 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
414 |
415 | debug@^4.1.0:
416 | version "4.3.1"
417 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
418 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
419 | dependencies:
420 | ms "2.1.2"
421 |
422 | electron-to-chromium@^1.3.719:
423 | version "1.3.723"
424 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.723.tgz#52769a75635342a4db29af5f1e40bd3dad02c877"
425 | integrity sha512-L+WXyXI7c7+G1V8ANzRsPI5giiimLAUDC6Zs1ojHHPhYXb3k/iTABFmWjivEtsWrRQymjnO66/rO2ZTABGdmWg==
426 |
427 | emojis-list@^3.0.0:
428 | version "3.0.0"
429 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
430 | integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
431 |
432 | esbuild@^0.9.3:
433 | version "0.9.7"
434 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.9.7.tgz#ea0d639cbe4b88ec25fbed4d6ff00c8d788ef70b"
435 | integrity sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg==
436 |
437 | escalade@^3.1.1:
438 | version "3.1.1"
439 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
440 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
441 |
442 | escape-string-regexp@^1.0.5:
443 | version "1.0.5"
444 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
445 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
446 |
447 | estree-walker@^2.0.1:
448 | version "2.0.2"
449 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
450 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
451 |
452 | fsevents@~2.3.1:
453 | version "2.3.2"
454 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
455 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
456 |
457 | function-bind@^1.1.1:
458 | version "1.1.1"
459 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
460 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
461 |
462 | generic-names@^2.0.1:
463 | version "2.0.1"
464 | resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872"
465 | integrity sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==
466 | dependencies:
467 | loader-utils "^1.1.0"
468 |
469 | gensync@^1.0.0-beta.2:
470 | version "1.0.0-beta.2"
471 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
472 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
473 |
474 | globals@^11.1.0:
475 | version "11.12.0"
476 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
477 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
478 |
479 | has-flag@^3.0.0:
480 | version "3.0.0"
481 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
482 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
483 |
484 | has@^1.0.3:
485 | version "1.0.3"
486 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
487 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
488 | dependencies:
489 | function-bind "^1.1.1"
490 |
491 | hash-sum@^2.0.0:
492 | version "2.0.0"
493 | resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"
494 | integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==
495 |
496 | html-tags@^3.1.0:
497 | version "3.1.0"
498 | resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140"
499 | integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==
500 |
501 | icss-replace-symbols@^1.1.0:
502 | version "1.1.0"
503 | resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
504 | integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
505 |
506 | icss-utils@^5.0.0:
507 | version "5.1.0"
508 | resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
509 | integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
510 |
511 | is-core-module@^2.2.0:
512 | version "2.3.0"
513 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.3.0.tgz#d341652e3408bca69c4671b79a0954a3d349f887"
514 | integrity sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==
515 | dependencies:
516 | has "^1.0.3"
517 |
518 | js-tokens@^4.0.0:
519 | version "4.0.0"
520 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
521 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
522 |
523 | jsesc@^2.5.1:
524 | version "2.5.2"
525 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
526 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
527 |
528 | json5@^1.0.1:
529 | version "1.0.1"
530 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
531 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
532 | dependencies:
533 | minimist "^1.2.0"
534 |
535 | json5@^2.1.2:
536 | version "2.2.0"
537 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
538 | integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
539 | dependencies:
540 | minimist "^1.2.5"
541 |
542 | loader-utils@^1.1.0:
543 | version "1.4.0"
544 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
545 | integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
546 | dependencies:
547 | big.js "^5.2.2"
548 | emojis-list "^3.0.0"
549 | json5 "^1.0.1"
550 |
551 | lodash.camelcase@^4.3.0:
552 | version "4.3.0"
553 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
554 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
555 |
556 | lru-cache@^5.1.1:
557 | version "5.1.1"
558 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
559 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
560 | dependencies:
561 | yallist "^3.0.2"
562 |
563 | magic-string@^0.25.7:
564 | version "0.25.7"
565 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
566 | integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
567 | dependencies:
568 | sourcemap-codec "^1.4.4"
569 |
570 | merge-source-map@^1.1.0:
571 | version "1.1.0"
572 | resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
573 | integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
574 | dependencies:
575 | source-map "^0.6.1"
576 |
577 | minimist@^1.2.0, minimist@^1.2.5:
578 | version "1.2.5"
579 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
580 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
581 |
582 | ms@2.1.2:
583 | version "2.1.2"
584 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
585 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
586 |
587 | nanoid@^3.1.22:
588 | version "3.1.22"
589 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844"
590 | integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==
591 |
592 | node-releases@^1.1.71:
593 | version "1.1.71"
594 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb"
595 | integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==
596 |
597 | path-parse@^1.0.6:
598 | version "1.0.6"
599 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
600 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
601 |
602 | postcss-modules-extract-imports@^3.0.0:
603 | version "3.0.0"
604 | resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
605 | integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
606 |
607 | postcss-modules-local-by-default@^4.0.0:
608 | version "4.0.0"
609 | resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c"
610 | integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==
611 | dependencies:
612 | icss-utils "^5.0.0"
613 | postcss-selector-parser "^6.0.2"
614 | postcss-value-parser "^4.1.0"
615 |
616 | postcss-modules-scope@^3.0.0:
617 | version "3.0.0"
618 | resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06"
619 | integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==
620 | dependencies:
621 | postcss-selector-parser "^6.0.4"
622 |
623 | postcss-modules-values@^4.0.0:
624 | version "4.0.0"
625 | resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
626 | integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
627 | dependencies:
628 | icss-utils "^5.0.0"
629 |
630 | postcss-modules@^4.0.0:
631 | version "4.0.0"
632 | resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-4.0.0.tgz#2bc7f276ab88f3f1b0fadf6cbd7772d43b5f3b9b"
633 | integrity sha512-ghS/ovDzDqARm4Zj6L2ntadjyQMoyJmi0JkLlYtH2QFLrvNlxH5OAVRPWPeKilB0pY7SbuhO173KOWkPAxRJcw==
634 | dependencies:
635 | generic-names "^2.0.1"
636 | icss-replace-symbols "^1.1.0"
637 | lodash.camelcase "^4.3.0"
638 | postcss-modules-extract-imports "^3.0.0"
639 | postcss-modules-local-by-default "^4.0.0"
640 | postcss-modules-scope "^3.0.0"
641 | postcss-modules-values "^4.0.0"
642 | string-hash "^1.1.1"
643 |
644 | postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
645 | version "6.0.5"
646 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz#042d74e137db83e6f294712096cb413f5aa612c4"
647 | integrity sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==
648 | dependencies:
649 | cssesc "^3.0.0"
650 | util-deprecate "^1.0.2"
651 |
652 | postcss-value-parser@^4.1.0:
653 | version "4.1.0"
654 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
655 | integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
656 |
657 | postcss@^8.1.10, postcss@^8.2.1:
658 | version "8.2.13"
659 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.13.tgz#dbe043e26e3c068e45113b1ed6375d2d37e2129f"
660 | integrity sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==
661 | dependencies:
662 | colorette "^1.2.2"
663 | nanoid "^3.1.22"
664 | source-map "^0.6.1"
665 |
666 | resolve@^1.19.0:
667 | version "1.20.0"
668 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
669 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
670 | dependencies:
671 | is-core-module "^2.2.0"
672 | path-parse "^1.0.6"
673 |
674 | rollup@^2.38.5:
675 | version "2.45.2"
676 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.45.2.tgz#8fb85917c9f35605720e92328f3ccbfba6f78b48"
677 | integrity sha512-kRRU7wXzFHUzBIv0GfoFFIN3m9oteY4uAsKllIpQDId5cfnkWF2J130l+27dzDju0E6MScKiV0ZM5Bw8m4blYQ==
678 | optionalDependencies:
679 | fsevents "~2.3.1"
680 |
681 | safe-buffer@~5.1.1:
682 | version "5.1.2"
683 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
684 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
685 |
686 | semver@^6.3.0:
687 | version "6.3.0"
688 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
689 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
690 |
691 | source-map@^0.5.0:
692 | version "0.5.7"
693 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
694 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
695 |
696 | source-map@^0.6.1:
697 | version "0.6.1"
698 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
699 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
700 |
701 | sourcemap-codec@^1.4.4:
702 | version "1.4.8"
703 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
704 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
705 |
706 | string-hash@^1.1.1:
707 | version "1.1.3"
708 | resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
709 | integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=
710 |
711 | supports-color@^5.3.0:
712 | version "5.5.0"
713 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
714 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
715 | dependencies:
716 | has-flag "^3.0.0"
717 |
718 | svg-tags@^1.0.0:
719 | version "1.0.0"
720 | resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
721 | integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=
722 |
723 | to-fast-properties@^2.0.0:
724 | version "2.0.0"
725 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
726 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
727 |
728 | util-deprecate@^1.0.2:
729 | version "1.0.2"
730 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
731 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
732 |
733 | vite@^2.2.3:
734 | version "2.2.3"
735 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.2.3.tgz#1acbdfa56ac00e00e7ccb6988f63f130c2f99dbb"
736 | integrity sha512-PtjyBL4GtACM+uT5q5hi2+AlMBbb6YI2b2bam6QI8ZdZt4FezseF0yZHQx0G+b3po9jIJ/GS5N9gc5Yq9Rue7g==
737 | dependencies:
738 | esbuild "^0.9.3"
739 | postcss "^8.2.1"
740 | resolve "^1.19.0"
741 | rollup "^2.38.5"
742 | optionalDependencies:
743 | fsevents "~2.3.1"
744 |
745 | yallist@^3.0.2:
746 | version "3.1.1"
747 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
748 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
749 |
--------------------------------------------------------------------------------