diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml
new file mode 100644
index 0000000..b45c6e3
--- /dev/null
+++ b/.github/workflows/deploy-docs.yml
@@ -0,0 +1,44 @@
+
+name: 部署文档
+
+on:
+ push:
+ branches:
+ # 确保这是你正在使用的分支名称
+ - master
+
+jobs:
+ deploy-gh-pages:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ # 如果你文档需要 Git 子模块,取消注释下一行
+ # submodules: true
+
+ - uses: actions/cache@v3
+ id: node-modules
+ with:
+ path: node_modules/
+ key: ${{ runner.os }}-node-modules-${{ hashFiles('yarn.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-node-modules-
+
+ - name: 安装依赖
+ if: steps.node-modules.outputs.cache-hit != 'true'
+ run: yarn install --frozen-lockfile
+
+ - name: 构建文档
+ env:
+ NODE_OPTIONS: --max_old_space_size=4096
+ run: yarn run docs:build
+
+ - name: 部署文档
+ uses: JamesIves/github-pages-deploy-action@v4
+ with:
+ # 这是文档部署到的分支名称
+ branch: gh-pages
+ folder: docs/.vuepress/dist
+
diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts
new file mode 100644
index 0000000..1f070cc
--- /dev/null
+++ b/docs/.vuepress/config.ts
@@ -0,0 +1,29 @@
+import { defineHopeConfig } from "vuepress-theme-hope";
+import themeConfig from "./themeConfig";
+
+export default defineHopeConfig({
+ base: "/voerka-i18n/",
+ head: [
+ [
+ "link",
+ {
+ rel: "stylesheet",
+ href: "//at.alicdn.com/t/font_2410206_mfj6e1vbwo.css",
+ },
+ ],
+ ],
+ locales: {
+ "/": {
+ lang: "zh-CN",
+ title: "VoerkaI18n",
+ description: "适用于Nodejs/Vue/React的国际化解决方案",
+ },
+ "/en/": {
+ lang: "en-US",
+ title: "VoerkaI18n",
+ description: "适用于Nodejs/Vue/React的国际化解决方案",
+ }
+ },
+
+ themeConfig,
+});
diff --git a/docs/.vuepress/navbar/en.ts b/docs/.vuepress/navbar/en.ts
new file mode 100644
index 0000000..be1a716
--- /dev/null
+++ b/docs/.vuepress/navbar/en.ts
@@ -0,0 +1,7 @@
+import { defineNavbarConfig } from "vuepress-theme-hope";
+
+export const en = defineNavbarConfig([
+ "/en/",
+ "/home",
+ { text: "Guide", icon: "creative", link: "/guide/" }
+]);
diff --git a/docs/.vuepress/navbar/index.ts b/docs/.vuepress/navbar/index.ts
new file mode 100644
index 0000000..67e2901
--- /dev/null
+++ b/docs/.vuepress/navbar/index.ts
@@ -0,0 +1,2 @@
+export * from "./en";
+export * from "./zh";
diff --git a/docs/.vuepress/navbar/zh.ts b/docs/.vuepress/navbar/zh.ts
new file mode 100644
index 0000000..92bdf5a
--- /dev/null
+++ b/docs/.vuepress/navbar/zh.ts
@@ -0,0 +1,23 @@
+import { defineNavbarConfig } from "vuepress-theme-hope";
+
+export const zh = defineNavbarConfig([
+ {
+ text: "主页",
+ icon: "home",
+ link: "/"
+ },
+ {
+ text: "指南",
+ link: "/zh/guide/intro"
+ },
+ {
+ text: "参考",
+ link: "/zh/reference",
+ },
+ {
+ text: "贡献源码",
+ link: "/zh/contribute",
+ }
+]);
+
+
diff --git a/docs/.vuepress/public/favicon.ico b/docs/.vuepress/public/favicon.ico
new file mode 100644
index 0000000..b411f79
Binary files /dev/null and b/docs/.vuepress/public/favicon.ico differ
diff --git a/docs/.vuepress/public/images/arch.png b/docs/.vuepress/public/images/arch.png
new file mode 100644
index 0000000..c474dfc
Binary files /dev/null and b/docs/.vuepress/public/images/arch.png differ
diff --git a/docs/.vuepress/public/logo.png b/docs/.vuepress/public/logo.png
new file mode 100644
index 0000000..ccd732e
Binary files /dev/null and b/docs/.vuepress/public/logo.png differ
diff --git a/docs/.vuepress/public/logo.svg b/docs/.vuepress/public/logo.svg
new file mode 100644
index 0000000..23301fd
--- /dev/null
+++ b/docs/.vuepress/public/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/.vuepress/sidebar/en.ts b/docs/.vuepress/sidebar/en.ts
new file mode 100644
index 0000000..6439dba
--- /dev/null
+++ b/docs/.vuepress/sidebar/en.ts
@@ -0,0 +1,16 @@
+import { defineSidebarConfig } from "vuepress-theme-hope";
+
+export const en = defineSidebarConfig({
+ "/en/": [
+ "",
+ "home",
+ "slide",
+ {
+ icon: "creative",
+ text: "Guide",
+ prefix: "guide/",
+ link: "guide/",
+ children: "structure",
+ }
+ ],
+});
diff --git a/docs/.vuepress/sidebar/index.ts b/docs/.vuepress/sidebar/index.ts
new file mode 100644
index 0000000..67e2901
--- /dev/null
+++ b/docs/.vuepress/sidebar/index.ts
@@ -0,0 +1,2 @@
+export * from "./en";
+export * from "./zh";
diff --git a/docs/.vuepress/sidebar/zh.ts b/docs/.vuepress/sidebar/zh.ts
new file mode 100644
index 0000000..b39d3cf
--- /dev/null
+++ b/docs/.vuepress/sidebar/zh.ts
@@ -0,0 +1,60 @@
+import { defineSidebarConfig } from "vuepress-theme-hope";
+
+export const zh = defineSidebarConfig({
+ "/zh/guide/": [
+ {
+ text:"开始",
+ prefix:"intro/",
+ children:[
+ "",
+ "install.md",
+ "get-started.md",
+ ]
+ },
+ {
+ text:"指南",
+ link:false,
+ prefix:"use/",
+ children:[
+ "t",
+ "interpolation",
+ "datetime",
+ "plural",
+ "currency",
+ "namespace",
+ "change-langeuage",
+ "vue",
+ "react"
+ ]
+ },
+ {
+ text:"高级特性",
+ prefix:"advanced/",
+ children:[
+ "runtime",
+ "textMap",
+ "multi-libs",
+ "autoimport",
+ "customformatter",
+ "langpack",
+ "autotranslate"
+ ]
+ },
+ {
+ text:"工具",
+ prefix:"tools/",
+ children:[
+ "cli",
+ "babel",
+ "vue",
+ "vite",
+ ]
+ }
+ ],
+ "/zh/reference": [
+ "i18nscope",
+ "voerkai18n",
+ "formatters",
+ "lang-code"
+ ]
+});
diff --git a/docs/.vuepress/styles/index.scss b/docs/.vuepress/styles/index.scss
new file mode 100644
index 0000000..8cdf641
--- /dev/null
+++ b/docs/.vuepress/styles/index.scss
@@ -0,0 +1,5 @@
+
+
+.sidebar-group > p.sidebar-heading > span.title {
+ font-weight: bold;
+}
\ No newline at end of file
diff --git a/docs/.vuepress/styles/palette.scss b/docs/.vuepress/styles/palette.scss
new file mode 100644
index 0000000..0519ecb
--- /dev/null
+++ b/docs/.vuepress/styles/palette.scss
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/.vuepress/themeConfig.ts b/docs/.vuepress/themeConfig.ts
new file mode 100644
index 0000000..799ad72
--- /dev/null
+++ b/docs/.vuepress/themeConfig.ts
@@ -0,0 +1,84 @@
+import { defineThemeConfig } from "vuepress-theme-hope";
+import * as navbar from "./navbar";
+import * as sidebar from "./sidebar";
+
+export default defineThemeConfig({
+ hostname: "https://vuepress-theme-hope-v2-demo.mrhope.site",
+ author: {
+ name: "wxzhang",
+ url: "https://mrhope.site",
+ },
+
+ iconPrefix: "iconfont icon-",
+
+ logo: "/logo.svg",
+
+ home:"/zh/home",
+ repo: "vuepress-theme-hope/vuepress-theme-hope",
+
+ docsDir: "docs",
+ breadcrumb :false,
+
+ pageInfo: ["Author", "Original", "Date", "Category", "Tag", "ReadingTime"],
+
+ locales: {
+ /**
+ * Chinese locale config
+ */
+ "/": {
+ // navbar
+ navbar: navbar.zh,
+
+ // sidebar
+ sidebar: sidebar.zh,
+
+ //footer: "默认页脚",
+
+ displayFooter: true
+ },
+ "/en/": {
+ // navbar
+ navbar: navbar.en,
+
+ // sidebar
+ sidebar: sidebar.en,
+
+ footer: "Default footer",
+ displayFooter: true,
+ }
+ },
+ plugins: {
+ // If you don't need comment feature, you can remove following option
+ // The following config is for demo ONLY, if you need comment feature, please generate and use your own config, see comment plugin documentation for details.
+ // To avoid disturbing the theme developer and consuming his resources, please DO NOT use the following config directly in your production environment!!!!!
+ // comment: {
+ // /**
+ // * Using giscus
+ // */
+ // type: "giscus",
+ // repo: "vuepress-theme-hope/giscus-discussions",
+ // repoId: "R_kgDOG_Pt2A",
+ // category: "Announcements",
+ // categoryId: "DIC_kwDOG_Pt2M4COD69",
+
+ // /**
+ // * Using twikoo
+ // */
+ // // type: "twikoo",
+ // // envId: "https://twikoo.ccknbc.vercel.app",
+
+ // /**
+ // * Using Waline
+ // */
+ // // type: "waline",
+ // // serverURL: "https://vuepress-theme-hope-comment.vercel.app",
+ // },
+
+ mdEnhance: {
+ enableAll: true,
+ presentation: {
+ plugins: ["highlight", "math", "search", "notes", "zoom"],
+ },
+ },
+ },
+});
diff --git a/docs/en/guide/disable.md b/docs/en/guide/disable.md
new file mode 100644
index 0000000..53857bf
--- /dev/null
+++ b/docs/en/guide/disable.md
@@ -0,0 +1,42 @@
+---
+index: 3
+title: Component disabled
+icon: config
+category:
+ - Guide
+tag:
+ - disable
+
+navbar: false
+sidebar: false
+
+breadcrumb: false
+pageInfo: false
+contributors: false
+editLink: false
+lastUpdated: false
+prev: false
+next: false
+comment: false
+footer: false
+
+backtotop: false
+---
+
+You can disable some functions on the page by setting the Frontmatter of the page.
+
+
+
+These should be disabled on this page:
+
+- Navbar
+- Sidebar
+- Breadcrumb
+- Page information
+- Contributors
+- Edit link
+- Update time
+- Prev/Next link
+- Comment
+- Footer
+- Back to top button
diff --git a/docs/en/guide/encrypt.md b/docs/en/guide/encrypt.md
new file mode 100644
index 0000000..695bfed
--- /dev/null
+++ b/docs/en/guide/encrypt.md
@@ -0,0 +1,15 @@
+---
+icon: lock
+category:
+ - Guide
+tag:
+ - encryption
+---
+
+# Encryption article
+
+The actual article content.
+
+Paragraph 1 text paragraph 1 text paragraph 1 text paragraph 1 text paragraph 1 text paragraph 1 text paragraph 1 text paragraph 1 text paragraph 1 text paragraph 1 text paragraph 1 text paragraph 1 text.
+
+Paragraph 2 text paragraph 2 text paragraph 2 text paragraph 2 text paragraph 2 text paragraph 2 text paragraph 2 text paragraph 2 text paragraph 2 text paragraph 2 text paragraph 2 text paragraph 2 text paragraph 2 text paragraph 2 text.
diff --git a/docs/en/guide/install.md b/docs/en/guide/install.md
new file mode 100644
index 0000000..7d16a2d
--- /dev/null
+++ b/docs/en/guide/install.md
@@ -0,0 +1,40 @@
+
+# 安装
+
+`VoerkaI18n`国际化框架是一个开源多包工程,主要由以下几个包组成:
+
+- **@voerkai18/cli**
+
+ 包含文本提取/编译等命令行工具,一般应该安装到全局。
+
+ ```javascript
+ npm install --g @voerkai18/cli
+ yarn global add @voerkai18/cli
+ pnpm add -g @voerkai18/cli
+ ```
+
+- **@voerkai18/runtime**
+
+ **可选的**,运行时,`@voerkai18/cli`的依赖。大部分情况下不需要手动安装,一般仅在开发库项目时采用独立的运行时依赖。
+
+ ```javascript
+ npm install --save @voerkai18/runtime
+ yarn add @voerkai18/runtime
+ pnpm add @voerkai18/runtime
+ ```
+
+- **@voerkai18/formatters**
+
+ **可选的**,一些额外的格式化器,可以按需进行安装到`dependencies`中,用来扩展翻译时对插值变量的额外处理。
+
+- **@voerkai18/babel**
+
+ 可选的`babel`插件,用来实现自动导入翻译函数和翻译文本映射自动替换。
+
+- **@voerkai18/vue**
+
+ 可选的`vue`插件,用来为Vue应用提供语言动态切换功能。
+
+- **@voerkai18/vite**
+
+ 可选的`vite`插件,用来为`vite`应用提供自动导入翻译函数和翻译文本映射自动替换。
diff --git a/docs/en/guide/markdown.md b/docs/en/guide/markdown.md
new file mode 100644
index 0000000..03780d1
--- /dev/null
+++ b/docs/en/guide/markdown.md
@@ -0,0 +1,341 @@
+---
+index: 2
+icon: markdown
+title: Markdown Enhance
+category:
+ - Guide
+tag:
+ - markdown
+---
+
+Every document page in VuePress is rendered by Markdown.
+
+You need to build your document or blog page by creating and writing Markdown in the corresponding path.
+
+
+
+## Markdown introduction
+
+If you are a new learner and don’t know how to write Markdown, please read [Markdown Intro](https://vuepress-theme-hope.github.io/v2/basic/markdown/README.html) and [Markdown Demo](https://vuepress-theme-hope.github.io/v2/basic/markdown/demo.html).
+
+::: info Frontmatter
+
+Frontmatter is a important concept in VuePress. If you don’t know it, you need to read [Frontmatter Introduction](https://vuepress-theme-hope.github.io/v2/basic/vuepress/page.html#front-matter).
+
+:::
+
+## VuePress Enhancement
+
+To enrich document writing, VuePress has extended Markdown syntax.
+
+For these extensions, please read [Markdown extensions in VuePress](https://vuepress-theme-hope.github.io/v2/basic/vuepress/markdown.html).
+
+## Theme Enhancement
+
+### Enable all
+
+You can set `themeconfig.plugins.htmlEnhance.enableAll` to enable all features of the [md-enhance](https://vuepress-theme-hope.github.io/v2/md-enhance/) plugin.
+
+```js {3-5}
+module.exports = {
+ themeConfig: {
+ plugins: {
+ mdEnhance: {
+ enableAll: true,
+ },
+ },
+ },
+};
+```
+
+## New Feature
+
+### Custom Container
+
+::: v-pre
+
+Safely use {{ variable }} in markdown.
+
+:::
+
+::: info Custom Title
+
+A custom information container with `code`, [link](#markdown).
+
+```js
+const a = 1;
+```
+
+:::
+
+::: tip Custom Title
+
+A custom tip container
+
+:::
+
+::: warning Custom Title
+
+A custom warning container
+
+:::
+
+::: danger Custom Title
+
+A custom danger container
+
+:::
+
+::: details Custom Title
+
+A custom details container
+
+:::
+
+:::: details Code
+
+```md
+::: v-pre
+
+Safely use {{ variable }} in markdown.
+
+:::
+
+::: info Custom Title
+
+A custom information container
+
+:::
+
+::: tip Custom Title
+
+A custom tip container
+
+:::
+
+::: warning Custom Title
+
+A custom warning container
+
+:::
+
+::: danger Custom Title
+
+A custom danger container
+
+:::
+
+::: details Custom Title
+
+A custom details container
+
+:::
+```
+
+::::
+
+### CodeGroup
+
+:::: code-group
+
+::: code-group-item yarn
+
+```bash
+yarn add -D vuepress-theme-hope
+```
+
+:::
+
+::: code-group-item npm:active
+
+```bash
+npm i -D vuepress-theme-hope
+```
+
+:::
+
+::::
+
+- [View Detail](https://vuepress-theme-hope.github.io/v2/guide/markdown/code-group.html)
+
+### Superscript and Subscript
+
+19^th^ H~2~O
+
+- [View Detail](https://vuepress-theme-hope.github.io/v2/guide/markdown/sup-sub.html)
+
+### Align
+
+::: center
+
+I am center
+
+:::
+
+::: right
+
+I am right align
+
+:::
+
+- [View Detail](https://vuepress-theme-hope.github.io/v2/guide/markdown/align.html)
+
+### Footnote
+
+This text has footnote[^first].
+
+[^first]: This is footnote content
+
+- [View Detail](https://vuepress-theme-hope.github.io/v2/guide/markdown/footnote.html)
+
+### Mark
+
+You can mark ==important words== .
+
+- [View Detail](https://vuepress-theme-hope.github.io/v2/guide/markdown/mark.html)
+
+### Tasklist
+
+- [x] Plan A
+- [ ] Plan B
+
+- [View Detail](https://vuepress-theme-hope.github.io/v2/guide/markdown/tasklist.html)
+
+### Chart
+
+::: chart A Scatter Chart
+
+```json
+{
+ "type": "scatter",
+ "data": {
+ "datasets": [
+ {
+ "label": "Scatter Dataset",
+ "data": [
+ { "x": -10, "y": 0 },
+ { "x": 0, "y": 10 },
+ { "x": 10, "y": 5 },
+ { "x": 0.5, "y": 5.5 }
+ ],
+ "backgroundColor": "rgb(255, 99, 132)"
+ }
+ ]
+ },
+ "options": {
+ "scales": {
+ "x": {
+ "type": "linear",
+ "position": "bottom"
+ }
+ }
+ }
+}
+```
+
+:::
+
+- [View Detail](<[chart.md](https://vuepress-theme-hope.github.io/v2/guide/markdown/chart.html)>)
+
+### Flowchart
+
+```flow
+cond=>condition: Process?
+process=>operation: Process
+e=>end: End
+
+cond(yes)->process->e
+cond(no)->e
+```
+
+- [View Detail](https://vuepress-theme-hope.github.io/v2/guide/markdown/flowchart.html)
+
+### Mermaid
+
+```mermaid
+flowchart TB
+ c1-->a2
+ subgraph one
+ a1-->a2
+ end
+ subgraph two
+ b1-->b2
+ end
+ subgraph three
+ c1-->c2
+ end
+ one --> two
+ three --> two
+ two --> c2
+```
+
+- [View Detail](https://vuepress-theme-hope.github.io/v2/guide/markdown/mermaid.html)
+
+### Tex
+
+$$
+\frac {\partial^r} {\partial \omega^r} \left(\frac {y^{\omega}} {\omega}\right)
+= \left(\frac {y^{\omega}} {\omega}\right) \left\{(\log y)^r + \sum_{i=1}^r \frac {(-1)^i r \cdots (r-i+1) (\log y)^{r-i}} {\omega^i} \right\}
+$$
+
+- [View Detail](https://vuepress-theme-hope.github.io/v2/guide/markdown/tex.html)
+
+### Code Demo
+
+::: demo A normal demo
+
+```html
+
VuePress Theme Hope
+Is very powerful!
+```
+
+```js
+document.querySelector("#very").addEventListener("click", () => {
+ alert("Very powerful!");
+});
+```
+
+```css
+span {
+ color: red;
+}
+```
+
+:::
+
+- [View Detail](https://vuepress-theme-hope.github.io/v2/guide/markdown/demo.html)
+
+### Presentation
+
+@slidestart
+
+## Slide 1
+
+A paragraph with some text and a [link](https://mrhope.site)
+
+---
+
+## Slide 2
+
+- Item 1
+- Item 2
+
+---
+
+## Slide 3.1
+
+```js
+const a = 1;
+```
+
+--
+
+## Slide 3.2
+
+$$
+J(\theta_0,\theta_1) = \sum_{i=0}
+$$
+
+@slideend
+
+- [View Detail](https://vuepress-theme-hope.github.io/v2/guide/markdown/presentation.html)
diff --git a/docs/en/guide/page.md b/docs/en/guide/page.md
new file mode 100644
index 0000000..90b4ae2
--- /dev/null
+++ b/docs/en/guide/page.md
@@ -0,0 +1,66 @@
+---
+# This control sidebar index
+index: 1
+# This is the icon of the page
+icon: page
+# This is the title of the article
+title: page config
+# Set author
+author: Ms.Hope
+# Set writing time
+date: 2020-01-01
+# A page can have multiple categories
+category:
+ - Guide
+# A page can have multiple tags
+tag:
+ - Page config
+ - Guide
+# this page is sticky in article list
+sticky: true
+# this page will appear in aricle channel in home page
+star: true
+# You can customize the footer
+footer: Footer content for test
+---
+
+Content before `more` comment is regarded as page excerpt.
+
+
+
+## Page information
+
+You can set page information in Markdown’s Frontmatter.
+
+- The author is set to Ms.Hope.
+
+- The writing time should be January 1, 2020
+
+- Category is "Guide"
+
+- Tags are "Page Config" and "Guide"
+
+## Page content
+
+You are free to write your Markdown here.
+
+::: tip
+
+- Please use the relative link `./` for pictures in the Markdown folder.
+
+- For pictures in `.vuepress/public` folder, please use absolute link `/` for reference
+
+:::
+
+The theme contains a custom badge:
+
+> A dark blue badge text badge at the end of line.
+
+## Page structure
+
+This page should contain:
+
+- Back to top button
+- Route navigation
+- Comments
+- Footer
diff --git a/docs/en/guide/readme.md b/docs/en/guide/readme.md
new file mode 100644
index 0000000..988f87c
--- /dev/null
+++ b/docs/en/guide/readme.md
@@ -0,0 +1,82 @@
+---
+headerDepth: 3
+---
+
+# 前言
+
+基于`javascript`的国际化方案很多,比较有名的有`fbt`、`i18next`、`react-i18next`、`vue-i18n`、`react-intl`等等,每一种解决方案均有大量的用户。为什么还要再造一个轮子?好吧,再造轮子的理由不外乎不满足于现有方案,总想着现有方案的种种不足之处,然后就撸起袖子想造一个轮子,也不想想自己什么水平。
+
+哪么到底是对现有解决方案有什么不满?最主要有三点:
+
+- 大部份均为要翻译的文本信息指定一个`key`,然后在源码文件中使用形如`$t("message.login")`之类的方式,然后在翻译时将之转换成最终的文本信息。此方式最大的问题是,在源码中必须人为地指定每一个`key`,在中文语境中,想为每一句中文均配套想一句符合语义的`英文key`是比较麻烦的,也很不直观不符合直觉。我希望在源文件中就直接使用中文,如`t("中华人民共和国万岁")`,然后国际化框架应该能自动处理后续的一系列麻烦。
+
+- 要能够比较友好地支持多库多包`monorepo`场景下的国际化协作,当主程序切换语言时,其他包或库也可以自动切换,并且在开发上每个包或库均可以独立地进行开发,集成到主程序时能无缝集成。这点在现有方案上没有找到比较理想的解决方案。
+
+- 大部份国际化框架均将中文视为二等公民,大部份情况下您应该采用英文作为第一语言,虽然这不是太大的问题,但是既然要再造一个轮子,为什么不将中文提升到一等公民呢。
+
+
+
+ 基于此就开始造出`VoerkaI18n`这个**全新的国际化多语言解决方案**,主要特性包括:
+
+# 主要特性
+
+- 全面工程化解决方案,提供初始化、提取文本、自动翻译、编译等工具链支持。
+
+- 符合直觉,不需要手动定义文本`Key`映射。
+
+- 强大的插值变量`格式化器`机制,可以扩展出强大的多语言特性。
+
+- 支持`babel`插件自动导入`t`翻译函数。
+
+- 支持`nodejs`、浏览器(`vue`/`react`)前端环境。
+
+- 采用`工具链`与`运行时`分开设计,发布时只需要集成很小的运行时。
+
+- 高度可扩展的`复数`、`货币`、`数字`等常用的多语言处理机制。
+
+- 翻译过程内,提取文本可以自动进行同步,并保留已翻译的内容。
+
+- 可以随时添加支持的语言
+
+- 支持调用在线自动翻译对提取文本进行翻译。
+
+
+# 安装
+
+`VoerkaI18n`国际化框架是一个开源多包工程,主要由以下几个包组成:
+
+- **@voerkai18/cli**
+
+ 包含文本提取/编译等命令行工具,一般应该安装到全局。
+
+ ```javascript
+ npm install --g @voerkai18/cli
+ yarn global add @voerkai18/cli
+ pnpm add -g @voerkai18/cli
+ ```
+
+- **@voerkai18/runtime**
+
+ **可选的**,运行时,`@voerkai18/cli`的依赖。大部分情况下不需要手动安装,一般仅在开发库项目时采用独立的运行时依赖。
+
+ ```javascript
+ npm install --save @voerkai18/runtime
+ yarn add @voerkai18/runtime
+ pnpm add @voerkai18/runtime
+ ```
+
+- **@voerkai18/formatters**
+
+ **可选的**,一些额外的格式化器,可以按需进行安装到`dependencies`中,用来扩展翻译时对插值变量的额外处理。
+
+- **@voerkai18/babel**
+
+ 可选的`babel`插件,用来实现自动导入翻译函数和翻译文本映射自动替换。
+
+- **@voerkai18/vue**
+
+ 可选的`vue`插件,用来为Vue应用提供语言动态切换功能。
+
+- **@voerkai18/vite**
+
+ 可选的`vite`插件,用来为`vite`应用提供自动导入翻译函数和翻译文本映射自动替换。
diff --git a/docs/readme.md b/docs/readme.md
new file mode 100644
index 0000000..8e3ae11
--- /dev/null
+++ b/docs/readme.md
@@ -0,0 +1,60 @@
+---
+home: true
+icon: home
+title: 主页
+heroImage: /logo.svg
+heroText: VoerkaI18n
+tagline: 适用于Nodejs/Vue/React的国际化解决方案
+actions:
+ - text: 快速入门
+ link: /zh/guide/intro/get-started
+
+ - text: 源码
+ link: https://gitee.com/zhangfisher/voerka-i18n
+ type: secondary
+
+features:
+ - title: 工程化支持
+ icon: markdown
+ details: 从文本提取/自动翻译/编译/动态切换的全流程工程化支持,适用于大型项目
+ link:
+
+ - title: 集成自动翻译
+ icon: slides
+ details: 调用在线翻译服务API支持对提取的文本进行自动翻译,大幅度提高工程效率
+ link:
+
+ - title: 符合直觉
+ icon: layout
+ details: 在源码中直接使用符合直觉的翻译形式,不需要绞尽脑汁想种种key
+ link:
+
+ - title: 自动提取文本
+ icon: comment
+ details: 提供扫描提取工具对源码文件中需要翻译的文本进行提取
+ link:
+
+ - title: 适用性
+ icon: info
+ details: 支持任意Javascript应用,包括Nodejs/Vue/React/ReactNative等。
+ link:
+
+ - title: 多库协作
+ icon: blog
+ details: 支持monorepo工程下多库进行语言切换的联动机制
+ link:
+
+ - title: 自动扩展工具
+ icon: palette
+ details: 提供Vue/React/Babel等扩展插件,简化各种应用下
+ link:
+
+ - title: 扩展特性
+ icon: contrast
+ details: 强大的插值变量机制,能扩展支持复数、日期、货币等灵活强大的多语言机制
+ link:
+
+
+footer: MIT Licensed | Copyright © 2022-present wxzhang
+---
+
\ No newline at end of file
diff --git a/docs/zh/contribute/readme.md b/docs/zh/contribute/readme.md
new file mode 100644
index 0000000..12ec3d6
--- /dev/null
+++ b/docs/zh/contribute/readme.md
@@ -0,0 +1,73 @@
+---
+sidebar: heading
+---
+
+# 源码贡献
+
+`voerkai18n`是开源项目,欢迎大家贡献源码。
+
+## 获取源码
+
+`voerkai18n`在Github和[Gitee](https://gitee.com/zhangfisher/voerka-i18n)上面开源。
+
+### 拉取源码
+
+```shell
+git clone https://gitee.com/zhangfisher/voerka-i18n
+```
+
+### 安装依赖
+
+`voerkai18n`是一个`monorepo`多包工程,使用`pnpm`作为包管理器。所以首先需要安装`pnpm`。
+
+```javascript
+> npm install -g pnpm
+```
+
+然后再使用`pnpm install`
+
+## 源码结构
+
+```javascript
+voerkai18n
+ packages
+ autopublish // 自动发布工具,仅用于开发阶段
+ babel // @voerkai18n/babel插件
+ cli // @voerkai18n/cli命令行工具
+ formatters // @voerkai18n/formatters通用的格式化器
+ react // @voerkai18n/react
+ runtime // @voerkai18n/runtime
+ utils // @voerkai18n/utils工具库
+ vite // @voerkai18n/vite插件
+ vue // @voerkai18n/vue插件
+ apps // 测试应用
+ test // 单元测试用例
+ docs // 文档网站Vuepress
+ readme.md
+```
+
+## 工作原理
+
+
+
+## 开发格式化器
+
+
+
+## 单元测试
+
+
+
+## 文档
+
+
+
+
+## 发布
+
+
+
+
+
+
+
diff --git a/docs/zh/guide/advanced/autoimport.md b/docs/zh/guide/advanced/autoimport.md
new file mode 100644
index 0000000..c0d3252
--- /dev/null
+++ b/docs/zh/guide/advanced/autoimport.md
@@ -0,0 +1,25 @@
+# 自动导入翻译函数
+
+使用`voerkai18 compile`后,要进行翻译时需要从`./languages`导入`t`翻译函数。
+
+```javascript
+import { t } from "./languages"
+```
+
+由于默认情况下,`voerkai18 compile`命令会在当前工程的`/languages`文件夹下,这样我们为了导入`t`翻译函数不得不使用各种相对引用,这即容易出错,又不美观,如下:
+
+```javascript
+import { t } from "./languages"
+import { t } from "../languages"
+import { t } from "../../languages"
+import { t } from "../../../languages"
+```
+
+作为国际化解决方案,一般工程的大部份源码中均会使用到翻译函数,这种使用体验比较差。
+
+为此,我们提供了一个几个插件可以来自动完成翻译函数的自动引入,包括:
+
+- `babel`插件
+- `vite`插件
+
+关于插件如何使用请参阅文档。
\ No newline at end of file
diff --git a/docs/zh/guide/advanced/autotranslate.md b/docs/zh/guide/advanced/autotranslate.md
new file mode 100644
index 0000000..447c580
--- /dev/null
+++ b/docs/zh/guide/advanced/autotranslate.md
@@ -0,0 +1,9 @@
+# 自动翻译
+
+传统的国际化解决方案均是需要手工进行翻译的,`voerkai18n`解决方案支持调用在线翻译服务进行自动翻译。
+
+- 内置的`voerkai18n translate`命令能调用在线翻译服务完成对提取的文本的自动翻译。
+
+- 目前支持访问百度在线API进行自动翻译。百度提供了免费的在线API,虽然只支持`QPS=1`,即每秒调用一次。但是`voerkai18n translate`命令会对要翻译的文本进行合并后再调用,因此大部分情况下,均足够使用了。
+
+`voerkai18n translate`命令的使用请参阅扩展文档。
diff --git a/docs/zh/guide/advanced/customformatter.md b/docs/zh/guide/advanced/customformatter.md
new file mode 100644
index 0000000..b3be29b
--- /dev/null
+++ b/docs/zh/guide/advanced/customformatter.md
@@ -0,0 +1,197 @@
+# 自定义格式化器
+
+
+当我们使用`voerkai18n compile`编译后,会生成`languages/formatters.js`文件,可以在该文件中自定义您自己的格式化器。
+
+`formatters.js`文件内容如下:
+
+```javascript
+module.exports = {
+ // 在所有语言下生效的格式化器
+ "*":{
+ //[格式化名称]:(value)=>{...},
+ //[格式化名称]:(value,arg)=>{...},
+ },
+ // 在所有语言下只作用于特定数据类型的格式化器
+ $types:{
+ // [数据类型名称]:(value)=>{...},
+ // [数据类型名称]:(value)=>{...},
+ },
+ zh:{
+ $types:{
+ // 所有类型的默认格式化器
+ "*":{
+ },
+ Date:{},
+ Number:{},
+ Boolean:{ },
+ String:{},
+ Array:{
+
+ },
+ Object:{
+
+ }
+ },
+ [格式化名称]:(value)=>{.....},
+ //.....
+ },
+ en:{
+ $types:{
+ // [数据类型名称]:(value)=>{...},
+ },
+ [格式化名称]:(value)=>{.....},
+ //.....更多的格式化器.....
+ }
+}
+```
+
+## 格式化器函数
+
+**每一个格式化器就是一个普通的同步函数**,不支持异步函数,格式化器函数可以支持无参数或有参数。
+
+- 无参数的格式化器:`(value)=>{....返回格式化的结果...}`。
+
+- 带参数的格式化器:`(value,arg1,...)=>{....返回格式化的结果...}`,其中`value`是上一个格式化器的输出结果。
+
+## 类型格式化器
+
+可以为每一种数据类型指定一个默认的格式化器,支持对`String`、`Date`、`Error`、`Object`、`Array`、`Boolean`、`Number`等数据类型的格式化。
+
+当插值变量传入时,如果有定义了对应的的类型格式化器,会默认调用该格式化器对数据进行转换。
+
+比如我们定义对`Boolean`类型格式化器,
+
+```javascript
+//formatters.js
+
+module.exports = {
+ // 在所有语言下只作用于特定数据类型的格式化器
+ $types:{
+ Boolean:(value)=> value ? "ON" : "OFF"
+ }
+}
+t("灯状态:{status}",true) // === 灯状态:ON
+t("灯状态:{status}",false) // === 灯状态:OFF
+```
+
+在上例中,如果我们想在不同的语言环境下,翻译为不同的显示文本,则可以为不同的语言指定类型格式化器
+
+```javascript
+//formatters.js
+module.exports = {
+ zh:{
+ $types:{
+ Boolean:(value)=> value ? "开" : "关"
+ }
+ },
+ en:{
+ $types:{
+ Boolean:(value)=> value ? "ON" : "OFF"
+ }
+ }
+}
+// 当切换到中文时
+t("灯状态:{status}",true) // === 灯状态:开
+t("灯状态:{status}",false) // === 灯状态:关
+// 当切换到英文时
+t("灯状态:{status}",true) // === 灯状态:ON
+t("灯状态:{status}",false) // === 灯状态:OFF
+```
+
+**说明:**
+
+- 完整的类型格式化器定义形式
+
+ ```javascript
+ module.exports = {
+ "*":{
+ $types:{...}
+ },
+ zh:{
+ $types:{...}
+ },
+ en:{
+ $types:{....}
+ }
+ }
+ ```
+
+ 在匹配应用格式化时会先在当前语言的`$types`中查找匹配的格式化器,如果找不到再上`*.$types`中查找。
+
+- `*.$types`代表当所有语言中均没有定义时才匹配的类型格式化。
+
+- 类型格式化器是**默认执行的,不需要指定名称**。
+
+- 当前作用域的格式化器优先于全局的格式化器。
+
+## 通用的格式化器
+
+类型格式化器只针对特定数据类型,并且会默认调用。而通用的格式化器需要使用`|`管道符进行显式调用。
+
+同样的,通用的格式化器定义在`languages/formatters.js`中。
+
+```javascript
+module.exports = {
+ "*":{
+ $types:{...},
+ [格式化名称]:(value)=>{.....},
+ },
+ zh:{
+ $types:{...},
+ [格式化名称]:(value)=>{.....},
+ },
+ en:{
+ $types:{....},
+ [格式化名称]:(value)=>{.....},
+ [格式化名称]:(value,arg)=>{.....},
+ }
+}
+```
+
+每一个格式化器均需要指定一个名称,在进行插值替换时会优先依据当前语言来匹配查找格式化器,如果找不到,再到键名为`*`中查找。
+
+```javascript
+module.exports = {
+ "*":{
+ uppercase:(value)=>value
+ },
+ zh:{
+ uppercase:(value)=>["一","二","三","四","五","六","七","八","九","十"][value-1]
+ },
+ en:{
+ uppercase:(value)=>["One","Two","Three","Four","Five","Six","seven","eight","nine","ten"][value-1]
+ },
+ jp:{
+
+ }
+}
+// 当切换到中文时
+t("{value | uppercase}",1) // == 一
+t("{value | uppercase}",2) // == 二
+t("{value | uppercase}",3) // == 三
+// 当切换到英文时
+t("{value | uppercase}",1) // == One
+t("{value | uppercase}",2) // == Two
+t("{value | uppercase}",3) // == Three
+// 当切换到日文时,由于在该语言下没有定义uppercase格式式,因此到*中查找
+t("{value | uppercase}",1) // == 1
+t("{value | uppercase}",2) // == 2
+t("{value | uppercase}",3) // == 3
+```
+
+## 作用域格式化器
+
+定义在`languages/formatters.js`里面的格式化器仅在当前工程生效,也就是仅在当前作用域生效。一般由应用开发者自行扩展。
+
+## 全局格式化器
+
+定义在`@voerkai18n/runtime`里面的格式化器则全局有效,在所有场合均可以使用,但是其优先级低于作用域内的同名格式化器。
+
+目前内置的全局格式化器请参阅API参考
+
+## 扩展格式化器
+
+除了可以在当前项目`languages/formatters.js`自定义格式化器和`@voerkai18n/runtime`里面的全局格式化器外,单列了`@voerkai18n/formatters`项目用来包含了更多的格式化器。
+
+作为开源项目,欢迎大家提交贡献更多的格式化器。
diff --git a/docs/zh/guide/advanced/langpack.md b/docs/zh/guide/advanced/langpack.md
new file mode 100644
index 0000000..473613e
--- /dev/null
+++ b/docs/zh/guide/advanced/langpack.md
@@ -0,0 +1,22 @@
+# 语言包
+
+当使用`webpack`、`rollup`、`esbuild`进行项目打包时,默认语言包采用静态加载,会被打包进行源码中,而其他语言则采用异步打包方式。在`languages/index.js`中。
+
+```javascript
+const defaultMessages = require("./zh.js")
+const activeMessages = defaultMessages
+
+// 语言作用域
+const scope = new i18nScope({
+ default: defaultMessages, // 默认语言包
+ messages : activeMessages, // 当前语言包
+ ....
+ // 以下为每一种语言生成一个异步打包语句
+ loaders:{
+ "en" : ()=>import("./en.js")
+ "de" : ()=>import("./de.js")
+ "jp" : ()=>import("./jp.js")
+ })
+```
+
+利用异步打包机制,从而避免将多个语言静态打包到源码包。
\ No newline at end of file
diff --git a/docs/zh/guide/advanced/multi-libs.md b/docs/zh/guide/advanced/multi-libs.md
new file mode 100644
index 0000000..8dbb7ae
--- /dev/null
+++ b/docs/zh/guide/advanced/multi-libs.md
@@ -0,0 +1,14 @@
+# 多库联动
+
+`voerkai18n `支持多个库国际化的联动和协作,即**当主程序切换语言时,所有引用依赖库也会跟随主程序进行语言切换**,整个切换过程对所有库开发都是透明的。
+
+
+
+当我们在开发一个应用或者库并`import "./languages"`时,在`langauges/index.js`进行了如下处理:
+
+- 创建一个`i18nScope`作用域实例
+- 检测当前应用环境下是否具有全局单例`VoerkaI18n`
+ - 如果存在`VoerkaI18n`全局单例,则会将当前`i18nScope`实例注册到`VoerkaI18n.scopes`中
+ - 如果不存在`VoerkaI18n`全局单例,则使用当前`i18nScope`实例的参数来创建一个`VoerkaI18n`全局单例。
+- 在每个应用与库中均可以使用`import { t } from ".langauges`导入本工程的`t`翻译函数,该`t`翻译函数被绑定当前`i18nScope`作用域实例,因此翻译时就只会使用到本工程的文本。这样就割离了不同工程和库之间的翻译。
+- 由于所有引用的`i18nScope`均注册到了全局单例`VoerkaI18n`,当切换语言时,`VoerkaI18n`会刷新切换所有注册的`i18nScope`,这样就实现了各个`i18nScope`即独立,又可以联动语言切换。
diff --git a/docs/zh/guide/advanced/runtime.md b/docs/zh/guide/advanced/runtime.md
new file mode 100644
index 0000000..a0fb5b4
--- /dev/null
+++ b/docs/zh/guide/advanced/runtime.md
@@ -0,0 +1,37 @@
+# 运行时
+
+`@voerkai18n/runtime`是`voerkai18n`的运行时依赖,支持两种依赖方式。
+
+## 源码依赖
+
+ 默认情况下,运行`voerkai18n compile`时会在`languages`文件下生成运行时文件`runtime.js`,该文件被`languages/index.js`引入,里面是核心运行时`ES6`源代码(`@voerkai18n/runtime`源码),也就是在您的工程中是直接引入的运行时代码,因此就不需要额外安装`@voerkai18n/runtime`了。
+
+ 此时,`@voerkai18n/runtime`源码就成为您工程是一部分。
+
+## 库依赖
+
+ 当运行`voerkai18n compile --no-inline-runtime`时,就不会生成运行时文件`runtime.js`,而是采用`import "@voerkai18n/runtime`的方式导入运行时,此时会自动/手动安装`@voerkai18n/runtime`到运行依赖中。
+
+
+## 如何选择
+
+**那么应该选择`源码依赖`还是`库依赖`呢?**
+
+问题的重点在于,在`monorepo`工程或者`开发库`时,`源码依赖`会导致存在重复的运行时源码。而采用`库依赖`,则不存在此问题。因此:
+
+- 普通应用采用`源码依赖`方式,运行`voerkai18n compile `来编译语言包。
+- `monorepo`工程或者`开发库`采用`库依赖`,`voerkai18n compile --no-inline-runtime`来编译语言包。
+
+
+
+## 注意
+
+- `@voerkai18n/runtime`发布了`commonjs`和`esm`两个经过`babel/rollup`转码后的`ES5`版本。
+
+- 每次运行`voerkai18n compile`时均会重新生成`runtime.js`源码文件,为了确保最新的运行时,请及时更新`@voerkai18n/cli`
+
+- 当升级了`@voerkai18n/runtime`后,需要重新运行`voerkai18n compile`以重新生成`runtime.js`文件。
+
+
+
+
diff --git a/docs/zh/guide/advanced/textMap.md b/docs/zh/guide/advanced/textMap.md
new file mode 100644
index 0000000..6ae4e49
--- /dev/null
+++ b/docs/zh/guide/advanced/textMap.md
@@ -0,0 +1,45 @@
+# 文本映射
+
+虽然`VoerkaI18n`推荐采用`t("中华人民共和国万岁")`形式的符合直觉的翻译形式,而不是采用`t("xxxx.xxx")`这样不符合直觉的形式,但是为什么大部份的国际化方案均采用`t("xxxx.xxx")`形式?
+
+在我们的方案中,t("中华人民共和国万岁")形式相当于采用原始文本进行查表,语言名形式如下:
+
+```javascript
+// en.js
+{
+ "中华人民共和国":"the people's Republic of China"
+}
+// jp.js
+{
+ "中华人民共和国":"中華人民共和国"
+}
+```
+
+很显然,直接使用文本内容作为`key`,虽然符合直觉,但是会造成大量的冗余信息。因此,`voerkai18n compile`会将之编译成如下:
+
+```javascript
+//idMap.js
+{
+ "1":"中华人民共和国万岁"
+}
+// en.js
+{
+ "1":"Long live the people's Republic of China"
+}
+// jp.js
+{
+ "2":"中華人民共和国"
+}
+```
+
+如此,就消除了在`en.js`、`jp.js`文件中的冗余。但是在源代码文件中还存在`t("中华人民共和国万岁")`,整个运行环境中存在两份副本,一份在源代码文件中,一份在`idMap.js`中。
+
+为了进一步减少重复内容,因此,我们需要将源代码文件中的`t("中华人民共和国万岁")`更改为`t("1")`,这样就能确保无重复冗余。但是,很显然,我们不可能手动来更改源代码文件,这就需要由`voerkai18n`提供的一个编译区插件来做这一件事了。
+
+以`babel-plugin-voerkai18n`插件为例,该插件同时还完成一份任务,就是自动读取`voerkai18n compile`生成的`idMap.js`文件,然后将`t("中华人民共和国万岁")`自动更改为`t("1")`,这样就完全消除了重复冗余信息。
+
+所以,在最终形成的代码中,实际上每一个t函数均是`t("1")`、`t("2")`、`t("3")`、`...`、`t("n")`的形式,最终代码还是采用了用`key`来进行转换,只不过这个过程是自动完成的而已。
+
+**注意:**
+
+- 如果没有启用`babel-plugin-voerkai18n`或`vite`等编译区插件,还是可以正常工作,但是会有一份默认语言的冗余信息存在。
\ No newline at end of file
diff --git a/docs/zh/guide/intro/get-started.md b/docs/zh/guide/intro/get-started.md
new file mode 100644
index 0000000..7796c7a
--- /dev/null
+++ b/docs/zh/guide/intro/get-started.md
@@ -0,0 +1,223 @@
+---
+title: 快速入门
+---
+
+
+# 快速入门
+
+
+本节以标准的`Nodejs`应用程序为例,简要介绍`VoerkaI18n`国际化框架的基本使用。其他`vue`或`react`应用的使用也基本相同。
+
+```shell
+myapp
+ |--package.json
+ |--index.js
+```
+
+在本项目的所有支持的源码文件中均可以使用`t`函数对要翻译的文本进行包装,简单而粗暴。
+
+```javascript
+// index.js
+console.log(t("中华人民共和国万岁"))
+console.log(t("中华人民共和国成立于{}",1949))
+```
+
+`t`翻译函数是从`myapp/languages/index.js`文件导出的翻译函数,但是现在`myapp/languages`还不存在,后续会使用工具自动生成。`voerkai18n`后续会使用正则表达式对提取要翻译的文本。
+
+## 第一步:安装命令行工具
+
+```shell
+> npm install -g @voerkai18n/cli
+> yarn global add @voerkai18n/cli
+>pnpm add -g @voerkai18/cli
+```
+
+## 第二步:初始化工程
+
+在工程目录中运行`voerkai18n init`命令进行初始化。
+
+```javascript
+> voerkai18n init
+```
+
+上述命令会在当前工程目录下创建`languages/settings.json`文件。如果您的源代码在`src`子文件夹中,则会创建在`src/languages/settings.json`
+
+`settings.json`内容如下:
+
+```json
+{
+ "languages": [
+ {
+ "name": "zh",
+ "title": "zh"
+ },
+ {
+ "name": "en",
+ "title": "en"
+ }
+ ],
+ "defaultLanguage": "zh",
+ "activeLanguage": "zh",
+ "namespaces": {}
+}
+```
+
+上述命令代表了:
+
+- 本项目拟支持`中文`和`英文`两种语言。
+- 默认语言是`中文`(即在源代码中直接使用中文)
+- 激活语言是`中文`
+
+**注意:**
+
+- `voerkai18n init`是可选的,`voerkai18n extract`也可以实现相同的功能。
+- 一般情况下,您可以手工修改`settings.json`,如定义名称空间。
+
+## 第三步:提取文本
+
+接下来我们使用`voerkai18n extract`命令来自动扫描工程源码文件中的需要的翻译的文本信息。
+
+```shell
+myapp>voerkai18n extract
+```
+
+执行`voerkai18n extract`命令后,就会在`myapp/languages`通过生成`translates/default.json`、`settings.json`等相关文件。
+
+- **translates/default.json** : 该文件就是需要进行翻译的文本信息。
+
+- **settings.json**: 语言环境的基本配置信息,可以进行修改。
+
+最后文件结构如下:
+
+```shell
+myapp
+ |-- languages
+ |-- settings.json // 语言配置文件
+ |-- translates // 此文件夹是所有需要翻译的内容
+ |-- default.json // 默认名称空间内容
+ |-- package.json
+ |-- index.js
+
+```
+
+**如果略过第一步中的`voerkai18n init`,也可以使用以下命令来为创建和更新`settinbgs.json`**
+
+```javascript
+myapp>voerkai18n extract -D -lngs zh en de jp -d zh -a zh
+```
+
+以上命令代表:
+
+- 扫描当前文件夹下所有源码文件,默认是`js`、`jsx`、`html`、`vue`文件类型。
+- 计划支持`zh`、`en`、`de`、`jp`四种语言
+- 默认语言是中文。(指在源码文件中我们直接使用中文即可)
+- 激活语言是中文(即默认切换到中文)
+- `-D`代表显示扫描调试信息
+
+## 第四步:翻译文本
+
+接下来就可以分别对`language/translates`文件夹下的所有`JSON`文件进行翻译了。每个`JSON`文件大概如下:
+
+```json
+{
+ "中华人民共和国万岁":{
+ "en":"<在此编写对应的英文翻译内容>",
+ "de":"<在此编写对应的德文翻译内容>"
+ "jp":"<在此编写对应的日文翻译内容>",
+ "$files":["index.js"] // 记录了该信息是从哪几个文件中提取的
+ },
+ "中华人民共和国成立于{}":{
+ "en":"<在此编写对应的英文翻译内容>",
+ "de":"<在此编写对应的德文翻译内容>"
+ "jp":"<在此编写对应的日文翻译内容>",
+ "$files":["index.js"]
+ }
+}
+```
+
+我们只需要修改该文件翻译对应的语言即可。
+
+**重点:如果翻译期间对源文件进行了修改,则只需要重新执行一下`voerkai18n extract`命令,该命令会进行以下操作:**
+
+- 如果文本内容在源代码中已经删除了,则会自动从翻译清单中删除。
+- 如果文本内容在源代码中已修改了,则会视为新增加的内容。
+- 如果文本内容已经翻译了一部份了,则会保留已翻译的内容。
+
+因此,反复执行`voerkai18n extract`命令是安全的,不会导致进行了一半的翻译内容丢失,可以放心执行。
+
+大部分国际化解决方案至此就需要交给人工进行翻译了,但是`voerkai18n`除了手动翻译外,通过`voerkai18n translate`命令来实现**调用在线翻译服务**进行自动翻译。
+
+```javascript
+>voerkai18n translate --provider baidu --appkey <在百度翻译上申请的密钥> --appid <在百度翻译上申请的appid>
+```
+
+ 在项目文件夹下执行上面的语句,将会自动调用百度的在线翻译API进行翻译,以现在的翻译水平而言,您只需要进行少量的微调即可。关于`voerkai18n translate`命令的使用请查阅后续介绍。
+
+## 第五步:编译语言包
+
+当我们完成`myapp/languages/translates`下的所有`JSON语言文件`的翻译后(如果配置了名称空间后,每一个名称空间会对应生成一个文件,详见后续`名称空间`介绍),接下来需要对翻译后的文件进行编译。
+
+```shell
+myapp> voerkai18n compile
+```
+
+`compile`命令根据`myapp/languages/translates/*.json`和`myapp/languages/settings.json`文件编译生成以下文件:
+
+```javascript
+ |-- languages
+ |-- settings.json // 语言配置文件
+ |-- idMap.js // 文本信息id映射表
+ |-- runtime.js // 运行时源码
+ |-- index.js // 包含该应用作用域下的翻译函数等
+ |-- zh.js // 语言包
+ |-- en.js
+ |-- jp.js
+ |-- de.js
+ |-- translates // 此文件夹包含了所有需要翻译的内容
+ |-- default.json
+ |-- package.json
+ |-- index.js
+
+```
+
+## 第六步:导入翻译函数
+
+第一步中我们在源文件中直接使用了`t`翻译函数包装要翻译的文本信息,该`t`翻译函数就是在编译环节自动生成并声明在`myapp/languages/index.js`中的。
+
+```javascript
+import { t } from "./languages"
+```
+
+因此,我们需要在需要进行翻译时导入该函数即可。
+
+但是如果源码文件很多,重次重复导入`t`函数也是比较麻烦的,所以我们也提供了一个`babel/vite`等插件来自动导入`t`函数。
+
+## 第六步:切换语言
+
+当需要切换语言时,可以通过调用`change`方法来切换语言。
+
+```javascript
+import { i18nScope } from "./languages"
+
+// 切换到英文
+await i18nScope.change("en")
+// VoerkaI18n是一个全局单例,可以直接访问
+await VoerkaI18n.change("en")
+```
+
+`i18nScope.change`与`VoerkaI18n.change`两者是等价的。
+
+一般可能也需要在语言切换后进行界面更新渲染,可以订阅事件来响应语言切换。
+
+```javascript
+import { i18nScope } from "./languages"
+
+// 切换到英文
+i18nScope.on((newLanguage)=>{
+ ...
+})
+//
+VoerkaI18n.on((newLanguage)=>{
+ ...
+})
+```
diff --git a/docs/zh/guide/intro/history.md b/docs/zh/guide/intro/history.md
new file mode 100644
index 0000000..29ff8e2
--- /dev/null
+++ b/docs/zh/guide/intro/history.md
@@ -0,0 +1,3 @@
+---
+title: 版本历史
+---
\ No newline at end of file
diff --git a/docs/zh/guide/intro/install.md b/docs/zh/guide/intro/install.md
new file mode 100644
index 0000000..e1df446
--- /dev/null
+++ b/docs/zh/guide/intro/install.md
@@ -0,0 +1,43 @@
+---
+title: 安装
+---
+
+# 安装
+
+`VoerkaI18n`国际化框架是一个开源多包工程,主要由以下几个包组成:
+
+## **@voerkai18/cli**
+
+包含文本提取/编译等命令行工具,一般应该安装到全局。
+
+```javascript
+npm install --g @voerkai18/cli
+yarn global add @voerkai18/cli
+pnpm add -g @voerkai18/cli
+```
+
+## **@voerkai18/runtime**
+
+**可选的**,运行时,`@voerkai18/cli`的依赖。大部分情况下不需要手动安装,一般仅在开发库项目时采用独立的运行时依赖。
+
+```javascript
+npm install --save @voerkai18/runtime
+yarn add @voerkai18/runtime
+pnpm add @voerkai18/runtime
+```
+
+## **@voerkai18/formatters**
+
+**可选的**,一些额外的格式化器,可以按需进行安装到`dependencies`中,用来扩展翻译时对插值变量的额外处理。
+
+## **@voerkai18/babel**
+
+可选的`babel`插件,用来实现自动导入翻译函数和翻译文本映射自动替换。
+
+## **@voerkai18/vue**
+
+可选的`vue`插件,用来为Vue应用提供语言动态切换功能。
+
+## **@voerkai18/vite**
+
+可选的`vite`插件,用来为`vite`应用提供自动导入翻译函数和翻译文本映射自动替换。
diff --git a/docs/zh/guide/intro/question.md b/docs/zh/guide/intro/question.md
new file mode 100644
index 0000000..4737654
--- /dev/null
+++ b/docs/zh/guide/intro/question.md
@@ -0,0 +1,3 @@
+---
+title: 常见问题
+---
\ No newline at end of file
diff --git a/docs/zh/guide/intro/readme.md b/docs/zh/guide/intro/readme.md
new file mode 100644
index 0000000..fb98e2b
--- /dev/null
+++ b/docs/zh/guide/intro/readme.md
@@ -0,0 +1,38 @@
+# 概述
+
+基于`javascript`的国际化方案很多,比较有名的有`fbt`、`i18next`、`react-i18next`、`vue-i18n`、`react-intl`等等,每一种解决方案均有大量的用户。为什么还要再造一个轮子?好吧,再造轮子的理由不外乎不满足于现有方案,总想着现有方案的种种不足之处,然后就撸起袖子想造一个轮子,也不想想自己什么水平。
+
+哪么到底是对现有解决方案有什么不满?最主要有三点:
+
+- 大部份均为要翻译的文本信息指定一个`key`,然后在源码文件中使用形如`$t("message.login")`之类的方式,然后在翻译时将之转换成最终的文本信息。此方式最大的问题是,在源码中必须人为地指定每一个`key`,在中文语境中,想为每一句中文均配套想一句符合语义的`英文key`是比较麻烦的,也很不直观不符合直觉。我希望在源文件中就直接使用中文,如`t("中华人民共和国万岁")`,然后国际化框架应该能自动处理后续的一系列麻烦。
+
+- 要能够比较友好地支持多库多包`monorepo`场景下的国际化协作,当主程序切换语言时,其他包或库也可以自动切换,并且在开发上每个包或库均可以独立地进行开发,集成到主程序时能无缝集成。这点在现有方案上没有找到比较理想的解决方案。
+
+- 大部份国际化框架均将中文视为二等公民,大部份情况下您应该采用英文作为第一语言,虽然这不是太大的问题,但是既然要再造一个轮子,为什么不将中文提升到一等公民呢。
+
+
+
+ 基于此就开始造出`VoerkaI18n`这个**全新的国际化多语言解决方案**,主要特性包括:
+
+
+
+- 全面工程化解决方案,提供初始化、提取文本、自动翻译、编译等工具链支持。
+
+- 符合直觉,不需要手动定义文本`Key`映射。
+
+- 强大的插值变量`格式化器`机制,可以扩展出强大的多语言特性。
+
+- 支持`babel`插件自动导入`t`翻译函数。
+
+- 支持`nodejs`、浏览器(`vue`/`react`)前端环境。
+
+- 采用`工具链`与`运行时`分开设计,发布时只需要集成很小的运行时。
+
+- 高度可扩展的`复数`、`货币`、`数字`等常用的多语言处理机制。
+
+- 翻译过程内,提取文本可以自动进行同步,并保留已翻译的内容。
+
+- 可以随时添加支持的语言
+
+- 支持调用在线自动翻译对提取文本进行翻译。
+
diff --git a/docs/zh/guide/tools/babel.md b/docs/zh/guide/tools/babel.md
new file mode 100644
index 0000000..5780af9
--- /dev/null
+++ b/docs/zh/guide/tools/babel.md
@@ -0,0 +1,73 @@
+# Babel插件
+
+全局安装`@voerkai18n/babel`插件用来进行自动导入`t`函数和自动文本映射。
+
+## 安装
+
+```javascript
+> npm install -g @voerkai18n/babel
+> yarn global add @voerkai18n/babel
+> pnpm add -g @voerkai18n/babel
+```
+
+## 启用插件
+
+使用方法如下:
+
+- 在`babel.config.js`中配置插件
+
+```javascript
+const i18nPlugin = require("@voerkai18n/babel")
+module.expors = {
+ plugins: [
+ [
+ i18nPlugin,
+ {
+ // 可选,指定语言文件存放的目录,即保存编译后的语言文件的文件夹
+ // 可以指定相对路径,也可以指定绝对路径
+ // location:"",
+ autoImport:"#/languages"
+ }
+ ]
+ ]
+}
+```
+
+这样,当在进行`babel`转码时,就会自动在`js`源码文件中导入`t`翻译函数。
+
+## 插件参数
+
+插件支持以下参数:
+
+- **location**
+
+ 配置`langauges`文件夹位置,默认会使用当前文件夹下的`languages`文件。
+
+ 因此,如果你的`babel.config.js`在项目根文件夹,而`languages`文件夹位于`src/languages`,则可以将`location="src/languages"`,这样插件会自动从该文件夹读取需要的数据。
+
+- **autoImport**
+
+ 用来配置导入的路径。比如 `autoImport="#/languages" `,则当在babel转码时,如果插件检测到t函数的存在并没有导入,就会自动在该源码中自动导入`import { t } from "#/languages"`
+
+ 配置`autoImport`时需要注意的是,为了提供一致的导入路径,视所使用的打包工具或转码插件,如`webpack`、`rollup`等。比如使用`babel-plugin-module-resolver`
+
+ ```javascript
+ module.expors = {
+ plugins: [
+ [
+ "module-resolver",
+ {
+ root:"./",
+ alias:{
+ "languages":"./src/languages"
+ }
+ }
+ ]
+ ]
+ }
+ ```
+
+ 这样配置`autoImport="languages"`,则自动导入`import { t } from "languages"`。
+
+ 如`webpack`、`rollup`等打包工具也有类似的插件可以实现别名等转换,其目的就是让`@voerkai18n/babel`插件能自动导入固定路径,而不是各种复杂的相对路径。
+
\ No newline at end of file
diff --git a/docs/zh/guide/tools/cli.md b/docs/zh/guide/tools/cli.md
new file mode 100644
index 0000000..f13f139
--- /dev/null
+++ b/docs/zh/guide/tools/cli.md
@@ -0,0 +1,251 @@
+# 命令行工具
+
+`@voerkai18n/cli`命令行工具用来实现工程初始化、扫描提取文本、自动翻译和编译语言等功能。
+
+::: info
+建议将`@voerkai18n/cli`命令行工具安装在全局
+:::
+
+## 安装
+
+全局安装`@voerkai18n/cli`工具。
+
+```javascript
+> npm install -g @voerkai18n/cli
+> yarn global add @voerkai18n/cli
+> pnpm add -g @voerkai18n/cli
+```
+
+然后就可以执行:
+
+```javascript
+> voerkai18n init
+> voerkai18n extract
+> voerkai18n compile
+```
+
+如果没有全局安装,则需要:
+
+```javascript
+> yarn voerkai18n init
+> yarn voerkai18n extract
+> yarn voerkai18n compile
+---
+> pnpm voerkai18n init
+> pnpm voerkai18n extract
+> pnpm voerkai18n compile
+```
+
+## 初始化 - init
+
+用于在指定项目创建`voerkai18n`国际化配置文件。
+
+```shell
+> voerkai18n init --help
+初始化项目国际化配置
+Arguments:
+ location 工程项目所在目录
+Options:
+ -D, --debug 输出调试信息
+ -r, --reset 重新生成当前项目的语言配置
+ -lngs, --languages 支持的语言列表 (default: ["zh","en"])
+ -d, --defaultLanguage 默认语言
+ -a, --activeLanguage 激活语言
+ -h, --help display help for command
+```
+
+**使用方法如下:**
+
+首先需要在工程文件下运行`voerkai18n init`命令对当前工程进行初始化。
+
+```javascript
+//- `lngs`参数用来指定拟支持的语言名称列表
+> voerkai18n init . -lngs zh en jp de -d zh
+```
+
+运行`voerkai18n init`命令后,会在当前工程中创建相应配置文件。
+
+```javascript
+myapp
+ |-- languages
+ |-- settings.json // 语言配置文件
+ |-- package.json
+ |-- index.js
+```
+
+`settings.json`文件很简单,主要是用来配置要支持的语言等基本信息。
+
+```javascript
+module.exports = {
+ // 拟支持的语言列表
+ "languages": [
+ {
+ "name": "zh",
+ "title": "中文"
+ },
+ {
+ "name": "en",
+ "title": "英文"
+ }
+ ],
+ // 默认语言,即准备在源码中写的语言,一般我们可以直接使用中文
+ "defaultLanguage": "zh",
+ // 激活语言,即默认要启用的语言,一般等于defaultLanguage
+ "activeLanguage": "zh",
+ // 翻译名称空间定义,详见后续介绍。
+ "namespaces": {}
+}
+```
+
+**说明:**
+
+- 您也可以手动自行创建`languages/settings.json`文件。这样就不需运行`voerkai18n init`命令了。
+
+- 如果你的源码放在`src`文件夹,则`init`命令会自动在在`src`文件夹下创建`languages`文件夹。
+
+- `voerkai18n init`是可选的,直接使用`extract`时也会自动创建相应的文件。
+
+- `-m`参数用来指定生成的`settings.json`的模块类型:
+ - 当`-m=auto`时,会自动读取前工程`package.json`中的`type`字段
+ - 当`-m=esm`时,会生成`ESM`模块类型的`settings.json`。
+ - 当`-m=cjs`时,会生成`commonjs`模块类型的`settings.json`。
+
+- `location`参数是可选的,如果没有指定则采用当前目录。
+
+ 如果你想将`languages`安装在`src/languages`下,则可以指定`voerkai18n init ./src`
+
+## 提取文本 - extract
+
+扫描提取当前项目中的所有源码,提取出所有需要翻译的文本内容并保存在到`<工程源码目录>/languages/translates/*.json`。
+
+```shell
+> voerkai18n extract --help
+扫描并提取所有待翻译的字符串到文件夹中
+
+Arguments:
+ location 工程项目所在目录 (default: "./")
+
+Options:
+ -D, --debug 输出调试信息
+ -lngs, --languages 支持的语言
+ -d, --defaultLanguage 默认语言
+ -a, --activeLanguage 激活语言
+ -ns, --namespaces 翻译名称空间
+ -e, --exclude 排除要扫描的文件夹,多个用逗号分隔
+ -u, --updateMode 本次提取内容与已存在内容的数据合并策略,默认取值sync=同步,overwrite=覆盖,merge=合并
+ -f, --filetypes 要扫描的文件类型
+ -h, --help display help for command
+```
+
+**说明:**
+
+- 启用`-d`参数时会输出提取过程,显示从哪些文件提取了几条信息。
+- 如果已手动创建或通过`init`命令创建了`languages/settings.json`文件,则可以不指定`-ns`,`-lngs`,`-d`,`-a`参数。`extract`会优先使用`languages/settings.json`文件中的参数来进行提取。
+- `-u`参数用来指定如何将提取的文本与现存的文件进行合并。因为在国际化流程中,我们经常面临源代码变更时需要更新翻译的问题。支持三种合并策略。
+ - **sync**:同步(默认值),两者自动合并,并且会删除在源码文件中不存在的文本。如果某个翻译已经翻译了一半也会保留。此值适用于大部情况,推荐。
+ - **overwrite**:覆盖现存的翻译内容。这会导致已经进行了一半的翻译数据丢失,**慎用**。
+ - **merge**:合并,与sync的差别在于不会删除源码中已不存在的文本。
+- `-e`参数用来排除扫描的文件夹,多个用逗号分隔。内部采用`gulp.src`来进行文件提取,请参数。如 `-e !libs,core/**/*`。默认会自动排除`node_modules`文件夹
+- `-f`参数用来指定要扫描的文件类型,默认`js,jsx,ts,tsx,vue,html`
+- `extract`是基于正则表达式方式进行匹配的,而不是像`i18n-next`采用基于`AST`解析。
+
+>**重点:**
+>
+>默认情况下,`voerkai18n extract`可以安全地反复多次执行,不会导致已经翻译一半的内容丢失。
+>
+>如果想添加新的语言支持,也`voerkai18n extract`也可以如预期的正常工作。
+
+## 自动翻译 - translate
+
+在工程文件夹下执行`voerkai18n translate`命令,该命令会读取`languages/settings.json`配置文件,并调用在线翻译服务(如百度在线翻译)对提取的文本(`languages/translates/*.json`)进行自动翻译。
+
+```shell
+Usage: voerkai18n translate [options] [location]
+
+调用在线翻译服务商的API翻译译指定项目的语言包,如使用百度云翻译服务
+
+Arguments:
+ location 工程项目所在目录
+
+Options:
+ -p, --provider 在线翻译服务提供者名称或翻译脚本文件 (default: "baidu")
+ -m, --max-package-size 将多个文本合并提交的最大包字节数 (default: 3000)
+ --appkey [key] API密钥
+ --appid [id] API ID
+ --no-backup 备份原始文件
+ --mode 翻译模式,取值auto=仅翻译未翻译的,full=全部翻译
+ -q, --qps 翻译速度限制,即每秒可调用的API次数 (default: 1)
+ -h, --help 显示帮助
+```
+
+- 内置支持调用百度的在线翻译服务,您需要百度的网站上(http://api.fanyi.baidu.com/)申请开通服务,开通后可以得到`appid`和`appkey`(密钥)。
+
+- `--provider`用来指定在线翻译服务提供者,内置支持的是百度在线翻译。也可以传入一个js脚本,如下:
+
+ ```javascript
+ // youdao.js
+ module.exports = async function(options){
+ let { appkey,appid } = options
+ return {
+ translate:async (texts,from,to){
+ // texts是一个Array
+ // from,to代表要从哪一种语言翻译到何种语言
+ .....
+ // 在此对texts内容调用在线翻译API
+ // 翻译结果应该返回与texts对应的数组
+ // 如果出错则应该throw new Error()
+ return [...]
+ }
+ }
+ }
+ ```
+
+- `qps`用来指定调用在线翻译API的速度,默认是1,代表每秒调用一次;此参数的引入是考虑到有些翻译平台的免费API有QPS限制。比如百度在线翻译免费版本限制`QPS`就是1,即每秒只能调用一次。如果您购买了服务,则可以将`QPS`调高。
+
+- 默认情况下,每次运行时均会备份原始的翻译文件至`languages/translates/backup`,`--no-backup`可以禁止备份。
+
+- 默认情况下,`voerkai18n translate`会在每次运行时跳过已经翻译过的内容,这样可以保留翻译成果。此特性在您对自动翻译的内容进行修改后,再多次运行`voerkai18n translate`命令时均能保留翻译内容,不会导致您修改调整过的内容丢失。`--mode full`参数可以完全覆盖翻译,请慎用。
+
+- 为了提高在线翻译的速度,`voerkai18n translate`并不是一条文本调用一次API,而是将多条文本合并起来进行调用,但是单次调用也是有数据包大小的限制的,`--max-package-size`参数用来指定数据包的最大值。比如百度建议,为保证翻译质量,请将单次请求长度控制在 6000 bytes以内(汉字约为输入参数 2000 个)。
+
+- 需要注意的是,自动翻译虽然准确性还不错,真实场景还是需要进行手工调整的,特别是自动翻译一般不能识别插值变量。
+
+## 编译 - compile
+
+编译当前工程的语言包,编译结果输出在.`/langauges`文件夹。
+
+```shell
+Usage: voerkai18n compile [options] [location]
+
+编译指定项目的语言包
+
+Arguments:
+ location 工程项目所在目录 (default: "./")
+
+Options:
+ -D, --debug 输出调试信息
+ -m, --moduleType [types] 输出模块类型,取值auto,esm,cjs (default: "esm")
+ --no-inline-runtime 不嵌入运行时源码
+ -h, --help display help for command
+```
+
+`voerkai18n compile`执行后会在`langauges`文件夹下输出:
+
+```javascript
+myapp
+ |--- langauges
+ |-- index.js // 当前作用域的源码
+ |-- idMap.js // 翻译文本与id的映射文件
+ |-- formatters.js // 自定义格式化器
+ |-- zh.js // 中文语言包
+ |-- en.js // 英文语言包
+ |-- xx.js // 其他语言包
+ |-- ...
+```
+
+**说明:**
+
+- 在当前工程目录下,一般不需要指定参数就可以反复多次进行编译。
+- 您每次修改了源码并`extract`后,均应该再次运行`compile`命令。
+- 如果您修改了`formatters.js`,执行`compile`命令不会重新生成和修改该文件。
+- `--no-inline-runtime `参数用来指示如何引用运行时。默认会将运行时代码生成保存在`languages/runtime.js`,应用以源码形式引用。当启用`--no-inline-runtime `参数时会采用`require("@voerkai18n/runtime")`的方式。
\ No newline at end of file
diff --git a/docs/zh/guide/tools/vite.md b/docs/zh/guide/tools/vite.md
new file mode 100644
index 0000000..6124f28
--- /dev/null
+++ b/docs/zh/guide/tools/vite.md
@@ -0,0 +1,97 @@
+# Vite插件
+
+`@voerkai18n/babel`插件在`vite`应用中不能正常使用,需要使用`@voerkai18n/vite`插件来完成类似的功能,包括自动文本映射和自动导入`t`函数。
+
+## 安装
+
+`@voerkai18n/vite`只需要作为开发依赖安装即可。
+
+```javascript
+npm install --save-dev @voerkai18n/vite
+yarn add -D @voerkai18n/vite
+pnpm add -D @voerkai18n/vite
+```
+
+## 启用插件
+
+接下来在`vite.config.js`中配置启用`@voerkai18n/vite`插件。
+
+```javascript
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import Inspect from 'vite-plugin-inspect'// 可选的
+import Voerkai18nPlugin from "@voerkai18n/vite"
+export default defineConfig({
+ plugins: [
+ Inspect(), // 可选的
+ Voerkai18nPlugin({debug:true}),
+ vue()
+ ]
+})
+
+```
+
+- ` vite-plugin-inspect`是开发`vite`插件时的调试插件,启用后就可以通过`localhost:3000/__inspect/ `查看Vue源码文件经过插件处理前后的内容,一般是Vite插件开发者使用。上例中安装后,就可以查看`Voerkai18nPlugin`对`Vue`文件干了什么事,可以加深理解,**正常使用不需要安装**。
+
+## 插件功能
+
+`@voerkai18n/vite`插件配置启用后,`vite`在进行`dev`或`build`时,就会在``自动注入`import { t } from "languages" `,同时会扫描源代码文件(包括`vue`,`js`等),根据`idMap.js`文件里面的文本映射表,将`t('"xxxx")`转换成`t("")`的形式。
+
+不同于`@voerkai18n/babel`插件,`@voerkai18n/vite`插件不需要配置`location`和`autoImport`参数,能正确地处理导入`languages`路径。
+
+## 插件参数
+
+`vite`插件支持以下参数:
+
+```javascript
+import Voerkai18nPlugin from "@voerkai18n/vite"
+export default defineConfig({
+ plugins: [
+ Inspect(), // 可选的
+ Voerkai18nPlugin({
+ location: "./", // 可选的,指定当前工程目录
+ autoImport: true, // 是否自动导入t函数
+ debug:false, // 是否输出调试信息,当=true时,在控制台输出转换匹配的文件清单
+ patterns:[
+ "!(?/src/languages`文件夹下。
+
+- `autoImport`:可选的,默认`true`,用来配置是否自动导入`t`函数。当vue文件没有指定导入时才会自动导入,并且根据当前vue文件的路径处理好导入位置。
+
+- `debug`:可选的,开启后会在控制台输出一些调试信息,对一般用户没有用。
+
+- `patterns`:可选的,一些正则表达式匹配规则,用来过滤匹配哪一些文件需要进行扫描和处理。默认的规则:
+
+ ```javascript
+ const patterns={
+ "!(?
+import {reactive } from 'vue'
+export default {
+ inject: ['i18n'], // 注入i18n实例,该实例由@voerkai18n/vue插件提供
+ ....
+}
+
+```
+
+声明`inject: ['i18n']`后在当前组件实例中就可以访问`this.i18n`,该实例是一个经过`reactive`封闭的响应式对象,其内容是:
+
+```javascript
+this.i18n = {
+ activeLanguage, // 当前激活语言,可以通过直接赋值来切换语言
+ defaultLanguage, // 默认语言名称
+ languages // 支持的语言列表=[{name,title},...]
+}
+```
+
+## 应用示例
+
+注入`i18n`实例后就可以在此基础上实现`激活语言`、`默认语言`、`切换语言`等功能。
+
+```vue
+
+
+ 当前语言:{{i18n.activeLanguage}}
+ 默认语言:{{i18n.defaultLanguage}}
+
+
+
+
+```
+
+### 插件参数
+
+`@voerkai18n/vue`插件支持以下参数:
+
+```javascript
+import { i18nScope } from './languages'
+app.use(i18nPlugin,{
+ i18nScope, // 重点,需要引入当前作用域的i18nScope
+ forceUpdate:true // 当语言切换时是否强制重新渲染
+})
+
+```
+
+- 当`forceUpdate=true`时,`@voerkai18n/vue`插件在切换语言时会调用`app._instance.update()`对整个应用进行强制重新渲染。大部分情况下,切换语言时强制对整个应用进行重新渲染的行为是符合预期的。您也可以能够通过设`forceUpdate=false`来禁用强制重新渲染,此时,界面就不会马上看到语言的切换,需要您自己控制进行重新渲染。
\ No newline at end of file
diff --git a/docs/zh/guide/use/change-langeuage.md b/docs/zh/guide/use/change-langeuage.md
new file mode 100644
index 0000000..4e9735e
--- /dev/null
+++ b/docs/zh/guide/use/change-langeuage.md
@@ -0,0 +1,32 @@
+---
+title: 切换语言
+---
+# 切换语言
+
+## 切换语言
+
+可以通过全局单例或当前作用域实例的`change`方法来切换语言。
+
+```javascript
+import { i18nScope } from "./languages"
+
+// 切换到英文
+await i18nScope.change("en")
+// VoerkaI18n是一个全局单例,可以直接访问
+await VoerkaI18n.change("en")
+```
+
+## 侦听语言切换事件
+
+```javascript
+import { i18nScope } from "./languages"
+
+// 切换到英文
+i18nScope.on((newLanguage)=>{
+ ...
+})
+// 直接在全局单例上调用
+VoerkaI18n.on((newLanguage)=>{
+ ...
+})
+```
\ No newline at end of file
diff --git a/docs/zh/guide/use/currency.md b/docs/zh/guide/use/currency.md
new file mode 100644
index 0000000..2c08768
--- /dev/null
+++ b/docs/zh/guide/use/currency.md
@@ -0,0 +1,5 @@
+---
+title: 货币
+---
+# 货币
+
diff --git a/docs/zh/guide/use/datetime.md b/docs/zh/guide/use/datetime.md
new file mode 100644
index 0000000..15bcb30
--- /dev/null
+++ b/docs/zh/guide/use/datetime.md
@@ -0,0 +1,19 @@
+---
+title: 日期时间
+---
+# 日期时间
+
+`@voerkai18n/runtime`内置了对日期时间进行处理的格式化器,可以直接使用,不需要额外的安装。
+
+```javascript
+// 切换到中文
+t("现在是{d | date}",new Date()) // == 现在是2022年3月12日
+t("现在是{d | time}",new Date()) // == 现在是18点28分12秒
+t("现在是{d | shorttime}",new Date()) // == 现在是18:28:12
+t("现在是{}",new Date()) // == 现在是2022年3月12日 18点28分12秒
+
+// 切换到英文
+t("现在是{d | date}",new Date()) // == Now is 2022/3/12
+t("现在是{d | time}",new Date()) // == Now is 18:28:12
+t("现在是{}",new Date()) // == Now is 2022/3/20 19:17:24'
+```
diff --git a/docs/zh/guide/use/interpolation.md b/docs/zh/guide/use/interpolation.md
new file mode 100644
index 0000000..6650c1f
--- /dev/null
+++ b/docs/zh/guide/use/interpolation.md
@@ -0,0 +1,84 @@
+---
+title: 插值变量
+---
+
+# 插值变量
+
+`voerkai18n`的`t`函数支持使用**插值变量**,用来传入一个可变内容。
+
+插值变量有`命名插值变量`和`位置插值变量`。
+
+## **命名插值变量**
+
+可以在t函数中使用`{变量名称}`表示一个命名插值变量。
+
+```javascript
+t("我姓名叫{name},我今年{age}岁",{name:"tom",age:12})
+// 如果值是函数会自动调用
+t("我姓名叫{name},我今年{age}岁",{name:"tom",age:()=>12})
+```
+
+仅当`t`函数仅有两个参数且第2个参数是`{}`类型时,启用字典插值变量,翻译时会自动进行插值。
+
+## 位置插值变量
+
+可以在t函数中使用一个空的`{}`表示一个位置插值变量。
+
+```javascript
+t("我姓名叫{},我今年{}岁","tom",12)
+// 如果值是函数会自动调用
+t("我姓名叫{},我今年{}岁","tom",()=>12})
+// 如果只有两个参数,且第2个参数是一个数组,会自动展开
+t("我姓名叫{},我今年{}岁",["tom",12])
+//如果第2个参数不是{}时就启用位置插值。
+t("我姓名叫{name},我今年{age}岁","tom",()=>12)
+```
+
+
+## 插值变量格式化
+
+`voerka-i18n`支持强大的插值变量格式化机制,可以在插值变量中使用`{变量名称 | 格式化器名称 | 格式化器名称(...参数) | ... }`类似管道操作符的语法,将上一个输出作为下一个输入,从而实现对变量值的转换。此机制是`voerka-i18n`实现复数、货币、数字等多语言支持的基础。
+
+我们假设定义以下格式化器(如果定义格式化器,详见后续)来进行示例。
+
+- **UpperCase**:将字符转换为大写
+- **division**:对数字按每n位一个逗号分割,支持一个可选参数分割位数,如`division(123456)===123,456`,`division(123456,4)===12,3456`
+- **mr** : 自动添加一个先生称呼
+
+```javascript
+// My name is TOM
+t("My name is { name | UpperCase }",{name:"tom"})
+
+// 我国2021年的GDP是¥14,722,730,697,890
+t("我国2021年的GDP是¥{ gdp | division}",{gdp:14722730697890})
+
+// 支持为格式化器提供参数,按4位一逗号分割
+// 我国2021年的GDP是¥14,7227,3069,7890
+t("我国2021年的GDP是¥{ gdp | division(4)}",{gdp:14722730697890})
+
+// 支持连续使用多个格式化器
+// My name is Mr.TOM
+t("My name is { name | UpperCase | mr }",{name:"tom"})
+
+
+```
+
+每个格式化器本质上是一个`(value)=>{...}`的函数,并且能**将上一个格式化器的输出作为下一个格式化器的输入**,格式化器具有如下特性:
+
+### **无参数格式化器**
+
+ 使用无参数格式化器时只需传入名称即可。例如:`My name is { name | UpperCase }`
+
+### **有参数格式化器**
+
+ 格式化器支持传入参数,如`{ gdp | division(4)}`、`{ date | format('yyyy/MM/DD')}`
+
+ 特别需要注意的是,格式化器的参数只能支持简单的类型的参数,如`数字`、`布尔型`、`字符串`。
+
+ **不支持数组、对象和函数参数,也不支持复杂的表达式参数。**
+
+### **连续使用多个格式化器**
+
+ 就如您预期的一样,**将上一个格式化器的输出作为下一个格式化器的输入**。
+
+ `{data | f1 | f2 | f3(1)}`等效于` f3(f2(f1(data)),1)`
\ No newline at end of file
diff --git a/docs/zh/guide/use/namespace.md b/docs/zh/guide/use/namespace.md
new file mode 100644
index 0000000..e0a53db
--- /dev/null
+++ b/docs/zh/guide/use/namespace.md
@@ -0,0 +1,47 @@
+# 名称空间
+
+`voerkai18n `的名称空间是为了解决当源码文件非常多时,通过名称空间对翻译内容进行分类翻译的。
+
+假设一个大型项目,其中源代码文件有上千个。默认情况下,`voerkai18n extract`会扫描所有源码文件将需要翻译的文本提取到`languages/translates/default.json`文件中。由于文件太多会导致以下问题:
+
+- 内容太多导致`default.json`文件太大,有利于管理
+- 有些翻译往往需要联系上下文才可以作出更准确的翻译,没有适当分类,不容易联系上下文。
+
+因此,引入`名称空间`就是目的就是为了解决此问题。
+
+配置名称空间,需要配置`languages/settings.json`文件。
+
+```javascript
+// 工程目录:d:/code/myapp
+// languages/settings.json
+module.exports = {
+ namespaces:{
+ //"名称":"相对路径",
+ “routes”:“routes”,
+ "auth":"core/auth",
+ "admin":"views/admin"
+ }
+}
+```
+
+以上例子代表:
+
+- 将`d:\code\myapp\routes`中扫描到的文本提取到`routes.json`中。
+- 将`d:\code\myapp\auth`中扫描到的文本提取到`auth.json`中。
+- 将`d:\code\myapp\views/admin`中扫描到的文本提取到`admin.json`中。
+
+最终在` languages/translates`中会包括:
+
+```shell
+languages
+ |-- translates
+ |-- default.json
+ |-- routes.sjon
+ |-- auth.json
+ |-- admin.json
+```
+
+然后,`voerkai18n compile`在编译时会自动合并这些文件,后续就不再需要名称空间的概念了。
+
+`名称空间`仅仅是为了解决当翻译内容太多时的分类问题。
+
diff --git a/docs/zh/guide/use/plural.md b/docs/zh/guide/use/plural.md
new file mode 100644
index 0000000..ea883aa
--- /dev/null
+++ b/docs/zh/guide/use/plural.md
@@ -0,0 +1,112 @@
+---
+title: 复数
+---
+# 复数
+
+当翻译文本内容是一个`数组`时启用复数处理机制。即在`langauges/tranclates/*.json`中的文本翻译项是一个数组。
+
+## 启用复数处理机制
+假设在`index.html`文件中具有一个翻译内容
+```javascript
+ t("我{}一辆车")
+```
+经过`extract`命令提取为翻译文件后,如下:
+```json
+// languages/translates/default.json
+{
+ "我有{}辆车":{
+ "en":"",
+ "de":"...."
+ }
+}
+```
+现在我们要求引入复数处理机制,为不同数量采用不同的翻译,只需要将上述翻译文本更改为数组形式。
+```json
+{
+ "我有{}辆车":{
+ "en":["I don't have car","I have a car","I have two cars","I have {} cars"],
+ "en":["I don't have car","I have a car","I have {} cars"],
+ "en":["I don't have car","I have {} cars"],
+ "de":"...."
+ }
+}
+```
+上例中,只需要在翻译文件中将上述的`en:""`更改为`[<0对应的复数文本>,<1对应的复数文本>,...,]`形式代表启动复数机制.
+- 可以灵活地为每一个数字(`0、1、2、...、n`)对应的复数形式进行翻译
+- 数量数字大于数组长度,则总是取最后一个复数形式
+- 复数形式的文本同样支持位置插值和变量插值。
+
+
+## 对应的翻译函数
+
+
+启用复数处理机制后,在`t`函数根据变量值来决定采用单数还是复数,按如下规则进行处理。
+
+
+- **不存在插值变量且t函数的第2个参数是数字**
+
+```javascript
+
+t("我有一辆车",0) // == "I don't have a car"
+t("我有一辆车",1) // == "I have a car"
+t("我有一辆车",2) // == "I have two cars"
+t("我有一辆车",100) // == "I have 100 cars"
+```
+
+- **存在插值变量且t函数的第2个参数是数字**
+
+就中文而言,上述没有指定插值变量是比较别扭的,一般可以引入一个位置插值变量更加友好。
+```javascript
+
+t("我有{}辆车",0) // == "I don't have a car"
+t("我有{}辆车",1) // == "I have a car"
+t("我有{}辆车",2) // == "I have two cars"
+t("我有{}辆车",100) // == "I have 100 cars"
+```
+
+- **复数命名插值变量**
+
+当启用复数功能时,`t`函数需要知道根据哪个变量来决定采用何种复数形式。
+
+**当采用位置变量插值时,`t`函数取第一个数字类型参数作为位置插值复数。**
+
+
+```javascript
+t("{}有{}辆车","张三",0)
+```
+
+**当采用命名变量插值时,`t`函数约定当插值字典中存在以`$字符开头`的变量时,并且值是`数字`时,根据该变量来引用复数。**
+
+下例中,`t`函数根据`$count`值来处理复数。
+
+```javascript
+t("{name}有{$count}辆车",{name:"张三",$count:1})
+```
+
+## **示例**
+
+```javascript
+// languages/translates/default.json
+{
+ "第{}章":{
+ en:[
+ "Chapter Zero","Chapter One", "Chapter Two", "Chapter Three","Chapter Four",
+ "Chapter Five","Chapter Six","Chapter Seven","Chapter Eight","Chapter Nine",
+ "Chapter {}"
+ ],
+ zh:["起始","第一章", "第二章", "第三章","第四章","第五章","第六章","第七章","第八章","第九章",“第{}章”]
+ }
+}
+// 翻译函数
+t("第{}章",0) // == Chapter Zero
+t("第{}章",1) // == Chapter One
+t("第{}章",2) // == Chapter Two
+t("第{}章",3) // == Chapter Three
+t("第{}章",4) // == Chapter Four
+t("第{}章",5) // == Chapter Five
+t("第{}章",6) // == Chapter Six
+t("第{}章",7) // == Chapter Seven
+...
+// 超过取最后一项
+t("第{}章",100) // == Chapter 100
+```
diff --git a/docs/zh/guide/use/react.md b/docs/zh/guide/use/react.md
new file mode 100644
index 0000000..ed5025f
--- /dev/null
+++ b/docs/zh/guide/use/react.md
@@ -0,0 +1 @@
+# React应用
\ No newline at end of file
diff --git a/docs/zh/guide/use/t.md b/docs/zh/guide/use/t.md
new file mode 100644
index 0000000..a254cb5
--- /dev/null
+++ b/docs/zh/guide/use/t.md
@@ -0,0 +1,39 @@
+---
+title: 翻译函数
+---
+
+# 翻译函数
+
+默认提供翻译函数`t`用来进行翻译。一般情况下,`t`函数声明在执行`voerkai18n compile`命令生成在工程目录下的`languages/index.js`文件中。
+
+```javascript
+
+// 从当前语言包文件夹index.js中导入翻译函数
+import { t } from "/languages"
+
+// 不含插值变量
+t("中华人民共和国")
+
+// 位置插值变量
+t("中华人民共和国{}","万岁")
+t("中华人民共和国成立于{}年,首都{}",1949,"北京")
+
+// 当仅有两个参数且第2个参数是[]类型时,自动展开第一个参数进行位置插值
+t("中华人民共和国成立于{year}年,首都{capital}",[1949,"北京"])
+
+// 当仅有两个参数且第2个参数是{}类型时,启用字典插值变量
+t("中华人民共和国成立于{year}年,首都{capital}",{year:1949,capital:"北京"})
+
+// 插值变量可以是同步函数,在进行插值时自动调用。
+t("中华人民共和国成立于{year}年,首都{capital}",()=>1949,"北京")
+
+// 对插值变量启用格式化器
+t("中华人民共和国成立于{birthday | year}年",{birthday:new Date()})
+
+```
+
+**注意:**
+
+- `voerkai18n`使用正则表达式来提取要翻译的内容,因此`t("")`可以使用在任意地方。
+-
+
diff --git a/docs/zh/guide/use/vue.md b/docs/zh/guide/use/vue.md
new file mode 100644
index 0000000..52d48f5
--- /dev/null
+++ b/docs/zh/guide/use/vue.md
@@ -0,0 +1,57 @@
+# Vue应用
+
+
+在`Vue3`应用中引入`voerkai18n`来添加国际化应用需要由两个插件来简化应用。
+
+- **@voerkai18n/vue**
+
+ **Vue插件**,在初始化`Vue`应用时引入,提供访问`当前语言`、`切换语言`、`自动更新`等功能。
+
+- **@voerkai18n/vite**
+
+ **Vite插件**,在`vite.config.js`中配置,用来实现`自动文本映射`、`自动导入t函数`等功能。
+
+
+`@voerkai18n/vue`和`@voerkai18n/vite`两件插件相互配合,安装配置好这两个插件后,就可以在`Vue`文件使用多语言`t`函数。
+
+**重点:`t`函数会在使用`@voerkai18n/vite`插件后自动注入,因此在`Vue`文件中可以直接使用。**
+
+```vue
+
+
+
+
+
+
+
+```
+
+**说明:**
+
+- 事实上,就算没有`@voerkai18n/vue`和`@voerkai18n/vite`两件插件相互配合,只需要导入`t`函数也就可以直接使用。这两个插件只是很简单的封装而已。
+- 如果要在应用中进行`语言动态切换`,则需要在应用中引入`@voerkai18n/vue`,请参阅`@voerkai18n/vue`插件使用说明。
+- `@voerkai18n/vite`的使用请参阅后续说明。
diff --git a/docs/zh/home.md b/docs/zh/home.md
new file mode 100644
index 0000000..2e80b1d
--- /dev/null
+++ b/docs/zh/home.md
@@ -0,0 +1,61 @@
+---
+home: true
+icon: home
+title: 主页
+heroImage: /logo.svg
+heroText: VoerkaI18n
+tagline: 适用于Nodejs/Vue/React的国际化解决方案
+actions:
+ - text: 快速入门
+ link: /guide/intro/get-started
+
+ - text: 源码
+ link: /
+ type: secondary
+
+features:
+ - title: 工程化支持
+ icon: markdown
+ details: 从文本提取/自动翻译/编译/动态切换的全流程工程化支持,适用于大型项目
+ link:
+
+ - title: 集成自动翻译
+ icon: slides
+ details: 调用在线翻译服务API支持对提取的文本进行自动翻译,大幅度提高工程效率
+ link:
+
+ - title: 符合直觉
+ icon: layout
+ details: 在源码中直接使用符合直觉的翻译形式,不需要绞尽脑汁想种种key
+ link:
+
+ - title: 自动提取文本
+ icon: comment
+ details: 提供扫描提取工具对源码文件中需要翻译的文本进行提取
+ link:
+
+ - title: 适用性
+ icon: info
+ details: 支持任意Javascript应用,包括Nodejs/Vue/React/ReactNative等。
+ link:
+
+ - title: 多库协作
+ icon: blog
+ details: 支持monorepo工程下多库进行语言切换的联动机制
+ link:
+
+ - title: 自动扩展工具
+ icon: palette
+ details: 提供Vue/React/Babel等扩展插件,简化各种应用下
+ link:
+
+ - title: 扩展特性
+ icon: contrast
+ details: 强大的插值变量机制,能扩展支持复数、日期、货币等灵活强大的多语言机制
+ link:
+
+
+copyright: true
+footer: MIT Licensed | Copyright © 2022-present wxzhang
+---
+
\ No newline at end of file
diff --git a/docs/zh/reference/formatters.md b/docs/zh/reference/formatters.md
new file mode 100644
index 0000000..1a89e82
--- /dev/null
+++ b/docs/zh/reference/formatters.md
@@ -0,0 +1,3 @@
+# 格式化器
+
+
diff --git a/docs/zh/reference/i18nscope.md b/docs/zh/reference/i18nscope.md
new file mode 100644
index 0000000..b6f8c80
--- /dev/null
+++ b/docs/zh/reference/i18nscope.md
@@ -0,0 +1,33 @@
+# i18nScope
+
+每个工程会创建一个`i18nScope`实例。
+
+```javascript
+import { i18nScope } from "./languages"
+
+// 订阅语言切换事件
+i18nScope.on((newLanguage)=>{...})
+// 取消语言切换事件订阅
+i18nScope.off(callback)
+// 当前作用域配置
+i18nScope.settings
+// 当前语言
+i18nScope.activeLanguage // 如zh
+
+// 默认语言
+i18nScope.defaultLanguage
+// 返回当前支持的语言列表,可以用来显示
+i18nScope.languages // [{name:"zh",title:"中文"},{name:"en",title:"英文"},...]
+// 返回当前作用域的格式化器
+i18nScope.formatters
+// 当前作用id
+i18nScope.id
+// 切换语言,异步函数
+await i18nScope.change(newLanguage)
+// 当前语言包
+i18nScope.messages // {1:"...",2:"...","3":"..."}
+// 引用全局VoerkaI18n实例
+i18nScope.global
+// 注册当前作用域格式化器
+i18nScope.registerFormatter(name,formatter,{language:"*"})
+```
\ No newline at end of file
diff --git a/docs/zh/reference/lang-code.md b/docs/zh/reference/lang-code.md
new file mode 100644
index 0000000..d280e98
--- /dev/null
+++ b/docs/zh/reference/lang-code.md
@@ -0,0 +1,3 @@
+# 语言代码
+
+请参阅[这里](https://fanyi-api.baidu.com/doc/21)
\ No newline at end of file
diff --git a/docs/zh/reference/readme.md b/docs/zh/reference/readme.md
new file mode 100644
index 0000000..6d25d26
--- /dev/null
+++ b/docs/zh/reference/readme.md
@@ -0,0 +1,8 @@
+# 参考
+
+
+- 作用域实例
+- 全局VoerkaI18n实例
+- 格式化器
+- 可用的语言代码
+
diff --git a/docs/zh/reference/voerkaI18n.md b/docs/zh/reference/voerkaI18n.md
new file mode 100644
index 0000000..5e57168
--- /dev/null
+++ b/docs/zh/reference/voerkaI18n.md
@@ -0,0 +1,26 @@
+# VoerkaI18n
+
+当`import {} form "./languages"`时会自动创建全局单`VoerkaI18n`
+
+```javascript
+// 订阅语言切换事件
+VoerkaI18n.on((newLanguage)=>{...})
+// 取消语言切换事件订阅
+VoerkaI18n.off(callback)
+// 取消所有语言切换事件订阅
+VoerkaI18n.offAll()
+
+// 返回当前默认语言
+VoerkaI18n.defaultLanguage
+// 返回当前激活语言
+VoerkaI18n.activeLanguage
+// 返回当前支持的语言
+VoerkaI18n.languages
+// 切换语言
+await VoerkaI18n.change(newLanguage)
+// 返回全局格式化器
+VoerkaI18n.formatters
+// 注册全局格式化器
+VoerkaI18n.registerFormatter(name,formatter,{language:"*"})
+
+```
\ No newline at end of file
diff --git a/packages/cli/languages/runtime.js b/packages/cli/languages/runtime.js
index 8e60ccf..b5cb243 100644
--- a/packages/cli/languages/runtime.js
+++ b/packages/cli/languages/runtime.js
@@ -313,9 +313,6 @@ let inlineFormatters = formatters; // 内置格式化器
// 支持参数: { var | formatter(x,x,..) | formatter }
let varWithPipeRegexp = /\{\s*(?\w+)?(?(\s*\|\s*\w*(\(.*\)){0,1}\s*)*)\s*\}/g;
-// 有效的语言名称列表
-const languages = ["af","am","ar-dz","ar-iq","ar-kw","ar-ly","ar-ma","ar-sa","ar-tn","ar","az","be","bg","bi","bm","bn","bo","br","bs","ca","cs","cv","cy","da","de-at","de-ch","de","dv","el","en-au","en-ca","en-gb","en-ie","en-il","en-in","en-nz","en-sg","en-tt","en","eo","es-do","es-mx","es-pr","es-us","es","et","eu","fa","fi","fo","fr-ca","fr-ch","fr","fy","ga","gd","gl","gom-latn","gu","he","hi","hr","ht","hu","hy-am","id","is","it-ch","it","ja","jv","ka","kk","km","kn","ko","ku","ky","lb","lo","lt","lv","me","mi","mk","ml","mn","mr","ms-my","ms","mt","my","nb","ne","nl-be","nl","nn","oc-lnc","pa-in","pl","pt-br","pt","ro","ru","rw","sd","se","si","sk","sl","sq","sr-cyrl","sr","ss","sv-fi","sv","sw","ta","te","tet","tg","th","tk","tl-ph","tlh","tr","tzl","tzm-latn","tzm","ug-cn","uk","ur","uz-latn","uz","vi","x-pseudo","yo","zh-cn","zh-hk","zh-tw","zh"];
-
/**
* 考虑到通过正则表达式进行插件的替换可能较慢,因此提供一个简单方法来过滤掉那些
* 不需要进行插值处理的字符串
@@ -931,7 +928,6 @@ var runtime ={
replaceInterpolatedVars,
I18nManager,
translate,
- languages,
i18nScope,
defaultLanguageSettings,
getDataTypeName,
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 2e57bb5..e0f3c56 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@voerkai18n/cli",
- "version": "1.0.26",
+ "version": "1.0.27",
"description": "VoerkaI18n command line interactive tools",
"main": "index.js",
"homepage": "https://gitee.com/zhangfisher/voerka-i18n",
@@ -50,5 +50,5 @@
"devDependencies": {
"@voerkai18n/autopublish": "workspace:^1.0.2"
},
- "lastPublish": "2022-04-10T20:14:07+08:00"
+ "lastPublish": "2022-04-11T17:25:13+08:00"
}
\ No newline at end of file
diff --git a/packages/runtime/dist/index.cjs b/packages/runtime/dist/index.cjs
new file mode 100644
index 0000000..2efc900
--- /dev/null
+++ b/packages/runtime/dist/index.cjs
@@ -0,0 +1,2 @@
+"use strict";var e=require("@babel/runtime-corejs3/core-js-stable/weak-map"),t=require("@babel/runtime-corejs3/core-js-stable/instance/reduce"),r=require("@babel/runtime-corejs3/core-js-stable/object/keys"),a=require("@babel/runtime-corejs3/core-js-stable/object/create"),n=require("@babel/runtime-corejs3/core-js-stable/symbol/replace"),l=require("@babel/runtime-corejs3/core-js-stable/array/from"),u=require("@babel/runtime-corejs3/core-js-stable/symbol"),s=require("@babel/runtime-corejs3/core-js/get-iterator-method"),i=require("@babel/runtime-corejs3/core-js-stable/reflect/construct");require("core-js/modules/es.regexp.constructor.js"),require("core-js/modules/es.regexp.dot-all.js"),require("core-js/modules/es.regexp.sticky.js"),require("core-js/modules/es.regexp.test.js"),require("core-js/modules/es.reflect.to-string-tag.js");var c=require("@babel/runtime-corejs3/helpers/asyncToGenerator"),o=require("@babel/runtime-corejs3/helpers/classCallCheck"),f=require("@babel/runtime-corejs3/helpers/createClass"),d=require("@babel/runtime-corejs3/helpers/assertThisInitialized"),g=require("@babel/runtime-corejs3/helpers/possibleConstructorReturn"),h=require("@babel/runtime-corejs3/helpers/getPrototypeOf"),b=require("@babel/runtime-corejs3/helpers/typeof"),p=require("@babel/runtime-corejs3/helpers/toConsumableArray"),m=require("@babel/runtime-corejs3/helpers/slicedToArray"),v=require("@babel/runtime-corejs3/helpers/taggedTemplateLiteral"),y=require("@babel/runtime-corejs3/helpers/inherits"),j=require("@babel/runtime-corejs3/helpers/setPrototypeOf"),k=require("@babel/runtime-corejs3/regenerator");require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.string.split.js"),require("core-js/modules/es.string.substr.js"),require("core-js/modules/es.function.name.js"),require("core-js/modules/es.error.to-string.js"),require("core-js/modules/es.date.to-string.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.regexp.to-string.js"),require("core-js/modules/esnext.array.last-index.js"),require("core-js/modules/es.string.replace.js"),require("core-js/modules/es.error.cause.js"),require("core-js/modules/es.array.iterator.js"),require("core-js/modules/es.promise.js"),require("core-js/modules/es.promise.all-settled.js"),require("core-js/modules/es.string.iterator.js"),require("core-js/modules/web.dom-collections.iterator.js");var q=require("@babel/runtime-corejs3/core-js-stable/string/raw"),_=require("@babel/runtime-corejs3/core-js-stable/instance/includes"),x=require("@babel/runtime-corejs3/core-js-stable/instance/map"),w=require("@babel/runtime-corejs3/core-js-stable/instance/trim"),L=require("@babel/runtime-corejs3/core-js-stable/instance/index-of"),S=require("@babel/runtime-corejs3/core-js-stable/instance/last-index-of"),$=require("@babel/runtime-corejs3/core-js-stable/parse-int"),M=require("@babel/runtime-corejs3/core-js-stable/instance/starts-with"),A=require("@babel/runtime-corejs3/core-js-stable/instance/ends-with"),F=require("@babel/runtime-corejs3/core-js-stable/instance/find-index"),T=require("@babel/runtime-corejs3/core-js-stable/object/assign"),E=require("@babel/runtime-corejs3/core-js/instance/replace-all"),I=require("@babel/runtime-corejs3/core-js-stable/array/is-array");require("@babel/runtime-corejs3/core-js-stable/json/stringify");var D=require("@babel/runtime-corejs3/core-js-stable/instance/concat"),N=require("@babel/runtime-corejs3/core-js-stable/instance/splice"),C=require("@babel/runtime-corejs3/core-js-stable/instance/for-each"),O=require("@babel/runtime-corejs3/core-js-stable/object/entries"),V=require("@babel/runtime-corejs3/core-js-stable/instance/slice"),z=require("@babel/runtime-corejs3/core-js-stable/promise"),R=require("@babel/runtime-corejs3/core-js-stable/object/get-prototype-of"),P=require("@babel/runtime-corejs3/core-js-stable/set"),B=require("@babel/runtime-corejs3/core-js/global-this"),U=require("@babel/runtime-corejs3/core-js-stable/instance/bind");function Y(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var H=Y(e),W=Y(t),G=Y(r),J=Y(a),K=Y(n),Q=Y(l),X=Y(u),Z=Y(s),ee=Y(i),te=Y(c),re=Y(o),ae=Y(f),ne=Y(d),le=Y(g),ue=Y(h),se=Y(b),ie=Y(p),ce=Y(m),oe=Y(v),fe=Y(y),de=Y(j),ge=Y(k),he=Y(q),be=Y(_),pe=Y(x),me=Y(w),ve=Y(L),ye=Y(S),je=Y($),ke=Y(M),qe=Y(A),_e=Y(F),xe=Y(T),we=Y(E),Le=Y(I),Se=Y(D),$e=Y(N),Me=Y(C),Ae=Y(O),Fe=Y(V),Te=Y(z),Ee=Y(R),Ie=Y(P),De=Y(B),Ne=Y(U);var Ce,Oe=function(e){if("object"!==se.default(e)||null===e)return!1;var t=Ee.default(e);if(null===t)return!0;for(var r=t;null!==Ee.default(r);)r=Ee.default(r);return t===r},Ve=function(e){return!isNaN(je.default(e))},ze=function e(t,r){var a,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=xe.default({},t);return Me.default(a=Ae.default(r)).call(a,(function(t){var r=ce.default(t,2),a=r[0],u=r[1];if(a in l)if("object"===se.default(u)&&null!==u)if(Le.default(u)){if(0===n.array)l[a]=u;else if(1===n.array){var s;l[a]=Se.default(s=[]).call(s,ie.default(l[a]),ie.default(u))}else if(2===n.array){var i;l[a]=ie.default(new Ie.default(Se.default(i=[]).call(i,ie.default(l[a]),ie.default(u))))}}else l[a]=e(l[a],u,n);else l[a]=u;else l[a]=u})),l},Re=function(e){return null===e?"Null":void 0===e?"Undefined":"function"==typeof e?"Function":e.constructor&&e.constructor.name},Pe=function(){function e(){re.default(this,e),this._callbacks=[]}var t;return ae.default(e,[{key:"on",value:function(e){var t;be.default(t=this._callbacks).call(t,e)||this._callbacks.push(e)}},{key:"off",value:function(e){for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;if(re.default(this,e),this._id=t.id||(new Date).getTime().toString()+je.default(1e3*Math.random()),this._languages=t.languages,this._defaultLanguage=t.defaultLanguage||"zh",this._activeLanguage=t.activeLanguage,this._default=t.default,this._messages=t.messages,this._idMap=t.idMap,this._formatters=t.formatters,this._loaders=t.loaders,this._global=null,this.$cache={activeLanguage:null,typedFormatters:{},formatters:{}},!De.default.VoerkaI18n){var a=pt.I18nManager;De.default.VoerkaI18n=new a({defaultLanguage:this.defaultLanguage,activeLanguage:this.activeLanguage,languages:t.languages})}this.global=De.default.VoerkaI18n,this._loading=!1,this.register(r)}var t;return ae.default(e,[{key:"id",get:function(){return this._id}},{key:"defaultLanguage",get:function(){return this._defaultLanguage}},{key:"activeLanguage",get:function(){return this._activeLanguage}},{key:"default",get:function(){return this._default}},{key:"messages",get:function(){return this._messages}},{key:"idMap",get:function(){return this._idMap}},{key:"formatters",get:function(){return this._formatters}},{key:"loaders",get:function(){return this._loaders}},{key:"global",get:function(){return this._global},set:function(e){this._global=e}},{key:"register",value:function(e){"function"===!se.default(e)&&(e=function(){}),this.global.register(this).then(e).catch(e)}},{key:"registerFormatter",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=r.language,n=void 0===a?"*":a;if("function"===!se.default(t)||"string"!=typeof e)throw new TypeError("Formatter must be a function");be.default(DataTypes).call(DataTypes,e)?this.formatters[n].$types[e]=t:this.formatters[n][e]=t}},{key:"_fallback",value:function(){this._messages=this._default,this._activeLanguage=this.defaultLanguage}},{key:"refresh",value:(t=te.default(ge.default.mark((function e(t){var r,a,n;return ge.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._loading=Te.default.resolve(),t||(t=this.activeLanguage),t!==this.defaultLanguage){e.next=5;break}return this._messages=this._default,e.abrupt("return");case 5:if("function"!=typeof(r=this.loaders[t])){e.next=20;break}return e.prev=7,e.next=10,r();case 10:this._messages=e.sent.default,this._activeLanguage=t,e.next=18;break;case 14:e.prev=14,e.t0=e.catch(7),console.warn(Se.default(a=Se.default(n="Error while loading language <".concat(t,"> on i18nScope(")).call(n,this.id,"): ")).call(a,e.t0.message)),this._fallback();case 18:e.next=21;break;case 20:this._fallback();case 21:case"end":return e.stop()}}),e,this,[[7,14]])}))),function(e){return t.apply(this,arguments)})},{key:"on",get:function(){var e;return Ne.default(e=this.global.on).call(e,this.global)}},{key:"off",get:function(){var e;return Ne.default(e=this.global.off).call(e,this.global)}},{key:"offAll",get:function(){var e;return Ne.default(e=this.global.offAll).call(e,this.global)}},{key:"change",get:function(){var e;return Ne.default(e=this.global.change).call(e,this.global)}}]),e}();function Ue(e){var t=function(){if("undefined"==typeof Reflect||!ee.default)return!1;if(ee.default.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(ee.default(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,a=ue.default(e);if(t){var n=ue.default(this).constructor;r=ee.default(a,arguments,n)}else r=a.apply(this,arguments);return le.default(this,r)}}function Ye(e,t){var r=void 0!==X.default&&Z.default(e)||e["@@iterator"];if(!r){if(Le.default(e)||(r=function(e,t){var r;if(!e)return;if("string"==typeof e)return He(e,t);var a=Fe.default(r=Object.prototype.toString.call(e)).call(r,8,-1);"Object"===a&&e.constructor&&(a=e.constructor.name);if("Map"===a||"Set"===a)return Q.default(e);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return He(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var a=0,n=function(){};return{s:n,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return u=e.done,e},e:function(e){s=!0,l=e},f:function(){try{u||null==r.return||r.return()}finally{if(s)throw l}}}}function He(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=new Array(t);r]+)>/g,(function(e,t){return"$"+l[t]})))}if("function"==typeof n){var u=this;return e[K.default].call(this,r,(function(){var e=arguments;return"object"!=se.default(e[e.length-1])&&(e=Fe.default([]).call(e)).push(a(e,u)),n.apply(this,e)}))}return e[K.default].call(this,r,n)},We.apply(this,arguments)}var Ge=Re,Je=Ve,Ke=Oe,Qe=ze,Xe=Pe,Ze=Be,et={"*":{$types:{Date:function(e){return e.toLocaleString()}},time:function(e){return e.toLocaleTimeString()},shorttime:function(e){return e.toLocaleTimeString()},date:function(e){return e.toLocaleDateString()},dict:function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),a=1;a0&&r.length%2!=0?r[r.length-1]:e}},zh:{$types:{Date:function(e){var t,r,a,n,l;return Se.default(t=Se.default(r=Se.default(a=Se.default(n=Se.default(l="".concat(e.getFullYear(),"年")).call(l,e.getMonth()+1,"月")).call(n,e.getDate(),"日 ")).call(a,e.getHours(),"点")).call(r,e.getMinutes(),"分")).call(t,e.getSeconds(),"秒")}},shortime:function(e){return e.toLocaleTimeString()},time:function(e){var t,r;return Se.default(t=Se.default(r="".concat(e.getHours(),"点")).call(r,e.getMinutes(),"分")).call(t,e.getSeconds(),"秒")},date:function(e){var t,r;return Se.default(t=Se.default(r="".concat(e.getFullYear(),"年")).call(r,e.getMonth()+1,"月")).call(t,e.getDate(),"日")},shortdate:function(e){var t,r;return Se.default(t=Se.default(r="".concat(e.getFullYear(),"-")).call(r,e.getMonth()+1,"-")).call(t,e.getDate())},currency:function(e){return"".concat(e,"元")}},en:{currency:function(e){return"$".concat(e)}}},tt=We(/\{\s*(\w+)?((\s*\|\s*\w*(\(.*\))?\s*)*)\s*\}/g,{varname:1,formatters:2});function rt(e){return be.default(e).call(e,"{")&&be.default(e).call(e,"}")}he.default(Ce||(Ce=oe.default(["{s*{varname}s*}"],["\\{\\s*{varname}\\s*\\}"])));var at=["String","Number","Boolean","Object","Array","Function","Error","Symbol","RegExp","Date","Null","Undefined","Set","Map","WeakSet","WeakMap"];function nt(e){var t,r;if(!e)return[];var a=pe.default(t=me.default(r=me.default(e).call(e).substr(1)).call(r).split("|")).call(t,(function(e){return me.default(e).call(e)}));return pe.default(a).call(a,(function(e){var t=ve.default(e).call(e,"("),r=ye.default(e).call(e,")");if(-1!==t&&-1!==r){var a,n,l=me.default(a=e.substr(t+1,r-t-1)).call(a),u=""==l?[]:pe.default(n=l.split(",")).call(n,(function(e){if(e=me.default(e).call(e),!isNaN(je.default(e)))return je.default(e);if(ke.default(e).call(e,'"')&&qe.default(e).call(e,'"')||ke.default(e).call(e,"'")&&qe.default(e).call(e,"'"))return e.substr(1,e.length-2);if("true"===e.toLowerCase()||"false"===e.toLowerCase())return"true"===e.toLowerCase();if(!(ke.default(e).call(e,"{")&&qe.default(e).call(e,"}")||ke.default(e).call(e,"[")&&qe.default(e).call(e,"]")))return String(e);try{return JSON.parse(e)}catch(t){return String(e)}}));return[e.substr(0,t),u]}return[e,[]]}))}function lt(e,t){var r,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=e,l=xe.default({replaceAll:!0},a);for(tt.lastIndex=0;null!==(r=tt.exec(n));){var u=r.groups.varname||"",s=nt(r.groups.formatters);if("function"==typeof t)try{n=we.default(l)?we.default(n).call(n,r[0],t(u,s,r[0])):n.replace(r[0],t(u,s,r[0]))}catch(e){break}tt.lastIndex=0}return n}function ut(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;e.$cache={activeLanguage:t,typedFormatters:{},formatters:{}}}function st(e,t,r){var a,n=[],l=Ye(r);try{var u=function(){var r=a.value;if(r[0]){var l=function(e,t,r){if(e.$cache||ut(e),e.$cache.activeLanguage===t){if(r in e.$cache.formatters)return e.$cache.formatters[r]}else ut(e,t);for(var a=0,n=[e.formatters,e.global.formatters];a1?a-1:0),l=1;li)return it(t,r,a,s[i++]);throw new Error}),{replaceAll:!1})}var ot={defaultLanguage:"zh",activeLanguage:"zh",languages:[{name:"zh",title:"中文",default:!0},{name:"en",title:"英文"}],formatters:et};function ft(e){return je.default(e)>0}function dt(e,t){try{return Le.default(e)?e.length>t?e[t]:e[e.length-1]:e}catch(t){return Le.default(e)?e[0]:e}}function gt(e){var t,r,a,n,l,u,s,i;return we.default(t=we.default(r=we.default(a=we.default(n=we.default(l=we.default(u=we.default(s=we.default(i=we.default(e).call(e,/\\(?![trnbvf'"]{1})/g,"\\\\")).call(i,"\t","\\t")).call(s,"\n","\\n")).call(u,"\b","\\b")).call(l,"\r","\\r")).call(n,"\f","\\f")).call(a,"'","\\'")).call(r,'"','\\"')).call(t,"\v","\\v")}function ht(e){var t,r,a,n,l,u,s,i;return we.default(t=we.default(r=we.default(a=we.default(n=we.default(l=we.default(u=we.default(s=we.default(i=we.default(e).call(e,"\\t","\t")).call(i,"\\n","\n")).call(s,"\\b","\b")).call(u,"\\r","\r")).call(l,"\\f","\f")).call(n,"\\'","'")).call(a,'\\"','"')).call(r,"\\v","\v")).call(t,/\\\\(?![trnbvf'"]{1})/g,"\\")}var bt=function(e){fe.default(l,e);var t,r,a,n=Ue(l);function l(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return re.default(this,l),e=n.call(this),null!=l.instance||(l.instance=ne.default(e),e._settings=Qe(ot,t),e._scopes=[]),le.default(e,l.instance)}return ae.default(l,[{key:"settings",get:function(){return this._settings}},{key:"scopes",get:function(){return this._scopes}},{key:"activeLanguage",get:function(){return this._settings.activeLanguage}},{key:"defaultLanguage",get:function(){return this._settings.defaultLanguage}},{key:"languages",get:function(){return this._settings.languages}},{key:"formatters",get:function(){return et}},{key:"change",value:(a=te.default(ge.default.mark((function e(t){var r;return ge.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=me.default(t).call(t),-1===_e.default(r=this.languages).call(r,(function(e){return e.name===t}))){e.next=9;break}return e.next=4,this._refreshScopes(t);case 4:return this._settings.activeLanguage=t,e.next=7,this.emit(t);case 7:e.next=10;break;case 9:throw new Error("Not supported language:"+t);case 10:case"end":return e.stop()}}),e,this)}))),function(e){return a.apply(this,arguments)})},{key:"_refreshScopes",value:(r=te.default(ge.default.mark((function e(t){var r,a;return ge.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,a=pe.default(r=this._scopes).call(r,(function(e){return e.refresh(t)})),!Te.default.allSettled){e.next=7;break}return e.next=5,Te.default.allSettled(a);case 5:e.next=9;break;case 7:return e.next=9,Te.default.all(a);case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(0),console.warn("Error while refreshing i18n scopes:",e.t0.message);case 14:case"end":return e.stop()}}),e,this,[[0,11]])}))),function(e){return r.apply(this,arguments)})},{key:"register",value:(t=te.default(ge.default.mark((function e(t){return ge.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t instanceof Ze){e.next=2;break}throw new TypeError("Scope must be an instance of I18nScope");case 2:return this._scopes.push(t),e.next=5,t.refresh(this.activeLanguage);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"registerFormatter",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=r.language,n=void 0===a?"*":a;if("function"===!se.default(t)||"string"!=typeof e)throw new TypeError("Formatter must be a function");be.default(at).call(at,e)?this.formatters[n].$types[e]=t:this.formatters[n][e]=t}}]),l}(Xe),pt={getInterpolatedVars:function(e){var t=[];return lt(e,(function(e,r,a){var n={name:e,formatters:pe.default(r).call(r,(function(e){var t=ce.default(e,2);return{name:t[0],args:t[1]}})),match:a};return-1===_e.default(t).call(t,(function(e){return e.name===n.name&&n.formatters.toString()==e.formatters.toString()}))&&t.push(n),""})),t},replaceInterpolatedVars:ct,I18nManager:bt,translate:function(e){var t=this,r=t.global.activeLanguage,a=e,n=[],l=[],u=null;if("string"===!se.default(e))return e;try{var s,i;if(2===arguments.length&&Ke(arguments[1]))Me.default(s=Ae.default(arguments[1])).call(s,(function(e){var t=ce.default(e,2),r=t[0],a=t[1];if("function"==typeof a)try{n[r]=a()}catch(e){n[r]=a}ke.default(r).call(r,"$")&&"number"==typeof n[r]&&l.push(r)})),n=[arguments[1]];else if(arguments.length>=2){var c,o;n=pe.default(c=$e.default(o=Fe.default(Array.prototype).call(arguments)).call(o,1)).call(c,(function(e,t){try{e="function"==typeof e?e():e,Je(e)&&(u=je.default(e))}catch(e){}return e}))}if(r===t.defaultLanguage)ft(a)&&(a=t.default[a]||e);else{var f=ft(a)?a:t.idMap[gt(a)];a=t.messages[f]||a,a=Le.default(a)?pe.default(a).call(a,(function(e){return ht(e)})):ht(a)}return Le.default(a)&&a.length>0&&(a=null!==u?dt(a,u):pluralVar.length>0?dt(a,je.default(n(pluralVar[0]))):a[0]),0==n.length?a:ct.call.apply(ct,Se.default(i=[t,a]).call(i,ie.default(n)))}catch(e){return a}},i18nScope:Ze,defaultLanguageSettings:ot,getDataTypeName:Ge,isNumber:Je,isPlainObject:Ke};module.exports=pt;
+//# sourceMappingURL=index.cjs.map
diff --git a/packages/runtime/dist/index.cjs.map b/packages/runtime/dist/index.cjs.map
new file mode 100644
index 0000000..d88e68f
--- /dev/null
+++ b/packages/runtime/dist/index.cjs.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.cjs","sources":["../utils.js","../eventemitter.js","../scope.js","../index.js","../formatters.js"],"sourcesContent":["\r\n/**\r\n * 判断是否是JSON对象\r\n * @param {*} obj \r\n * @returns \r\n */\r\n function isPlainObject(obj){\r\n if (typeof obj !== 'object' || obj === null) return false;\r\n var proto = Object.getPrototypeOf(obj);\r\n if (proto === null) return true;\r\n var baseProto = proto;\r\n\r\n while (Object.getPrototypeOf(baseProto) !== null) {\r\n baseProto = Object.getPrototypeOf(baseProto);\r\n }\r\n return proto === baseProto; \r\n}\r\n\r\nfunction isNumber(value){\r\n return !isNaN(parseInt(value))\r\n}\r\n \r\n/**\r\n * 简单进行对象合并\r\n * \r\n * options={\r\n * array:0 , // 数组合并策略,0-替换,1-合并,2-去重合并\r\n * }\r\n * \r\n * @param {*} toObj \r\n * @param {*} formObj \r\n * @returns 合并后的对象\r\n */\r\nfunction deepMerge(toObj,formObj,options={}){\r\n let results = Object.assign({},toObj)\r\n Object.entries(formObj).forEach(([key,value])=>{\r\n if(key in results){\r\n if(typeof value === \"object\" && value !== null){\r\n if(Array.isArray(value)){\r\n if(options.array === 0){\r\n results[key] = value\r\n }else if(options.array === 1){\r\n results[key] = [...results[key],...value]\r\n }else if(options.array === 2){\r\n results[key] = [...new Set([...results[key],...value])]\r\n }\r\n }else{\r\n results[key] = deepMerge(results[key],value,options)\r\n }\r\n }else{\r\n results[key] = value\r\n }\r\n }else{\r\n results[key] = value\r\n }\r\n })\r\n return results\r\n}\r\n\r\n\r\n/**\r\n * 获取指定变量类型名称\r\n * getDataTypeName(1) == Number\r\n * getDataTypeName(\"\") == String\r\n * getDataTypeName(null) == Null\r\n * getDataTypeName(undefined) == Undefined\r\n * getDataTypeName(new Date()) == Date\r\n * getDataTypeName(new Error()) == Error\r\n * \r\n * @param {*} v \r\n * @returns \r\n */\r\n function getDataTypeName(v){\r\n\tif (v === null) return 'Null' \r\n\tif (v === undefined) return 'Undefined' \r\n if(typeof(v)===\"function\") return \"Function\"\r\n\treturn v.constructor && v.constructor.name;\r\n};\r\n\r\n\r\n\r\n\r\n\r\nmodule.exports ={\r\n isPlainObject,\r\n isNumber,\r\n deepMerge,\r\n getDataTypeName\r\n}","/**\r\n* \r\n* 简单的事件触发器\r\n* \r\n*/\r\nmodule.exports = class EventEmitter{\r\n constructor(){\r\n this._callbacks = []\r\n }\r\n on(callback){\r\n if(this._callbacks.includes(callback)) return\r\n this._callbacks.push(callback)\r\n }\r\n off(callback){\r\n for(let i=0;icb(...args)))\r\n }else{\r\n await Promise.all(this._callbacks.map(cb=>cb(...args)))\r\n }\r\n } \r\n}","\r\nmodule.exports = class i18nScope {\r\n constructor(options={},callback){\r\n // 每个作用域都有一个唯一的id\r\n this._id = options.id || (new Date().getTime().toString()+parseInt(Math.random()*1000))\r\n this._languages = options.languages // 当前作用域的语言列表\r\n this._defaultLanguage = options.defaultLanguage || \"zh\" // 默认语言名称\r\n this._activeLanguage = options.activeLanguage // 当前语言名称\r\n this._default = options.default // 默认语言包\r\n this._messages = options.messages // 当前语言包\r\n this._idMap = options.idMap // 消息id映射列表\r\n this._formatters = options.formatters // 当前作用域的格式化函数列表\r\n this._loaders = options.loaders // 异步加载语言文件的函数列表\r\n this._global = null // 引用全局VoerkaI18n配置,注册后自动引用 \r\n // 主要用来缓存格式化器的引用,当使用格式化器时可以直接引用,避免检索\r\n this.$cache={\r\n activeLanguage : null,\r\n typedFormatters: {},\r\n formatters : {},\r\n }\r\n // 如果不存在全局VoerkaI18n实例,说明当前Scope是唯一或第一个加载的作用域,\r\n // 则使用当前作用域来初始化全局VoerkaI18n实例\r\n if(!globalThis.VoerkaI18n){\r\n const { I18nManager } = require(\"./\")\r\n globalThis.VoerkaI18n = new I18nManager({\r\n defaultLanguage: this.defaultLanguage,\r\n activeLanguage : this.activeLanguage,\r\n languages: options.languages,\r\n })\r\n }\r\n this.global = globalThis.VoerkaI18n \r\n // 正在加载语言包标识\r\n this._loading=false\r\n // 在全局注册作用域\r\n this.register(callback)\r\n }\r\n // 作用域\r\n get id(){return this._id}\r\n // 默认语言名称\r\n get defaultLanguage(){return this._defaultLanguage}\r\n // 默认语言名称\r\n get activeLanguage(){return this._activeLanguage}\r\n // 默认语言包\r\n get default(){return this._default}\r\n // 当前语言包\r\n get messages(){return this._messages}\r\n // 消息id映射列表\r\n get idMap(){return this._idMap}\r\n // 当前作用域的格式化函数列表\r\n get formatters(){return this._formatters}\r\n // 异步加载语言文件的函数列表\r\n get loaders(){return this._loaders}\r\n // 引用全局VoerkaI18n配置,注册后自动引用\r\n get global(){return this._global}\r\n set global(value){this._global = value}\r\n /**\r\n * 在全局注册作用域\r\n * @param {*} callback 当注册\r\n */\r\n register(callback){\r\n if(!typeof(callback)===\"function\") callback = ()=>{} \r\n this.global.register(this).then(callback).catch(callback) \r\n }\r\n registerFormatter(name,formatter,{language=\"*\"}={}){\r\n if(!typeof(formatter)===\"function\" || typeof(name)!==\"string\"){\r\n throw new TypeError(\"Formatter must be a function\")\r\n } \r\n if(DataTypes.includes(name)){\r\n this.formatters[language].$types[name] = formatter\r\n }else{\r\n this.formatters[language][name] = formatter\r\n }\r\n }\r\n /**\r\n * 回退到默认语言\r\n */\r\n _fallback(){\r\n this._messages = this._default \r\n this._activeLanguage = this.defaultLanguage\r\n }\r\n /**\r\n * 刷新当前语言包\r\n * @param {*} newLanguage \r\n */\r\n async refresh(newLanguage){\r\n this._loading = Promise.resolve()\r\n if(!newLanguage) newLanguage = this.activeLanguage\r\n // 默认语言,默认语言采用静态加载方式,只需要简单的替换即可\r\n if(newLanguage === this.defaultLanguage){\r\n this._messages = this._default\r\n return \r\n }\r\n // 非默认语言需要异步加载语言包文件,加载器是一个异步函数\r\n // 如果没有加载器,则无法加载语言包,因此回退到默认语言\r\n const loader = this.loaders[newLanguage]\r\n if(typeof(loader) === \"function\"){\r\n try{\r\n this._messages = (await loader()).default\r\n this._activeLanguage = newLanguage\r\n }catch(e){\r\n console.warn(`Error while loading language <${newLanguage}> on i18nScope(${this.id}): ${e.message}`)\r\n this._fallback()\r\n } \r\n }else{\r\n this._fallback()\r\n } \r\n }\r\n // 以下方法引用全局VoerkaI18n实例的方法\r\n get on(){return this.global.on.bind(this.global)}\r\n get off(){return this.global.off.bind(this.global)}\r\n get offAll(){return this.global.offAll.bind(this.global)}\r\n get change(){\r\n return this.global.change.bind(this.global)\r\n }\r\n}","const { getDataTypeName,isNumber,isPlainObject,deepMerge } = require(\"./utils\")\r\nconst EventEmitter = require(\"./eventemitter\")\r\nconst i18nScope = require(\"./scope.js\")\r\nlet inlineFormatters = require(\"./formatters\") // 内置格式化器\r\n\r\n\r\n\r\n// 用来提取字符里面的插值变量参数 , 支持管道符 { var | formatter | formatter }\r\n// 不支持参数: let varWithPipeRegexp = /\\{\\s*(?\\w+)?(?(\\s*\\|\\s*\\w*\\s*)*)\\s*\\}/g\r\n\r\n// 支持参数: { var | formatter(x,x,..) | formatter }\r\nlet varWithPipeRegexp = /\\{\\s*(?\\w+)?(?(\\s*\\|\\s*\\w*(\\(.*\\)){0,1}\\s*)*)\\s*\\}/g\r\n\r\n// 插值变量字符串替换正则\r\n\r\n//let varReplaceRegexp =String.raw`\\{\\s*(?{name}\\.?\\w*)\\s*\\}`\r\n\r\n\r\nlet varReplaceRegexp =String.raw`\\{\\s*{varname}\\s*\\}`\r\n\r\n/**\r\n * 考虑到通过正则表达式进行插件的替换可能较慢,因此提供一个简单方法来过滤掉那些\r\n * 不需要进行插值处理的字符串\r\n * 原理很简单,就是判断一下是否同时具有{和}字符,如果有则认为可能有插值变量,如果没有则一定没有插件变量,则就不需要进行正则匹配\r\n * 从而可以减少不要的正则匹配\r\n * 注意:该方法只能快速判断一个字符串不包括插值变量\r\n * @param {*} str \r\n * @returns {boolean} true=可能包含插值变量,\r\n */\r\nfunction hasInterpolation(str){\r\n return str.includes(\"{\") && str.includes(\"}\")\r\n} \r\nconst DataTypes = [\"String\",\"Number\",\"Boolean\",\"Object\",\"Array\",\"Function\",\"Error\",\"Symbol\",\"RegExp\",\"Date\",\"Null\",\"Undefined\",\"Set\",\"Map\",\"WeakSet\",\"WeakMap\"]\r\n \r\n\r\n/**\r\n 通过正则表达式对原始文本内容进行解析匹配后得到的\r\n formatters=\"| aaa(1,1) | bbb \"\r\n\r\n 需要统一解析为\r\n\r\n [\r\n [aaa,[1,1]], // [formatter'name,[args,...]]\r\n [bbb,[]],\r\n ]\r\n\r\n formatters=\"| aaa(1,1,\"dddd\") | bbb \"\r\n\r\n 目前对参数采用简单的split(\",\")来解析,因为无法正确解析aaa(1,1,\"dd,,dd\")形式的参数\r\n 在此场景下基本够用了,如果需要支持更复杂的参数解析,可以后续考虑使用正则表达式来解析\r\n \r\n @returns [[,[,,...]]]\r\n */\r\nfunction parseFormatters(formatters){\r\n if(!formatters) return []\r\n // 1. 先解析为 [\"aaa()\",\"bbb\"]形式\r\n let result = formatters.trim().substr(1).trim().split(\"|\").map(r=>r.trim()) \r\n\r\n // 2. 解析格式化器参数\r\n return result.map(formatter=>{\r\n let firstIndex = formatter.indexOf(\"(\")\r\n let lastIndex = formatter.lastIndexOf(\")\")\r\n if(firstIndex!==-1 && lastIndex!==-1){ // 带参数的格式化器\r\n const argsContent = formatter.substr(firstIndex+1,lastIndex-firstIndex-1).trim()\r\n let args = argsContent==\"\" ? [] : argsContent.split(\",\").map(arg=>{\r\n arg = arg.trim()\r\n if(!isNaN(parseInt(arg))){\r\n return parseInt(arg) // 数字\r\n }else if((arg.startsWith('\\\"') && arg.endsWith('\\\"')) || (arg.startsWith('\\'') && arg.endsWith('\\'')) ){\r\n return arg.substr(1,arg.length-2) // 字符串\r\n }else if(arg.toLowerCase()===\"true\" || arg.toLowerCase()===\"false\"){\r\n return arg.toLowerCase()===\"true\" // 布尔值\r\n }else if((arg.startsWith('{') && arg.endsWith('}')) || (arg.startsWith('[') && arg.endsWith(']'))){ \r\n try{\r\n return JSON.parse(arg)\r\n }catch(e){\r\n return String(arg)\r\n }\r\n }else{\r\n return String(arg)\r\n }\r\n })\r\n return [formatter.substr(0,firstIndex),args]\r\n }else{// 不带参数的格式化器\r\n return [formatter,[]]\r\n } \r\n }) \r\n}\r\n\r\n/** \r\n * 提取字符串中的插值变量\r\n * // [\r\n // { \r\n name:<变量名称>,formatters:[{name:<格式化器名称>,args:[<参数>,<参数>,....]]}],<匹配字符串>],\r\n // ....\r\n // \r\n * @param {*} str \r\n * @param {*} isFull =true 保留所有插值变量 =false 进行去重\r\n * @returns {Array} \r\n * [\r\n * {\r\n * name:\"<变量名称>\",\r\n * formatters:[\r\n * {name:\"<格式化器名称>\",args:[<参数>,<参数>,....]},\r\n * {name:\"<格式化器名称>\",args:[<参数>,<参数>,....]},\r\n * ],\r\n * match:\"<匹配字符串>\"\r\n * },\r\n * ...\r\n * ]\r\n */\r\nfunction getInterpolatedVars(str){\r\n let vars = []\r\n forEachInterpolatedVars(str,(varName,formatters,match)=>{\r\n let varItem = {\r\n name:varName,\r\n formatters:formatters.map(([formatter,args])=>{\r\n return {\r\n name:formatter,\r\n args:args\r\n }\r\n }),\r\n match:match\r\n }\r\n if(vars.findIndex(varDef=>((varDef.name===varItem.name) && (varItem.formatters.toString() == varDef.formatters.toString())))===-1){\r\n vars.push(varItem) \r\n }\r\n return \"\"\r\n }) \r\n return vars\r\n}\r\n/**\r\n * 遍历str中的所有插值变量传递给callback,将callback返回的结果替换到str中对应的位置\r\n * @param {*} str \r\n * @param {Function(<变量名称>,[formatters],match[0])} callback \r\n * @returns 返回替换后的字符串\r\n */\r\nfunction forEachInterpolatedVars(str,callback,options={}){\r\n let result=str, match \r\n let opts = Object.assign({\r\n replaceAll:true, // 是否替换所有插值变量,当使用命名插值时应置为true,当使用位置插值时应置为false\r\n },options)\r\n varWithPipeRegexp.lastIndex=0\r\n while ((match = varWithPipeRegexp.exec(result)) !== null) {\r\n const varname = match.groups.varname || \"\"\r\n // 解析格式化器和参数 = [,[,[,,...]]]\r\n const formatters = parseFormatters(match.groups.formatters)\r\n if(typeof(callback)===\"function\"){\r\n try{\r\n if(opts.replaceAll){\r\n result=result.replaceAll(match[0],callback(varname,formatters,match[0]))\r\n }else{\r\n result=result.replace(match[0],callback(varname,formatters,match[0]))\r\n } \r\n }catch{// callback函数可能会抛出异常,如果抛出异常,则中断匹配过程\r\n break \r\n } \r\n }\r\n varWithPipeRegexp.lastIndex=0\r\n }\r\n return result\r\n}\r\n/**\r\n * 将要翻译内容提供了一个非文本内容时进行默认的转换\r\n * - 对函数则执行并取返回结果()\r\n * - 对Array和Object使用JSON.stringify\r\n * - 其他类型使用toString\r\n * \r\n * @param {*} value \r\n * @returns \r\n */\r\nfunction transformToString(value){\r\n let result = value\r\n if(typeof(result)===\"function\") result = value()\r\n if(!(typeof(result)===\"string\")){\r\n if(Array.isArray(result) || isPlainObject(result)){\r\n result = JSON.stringify(result)\r\n }else{\r\n result = result.toString()\r\n }\r\n }\r\n return result\r\n}\r\n\r\nfunction resetScopeCache(scope,activeLanguage=null){\r\n scope.$cache = {activeLanguage,typedFormatters:{},formatters:{}}\r\n}\r\n/**\r\n * 取得指定数据类型的默认格式化器 \r\n * \r\n * 可以为每一个数据类型指定一个默认的格式化器,当传入插值变量时,\r\n * 会自动调用该格式化器来对值进行格式化转换\r\n \r\n const formatters = { \r\n \"*\":{\r\n $types:{...} // 在所有语言下只作用于特定数据类型的格式化器\r\n }, // 在所有语言下生效的格式化器 \r\n zh:{ \r\n $types:{ \r\n [数据类型]:(value)=>{...},\r\n }, \r\n [格式化器名称]:(value)=>{...},\r\n [格式化器名称]:(value)=>{...},\r\n [格式化器名称]:(value)=>{...},\r\n },\r\n }\r\n * @param {*} scope \r\n * @param {*} activeLanguage \r\n * @param {*} dataType 数字类型\r\n * @returns {Function} 格式化函数 \r\n */\r\nfunction getDataTypeDefaultFormatter(scope,activeLanguage,dataType){\r\n if(!scope.$cache) resetScopeCache(scope)\r\n if(scope.$cache.activeLanguage === activeLanguage) {\r\n if(dataType in scope.$cache.typedFormatters) return scope.$cache.typedFormatters[dataType]\r\n }else{// 当语言切换时清空缓存\r\n resetScopeCache(scope,activeLanguage)\r\n }\r\n\r\n // 先在当前作用域中查找,再在全局查找\r\n const targets = [scope.formatters,scope.global.formatters] \r\n for(const target of targets){\r\n if(!target) continue\r\n // 优先在当前语言的$types中查找\r\n if((activeLanguage in target) && isPlainObject(target[activeLanguage].$types)){ \r\n let formatters = target[activeLanguage].$types \r\n if(dataType in formatters && typeof(formatters[dataType])===\"function\"){ \r\n return scope.$cache.typedFormatters[dataType] = formatters[dataType]\r\n } \r\n }\r\n // 在所有语言的$types中查找\r\n if((\"*\" in target) && isPlainObject(target[\"*\"].$types)){\r\n let formatters = target[\"*\"].$types \r\n if(dataType in formatters && typeof(formatters[dataType])===\"function\"){ \r\n return scope.$cache.typedFormatters[dataType] = formatters[dataType]\r\n } \r\n } \r\n } \r\n}\r\n\r\n/**\r\n * 获取指定名称的格式化器函数\r\n * @param {*} scope \r\n * @param {*} activeLanguage \r\n * @param {*} name 格式化器名称\r\n * @returns {Function} 格式化函数 \r\n */ \r\nfunction getFormatter(scope,activeLanguage,name){\r\n // 缓存格式化器引用,避免重复检索\r\n if(!scope.$cache) resetScopeCache(scope)\r\n if(scope.$cache.activeLanguage === activeLanguage) {\r\n if(name in scope.$cache.formatters) return scope.$cache.formatters[name]\r\n }else{// 当语言切换时清空缓存\r\n resetScopeCache(scope,activeLanguage)\r\n }\r\n // 先在当前作用域中查找,再在全局查找\r\n const targets = [scope.formatters,scope.global.formatters] \r\n for(const target of targets){\r\n // 优先在当前语言查找\r\n if(activeLanguage in target){ \r\n let formatters = target[activeLanguage] || {} \r\n if((name in formatters) && typeof(formatters[name])===\"function\") return scope.$cache.formatters[name] = formatters[name]\r\n }\r\n // 在所有语言的$types中查找\r\n let formatters = target[\"*\"] || {} \r\n if((name in formatters) && typeof(formatters[name])===\"function\") return scope.$cache.formatters[name] = formatters[name]\r\n } \r\n}\r\n\r\n/**\r\n * 执行格式化器并返回结果\r\n * @param {*} value \r\n * @param {*} formatters 多个格式化器顺序执行,前一个输出作为下一个格式化器的输入\r\n */\r\nfunction executeFormatter(value,formatters){\r\n if(formatters.length===0) return value\r\n let result = value\r\n try{\r\n for(let formatter of formatters){\r\n if(typeof(formatter) === \"function\") {\r\n result = formatter(result)\r\n }else{// 如果碰到无效的格式化器,则跳过过续的格式化器\r\n return result \r\n }\r\n }\r\n }catch(e){\r\n console.error(`Error while execute i18n formatter for ${value}: ${e.message} ` )\r\n } \r\n return result\r\n}\r\n/**\r\n * 将 [[格式化器名称,[参数,参数,...]],[格式化器名称,[参数,参数,...]]]格式化器转化为\r\n * \r\n * \r\n * \r\n * @param {*} scope \r\n * @param {*} activeLanguage \r\n * @param {*} formatters \r\n */\r\nfunction buildFormatters(scope,activeLanguage,formatters){\r\n let results = [] \r\n for(let formatter of formatters){\r\n if(formatter[0]){\r\n const func = getFormatter(scope,activeLanguage,formatter[0])\r\n if(typeof(func)===\"function\"){\r\n results.push((v)=>{\r\n return func(v,...formatter[1])\r\n })\r\n }else{\r\n // 格式化器无效或者没有定义时,查看当前值是否具有同名的原型方法,如果有则执行调用\r\n // 比如padStart格式化器是String的原型方法,不需要配置就可以直接作为格式化器调用\r\n results.push((v)=>{\r\n if(typeof(v[formatter[0]])===\"function\"){\r\n return v[formatter[0]].call(v,...formatter[1])\r\n }else{\r\n return v\r\n } \r\n }) \r\n } \r\n }\r\n }\r\n return results\r\n} \r\n\r\n/**\r\n * 将value经过格式化器处理后返回\r\n * @param {*} scope \r\n * @param {*} activeLanguage \r\n * @param {*} formatters \r\n * @param {*} value \r\n * @returns \r\n */\r\nfunction getFormattedValue(scope,activeLanguage,formatters,value){\r\n // 1. 取得格式化器函数列表\r\n const formatterFuncs = buildFormatters(scope,activeLanguage,formatters) \r\n // 2. 查找每种数据类型默认格式化器,并添加到formatters最前面,默认数据类型格式化器优先级最高\r\n const defaultFormatter = getDataTypeDefaultFormatter(scope,activeLanguage,getDataTypeName(value)) \r\n if(defaultFormatter){\r\n formatterFuncs.splice(0,0,defaultFormatter)\r\n } \r\n // 3. 执行格式化器\r\n value = executeFormatter(value,formatterFuncs) \r\n return value\r\n}\r\n\r\n/**\r\n * 字符串可以进行变量插值替换,\r\n * replaceInterpolatedVars(\"<模板字符串>\",{变量名称:变量值,变量名称:变量值,...})\r\n * replaceInterpolatedVars(\"<模板字符串>\",[变量值,变量值,...])\r\n * replaceInterpolatedVars(\"<模板字符串>\",变量值,变量值,...])\r\n * \r\n- 当只有两个参数并且第2个参数是{}时,将第2个参数视为命名变量的字典\r\n replaceInterpolatedVars(\"this is {a}+{b},{a:1,b:2}) --> this is 1+2\r\n- 当只有两个参数并且第2个参数是[]时,将第2个参数视为位置参数\r\n replaceInterpolatedVars\"this is {}+{}\",[1,2]) --> this is 1+2\r\n- 普通位置参数替换\r\n replaceInterpolatedVars(\"this is {a}+{b}\",1,2) --> this is 1+2\r\n- \r\nthis == scope == { formatters: {}, ... }\r\n* @param {*} template \r\n* @returns \r\n*/\r\nfunction replaceInterpolatedVars(template,...args) {\r\n const scope = this\r\n // 当前激活语言\r\n const activeLanguage = scope.global.activeLanguage \r\n let result=template\r\n\r\n // 没有变量插值则的返回原字符串 \r\n if(args.length===0 || !hasInterpolation(template)) return template \r\n\r\n // ****************************变量插值****************************\r\n if(args.length===1 && isPlainObject(args[0])){ \r\n // 读取模板字符串中的插值变量列表\r\n // [[var1,[formatter,formatter,...],match],[var2,[formatter,formatter,...],match],...}\r\n let varValues = args[0]\r\n return forEachInterpolatedVars(template,(varname,formatters)=>{\r\n let value = (varname in varValues) ? varValues[varname] : ''\r\n return getFormattedValue(scope,activeLanguage,formatters,value) \r\n }) \r\n }else{ \r\n // ****************************位置插值****************************\r\n // 如果只有一个Array参数,则认为是位置变量列表,进行展开\r\n const params=(args.length===1 && Array.isArray(args[0])) ? [...args[0]] : args \r\n if(params.length===0) return template // 没有变量则不需要进行插值处理,返回原字符串 \r\n let i = 0\r\n return forEachInterpolatedVars(template,(varname,formatters)=>{\r\n if(params.length>i){ \r\n return getFormattedValue(scope,activeLanguage,formatters,params[i++]) \r\n }else{\r\n throw new Error() // 抛出异常,停止插值处理\r\n }\r\n },{replaceAll:false})\r\n \r\n }\r\n return result\r\n} \r\n\r\n// 默认语言配置\r\nconst defaultLanguageSettings = { \r\n defaultLanguage: \"zh\",\r\n activeLanguage: \"zh\",\r\n languages:[\r\n {name:\"zh\",title:\"中文\",default:true},\r\n {name:\"en\",title:\"英文\"}\r\n ],\r\n formatters:inlineFormatters \r\n}\r\n\r\nfunction isMessageId(content){\r\n return parseInt(content)>0\r\n}\r\n/**\r\n * 根据值的单数和复数形式,从messages中取得相应的消息\r\n * \r\n * @param {*} messages 复数形式的文本内容 = [<=0时的内容>,<=1时的内容>,<=2时的内容>,...]\r\n * @param {*} value \r\n */\r\nfunction getPluraMessage(messages,value){\r\n try{\r\n if(Array.isArray(messages)){\r\n return messages.length > value ? messages[value] : messages[messages.length-1]\r\n }else{\r\n return messages\r\n }\r\n }catch{\r\n return Array.isArray(messages) ? messages[0] : messages\r\n }\r\n}\r\nfunction escape(str){\r\n return str.replaceAll(/\\\\(?![trnbvf'\"]{1})/g,\"\\\\\\\\\")\r\n .replaceAll(\"\\t\",\"\\\\t\")\r\n .replaceAll(\"\\n\",\"\\\\n\")\r\n .replaceAll(\"\\b\",\"\\\\b\")\r\n .replaceAll(\"\\r\",\"\\\\r\")\r\n .replaceAll(\"\\f\",\"\\\\f\")\r\n .replaceAll(\"\\'\",\"\\\\'\")\r\n .replaceAll('\\\"','\\\\\"')\r\n .replaceAll('\\v','\\\\v') \r\n}\r\nfunction unescape(str){\r\n return str\r\n .replaceAll(\"\\\\t\",\"\\t\")\r\n .replaceAll(\"\\\\n\",\"\\n\")\r\n .replaceAll(\"\\\\b\",\"\\b\")\r\n .replaceAll(\"\\\\r\",\"\\r\")\r\n .replaceAll(\"\\\\f\",\"\\f\")\r\n .replaceAll(\"\\\\'\",\"\\'\")\r\n .replaceAll('\\\\\"','\\\"')\r\n .replaceAll('\\\\v','\\v') \r\n .replaceAll(/\\\\\\\\(?![trnbvf'\"]{1})/g,\"\\\\\")\r\n}\r\n/**\r\n * 翻译函数\r\n * \r\n* translate(\"要翻译的文本内容\") 如果默认语言是中文,则不会进行翻译直接返回\r\n* translate(\"I am {} {}\",\"man\") == I am man 位置插值\r\n* translate(\"I am {p}\",{p:\"man\"}) 字典插值\r\n* translate(\"total {$count} items\", {$count:1}) //复数形式 \r\n* translate(\"total {} {} {} items\",a,b,c) // 位置变量插值\r\n * \r\n * this===scope 当前绑定的scope\r\n * \r\n */\r\nfunction translate(message) { \r\n const scope = this\r\n const activeLanguage = scope.global.activeLanguage \r\n let content = message\r\n let vars=[] // 插值变量列表\r\n let pluralVars= [] // 复数变量\r\n let pluraValue = null // 复数值\r\n if(!typeof(message)===\"string\") return message\r\n try{\r\n // 1. 预处理变量: 复数变量保存至pluralVars中 , 变量如果是Function则调用 \r\n if(arguments.length === 2 && isPlainObject(arguments[1])){\r\n Object.entries(arguments[1]).forEach(([name,value])=>{\r\n if(typeof(value)===\"function\"){\r\n try{\r\n vars[name] = value()\r\n }catch(e){\r\n vars[name] = value\r\n }\r\n } \r\n // 以$开头的视为复数变量\r\n if(name.startsWith(\"$\") && typeof(vars[name])===\"number\") pluralVars.push(name)\r\n })\r\n vars = [arguments[1]]\r\n }else if(arguments.length >= 2){\r\n vars = [...arguments].splice(1).map((arg,index)=>{\r\n try{\r\n arg = typeof(arg)===\"function\" ? arg() : arg \r\n // 位置参数中以第一个数值变量为复数变量\r\n if(isNumber(arg)) pluraValue = parseInt(arg) \r\n }catch(e){ }\r\n return arg \r\n })\r\n \r\n }\r\n \r\n \r\n \r\n\r\n // 3. 取得翻译文本模板字符串\r\n if(activeLanguage === scope.defaultLanguage){\r\n // 2.1 从默认语言中取得翻译文本模板字符串\r\n // 如果当前语言就是默认语言,不需要查询加载,只需要做插值变换即可\r\n // 当源文件运用了babel插件后会将原始文本内容转换为msgId\r\n // 如果是msgId则从scope.default中读取,scope.default=默认语言包={:}\r\n if(isMessageId(content)){\r\n content = scope.default[content] || message\r\n }\r\n }else{ \r\n // 2.2 从当前语言包中取得翻译文本模板字符串\r\n // 如果没有启用babel插件将源文本转换为msgId,需要先将文本内容转换为msgId\r\n // JSON.stringify在进行转换时会将\\t\\n\\r转换为\\\\t\\\\n\\\\r,这样在进行匹配时就出错 \r\n let msgId = isMessageId(content) ? content : scope.idMap[escape(content)] \r\n content = scope.messages[msgId] || content\r\n content = Array.isArray(content) ? content.map(v=>unescape(v)) : unescape(content)\r\n }\r\n // 2. 处理复数\r\n // 经过上面的处理,content可能是字符串或者数组\r\n // content = \"原始文本内容\" || 复数形式[\"原始文本内容\",\"原始文本内容\"....]\r\n // 如果是数组说明要启用复数机制,需要根据插值变量中的某个变量来判断复数形式\r\n if(Array.isArray(content) && content.length>0){\r\n // 如果存在复数命名变量,只取第一个复数变量\r\n if(pluraValue!==null){ // 启用的是位置插值,pluraIndex=第一个数字变量的位置\r\n content = getPluraMessage(content,pluraValue)\r\n }else if(pluralVar.length>0){\r\n content = getPluraMessage(content,parseInt(vars(pluralVar[0])))\r\n }else{ // 如果找不到复数变量,则使用第一个内容\r\n content = content[0]\r\n }\r\n } \r\n \r\n // 进行插值处理\r\n if(vars.length==0){\r\n return content\r\n }else{\r\n return replaceInterpolatedVars.call(scope,content,...vars)\r\n } \r\n }catch(e){\r\n return content // 出错则返回原始文本\r\n } \r\n}\r\n \r\n/** \r\n * 多语言管理类\r\n * \r\n * 当导入编译后的多语言文件时(import(\"./languages\")),会自动生成全局实例VoerkaI18n\r\n * \r\n * VoerkaI18n.languages // 返回支持的语言列表\r\n * VoerkaI18n.defaultLanguage // 默认语言\r\n * VoerkaI18n.language // 当前语言\r\n * VoerkaI18n.change(language) // 切换到新的语言 \r\n * \r\n * \r\n * VoerkaI18n.on(\"change\",(language)=>{}) // 注册语言切换事件\r\n * VoerkaI18n.off(\"change\",(language)=>{}) \r\n * \r\n * */ \r\n class I18nManager extends EventEmitter{\r\n constructor(settings={}){\r\n super()\r\n if(I18nManager.instance!=null){\r\n return I18nManager.instance;\r\n }\r\n I18nManager.instance = this;\r\n this._settings = deepMerge(defaultLanguageSettings,settings)\r\n this._scopes=[] \r\n return I18nManager.instance;\r\n }\r\n get settings(){ return this._settings }\r\n get scopes(){ return this._scopes }\r\n // 当前激活语言\r\n get activeLanguage(){ return this._settings.activeLanguage}\r\n // 默认语言\r\n get defaultLanguage(){ return this._settings.defaultLanguage}\r\n // 支持的语言列表\r\n get languages(){ return this._settings.languages}\r\n // 内置格式化器\r\n get formatters(){ return inlineFormatters }\r\n /**\r\n * 切换语言\r\n */\r\n async change(value){\r\n value=value.trim()\r\n if(this.languages.findIndex(lang=>lang.name === value)!==-1){\r\n // 通知所有作用域刷新到对应的语言包\r\n await this._refreshScopes(value)\r\n this._settings.activeLanguage = value\r\n /// 触发语言切换事件\r\n await this.emit(value) \r\n }else{\r\n throw new Error(\"Not supported language:\"+value)\r\n }\r\n }\r\n /**\r\n * 当切换语言时调用此方法来加载更新语言包\r\n * @param {*} newLanguage \r\n */\r\n async _refreshScopes(newLanguage){ \r\n // 并发执行所有作用域语言包的加载\r\n try{\r\n const scopeRefreshers = this._scopes.map(scope=>{\r\n return scope.refresh(newLanguage)\r\n })\r\n if(Promise.allSettled){\r\n await Promise.allSettled(scopeRefreshers)\r\n }else{\r\n await Promise.all(scopeRefreshers)\r\n } \r\n }catch(e){\r\n console.warn(\"Error while refreshing i18n scopes:\",e.message)\r\n } \r\n }\r\n /**\r\n * \r\n * 注册一个新的作用域\r\n * \r\n * 每一个库均对应一个作用域,每个作用域可以有多个语言包,且对应一个翻译函数\r\n * 除了默认语言外,其他语言采用动态加载的方式\r\n * \r\n * @param {*} scope \r\n */\r\n async register(scope){\r\n if(!(scope instanceof i18nScope)){\r\n throw new TypeError(\"Scope must be an instance of I18nScope\")\r\n }\r\n this._scopes.push(scope) \r\n await scope.refresh(this.activeLanguage) \r\n }\r\n /**\r\n * 注册全局格式化器\r\n * 格式化器是一个简单的同步函数value=>{...},用来对输入进行格式化后返回结果\r\n * \r\n * registerFormatters(name,value=>{...}) // 适用于所有语言\r\n * registerFormatters(name,value=>{...},{langauge:\"zh\"}) // 适用于cn语言\r\n * registerFormatters(name,value=>{...},{langauge:\"en\"}) // 适用于en语言 \r\n \r\n * @param {*} formatters \r\n */\r\n registerFormatter(name,formatter,{language=\"*\"}={}){\r\n if(!typeof(formatter)===\"function\" || typeof(name)!==\"string\"){\r\n throw new TypeError(\"Formatter must be a function\")\r\n } \r\n if(DataTypes.includes(name)){\r\n this.formatters[language].$types[name] = formatter\r\n }else{\r\n this.formatters[language][name] = formatter\r\n }\r\n }\r\n}\r\n\r\nmodule.exports ={\r\n getInterpolatedVars,\r\n replaceInterpolatedVars,\r\n I18nManager,\r\n translate,\r\n i18nScope,\r\n defaultLanguageSettings,\r\n getDataTypeName,\r\n isNumber,\r\n isPlainObject \r\n}","/**\r\n * 内置的格式化器\r\n * \r\n */\r\n\r\n\r\n/**\r\n * 字典格式化器\r\n * 根据输入data的值,返回后续参数匹配的结果\r\n * dict(data,,,,,,,...)\r\n * \r\n * \r\n * dict(1,1,\"one\",2,\"two\",3,\"three\",4,\"four\") == \"one\"\r\n * dict(2,1,\"one\",2,\"two\",3,\"three\",4,\"four\") == \"two\"\r\n * dict(3,1,\"one\",2,\"two\",3,\"three\",4,\"four\") == \"three\"\r\n * dict(4,1,\"one\",2,\"two\",3,\"three\",4,\"four\") == \"four\"\r\n * // 无匹配时返回原始值\r\n * dict(5,1,\"one\",2,\"two\",3,\"three\",4,\"four\") == 5 \r\n * // 无匹配时并且后续参数个数是奇数,则返回最后一个参数\r\n * dict(5,1,\"one\",2,\"two\",3,\"three\",4,\"four\",\"more\") == \"more\" \r\n * \r\n * 在翻译中使用\r\n * I have { value | dict(1,\"one\",2,\"two\",3,\"three\",4,\"four\")} apples\r\n * \r\n * @param {*} value \r\n * @param {...any} args \r\n * @returns \r\n */\r\n function dict(value,...args){\r\n for(let i=0;i0 && (args.length % 2!==0)) return args[args.length-1]\r\n return value\r\n}\r\n\r\nfunction formatCurrency(value,symbol,retainDots){\r\n\r\n}\r\n\r\nmodule.exports = { \r\n \"*\":{\r\n $types:{\r\n Date:(value)=>value.toLocaleString()\r\n },\r\n time:(value)=> value.toLocaleTimeString(), \r\n shorttime:(value)=> value.toLocaleTimeString(), \r\n date: (value)=> value.toLocaleDateString(), \r\n dict, //字典格式化器\r\n }, \r\n zh:{ \r\n $types:{\r\n Date:(value)=> `${value.getFullYear()}年${value.getMonth()+1}月${value.getDate()}日 ${value.getHours()}点${value.getMinutes()}分${value.getSeconds()}秒`\r\n },\r\n shortime:(value)=> value.toLocaleTimeString(), \r\n time:(value)=>`${value.getHours()}点${value.getMinutes()}分${value.getSeconds()}秒`, \r\n date: (value)=> `${value.getFullYear()}年${value.getMonth()+1}月${value.getDate()}日`,\r\n shortdate: (value)=> `${value.getFullYear()}-${value.getMonth()+1}-${value.getDate()}`,\r\n currency:(value)=>`${value}元`,\r\n },\r\n en:{\r\n currency:(value)=>{\r\n return `$${value}`\r\n }\r\n }\r\n}"],"names":["utils","obj","_typeof","proto","_Object$getPrototypeOf","baseProto","value","isNaN","_parseInt","deepMerge","toObj","formObj","options","results","_Object$assign","key","_Array$isArray","array","v","undefined","constructor","name","eventemitter","_callbacks","callback","_includesInstanceProperty","push","i","this","length","args","_Promise","allSettled","_mapInstanceProperty","cb","all","scope","_id","id","Date","getTime","toString","Math","random","_languages","languages","_defaultLanguage","defaultLanguage","_activeLanguage","activeLanguage","_default","_messages","messages","_idMap","idMap","_formatters","formatters","_loaders","loaders","_global","$cache","typedFormatters","_globalThis","VoerkaI18n","I18nManager","require$$0","global","_loading","register","then","formatter","language","TypeError","DataTypes","$types","newLanguage","resolve","loader","console","warn","_context3","message","_fallback","_bindInstanceProperty","on","off","offAll","change","getDataTypeName","isNumber","isPlainObject","EventEmitter","require$$1","i18nScope","require$$2","inlineFormatters","toLocaleString","time","toLocaleTimeString","shorttime","date","toLocaleDateString","dict","zh","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","shortime","shortdate","currency","en","varWithPipeRegexp","hasInterpolation","str","parseFormatters","result","substr","split","r","_trimInstanceProperty","firstIndex","_indexOfInstanceProperty","lastIndex","_lastIndexOfInstanceProperty","argsContent","arg","_startsWithInstanceProperty","_endsWithInstanceProperty","toLowerCase","String","JSON","parse","e","forEachInterpolatedVars","match","opts","replaceAll","exec","varname","groups","_replaceAllInstanceProperty","replace","resetScopeCache","buildFormatters","func","target","getFormatter","call","getFormattedValue","formatterFuncs","defaultFormatter","dataType","getDataTypeDefaultFormatter","error","executeFormatter","replaceInterpolatedVars","template","varValues","params","Error","defaultLanguageSettings","title","isMessageId","content","getPluraMessage","escape","unescape","settings","instance","_settings","_scopes","_findIndexInstanceProperty","lang","_refreshScopes","emit","scopeRefreshers","refresh","_context31","runtime","getInterpolatedVars","vars","varName","varItem","varDef","translate","pluralVars","pluraValue","arguments","index","msgId","pluralVar"],"mappings":"8zIAmFAA,GA7EC,SAAuBC,MACD,WAAfC,WAAOD,IAA4B,OAARA,EAAc,OAAO,MAChDE,EAAQC,WAAsBH,MACpB,OAAVE,EAAgB,OAAO,UACvBE,EAAYF,EAE4B,OAArCC,WAAsBC,IACzBA,EAAYD,WAAsBC,UAE/BF,IAAUE,GAoErBL,GAjEA,SAAkBM,UACNC,MAAMC,WAASF,KAgE3BN,GAlDA,SAASS,EAAUC,EAAMC,SAAQC,yDAAQ,GACjCC,EAAUC,WAAc,GAAGJ,kCAChBC,YAAiB,kCAAEI,OAAIT,UAC/BS,KAAOF,KACc,WAAjBX,WAAOI,IAAgC,OAAVA,KACzBU,WAAcV,OACQ,IAAlBM,EAAQK,MACPJ,EAAQE,GAAOT,OACb,GAAqB,IAAlBM,EAAQK,MAAY,OACzBJ,EAAQE,sCAAWF,EAAQE,eAAQT,SACjC,GAAqB,IAAlBM,EAAQK,MAAY,OACzBJ,EAAQE,cAAW,kDAAYF,EAAQE,eAAQT,YAGnDO,EAAQE,GAAON,EAAUI,EAAQE,GAAKT,EAAMM,QAGhDC,EAAQE,GAAOT,OAGnBO,EAAQE,GAAOT,KAGhBO,GA2BXb,GAXC,SAAyBkB,UACf,OAANA,EAAoB,YACdC,IAAND,EAAwB,YACV,mBAALA,EAAyB,WAC/BA,EAAEE,aAAeF,EAAEE,YAAYC,MCvEvCC,mDAEaC,WAAa,8CAEtB,SAAGC,SACIC,kBAAKF,mBAAoBC,SACvBD,WAAWG,KAAKF,sBAEzB,SAAIA,OACI,IAAIG,EAAE,EAAEA,EAAEC,KAAKL,WAAWM,OAAOF,IAAI,UAClCC,KAAKL,WAAWI,KAAKH,oBACfD,mBAAkBI,EAAE,0BAIrC,gBACSJ,WAAa,sDAEtB,8HAAcO,2BAAAA,cACPC,WAAQC,2CACDD,WAAQC,WAAWC,kBAAKV,oBAAe,SAAAW,UAAIA,eAAMJ,oDAEjDC,WAAQI,IAAIF,kBAAKV,oBAAe,SAAAW,UAAIA,eAAMJ,2GC1B5DM,+BACgBxB,yDAAQ,GAAGY,oEAEda,IAAmBzB,EAAQ0B,KAAO,IAAIC,MAAOC,UAAUC,WAAWjC,WAAuB,IAAdkC,KAAKC,eAChFC,WAAmBhC,EAAQiC,eAC3BC,iBAAmBlC,EAAQmC,iBAAmB,UAC9CC,gBAAmBpC,EAAQqC,oBAC3BC,SAAmBtC,eACnBuC,UAAmBvC,EAAQwC,cAC3BC,OAAmBzC,EAAQ0C,WAC3BC,YAAmB3C,EAAQ4C,gBAC3BC,SAAmB7C,EAAQ8C,aAC3BC,QAAmB,UAEnBC,OAAO,CACRX,eAAiB,KACjBY,gBAAiB,GACjBL,WAAiB,KAIjBM,WAAWC,WAAW,KACdC,EAAgBC,GAAhBD,uBACGD,WAAa,IAAIC,EAAY,CACpCjB,gBAAiBnB,KAAKmB,gBACtBE,eAAiBrB,KAAKqB,eACtBJ,UAAWjC,EAAQiC,iBAGtBqB,OAASJ,WAAWC,gBAEpBI,UAAS,OAETC,SAAS5C,4CAGlB,kBAAgBI,KAAKS,iCAErB,kBAA6BT,KAAKkB,6CAElC,kBAA4BlB,KAAKoB,qCAEjC,kBAAqBpB,KAAKsB,+BAE1B,kBAAsBtB,KAAKuB,6BAE3B,kBAAmBvB,KAAKyB,+BAExB,kBAAwBzB,KAAK2B,iCAE7B,kBAAqB3B,KAAK6B,6BAE1B,kBAAoB7B,KAAK+B,aACzB,SAAWrD,QAAYqD,QAAUrD,0BAKjC,SAASkB,GACkB,yBAAZA,KAAwBA,EAAW,mBACzC0C,OAAOE,SAASxC,MAAMyC,KAAK7C,SAAgBA,oCAEpD,SAAkBH,EAAKiD,gEAAyB,OAAdC,SAAAA,aAAS,SACf,yBAAbD,IAA0C,iBAARjD,QACnC,IAAImD,UAAU,gCAErB/C,WAAAgD,gBAAAA,UAAmBpD,QACbmC,WAAWe,GAAUG,OAAOrD,GAAQiD,OAEpCd,WAAWe,GAAUlD,GAAQiD,2BAM1C,gBACSnB,UAAYvB,KAAKsB,cACjBF,gBAAkBpB,KAAKmB,sEAMhC,WAAc4B,6FACLR,SAAWpC,WAAQ6C,UACpBD,IAAaA,EAAc/C,KAAKqB,gBAEjC0B,IAAgB/C,KAAKmB,4CACfI,UAAYvB,KAAKsB,sCAMJ,mBADhB2B,EAASjD,KAAK8B,QAAQiB,+CAGKE,iBAApB1B,8BACAH,gBAAkB2B,oDAEvBG,QAAQC,uEAAsCJ,6BAA6B/C,KAAKU,kBAAQ0C,KAAEC,eACrFC,iDAGJA,kIAIb,wBAAgBC,kBAAKjB,OAAOkB,WAAQxD,KAAKsC,yBACzC,wBAAiBiB,kBAAKjB,OAAOmB,YAASzD,KAAKsC,4BAC3C,wBAAoBiB,kBAAKjB,OAAOoB,eAAY1D,KAAKsC,4BACjD,wBACWiB,kBAAKjB,OAAOqB,eAAY3D,KAAKsC,mzEChH5C,IAAQsB,GAAqDvB,GAArCwB,GAAqCxB,GAA5ByB,GAA4BzB,GAAdxD,GAAcwD,GACvD0B,GAAeC,GACfC,GAAYC,GACbC,GCuCY,KACT,CACArB,OAAO,CACHnC,KAAK,SAACjC,UAAQA,EAAM0F,mBAExBC,KAAK,SAAC3F,UAAUA,EAAM4F,sBACtBC,UAAU,SAAC7F,UAAUA,EAAM4F,sBAC3BE,KAAM,SAAC9F,UAASA,EAAM+F,sBACtBC,KAtBP,SAAchG,8BAASwB,mCAAAA,wBAChB,IAAIH,EAAE,EAAEA,EAAEG,EAAKD,OAAOF,GAAG,KACtBG,EAAKH,KAAKrB,SACFwB,EAAKH,EAAE,UAGnBG,EAAKD,OAAQ,GAAMC,EAAKD,OAAS,GAAI,EAAWC,EAAKA,EAAKD,OAAO,GAC7DvB,IAiBPiG,GAAG,CACC7B,OAAO,CACHnC,KAAK,SAACjC,mGAAYA,EAAMkG,2BAAiBlG,EAAMmG,WAAW,eAAKnG,EAAMoG,wBAAcpG,EAAMqG,wBAAcrG,EAAMsG,0BAAgBtG,EAAMuG,oBAEvIC,SAAS,SAACxG,UAAUA,EAAM4F,sBAC1BD,KAAK,SAAC3F,sDAAWA,EAAMqG,wBAAcrG,EAAMsG,0BAAgBtG,EAAMuG,mBACjET,KAAM,SAAC9F,sDAAYA,EAAMkG,2BAAiBlG,EAAMmG,WAAW,eAAKnG,EAAMoG,gBACtEK,UAAW,SAACzG,sDAAYA,EAAMkG,2BAAiBlG,EAAMmG,WAAW,eAAKnG,EAAMoG,YAC3EM,SAAS,SAAC1G,mBAAWA,SAEzB2G,GAAG,CACCD,SAAS,SAAC1G,oBACKA,MDrDnB4G,MAAoB,0EAkBxB,SAASC,GAAiBC,UACf3F,WAAA2F,QAAAA,EAAa,MAAQ3F,WAAA2F,QAAAA,EAAa,sFAE7C,IAAM3C,GAAa,CAAC,SAAS,SAAS,UAAU,SAAS,QAAQ,WAAW,QAAQ,SAAS,SAAS,OAAO,OAAO,YAAY,MAAM,MAAM,UAAU,WAqBtJ,SAAS4C,GAAgB7D,eACjBA,EAAY,MAAO,OAEnB8D,EAASrF,qCAAAuB,QAAAA,GAAkB+D,OAAO,YAAUC,MAAM,cAAS,SAAAC,UAAGC,WAAAD,QAAAA,aAG3DxF,WAAAqF,QAAAA,GAAW,SAAAhD,OACVqD,EAAaC,WAAAtD,QAAAA,EAAkB,KAC/BuD,EAAYC,WAAAxD,QAAAA,EAAsB,SACrB,IAAdqD,IAAgC,IAAbE,EAAe,SAC3BE,EAAeL,aAAApD,EAAUiD,OAAOI,EAAW,EAAEE,EAAUF,EAAW,YACpE7F,EAAoB,IAAbiG,EAAkB,GAAM9F,aAAA8F,EAAYP,MAAM,cAAS,SAAAQ,MAC1DA,EAAMN,WAAAM,QAAAA,IACFzH,MAAMC,WAASwH,WACRxH,WAASwH,GACd,GAAIC,WAAAD,QAAAA,EAAe,MAASE,WAAAF,QAAAA,EAAa,MAAWC,WAAAD,QAAAA,EAAe,MAASE,WAAAF,QAAAA,EAAa,YACpFA,EAAIT,OAAO,EAAES,EAAInG,OAAO,GAC7B,GAAuB,SAApBmG,EAAIG,eAA8C,UAApBH,EAAIG,oBACZ,SAApBH,EAAIG,cACT,KAAIF,WAAAD,QAAAA,EAAe,MAAQE,WAAAF,QAAAA,EAAa,MAAUC,WAAAD,QAAAA,EAAe,MAAQE,WAAAF,QAAAA,EAAa,aAOjFI,OAAOJ,cALHK,KAAKC,MAAMN,GACrB,MAAMO,UACIH,OAAOJ,aAMnB,CAAC1D,EAAUiD,OAAO,EAAEI,GAAY7F,SAEhC,CAACwC,EAAU,OAqD9B,SAASkE,GAAwBpB,EAAI5F,OACjBiH,EAD0B7H,yDAAQ,GAC9C0G,EAAOF,EACPsB,EAAO5H,WAAc,CACrB6H,YAAW,GACb/H,OACFsG,GAAkBW,UAAU,EACwB,QAA5CY,EAAQvB,GAAkB0B,KAAKtB,KAAmB,KAChDuB,EAAUJ,EAAMK,OAAOD,SAAW,GAElCrF,EAAa6D,GAAgBoB,EAAMK,OAAOtF,eAC1B,mBAAZhC,MAGE8F,aADDoB,GACQK,WAAAzB,QAAAA,EAAkBmB,EAAM,GAAGjH,EAASqH,EAAQrF,EAAWiF,EAAM,KAE7DnB,EAAO0B,QAAQP,EAAM,GAAGjH,EAASqH,EAAQrF,EAAWiF,EAAM,KAExE,eAILvB,GAAkBW,UAAU,SAEzBP,EAwBX,SAAS2B,GAAgB7G,OAAMa,yDAAe,KAC1Cb,EAAMwB,OAAS,CAACX,eAAAA,EAAeY,gBAAgB,GAAGL,WAAW,IAkHjE,SAAS0F,GAAgB9G,EAAMa,EAAeO,SACtC3C,EAAU,QACO2C,4BAAbc,aACDA,EAAU,GAAG,KACN6E,EAxDlB,SAAsB/G,EAAMa,EAAe5B,MAEnCe,EAAMwB,QAAQqF,GAAgB7G,GAC/BA,EAAMwB,OAAOX,iBAAmBA,MAC5B5B,KAAQe,EAAMwB,OAAOJ,WAAY,OAAOpB,EAAMwB,OAAOJ,WAAWnC,QAEnE4H,GAAgB7G,EAAMa,iBAGV,CAACb,EAAMoB,WAAWpB,EAAM8B,OAAOV,2BACnB,KAAlB4F,UAEHnG,KAAkBmG,EAAO,KACpB5F,EAAa4F,EAAOnG,IAAmB,MACvC5B,KAAQmC,GAA0C,mBAApBA,EAAWnC,GAAqB,OAAOe,EAAMwB,OAAOJ,WAAWnC,GAAQmC,EAAWnC,OAGpHmC,EAAa4F,EAAO,MAAQ,MAC5B/H,KAAQmC,GAA0C,mBAApBA,EAAWnC,GAAqB,OAAOe,EAAMwB,OAAOJ,WAAWnC,GAAQmC,EAAWnC,IAsCnGgI,CAAajH,EAAMa,EAAeqB,EAAU,IACvC,mBAAR6E,EACNtI,EAAQa,MAAK,SAACR,gBACHiI,6BAAKjI,sBAAKoD,EAAU,SAK/BzD,EAAQa,MAAK,SAACR,iBACmB,mBAAnBA,EAAEoD,EAAU,OACXpD,EAAEoD,EAAU,KAAIgF,2BAAKpI,sBAAKoD,EAAU,MAEpCpD,2EAMpBL,EAWX,SAAS0I,GAAkBnH,EAAMa,EAAeO,EAAWlD,OAEjDkJ,EAAiBN,GAAgB9G,EAAMa,EAAeO,GAEtDiG,EA7HV,SAAqCrH,EAAMa,EAAeyG,MAClDtH,EAAMwB,QAAQqF,GAAgB7G,GAC/BA,EAAMwB,OAAOX,iBAAmBA,MAC5ByG,KAAYtH,EAAMwB,OAAOC,gBAAiB,OAAOzB,EAAMwB,OAAOC,gBAAgB6F,QAEjFT,GAAgB7G,EAAMa,iBAIV,CAACb,EAAMoB,WAAWpB,EAAM8B,OAAOV,2BACnB,KAAlB4F,UACFA,MAEAnG,KAAkBmG,GAAW1D,GAAc0D,EAAOnG,GAAgByB,QAAQ,KACtElB,EAAa4F,EAAOnG,GAAgByB,UACrCgF,KAAYlG,GAA6C,mBAAxBA,EAAWkG,UACpCtH,EAAMwB,OAAOC,gBAAgB6F,GAAYlG,EAAWkG,MAI/D,MAAON,GAAW1D,GAAc0D,EAAO,KAAK1E,QAAQ,KAChDlB,EAAa4F,EAAO,KAAK1E,UAC1BgF,KAAYlG,GAA6C,mBAAxBA,EAAWkG,UACpCtH,EAAMwB,OAAOC,gBAAgB6F,GAAYlG,EAAWkG,MAsG7CC,CAA4BvH,EAAMa,EAAeuC,GAAgBlF,WACxFmJ,cACCD,QAAAA,EAAsB,EAAE,EAAEC,GAG9BnJ,EAnEJ,SAA0BA,EAAMkD,MACL,IAApBA,EAAW3B,OAAY,OAAOvB,MAC7BgH,EAAShH,iBAEYkD,kCAAW,KAAxBc,aACqB,mBAAfA,SAGCgD,EAFPA,EAAShD,EAAUgD,mCAK9B,MAAMiB,SACHzD,QAAQ8E,oEAAgDtJ,gBAAUiI,EAAEtD,qBAEjEqC,EAqDCuC,CAAiBvJ,EAAMkJ,GACxBlJ,EAoBX,SAASwJ,GAAwBC,WACvB3H,EAAQR,KAERqB,EAAiBb,EAAM8B,OAAOjB,kCAHKnB,mCAAAA,uBAOxB,IAAdA,EAAKD,SAAesF,GAAiB4C,GAAW,OAAOA,KAGzC,IAAdjI,EAAKD,QAAc6D,GAAc5D,EAAK,IAAI,KAGrCkI,EAAYlI,EAAK,UACd0G,GAAwBuB,GAAS,SAAClB,EAAQrF,OACzClD,EAAUuI,KAAWmB,EAAaA,EAAUnB,GAAW,UACpDU,GAAkBnH,EAAMa,EAAeO,EAAWlD,UAKvD2J,EAAsB,IAAdnI,EAAKD,QAAcb,WAAcc,EAAK,eAAYA,EAAK,IAAMA,KACxD,IAAhBmI,EAAOpI,OAAY,OAAOkI,MACzBpI,EAAI,SACD6G,GAAwBuB,GAAS,SAAClB,EAAQrF,MAC1CyG,EAAOpI,OAAOF,SACN4H,GAAkBnH,EAAMa,EAAeO,EAAWyG,EAAOtI,YAE1D,IAAIuI,QAEhB,CAACvB,YAAW,IAOtB,IAAMwB,GAA0B,CAC5BpH,gBAAiB,KACjBE,eAAgB,KAChBJ,UAAU,CACN,CAACxB,KAAK,KAAK+I,MAAM,cAAa,GAC9B,CAAC/I,KAAK,KAAK+I,MAAM,OAErB5G,WAAWuC,IAGf,SAASsE,GAAYC,UACV9J,WAAS8J,GAAS,EAQ7B,SAASC,GAAgBnH,EAAS9C,cAEvBU,WAAcoC,GACNA,EAASvB,OAASvB,EAAQ8C,EAAS9C,GAAS8C,EAASA,EAASvB,OAAO,GAEtEuB,EAEb,gBACUpC,WAAcoC,GAAYA,EAAS,GAAKA,GAGvD,SAASoH,GAAOpD,8BACL2B,mHAAA3B,QAAAA,EAAe,uBAAuB,gBAC7B,KAAK,eACL,KAAK,eACL,KAAK,eACL,KAAK,eACL,KAAK,eACL,IAAK,eACL,IAAK,eACL,KAAK,OAEzB,SAASqD,GAASrD,8BACP2B,mHAAA3B,QAAAA,EACS,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,aACN,MAAM,aACN,MAAM,cACN,yBAAyB,UA8GtCpD,oEACS0G,yDAAS,4CAEQ,MAAtB1G,EAAY2G,WAGf3G,EAAY2G,yBACPC,UAAYnK,GAAU0J,GAAwBO,KAC9CG,QAAQ,iBAJF7G,EAAY2G,mDAO3B,kBAAuB/I,KAAKgJ,8BAC5B,kBAAqBhJ,KAAKiJ,oCAE1B,kBAA6BjJ,KAAKgJ,UAAU3H,4CAE5C,kBAA8BrB,KAAKgJ,UAAU7H,uCAE7C,kBAAwBnB,KAAKgJ,UAAU/H,kCAEvC,kBAAyBkD,wDAIzB,WAAazF,oFACTA,EAAMoH,WAAApH,QAAAA,IACoD,IAAvDwK,kBAAKjI,mBAAoB,SAAAkI,UAAMA,EAAK1J,OAASf,qCAEtCsB,KAAKoJ,eAAe1K,sBACrBsK,UAAU3H,eAAiB3C,WAE1BsB,KAAKqJ,KAAK3K,uCAEV,IAAI4J,MAAM,0BAA0B5J,6JAOlD,WAAqBqE,+FAGPuG,EAAkBjJ,kBAAK4I,iBAAY,SAAAzI,UAC9BA,EAAM+I,QAAQxG,OAEtB5C,WAAQC,2CACDD,WAAQC,WAAWkJ,gDAEnBnJ,WAAQI,IAAI+I,4DAGtBpG,QAAQC,KAAK,sCAAsCqG,KAAEnG,sKAY7D,WAAe7C,8EACNA,aAAiByD,yBACZ,IAAIrB,UAAU,6DAEnBqG,QAAQnJ,KAAKU,YACZA,EAAM+I,QAAQvJ,KAAKqB,6IAY7B,SAAkB5B,EAAKiD,gEAAyB,OAAdC,SAAAA,aAAS,SACf,yBAAbD,IAA0C,iBAARjD,QACnC,IAAImD,UAAU,gCAErB/C,WAAAgD,SAAAA,GAAmBpD,QACbmC,WAAWe,GAAUG,OAAOrD,GAAQiD,OAEpCd,WAAWe,GAAUlD,GAAQiD,SAxFnBqB,IA6F3B0F,GAAgB,CACZC,oBA/hBJ,SAA6BlE,OACrBmE,EAAO,UACX/C,GAAwBpB,GAAI,SAACoE,EAAQhI,EAAWiF,OACxCgD,EAAU,CACVpK,KAAKmK,EACLhI,WAAWvB,WAAAuB,QAAAA,GAAe,wCACf,CACHnC,UACAS,cAGR2G,MAAMA,UAEsH,IAA7HqC,WAAAS,QAAAA,GAAe,SAAAG,UAAUA,EAAOrK,OAAOoK,EAAQpK,MAAUoK,EAAQjI,WAAWf,YAAciJ,EAAOlI,WAAWf,eAC3G8I,EAAK7J,KAAK+J,GAEP,MAEJF,GA8gBPzB,wBAAAA,GACA9F,YAAAA,GACA2H,UAjMJ,SAAmB1G,OACT7C,EAAQR,KACRqB,EAAiBb,EAAM8B,OAAOjB,eAChCqH,EAAUrF,EACVsG,EAAK,GACLK,EAAY,GACZC,EAAa,QACK,uBAAX5G,GAAqB,OAAOA,iBAGX,IAArB6G,UAAUjK,QAAgB6D,GAAcoG,UAAU,4BAClCA,UAAU,aAAY,kCAAEzK,OAAKf,UACrB,mBAATA,MAEFiL,EAAKlK,GAAQf,IAChB,MAAMiI,GACHgD,EAAKlK,GAAQf,EAIlB2H,WAAA5G,QAAAA,EAAgB,MAA6B,iBAAdkK,EAAKlK,IAAoBuK,EAAWlK,KAAKL,MAE/EkK,EAAO,CAACO,UAAU,SAChB,GAAGA,UAAUjK,QAAU,EAAE,SAC3B0J,EAAOtJ,2DAAI6J,mBAAkB,YAAO,SAAC9D,EAAI+D,OAEjC/D,EAAoB,mBAAPA,EAAoBA,IAAQA,EAEtCvC,GAASuC,KAAM6D,EAAarL,WAASwH,IAC3C,MAAMO,WACAP,QASZ/E,IAAmBb,EAAMW,gBAKrBsH,GAAYC,KACXA,EAAUlI,UAAckI,IAAYrF,OAEvC,KAIG+G,EAAQ3B,GAAYC,GAAWA,EAAWlI,EAAMkB,MAAMkH,GAAOF,IACjEA,EAAUlI,EAAMgB,SAAS4I,IAAU1B,EACnCA,EAAUtJ,WAAcsJ,GAAWrI,WAAAqI,QAAAA,GAAY,SAAApJ,UAAGuJ,GAASvJ,MAAMuJ,GAASH,UAM3EtJ,WAAcsJ,IAAYA,EAAQzI,OAAO,IAGpCyI,EADY,OAAbuB,EACWtB,GAAgBD,EAAQuB,GAC7BI,UAAUpK,OAAO,EACZ0I,GAAgBD,EAAQ9J,WAAS+K,EAAKU,UAAU,MAEhD3B,EAAQ,IAKV,GAAbiB,EAAK1J,OACGyI,EAEAR,GAAwBR,WAAxBQ,iBAA6B1H,EAAMkI,sBAAWiB,KAE5D,MAAMhD,UACI+B,IAqHXzE,UAAAA,GACAsE,wBAAAA,GACA3E,gBAAAA,GACAC,SAAAA,GACAC,cAAAA"}
\ No newline at end of file
diff --git a/packages/runtime/dist/index.esm.js b/packages/runtime/dist/index.esm.js
new file mode 100644
index 0000000..d68c0a3
--- /dev/null
+++ b/packages/runtime/dist/index.esm.js
@@ -0,0 +1,2 @@
+import e from"@babel/runtime-corejs3/core-js-stable/weak-map";import t from"@babel/runtime-corejs3/core-js-stable/instance/reduce";import r from"@babel/runtime-corejs3/core-js-stable/object/keys";import n from"@babel/runtime-corejs3/core-js-stable/object/create";import a from"@babel/runtime-corejs3/core-js-stable/symbol/replace";import o from"@babel/runtime-corejs3/core-js-stable/array/from";import s from"@babel/runtime-corejs3/core-js-stable/symbol";import i from"@babel/runtime-corejs3/core-js/get-iterator-method";import l from"@babel/runtime-corejs3/core-js-stable/reflect/construct";import"core-js/modules/es.regexp.constructor.js";import"core-js/modules/es.regexp.dot-all.js";import"core-js/modules/es.regexp.sticky.js";import"core-js/modules/es.regexp.test.js";import"core-js/modules/es.reflect.to-string-tag.js";import c from"@babel/runtime-corejs3/helpers/asyncToGenerator";import u from"@babel/runtime-corejs3/helpers/classCallCheck";import f from"@babel/runtime-corejs3/helpers/createClass";import m from"@babel/runtime-corejs3/helpers/assertThisInitialized";import g from"@babel/runtime-corejs3/helpers/possibleConstructorReturn";import p from"@babel/runtime-corejs3/helpers/getPrototypeOf";import h from"@babel/runtime-corejs3/helpers/typeof";import b from"@babel/runtime-corejs3/helpers/toConsumableArray";import v from"@babel/runtime-corejs3/helpers/slicedToArray";import y from"@babel/runtime-corejs3/helpers/taggedTemplateLiteral";import d from"@babel/runtime-corejs3/helpers/inherits";import j from"@babel/runtime-corejs3/helpers/setPrototypeOf";import k from"@babel/runtime-corejs3/regenerator";import"core-js/modules/es.regexp.exec.js";import"core-js/modules/es.string.split.js";import"core-js/modules/es.string.substr.js";import"core-js/modules/es.function.name.js";import"core-js/modules/es.error.to-string.js";import"core-js/modules/es.date.to-string.js";import"core-js/modules/es.object.to-string.js";import"core-js/modules/es.regexp.to-string.js";import"core-js/modules/esnext.array.last-index.js";import"core-js/modules/es.string.replace.js";import"core-js/modules/es.error.cause.js";import"core-js/modules/es.array.iterator.js";import"core-js/modules/es.promise.js";import"core-js/modules/es.promise.all-settled.js";import"core-js/modules/es.string.iterator.js";import"core-js/modules/web.dom-collections.iterator.js";import _ from"@babel/runtime-corejs3/core-js-stable/string/raw";import x from"@babel/runtime-corejs3/core-js-stable/instance/includes";import w from"@babel/runtime-corejs3/core-js-stable/instance/map";import L from"@babel/runtime-corejs3/core-js-stable/instance/trim";import S from"@babel/runtime-corejs3/core-js-stable/instance/index-of";import $ from"@babel/runtime-corejs3/core-js-stable/instance/last-index-of";import M from"@babel/runtime-corejs3/core-js-stable/parse-int";import A from"@babel/runtime-corejs3/core-js-stable/instance/starts-with";import F from"@babel/runtime-corejs3/core-js-stable/instance/ends-with";import T from"@babel/runtime-corejs3/core-js-stable/instance/find-index";import E from"@babel/runtime-corejs3/core-js-stable/object/assign";import I from"@babel/runtime-corejs3/core-js/instance/replace-all";import D from"@babel/runtime-corejs3/core-js-stable/array/is-array";import"@babel/runtime-corejs3/core-js-stable/json/stringify";import N from"@babel/runtime-corejs3/core-js-stable/instance/concat";import C from"@babel/runtime-corejs3/core-js-stable/instance/splice";import O from"@babel/runtime-corejs3/core-js-stable/instance/for-each";import V from"@babel/runtime-corejs3/core-js-stable/object/entries";import z from"@babel/runtime-corejs3/core-js-stable/instance/slice";import R from"@babel/runtime-corejs3/core-js-stable/promise";import P from"@babel/runtime-corejs3/core-js-stable/object/get-prototype-of";import B from"@babel/runtime-corejs3/core-js-stable/set";import U from"@babel/runtime-corejs3/core-js/global-this";import Y from"@babel/runtime-corejs3/core-js-stable/instance/bind";var H,W=function(e){if("object"!==h(e)||null===e)return!1;var t=P(e);if(null===t)return!0;for(var r=t;null!==P(r);)r=P(r);return t===r},G=function(e){return!isNaN(M(e))},J=function e(t,r){var n,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=E({},t);return O(n=V(r)).call(n,(function(t){var r=v(t,2),n=r[0],s=r[1];if(n in o)if("object"===h(s)&&null!==s)if(D(s)){if(0===a.array)o[n]=s;else if(1===a.array){var i;o[n]=N(i=[]).call(i,b(o[n]),b(s))}else if(2===a.array){var l;o[n]=b(new B(N(l=[]).call(l,b(o[n]),b(s))))}}else o[n]=e(o[n],s,a);else o[n]=s;else o[n]=s})),o},q=function(e){return null===e?"Null":void 0===e?"Undefined":"function"==typeof e?"Function":e.constructor&&e.constructor.name},K=function(){function e(){u(this,e),this._callbacks=[]}var t;return f(e,[{key:"on",value:function(e){var t;x(t=this._callbacks).call(t,e)||this._callbacks.push(e)}},{key:"off",value:function(e){for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;if(u(this,e),this._id=t.id||(new Date).getTime().toString()+M(1e3*Math.random()),this._languages=t.languages,this._defaultLanguage=t.defaultLanguage||"zh",this._activeLanguage=t.activeLanguage,this._default=t.default,this._messages=t.messages,this._idMap=t.idMap,this._formatters=t.formatters,this._loaders=t.loaders,this._global=null,this.$cache={activeLanguage:null,typedFormatters:{},formatters:{}},!U.VoerkaI18n){var n=we.I18nManager;U.VoerkaI18n=new n({defaultLanguage:this.defaultLanguage,activeLanguage:this.activeLanguage,languages:t.languages})}this.global=U.VoerkaI18n,this._loading=!1,this.register(r)}var t;return f(e,[{key:"id",get:function(){return this._id}},{key:"defaultLanguage",get:function(){return this._defaultLanguage}},{key:"activeLanguage",get:function(){return this._activeLanguage}},{key:"default",get:function(){return this._default}},{key:"messages",get:function(){return this._messages}},{key:"idMap",get:function(){return this._idMap}},{key:"formatters",get:function(){return this._formatters}},{key:"loaders",get:function(){return this._loaders}},{key:"global",get:function(){return this._global},set:function(e){this._global=e}},{key:"register",value:function(e){"function"===!h(e)&&(e=function(){}),this.global.register(this).then(e).catch(e)}},{key:"registerFormatter",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=r.language,a=void 0===n?"*":n;if("function"===!h(t)||"string"!=typeof e)throw new TypeError("Formatter must be a function");x(DataTypes).call(DataTypes,e)?this.formatters[a].$types[e]=t:this.formatters[a][e]=t}},{key:"_fallback",value:function(){this._messages=this._default,this._activeLanguage=this.defaultLanguage}},{key:"refresh",value:(t=c(k.mark((function e(t){var r,n,a;return k.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._loading=R.resolve(),t||(t=this.activeLanguage),t!==this.defaultLanguage){e.next=5;break}return this._messages=this._default,e.abrupt("return");case 5:if("function"!=typeof(r=this.loaders[t])){e.next=20;break}return e.prev=7,e.next=10,r();case 10:this._messages=e.sent.default,this._activeLanguage=t,e.next=18;break;case 14:e.prev=14,e.t0=e.catch(7),console.warn(N(n=N(a="Error while loading language <".concat(t,"> on i18nScope(")).call(a,this.id,"): ")).call(n,e.t0.message)),this._fallback();case 18:e.next=21;break;case 20:this._fallback();case 21:case"end":return e.stop()}}),e,this,[[7,14]])}))),function(e){return t.apply(this,arguments)})},{key:"on",get:function(){var e;return Y(e=this.global.on).call(e,this.global)}},{key:"off",get:function(){var e;return Y(e=this.global.off).call(e,this.global)}},{key:"offAll",get:function(){var e;return Y(e=this.global.offAll).call(e,this.global)}},{key:"change",get:function(){var e;return Y(e=this.global.change).call(e,this.global)}}]),e}();function X(e){var t=function(){if("undefined"==typeof Reflect||!l)return!1;if(l.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(l(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=p(e);if(t){var a=p(this).constructor;r=l(n,arguments,a)}else r=n.apply(this,arguments);return g(this,r)}}function Z(e,t){var r=void 0!==s&&i(e)||e["@@iterator"];if(!r){if(D(e)||(r=function(e,t){var r;if(!e)return;if("string"==typeof e)return ee(e,t);var n=z(r=Object.prototype.toString.call(e)).call(r,8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return o(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ee(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,c=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return c=e.done,e},e:function(e){u=!0,l=e},f:function(){try{c||null==r.return||r.return()}finally{if(u)throw l}}}}function ee(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r]+)>/g,(function(e,t){return"$"+r[t]})))}if("function"==typeof t){var n=this;return o[a].call(this,e,(function(){var e=arguments;return"object"!=h(e[e.length-1])&&(e=z([]).call(e)).push(l(e,n)),t.apply(this,e)}))}return o[a].call(this,e,t)},te.apply(this,arguments)}var re=q,ne=G,ae=W,oe=J,se=K,ie=Q,le={"*":{$types:{Date:function(e){return e.toLocaleString()}},time:function(e){return e.toLocaleTimeString()},shorttime:function(e){return e.toLocaleTimeString()},date:function(e){return e.toLocaleDateString()},dict:function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0&&r.length%2!=0?r[r.length-1]:e}},zh:{$types:{Date:function(e){var t,r,n,a,o;return N(t=N(r=N(n=N(a=N(o="".concat(e.getFullYear(),"年")).call(o,e.getMonth()+1,"月")).call(a,e.getDate(),"日 ")).call(n,e.getHours(),"点")).call(r,e.getMinutes(),"分")).call(t,e.getSeconds(),"秒")}},shortime:function(e){return e.toLocaleTimeString()},time:function(e){var t,r;return N(t=N(r="".concat(e.getHours(),"点")).call(r,e.getMinutes(),"分")).call(t,e.getSeconds(),"秒")},date:function(e){var t,r;return N(t=N(r="".concat(e.getFullYear(),"年")).call(r,e.getMonth()+1,"月")).call(t,e.getDate(),"日")},shortdate:function(e){var t,r;return N(t=N(r="".concat(e.getFullYear(),"-")).call(r,e.getMonth()+1,"-")).call(t,e.getDate())},currency:function(e){return"".concat(e,"元")}},en:{currency:function(e){return"$".concat(e)}}},ce=te(/\{\s*(\w+)?((\s*\|\s*\w*(\(.*\))?\s*)*)\s*\}/g,{varname:1,formatters:2});function ue(e){return x(e).call(e,"{")&&x(e).call(e,"}")}_(H||(H=y(["{s*{varname}s*}"],["\\{\\s*{varname}\\s*\\}"])));var fe=["String","Number","Boolean","Object","Array","Function","Error","Symbol","RegExp","Date","Null","Undefined","Set","Map","WeakSet","WeakMap"];function me(e){var t,r;if(!e)return[];var n=w(t=L(r=L(e).call(e).substr(1)).call(r).split("|")).call(t,(function(e){return L(e).call(e)}));return w(n).call(n,(function(e){var t=S(e).call(e,"("),r=$(e).call(e,")");if(-1!==t&&-1!==r){var n,a,o=L(n=e.substr(t+1,r-t-1)).call(n),s=""==o?[]:w(a=o.split(",")).call(a,(function(e){if(e=L(e).call(e),!isNaN(M(e)))return M(e);if(A(e).call(e,'"')&&F(e).call(e,'"')||A(e).call(e,"'")&&F(e).call(e,"'"))return e.substr(1,e.length-2);if("true"===e.toLowerCase()||"false"===e.toLowerCase())return"true"===e.toLowerCase();if(!(A(e).call(e,"{")&&F(e).call(e,"}")||A(e).call(e,"[")&&F(e).call(e,"]")))return String(e);try{return JSON.parse(e)}catch(t){return String(e)}}));return[e.substr(0,t),s]}return[e,[]]}))}function ge(e,t){var r,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=e,o=E({replaceAll:!0},n);for(ce.lastIndex=0;null!==(r=ce.exec(a));){var s=r.groups.varname||"",i=me(r.groups.formatters);if("function"==typeof t)try{a=I(o)?I(a).call(a,r[0],t(s,i,r[0])):a.replace(r[0],t(s,i,r[0]))}catch(e){break}ce.lastIndex=0}return a}function pe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;e.$cache={activeLanguage:t,typedFormatters:{},formatters:{}}}function he(e,t,r){var n,a=[],o=Z(r);try{var s=function(){var r=n.value;if(r[0]){var o=function(e,t,r){if(e.$cache||pe(e),e.$cache.activeLanguage===t){if(r in e.$cache.formatters)return e.$cache.formatters[r]}else pe(e,t);for(var n=0,a=[e.formatters,e.global.formatters];n1?n-1:0),o=1;ol)return be(t,r,n,i[l++]);throw new Error}),{replaceAll:!1})}var ye={defaultLanguage:"zh",activeLanguage:"zh",languages:[{name:"zh",title:"中文",default:!0},{name:"en",title:"英文"}],formatters:le};function de(e){return M(e)>0}function je(e,t){try{return D(e)?e.length>t?e[t]:e[e.length-1]:e}catch(t){return D(e)?e[0]:e}}function ke(e){var t,r,n,a,o,s,i,l;return I(t=I(r=I(n=I(a=I(o=I(s=I(i=I(l=I(e).call(e,/\\(?![trnbvf'"]{1})/g,"\\\\")).call(l,"\t","\\t")).call(i,"\n","\\n")).call(s,"\b","\\b")).call(o,"\r","\\r")).call(a,"\f","\\f")).call(n,"'","\\'")).call(r,'"','\\"')).call(t,"\v","\\v")}function _e(e){var t,r,n,a,o,s,i,l;return I(t=I(r=I(n=I(a=I(o=I(s=I(i=I(l=I(e).call(e,"\\t","\t")).call(l,"\\n","\n")).call(i,"\\b","\b")).call(s,"\\r","\r")).call(o,"\\f","\f")).call(a,"\\'","'")).call(n,'\\"','"')).call(r,"\\v","\v")).call(t,/\\\\(?![trnbvf'"]{1})/g,"\\")}var xe=function(e){d(o,se);var t,r,n,a=X(o);function o(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return u(this,o),e=a.call(this),null!=o.instance||(o.instance=m(e),e._settings=oe(ye,t),e._scopes=[]),g(e,o.instance)}return f(o,[{key:"settings",get:function(){return this._settings}},{key:"scopes",get:function(){return this._scopes}},{key:"activeLanguage",get:function(){return this._settings.activeLanguage}},{key:"defaultLanguage",get:function(){return this._settings.defaultLanguage}},{key:"languages",get:function(){return this._settings.languages}},{key:"formatters",get:function(){return le}},{key:"change",value:(n=c(k.mark((function e(t){var r;return k.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=L(t).call(t),-1===T(r=this.languages).call(r,(function(e){return e.name===t}))){e.next=9;break}return e.next=4,this._refreshScopes(t);case 4:return this._settings.activeLanguage=t,e.next=7,this.emit(t);case 7:e.next=10;break;case 9:throw new Error("Not supported language:"+t);case 10:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"_refreshScopes",value:(r=c(k.mark((function e(t){var r,n;return k.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,n=w(r=this._scopes).call(r,(function(e){return e.refresh(t)})),!R.allSettled){e.next=7;break}return e.next=5,R.allSettled(n);case 5:e.next=9;break;case 7:return e.next=9,R.all(n);case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(0),console.warn("Error while refreshing i18n scopes:",e.t0.message);case 14:case"end":return e.stop()}}),e,this,[[0,11]])}))),function(e){return r.apply(this,arguments)})},{key:"register",value:(t=c(k.mark((function e(t){return k.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t instanceof ie){e.next=2;break}throw new TypeError("Scope must be an instance of I18nScope");case 2:return this._scopes.push(t),e.next=5,t.refresh(this.activeLanguage);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"registerFormatter",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=r.language,a=void 0===n?"*":n;if("function"===!h(t)||"string"!=typeof e)throw new TypeError("Formatter must be a function");x(fe).call(fe,e)?this.formatters[a].$types[e]=t:this.formatters[a][e]=t}}]),o}(),we={getInterpolatedVars:function(e){var t=[];return ge(e,(function(e,r,n){var a={name:e,formatters:w(r).call(r,(function(e){var t=v(e,2);return{name:t[0],args:t[1]}})),match:n};return-1===T(t).call(t,(function(e){return e.name===a.name&&a.formatters.toString()==e.formatters.toString()}))&&t.push(a),""})),t},replaceInterpolatedVars:ve,I18nManager:xe,translate:function(e){var t=this,r=t.global.activeLanguage,n=e,a=[],o=[],s=null;if("string"===!h(e))return e;try{var i,l;if(2===arguments.length&&ae(arguments[1]))O(i=V(arguments[1])).call(i,(function(e){var t=v(e,2),r=t[0],n=t[1];if("function"==typeof n)try{a[r]=n()}catch(e){a[r]=n}A(r).call(r,"$")&&"number"==typeof a[r]&&o.push(r)})),a=[arguments[1]];else if(arguments.length>=2){var c,u;a=w(c=C(u=z(Array.prototype).call(arguments)).call(u,1)).call(c,(function(e,t){try{e="function"==typeof e?e():e,ne(e)&&(s=M(e))}catch(e){}return e}))}if(r===t.defaultLanguage)de(n)&&(n=t.default[n]||e);else{var f=de(n)?n:t.idMap[ke(n)];n=t.messages[f]||n,n=D(n)?w(n).call(n,(function(e){return _e(e)})):_e(n)}return D(n)&&n.length>0&&(n=null!==s?je(n,s):pluralVar.length>0?je(n,M(a(pluralVar[0]))):n[0]),0==a.length?n:ve.call.apply(ve,N(l=[t,n]).call(l,b(a)))}catch(e){return n}},i18nScope:ie,defaultLanguageSettings:ye,getDataTypeName:re,isNumber:ne,isPlainObject:ae};export{we as default};
+//# sourceMappingURL=index.esm.js.map
diff --git a/packages/runtime/dist/index.esm.js.map b/packages/runtime/dist/index.esm.js.map
new file mode 100644
index 0000000..371a3de
--- /dev/null
+++ b/packages/runtime/dist/index.esm.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.esm.js","sources":["../utils.js","../eventemitter.js","../scope.js","../index.js","../formatters.js"],"sourcesContent":["\r\n/**\r\n * 判断是否是JSON对象\r\n * @param {*} obj \r\n * @returns \r\n */\r\n function isPlainObject(obj){\r\n if (typeof obj !== 'object' || obj === null) return false;\r\n var proto = Object.getPrototypeOf(obj);\r\n if (proto === null) return true;\r\n var baseProto = proto;\r\n\r\n while (Object.getPrototypeOf(baseProto) !== null) {\r\n baseProto = Object.getPrototypeOf(baseProto);\r\n }\r\n return proto === baseProto; \r\n}\r\n\r\nfunction isNumber(value){\r\n return !isNaN(parseInt(value))\r\n}\r\n \r\n/**\r\n * 简单进行对象合并\r\n * \r\n * options={\r\n * array:0 , // 数组合并策略,0-替换,1-合并,2-去重合并\r\n * }\r\n * \r\n * @param {*} toObj \r\n * @param {*} formObj \r\n * @returns 合并后的对象\r\n */\r\nfunction deepMerge(toObj,formObj,options={}){\r\n let results = Object.assign({},toObj)\r\n Object.entries(formObj).forEach(([key,value])=>{\r\n if(key in results){\r\n if(typeof value === \"object\" && value !== null){\r\n if(Array.isArray(value)){\r\n if(options.array === 0){\r\n results[key] = value\r\n }else if(options.array === 1){\r\n results[key] = [...results[key],...value]\r\n }else if(options.array === 2){\r\n results[key] = [...new Set([...results[key],...value])]\r\n }\r\n }else{\r\n results[key] = deepMerge(results[key],value,options)\r\n }\r\n }else{\r\n results[key] = value\r\n }\r\n }else{\r\n results[key] = value\r\n }\r\n })\r\n return results\r\n}\r\n\r\n\r\n/**\r\n * 获取指定变量类型名称\r\n * getDataTypeName(1) == Number\r\n * getDataTypeName(\"\") == String\r\n * getDataTypeName(null) == Null\r\n * getDataTypeName(undefined) == Undefined\r\n * getDataTypeName(new Date()) == Date\r\n * getDataTypeName(new Error()) == Error\r\n * \r\n * @param {*} v \r\n * @returns \r\n */\r\n function getDataTypeName(v){\r\n\tif (v === null) return 'Null' \r\n\tif (v === undefined) return 'Undefined' \r\n if(typeof(v)===\"function\") return \"Function\"\r\n\treturn v.constructor && v.constructor.name;\r\n};\r\n\r\n\r\n\r\n\r\n\r\nmodule.exports ={\r\n isPlainObject,\r\n isNumber,\r\n deepMerge,\r\n getDataTypeName\r\n}","/**\r\n* \r\n* 简单的事件触发器\r\n* \r\n*/\r\nmodule.exports = class EventEmitter{\r\n constructor(){\r\n this._callbacks = []\r\n }\r\n on(callback){\r\n if(this._callbacks.includes(callback)) return\r\n this._callbacks.push(callback)\r\n }\r\n off(callback){\r\n for(let i=0;icb(...args)))\r\n }else{\r\n await Promise.all(this._callbacks.map(cb=>cb(...args)))\r\n }\r\n } \r\n}","\r\nmodule.exports = class i18nScope {\r\n constructor(options={},callback){\r\n // 每个作用域都有一个唯一的id\r\n this._id = options.id || (new Date().getTime().toString()+parseInt(Math.random()*1000))\r\n this._languages = options.languages // 当前作用域的语言列表\r\n this._defaultLanguage = options.defaultLanguage || \"zh\" // 默认语言名称\r\n this._activeLanguage = options.activeLanguage // 当前语言名称\r\n this._default = options.default // 默认语言包\r\n this._messages = options.messages // 当前语言包\r\n this._idMap = options.idMap // 消息id映射列表\r\n this._formatters = options.formatters // 当前作用域的格式化函数列表\r\n this._loaders = options.loaders // 异步加载语言文件的函数列表\r\n this._global = null // 引用全局VoerkaI18n配置,注册后自动引用 \r\n // 主要用来缓存格式化器的引用,当使用格式化器时可以直接引用,避免检索\r\n this.$cache={\r\n activeLanguage : null,\r\n typedFormatters: {},\r\n formatters : {},\r\n }\r\n // 如果不存在全局VoerkaI18n实例,说明当前Scope是唯一或第一个加载的作用域,\r\n // 则使用当前作用域来初始化全局VoerkaI18n实例\r\n if(!globalThis.VoerkaI18n){\r\n const { I18nManager } = require(\"./\")\r\n globalThis.VoerkaI18n = new I18nManager({\r\n defaultLanguage: this.defaultLanguage,\r\n activeLanguage : this.activeLanguage,\r\n languages: options.languages,\r\n })\r\n }\r\n this.global = globalThis.VoerkaI18n \r\n // 正在加载语言包标识\r\n this._loading=false\r\n // 在全局注册作用域\r\n this.register(callback)\r\n }\r\n // 作用域\r\n get id(){return this._id}\r\n // 默认语言名称\r\n get defaultLanguage(){return this._defaultLanguage}\r\n // 默认语言名称\r\n get activeLanguage(){return this._activeLanguage}\r\n // 默认语言包\r\n get default(){return this._default}\r\n // 当前语言包\r\n get messages(){return this._messages}\r\n // 消息id映射列表\r\n get idMap(){return this._idMap}\r\n // 当前作用域的格式化函数列表\r\n get formatters(){return this._formatters}\r\n // 异步加载语言文件的函数列表\r\n get loaders(){return this._loaders}\r\n // 引用全局VoerkaI18n配置,注册后自动引用\r\n get global(){return this._global}\r\n set global(value){this._global = value}\r\n /**\r\n * 在全局注册作用域\r\n * @param {*} callback 当注册\r\n */\r\n register(callback){\r\n if(!typeof(callback)===\"function\") callback = ()=>{} \r\n this.global.register(this).then(callback).catch(callback) \r\n }\r\n registerFormatter(name,formatter,{language=\"*\"}={}){\r\n if(!typeof(formatter)===\"function\" || typeof(name)!==\"string\"){\r\n throw new TypeError(\"Formatter must be a function\")\r\n } \r\n if(DataTypes.includes(name)){\r\n this.formatters[language].$types[name] = formatter\r\n }else{\r\n this.formatters[language][name] = formatter\r\n }\r\n }\r\n /**\r\n * 回退到默认语言\r\n */\r\n _fallback(){\r\n this._messages = this._default \r\n this._activeLanguage = this.defaultLanguage\r\n }\r\n /**\r\n * 刷新当前语言包\r\n * @param {*} newLanguage \r\n */\r\n async refresh(newLanguage){\r\n this._loading = Promise.resolve()\r\n if(!newLanguage) newLanguage = this.activeLanguage\r\n // 默认语言,默认语言采用静态加载方式,只需要简单的替换即可\r\n if(newLanguage === this.defaultLanguage){\r\n this._messages = this._default\r\n return \r\n }\r\n // 非默认语言需要异步加载语言包文件,加载器是一个异步函数\r\n // 如果没有加载器,则无法加载语言包,因此回退到默认语言\r\n const loader = this.loaders[newLanguage]\r\n if(typeof(loader) === \"function\"){\r\n try{\r\n this._messages = (await loader()).default\r\n this._activeLanguage = newLanguage\r\n }catch(e){\r\n console.warn(`Error while loading language <${newLanguage}> on i18nScope(${this.id}): ${e.message}`)\r\n this._fallback()\r\n } \r\n }else{\r\n this._fallback()\r\n } \r\n }\r\n // 以下方法引用全局VoerkaI18n实例的方法\r\n get on(){return this.global.on.bind(this.global)}\r\n get off(){return this.global.off.bind(this.global)}\r\n get offAll(){return this.global.offAll.bind(this.global)}\r\n get change(){\r\n return this.global.change.bind(this.global)\r\n }\r\n}","const { getDataTypeName,isNumber,isPlainObject,deepMerge } = require(\"./utils\")\r\nconst EventEmitter = require(\"./eventemitter\")\r\nconst i18nScope = require(\"./scope.js\")\r\nlet inlineFormatters = require(\"./formatters\") // 内置格式化器\r\n\r\n\r\n\r\n// 用来提取字符里面的插值变量参数 , 支持管道符 { var | formatter | formatter }\r\n// 不支持参数: let varWithPipeRegexp = /\\{\\s*(?\\w+)?(?(\\s*\\|\\s*\\w*\\s*)*)\\s*\\}/g\r\n\r\n// 支持参数: { var | formatter(x,x,..) | formatter }\r\nlet varWithPipeRegexp = /\\{\\s*(?\\w+)?(?(\\s*\\|\\s*\\w*(\\(.*\\)){0,1}\\s*)*)\\s*\\}/g\r\n\r\n// 插值变量字符串替换正则\r\n\r\n//let varReplaceRegexp =String.raw`\\{\\s*(?{name}\\.?\\w*)\\s*\\}`\r\n\r\n\r\nlet varReplaceRegexp =String.raw`\\{\\s*{varname}\\s*\\}`\r\n\r\n/**\r\n * 考虑到通过正则表达式进行插件的替换可能较慢,因此提供一个简单方法来过滤掉那些\r\n * 不需要进行插值处理的字符串\r\n * 原理很简单,就是判断一下是否同时具有{和}字符,如果有则认为可能有插值变量,如果没有则一定没有插件变量,则就不需要进行正则匹配\r\n * 从而可以减少不要的正则匹配\r\n * 注意:该方法只能快速判断一个字符串不包括插值变量\r\n * @param {*} str \r\n * @returns {boolean} true=可能包含插值变量,\r\n */\r\nfunction hasInterpolation(str){\r\n return str.includes(\"{\") && str.includes(\"}\")\r\n} \r\nconst DataTypes = [\"String\",\"Number\",\"Boolean\",\"Object\",\"Array\",\"Function\",\"Error\",\"Symbol\",\"RegExp\",\"Date\",\"Null\",\"Undefined\",\"Set\",\"Map\",\"WeakSet\",\"WeakMap\"]\r\n \r\n\r\n/**\r\n 通过正则表达式对原始文本内容进行解析匹配后得到的\r\n formatters=\"| aaa(1,1) | bbb \"\r\n\r\n 需要统一解析为\r\n\r\n [\r\n [aaa,[1,1]], // [formatter'name,[args,...]]\r\n [bbb,[]],\r\n ]\r\n\r\n formatters=\"| aaa(1,1,\"dddd\") | bbb \"\r\n\r\n 目前对参数采用简单的split(\",\")来解析,因为无法正确解析aaa(1,1,\"dd,,dd\")形式的参数\r\n 在此场景下基本够用了,如果需要支持更复杂的参数解析,可以后续考虑使用正则表达式来解析\r\n \r\n @returns [[,[,,...]]]\r\n */\r\nfunction parseFormatters(formatters){\r\n if(!formatters) return []\r\n // 1. 先解析为 [\"aaa()\",\"bbb\"]形式\r\n let result = formatters.trim().substr(1).trim().split(\"|\").map(r=>r.trim()) \r\n\r\n // 2. 解析格式化器参数\r\n return result.map(formatter=>{\r\n let firstIndex = formatter.indexOf(\"(\")\r\n let lastIndex = formatter.lastIndexOf(\")\")\r\n if(firstIndex!==-1 && lastIndex!==-1){ // 带参数的格式化器\r\n const argsContent = formatter.substr(firstIndex+1,lastIndex-firstIndex-1).trim()\r\n let args = argsContent==\"\" ? [] : argsContent.split(\",\").map(arg=>{\r\n arg = arg.trim()\r\n if(!isNaN(parseInt(arg))){\r\n return parseInt(arg) // 数字\r\n }else if((arg.startsWith('\\\"') && arg.endsWith('\\\"')) || (arg.startsWith('\\'') && arg.endsWith('\\'')) ){\r\n return arg.substr(1,arg.length-2) // 字符串\r\n }else if(arg.toLowerCase()===\"true\" || arg.toLowerCase()===\"false\"){\r\n return arg.toLowerCase()===\"true\" // 布尔值\r\n }else if((arg.startsWith('{') && arg.endsWith('}')) || (arg.startsWith('[') && arg.endsWith(']'))){ \r\n try{\r\n return JSON.parse(arg)\r\n }catch(e){\r\n return String(arg)\r\n }\r\n }else{\r\n return String(arg)\r\n }\r\n })\r\n return [formatter.substr(0,firstIndex),args]\r\n }else{// 不带参数的格式化器\r\n return [formatter,[]]\r\n } \r\n }) \r\n}\r\n\r\n/** \r\n * 提取字符串中的插值变量\r\n * // [\r\n // { \r\n name:<变量名称>,formatters:[{name:<格式化器名称>,args:[<参数>,<参数>,....]]}],<匹配字符串>],\r\n // ....\r\n // \r\n * @param {*} str \r\n * @param {*} isFull =true 保留所有插值变量 =false 进行去重\r\n * @returns {Array} \r\n * [\r\n * {\r\n * name:\"<变量名称>\",\r\n * formatters:[\r\n * {name:\"<格式化器名称>\",args:[<参数>,<参数>,....]},\r\n * {name:\"<格式化器名称>\",args:[<参数>,<参数>,....]},\r\n * ],\r\n * match:\"<匹配字符串>\"\r\n * },\r\n * ...\r\n * ]\r\n */\r\nfunction getInterpolatedVars(str){\r\n let vars = []\r\n forEachInterpolatedVars(str,(varName,formatters,match)=>{\r\n let varItem = {\r\n name:varName,\r\n formatters:formatters.map(([formatter,args])=>{\r\n return {\r\n name:formatter,\r\n args:args\r\n }\r\n }),\r\n match:match\r\n }\r\n if(vars.findIndex(varDef=>((varDef.name===varItem.name) && (varItem.formatters.toString() == varDef.formatters.toString())))===-1){\r\n vars.push(varItem) \r\n }\r\n return \"\"\r\n }) \r\n return vars\r\n}\r\n/**\r\n * 遍历str中的所有插值变量传递给callback,将callback返回的结果替换到str中对应的位置\r\n * @param {*} str \r\n * @param {Function(<变量名称>,[formatters],match[0])} callback \r\n * @returns 返回替换后的字符串\r\n */\r\nfunction forEachInterpolatedVars(str,callback,options={}){\r\n let result=str, match \r\n let opts = Object.assign({\r\n replaceAll:true, // 是否替换所有插值变量,当使用命名插值时应置为true,当使用位置插值时应置为false\r\n },options)\r\n varWithPipeRegexp.lastIndex=0\r\n while ((match = varWithPipeRegexp.exec(result)) !== null) {\r\n const varname = match.groups.varname || \"\"\r\n // 解析格式化器和参数 = [,[,[,,...]]]\r\n const formatters = parseFormatters(match.groups.formatters)\r\n if(typeof(callback)===\"function\"){\r\n try{\r\n if(opts.replaceAll){\r\n result=result.replaceAll(match[0],callback(varname,formatters,match[0]))\r\n }else{\r\n result=result.replace(match[0],callback(varname,formatters,match[0]))\r\n } \r\n }catch{// callback函数可能会抛出异常,如果抛出异常,则中断匹配过程\r\n break \r\n } \r\n }\r\n varWithPipeRegexp.lastIndex=0\r\n }\r\n return result\r\n}\r\n/**\r\n * 将要翻译内容提供了一个非文本内容时进行默认的转换\r\n * - 对函数则执行并取返回结果()\r\n * - 对Array和Object使用JSON.stringify\r\n * - 其他类型使用toString\r\n * \r\n * @param {*} value \r\n * @returns \r\n */\r\nfunction transformToString(value){\r\n let result = value\r\n if(typeof(result)===\"function\") result = value()\r\n if(!(typeof(result)===\"string\")){\r\n if(Array.isArray(result) || isPlainObject(result)){\r\n result = JSON.stringify(result)\r\n }else{\r\n result = result.toString()\r\n }\r\n }\r\n return result\r\n}\r\n\r\nfunction resetScopeCache(scope,activeLanguage=null){\r\n scope.$cache = {activeLanguage,typedFormatters:{},formatters:{}}\r\n}\r\n/**\r\n * 取得指定数据类型的默认格式化器 \r\n * \r\n * 可以为每一个数据类型指定一个默认的格式化器,当传入插值变量时,\r\n * 会自动调用该格式化器来对值进行格式化转换\r\n \r\n const formatters = { \r\n \"*\":{\r\n $types:{...} // 在所有语言下只作用于特定数据类型的格式化器\r\n }, // 在所有语言下生效的格式化器 \r\n zh:{ \r\n $types:{ \r\n [数据类型]:(value)=>{...},\r\n }, \r\n [格式化器名称]:(value)=>{...},\r\n [格式化器名称]:(value)=>{...},\r\n [格式化器名称]:(value)=>{...},\r\n },\r\n }\r\n * @param {*} scope \r\n * @param {*} activeLanguage \r\n * @param {*} dataType 数字类型\r\n * @returns {Function} 格式化函数 \r\n */\r\nfunction getDataTypeDefaultFormatter(scope,activeLanguage,dataType){\r\n if(!scope.$cache) resetScopeCache(scope)\r\n if(scope.$cache.activeLanguage === activeLanguage) {\r\n if(dataType in scope.$cache.typedFormatters) return scope.$cache.typedFormatters[dataType]\r\n }else{// 当语言切换时清空缓存\r\n resetScopeCache(scope,activeLanguage)\r\n }\r\n\r\n // 先在当前作用域中查找,再在全局查找\r\n const targets = [scope.formatters,scope.global.formatters] \r\n for(const target of targets){\r\n if(!target) continue\r\n // 优先在当前语言的$types中查找\r\n if((activeLanguage in target) && isPlainObject(target[activeLanguage].$types)){ \r\n let formatters = target[activeLanguage].$types \r\n if(dataType in formatters && typeof(formatters[dataType])===\"function\"){ \r\n return scope.$cache.typedFormatters[dataType] = formatters[dataType]\r\n } \r\n }\r\n // 在所有语言的$types中查找\r\n if((\"*\" in target) && isPlainObject(target[\"*\"].$types)){\r\n let formatters = target[\"*\"].$types \r\n if(dataType in formatters && typeof(formatters[dataType])===\"function\"){ \r\n return scope.$cache.typedFormatters[dataType] = formatters[dataType]\r\n } \r\n } \r\n } \r\n}\r\n\r\n/**\r\n * 获取指定名称的格式化器函数\r\n * @param {*} scope \r\n * @param {*} activeLanguage \r\n * @param {*} name 格式化器名称\r\n * @returns {Function} 格式化函数 \r\n */ \r\nfunction getFormatter(scope,activeLanguage,name){\r\n // 缓存格式化器引用,避免重复检索\r\n if(!scope.$cache) resetScopeCache(scope)\r\n if(scope.$cache.activeLanguage === activeLanguage) {\r\n if(name in scope.$cache.formatters) return scope.$cache.formatters[name]\r\n }else{// 当语言切换时清空缓存\r\n resetScopeCache(scope,activeLanguage)\r\n }\r\n // 先在当前作用域中查找,再在全局查找\r\n const targets = [scope.formatters,scope.global.formatters] \r\n for(const target of targets){\r\n // 优先在当前语言查找\r\n if(activeLanguage in target){ \r\n let formatters = target[activeLanguage] || {} \r\n if((name in formatters) && typeof(formatters[name])===\"function\") return scope.$cache.formatters[name] = formatters[name]\r\n }\r\n // 在所有语言的$types中查找\r\n let formatters = target[\"*\"] || {} \r\n if((name in formatters) && typeof(formatters[name])===\"function\") return scope.$cache.formatters[name] = formatters[name]\r\n } \r\n}\r\n\r\n/**\r\n * 执行格式化器并返回结果\r\n * @param {*} value \r\n * @param {*} formatters 多个格式化器顺序执行,前一个输出作为下一个格式化器的输入\r\n */\r\nfunction executeFormatter(value,formatters){\r\n if(formatters.length===0) return value\r\n let result = value\r\n try{\r\n for(let formatter of formatters){\r\n if(typeof(formatter) === \"function\") {\r\n result = formatter(result)\r\n }else{// 如果碰到无效的格式化器,则跳过过续的格式化器\r\n return result \r\n }\r\n }\r\n }catch(e){\r\n console.error(`Error while execute i18n formatter for ${value}: ${e.message} ` )\r\n } \r\n return result\r\n}\r\n/**\r\n * 将 [[格式化器名称,[参数,参数,...]],[格式化器名称,[参数,参数,...]]]格式化器转化为\r\n * \r\n * \r\n * \r\n * @param {*} scope \r\n * @param {*} activeLanguage \r\n * @param {*} formatters \r\n */\r\nfunction buildFormatters(scope,activeLanguage,formatters){\r\n let results = [] \r\n for(let formatter of formatters){\r\n if(formatter[0]){\r\n const func = getFormatter(scope,activeLanguage,formatter[0])\r\n if(typeof(func)===\"function\"){\r\n results.push((v)=>{\r\n return func(v,...formatter[1])\r\n })\r\n }else{\r\n // 格式化器无效或者没有定义时,查看当前值是否具有同名的原型方法,如果有则执行调用\r\n // 比如padStart格式化器是String的原型方法,不需要配置就可以直接作为格式化器调用\r\n results.push((v)=>{\r\n if(typeof(v[formatter[0]])===\"function\"){\r\n return v[formatter[0]].call(v,...formatter[1])\r\n }else{\r\n return v\r\n } \r\n }) \r\n } \r\n }\r\n }\r\n return results\r\n} \r\n\r\n/**\r\n * 将value经过格式化器处理后返回\r\n * @param {*} scope \r\n * @param {*} activeLanguage \r\n * @param {*} formatters \r\n * @param {*} value \r\n * @returns \r\n */\r\nfunction getFormattedValue(scope,activeLanguage,formatters,value){\r\n // 1. 取得格式化器函数列表\r\n const formatterFuncs = buildFormatters(scope,activeLanguage,formatters) \r\n // 2. 查找每种数据类型默认格式化器,并添加到formatters最前面,默认数据类型格式化器优先级最高\r\n const defaultFormatter = getDataTypeDefaultFormatter(scope,activeLanguage,getDataTypeName(value)) \r\n if(defaultFormatter){\r\n formatterFuncs.splice(0,0,defaultFormatter)\r\n } \r\n // 3. 执行格式化器\r\n value = executeFormatter(value,formatterFuncs) \r\n return value\r\n}\r\n\r\n/**\r\n * 字符串可以进行变量插值替换,\r\n * replaceInterpolatedVars(\"<模板字符串>\",{变量名称:变量值,变量名称:变量值,...})\r\n * replaceInterpolatedVars(\"<模板字符串>\",[变量值,变量值,...])\r\n * replaceInterpolatedVars(\"<模板字符串>\",变量值,变量值,...])\r\n * \r\n- 当只有两个参数并且第2个参数是{}时,将第2个参数视为命名变量的字典\r\n replaceInterpolatedVars(\"this is {a}+{b},{a:1,b:2}) --> this is 1+2\r\n- 当只有两个参数并且第2个参数是[]时,将第2个参数视为位置参数\r\n replaceInterpolatedVars\"this is {}+{}\",[1,2]) --> this is 1+2\r\n- 普通位置参数替换\r\n replaceInterpolatedVars(\"this is {a}+{b}\",1,2) --> this is 1+2\r\n- \r\nthis == scope == { formatters: {}, ... }\r\n* @param {*} template \r\n* @returns \r\n*/\r\nfunction replaceInterpolatedVars(template,...args) {\r\n const scope = this\r\n // 当前激活语言\r\n const activeLanguage = scope.global.activeLanguage \r\n let result=template\r\n\r\n // 没有变量插值则的返回原字符串 \r\n if(args.length===0 || !hasInterpolation(template)) return template \r\n\r\n // ****************************变量插值****************************\r\n if(args.length===1 && isPlainObject(args[0])){ \r\n // 读取模板字符串中的插值变量列表\r\n // [[var1,[formatter,formatter,...],match],[var2,[formatter,formatter,...],match],...}\r\n let varValues = args[0]\r\n return forEachInterpolatedVars(template,(varname,formatters)=>{\r\n let value = (varname in varValues) ? varValues[varname] : ''\r\n return getFormattedValue(scope,activeLanguage,formatters,value) \r\n }) \r\n }else{ \r\n // ****************************位置插值****************************\r\n // 如果只有一个Array参数,则认为是位置变量列表,进行展开\r\n const params=(args.length===1 && Array.isArray(args[0])) ? [...args[0]] : args \r\n if(params.length===0) return template // 没有变量则不需要进行插值处理,返回原字符串 \r\n let i = 0\r\n return forEachInterpolatedVars(template,(varname,formatters)=>{\r\n if(params.length>i){ \r\n return getFormattedValue(scope,activeLanguage,formatters,params[i++]) \r\n }else{\r\n throw new Error() // 抛出异常,停止插值处理\r\n }\r\n },{replaceAll:false})\r\n \r\n }\r\n return result\r\n} \r\n\r\n// 默认语言配置\r\nconst defaultLanguageSettings = { \r\n defaultLanguage: \"zh\",\r\n activeLanguage: \"zh\",\r\n languages:[\r\n {name:\"zh\",title:\"中文\",default:true},\r\n {name:\"en\",title:\"英文\"}\r\n ],\r\n formatters:inlineFormatters \r\n}\r\n\r\nfunction isMessageId(content){\r\n return parseInt(content)>0\r\n}\r\n/**\r\n * 根据值的单数和复数形式,从messages中取得相应的消息\r\n * \r\n * @param {*} messages 复数形式的文本内容 = [<=0时的内容>,<=1时的内容>,<=2时的内容>,...]\r\n * @param {*} value \r\n */\r\nfunction getPluraMessage(messages,value){\r\n try{\r\n if(Array.isArray(messages)){\r\n return messages.length > value ? messages[value] : messages[messages.length-1]\r\n }else{\r\n return messages\r\n }\r\n }catch{\r\n return Array.isArray(messages) ? messages[0] : messages\r\n }\r\n}\r\nfunction escape(str){\r\n return str.replaceAll(/\\\\(?![trnbvf'\"]{1})/g,\"\\\\\\\\\")\r\n .replaceAll(\"\\t\",\"\\\\t\")\r\n .replaceAll(\"\\n\",\"\\\\n\")\r\n .replaceAll(\"\\b\",\"\\\\b\")\r\n .replaceAll(\"\\r\",\"\\\\r\")\r\n .replaceAll(\"\\f\",\"\\\\f\")\r\n .replaceAll(\"\\'\",\"\\\\'\")\r\n .replaceAll('\\\"','\\\\\"')\r\n .replaceAll('\\v','\\\\v') \r\n}\r\nfunction unescape(str){\r\n return str\r\n .replaceAll(\"\\\\t\",\"\\t\")\r\n .replaceAll(\"\\\\n\",\"\\n\")\r\n .replaceAll(\"\\\\b\",\"\\b\")\r\n .replaceAll(\"\\\\r\",\"\\r\")\r\n .replaceAll(\"\\\\f\",\"\\f\")\r\n .replaceAll(\"\\\\'\",\"\\'\")\r\n .replaceAll('\\\\\"','\\\"')\r\n .replaceAll('\\\\v','\\v') \r\n .replaceAll(/\\\\\\\\(?![trnbvf'\"]{1})/g,\"\\\\\")\r\n}\r\n/**\r\n * 翻译函数\r\n * \r\n* translate(\"要翻译的文本内容\") 如果默认语言是中文,则不会进行翻译直接返回\r\n* translate(\"I am {} {}\",\"man\") == I am man 位置插值\r\n* translate(\"I am {p}\",{p:\"man\"}) 字典插值\r\n* translate(\"total {$count} items\", {$count:1}) //复数形式 \r\n* translate(\"total {} {} {} items\",a,b,c) // 位置变量插值\r\n * \r\n * this===scope 当前绑定的scope\r\n * \r\n */\r\nfunction translate(message) { \r\n const scope = this\r\n const activeLanguage = scope.global.activeLanguage \r\n let content = message\r\n let vars=[] // 插值变量列表\r\n let pluralVars= [] // 复数变量\r\n let pluraValue = null // 复数值\r\n if(!typeof(message)===\"string\") return message\r\n try{\r\n // 1. 预处理变量: 复数变量保存至pluralVars中 , 变量如果是Function则调用 \r\n if(arguments.length === 2 && isPlainObject(arguments[1])){\r\n Object.entries(arguments[1]).forEach(([name,value])=>{\r\n if(typeof(value)===\"function\"){\r\n try{\r\n vars[name] = value()\r\n }catch(e){\r\n vars[name] = value\r\n }\r\n } \r\n // 以$开头的视为复数变量\r\n if(name.startsWith(\"$\") && typeof(vars[name])===\"number\") pluralVars.push(name)\r\n })\r\n vars = [arguments[1]]\r\n }else if(arguments.length >= 2){\r\n vars = [...arguments].splice(1).map((arg,index)=>{\r\n try{\r\n arg = typeof(arg)===\"function\" ? arg() : arg \r\n // 位置参数中以第一个数值变量为复数变量\r\n if(isNumber(arg)) pluraValue = parseInt(arg) \r\n }catch(e){ }\r\n return arg \r\n })\r\n \r\n }\r\n \r\n \r\n \r\n\r\n // 3. 取得翻译文本模板字符串\r\n if(activeLanguage === scope.defaultLanguage){\r\n // 2.1 从默认语言中取得翻译文本模板字符串\r\n // 如果当前语言就是默认语言,不需要查询加载,只需要做插值变换即可\r\n // 当源文件运用了babel插件后会将原始文本内容转换为msgId\r\n // 如果是msgId则从scope.default中读取,scope.default=默认语言包={:}\r\n if(isMessageId(content)){\r\n content = scope.default[content] || message\r\n }\r\n }else{ \r\n // 2.2 从当前语言包中取得翻译文本模板字符串\r\n // 如果没有启用babel插件将源文本转换为msgId,需要先将文本内容转换为msgId\r\n // JSON.stringify在进行转换时会将\\t\\n\\r转换为\\\\t\\\\n\\\\r,这样在进行匹配时就出错 \r\n let msgId = isMessageId(content) ? content : scope.idMap[escape(content)] \r\n content = scope.messages[msgId] || content\r\n content = Array.isArray(content) ? content.map(v=>unescape(v)) : unescape(content)\r\n }\r\n // 2. 处理复数\r\n // 经过上面的处理,content可能是字符串或者数组\r\n // content = \"原始文本内容\" || 复数形式[\"原始文本内容\",\"原始文本内容\"....]\r\n // 如果是数组说明要启用复数机制,需要根据插值变量中的某个变量来判断复数形式\r\n if(Array.isArray(content) && content.length>0){\r\n // 如果存在复数命名变量,只取第一个复数变量\r\n if(pluraValue!==null){ // 启用的是位置插值,pluraIndex=第一个数字变量的位置\r\n content = getPluraMessage(content,pluraValue)\r\n }else if(pluralVar.length>0){\r\n content = getPluraMessage(content,parseInt(vars(pluralVar[0])))\r\n }else{ // 如果找不到复数变量,则使用第一个内容\r\n content = content[0]\r\n }\r\n } \r\n \r\n // 进行插值处理\r\n if(vars.length==0){\r\n return content\r\n }else{\r\n return replaceInterpolatedVars.call(scope,content,...vars)\r\n } \r\n }catch(e){\r\n return content // 出错则返回原始文本\r\n } \r\n}\r\n \r\n/** \r\n * 多语言管理类\r\n * \r\n * 当导入编译后的多语言文件时(import(\"./languages\")),会自动生成全局实例VoerkaI18n\r\n * \r\n * VoerkaI18n.languages // 返回支持的语言列表\r\n * VoerkaI18n.defaultLanguage // 默认语言\r\n * VoerkaI18n.language // 当前语言\r\n * VoerkaI18n.change(language) // 切换到新的语言 \r\n * \r\n * \r\n * VoerkaI18n.on(\"change\",(language)=>{}) // 注册语言切换事件\r\n * VoerkaI18n.off(\"change\",(language)=>{}) \r\n * \r\n * */ \r\n class I18nManager extends EventEmitter{\r\n constructor(settings={}){\r\n super()\r\n if(I18nManager.instance!=null){\r\n return I18nManager.instance;\r\n }\r\n I18nManager.instance = this;\r\n this._settings = deepMerge(defaultLanguageSettings,settings)\r\n this._scopes=[] \r\n return I18nManager.instance;\r\n }\r\n get settings(){ return this._settings }\r\n get scopes(){ return this._scopes }\r\n // 当前激活语言\r\n get activeLanguage(){ return this._settings.activeLanguage}\r\n // 默认语言\r\n get defaultLanguage(){ return this._settings.defaultLanguage}\r\n // 支持的语言列表\r\n get languages(){ return this._settings.languages}\r\n // 内置格式化器\r\n get formatters(){ return inlineFormatters }\r\n /**\r\n * 切换语言\r\n */\r\n async change(value){\r\n value=value.trim()\r\n if(this.languages.findIndex(lang=>lang.name === value)!==-1){\r\n // 通知所有作用域刷新到对应的语言包\r\n await this._refreshScopes(value)\r\n this._settings.activeLanguage = value\r\n /// 触发语言切换事件\r\n await this.emit(value) \r\n }else{\r\n throw new Error(\"Not supported language:\"+value)\r\n }\r\n }\r\n /**\r\n * 当切换语言时调用此方法来加载更新语言包\r\n * @param {*} newLanguage \r\n */\r\n async _refreshScopes(newLanguage){ \r\n // 并发执行所有作用域语言包的加载\r\n try{\r\n const scopeRefreshers = this._scopes.map(scope=>{\r\n return scope.refresh(newLanguage)\r\n })\r\n if(Promise.allSettled){\r\n await Promise.allSettled(scopeRefreshers)\r\n }else{\r\n await Promise.all(scopeRefreshers)\r\n } \r\n }catch(e){\r\n console.warn(\"Error while refreshing i18n scopes:\",e.message)\r\n } \r\n }\r\n /**\r\n * \r\n * 注册一个新的作用域\r\n * \r\n * 每一个库均对应一个作用域,每个作用域可以有多个语言包,且对应一个翻译函数\r\n * 除了默认语言外,其他语言采用动态加载的方式\r\n * \r\n * @param {*} scope \r\n */\r\n async register(scope){\r\n if(!(scope instanceof i18nScope)){\r\n throw new TypeError(\"Scope must be an instance of I18nScope\")\r\n }\r\n this._scopes.push(scope) \r\n await scope.refresh(this.activeLanguage) \r\n }\r\n /**\r\n * 注册全局格式化器\r\n * 格式化器是一个简单的同步函数value=>{...},用来对输入进行格式化后返回结果\r\n * \r\n * registerFormatters(name,value=>{...}) // 适用于所有语言\r\n * registerFormatters(name,value=>{...},{langauge:\"zh\"}) // 适用于cn语言\r\n * registerFormatters(name,value=>{...},{langauge:\"en\"}) // 适用于en语言 \r\n \r\n * @param {*} formatters \r\n */\r\n registerFormatter(name,formatter,{language=\"*\"}={}){\r\n if(!typeof(formatter)===\"function\" || typeof(name)!==\"string\"){\r\n throw new TypeError(\"Formatter must be a function\")\r\n } \r\n if(DataTypes.includes(name)){\r\n this.formatters[language].$types[name] = formatter\r\n }else{\r\n this.formatters[language][name] = formatter\r\n }\r\n }\r\n}\r\n\r\nmodule.exports ={\r\n getInterpolatedVars,\r\n replaceInterpolatedVars,\r\n I18nManager,\r\n translate,\r\n i18nScope,\r\n defaultLanguageSettings,\r\n getDataTypeName,\r\n isNumber,\r\n isPlainObject \r\n}","/**\r\n * 内置的格式化器\r\n * \r\n */\r\n\r\n\r\n/**\r\n * 字典格式化器\r\n * 根据输入data的值,返回后续参数匹配的结果\r\n * dict(data,,,,,,,...)\r\n * \r\n * \r\n * dict(1,1,\"one\",2,\"two\",3,\"three\",4,\"four\") == \"one\"\r\n * dict(2,1,\"one\",2,\"two\",3,\"three\",4,\"four\") == \"two\"\r\n * dict(3,1,\"one\",2,\"two\",3,\"three\",4,\"four\") == \"three\"\r\n * dict(4,1,\"one\",2,\"two\",3,\"three\",4,\"four\") == \"four\"\r\n * // 无匹配时返回原始值\r\n * dict(5,1,\"one\",2,\"two\",3,\"three\",4,\"four\") == 5 \r\n * // 无匹配时并且后续参数个数是奇数,则返回最后一个参数\r\n * dict(5,1,\"one\",2,\"two\",3,\"three\",4,\"four\",\"more\") == \"more\" \r\n * \r\n * 在翻译中使用\r\n * I have { value | dict(1,\"one\",2,\"two\",3,\"three\",4,\"four\")} apples\r\n * \r\n * @param {*} value \r\n * @param {...any} args \r\n * @returns \r\n */\r\n function dict(value,...args){\r\n for(let i=0;i0 && (args.length % 2!==0)) return args[args.length-1]\r\n return value\r\n}\r\n\r\nfunction formatCurrency(value,symbol,retainDots){\r\n\r\n}\r\n\r\nmodule.exports = { \r\n \"*\":{\r\n $types:{\r\n Date:(value)=>value.toLocaleString()\r\n },\r\n time:(value)=> value.toLocaleTimeString(), \r\n shorttime:(value)=> value.toLocaleTimeString(), \r\n date: (value)=> value.toLocaleDateString(), \r\n dict, //字典格式化器\r\n }, \r\n zh:{ \r\n $types:{\r\n Date:(value)=> `${value.getFullYear()}年${value.getMonth()+1}月${value.getDate()}日 ${value.getHours()}点${value.getMinutes()}分${value.getSeconds()}秒`\r\n },\r\n shortime:(value)=> value.toLocaleTimeString(), \r\n time:(value)=>`${value.getHours()}点${value.getMinutes()}分${value.getSeconds()}秒`, \r\n date: (value)=> `${value.getFullYear()}年${value.getMonth()+1}月${value.getDate()}日`,\r\n shortdate: (value)=> `${value.getFullYear()}-${value.getMonth()+1}-${value.getDate()}`,\r\n currency:(value)=>`${value}元`,\r\n },\r\n en:{\r\n currency:(value)=>{\r\n return `$${value}`\r\n }\r\n }\r\n}"],"names":["utils","obj","_typeof","proto","_Object$getPrototypeOf","baseProto","value","isNaN","_parseInt","deepMerge","toObj","formObj","options","results","_Object$assign","key","_Array$isArray","array","v","undefined","constructor","name","eventemitter","_callbacks","callback","_includesInstanceProperty","push","i","this","length","args","_Promise","allSettled","_mapInstanceProperty","cb","all","scope","_id","id","Date","getTime","toString","Math","random","_languages","languages","_defaultLanguage","defaultLanguage","_activeLanguage","activeLanguage","_default","_messages","messages","_idMap","idMap","_formatters","formatters","_loaders","loaders","_global","$cache","typedFormatters","_globalThis","VoerkaI18n","I18nManager","require$$0","global","_loading","register","then","formatter","language","TypeError","DataTypes","$types","newLanguage","resolve","loader","console","warn","_context3","message","_fallback","_bindInstanceProperty","on","off","offAll","change","getDataTypeName","isNumber","isPlainObject","EventEmitter","require$$1","i18nScope","require$$2","inlineFormatters","toLocaleString","time","toLocaleTimeString","shorttime","date","toLocaleDateString","dict","zh","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","shortime","shortdate","currency","en","varWithPipeRegexp","hasInterpolation","str","parseFormatters","result","substr","split","r","_trimInstanceProperty","firstIndex","_indexOfInstanceProperty","lastIndex","_lastIndexOfInstanceProperty","argsContent","arg","_startsWithInstanceProperty","_endsWithInstanceProperty","toLowerCase","String","JSON","parse","e","forEachInterpolatedVars","match","opts","replaceAll","exec","varname","groups","_replaceAllInstanceProperty","replace","resetScopeCache","buildFormatters","func","target","getFormatter","call","getFormattedValue","formatterFuncs","defaultFormatter","dataType","getDataTypeDefaultFormatter","error","executeFormatter","replaceInterpolatedVars","template","varValues","params","Error","defaultLanguageSettings","title","isMessageId","content","getPluraMessage","escape","unescape","settings","instance","_settings","_scopes","_findIndexInstanceProperty","lang","_refreshScopes","emit","scopeRefreshers","refresh","_context31","runtime","getInterpolatedVars","vars","varName","varItem","varDef","translate","pluralVars","pluraValue","arguments","index","msgId","pluralVar"],"mappings":"44HAmFAA,EA7EC,SAAuBC,MACD,WAAfC,EAAOD,IAA4B,OAARA,EAAc,OAAO,MAChDE,EAAQC,EAAsBH,MACpB,OAAVE,EAAgB,OAAO,UACvBE,EAAYF,EAE4B,OAArCC,EAAsBC,IACzBA,EAAYD,EAAsBC,UAE/BF,IAAUE,GAoErBL,EAjEA,SAAkBM,UACNC,MAAMC,EAASF,KAgE3BN,EAlDA,SAASS,EAAUC,EAAMC,SAAQC,yDAAQ,GACjCC,EAAUC,EAAc,GAAGJ,gBAChBC,YAAiB,yBAAEI,OAAIT,UAC/BS,KAAOF,KACc,WAAjBX,EAAOI,IAAgC,OAAVA,KACzBU,EAAcV,OACQ,IAAlBM,EAAQK,MACPJ,EAAQE,GAAOT,OACb,GAAqB,IAAlBM,EAAQK,MAAY,OACzBJ,EAAQE,oBAAWF,EAAQE,MAAQT,SACjC,GAAqB,IAAlBM,EAAQK,MAAY,OACzBJ,EAAQE,KAAW,uBAAYF,EAAQE,MAAQT,YAGnDO,EAAQE,GAAON,EAAUI,EAAQE,GAAKT,EAAMM,QAGhDC,EAAQE,GAAOT,OAGnBO,EAAQE,GAAOT,KAGhBO,GA2BXb,EAXC,SAAyBkB,UACf,OAANA,EAAoB,YACdC,IAAND,EAAwB,YACV,mBAALA,EAAyB,WAC/BA,EAAEE,aAAeF,EAAEE,YAAYC,MCvEvCC,yCAEaC,WAAa,qCAEtB,SAAGC,SACIC,SAAKF,mBAAoBC,SACvBD,WAAWG,KAAKF,sBAEzB,SAAIA,OACI,IAAIG,EAAE,EAAEA,EAAEC,KAAKL,WAAWM,OAAOF,IAAI,UAClCC,KAAKL,WAAWI,KAAKH,WACfD,mBAAkBI,EAAE,0BAIrC,gBACSJ,WAAa,oCAEtB,qHAAcO,2BAAAA,cACPC,EAAQC,2CACDD,EAAQC,WAAWC,SAAKV,oBAAe,SAAAW,UAAIA,eAAMJ,oDAEjDC,EAAQI,IAAIF,SAAKV,oBAAe,SAAAW,UAAIA,eAAMJ,2GC1B5DM,8BACgBxB,yDAAQ,GAAGY,2DAEda,IAAmBzB,EAAQ0B,KAAO,IAAIC,MAAOC,UAAUC,WAAWjC,EAAuB,IAAdkC,KAAKC,eAChFC,WAAmBhC,EAAQiC,eAC3BC,iBAAmBlC,EAAQmC,iBAAmB,UAC9CC,gBAAmBpC,EAAQqC,oBAC3BC,SAAmBtC,eACnBuC,UAAmBvC,EAAQwC,cAC3BC,OAAmBzC,EAAQ0C,WAC3BC,YAAmB3C,EAAQ4C,gBAC3BC,SAAmB7C,EAAQ8C,aAC3BC,QAAmB,UAEnBC,OAAO,CACRX,eAAiB,KACjBY,gBAAiB,GACjBL,WAAiB,KAIjBM,EAAWC,WAAW,KACdC,EAAgBC,GAAhBD,cACGD,WAAa,IAAIC,EAAY,CACpCjB,gBAAiBnB,KAAKmB,gBACtBE,eAAiBrB,KAAKqB,eACtBJ,UAAWjC,EAAQiC,iBAGtBqB,OAASJ,EAAWC,gBAEpBI,UAAS,OAETC,SAAS5C,mCAGlB,kBAAgBI,KAAKS,iCAErB,kBAA6BT,KAAKkB,6CAElC,kBAA4BlB,KAAKoB,qCAEjC,kBAAqBpB,KAAKsB,+BAE1B,kBAAsBtB,KAAKuB,6BAE3B,kBAAmBvB,KAAKyB,+BAExB,kBAAwBzB,KAAK2B,iCAE7B,kBAAqB3B,KAAK6B,6BAE1B,kBAAoB7B,KAAK+B,aACzB,SAAWrD,QAAYqD,QAAUrD,0BAKjC,SAASkB,GACkB,gBAAZA,KAAwBA,EAAW,mBACzC0C,OAAOE,SAASxC,MAAMyC,KAAK7C,SAAgBA,oCAEpD,SAAkBH,EAAKiD,gEAAyB,OAAdC,SAAAA,aAAS,SACf,gBAAbD,IAA0C,iBAARjD,QACnC,IAAImD,UAAU,gCAErB/C,EAAAgD,gBAAAA,UAAmBpD,QACbmC,WAAWe,GAAUG,OAAOrD,GAAQiD,OAEpCd,WAAWe,GAAUlD,GAAQiD,2BAM1C,gBACSnB,UAAYvB,KAAKsB,cACjBF,gBAAkBpB,KAAKmB,oDAMhC,WAAc4B,oFACLR,SAAWpC,EAAQ6C,UACpBD,IAAaA,EAAc/C,KAAKqB,gBAEjC0B,IAAgB/C,KAAKmB,4CACfI,UAAYvB,KAAKsB,sCAMJ,mBADhB2B,EAASjD,KAAK8B,QAAQiB,+CAGKE,iBAApB1B,8BACAH,gBAAkB2B,oDAEvBG,QAAQC,qDAAsCJ,6BAA6B/C,KAAKU,kBAAQ0C,KAAEC,eACrFC,iDAGJA,kIAIb,wBAAgBC,SAAKjB,OAAOkB,WAAQxD,KAAKsC,yBACzC,wBAAiBiB,SAAKjB,OAAOmB,YAASzD,KAAKsC,4BAC3C,wBAAoBiB,SAAKjB,OAAOoB,eAAY1D,KAAKsC,4BACjD,wBACWiB,SAAKjB,OAAOqB,eAAY3D,KAAKsC,omEChH5C,IAAQsB,GAAqDvB,EAArCwB,GAAqCxB,EAA5ByB,GAA4BzB,EAAdxD,GAAcwD,EACvD0B,GAAeC,EACfC,GAAYC,EACbC,GCuCY,KACT,CACArB,OAAO,CACHnC,KAAK,SAACjC,UAAQA,EAAM0F,mBAExBC,KAAK,SAAC3F,UAAUA,EAAM4F,sBACtBC,UAAU,SAAC7F,UAAUA,EAAM4F,sBAC3BE,KAAM,SAAC9F,UAASA,EAAM+F,sBACtBC,KAtBP,SAAchG,8BAASwB,mCAAAA,wBAChB,IAAIH,EAAE,EAAEA,EAAEG,EAAKD,OAAOF,GAAG,KACtBG,EAAKH,KAAKrB,SACFwB,EAAKH,EAAE,UAGnBG,EAAKD,OAAQ,GAAMC,EAAKD,OAAS,GAAI,EAAWC,EAAKA,EAAKD,OAAO,GAC7DvB,IAiBPiG,GAAG,CACC7B,OAAO,CACHnC,KAAK,SAACjC,sDAAYA,EAAMkG,2BAAiBlG,EAAMmG,WAAW,eAAKnG,EAAMoG,wBAAcpG,EAAMqG,wBAAcrG,EAAMsG,0BAAgBtG,EAAMuG,oBAEvIC,SAAS,SAACxG,UAAUA,EAAM4F,sBAC1BD,KAAK,SAAC3F,oCAAWA,EAAMqG,wBAAcrG,EAAMsG,0BAAgBtG,EAAMuG,mBACjET,KAAM,SAAC9F,oCAAYA,EAAMkG,2BAAiBlG,EAAMmG,WAAW,eAAKnG,EAAMoG,gBACtEK,UAAW,SAACzG,oCAAYA,EAAMkG,2BAAiBlG,EAAMmG,WAAW,eAAKnG,EAAMoG,YAC3EM,SAAS,SAAC1G,mBAAWA,SAEzB2G,GAAG,CACCD,SAAS,SAAC1G,oBACKA,MDrDnB4G,MAAoB,0EAkBxB,SAASC,GAAiBC,UACf3F,EAAA2F,QAAAA,EAAa,MAAQ3F,EAAA2F,QAAAA,EAAa,kEAE7C,IAAM3C,GAAa,CAAC,SAAS,SAAS,UAAU,SAAS,QAAQ,WAAW,QAAQ,SAAS,SAAS,OAAO,OAAO,YAAY,MAAM,MAAM,UAAU,WAqBtJ,SAAS4C,GAAgB7D,eACjBA,EAAY,MAAO,OAEnB8D,EAASrF,UAAAuB,QAAAA,GAAkB+D,OAAO,YAAUC,MAAM,cAAS,SAAAC,UAAGC,EAAAD,QAAAA,aAG3DxF,EAAAqF,QAAAA,GAAW,SAAAhD,OACVqD,EAAaC,EAAAtD,QAAAA,EAAkB,KAC/BuD,EAAYC,EAAAxD,QAAAA,EAAsB,SACrB,IAAdqD,IAAgC,IAAbE,EAAe,SAC3BE,EAAeL,IAAApD,EAAUiD,OAAOI,EAAW,EAAEE,EAAUF,EAAW,YACpE7F,EAAoB,IAAbiG,EAAkB,GAAM9F,IAAA8F,EAAYP,MAAM,cAAS,SAAAQ,MAC1DA,EAAMN,EAAAM,QAAAA,IACFzH,MAAMC,EAASwH,WACRxH,EAASwH,GACd,GAAIC,EAAAD,QAAAA,EAAe,MAASE,EAAAF,QAAAA,EAAa,MAAWC,EAAAD,QAAAA,EAAe,MAASE,EAAAF,QAAAA,EAAa,YACpFA,EAAIT,OAAO,EAAES,EAAInG,OAAO,GAC7B,GAAuB,SAApBmG,EAAIG,eAA8C,UAApBH,EAAIG,oBACZ,SAApBH,EAAIG,cACT,KAAIF,EAAAD,QAAAA,EAAe,MAAQE,EAAAF,QAAAA,EAAa,MAAUC,EAAAD,QAAAA,EAAe,MAAQE,EAAAF,QAAAA,EAAa,aAOjFI,OAAOJ,cALHK,KAAKC,MAAMN,GACrB,MAAMO,UACIH,OAAOJ,aAMnB,CAAC1D,EAAUiD,OAAO,EAAEI,GAAY7F,SAEhC,CAACwC,EAAU,OAqD9B,SAASkE,GAAwBpB,EAAI5F,OACjBiH,EAD0B7H,yDAAQ,GAC9C0G,EAAOF,EACPsB,EAAO5H,EAAc,CACrB6H,YAAW,GACb/H,OACFsG,GAAkBW,UAAU,EACwB,QAA5CY,EAAQvB,GAAkB0B,KAAKtB,KAAmB,KAChDuB,EAAUJ,EAAMK,OAAOD,SAAW,GAElCrF,EAAa6D,GAAgBoB,EAAMK,OAAOtF,eAC1B,mBAAZhC,MAGE8F,IADDoB,GACQK,EAAAzB,QAAAA,EAAkBmB,EAAM,GAAGjH,EAASqH,EAAQrF,EAAWiF,EAAM,KAE7DnB,EAAO0B,QAAQP,EAAM,GAAGjH,EAASqH,EAAQrF,EAAWiF,EAAM,KAExE,eAILvB,GAAkBW,UAAU,SAEzBP,EAwBX,SAAS2B,GAAgB7G,OAAMa,yDAAe,KAC1Cb,EAAMwB,OAAS,CAACX,eAAAA,EAAeY,gBAAgB,GAAGL,WAAW,IAkHjE,SAAS0F,GAAgB9G,EAAMa,EAAeO,SACtC3C,EAAU,OACO2C,4BAAbc,aACDA,EAAU,GAAG,KACN6E,EAxDlB,SAAsB/G,EAAMa,EAAe5B,MAEnCe,EAAMwB,QAAQqF,GAAgB7G,GAC/BA,EAAMwB,OAAOX,iBAAmBA,MAC5B5B,KAAQe,EAAMwB,OAAOJ,WAAY,OAAOpB,EAAMwB,OAAOJ,WAAWnC,QAEnE4H,GAAgB7G,EAAMa,iBAGV,CAACb,EAAMoB,WAAWpB,EAAM8B,OAAOV,2BACnB,KAAlB4F,UAEHnG,KAAkBmG,EAAO,KACpB5F,EAAa4F,EAAOnG,IAAmB,MACvC5B,KAAQmC,GAA0C,mBAApBA,EAAWnC,GAAqB,OAAOe,EAAMwB,OAAOJ,WAAWnC,GAAQmC,EAAWnC,OAGpHmC,EAAa4F,EAAO,MAAQ,MAC5B/H,KAAQmC,GAA0C,mBAApBA,EAAWnC,GAAqB,OAAOe,EAAMwB,OAAOJ,WAAWnC,GAAQmC,EAAWnC,IAsCnGgI,CAAajH,EAAMa,EAAeqB,EAAU,IACvC,mBAAR6E,EACNtI,EAAQa,MAAK,SAACR,gBACHiI,oBAAKjI,aAAKoD,EAAU,SAK/BzD,EAAQa,MAAK,SAACR,iBACmB,mBAAnBA,EAAEoD,EAAU,OACXpD,EAAEoD,EAAU,KAAIgF,kBAAKpI,aAAKoD,EAAU,MAEpCpD,2EAMpBL,EAWX,SAAS0I,GAAkBnH,EAAMa,EAAeO,EAAWlD,OAEjDkJ,EAAiBN,GAAgB9G,EAAMa,EAAeO,GAEtDiG,EA7HV,SAAqCrH,EAAMa,EAAeyG,MAClDtH,EAAMwB,QAAQqF,GAAgB7G,GAC/BA,EAAMwB,OAAOX,iBAAmBA,MAC5ByG,KAAYtH,EAAMwB,OAAOC,gBAAiB,OAAOzB,EAAMwB,OAAOC,gBAAgB6F,QAEjFT,GAAgB7G,EAAMa,iBAIV,CAACb,EAAMoB,WAAWpB,EAAM8B,OAAOV,2BACnB,KAAlB4F,UACFA,MAEAnG,KAAkBmG,GAAW1D,GAAc0D,EAAOnG,GAAgByB,QAAQ,KACtElB,EAAa4F,EAAOnG,GAAgByB,UACrCgF,KAAYlG,GAA6C,mBAAxBA,EAAWkG,UACpCtH,EAAMwB,OAAOC,gBAAgB6F,GAAYlG,EAAWkG,MAI/D,MAAON,GAAW1D,GAAc0D,EAAO,KAAK1E,QAAQ,KAChDlB,EAAa4F,EAAO,KAAK1E,UAC1BgF,KAAYlG,GAA6C,mBAAxBA,EAAWkG,UACpCtH,EAAMwB,OAAOC,gBAAgB6F,GAAYlG,EAAWkG,MAsG7CC,CAA4BvH,EAAMa,EAAeuC,GAAgBlF,WACxFmJ,KACCD,QAAAA,EAAsB,EAAE,EAAEC,GAG9BnJ,EAnEJ,SAA0BA,EAAMkD,MACL,IAApBA,EAAW3B,OAAY,OAAOvB,MAC7BgH,EAAShH,gBAEYkD,kCAAW,KAAxBc,aACqB,mBAAfA,SAGCgD,EAFPA,EAAShD,EAAUgD,mCAK9B,MAAMiB,SACHzD,QAAQ8E,2DAAgDtJ,gBAAUiI,EAAEtD,qBAEjEqC,EAqDCuC,CAAiBvJ,EAAMkJ,GACxBlJ,EAoBX,SAASwJ,GAAwBC,WACvB3H,EAAQR,KAERqB,EAAiBb,EAAM8B,OAAOjB,kCAHKnB,mCAAAA,uBAOxB,IAAdA,EAAKD,SAAesF,GAAiB4C,GAAW,OAAOA,KAGzC,IAAdjI,EAAKD,QAAc6D,GAAc5D,EAAK,IAAI,KAGrCkI,EAAYlI,EAAK,UACd0G,GAAwBuB,GAAS,SAAClB,EAAQrF,OACzClD,EAAUuI,KAAWmB,EAAaA,EAAUnB,GAAW,UACpDU,GAAkBnH,EAAMa,EAAeO,EAAWlD,UAKvD2J,EAAsB,IAAdnI,EAAKD,QAAcb,EAAcc,EAAK,MAAYA,EAAK,IAAMA,KACxD,IAAhBmI,EAAOpI,OAAY,OAAOkI,MACzBpI,EAAI,SACD6G,GAAwBuB,GAAS,SAAClB,EAAQrF,MAC1CyG,EAAOpI,OAAOF,SACN4H,GAAkBnH,EAAMa,EAAeO,EAAWyG,EAAOtI,YAE1D,IAAIuI,QAEhB,CAACvB,YAAW,IAOtB,IAAMwB,GAA0B,CAC5BpH,gBAAiB,KACjBE,eAAgB,KAChBJ,UAAU,CACN,CAACxB,KAAK,KAAK+I,MAAM,cAAa,GAC9B,CAAC/I,KAAK,KAAK+I,MAAM,OAErB5G,WAAWuC,IAGf,SAASsE,GAAYC,UACV9J,EAAS8J,GAAS,EAQ7B,SAASC,GAAgBnH,EAAS9C,cAEvBU,EAAcoC,GACNA,EAASvB,OAASvB,EAAQ8C,EAAS9C,GAAS8C,EAASA,EAASvB,OAAO,GAEtEuB,EAEb,gBACUpC,EAAcoC,GAAYA,EAAS,GAAKA,GAGvD,SAASoH,GAAOpD,8BACL2B,kCAAA3B,QAAAA,EAAe,uBAAuB,gBAC7B,KAAK,eACL,KAAK,eACL,KAAK,eACL,KAAK,eACL,KAAK,eACL,IAAK,eACL,IAAK,eACL,KAAK,OAEzB,SAASqD,GAASrD,8BACP2B,kCAAA3B,QAAAA,EACS,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,aACN,MAAM,aACN,MAAM,cACN,yBAAyB,UA8GtCpD,mBAAoB2B,wCACX+E,yDAAS,mCAEQ,MAAtB1G,EAAY2G,WAGf3G,EAAY2G,gBACPC,UAAYnK,GAAU0J,GAAwBO,KAC9CG,QAAQ,QAJF7G,EAAY2G,0CAO3B,kBAAuB/I,KAAKgJ,8BAC5B,kBAAqBhJ,KAAKiJ,oCAE1B,kBAA6BjJ,KAAKgJ,UAAU3H,4CAE5C,kBAA8BrB,KAAKgJ,UAAU7H,uCAE7C,kBAAwBnB,KAAKgJ,UAAU/H,kCAEvC,kBAAyBkD,sCAIzB,WAAazF,2EACTA,EAAMoH,EAAApH,QAAAA,IACoD,IAAvDwK,SAAKjI,mBAAoB,SAAAkI,UAAMA,EAAK1J,OAASf,qCAEtCsB,KAAKoJ,eAAe1K,sBACrBsK,UAAU3H,eAAiB3C,WAE1BsB,KAAKqJ,KAAK3K,uCAEV,IAAI4J,MAAM,0BAA0B5J,2IAOlD,WAAqBqE,sFAGPuG,EAAkBjJ,SAAK4I,iBAAY,SAAAzI,UAC9BA,EAAM+I,QAAQxG,OAEtB5C,EAAQC,2CACDD,EAAQC,WAAWkJ,gDAEnBnJ,EAAQI,IAAI+I,4DAGtBpG,QAAQC,KAAK,sCAAsCqG,KAAEnG,oJAY7D,WAAe7C,qEACNA,aAAiByD,yBACZ,IAAIrB,UAAU,6DAEnBqG,QAAQnJ,KAAKU,YACZA,EAAM+I,QAAQvJ,KAAKqB,6IAY7B,SAAkB5B,EAAKiD,gEAAyB,OAAdC,SAAAA,aAAS,SACf,gBAAbD,IAA0C,iBAARjD,QACnC,IAAImD,UAAU,gCAErB/C,EAAAgD,SAAAA,GAAmBpD,QACbmC,WAAWe,GAAUG,OAAOrD,GAAQiD,OAEpCd,WAAWe,GAAUlD,GAAQiD,WAK9C+G,GAAgB,CACZC,oBA/hBJ,SAA6BlE,OACrBmE,EAAO,UACX/C,GAAwBpB,GAAI,SAACoE,EAAQhI,EAAWiF,OACxCgD,EAAU,CACVpK,KAAKmK,EACLhI,WAAWvB,EAAAuB,QAAAA,GAAe,+BACf,CACHnC,UACAS,cAGR2G,MAAMA,UAEsH,IAA7HqC,EAAAS,QAAAA,GAAe,SAAAG,UAAUA,EAAOrK,OAAOoK,EAAQpK,MAAUoK,EAAQjI,WAAWf,YAAciJ,EAAOlI,WAAWf,eAC3G8I,EAAK7J,KAAK+J,GAEP,MAEJF,GA8gBPzB,wBAAAA,GACA9F,YAAAA,GACA2H,UAjMJ,SAAmB1G,OACT7C,EAAQR,KACRqB,EAAiBb,EAAM8B,OAAOjB,eAChCqH,EAAUrF,EACVsG,EAAK,GACLK,EAAY,GACZC,EAAa,QACK,cAAX5G,GAAqB,OAAOA,iBAGX,IAArB6G,UAAUjK,QAAgB6D,GAAcoG,UAAU,UAClCA,UAAU,aAAY,yBAAEzK,OAAKf,UACrB,mBAATA,MAEFiL,EAAKlK,GAAQf,IAChB,MAAMiI,GACHgD,EAAKlK,GAAQf,EAIlB2H,EAAA5G,QAAAA,EAAgB,MAA6B,iBAAdkK,EAAKlK,IAAoBuK,EAAWlK,KAAKL,MAE/EkK,EAAO,CAACO,UAAU,SAChB,GAAGA,UAAUjK,QAAU,EAAE,SAC3B0J,EAAOtJ,gCAAI6J,mBAAkB,YAAO,SAAC9D,EAAI+D,OAEjC/D,EAAoB,mBAAPA,EAAoBA,IAAQA,EAEtCvC,GAASuC,KAAM6D,EAAarL,EAASwH,IAC3C,MAAMO,WACAP,QASZ/E,IAAmBb,EAAMW,gBAKrBsH,GAAYC,KACXA,EAAUlI,UAAckI,IAAYrF,OAEvC,KAIG+G,EAAQ3B,GAAYC,GAAWA,EAAWlI,EAAMkB,MAAMkH,GAAOF,IACjEA,EAAUlI,EAAMgB,SAAS4I,IAAU1B,EACnCA,EAAUtJ,EAAcsJ,GAAWrI,EAAAqI,QAAAA,GAAY,SAAApJ,UAAGuJ,GAASvJ,MAAMuJ,GAASH,UAM3EtJ,EAAcsJ,IAAYA,EAAQzI,OAAO,IAGpCyI,EADY,OAAbuB,EACWtB,GAAgBD,EAAQuB,GAC7BI,UAAUpK,OAAO,EACZ0I,GAAgBD,EAAQ9J,EAAS+K,EAAKU,UAAU,MAEhD3B,EAAQ,IAKV,GAAbiB,EAAK1J,OACGyI,EAEAR,GAAwBR,WAAxBQ,QAA6B1H,EAAMkI,aAAWiB,KAE5D,MAAMhD,UACI+B,IAqHXzE,UAAAA,GACAsE,wBAAAA,GACA3E,gBAAAA,GACAC,SAAAA,GACAC,cAAAA"}
\ No newline at end of file
diff --git a/packages/runtime/dist/runtime.cjs b/packages/runtime/dist/runtime.cjs
new file mode 100644
index 0000000..b5cb243
--- /dev/null
+++ b/packages/runtime/dist/runtime.cjs
@@ -0,0 +1,938 @@
+'use strict';
+
+/**
+ * 判断是否是JSON对象
+ * @param {*} obj
+ * @returns
+ */
+ function isPlainObject$1(obj){
+ if (typeof obj !== 'object' || obj === null) return false;
+ var proto = Object.getPrototypeOf(obj);
+ if (proto === null) return true;
+ var baseProto = proto;
+
+ while (Object.getPrototypeOf(baseProto) !== null) {
+ baseProto = Object.getPrototypeOf(baseProto);
+ }
+ return proto === baseProto;
+}
+
+function isNumber$1(value){
+ return !isNaN(parseInt(value))
+}
+
+/**
+ * 简单进行对象合并
+ *
+ * options={
+ * array:0 , // 数组合并策略,0-替换,1-合并,2-去重合并
+ * }
+ *
+ * @param {*} toObj
+ * @param {*} formObj
+ * @returns 合并后的对象
+ */
+function deepMerge$1(toObj,formObj,options={}){
+ let results = Object.assign({},toObj);
+ Object.entries(formObj).forEach(([key,value])=>{
+ if(key in results){
+ if(typeof value === "object" && value !== null){
+ if(Array.isArray(value)){
+ if(options.array === 0){
+ results[key] = value;
+ }else if(options.array === 1){
+ results[key] = [...results[key],...value];
+ }else if(options.array === 2){
+ results[key] = [...new Set([...results[key],...value])];
+ }
+ }else {
+ results[key] = deepMerge$1(results[key],value,options);
+ }
+ }else {
+ results[key] = value;
+ }
+ }else {
+ results[key] = value;
+ }
+ });
+ return results
+}
+
+
+/**
+ * 获取指定变量类型名称
+ * getDataTypeName(1) == Number
+ * getDataTypeName("") == String
+ * getDataTypeName(null) == Null
+ * getDataTypeName(undefined) == Undefined
+ * getDataTypeName(new Date()) == Date
+ * getDataTypeName(new Error()) == Error
+ *
+ * @param {*} v
+ * @returns
+ */
+ function getDataTypeName$1(v){
+ if (v === null) return 'Null'
+ if (v === undefined) return 'Undefined'
+ if(typeof(v)==="function") return "Function"
+ return v.constructor && v.constructor.name;
+}
+
+
+
+
+var utils ={
+ isPlainObject: isPlainObject$1,
+ isNumber: isNumber$1,
+ deepMerge: deepMerge$1,
+ getDataTypeName: getDataTypeName$1
+};
+
+/**
+*
+* 简单的事件触发器
+*
+*/
+
+var eventemitter = class EventEmitter{
+ constructor(){
+ this._callbacks = [];
+ }
+ on(callback){
+ if(this._callbacks.includes(callback)) return
+ this._callbacks.push(callback);
+ }
+ off(callback){
+ for(let i=0;icb(...args)));
+ }else {
+ await Promise.all(this._callbacks.map(cb=>cb(...args)));
+ }
+ }
+};
+
+var scope = class i18nScope {
+ constructor(options={},callback){
+ // 每个作用域都有一个唯一的id
+ this._id = options.id || (new Date().getTime().toString()+parseInt(Math.random()*1000));
+ this._languages = options.languages; // 当前作用域的语言列表
+ this._defaultLanguage = options.defaultLanguage || "zh"; // 默认语言名称
+ this._activeLanguage = options.activeLanguage; // 当前语言名称
+ this._default = options.default; // 默认语言包
+ this._messages = options.messages; // 当前语言包
+ this._idMap = options.idMap; // 消息id映射列表
+ this._formatters = options.formatters; // 当前作用域的格式化函数列表
+ this._loaders = options.loaders; // 异步加载语言文件的函数列表
+ this._global = null; // 引用全局VoerkaI18n配置,注册后自动引用
+ // 主要用来缓存格式化器的引用,当使用格式化器时可以直接引用,避免检索
+ this.$cache={
+ activeLanguage : null,
+ typedFormatters: {},
+ formatters : {},
+ };
+ // 如果不存在全局VoerkaI18n实例,说明当前Scope是唯一或第一个加载的作用域,
+ // 则使用当前作用域来初始化全局VoerkaI18n实例
+ if(!globalThis.VoerkaI18n){
+ const { I18nManager } = runtime;
+ globalThis.VoerkaI18n = new I18nManager({
+ defaultLanguage: this.defaultLanguage,
+ activeLanguage : this.activeLanguage,
+ languages: options.languages,
+ });
+ }
+ this.global = globalThis.VoerkaI18n;
+ // 正在加载语言包标识
+ this._loading=false;
+ // 在全局注册作用域
+ this.register(callback);
+ }
+ // 作用域
+ get id(){return this._id}
+ // 默认语言名称
+ get defaultLanguage(){return this._defaultLanguage}
+ // 默认语言名称
+ get activeLanguage(){return this._activeLanguage}
+ // 默认语言包
+ get default(){return this._default}
+ // 当前语言包
+ get messages(){return this._messages}
+ // 消息id映射列表
+ get idMap(){return this._idMap}
+ // 当前作用域的格式化函数列表
+ get formatters(){return this._formatters}
+ // 异步加载语言文件的函数列表
+ get loaders(){return this._loaders}
+ // 引用全局VoerkaI18n配置,注册后自动引用
+ get global(){return this._global}
+ set global(value){this._global = value;}
+ /**
+ * 在全局注册作用域
+ * @param {*} callback 当注册
+ */
+ register(callback){
+ if(!typeof(callback)==="function") callback = ()=>{};
+ this.global.register(this).then(callback).catch(callback);
+ }
+ registerFormatter(name,formatter,{language="*"}={}){
+ if(!typeof(formatter)==="function" || typeof(name)!=="string"){
+ throw new TypeError("Formatter must be a function")
+ }
+ if(DataTypes.includes(name)){
+ this.formatters[language].$types[name] = formatter;
+ }else {
+ this.formatters[language][name] = formatter;
+ }
+ }
+ /**
+ * 回退到默认语言
+ */
+ _fallback(){
+ this._messages = this._default;
+ this._activeLanguage = this.defaultLanguage;
+ }
+ /**
+ * 刷新当前语言包
+ * @param {*} newLanguage
+ */
+ async refresh(newLanguage){
+ this._loading = Promise.resolve();
+ if(!newLanguage) newLanguage = this.activeLanguage;
+ // 默认语言,默认语言采用静态加载方式,只需要简单的替换即可
+ if(newLanguage === this.defaultLanguage){
+ this._messages = this._default;
+ return
+ }
+ // 非默认语言需要异步加载语言包文件,加载器是一个异步函数
+ // 如果没有加载器,则无法加载语言包,因此回退到默认语言
+ const loader = this.loaders[newLanguage];
+ if(typeof(loader) === "function"){
+ try{
+ this._messages = (await loader()).default;
+ this._activeLanguage = newLanguage;
+ }catch(e){
+ console.warn(`Error while loading language <${newLanguage}> on i18nScope(${this.id}): ${e.message}`);
+ this._fallback();
+ }
+ }else {
+ this._fallback();
+ }
+ }
+ // 以下方法引用全局VoerkaI18n实例的方法
+ get on(){return this.global.on.bind(this.global)}
+ get off(){return this.global.off.bind(this.global)}
+ get offAll(){return this.global.offAll.bind(this.global)}
+ get change(){
+ return this.global.change.bind(this.global)
+ }
+};
+
+/**
+ * 内置的格式化器
+ *
+ */
+
+/**
+ * 字典格式化器
+ * 根据输入data的值,返回后续参数匹配的结果
+ * dict(data,,,,,,,...)
+ *
+ *
+ * dict(1,1,"one",2,"two",3,"three",4,"four") == "one"
+ * dict(2,1,"one",2,"two",3,"three",4,"four") == "two"
+ * dict(3,1,"one",2,"two",3,"three",4,"four") == "three"
+ * dict(4,1,"one",2,"two",3,"three",4,"four") == "four"
+ * // 无匹配时返回原始值
+ * dict(5,1,"one",2,"two",3,"three",4,"four") == 5
+ * // 无匹配时并且后续参数个数是奇数,则返回最后一个参数
+ * dict(5,1,"one",2,"two",3,"three",4,"four","more") == "more"
+ *
+ * 在翻译中使用
+ * I have { value | dict(1,"one",2,"two",3,"three",4,"four")} apples
+ *
+ * @param {*} value
+ * @param {...any} args
+ * @returns
+ */
+ function dict(value,...args){
+ for(let i=0;i0 && (args.length % 2!==0)) return args[args.length-1]
+ return value
+}
+
+var formatters = {
+ "*":{
+ $types:{
+ Date:(value)=>value.toLocaleString()
+ },
+ time:(value)=> value.toLocaleTimeString(),
+ shorttime:(value)=> value.toLocaleTimeString(),
+ date: (value)=> value.toLocaleDateString(),
+ dict, //字典格式化器
+ },
+ zh:{
+ $types:{
+ Date:(value)=> `${value.getFullYear()}年${value.getMonth()+1}月${value.getDate()}日 ${value.getHours()}点${value.getMinutes()}分${value.getSeconds()}秒`
+ },
+ shortime:(value)=> value.toLocaleTimeString(),
+ time:(value)=>`${value.getHours()}点${value.getMinutes()}分${value.getSeconds()}秒`,
+ date: (value)=> `${value.getFullYear()}年${value.getMonth()+1}月${value.getDate()}日`,
+ shortdate: (value)=> `${value.getFullYear()}-${value.getMonth()+1}-${value.getDate()}`,
+ currency:(value)=>`${value}元`,
+ },
+ en:{
+ currency:(value)=>{
+ return `$${value}`
+ }
+ }
+};
+
+const { getDataTypeName,isNumber,isPlainObject,deepMerge } = utils;
+const EventEmitter = eventemitter;
+const i18nScope = scope;
+let inlineFormatters = formatters; // 内置格式化器
+
+
+
+// 用来提取字符里面的插值变量参数 , 支持管道符 { var | formatter | formatter }
+// 不支持参数: let varWithPipeRegexp = /\{\s*(?\w+)?(?(\s*\|\s*\w*\s*)*)\s*\}/g
+
+// 支持参数: { var | formatter(x,x,..) | formatter }
+let varWithPipeRegexp = /\{\s*(?\w+)?(?(\s*\|\s*\w*(\(.*\)){0,1}\s*)*)\s*\}/g;
+
+/**
+ * 考虑到通过正则表达式进行插件的替换可能较慢,因此提供一个简单方法来过滤掉那些
+ * 不需要进行插值处理的字符串
+ * 原理很简单,就是判断一下是否同时具有{和}字符,如果有则认为可能有插值变量,如果没有则一定没有插件变量,则就不需要进行正则匹配
+ * 从而可以减少不要的正则匹配
+ * 注意:该方法只能快速判断一个字符串不包括插值变量
+ * @param {*} str
+ * @returns {boolean} true=可能包含插值变量,
+ */
+function hasInterpolation(str){
+ return str.includes("{") && str.includes("}")
+}
+const DataTypes$1 = ["String","Number","Boolean","Object","Array","Function","Error","Symbol","RegExp","Date","Null","Undefined","Set","Map","WeakSet","WeakMap"];
+
+
+/**
+ 通过正则表达式对原始文本内容进行解析匹配后得到的
+ formatters="| aaa(1,1) | bbb "
+
+ 需要统一解析为
+
+ [
+ [aaa,[1,1]], // [formatter'name,[args,...]]
+ [bbb,[]],
+ ]
+
+ formatters="| aaa(1,1,"dddd") | bbb "
+
+ 目前对参数采用简单的split(",")来解析,因为无法正确解析aaa(1,1,"dd,,dd")形式的参数
+ 在此场景下基本够用了,如果需要支持更复杂的参数解析,可以后续考虑使用正则表达式来解析
+
+ @returns [[,[,,...]]]
+ */
+function parseFormatters(formatters){
+ if(!formatters) return []
+ // 1. 先解析为 ["aaa()","bbb"]形式
+ let result = formatters.trim().substr(1).trim().split("|").map(r=>r.trim());
+
+ // 2. 解析格式化器参数
+ return result.map(formatter=>{
+ let firstIndex = formatter.indexOf("(");
+ let lastIndex = formatter.lastIndexOf(")");
+ if(firstIndex!==-1 && lastIndex!==-1){ // 带参数的格式化器
+ const argsContent = formatter.substr(firstIndex+1,lastIndex-firstIndex-1).trim();
+ let args = argsContent=="" ? [] : argsContent.split(",").map(arg=>{
+ arg = arg.trim();
+ if(!isNaN(parseInt(arg))){
+ return parseInt(arg) // 数字
+ }else if((arg.startsWith('\"') && arg.endsWith('\"')) || (arg.startsWith('\'') && arg.endsWith('\'')) ){
+ return arg.substr(1,arg.length-2) // 字符串
+ }else if(arg.toLowerCase()==="true" || arg.toLowerCase()==="false"){
+ return arg.toLowerCase()==="true" // 布尔值
+ }else if((arg.startsWith('{') && arg.endsWith('}')) || (arg.startsWith('[') && arg.endsWith(']'))){
+ try{
+ return JSON.parse(arg)
+ }catch(e){
+ return String(arg)
+ }
+ }else {
+ return String(arg)
+ }
+ });
+ return [formatter.substr(0,firstIndex),args]
+ }else {// 不带参数的格式化器
+ return [formatter,[]]
+ }
+ })
+}
+
+/**
+ * 提取字符串中的插值变量
+ * // [
+ // {
+ name:<变量名称>,formatters:[{name:<格式化器名称>,args:[<参数>,<参数>,....]]}],<匹配字符串>],
+ // ....
+ //
+ * @param {*} str
+ * @param {*} isFull =true 保留所有插值变量 =false 进行去重
+ * @returns {Array}
+ * [
+ * {
+ * name:"<变量名称>",
+ * formatters:[
+ * {name:"<格式化器名称>",args:[<参数>,<参数>,....]},
+ * {name:"<格式化器名称>",args:[<参数>,<参数>,....]},
+ * ],
+ * match:"<匹配字符串>"
+ * },
+ * ...
+ * ]
+ */
+function getInterpolatedVars(str){
+ let vars = [];
+ forEachInterpolatedVars(str,(varName,formatters,match)=>{
+ let varItem = {
+ name:varName,
+ formatters:formatters.map(([formatter,args])=>{
+ return {
+ name:formatter,
+ args:args
+ }
+ }),
+ match:match
+ };
+ if(vars.findIndex(varDef=>((varDef.name===varItem.name) && (varItem.formatters.toString() == varDef.formatters.toString())))===-1){
+ vars.push(varItem);
+ }
+ return ""
+ });
+ return vars
+}
+/**
+ * 遍历str中的所有插值变量传递给callback,将callback返回的结果替换到str中对应的位置
+ * @param {*} str
+ * @param {Function(<变量名称>,[formatters],match[0])} callback
+ * @returns 返回替换后的字符串
+ */
+function forEachInterpolatedVars(str,callback,options={}){
+ let result=str, match;
+ let opts = Object.assign({
+ replaceAll:true, // 是否替换所有插值变量,当使用命名插值时应置为true,当使用位置插值时应置为false
+ },options);
+ varWithPipeRegexp.lastIndex=0;
+ while ((match = varWithPipeRegexp.exec(result)) !== null) {
+ const varname = match.groups.varname || "";
+ // 解析格式化器和参数 = [,[,[,,...]]]
+ const formatters = parseFormatters(match.groups.formatters);
+ if(typeof(callback)==="function"){
+ try{
+ if(opts.replaceAll){
+ result=result.replaceAll(match[0],callback(varname,formatters,match[0]));
+ }else {
+ result=result.replace(match[0],callback(varname,formatters,match[0]));
+ }
+ }catch{// callback函数可能会抛出异常,如果抛出异常,则中断匹配过程
+ break
+ }
+ }
+ varWithPipeRegexp.lastIndex=0;
+ }
+ return result
+}
+
+function resetScopeCache(scope,activeLanguage=null){
+ scope.$cache = {activeLanguage,typedFormatters:{},formatters:{}};
+}
+/**
+ * 取得指定数据类型的默认格式化器
+ *
+ * 可以为每一个数据类型指定一个默认的格式化器,当传入插值变量时,
+ * 会自动调用该格式化器来对值进行格式化转换
+
+ const formatters = {
+ "*":{
+ $types:{...} // 在所有语言下只作用于特定数据类型的格式化器
+ }, // 在所有语言下生效的格式化器
+ zh:{
+ $types:{
+ [数据类型]:(value)=>{...},
+ },
+ [格式化器名称]:(value)=>{...},
+ [格式化器名称]:(value)=>{...},
+ [格式化器名称]:(value)=>{...},
+ },
+ }
+ * @param {*} scope
+ * @param {*} activeLanguage
+ * @param {*} dataType 数字类型
+ * @returns {Function} 格式化函数
+ */
+function getDataTypeDefaultFormatter(scope,activeLanguage,dataType){
+ if(!scope.$cache) resetScopeCache(scope);
+ if(scope.$cache.activeLanguage === activeLanguage) {
+ if(dataType in scope.$cache.typedFormatters) return scope.$cache.typedFormatters[dataType]
+ }else {// 当语言切换时清空缓存
+ resetScopeCache(scope,activeLanguage);
+ }
+
+ // 先在当前作用域中查找,再在全局查找
+ const targets = [scope.formatters,scope.global.formatters];
+ for(const target of targets){
+ if(!target) continue
+ // 优先在当前语言的$types中查找
+ if((activeLanguage in target) && isPlainObject(target[activeLanguage].$types)){
+ let formatters = target[activeLanguage].$types;
+ if(dataType in formatters && typeof(formatters[dataType])==="function"){
+ return scope.$cache.typedFormatters[dataType] = formatters[dataType]
+ }
+ }
+ // 在所有语言的$types中查找
+ if(("*" in target) && isPlainObject(target["*"].$types)){
+ let formatters = target["*"].$types;
+ if(dataType in formatters && typeof(formatters[dataType])==="function"){
+ return scope.$cache.typedFormatters[dataType] = formatters[dataType]
+ }
+ }
+ }
+}
+
+/**
+ * 获取指定名称的格式化器函数
+ * @param {*} scope
+ * @param {*} activeLanguage
+ * @param {*} name 格式化器名称
+ * @returns {Function} 格式化函数
+ */
+function getFormatter(scope,activeLanguage,name){
+ // 缓存格式化器引用,避免重复检索
+ if(!scope.$cache) resetScopeCache(scope);
+ if(scope.$cache.activeLanguage === activeLanguage) {
+ if(name in scope.$cache.formatters) return scope.$cache.formatters[name]
+ }else {// 当语言切换时清空缓存
+ resetScopeCache(scope,activeLanguage);
+ }
+ // 先在当前作用域中查找,再在全局查找
+ const targets = [scope.formatters,scope.global.formatters];
+ for(const target of targets){
+ // 优先在当前语言查找
+ if(activeLanguage in target){
+ let formatters = target[activeLanguage] || {};
+ if((name in formatters) && typeof(formatters[name])==="function") return scope.$cache.formatters[name] = formatters[name]
+ }
+ // 在所有语言的$types中查找
+ let formatters = target["*"] || {};
+ if((name in formatters) && typeof(formatters[name])==="function") return scope.$cache.formatters[name] = formatters[name]
+ }
+}
+
+/**
+ * 执行格式化器并返回结果
+ * @param {*} value
+ * @param {*} formatters 多个格式化器顺序执行,前一个输出作为下一个格式化器的输入
+ */
+function executeFormatter(value,formatters){
+ if(formatters.length===0) return value
+ let result = value;
+ try{
+ for(let formatter of formatters){
+ if(typeof(formatter) === "function") {
+ result = formatter(result);
+ }else {// 如果碰到无效的格式化器,则跳过过续的格式化器
+ return result
+ }
+ }
+ }catch(e){
+ console.error(`Error while execute i18n formatter for ${value}: ${e.message} ` );
+ }
+ return result
+}
+/**
+ * 将 [[格式化器名称,[参数,参数,...]],[格式化器名称,[参数,参数,...]]]格式化器转化为
+ *
+ *
+ *
+ * @param {*} scope
+ * @param {*} activeLanguage
+ * @param {*} formatters
+ */
+function buildFormatters(scope,activeLanguage,formatters){
+ let results = [];
+ for(let formatter of formatters){
+ if(formatter[0]){
+ const func = getFormatter(scope,activeLanguage,formatter[0]);
+ if(typeof(func)==="function"){
+ results.push((v)=>{
+ return func(v,...formatter[1])
+ });
+ }else {
+ // 格式化器无效或者没有定义时,查看当前值是否具有同名的原型方法,如果有则执行调用
+ // 比如padStart格式化器是String的原型方法,不需要配置就可以直接作为格式化器调用
+ results.push((v)=>{
+ if(typeof(v[formatter[0]])==="function"){
+ return v[formatter[0]].call(v,...formatter[1])
+ }else {
+ return v
+ }
+ });
+ }
+ }
+ }
+ return results
+}
+
+/**
+ * 将value经过格式化器处理后返回
+ * @param {*} scope
+ * @param {*} activeLanguage
+ * @param {*} formatters
+ * @param {*} value
+ * @returns
+ */
+function getFormattedValue(scope,activeLanguage,formatters,value){
+ // 1. 取得格式化器函数列表
+ const formatterFuncs = buildFormatters(scope,activeLanguage,formatters);
+ // 2. 查找每种数据类型默认格式化器,并添加到formatters最前面,默认数据类型格式化器优先级最高
+ const defaultFormatter = getDataTypeDefaultFormatter(scope,activeLanguage,getDataTypeName(value));
+ if(defaultFormatter){
+ formatterFuncs.splice(0,0,defaultFormatter);
+ }
+ // 3. 执行格式化器
+ value = executeFormatter(value,formatterFuncs);
+ return value
+}
+
+/**
+ * 字符串可以进行变量插值替换,
+ * replaceInterpolatedVars("<模板字符串>",{变量名称:变量值,变量名称:变量值,...})
+ * replaceInterpolatedVars("<模板字符串>",[变量值,变量值,...])
+ * replaceInterpolatedVars("<模板字符串>",变量值,变量值,...])
+ *
+- 当只有两个参数并且第2个参数是{}时,将第2个参数视为命名变量的字典
+ replaceInterpolatedVars("this is {a}+{b},{a:1,b:2}) --> this is 1+2
+- 当只有两个参数并且第2个参数是[]时,将第2个参数视为位置参数
+ replaceInterpolatedVars"this is {}+{}",[1,2]) --> this is 1+2
+- 普通位置参数替换
+ replaceInterpolatedVars("this is {a}+{b}",1,2) --> this is 1+2
+-
+this == scope == { formatters: {}, ... }
+* @param {*} template
+* @returns
+*/
+function replaceInterpolatedVars(template,...args) {
+ const scope = this;
+ // 当前激活语言
+ const activeLanguage = scope.global.activeLanguage;
+
+ // 没有变量插值则的返回原字符串
+ if(args.length===0 || !hasInterpolation(template)) return template
+
+ // ****************************变量插值****************************
+ if(args.length===1 && isPlainObject(args[0])){
+ // 读取模板字符串中的插值变量列表
+ // [[var1,[formatter,formatter,...],match],[var2,[formatter,formatter,...],match],...}
+ let varValues = args[0];
+ return forEachInterpolatedVars(template,(varname,formatters)=>{
+ let value = (varname in varValues) ? varValues[varname] : '';
+ return getFormattedValue(scope,activeLanguage,formatters,value)
+ })
+ }else {
+ // ****************************位置插值****************************
+ // 如果只有一个Array参数,则认为是位置变量列表,进行展开
+ const params=(args.length===1 && Array.isArray(args[0])) ? [...args[0]] : args;
+ if(params.length===0) return template // 没有变量则不需要进行插值处理,返回原字符串
+ let i = 0;
+ return forEachInterpolatedVars(template,(varname,formatters)=>{
+ if(params.length>i){
+ return getFormattedValue(scope,activeLanguage,formatters,params[i++])
+ }else {
+ throw new Error() // 抛出异常,停止插值处理
+ }
+ },{replaceAll:false})
+
+ }
+}
+
+// 默认语言配置
+const defaultLanguageSettings = {
+ defaultLanguage: "zh",
+ activeLanguage: "zh",
+ languages:[
+ {name:"zh",title:"中文",default:true},
+ {name:"en",title:"英文"}
+ ],
+ formatters:inlineFormatters
+};
+
+function isMessageId(content){
+ return parseInt(content)>0
+}
+/**
+ * 根据值的单数和复数形式,从messages中取得相应的消息
+ *
+ * @param {*} messages 复数形式的文本内容 = [<=0时的内容>,<=1时的内容>,<=2时的内容>,...]
+ * @param {*} value
+ */
+function getPluraMessage(messages,value){
+ try{
+ if(Array.isArray(messages)){
+ return messages.length > value ? messages[value] : messages[messages.length-1]
+ }else {
+ return messages
+ }
+ }catch{
+ return Array.isArray(messages) ? messages[0] : messages
+ }
+}
+function escape(str){
+ return str.replaceAll(/\\(?![trnbvf'"]{1})/g,"\\\\")
+ .replaceAll("\t","\\t")
+ .replaceAll("\n","\\n")
+ .replaceAll("\b","\\b")
+ .replaceAll("\r","\\r")
+ .replaceAll("\f","\\f")
+ .replaceAll("\'","\\'")
+ .replaceAll('\"','\\"')
+ .replaceAll('\v','\\v')
+}
+function unescape(str){
+ return str
+ .replaceAll("\\t","\t")
+ .replaceAll("\\n","\n")
+ .replaceAll("\\b","\b")
+ .replaceAll("\\r","\r")
+ .replaceAll("\\f","\f")
+ .replaceAll("\\'","\'")
+ .replaceAll('\\"','\"')
+ .replaceAll('\\v','\v')
+ .replaceAll(/\\\\(?![trnbvf'"]{1})/g,"\\")
+}
+/**
+ * 翻译函数
+ *
+* translate("要翻译的文本内容") 如果默认语言是中文,则不会进行翻译直接返回
+* translate("I am {} {}","man") == I am man 位置插值
+* translate("I am {p}",{p:"man"}) 字典插值
+* translate("total {$count} items", {$count:1}) //复数形式
+* translate("total {} {} {} items",a,b,c) // 位置变量插值
+ *
+ * this===scope 当前绑定的scope
+ *
+ */
+function translate(message) {
+ const scope = this;
+ const activeLanguage = scope.global.activeLanguage;
+ let content = message;
+ let vars=[]; // 插值变量列表
+ let pluralVars= []; // 复数变量
+ let pluraValue = null; // 复数值
+ if(!typeof(message)==="string") return message
+ try{
+ // 1. 预处理变量: 复数变量保存至pluralVars中 , 变量如果是Function则调用
+ if(arguments.length === 2 && isPlainObject(arguments[1])){
+ Object.entries(arguments[1]).forEach(([name,value])=>{
+ if(typeof(value)==="function"){
+ try{
+ vars[name] = value();
+ }catch(e){
+ vars[name] = value;
+ }
+ }
+ // 以$开头的视为复数变量
+ if(name.startsWith("$") && typeof(vars[name])==="number") pluralVars.push(name);
+ });
+ vars = [arguments[1]];
+ }else if(arguments.length >= 2){
+ vars = [...arguments].splice(1).map((arg,index)=>{
+ try{
+ arg = typeof(arg)==="function" ? arg() : arg;
+ // 位置参数中以第一个数值变量为复数变量
+ if(isNumber(arg)) pluraValue = parseInt(arg);
+ }catch(e){ }
+ return arg
+ });
+
+ }
+
+
+
+
+ // 3. 取得翻译文本模板字符串
+ if(activeLanguage === scope.defaultLanguage){
+ // 2.1 从默认语言中取得翻译文本模板字符串
+ // 如果当前语言就是默认语言,不需要查询加载,只需要做插值变换即可
+ // 当源文件运用了babel插件后会将原始文本内容转换为msgId
+ // 如果是msgId则从scope.default中读取,scope.default=默认语言包={:}
+ if(isMessageId(content)){
+ content = scope.default[content] || message;
+ }
+ }else {
+ // 2.2 从当前语言包中取得翻译文本模板字符串
+ // 如果没有启用babel插件将源文本转换为msgId,需要先将文本内容转换为msgId
+ // JSON.stringify在进行转换时会将\t\n\r转换为\\t\\n\\r,这样在进行匹配时就出错
+ let msgId = isMessageId(content) ? content : scope.idMap[escape(content)];
+ content = scope.messages[msgId] || content;
+ content = Array.isArray(content) ? content.map(v=>unescape(v)) : unescape(content);
+ }
+ // 2. 处理复数
+ // 经过上面的处理,content可能是字符串或者数组
+ // content = "原始文本内容" || 复数形式["原始文本内容","原始文本内容"....]
+ // 如果是数组说明要启用复数机制,需要根据插值变量中的某个变量来判断复数形式
+ if(Array.isArray(content) && content.length>0){
+ // 如果存在复数命名变量,只取第一个复数变量
+ if(pluraValue!==null){ // 启用的是位置插值,pluraIndex=第一个数字变量的位置
+ content = getPluraMessage(content,pluraValue);
+ }else if(pluralVar.length>0){
+ content = getPluraMessage(content,parseInt(vars(pluralVar[0])));
+ }else { // 如果找不到复数变量,则使用第一个内容
+ content = content[0];
+ }
+ }
+
+ // 进行插值处理
+ if(vars.length==0){
+ return content
+ }else {
+ return replaceInterpolatedVars.call(scope,content,...vars)
+ }
+ }catch(e){
+ return content // 出错则返回原始文本
+ }
+}
+
+/**
+ * 多语言管理类
+ *
+ * 当导入编译后的多语言文件时(import("./languages")),会自动生成全局实例VoerkaI18n
+ *
+ * VoerkaI18n.languages // 返回支持的语言列表
+ * VoerkaI18n.defaultLanguage // 默认语言
+ * VoerkaI18n.language // 当前语言
+ * VoerkaI18n.change(language) // 切换到新的语言
+ *
+ *
+ * VoerkaI18n.on("change",(language)=>{}) // 注册语言切换事件
+ * VoerkaI18n.off("change",(language)=>{})
+ *
+ * */
+ class I18nManager extends EventEmitter{
+ constructor(settings={}){
+ super();
+ if(I18nManager.instance!=null){
+ return I18nManager.instance;
+ }
+ I18nManager.instance = this;
+ this._settings = deepMerge(defaultLanguageSettings,settings);
+ this._scopes=[];
+ return I18nManager.instance;
+ }
+ get settings(){ return this._settings }
+ get scopes(){ return this._scopes }
+ // 当前激活语言
+ get activeLanguage(){ return this._settings.activeLanguage}
+ // 默认语言
+ get defaultLanguage(){ return this._settings.defaultLanguage}
+ // 支持的语言列表
+ get languages(){ return this._settings.languages}
+ // 内置格式化器
+ get formatters(){ return inlineFormatters }
+ /**
+ * 切换语言
+ */
+ async change(value){
+ value=value.trim();
+ if(this.languages.findIndex(lang=>lang.name === value)!==-1){
+ // 通知所有作用域刷新到对应的语言包
+ await this._refreshScopes(value);
+ this._settings.activeLanguage = value;
+ /// 触发语言切换事件
+ await this.emit(value);
+ }else {
+ throw new Error("Not supported language:"+value)
+ }
+ }
+ /**
+ * 当切换语言时调用此方法来加载更新语言包
+ * @param {*} newLanguage
+ */
+ async _refreshScopes(newLanguage){
+ // 并发执行所有作用域语言包的加载
+ try{
+ const scopeRefreshers = this._scopes.map(scope=>{
+ return scope.refresh(newLanguage)
+ });
+ if(Promise.allSettled){
+ await Promise.allSettled(scopeRefreshers);
+ }else {
+ await Promise.all(scopeRefreshers);
+ }
+ }catch(e){
+ console.warn("Error while refreshing i18n scopes:",e.message);
+ }
+ }
+ /**
+ *
+ * 注册一个新的作用域
+ *
+ * 每一个库均对应一个作用域,每个作用域可以有多个语言包,且对应一个翻译函数
+ * 除了默认语言外,其他语言采用动态加载的方式
+ *
+ * @param {*} scope
+ */
+ async register(scope){
+ if(!(scope instanceof i18nScope)){
+ throw new TypeError("Scope must be an instance of I18nScope")
+ }
+ this._scopes.push(scope);
+ await scope.refresh(this.activeLanguage);
+ }
+ /**
+ * 注册全局格式化器
+ * 格式化器是一个简单的同步函数value=>{...},用来对输入进行格式化后返回结果
+ *
+ * registerFormatters(name,value=>{...}) // 适用于所有语言
+ * registerFormatters(name,value=>{...},{langauge:"zh"}) // 适用于cn语言
+ * registerFormatters(name,value=>{...},{langauge:"en"}) // 适用于en语言
+
+ * @param {*} formatters
+ */
+ registerFormatter(name,formatter,{language="*"}={}){
+ if(!typeof(formatter)==="function" || typeof(name)!=="string"){
+ throw new TypeError("Formatter must be a function")
+ }
+ if(DataTypes$1.includes(name)){
+ this.formatters[language].$types[name] = formatter;
+ }else {
+ this.formatters[language][name] = formatter;
+ }
+ }
+}
+
+var runtime ={
+ getInterpolatedVars,
+ replaceInterpolatedVars,
+ I18nManager,
+ translate,
+ i18nScope,
+ defaultLanguageSettings,
+ getDataTypeName,
+ isNumber,
+ isPlainObject
+};
+
+module.exports = runtime;
diff --git a/packages/runtime/dist/runtime.mjs b/packages/runtime/dist/runtime.mjs
new file mode 100644
index 0000000..87c3c36
--- /dev/null
+++ b/packages/runtime/dist/runtime.mjs
@@ -0,0 +1,936 @@
+/**
+ * 判断是否是JSON对象
+ * @param {*} obj
+ * @returns
+ */
+ function isPlainObject$1(obj){
+ if (typeof obj !== 'object' || obj === null) return false;
+ var proto = Object.getPrototypeOf(obj);
+ if (proto === null) return true;
+ var baseProto = proto;
+
+ while (Object.getPrototypeOf(baseProto) !== null) {
+ baseProto = Object.getPrototypeOf(baseProto);
+ }
+ return proto === baseProto;
+}
+
+function isNumber$1(value){
+ return !isNaN(parseInt(value))
+}
+
+/**
+ * 简单进行对象合并
+ *
+ * options={
+ * array:0 , // 数组合并策略,0-替换,1-合并,2-去重合并
+ * }
+ *
+ * @param {*} toObj
+ * @param {*} formObj
+ * @returns 合并后的对象
+ */
+function deepMerge$1(toObj,formObj,options={}){
+ let results = Object.assign({},toObj);
+ Object.entries(formObj).forEach(([key,value])=>{
+ if(key in results){
+ if(typeof value === "object" && value !== null){
+ if(Array.isArray(value)){
+ if(options.array === 0){
+ results[key] = value;
+ }else if(options.array === 1){
+ results[key] = [...results[key],...value];
+ }else if(options.array === 2){
+ results[key] = [...new Set([...results[key],...value])];
+ }
+ }else {
+ results[key] = deepMerge$1(results[key],value,options);
+ }
+ }else {
+ results[key] = value;
+ }
+ }else {
+ results[key] = value;
+ }
+ });
+ return results
+}
+
+
+/**
+ * 获取指定变量类型名称
+ * getDataTypeName(1) == Number
+ * getDataTypeName("") == String
+ * getDataTypeName(null) == Null
+ * getDataTypeName(undefined) == Undefined
+ * getDataTypeName(new Date()) == Date
+ * getDataTypeName(new Error()) == Error
+ *
+ * @param {*} v
+ * @returns
+ */
+ function getDataTypeName$1(v){
+ if (v === null) return 'Null'
+ if (v === undefined) return 'Undefined'
+ if(typeof(v)==="function") return "Function"
+ return v.constructor && v.constructor.name;
+}
+
+
+
+
+var utils ={
+ isPlainObject: isPlainObject$1,
+ isNumber: isNumber$1,
+ deepMerge: deepMerge$1,
+ getDataTypeName: getDataTypeName$1
+};
+
+/**
+*
+* 简单的事件触发器
+*
+*/
+
+var eventemitter = class EventEmitter{
+ constructor(){
+ this._callbacks = [];
+ }
+ on(callback){
+ if(this._callbacks.includes(callback)) return
+ this._callbacks.push(callback);
+ }
+ off(callback){
+ for(let i=0;icb(...args)));
+ }else {
+ await Promise.all(this._callbacks.map(cb=>cb(...args)));
+ }
+ }
+};
+
+var scope = class i18nScope {
+ constructor(options={},callback){
+ // 每个作用域都有一个唯一的id
+ this._id = options.id || (new Date().getTime().toString()+parseInt(Math.random()*1000));
+ this._languages = options.languages; // 当前作用域的语言列表
+ this._defaultLanguage = options.defaultLanguage || "zh"; // 默认语言名称
+ this._activeLanguage = options.activeLanguage; // 当前语言名称
+ this._default = options.default; // 默认语言包
+ this._messages = options.messages; // 当前语言包
+ this._idMap = options.idMap; // 消息id映射列表
+ this._formatters = options.formatters; // 当前作用域的格式化函数列表
+ this._loaders = options.loaders; // 异步加载语言文件的函数列表
+ this._global = null; // 引用全局VoerkaI18n配置,注册后自动引用
+ // 主要用来缓存格式化器的引用,当使用格式化器时可以直接引用,避免检索
+ this.$cache={
+ activeLanguage : null,
+ typedFormatters: {},
+ formatters : {},
+ };
+ // 如果不存在全局VoerkaI18n实例,说明当前Scope是唯一或第一个加载的作用域,
+ // 则使用当前作用域来初始化全局VoerkaI18n实例
+ if(!globalThis.VoerkaI18n){
+ const { I18nManager } = runtime;
+ globalThis.VoerkaI18n = new I18nManager({
+ defaultLanguage: this.defaultLanguage,
+ activeLanguage : this.activeLanguage,
+ languages: options.languages,
+ });
+ }
+ this.global = globalThis.VoerkaI18n;
+ // 正在加载语言包标识
+ this._loading=false;
+ // 在全局注册作用域
+ this.register(callback);
+ }
+ // 作用域
+ get id(){return this._id}
+ // 默认语言名称
+ get defaultLanguage(){return this._defaultLanguage}
+ // 默认语言名称
+ get activeLanguage(){return this._activeLanguage}
+ // 默认语言包
+ get default(){return this._default}
+ // 当前语言包
+ get messages(){return this._messages}
+ // 消息id映射列表
+ get idMap(){return this._idMap}
+ // 当前作用域的格式化函数列表
+ get formatters(){return this._formatters}
+ // 异步加载语言文件的函数列表
+ get loaders(){return this._loaders}
+ // 引用全局VoerkaI18n配置,注册后自动引用
+ get global(){return this._global}
+ set global(value){this._global = value;}
+ /**
+ * 在全局注册作用域
+ * @param {*} callback 当注册
+ */
+ register(callback){
+ if(!typeof(callback)==="function") callback = ()=>{};
+ this.global.register(this).then(callback).catch(callback);
+ }
+ registerFormatter(name,formatter,{language="*"}={}){
+ if(!typeof(formatter)==="function" || typeof(name)!=="string"){
+ throw new TypeError("Formatter must be a function")
+ }
+ if(DataTypes.includes(name)){
+ this.formatters[language].$types[name] = formatter;
+ }else {
+ this.formatters[language][name] = formatter;
+ }
+ }
+ /**
+ * 回退到默认语言
+ */
+ _fallback(){
+ this._messages = this._default;
+ this._activeLanguage = this.defaultLanguage;
+ }
+ /**
+ * 刷新当前语言包
+ * @param {*} newLanguage
+ */
+ async refresh(newLanguage){
+ this._loading = Promise.resolve();
+ if(!newLanguage) newLanguage = this.activeLanguage;
+ // 默认语言,默认语言采用静态加载方式,只需要简单的替换即可
+ if(newLanguage === this.defaultLanguage){
+ this._messages = this._default;
+ return
+ }
+ // 非默认语言需要异步加载语言包文件,加载器是一个异步函数
+ // 如果没有加载器,则无法加载语言包,因此回退到默认语言
+ const loader = this.loaders[newLanguage];
+ if(typeof(loader) === "function"){
+ try{
+ this._messages = (await loader()).default;
+ this._activeLanguage = newLanguage;
+ }catch(e){
+ console.warn(`Error while loading language <${newLanguage}> on i18nScope(${this.id}): ${e.message}`);
+ this._fallback();
+ }
+ }else {
+ this._fallback();
+ }
+ }
+ // 以下方法引用全局VoerkaI18n实例的方法
+ get on(){return this.global.on.bind(this.global)}
+ get off(){return this.global.off.bind(this.global)}
+ get offAll(){return this.global.offAll.bind(this.global)}
+ get change(){
+ return this.global.change.bind(this.global)
+ }
+};
+
+/**
+ * 内置的格式化器
+ *
+ */
+
+/**
+ * 字典格式化器
+ * 根据输入data的值,返回后续参数匹配的结果
+ * dict(data,,,,,,,...)
+ *
+ *
+ * dict(1,1,"one",2,"two",3,"three",4,"four") == "one"
+ * dict(2,1,"one",2,"two",3,"three",4,"four") == "two"
+ * dict(3,1,"one",2,"two",3,"three",4,"four") == "three"
+ * dict(4,1,"one",2,"two",3,"three",4,"four") == "four"
+ * // 无匹配时返回原始值
+ * dict(5,1,"one",2,"two",3,"three",4,"four") == 5
+ * // 无匹配时并且后续参数个数是奇数,则返回最后一个参数
+ * dict(5,1,"one",2,"two",3,"three",4,"four","more") == "more"
+ *
+ * 在翻译中使用
+ * I have { value | dict(1,"one",2,"two",3,"three",4,"four")} apples
+ *
+ * @param {*} value
+ * @param {...any} args
+ * @returns
+ */
+ function dict(value,...args){
+ for(let i=0;i0 && (args.length % 2!==0)) return args[args.length-1]
+ return value
+}
+
+var formatters = {
+ "*":{
+ $types:{
+ Date:(value)=>value.toLocaleString()
+ },
+ time:(value)=> value.toLocaleTimeString(),
+ shorttime:(value)=> value.toLocaleTimeString(),
+ date: (value)=> value.toLocaleDateString(),
+ dict, //字典格式化器
+ },
+ zh:{
+ $types:{
+ Date:(value)=> `${value.getFullYear()}年${value.getMonth()+1}月${value.getDate()}日 ${value.getHours()}点${value.getMinutes()}分${value.getSeconds()}秒`
+ },
+ shortime:(value)=> value.toLocaleTimeString(),
+ time:(value)=>`${value.getHours()}点${value.getMinutes()}分${value.getSeconds()}秒`,
+ date: (value)=> `${value.getFullYear()}年${value.getMonth()+1}月${value.getDate()}日`,
+ shortdate: (value)=> `${value.getFullYear()}-${value.getMonth()+1}-${value.getDate()}`,
+ currency:(value)=>`${value}元`,
+ },
+ en:{
+ currency:(value)=>{
+ return `$${value}`
+ }
+ }
+};
+
+const { getDataTypeName,isNumber,isPlainObject,deepMerge } = utils;
+const EventEmitter = eventemitter;
+const i18nScope = scope;
+let inlineFormatters = formatters; // 内置格式化器
+
+
+
+// 用来提取字符里面的插值变量参数 , 支持管道符 { var | formatter | formatter }
+// 不支持参数: let varWithPipeRegexp = /\{\s*(?\w+)?(?(\s*\|\s*\w*\s*)*)\s*\}/g
+
+// 支持参数: { var | formatter(x,x,..) | formatter }
+let varWithPipeRegexp = /\{\s*(?\w+)?(?(\s*\|\s*\w*(\(.*\)){0,1}\s*)*)\s*\}/g;
+
+/**
+ * 考虑到通过正则表达式进行插件的替换可能较慢,因此提供一个简单方法来过滤掉那些
+ * 不需要进行插值处理的字符串
+ * 原理很简单,就是判断一下是否同时具有{和}字符,如果有则认为可能有插值变量,如果没有则一定没有插件变量,则就不需要进行正则匹配
+ * 从而可以减少不要的正则匹配
+ * 注意:该方法只能快速判断一个字符串不包括插值变量
+ * @param {*} str
+ * @returns {boolean} true=可能包含插值变量,
+ */
+function hasInterpolation(str){
+ return str.includes("{") && str.includes("}")
+}
+const DataTypes$1 = ["String","Number","Boolean","Object","Array","Function","Error","Symbol","RegExp","Date","Null","Undefined","Set","Map","WeakSet","WeakMap"];
+
+
+/**
+ 通过正则表达式对原始文本内容进行解析匹配后得到的
+ formatters="| aaa(1,1) | bbb "
+
+ 需要统一解析为
+
+ [
+ [aaa,[1,1]], // [formatter'name,[args,...]]
+ [bbb,[]],
+ ]
+
+ formatters="| aaa(1,1,"dddd") | bbb "
+
+ 目前对参数采用简单的split(",")来解析,因为无法正确解析aaa(1,1,"dd,,dd")形式的参数
+ 在此场景下基本够用了,如果需要支持更复杂的参数解析,可以后续考虑使用正则表达式来解析
+
+ @returns [[,[,,...]]]
+ */
+function parseFormatters(formatters){
+ if(!formatters) return []
+ // 1. 先解析为 ["aaa()","bbb"]形式
+ let result = formatters.trim().substr(1).trim().split("|").map(r=>r.trim());
+
+ // 2. 解析格式化器参数
+ return result.map(formatter=>{
+ let firstIndex = formatter.indexOf("(");
+ let lastIndex = formatter.lastIndexOf(")");
+ if(firstIndex!==-1 && lastIndex!==-1){ // 带参数的格式化器
+ const argsContent = formatter.substr(firstIndex+1,lastIndex-firstIndex-1).trim();
+ let args = argsContent=="" ? [] : argsContent.split(",").map(arg=>{
+ arg = arg.trim();
+ if(!isNaN(parseInt(arg))){
+ return parseInt(arg) // 数字
+ }else if((arg.startsWith('\"') && arg.endsWith('\"')) || (arg.startsWith('\'') && arg.endsWith('\'')) ){
+ return arg.substr(1,arg.length-2) // 字符串
+ }else if(arg.toLowerCase()==="true" || arg.toLowerCase()==="false"){
+ return arg.toLowerCase()==="true" // 布尔值
+ }else if((arg.startsWith('{') && arg.endsWith('}')) || (arg.startsWith('[') && arg.endsWith(']'))){
+ try{
+ return JSON.parse(arg)
+ }catch(e){
+ return String(arg)
+ }
+ }else {
+ return String(arg)
+ }
+ });
+ return [formatter.substr(0,firstIndex),args]
+ }else {// 不带参数的格式化器
+ return [formatter,[]]
+ }
+ })
+}
+
+/**
+ * 提取字符串中的插值变量
+ * // [
+ // {
+ name:<变量名称>,formatters:[{name:<格式化器名称>,args:[<参数>,<参数>,....]]}],<匹配字符串>],
+ // ....
+ //
+ * @param {*} str
+ * @param {*} isFull =true 保留所有插值变量 =false 进行去重
+ * @returns {Array}
+ * [
+ * {
+ * name:"<变量名称>",
+ * formatters:[
+ * {name:"<格式化器名称>",args:[<参数>,<参数>,....]},
+ * {name:"<格式化器名称>",args:[<参数>,<参数>,....]},
+ * ],
+ * match:"<匹配字符串>"
+ * },
+ * ...
+ * ]
+ */
+function getInterpolatedVars(str){
+ let vars = [];
+ forEachInterpolatedVars(str,(varName,formatters,match)=>{
+ let varItem = {
+ name:varName,
+ formatters:formatters.map(([formatter,args])=>{
+ return {
+ name:formatter,
+ args:args
+ }
+ }),
+ match:match
+ };
+ if(vars.findIndex(varDef=>((varDef.name===varItem.name) && (varItem.formatters.toString() == varDef.formatters.toString())))===-1){
+ vars.push(varItem);
+ }
+ return ""
+ });
+ return vars
+}
+/**
+ * 遍历str中的所有插值变量传递给callback,将callback返回的结果替换到str中对应的位置
+ * @param {*} str
+ * @param {Function(<变量名称>,[formatters],match[0])} callback
+ * @returns 返回替换后的字符串
+ */
+function forEachInterpolatedVars(str,callback,options={}){
+ let result=str, match;
+ let opts = Object.assign({
+ replaceAll:true, // 是否替换所有插值变量,当使用命名插值时应置为true,当使用位置插值时应置为false
+ },options);
+ varWithPipeRegexp.lastIndex=0;
+ while ((match = varWithPipeRegexp.exec(result)) !== null) {
+ const varname = match.groups.varname || "";
+ // 解析格式化器和参数 = [,[,[,,...]]]
+ const formatters = parseFormatters(match.groups.formatters);
+ if(typeof(callback)==="function"){
+ try{
+ if(opts.replaceAll){
+ result=result.replaceAll(match[0],callback(varname,formatters,match[0]));
+ }else {
+ result=result.replace(match[0],callback(varname,formatters,match[0]));
+ }
+ }catch{// callback函数可能会抛出异常,如果抛出异常,则中断匹配过程
+ break
+ }
+ }
+ varWithPipeRegexp.lastIndex=0;
+ }
+ return result
+}
+
+function resetScopeCache(scope,activeLanguage=null){
+ scope.$cache = {activeLanguage,typedFormatters:{},formatters:{}};
+}
+/**
+ * 取得指定数据类型的默认格式化器
+ *
+ * 可以为每一个数据类型指定一个默认的格式化器,当传入插值变量时,
+ * 会自动调用该格式化器来对值进行格式化转换
+
+ const formatters = {
+ "*":{
+ $types:{...} // 在所有语言下只作用于特定数据类型的格式化器
+ }, // 在所有语言下生效的格式化器
+ zh:{
+ $types:{
+ [数据类型]:(value)=>{...},
+ },
+ [格式化器名称]:(value)=>{...},
+ [格式化器名称]:(value)=>{...},
+ [格式化器名称]:(value)=>{...},
+ },
+ }
+ * @param {*} scope
+ * @param {*} activeLanguage
+ * @param {*} dataType 数字类型
+ * @returns {Function} 格式化函数
+ */
+function getDataTypeDefaultFormatter(scope,activeLanguage,dataType){
+ if(!scope.$cache) resetScopeCache(scope);
+ if(scope.$cache.activeLanguage === activeLanguage) {
+ if(dataType in scope.$cache.typedFormatters) return scope.$cache.typedFormatters[dataType]
+ }else {// 当语言切换时清空缓存
+ resetScopeCache(scope,activeLanguage);
+ }
+
+ // 先在当前作用域中查找,再在全局查找
+ const targets = [scope.formatters,scope.global.formatters];
+ for(const target of targets){
+ if(!target) continue
+ // 优先在当前语言的$types中查找
+ if((activeLanguage in target) && isPlainObject(target[activeLanguage].$types)){
+ let formatters = target[activeLanguage].$types;
+ if(dataType in formatters && typeof(formatters[dataType])==="function"){
+ return scope.$cache.typedFormatters[dataType] = formatters[dataType]
+ }
+ }
+ // 在所有语言的$types中查找
+ if(("*" in target) && isPlainObject(target["*"].$types)){
+ let formatters = target["*"].$types;
+ if(dataType in formatters && typeof(formatters[dataType])==="function"){
+ return scope.$cache.typedFormatters[dataType] = formatters[dataType]
+ }
+ }
+ }
+}
+
+/**
+ * 获取指定名称的格式化器函数
+ * @param {*} scope
+ * @param {*} activeLanguage
+ * @param {*} name 格式化器名称
+ * @returns {Function} 格式化函数
+ */
+function getFormatter(scope,activeLanguage,name){
+ // 缓存格式化器引用,避免重复检索
+ if(!scope.$cache) resetScopeCache(scope);
+ if(scope.$cache.activeLanguage === activeLanguage) {
+ if(name in scope.$cache.formatters) return scope.$cache.formatters[name]
+ }else {// 当语言切换时清空缓存
+ resetScopeCache(scope,activeLanguage);
+ }
+ // 先在当前作用域中查找,再在全局查找
+ const targets = [scope.formatters,scope.global.formatters];
+ for(const target of targets){
+ // 优先在当前语言查找
+ if(activeLanguage in target){
+ let formatters = target[activeLanguage] || {};
+ if((name in formatters) && typeof(formatters[name])==="function") return scope.$cache.formatters[name] = formatters[name]
+ }
+ // 在所有语言的$types中查找
+ let formatters = target["*"] || {};
+ if((name in formatters) && typeof(formatters[name])==="function") return scope.$cache.formatters[name] = formatters[name]
+ }
+}
+
+/**
+ * 执行格式化器并返回结果
+ * @param {*} value
+ * @param {*} formatters 多个格式化器顺序执行,前一个输出作为下一个格式化器的输入
+ */
+function executeFormatter(value,formatters){
+ if(formatters.length===0) return value
+ let result = value;
+ try{
+ for(let formatter of formatters){
+ if(typeof(formatter) === "function") {
+ result = formatter(result);
+ }else {// 如果碰到无效的格式化器,则跳过过续的格式化器
+ return result
+ }
+ }
+ }catch(e){
+ console.error(`Error while execute i18n formatter for ${value}: ${e.message} ` );
+ }
+ return result
+}
+/**
+ * 将 [[格式化器名称,[参数,参数,...]],[格式化器名称,[参数,参数,...]]]格式化器转化为
+ *
+ *
+ *
+ * @param {*} scope
+ * @param {*} activeLanguage
+ * @param {*} formatters
+ */
+function buildFormatters(scope,activeLanguage,formatters){
+ let results = [];
+ for(let formatter of formatters){
+ if(formatter[0]){
+ const func = getFormatter(scope,activeLanguage,formatter[0]);
+ if(typeof(func)==="function"){
+ results.push((v)=>{
+ return func(v,...formatter[1])
+ });
+ }else {
+ // 格式化器无效或者没有定义时,查看当前值是否具有同名的原型方法,如果有则执行调用
+ // 比如padStart格式化器是String的原型方法,不需要配置就可以直接作为格式化器调用
+ results.push((v)=>{
+ if(typeof(v[formatter[0]])==="function"){
+ return v[formatter[0]].call(v,...formatter[1])
+ }else {
+ return v
+ }
+ });
+ }
+ }
+ }
+ return results
+}
+
+/**
+ * 将value经过格式化器处理后返回
+ * @param {*} scope
+ * @param {*} activeLanguage
+ * @param {*} formatters
+ * @param {*} value
+ * @returns
+ */
+function getFormattedValue(scope,activeLanguage,formatters,value){
+ // 1. 取得格式化器函数列表
+ const formatterFuncs = buildFormatters(scope,activeLanguage,formatters);
+ // 2. 查找每种数据类型默认格式化器,并添加到formatters最前面,默认数据类型格式化器优先级最高
+ const defaultFormatter = getDataTypeDefaultFormatter(scope,activeLanguage,getDataTypeName(value));
+ if(defaultFormatter){
+ formatterFuncs.splice(0,0,defaultFormatter);
+ }
+ // 3. 执行格式化器
+ value = executeFormatter(value,formatterFuncs);
+ return value
+}
+
+/**
+ * 字符串可以进行变量插值替换,
+ * replaceInterpolatedVars("<模板字符串>",{变量名称:变量值,变量名称:变量值,...})
+ * replaceInterpolatedVars("<模板字符串>",[变量值,变量值,...])
+ * replaceInterpolatedVars("<模板字符串>",变量值,变量值,...])
+ *
+- 当只有两个参数并且第2个参数是{}时,将第2个参数视为命名变量的字典
+ replaceInterpolatedVars("this is {a}+{b},{a:1,b:2}) --> this is 1+2
+- 当只有两个参数并且第2个参数是[]时,将第2个参数视为位置参数
+ replaceInterpolatedVars"this is {}+{}",[1,2]) --> this is 1+2
+- 普通位置参数替换
+ replaceInterpolatedVars("this is {a}+{b}",1,2) --> this is 1+2
+-
+this == scope == { formatters: {}, ... }
+* @param {*} template
+* @returns
+*/
+function replaceInterpolatedVars(template,...args) {
+ const scope = this;
+ // 当前激活语言
+ const activeLanguage = scope.global.activeLanguage;
+
+ // 没有变量插值则的返回原字符串
+ if(args.length===0 || !hasInterpolation(template)) return template
+
+ // ****************************变量插值****************************
+ if(args.length===1 && isPlainObject(args[0])){
+ // 读取模板字符串中的插值变量列表
+ // [[var1,[formatter,formatter,...],match],[var2,[formatter,formatter,...],match],...}
+ let varValues = args[0];
+ return forEachInterpolatedVars(template,(varname,formatters)=>{
+ let value = (varname in varValues) ? varValues[varname] : '';
+ return getFormattedValue(scope,activeLanguage,formatters,value)
+ })
+ }else {
+ // ****************************位置插值****************************
+ // 如果只有一个Array参数,则认为是位置变量列表,进行展开
+ const params=(args.length===1 && Array.isArray(args[0])) ? [...args[0]] : args;
+ if(params.length===0) return template // 没有变量则不需要进行插值处理,返回原字符串
+ let i = 0;
+ return forEachInterpolatedVars(template,(varname,formatters)=>{
+ if(params.length>i){
+ return getFormattedValue(scope,activeLanguage,formatters,params[i++])
+ }else {
+ throw new Error() // 抛出异常,停止插值处理
+ }
+ },{replaceAll:false})
+
+ }
+}
+
+// 默认语言配置
+const defaultLanguageSettings = {
+ defaultLanguage: "zh",
+ activeLanguage: "zh",
+ languages:[
+ {name:"zh",title:"中文",default:true},
+ {name:"en",title:"英文"}
+ ],
+ formatters:inlineFormatters
+};
+
+function isMessageId(content){
+ return parseInt(content)>0
+}
+/**
+ * 根据值的单数和复数形式,从messages中取得相应的消息
+ *
+ * @param {*} messages 复数形式的文本内容 = [<=0时的内容>,<=1时的内容>,<=2时的内容>,...]
+ * @param {*} value
+ */
+function getPluraMessage(messages,value){
+ try{
+ if(Array.isArray(messages)){
+ return messages.length > value ? messages[value] : messages[messages.length-1]
+ }else {
+ return messages
+ }
+ }catch{
+ return Array.isArray(messages) ? messages[0] : messages
+ }
+}
+function escape(str){
+ return str.replaceAll(/\\(?![trnbvf'"]{1})/g,"\\\\")
+ .replaceAll("\t","\\t")
+ .replaceAll("\n","\\n")
+ .replaceAll("\b","\\b")
+ .replaceAll("\r","\\r")
+ .replaceAll("\f","\\f")
+ .replaceAll("\'","\\'")
+ .replaceAll('\"','\\"')
+ .replaceAll('\v','\\v')
+}
+function unescape(str){
+ return str
+ .replaceAll("\\t","\t")
+ .replaceAll("\\n","\n")
+ .replaceAll("\\b","\b")
+ .replaceAll("\\r","\r")
+ .replaceAll("\\f","\f")
+ .replaceAll("\\'","\'")
+ .replaceAll('\\"','\"')
+ .replaceAll('\\v','\v')
+ .replaceAll(/\\\\(?![trnbvf'"]{1})/g,"\\")
+}
+/**
+ * 翻译函数
+ *
+* translate("要翻译的文本内容") 如果默认语言是中文,则不会进行翻译直接返回
+* translate("I am {} {}","man") == I am man 位置插值
+* translate("I am {p}",{p:"man"}) 字典插值
+* translate("total {$count} items", {$count:1}) //复数形式
+* translate("total {} {} {} items",a,b,c) // 位置变量插值
+ *
+ * this===scope 当前绑定的scope
+ *
+ */
+function translate(message) {
+ const scope = this;
+ const activeLanguage = scope.global.activeLanguage;
+ let content = message;
+ let vars=[]; // 插值变量列表
+ let pluralVars= []; // 复数变量
+ let pluraValue = null; // 复数值
+ if(!typeof(message)==="string") return message
+ try{
+ // 1. 预处理变量: 复数变量保存至pluralVars中 , 变量如果是Function则调用
+ if(arguments.length === 2 && isPlainObject(arguments[1])){
+ Object.entries(arguments[1]).forEach(([name,value])=>{
+ if(typeof(value)==="function"){
+ try{
+ vars[name] = value();
+ }catch(e){
+ vars[name] = value;
+ }
+ }
+ // 以$开头的视为复数变量
+ if(name.startsWith("$") && typeof(vars[name])==="number") pluralVars.push(name);
+ });
+ vars = [arguments[1]];
+ }else if(arguments.length >= 2){
+ vars = [...arguments].splice(1).map((arg,index)=>{
+ try{
+ arg = typeof(arg)==="function" ? arg() : arg;
+ // 位置参数中以第一个数值变量为复数变量
+ if(isNumber(arg)) pluraValue = parseInt(arg);
+ }catch(e){ }
+ return arg
+ });
+
+ }
+
+
+
+
+ // 3. 取得翻译文本模板字符串
+ if(activeLanguage === scope.defaultLanguage){
+ // 2.1 从默认语言中取得翻译文本模板字符串
+ // 如果当前语言就是默认语言,不需要查询加载,只需要做插值变换即可
+ // 当源文件运用了babel插件后会将原始文本内容转换为msgId
+ // 如果是msgId则从scope.default中读取,scope.default=默认语言包={:}
+ if(isMessageId(content)){
+ content = scope.default[content] || message;
+ }
+ }else {
+ // 2.2 从当前语言包中取得翻译文本模板字符串
+ // 如果没有启用babel插件将源文本转换为msgId,需要先将文本内容转换为msgId
+ // JSON.stringify在进行转换时会将\t\n\r转换为\\t\\n\\r,这样在进行匹配时就出错
+ let msgId = isMessageId(content) ? content : scope.idMap[escape(content)];
+ content = scope.messages[msgId] || content;
+ content = Array.isArray(content) ? content.map(v=>unescape(v)) : unescape(content);
+ }
+ // 2. 处理复数
+ // 经过上面的处理,content可能是字符串或者数组
+ // content = "原始文本内容" || 复数形式["原始文本内容","原始文本内容"....]
+ // 如果是数组说明要启用复数机制,需要根据插值变量中的某个变量来判断复数形式
+ if(Array.isArray(content) && content.length>0){
+ // 如果存在复数命名变量,只取第一个复数变量
+ if(pluraValue!==null){ // 启用的是位置插值,pluraIndex=第一个数字变量的位置
+ content = getPluraMessage(content,pluraValue);
+ }else if(pluralVar.length>0){
+ content = getPluraMessage(content,parseInt(vars(pluralVar[0])));
+ }else { // 如果找不到复数变量,则使用第一个内容
+ content = content[0];
+ }
+ }
+
+ // 进行插值处理
+ if(vars.length==0){
+ return content
+ }else {
+ return replaceInterpolatedVars.call(scope,content,...vars)
+ }
+ }catch(e){
+ return content // 出错则返回原始文本
+ }
+}
+
+/**
+ * 多语言管理类
+ *
+ * 当导入编译后的多语言文件时(import("./languages")),会自动生成全局实例VoerkaI18n
+ *
+ * VoerkaI18n.languages // 返回支持的语言列表
+ * VoerkaI18n.defaultLanguage // 默认语言
+ * VoerkaI18n.language // 当前语言
+ * VoerkaI18n.change(language) // 切换到新的语言
+ *
+ *
+ * VoerkaI18n.on("change",(language)=>{}) // 注册语言切换事件
+ * VoerkaI18n.off("change",(language)=>{})
+ *
+ * */
+ class I18nManager extends EventEmitter{
+ constructor(settings={}){
+ super();
+ if(I18nManager.instance!=null){
+ return I18nManager.instance;
+ }
+ I18nManager.instance = this;
+ this._settings = deepMerge(defaultLanguageSettings,settings);
+ this._scopes=[];
+ return I18nManager.instance;
+ }
+ get settings(){ return this._settings }
+ get scopes(){ return this._scopes }
+ // 当前激活语言
+ get activeLanguage(){ return this._settings.activeLanguage}
+ // 默认语言
+ get defaultLanguage(){ return this._settings.defaultLanguage}
+ // 支持的语言列表
+ get languages(){ return this._settings.languages}
+ // 内置格式化器
+ get formatters(){ return inlineFormatters }
+ /**
+ * 切换语言
+ */
+ async change(value){
+ value=value.trim();
+ if(this.languages.findIndex(lang=>lang.name === value)!==-1){
+ // 通知所有作用域刷新到对应的语言包
+ await this._refreshScopes(value);
+ this._settings.activeLanguage = value;
+ /// 触发语言切换事件
+ await this.emit(value);
+ }else {
+ throw new Error("Not supported language:"+value)
+ }
+ }
+ /**
+ * 当切换语言时调用此方法来加载更新语言包
+ * @param {*} newLanguage
+ */
+ async _refreshScopes(newLanguage){
+ // 并发执行所有作用域语言包的加载
+ try{
+ const scopeRefreshers = this._scopes.map(scope=>{
+ return scope.refresh(newLanguage)
+ });
+ if(Promise.allSettled){
+ await Promise.allSettled(scopeRefreshers);
+ }else {
+ await Promise.all(scopeRefreshers);
+ }
+ }catch(e){
+ console.warn("Error while refreshing i18n scopes:",e.message);
+ }
+ }
+ /**
+ *
+ * 注册一个新的作用域
+ *
+ * 每一个库均对应一个作用域,每个作用域可以有多个语言包,且对应一个翻译函数
+ * 除了默认语言外,其他语言采用动态加载的方式
+ *
+ * @param {*} scope
+ */
+ async register(scope){
+ if(!(scope instanceof i18nScope)){
+ throw new TypeError("Scope must be an instance of I18nScope")
+ }
+ this._scopes.push(scope);
+ await scope.refresh(this.activeLanguage);
+ }
+ /**
+ * 注册全局格式化器
+ * 格式化器是一个简单的同步函数value=>{...},用来对输入进行格式化后返回结果
+ *
+ * registerFormatters(name,value=>{...}) // 适用于所有语言
+ * registerFormatters(name,value=>{...},{langauge:"zh"}) // 适用于cn语言
+ * registerFormatters(name,value=>{...},{langauge:"en"}) // 适用于en语言
+
+ * @param {*} formatters
+ */
+ registerFormatter(name,formatter,{language="*"}={}){
+ if(!typeof(formatter)==="function" || typeof(name)!=="string"){
+ throw new TypeError("Formatter must be a function")
+ }
+ if(DataTypes$1.includes(name)){
+ this.formatters[language].$types[name] = formatter;
+ }else {
+ this.formatters[language][name] = formatter;
+ }
+ }
+}
+
+var runtime ={
+ getInterpolatedVars,
+ replaceInterpolatedVars,
+ I18nManager,
+ translate,
+ i18nScope,
+ defaultLanguageSettings,
+ getDataTypeName,
+ isNumber,
+ isPlainObject
+};
+
+export { runtime as default };
diff --git a/packages/runtime/index.js b/packages/runtime/index.js
index f877649..273d5ec 100644
--- a/packages/runtime/index.js
+++ b/packages/runtime/index.js
@@ -655,7 +655,7 @@ module.exports ={
getInterpolatedVars,
replaceInterpolatedVars,
I18nManager,
- translate
+ translate,
i18nScope,
defaultLanguageSettings,
getDataTypeName,
diff --git a/packages/runtime/package.json b/packages/runtime/package.json
index eb01eb0..3c7abcf 100644
--- a/packages/runtime/package.json
+++ b/packages/runtime/package.json
@@ -1,6 +1,6 @@
{
"name": "@voerkai18n/runtime",
- "version": "1.0.16",
+ "version": "1.0.17",
"description": "Voerkai18n Runtime",
"main": "./dist/index.cjs",
"module": "dist/index.esm.js",
@@ -35,5 +35,5 @@
"rollup-plugin-terser": "^7.0.2",
"@voerkai18n/autopublish": "workspace:^1.0.2"
},
- "lastPublish": "2022-04-07T19:14:01+08:00"
+ "lastPublish": "2022-04-11T17:25:01+08:00"
}
\ No newline at end of file
diff --git a/readme.md b/readme.md
index 3ac6138..857a576 100644
--- a/readme.md
+++ b/readme.md
@@ -1,1622 +1,11 @@
[](https://gitee.com/zhangfisher/voerka-i18n/stargazers)
-# 前言
-基于`javascript`的国际化方案很多,比较有名的有`fbt`、`i18next`、`react-i18next`、`vue-i18n`、`react-intl`等等,每一种解决方案均有大量的用户。为什么还要再造一个轮子?好吧,再造轮子的理由不外乎不满足于现有方案,总想着现有方案的种种不足之处,然后就撸起袖子想造一个轮子,也不想想自己什么水平。
+适用于`Javascript/Vue/React/ReactNative`的国际化解决方案
-哪么到底是对现有解决方案有什么不满?最主要有三点:
-- 大部份均为要翻译的文本信息指定一个`key`,然后在源码文件中使用形如`$t("message.login")`之类的方式,然后在翻译时将之转换成最终的文本信息。此方式最大的问题是,在源码中必须人为地指定每一个`key`,在中文语境中,想为每一句中文均配套想一句符合语义的`英文key`是比较麻烦的,也很不直观不符合直觉。我希望在源文件中就直接使用中文,如`t("中华人民共和国万岁")`,然后国际化框架应该能自动处理后续的一系列麻烦。
+[中文文档]()
+[English]() -- 待翻译
-- 要能够比较友好地支持多库多包`monorepo`场景下的国际化协作,当主程序切换语言时,其他包或库也可以自动切换,并且在开发上每个包或库均可以独立地进行开发,集成到主程序时能无缝集成。这点在现有方案上没有找到比较理想的解决方案。
-- 大部份国际化框架均将中文视为二等公民,大部份情况下您应该采用英文作为第一语言,虽然这不是太大的问题,但是既然要再造一个轮子,为什么不将中文提升到一等公民呢。
-
-
- 基于此就开始造出`VoerkaI18n`这个**全新的国际化多语言解决方案**,主要特性包括:
-
-
-
-- 全面工程化解决方案,提供初始化、提取文本、自动翻译、编译等工具链支持。
-
-- 符合直觉,不需要手动定义文本`Key`映射。
-
-- 强大的插值变量`格式化器`机制,可以扩展出强大的多语言特性。
-
-- 支持`babel`插件自动导入`t`翻译函数。
-
-- 支持`nodejs`、浏览器(`vue`/`react`)前端环境。
-
-- 采用`工具链`与`运行时`分开设计,发布时只需要集成很小的运行时。
-
-- 高度可扩展的`复数`、`货币`、`数字`等常用的多语言处理机制。
-
-- 翻译过程内,提取文本可以自动进行同步,并保留已翻译的内容。
-
-- 可以随时添加支持的语言
-
-- 支持调用在线自动翻译对提取文本进行翻译。
-
-
-
-# 安装
-
-`VoerkaI18n`国际化框架是一个开源多包工程,主要由以下几个包组成:
-
-- **@voerkai18/cli**
-
- 包含文本提取/编译等命令行工具,一般应该安装到全局。
-
- ```javascript
- npm install --g @voerkai18/cli
- yarn global add @voerkai18/cli
- pnpm add -g @voerkai18/cli
- ```
-
-- **@voerkai18/runtime**
-
- **可选的**,运行时,`@voerkai18/cli`的依赖。大部分情况下不需要手动安装,一般仅在开发库项目时采用独立的运行时依赖。
-
- ```javascript
- npm install --save @voerkai18/runtime
- yarn add @voerkai18/runtime
- pnpm add @voerkai18/runtime
- ```
-
-- **@voerkai18/formatters**
-
- **可选的**,一些额外的格式化器,可以按需进行安装到`dependencies`中,用来扩展翻译时对插值变量的额外处理。
-
-- **@voerkai18/babel**
-
- 可选的`babel`插件,用来实现自动导入翻译函数和翻译文本映射自动替换。
-
-- **@voerkai18/vue**
-
- 可选的`vue`插件,用来为Vue应用提供语言动态切换功能。
-
-- **@voerkai18/vite**
-
- 可选的`vite`插件,用来为`vite`应用提供自动导入翻译函数和翻译文本映射自动替换。
-
-
-# 快速入门
-
-本节以标准的`Nodejs`应用程序为例,简要介绍`VoerkaI18n`国际化框架的基本使用。其他`vue`或`react`应用的使用也基本相同。
-
-```shell
-myapp
- |--package.json
- |--index.js
-```
-
-在本项目的所有支持的源码文件中均可以使用`t`函数对要翻译的文本进行包装,简单而粗暴。
-
-```javascript
-// index.js
-console.log(t("中华人民共和国万岁"))
-console.log(t("中华人民共和国成立于{}",1949))
-```
-
-`t`翻译函数是从`myapp/languages/index.js`文件导出的翻译函数,但是现在`myapp/languages`还不存在,后续会使用工具自动生成。`voerkai18n`后续会使用正则表达式对提取要翻译的文本。
-
-## 第一步:安装命令行工具
-
-```shell
-> npm install -g @voerkai18n/cli
-> yarn global add @voerkai18n/cli
->pnpm add -g @voerkai18/cli
-```
-
-## 第二步:初始化工程
-
-在工程目录中运行`voerkai18n init`命令进行初始化。
-
-```javascript
-> voerkai18n init
-```
-
-上述命令会在当前工程目录下创建`languages/settings.json`文件。如果您的源代码在`src`子文件夹中,则会创建在`src/languages/settings.json`
-
-`settings.json`内容如下:
-
-```json
-{
- "languages": [
- {
- "name": "zh",
- "title": "zh"
- },
- {
- "name": "en",
- "title": "en"
- }
- ],
- "defaultLanguage": "zh",
- "activeLanguage": "zh",
- "namespaces": {}
-}
-```
-
-上述命令代表了:
-
-- 本项目拟支持`中文`和`英文`两种语言。
-- 默认语言是`中文`(即在源代码中直接使用中文)
-- 激活语言是`中文`
-
-**注意:**
-
-- `voerkai18n init`是可选的,`voerkai18n extract`也可以实现相同的功能。
-- 一般情况下,您可以手工修改`settings.json`,如定义名称空间。
-
-## 第三步:提取文本
-
-接下来我们使用`voerkai18n extract`命令来自动扫描工程源码文件中的需要的翻译的文本信息。
-
-```shell
-myapp>voerkai18n extract
-```
-
-执行`voerkai18n extract`命令后,就会在`myapp/languages`通过生成`translates/default.json`、`settings.json`等相关文件。
-
-- **translates/default.json** : 该文件就是需要进行翻译的文本信息。
-
-- **settings.json**: 语言环境的基本配置信息,可以进行修改。
-
-最后文件结构如下:
-
-```shell
-myapp
- |-- languages
- |-- settings.json // 语言配置文件
- |-- translates // 此文件夹是所有需要翻译的内容
- |-- default.json // 默认名称空间内容
- |-- package.json
- |-- index.js
-
-```
-
-**如果略过第一步中的`voerkai18n init`,也可以使用以下命令来为创建和更新`settinbgs.json`**
-
-```javascript
-myapp>voerkai18n extract -D -lngs zh en de jp -d zh -a zh
-```
-
-以上命令代表:
-
-- 扫描当前文件夹下所有源码文件,默认是`js`、`jsx`、`html`、`vue`文件类型。
-- 计划支持`zh`、`en`、`de`、`jp`四种语言
-- 默认语言是中文。(指在源码文件中我们直接使用中文即可)
-- 激活语言是中文(即默认切换到中文)
-- `-D`代表显示扫描调试信息
-
-## 第四步:翻译文本
-
-接下来就可以分别对`language/translates`文件夹下的所有`JSON`文件进行翻译了。每个`JSON`文件大概如下:
-
-```json
-{
- "中华人民共和国万岁":{
- "en":"<在此编写对应的英文翻译内容>",
- "de":"<在此编写对应的德文翻译内容>"
- "jp":"<在此编写对应的日文翻译内容>",
- "$files":["index.js"] // 记录了该信息是从哪几个文件中提取的
- },
- "中华人民共和国成立于{}":{
- "en":"<在此编写对应的英文翻译内容>",
- "de":"<在此编写对应的德文翻译内容>"
- "jp":"<在此编写对应的日文翻译内容>",
- "$files":["index.js"]
- }
-}
-```
-
-我们只需要修改该文件翻译对应的语言即可。
-
-**重点:如果翻译期间对源文件进行了修改,则只需要重新执行一下`voerkai18n extract`命令,该命令会进行以下操作:**
-
-- 如果文本内容在源代码中已经删除了,则会自动从翻译清单中删除。
-- 如果文本内容在源代码中已修改了,则会视为新增加的内容。
-- 如果文本内容已经翻译了一部份了,则会保留已翻译的内容。
-
-因此,反复执行`voerkai18n extract`命令是安全的,不会导致进行了一半的翻译内容丢失,可以放心执行。
-
-大部分国际化解决方案至此就需要交给人工进行翻译了,但是`voerkai18n`除了手动翻译外,通过`voerkai18n translate`命令来实现**调用在线翻译服务**进行自动翻译。
-
-```javascript
->voerkai18n translate --provider baidu --appkey <在百度翻译上申请的密钥> --appid <在百度翻译上申请的appid>
-```
-
- 在项目文件夹下执行上面的语句,将会自动调用百度的在线翻译API进行翻译,以现在的翻译水平而言,您只需要进行少量的微调即可。关于`voerkai18n translate`命令的使用请查阅后续介绍。
-
-## 第五步:编译语言包
-
-当我们完成`myapp/languages/translates`下的所有`JSON语言文件`的翻译后(如果配置了名称空间后,每一个名称空间会对应生成一个文件,详见后续`名称空间`介绍),接下来需要对翻译后的文件进行编译。
-
-```shell
-myapp> voerkai18n compile
-```
-
-`compile`命令根据`myapp/languages/translates/*.json`和`myapp/languages/settings.json`文件编译生成以下文件:
-
-```javascript
- |-- languages
- |-- settings.json // 语言配置文件
- |-- idMap.js // 文本信息id映射表
- |-- runtime.js // 运行时源码
- |-- index.js // 包含该应用作用域下的翻译函数等
- |-- zh.js // 语言包
- |-- en.js
- |-- jp.js
- |-- de.js
- |-- translates // 此文件夹包含了所有需要翻译的内容
- |-- default.json
- |-- package.json
- |-- index.js
-
-```
-
-## 第六步:导入翻译函数
-
-第一步中我们在源文件中直接使用了`t`翻译函数包装要翻译的文本信息,该`t`翻译函数就是在编译环节自动生成并声明在`myapp/languages/index.js`中的。
-
-```javascript
-import { t } from "./languages"
-```
-
-因此,我们需要在需要进行翻译时导入该函数即可。
-
-但是如果源码文件很多,重次重复导入`t`函数也是比较麻烦的,所以我们也提供了一个`babel/vite`等插件来自动导入`t`函数。
-
-## 第六步:切换语言
-
-当需要切换语言时,可以通过调用`change`方法来切换语言。
-
-```javascript
-import { i18nScope } from "./languages"
-
-// 切换到英文
-await i18nScope.change("en")
-// VoerkaI18n是一个全局单例,可以直接访问
-await VoerkaI18n.change("en")
-```
-
-`i18nScope.change`与`VoerkaI18n.change`两者是等价的。
-
-一般可能也需要在语言切换后进行界面更新渲染,可以订阅事件来响应语言切换。
-
-```javascript
-import { i18nScope } from "./languages"
-
-// 切换到英文
-i18nScope.on((newLanguage)=>{
- ...
-})
-//
-VoerkaI18n.on((newLanguage)=>{
- ...
-})
-```
-
-# 指南
-
-## 翻译函数
-
-默认提供翻译函数`t`用来进行翻译。一般情况下,`t`函数在执行`voerkai18n compile`命令生成在工程目录下的`languages`文件夹中。
-```javascript
-
-// 从当前语言包文件夹index.js中导入翻译函数
-import { t } from "/languages"
-
-// 不含插值变量
-t("中华人民共和国")
-
-// 位置插值变量
-t("中华人民共和国{}","万岁")
-t("中华人民共和国成立于{}年,首都{}",1949,"北京")
-
-// 当仅有两个参数且第2个参数是[]类型时,自动展开第一个参数进行位置插值
-t("中华人民共和国成立于{year}年,首都{capital}",[1949,"北京"])
-
-// 当仅有两个参数且第2个参数是{}类型时,启用字典插值变量
-t("中华人民共和国成立于{year}年,首都{capital}",{year:1949,capital:"北京"})
-
-// 插值变量可以是同步函数,在进行插值时自动调用。
-t("中华人民共和国成立于{year}年,首都{capital}",()=>1949,"北京")
-
-// 对插值变量启用格式化器
-t("中华人民共和国成立于{birthday | year}年",{birthday:new Date()})
-
-```
-
-**注意:**
-
-- `voerkai18n`使用正则表达式来提取要翻译的内容,因此`t()`可以使用在任意地方。
-
-## 插值变量
-
-`voerkai18n`的`t`函数支持使用**插值变量**,用来传入一个可变内容。
-
-插值变量有`命名插值变量`和`位置插值变量`。
-
-### **命名插值变量**
-
-可以在t函数中使用`{变量名称}`表示一个命名插值变量。
-
-```javascript
-t("我姓名叫{name},我今年{age}岁",{name:"tom",age:12})
-// 如果值是函数会自动调用
-t("我姓名叫{name},我今年{age}岁",{name:"tom",age:()=>12})
-```
-
-仅当`t`函数仅有两个参数且第2个参数是`{}`类型时,启用字典插值变量,翻译时会自动进行插值。
-
-### 位置插值变量
-
-可以在t函数中使用一个空的`{}`表示一个位置插值变量。
-
-```javascript
-t("我姓名叫{},我今年{}岁","tom",12)
-// 如果值是函数会自动调用
-t("我姓名叫{},我今年{}岁","tom",()=>12})
-// 如果只有两个参数,且第2个参数是一个数组,会自动展开
-t("我姓名叫{},我今年{}岁",["tom",12])
-//如果第2个参数不是{}时就启用位置插值。
-t("我姓名叫{name},我今年{age}岁","tom",()=>12)
-```
-
-
-## 插值变量格式化
-
-`voerka-i18n`支持强大的插值变量格式化机制,可以在插值变量中使用`{变量名称 | 格式化器名称 | 格式化器名称(...参数) | ... }`类似管道操作符的语法,将上一个输出作为下一个输入,从而实现对变量值的转换。此机制是`voerka-i18n`实现复数、货币、数字等多语言支持的基础。
-
-我们假设定义以下格式化器(如果定义格式化器,详见后续)来进行示例。
-
-- **UpperCase**:将字符转换为大写
-- **division**:对数字按每n位一个逗号分割,支持一个可选参数分割位数,如`division(123456)===123,456`,`division(123456,4)===12,3456`
-- **mr** : 自动添加一个先生称呼
-
-```javascript
-// My name is TOM
-t("My name is { name | UpperCase }",{name:"tom"})
-
-// 我国2021年的GDP是¥14,722,730,697,890
-t("我国2021年的GDP是¥{ gdp | division}",{gdp:14722730697890})
-
-// 支持为格式化器提供参数,按4位一逗号分割
-// 我国2021年的GDP是¥14,7227,3069,7890
-t("我国2021年的GDP是¥{ gdp | division(4)}",{gdp:14722730697890})
-
-// 支持连续使用多个格式化器
-// My name is Mr.TOM
-t("My name is { name | UpperCase | mr }",{name:"tom"})
-
-
-```
-
-每个格式化器本质上是一个`(value)=>{...}`的函数,并且能**将上一个格式化器的输出作为下一个格式化器的输入**,格式化器具有如下特性:
-
-- **无参数格式化器**
-
- 使用无参数格式化器时只需传入名称即可。例如:`My name is { name | UpperCase }`
-
-- **有参数格式化器**
-
- 格式化器支持传入参数,如`{ gdp | division(4)}`、`{ date | format('yyyy/MM/DD')}`
-
- 特别需要注意的是,格式化器的参数只能支持简单的类型的参数,如`数字`、`布尔型`、`字符串`。
-
- **不支持数组、对象和函数参数,也不支持复杂的表达式参数。**
-
-- **支持连续使用多个格式化器**
-
- 就如您预期的一样,**将上一个格式化器的输出作为下一个格式化器的输入**。
-
- `{data | f1 | f2 | f3(1)}`等效于` f3(f2(f1(data)),1)`
-
-## 日期时间
-
-`@voerkai18n/runtime`内置了对日期时间进行处理的格式化器,可以直接使用,不需要额外的安装。
-
-```javascript
-// 切换到中文
-t("现在是{d | date}",new Date()) // == 现在是2022年3月12日
-t("现在是{d | time}",new Date()) // == 现在是18点28分12秒
-t("现在是{d | shorttime}",new Date()) // == 现在是18:28:12
-t("现在是{}",new Date()) // == 现在是2022年3月12日 18点28分12秒
-
-// 切换到英文
-t("现在是{d | date}",new Date()) // == Now is 2022/3/12
-t("现在是{d | time}",new Date()) // == Now is 18:28:12
-t("现在是{}",new Date()) // == Now is 2022/3/20 19:17:24'
-```
-## 复数
-
-当翻译文本内容是一个`数组`时启用复数处理机制。即在`langauges/tranclates/*.json`中的文本翻译项是一个数据。
-
-### 启用复数处理机制
-假设在`index.html`文件中具有一个翻译内容
-```javascript
- t("我{}一辆车")
-```
-经过`extract`命令提取为翻译文件后,如下:
-```json
-// languages/translates/default.json
-{
- "我有{}辆车":{
- "en":"",
- "de":"...."
- }
-}
-```
-现在我们要求引入复数处理机制,为不同数量采用不同的翻译,只需要将上述翻译文本更改为数组形式。
-```json
-{
- "我有{}辆车":{
- "en":["I don't have car","I have a car","I have two cars","I have {} cars"],
- "en":["I don't have car","I have a car","I have {} cars"],
- "en":["I don't have car","I have {} cars"],
- "de":"...."
- }
-}
-```
-上例中,只需要在翻译文件中将上述的`en:""`更改为`[<0对应的复数文本>,<1对应的复数文本>,...,]`形式代表启动复数机制.
-- 可以灵活地为每一个数字(`0、1、2、...、n`)对应的复数形式进行翻译
-- 数量数字大于数组长度,则总是取最后一个复数形式
-- 复数形式的文本同样支持位置插值和变量插值。
-
-
-### 对应的翻译函数
-
-
-启用复数处理机制后,在`t`函数根据变量值来决定采用单数还是复数,按如下规则进行处理。
-
-
-- **不存在插值变量且t函数的第2个参数是数字**
-
-```javascript
-
-t("我有一辆车",0) // == "I don't have a car"
-t("我有一辆车",1) // == "I have a car"
-t("我有一辆车",2) // == "I have two cars"
-t("我有一辆车",100) // == "I have 100 cars"
-```
-
-- **存在插值变量且t函数的第2个参数是数字**
-
-就中文而言,上述没有指定插值变量是比较别扭的,一般可以引入一个位置插值变量更加友好。
-```javascript
-
-t("我有{}辆车",0) // == "I don't have a car"
-t("我有{}辆车",1) // == "I have a car"
-t("我有{}辆车",2) // == "I have two cars"
-t("我有{}辆车",100) // == "I have 100 cars"
-```
-
-- **复数命名插值变量**
-
-当启用复数功能时,`t`函数需要知道根据哪个变量来决定采用何种复数形式。
-
-**当采用位置变量插值时,`t`函数取第一个数字类型参数作为位置插值复数。**
-
-
-```javascript
-t("{}有{}辆车","张三",0)
-```
-
-**当采用命名变量插值时,`t`函数约定当插值字典中存在以`$字符开头`的变量时,并且值是`数字`时,根据该变量来引用复数。**
-
-下例中,`t`函数根据`$count`值来处理复数。
-
-```javascript
-t("{name}有{$count}辆车",{name:"张三",$count:1})
-```
-
-- **示例**
-
-```javascript
-// languages/translates/default.json
-{
- "第{}章":{
- en:[
- "Chapter Zero","Chapter One", "Chapter Two", "Chapter Three","Chapter Four",
- "Chapter Five","Chapter Six","Chapter Seven","Chapter Eight","Chapter Nine",
- "Chapter {}"
- ],
- zh:["起始","第一章", "第二章", "第三章","第四章","第五章","第六章","第七章","第八章","第九章",“第{}章”]
- }
-}
-// 翻译函数
-t("第{}章",0) // == Chapter Zero
-t("第{}章",1) // == Chapter One
-t("第{}章",2) // == Chapter Two
-t("第{}章",3) // == Chapter Three
-t("第{}章",4) // == Chapter Four
-t("第{}章",5) // == Chapter Five
-t("第{}章",6) // == Chapter Six
-t("第{}章",7) // == Chapter Seven
-...
-// 超过取最后一项
-t("第{}章",100) // == Chapter 100
-```
-
-
-## 字典
-
-`voerkiai18n`内置一个`dict`格式化器,可以直接使用。
-
-```javascript
-// 假设网络状态取值:0=初始化,1=正在连接,2=已连接,3=正在断开.4=已断开,>4=未知
-
-t("当前状态:{status | dict(0,'初始化',1,'正在连接',2,'已连接',3,'正在断开',4,'已断开','未知') }",status)
-```
-
-## 货币
-
-
-
-## 名称空间
-
-`voerkai18n `的名称空间是为了解决当源码文件非常多时,通过名称空间对翻译内容进行分类翻译的。
-
-假设一个大型项目,其中源代码文件有上千个。默认情况下,`voerkai18n extract`会扫描所有源码文件将需要翻译的文本提取到`languages/translates/default.json`文件中。由于文件太多会导致以下问题:
-
-- 内容太多导致`default.json`文件太大,有利于管理
-- 有些翻译往往需要联系上下文才可以作出更准确的翻译,没有适当分类,不容易联系上下文。
-
-因此,引入`名称空间`就是目的就是为了解决此问题。
-
-配置名称空间,需要配置`languages/settings.json`文件。
-
-```javascript
-// 工程目录:d:/code/myapp
-// languages/settings.json
-module.exports = {
- namespaces:{
- //"名称":"相对路径",
- “routes”:“routes”,
- "auth":"core/auth",
- "admin":"views/admin"
- }
-}
-```
-
-以上例子代表:
-
-- 将`d:\code\myapp\routes`中扫描到的文本提取到`routes.json`中。
-- 将`d:\code\myapp\auth`中扫描到的文本提取到`auth.json`中。
-- 将`d:\code\myapp\views/admin`中扫描到的文本提取到`admin.json`中。
-
-最终在` languages/translates`中会包括:
-
-```shell
-languages
- |-- translates
- |-- default.json
- |-- routes.sjon
- |-- auth.json
- |-- admin.json
-```
-
-然后,`voerkai18n compile`在编译时会自动合并这些文件,后续就不再需要名称空间的概念了。
-
-`名称空间`仅仅是为了解决当翻译内容太多时的分类问题。
-
-
-
-## 切换语言
-
-可以通过全局单例或当前作用域实例切换语言。
-
-```javascript
-import { i18nScope } from "./languages"
-
-// 切换到英文
-await i18nScope.change("en")
-// VoerkaI18n是一个全局单例,可以直接访问
-VoerkaI18n.change("en")
-```
-
-侦听语言切换事件:
-
-```javascript
-import { i18nScope } from "./languages"
-
-// 切换到英文
-i18nScope.on((newLanguage)=>{
- ...
-})
-//
-VoerkaI18n.on((newLanguage)=>{
- ...
-})
-```
-
-## Vue应用
-
-在`Vue3`应用中引入`voerkai18n`来添加国际化应用需要由两个插件来简化应用。
-
-- **@voerkai18n/vue**
-
- **Vue插件**,在初始化`Vue`应用时引入,提供访问`当前语言`、`切换语言`、`自动更新`等功能。
-
-- **@voerkai18n/vite**
-
- **Vite插件**,在`vite.config.js`中配置,用来实现`自动文本映射`、`自动导入t函数`等功能。
-
-
-
-`@voerkai18n/vue`和`@voerkai18n/vite`两件插件相互配合,安装配置好这两个插件后,就可以在`Vue`文件使用多语言`t`函数。
-
-**重点:`t`函数会在使用`@voerkai18n/vite`插件后自动注入,因此在`Vue`文件中可以直接使用。**
-
-```Vue
-
-
-
-
-
-
-
-```
-
-**说明:**
-
-- 事实上,就算没有`@voerkai18n/vue`和`@voerkai18n/vite`两件插件相互配合,只需要导入`t`函数也就可以直接使用。这两个插件只是很简单的封装而已。
-- 如果要在应用中进行`语言动态切换`,则需要在应用中引入`@voerkai18n/vue`,请参阅`@voerkai18n/vue`插件使用说明。
-- `@voerkai18n/vite`的使用请参阅后续说明。
-
-## React应用
-
-
-
-# 高级特性
-
-## 运行时
-
-`@voerkai18n/runtime`是`voerkai18n`的运行时依赖,支持两种依赖方式。
-
-- **源码依赖**
-
- 默认情况下,运行`voerkai18n compile`时会在`languages`文件下生成运行时文件`runtime.js`,该文件被`languages/index.js`引入,里面是核心运行时`ES6`源代码(`@voerkai18n/runtime`源码),也就是在您的工程中是直接引入的运行时代码,因此就不需要额外安装`@voerkai18n/runtime`了。
-
- 此时,`@voerkai18n/runtime`源码就成为您工程是一部分。
-
-- **库依赖**
-
- 当运行`voerkai18n compile --no-inline-runtime`时,就不会生成运行时文件`runtime.js`,而是采用`import "@voerkai18n/runtime`的方式导入运行时,此时会自动/手动安装`@voerkai18n/runtime`到运行依赖中。
-
-
-
-**那么应该选择`源码依赖`还是`库依赖`呢?**
-
-问题的重点在于,在`monorepo`工程或者`开发库`时,`源码依赖`会导致存在重复的运行时源码。而采用`库依赖`,则不存在此问题。因此:
-
-- 普通应用采用`源码依赖`方式,运行`voerkai18n compile `来编译语言包。
-- `monorepo`工程或者`开发库`采用`库依赖`,`voerkai18n compile --no-inline-runtime`来编译语言包。
-
-
-
-**注意:**
-
-- `@voerkai18n/runtime`发布了`commonjs`和`esm`两个经过`babel/rollup`转码后的`ES5`版本。
-
-- 每次运行`voerkai18n compile`时均会重新生成`runtime.js`源码文件,为了确保最新的运行时,请及时更新`@voerkai18n/cli`
-
-- 当升级了`@voerkai18n/runtime`后,需要重新运行`voerkai18n compile`以重新生成`runtime.js`文件。
-
-
-
-## 文本映射
-
-虽然`VoerkaI18n`推荐采用`t("中华人民共和国万岁")`形式的符合直觉的翻译形式,而不是采用`t("xxxx.xxx")`这样不符合直觉的形式,但是为什么大部份的国际化方案均采用`t("xxxx.xxx")`形式?
-
-在我们的方案中,t("中华人民共和国万岁")形式相当于采用原始文本进行查表,语言名形式如下:
-
-```javascript
-// en.js
-{
- "中华人民共和国":"the people's Republic of China"
-}
-// jp.js
-{
- "中华人民共和国":"中華人民共和国"
-}
-```
-
-很显然,直接使用文本内容作为`key`,虽然符合直觉,但是会造成大量的冗余信息。因此,`voerkai18n compile`会将之编译成如下:
-
-```javascript
-//idMap.js
-{
- "1":"中华人民共和国万岁"
-}
-// en.js
-{
- "1":"Long live the people's Republic of China"
-}
-// jp.js
-{
- "2":"中華人民共和国"
-}
-```
-
-如此,就消除了在`en.js`、`jp.js`文件中的冗余。但是在源代码文件中还存在`t("中华人民共和国万岁")`,整个运行环境中存在两份副本,一份在源代码文件中,一份在`idMap.js`中。
-
-为了进一步减少重复内容,因此,我们需要将源代码文件中的`t("中华人民共和国万岁")`更改为`t("1")`,这样就能确保无重复冗余。但是,很显然,我们不可能手动来更改源代码文件,这就需要由`voerkai18n`提供的一个编译区插件来做这一件事了。
-
-以`babel-plugin-voerkai18n`插件为例,该插件同时还完成一份任务,就是自动读取`voerkai18n compile`生成的`idMap.js`文件,然后将`t("中华人民共和国万岁")`自动更改为`t("1")`,这样就完全消除了重复冗余信息。
-
-所以,在最终形成的代码中,实际上每一个t函数均是`t("1")`、`t("2")`、`t("3")`、`...`、`t("n")`的形式,最终代码还是采用了用`key`来进行转换,只不过这个过程是自动完成的而已。
-
-**注意:**
-
-- 如果没有启用`babel-plugin-voerkai18n`或`vite`等编译区插件,还是可以正常工作,但是会有一份默认语言的冗余信息存在。
-
-## 多库联动
-
-`voerkai18n `支持多个库国际化的联动和协作,即**当主程序切换语言时,所有引用依赖库也会跟随主程序进行语言切换**,整个切换过程对所有库开发都是透明的。
-
-
-
-当我们在开发一个应用或者库并`import "./languages"`时,在`langauges/index.js`进行了如下处理:
-
-- 创建一个`i18nScope`作用域实例
-- 检测当前应用环境下是否具有全局单例`VoerkaI18n`
- - 如果存在`VoerkaI18n`全局单例,则会将当前`i18nScope`实例注册到`VoerkaI18n.scopes`中
- - 如果不存在`VoerkaI18n`全局单例,则使用当前`i18nScope`实例的参数来创建一个`VoerkaI18n`全局单例。
-- 在每个应用与库中均可以使用`import { t } from ".langauges`导入本工程的`t`翻译函数,该`t`翻译函数被绑定当前`i18nScope`作用域实例,因此翻译时就只会使用到本工程的文本。这样就割离了不同工程和库之间的翻译。
-- 由于所有引用的`i18nScope`均注册到了全局单例`VoerkaI18n`,当切换语言时,`VoerkaI18n`会刷新切换所有注册的`i18nScope`,这样就实现了各个`i18nScope`即独立,又可以联动语言切换。
-
-## 自动导入翻译函数
-
-使用`voerkai18 compile`后,要进行翻译时需要从`./languages`导入`t`翻译函数。
-
-```javascript
-import { t } from "./languages"
-```
-
-由于默认情况下,`voerkai18 compile`命令会在当前工程的`/languages`文件夹下,这样我们为了导入`t`翻译函数不得不使用各种相对引用,这即容易出错,又不美观,如下:
-
-```javascript
-import { t } from "./languages"
-import { t } from "../languages"
-import { t } from "../../languages"
-import { t } from "../../../languages"
-```
-
-作为国际化解决方案,一般工程的大部份源码中均会使用到翻译函数,这种使用体验比较差。
-
-为此,我们提供了一个`babel`插件来自动完成翻译函数的自动引入,详见后续`bable`插件、`vite`插件等介绍。
-
-## 自定义格式化器
-
-当我们使用`voerkai18n compile`编译后,会生成`languages/formatters.js`文件,可以在该文件中自定义您自己的格式化器。
-
-`formatters.js`文件内容如下:
-
-```javascript
-module.exports = {
- // 在所有语言下生效的格式化器
- "*":{
- //[格式化名称]:(value)=>{...},
- //[格式化名称]:(value,arg)=>{...},
- },
- // 在所有语言下只作用于特定数据类型的格式化器
- $types:{
- // [数据类型名称]:(value)=>{...},
- // [数据类型名称]:(value)=>{...},
- },
- zh:{
- $types:{
- // 所有类型的默认格式化器
- "*":{
- },
- Date:{},
- Number:{},
- Boolean:{ },
- String:{},
- Array:{
-
- },
- Object:{
-
- }
- },
- [格式化名称]:(value)=>{.....},
- //.....
- },
- en:{
- $types:{
- // [数据类型名称]:(value)=>{...},
- },
- [格式化名称]:(value)=>{.....},
- //.....更多的格式化器.....
- }
-}
-```
-
-### 格式化器函数
-
-**每一个格式化器就是一个普通的同步函数**,不支持异步函数,格式化器函数可以支持无参数或有参数。
-
-- 无参数的格式化器:`(value)=>{....返回格式化的结果...}`。
-
-- 带参数的格式化器:`(value,arg1,...)=>{....返回格式化的结果...}`,其中`value`是上一个格式化器的输出结果。
-
-### 类型格式化器
-
-可以为每一种数据类型指定一个默认的格式化器,支持对`String`、`Date`、`Error`、`Object`、`Array`、`Boolean`、`Number`等数据类型的格式化。
-
-当插值变量传入时,如果有定义了对应的的类型格式化器,会默认调用该格式化器对数据进行转换。
-
-比如我们定义对`Boolean`类型格式化器,
-
-```javascript
-//formatters.js
-
-module.exports = {
- // 在所有语言下只作用于特定数据类型的格式化器
- $types:{
- Boolean:(value)=> value ? "ON" : "OFF"
- }
-}
-t("灯状态:{status}",true) // === 灯状态:ON
-t("灯状态:{status}",false) // === 灯状态:OFF
-```
-
-在上例中,如果我们想在不同的语言环境下,翻译为不同的显示文本,则可以为不同的语言指定类型格式化器
-
-```javascript
-//formatters.js
-module.exports = {
- zh:{
- $types:{
- Boolean:(value)=> value ? "开" : "关"
- }
- },
- en:{
- $types:{
- Boolean:(value)=> value ? "ON" : "OFF"
- }
- }
-}
-// 当切换到中文时
-t("灯状态:{status}",true) // === 灯状态:开
-t("灯状态:{status}",false) // === 灯状态:关
-// 当切换到英文时
-t("灯状态:{status}",true) // === 灯状态:ON
-t("灯状态:{status}",false) // === 灯状态:OFF
-```
-
-**说明:**
-
-- 完整的类型格式化器定义形式
-
- ```javascript
- module.exports = {
- "*":{
- $types:{...}
- },
- zh:{
- $types:{...}
- },
- en:{
- $types:{....}
- }
- }
- ```
-
- 在匹配应用格式化时会先在当前语言的`$types`中查找匹配的格式化器,如果找不到再上`*.$types`中查找。
-
-- `*.$types`代表当所有语言中均没有定义时才匹配的类型格式化。
-
-- 类型格式化器是**默认执行的,不需要指定名称**。
-
-- 当前作用域的格式化器优先于全局的格式化器。
-
-### 通用的格式化器
-
-类型格式化器只针对特定数据类型,并且会默认调用。而通用的格式化器需要使用`|`管道符进行显式调用。
-
-同样的,通用的格式化器定义在`languages/formatters.js`中。
-
-```javascript
-module.exports = {
- "*":{
- $types:{...},
- [格式化名称]:(value)=>{.....},
- },
- zh:{
- $types:{...},
- [格式化名称]:(value)=>{.....},
- },
- en:{
- $types:{....},
- [格式化名称]:(value)=>{.....},
- [格式化名称]:(value,arg)=>{.....},
- }
-}
-```
-
-每一个格式化器均需要指定一个名称,在进行插值替换时会优先依据当前语言来匹配查找格式化器,如果找不到,再到键名为`*`中查找。
-
-```javascript
-module.exports = {
- "*":{
- uppercase:(value)=>value
- },
- zh:{
- uppercase:(value)=>["一","二","三","四","五","六","七","八","九","十"][value-1]
- },
- en:{
- uppercase:(value)=>["One","Two","Three","Four","Five","Six","seven","eight","nine","ten"][value-1]
- },
- jp:{
-
- }
-}
-// 当切换到中文时
-t("{value | uppercase}",1) // == 一
-t("{value | uppercase}",2) // == 二
-t("{value | uppercase}",3) // == 三
-// 当切换到英文时
-t("{value | uppercase}",1) // == One
-t("{value | uppercase}",2) // == Two
-t("{value | uppercase}",3) // == Three
-// 当切换到日文时,由于在该语言下没有定义uppercase格式式,因此到*中查找
-t("{value | uppercase}",1) // == 1
-t("{value | uppercase}",2) // == 2
-t("{value | uppercase}",3) // == 3
-```
-
-### 作用域格式化器
-
-定义在`languages/formatters.js`里面的格式化器仅在当前工程生效,也就是仅在当前作用域生效。一般由应用开发者自行扩展。
-
-### 全局格式化器
-
-定义在`@voerkai18n/runtime`里面的格式化器则全局有效,在所有场合均可以使用,但是其优先级低于作用域内的同名格式化器。目前内置的格式化器有:
-
-| 名称 | | 说明 |
-| ---- | ---- | ---- |
-| | | |
-| | | |
-| | | |
-
-### 扩展格式化器
-
-除了可以在当前项目`languages/formatters.js`自定义格式化器和`@voerkai18n/runtime`里面的全局格式化器外,单列了`@voerkai18n/formatters`项目用来包含了更多的格式化器。
-
-作为开源项目,欢迎大家提交贡献更多的格式化器。
-
-## 语言包
-
-当使用`webpack`、`rollup`、`esbuild`进行项目打包时,默认语言包采用静态加载,会被打包进行源码中,而其他语言则采用异步打包方式。在`languages/index.js`中。
-
-```javascript
-const defaultMessages = require("./zh.js")
-const activeMessages = defaultMessages
-
-// 语言作用域
-const scope = new i18nScope({
- default: defaultMessages, // 默认语言包
- messages : activeMessages, // 当前语言包
- ....
- // 以下为每一种语言生成一个异步打包语句
- loaders:{
- "en" : ()=>import("./en.js")
- "de" : ()=>import("./de.js")
- "jp" : ()=>import("./jp.js")
- })
-```
-
-## 自动翻译
-
-内置的`voerkai18n translate`命令能调用在线翻译服务完成对提取的文本的自动翻译。
-
-目前支持访问百度在线API进行自动翻译。百度提供了免费的在线API,虽然只支持`QPS=1`,即每秒调用一次。但是`voerkai18n translate`命令会对要翻译的文本进行合并后再调用,因此大部分情况下,均足够使用了。
-
-执行`voerkai18n translate`命令后,将大大提高您国际化的效率。
-
-## 语言代码
-
-请参阅https://fanyi-api.baidu.com/doc/21。
-
-# 扩展工具
-
-## babel插件
-
-全局安装`@voerkai18n/babel`插件用来进行自动导入`t`函数和自动文本映射。
-
-```javascript
-> npm install -g @voerkai18n/babel
-> yarn global add @voerkai18n/babel
-> pnpm add -g @voerkai18n/babel
-```
-
-使用方法如下:
-
-- 在`babel.config.js`中配置插件
-
-```javascript
-const i18nPlugin = require("@voerkai18n/babel")
-module.expors = {
- plugins: [
- [
- i18nPlugin,
- {
- // 可选,指定语言文件存放的目录,即保存编译后的语言文件的文件夹
- // 可以指定相对路径,也可以指定绝对路径
- // location:"",
- autoImport:"#/languages"
- }
- ]
- ]
-}
-```
-
-这样,当在进行`babel`转码时,就会自动在`js`源码文件中导入`t`翻译函数。
-
-`babel-plugin-voerkai18n`插件支持以下参数:
-
-- **location**
-
- 配置`langauges`文件夹位置,默认会使用当前文件夹下的`languages`文件。
-
- 因此,如果你的`babel.config.js`在项目根文件夹,而`languages`文件夹位于`src/languages`,则可以将`location="src/languages"`,这样插件会自动从该文件夹读取需要的数据。
-
-- **autoImport**
-
- 用来配置导入的路径。比如 `autoImport="#/languages" `,则当在babel转码时,如果插件检测到t函数的存在并没有导入,就会自动在该源码中自动导入`import { t } from "#/languages"`
-
- 配置`autoImport`时需要注意的是,为了提供一致的导入路径,视所使用的打包工具或转码插件,如`webpack`、`rollup`等。比如使用`babel-plugin-module-resolver`
-
- ```javascript
- module.expors = {
- plugins: [
- [
- "module-resolver",
- {
- root:"./",
- alias:{
- "languages":"./src/languages"
- }
- }
- ]
- ]
- }
- ```
-
- 这样配置`autoImport="languages"`,则自动导入`import { t } from "languages"`。
-
- 如`webpack`、`rollup`等打包工具也有类似的插件可以实现别名等转换,其目的就是让`babel-plugin-voerkai18n`插件能自动导入固定路径,而不是各种复杂的相对路径。
-
-## Vue插件
-
-在`vue3`项目中可以安装`@voerkai18n/vue`来实现`枚举语言`、`语言切换`等功能。
-
-### **安装**
-
-将`@voerkai18n/vue`安装为运行时依赖
-
-```javascript
-npm install @voerkai18n/vue
-pnpm add @voerkai18n/vue
-yarn add @voerkai18n/vue
-```
-
-### 启用插件
-
-```javascript
- import { createApp } from 'vue'
- import Root from './App.vue'
- import i18nPlugin from '@voerkai18n/vue'
- import { i18nScope } from './languages'
- const app = createApp(Root)
- app.use(i18nPlugin,{ i18nScope }) // 重点,需要引入i18nScope
- app.mount('#app')
-```
-
-插件安装成功后,在当前`Vue App`实例上`provide`一个`i18n`响应式实例。
-
-### 注入`i18n`实例
-
-接下来在组件中按需注入`i18n`实例,可以用来访问当前的`激活语言`、`默认语言`、`切换语言`等。
-
-```javascript
-
-```
-
-声明`inject: ['i18n']`后在当前组件实例中就可以访问`this.i18n`,该实例是一个经过`reactive`封闭的响应式对象,其内容是:
-
-```javascript
-this.i18n = {
- activeLanguage, // 当前激活语言,可以通过直接赋值来切换语言
- defaultLanguage, // 默认语言名称
- languages // 支持的语言列表=[{name,title},...]
-}
-```
-
-### 应用示例
-
-注入`i18n`实例后就可以在此基础上实现`激活语言`、`默认语言`、`切换语言`等功能。
-
-```vue
-
-
- 当前语言:{{i18n.activeLanguage}}
- 默认语言:{{i18n.defaultLanguage}}
-
-
-
-
-```
-
-### 插件参数
-
-`@voerkai18n/vue`插件支持以下参数:
-
-```javascript
-import { i18nScope } from './languages'
-app.use(i18nPlugin,{
- i18nScope, // 重点,需要引入当前作用域的i18nScope
- forceUpdate:true // 当语言切换时是否强制重新渲染
-})
-
-```
-
-- 当`forceUpdate=true`时,`@voerkai18n/vue`插件在切换语言时会调用`app._instance.update()`对整个应用进行强制重新渲染。大部分情况下,切换语言时强制对整个应用进行重新渲染的行为是符合预期的。您也可以能够通过设`forceUpdate=false`来禁用强制重新渲染,此时,界面就不会马上看到语言的切换,需要您自己控制进行重新渲染。
-
-## Vite插件
-
-`@voerkai18n/babel`插件在`vite`应用中不能正常使用,需要使用`@voerkai18n/vite`插件来完成类似的功能,包括自动文本映射和自动导入`t`函数。
-
-### 安装
-
-`@voerkai18n/vite`只需要作为开发依赖安装即可。
-
-```javascript
-npm install --save-dev @voerkai18n/vite
-yarn add -D @voerkai18n/vite
-pnpm add -D @voerkai18n/vite
-```
-
-### 启用插件
-
-接下来在`vite.config.js`中配置启用`@voerkai18n/vite`插件。
-
-```javascript
-import { defineConfig } from 'vite'
-import vue from '@vitejs/plugin-vue'
-import Inspect from 'vite-plugin-inspect'// 可选的
-import Voerkai18nPlugin from "@voerkai18n/vite"
-export default defineConfig({
- plugins: [
- Inspect(), // 可选的
- Voerkai18nPlugin({debug:true}),
- vue()
- ]
-})
-
-```
-
-- ` vite-plugin-inspect`是开发`vite`插件时的调试插件,启用后就可以通过`localhost:3000/__inspect/ `查看Vue源码文件经过插件处理前后的内容,一般是Vite插件开发者使用。上例中安装后,就可以查看`Voerkai18nPlugin`对`Vue`文件干了什么事,可以加深理解,**正常使用不需要安装**。
-
-### 插件功能
-
-`@voerkai18n/vite`插件配置启用后,`vite`在进行`dev`或`build`时,就会在``自动注入`import { t } from "languages" `,同时会扫描源代码文件(包括`vue`,`js`等),根据`idMap.js`文件里面的文本映射表,将`t('"xxxx")`转换成`t("")`的形式。
-
-不同于`@voerkai18n/babel`插件,`@voerkai18n/vite`插件不需要配置`location`和`autoImport`参数,能正确地处理导入`languages`路径。
-
-### 插件参数
-
-`vite`插件支持以下参数:
-
-```javascript
-import Voerkai18nPlugin from "@voerkai18n/vite"
-export default defineConfig({
- plugins: [
- Inspect(), // 可选的
- Voerkai18nPlugin({
- location: "./", // 可选的,指定当前工程目录
- autoImport: true, // 是否自动导入t函数
- debug:false, // 是否输出调试信息,当=true时,在控制台输出转换匹配的文件清单
- patterns:[
- "!(?/src/languages`文件夹下。
-
-- `autoImport`:可选的,默认`true`,用来配置是否自动导入`t`函数。当vue文件没有指定导入时才会自动导入,并且根据当前vue文件的路径处理好导入位置。
-
-- `debug`:可选的,开启后会在控制台输出一些调试信息,对一般用户没有用。
-
-- `patterns`:可选的,一些正则表达式匹配规则,用来过滤匹配哪一些文件需要进行扫描和处理。默认的规则:
-
- ```javascript
- const patterns={
- "!(? npm install -g @voerkai18n/cli
-> yarn global add @voerkai18n/cli
-> pnpm add -g @voerkai18n/cli
-```
-
-然后就可以执行:
-
-```javascript
-> voerkai18n init
-> voerkai18n extract
-> voerkai18n compile
-```
-
-如果没有全局安装,则需要:
-
-```javascript
-> yarn voerkai18n init
-> yarn voerkai18n extract
-> yarn voerkai18n compile
----
-> pnpm voerkai18n init
-> pnpm voerkai18n extract
-> pnpm voerkai18n compile
-```
-
-## init
-
-用于在指定项目创建`voerkai18n`国际化配置文件。
-
-```shell
-> voerkai18n init --help
-初始化项目国际化配置
-Arguments:
- location 工程项目所在目录
-Options:
- -D, --debug 输出调试信息
- -r, --reset 重新生成当前项目的语言配置
- -lngs, --languages 支持的语言列表 (default: ["zh","en"])
- -d, --defaultLanguage 默认语言
- -a, --activeLanguage 激活语言
- -h, --help display help for command
-```
-
-**使用方法如下:**
-
-首先需要在工程文件下运行`voerkai18n init`命令对当前工程进行初始化。
-
-```javascript
-//- `lngs`参数用来指定拟支持的语言名称列表
-> voerkai18n init . -lngs zh en jp de -d zh
-```
-
-运行`voerkai18n init`命令后,会在当前工程中创建相应配置文件。
-
-```javascript
-myapp
- |-- languages
- |-- settings.json // 语言配置文件
- |-- package.json
- |-- index.js
-```
-
-`settings.json`文件很简单,主要是用来配置要支持的语言等基本信息。
-
-```javascript
-module.exports = {
- // 拟支持的语言列表
- "languages": [
- {
- "name": "zh",
- "title": "中文"
- },
- {
- "name": "en",
- "title": "英文"
- }
- ],
- // 默认语言,即准备在源码中写的语言,一般我们可以直接使用中文
- "defaultLanguage": "zh",
- // 激活语言,即默认要启用的语言,一般等于defaultLanguage
- "activeLanguage": "zh",
- // 翻译名称空间定义,详见后续介绍。
- "namespaces": {}
-}
-```
-
-**说明:**
-
-- 您也可以手动自行创建`languages/settings.json`文件。这样就不需运行`voerkai18n init`命令了。
-
-- 如果你的源码放在`src`文件夹,则`init`命令会自动在在`src`文件夹下创建`languages`文件夹。
-
-- `voerkai18n init`是可选的,直接使用`extract`时也会自动创建相应的文件。
-
-- `-m`参数用来指定生成的`settings.json`的模块类型:
- - 当`-m=auto`时,会自动读取前工程`package.json`中的`type`字段
- - 当`-m=esm`时,会生成`ESM`模块类型的`settings.json`。
- - 当`-m=cjs`时,会生成`commonjs`模块类型的`settings.json`。
-
-- `location`参数是可选的,如果没有指定则采用当前目录。
-
- 如果你想将`languages`安装在`src/languages`下,则可以指定`voerkai18n init ./src`
-
-## extract
-
-扫描提取当前项目中的所有源码,提取出所有需要翻译的文本内容并保存在到`<工程源码目录>/languages/translates/*.json`。
-
-```shell
-> voerkai18n extract --help
-扫描并提取所有待翻译的字符串到文件夹中
-
-Arguments:
- location 工程项目所在目录 (default: "./")
-
-Options:
- -D, --debug 输出调试信息
- -lngs, --languages 支持的语言
- -d, --defaultLanguage 默认语言
- -a, --activeLanguage 激活语言
- -ns, --namespaces 翻译名称空间
- -e, --exclude 排除要扫描的文件夹,多个用逗号分隔
- -u, --updateMode 本次提取内容与已存在内容的数据合并策略,默认取值sync=同步,overwrite=覆盖,merge=合并
- -f, --filetypes 要扫描的文件类型
- -h, --help display help for command
-```
-
-**说明:**
-
-- 启用`-d`参数时会输出提取过程,显示从哪些文件提取了几条信息。
-- 如果已手动创建或通过`init`命令创建了`languages/settings.json`文件,则可以不指定`-ns`,`-lngs`,`-d`,`-a`参数。`extract`会优先使用`languages/settings.json`文件中的参数来进行提取。
-- `-u`参数用来指定如何将提取的文本与现存的文件进行合并。因为在国际化流程中,我们经常面临源代码变更时需要更新翻译的问题。支持三种合并策略。
- - **sync**:同步(默认值),两者自动合并,并且会删除在源码文件中不存在的文本。如果某个翻译已经翻译了一半也会保留。此值适用于大部情况,推荐。
- - **overwrite**:覆盖现存的翻译内容。这会导致已经进行了一半的翻译数据丢失,**慎用**。
- - **merge**:合并,与sync的差别在于不会删除源码中已不存在的文本。
-- `-e`参数用来排除扫描的文件夹,多个用逗号分隔。内部采用`gulp.src`来进行文件提取,请参数。如 `-e !libs,core/**/*`。默认会自动排除`node_modules`文件夹
-- `-f`参数用来指定要扫描的文件类型,默认`js,jsx,ts,tsx,vue,html`
-- `extract`是基于正则表达式方式进行匹配的,而不是像`i18n-next`采用基于`AST`解析。
-
->**重点:**
->
->默认情况下,`voerkai18n extract`可以安全地反复多次执行,不会导致已经翻译一半的内容丢失。
->
->如果想添加新的语言支持,也`voerkai18n extract`也可以如预期的正常工作。
-
-## translate
-
-在工程文件夹下执行`voerkai18n translate`命令,该命令会读取`languages/settings.json`配置文件,并调用在线翻译服务(如百度在线翻译)对提取的文本(`languages/translates/*.json`)进行自动翻译。
-
-```shell
-Usage: voerkai18n translate [options] [location]
-
-调用在线翻译服务商的API翻译译指定项目的语言包,如使用百度云翻译服务
-
-Arguments:
- location 工程项目所在目录
-
-Options:
- -p, --provider 在线翻译服务提供者名称或翻译脚本文件 (default: "baidu")
- -m, --max-package-size 将多个文本合并提交的最大包字节数 (default: 3000)
- --appkey [key] API密钥
- --appid [id] API ID
- --no-backup 备份原始文件
- --mode 翻译模式,取值auto=仅翻译未翻译的,full=全部翻译
- -q, --qps 翻译速度限制,即每秒可调用的API次数 (default: 1)
- -h, --help 显示帮助
-```
-
-- 内置支持调用百度的在线翻译服务,您需要百度的网站上(http://api.fanyi.baidu.com/)申请开通服务,开通后可以得到`appid`和`appkey`(密钥)。
-
-- `--provider`用来指定在线翻译服务提供者,内置支持的是百度在线翻译。也可以传入一个js脚本,如下:
-
- ```javascript
- // youdao.js
- module.exports = async function(options){
- let { appkey,appid } = options
- return {
- translate:async (texts,from,to){
- // texts是一个Array
- // from,to代表要从哪一种语言翻译到何种语言
- .....
- // 在此对texts内容调用在线翻译API
- // 翻译结果应该返回与texts对应的数组
- // 如果出错则应该throw new Error()
- return [...]
- }
- }
- }
- ```
-
-- `qps`用来指定调用在线翻译API的速度,默认是1,代表每秒调用一次;此参数的引入是考虑到有些翻译平台的免费API有QPS限制。比如百度在线翻译免费版本限制`QPS`就是1,即每秒只能调用一次。如果您购买了服务,则可以将`QPS`调高。
-
-- 默认情况下,每次运行时均会备份原始的翻译文件至`languages/translates/backup`,`--no-backup`可以禁止备份。
-
-- 默认情况下,`voerkai18n translate`会在每次运行时跳过已经翻译过的内容,这样可以保留翻译成果。此特性在您对自动翻译的内容进行修改后,再多次运行`voerkai18n translate`命令时均能保留翻译内容,不会导致您修改调整过的内容丢失。`--mode full`参数可以完全覆盖翻译,请慎用。
-
-- 为了提高在线翻译的速度,`voerkai18n translate`并不是一条文本调用一次API,而是将多条文本合并起来进行调用,但是单次调用也是有数据包大小的限制的,`--max-package-size`参数用来指定数据包的最大值。比如百度建议,为保证翻译质量,请将单次请求长度控制在 6000 bytes以内(汉字约为输入参数 2000 个)。
-
-- 需要注意的是,自动翻译虽然准确性还不错,真实场景还是需要进行手工调整的,特别是自动翻译一般不能识别插值变量。
-
-## compile
-
-编译当前工程的语言包,编译结果输出在.`/langauges`文件夹。
-
-```shell
-Usage: voerkai18n compile [options] [location]
-
-编译指定项目的语言包
-
-Arguments:
- location 工程项目所在目录 (default: "./")
-
-Options:
- -D, --debug 输出调试信息
- -m, --moduleType [types] 输出模块类型,取值auto,esm,cjs (default: "esm")
- --no-inline-runtime 不嵌入运行时源码
- -h, --help display help for command
-```
-
-`voerkai18n compile`执行后会在`langauges`文件夹下输出:
-
-```javascript
-myapp
- |--- langauges
- |-- index.js // 当前作用域的源码
- |-- idMap.js // 翻译文本与id的映射文件
- |-- formatters.js // 自定义格式化器
- |-- zh.js // 中文语言包
- |-- en.js // 英文语言包
- |-- xx.js // 其他语言包
- |-- ...
-```
-
-**说明:**
-
-- 在当前工程目录下,一般不需要指定参数就可以反复多次进行编译。
-- 您每次修改了源码并`extract`后,均应该再次运行`compile`命令。
-- 如果您修改了`formatters.js`,执行`compile`命令不会重新生成和修改该文件。
-- `--no-inline-runtime `参数用来指示如何引用运行时。默认会将运行时代码生成保存在`languages/runtime.js`,应用以源码形式引用。当启用`--no-inline-runtime `参数时会采用`require("@voerkai18n/runtime")`的方式。
-
-# API
-
-## i18nScope
-
-每个工程会创建一个`i18nScope`实例。
-
-```javascript
-import { i18nScope } from "./languages"
-
-// 订阅语言切换事件
-i18nScope.on((newLanguage)=>{...})
-// 取消语言切换事件订阅
-i18nScope.off(callback)
-// 当前作用域配置
-i18nScope.settings
-// 当前语言
-i18nScope.activeLanguage // 如zh
-
-// 默认语言
-i18nScope.defaultLanguage
-// 返回当前支持的语言列表,可以用来显示
-i18nScope.languages // [{name:"zh",title:"中文"},{name:"en",title:"英文"},...]
-// 返回当前作用域的格式化器
-i18nScope.formatters
-// 当前作用id
-i18nScope.id
-// 切换语言,异步函数
-await i18nScope.change(newLanguage)
-// 当前语言包
-i18nScope.messages // {1:"...",2:"...","3":"..."}
-// 引用全局VoerkaI18n实例
-i18nScope.global
-// 注册当前作用域格式化器
-i18nScope.registerFormatter(name,formatter,{language:"*"})
-```
-
-## VoerkaI18n
-
-当`import {} form "./languages"`时会自动创建全局单`VoerkaI18n`
-
-```javascript
-// 订阅语言切换事件
-VoerkaI18n.on((newLanguage)=>{...})
-// 取消语言切换事件订阅
-VoerkaI18n.off(callback)
-// 取消所有语言切换事件订阅
-VoerkaI18n.offAll()
-
-// 返回当前默认语言
-VoerkaI18n.defaultLanguage
-// 返回当前激活语言
-VoerkaI18n.activeLanguage
-// 返回当前支持的语言
-VoerkaI18n.languages
-// 切换语言
-await VoerkaI18n.change(newLanguage)
-// 返回全局格式化器
-VoerkaI18n.formatters
-// 注册全局格式化器
-VoerkaI18n.registerFormatter(name,formatter,{language:"*"})
-
-```
-
-# 常见问题
-
-
-
-# 版本历史
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..9de84a5
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,8281 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@ampproject/remapping@^2.1.0":
+ version "2.1.2"
+ resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34"
+ integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.0"
+
+"@apideck/better-ajv-errors@^0.3.1":
+ version "0.3.3"
+ resolved "https://registry.npmmirror.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.3.tgz#ab0b1e981e1749bf59736cf7ebe25cfc9f949c15"
+ integrity sha512-9o+HO2MbJhJHjDYZaDxJmSDckvDpiuItEsrIShV0DXeCshXWRHhqYyU/PKHMkuClOmFnZhRd6wzv4vpDu/dRKg==
+ dependencies:
+ json-schema "^0.4.0"
+ jsonpointer "^5.0.0"
+ leven "^3.1.0"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
+ integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==
+ dependencies:
+ "@babel/highlight" "^7.16.7"
+
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.7":
+ version "7.17.7"
+ resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2"
+ integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==
+
+"@babel/core@*", "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.17.8", "@babel/core@^7.7.2", "@babel/core@^7.8.0":
+ version "7.17.9"
+ resolved "https://registry.npmmirror.com/@babel/core/-/core-7.17.9.tgz#6bae81a06d95f4d0dec5bb9d74bbc1f58babdcfe"
+ integrity sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==
+ dependencies:
+ "@ampproject/remapping" "^2.1.0"
+ "@babel/code-frame" "^7.16.7"
+ "@babel/generator" "^7.17.9"
+ "@babel/helper-compilation-targets" "^7.17.7"
+ "@babel/helper-module-transforms" "^7.17.7"
+ "@babel/helpers" "^7.17.9"
+ "@babel/parser" "^7.17.9"
+ "@babel/template" "^7.16.7"
+ "@babel/traverse" "^7.17.9"
+ "@babel/types" "^7.17.0"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.1"
+ semver "^6.3.0"
+
+"@babel/generator@^7.17.9", "@babel/generator@^7.7.2":
+ version "7.17.9"
+ resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.17.9.tgz#f4af9fd38fa8de143c29fce3f71852406fc1e2fc"
+ integrity sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==
+ dependencies:
+ "@babel/types" "^7.17.0"
+ jsesc "^2.5.1"
+ source-map "^0.5.0"
+
+"@babel/helper-annotate-as-pure@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862"
+ integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==
+ dependencies:
+ "@babel/types" "^7.16.7"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b"
+ integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.16.7"
+ "@babel/types" "^7.16.7"
+
+"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7":
+ version "7.17.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46"
+ integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==
+ dependencies:
+ "@babel/compat-data" "^7.17.7"
+ "@babel/helper-validator-option" "^7.16.7"
+ browserslist "^4.17.5"
+ semver "^6.3.0"
+
+"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6":
+ version "7.17.9"
+ resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz#71835d7fb9f38bd9f1378e40a4c0902fdc2ea49d"
+ integrity sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.16.7"
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-function-name" "^7.17.9"
+ "@babel/helper-member-expression-to-functions" "^7.17.7"
+ "@babel/helper-optimise-call-expression" "^7.16.7"
+ "@babel/helper-replace-supers" "^7.16.7"
+ "@babel/helper-split-export-declaration" "^7.16.7"
+
+"@babel/helper-create-regexp-features-plugin@^7.16.7":
+ version "7.17.0"
+ resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1"
+ integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.16.7"
+ regexpu-core "^5.0.1"
+
+"@babel/helper-define-polyfill-provider@^0.3.1":
+ version "0.3.1"
+ resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665"
+ integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==
+ dependencies:
+ "@babel/helper-compilation-targets" "^7.13.0"
+ "@babel/helper-module-imports" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/traverse" "^7.13.0"
+ debug "^4.1.1"
+ lodash.debounce "^4.0.8"
+ resolve "^1.14.2"
+ semver "^6.1.2"
+
+"@babel/helper-environment-visitor@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7"
+ integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==
+ dependencies:
+ "@babel/types" "^7.16.7"
+
+"@babel/helper-explode-assignable-expression@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a"
+ integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==
+ dependencies:
+ "@babel/types" "^7.16.7"
+
+"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9":
+ version "7.17.9"
+ resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12"
+ integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==
+ dependencies:
+ "@babel/template" "^7.16.7"
+ "@babel/types" "^7.17.0"
+
+"@babel/helper-hoist-variables@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246"
+ integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==
+ dependencies:
+ "@babel/types" "^7.16.7"
+
+"@babel/helper-member-expression-to-functions@^7.16.7", "@babel/helper-member-expression-to-functions@^7.17.7":
+ version "7.17.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4"
+ integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==
+ dependencies:
+ "@babel/types" "^7.17.0"
+
+"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437"
+ integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==
+ dependencies:
+ "@babel/types" "^7.16.7"
+
+"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7":
+ version "7.17.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd"
+ integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-module-imports" "^7.16.7"
+ "@babel/helper-simple-access" "^7.17.7"
+ "@babel/helper-split-export-declaration" "^7.16.7"
+ "@babel/helper-validator-identifier" "^7.16.7"
+ "@babel/template" "^7.16.7"
+ "@babel/traverse" "^7.17.3"
+ "@babel/types" "^7.17.0"
+
+"@babel/helper-optimise-call-expression@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2"
+ integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==
+ dependencies:
+ "@babel/types" "^7.16.7"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5"
+ integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==
+
+"@babel/helper-remap-async-to-generator@^7.16.8":
+ version "7.16.8"
+ resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3"
+ integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.16.7"
+ "@babel/helper-wrap-function" "^7.16.8"
+ "@babel/types" "^7.16.8"
+
+"@babel/helper-replace-supers@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1"
+ integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-member-expression-to-functions" "^7.16.7"
+ "@babel/helper-optimise-call-expression" "^7.16.7"
+ "@babel/traverse" "^7.16.7"
+ "@babel/types" "^7.16.7"
+
+"@babel/helper-simple-access@^7.17.7":
+ version "7.17.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367"
+ integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==
+ dependencies:
+ "@babel/types" "^7.17.0"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09"
+ integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==
+ dependencies:
+ "@babel/types" "^7.16.0"
+
+"@babel/helper-split-export-declaration@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b"
+ integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==
+ dependencies:
+ "@babel/types" "^7.16.7"
+
+"@babel/helper-validator-identifier@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad"
+ integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
+
+"@babel/helper-validator-option@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23"
+ integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==
+
+"@babel/helper-wrap-function@^7.16.8":
+ version "7.16.8"
+ resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200"
+ integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==
+ dependencies:
+ "@babel/helper-function-name" "^7.16.7"
+ "@babel/template" "^7.16.7"
+ "@babel/traverse" "^7.16.8"
+ "@babel/types" "^7.16.8"
+
+"@babel/helpers@^7.17.9":
+ version "7.17.9"
+ resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.17.9.tgz#b2af120821bfbe44f9907b1826e168e819375a1a"
+ integrity sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==
+ dependencies:
+ "@babel/template" "^7.16.7"
+ "@babel/traverse" "^7.17.9"
+ "@babel/types" "^7.17.0"
+
+"@babel/highlight@^7.16.7":
+ version "7.17.9"
+ resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3"
+ integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.16.7"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.4", "@babel/parser@^7.16.7", "@babel/parser@^7.17.9":
+ version "7.17.9"
+ resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef"
+ integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050"
+ integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9"
+ integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+ "@babel/plugin-proposal-optional-chaining" "^7.16.7"
+
+"@babel/plugin-proposal-async-generator-functions@^7.16.8":
+ version "7.16.8"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8"
+ integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-remap-async-to-generator" "^7.16.8"
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+
+"@babel/plugin-proposal-class-properties@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0"
+ integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-proposal-class-static-block@^7.16.7":
+ version "7.17.6"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c"
+ integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.17.6"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-proposal-dynamic-import@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2"
+ integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-proposal-export-namespace-from@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163"
+ integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8"
+ integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+
+"@babel/plugin-proposal-logical-assignment-operators@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea"
+ integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99"
+ integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-proposal-numeric-separator@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9"
+ integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-proposal-object-rest-spread@^7.16.7":
+ version "7.17.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390"
+ integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==
+ dependencies:
+ "@babel/compat-data" "^7.17.0"
+ "@babel/helper-compilation-targets" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-transform-parameters" "^7.16.7"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf"
+ integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-proposal-optional-chaining@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a"
+ integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-proposal-private-methods@^7.16.11":
+ version "7.16.11"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50"
+ integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.16.10"
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-proposal-private-property-in-object@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce"
+ integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.16.7"
+ "@babel/helper-create-class-features-plugin" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2"
+ integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-bigint@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
+ integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":
+ version "7.12.13"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
+ integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
+ integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+ integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-import-meta@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+ integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
+ integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
+ version "7.14.5"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
+ integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-typescript@^7.7.2":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8"
+ integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-arrow-functions@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154"
+ integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-async-to-generator@^7.16.8":
+ version "7.16.8"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808"
+ integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-remap-async-to-generator" "^7.16.8"
+
+"@babel/plugin-transform-block-scoped-functions@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620"
+ integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-block-scoping@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87"
+ integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-classes@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00"
+ integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.16.7"
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-function-name" "^7.16.7"
+ "@babel/helper-optimise-call-expression" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-replace-supers" "^7.16.7"
+ "@babel/helper-split-export-declaration" "^7.16.7"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470"
+ integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-destructuring@^7.16.7":
+ version "7.17.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1"
+ integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241"
+ integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-duplicate-keys@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9"
+ integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-exponentiation-operator@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b"
+ integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-for-of@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c"
+ integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-function-name@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf"
+ integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==
+ dependencies:
+ "@babel/helper-compilation-targets" "^7.16.7"
+ "@babel/helper-function-name" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-literals@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1"
+ integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-member-expression-literals@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384"
+ integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-modules-amd@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186"
+ integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-commonjs@^7.16.8":
+ version "7.17.9"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz#274be1a2087beec0254d4abd4d86e52442e1e5b6"
+ integrity sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.17.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-simple-access" "^7.17.7"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-systemjs@^7.16.7":
+ version "7.17.8"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859"
+ integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.16.7"
+ "@babel/helper-module-transforms" "^7.17.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-validator-identifier" "^7.16.7"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-umd@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618"
+ integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8":
+ version "7.16.8"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252"
+ integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.16.7"
+
+"@babel/plugin-transform-new-target@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244"
+ integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-object-super@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94"
+ integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-replace-supers" "^7.16.7"
+
+"@babel/plugin-transform-parameters@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f"
+ integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-property-literals@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55"
+ integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-regenerator@^7.16.7":
+ version "7.17.9"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz#0a33c3a61cf47f45ed3232903683a0afd2d3460c"
+ integrity sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==
+ dependencies:
+ regenerator-transform "^0.15.0"
+
+"@babel/plugin-transform-reserved-words@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586"
+ integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-runtime@^7.17.0":
+ version "7.17.0"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz#0a2e08b5e2b2d95c4b1d3b3371a2180617455b70"
+ integrity sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==
+ dependencies:
+ "@babel/helper-module-imports" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ babel-plugin-polyfill-corejs2 "^0.3.0"
+ babel-plugin-polyfill-corejs3 "^0.5.0"
+ babel-plugin-polyfill-regenerator "^0.3.0"
+ semver "^6.3.0"
+
+"@babel/plugin-transform-shorthand-properties@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a"
+ integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-spread@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44"
+ integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+
+"@babel/plugin-transform-sticky-regex@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660"
+ integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-template-literals@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab"
+ integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-typeof-symbol@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e"
+ integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-unicode-escapes@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3"
+ integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-unicode-regex@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2"
+ integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.16.11":
+ version "7.16.11"
+ resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982"
+ integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==
+ dependencies:
+ "@babel/compat-data" "^7.16.8"
+ "@babel/helper-compilation-targets" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-validator-option" "^7.16.7"
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7"
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7"
+ "@babel/plugin-proposal-async-generator-functions" "^7.16.8"
+ "@babel/plugin-proposal-class-properties" "^7.16.7"
+ "@babel/plugin-proposal-class-static-block" "^7.16.7"
+ "@babel/plugin-proposal-dynamic-import" "^7.16.7"
+ "@babel/plugin-proposal-export-namespace-from" "^7.16.7"
+ "@babel/plugin-proposal-json-strings" "^7.16.7"
+ "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7"
+ "@babel/plugin-proposal-numeric-separator" "^7.16.7"
+ "@babel/plugin-proposal-object-rest-spread" "^7.16.7"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.16.7"
+ "@babel/plugin-proposal-optional-chaining" "^7.16.7"
+ "@babel/plugin-proposal-private-methods" "^7.16.11"
+ "@babel/plugin-proposal-private-property-in-object" "^7.16.7"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.16.7"
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-class-properties" "^7.12.13"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+ "@babel/plugin-syntax-top-level-await" "^7.14.5"
+ "@babel/plugin-transform-arrow-functions" "^7.16.7"
+ "@babel/plugin-transform-async-to-generator" "^7.16.8"
+ "@babel/plugin-transform-block-scoped-functions" "^7.16.7"
+ "@babel/plugin-transform-block-scoping" "^7.16.7"
+ "@babel/plugin-transform-classes" "^7.16.7"
+ "@babel/plugin-transform-computed-properties" "^7.16.7"
+ "@babel/plugin-transform-destructuring" "^7.16.7"
+ "@babel/plugin-transform-dotall-regex" "^7.16.7"
+ "@babel/plugin-transform-duplicate-keys" "^7.16.7"
+ "@babel/plugin-transform-exponentiation-operator" "^7.16.7"
+ "@babel/plugin-transform-for-of" "^7.16.7"
+ "@babel/plugin-transform-function-name" "^7.16.7"
+ "@babel/plugin-transform-literals" "^7.16.7"
+ "@babel/plugin-transform-member-expression-literals" "^7.16.7"
+ "@babel/plugin-transform-modules-amd" "^7.16.7"
+ "@babel/plugin-transform-modules-commonjs" "^7.16.8"
+ "@babel/plugin-transform-modules-systemjs" "^7.16.7"
+ "@babel/plugin-transform-modules-umd" "^7.16.7"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8"
+ "@babel/plugin-transform-new-target" "^7.16.7"
+ "@babel/plugin-transform-object-super" "^7.16.7"
+ "@babel/plugin-transform-parameters" "^7.16.7"
+ "@babel/plugin-transform-property-literals" "^7.16.7"
+ "@babel/plugin-transform-regenerator" "^7.16.7"
+ "@babel/plugin-transform-reserved-words" "^7.16.7"
+ "@babel/plugin-transform-shorthand-properties" "^7.16.7"
+ "@babel/plugin-transform-spread" "^7.16.7"
+ "@babel/plugin-transform-sticky-regex" "^7.16.7"
+ "@babel/plugin-transform-template-literals" "^7.16.7"
+ "@babel/plugin-transform-typeof-symbol" "^7.16.7"
+ "@babel/plugin-transform-unicode-escapes" "^7.16.7"
+ "@babel/plugin-transform-unicode-regex" "^7.16.7"
+ "@babel/preset-modules" "^0.1.5"
+ "@babel/types" "^7.16.8"
+ babel-plugin-polyfill-corejs2 "^0.3.0"
+ babel-plugin-polyfill-corejs3 "^0.5.0"
+ babel-plugin-polyfill-regenerator "^0.3.0"
+ core-js-compat "^3.20.2"
+ semver "^6.3.0"
+
+"@babel/preset-modules@^0.1.5":
+ version "0.1.5"
+ resolved "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9"
+ integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+ "@babel/plugin-transform-dotall-regex" "^7.4.4"
+ "@babel/types" "^7.4.4"
+ esutils "^2.0.2"
+
+"@babel/runtime-corejs3@^7.17.0":
+ version "7.17.9"
+ resolved "https://registry.npmmirror.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz#3d02d0161f0fbf3ada8e88159375af97690f4055"
+ integrity sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==
+ dependencies:
+ core-js-pure "^3.20.2"
+ regenerator-runtime "^0.13.4"
+
+"@babel/runtime@^7.11.2", "@babel/runtime@^7.8.4":
+ version "7.17.9"
+ resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72"
+ integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
+"@babel/template@^7.16.7", "@babel/template@^7.3.3":
+ version "7.16.7"
+ resolved "https://registry.npmmirror.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155"
+ integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==
+ dependencies:
+ "@babel/code-frame" "^7.16.7"
+ "@babel/parser" "^7.16.7"
+ "@babel/types" "^7.16.7"
+
+"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9", "@babel/traverse@^7.7.2":
+ version "7.17.9"
+ resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.17.9.tgz#1f9b207435d9ae4a8ed6998b2b82300d83c37a0d"
+ integrity sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==
+ dependencies:
+ "@babel/code-frame" "^7.16.7"
+ "@babel/generator" "^7.17.9"
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-function-name" "^7.17.9"
+ "@babel/helper-hoist-variables" "^7.16.7"
+ "@babel/helper-split-export-declaration" "^7.16.7"
+ "@babel/parser" "^7.17.9"
+ "@babel/types" "^7.17.0"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
+ version "7.17.0"
+ resolved "https://registry.npmmirror.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b"
+ integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.16.7"
+ to-fast-properties "^2.0.0"
+
+"@bcoe/v8-coverage@^0.2.3":
+ version "0.2.3"
+ resolved "https://registry.npmmirror.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
+"@braintree/sanitize-url@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/@braintree/sanitize-url/-/sanitize-url-3.1.0.tgz#8ff71d51053cd5ee4981e5a501d80a536244f7fd"
+ integrity sha512-GcIY79elgB+azP74j8vqkiXz8xLFfIzbQJdlwOPisgbKT00tviJQuEghOXSMVxJ00HoYJbGswr4kcllUc4xCcg==
+
+"@istanbuljs/load-nyc-config@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+ integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+ dependencies:
+ camelcase "^5.3.1"
+ find-up "^4.1.0"
+ get-package-type "^0.1.0"
+ js-yaml "^3.13.1"
+ resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2":
+ version "0.1.3"
+ resolved "https://registry.npmmirror.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
+ integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jest/console@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba"
+ integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ jest-message-util "^27.5.1"
+ jest-util "^27.5.1"
+ slash "^3.0.0"
+
+"@jest/core@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626"
+ integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==
+ dependencies:
+ "@jest/console" "^27.5.1"
+ "@jest/reporters" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ emittery "^0.8.1"
+ exit "^0.1.2"
+ graceful-fs "^4.2.9"
+ jest-changed-files "^27.5.1"
+ jest-config "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-resolve-dependencies "^27.5.1"
+ jest-runner "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ jest-watcher "^27.5.1"
+ micromatch "^4.0.4"
+ rimraf "^3.0.0"
+ slash "^3.0.0"
+ strip-ansi "^6.0.0"
+
+"@jest/environment@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74"
+ integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==
+ dependencies:
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ jest-mock "^27.5.1"
+
+"@jest/fake-timers@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74"
+ integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@sinonjs/fake-timers" "^8.0.1"
+ "@types/node" "*"
+ jest-message-util "^27.5.1"
+ jest-mock "^27.5.1"
+ jest-util "^27.5.1"
+
+"@jest/globals@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b"
+ integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ expect "^27.5.1"
+
+"@jest/reporters@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04"
+ integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==
+ dependencies:
+ "@bcoe/v8-coverage" "^0.2.3"
+ "@jest/console" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ collect-v8-coverage "^1.0.0"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ graceful-fs "^4.2.9"
+ istanbul-lib-coverage "^3.0.0"
+ istanbul-lib-instrument "^5.1.0"
+ istanbul-lib-report "^3.0.0"
+ istanbul-lib-source-maps "^4.0.0"
+ istanbul-reports "^3.1.3"
+ jest-haste-map "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-util "^27.5.1"
+ jest-worker "^27.5.1"
+ slash "^3.0.0"
+ source-map "^0.6.0"
+ string-length "^4.0.1"
+ terminal-link "^2.0.0"
+ v8-to-istanbul "^8.1.0"
+
+"@jest/source-map@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf"
+ integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.2.9"
+ source-map "^0.6.0"
+
+"@jest/test-result@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb"
+ integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==
+ dependencies:
+ "@jest/console" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ collect-v8-coverage "^1.0.0"
+
+"@jest/test-sequencer@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b"
+ integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==
+ dependencies:
+ "@jest/test-result" "^27.5.1"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^27.5.1"
+ jest-runtime "^27.5.1"
+
+"@jest/transform@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409"
+ integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^27.5.1"
+ babel-plugin-istanbul "^6.1.1"
+ chalk "^4.0.0"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-util "^27.5.1"
+ micromatch "^4.0.4"
+ pirates "^4.0.4"
+ slash "^3.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "^3.0.0"
+
+"@jest/types@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80"
+ integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^3.0.0"
+ "@types/node" "*"
+ "@types/yargs" "^16.0.0"
+ chalk "^4.0.0"
+
+"@jridgewell/resolve-uri@^3.0.3":
+ version "3.0.5"
+ resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c"
+ integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==
+
+"@jridgewell/sourcemap-codec@^1.4.10":
+ version "1.4.11"
+ resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec"
+ integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==
+
+"@jridgewell/trace-mapping@^0.3.0":
+ version "0.3.4"
+ resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3"
+ integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.0.3"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+
+"@lit/reactive-element@^1.3.0":
+ version "1.3.1"
+ resolved "https://registry.npmmirror.com/@lit/reactive-element/-/reactive-element-1.3.1.tgz#3021ad0fa30a75a41212c5e7f1f169c5762ef8bb"
+ integrity sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==
+
+"@mr-hope/vuepress-plugin-components@2.0.0-beta.36":
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/@mr-hope/vuepress-plugin-components/-/vuepress-plugin-components-2.0.0-beta.36.tgz#9be6aca822c43849759446895ca39fb6d5af4705"
+ integrity sha512-dP9sH7jXyHedvhaId3Ty7A+FXx16uNfA6Cjno+4E4KEIuzz8rldNm4QIdhhpiCO+B4mf7/opXeAJJ9Ctw4prZw==
+ dependencies:
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+ "@types/lodash.debounce" "^4.0.6"
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/plugin-theme-data" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ "@vueuse/core" "^8.2.4"
+ balloon-css "^1.2.0"
+ lodash.debounce "^4.0.8"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+ vuepress-plugin-reading-time2 "2.0.0-beta.36"
+ vuepress-plugin-sass-palette "2.0.0-beta.36"
+
+"@mr-hope/vuepress-shared@2.0.0-beta.36":
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/@mr-hope/vuepress-shared/-/vuepress-shared-2.0.0-beta.36.tgz#9bbd5d5e4d44064357af53fdd968aa28646d58bc"
+ integrity sha512-zsRxM/bjocpAPw2Rrm95FeWKIa4GsMWJz+o92CnzKy0OoiGps28Gao/wYhFF48OHy8zqs9a+0/O/vDVbzZAhew==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/plugin-git" "2.0.0-beta.38"
+ "@vuepress/plugin-theme-data" "2.0.0-beta.38"
+ chalk "^4.1.2"
+ dayjs "^1.11.0"
+ ora "^5.4.1"
+ vue "^3.2.31"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.8"
+ resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@rollup/plugin-babel@^5.2.0", "@rollup/plugin-babel@^5.3.1":
+ version "5.3.1"
+ resolved "https://registry.npmmirror.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283"
+ integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==
+ dependencies:
+ "@babel/helper-module-imports" "^7.10.4"
+ "@rollup/pluginutils" "^3.1.0"
+
+"@rollup/plugin-commonjs@^21.0.2":
+ version "21.0.3"
+ resolved "https://registry.npmmirror.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.3.tgz#287896c64926ef3d7f0013708dcdcc1223576ef0"
+ integrity sha512-ThGfwyvcLc6cfP/MWxA5ACF+LZCvsuhUq7V5134Az1oQWsiC7lNpLT4mJI86WQunK7BYmpUiHmMk2Op6OAHs0g==
+ dependencies:
+ "@rollup/pluginutils" "^3.1.0"
+ commondir "^1.0.1"
+ estree-walker "^2.0.1"
+ glob "^7.1.6"
+ is-reference "^1.2.1"
+ magic-string "^0.25.7"
+ resolve "^1.17.0"
+
+"@rollup/plugin-node-resolve@^11.2.1":
+ version "11.2.1"
+ resolved "https://registry.npmmirror.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60"
+ integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==
+ dependencies:
+ "@rollup/pluginutils" "^3.1.0"
+ "@types/resolve" "1.17.1"
+ builtin-modules "^3.1.0"
+ deepmerge "^4.2.2"
+ is-module "^1.0.0"
+ resolve "^1.19.0"
+
+"@rollup/plugin-replace@^2.4.1":
+ version "2.4.2"
+ resolved "https://registry.npmmirror.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a"
+ integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==
+ dependencies:
+ "@rollup/pluginutils" "^3.1.0"
+ magic-string "^0.25.7"
+
+"@rollup/pluginutils@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b"
+ integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==
+ dependencies:
+ "@types/estree" "0.0.39"
+ estree-walker "^1.0.1"
+ picomatch "^2.2.2"
+
+"@sinonjs/commons@^1.7.0":
+ version "1.8.3"
+ resolved "https://registry.npmmirror.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"
+ integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==
+ dependencies:
+ type-detect "4.0.8"
+
+"@sinonjs/fake-timers@^8.0.1":
+ version "8.1.0"
+ resolved "https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7"
+ integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==
+ dependencies:
+ "@sinonjs/commons" "^1.7.0"
+
+"@surma/rollup-plugin-off-main-thread@^2.2.3":
+ version "2.2.3"
+ resolved "https://registry.npmmirror.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053"
+ integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==
+ dependencies:
+ ejs "^3.1.6"
+ json5 "^2.2.0"
+ magic-string "^0.25.0"
+ string.prototype.matchall "^4.0.6"
+
+"@tootallnate/once@1":
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
+ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
+
+"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14":
+ version "7.1.19"
+ resolved "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460"
+ integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.4"
+ resolved "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7"
+ integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.4.1"
+ resolved "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969"
+ integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
+ version "7.14.2"
+ resolved "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43"
+ integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==
+ dependencies:
+ "@babel/types" "^7.3.0"
+
+"@types/bcryptjs@^2.4.2":
+ version "2.4.2"
+ resolved "https://registry.npmmirror.com/@types/bcryptjs/-/bcryptjs-2.4.2.tgz#e3530eac9dd136bfdfb0e43df2c4c5ce1f77dfae"
+ integrity sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==
+
+"@types/debug@^4.1.7":
+ version "4.1.7"
+ resolved "https://registry.npmmirror.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82"
+ integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==
+ dependencies:
+ "@types/ms" "*"
+
+"@types/estree@*":
+ version "0.0.51"
+ resolved "https://registry.npmmirror.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40"
+ integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==
+
+"@types/estree@0.0.39":
+ version "0.0.39"
+ resolved "https://registry.npmmirror.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
+ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
+
+"@types/fs-extra@^9.0.13":
+ version "9.0.13"
+ resolved "https://registry.npmmirror.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
+ integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==
+ dependencies:
+ "@types/node" "*"
+
+"@types/graceful-fs@^4.1.2":
+ version "4.1.5"
+ resolved "https://registry.npmmirror.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
+ integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/hash-sum@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/@types/hash-sum/-/hash-sum-1.0.0.tgz#838f4e8627887d42b162d05f3d96ca636c2bc504"
+ integrity sha512-FdLBT93h3kcZ586Aee66HPCVJ6qvxVjBlDWNmxSGSbCZe9hTsjRKdSsl4y1T+3zfujxo9auykQMnFsfyHWD7wg==
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
+ version "2.0.4"
+ resolved "https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
+ integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==
+
+"@types/istanbul-lib-report@*":
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+ integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^3.0.0":
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff"
+ integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==
+ dependencies:
+ "@types/istanbul-lib-report" "*"
+
+"@types/katex@^0.14.0":
+ version "0.14.0"
+ resolved "https://registry.npmmirror.com/@types/katex/-/katex-0.14.0.tgz#b84c0afc3218069a5ad64fe2a95321881021b5fe"
+ integrity sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==
+
+"@types/linkify-it@*":
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9"
+ integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==
+
+"@types/lodash.debounce@^4.0.6":
+ version "4.0.6"
+ resolved "https://registry.npmmirror.com/@types/lodash.debounce/-/lodash.debounce-4.0.6.tgz#c5a2326cd3efc46566c47e4c0aa248dc0ee57d60"
+ integrity sha512-4WTmnnhCfDvvuLMaF3KV4Qfki93KebocUF45msxhYyjMttZDQYzHkO639ohhk8+oco2cluAFL3t5+Jn4mleylQ==
+ dependencies:
+ "@types/lodash" "*"
+
+"@types/lodash.throttle@^4.1.6":
+ version "4.1.6"
+ resolved "https://registry.npmmirror.com/@types/lodash.throttle/-/lodash.throttle-4.1.6.tgz#f5ba2c22244ee42ff6c2c49e614401a870c1009c"
+ integrity sha512-/UIH96i/sIRYGC60NoY72jGkCJtFN5KVPhEMMMTjol65effe1gPn0tycJqV5tlSwMTzX8FqzB5yAj0rfGHTPNg==
+ dependencies:
+ "@types/lodash" "*"
+
+"@types/lodash@*":
+ version "4.14.181"
+ resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.181.tgz#d1d3740c379fda17ab175165ba04e2d03389385d"
+ integrity sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==
+
+"@types/markdown-it@^12.2.3":
+ version "12.2.3"
+ resolved "https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51"
+ integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==
+ dependencies:
+ "@types/linkify-it" "*"
+ "@types/mdurl" "*"
+
+"@types/mdurl@*":
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9"
+ integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==
+
+"@types/mermaid@^8.2.9":
+ version "8.2.9"
+ resolved "https://registry.npmmirror.com/@types/mermaid/-/mermaid-8.2.9.tgz#1844505dcffcd47703e94628a6200583d35c2c76"
+ integrity sha512-f1i8fNoVFVJXedk+R7GcEk4KoOWzWAU3CzFqlVw1qWKktfsataBERezCz1pOdKy8Ec02ZdPQXGM7NU2lPHABYQ==
+
+"@types/ms@*":
+ version "0.7.31"
+ resolved "https://registry.npmmirror.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
+ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
+
+"@types/node@*", "@types/node@^17.0.5":
+ version "17.0.23"
+ resolved "https://registry.npmmirror.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da"
+ integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==
+
+"@types/prettier@^2.1.5":
+ version "2.4.4"
+ resolved "https://registry.npmmirror.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17"
+ integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==
+
+"@types/resolve@1.17.1":
+ version "1.17.1"
+ resolved "https://registry.npmmirror.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"
+ integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/sax@^1.2.1":
+ version "1.2.4"
+ resolved "https://registry.npmmirror.com/@types/sax/-/sax-1.2.4.tgz#8221affa7f4f3cb21abd22f244cfabfa63e6a69e"
+ integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/stack-utils@^2.0.0":
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
+ integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
+
+"@types/trusted-types@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756"
+ integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==
+
+"@types/yargs-parser@*":
+ version "21.0.0"
+ resolved "https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
+ integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==
+
+"@types/yargs@^16.0.0":
+ version "16.0.4"
+ resolved "https://registry.npmmirror.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977"
+ integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@vitejs/plugin-vue@^2.3.1":
+ version "2.3.1"
+ resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.3.1.tgz#5f286b8d3515381c6d5c8fa8eee5e6335f727e14"
+ integrity sha512-YNzBt8+jt6bSwpt7LP890U1UcTOIZZxfpE5WOJ638PNxSEKOqAi0+FSKS0nVeukfdZ0Ai/H7AFd6k3hayfGZqQ==
+
+"@voerkai18n/autopublish@^1.0.3":
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/@voerkai18n/autopublish/-/autopublish-1.0.3.tgz#3d3159e1408f4b64e0277e0c4d4ec2b4a0e146ad"
+ integrity sha512-6J264vifk4M7r8/nEL+uti3WqJ69fMTWRFndU7UVU4kRCB5kGKlHFTT5FLkVojazLUcLm7EPMKOBzW6w8he2Ag==
+ dependencies:
+ commander "^9.0.0"
+ fast-glob "^3.2.11"
+ semver "^7.3.5"
+
+"@vue/compiler-core@3.2.31":
+ version "3.2.31"
+ resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.31.tgz#d38f06c2cf845742403b523ab4596a3fda152e89"
+ integrity sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==
+ dependencies:
+ "@babel/parser" "^7.16.4"
+ "@vue/shared" "3.2.31"
+ estree-walker "^2.0.2"
+ source-map "^0.6.1"
+
+"@vue/compiler-dom@3.2.31":
+ version "3.2.31"
+ resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz#b1b7dfad55c96c8cc2b919cd7eb5fd7e4ddbf00e"
+ integrity sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==
+ dependencies:
+ "@vue/compiler-core" "3.2.31"
+ "@vue/shared" "3.2.31"
+
+"@vue/compiler-sfc@3.2.31", "@vue/compiler-sfc@^3.2.31":
+ version "3.2.31"
+ resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz#d02b29c3fe34d599a52c5ae1c6937b4d69f11c2f"
+ integrity sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==
+ dependencies:
+ "@babel/parser" "^7.16.4"
+ "@vue/compiler-core" "3.2.31"
+ "@vue/compiler-dom" "3.2.31"
+ "@vue/compiler-ssr" "3.2.31"
+ "@vue/reactivity-transform" "3.2.31"
+ "@vue/shared" "3.2.31"
+ estree-walker "^2.0.2"
+ magic-string "^0.25.7"
+ postcss "^8.1.10"
+ source-map "^0.6.1"
+
+"@vue/compiler-ssr@3.2.31":
+ version "3.2.31"
+ resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz#4fa00f486c9c4580b40a4177871ebbd650ecb99c"
+ integrity sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==
+ dependencies:
+ "@vue/compiler-dom" "3.2.31"
+ "@vue/shared" "3.2.31"
+
+"@vue/devtools-api@^6.0.0", "@vue/devtools-api@^6.1.4":
+ version "6.1.4"
+ resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz#b4aec2f4b4599e11ba774a50c67fa378c9824e53"
+ integrity sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==
+
+"@vue/reactivity-transform@3.2.31":
+ version "3.2.31"
+ resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz#0f5b25c24e70edab2b613d5305c465b50fc00911"
+ integrity sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==
+ dependencies:
+ "@babel/parser" "^7.16.4"
+ "@vue/compiler-core" "3.2.31"
+ "@vue/shared" "3.2.31"
+ estree-walker "^2.0.2"
+ magic-string "^0.25.7"
+
+"@vue/reactivity@3.2.31":
+ version "3.2.31"
+ resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.31.tgz#fc90aa2cdf695418b79e534783aca90d63a46bbd"
+ integrity sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==
+ dependencies:
+ "@vue/shared" "3.2.31"
+
+"@vue/runtime-core@3.2.31":
+ version "3.2.31"
+ resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.31.tgz#9d284c382f5f981b7a7b5971052a1dc4ef39ac7a"
+ integrity sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==
+ dependencies:
+ "@vue/reactivity" "3.2.31"
+ "@vue/shared" "3.2.31"
+
+"@vue/runtime-dom@3.2.31":
+ version "3.2.31"
+ resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz#79ce01817cb3caf2c9d923f669b738d2d7953eff"
+ integrity sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==
+ dependencies:
+ "@vue/runtime-core" "3.2.31"
+ "@vue/shared" "3.2.31"
+ csstype "^2.6.8"
+
+"@vue/server-renderer@3.2.31", "@vue/server-renderer@^3.2.31":
+ version "3.2.31"
+ resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.31.tgz#201e9d6ce735847d5989403af81ef80960da7141"
+ integrity sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==
+ dependencies:
+ "@vue/compiler-ssr" "3.2.31"
+ "@vue/shared" "3.2.31"
+
+"@vue/shared@3.2.31", "@vue/shared@^3.2.31":
+ version "3.2.31"
+ resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.31.tgz#c90de7126d833dcd3a4c7534d534be2fb41faa4e"
+ integrity sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==
+
+"@vuepress/bundler-vite@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/bundler-vite/-/bundler-vite-2.0.0-beta.38.tgz#d522f6ea433336b902f5df5ec7dcbbc34aee2421"
+ integrity sha512-CoFwtheF7v7iYuDrGwlLGoKoc91YgK+NpXolaq4UjfWhhqOdkfHjCz4oEj3EPl0cwm/8qs3V7JwVzqtIW8ovRg==
+ dependencies:
+ "@vitejs/plugin-vue" "^2.3.1"
+ "@vue/compiler-sfc" "^3.2.31"
+ "@vue/server-renderer" "^3.2.31"
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/core" "2.0.0-beta.38"
+ "@vuepress/shared" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ autoprefixer "^10.4.4"
+ connect-history-api-fallback "^1.6.0"
+ postcss "^8.4.12"
+ postcss-csso "^6.0.0"
+ rollup "^2.70.1"
+ vite "~2.9.1"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+
+"@vuepress/cli@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/cli/-/cli-2.0.0-beta.38.tgz#111314d33adab268ac5b7cf847ad3e6c51f388f8"
+ integrity sha512-gP/MYjhZQ/ehvni7oo25GMp7yCL7HhCjxOh2yT1h1MRjXJAA4SStSN2okqQbDw8YbkCWvgGuRqRJjny+wpbZLw==
+ dependencies:
+ "@vuepress/core" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ cac "^6.7.12"
+ chokidar "^3.5.3"
+ envinfo "^7.8.1"
+ esbuild "^0.14.29"
+
+"@vuepress/client@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/client/-/client-2.0.0-beta.38.tgz#ffd57932465d2fd68c5be2defd387537893ec293"
+ integrity sha512-siwZECsly5Rzn8yTo7u3R/vZWyPoh1yR8VESPflwfi3dIRhQLVfUsnyCC0OBz5INqB+etUiQtuY4WpNPYJcNuA==
+ dependencies:
+ "@vue/devtools-api" "^6.1.4"
+ "@vuepress/shared" "2.0.0-beta.38"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+
+"@vuepress/core@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/core/-/core-2.0.0-beta.38.tgz#6e2daa3b0f502dc74a7e942bbb1142bdb4ed4b10"
+ integrity sha512-NgTeDdhspM6mxwAafThzMYO4rhkeT3bQYdPzcZ2uEaK36zbEqRhsnrzN9X3QXfefIlX8//HF9BdAJx0+gPJErQ==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/markdown" "2.0.0-beta.38"
+ "@vuepress/shared" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ gray-matter "^4.0.3"
+ toml "^3.0.0"
+
+"@vuepress/markdown@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/markdown/-/markdown-2.0.0-beta.38.tgz#def50e87ac00eec5b86bd06fa3b8e6a1c37167b6"
+ integrity sha512-FB4md4zONcFELYkfppGlnrQl3fOtNhHsHG3X7jj8boOW/GmUROy3A0RBGIklf4Ox6q4Se1qjdcdI/1lZy9mcsQ==
+ dependencies:
+ "@types/markdown-it" "^12.2.3"
+ "@vuepress/shared" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ markdown-it "^12.3.2"
+ markdown-it-anchor "^8.4.1"
+ markdown-it-emoji "^2.0.0"
+ mdurl "^1.0.1"
+
+"@vuepress/plugin-active-header-links@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-beta.38.tgz#c14c7f3cb9bf3689fb659b6d28855e4d3043d686"
+ integrity sha512-cQIglb/zRkd1Dyc2W69LHmKI5cbf1FaMpWwTxXrOKPY4/DFIV5bS0/8QbBBt/dEr+oydfJBpydFeyaDRZVm6Ng==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/core" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ ts-debounce "^4.0.0"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+
+"@vuepress/plugin-back-to-top@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-beta.38.tgz#96766d4d18e290d5d272c685f1feda26b2b6abf6"
+ integrity sha512-tWkhCB632OFKXqDDT0rKwTqQJOpiUxRpWhfNs1tzS4yNBzGkj5LGEubcwQbNQR0ujHkw/N6V+ehmWBC/RCNwjw==
+ dependencies:
+ "@vuepress/core" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ ts-debounce "^4.0.0"
+ vue "^3.2.31"
+
+"@vuepress/plugin-container@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/plugin-container/-/plugin-container-2.0.0-beta.38.tgz#2084f969a1eb6edf368d9ce8a45eb9674c7076ef"
+ integrity sha512-3CNiBzCBKLjfH/8IVeb9hT6QG8CVNuoiMdZ8mlaKrwAq4F0KkViwJLNSI/DyuFfIGMGfEMX2smkpCvtY7okAbg==
+ dependencies:
+ "@types/markdown-it" "^12.2.3"
+ "@vuepress/core" "2.0.0-beta.38"
+ "@vuepress/markdown" "2.0.0-beta.38"
+ "@vuepress/shared" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ markdown-it "^12.3.2"
+ markdown-it-container "^3.0.0"
+
+"@vuepress/plugin-external-link-icon@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/plugin-external-link-icon/-/plugin-external-link-icon-2.0.0-beta.38.tgz#c7912634e5a00b7ca15258dc1e91356a8c86e556"
+ integrity sha512-vQNpVqkZ0uo7pPMpZ+GwxdxJCKhNcCBYGQBOQsBlFJjFL6ZDLlF5Gp5lZoRRMsGCkusNCMFaBGVAeGP9gDjC6A==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/core" "2.0.0-beta.38"
+ "@vuepress/markdown" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ vue "^3.2.31"
+
+"@vuepress/plugin-git@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/plugin-git/-/plugin-git-2.0.0-beta.38.tgz#92a162edb5d209bf84af383890d44d85c2278798"
+ integrity sha512-3pWsTdo87JakN0j3ztAT/eSrdF+y1zTd4ASeA4feGnRyt4cobzy1DHoScb5QwI9AfEHKMBAomDJhNLXIk4QzNg==
+ dependencies:
+ "@vuepress/core" "2.0.0-beta.38"
+ execa "^5.1.1"
+
+"@vuepress/plugin-medium-zoom@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-beta.38.tgz#9d4150fba3c2797d32ca0648e1a3eefb79953c05"
+ integrity sha512-ERuvdkaPSbloHUBAUjJBj1pXWluEZdC5j18eQ478jtYdC/QLd/BDyM2KP1xwWcn+cOrLJ9L8/7NBTjfxUWBpWg==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/core" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ medium-zoom "^1.0.6"
+ vue "^3.2.31"
+
+"@vuepress/plugin-nprogress@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-beta.38.tgz#6d0be4a7793ab21d3324e917e9d75e99f6f2c522"
+ integrity sha512-0P43/DK5w8IUzXaKXjeIALRCWNjzS+VcIBaJatHn56oR0kZHSaeQTL6mpfztXghXEcW5okUAnz8owYdZd1hyLA==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/core" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ nprogress "^0.2.0"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+
+"@vuepress/plugin-palette@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/plugin-palette/-/plugin-palette-2.0.0-beta.38.tgz#7adbf006d84624155f3020e7f724be13aa0afd9c"
+ integrity sha512-V14jK0M8scRLwExsOeWAWJEAXk1GVA69522DtEilFBJ0WiId21i68gbPWoeOI9ZcdJQuA/NnCuF4/ogLv6O3Fw==
+ dependencies:
+ "@vuepress/core" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ chokidar "^3.5.3"
+
+"@vuepress/plugin-prismjs@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-beta.38.tgz#a4ee05572870a13db97e2671c9fd72416cc7cda9"
+ integrity sha512-zQQ138gqIMfO52UV67L2KA4MgiUl7TDTLwQKdm96+8+Om9iUe8qpOPzxyZRaO2WVZSXVkJDnvTjon2jqVkhm8A==
+ dependencies:
+ "@vuepress/core" "2.0.0-beta.38"
+ prismjs "^1.27.0"
+
+"@vuepress/plugin-theme-data@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/plugin-theme-data/-/plugin-theme-data-2.0.0-beta.38.tgz#6c3358bbc00147fcf1a7199e3da057d9952047c6"
+ integrity sha512-mhGMjntB90RYCaJLYAtvM7BOs8OvABG5ganXKBdH6hIvvcQ5SETgGP1tsyoHPbXpG7M1b8YseDA4yDJCYcZ26w==
+ dependencies:
+ "@vue/devtools-api" "^6.1.4"
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/core" "2.0.0-beta.38"
+ "@vuepress/shared" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ vue "^3.2.31"
+
+"@vuepress/shared@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/shared/-/shared-2.0.0-beta.38.tgz#fe222b4a984e0b4ff06fbbb72fec9004da49fe37"
+ integrity sha512-IWZPZkQwGI94iX8mjhMJa6CR7fyGQ5zAmjbM0hEBxw1BY5Q7RJSkwJTi5vdh1wUeF1CQx88+dfKYpWb1Wogwhg==
+ dependencies:
+ "@vue/shared" "^3.2.31"
+
+"@vuepress/theme-default@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/theme-default/-/theme-default-2.0.0-beta.38.tgz#63c05dce2bc6627ec78fc273c8f6003f1f928f8c"
+ integrity sha512-vdZiaQg40oqOPx7n8z+zHiPNur5pqGu5xMi8m/kiKHsPoWc3uO+1xoNlpOjGDDTcZhLoXDXE7Grm4rOzsx8+0w==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/core" "2.0.0-beta.38"
+ "@vuepress/plugin-active-header-links" "2.0.0-beta.38"
+ "@vuepress/plugin-back-to-top" "2.0.0-beta.38"
+ "@vuepress/plugin-container" "2.0.0-beta.38"
+ "@vuepress/plugin-external-link-icon" "2.0.0-beta.38"
+ "@vuepress/plugin-git" "2.0.0-beta.38"
+ "@vuepress/plugin-medium-zoom" "2.0.0-beta.38"
+ "@vuepress/plugin-nprogress" "2.0.0-beta.38"
+ "@vuepress/plugin-palette" "2.0.0-beta.38"
+ "@vuepress/plugin-prismjs" "2.0.0-beta.38"
+ "@vuepress/plugin-theme-data" "2.0.0-beta.38"
+ "@vuepress/shared" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ "@vueuse/core" "^8.2.1"
+ sass "^1.49.10"
+ sass-loader "^12.6.0"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+
+"@vuepress/utils@2.0.0-beta.38":
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/@vuepress/utils/-/utils-2.0.0-beta.38.tgz#d2ae36142a628ad18f92b705dbb0850bf0552851"
+ integrity sha512-qc8roc+9KJjKGHHRXnP7Yef7P6Zc3ABRiHeeBVJ0TBhoKSlguHIfDvOnUzkAvV2FWAHw3hEk71drJwRO+/zrPw==
+ dependencies:
+ "@types/debug" "^4.1.7"
+ "@types/fs-extra" "^9.0.13"
+ "@types/hash-sum" "^1.0.0"
+ "@vuepress/shared" "2.0.0-beta.38"
+ chalk "^4.1.2"
+ debug "^4.3.4"
+ fs-extra "^10.0.1"
+ globby "^11.0.4"
+ hash-sum "^2.0.0"
+ ora "^5.4.1"
+ upath "^2.0.1"
+
+"@vueuse/core@^8.2.1", "@vueuse/core@^8.2.4":
+ version "8.2.5"
+ resolved "https://registry.npmmirror.com/@vueuse/core/-/core-8.2.5.tgz#ca6a59091ecf16e6739c53f3d857b11967a5eb06"
+ integrity sha512-5prZAA1Ji2ltwNUnzreu6WIXYqHYP/9U2BiY5mD/650VYLpVcwVlYznJDFcLCmEWI3o3Vd34oS1FUf+6Mh68GQ==
+ dependencies:
+ "@vueuse/metadata" "8.2.5"
+ "@vueuse/shared" "8.2.5"
+ vue-demi "*"
+
+"@vueuse/metadata@8.2.5":
+ version "8.2.5"
+ resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-8.2.5.tgz#51c7d95e04284ea378a5242a2e88b77494e2c117"
+ integrity sha512-Lk9plJjh9cIdiRdcj16dau+2LANxIdFCiTgdfzwYXbflxq0QnMBeOD2qHgKDE7fuVrtPcVWj8VSuZEx1HRfNQA==
+
+"@vueuse/shared@8.2.5":
+ version "8.2.5"
+ resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-8.2.5.tgz#1ae200a240c4b8d42d41723b64d8f917aa57ff16"
+ integrity sha512-lNWo+7sk6JCuOj4AiYM+6HZ6fq4xAuVq1sVckMQKgfCJZpZRe4i8es+ZULO5bYTKP+VrOCtqrLR2GzEfrbr3YQ==
+ dependencies:
+ vue-demi "*"
+
+"@waline/client@^1.6.0":
+ version "1.6.0"
+ resolved "https://registry.npmmirror.com/@waline/client/-/client-1.6.0.tgz#4de2c6262c4cb8a8554308dd3844c42a17a8d7f9"
+ integrity sha512-nVjNh4l0GiO1D//aJj/6N6oCgFikhRqs4Juc9sbT2g9w+FxeEYosOc5PMlyDvp8JXGGla8uFuzhD8em5o7QZ3g==
+
+abab@^2.0.3, abab@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.npmmirror.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
+ integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
+
+acorn-globals@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmmirror.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
+ integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
+ dependencies:
+ acorn "^7.1.1"
+ acorn-walk "^7.1.1"
+
+acorn-walk@^7.1.1:
+ version "7.2.0"
+ resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
+ integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+
+acorn@^7.1.1:
+ version "7.4.1"
+ resolved "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+acorn@^8.2.4, acorn@^8.5.0:
+ version "8.7.0"
+ resolved "https://registry.npmmirror.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
+ integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
+
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
+ajv@^8.6.0:
+ version "8.11.0"
+ resolved "https://registry.npmmirror.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f"
+ integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
+ansi-colors@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9"
+ integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==
+ dependencies:
+ ansi-wrap "^0.1.0"
+
+ansi-escapes@^4.2.1:
+ version "4.3.2"
+ resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+ integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+ dependencies:
+ type-fest "^0.21.3"
+
+ansi-gray@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.npmmirror.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251"
+ integrity sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==
+ dependencies:
+ ansi-wrap "0.1.0"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi-styles@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
+ integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+
+ansi-wrap@0.1.0, ansi-wrap@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmmirror.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
+ integrity sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==
+
+ansicolor@^1.1.100:
+ version "1.1.100"
+ resolved "https://registry.npmmirror.com/ansicolor/-/ansicolor-1.1.100.tgz#811f1afbf726edca3aafb942a14df8351996304a"
+ integrity sha512-Jl0pxRfa9WaQVUX57AB8/V2my6FJxrOR1Pp2qqFbig20QB4HzUoQ48THTKAgHlUCJeQm/s2WoOPcoIDhyCL/kw==
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+anymatch@^3.0.3, anymatch@~3.1.2:
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+ integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+append-buffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1"
+ integrity sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==
+ dependencies:
+ buffer-equal "^1.0.0"
+
+archy@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
+ integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==
+
+arg@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/arg/-/arg-5.0.1.tgz#eb0c9a8f77786cad2af8ff2b862899842d7b6adb"
+ integrity sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==
+
+arr-filter@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee"
+ integrity sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==
+ dependencies:
+ make-iterator "^1.0.0"
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-map@^2.0.0, arr-map@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4"
+ integrity sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==
+ dependencies:
+ make-iterator "^1.0.0"
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==
+
+array-each@^1.0.0, array-each@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
+ integrity sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==
+
+array-initial@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795"
+ integrity sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==
+ dependencies:
+ array-slice "^1.0.0"
+ is-number "^4.0.0"
+
+array-last@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336"
+ integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==
+ dependencies:
+ is-number "^4.0.0"
+
+array-slice@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4"
+ integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==
+
+array-sort@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a"
+ integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==
+ dependencies:
+ default-compare "^1.0.0"
+ get-value "^2.0.6"
+ kind-of "^5.0.2"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==
+
+async-done@^1.2.0, async-done@^1.2.2:
+ version "1.3.2"
+ resolved "https://registry.npmmirror.com/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2"
+ integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.2"
+ process-nextick-args "^2.0.0"
+ stream-exhaust "^1.0.1"
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-settle@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b"
+ integrity sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==
+ dependencies:
+ async-done "^1.2.2"
+
+async@0.9.x:
+ version "0.9.2"
+ resolved "https://registry.npmmirror.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+ integrity sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+atob@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+autoprefixer@^10.4.4:
+ version "10.4.4"
+ resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.4.tgz#3e85a245b32da876a893d3ac2ea19f01e7ea5a1e"
+ integrity sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==
+ dependencies:
+ browserslist "^4.20.2"
+ caniuse-lite "^1.0.30001317"
+ fraction.js "^4.2.0"
+ normalize-range "^0.1.2"
+ picocolors "^1.0.0"
+ postcss-value-parser "^4.2.0"
+
+babel-jest@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444"
+ integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==
+ dependencies:
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/babel__core" "^7.1.14"
+ babel-plugin-istanbul "^6.1.1"
+ babel-preset-jest "^27.5.1"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ slash "^3.0.0"
+
+babel-plugin-dynamic-import-node@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+ integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
+ dependencies:
+ object.assign "^4.1.0"
+
+babel-plugin-istanbul@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
+ integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@istanbuljs/load-nyc-config" "^1.0.0"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-instrument "^5.0.4"
+ test-exclude "^6.0.0"
+
+babel-plugin-jest-hoist@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e"
+ integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==
+ dependencies:
+ "@babel/template" "^7.3.3"
+ "@babel/types" "^7.3.3"
+ "@types/babel__core" "^7.0.0"
+ "@types/babel__traverse" "^7.0.6"
+
+babel-plugin-polyfill-corejs2@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5"
+ integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==
+ dependencies:
+ "@babel/compat-data" "^7.13.11"
+ "@babel/helper-define-polyfill-provider" "^0.3.1"
+ semver "^6.1.1"
+
+babel-plugin-polyfill-corejs3@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72"
+ integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.3.1"
+ core-js-compat "^3.21.0"
+
+babel-plugin-polyfill-regenerator@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990"
+ integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.3.1"
+
+babel-preset-current-node-syntax@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
+ integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
+ dependencies:
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-bigint" "^7.8.3"
+ "@babel/plugin-syntax-class-properties" "^7.8.3"
+ "@babel/plugin-syntax-import-meta" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+ "@babel/plugin-syntax-top-level-await" "^7.8.3"
+
+babel-preset-jest@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81"
+ integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==
+ dependencies:
+ babel-plugin-jest-hoist "^27.5.1"
+ babel-preset-current-node-syntax "^1.0.0"
+
+bach@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880"
+ integrity sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==
+ dependencies:
+ arr-filter "^1.1.1"
+ arr-flatten "^1.0.1"
+ arr-map "^2.0.0"
+ array-each "^1.0.0"
+ array-initial "^1.0.0"
+ array-last "^1.1.1"
+ async-done "^1.2.2"
+ async-settle "^1.0.0"
+ now-and-later "^2.0.0"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+balloon-css@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/balloon-css/-/balloon-css-1.2.0.tgz#53d3fb4051264a278a58713bed6865845dbcaf4b"
+ integrity sha512-urXwkHgwp6GsXVF+it01485Z2Cj4pnW02ICnM0TemOlkKmCNnDLmyy+ZZiRXBpwldUXO+aRNr7Hdia4CBvXJ5A==
+
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.npmmirror.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+bcryptjs@^2.4.3:
+ version "2.4.3"
+ resolved "https://registry.npmmirror.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb"
+ integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bl@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+ integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@^3.0.2, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browser-process-hrtime@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+ integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
+
+browserslist@^4.17.5, browserslist@^4.19.1, browserslist@^4.20.2:
+ version "4.20.2"
+ resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88"
+ integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==
+ dependencies:
+ caniuse-lite "^1.0.30001317"
+ electron-to-chromium "^1.4.84"
+ escalade "^3.1.1"
+ node-releases "^2.0.2"
+ picocolors "^1.0.0"
+
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ dependencies:
+ node-int64 "^0.4.0"
+
+buffer-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe"
+ integrity sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==
+
+buffer-from@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+ integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+buffer@^5.5.0:
+ version "5.7.1"
+ resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
+builtin-modules@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887"
+ integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==
+
+cac@^6.7.12:
+ version "6.7.12"
+ resolved "https://registry.npmmirror.com/cac/-/cac-6.7.12.tgz#6fb5ea2ff50bd01490dbda497f4ae75a99415193"
+ integrity sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+call-bind@^1.0.0, call-bind@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+ integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+ dependencies:
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+ integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==
+
+camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+camelcase@^6.2.0:
+ version "6.3.0"
+ resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+ integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+caniuse-lite@^1.0.30001317:
+ version "1.0.30001325"
+ resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz#2b4ad19b77aa36f61f2eaf72e636d7481d55e606"
+ integrity sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==
+
+chalk@^2.0.0:
+ version "2.4.2"
+ resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+char-regex@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
+ integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+chart.js@^3.7.1:
+ version "3.7.1"
+ resolved "https://registry.npmmirror.com/chart.js/-/chart.js-3.7.1.tgz#0516f690c6a8680c6c707e31a4c1807a6f400ada"
+ integrity sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA==
+
+"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3:
+ version "3.5.3"
+ resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+ integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+chokidar@^2.0.0:
+ version "2.1.8"
+ resolved "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+ci-info@^3.2.0:
+ version "3.3.0"
+ resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2"
+ integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==
+
+cjs-module-lexer@^1.0.0:
+ version "1.2.2"
+ resolved "https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40"
+ integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-spinners@^2.5.0:
+ version "2.6.1"
+ resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d"
+ integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==
+
+cli-width@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
+ integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
+
+cliui@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wrap-ansi "^2.0.0"
+
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
+clone-buffer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
+ integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==
+
+clone-stats@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
+ integrity sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==
+
+clone@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+ integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
+
+clone@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
+ integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==
+
+cloneable-readable@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.npmmirror.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec"
+ integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==
+ dependencies:
+ inherits "^2.0.1"
+ process-nextick-args "^2.0.0"
+ readable-stream "^2.3.5"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.npmmirror.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==
+
+collect-v8-coverage@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
+ integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
+
+collection-map@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c"
+ integrity sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==
+ dependencies:
+ arr-map "^2.0.2"
+ for-own "^1.0.0"
+ make-iterator "^1.0.0"
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-support@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmmirror.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
+ integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
+
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@2, commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@7:
+ version "7.2.0"
+ resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+ integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
+commander@^8.0.0:
+ version "8.3.0"
+ resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
+ integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
+
+commander@^9.0.0:
+ version "9.1.0"
+ resolved "https://registry.npmmirror.com/commander/-/commander-9.1.0.tgz#a6b263b2327f2e188c6402c42623327909f2dbec"
+ integrity sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==
+
+common-tags@^1.8.0:
+ version "1.8.2"
+ resolved "https://registry.npmmirror.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
+ integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+concat-stream@^1.6.0:
+ version "1.6.2"
+ resolved "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+connect-history-api-fallback@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
+ integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
+
+convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
+ version "1.8.0"
+ resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
+ integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
+
+copy-props@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.npmmirror.com/copy-props/-/copy-props-2.0.5.tgz#03cf9ae328d4ebb36f8f1d804448a6af9ee3f2d2"
+ integrity sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==
+ dependencies:
+ each-props "^1.3.2"
+ is-plain-object "^5.0.0"
+
+core-js-compat@^3.20.2, core-js-compat@^3.21.0:
+ version "3.21.1"
+ resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82"
+ integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==
+ dependencies:
+ browserslist "^4.19.1"
+ semver "7.0.0"
+
+core-js-pure@^3.20.2:
+ version "3.21.1"
+ resolved "https://registry.npmmirror.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51"
+ integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==
+
+core-js@^3.21.0:
+ version "3.21.1"
+ resolved "https://registry.npmmirror.com/core-js/-/core-js-3.21.1.tgz#f2e0ddc1fc43da6f904706e8e955bc19d06a0d94"
+ integrity sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==
+
+core-util-is@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+ integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+cross-env@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
+ integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
+ dependencies:
+ cross-spawn "^7.0.1"
+
+cross-spawn@^7.0.1, cross-spawn@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+crypto-random-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
+ integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
+
+css-tree@~2.0.4:
+ version "2.0.4"
+ resolved "https://registry.npmmirror.com/css-tree/-/css-tree-2.0.4.tgz#be44314f17e9ac85fe894a5888941782e1123c29"
+ integrity sha512-b4IS9ZUMtGBiNjzYbcj9JhYbyei99R3ai2CSxlu8GQDnoPA/P+NU85hAm0eKDc/Zp660rpK6tFJQ2OSdacMHVg==
+ dependencies:
+ mdn-data "2.0.23"
+ source-map-js "^1.0.1"
+
+csso@^5.0.1:
+ version "5.0.3"
+ resolved "https://registry.npmmirror.com/csso/-/csso-5.0.3.tgz#10986ad2546e877b8b7bfbf930702239407af4d4"
+ integrity sha512-93gBHTJ6EQlLNhIX5Ho8VAJD2t2T2wg1xHDjbIUm/oQ7iFiSUTo9jSojiQK0pEZ3lMhYDrQO7Rcd70M68+VrtA==
+ dependencies:
+ css-tree "~2.0.4"
+
+cssom@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.npmmirror.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
+ integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
+
+cssom@~0.3.6:
+ version "0.3.8"
+ resolved "https://registry.npmmirror.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
+ integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+ dependencies:
+ cssom "~0.3.6"
+
+csstype@^2.6.8:
+ version "2.6.20"
+ resolved "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda"
+ integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
+
+d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0:
+ version "1.2.4"
+ resolved "https://registry.npmmirror.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
+ integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==
+
+"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3:
+ version "3.1.4"
+ resolved "https://registry.npmmirror.com/d3-array/-/d3-array-3.1.4.tgz#f7edb5bfcf6d939d0f6a561876ab281c466ea693"
+ integrity sha512-H8lM97Gr9+LAR4WVHETCMt6LlWtLJVMCKsz1ojors+/PvAs2QqdLa20BuYvU11/DU+nLF0GVWL5Rv3jSgo2KmA==
+ dependencies:
+ internmap "1 - 2"
+
+d3-axis@1:
+ version "1.0.12"
+ resolved "https://registry.npmmirror.com/d3-axis/-/d3-axis-1.0.12.tgz#cdf20ba210cfbb43795af33756886fb3638daac9"
+ integrity sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==
+
+d3-axis@3:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/d3-axis/-/d3-axis-3.0.0.tgz#c42a4a13e8131d637b745fc2973824cfeaf93322"
+ integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==
+
+d3-brush@1:
+ version "1.1.6"
+ resolved "https://registry.npmmirror.com/d3-brush/-/d3-brush-1.1.6.tgz#b0a22c7372cabec128bdddf9bddc058592f89e9b"
+ integrity sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==
+ dependencies:
+ d3-dispatch "1"
+ d3-drag "1"
+ d3-interpolate "1"
+ d3-selection "1"
+ d3-transition "1"
+
+d3-brush@3:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/d3-brush/-/d3-brush-3.0.0.tgz#6f767c4ed8dcb79de7ede3e1c0f89e63ef64d31c"
+ integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==
+ dependencies:
+ d3-dispatch "1 - 3"
+ d3-drag "2 - 3"
+ d3-interpolate "1 - 3"
+ d3-selection "3"
+ d3-transition "3"
+
+d3-chord@1:
+ version "1.0.6"
+ resolved "https://registry.npmmirror.com/d3-chord/-/d3-chord-1.0.6.tgz#309157e3f2db2c752f0280fedd35f2067ccbb15f"
+ integrity sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==
+ dependencies:
+ d3-array "1"
+ d3-path "1"
+
+d3-chord@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-chord/-/d3-chord-3.0.1.tgz#d156d61f485fce8327e6abf339cb41d8cbba6966"
+ integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==
+ dependencies:
+ d3-path "1 - 3"
+
+d3-collection@1:
+ version "1.0.7"
+ resolved "https://registry.npmmirror.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e"
+ integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==
+
+d3-color@1:
+ version "1.4.1"
+ resolved "https://registry.npmmirror.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a"
+ integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==
+
+"d3-color@1 - 3", d3-color@3:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2"
+ integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==
+
+d3-contour@1:
+ version "1.3.2"
+ resolved "https://registry.npmmirror.com/d3-contour/-/d3-contour-1.3.2.tgz#652aacd500d2264cb3423cee10db69f6f59bead3"
+ integrity sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==
+ dependencies:
+ d3-array "^1.1.1"
+
+d3-contour@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-contour/-/d3-contour-3.0.1.tgz#2c64255d43059599cd0dba8fe4cc3d51ccdd9bbd"
+ integrity sha512-0Oc4D0KyhwhM7ZL0RMnfGycLN7hxHB8CMmwZ3+H26PWAG0ozNuYG5hXSDNgmP1SgJkQMrlG6cP20HoaSbvcJTQ==
+ dependencies:
+ d3-array "2 - 3"
+
+d3-delaunay@6:
+ version "6.0.2"
+ resolved "https://registry.npmmirror.com/d3-delaunay/-/d3-delaunay-6.0.2.tgz#7fd3717ad0eade2fc9939f4260acfb503f984e92"
+ integrity sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==
+ dependencies:
+ delaunator "5"
+
+d3-dispatch@1:
+ version "1.0.6"
+ resolved "https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58"
+ integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==
+
+"d3-dispatch@1 - 3", d3-dispatch@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e"
+ integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==
+
+d3-drag@1:
+ version "1.2.5"
+ resolved "https://registry.npmmirror.com/d3-drag/-/d3-drag-1.2.5.tgz#2537f451acd39d31406677b7dc77c82f7d988f70"
+ integrity sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==
+ dependencies:
+ d3-dispatch "1"
+ d3-selection "1"
+
+"d3-drag@2 - 3", d3-drag@3:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba"
+ integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==
+ dependencies:
+ d3-dispatch "1 - 3"
+ d3-selection "3"
+
+d3-dsv@1:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/d3-dsv/-/d3-dsv-1.2.0.tgz#9d5f75c3a5f8abd611f74d3f5847b0d4338b885c"
+ integrity sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==
+ dependencies:
+ commander "2"
+ iconv-lite "0.4"
+ rw "1"
+
+"d3-dsv@1 - 3", d3-dsv@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73"
+ integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==
+ dependencies:
+ commander "7"
+ iconv-lite "0.6"
+ rw "1"
+
+d3-ease@1:
+ version "1.0.7"
+ resolved "https://registry.npmmirror.com/d3-ease/-/d3-ease-1.0.7.tgz#9a834890ef8b8ae8c558b2fe55bd57f5993b85e2"
+ integrity sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==
+
+"d3-ease@1 - 3", d3-ease@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4"
+ integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==
+
+d3-fetch@1:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/d3-fetch/-/d3-fetch-1.2.0.tgz#15ce2ecfc41b092b1db50abd2c552c2316cf7fc7"
+ integrity sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==
+ dependencies:
+ d3-dsv "1"
+
+d3-fetch@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-fetch/-/d3-fetch-3.0.1.tgz#83141bff9856a0edb5e38de89cdcfe63d0a60a22"
+ integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==
+ dependencies:
+ d3-dsv "1 - 3"
+
+d3-force@1:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/d3-force/-/d3-force-1.2.1.tgz#fd29a5d1ff181c9e7f0669e4bd72bdb0e914ec0b"
+ integrity sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==
+ dependencies:
+ d3-collection "1"
+ d3-dispatch "1"
+ d3-quadtree "1"
+ d3-timer "1"
+
+d3-force@3:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4"
+ integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==
+ dependencies:
+ d3-dispatch "1 - 3"
+ d3-quadtree "1 - 3"
+ d3-timer "1 - 3"
+
+d3-format@1:
+ version "1.4.5"
+ resolved "https://registry.npmmirror.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4"
+ integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==
+
+"d3-format@1 - 3", d3-format@3:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641"
+ integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==
+
+d3-geo@1:
+ version "1.12.1"
+ resolved "https://registry.npmmirror.com/d3-geo/-/d3-geo-1.12.1.tgz#7fc2ab7414b72e59fbcbd603e80d9adc029b035f"
+ integrity sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==
+ dependencies:
+ d3-array "1"
+
+d3-geo@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-geo/-/d3-geo-3.0.1.tgz#4f92362fd8685d93e3b1fae0fd97dc8980b1ed7e"
+ integrity sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==
+ dependencies:
+ d3-array "2.5.0 - 3"
+
+d3-hierarchy@1:
+ version "1.1.9"
+ resolved "https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83"
+ integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==
+
+d3-hierarchy@3:
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6"
+ integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==
+
+d3-interpolate@1:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987"
+ integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==
+ dependencies:
+ d3-color "1"
+
+"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d"
+ integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==
+ dependencies:
+ d3-color "1 - 3"
+
+d3-path@1:
+ version "1.0.9"
+ resolved "https://registry.npmmirror.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf"
+ integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==
+
+"d3-path@1 - 3", d3-path@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-path/-/d3-path-3.0.1.tgz#f09dec0aaffd770b7995f1a399152bf93052321e"
+ integrity sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==
+
+d3-polygon@1:
+ version "1.0.6"
+ resolved "https://registry.npmmirror.com/d3-polygon/-/d3-polygon-1.0.6.tgz#0bf8cb8180a6dc107f518ddf7975e12abbfbd38e"
+ integrity sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==
+
+d3-polygon@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-polygon/-/d3-polygon-3.0.1.tgz#0b45d3dd1c48a29c8e057e6135693ec80bf16398"
+ integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==
+
+d3-quadtree@1:
+ version "1.0.7"
+ resolved "https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz#ca8b84df7bb53763fe3c2f24bd435137f4e53135"
+ integrity sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==
+
+"d3-quadtree@1 - 3", d3-quadtree@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f"
+ integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==
+
+d3-random@1:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/d3-random/-/d3-random-1.1.2.tgz#2833be7c124360bf9e2d3fd4f33847cfe6cab291"
+ integrity sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==
+
+d3-random@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-random/-/d3-random-3.0.1.tgz#d4926378d333d9c0bfd1e6fa0194d30aebaa20f4"
+ integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==
+
+d3-scale-chromatic@1:
+ version "1.5.0"
+ resolved "https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz#54e333fc78212f439b14641fb55801dd81135a98"
+ integrity sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==
+ dependencies:
+ d3-color "1"
+ d3-interpolate "1"
+
+d3-scale-chromatic@3:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#15b4ceb8ca2bb0dcb6d1a641ee03d59c3b62376a"
+ integrity sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==
+ dependencies:
+ d3-color "1 - 3"
+ d3-interpolate "1 - 3"
+
+d3-scale@2:
+ version "2.2.2"
+ resolved "https://registry.npmmirror.com/d3-scale/-/d3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f"
+ integrity sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==
+ dependencies:
+ d3-array "^1.2.0"
+ d3-collection "1"
+ d3-format "1"
+ d3-interpolate "1"
+ d3-time "1"
+ d3-time-format "2"
+
+d3-scale@4:
+ version "4.0.2"
+ resolved "https://registry.npmmirror.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396"
+ integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==
+ dependencies:
+ d3-array "2.10.0 - 3"
+ d3-format "1 - 3"
+ d3-interpolate "1.2.0 - 3"
+ d3-time "2.1.1 - 3"
+ d3-time-format "2 - 4"
+
+d3-selection@1, d3-selection@^1.1.0:
+ version "1.4.2"
+ resolved "https://registry.npmmirror.com/d3-selection/-/d3-selection-1.4.2.tgz#dcaa49522c0dbf32d6c1858afc26b6094555bc5c"
+ integrity sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==
+
+"d3-selection@2 - 3", d3-selection@3:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31"
+ integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==
+
+d3-shape@1:
+ version "1.3.7"
+ resolved "https://registry.npmmirror.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7"
+ integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==
+ dependencies:
+ d3-path "1"
+
+d3-shape@3:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/d3-shape/-/d3-shape-3.1.0.tgz#c8a495652d83ea6f524e482fca57aa3f8bc32556"
+ integrity sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==
+ dependencies:
+ d3-path "1 - 3"
+
+d3-time-format@2:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/d3-time-format/-/d3-time-format-2.3.0.tgz#107bdc028667788a8924ba040faf1fbccd5a7850"
+ integrity sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==
+ dependencies:
+ d3-time "1"
+
+"d3-time-format@2 - 4", d3-time-format@4:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a"
+ integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==
+ dependencies:
+ d3-time "1 - 3"
+
+d3-time@1:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1"
+ integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==
+
+"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/d3-time/-/d3-time-3.0.0.tgz#65972cb98ae2d4954ef5c932e8704061335d4975"
+ integrity sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==
+ dependencies:
+ d3-array "2 - 3"
+
+d3-timer@1:
+ version "1.0.10"
+ resolved "https://registry.npmmirror.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5"
+ integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==
+
+"d3-timer@1 - 3", d3-timer@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0"
+ integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==
+
+d3-transition@1:
+ version "1.3.2"
+ resolved "https://registry.npmmirror.com/d3-transition/-/d3-transition-1.3.2.tgz#a98ef2151be8d8600543434c1ca80140ae23b398"
+ integrity sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==
+ dependencies:
+ d3-color "1"
+ d3-dispatch "1"
+ d3-ease "1"
+ d3-interpolate "1"
+ d3-selection "^1.1.0"
+ d3-timer "1"
+
+"d3-transition@2 - 3", d3-transition@3:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/d3-transition/-/d3-transition-3.0.1.tgz#6869fdde1448868077fdd5989200cb61b2a1645f"
+ integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==
+ dependencies:
+ d3-color "1 - 3"
+ d3-dispatch "1 - 3"
+ d3-ease "1 - 3"
+ d3-interpolate "1 - 3"
+ d3-timer "1 - 3"
+
+d3-voronoi@1:
+ version "1.1.4"
+ resolved "https://registry.npmmirror.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297"
+ integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==
+
+d3-zoom@1:
+ version "1.8.3"
+ resolved "https://registry.npmmirror.com/d3-zoom/-/d3-zoom-1.8.3.tgz#b6a3dbe738c7763121cd05b8a7795ffe17f4fc0a"
+ integrity sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==
+ dependencies:
+ d3-dispatch "1"
+ d3-drag "1"
+ d3-interpolate "1"
+ d3-selection "1"
+ d3-transition "1"
+
+d3-zoom@3:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3"
+ integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==
+ dependencies:
+ d3-dispatch "1 - 3"
+ d3-drag "2 - 3"
+ d3-interpolate "1 - 3"
+ d3-selection "2 - 3"
+ d3-transition "2 - 3"
+
+d3@^5.14:
+ version "5.16.0"
+ resolved "https://registry.npmmirror.com/d3/-/d3-5.16.0.tgz#9c5e8d3b56403c79d4ed42fbd62f6113f199c877"
+ integrity sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==
+ dependencies:
+ d3-array "1"
+ d3-axis "1"
+ d3-brush "1"
+ d3-chord "1"
+ d3-collection "1"
+ d3-color "1"
+ d3-contour "1"
+ d3-dispatch "1"
+ d3-drag "1"
+ d3-dsv "1"
+ d3-ease "1"
+ d3-fetch "1"
+ d3-force "1"
+ d3-format "1"
+ d3-geo "1"
+ d3-hierarchy "1"
+ d3-interpolate "1"
+ d3-path "1"
+ d3-polygon "1"
+ d3-quadtree "1"
+ d3-random "1"
+ d3-scale "2"
+ d3-scale-chromatic "1"
+ d3-selection "1"
+ d3-shape "1"
+ d3-time "1"
+ d3-time-format "2"
+ d3-timer "1"
+ d3-transition "1"
+ d3-voronoi "1"
+ d3-zoom "1"
+
+d3@^7.0.0:
+ version "7.4.2"
+ resolved "https://registry.npmmirror.com/d3/-/d3-7.4.2.tgz#c5d1001459dc9517bc774949f71b95e8735b3b4e"
+ integrity sha512-7VK+QBAWtNDbP2EU/ThkXgjd0u1MsXYYgCK2ElQ4BBWh0usE75tHVVeYx47m2pqQEy4isYKAA0tAFSln0l+9EQ==
+ dependencies:
+ d3-array "3"
+ d3-axis "3"
+ d3-brush "3"
+ d3-chord "3"
+ d3-color "3"
+ d3-contour "3"
+ d3-delaunay "6"
+ d3-dispatch "3"
+ d3-drag "3"
+ d3-dsv "3"
+ d3-ease "3"
+ d3-fetch "3"
+ d3-force "3"
+ d3-format "3"
+ d3-geo "3"
+ d3-hierarchy "3"
+ d3-interpolate "3"
+ d3-path "3"
+ d3-polygon "3"
+ d3-quadtree "3"
+ d3-random "3"
+ d3-scale "4"
+ d3-scale-chromatic "3"
+ d3-selection "3"
+ d3-shape "3"
+ d3-time "3"
+ d3-time-format "4"
+ d3-timer "3"
+ d3-transition "3"
+ d3-zoom "3"
+
+d@1, d@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+ integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
+ dependencies:
+ es5-ext "^0.10.50"
+ type "^1.0.1"
+
+dagre-d3@^0.6.4:
+ version "0.6.4"
+ resolved "https://registry.npmmirror.com/dagre-d3/-/dagre-d3-0.6.4.tgz#0728d5ce7f177ca2337df141ceb60fbe6eeb7b29"
+ integrity sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==
+ dependencies:
+ d3 "^5.14"
+ dagre "^0.8.5"
+ graphlib "^2.1.8"
+ lodash "^4.17.15"
+
+dagre@^0.8.5:
+ version "0.8.5"
+ resolved "https://registry.npmmirror.com/dagre/-/dagre-0.8.5.tgz#ba30b0055dac12b6c1fcc247817442777d06afee"
+ integrity sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==
+ dependencies:
+ graphlib "^2.1.8"
+ lodash "^4.17.15"
+
+data-urls@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
+ integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
+ dependencies:
+ abab "^2.0.3"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^8.0.0"
+
+dayjs@^1.11.0:
+ version "1.11.0"
+ resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.0.tgz#009bf7ef2e2ea2d5db2e6583d2d39a4b5061e805"
+ integrity sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==
+
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+debug@^2.2.0, debug@^2.3.3:
+ version "2.6.9"
+ resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+decamelize@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
+
+decimal.js@^10.2.1:
+ version "10.3.1"
+ resolved "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"
+ integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==
+
+deep-is@~0.1.3:
+ version "0.1.4"
+ resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+deepmerge@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
+ integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+
+default-compare@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f"
+ integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==
+ dependencies:
+ kind-of "^5.0.2"
+
+default-resolution@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684"
+ integrity sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==
+
+defaults@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+ integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==
+ dependencies:
+ clone "^1.0.2"
+
+define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+delaunator@5:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/delaunator/-/delaunator-5.0.0.tgz#60f052b28bd91c9b4566850ebf7756efe821d81b"
+ integrity sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==
+ dependencies:
+ robust-predicates "^3.0.0"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==
+
+detect-newline@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
+ integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
+
+diff-sequences@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
+ integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+domexception@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
+ integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
+ dependencies:
+ webidl-conversions "^5.0.0"
+
+dompurify@2.3.5:
+ version "2.3.5"
+ resolved "https://registry.npmmirror.com/dompurify/-/dompurify-2.3.5.tgz#c83ed5a3ae5ce23e52efe654ea052ffb358dd7e3"
+ integrity sha512-kD+f8qEaa42+mjdOpKeztu9Mfx5bv9gVLO6K9jRx4uGvh6Wv06Srn4jr1wPNY2OOUGGSKHNFN+A8MA3v0E0QAQ==
+
+duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+each-props@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.npmmirror.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333"
+ integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==
+ dependencies:
+ is-plain-object "^2.0.1"
+ object.defaults "^1.1.0"
+
+ejs@^3.1.6:
+ version "3.1.6"
+ resolved "https://registry.npmmirror.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a"
+ integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==
+ dependencies:
+ jake "^10.6.1"
+
+electron-to-chromium@^1.4.84:
+ version "1.4.105"
+ resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.105.tgz#30de5e4ba020140b698539b2d366cd9c3a337ec7"
+ integrity sha512-6w2bmoQBSUgCQjbSjiVv9IS1lXwW2aQABlUJ1vlE8Vci/sVXxUNQrHLQa5N1ioc82Py+a36DlUA5KvrAlHMMeA==
+
+emittery@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.npmmirror.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860"
+ integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+entities@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
+ integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
+
+envinfo@^7.8.1:
+ version "7.8.1"
+ resolved "https://registry.npmmirror.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
+ integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.19.1:
+ version "1.19.2"
+ resolved "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f"
+ integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==
+ dependencies:
+ call-bind "^1.0.2"
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ get-intrinsic "^1.1.1"
+ get-symbol-description "^1.0.0"
+ has "^1.0.3"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.3"
+ is-callable "^1.2.4"
+ is-negative-zero "^2.0.2"
+ is-regex "^1.1.4"
+ is-shared-array-buffer "^1.0.1"
+ is-string "^1.0.7"
+ is-weakref "^1.0.2"
+ object-inspect "^1.12.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.2"
+ string.prototype.trimend "^1.0.4"
+ string.prototype.trimstart "^1.0.4"
+ unbox-primitive "^1.0.1"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50:
+ version "0.10.59"
+ resolved "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.59.tgz#71038939730eb6f4f165f1421308fb60be363bc6"
+ integrity sha512-cOgyhW0tIJyQY1Kfw6Kr0viu9ZlUctVchRMZ7R0HiH3dxTSp5zJDLecwxUqPUrGKMsgBI1wd1FL+d9Jxfi4cLw==
+ dependencies:
+ es6-iterator "^2.0.3"
+ es6-symbol "^3.1.3"
+ next-tick "^1.1.0"
+
+es6-iterator@^2.0.1, es6-iterator@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+ integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==
+ dependencies:
+ d "1"
+ es5-ext "^0.10.35"
+ es6-symbol "^3.1.1"
+
+es6-symbol@^3.1.1, es6-symbol@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
+ integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
+ dependencies:
+ d "^1.0.1"
+ ext "^1.1.2"
+
+es6-weak-map@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
+ integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
+ dependencies:
+ d "1"
+ es5-ext "^0.10.46"
+ es6-iterator "^2.0.3"
+ es6-symbol "^3.1.1"
+
+esbuild-android-64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.34.tgz#46bc4327dd0809937912346244eaffdb9bfc980d"
+ integrity sha512-XfxcfJqmMYsT/LXqrptzFxmaR3GWzXHDLdFNIhm6S00zPaQF1TBBWm+9t0RZ6LRR7iwH57DPjaOeW20vMqI4Yw==
+
+esbuild-android-arm64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.34.tgz#a3f7e1ad84b8a7dcb39b5e132768b56ee7133656"
+ integrity sha512-T02+NXTmSRL1Mc6puz+R9CB54rSPICkXKq6+tw8B6vxZFnCPzbJxgwIX4kcluz9p8nYBjF3+lSilTGWb7+Xgew==
+
+esbuild-darwin-64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.34.tgz#a0e4ab7a0cddf76761f1fb5d6bf552a376beb16e"
+ integrity sha512-pLRip2Bh4Ng7Bf6AMgCrSp3pPe/qZyf11h5Qo2mOfJqLWzSVjxrXW+CFRJfrOVP7TCnh/gmZSM2AFdCPB72vtw==
+
+esbuild-darwin-arm64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.34.tgz#54c35461f82f83a7f5169d9a6a54201798977b07"
+ integrity sha512-vpidSJEBxx6lf1NWgXC+DCmGqesJuZ5Y8aQVVsaoO4i8tRXbXb0whChRvop/zd3nfNM4dIl5EXAky0knRX5I6w==
+
+esbuild-freebsd-64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.34.tgz#aebb50248f5874d04ffeab2db8ee1ed6037e2654"
+ integrity sha512-m0HBjePhe0hAQJgtMRMNV9kMgIyV4/qSnzPx42kRMQBcPhgjAq1JRu4Il26czC+9FgpMbFkUktb07f/Lwnc6CA==
+
+esbuild-freebsd-arm64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.34.tgz#09bef288e29f18b38b0c70a9827b6ee718e36c7f"
+ integrity sha512-cpRc2B94L1KvMPPYB4D6G39jLqpKlD3noAMY4/e86iXXXkhUYJJEtTuyNFTa9JRpWM0xCAp4mxjHjoIiLuoCLA==
+
+esbuild-linux-32@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.34.tgz#67790061758e008e919e65bbc34549f55dadaca7"
+ integrity sha512-8nQaEaoW7MH/K/RlozJa+lE1ejHIr8fuPIHhc513UebRav7HtXgQvxHQ6VZRUkWtep23M6dd7UqhwO1tMOfzQQ==
+
+esbuild-linux-64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.34.tgz#b9b19d4ac07e37495dd2508ec843418aa71c98d6"
+ integrity sha512-Y3of4qQoLLlAgf042MlrY1P+7PnN9zWj8nVtw9XQG5hcLOZLz7IKpU35oeu7n4wvyaZHwvQqDJ93gRLqdJekcQ==
+
+esbuild-linux-arm64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.34.tgz#fd84b11a6ccfe9e83e00d0c45890e9fb3a7248c1"
+ integrity sha512-IlWaGtj9ir7+Nrume1DGcyzBDlK8GcnJq0ANKwcI9pVw8tqr+6GD0eqyF9SF1mR8UmAp+odrx1H5NdR2cHdFHA==
+
+esbuild-linux-arm@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.34.tgz#c89d4714b05265a315a97c8933508cc73950e683"
+ integrity sha512-9lpq1NcJqssAF7alCO6zL3gvBVVt/lKw4oetUM7OgNnRX0OWpB+ZIO9FwCrSj/dMdmgDhPLf+119zB8QxSMmAg==
+
+esbuild-linux-mips64le@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.34.tgz#d60752c3fb1260dd0737532af2de2a9521656456"
+ integrity sha512-k3or+01Rska1AjUyNjA4buEwB51eyN/xPQAoOx1CjzAQC3l8rpjUDw55kXyL63O/1MUi4ISvtNtl8gLwdyEcxw==
+
+esbuild-linux-ppc64le@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.34.tgz#f4c6229269956564f0c6f9825f5e717c2cfc22b3"
+ integrity sha512-+qxb8M9FfM2CJaVU7GgYpJOHM1ngQOx+/VrtBjb4C8oVqaPcESCeg2anjl+HRZy8VpYc71q/iBYausPPbJ+Keg==
+
+esbuild-linux-riscv64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.34.tgz#549bd18a9eba3135b67f7b742730b5343a1be35d"
+ integrity sha512-Y717ltBdQ5j5sZIHdy1DV9kieo0wMip0dCmVSTceowCPYSn1Cg33Kd6981+F/3b9FDMzNWldZFOBRILViENZSA==
+
+esbuild-linux-s390x@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.34.tgz#2a6b577c437f94c2b37623c755ff5215a05c12bc"
+ integrity sha512-bDDgYO4LhL4+zPs+WcBkXph+AQoPcQRTv18FzZS0WhjfH8TZx2QqlVPGhmhZ6WidrY+jKthUqO6UhGyIb4MpmA==
+
+esbuild-netbsd-64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.34.tgz#7f0b73229157975eb35597207723df52ba21722a"
+ integrity sha512-cfaFGXdRt0+vHsjNPyF0POM4BVSHPSbhLPe8mppDc7GDDxjIl08mV1Zou14oDWMp/XZMjYN1kWYRSfftiD0vvQ==
+
+esbuild-openbsd-64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.34.tgz#b9bc44b4f70031fb01b173b279daeffc4d4f54b7"
+ integrity sha512-vmy9DxXVnRiI14s8GKuYBtess+EVcDALkbpTqd5jw4XITutIzyB7n4x0Tj5utAkKsgZJB22lLWGekr0ABnSLow==
+
+esbuild-sunos-64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.34.tgz#512dd6085ac1a0dccc20c5f932f16a618bea409c"
+ integrity sha512-eNPVatNET1F7tRMhii7goL/eptfxc0ALRjrj9SPFNqp0zmxrehBFD6BaP3R4LjMn6DbMO0jOAnTLFKr8NqcJAA==
+
+esbuild-windows-32@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.34.tgz#3ff1afd5cac08050c7c7140a59e343b06f6b037c"
+ integrity sha512-EFhpXyHEcnqWYe2rAHFd8dRw8wkrd9U+9oqcyoEL84GbanAYjiiIjBZsnR8kl0sCQ5w6bLpk7vCEIA2VS32Vcg==
+
+esbuild-windows-64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.34.tgz#66f7b43d2a0b132f6748dfa3edac4fc939a99be0"
+ integrity sha512-a8fbl8Ky7PxNEjf1aJmtxdDZj32/hC7S1OcA2ckEpCJRTjiKslI9vAdPpSjrKIWhws4Galpaawy0nB7fjHYf5Q==
+
+esbuild-windows-arm64@0.14.34:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.34.tgz#b74a6395b7b7e53dba70b71b39542afd83352473"
+ integrity sha512-EYvmKbSa2B3sPnpC28UEu9jBK5atGV4BaVRE7CYGUci2Hlz4AvtV/LML+TcDMT6gBgibnN2gcltWclab3UutMg==
+
+esbuild@^0.14.27, esbuild@^0.14.29:
+ version "0.14.34"
+ resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.34.tgz#3610056f0a57bcfd0b63ddaafdb2e3bef1cf96e4"
+ integrity sha512-QIWdPT/gFF6hCaf4m7kP0cJ+JIuFkdHibI7vVFvu3eJS1HpVmYHWDulyN5WXwbRA0SX/7ZDaJ/1DH8SdY9xOJg==
+ optionalDependencies:
+ esbuild-android-64 "0.14.34"
+ esbuild-android-arm64 "0.14.34"
+ esbuild-darwin-64 "0.14.34"
+ esbuild-darwin-arm64 "0.14.34"
+ esbuild-freebsd-64 "0.14.34"
+ esbuild-freebsd-arm64 "0.14.34"
+ esbuild-linux-32 "0.14.34"
+ esbuild-linux-64 "0.14.34"
+ esbuild-linux-arm "0.14.34"
+ esbuild-linux-arm64 "0.14.34"
+ esbuild-linux-mips64le "0.14.34"
+ esbuild-linux-ppc64le "0.14.34"
+ esbuild-linux-riscv64 "0.14.34"
+ esbuild-linux-s390x "0.14.34"
+ esbuild-netbsd-64 "0.14.34"
+ esbuild-openbsd-64 "0.14.34"
+ esbuild-sunos-64 "0.14.34"
+ esbuild-windows-32 "0.14.34"
+ esbuild-windows-64 "0.14.34"
+ esbuild-windows-arm64 "0.14.34"
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
+escodegen@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
+ integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^5.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+esprima@^4.0.0, esprima@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+estraverse@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+estree-walker@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"
+ integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==
+
+estree-walker@^2.0.1, estree-walker@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+ integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+eve-raphael@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.npmmirror.com/eve-raphael/-/eve-raphael-0.5.0.tgz#17c754b792beef3fa6684d79cf5a47c63c4cda30"
+ integrity sha512-jrxnPsCGqng1UZuEp9DecX/AuSyAszATSjf4oEcRxvfxa1Oux4KkIPKBAAWWnpdwfARtr+Q0o9aPYWjsROD7ug==
+
+execa@^5.0.0, execa@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+ integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+ dependencies:
+ cross-spawn "^7.0.3"
+ get-stream "^6.0.0"
+ human-signals "^2.1.0"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.1"
+ onetime "^5.1.2"
+ signal-exit "^3.0.3"
+ strip-final-newline "^2.0.0"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+expect@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74"
+ integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ jest-get-type "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+
+ext@^1.1.2:
+ version "1.6.0"
+ resolved "https://registry.npmmirror.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52"
+ integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==
+ dependencies:
+ type "^2.5.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+fancy-log@^1.3.2:
+ version "1.3.3"
+ resolved "https://registry.npmmirror.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7"
+ integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==
+ dependencies:
+ ansi-gray "^0.1.1"
+ color-support "^1.1.3"
+ parse-node-version "^1.0.0"
+ time-stamp "^1.0.0"
+
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.2.11, fast-glob@^3.2.9:
+ version "3.2.11"
+ resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
+ integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz#e6a754cc8f15e58987aa9cbd27af66fd6f4e5af9"
+ integrity sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==
+
+fast-levenshtein@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastq@^1.6.0:
+ version "1.13.0"
+ resolved "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
+ integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
+ dependencies:
+ reusify "^1.0.4"
+
+fb-watchman@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
+ dependencies:
+ bser "2.1.1"
+
+figures@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+ integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+filelist@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b"
+ integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==
+ dependencies:
+ minimatch "^3.0.4"
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^4.0.0, find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+findup-sync@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc"
+ integrity sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^3.1.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
+findup-sync@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
+fined@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b"
+ integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==
+ dependencies:
+ expand-tilde "^2.0.2"
+ is-plain-object "^2.0.3"
+ object.defaults "^1.1.0"
+ object.pick "^1.2.0"
+ parse-filepath "^1.0.1"
+
+flagged-respawn@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41"
+ integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==
+
+flowchart.js@^1.17.1:
+ version "1.17.1"
+ resolved "https://registry.npmmirror.com/flowchart.js/-/flowchart.js-1.17.1.tgz#3908ce3778a44b0af5cba1ab31cb61e12dc384a1"
+ integrity sha512-zphTaxdyqvHHu+8Cdf6HvamhArXpq9SyNe1zQ61maCIfTenaj3cMvjS1e/0gfPj7QTLTx3HroSzVqDXpL8naoQ==
+ dependencies:
+ raphael "2.3.0"
+
+flush-write-stream@^1.0.2:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
+for-in@^1.0.1, for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==
+
+for-own@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
+ integrity sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==
+ dependencies:
+ for-in "^1.0.1"
+
+form-data@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
+ integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+fraction.js@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
+ integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==
+ dependencies:
+ map-cache "^0.2.2"
+
+fs-extra@^10.0.1:
+ version "10.0.1"
+ resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8"
+ integrity sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-extra@^9.0.1:
+ version "9.1.0"
+ resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+ integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-mkdirp-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb"
+ integrity sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ through2 "^2.0.3"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@^1.2.7:
+ version "1.2.13"
+ resolved "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
+ integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.12.1"
+
+fsevents@^2.3.2, fsevents@~2.3.2:
+ version "2.3.2"
+ resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+ integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+ integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+
+get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
+ integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+ integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
+get-package-type@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
+ integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
+get-stream@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+ integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
+get-symbol-description@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
+ integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.1"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==
+
+giscus@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/giscus/-/giscus-1.0.1.tgz#e84824aa8d00db3a9fc054f41a05098b4fafb1a9"
+ integrity sha512-iUiGioxlkcSvlB7YDRfA3Cp0+bEArhgtPLAEEmXXwgLHmBn6KwiMPW6qHS6tdLohX5XqdwegYoFjA4GIAN8mZg==
+ dependencies:
+ lit "^2.2.1"
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-stream@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.npmmirror.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4"
+ integrity sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==
+ dependencies:
+ extend "^3.0.0"
+ glob "^7.1.1"
+ glob-parent "^3.1.0"
+ is-negated-glob "^1.0.0"
+ ordered-read-streams "^1.0.0"
+ pumpify "^1.3.5"
+ readable-stream "^2.1.5"
+ remove-trailing-separator "^1.0.1"
+ to-absolute-glob "^2.0.0"
+ unique-stream "^2.0.2"
+
+glob-watcher@^5.0.3:
+ version "5.0.5"
+ resolved "https://registry.npmmirror.com/glob-watcher/-/glob-watcher-5.0.5.tgz#aa6bce648332924d9a8489be41e3e5c52d4186dc"
+ integrity sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==
+ dependencies:
+ anymatch "^2.0.0"
+ async-done "^1.2.0"
+ chokidar "^2.0.0"
+ is-negated-glob "^1.0.0"
+ just-debounce "^1.0.0"
+ normalize-path "^3.0.0"
+ object.defaults "^1.1.0"
+
+glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+ version "7.2.0"
+ resolved "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
+ integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globby@^11.0.4:
+ version "11.1.0"
+ resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+ integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.9"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^3.0.0"
+
+glogg@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f"
+ integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==
+ dependencies:
+ sparkles "^1.0.0"
+
+graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9:
+ version "4.2.10"
+ resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
+ integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
+
+graphlib@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.npmmirror.com/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da"
+ integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==
+ dependencies:
+ lodash "^4.17.15"
+
+gray-matter@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.npmmirror.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798"
+ integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==
+ dependencies:
+ js-yaml "^3.13.1"
+ kind-of "^6.0.2"
+ section-matter "^1.0.0"
+ strip-bom-string "^1.0.0"
+
+gulp-cli@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/gulp-cli/-/gulp-cli-2.3.0.tgz#ec0d380e29e52aa45e47977f0d32e18fd161122f"
+ integrity sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==
+ dependencies:
+ ansi-colors "^1.0.1"
+ archy "^1.0.0"
+ array-sort "^1.0.0"
+ color-support "^1.1.3"
+ concat-stream "^1.6.0"
+ copy-props "^2.0.1"
+ fancy-log "^1.3.2"
+ gulplog "^1.0.0"
+ interpret "^1.4.0"
+ isobject "^3.0.1"
+ liftoff "^3.1.0"
+ matchdep "^2.0.0"
+ mute-stdout "^1.0.0"
+ pretty-hrtime "^1.0.0"
+ replace-homedir "^1.0.0"
+ semver-greatest-satisfied-range "^1.1.0"
+ v8flags "^3.2.0"
+ yargs "^7.1.0"
+
+gulp@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.npmmirror.com/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa"
+ integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==
+ dependencies:
+ glob-watcher "^5.0.3"
+ gulp-cli "^2.2.0"
+ undertaker "^1.2.1"
+ vinyl-fs "^3.0.0"
+
+gulplog@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5"
+ integrity sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==
+ dependencies:
+ glogg "^1.0.0"
+
+has-bigints@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
+ integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+ integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-tostringtag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
+ integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+ dependencies:
+ has-symbols "^1.0.2"
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-sum@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"
+ integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4:
+ version "2.8.9"
+ resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
+ integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
+
+html-encoding-sniffer@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
+ integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
+ dependencies:
+ whatwg-encoding "^1.0.5"
+
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+http-proxy-agent@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
+ integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
+ dependencies:
+ "@tootallnate/once" "1"
+ agent-base "6"
+ debug "4"
+
+https-proxy-agent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
+ integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
+human-signals@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+ integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
+iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24:
+ version "0.4.24"
+ resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+iconv-lite@0.6:
+ version "0.6.3"
+ resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
+idb@^6.1.4:
+ version "6.1.5"
+ resolved "https://registry.npmmirror.com/idb/-/idb-6.1.5.tgz#dbc53e7adf1ac7c59f9b2bf56e00b4ea4fce8c7b"
+ integrity sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==
+
+ieee754@^1.1.13:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+ignore@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
+ integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
+
+immutable@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23"
+ integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==
+
+import-local@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
+ integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
+ dependencies:
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@^1.3.4:
+ version "1.3.8"
+ resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+inquirer@^8.2.2:
+ version "8.2.2"
+ resolved "https://registry.npmmirror.com/inquirer/-/inquirer-8.2.2.tgz#1310517a87a0814d25336c78a20b44c3d9b7629d"
+ integrity sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^4.1.1"
+ cli-cursor "^3.1.0"
+ cli-width "^3.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.21"
+ mute-stream "0.0.8"
+ ora "^5.4.1"
+ run-async "^2.4.0"
+ rxjs "^7.5.5"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+ through "^2.3.6"
+
+internal-slot@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
+ integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
+ dependencies:
+ get-intrinsic "^1.1.0"
+ has "^1.0.3"
+ side-channel "^1.0.4"
+
+"internmap@1 - 2":
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009"
+ integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==
+
+interpret@^1.0.0, interpret@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+ integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+ integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==
+
+is-absolute@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576"
+ integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==
+ dependencies:
+ is-relative "^1.0.0"
+ is-windows "^1.0.1"
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-bigint@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+ integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+ dependencies:
+ has-bigints "^1.0.1"
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-boolean-object@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+ integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.4, is-callable@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
+ integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
+
+is-core-module@^2.8.1:
+ version "2.8.1"
+ resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
+ integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
+ dependencies:
+ has "^1.0.3"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
+ integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-interactive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
+ integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
+
+is-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
+ integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==
+
+is-negated-glob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2"
+ integrity sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==
+
+is-negative-zero@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+ integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
+is-number-object@^1.0.4:
+ version "1.0.7"
+ resolved "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
+ integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+ integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==
+
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-plain-object@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
+ integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
+
+is-potential-custom-element-name@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
+ integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
+
+is-reference@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7"
+ integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==
+ dependencies:
+ "@types/estree" "*"
+
+is-regex@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+ integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==
+
+is-relative@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
+ integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==
+ dependencies:
+ is-unc-path "^1.0.0"
+
+is-shared-array-buffer@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+ integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-stream@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+ integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
+is-string@^1.0.5, is-string@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+ integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-symbol@^1.0.2, is-symbol@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+ integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+ dependencies:
+ has-symbols "^1.0.2"
+
+is-typedarray@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
+
+is-unc-path@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
+ integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==
+ dependencies:
+ unc-path-regex "^0.1.2"
+
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
+is-utf8@^0.2.0, is-utf8@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.npmmirror.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==
+
+is-valid-glob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa"
+ integrity sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==
+
+is-weakref@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+ integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-windows@^1.0.1, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+isarray@1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
+ integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
+
+istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a"
+ integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==
+ dependencies:
+ "@babel/core" "^7.12.3"
+ "@babel/parser" "^7.14.7"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-coverage "^3.2.0"
+ semver "^6.3.0"
+
+istanbul-lib-report@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
+ integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
+ dependencies:
+ istanbul-lib-coverage "^3.0.0"
+ make-dir "^3.0.0"
+ supports-color "^7.1.0"
+
+istanbul-lib-source-maps@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.npmmirror.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
+ integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^3.0.0"
+ source-map "^0.6.1"
+
+istanbul-reports@^3.1.3:
+ version "3.1.4"
+ resolved "https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c"
+ integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==
+ dependencies:
+ html-escaper "^2.0.0"
+ istanbul-lib-report "^3.0.0"
+
+jake@^10.6.1:
+ version "10.8.4"
+ resolved "https://registry.npmmirror.com/jake/-/jake-10.8.4.tgz#f6a8b7bf90c6306f768aa82bb7b98bf4ca15e84a"
+ integrity sha512-MtWeTkl1qGsWUtbl/Jsca/8xSoK3x0UmS82sNbjqxxG/de/M/3b1DntdjHgPMC50enlTNwXOCRqPXLLt5cCfZA==
+ dependencies:
+ async "0.9.x"
+ chalk "^4.0.2"
+ filelist "^1.0.1"
+ minimatch "^3.0.4"
+
+jest-changed-files@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5"
+ integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ execa "^5.0.0"
+ throat "^6.0.1"
+
+jest-circus@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc"
+ integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ co "^4.6.0"
+ dedent "^0.7.0"
+ expect "^27.5.1"
+ is-generator-fn "^2.0.0"
+ jest-each "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ pretty-format "^27.5.1"
+ slash "^3.0.0"
+ stack-utils "^2.0.3"
+ throat "^6.0.1"
+
+jest-cli@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145"
+ integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==
+ dependencies:
+ "@jest/core" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.9"
+ import-local "^3.0.2"
+ jest-config "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ prompts "^2.0.1"
+ yargs "^16.2.0"
+
+jest-config@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41"
+ integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==
+ dependencies:
+ "@babel/core" "^7.8.0"
+ "@jest/test-sequencer" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ babel-jest "^27.5.1"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ deepmerge "^4.2.2"
+ glob "^7.1.1"
+ graceful-fs "^4.2.9"
+ jest-circus "^27.5.1"
+ jest-environment-jsdom "^27.5.1"
+ jest-environment-node "^27.5.1"
+ jest-get-type "^27.5.1"
+ jest-jasmine2 "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-runner "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ micromatch "^4.0.4"
+ parse-json "^5.2.0"
+ pretty-format "^27.5.1"
+ slash "^3.0.0"
+ strip-json-comments "^3.1.1"
+
+jest-diff@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def"
+ integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==
+ dependencies:
+ chalk "^4.0.0"
+ diff-sequences "^27.5.1"
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-docblock@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0"
+ integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==
+ dependencies:
+ detect-newline "^3.0.0"
+
+jest-each@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e"
+ integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ jest-get-type "^27.5.1"
+ jest-util "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-environment-jsdom@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546"
+ integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ jest-mock "^27.5.1"
+ jest-util "^27.5.1"
+ jsdom "^16.6.0"
+
+jest-environment-node@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e"
+ integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ jest-mock "^27.5.1"
+ jest-util "^27.5.1"
+
+jest-get-type@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1"
+ integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==
+
+jest-haste-map@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f"
+ integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@types/graceful-fs" "^4.1.2"
+ "@types/node" "*"
+ anymatch "^3.0.3"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.2.9"
+ jest-regex-util "^27.5.1"
+ jest-serializer "^27.5.1"
+ jest-util "^27.5.1"
+ jest-worker "^27.5.1"
+ micromatch "^4.0.4"
+ walker "^1.0.7"
+ optionalDependencies:
+ fsevents "^2.3.2"
+
+jest-jasmine2@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4"
+ integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/source-map" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ co "^4.6.0"
+ expect "^27.5.1"
+ is-generator-fn "^2.0.0"
+ jest-each "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ pretty-format "^27.5.1"
+ throat "^6.0.1"
+
+jest-leak-detector@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8"
+ integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==
+ dependencies:
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-matcher-utils@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab"
+ integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==
+ dependencies:
+ chalk "^4.0.0"
+ jest-diff "^27.5.1"
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-message-util@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf"
+ integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@jest/types" "^27.5.1"
+ "@types/stack-utils" "^2.0.0"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ micromatch "^4.0.4"
+ pretty-format "^27.5.1"
+ slash "^3.0.0"
+ stack-utils "^2.0.3"
+
+jest-mock@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6"
+ integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+
+jest-pnp-resolver@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.npmmirror.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"
+ integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==
+
+jest-regex-util@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95"
+ integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==
+
+jest-resolve-dependencies@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8"
+ integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-snapshot "^27.5.1"
+
+jest-resolve@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384"
+ integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^27.5.1"
+ jest-pnp-resolver "^1.2.2"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ resolve "^1.20.0"
+ resolve.exports "^1.1.0"
+ slash "^3.0.0"
+
+jest-runner@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5"
+ integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==
+ dependencies:
+ "@jest/console" "^27.5.1"
+ "@jest/environment" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ emittery "^0.8.1"
+ graceful-fs "^4.2.9"
+ jest-docblock "^27.5.1"
+ jest-environment-jsdom "^27.5.1"
+ jest-environment-node "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-leak-detector "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-util "^27.5.1"
+ jest-worker "^27.5.1"
+ source-map-support "^0.5.6"
+ throat "^6.0.1"
+
+jest-runtime@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af"
+ integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/globals" "^27.5.1"
+ "@jest/source-map" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ cjs-module-lexer "^1.0.0"
+ collect-v8-coverage "^1.0.0"
+ execa "^5.0.0"
+ glob "^7.1.3"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-mock "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ slash "^3.0.0"
+ strip-bom "^4.0.0"
+
+jest-serializer@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64"
+ integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==
+ dependencies:
+ "@types/node" "*"
+ graceful-fs "^4.2.9"
+
+jest-snapshot@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1"
+ integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==
+ dependencies:
+ "@babel/core" "^7.7.2"
+ "@babel/generator" "^7.7.2"
+ "@babel/plugin-syntax-typescript" "^7.7.2"
+ "@babel/traverse" "^7.7.2"
+ "@babel/types" "^7.0.0"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/babel__traverse" "^7.0.4"
+ "@types/prettier" "^2.1.5"
+ babel-preset-current-node-syntax "^1.0.0"
+ chalk "^4.0.0"
+ expect "^27.5.1"
+ graceful-fs "^4.2.9"
+ jest-diff "^27.5.1"
+ jest-get-type "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-util "^27.5.1"
+ natural-compare "^1.4.0"
+ pretty-format "^27.5.1"
+ semver "^7.3.2"
+
+jest-util@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9"
+ integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ graceful-fs "^4.2.9"
+ picomatch "^2.2.3"
+
+jest-validate@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067"
+ integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ camelcase "^6.2.0"
+ chalk "^4.0.0"
+ jest-get-type "^27.5.1"
+ leven "^3.1.0"
+ pretty-format "^27.5.1"
+
+jest-watcher@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2"
+ integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==
+ dependencies:
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ jest-util "^27.5.1"
+ string-length "^4.0.1"
+
+jest-worker@^26.2.1:
+ version "26.6.2"
+ resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
+ integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^7.0.0"
+
+jest-worker@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+ integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^8.0.0"
+
+jest@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc"
+ integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==
+ dependencies:
+ "@jest/core" "^27.5.1"
+ import-local "^3.0.2"
+ jest-cli "^27.5.1"
+
+js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+ version "3.14.1"
+ resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsdom@^16.6.0:
+ version "16.7.0"
+ resolved "https://registry.npmmirror.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
+ integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==
+ dependencies:
+ abab "^2.0.5"
+ acorn "^8.2.4"
+ acorn-globals "^6.0.0"
+ cssom "^0.4.4"
+ cssstyle "^2.3.0"
+ data-urls "^2.0.0"
+ decimal.js "^10.2.1"
+ domexception "^2.0.1"
+ escodegen "^2.0.0"
+ form-data "^3.0.0"
+ html-encoding-sniffer "^2.0.1"
+ http-proxy-agent "^4.0.1"
+ https-proxy-agent "^5.0.0"
+ is-potential-custom-element-name "^1.0.1"
+ nwsapi "^2.2.0"
+ parse5 "6.0.1"
+ saxes "^5.0.1"
+ symbol-tree "^3.2.4"
+ tough-cookie "^4.0.0"
+ w3c-hr-time "^1.0.2"
+ w3c-xmlserializer "^2.0.0"
+ webidl-conversions "^6.1.0"
+ whatwg-encoding "^1.0.5"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^8.5.0"
+ ws "^7.4.6"
+ xml-name-validator "^3.0.0"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
+
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json-schema@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
+ integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
+json5@^2.2.0, json5@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
+ integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
+
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonpointer@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.0.tgz#f802669a524ec4805fa7389eadbc9921d5dc8072"
+ integrity sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==
+
+just-debounce@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/just-debounce/-/just-debounce-1.1.0.tgz#2f81a3ad4121a76bc7cb45dbf704c0d76a8e5ddf"
+ integrity sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==
+
+katex@^0.15.3:
+ version "0.15.3"
+ resolved "https://registry.npmmirror.com/katex/-/katex-0.15.3.tgz#08781a7ed26800b20380d959d1ffcd62bca0ec14"
+ integrity sha512-Al6V7RJsmjklT9QItyHWGaQCt+NYTle1bZwB1e9MR/tLoIT1MXaHy9UpfGSB7eaqDgjjqqRxQOaQGrALCrEyBQ==
+ dependencies:
+ commander "^8.0.0"
+
+khroma@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.npmmirror.com/khroma/-/khroma-1.4.1.tgz#ad6a5b6a972befc5112ce5129887a1a83af2c003"
+ integrity sha512-+GmxKvmiRuCcUYDgR7g5Ngo0JEDeOsGdNONdU2zsiBQaK4z19Y2NvXqfEDE0ZiIrg45GTZyAnPLVsLZZACYm3Q==
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0, kind-of@^5.0.2:
+ version "5.1.0"
+ resolved "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+klona@^2.0.4:
+ version "2.0.5"
+ resolved "https://registry.npmmirror.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc"
+ integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==
+
+last-run@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b"
+ integrity sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==
+ dependencies:
+ default-resolution "^2.0.0"
+ es6-weak-map "^2.0.1"
+
+lazystream@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638"
+ integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==
+ dependencies:
+ readable-stream "^2.0.5"
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==
+ dependencies:
+ invert-kv "^1.0.0"
+
+lead@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42"
+ integrity sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==
+ dependencies:
+ flush-write-stream "^1.0.2"
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+liftoff@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3"
+ integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==
+ dependencies:
+ extend "^3.0.0"
+ findup-sync "^3.0.0"
+ fined "^1.0.1"
+ flagged-respawn "^1.0.0"
+ is-plain-object "^2.0.4"
+ object.map "^1.0.0"
+ rechoir "^0.6.2"
+ resolve "^1.1.7"
+
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+linkify-it@^3.0.1:
+ version "3.0.3"
+ resolved "https://registry.npmmirror.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e"
+ integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==
+ dependencies:
+ uc.micro "^1.0.1"
+
+lit-element@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/lit-element/-/lit-element-3.2.0.tgz#9c981c55dfd9a8f124dc863edb62cc529d434db7"
+ integrity sha512-HbE7yt2SnUtg5DCrWt028oaU4D5F4k/1cntAFHTkzY8ZIa8N0Wmu92PxSxucsQSOXlODFrICkQ5x/tEshKi13g==
+ dependencies:
+ "@lit/reactive-element" "^1.3.0"
+ lit-html "^2.2.0"
+
+lit-html@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.npmmirror.com/lit-html/-/lit-html-2.2.2.tgz#06ced65dd3fb2d7a214d998c65acc576ae2cb3c4"
+ integrity sha512-cJofCRXuizwyaiGt9pJjJOcauezUlSB6t87VBXsPwRhbzF29MgD8GH6fZ0BuZdXAAC02IRONZBd//VPUuU8QbQ==
+ dependencies:
+ "@types/trusted-types" "^2.0.2"
+
+lit@^2.2.1:
+ version "2.2.2"
+ resolved "https://registry.npmmirror.com/lit/-/lit-2.2.2.tgz#b7f729d6ca7e17efbf2bf589df2d5eb04d9620ba"
+ integrity sha512-eN3+2QRHn/erxYB88AXiiRgQA6RltE9MhzySCwX+ACOxA/MLWN3VdXvcbZD9PN09zmUwlgzDvW3T84YWj2Sa0A==
+ dependencies:
+ "@lit/reactive-element" "^1.3.0"
+ lit-element "^3.2.0"
+ lit-html "^2.2.0"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
+
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==
+
+lodash.throttle@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
+ integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
+
+lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0:
+ version "4.17.21"
+ resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log-symbols@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+ dependencies:
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
+
+logsets@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmmirror.com/logsets/-/logsets-1.0.8.tgz#b9a81abdd60cab5dab2b710f77a989ddd8af239f"
+ integrity sha512-9XuCtIjGvAWbi+JgF2+NI5Bb55uvzwgCFvlo/pafXdZjVC0DDri2k+Jzv7hWg0audTrw4FTnIBiSo3yOlEpmHQ==
+ dependencies:
+ "@babel/runtime-corejs3" "^7.17.0"
+ ansicolor "^1.1.100"
+ core-js "^3.21.0"
+ deepmerge "^4.2.2"
+
+lru-cache@^7.4.0:
+ version "7.7.3"
+ resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.7.3.tgz#98cd19eef89ce6a4a3c4502c17c833888677c252"
+ integrity sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==
+
+magic-string@^0.25.0, magic-string@^0.25.7:
+ version "0.25.9"
+ resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
+ integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
+ dependencies:
+ sourcemap-codec "^1.4.8"
+
+make-dir@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
+make-iterator@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6"
+ integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==
+ dependencies:
+ kind-of "^6.0.2"
+
+makeerror@1.0.12:
+ version "1.0.12"
+ resolved "https://registry.npmmirror.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
+ integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
+ dependencies:
+ tmpl "1.0.5"
+
+map-cache@^0.2.0, map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==
+ dependencies:
+ object-visit "^1.0.0"
+
+markdown-it-anchor@^8.4.1:
+ version "8.5.0"
+ resolved "https://registry.npmmirror.com/markdown-it-anchor/-/markdown-it-anchor-8.5.0.tgz#ca74e7f62806ca4e46cbbf309cbab015c9837731"
+ integrity sha512-ii8jRFS4Sxny0nevOOQZqZKswcZyXnD00AlPKctM0PkNRVsT1/2fQMQPXAdWmRz9kYrMupElsEwCikR7Fd2JFQ==
+
+markdown-it-container@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/markdown-it-container/-/markdown-it-container-3.0.0.tgz#1d19b06040a020f9a827577bb7dbf67aa5de9a5b"
+ integrity sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==
+
+markdown-it-emoji@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/markdown-it-emoji/-/markdown-it-emoji-2.0.0.tgz#3164ad4c009efd946e98274f7562ad611089a231"
+ integrity sha512-39j7/9vP/CPCKbEI44oV8yoPJTpvfeReTn/COgRhSpNrjWF3PfP/JUxxB0hxV6ynOY8KH8Y8aX9NMDdo6z+6YQ==
+
+markdown-it@^12.3.2:
+ version "12.3.2"
+ resolved "https://registry.npmmirror.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90"
+ integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==
+ dependencies:
+ argparse "^2.0.1"
+ entities "~2.1.0"
+ linkify-it "^3.0.1"
+ mdurl "^1.0.1"
+ uc.micro "^1.0.5"
+
+matchdep@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e"
+ integrity sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==
+ dependencies:
+ findup-sync "^2.0.0"
+ micromatch "^3.0.4"
+ resolve "^1.4.0"
+ stack-trace "0.0.10"
+
+mdn-data@2.0.23:
+ version "2.0.23"
+ resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.23.tgz#dfb6c41e50a0edb808cf340973ab29321b70808e"
+ integrity sha512-IonVb7pfla2U4zW8rc7XGrtgq11BvYeCxWN8HS+KFBnLDE7XDK9AAMVhRuG6fj9BBsjc69Fqsp6WEActEdNTDQ==
+
+mdurl@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==
+
+medium-zoom@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.npmmirror.com/medium-zoom/-/medium-zoom-1.0.6.tgz#9247f21ca9313d8bbe9420aca153a410df08d027"
+ integrity sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg==
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.3.0, merge2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+mermaid@^8.14.0:
+ version "8.14.0"
+ resolved "https://registry.npmmirror.com/mermaid/-/mermaid-8.14.0.tgz#ef589b0537f56d6340069070edb51719a4faba00"
+ integrity sha512-ITSHjwVaby1Li738sxhF48sLTxcNyUAoWfoqyztL1f7J6JOLpHOuQPNLBb6lxGPUA0u7xP9IRULgvod0dKu35A==
+ dependencies:
+ "@braintree/sanitize-url" "^3.1.0"
+ d3 "^7.0.0"
+ dagre "^0.8.5"
+ dagre-d3 "^0.6.4"
+ dompurify "2.3.5"
+ graphlib "^2.1.8"
+ khroma "^1.4.1"
+ moment-mini "^2.24.0"
+ stylis "^4.0.10"
+
+micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+micromatch@^4.0.4:
+ version "4.0.5"
+ resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+ integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+ dependencies:
+ braces "^3.0.2"
+ picomatch "^2.3.1"
+
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+ version "2.1.35"
+ resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+minimatch@^3.0.4:
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+mitt@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/mitt/-/mitt-3.0.0.tgz#69ef9bd5c80ff6f57473e8d89326d01c414be0bd"
+ integrity sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+moment-mini@^2.24.0:
+ version "2.24.0"
+ resolved "https://registry.npmmirror.com/moment-mini/-/moment-mini-2.24.0.tgz#fa68d98f7fe93ae65bf1262f6abb5fb6983d8d18"
+ integrity sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ==
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+mute-stdout@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331"
+ integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==
+
+mute-stream@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
+nan@^2.12.1:
+ version "2.15.0"
+ resolved "https://registry.npmmirror.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
+ integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
+
+nanoid@^3.3.1:
+ version "3.3.2"
+ resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.2.tgz#c89622fafb4381cd221421c69ec58547a1eec557"
+ integrity sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+neo-async@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+ integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+next-tick@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
+ integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
+
+node-releases@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01"
+ integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==
+
+normalize-package-data@^2.3.2:
+ version "2.5.0"
+ resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+
+now-and-later@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c"
+ integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==
+ dependencies:
+ once "^1.3.2"
+
+npm-run-path@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+nprogress@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
+ integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==
+
+nwsapi@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+ integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-inspect@^1.12.0, object-inspect@^1.9.0:
+ version "1.12.0"
+ resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0"
+ integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==
+
+object-keys@^1.0.12, object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.0.4, object.assign@^4.1.0, object.assign@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
+ integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ has-symbols "^1.0.1"
+ object-keys "^1.1.1"
+
+object.defaults@^1.0.0, object.defaults@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf"
+ integrity sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==
+ dependencies:
+ array-each "^1.0.1"
+ array-slice "^1.0.0"
+ for-own "^1.0.0"
+ isobject "^3.0.0"
+
+object.map@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37"
+ integrity sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==
+ dependencies:
+ for-own "^1.0.0"
+ make-iterator "^1.0.0"
+
+object.pick@^1.2.0, object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==
+ dependencies:
+ isobject "^3.0.1"
+
+object.reduce@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad"
+ integrity sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==
+ dependencies:
+ for-own "^1.0.0"
+ make-iterator "^1.0.0"
+
+once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+onetime@^5.1.0, onetime@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+optionator@^0.8.1:
+ version "0.8.3"
+ resolved "https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
+ora@^5.4.1:
+ version "5.4.1"
+ resolved "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
+ integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
+ dependencies:
+ bl "^4.1.0"
+ chalk "^4.1.0"
+ cli-cursor "^3.1.0"
+ cli-spinners "^2.5.0"
+ is-interactive "^1.0.0"
+ is-unicode-supported "^0.1.0"
+ log-symbols "^4.1.0"
+ strip-ansi "^6.0.0"
+ wcwidth "^1.0.1"
+
+ordered-read-streams@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e"
+ integrity sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==
+ dependencies:
+ readable-stream "^2.0.1"
+
+os-locale@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+ integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==
+ dependencies:
+ lcid "^1.0.0"
+
+os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
+
+p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+parse-filepath@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891"
+ integrity sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==
+ dependencies:
+ is-absolute "^1.0.0"
+ map-cache "^0.2.0"
+ path-root "^0.1.1"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npmmirror.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
+parse-node-version@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
+ integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==
+
+parse5@6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
+ integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-root-regex@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.npmmirror.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"
+ integrity sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==
+
+path-root@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.npmmirror.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7"
+ integrity sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==
+ dependencies:
+ path-root-regex "^0.1.0"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+photoswipe@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.npmmirror.com/photoswipe/-/photoswipe-5.2.2.tgz#3960b953c504a67d1b074f60a31229ada2ed5c07"
+ integrity sha512-es0AEX4zgzzcrr8ztdPWRODSARCLqCm/5H/aSwFtZwovokGtzBf/y/HXJxHMnNx6h4650DkKVIVFYILXJhmMhw==
+
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==
+
+pirates@^4.0.4:
+ version "4.0.5"
+ resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
+ integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
+
+pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==
+
+postcss-csso@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmmirror.com/postcss-csso/-/postcss-csso-6.0.0.tgz#ff3ec8ce0694d797b75f7f7e10c4ac5a35e7780f"
+ integrity sha512-LsrU+LVR0mNIYauoTEbYVC81i+yXcGWa9kqW6Lvm+gYUZTaNTJmJT6Dbv+fqT8gOnwXAH1RV+5RXvAVoRtwO+g==
+ dependencies:
+ csso "^5.0.1"
+
+postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@^8.1.10, postcss@^8.4.12:
+ version "8.4.12"
+ resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905"
+ integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==
+ dependencies:
+ nanoid "^3.3.1"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
+
+pretty-bytes@^5.3.0:
+ version "5.6.0"
+ resolved "https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
+ integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
+
+pretty-format@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.npmmirror.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
+ integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
+ dependencies:
+ ansi-regex "^5.0.1"
+ ansi-styles "^5.0.0"
+ react-is "^17.0.1"
+
+pretty-hrtime@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
+ integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==
+
+prismjs@^1.27.0:
+ version "1.27.0"
+ resolved "https://registry.npmmirror.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057"
+ integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==
+
+process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+prompts@^2.0.1:
+ version "2.4.2"
+ resolved "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
+ integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.5"
+
+psl@^1.1.33:
+ version "1.8.0"
+ resolved "https://registry.npmmirror.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+ integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.5:
+ version "1.5.1"
+ resolved "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+raphael@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/raphael/-/raphael-2.3.0.tgz#eabeb09dba861a1d4cee077eaafb8c53f3131f89"
+ integrity sha512-w2yIenZAQnp257XUWGni4bLMVxpUpcIl7qgxEgDIXtmSypYtlNxfXWpOBxs7LBTps5sDwhRnrToJrMUrivqNTQ==
+ dependencies:
+ eve-raphael "0.5.0"
+
+react-is@^17.0.1:
+ version "17.0.2"
+ resolved "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
+ integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^3.4.0:
+ version "3.6.0"
+ resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.npmmirror.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==
+ dependencies:
+ resolve "^1.1.6"
+
+regenerate-unicode-properties@^10.0.1:
+ version "10.0.1"
+ resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56"
+ integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==
+ dependencies:
+ regenerate "^1.4.2"
+
+regenerate@^1.4.2:
+ version "1.4.2"
+ resolved "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+ integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
+
+regenerator-runtime@^0.13.4:
+ version "0.13.9"
+ resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
+ integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
+
+regenerator-transform@^0.15.0:
+ version "0.15.0"
+ resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537"
+ integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==
+ dependencies:
+ "@babel/runtime" "^7.8.4"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexp.prototype.flags@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307"
+ integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+regexpu-core@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3"
+ integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==
+ dependencies:
+ regenerate "^1.4.2"
+ regenerate-unicode-properties "^10.0.1"
+ regjsgen "^0.6.0"
+ regjsparser "^0.8.2"
+ unicode-match-property-ecmascript "^2.0.0"
+ unicode-match-property-value-ecmascript "^2.0.0"
+
+register-service-worker@^1.7.2:
+ version "1.7.2"
+ resolved "https://registry.npmmirror.com/register-service-worker/-/register-service-worker-1.7.2.tgz#6516983e1ef790a98c4225af1216bc80941a4bd2"
+ integrity sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A==
+
+regjsgen@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.npmmirror.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d"
+ integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==
+
+regjsparser@^0.8.2:
+ version "0.8.4"
+ resolved "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f"
+ integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==
+ dependencies:
+ jsesc "~0.5.0"
+
+remove-bom-buffer@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53"
+ integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==
+ dependencies:
+ is-buffer "^1.1.5"
+ is-utf8 "^0.2.1"
+
+remove-bom-stream@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523"
+ integrity sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==
+ dependencies:
+ remove-bom-buffer "^3.0.0"
+ safe-buffer "^5.1.0"
+ through2 "^2.0.3"
+
+remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==
+
+repeat-element@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
+ integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
+
+repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==
+
+replace-ext@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a"
+ integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==
+
+replace-homedir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c"
+ integrity sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==
+ dependencies:
+ homedir-polyfill "^1.0.1"
+ is-absolute "^1.0.0"
+ remove-trailing-separator "^1.1.0"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+ integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==
+
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-options@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131"
+ integrity sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==
+ dependencies:
+ value-or-function "^3.0.0"
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==
+
+resolve.exports@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9"
+ integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==
+
+resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.4.0:
+ version "1.22.0"
+ resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
+ integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
+ dependencies:
+ is-core-module "^2.8.1"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+reveal.js@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.npmmirror.com/reveal.js/-/reveal.js-4.3.1.tgz#24a63300cff92cf5cbdd40a46f5d3699614d49ca"
+ integrity sha512-1kyEnWeUkaCdBdX//XXq9dtBK95ppvIlSwlHelrP8/wrX6LcsYp4HT9WTFoFEOUBfVqkm8C2aHQ367o+UKfcxw==
+
+rimraf@^2.6.2:
+ version "2.7.1"
+ resolved "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+robust-predicates@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a"
+ integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==
+
+rollup-plugin-clear@^2.0.7:
+ version "2.0.7"
+ resolved "https://registry.npmmirror.com/rollup-plugin-clear/-/rollup-plugin-clear-2.0.7.tgz#27a191bccb3964246ca2aad427e8798cbe87c9b1"
+ integrity sha512-Hg8NC3JcJBO1ofgyQC0IACpyKn/yhHPGZ3C7R3ubNGWUXy9JXHQrewk4J4hVcZznw6SOKayLsaNae596Rwt8Vg==
+ dependencies:
+ rimraf "^2.6.2"
+
+rollup-plugin-terser@^7.0.0:
+ version "7.0.2"
+ resolved "https://registry.npmmirror.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
+ integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ jest-worker "^26.2.1"
+ serialize-javascript "^4.0.0"
+ terser "^5.0.0"
+
+rollup@^2.43.1, rollup@^2.59.0, rollup@^2.70.1:
+ version "2.70.1"
+ resolved "https://registry.npmmirror.com/rollup/-/rollup-2.70.1.tgz#824b1f1f879ea396db30b0fc3ae8d2fead93523e"
+ integrity sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+run-async@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+ integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+rw@1:
+ version "1.3.3"
+ resolved "https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
+ integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==
+
+rxjs@^7.5.5:
+ version "7.5.5"
+ resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f"
+ integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==
+ dependencies:
+ tslib "^2.1.0"
+
+safe-buffer@^5.1.0, safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
+ version "2.1.2"
+ resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sass-loader@^12.6.0:
+ version "12.6.0"
+ resolved "https://registry.npmmirror.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb"
+ integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==
+ dependencies:
+ klona "^2.0.4"
+ neo-async "^2.6.2"
+
+sass@^1.49.10, sass@^1.49.11:
+ version "1.50.0"
+ resolved "https://registry.npmmirror.com/sass/-/sass-1.50.0.tgz#3e407e2ebc53b12f1e35ce45efb226ea6063c7c8"
+ integrity sha512-cLsD6MEZ5URXHStxApajEh7gW189kkjn4Rc8DQweMyF+o5HF5nfEz8QYLMlPsTOD88DknatTmBWkOcw5/LnJLQ==
+ dependencies:
+ chokidar ">=3.0.0 <4.0.0"
+ immutable "^4.0.0"
+ source-map-js ">=0.6.2 <2.0.0"
+
+sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+saxes@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
+ integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
+ dependencies:
+ xmlchars "^2.2.0"
+
+section-matter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167"
+ integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==
+ dependencies:
+ extend-shallow "^2.0.1"
+ kind-of "^6.0.0"
+
+semver-greatest-satisfied-range@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b"
+ integrity sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==
+ dependencies:
+ sver-compat "^1.5.0"
+
+"semver@2 || 3 || 4 || 5":
+ version "5.7.1"
+ resolved "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+ integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.3.2, semver@^7.3.5:
+ version "7.3.6"
+ resolved "https://registry.npmmirror.com/semver/-/semver-7.3.6.tgz#5d73886fb9c0c6602e79440b97165c29581cbb2b"
+ integrity sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==
+ dependencies:
+ lru-cache "^7.4.0"
+
+serialize-javascript@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
+ integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
+ dependencies:
+ randombytes "^2.1.0"
+
+set-blocking@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shelljs@^0.8.5:
+ version "0.8.5"
+ resolved "https://registry.npmmirror.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
+ integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
+side-channel@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+ integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+ dependencies:
+ call-bind "^1.0.0"
+ get-intrinsic "^1.0.2"
+ object-inspect "^1.9.0"
+
+signal-exit@^3.0.2, signal-exit@^3.0.3:
+ version "3.0.7"
+ resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+ integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+sisteransi@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+sitemap@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.npmmirror.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef"
+ integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==
+ dependencies:
+ "@types/node" "^17.0.5"
+ "@types/sax" "^1.2.1"
+ arg "^5.0.0"
+ sax "^1.2.4"
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+ integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+source-map-resolve@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ dependencies:
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.6, source-map-support@~0.5.20:
+ version "0.5.21"
+ resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+ integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
+ integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+
+source-map@^0.5.0, source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.7.3, source-map@~0.7.2:
+ version "0.7.3"
+ resolved "https://registry.npmmirror.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
+source-map@^0.8.0-beta.0:
+ version "0.8.0-beta.0"
+ resolved "https://registry.npmmirror.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11"
+ integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==
+ dependencies:
+ whatwg-url "^7.0.0"
+
+sourcemap-codec@^1.4.8:
+ version "1.4.8"
+ resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
+ integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
+
+sparkles@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c"
+ integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==
+
+spdx-correct@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
+ integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.11"
+ resolved "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95"
+ integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
+stack-trace@0.0.10:
+ version "0.0.10"
+ resolved "https://registry.npmmirror.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
+ integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==
+
+stack-utils@^2.0.3:
+ version "2.0.5"
+ resolved "https://registry.npmmirror.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5"
+ integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==
+ dependencies:
+ escape-string-regexp "^2.0.0"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+stream-exhaust@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d"
+ integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==
+
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
+string-length@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.npmmirror.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
+ integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==
+ dependencies:
+ char-regex "^1.0.2"
+ strip-ansi "^6.0.0"
+
+string-width@^1.0.1, string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string.prototype.matchall@^4.0.6:
+ version "4.0.7"
+ resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
+ integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.19.1"
+ get-intrinsic "^1.1.1"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.3"
+ regexp.prototype.flags "^1.4.1"
+ side-channel "^1.0.4"
+
+string.prototype.trimend@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
+ integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+string.prototype.trimstart@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
+ integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringify-object@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-bom-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
+ integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
+strip-comments@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b"
+ integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+stylis@^4.0.10:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/stylis/-/stylis-4.1.0.tgz#e3c7b24ff96d8af35efd161b6991a81c46e51933"
+ integrity sha512-SrSDzNasOCBTo7C2N9geFwydg/2bmdkWXd4gJirtq82m5JBYtR2+Ialck8czmfBLIdPxCOotlgJESPa8C1RqvA==
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.0.0, supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-color@^8.0.0:
+ version "8.1.1"
+ resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-hyperlinks@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb"
+ integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==
+ dependencies:
+ has-flag "^4.0.0"
+ supports-color "^7.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+sver-compat@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.npmmirror.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8"
+ integrity sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==
+ dependencies:
+ es6-iterator "^2.0.1"
+ es6-symbol "^3.1.1"
+
+symbol-tree@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+temp-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e"
+ integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==
+
+tempy@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.npmmirror.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3"
+ integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==
+ dependencies:
+ is-stream "^2.0.0"
+ temp-dir "^2.0.0"
+ type-fest "^0.16.0"
+ unique-string "^2.0.0"
+
+terminal-link@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
+ integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ supports-hyperlinks "^2.0.0"
+
+terser@^5.0.0:
+ version "5.12.1"
+ resolved "https://registry.npmmirror.com/terser/-/terser-5.12.1.tgz#4cf2ebed1f5bceef5c83b9f60104ac4a78b49e9c"
+ integrity sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==
+ dependencies:
+ acorn "^8.5.0"
+ commander "^2.20.0"
+ source-map "~0.7.2"
+ source-map-support "~0.5.20"
+
+test-exclude@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmmirror.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+ integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+ dependencies:
+ "@istanbuljs/schema" "^0.1.2"
+ glob "^7.1.4"
+ minimatch "^3.0.4"
+
+throat@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375"
+ integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==
+
+through2-filter@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254"
+ integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==
+ dependencies:
+ through2 "~2.0.0"
+ xtend "~4.0.0"
+
+through2@^2.0.0, through2@^2.0.3, through2@~2.0.0:
+ version "2.0.5"
+ resolved "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
+
+time-stamp@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
+ integrity sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==
+
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+tmpl@1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
+ integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
+
+to-absolute-glob@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b"
+ integrity sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==
+ dependencies:
+ is-absolute "^1.0.0"
+ is-negated-glob "^1.0.0"
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+to-through@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6"
+ integrity sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==
+ dependencies:
+ through2 "^2.0.3"
+
+toml@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee"
+ integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==
+
+tough-cookie@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
+ integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==
+ dependencies:
+ psl "^1.1.33"
+ punycode "^2.1.1"
+ universalify "^0.1.2"
+
+tr46@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==
+ dependencies:
+ punycode "^2.1.0"
+
+tr46@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"
+ integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==
+ dependencies:
+ punycode "^2.1.1"
+
+ts-debounce@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/ts-debounce/-/ts-debounce-4.0.0.tgz#33440ef64fab53793c3d546a8ca6ae539ec15841"
+ integrity sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==
+
+tslib@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
+ integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
+
+twikoo@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.npmmirror.com/twikoo/-/twikoo-1.5.1.tgz#5aea9d4952bec7cdd18159b653643dfa43a84dbe"
+ integrity sha512-tHdjuA0kKvGOK3vOrtX70D8+eJL9OoonwOyGxw5H8hiPXrm+4HWy1EsODJMNcZ74xdCjL2aRmYXFaeNKbSj4jQ==
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-detect@4.0.8:
+ version "4.0.8"
+ resolved "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+ integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+type-fest@^0.16.0:
+ version "0.16.0"
+ resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860"
+ integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==
+
+type-fest@^0.21.3:
+ version "0.21.3"
+ resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+ integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+type@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
+ integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
+
+type@^2.5.0:
+ version "2.6.0"
+ resolved "https://registry.npmmirror.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f"
+ integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==
+
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.npmmirror.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
+
+uc.micro@^1.0.1, uc.micro@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
+ integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
+
+unbox-primitive@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
+ integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
+ dependencies:
+ function-bind "^1.1.1"
+ has-bigints "^1.0.1"
+ has-symbols "^1.0.2"
+ which-boxed-primitive "^1.0.2"
+
+unc-path-regex@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.npmmirror.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
+ integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==
+
+undertaker-registry@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50"
+ integrity sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==
+
+undertaker@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/undertaker/-/undertaker-1.3.0.tgz#363a6e541f27954d5791d6fa3c1d321666f86d18"
+ integrity sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==
+ dependencies:
+ arr-flatten "^1.0.1"
+ arr-map "^2.0.0"
+ bach "^1.0.0"
+ collection-map "^1.0.0"
+ es6-weak-map "^2.0.1"
+ fast-levenshtein "^1.0.0"
+ last-run "^1.1.0"
+ object.defaults "^1.0.0"
+ object.reduce "^1.0.0"
+ undertaker-registry "^1.0.0"
+
+unicode-canonical-property-names-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
+ integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==
+
+unicode-match-property-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
+ integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^2.0.0"
+ unicode-property-aliases-ecmascript "^2.0.0"
+
+unicode-match-property-value-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714"
+ integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==
+
+unicode-property-aliases-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8"
+ integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+unique-stream@^2.0.2:
+ version "2.3.1"
+ resolved "https://registry.npmmirror.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac"
+ integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==
+ dependencies:
+ json-stable-stringify-without-jsonify "^1.0.1"
+ through2-filter "^3.0.0"
+
+unique-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
+ integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
+ dependencies:
+ crypto-random-string "^2.0.0"
+
+universalify@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+universalify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+ integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+upath@^1.1.1, upath@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+upath@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b"
+ integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+v8-to-istanbul@^8.1.0:
+ version "8.1.1"
+ resolved "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed"
+ integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.1"
+ convert-source-map "^1.6.0"
+ source-map "^0.7.3"
+
+v8flags@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656"
+ integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+value-or-function@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813"
+ integrity sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==
+
+vinyl-fs@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.npmmirror.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7"
+ integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==
+ dependencies:
+ fs-mkdirp-stream "^1.0.0"
+ glob-stream "^6.1.0"
+ graceful-fs "^4.0.0"
+ is-valid-glob "^1.0.0"
+ lazystream "^1.0.0"
+ lead "^1.0.0"
+ object.assign "^4.0.4"
+ pumpify "^1.3.5"
+ readable-stream "^2.3.3"
+ remove-bom-buffer "^3.0.0"
+ remove-bom-stream "^1.2.0"
+ resolve-options "^1.1.0"
+ through2 "^2.0.0"
+ to-through "^2.0.0"
+ value-or-function "^3.0.0"
+ vinyl "^2.0.0"
+ vinyl-sourcemap "^1.1.0"
+
+vinyl-sourcemap@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16"
+ integrity sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==
+ dependencies:
+ append-buffer "^1.0.2"
+ convert-source-map "^1.5.0"
+ graceful-fs "^4.1.6"
+ normalize-path "^2.1.1"
+ now-and-later "^2.0.0"
+ remove-bom-buffer "^3.0.0"
+ vinyl "^2.0.0"
+
+vinyl@^2.0.0, vinyl@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.npmmirror.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974"
+ integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==
+ dependencies:
+ clone "^2.1.1"
+ clone-buffer "^1.0.0"
+ clone-stats "^1.0.0"
+ cloneable-readable "^1.0.0"
+ remove-trailing-separator "^1.0.1"
+ replace-ext "^1.0.0"
+
+vite@~2.9.1:
+ version "2.9.1"
+ resolved "https://registry.npmmirror.com/vite/-/vite-2.9.1.tgz#84bce95fae210a7beb566a0af06246748066b48f"
+ integrity sha512-vSlsSdOYGcYEJfkQ/NeLXgnRv5zZfpAsdztkIrs7AZHV8RCMZQkwjo4DS5BnrYTqoWqLoUe1Cah4aVO4oNNqCQ==
+ dependencies:
+ esbuild "^0.14.27"
+ postcss "^8.4.12"
+ resolve "^1.22.0"
+ rollup "^2.59.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+vue-demi@*:
+ version "0.12.5"
+ resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.12.5.tgz#8eeed566a7d86eb090209a11723f887d28aeb2d1"
+ integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==
+
+vue-router@^4.0.14:
+ version "4.0.14"
+ resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.0.14.tgz#ce2028c1c5c33e30c7287950c973f397fce1bd65"
+ integrity sha512-wAO6zF9zxA3u+7AkMPqw9LjoUCjSxfFvINQj3E/DceTt6uEz1XZLraDhdg2EYmvVwTBSGlLYsUw8bDmx0754Mw==
+ dependencies:
+ "@vue/devtools-api" "^6.0.0"
+
+vue@^3.2.31:
+ version "3.2.31"
+ resolved "https://registry.npmmirror.com/vue/-/vue-3.2.31.tgz#e0c49924335e9f188352816788a4cca10f817ce6"
+ integrity sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==
+ dependencies:
+ "@vue/compiler-dom" "3.2.31"
+ "@vue/compiler-sfc" "3.2.31"
+ "@vue/runtime-dom" "3.2.31"
+ "@vue/server-renderer" "3.2.31"
+ "@vue/shared" "3.2.31"
+
+vuepress-plugin-blog2@2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-plugin-blog2/-/vuepress-plugin-blog2-2.0.0-beta.36.tgz#08de16f9d0eeabdd9a6d0731a03a25c79a4589e0"
+ integrity sha512-d+Dv3HakHqTCmlT2dyWQwUu7ROyErJXnPUel8nNhEt5HyGbTBkJmdWsFshOnRXLlF6gS4MdJJtV2PAFx8Gle8g==
+ dependencies:
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/core" "2.0.0-beta.38"
+ chokidar "^3.5.3"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+
+vuepress-plugin-comment2@2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-plugin-comment2/-/vuepress-plugin-comment2-2.0.0-beta.36.tgz#3248da039bfe1bbcc792b3e0578b92284038e144"
+ integrity sha512-P18bzxIb74IfpaweXwK5VNgY5k4F0wAIIr7eKQAzvjCug31AKkiAn9Js4uitQaEszZfBUBraua5PjvrgNN3E8g==
+ dependencies:
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ "@waline/client" "^1.6.0"
+ giscus "^1.0.1"
+ twikoo "^1.5.1"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+ vuepress-plugin-sass-palette "2.0.0-beta.36"
+
+vuepress-plugin-copy-code2@2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-plugin-copy-code2/-/vuepress-plugin-copy-code2-2.0.0-beta.36.tgz#7a5f3e424f52ef6f630ab95fa4dfb7f01d419fd0"
+ integrity sha512-4rQodZPDSg204ex6YLg8cJl3iQSiRgSmu6x3Jtg9xjnjAMzyCAbSeiFILMbjg14psPdBK4xclFBCBv2k9rscJA==
+ dependencies:
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ balloon-css "^1.2.0"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+ vuepress-plugin-sass-palette "2.0.0-beta.36"
+
+vuepress-plugin-copyright2@2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-plugin-copyright2/-/vuepress-plugin-copyright2-2.0.0-beta.36.tgz#5e92ed8f46e90ee98a9e0c6bb366551fa1281a44"
+ integrity sha512-0tWSwrIzveQNwQxQk6mZx21PKDBDITRDp2OKYhAao1EEIiCZqobM/9a09GI1QDXFYTfkbnb8TsCoFRrhUglEew==
+ dependencies:
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+
+vuepress-plugin-feed2@2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-plugin-feed2/-/vuepress-plugin-feed2-2.0.0-beta.36.tgz#26015be694a835aaa3edb16e7a80e2a238793418"
+ integrity sha512-5FW8bEJNfGTY6GhsjpPLZBxxSCm3ssuAtW5NObEETcNt3w1WKdb3XIf7AgWReyRy1g3el9EVtHutYn3BXZy5rA==
+ dependencies:
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+ "@vuepress/utils" "2.0.0-beta.38"
+ xml-js "^1.6.11"
+
+vuepress-plugin-md-enhance@2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-plugin-md-enhance/-/vuepress-plugin-md-enhance-2.0.0-beta.36.tgz#805db6ad65cac1f77437ebb138c7e8bd9ed580f8"
+ integrity sha512-58Q7pH1jmGP8EkiFYD8Q1ZTrSuK2B8UrcsqU+2jbHnZk6F8spnyWqRs11R39xaBxi+hClkOsg/UCv2XdGsV9hw==
+ dependencies:
+ "@babel/core" "*"
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+ "@types/katex" "^0.14.0"
+ "@types/markdown-it" "^12.2.3"
+ "@types/mermaid" "^8.2.9"
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/plugin-container" "2.0.0-beta.38"
+ "@vuepress/shared" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ "@vueuse/core" "^8.2.4"
+ chart.js "^3.7.1"
+ flowchart.js "^1.17.1"
+ katex "^0.15.3"
+ markdown-it "^12.3.2"
+ mermaid "^8.14.0"
+ reveal.js "^4.3.1"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+ vuepress-plugin-sass-palette "2.0.0-beta.36"
+
+vuepress-plugin-photo-swipe@2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-plugin-photo-swipe/-/vuepress-plugin-photo-swipe-2.0.0-beta.36.tgz#b3b54152397fd6f0b01bd5c24d2dde0517b3455b"
+ integrity sha512-mpnWees/f7AL3nyFQOWfzhZOnKUrI+YsL5Mn13QC56OZBT5//vK/haCRg9YKU0Uklrk94mAPwDh63KFBxMqLBg==
+ dependencies:
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ photoswipe "^5.2.2"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+ vuepress-plugin-sass-palette "2.0.0-beta.36"
+
+vuepress-plugin-pwa2@2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-plugin-pwa2/-/vuepress-plugin-pwa2-2.0.0-beta.36.tgz#16ec34cec7b7038f545945fcf561349987ef80e8"
+ integrity sha512-3cVgFzjiVlFSLDREsQW33MvKUSgry34ySwkbBh1cf5HBxTaV4YfljYAv+d9fQXgGECijwHAz6tzleM5OwIOghg==
+ dependencies:
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ mitt "^3.0.0"
+ register-service-worker "^1.7.2"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+ vuepress-plugin-sass-palette "2.0.0-beta.36"
+ workbox-build "^6.5.2"
+
+vuepress-plugin-reading-time2@2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-plugin-reading-time2/-/vuepress-plugin-reading-time2-2.0.0-beta.36.tgz#9a47dd33779970608f57321bbf47776877b6c12b"
+ integrity sha512-j7zhpcW4jsZC4hUBfDkaUksE0tMDlTvFcYWQQl6URxMj0QmtqSS5rA2a+LX5LcK0egmMCYdczSa/QIVICQP/3w==
+ dependencies:
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+
+vuepress-plugin-sass-palette@2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-plugin-sass-palette/-/vuepress-plugin-sass-palette-2.0.0-beta.36.tgz#a1b3a9072864005812635758e04647fe41cb79ea"
+ integrity sha512-7Vv6Fv1g1XIyXsPK28j7ZlD3TPDcC2Ms2k1/co4cvVnJkuPWoZuqXouNXeSfFaYgxDzQaoTeBTKTfzStbih2Vg==
+ dependencies:
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+ "@vuepress/utils" "2.0.0-beta.38"
+ chokidar "^3.5.3"
+ sass "^1.49.11"
+ sass-loader "^12.6.0"
+
+vuepress-plugin-seo2@2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-plugin-seo2/-/vuepress-plugin-seo2-2.0.0-beta.36.tgz#ba8149496b816bc2724315746120ddecaab631fa"
+ integrity sha512-7KvBvhOq/jCZsSKjvnoC+OKRSvwZ/SDyCb+ReX/1XXptFPgkB940QewW5MolpLtqanFKoRGjsvzdFrqte3LezQ==
+ dependencies:
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+ "@vuepress/utils" "2.0.0-beta.38"
+
+vuepress-plugin-sitemap2@2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-plugin-sitemap2/-/vuepress-plugin-sitemap2-2.0.0-beta.36.tgz#4938c61054977530dd20beead9c538b5cd02a95a"
+ integrity sha512-fQMaxso8/aBoRKUb3wU1BGGuBIgAGuQmi6t02c+jGoqabKORumzT2846RBhsU/jose3AQEVJiS4EJPZ35PG9vw==
+ dependencies:
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+ "@vuepress/utils" "2.0.0-beta.38"
+ sitemap "^7.1.1"
+
+vuepress-theme-hope@^2.0.0-beta.36:
+ version "2.0.0-beta.36"
+ resolved "https://registry.npmmirror.com/vuepress-theme-hope/-/vuepress-theme-hope-2.0.0-beta.36.tgz#2df7ab35d6a71e5e1ccebdcb169156c135e2630d"
+ integrity sha512-f68S7QUCmW1hZSoWw8mfliGIzyaavsYe8UVWf9mFBbbTMeiWs5i++JVrLId4J3Qozx0s21CWMhp2I1sBRmecVQ==
+ dependencies:
+ "@mr-hope/vuepress-plugin-components" "2.0.0-beta.36"
+ "@mr-hope/vuepress-shared" "2.0.0-beta.36"
+ "@types/bcryptjs" "^2.4.2"
+ "@types/lodash.throttle" "^4.1.6"
+ "@vuepress/cli" "2.0.0-beta.38"
+ "@vuepress/client" "2.0.0-beta.38"
+ "@vuepress/plugin-active-header-links" "2.0.0-beta.38"
+ "@vuepress/plugin-container" "2.0.0-beta.38"
+ "@vuepress/plugin-external-link-icon" "2.0.0-beta.38"
+ "@vuepress/plugin-git" "2.0.0-beta.38"
+ "@vuepress/plugin-nprogress" "2.0.0-beta.38"
+ "@vuepress/plugin-palette" "2.0.0-beta.38"
+ "@vuepress/plugin-prismjs" "2.0.0-beta.38"
+ "@vuepress/plugin-theme-data" "2.0.0-beta.38"
+ "@vuepress/shared" "2.0.0-beta.38"
+ "@vuepress/utils" "2.0.0-beta.38"
+ "@vueuse/core" "^8.2.4"
+ bcryptjs "^2.4.3"
+ lodash.throttle "^4.1.1"
+ vue "^3.2.31"
+ vue-router "^4.0.14"
+ vuepress-plugin-blog2 "2.0.0-beta.36"
+ vuepress-plugin-comment2 "2.0.0-beta.36"
+ vuepress-plugin-copy-code2 "2.0.0-beta.36"
+ vuepress-plugin-copyright2 "2.0.0-beta.36"
+ vuepress-plugin-feed2 "2.0.0-beta.36"
+ vuepress-plugin-md-enhance "2.0.0-beta.36"
+ vuepress-plugin-photo-swipe "2.0.0-beta.36"
+ vuepress-plugin-pwa2 "2.0.0-beta.36"
+ vuepress-plugin-reading-time2 "2.0.0-beta.36"
+ vuepress-plugin-sass-palette "2.0.0-beta.36"
+ vuepress-plugin-seo2 "2.0.0-beta.36"
+ vuepress-plugin-sitemap2 "2.0.0-beta.36"
+
+vuepress-vite@2.0.0-beta.38:
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/vuepress-vite/-/vuepress-vite-2.0.0-beta.38.tgz#d1aa7badecc3686bf77ed5665614b243d8f37d6c"
+ integrity sha512-jta0bZx+5smMkHI2s7bq+PJdvFK2jn08UsNL81IdLPNw34zwpdRthfT2v2lqtZnJOe2/E4ktWAhzwS3Oxu2GCw==
+ dependencies:
+ "@vuepress/bundler-vite" "2.0.0-beta.38"
+ "@vuepress/cli" "2.0.0-beta.38"
+ "@vuepress/core" "2.0.0-beta.38"
+ "@vuepress/theme-default" "2.0.0-beta.38"
+
+vuepress@^2.0.0-beta.38:
+ version "2.0.0-beta.38"
+ resolved "https://registry.npmmirror.com/vuepress/-/vuepress-2.0.0-beta.38.tgz#399a8f11809b27dbe6bdd0e7b20e27497a9521c9"
+ integrity sha512-NM6ekt5/aBsfPsp1VzuR8dEnia1nicmxFus/HMAe1x222jFGIr6XbX89jYYJuaPFMA4QwMcblY/PD6MCE65SrQ==
+ dependencies:
+ vuepress-vite "2.0.0-beta.38"
+
+w3c-hr-time@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
+ integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
+ dependencies:
+ browser-process-hrtime "^1.0.0"
+
+w3c-xmlserializer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
+ integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
+ dependencies:
+ xml-name-validator "^3.0.0"
+
+walker@^1.0.7:
+ version "1.0.8"
+ resolved "https://registry.npmmirror.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
+ integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
+ dependencies:
+ makeerror "1.0.12"
+
+wcwidth@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+ integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
+ dependencies:
+ defaults "^1.0.3"
+
+webidl-conversions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
+webidl-conversions@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
+ integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
+
+webidl-conversions@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
+ integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
+
+whatwg-encoding@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ dependencies:
+ iconv-lite "0.4.24"
+
+whatwg-mimetype@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+whatwg-url@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+ integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+whatwg-url@^8.0.0, whatwg-url@^8.5.0:
+ version "8.7.0"
+ resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
+ integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==
+ dependencies:
+ lodash "^4.7.0"
+ tr46 "^2.1.0"
+ webidl-conversions "^6.1.0"
+
+which-boxed-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+ integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+ dependencies:
+ is-bigint "^1.0.1"
+ is-boolean-object "^1.1.0"
+ is-number-object "^1.0.4"
+ is-string "^1.0.5"
+ is-symbol "^1.0.3"
+
+which-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+ integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==
+
+which@^1.2.14:
+ version "1.3.1"
+ resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+workbox-background-sync@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-background-sync/-/workbox-background-sync-6.5.2.tgz#28be9bf89b8e4e0379d45903280c7c12f4df836f"
+ integrity sha512-EjG37LSMDJ1TFlFg56wx6YXbH4/NkG09B9OHvyxx+cGl2gP5OuOzsCY3rOPJSpbcz6jpuA40VIC3HzSD4OvE1g==
+ dependencies:
+ idb "^6.1.4"
+ workbox-core "6.5.2"
+
+workbox-broadcast-update@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.2.tgz#b1f32bb40a9dcb5b05ca27e09fb7c01a0a126182"
+ integrity sha512-DjJYraYnprTZE/AQNoeogaxI1dPuYmbw+ZJeeP8uXBSbg9SNv5wLYofQgywXeRepv4yr/vglMo9yaHUmBMc+4Q==
+ dependencies:
+ workbox-core "6.5.2"
+
+workbox-build@^6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-build/-/workbox-build-6.5.2.tgz#774faafd84b1dc94b74739ceb5d8ff367748523b"
+ integrity sha512-TVi4Otf6fgwikBeMpXF9n0awHfZTMNu/nwlMIT9W+c13yvxkmDFMPb7vHYK6RUmbcxwPnz4I/R+uL76+JxG4JQ==
+ dependencies:
+ "@apideck/better-ajv-errors" "^0.3.1"
+ "@babel/core" "^7.11.1"
+ "@babel/preset-env" "^7.11.0"
+ "@babel/runtime" "^7.11.2"
+ "@rollup/plugin-babel" "^5.2.0"
+ "@rollup/plugin-node-resolve" "^11.2.1"
+ "@rollup/plugin-replace" "^2.4.1"
+ "@surma/rollup-plugin-off-main-thread" "^2.2.3"
+ ajv "^8.6.0"
+ common-tags "^1.8.0"
+ fast-json-stable-stringify "^2.1.0"
+ fs-extra "^9.0.1"
+ glob "^7.1.6"
+ lodash "^4.17.20"
+ pretty-bytes "^5.3.0"
+ rollup "^2.43.1"
+ rollup-plugin-terser "^7.0.0"
+ source-map "^0.8.0-beta.0"
+ stringify-object "^3.3.0"
+ strip-comments "^2.0.1"
+ tempy "^0.6.0"
+ upath "^1.2.0"
+ workbox-background-sync "6.5.2"
+ workbox-broadcast-update "6.5.2"
+ workbox-cacheable-response "6.5.2"
+ workbox-core "6.5.2"
+ workbox-expiration "6.5.2"
+ workbox-google-analytics "6.5.2"
+ workbox-navigation-preload "6.5.2"
+ workbox-precaching "6.5.2"
+ workbox-range-requests "6.5.2"
+ workbox-recipes "6.5.2"
+ workbox-routing "6.5.2"
+ workbox-strategies "6.5.2"
+ workbox-streams "6.5.2"
+ workbox-sw "6.5.2"
+ workbox-window "6.5.2"
+
+workbox-cacheable-response@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.2.tgz#d9252eb99f0d0fceb70f63866172f4eaac56a3e8"
+ integrity sha512-UnHGih6xqloV808T7ve1iNKZMbpML0jGLqkkmyXkJbZc5j16+HRSV61Qrh+tiq3E3yLvFMGJ3AUBODOPNLWpTg==
+ dependencies:
+ workbox-core "6.5.2"
+
+workbox-core@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-core/-/workbox-core-6.5.2.tgz#f5e06a22c6cb4651d3e13107443d972fdbd47364"
+ integrity sha512-IlxLGQf+wJHCR+NM0UWqDh4xe/Gu6sg2i4tfZk6WIij34IVk9BdOQgi6WvqSHd879jbQIUgL2fBdJUJyAP5ypQ==
+
+workbox-expiration@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-expiration/-/workbox-expiration-6.5.2.tgz#ee6ed755a220a0b375d67831f9237e4dcbccb59c"
+ integrity sha512-5Hfp0uxTZJrgTiy9W7AjIIec+9uTOtnxY/tRBm4DbqcWKaWbVTa+izrKzzOT4MXRJJIJUmvRhWw4oo8tpmMouw==
+ dependencies:
+ idb "^6.1.4"
+ workbox-core "6.5.2"
+
+workbox-google-analytics@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-google-analytics/-/workbox-google-analytics-6.5.2.tgz#a79fa7a40824873baaa333dcd72d1fdf1c53adf5"
+ integrity sha512-8SMar+N0xIreP5/2we3dwtN1FUmTMScoopL86aKdXBpio8vXc8Oqb5fCJG32ialjN8BAOzDqx/FnGeCtkIlyvw==
+ dependencies:
+ workbox-background-sync "6.5.2"
+ workbox-core "6.5.2"
+ workbox-routing "6.5.2"
+ workbox-strategies "6.5.2"
+
+workbox-navigation-preload@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.2.tgz#ffb3d9d5cdb881a3824851707da221dbb0bb3f23"
+ integrity sha512-iqDNWWMswjCsZuvGFDpcX1Z8InBVAlVBELJ28xShsWWntALzbtr0PXMnm2WHkXCc56JimmGldZi1N5yDPiTPOg==
+ dependencies:
+ workbox-core "6.5.2"
+
+workbox-precaching@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-precaching/-/workbox-precaching-6.5.2.tgz#a3117b4d3eb61ce8d01b9dfc063c48155bd7f9d3"
+ integrity sha512-OZAlQ8AAT20KugGKKuJMHdQ8X1IyNQaLv+mPTHj+8Dmv8peBq5uWNzs4g/1OSFmXsbXZ6a1CBC6YtQWVPhJQ9w==
+ dependencies:
+ workbox-core "6.5.2"
+ workbox-routing "6.5.2"
+ workbox-strategies "6.5.2"
+
+workbox-range-requests@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-range-requests/-/workbox-range-requests-6.5.2.tgz#b8b7e5b5830fecc22f0a1d8815457921df2e5bf9"
+ integrity sha512-zi5VqF1mWqfCyJLTMXn1EuH/E6nisqWDK1VmOJ+TnjxGttaQrseOhMn+BMvULFHeF8AvrQ0ogfQ6bSv0rcfAlg==
+ dependencies:
+ workbox-core "6.5.2"
+
+workbox-recipes@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-recipes/-/workbox-recipes-6.5.2.tgz#19f47ec25a8788c65d0cc8d217cbebc0bbbb5c63"
+ integrity sha512-2lcUKMYDiJKvuvRotOxLjH2z9K7jhj8GNUaHxHNkJYbTCUN3LsX1cWrsgeJFDZ/LgI565t3fntpbG9J415ZBXA==
+ dependencies:
+ workbox-cacheable-response "6.5.2"
+ workbox-core "6.5.2"
+ workbox-expiration "6.5.2"
+ workbox-precaching "6.5.2"
+ workbox-routing "6.5.2"
+ workbox-strategies "6.5.2"
+
+workbox-routing@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-routing/-/workbox-routing-6.5.2.tgz#e0ad46246ba51224fd57eff0dd46891b3220cb9a"
+ integrity sha512-nR1w5PjF6IVwo0SX3oE88LhmGFmTnqqU7zpGJQQPZiKJfEKgDENQIM9mh3L1ksdFd9Y3CZVkusopHfxQvit/BA==
+ dependencies:
+ workbox-core "6.5.2"
+
+workbox-strategies@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-strategies/-/workbox-strategies-6.5.2.tgz#56b02e6959c6391351011fc2e5b0829aff1ed859"
+ integrity sha512-fgbwaUMxbG39BHjJIs2y2X21C0bmf1Oq3vMQxJ1hr6y5JMJIm8rvKCcf1EIdAr+PjKdSk4ddmgyBQ4oO8be4Uw==
+ dependencies:
+ workbox-core "6.5.2"
+
+workbox-streams@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-streams/-/workbox-streams-6.5.2.tgz#2fb6ba307f7d2cbda63f64522a197be868b4ea25"
+ integrity sha512-ovD0P4UrgPtZ2Lfc/8E8teb1RqNOSZr+1ZPqLR6sGRZnKZviqKbQC3zVvvkhmOIwhWbpL7bQlWveLVONHjxd5w==
+ dependencies:
+ workbox-core "6.5.2"
+ workbox-routing "6.5.2"
+
+workbox-sw@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-sw/-/workbox-sw-6.5.2.tgz#2f5dca0e96c61a450fccf0405095ddf1b6f43bc7"
+ integrity sha512-2KhlYqtkoqlnPdllj2ujXUKRuEFsRDIp6rdE4l1PsxiFHRAFaRTisRQpGvRem5yxgXEr+fcEKiuZUW2r70KZaw==
+
+workbox-window@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.npmmirror.com/workbox-window/-/workbox-window-6.5.2.tgz#46d6412cd57039bdf3d5dd914ad21fb3f98fe980"
+ integrity sha512-2kZH37r9Wx8swjEOL4B8uGM53lakMxsKkQ7mOKzGA/QAn/DQTEZGrdHWtypk2tbhKY5S0jvPS+sYDnb2Z3378A==
+ dependencies:
+ "@types/trusted-types" "^2.0.2"
+ workbox-core "6.5.2"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+write-file-atomic@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
+ws@^7.4.6:
+ version "7.5.7"
+ resolved "https://registry.npmmirror.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67"
+ integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==
+
+xml-js@^1.6.11:
+ version "1.6.11"
+ resolved "https://registry.npmmirror.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9"
+ integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==
+ dependencies:
+ sax "^1.2.4"
+
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+xmlchars@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+ integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
+xtend@~4.0.0, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^3.2.1:
+ version "3.2.2"
+ resolved "https://registry.npmmirror.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696"
+ integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==
+
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yargs-parser@^20.2.2:
+ version "20.2.9"
+ resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+ integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
+
+yargs-parser@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-5.0.1.tgz#7ede329c1d8cdbbe209bd25cdb990e9b1ebbb394"
+ integrity sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==
+ dependencies:
+ camelcase "^3.0.0"
+ object.assign "^4.1.0"
+
+yargs@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
+
+yargs@^7.1.0:
+ version "7.1.2"
+ resolved "https://registry.npmmirror.com/yargs/-/yargs-7.1.2.tgz#63a0a5d42143879fdbb30370741374e0641d55db"
+ integrity sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==
+ dependencies:
+ camelcase "^3.0.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^1.4.0"
+ read-pkg-up "^1.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^1.0.2"
+ which-module "^1.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^5.0.1"