From 298c583fa7c06d977487efcc1c2a4c9485a8f1bc Mon Sep 17 00:00:00 2001 From: CocaColf Date: Mon, 25 Apr 2022 15:49:52 +0800 Subject: [PATCH 01/17] fix: Fix a bug in the projects with installed dependencies --- .eslintrc | 4 +- README.md | 12 +- bin/coderfly.js | 57 +- docs/README_CN.md | 14 +- package.json | 8 +- src/const.ts | 6 + src/match_version.ts | 30 ++ src/utils/function_change/diff.ts | 10 +- src/utils/function_change/file_change.ts | 6 +- src/utils/function_change/index.ts | 4 + src/utils/handle_config.ts | 39 ++ src/utils/handle_file_utils.ts | 2 - tsconfig.json | 2 +- yarn.lock | 651 +++++++++++------------ 14 files changed, 431 insertions(+), 414 deletions(-) create mode 100644 src/match_version.ts create mode 100644 src/utils/handle_config.ts diff --git a/.eslintrc b/.eslintrc index 2b5ecb0..ebf9f05 100644 --- a/.eslintrc +++ b/.eslintrc @@ -12,6 +12,8 @@ "rules": { "no-explicit-any": 0, "no-non-null-assertion": 0, - "no-useless-escape": 0 + "no-useless-escape": 0, + "@typescript-eslint/no-var-requires": 0, + "no-empty": 0 } } \ No newline at end of file diff --git a/README.md b/README.md index 8756b47..ebc4062 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ You can also write configuration file named `.coderflyrc`, mainly to simplify al // ... } ``` +> The results are written to the impact_report.json file in the directory where the command was executed ![command line](./docs/pics/command_line.png) @@ -116,10 +117,19 @@ interface ImpactReason { } ``` +### matchVueVersion + +Since the use of `vue-template-compiler` must be consistent with the `vue` version, otherwise an error will be reported, you must keep them both consistent before using `coderfly`. You can either manually install the corresponding version of `vue-template-compiler` in your project yourself, or you can use the API to do this in your code. Note that this operation needs to be called before using the other APIs. + ## Example ```js -import { diff, getAllFiles, getFuncTree, getImpacts } from "coderfly"; +// if necessary +const { matchVueVersion } = require('coderfly/dist/match_version'); + +matchVueVersion(); + +const { diff, getAllFiles, getFuncTree, getImpacts } = require('coderfly'); // diff const functionDiffInfo = diff(); diff --git a/bin/coderfly.js b/bin/coderfly.js index 2130f6a..25490f8 100644 --- a/bin/coderfly.js +++ b/bin/coderfly.js @@ -1,17 +1,13 @@ #!/usr/bin/env node - -import fs from 'fs'; -import path from 'path'; -import { program } from 'commander'; -import { createRequire } from "module"; -import ora from 'ora'; -import { diff, getAllFiles, getFuncTree, getImpacts } from '../dist/index.js'; -const require = createRequire(import.meta.url); +const fs = require('fs'); +const path = require('path'); +const { program } = require('commander'); +const ora = require('ora'); +const { diff, getAllFiles, getFuncTree, getImpacts } = require('../dist/index.js'); const pkg = require('../package.json'); +const { CONFIG_FILENAME, TREE_FILE, REPORT_FILE } = require('../dist/const.js'); +const { parseAliasFromConfig, lookFileOrFolderUp } = require('../dist/utils/handle_config'); -const CONFIG_FILENAME = '.coderflyrc'; -const TREE_FILE = path.resolve(process.cwd(), './file_tree.json'); -const REPORT_FILE = path.resolve(process.cwd(), './impact_report.json'); const newsBoy = ora(); program @@ -108,41 +104,4 @@ function parseAliasFromOptions (alias) { } return result; -} - -function parseAliasFromConfig (config) { - Object.keys(config).forEach(alias => { - config[alias] = path.resolve(process.cwd(), config[alias]); - }); - - return config; -} - -function lookFileOrFolderUp (target, baseDir) { - const cwd = process.cwd(); - let oldPath = ''; - let newPath; - - if (baseDir) { - if (path.isAbsolute(baseDir)) { - newPath = baseDir; - } else { - newPath = path.resolve(cwd, baseDir); - } - } else { - newPath = cwd; - } - - while (oldPath !== newPath) { - oldPath = newPath; - const files = fs.readdirSync(newPath); - for (const file of files) { - if (file === target) { - return newPath; - } - } - newPath = path.dirname(oldPath); - } - return ''; -}; - +} \ No newline at end of file diff --git a/docs/README_CN.md b/docs/README_CN.md index 9c75247..8db2654 100644 --- a/docs/README_CN.md +++ b/docs/README_CN.md @@ -50,6 +50,8 @@ } ``` +> 分析结果会写入在执行命令的目录下的 impact_report.json 文件中 + ![command line](./pics/command_line.png) **使用 API** @@ -115,10 +117,20 @@ interface ImpactReason { } ``` +### matchVueVersion + +由于 `vue-template-compiler` 的使用必须保持和 `vue` 版本一致,否则会报错,因此在使用 `coderfly` 前必须将二者保持一致。你可以自己手动在项目中安装对应的 `vue-template-compiler` 版本,也可以使用该 API 在代码中完成此操作。注意此操作需要在使用其他 API 之前调用 + + ## 示例 ```js -import { diff, getAllFiles, getFuncTree, getImpacts } from "coderfly"; +// 如果有必要 +const { matchVueVersion } = require('coderfly/dist/match_version'); + +matchVueVersion(); + +const { diff, getAllFiles, getFuncTree, getImpacts } = require('coderfly'); // diff const functionDiffInfo = diff(); diff --git a/package.json b/package.json index 935217d..0dea719 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,9 @@ { "name": "coderfly", "description": "Find function-level association impacts of code changes", - "version": "0.1.0", + "version": "0.1.1", "author": "CocaColf ", "main": "dist/index.js", - "type": "module", "bin": { "coderfly": "bin/coderfly.js" }, @@ -35,11 +34,10 @@ "@types/lodash-es": "^4.17.6", "commander": "^9.1.0", "enhanced-resolve": "^5.9.2", - "execa": "^6.1.0", + "execa": "5.1.1", "lodash-es": "^4.17.21", "n-readlines": "^1.0.1", - "ora": "^6.1.0", - "parse-git-diff": "^0.0.6", + "ora": "5.4.1", "recast": "^0.20.5", "vue-template-compiler": "^2.6.14" } diff --git a/src/const.ts b/src/const.ts index 01cbdf5..bb28e1f 100644 --- a/src/const.ts +++ b/src/const.ts @@ -1,3 +1,5 @@ +import path from "path"; + export const ALLOW_EXT = ['.vue', '.js', '.ts']; export const UN_KNOWN = 'unknown'; export const IS_TOP_SCOPE = '[is_top_scope]'; @@ -5,3 +7,7 @@ export const IS_TOP_SCOPE = '[is_top_scope]'; export const MUSTACHE_TAG_REG = /\{\{((?:.|\n)+?)\}\}/g; export const TEXT_NODE_TYPES = [2, 3]; + +export const CONFIG_FILENAME = '.coderflyrc'; +export const TREE_FILE = path.resolve(process.cwd(), './file_tree.json'); +export const REPORT_FILE = path.resolve(process.cwd(), './impact_report.json'); diff --git a/src/match_version.ts b/src/match_version.ts new file mode 100644 index 0000000..26fccf1 --- /dev/null +++ b/src/match_version.ts @@ -0,0 +1,30 @@ +import { commandSync } from "execa"; +import path from "path"; +import { lookFileOrFolderUp } from "./utils/handle_config.js"; + +export function matchVueVersion () { + let vueVersion = 'latest'; + let vueTemplateCompilerVersion = ''; + + try { + vueVersion = require('vue').version; + const vtcDir = require.resolve('vue-template-compiler'); + if (vtcDir) { + vueTemplateCompilerVersion = require(`${path.dirname(vtcDir)}/package.json`).version; + } + } catch (e) {} + + if (vueVersion && vueTemplateCompilerVersion && vueTemplateCompilerVersion === vueVersion) { + return; + } + + // use yarn or npm + const yarnLockDir = lookFileOrFolderUp('yarn.lock', process.cwd()); + if (yarnLockDir) { + try { commandSync('yarn remove vue-template-compiler') } catch {} + commandSync(`yarn add vue-template-compiler@${vueVersion}`); + } else { + try { commandSync('npm uninstall vue-template-compiler') } catch {} + commandSync(`npm install vue-template-compiler@${vueVersion}`); + } +} \ No newline at end of file diff --git a/src/utils/function_change/diff.ts b/src/utils/function_change/diff.ts index 1f84f2c..55b6a47 100644 --- a/src/utils/function_change/diff.ts +++ b/src/utils/function_change/diff.ts @@ -1,9 +1,8 @@ import * as fs from 'fs'; import * as path from 'path'; -import { execaCommandSync } from 'execa'; +import { commandSync } from 'execa'; import lineByLine from 'n-readlines'; import { parse, visit } from 'recast'; -import { createRequire } from 'module'; import { parseComponent } from 'vue-template-compiler'; import { DiffFunctionInfo, FunctionInfo } from '../../type'; @@ -23,7 +22,7 @@ export function getFunctionDiffInfo (filePath: string, commitSha?: string) { // treat it as a new file functionInfoBefore = {}; } else { - const beforeCtx = execaCommandSync(`git cat-file blob ${blobId}`).stdout; + const beforeCtx = commandSync(`git cat-file blob ${blobId}`).stdout; const tempFile = `./temp_${path.posix.basename(filePath)}`; fs.writeFileSync(tempFile, beforeCtx); functionInfoBefore = getFunctionBlock(tempFile); @@ -70,7 +69,6 @@ function getFunctionBlock (filePath: string) { } try { - const require = createRequire(import.meta.url); ast = parse(code, { parser: require('recast/parsers/babel'), }); @@ -214,7 +212,7 @@ function getFileCtxBeforeChange (filePath: string, commitSha?: string) { commitSha = latestCommitSha(); } - const gitBlobs = execaCommandSync(`git ls-tree -r ${commitSha}`).stdout; + const gitBlobs = commandSync(`git ls-tree -r ${commitSha}`).stdout; const blobArr = gitBlobs.split('\n'); for (const blobItem of blobArr) { @@ -226,5 +224,5 @@ function getFileCtxBeforeChange (filePath: string, commitSha?: string) { } function latestCommitSha () { - return execaCommandSync('git rev-parse HEAD').stdout; + return commandSync('git rev-parse HEAD').stdout; } \ No newline at end of file diff --git a/src/utils/function_change/file_change.ts b/src/utils/function_change/file_change.ts index 57f321c..4c4d35e 100644 --- a/src/utils/function_change/file_change.ts +++ b/src/utils/function_change/file_change.ts @@ -1,11 +1,11 @@ -import { execaCommandSync } from 'execa'; +import { commandSync } from 'execa'; import { FileChange } from '../../type'; const COMMANDS = ['git diff --name-status', 'git diff --name-status --staged']; const formatList = (str: string, type: string) => { const arr = str.split('\n').filter(item => { - const regex = new RegExp(`[${type}].*`) + const regex = new RegExp(`[${type}].*`); if (regex.test(item)) { return item !== undefined; } @@ -23,7 +23,7 @@ export function getFileChange () { const typeList = ['M', 'D', 'A']; for (const command of COMMANDS) { - const changeInfo = execaCommandSync(command).stdout; + const changeInfo = commandSync(command).stdout; typeList.forEach(type => { const formatResult = formatList(changeInfo, type); diff --git a/src/utils/function_change/index.ts b/src/utils/function_change/index.ts index eb0a239..985417e 100644 --- a/src/utils/function_change/index.ts +++ b/src/utils/function_change/index.ts @@ -1,3 +1,5 @@ +import path from "path"; +import { ALLOW_EXT } from "../../const.js"; import { DiffInfo } from "../../type"; import { getFunctionDiffInfo } from "./diff.js"; import { getFileChange } from "./file_change.js"; @@ -11,6 +13,8 @@ export function diff () { const files = changedList[changeType]; for (const file of files) { + if (!ALLOW_EXT.includes(path.extname(file))) continue; + result.push({ file, ...getFunctionDiffInfo(file) diff --git a/src/utils/handle_config.ts b/src/utils/handle_config.ts new file mode 100644 index 0000000..e8e8f99 --- /dev/null +++ b/src/utils/handle_config.ts @@ -0,0 +1,39 @@ +import path from 'path'; +import fs from 'fs'; +import { NameAndPath } from '../type'; + +export function lookFileOrFolderUp (target: string, baseDir: string) { + const cwd = process.cwd(); + let oldPath = ''; + let newPath; + + if (baseDir) { + if (path.isAbsolute(baseDir)) { + newPath = baseDir; + } else { + newPath = path.resolve(cwd, baseDir); + } + } else { + newPath = cwd; + } + + while (oldPath !== newPath) { + oldPath = newPath; + const files = fs.readdirSync(newPath); + for (const file of files) { + if (file === target) { + return newPath; + } + } + newPath = path.dirname(oldPath); + } + return ''; +} + +export function parseAliasFromConfig (config: NameAndPath) { + Object.keys(config).forEach(alias => { + config[alias] = path.resolve(process.cwd(), config[alias]); + }); + + return config; +} diff --git a/src/utils/handle_file_utils.ts b/src/utils/handle_file_utils.ts index b48b1b4..8b32ddc 100644 --- a/src/utils/handle_file_utils.ts +++ b/src/utils/handle_file_utils.ts @@ -1,6 +1,5 @@ import * as fs from 'fs'; import * as path from 'path'; -import { createRequire } from 'module'; import { parse, visit } from 'recast'; import { parseComponent, compile } from 'vue-template-compiler'; import lineByLine from 'n-readlines'; @@ -16,7 +15,6 @@ import { } from '../type'; import { getTemplateInfo } from './parse_template_ast.js'; -const require = createRequire(import.meta.url); const { create } = require('enhanced-resolve'); function getAllFiles (folderPath: string): string[] { diff --git a/tsconfig.json b/tsconfig.json index bb8e456..0812a46 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ "outDir": "./dist", "declaration": false, "target": "es6", - "module": "EsNext", + "module": "commonjs", "noImplicitAny": true, "moduleResolution": "node", "strict": true, diff --git a/yarn.lock b/yarn.lock index 816828a..b295c62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,13 +4,13 @@ "@babel/parser@^7.17.8": version "7.17.9" - resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef" integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg== -"@eslint/eslintrc@^1.2.1": - version "1.2.1" - resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6" - integrity sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ== +"@eslint/eslintrc@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.2.tgz#4989b9e8c0216747ee7cca314ae73791bb281aae" + integrity sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -24,7 +24,7 @@ "@humanwhocodes/config-array@^0.9.2": version "0.9.5" - resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== dependencies: "@humanwhocodes/object-schema" "^1.2.1" @@ -33,12 +33,12 @@ "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@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" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -46,12 +46,12 @@ "@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" + resolved "https://registry.yarnpkg.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" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -59,41 +59,41 @@ "@types/json-schema@^7.0.9": version "7.0.11" - resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/lodash-es@^4.17.6": version "4.17.6" - resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== 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== + version "4.14.182" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" + integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== "@types/n-readlines@^1.0.3": version "1.0.3" - resolved "https://registry.npmmirror.com/@types/n-readlines/-/n-readlines-1.0.3.tgz#0a4a02d6f55280e5ad82f372d5c8e3eebfc05db4" + resolved "https://registry.yarnpkg.com/@types/n-readlines/-/n-readlines-1.0.3.tgz#0a4a02d6f55280e5ad82f372d5c8e3eebfc05db4" integrity sha512-6zMvlOZp56sEEndnkEX+A05Q+LrPB7yDUX1d5oE0aOF9rIE10ndhZHEy0mBFqzBUIw5sSFMUypwgD3FehplPvg== dependencies: "@types/node" "*" "@types/node@*", "@types/node@^17.0.22": - version "17.0.24" - resolved "https://registry.npmmirror.com/@types/node/-/node-17.0.24.tgz#20ba1bf69c1b4ab405c7a01e950c4f446b05029f" - integrity sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g== + version "17.0.26" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.26.tgz#1bbff9b23ee5a64f87b4f30c0c854b112ee2e635" + integrity sha512-z/FG/6DUO7pnze3AE3TBGIjGGKkvCcGcWINe1C7cADY8hKLJPDYpzsNE37uExQ4md5RFtTCvg+M8Mu1Enyeg2A== "@typescript-eslint/eslint-plugin@^5.19.0": - version "5.19.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.19.0.tgz#9608a4b6d0427104bccf132f058cba629a6553c0" - integrity sha512-w59GpFqDYGnWFim9p6TGJz7a3qWeENJuAKCqjGSx+Hq/bwq3RZwXYqy98KIfN85yDqz9mq6QXiY5h0FjGQLyEg== + version "5.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.20.0.tgz#022531a639640ff3faafaf251d1ce00a2ef000a1" + integrity sha512-fapGzoxilCn3sBtC6NtXZX6+P/Hef7VDbyfGqTTpzYydwhlkevB+0vE0EnmHPVTVSy68GUncyJ/2PcrFBeCo5Q== dependencies: - "@typescript-eslint/scope-manager" "5.19.0" - "@typescript-eslint/type-utils" "5.19.0" - "@typescript-eslint/utils" "5.19.0" + "@typescript-eslint/scope-manager" "5.20.0" + "@typescript-eslint/type-utils" "5.20.0" + "@typescript-eslint/utils" "5.20.0" debug "^4.3.2" functional-red-black-tree "^1.0.1" ignore "^5.1.8" @@ -102,83 +102,83 @@ tsutils "^3.21.0" "@typescript-eslint/parser@^5.19.0": - version "5.19.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.19.0.tgz#05e587c1492868929b931afa0cb5579b0f728e75" - integrity sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ== + version "5.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.20.0.tgz#4991c4ee0344315c2afc2a62f156565f689c8d0b" + integrity sha512-UWKibrCZQCYvobmu3/N8TWbEeo/EPQbS41Ux1F9XqPzGuV7pfg6n50ZrFo6hryynD8qOTTfLHtHjjdQtxJ0h/w== dependencies: - "@typescript-eslint/scope-manager" "5.19.0" - "@typescript-eslint/types" "5.19.0" - "@typescript-eslint/typescript-estree" "5.19.0" + "@typescript-eslint/scope-manager" "5.20.0" + "@typescript-eslint/types" "5.20.0" + "@typescript-eslint/typescript-estree" "5.20.0" debug "^4.3.2" -"@typescript-eslint/scope-manager@5.19.0": - version "5.19.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz#97e59b0bcbcb54dbcdfba96fc103b9020bbe9cb4" - integrity sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g== +"@typescript-eslint/scope-manager@5.20.0": + version "5.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.20.0.tgz#79c7fb8598d2942e45b3c881ced95319818c7980" + integrity sha512-h9KtuPZ4D/JuX7rpp1iKg3zOH0WNEa+ZIXwpW/KWmEFDxlA/HSfCMhiyF1HS/drTICjIbpA6OqkAhrP/zkCStg== dependencies: - "@typescript-eslint/types" "5.19.0" - "@typescript-eslint/visitor-keys" "5.19.0" + "@typescript-eslint/types" "5.20.0" + "@typescript-eslint/visitor-keys" "5.20.0" -"@typescript-eslint/type-utils@5.19.0": - version "5.19.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.19.0.tgz#80f2125b0dfe82494bbae1ea99f1c0186d420282" - integrity sha512-O6XQ4RI4rQcBGshTQAYBUIGsKqrKeuIOz9v8bckXZnSeXjn/1+BDZndHLe10UplQeJLXDNbaZYrAytKNQO2T4Q== +"@typescript-eslint/type-utils@5.20.0": + version "5.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.20.0.tgz#151c21cbe9a378a34685735036e5ddfc00223be3" + integrity sha512-WxNrCwYB3N/m8ceyoGCgbLmuZwupvzN0rE8NBuwnl7APgjv24ZJIjkNzoFBXPRCGzLNkoU/WfanW0exvp/+3Iw== dependencies: - "@typescript-eslint/utils" "5.19.0" + "@typescript-eslint/utils" "5.20.0" debug "^4.3.2" tsutils "^3.21.0" -"@typescript-eslint/types@5.19.0": - version "5.19.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.19.0.tgz#12d3d600d754259da771806ee8b2c842d3be8d12" - integrity sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w== +"@typescript-eslint/types@5.20.0": + version "5.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.20.0.tgz#fa39c3c2aa786568302318f1cb51fcf64258c20c" + integrity sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg== -"@typescript-eslint/typescript-estree@5.19.0": - version "5.19.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz#fc987b8f62883f9ea6a5b488bdbcd20d33c0025f" - integrity sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw== +"@typescript-eslint/typescript-estree@5.20.0": + version "5.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.20.0.tgz#ab73686ab18c8781bbf249c9459a55dc9417d6b0" + integrity sha512-36xLjP/+bXusLMrT9fMMYy1KJAGgHhlER2TqpUVDYUQg4w0q/NW/sg4UGAgVwAqb8V4zYg43KMUpM8vV2lve6w== dependencies: - "@typescript-eslint/types" "5.19.0" - "@typescript-eslint/visitor-keys" "5.19.0" + "@typescript-eslint/types" "5.20.0" + "@typescript-eslint/visitor-keys" "5.20.0" debug "^4.3.2" globby "^11.0.4" is-glob "^4.0.3" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/utils@5.19.0": - version "5.19.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.19.0.tgz#fe87f1e3003d9973ec361ed10d36b4342f1ded1e" - integrity sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ== +"@typescript-eslint/utils@5.20.0": + version "5.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.20.0.tgz#b8e959ed11eca1b2d5414e12417fd94cae3517a5" + integrity sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.19.0" - "@typescript-eslint/types" "5.19.0" - "@typescript-eslint/typescript-estree" "5.19.0" + "@typescript-eslint/scope-manager" "5.20.0" + "@typescript-eslint/types" "5.20.0" + "@typescript-eslint/typescript-estree" "5.20.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.19.0": - version "5.19.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz#c84ebc7f6c744707a361ca5ec7f7f64cd85b8af6" - integrity sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ== +"@typescript-eslint/visitor-keys@5.20.0": + version "5.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.20.0.tgz#70236b5c6b67fbaf8b2f58bf3414b76c1e826c2a" + integrity sha512-1flRpNF+0CAQkMNlTJ6L/Z5jiODG/e5+7mk6XwtPOUS3UrTz3UOiAg9jG2VtKsWI6rZQfy4C6a232QNRZTRGlg== dependencies: - "@typescript-eslint/types" "5.19.0" + "@typescript-eslint/types" "5.20.0" eslint-visitor-keys "^3.0.0" acorn-jsx@^5.3.1: version "5.3.2" - resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.7.0: version "8.7.0" - resolved "https://registry.npmmirror.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -188,60 +188,55 @@ ajv@^6.10.0, ajv@^6.12.4: ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== ast-types@0.14.2: version "0.14.2" - resolved "https://registry.npmmirror.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== dependencies: tslib "^2.0.1" balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bl@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/bl/-/bl-5.0.0.tgz#6928804a41e9da9034868e1c50ca88f21f57aea2" - integrity sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ== +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: - buffer "^6.0.3" + 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" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -249,79 +244,74 @@ brace-expansion@^1.1.7: braces@^3.0.2: version "3.0.2" - resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" - ieee754 "^1.2.1" + ieee754 "^1.1.13" callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.yarnpkg.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" -chalk@^5.0.0: - version "5.0.1" - resolved "https://registry.npmmirror.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" - integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== - -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: - restore-cursor "^4.0.0" + restore-cursor "^3.1.0" -cli-spinners@^2.6.1: +cli-spinners@^2.5.0: version "2.6.1" - resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== 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== + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.yarnpkg.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.4: version "1.1.4" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== commander@^9.1.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== + version "9.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.2.0.tgz#6e21014b2ed90d8b7c9647230d8b7a94a4a419a9" + integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== 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== + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -330,45 +320,45 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: de-indent@^1.0.2: version "1.0.2" - resolved "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= debug@^4.1.1, debug@^4.3.2: version "4.3.4" - resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 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== + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: clone "^1.0.2" dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" enhanced-resolve@^5.9.2: version "5.9.3" - resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88" integrity sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow== dependencies: graceful-fs "^4.2.4" @@ -376,12 +366,12 @@ enhanced-resolve@^5.9.2: escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -389,7 +379,7 @@ eslint-scope@^5.1.1: eslint-scope@^7.1.1: version "7.1.1" - resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" @@ -397,27 +387,27 @@ eslint-scope@^7.1.1: eslint-utils@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^2.0.0: version "2.1.0" - resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: version "3.3.0" - resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.13.0: - version "8.13.0" - resolved "https://registry.npmmirror.com/eslint/-/eslint-8.13.0.tgz#6fcea43b6811e655410f5626cfcf328016badcd7" - integrity sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ== + version "8.14.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.14.0.tgz#62741f159d9eb4a79695b28ec4989fcdec623239" + integrity sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw== dependencies: - "@eslint/eslintrc" "^1.2.1" + "@eslint/eslintrc" "^1.2.2" "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" @@ -455,7 +445,7 @@ eslint@^8.13.0: espree@^9.3.1: version "9.3.1" - resolved "https://registry.npmmirror.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== dependencies: acorn "^8.7.0" @@ -464,61 +454,61 @@ espree@^9.3.1: esprima@~4.0.0: version "4.0.1" - resolved "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.0: version "1.4.0" - resolved "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -execa@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" - integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== +execa@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^3.0.1" - is-stream "^3.0.0" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.9: version "3.2.11" - resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -529,38 +519,38 @@ fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 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== + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: version "1.13.0" - resolved "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -568,41 +558,41 @@ flat-cache@^3.0.4: flatted@^3.1.0: version "3.2.5" - resolved "https://registry.npmmirror.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== 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== + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -get-stream@^6.0.1: +get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== glob-parent@^5.1.2: version "5.1.2" - resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.1: version "6.0.2" - resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@^7.1.3: version "7.2.0" - resolved "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" @@ -614,14 +604,14 @@ glob@^7.1.3: globals@^13.6.0, globals@^13.9.0: version "13.13.0" - resolved "https://registry.npmmirror.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A== dependencies: type-fest "^0.20.2" globby@^11.0.4: version "11.1.0" - resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -633,37 +623,37 @@ globby@^11.0.4: graceful-fs@^4.2.4: version "4.2.10" - resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== he@^1.1.0: version "1.2.0" - resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -human-signals@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" - integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -ieee754@^1.2.1: +ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.1.8, ignore@^5.2.0: version "5.2.0" - resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -671,79 +661,79 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 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== + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" inherits@2, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" - resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 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== + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" - resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-interactive@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" - integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-unicode-supported@^1.1.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz#f4f54f34d8ebc84a46b93559a036763b6d3e1014" - integrity sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ== +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 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== + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= levn@^0.4.1: version "0.4.1" - resolved "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -751,42 +741,42 @@ levn@^0.4.1: lodash-es@^4.17.21: version "4.17.21" - resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -log-symbols@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" - integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^5.0.0" - is-unicode-supported "^1.1.0" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.yarnpkg.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" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -794,67 +784,55 @@ micromatch@^4.0.4: mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - minimatch@^3.0.4: version "3.1.2" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" ms@2.1.2: version "2.1.2" - resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== n-readlines@^1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/n-readlines/-/n-readlines-1.0.1.tgz#bbb7364d38bc31a170a199f986fcacfa76b95f6e" + resolved "https://registry.yarnpkg.com/n-readlines/-/n-readlines-1.0.1.tgz#bbb7364d38bc31a170a199f986fcacfa76b95f6e" integrity sha512-z4SyAIVgMy7CkgsoNw7YVz40v0g4+WWvvqy8+ZdHrCtgevcEO758WQyrYcw3XPxcLxF+//RszTz/rO48nzD0wQ== 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== + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: - path-key "^4.0.0" + path-key "^3.0.0" once@^1.3.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== + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - optionator@^0.9.1: version "0.9.1" - resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" @@ -864,76 +842,66 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/ora/-/ora-6.1.0.tgz#86aa07058c4e9fb91444412d103b0d7e01aca973" - integrity sha512-CxEP6845hLK+NHFWZ+LplGO4zfw4QSfxTlqMfvlJ988GoiUeZDMzCvqsZkFHv69sPICmJH1MDxZoQFOKXerAVw== - dependencies: - bl "^5.0.0" - chalk "^5.0.0" - cli-cursor "^4.0.0" - cli-spinners "^2.6.1" - is-interactive "^2.0.0" - is-unicode-supported "^1.1.0" - log-symbols "^5.1.0" - strip-ansi "^7.0.1" +ora@5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.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" parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" -parse-git-diff@^0.0.6: - version "0.0.6" - resolved "https://registry.npmmirror.com/parse-git-diff/-/parse-git-diff-0.0.6.tgz#53fe52fde5352f48e0255dfee7f20fd315f8571c" - integrity sha512-y1+HxSPPIyFnjlYy+ycLmEZTxk1V6pXy26w163mGdWWsBmemdIl+jXLrdvDQ4GEwa5fDD5jWGEf2CRUOml75xQ== - 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== + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^3.1.0: +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" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== punycode@^2.1.0: version "2.1.1" - resolved "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "https://registry.yarnpkg.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" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== readable-stream@^3.4.0: version "3.6.0" - resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" @@ -942,7 +910,7 @@ readable-stream@^3.4.0: recast@^0.20.5: version "0.20.5" - resolved "https://registry.npmmirror.com/recast/-/recast-0.20.5.tgz#8e2c6c96827a1b339c634dd232957d230553ceae" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.5.tgz#8e2c6c96827a1b339c634dd232957d230553ceae" integrity sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ== dependencies: ast-types "0.14.2" @@ -952,189 +920,182 @@ recast@^0.20.5: regexpp@^3.2.0: version "3.2.0" - resolved "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.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" reusify@^1.0.4: version "1.0.4" - resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== semver@^7.3.5: version "7.3.7" - resolved "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.yarnpkg.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" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -signal-exit@^3.0.2, signal-exit@^3.0.7: +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" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== source-map@~0.6.1: version "0.6.1" - resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" -strip-ansi@^6.0.1: +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" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@^3.1.0, 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" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" tapable@^2.2.0: version "2.2.1" - resolved "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== text-table@^0.2.0: version "0.2.0" - resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 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" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tslib@^1.8.1: version "1.14.1" - resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.1: - version "2.3.1" - resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== typescript@^4.6.3: version "4.6.3" - resolved "https://registry.npmmirror.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" 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== + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= v8-compile-cache@^2.0.3: version "2.3.0" - resolved "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== vue-template-compiler@^2.6.14: version "2.6.14" - resolved "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz#a2f0e7d985670d42c9c9ee0d044fed7690f4f763" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz#a2f0e7d985670d42c9c9ee0d044fed7690f4f763" integrity sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g== dependencies: de-indent "^1.0.2" @@ -1142,29 +1103,29 @@ vue-template-compiler@^2.6.14: 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== + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: defaults "^1.0.3" which@^2.0.1: version "2.0.2" - resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.yarnpkg.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" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 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== + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== From 5debea38a455994662edcfc7d4b3f82bbd1ae43f Mon Sep 17 00:00:00 2001 From: CocaColf Date: Fri, 29 Apr 2022 10:58:04 +0800 Subject: [PATCH 02/17] feat: support typescript tech stack parse --- README.md | 11 +- bin/coderfly.js | 5 +- docs/README_CN.md | 15 +- package.json | 4 + src/const.ts | 2 +- src/impact.ts | 14 +- src/utils/function_change/diff.ts | 11 +- src/utils/handle_file_utils.ts | 20 +- yarn.lock | 1198 ++++++++++++++++++++++++++++- 9 files changed, 1252 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index ebc4062..404abe7 100644 --- a/README.md +++ b/README.md @@ -42,12 +42,13 @@ Options: Configuration file: -You can also write configuration file named `.coderflyrc`, mainly to simplify alias. Note: **It must be written in json form**. +You can also write configuration file named `.coderflyrc.js`, mainly to simplify alias. ```js -// .coderflyrc -{ - "src": "./test", +// .coderflyrc.js +const path = require('path'); +module.exports = { + 'src': path.resolve(process.cwd(), 'test'), // ... } ``` @@ -158,8 +159,8 @@ console.log(impacts); - [x] JavaScript - [x] Vue2 +- [x] TypeScript - [ ] Vue3 -- [ ] TypeScript ## how it works diff --git a/bin/coderfly.js b/bin/coderfly.js index 25490f8..1d1f113 100644 --- a/bin/coderfly.js +++ b/bin/coderfly.js @@ -6,7 +6,7 @@ const ora = require('ora'); const { diff, getAllFiles, getFuncTree, getImpacts } = require('../dist/index.js'); const pkg = require('../package.json'); const { CONFIG_FILENAME, TREE_FILE, REPORT_FILE } = require('../dist/const.js'); -const { parseAliasFromConfig, lookFileOrFolderUp } = require('../dist/utils/handle_config'); +const { lookFileOrFolderUp } = require('../dist/utils/handle_config'); const newsBoy = ora(); @@ -32,8 +32,7 @@ program let configFile = path.resolve(configFolder, CONFIG_FILENAME); try { - let config = JSON.parse(fs.readFileSync(configFile)); - alias = parseAliasFromConfig(config); + alias = require(configFile); } catch (error){ // do nothing } diff --git a/docs/README_CN.md b/docs/README_CN.md index 8db2654..8ab4b50 100644 --- a/docs/README_CN.md +++ b/docs/README_CN.md @@ -40,12 +40,13 @@ 配置文件: -你也可以编写 `.coderflyrc` 配置文件,这样更方便 alias 的书写。注意:**这个文件要编写为 json 形式**。 +你也可以编写 `.coderflyrc.js` 配置文件,这样更方便 alias 的书写。 ```js -// .coderflyrc -{ - "src": "./test", +// .coderflyrc.js +const path = require('path'); +module.exports = { + 'src': path.resolve(process.cwd(), 'test'), // ... } ``` @@ -157,10 +158,10 @@ console.log(impacts); ## 支持 -- JavaScript -- Vue2 +- [x] JavaScript +- [x] Vue2 +- [x] TypeScript - [ ] Vue3 -- [ ] TypeScript ## 如何工作的 diff --git a/package.json b/package.json index 0dea719..8b7e4e5 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,10 @@ }, "dependencies": { "@babel/parser": "^7.17.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.17.3", + "@babel/preset-env": "^7.16.11", + "@babel/preset-typescript": "^7.16.7", "@types/lodash-es": "^4.17.6", "commander": "^9.1.0", "enhanced-resolve": "^5.9.2", diff --git a/src/const.ts b/src/const.ts index bb28e1f..6382395 100644 --- a/src/const.ts +++ b/src/const.ts @@ -8,6 +8,6 @@ export const MUSTACHE_TAG_REG = /\{\{((?:.|\n)+?)\}\}/g; export const TEXT_NODE_TYPES = [2, 3]; -export const CONFIG_FILENAME = '.coderflyrc'; +export const CONFIG_FILENAME = '.coderflyrc.js'; export const TREE_FILE = path.resolve(process.cwd(), './file_tree.json'); export const REPORT_FILE = path.resolve(process.cwd(), './impact_report.json'); diff --git a/src/impact.ts b/src/impact.ts index 534c93a..33fcb93 100644 --- a/src/impact.ts +++ b/src/impact.ts @@ -66,16 +66,16 @@ function findWhoCallMe (treeData: FileInfoTree, funcInfo: ImpactReason, reportIn const funcName = funcInfo.name; const curPaths = funcInfo.paths; - // these found functions are used to find the impact of template - const templateImpactSearchFunc: NameAndPath = { - [funcName]: curFilePath - }; - // because the mixin function is mixed into each file,it wil be found multiple times // so we need a set const set = new Set(); for (const fileInfo in treeData) { + // these found functions are used to find the impact of template + const templateImpactSearchFunc: NameAndPath = { + [funcName]: curFilePath + }; + const allFuncsInfo = treeData[fileInfo].allFuncsInfo; const templateKeyInfo = treeData[fileInfo].templateKeyInfo; @@ -101,6 +101,10 @@ function findWhoCallMe (treeData: FileInfoTree, funcInfo: ImpactReason, reportIn templateImpactSearchFunc[func.name] = func.filePath; } + + if (func.name === funcName && func.filePath === curFilePath) { + templateImpactSearchFunc[funcName] = curFilePath; + } }); // find if the function in the paths is used in the template diff --git a/src/utils/function_change/diff.ts b/src/utils/function_change/diff.ts index 55b6a47..24feab1 100644 --- a/src/utils/function_change/diff.ts +++ b/src/utils/function_change/diff.ts @@ -2,7 +2,8 @@ import * as fs from 'fs'; import * as path from 'path'; import { commandSync } from 'execa'; import lineByLine from 'n-readlines'; -import { parse, visit } from 'recast'; +import { visit } from 'recast'; +import { parse } from '@babel/parser'; import { parseComponent } from 'vue-template-compiler'; import { DiffFunctionInfo, FunctionInfo } from '../../type'; @@ -70,7 +71,13 @@ function getFunctionBlock (filePath: string) { try { ast = parse(code, { - parser: require('recast/parsers/babel'), + plugins: [ + 'decorators-legacy', + 'typescript', + 'classProperties', + 'objectRestSpread' + ], + sourceType: 'unambiguous' }); } catch (error) { console.log(error); diff --git a/src/utils/handle_file_utils.ts b/src/utils/handle_file_utils.ts index 8b32ddc..7ed1af3 100644 --- a/src/utils/handle_file_utils.ts +++ b/src/utils/handle_file_utils.ts @@ -1,6 +1,7 @@ import * as fs from 'fs'; import * as path from 'path'; -import { parse, visit } from 'recast'; +import { visit } from 'recast'; +import { parse } from '@babel/parser'; import { parseComponent, compile } from 'vue-template-compiler'; import lineByLine from 'n-readlines'; import { ALLOW_EXT, IS_TOP_SCOPE, UN_KNOWN } from '../const.js'; @@ -187,8 +188,15 @@ function getFileAst (filePath: string): FileAstInfo { try { jsAst = parse(fileCtx, { - parser: require('recast/parsers/babel') + plugins: [ + 'decorators-legacy', + 'typescript', + 'classProperties', + 'objectRestSpread' + ], + sourceType: 'unambiguous' }); + templateAst = compile(templateCtx); } catch (error) { console.log(`ast解析错误:${filePath}`); @@ -239,8 +247,14 @@ function getAllFunctions (jsAst: any, filePath: string, vueScriptStartLine: numb // handle: function test () {} visitFunctionDeclaration(node) { - let name = node.value.id.name; + let name = ''; let position!: string; + + if (!node.value.id) { + name = '[Anonymous]' + } else { + name = node.value.id.name; + } // this means this function is called directly in the js file,not in a function block if (name === '') { diff --git a/yarn.lock b/yarn.lock index b295c62..3ce984d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,879 @@ # yarn lockfile v1 -"@babel/parser@^7.17.8": +"@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.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.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" + integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== + +"@babel/generator@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.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": + version "7.17.7" + resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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/highlight@^7.16.7": + version "7.17.9" + resolved "https://registry.yarnpkg.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.16.7", "@babel/parser@^7.17.8", "@babel/parser@^7.17.9": version "7.17.9" resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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", "@babel/plugin-proposal-object-rest-spread@^7.17.3": + version "7.17.3" + resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.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": + version "7.10.4" + resolved "https://registry.yarnpkg.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.yarnpkg.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": + version "7.10.4" + resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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": + version "7.14.5" + resolved "https://registry.yarnpkg.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.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.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-typescript@^7.16.7": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" + integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-typescript" "^7.16.7" + +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.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.yarnpkg.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.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.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.yarnpkg.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/preset-typescript@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" + integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.16.7" + +"@babel/runtime@^7.8.4": + version "7.17.9" + resolved "https://registry.yarnpkg.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": + version "7.16.7" + resolved "https://registry.yarnpkg.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": + version "7.17.9" + resolved "https://registry.yarnpkg.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.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.4.4": + version "7.17.0" + resolved "https://registry.yarnpkg.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" + "@eslint/eslintrc@^1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.2.tgz#4989b9e8c0216747ee7cca314ae73791bb281aae" @@ -191,6 +1059,13 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.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.yarnpkg.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.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -215,6 +1090,37 @@ ast-types@0.14.2: dependencies: tslib "^2.0.1" +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.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-polyfill-corejs2@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.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" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -249,6 +1155,17 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" +browserslist@^4.17.5, browserslist@^4.20.3: + version "4.20.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf" + integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg== + dependencies: + caniuse-lite "^1.0.30001332" + electron-to-chromium "^1.4.118" + escalade "^3.1.1" + node-releases "^2.0.3" + picocolors "^1.0.0" + buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -257,11 +1174,33 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.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.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +caniuse-lite@^1.0.30001332: + version "1.0.30001334" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz#892e9965b35285033fc2b8a8eff499fe02f13d8b" + integrity sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.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.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -287,6 +1226,13 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.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.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -294,6 +1240,11 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -309,6 +1260,14 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +core-js-compat@^3.20.2, core-js-compat@^3.21.0: + version "3.22.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.22.3.tgz#9b10d786052d042bc97ee8df9c0d1fb6a49c2005" + integrity sha512-wliMbvPI2idgFWpFe7UEyHMvu6HWgW8WA+HnDRtgzoSDYvXFMpoGX1H3tPDDXrcfUSyXafCLDd7hOeMQHEZxGw== + dependencies: + browserslist "^4.20.3" + semver "7.0.0" + cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -323,7 +1282,7 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= -debug@^4.1.1, debug@^4.3.2: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -342,6 +1301,14 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-properties@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -356,6 +1323,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +electron-to-chromium@^1.4.118: + version "1.4.126" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.126.tgz#56e9d3cbb658c58b45d05ecfedbcb3b09ab1a2d8" + integrity sha512-g/e18Yv0fBdN2c2Z8hWV9jOXxOxOByyG8uGufrJWUym+LHMYa5K2oR9C+D8Bvh0slUTarBwBBZFi41ImQjEZIA== + enhanced-resolve@^5.9.2: version "5.9.3" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88" @@ -364,6 +1336,16 @@ enhanced-resolve@^5.9.2: graceful-fs "^4.2.4" tapable "^2.2.0" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.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.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -566,11 +1548,25 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.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-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -602,6 +1598,11 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^13.6.0, globals@^13.9.0: version "13.13.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" @@ -626,11 +1627,35 @@ graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + he@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -677,6 +1702,13 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +is-core-module@^2.8.1: + version "2.9.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -714,6 +1746,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -721,6 +1758,16 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -744,6 +1791,11 @@ lodash-es@^4.17.21: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -809,6 +1861,11 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +node-releases@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476" + integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ== + npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -816,6 +1873,21 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.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" + once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -874,11 +1946,21 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.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.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -918,16 +2000,73 @@ recast@^0.20.5: source-map "~0.6.1" tslib "^2.0.1" +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== + dependencies: + "@babel/runtime" "^7.8.4" + regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.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" + +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve@^1.14.2: + version "1.22.0" + resolved "https://registry.yarnpkg.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.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -960,6 +2099,16 @@ safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + semver@^7.3.5: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -989,6 +2138,11 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -1018,6 +2172,13 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -1025,6 +2186,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" @@ -1035,6 +2201,11 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -1076,6 +2247,29 @@ typescript@^4.6.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.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.yarnpkg.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.yarnpkg.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.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" From 9eab8d1afee4e787a5a6c9e717ff476b3dc83963 Mon Sep 17 00:00:00 2001 From: CocaColf Date: Fri, 29 Apr 2022 11:01:14 +0800 Subject: [PATCH 03/17] fix: fix the problem that template impact results incorrect --- src/impact.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/impact.ts b/src/impact.ts index 33fcb93..3395a94 100644 --- a/src/impact.ts +++ b/src/impact.ts @@ -72,9 +72,7 @@ function findWhoCallMe (treeData: FileInfoTree, funcInfo: ImpactReason, reportIn for (const fileInfo in treeData) { // these found functions are used to find the impact of template - const templateImpactSearchFunc: NameAndPath = { - [funcName]: curFilePath - }; + const templateImpactSearchFunc: NameAndPath = {}; const allFuncsInfo = treeData[fileInfo].allFuncsInfo; const templateKeyInfo = treeData[fileInfo].templateKeyInfo; From 9d3fb3c00c93cfb8b15d2a1c76a618bad109e301 Mon Sep 17 00:00:00 2001 From: CocaColf Date: Wed, 11 May 2022 09:56:54 +0800 Subject: [PATCH 04/17] update: add the position of function entrance --- src/impact.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/impact.ts b/src/impact.ts index 3395a94..ba12cd4 100644 --- a/src/impact.ts +++ b/src/impact.ts @@ -1,4 +1,4 @@ -import { TEXT_NODE_TYPES } from './const.js'; +import { TEXT_NODE_TYPES, UN_KNOWN } from './const.js'; import { FileInfoTree, FuncCallSearchResult, @@ -13,11 +13,18 @@ import { handleCircularPath } from './utils/handle_circular_path.js'; function getImpacts (treeData: FileInfoTree, funcInfo: ImpactReason) { let templateImpact = [] as TemplateImpactResult[]; + let mainFuncPosition = UN_KNOWN; + try { + mainFuncPosition = treeData[funcInfo.filePath]['allFuncsInfo'][funcInfo.name].position; + } catch (error) {} + // function entrance const main = { name: funcInfo.name, file: funcInfo.filePath, + position: mainFuncPosition, }; + funcInfo.paths[0].push(mainFuncPosition); let callList = [funcInfo] as ImpactReason[]; const impactReport = []; From 2265e85a509e24e88c91a68c4432cfcff0e8da00 Mon Sep 17 00:00:00 2001 From: CocaColf Date: Wed, 11 May 2022 10:01:50 +0800 Subject: [PATCH 05/17] fix: exclude .d.ts files --- src/const.ts | 1 + src/utils/function_change/index.ts | 5 ++--- src/utils/handle_file_utils.ts | 10 ++++++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/const.ts b/src/const.ts index 6382395..ff1c372 100644 --- a/src/const.ts +++ b/src/const.ts @@ -1,6 +1,7 @@ import path from "path"; export const ALLOW_EXT = ['.vue', '.js', '.ts']; +export const TS_DECLARATION_EXT = '.d.ts'; export const UN_KNOWN = 'unknown'; export const IS_TOP_SCOPE = '[is_top_scope]'; diff --git a/src/utils/function_change/index.ts b/src/utils/function_change/index.ts index 985417e..6798164 100644 --- a/src/utils/function_change/index.ts +++ b/src/utils/function_change/index.ts @@ -1,6 +1,5 @@ -import path from "path"; -import { ALLOW_EXT } from "../../const.js"; import { DiffInfo } from "../../type"; +import { isAllowExt } from "../handle_file_utils.js"; import { getFunctionDiffInfo } from "./diff.js"; import { getFileChange } from "./file_change.js"; @@ -13,7 +12,7 @@ export function diff () { const files = changedList[changeType]; for (const file of files) { - if (!ALLOW_EXT.includes(path.extname(file))) continue; + if (!isAllowExt(file)) continue; result.push({ file, diff --git a/src/utils/handle_file_utils.ts b/src/utils/handle_file_utils.ts index 7ed1af3..e9b1dbc 100644 --- a/src/utils/handle_file_utils.ts +++ b/src/utils/handle_file_utils.ts @@ -4,7 +4,7 @@ import { visit } from 'recast'; import { parse } from '@babel/parser'; import { parseComponent, compile } from 'vue-template-compiler'; import lineByLine from 'n-readlines'; -import { ALLOW_EXT, IS_TOP_SCOPE, UN_KNOWN } from '../const.js'; +import { ALLOW_EXT, IS_TOP_SCOPE, TS_DECLARATION_EXT, UN_KNOWN } from '../const.js'; import { AllFuncsInfo, FileAstInfo, @@ -33,7 +33,7 @@ function getAllFiles (folderPath: string): string[] { const absolutePath = path.resolve(folderPath, files[i]); if (fs.statSync(absolutePath).isFile()) { - ALLOW_EXT.includes(path.extname(absolutePath)) && fileList.push(absolutePath); + isAllowExt(absolutePath) && fileList.push(absolutePath); } else { dfs(absolutePath); } @@ -457,9 +457,15 @@ function getVueScriptRealStartLine (filePath: string) { return 0; } +function isAllowExt (filePath: string) { + return ALLOW_EXT.includes(path.extname(filePath)) && filePath.indexOf(TS_DECLARATION_EXT) === -1; +} + + export { getFileInfo, getVueScriptRealStartLine, getFuncTree, getAllFiles, + isAllowExt, }; \ No newline at end of file From e2feb3243460591a69a2df0deacf933140f6257b Mon Sep 17 00:00:00 2001 From: CocaColf Date: Wed, 11 May 2022 10:03:32 +0800 Subject: [PATCH 06/17] feat: add jsx support --- src/utils/function_change/diff.ts | 3 ++- src/utils/handle_file_utils.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/utils/function_change/diff.ts b/src/utils/function_change/diff.ts index 24feab1..06ec9d3 100644 --- a/src/utils/function_change/diff.ts +++ b/src/utils/function_change/diff.ts @@ -75,7 +75,8 @@ function getFunctionBlock (filePath: string) { 'decorators-legacy', 'typescript', 'classProperties', - 'objectRestSpread' + 'objectRestSpread', + 'jsx', ], sourceType: 'unambiguous' }); diff --git a/src/utils/handle_file_utils.ts b/src/utils/handle_file_utils.ts index e9b1dbc..1d55590 100644 --- a/src/utils/handle_file_utils.ts +++ b/src/utils/handle_file_utils.ts @@ -192,7 +192,8 @@ function getFileAst (filePath: string): FileAstInfo { 'decorators-legacy', 'typescript', 'classProperties', - 'objectRestSpread' + 'objectRestSpread', + 'jsx', ], sourceType: 'unambiguous' }); From 9c7bd9b708758c6f60ad2de99c6e407b5e6629ec Mon Sep 17 00:00:00 2001 From: CocaColf Date: Tue, 17 May 2022 17:13:45 +0800 Subject: [PATCH 07/17] feat: apply one-step process api --- README.md | 22 ++++++++++++++ docs/README_CN.md | 11 +++++++ src/const.ts | 6 ++-- src/index.ts | 55 +++++++++++++++++++++++++++++++++- src/utils/handle_file_utils.ts | 8 ++++- 5 files changed, 98 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 404abe7..6b2b61c 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,13 @@ module.exports = { see the [API](#api) or [Example](#example). ## API +### coderfly + +The API for the complete process is included, use this for a one-step process if you don't need control the process yourself. + +**Params** + +- srcPath: string. It's source code folder path ### diff Get the changes of the function by the changes of the file. @@ -124,6 +131,21 @@ Since the use of `vue-template-compiler` must be consistent with the `vue` versi ## Example +**Easy to use** + +```js +// if necessary +const { matchVueVersion } = require('coderfly/dist/match_version'); + +matchVueVersion(); + +const { coderfly } = require('coderfly'); + +coderfly('./src'); +``` + + +**If you want you control the process yourself** ```js // if necessary const { matchVueVersion } = require('coderfly/dist/match_version'); diff --git a/docs/README_CN.md b/docs/README_CN.md index 8ab4b50..6f36ac5 100644 --- a/docs/README_CN.md +++ b/docs/README_CN.md @@ -61,6 +61,17 @@ module.exports = { ## API +### coderfly + +API集大成者,如果不需要自己字定义过程,用这个一步到位即可. + +**Params** + +- srcPath: string. It's source code folder path + +**Params** + +- srcPath: string,源码文件夹路径 ### diff 根据本地文件变动,输出函数修改情况。 diff --git a/src/const.ts b/src/const.ts index ff1c372..4977652 100644 --- a/src/const.ts +++ b/src/const.ts @@ -9,6 +9,8 @@ export const MUSTACHE_TAG_REG = /\{\{((?:.|\n)+?)\}\}/g; export const TEXT_NODE_TYPES = [2, 3]; +export const CODERFLY_FOLDER = path.resolve(process.cwd(), '.coderfly'); export const CONFIG_FILENAME = '.coderflyrc.js'; -export const TREE_FILE = path.resolve(process.cwd(), './file_tree.json'); -export const REPORT_FILE = path.resolve(process.cwd(), './impact_report.json'); +export const MATCHED_VUE = path.resolve(CODERFLY_FOLDER, 'matched_vue'); +export const TREE_FILE = path.resolve(CODERFLY_FOLDER, 'file_tree.json'); +export const REPORT_FILE = path.resolve(CODERFLY_FOLDER, 'impact_report.json'); diff --git a/src/index.ts b/src/index.ts index fba3e66..6deaef7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,59 @@ +import path from 'path'; +import fs from 'fs'; import { diff } from './utils/function_change/index.js'; -import { getAllFiles, getFuncTree } from './utils/handle_file_utils.js'; +import { confirmFolderExist, getAllFiles, getFuncTree } from './utils/handle_file_utils.js'; import { getImpacts, findWhoCallMe } from './impact.js'; import { getTemplateInfo } from './utils/parse_template_ast.js'; +import { CONFIG_FILENAME, REPORT_FILE } from './const.js'; +import { lookFileOrFolderUp } from './utils/handle_config.js'; +import { ImpactReason } from './type.js'; + +async function coderfly (srcPath: string) { + let alias = {}; + const configFolder = lookFileOrFolderUp(CONFIG_FILENAME, path.resolve(process.cwd(), srcPath)); + + if (configFolder) { + const configFile = path.resolve(configFolder, CONFIG_FILENAME); + + try { + alias = require(configFile); + } catch (error){ + // do nothing + } + } + + confirmFolderExist(); + + const functionDiffInfo = diff(); + + const files = getAllFiles(path.resolve(process.cwd(), srcPath)); + + const tree = getFuncTree(files, { + alias + }); + + const allFunctions: ImpactReason[] = []; + functionDiffInfo.forEach(item => { + const file = path.resolve(process.cwd(), item.file); + + item.total.forEach(fn => { + allFunctions.push({ + filePath: file, + name: fn, + paths: [[fn, file]] + }); + }); + }); + + const impactReport: any[] = []; + + allFunctions.forEach(item => { + const impact = getImpacts(tree, item); + impactReport.push(impact); + }); + + fs.writeFileSync(REPORT_FILE, JSON.stringify(impactReport, null, 4)); +} export { getAllFiles, @@ -10,4 +62,5 @@ export { getImpacts, findWhoCallMe, diff, + coderfly, }; \ No newline at end of file diff --git a/src/utils/handle_file_utils.ts b/src/utils/handle_file_utils.ts index 1d55590..9da1e91 100644 --- a/src/utils/handle_file_utils.ts +++ b/src/utils/handle_file_utils.ts @@ -4,7 +4,7 @@ import { visit } from 'recast'; import { parse } from '@babel/parser'; import { parseComponent, compile } from 'vue-template-compiler'; import lineByLine from 'n-readlines'; -import { ALLOW_EXT, IS_TOP_SCOPE, TS_DECLARATION_EXT, UN_KNOWN } from '../const.js'; +import { ALLOW_EXT, CODERFLY_FOLDER, IS_TOP_SCOPE, TS_DECLARATION_EXT, UN_KNOWN } from '../const.js'; import { AllFuncsInfo, FileAstInfo, @@ -462,6 +462,11 @@ function isAllowExt (filePath: string) { return ALLOW_EXT.includes(path.extname(filePath)) && filePath.indexOf(TS_DECLARATION_EXT) === -1; } +function confirmFolderExist () { + if (!fs.existsSync(CODERFLY_FOLDER)) { + fs.mkdirSync(CODERFLY_FOLDER); + } +} export { getFileInfo, @@ -469,4 +474,5 @@ export { getFuncTree, getAllFiles, isAllowExt, + confirmFolderExist, }; \ No newline at end of file From deff94751dd3307a856a8c7e5f1971d871e0e1c3 Mon Sep 17 00:00:00 2001 From: CocaColf Date: Tue, 17 May 2022 19:48:55 +0800 Subject: [PATCH 08/17] perf: performance improved --- package.json | 1 + src/const.ts | 1 + src/index.ts | 2 +- src/match_version.ts | 11 ++++++ src/type.ts | 9 +++++ src/utils/function_change/diff.ts | 3 +- src/utils/handle_file_utils.ts | 14 +++---- src/worker/get_file_info_thread.ts | 37 ++++++++++++++++++ src/worker/run_worker.ts | 61 ++++++++++++++++++++++++++++++ yarn.lock | 5 +++ 10 files changed, 134 insertions(+), 10 deletions(-) create mode 100644 src/worker/get_file_info_thread.ts create mode 100644 src/worker/run_worker.ts diff --git a/package.json b/package.json index 8b7e4e5..7ec292d 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "execa": "5.1.1", "lodash-es": "^4.17.21", "n-readlines": "^1.0.1", + "nanoid": "^3.3.4", "ora": "5.4.1", "recast": "^0.20.5", "vue-template-compiler": "^2.6.14" diff --git a/src/const.ts b/src/const.ts index 4977652..f5ccd9d 100644 --- a/src/const.ts +++ b/src/const.ts @@ -14,3 +14,4 @@ export const CONFIG_FILENAME = '.coderflyrc.js'; export const MATCHED_VUE = path.resolve(CODERFLY_FOLDER, 'matched_vue'); export const TREE_FILE = path.resolve(CODERFLY_FOLDER, 'file_tree.json'); export const REPORT_FILE = path.resolve(CODERFLY_FOLDER, 'impact_report.json'); +export const FILE_MODIFY_DETAIL = path.resolve(CODERFLY_FOLDER, 'file_modify_detail.json'); \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 6deaef7..9189bba 100644 --- a/src/index.ts +++ b/src/index.ts @@ -28,7 +28,7 @@ async function coderfly (srcPath: string) { const files = getAllFiles(path.resolve(process.cwd(), srcPath)); - const tree = getFuncTree(files, { + const tree = await getFuncTree(files, { alias }); diff --git a/src/match_version.ts b/src/match_version.ts index 26fccf1..e802e22 100644 --- a/src/match_version.ts +++ b/src/match_version.ts @@ -1,8 +1,17 @@ import { commandSync } from "execa"; +import fs from 'fs'; import path from "path"; +import { MATCHED_VUE } from "./const.js"; import { lookFileOrFolderUp } from "./utils/handle_config.js"; +import { confirmFolderExist } from "./utils/handle_file_utils.js"; export function matchVueVersion () { + confirmFolderExist(); + + if (fs.existsSync(MATCHED_VUE)) { + return; + } + let vueVersion = 'latest'; let vueTemplateCompilerVersion = ''; @@ -27,4 +36,6 @@ export function matchVueVersion () { try { commandSync('npm uninstall vue-template-compiler') } catch {} commandSync(`npm install vue-template-compiler@${vueVersion}`); } + + fs.writeFileSync(MATCHED_VUE, 'true'); } \ No newline at end of file diff --git a/src/type.ts b/src/type.ts index d7c9d28..d7dc8eb 100644 --- a/src/type.ts +++ b/src/type.ts @@ -111,4 +111,13 @@ export interface FileAstInfo { templateAst: CompiledResult | undefined; // vue template ast extName: string; vueScriptStartLine: number; // vue script 开始行数 +} + +export interface GetFileInfoWorkerData { + files: string[]; + fileModifyDetail: { + [filePath: string]: number; + }; + tree: FileInfoTree; + options?: GetTreeOptions; } \ No newline at end of file diff --git a/src/utils/function_change/diff.ts b/src/utils/function_change/diff.ts index 06ec9d3..1b9c2cf 100644 --- a/src/utils/function_change/diff.ts +++ b/src/utils/function_change/diff.ts @@ -6,6 +6,7 @@ import { visit } from 'recast'; import { parse } from '@babel/parser'; import { parseComponent } from 'vue-template-compiler'; import { DiffFunctionInfo, FunctionInfo } from '../../type'; +import { nanoid } from 'nanoid'; // get the change of function before and after file change export function getFunctionDiffInfo (filePath: string, commitSha?: string) { @@ -60,7 +61,7 @@ function getFunctionBlock (filePath: string) { const extName = path.extname(filePath); let ast; - const tempFile = path.resolve(process.cwd(), 'temp_vue_script.js'); + const tempFile = path.resolve(process.cwd(), `temp_vue_script_${nanoid(10)}.js`); if (extName === '.vue') { const compilerResult = parseComponent(code); diff --git a/src/utils/handle_file_utils.ts b/src/utils/handle_file_utils.ts index 9da1e91..411d725 100644 --- a/src/utils/handle_file_utils.ts +++ b/src/utils/handle_file_utils.ts @@ -4,7 +4,7 @@ import { visit } from 'recast'; import { parse } from '@babel/parser'; import { parseComponent, compile } from 'vue-template-compiler'; import lineByLine from 'n-readlines'; -import { ALLOW_EXT, CODERFLY_FOLDER, IS_TOP_SCOPE, TS_DECLARATION_EXT, UN_KNOWN } from '../const.js'; +import { ALLOW_EXT, CODERFLY_FOLDER, IS_TOP_SCOPE, TREE_FILE, TS_DECLARATION_EXT, UN_KNOWN } from '../const.js'; import { AllFuncsInfo, FileAstInfo, @@ -15,6 +15,7 @@ import { TemplateKeyInfo } from '../type'; import { getTemplateInfo } from './parse_template_ast.js'; +import { getFileInfoWorker } from '../worker/run_worker.js'; const { create } = require('enhanced-resolve'); @@ -45,13 +46,8 @@ function getAllFiles (folderPath: string): string[] { return fileList; } -function getFuncTree (files: string[], options?: GetTreeOptions): FileInfoTree { - const tree: FileInfoTree = {}; - - for (const file of files) { - const fileInfo = getFileInfo(file, options); - tree[file] = fileInfo; - } +async function getFuncTree (files: string[], options?: GetTreeOptions): Promise { + const tree = await getFileInfoWorker(files, options); for (const file in tree) { const fileInfo = tree[file]; @@ -124,6 +120,8 @@ function getFuncTree (files: string[], options?: GetTreeOptions): FileInfoTree { }); } + fs.writeFileSync(TREE_FILE, JSON.stringify(tree, null, 4)); + return tree; } diff --git a/src/worker/get_file_info_thread.ts b/src/worker/get_file_info_thread.ts new file mode 100644 index 0000000..1e4ac72 --- /dev/null +++ b/src/worker/get_file_info_thread.ts @@ -0,0 +1,37 @@ +import fs from "fs"; +import { parentPort, workerData } from "worker_threads"; +import { FileInfoTree, GetFileInfoWorkerData } from "../type"; +import { getFileInfo } from "../utils/handle_file_utils.js"; + +parentPort?.postMessage(_getFilesInfo(workerData)); + +function _getFilesInfo (workerData: GetFileInfoWorkerData) { + const currentTree: FileInfoTree = {}; + + for (const file of workerData.files) { + const mtime = fs.statSync(file).mtimeMs; + /** + * 1. if has been scan latest + * i. if has the same mtime ,don't need scan again, use the value in cache + * ii. if has different mtime, scan again + * + * 2. if don't has scan record, scan again + */ + if (workerData.fileModifyDetail[file] && + workerData.fileModifyDetail[file] === mtime && + workerData.tree[file]) { + currentTree[file] = workerData.tree[file]; + continue; + } + + const fileInfo = getFileInfo(file, workerData.options); + currentTree[file] = fileInfo; + + workerData.fileModifyDetail[file] = mtime; + } + + return { + tree: currentTree, + fileModifyDetail: workerData.fileModifyDetail, + }; +} \ No newline at end of file diff --git a/src/worker/run_worker.ts b/src/worker/run_worker.ts new file mode 100644 index 0000000..0d1f0ca --- /dev/null +++ b/src/worker/run_worker.ts @@ -0,0 +1,61 @@ +import { Worker } from 'worker_threads'; +import { cpus } from 'os'; +import path from 'path'; +import fs from 'fs'; +import { FileInfoTree, GetTreeOptions } from '../type'; +import { FILE_MODIFY_DETAIL, TREE_FILE } from '../const.js'; + +export function getFileInfoWorker (files: string[], options?: GetTreeOptions): Promise { + return new Promise((resolve, reject) => { + let fileModifyDetail = {}; + + if (fs.existsSync(FILE_MODIFY_DETAIL)) { + fileModifyDetail = JSON.parse(fs.readFileSync(FILE_MODIFY_DETAIL, 'utf8')); + } + + let tree: FileInfoTree = {}; + if (fs.existsSync(TREE_FILE)) { + tree = JSON.parse(fs.readFileSync(TREE_FILE, 'utf8')); + } + + const threadCount = cpus().length; + const threads: Set = new Set(); + const everyWorkerFileCount = Math.ceil(files.length / threadCount); + + for (let i = 0; i < threadCount; i++) { + threads.add(new Worker(path.resolve(__dirname, './get_file_info_thread.js'), { + workerData: { + files: files.splice(0, everyWorkerFileCount), + options, + fileModifyDetail, + tree, + } + })); + } + + for (const worker of threads) { + worker.on('error', (err) => { + reject(new Error(`worker stopped with ${err}`)); + }); + + worker.on('exit', (code) => { + threads.delete(worker); + // console.log(`Thread exiting, ${threads.size} running...`) + + if (code !== 0) { + reject(new Error(`stopped with ${code} exit code`)) + } + + if (threads.size === 0) { + fs.writeFileSync(FILE_MODIFY_DETAIL, JSON.stringify(fileModifyDetail, null, 4)); + resolve(tree); + } + }) + + worker.on('message', (msg) => { + Object.assign(tree, msg.tree); + Object.assign(fileModifyDetail, msg.fileModifyDetail); + }); + } + }); +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 3ce984d..a6206ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1856,6 +1856,11 @@ n-readlines@^1.0.1: resolved "https://registry.yarnpkg.com/n-readlines/-/n-readlines-1.0.1.tgz#bbb7364d38bc31a170a199f986fcacfa76b95f6e" integrity sha512-z4SyAIVgMy7CkgsoNw7YVz40v0g4+WWvvqy8+ZdHrCtgevcEO758WQyrYcw3XPxcLxF+//RszTz/rO48nzD0wQ== +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" From 82d5719391ef9936107a09ab66f35b61c48a64e7 Mon Sep 17 00:00:00 2001 From: CocaColf Date: Fri, 20 May 2022 10:37:30 +0800 Subject: [PATCH 09/17] docs: update pics in README --- docs/pics/impacts.png | Bin 41486 -> 45739 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/pics/impacts.png b/docs/pics/impacts.png index 5bdd36882a2a71d9ec4c3ed25c1ab5b2b01785f4..922dcdf2d48fee1f198c2dd99024ce49f669df0a 100644 GIT binary patch literal 45739 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 literal 41486 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 From 3e9b3ef4d051d74c000e731fd8d32227c9efa725 Mon Sep 17 00:00:00 2001 From: CocaColf Date: Mon, 11 Jul 2022 20:07:12 +0800 Subject: [PATCH 10/17] fix: fix function bloclk content incorrect while reading by lines --- src/utils/function_change/diff.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/function_change/diff.ts b/src/utils/function_change/diff.ts index 1b9c2cf..fb6cf80 100644 --- a/src/utils/function_change/diff.ts +++ b/src/utils/function_change/diff.ts @@ -42,7 +42,7 @@ function getFileLinesString (filePath: string, start: number, end: number): stri let line = liner.next(); while (line) { - if (lineNumber >= start && lineNumber <= end) { + if (lineNumber >= (start - 1) && lineNumber <= (end - 1)) { result.push(line.toString()); } From c037b320d23f72f165deeb9da1715ceb23a497e1 Mon Sep 17 00:00:00 2001 From: CocaColf Date: Tue, 12 Jul 2022 14:56:20 +0800 Subject: [PATCH 11/17] feat: support vue-property-decorator --- src/utils/handle_file_utils.ts | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/utils/handle_file_utils.ts b/src/utils/handle_file_utils.ts index 411d725..dd0236e 100644 --- a/src/utils/handle_file_utils.ts +++ b/src/utils/handle_file_utils.ts @@ -107,7 +107,7 @@ async function getFuncTree (files: string[], options?: GetTreeOptions): Promise< } } else if (allFunctionBelongToCurrentFile.includes(fn)) { // the called function is defined in this file allFuncsInfo[currentFnName]['calledFnFrom'][fn] = { - filePath: file, + filePath: allFuncsInfo[fn].filePath, position: allFuncsInfo[fn].position }; } else { @@ -430,6 +430,28 @@ function getMixin (jsAst: any) { return ele.name; }); } + return false; + }, + + // for vue-property-decorator + visitExportDefaultDeclaration (node) { + const decorators = node.value.declaration?.decorators || []; + for (const decorator of decorators) { + if (!decorator.expression || !decorator.expression.callee || decorator.expression.callee.name !== 'Component') continue; + + const decoratorArguments = decorator.expression?.arguments || []; + for (const argumentItem of decoratorArguments) { + for (const propertyItem of argumentItem.properties) { + if (propertyItem.key.name !== 'mixins') continue; + + const elements = propertyItem.value?.elements || []; + elements.forEach((ele: any) => { + ele.name && list.push(ele.name); + }); + } + } + } + return false; } }); From 353bec81354707f0b6df23bf0a50372b41b8f8b3 Mon Sep 17 00:00:00 2001 From: CocaColf Date: Tue, 12 Jul 2022 15:58:16 +0800 Subject: [PATCH 12/17] feat: remove match vue version --- README.md | 105 +- copy_files.js | 21 + docs/README_CN.md | 96 +- package.json | 9 +- src/coderfly_vue_compiler/browser.js | 5769 ++++++++++++++++++++++++++ src/coderfly_vue_compiler/build.js | 5398 ++++++++++++++++++++++++ src/coderfly_vue_compiler/index.d.ts | 250 ++ src/coderfly_vue_compiler/index.js | 1 + src/match_version.ts | 41 - src/type.ts | 2 +- src/utils/function_change/diff.ts | 2 +- src/utils/handle_file_utils.ts | 2 +- src/utils/parse_template_ast.ts | 2 +- yarn.lock | 29 +- 14 files changed, 11455 insertions(+), 272 deletions(-) create mode 100644 copy_files.js create mode 100644 src/coderfly_vue_compiler/browser.js create mode 100644 src/coderfly_vue_compiler/build.js create mode 100644 src/coderfly_vue_compiler/index.d.ts create mode 100644 src/coderfly_vue_compiler/index.js delete mode 100644 src/match_version.ts diff --git a/README.md b/README.md index 6b2b61c..ebd3e7e 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ You can also write configuration file named `.coderflyrc.js`, mainly to simplify // .coderflyrc.js const path = require('path'); module.exports = { - 'src': path.resolve(process.cwd(), 'test'), + 'src': path.resolve(__dirname, 'test'), // ... } ``` @@ -63,126 +63,27 @@ see the [API](#api) or [Example](#example). ### coderfly -The API for the complete process is included, use this for a one-step process if you don't need control the process yourself. +The API for the complete process is included, use this for a one-step process. **Params** - srcPath: string. It's source code folder path -### diff - -Get the changes of the function by the changes of the file. - -If you changed `test/a.js`, you can get the following result by diff. - -```js -{ - file: 'test/a.js', - changed: ['getSum'], - added: [], - deleted: ['getData'], - total: ['getSum', 'getData'] -} -``` - -### getAllFiles - -Get all files from source code, filter by default for non-`.vue`、`.js`、`.ts` files. - -**Params** - -- folderPath: string. It's source code folder path. - -### getFuncTree - -Analyze the project and build a 「file tree」. - -**Params** - -- files: string[]. All the files from folder path -- options: Options - -```ts -interface Options { - alias?: { - [aliasName: string]: string // alias name and path - }; -} -``` - -### getImpacts** - -Get the impact of changes. - -**Params** - -- treeData: FileInfoTree. It's file tree. -- funcInfo: ImpactReason. It's the entry function that we get by diff. - -```ts -interface ImpactReason { - filePath: string; - name: string; -} -``` - -### matchVueVersion - -Since the use of `vue-template-compiler` must be consistent with the `vue` version, otherwise an error will be reported, you must keep them both consistent before using `coderfly`. You can either manually install the corresponding version of `vue-template-compiler` in your project yourself, or you can use the API to do this in your code. Note that this operation needs to be called before using the other APIs. ## Example **Easy to use** ```js -// if necessary -const { matchVueVersion } = require('coderfly/dist/match_version'); - -matchVueVersion(); - const { coderfly } = require('coderfly'); coderfly('./src'); ``` - - -**If you want you control the process yourself** -```js -// if necessary -const { matchVueVersion } = require('coderfly/dist/match_version'); - -matchVueVersion(); - -const { diff, getAllFiles, getFuncTree, getImpacts } = require('coderfly'); - -// diff -const functionDiffInfo = diff(); - -// get all files -const files = getAllFiles(path.resolve(process.cwd(), targetDir)); - -// build file tree -const tree = getFuncTree(files, { - alias: { - src: path.resolve(process.cwd(), './demo/vue') - } -}); - -// get impacts -// here is just a example, in the real word the second argument needs constructed using the result of diff() -let impacts = getImpacts(tree, { - filePath: 'src/utils/a.js', - name: 'getSum' -}); - -console.log(impacts); -``` - ## Support - [x] JavaScript - [x] Vue2 - [x] TypeScript -- [ ] Vue3 +- [x] Vue3 ## how it works diff --git a/copy_files.js b/copy_files.js new file mode 100644 index 0000000..1c8cb8c --- /dev/null +++ b/copy_files.js @@ -0,0 +1,21 @@ +const path = require('path'); +const fs = require('fs'); + +const dest = path.resolve(__dirname, 'dist/coderfly_vue_compiler'); +const compilerFolder = path.resolve(__dirname, 'src/coderfly_vue_compiler'); + +function copyCompiler () { + if (!fs.existsSync(dest)) { + fs.mkdirSync(dest); + } + + const files = fs.readdirSync(compilerFolder); + + for (const file of files) { + if (path.extname(file) !== '.js') continue; + const ctx = fs.readFileSync(path.join(compilerFolder, file), 'utf8'); + fs.writeFileSync(path.join(dest, file), ctx); + } +} + +copyCompiler(); \ No newline at end of file diff --git a/docs/README_CN.md b/docs/README_CN.md index 6f36ac5..9cc3658 100644 --- a/docs/README_CN.md +++ b/docs/README_CN.md @@ -67,104 +67,14 @@ API集大成者,如果不需要自己字定义过程,用这个一步到位 **Params** -- srcPath: string. It's source code folder path - -**Params** - - srcPath: string,源码文件夹路径 -### diff - -根据本地文件变动,输出函数修改情况。 - -假如修改了 `test/a.js`,通过 diff 可以获得下面的结果 - -```js -{ - file: 'test/a.js', - changed: ['getSum'], - added: [], - deleted: ['getData'], - total: ['getSum', 'getData'] -} -``` - -### getAllFiles - -获取项目所有文件,默认过滤非 `.vue`、`.js`、`.ts` 文件 - -**Params** - -- folderPath: string,源码文件夹路径 - -### getFuncTree - -分析项目文件,构建「文件树」 - -**Params** - -- files: string[], 所有源码文件 -- options: Options, 配置 - -```ts -interface Options { - alias?: { - [aliasName: string]: string // alias name and path - }; -} -``` - -### getImpacts - -分析改动影响 - -**Params** - -- treeData: FileInfoTree, 文件树数据 -- funcInfo: ImpactReason, 被搜索的入口函数 - -```ts -interface ImpactReason { - filePath: string; - name: string; -} -``` - -### matchVueVersion - -由于 `vue-template-compiler` 的使用必须保持和 `vue` 版本一致,否则会报错,因此在使用 `coderfly` 前必须将二者保持一致。你可以自己手动在项目中安装对应的 `vue-template-compiler` 版本,也可以使用该 API 在代码中完成此操作。注意此操作需要在使用其他 API 之前调用 - ## 示例 ```js -// 如果有必要 -const { matchVueVersion } = require('coderfly/dist/match_version'); - -matchVueVersion(); - -const { diff, getAllFiles, getFuncTree, getImpacts } = require('coderfly'); - -// diff -const functionDiffInfo = diff(); - -// 获取所有文件信息 -const files = getAllFiles(path.resolve(process.cwd(), targetDir)); - -// 构建文件树 -const tree = getFuncTree(files, { - alias: { - src: path.resolve(process.cwd(), './demo/vue') - } -}); - -// 输出改动影响 -// 这里使用一个示例来说明,真实情况下需要使用 diff() 的返回结果来构造 getImpacts 的第二个参数 -let impacts = getImpacts(tree, { - filePath: 'src/utils/a.js', - name: 'getSum' -}); +const { coderfly } = require('coderfly'); -console.log(impacts); +coderfly('./src'); ``` ## 支持 @@ -172,7 +82,7 @@ console.log(impacts); - [x] JavaScript - [x] Vue2 - [x] TypeScript -- [ ] Vue3 +- [x] Vue3 ## 如何工作的 diff --git a/package.json b/package.json index 7ec292d..ed04a8b 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "url": "https://github.com/CocaColf/coderfly" }, "scripts": { - "build": "rm -rf dist/ && tsc && find ./dist -type f|xargs dos2unix", + "build": "rm -rf dist/ && tsc && node ./copy_files.js && find ./dist -type f|xargs dos2unix", "lint": "eslint . --ext .ts", "lint:fix": "eslint . --ext .ts --fix" }, @@ -35,15 +35,14 @@ "@babel/plugin-proposal-object-rest-spread": "^7.17.3", "@babel/preset-env": "^7.16.11", "@babel/preset-typescript": "^7.16.7", - "@types/lodash-es": "^4.17.6", "commander": "^9.1.0", + "de-indent": "^1.0.2", "enhanced-resolve": "^5.9.2", "execa": "5.1.1", - "lodash-es": "^4.17.21", + "he": "^1.2.0", "n-readlines": "^1.0.1", "nanoid": "^3.3.4", "ora": "5.4.1", - "recast": "^0.20.5", - "vue-template-compiler": "^2.6.14" + "recast": "^0.20.5" } } diff --git a/src/coderfly_vue_compiler/browser.js b/src/coderfly_vue_compiler/browser.js new file mode 100644 index 0000000..92d3b5d --- /dev/null +++ b/src/coderfly_vue_compiler/browser.js @@ -0,0 +1,5769 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.VueTemplateCompiler = {})); +}(this, function (exports) { 'use strict'; + + var splitRE = /\r?\n/g; + var emptyRE = /^\s*$/; + var needFixRE = /^(\r?\n)*[\t\s]/; + + var deIndent = function deindent (str) { + if (!needFixRE.test(str)) { + return str + } + var lines = str.split(splitRE); + var min = Infinity; + var type, cur, c; + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + if (!emptyRE.test(line)) { + if (!type) { + c = line.charAt(0); + if (c === ' ' || c === '\t') { + type = c; + cur = count(line, type); + if (cur < min) { + min = cur; + } + } else { + return str + } + } else { + cur = count(line, type); + if (cur < min) { + min = cur; + } + } + } + } + return lines.map(function (line) { + return line.slice(min) + }).join('\n') + }; + + function count (line, type) { + var i = 0; + while (line.charAt(i) === type) { + i++; + } + return i + } + + /* */ + + var emptyObject = Object.freeze({}); + + // These helpers produce better VM code in JS engines due to their + // explicitness and function inlining. + function isUndef (v) { + return v === undefined || v === null + } + + /** + * Check if value is primitive. + */ + function isPrimitive (value) { + return ( + typeof value === 'string' || + typeof value === 'number' || + // $flow-disable-line + typeof value === 'symbol' || + typeof value === 'boolean' + ) + } + + /** + * Quick object check - this is primarily used to tell + * Objects from primitive values when we know the value + * is a JSON-compliant type. + */ + function isObject (obj) { + return obj !== null && typeof obj === 'object' + } + + /** + * Get the raw type string of a value, e.g., [object Object]. + */ + var _toString = Object.prototype.toString; + + function toRawType (value) { + return _toString.call(value).slice(8, -1) + } + + /** + * Strict object type check. Only returns true + * for plain JavaScript objects. + */ + function isPlainObject (obj) { + return _toString.call(obj) === '[object Object]' + } + + /** + * Check if val is a valid array index. + */ + function isValidArrayIndex (val) { + var n = parseFloat(String(val)); + return n >= 0 && Math.floor(n) === n && isFinite(val) + } + + /** + * Make a map and return a function for checking if a key + * is in that map. + */ + function makeMap ( + str, + expectsLowerCase + ) { + var map = Object.create(null); + var list = str.split(','); + for (var i = 0; i < list.length; i++) { + map[list[i]] = true; + } + return expectsLowerCase + ? function (val) { return map[val.toLowerCase()]; } + : function (val) { return map[val]; } + } + + /** + * Check if a tag is a built-in tag. + */ + var isBuiltInTag = makeMap('slot,component', true); + + /** + * Check if an attribute is a reserved attribute. + */ + var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is'); + + /** + * Remove an item from an array. + */ + function remove (arr, item) { + if (arr.length) { + var index = arr.indexOf(item); + if (index > -1) { + return arr.splice(index, 1) + } + } + } + + /** + * Check whether an object has the property. + */ + var hasOwnProperty = Object.prototype.hasOwnProperty; + function hasOwn (obj, key) { + return hasOwnProperty.call(obj, key) + } + + /** + * Create a cached version of a pure function. + */ + function cached (fn) { + var cache = Object.create(null); + return (function cachedFn (str) { + var hit = cache[str]; + return hit || (cache[str] = fn(str)) + }) + } + + /** + * Camelize a hyphen-delimited string. + */ + var camelizeRE = /-(\w)/g; + var camelize = cached(function (str) { + return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; }) + }); + + /** + * Hyphenate a camelCase string. + */ + var hyphenateRE = /\B([A-Z])/g; + var hyphenate = cached(function (str) { + return str.replace(hyphenateRE, '-$1').toLowerCase() + }); + + /** + * Simple bind polyfill for environments that do not support it, + * e.g., PhantomJS 1.x. Technically, we don't need this anymore + * since native bind is now performant enough in most browsers. + * But removing it would mean breaking code that was able to run in + * PhantomJS 1.x, so this must be kept for backward compatibility. + */ + + /* istanbul ignore next */ + function polyfillBind (fn, ctx) { + function boundFn (a) { + var l = arguments.length; + return l + ? l > 1 + ? fn.apply(ctx, arguments) + : fn.call(ctx, a) + : fn.call(ctx) + } + + boundFn._length = fn.length; + return boundFn + } + + function nativeBind (fn, ctx) { + return fn.bind(ctx) + } + + var bind = Function.prototype.bind + ? nativeBind + : polyfillBind; + + /** + * Mix properties into target object. + */ + function extend (to, _from) { + for (var key in _from) { + to[key] = _from[key]; + } + return to + } + + /* eslint-disable no-unused-vars */ + + /** + * Perform no operation. + * Stubbing args to make Flow happy without leaving useless transpiled code + * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). + */ + function noop (a, b, c) {} + + /** + * Always return false. + */ + var no = function (a, b, c) { return false; }; + + /* eslint-enable no-unused-vars */ + + /** + * Return the same value. + */ + var identity = function (_) { return _; }; + + /** + * Generate a string containing static keys from compiler modules. + */ + function genStaticKeys (modules) { + return modules.reduce(function (keys, m) { + return keys.concat(m.staticKeys || []) + }, []).join(',') + } + + /* */ + + var isUnaryTag = makeMap( + 'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' + + 'link,meta,param,source,track,wbr' + ); + + // Elements that you can, intentionally, leave open + // (and which close themselves) + var canBeLeftOpenTag = makeMap( + 'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source' + ); + + // HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3 + // Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content + var isNonPhrasingTag = makeMap( + 'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' + + 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' + + 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' + + 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' + + 'title,tr,track' + ); + + /* */ + + /** + * unicode letters used for parsing html tags, component names and property paths. + * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname + * skipping \u10000-\uEFFFF due to it freezing up PhantomJS + */ + var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/; + + /** + * Define a property. + */ + function def (obj, key, val, enumerable) { + Object.defineProperty(obj, key, { + value: val, + enumerable: !!enumerable, + writable: true, + configurable: true + }); + } + + /** + * Not type-checking this file because it's mostly vendor code. + */ + + // Regular Expressions for parsing tags and attributes + var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; + var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; + var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z" + (unicodeRegExp.source) + "]*"; + var qnameCapture = "((?:" + ncname + "\\:)?" + ncname + ")"; + var startTagOpen = new RegExp(("^<" + qnameCapture)); + var startTagClose = /^\s*(\/?)>/; + var endTag = new RegExp(("^<\\/" + qnameCapture + "[^>]*>")); + var doctype = /^]+>/i; + // #7298: escape - to avoid being passed as HTML comment when inlined in page + var comment = /^', + '"': '"', + '&': '&', + ' ': '\n', + ' ': '\t', + ''': "'" + }; + var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g; + var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g; + + // #5992 + var isIgnoreNewlineTag = makeMap('pre,textarea', true); + var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\n'; }; + + function decodeAttr (value, shouldDecodeNewlines) { + var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr; + return value.replace(re, function (match) { return decodingMap[match]; }) + } + + function parseHTML (html, options) { + var stack = []; + var expectHTML = options.expectHTML; + var isUnaryTag$$1 = options.isUnaryTag || no; + var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no; + var index = 0; + var last, lastTag; + while (html) { + last = html; + // Make sure we're not in a plaintext content element like script/style + if (!lastTag || !isPlainTextElement(lastTag)) { + var textEnd = html.indexOf('<'); + if (textEnd === 0) { + // Comment: + if (comment.test(html)) { + var commentEnd = html.indexOf('-->'); + + if (commentEnd >= 0) { + if (options.shouldKeepComment) { + options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3); + } + advance(commentEnd + 3); + continue + } + } + + // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment + if (conditionalComment.test(html)) { + var conditionalEnd = html.indexOf(']>'); + + if (conditionalEnd >= 0) { + advance(conditionalEnd + 2); + continue + } + } + + // Doctype: + var doctypeMatch = html.match(doctype); + if (doctypeMatch) { + advance(doctypeMatch[0].length); + continue + } + + // End tag: + var endTagMatch = html.match(endTag); + if (endTagMatch) { + var curIndex = index; + advance(endTagMatch[0].length); + parseEndTag(endTagMatch[1], curIndex, index); + continue + } + + // Start tag: + var startTagMatch = parseStartTag(); + if (startTagMatch) { + handleStartTag(startTagMatch); + if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) { + advance(1); + } + continue + } + } + + var text = (void 0), rest = (void 0), next = (void 0); + if (textEnd >= 0) { + rest = html.slice(textEnd); + while ( + !endTag.test(rest) && + !startTagOpen.test(rest) && + !comment.test(rest) && + !conditionalComment.test(rest) + ) { + // < in plain text, be forgiving and treat it as text + next = rest.indexOf('<', 1); + if (next < 0) { break } + textEnd += next; + rest = html.slice(textEnd); + } + text = html.substring(0, textEnd); + } + + if (textEnd < 0) { + text = html; + } + + if (text) { + advance(text.length); + } + + if (options.chars && text) { + options.chars(text, index - text.length, index); + } + } else { + var endTagLength = 0; + var stackedTag = lastTag.toLowerCase(); + var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\s\\S]*?)(]*>)', 'i')); + var rest$1 = html.replace(reStackedTag, function (all, text, endTag) { + endTagLength = endTag.length; + if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') { + text = text + .replace(//g, '$1') // #7298 + .replace(//g, '$1'); + } + if (shouldIgnoreFirstNewline(stackedTag, text)) { + text = text.slice(1); + } + if (options.chars) { + options.chars(text); + } + return '' + }); + index += html.length - rest$1.length; + html = rest$1; + parseEndTag(stackedTag, index - endTagLength, index); + } + + if (html === last) { + options.chars && options.chars(html); + if (!stack.length && options.warn) { + options.warn(("Mal-formatted tag at end of template: \"" + html + "\""), { start: index + html.length }); + } + break + } + } + + // Clean up any remaining tags + parseEndTag(); + + function advance (n) { + index += n; + html = html.substring(n); + } + + function parseStartTag () { + var start = html.match(startTagOpen); + if (start) { + var match = { + tagName: start[1], + attrs: [], + start: index + }; + advance(start[0].length); + var end, attr; + while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) { + attr.start = index; + advance(attr[0].length); + attr.end = index; + match.attrs.push(attr); + } + if (end) { + match.unarySlash = end[1]; + advance(end[0].length); + match.end = index; + return match + } + } + } + + function handleStartTag (match) { + var tagName = match.tagName; + var unarySlash = match.unarySlash; + + if (expectHTML) { + if (lastTag === 'p' && isNonPhrasingTag(tagName)) { + parseEndTag(lastTag); + } + if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) { + parseEndTag(tagName); + } + } + + var unary = isUnaryTag$$1(tagName) || !!unarySlash; + + var l = match.attrs.length; + var attrs = new Array(l); + for (var i = 0; i < l; i++) { + var args = match.attrs[i]; + var value = args[3] || args[4] || args[5] || ''; + var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href' + ? options.shouldDecodeNewlinesForHref + : options.shouldDecodeNewlines; + attrs[i] = { + name: args[1], + value: decodeAttr(value, shouldDecodeNewlines) + }; + if (options.outputSourceRange) { + attrs[i].start = args.start + args[0].match(/^\s*/).length; + attrs[i].end = args.end; + } + } + + if (!unary) { + stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end }); + lastTag = tagName; + } + + if (options.start) { + options.start(tagName, attrs, unary, match.start, match.end); + } + } + + function parseEndTag (tagName, start, end) { + var pos, lowerCasedTagName; + if (start == null) { start = index; } + if (end == null) { end = index; } + + // Find the closest opened tag of the same type + if (tagName) { + lowerCasedTagName = tagName.toLowerCase(); + for (pos = stack.length - 1; pos >= 0; pos--) { + if (stack[pos].lowerCasedTag === lowerCasedTagName) { + break + } + } + } else { + // If no tag name is provided, clean shop + pos = 0; + } + + if (pos >= 0) { + // Close all the open elements, up the stack + for (var i = stack.length - 1; i >= pos; i--) { + if (i > pos || !tagName && + options.warn + ) { + options.warn( + ("tag <" + (stack[i].tag) + "> has no matching end tag."), + { start: stack[i].start, end: stack[i].end } + ); + } + if (options.end) { + options.end(stack[i].tag, start, end); + } + } + + // Remove the open elements from the stack + stack.length = pos; + lastTag = pos && stack[pos - 1].tag; + } else if (lowerCasedTagName === 'br') { + if (options.start) { + options.start(tagName, [], true, start, end); + } + } else if (lowerCasedTagName === 'p') { + if (options.start) { + options.start(tagName, [], false, start, end); + } + if (options.end) { + options.end(tagName, start, end); + } + } + } + } + + /* */ + + var splitRE$1 = /\r?\n/g; + var replaceRE = /./g; + var isSpecialTag = makeMap('script,style,template', true); + + /** + * Parse a single-file component (*.vue) file into an SFC Descriptor Object. + */ + function parseComponent ( + content, + options + ) { + if ( options === void 0 ) options = {}; + + var sfc = { + template: null, + script: null, + styles: [], + customBlocks: [], + errors: [] + }; + var depth = 0; + var currentBlock = null; + + var warn = function (msg) { + sfc.errors.push(msg); + }; + + if (options.outputSourceRange) { + warn = function (msg, range) { + var data = { msg: msg }; + if (range.start != null) { + data.start = range.start; + } + if (range.end != null) { + data.end = range.end; + } + sfc.errors.push(data); + }; + } + + function start ( + tag, + attrs, + unary, + start, + end + ) { + if (depth === 0) { + currentBlock = { + type: tag, + content: '', + start: end, + attrs: attrs.reduce(function (cumulated, ref) { + var name = ref.name; + var value = ref.value; + + cumulated[name] = value || true; + return cumulated + }, {}) + }; + if (isSpecialTag(tag)) { + checkAttrs(currentBlock, attrs); + if (tag === 'style') { + sfc.styles.push(currentBlock); + } else { + sfc[tag] = currentBlock; + } + } else { // custom blocks + sfc.customBlocks.push(currentBlock); + } + } + if (!unary) { + depth++; + } + } + + function checkAttrs (block, attrs) { + for (var i = 0; i < attrs.length; i++) { + var attr = attrs[i]; + if (attr.name === 'lang') { + block.lang = attr.value; + } + if (attr.name === 'scoped') { + block.scoped = true; + } + if (attr.name === 'module') { + block.module = attr.value || true; + } + if (attr.name === 'src') { + block.src = attr.value; + } + } + } + + function end (tag, start) { + if (depth === 1 && currentBlock) { + currentBlock.end = start; + var text = content.slice(currentBlock.start, currentBlock.end); + if (options.deindent !== false) { + text = deIndent(text); + } + // pad content so that linters and pre-processors can output correct + // line numbers in errors and warnings + if (currentBlock.type !== 'template' && options.pad) { + text = padContent(currentBlock, options.pad) + text; + } + currentBlock.content = text; + currentBlock = null; + } + depth--; + } + + function padContent (block, pad) { + if (pad === 'space') { + return content.slice(0, block.start).replace(replaceRE, ' ') + } else { + var offset = content.slice(0, block.start).split(splitRE$1).length; + var padChar = block.type === 'script' && !block.lang + ? '//\n' + : '\n'; + return Array(offset).join(padChar) + } + } + + parseHTML(content, { + warn: warn, + start: start, + end: end, + outputSourceRange: options.outputSourceRange + }); + + return sfc + } + + /* */ + + // can we use __proto__? + var hasProto = '__proto__' in {}; + + // Browser environment sniffing + var inBrowser = typeof window !== 'undefined'; + var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform; + var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase(); + var UA = inBrowser && window.navigator.userAgent.toLowerCase(); + var isIE = UA && /msie|trident/.test(UA); + var isIE9 = UA && UA.indexOf('msie 9.0') > 0; + var isEdge = UA && UA.indexOf('edge/') > 0; + var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android'); + var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios'); + var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge; + var isPhantomJS = UA && /phantomjs/.test(UA); + var isFF = UA && UA.match(/firefox\/(\d+)/); + + // Firefox has a "watch" function on Object.prototype... + var nativeWatch = ({}).watch; + if (inBrowser) { + try { + var opts = {}; + Object.defineProperty(opts, 'passive', ({ + get: function get () { + } + })); // https://github.com/facebook/flow/issues/285 + window.addEventListener('test-passive', null, opts); + } catch (e) {} + } + + // this needs to be lazy-evaled because vue may be required before + // vue-server-renderer can set VUE_ENV + var _isServer; + var isServerRendering = function () { + if (_isServer === undefined) { + /* istanbul ignore if */ + if (!inBrowser && !inWeex && typeof global !== 'undefined') { + // detect presence of vue-server-renderer and avoid + // Webpack shimming the process + _isServer = global['process'] && global['process'].env.VUE_ENV === 'server'; + } else { + _isServer = false; + } + } + return _isServer + }; + + // detect devtools + var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; + + /* istanbul ignore next */ + function isNative (Ctor) { + return typeof Ctor === 'function' && /native code/.test(Ctor.toString()) + } + + var hasSymbol = + typeof Symbol !== 'undefined' && isNative(Symbol) && + typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys); + + var _Set; + /* istanbul ignore if */ // $flow-disable-line + if (typeof Set !== 'undefined' && isNative(Set)) { + // use native Set when available. + _Set = Set; + } else { + // a non-standard Set polyfill that only works with primitive keys. + _Set = /*@__PURE__*/(function () { + function Set () { + this.set = Object.create(null); + } + Set.prototype.has = function has (key) { + return this.set[key] === true + }; + Set.prototype.add = function add (key) { + this.set[key] = true; + }; + Set.prototype.clear = function clear () { + this.set = Object.create(null); + }; + + return Set; + }()); + } + + var ASSET_TYPES = [ + 'component', + 'directive', + 'filter' + ]; + + var LIFECYCLE_HOOKS = [ + 'beforeCreate', + 'created', + 'beforeMount', + 'mounted', + 'beforeUpdate', + 'updated', + 'beforeDestroy', + 'destroyed', + 'activated', + 'deactivated', + 'errorCaptured', + 'serverPrefetch' + ]; + + /* */ + + + + var config = ({ + /** + * Option merge strategies (used in core/util/options) + */ + // $flow-disable-line + optionMergeStrategies: Object.create(null), + + /** + * Whether to suppress warnings. + */ + silent: false, + + /** + * Show production mode tip message on boot? + */ + productionTip: "development" !== 'production', + + /** + * Whether to enable devtools + */ + devtools: "development" !== 'production', + + /** + * Whether to record perf + */ + performance: false, + + /** + * Error handler for watcher errors + */ + errorHandler: null, + + /** + * Warn handler for watcher warns + */ + warnHandler: null, + + /** + * Ignore certain custom elements + */ + ignoredElements: [], + + /** + * Custom user key aliases for v-on + */ + // $flow-disable-line + keyCodes: Object.create(null), + + /** + * Check if a tag is reserved so that it cannot be registered as a + * component. This is platform-dependent and may be overwritten. + */ + isReservedTag: no, + + /** + * Check if an attribute is reserved so that it cannot be used as a component + * prop. This is platform-dependent and may be overwritten. + */ + isReservedAttr: no, + + /** + * Check if a tag is an unknown element. + * Platform-dependent. + */ + isUnknownElement: no, + + /** + * Get the namespace of an element + */ + getTagNamespace: noop, + + /** + * Parse the real tag name for the specific platform. + */ + parsePlatformTagName: identity, + + /** + * Check if an attribute must be bound using property, e.g. value + * Platform-dependent. + */ + mustUseProp: no, + + /** + * Perform updates asynchronously. Intended to be used by Vue Test Utils + * This will significantly reduce performance if set to false. + */ + async: true, + + /** + * Exposed for legacy reasons + */ + _lifecycleHooks: LIFECYCLE_HOOKS + }); + + /* */ + + var warn = noop; + var tip = noop; + var generateComponentTrace = (noop); // work around flow check + var formatComponentName = (noop); + + { + var hasConsole = typeof console !== 'undefined'; + var classifyRE = /(?:^|[-_])(\w)/g; + var classify = function (str) { return str + .replace(classifyRE, function (c) { return c.toUpperCase(); }) + .replace(/[-_]/g, ''); }; + + warn = function (msg, vm) { + var trace = vm ? generateComponentTrace(vm) : ''; + + if (hasConsole && (!config.silent)) { + console.error(("[Vue warn]: " + msg + trace)); + } + }; + + tip = function (msg, vm) { + if (hasConsole && (!config.silent)) { + console.warn("[Vue tip]: " + msg + ( + vm ? generateComponentTrace(vm) : '' + )); + } + }; + + formatComponentName = function (vm, includeFile) { + if (vm.$root === vm) { + return '' + } + var options = typeof vm === 'function' && vm.cid != null + ? vm.options + : vm._isVue + ? vm.$options || vm.constructor.options + : vm; + var name = options.name || options._componentTag; + var file = options.__file; + if (!name && file) { + var match = file.match(/([^/\\]+)\.vue$/); + name = match && match[1]; + } + + return ( + (name ? ("<" + (classify(name)) + ">") : "") + + (file && includeFile !== false ? (" at " + file) : '') + ) + }; + + var repeat = function (str, n) { + var res = ''; + while (n) { + if (n % 2 === 1) { res += str; } + if (n > 1) { str += str; } + n >>= 1; + } + return res + }; + + generateComponentTrace = function (vm) { + if (vm._isVue && vm.$parent) { + var tree = []; + var currentRecursiveSequence = 0; + while (vm) { + if (tree.length > 0) { + var last = tree[tree.length - 1]; + if (last.constructor === vm.constructor) { + currentRecursiveSequence++; + vm = vm.$parent; + continue + } else if (currentRecursiveSequence > 0) { + tree[tree.length - 1] = [last, currentRecursiveSequence]; + currentRecursiveSequence = 0; + } + } + tree.push(vm); + vm = vm.$parent; + } + return '\n\nfound in\n\n' + tree + .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm) + ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)") + : formatComponentName(vm))); }) + .join('\n') + } else { + return ("\n\n(found in " + (formatComponentName(vm)) + ")") + } + }; + } + + /* */ + + var uid = 0; + + /** + * A dep is an observable that can have multiple + * directives subscribing to it. + */ + var Dep = function Dep () { + this.id = uid++; + this.subs = []; + }; + + Dep.prototype.addSub = function addSub (sub) { + this.subs.push(sub); + }; + + Dep.prototype.removeSub = function removeSub (sub) { + remove(this.subs, sub); + }; + + Dep.prototype.depend = function depend () { + if (Dep.target) { + Dep.target.addDep(this); + } + }; + + Dep.prototype.notify = function notify () { + // stabilize the subscriber list first + var subs = this.subs.slice(); + for (var i = 0, l = subs.length; i < l; i++) { + subs[i].update(); + } + }; + + // The current target watcher being evaluated. + // This is globally unique because only one watcher + // can be evaluated at a time. + Dep.target = null; + + /* */ + + var VNode = function VNode ( + tag, + data, + children, + text, + elm, + context, + componentOptions, + asyncFactory + ) { + this.tag = tag; + this.data = data; + this.children = children; + this.text = text; + this.elm = elm; + this.ns = undefined; + this.context = context; + this.fnContext = undefined; + this.fnOptions = undefined; + this.fnScopeId = undefined; + this.key = data && data.key; + this.componentOptions = componentOptions; + this.componentInstance = undefined; + this.parent = undefined; + this.raw = false; + this.isStatic = false; + this.isRootInsert = true; + this.isComment = false; + this.isCloned = false; + this.isOnce = false; + this.asyncFactory = asyncFactory; + this.asyncMeta = undefined; + this.isAsyncPlaceholder = false; + }; + + var prototypeAccessors = { child: { configurable: true } }; + + // DEPRECATED: alias for componentInstance for backwards compat. + /* istanbul ignore next */ + prototypeAccessors.child.get = function () { + return this.componentInstance + }; + + Object.defineProperties( VNode.prototype, prototypeAccessors ); + + /* + * not type checking this file because flow doesn't play well with + * dynamically accessing methods on Array prototype + */ + + var arrayProto = Array.prototype; + var arrayMethods = Object.create(arrayProto); + + var methodsToPatch = [ + 'push', + 'pop', + 'shift', + 'unshift', + 'splice', + 'sort', + 'reverse' + ]; + + /** + * Intercept mutating methods and emit events + */ + methodsToPatch.forEach(function (method) { + // cache original method + var original = arrayProto[method]; + def(arrayMethods, method, function mutator () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var result = original.apply(this, args); + var ob = this.__ob__; + var inserted; + switch (method) { + case 'push': + case 'unshift': + inserted = args; + break + case 'splice': + inserted = args.slice(2); + break + } + if (inserted) { ob.observeArray(inserted); } + // notify change + ob.dep.notify(); + return result + }); + }); + + /* */ + + var arrayKeys = Object.getOwnPropertyNames(arrayMethods); + + /** + * In some cases we may want to disable observation inside a component's + * update computation. + */ + var shouldObserve = true; + + /** + * Observer class that is attached to each observed + * object. Once attached, the observer converts the target + * object's property keys into getter/setters that + * collect dependencies and dispatch updates. + */ + var Observer = function Observer (value) { + this.value = value; + this.dep = new Dep(); + this.vmCount = 0; + def(value, '__ob__', this); + if (Array.isArray(value)) { + if (hasProto) { + protoAugment(value, arrayMethods); + } else { + copyAugment(value, arrayMethods, arrayKeys); + } + this.observeArray(value); + } else { + this.walk(value); + } + }; + + /** + * Walk through all properties and convert them into + * getter/setters. This method should only be called when + * value type is Object. + */ + Observer.prototype.walk = function walk (obj) { + var keys = Object.keys(obj); + for (var i = 0; i < keys.length; i++) { + defineReactive$$1(obj, keys[i]); + } + }; + + /** + * Observe a list of Array items. + */ + Observer.prototype.observeArray = function observeArray (items) { + for (var i = 0, l = items.length; i < l; i++) { + observe(items[i]); + } + }; + + // helpers + + /** + * Augment a target Object or Array by intercepting + * the prototype chain using __proto__ + */ + function protoAugment (target, src) { + /* eslint-disable no-proto */ + target.__proto__ = src; + /* eslint-enable no-proto */ + } + + /** + * Augment a target Object or Array by defining + * hidden properties. + */ + /* istanbul ignore next */ + function copyAugment (target, src, keys) { + for (var i = 0, l = keys.length; i < l; i++) { + var key = keys[i]; + def(target, key, src[key]); + } + } + + /** + * Attempt to create an observer instance for a value, + * returns the new observer if successfully observed, + * or the existing observer if the value already has one. + */ + function observe (value, asRootData) { + if (!isObject(value) || value instanceof VNode) { + return + } + var ob; + if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { + ob = value.__ob__; + } else if ( + shouldObserve && + !isServerRendering() && + (Array.isArray(value) || isPlainObject(value)) && + Object.isExtensible(value) && + !value._isVue + ) { + ob = new Observer(value); + } + if (asRootData && ob) { + ob.vmCount++; + } + return ob + } + + /** + * Define a reactive property on an Object. + */ + function defineReactive$$1 ( + obj, + key, + val, + customSetter, + shallow + ) { + var dep = new Dep(); + + var property = Object.getOwnPropertyDescriptor(obj, key); + if (property && property.configurable === false) { + return + } + + // cater for pre-defined getter/setters + var getter = property && property.get; + var setter = property && property.set; + if ((!getter || setter) && arguments.length === 2) { + val = obj[key]; + } + + var childOb = !shallow && observe(val); + Object.defineProperty(obj, key, { + enumerable: true, + configurable: true, + get: function reactiveGetter () { + var value = getter ? getter.call(obj) : val; + if (Dep.target) { + dep.depend(); + if (childOb) { + childOb.dep.depend(); + if (Array.isArray(value)) { + dependArray(value); + } + } + } + return value + }, + set: function reactiveSetter (newVal) { + var value = getter ? getter.call(obj) : val; + /* eslint-disable no-self-compare */ + if (newVal === value || (newVal !== newVal && value !== value)) { + return + } + /* eslint-enable no-self-compare */ + if (customSetter) { + customSetter(); + } + // #7981: for accessor properties without setter + if (getter && !setter) { return } + if (setter) { + setter.call(obj, newVal); + } else { + val = newVal; + } + childOb = !shallow && observe(newVal); + dep.notify(); + } + }); + } + + /** + * Set a property on an object. Adds the new property and + * triggers change notification if the property doesn't + * already exist. + */ + function set (target, key, val) { + if (isUndef(target) || isPrimitive(target) + ) { + warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target)))); + } + if (Array.isArray(target) && isValidArrayIndex(key)) { + target.length = Math.max(target.length, key); + target.splice(key, 1, val); + return val + } + if (key in target && !(key in Object.prototype)) { + target[key] = val; + return val + } + var ob = (target).__ob__; + if (target._isVue || (ob && ob.vmCount)) { + warn( + 'Avoid adding reactive properties to a Vue instance or its root $data ' + + 'at runtime - declare it upfront in the data option.' + ); + return val + } + if (!ob) { + target[key] = val; + return val + } + defineReactive$$1(ob.value, key, val); + ob.dep.notify(); + return val + } + + /** + * Collect dependencies on array elements when the array is touched, since + * we cannot intercept array element access like property getters. + */ + function dependArray (value) { + for (var e = (void 0), i = 0, l = value.length; i < l; i++) { + e = value[i]; + e && e.__ob__ && e.__ob__.dep.depend(); + if (Array.isArray(e)) { + dependArray(e); + } + } + } + + /* */ + + /** + * Option overwriting strategies are functions that handle + * how to merge a parent option value and a child option + * value into the final value. + */ + var strats = config.optionMergeStrategies; + + /** + * Options with restrictions + */ + { + strats.el = strats.propsData = function (parent, child, vm, key) { + if (!vm) { + warn( + "option \"" + key + "\" can only be used during instance " + + 'creation with the `new` keyword.' + ); + } + return defaultStrat(parent, child) + }; + } + + /** + * Helper that recursively merges two data objects together. + */ + function mergeData (to, from) { + if (!from) { return to } + var key, toVal, fromVal; + + var keys = hasSymbol + ? Reflect.ownKeys(from) + : Object.keys(from); + + for (var i = 0; i < keys.length; i++) { + key = keys[i]; + // in case the object is already observed... + if (key === '__ob__') { continue } + toVal = to[key]; + fromVal = from[key]; + if (!hasOwn(to, key)) { + set(to, key, fromVal); + } else if ( + toVal !== fromVal && + isPlainObject(toVal) && + isPlainObject(fromVal) + ) { + mergeData(toVal, fromVal); + } + } + return to + } + + /** + * Data + */ + function mergeDataOrFn ( + parentVal, + childVal, + vm + ) { + if (!vm) { + // in a Vue.extend merge, both should be functions + if (!childVal) { + return parentVal + } + if (!parentVal) { + return childVal + } + // when parentVal & childVal are both present, + // we need to return a function that returns the + // merged result of both functions... no need to + // check if parentVal is a function here because + // it has to be a function to pass previous merges. + return function mergedDataFn () { + return mergeData( + typeof childVal === 'function' ? childVal.call(this, this) : childVal, + typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal + ) + } + } else { + return function mergedInstanceDataFn () { + // instance merge + var instanceData = typeof childVal === 'function' + ? childVal.call(vm, vm) + : childVal; + var defaultData = typeof parentVal === 'function' + ? parentVal.call(vm, vm) + : parentVal; + if (instanceData) { + return mergeData(instanceData, defaultData) + } else { + return defaultData + } + } + } + } + + strats.data = function ( + parentVal, + childVal, + vm + ) { + if (!vm) { + if (childVal && typeof childVal !== 'function') { + warn( + 'The "data" option should be a function ' + + 'that returns a per-instance value in component ' + + 'definitions.', + vm + ); + + return parentVal + } + return mergeDataOrFn(parentVal, childVal) + } + + return mergeDataOrFn(parentVal, childVal, vm) + }; + + /** + * Hooks and props are merged as arrays. + */ + function mergeHook ( + parentVal, + childVal + ) { + var res = childVal + ? parentVal + ? parentVal.concat(childVal) + : Array.isArray(childVal) + ? childVal + : [childVal] + : parentVal; + return res + ? dedupeHooks(res) + : res + } + + function dedupeHooks (hooks) { + var res = []; + for (var i = 0; i < hooks.length; i++) { + if (res.indexOf(hooks[i]) === -1) { + res.push(hooks[i]); + } + } + return res + } + + LIFECYCLE_HOOKS.forEach(function (hook) { + strats[hook] = mergeHook; + }); + + /** + * Assets + * + * When a vm is present (instance creation), we need to do + * a three-way merge between constructor options, instance + * options and parent options. + */ + function mergeAssets ( + parentVal, + childVal, + vm, + key + ) { + var res = Object.create(parentVal || null); + if (childVal) { + assertObjectType(key, childVal, vm); + return extend(res, childVal) + } else { + return res + } + } + + ASSET_TYPES.forEach(function (type) { + strats[type + 's'] = mergeAssets; + }); + + /** + * Watchers. + * + * Watchers hashes should not overwrite one + * another, so we merge them as arrays. + */ + strats.watch = function ( + parentVal, + childVal, + vm, + key + ) { + // work around Firefox's Object.prototype.watch... + if (parentVal === nativeWatch) { parentVal = undefined; } + if (childVal === nativeWatch) { childVal = undefined; } + /* istanbul ignore if */ + if (!childVal) { return Object.create(parentVal || null) } + { + assertObjectType(key, childVal, vm); + } + if (!parentVal) { return childVal } + var ret = {}; + extend(ret, parentVal); + for (var key$1 in childVal) { + var parent = ret[key$1]; + var child = childVal[key$1]; + if (parent && !Array.isArray(parent)) { + parent = [parent]; + } + ret[key$1] = parent + ? parent.concat(child) + : Array.isArray(child) ? child : [child]; + } + return ret + }; + + /** + * Other object hashes. + */ + strats.props = + strats.methods = + strats.inject = + strats.computed = function ( + parentVal, + childVal, + vm, + key + ) { + if (childVal && "development" !== 'production') { + assertObjectType(key, childVal, vm); + } + if (!parentVal) { return childVal } + var ret = Object.create(null); + extend(ret, parentVal); + if (childVal) { extend(ret, childVal); } + return ret + }; + strats.provide = mergeDataOrFn; + + /** + * Default strategy. + */ + var defaultStrat = function (parentVal, childVal) { + return childVal === undefined + ? parentVal + : childVal + }; + + function assertObjectType (name, value, vm) { + if (!isPlainObject(value)) { + warn( + "Invalid value for option \"" + name + "\": expected an Object, " + + "but got " + (toRawType(value)) + ".", + vm + ); + } + } + + /* */ + + /* */ + + /* */ + + var callbacks = []; + + function flushCallbacks () { + var copies = callbacks.slice(0); + callbacks.length = 0; + for (var i = 0; i < copies.length; i++) { + copies[i](); + } + } + + // The nextTick behavior leverages the microtask queue, which can be accessed + // via either native Promise.then or MutationObserver. + // MutationObserver has wider support, however it is seriously bugged in + // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It + // completely stops working after triggering a few times... so, if native + // Promise is available, we will use it: + /* istanbul ignore next, $flow-disable-line */ + if (typeof Promise !== 'undefined' && isNative(Promise)) ; else if (!isIE && typeof MutationObserver !== 'undefined' && ( + isNative(MutationObserver) || + // PhantomJS and iOS 7.x + MutationObserver.toString() === '[object MutationObserverConstructor]' + )) { + // Use MutationObserver where native Promise is not available, + // e.g. PhantomJS, iOS7, Android 4.4 + // (#6466 MutationObserver is unreliable in IE11) + var counter = 1; + var observer = new MutationObserver(flushCallbacks); + var textNode = document.createTextNode(String(counter)); + observer.observe(textNode, { + characterData: true + }); + } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) ; + + /* */ + + /* */ + + // these are reserved for web because they are directly compiled away + // during template compilation + var isReservedAttr = makeMap('style,class'); + + // attributes that should be using props for binding + var acceptValue = makeMap('input,textarea,option,select,progress'); + var mustUseProp = function (tag, type, attr) { + return ( + (attr === 'value' && acceptValue(tag)) && type !== 'button' || + (attr === 'selected' && tag === 'option') || + (attr === 'checked' && tag === 'input') || + (attr === 'muted' && tag === 'video') + ) + }; + + var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck'); + + var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only'); + + var isBooleanAttr = makeMap( + 'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' + + 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' + + 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' + + 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' + + 'required,reversed,scoped,seamless,selected,sortable,' + + 'truespeed,typemustmatch,visible' + ); + + /* */ + + /* */ + + var isHTMLTag = makeMap( + 'html,body,base,head,link,meta,style,title,' + + 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' + + 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' + + 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' + + 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' + + 'embed,object,param,source,canvas,script,noscript,del,ins,' + + 'caption,col,colgroup,table,thead,tbody,td,th,tr,' + + 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' + + 'output,progress,select,textarea,' + + 'details,dialog,menu,menuitem,summary,' + + 'content,element,shadow,template,blockquote,iframe,tfoot' + ); + + // this map is intentionally selective, only covering SVG elements that may + // contain child elements. + var isSVG = makeMap( + 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' + + 'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' + + 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', + true + ); + + var isPreTag = function (tag) { return tag === 'pre'; }; + + var isReservedTag = function (tag) { + return isHTMLTag(tag) || isSVG(tag) + }; + + function getTagNamespace (tag) { + if (isSVG(tag)) { + return 'svg' + } + // basic support for MathML + // note it doesn't support other MathML elements being component roots + if (tag === 'math') { + return 'math' + } + } + + var isTextInputType = makeMap('text,number,password,search,email,tel,url'); + + /* */ + + /* */ + + var validDivisionCharRE = /[\w).+\-_$\]]/; + + function parseFilters (exp) { + var inSingle = false; + var inDouble = false; + var inTemplateString = false; + var inRegex = false; + var curly = 0; + var square = 0; + var paren = 0; + var lastFilterIndex = 0; + var c, prev, i, expression, filters; + + for (i = 0; i < exp.length; i++) { + prev = c; + c = exp.charCodeAt(i); + if (inSingle) { + if (c === 0x27 && prev !== 0x5C) { inSingle = false; } + } else if (inDouble) { + if (c === 0x22 && prev !== 0x5C) { inDouble = false; } + } else if (inTemplateString) { + if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; } + } else if (inRegex) { + if (c === 0x2f && prev !== 0x5C) { inRegex = false; } + } else if ( + c === 0x7C && // pipe + exp.charCodeAt(i + 1) !== 0x7C && + exp.charCodeAt(i - 1) !== 0x7C && + !curly && !square && !paren + ) { + if (expression === undefined) { + // first filter, end of expression + lastFilterIndex = i + 1; + expression = exp.slice(0, i).trim(); + } else { + pushFilter(); + } + } else { + switch (c) { + case 0x22: inDouble = true; break // " + case 0x27: inSingle = true; break // ' + case 0x60: inTemplateString = true; break // ` + case 0x28: paren++; break // ( + case 0x29: paren--; break // ) + case 0x5B: square++; break // [ + case 0x5D: square--; break // ] + case 0x7B: curly++; break // { + case 0x7D: curly--; break // } + } + if (c === 0x2f) { // / + var j = i - 1; + var p = (void 0); + // find first non-whitespace prev char + for (; j >= 0; j--) { + p = exp.charAt(j); + if (p !== ' ') { break } + } + if (!p || !validDivisionCharRE.test(p)) { + inRegex = true; + } + } + } + } + + if (expression === undefined) { + expression = exp.slice(0, i).trim(); + } else if (lastFilterIndex !== 0) { + pushFilter(); + } + + function pushFilter () { + (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim()); + lastFilterIndex = i + 1; + } + + if (filters) { + for (i = 0; i < filters.length; i++) { + expression = wrapFilter(expression, filters[i]); + } + } + + return expression + } + + function wrapFilter (exp, filter) { + var i = filter.indexOf('('); + if (i < 0) { + // _f: resolveFilter + return ("_f(\"" + filter + "\")(" + exp + ")") + } else { + var name = filter.slice(0, i); + var args = filter.slice(i + 1); + return ("_f(\"" + name + "\")(" + exp + (args !== ')' ? ',' + args : args)) + } + } + + /* */ + + var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g; + var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g; + + var buildRegex = cached(function (delimiters) { + var open = delimiters[0].replace(regexEscapeRE, '\\$&'); + var close = delimiters[1].replace(regexEscapeRE, '\\$&'); + return new RegExp(open + '((?:.|\\n)+?)' + close, 'g') + }); + + + + function parseText ( + text, + delimiters + ) { + var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE; + if (!tagRE.test(text)) { + return + } + var tokens = []; + var rawTokens = []; + var lastIndex = tagRE.lastIndex = 0; + var match, index, tokenValue; + while ((match = tagRE.exec(text))) { + index = match.index; + // push text token + if (index > lastIndex) { + rawTokens.push(tokenValue = text.slice(lastIndex, index)); + tokens.push(JSON.stringify(tokenValue)); + } + // tag token + var exp = parseFilters(match[1].trim()); + tokens.push(("_s(" + exp + ")")); + rawTokens.push({ '@binding': exp }); + lastIndex = index + match[0].length; + } + if (lastIndex < text.length) { + rawTokens.push(tokenValue = text.slice(lastIndex)); + tokens.push(JSON.stringify(tokenValue)); + } + return { + expression: tokens.join('+'), + tokens: rawTokens + } + } + + /* */ + + + + /* eslint-disable no-unused-vars */ + function baseWarn (msg, range) { + console.error(("[Vue compiler]: " + msg)); + } + /* eslint-enable no-unused-vars */ + + function pluckModuleFunction ( + modules, + key + ) { + return modules + ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) + : [] + } + + function addProp (el, name, value, range, dynamic) { + (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)); + el.plain = false; + } + + function addAttr (el, name, value, range, dynamic) { + var attrs = dynamic + ? (el.dynamicAttrs || (el.dynamicAttrs = [])) + : (el.attrs || (el.attrs = [])); + attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)); + el.plain = false; + } + + // add a raw attr (use this in preTransforms) + function addRawAttr (el, name, value, range) { + el.attrsMap[name] = value; + el.attrsList.push(rangeSetItem({ name: name, value: value }, range)); + } + + function addDirective ( + el, + name, + rawName, + value, + arg, + isDynamicArg, + modifiers, + range + ) { + (el.directives || (el.directives = [])).push(rangeSetItem({ + name: name, + rawName: rawName, + value: value, + arg: arg, + isDynamicArg: isDynamicArg, + modifiers: modifiers + }, range)); + el.plain = false; + } + + function prependModifierMarker (symbol, name, dynamic) { + return dynamic + ? ("_p(" + name + ",\"" + symbol + "\")") + : symbol + name // mark the event as captured + } + + function addHandler ( + el, + name, + value, + modifiers, + important, + warn, + range, + dynamic + ) { + modifiers = modifiers || emptyObject; + // warn prevent and passive modifier + /* istanbul ignore if */ + if ( + warn && + modifiers.prevent && modifiers.passive + ) { + warn( + 'passive and prevent can\'t be used together. ' + + 'Passive handler can\'t prevent default event.', + range + ); + } + + // normalize click.right and click.middle since they don't actually fire + // this is technically browser-specific, but at least for now browsers are + // the only target envs that have right/middle clicks. + if (modifiers.right) { + if (dynamic) { + name = "(" + name + ")==='click'?'contextmenu':(" + name + ")"; + } else if (name === 'click') { + name = 'contextmenu'; + delete modifiers.right; + } + } else if (modifiers.middle) { + if (dynamic) { + name = "(" + name + ")==='click'?'mouseup':(" + name + ")"; + } else if (name === 'click') { + name = 'mouseup'; + } + } + + // check capture modifier + if (modifiers.capture) { + delete modifiers.capture; + name = prependModifierMarker('!', name, dynamic); + } + if (modifiers.once) { + delete modifiers.once; + name = prependModifierMarker('~', name, dynamic); + } + /* istanbul ignore if */ + if (modifiers.passive) { + delete modifiers.passive; + name = prependModifierMarker('&', name, dynamic); + } + + var events; + if (modifiers.native) { + delete modifiers.native; + events = el.nativeEvents || (el.nativeEvents = {}); + } else { + events = el.events || (el.events = {}); + } + + var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range); + if (modifiers !== emptyObject) { + newHandler.modifiers = modifiers; + } + + var handlers = events[name]; + /* istanbul ignore if */ + if (Array.isArray(handlers)) { + important ? handlers.unshift(newHandler) : handlers.push(newHandler); + } else if (handlers) { + events[name] = important ? [newHandler, handlers] : [handlers, newHandler]; + } else { + events[name] = newHandler; + } + + el.plain = false; + } + + function getRawBindingAttr ( + el, + name + ) { + return el.rawAttrsMap[':' + name] || + el.rawAttrsMap['v-bind:' + name] || + el.rawAttrsMap[name] + } + + function getBindingAttr ( + el, + name, + getStatic + ) { + var dynamicValue = + getAndRemoveAttr(el, ':' + name) || + getAndRemoveAttr(el, 'v-bind:' + name); + if (dynamicValue != null) { + return parseFilters(dynamicValue) + } else if (getStatic !== false) { + var staticValue = getAndRemoveAttr(el, name); + if (staticValue != null) { + return JSON.stringify(staticValue) + } + } + } + + // note: this only removes the attr from the Array (attrsList) so that it + // doesn't get processed by processAttrs. + // By default it does NOT remove it from the map (attrsMap) because the map is + // needed during codegen. + function getAndRemoveAttr ( + el, + name, + removeFromMap + ) { + var val; + if ((val = el.attrsMap[name]) != null) { + var list = el.attrsList; + for (var i = 0, l = list.length; i < l; i++) { + if (list[i].name === name) { + list.splice(i, 1); + break + } + } + } + if (removeFromMap) { + delete el.attrsMap[name]; + } + return val + } + + function getAndRemoveAttrByRegex ( + el, + name + ) { + var list = el.attrsList; + for (var i = 0, l = list.length; i < l; i++) { + var attr = list[i]; + if (name.test(attr.name)) { + list.splice(i, 1); + return attr + } + } + } + + function rangeSetItem ( + item, + range + ) { + if (range) { + if (range.start != null) { + item.start = range.start; + } + if (range.end != null) { + item.end = range.end; + } + } + return item + } + + /* */ + + function transformNode (el, options) { + var warn = options.warn || baseWarn; + var staticClass = getAndRemoveAttr(el, 'class'); + if (staticClass) { + var res = parseText(staticClass, options.delimiters); + if (res) { + warn( + "class=\"" + staticClass + "\": " + + 'Interpolation inside attributes has been removed. ' + + 'Use v-bind or the colon shorthand instead. For example, ' + + 'instead of
, use
.', + el.rawAttrsMap['class'] + ); + } + } + if (staticClass) { + el.staticClass = JSON.stringify(staticClass); + } + var classBinding = getBindingAttr(el, 'class', false /* getStatic */); + if (classBinding) { + el.classBinding = classBinding; + } + } + + function genData (el) { + var data = ''; + if (el.staticClass) { + data += "staticClass:" + (el.staticClass) + ","; + } + if (el.classBinding) { + data += "class:" + (el.classBinding) + ","; + } + return data + } + + var klass = { + staticKeys: ['staticClass'], + transformNode: transformNode, + genData: genData + }; + + /* */ + + var parseStyleText = cached(function (cssText) { + var res = {}; + var listDelimiter = /;(?![^(]*\))/g; + var propertyDelimiter = /:(.+)/; + cssText.split(listDelimiter).forEach(function (item) { + if (item) { + var tmp = item.split(propertyDelimiter); + tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); + } + }); + return res + }); + + /* */ + + function transformNode$1 (el, options) { + var warn = options.warn || baseWarn; + var staticStyle = getAndRemoveAttr(el, 'style'); + if (staticStyle) { + /* istanbul ignore if */ + { + var res = parseText(staticStyle, options.delimiters); + if (res) { + warn( + "style=\"" + staticStyle + "\": " + + 'Interpolation inside attributes has been removed. ' + + 'Use v-bind or the colon shorthand instead. For example, ' + + 'instead of
, use
.', + el.rawAttrsMap['style'] + ); + } + } + el.staticStyle = JSON.stringify(parseStyleText(staticStyle)); + } + + var styleBinding = getBindingAttr(el, 'style', false /* getStatic */); + if (styleBinding) { + el.styleBinding = styleBinding; + } + } + + function genData$1 (el) { + var data = ''; + if (el.staticStyle) { + data += "staticStyle:" + (el.staticStyle) + ","; + } + if (el.styleBinding) { + data += "style:(" + (el.styleBinding) + "),"; + } + return data + } + + var style = { + staticKeys: ['staticStyle'], + transformNode: transformNode$1, + genData: genData$1 + }; + + var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var he = createCommonjsModule(function (module, exports) { + (function(root) { + + // Detect free variables `exports`. + var freeExports = exports; + + // Detect free variable `module`. + var freeModule = module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root`. + var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + // All astral symbols. + var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + // All ASCII symbols (not just printable ASCII) except those listed in the + // first column of the overrides table. + // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides + var regexAsciiWhitelist = /[\x01-\x7F]/g; + // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or + // code points listed in the first column of the overrides table on + // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides. + var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g; + + var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g; + var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'}; + + var regexEscape = /["&'<>`]/g; + var escapeMap = { + '"': '"', + '&': '&', + '\'': ''', + '<': '<', + // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the + // following is not strictly necessary unless it’s part of a tag or an + // unquoted attribute value. We’re only escaping it to support those + // situations, and for XML support. + '>': '>', + // In Internet Explorer ≤ 8, the backtick character can be used + // to break out of (un)quoted attribute values or HTML comments. + // See http://html5sec.org/#102, http://html5sec.org/#108, and + // http://html5sec.org/#133. + '`': '`' + }; + + var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/; + var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; + var regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g; + var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'}; + var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'}; + var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'}; + var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]; + + /*--------------------------------------------------------------------------*/ + + var stringFromCharCode = String.fromCharCode; + + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + var has = function(object, propertyName) { + return hasOwnProperty.call(object, propertyName); + }; + + var contains = function(array, value) { + var index = -1; + var length = array.length; + while (++index < length) { + if (array[index] == value) { + return true; + } + } + return false; + }; + + var merge = function(options, defaults) { + if (!options) { + return defaults; + } + var result = {}; + var key; + for (key in defaults) { + // A `hasOwnProperty` check is not needed here, since only recognized + // option names are used anyway. Any others are ignored. + result[key] = has(options, key) ? options[key] : defaults[key]; + } + return result; + }; + + // Modified version of `ucs2encode`; see https://mths.be/punycode. + var codePointToSymbol = function(codePoint, strict) { + var output = ''; + if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) { + // See issue #4: + // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is + // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD + // REPLACEMENT CHARACTER.” + if (strict) { + parseError('character reference outside the permissible Unicode range'); + } + return '\uFFFD'; + } + if (has(decodeMapNumeric, codePoint)) { + if (strict) { + parseError('disallowed character reference'); + } + return decodeMapNumeric[codePoint]; + } + if (strict && contains(invalidReferenceCodePoints, codePoint)) { + parseError('disallowed character reference'); + } + if (codePoint > 0xFFFF) { + codePoint -= 0x10000; + output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + output += stringFromCharCode(codePoint); + return output; + }; + + var hexEscape = function(codePoint) { + return '&#x' + codePoint.toString(16).toUpperCase() + ';'; + }; + + var decEscape = function(codePoint) { + return '&#' + codePoint + ';'; + }; + + var parseError = function(message) { + throw Error('Parse error: ' + message); + }; + + /*--------------------------------------------------------------------------*/ + + var encode = function(string, options) { + options = merge(options, encode.options); + var strict = options.strict; + if (strict && regexInvalidRawCodePoint.test(string)) { + parseError('forbidden code point'); + } + var encodeEverything = options.encodeEverything; + var useNamedReferences = options.useNamedReferences; + var allowUnsafeSymbols = options.allowUnsafeSymbols; + var escapeCodePoint = options.decimal ? decEscape : hexEscape; + + var escapeBmpSymbol = function(symbol) { + return escapeCodePoint(symbol.charCodeAt(0)); + }; + + if (encodeEverything) { + // Encode ASCII symbols. + string = string.replace(regexAsciiWhitelist, function(symbol) { + // Use named references if requested & possible. + if (useNamedReferences && has(encodeMap, symbol)) { + return '&' + encodeMap[symbol] + ';'; + } + return escapeBmpSymbol(symbol); + }); + // Shorten a few escapes that represent two symbols, of which at least one + // is within the ASCII range. + if (useNamedReferences) { + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒') + .replace(/fj/g, 'fj'); + } + // Encode non-ASCII symbols. + if (useNamedReferences) { + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } + // Note: any remaining non-ASCII symbols are handled outside of the `if`. + } else if (useNamedReferences) { + // Apply named character references. + // Encode `<>"'&` using named character references. + if (!allowUnsafeSymbols) { + string = string.replace(regexEscape, function(string) { + return '&' + encodeMap[string] + ';'; // no need to check `has()` here + }); + } + // Shorten escapes that represent two symbols, of which at least one is + // `<>"'&`. + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒'); + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } else if (!allowUnsafeSymbols) { + // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled + // using named character references. + string = string.replace(regexEscape, escapeBmpSymbol); + } + return string + // Encode astral symbols. + .replace(regexAstralSymbols, function($0) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + var high = $0.charCodeAt(0); + var low = $0.charCodeAt(1); + var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000; + return escapeCodePoint(codePoint); + }) + // Encode any remaining BMP symbols that are not printable ASCII symbols + // using a hexadecimal escape. + .replace(regexBmpWhitelist, escapeBmpSymbol); + }; + // Expose default options (so they can be overridden globally). + encode.options = { + 'allowUnsafeSymbols': false, + 'encodeEverything': false, + 'strict': false, + 'useNamedReferences': false, + 'decimal' : false + }; + + var decode = function(html, options) { + options = merge(options, decode.options); + var strict = options.strict; + if (strict && regexInvalidEntity.test(html)) { + parseError('malformed character reference'); + } + return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) { + var codePoint; + var semicolon; + var decDigits; + var hexDigits; + var reference; + var next; + + if ($1) { + reference = $1; + // Note: there is no need to check `has(decodeMap, reference)`. + return decodeMap[reference]; + } + + if ($2) { + // Decode named character references without trailing `;`, e.g. `&`. + // This is only a parse error if it gets converted to `&`, or if it is + // followed by `=` in an attribute context. + reference = $2; + next = $3; + if (next && options.isAttributeValue) { + if (strict && next == '=') { + parseError('`&` did not start a character reference'); + } + return $0; + } else { + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + // Note: there is no need to check `has(decodeMapLegacy, reference)`. + return decodeMapLegacy[reference] + (next || ''); + } + } + + if ($4) { + // Decode decimal escapes, e.g. `𝌆`. + decDigits = $4; + semicolon = $5; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + codePoint = parseInt(decDigits, 10); + return codePointToSymbol(codePoint, strict); + } + + if ($6) { + // Decode hexadecimal escapes, e.g. `𝌆`. + hexDigits = $6; + semicolon = $7; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + codePoint = parseInt(hexDigits, 16); + return codePointToSymbol(codePoint, strict); + } + + // If we’re still here, `if ($7)` is implied; it’s an ambiguous + // ampersand for sure. https://mths.be/notes/ambiguous-ampersands + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + return $0; + }); + }; + // Expose default options (so they can be overridden globally). + decode.options = { + 'isAttributeValue': false, + 'strict': false + }; + + var escape = function(string) { + return string.replace(regexEscape, function($0) { + // Note: there is no need to check `has(escapeMap, $0)` here. + return escapeMap[$0]; + }); + }; + + /*--------------------------------------------------------------------------*/ + + var he = { + 'version': '1.2.0', + 'encode': encode, + 'decode': decode, + 'escape': escape, + 'unescape': decode + }; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = he; + } else { // in Narwhal or RingoJS v0.7.0- + for (var key in he) { + has(he, key) && (freeExports[key] = he[key]); + } + } + } else { // in Rhino or a web browser + root.he = he; + } + + }(commonjsGlobal)); + }); + + /* */ + + /** + * Cross-platform code generation for component v-model + */ + function genComponentModel ( + el, + value, + modifiers + ) { + var ref = modifiers || {}; + var number = ref.number; + var trim = ref.trim; + + var baseValueExpression = '$$v'; + var valueExpression = baseValueExpression; + if (trim) { + valueExpression = + "(typeof " + baseValueExpression + " === 'string'" + + "? " + baseValueExpression + ".trim()" + + ": " + baseValueExpression + ")"; + } + if (number) { + valueExpression = "_n(" + valueExpression + ")"; + } + var assignment = genAssignmentCode(value, valueExpression); + + el.model = { + value: ("(" + value + ")"), + expression: JSON.stringify(value), + callback: ("function (" + baseValueExpression + ") {" + assignment + "}") + }; + } + + /** + * Cross-platform codegen helper for generating v-model value assignment code. + */ + function genAssignmentCode ( + value, + assignment + ) { + var res = parseModel(value); + if (res.key === null) { + return (value + "=" + assignment) + } else { + return ("$set(" + (res.exp) + ", " + (res.key) + ", " + assignment + ")") + } + } + + /** + * Parse a v-model expression into a base path and a final key segment. + * Handles both dot-path and possible square brackets. + * + * Possible cases: + * + * - test + * - test[key] + * - test[test1[key]] + * - test["a"][key] + * - xxx.test[a[a].test1[key]] + * - test.xxx.a["asa"][test1[key]] + * + */ + + var len, str, chr, index, expressionPos, expressionEndPos; + + + + function parseModel (val) { + // Fix https://github.com/vuejs/vue/pull/7730 + // allow v-model="obj.val " (trailing whitespace) + val = val.trim(); + len = val.length; + + if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) { + index = val.lastIndexOf('.'); + if (index > -1) { + return { + exp: val.slice(0, index), + key: '"' + val.slice(index + 1) + '"' + } + } else { + return { + exp: val, + key: null + } + } + } + + str = val; + index = expressionPos = expressionEndPos = 0; + + while (!eof()) { + chr = next(); + /* istanbul ignore if */ + if (isStringStart(chr)) { + parseString(chr); + } else if (chr === 0x5B) { + parseBracket(chr); + } + } + + return { + exp: val.slice(0, expressionPos), + key: val.slice(expressionPos + 1, expressionEndPos) + } + } + + function next () { + return str.charCodeAt(++index) + } + + function eof () { + return index >= len + } + + function isStringStart (chr) { + return chr === 0x22 || chr === 0x27 + } + + function parseBracket (chr) { + var inBracket = 1; + expressionPos = index; + while (!eof()) { + chr = next(); + if (isStringStart(chr)) { + parseString(chr); + continue + } + if (chr === 0x5B) { inBracket++; } + if (chr === 0x5D) { inBracket--; } + if (inBracket === 0) { + expressionEndPos = index; + break + } + } + } + + function parseString (chr) { + var stringQuote = chr; + while (!eof()) { + chr = next(); + if (chr === stringQuote) { + break + } + } + } + + /* */ + + var onRE = /^@|^v-on:/; + var dirRE = /^v-|^@|^:|^#/; + var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/; + var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/; + var stripParensRE = /^\(|\)$/g; + var dynamicArgRE = /^\[.*\]$/; + + var argRE = /:(.*)$/; + var bindRE = /^:|^\.|^v-bind:/; + var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g; + + var slotRE = /^v-slot(:|$)|^#/; + + var lineBreakRE = /[\r\n]/; + var whitespaceRE = /[ \f\t\r\n]+/g; + + var invalidAttributeRE = /[\s"'<>\/=]/; + + var decodeHTMLCached = cached(he.decode); + + var emptySlotScopeToken = "_empty_"; + + // configurable state + var warn$1; + var delimiters; + var transforms; + var preTransforms; + var postTransforms; + var platformIsPreTag; + var platformMustUseProp; + var platformGetTagNamespace; + var maybeComponent; + + function createASTElement ( + tag, + attrs, + parent + ) { + return { + type: 1, + tag: tag, + attrsList: attrs, + attrsMap: makeAttrsMap(attrs), + rawAttrsMap: {}, + parent: parent, + children: [] + } + } + + /** + * Convert HTML string to AST. + */ + function parse ( + template, + options + ) { + warn$1 = options.warn || baseWarn; + + platformIsPreTag = options.isPreTag || no; + platformMustUseProp = options.mustUseProp || no; + platformGetTagNamespace = options.getTagNamespace || no; + var isReservedTag = options.isReservedTag || no; + maybeComponent = function (el) { return !!( + el.component || + el.attrsMap[':is'] || + el.attrsMap['v-bind:is'] || + !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)) + ); }; + transforms = pluckModuleFunction(options.modules, 'transformNode'); + preTransforms = pluckModuleFunction(options.modules, 'preTransformNode'); + postTransforms = pluckModuleFunction(options.modules, 'postTransformNode'); + + delimiters = options.delimiters; + + var stack = []; + var preserveWhitespace = options.preserveWhitespace !== false; + var whitespaceOption = options.whitespace; + var root; + var currentParent; + var inVPre = false; + var inPre = false; + var warned = false; + + function warnOnce (msg, range) { + if (!warned) { + warned = true; + warn$1(msg, range); + } + } + + function closeElement (element) { + trimEndingWhitespace(element); + if (!inVPre && !element.processed) { + element = processElement(element, options); + } + // tree management + if (!stack.length && element !== root) { + // allow root elements with v-if, v-else-if and v-else + if (root.if && (element.elseif || element.else)) { + { + checkRootConstraints(element); + } + addIfCondition(root, { + exp: element.elseif, + block: element + }); + } else { + warnOnce( + "Component template should contain exactly one root element. " + + "If you are using v-if on multiple elements, " + + "use v-else-if to chain them instead.", + { start: element.start } + ); + } + } + if (currentParent && !element.forbidden) { + if (element.elseif || element.else) { + processIfConditions(element, currentParent); + } else { + if (element.slotScope) { + // scoped slot + // keep it in the children list so that v-else(-if) conditions can + // find it as the prev node. + var name = element.slotTarget || '"default"' + ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element; + } + currentParent.children.push(element); + element.parent = currentParent; + } + } + + // final children cleanup + // filter out scoped slots + element.children = element.children.filter(function (c) { return !(c).slotScope; }); + // remove trailing whitespace node again + trimEndingWhitespace(element); + + // check pre state + if (element.pre) { + inVPre = false; + } + if (platformIsPreTag(element.tag)) { + inPre = false; + } + // apply post-transforms + for (var i = 0; i < postTransforms.length; i++) { + postTransforms[i](element, options); + } + } + + function trimEndingWhitespace (el) { + // remove trailing whitespace node + if (!inPre) { + var lastNode; + while ( + (lastNode = el.children[el.children.length - 1]) && + lastNode.type === 3 && + lastNode.text === ' ' + ) { + el.children.pop(); + } + } + } + + function checkRootConstraints (el) { + if (el.tag === 'slot' || el.tag === 'template') { + warnOnce( + "Cannot use <" + (el.tag) + "> as component root element because it may " + + 'contain multiple nodes.', + { start: el.start } + ); + } + if (el.attrsMap.hasOwnProperty('v-for')) { + warnOnce( + 'Cannot use v-for on stateful component root element because ' + + 'it renders multiple elements.', + el.rawAttrsMap['v-for'] + ); + } + } + + parseHTML(template, { + warn: warn$1, + expectHTML: options.expectHTML, + isUnaryTag: options.isUnaryTag, + canBeLeftOpenTag: options.canBeLeftOpenTag, + shouldDecodeNewlines: options.shouldDecodeNewlines, + shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref, + shouldKeepComment: options.comments, + outputSourceRange: options.outputSourceRange, + start: function start (tag, attrs, unary, start$1, end) { + // check namespace. + // inherit parent ns if there is one + var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag); + + // handle IE svg bug + /* istanbul ignore if */ + if (isIE && ns === 'svg') { + attrs = guardIESVGBug(attrs); + } + + var element = createASTElement(tag, attrs, currentParent); + if (ns) { + element.ns = ns; + } + + { + if (options.outputSourceRange) { + element.start = start$1; + element.end = end; + element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) { + cumulated[attr.name] = attr; + return cumulated + }, {}); + } + attrs.forEach(function (attr) { + if (invalidAttributeRE.test(attr.name)) { + warn$1( + "Invalid dynamic argument expression: attribute names cannot contain " + + "spaces, quotes, <, >, / or =.", + { + start: attr.start + attr.name.indexOf("["), + end: attr.start + attr.name.length + } + ); + } + }); + } + + if (isForbiddenTag(element) && !isServerRendering()) { + element.forbidden = true; + warn$1( + 'Templates should only be responsible for mapping the state to the ' + + 'UI. Avoid placing tags with side-effects in your templates, such as ' + + "<" + tag + ">" + ', as they will not be parsed.', + { start: element.start } + ); + } + + // apply pre-transforms + for (var i = 0; i < preTransforms.length; i++) { + element = preTransforms[i](element, options) || element; + } + + if (!inVPre) { + processPre(element); + if (element.pre) { + inVPre = true; + } + } + if (platformIsPreTag(element.tag)) { + inPre = true; + } + if (inVPre) { + processRawAttrs(element); + } else if (!element.processed) { + // structural directives + processFor(element); + processIf(element); + processOnce(element); + } + + if (!root) { + root = element; + { + checkRootConstraints(root); + } + } + + if (!unary) { + currentParent = element; + stack.push(element); + } else { + closeElement(element); + } + }, + + end: function end (tag, start, end$1) { + var element = stack[stack.length - 1]; + // pop stack + stack.length -= 1; + currentParent = stack[stack.length - 1]; + if (options.outputSourceRange) { + element.end = end$1; + } + closeElement(element); + }, + + chars: function chars (text, start, end) { + if (!currentParent) { + { + if (text === template) { + warnOnce( + 'Component template requires a root element, rather than just text.', + { start: start } + ); + } else if ((text = text.trim())) { + warnOnce( + ("text \"" + text + "\" outside root element will be ignored."), + { start: start } + ); + } + } + return + } + // IE textarea placeholder bug + /* istanbul ignore if */ + if (isIE && + currentParent.tag === 'textarea' && + currentParent.attrsMap.placeholder === text + ) { + return + } + var children = currentParent.children; + if (inPre || text.trim()) { + text = isTextTag(currentParent) ? text : decodeHTMLCached(text); + } else if (!children.length) { + // remove the whitespace-only node right after an opening tag + text = ''; + } else if (whitespaceOption) { + if (whitespaceOption === 'condense') { + // in condense mode, remove the whitespace node if it contains + // line break, otherwise condense to a single space + text = lineBreakRE.test(text) ? '' : ' '; + } else { + text = ' '; + } + } else { + text = preserveWhitespace ? ' ' : ''; + } + if (text) { + if (!inPre && whitespaceOption === 'condense') { + // condense consecutive whitespaces into single space + text = text.replace(whitespaceRE, ' '); + } + var res; + var child; + if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) { + child = { + type: 2, + expression: res.expression, + tokens: res.tokens, + text: text + }; + } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') { + child = { + type: 3, + text: text + }; + } + if (child) { + if (options.outputSourceRange) { + child.start = start; + child.end = end; + } + children.push(child); + } + } + }, + comment: function comment (text, start, end) { + // adding anything as a sibling to the root node is forbidden + // comments should still be allowed, but ignored + if (currentParent) { + var child = { + type: 3, + text: text, + isComment: true + }; + if (options.outputSourceRange) { + child.start = start; + child.end = end; + } + currentParent.children.push(child); + } + } + }); + return root + } + + function processPre (el) { + if (getAndRemoveAttr(el, 'v-pre') != null) { + el.pre = true; + } + } + + function processRawAttrs (el) { + var list = el.attrsList; + var len = list.length; + if (len) { + var attrs = el.attrs = new Array(len); + for (var i = 0; i < len; i++) { + attrs[i] = { + name: list[i].name, + value: JSON.stringify(list[i].value) + }; + if (list[i].start != null) { + attrs[i].start = list[i].start; + attrs[i].end = list[i].end; + } + } + } else if (!el.pre) { + // non root node in pre blocks with no attributes + el.plain = true; + } + } + + function processElement ( + element, + options + ) { + processKey(element); + + // determine whether this is a plain element after + // removing structural attributes + element.plain = ( + !element.key && + !element.scopedSlots && + !element.attrsList.length + ); + + processRef(element); + processSlotContent(element); + processSlotOutlet(element); + processComponent(element); + for (var i = 0; i < transforms.length; i++) { + element = transforms[i](element, options) || element; + } + processAttrs(element); + return element + } + + function processKey (el) { + var exp = getBindingAttr(el, 'key'); + if (exp) { + { + if (el.tag === 'template') { + warn$1( + "