Commit 52257f061d95cf4a3b5a11e4a52c48774a6042be

Authored by vben
1 parent 50cf2d0b

refactor(tree): Refactor tree to support antv3.0

.eslintrc.js
@@ -62,6 +62,7 @@ module.exports = defineConfig({ @@ -62,6 +62,7 @@ module.exports = defineConfig({
62 'vue/singleline-html-element-content-newline': 'off', 62 'vue/singleline-html-element-content-newline': 'off',
63 'vue/attribute-hyphenation': 'off', 63 'vue/attribute-hyphenation': 'off',
64 'vue/require-default-prop': 'off', 64 'vue/require-default-prop': 'off',
  65 + 'vue/require-explicit-emits': 'off',
65 'vue/html-self-closing': [ 66 'vue/html-self-closing': [
66 'error', 67 'error',
67 { 68 {
@@ -74,6 +75,6 @@ module.exports = defineConfig({ @@ -74,6 +75,6 @@ module.exports = defineConfig({
74 math: 'always', 75 math: 'always',
75 }, 76 },
76 ], 77 ],
77 - 'vue/multi-word-component-names': 'off' 78 + 'vue/multi-word-component-names': 'off',
78 }, 79 },
79 }); 80 });
.vscode/settings.json
@@ -132,6 +132,7 @@ @@ -132,6 +132,7 @@
132 "brotli", 132 "brotli",
133 "tailwindcss", 133 "tailwindcss",
134 "sider", 134 "sider",
135 - "pnpm" 135 + "pnpm",
  136 + "antd"
136 ] 137 ]
137 } 138 }
build/vite/plugin/hmr.ts
@@ -9,17 +9,17 @@ import type { Plugin } from 'vite'; @@ -9,17 +9,17 @@ import type { Plugin } from 'vite';
9 export function configHmrPlugin(): Plugin { 9 export function configHmrPlugin(): Plugin {
10 return { 10 return {
11 name: 'singleHMR', 11 name: 'singleHMR',
12 - handleHotUpdate({ modules, file }) {  
13 - if (file.match(/xml$/)) return []; 12 + // handleHotUpdate({ modules, file }) {
  13 + // if (file.match(/xml$/)) return [];
14 14
15 - modules.forEach((m) => {  
16 - if (!m.url.match(/\.(css|less)/)) {  
17 - m.importedModules = new Set();  
18 - m.importers = new Set();  
19 - }  
20 - }); 15 + // modules.forEach((m) => {
  16 + // if (!m.url.match(/\.(css|less)/)) {
  17 + // m.importedModules = new Set();
  18 + // m.importers = new Set();
  19 + // }
  20 + // });
21 21
22 - return modules;  
23 - }, 22 + // return modules;
  23 + // },
24 }; 24 };
25 } 25 }
build/vite/plugin/styleImport.ts
@@ -4,10 +4,10 @@ @@ -4,10 +4,10 @@
4 */ 4 */
5 import styleImport from 'vite-plugin-style-import'; 5 import styleImport from 'vite-plugin-style-import';
6 6
7 -export function configStyleImportPlugin(isBuild: boolean) {  
8 - if (!isBuild) {  
9 - return [];  
10 - } 7 +export function configStyleImportPlugin(_isBuild: boolean) {
  8 + // if (!isBuild) {
  9 + // return [];
  10 + // }
11 const styleImportPlugin = styleImport({ 11 const styleImportPlugin = styleImport({
12 libs: [ 12 libs: [
13 { 13 {
@@ -19,6 +19,7 @@ export function configStyleImportPlugin(isBuild: boolean) { @@ -19,6 +19,7 @@ export function configStyleImportPlugin(isBuild: boolean) {
19 'anchor-link', 19 'anchor-link',
20 'sub-menu', 20 'sub-menu',
21 'menu-item', 21 'menu-item',
  22 + 'menu-divider',
22 'menu-item-group', 23 'menu-item-group',
23 'breadcrumb-item', 24 'breadcrumb-item',
24 'breadcrumb-separator', 25 'breadcrumb-separator',
package.json
@@ -72,7 +72,7 @@ @@ -72,7 +72,7 @@
72 "devDependencies": { 72 "devDependencies": {
73 "@commitlint/cli": "^15.0.0", 73 "@commitlint/cli": "^15.0.0",
74 "@commitlint/config-conventional": "^15.0.0", 74 "@commitlint/config-conventional": "^15.0.0",
75 - "@iconify/json": "^2.0.2", 75 + "@iconify/json": "^2.0.3",
76 "@purge-icons/generated": "^0.7.0", 76 "@purge-icons/generated": "^0.7.0",
77 "@types/codemirror": "^5.60.5", 77 "@types/codemirror": "^5.60.5",
78 "@types/crypto-js": "^4.0.2", 78 "@types/crypto-js": "^4.0.2",
@@ -110,7 +110,7 @@ @@ -110,7 +110,7 @@
110 "fs-extra": "^10.0.0", 110 "fs-extra": "^10.0.0",
111 "husky": "^7.0.4", 111 "husky": "^7.0.4",
112 "inquirer": "^8.2.0", 112 "inquirer": "^8.2.0",
113 - "jest": "^27.3.1", 113 + "jest": "^27.4.0",
114 "less": "^4.1.2", 114 "less": "^4.1.2",
115 "lint-staged": "12.1.2", 115 "lint-staged": "12.1.2",
116 "npm-run-all": "^4.1.5", 116 "npm-run-all": "^4.1.5",
@@ -135,14 +135,14 @@ @@ -135,14 +135,14 @@
135 "vite-plugin-imagemin": "^0.4.6", 135 "vite-plugin-imagemin": "^0.4.6",
136 "vite-plugin-mock": "^2.9.6", 136 "vite-plugin-mock": "^2.9.6",
137 "vite-plugin-purge-icons": "^0.7.0", 137 "vite-plugin-purge-icons": "^0.7.0",
138 - "vite-plugin-pwa": "^0.11.7", 138 + "vite-plugin-pwa": "^0.11.8",
139 "vite-plugin-style-import": "^1.4.0", 139 "vite-plugin-style-import": "^1.4.0",
140 "vite-plugin-svg-icons": "^1.0.5", 140 "vite-plugin-svg-icons": "^1.0.5",
141 "vite-plugin-theme": "^0.8.1", 141 "vite-plugin-theme": "^0.8.1",
142 "vite-plugin-vue-setup-extend": "^0.1.0", 142 "vite-plugin-vue-setup-extend": "^0.1.0",
143 "vite-plugin-windicss": "^1.5.3", 143 "vite-plugin-windicss": "^1.5.3",
144 "vue-eslint-parser": "^8.0.1", 144 "vue-eslint-parser": "^8.0.1",
145 - "vue-tsc": "^0.29.6" 145 + "vue-tsc": "^0.29.7"
146 }, 146 },
147 "resolutions": { 147 "resolutions": {
148 "//": "Used to install imagemin dependencies, because imagemin may not be installed in China. If it is abroad, you can delete it", 148 "//": "Used to install imagemin dependencies, because imagemin may not be installed in China. If it is abroad, you can delete it",
pnpm-lock.yaml
@@ -12,7 +12,7 @@ specifiers: @@ -12,7 +12,7 @@ specifiers:
12 '@commitlint/cli': ^15.0.0 12 '@commitlint/cli': ^15.0.0
13 '@commitlint/config-conventional': ^15.0.0 13 '@commitlint/config-conventional': ^15.0.0
14 '@iconify/iconify': ^2.1.0 14 '@iconify/iconify': ^2.1.0
15 - '@iconify/json': ^2.0.2 15 + '@iconify/json': ^2.0.3
16 '@logicflow/core': ^0.7.10 16 '@logicflow/core': ^0.7.10
17 '@logicflow/extension': ^0.7.10 17 '@logicflow/extension': ^0.7.10
18 '@purge-icons/generated': ^0.7.0 18 '@purge-icons/generated': ^0.7.0
@@ -63,7 +63,7 @@ specifiers: @@ -63,7 +63,7 @@ specifiers:
63 husky: ^7.0.4 63 husky: ^7.0.4
64 inquirer: ^8.2.0 64 inquirer: ^8.2.0
65 intro.js: ^4.3.0 65 intro.js: ^4.3.0
66 - jest: ^27.3.1 66 + jest: ^27.4.0
67 less: ^4.1.2 67 less: ^4.1.2
68 lint-staged: 12.1.2 68 lint-staged: 12.1.2
69 lodash-es: ^4.17.21 69 lodash-es: ^4.17.21
@@ -101,7 +101,7 @@ specifiers: @@ -101,7 +101,7 @@ specifiers:
101 vite-plugin-imagemin: ^0.4.6 101 vite-plugin-imagemin: ^0.4.6
102 vite-plugin-mock: ^2.9.6 102 vite-plugin-mock: ^2.9.6
103 vite-plugin-purge-icons: ^0.7.0 103 vite-plugin-purge-icons: ^0.7.0
104 - vite-plugin-pwa: ^0.11.7 104 + vite-plugin-pwa: ^0.11.8
105 vite-plugin-style-import: ^1.4.0 105 vite-plugin-style-import: ^1.4.0
106 vite-plugin-svg-icons: ^1.0.5 106 vite-plugin-svg-icons: ^1.0.5
107 vite-plugin-theme: ^0.8.1 107 vite-plugin-theme: ^0.8.1
@@ -112,7 +112,7 @@ specifiers: @@ -112,7 +112,7 @@ specifiers:
112 vue-i18n: ^9.1.9 112 vue-i18n: ^9.1.9
113 vue-json-pretty: ^2.0.6 113 vue-json-pretty: ^2.0.6
114 vue-router: ^4.0.12 114 vue-router: ^4.0.12
115 - vue-tsc: ^0.29.6 115 + vue-tsc: ^0.29.7
116 vue-types: ^4.1.1 116 vue-types: ^4.1.1
117 xlsx: ^0.17.4 117 xlsx: ^0.17.4
118 118
@@ -156,7 +156,7 @@ dependencies: @@ -156,7 +156,7 @@ dependencies:
156 devDependencies: 156 devDependencies:
157 '@commitlint/cli': 15.0.0 157 '@commitlint/cli': 15.0.0
158 '@commitlint/config-conventional': 15.0.0 158 '@commitlint/config-conventional': 15.0.0
159 - '@iconify/json': 2.0.2 159 + '@iconify/json': 2.0.3
160 '@purge-icons/generated': 0.7.0 160 '@purge-icons/generated': 0.7.0
161 '@types/codemirror': 5.60.5 161 '@types/codemirror': 5.60.5
162 '@types/crypto-js': 4.0.2 162 '@types/crypto-js': 4.0.2
@@ -187,14 +187,14 @@ devDependencies: @@ -187,14 +187,14 @@ devDependencies:
187 eslint: 8.3.0 187 eslint: 8.3.0
188 eslint-config-prettier: 8.3.0_eslint@8.3.0 188 eslint-config-prettier: 8.3.0_eslint@8.3.0
189 eslint-define-config: 1.2.0 189 eslint-define-config: 1.2.0
190 - eslint-plugin-jest: 25.3.0_4e52e098c69dc02e5d836ed593524821 190 + eslint-plugin-jest: 25.3.0_4a9aadc9705c463d5cb0fc674dd30934
191 eslint-plugin-prettier: 4.0.0_d8c6a2a4ba8850181fffb74d8e835cec 191 eslint-plugin-prettier: 4.0.0_d8c6a2a4ba8850181fffb74d8e835cec
192 eslint-plugin-vue: 8.1.1_eslint@8.3.0 192 eslint-plugin-vue: 8.1.1_eslint@8.3.0
193 esno: 0.12.1_typescript@4.5.2 193 esno: 0.12.1_typescript@4.5.2
194 fs-extra: 10.0.0 194 fs-extra: 10.0.0
195 husky: 7.0.4 195 husky: 7.0.4
196 inquirer: 8.2.0 196 inquirer: 8.2.0
197 - jest: 27.3.1_ts-node@10.4.0 197 + jest: 27.4.0_ts-node@10.4.0
198 less: 4.1.2 198 less: 4.1.2
199 lint-staged: 12.1.2 199 lint-staged: 12.1.2
200 npm-run-all: 4.1.5 200 npm-run-all: 4.1.5
@@ -210,7 +210,7 @@ devDependencies: @@ -210,7 +210,7 @@ devDependencies:
210 stylelint-config-recommended: 6.0.0_stylelint@14.1.0 210 stylelint-config-recommended: 6.0.0_stylelint@14.1.0
211 stylelint-config-standard: 24.0.0_stylelint@14.1.0 211 stylelint-config-standard: 24.0.0_stylelint@14.1.0
212 stylelint-order: 5.0.0_stylelint@14.1.0 212 stylelint-order: 5.0.0_stylelint@14.1.0
213 - ts-jest: 27.0.7_7e2a439bb7b53c38ff0c1a3c5e04c2c5 213 + ts-jest: 27.0.7_bfad92f4d8caf69d57ace222bbbf1afc
214 ts-node: 10.4.0_36929cccfdb926da0bb85cc291f27124 214 ts-node: 10.4.0_36929cccfdb926da0bb85cc291f27124
215 typescript: 4.5.2 215 typescript: 4.5.2
216 vite: 2.7.0-beta.9_less@4.1.2 216 vite: 2.7.0-beta.9_less@4.1.2
@@ -219,14 +219,14 @@ devDependencies: @@ -219,14 +219,14 @@ devDependencies:
219 vite-plugin-imagemin: 0.4.6_vite@2.7.0-beta.9 219 vite-plugin-imagemin: 0.4.6_vite@2.7.0-beta.9
220 vite-plugin-mock: 2.9.6_mockjs@1.1.0+vite@2.7.0-beta.9 220 vite-plugin-mock: 2.9.6_mockjs@1.1.0+vite@2.7.0-beta.9
221 vite-plugin-purge-icons: 0.7.0_vite@2.7.0-beta.9 221 vite-plugin-purge-icons: 0.7.0_vite@2.7.0-beta.9
222 - vite-plugin-pwa: 0.11.7_vite@2.7.0-beta.9 222 + vite-plugin-pwa: 0.11.8_vite@2.7.0-beta.9
223 vite-plugin-style-import: 1.4.0_vite@2.7.0-beta.9 223 vite-plugin-style-import: 1.4.0_vite@2.7.0-beta.9
224 vite-plugin-svg-icons: 1.0.5_vite@2.7.0-beta.9 224 vite-plugin-svg-icons: 1.0.5_vite@2.7.0-beta.9
225 vite-plugin-theme: 0.8.1_vite@2.7.0-beta.9 225 vite-plugin-theme: 0.8.1_vite@2.7.0-beta.9
226 vite-plugin-vue-setup-extend: 0.1.0_vite@2.7.0-beta.9 226 vite-plugin-vue-setup-extend: 0.1.0_vite@2.7.0-beta.9
227 vite-plugin-windicss: 1.5.3_vite@2.7.0-beta.9 227 vite-plugin-windicss: 1.5.3_vite@2.7.0-beta.9
228 vue-eslint-parser: 8.0.1_eslint@8.3.0 228 vue-eslint-parser: 8.0.1_eslint@8.3.0
229 - vue-tsc: 0.29.6_typescript@4.5.2 229 + vue-tsc: 0.29.7_typescript@4.5.2
230 230
231 packages: 231 packages:
232 232
@@ -386,7 +386,7 @@ packages: @@ -386,7 +386,7 @@ packages:
386 '@babel/helper-module-imports': 7.16.0 386 '@babel/helper-module-imports': 7.16.0
387 '@babel/helper-plugin-utils': 7.14.5 387 '@babel/helper-plugin-utils': 7.14.5
388 '@babel/traverse': 7.16.3 388 '@babel/traverse': 7.16.3
389 - debug: 4.3.2 389 + debug: 4.3.3
390 lodash.debounce: 4.0.8 390 lodash.debounce: 4.0.8
391 resolve: 1.20.0 391 resolve: 1.20.0
392 semver: 6.3.0 392 semver: 6.3.0
@@ -1685,8 +1685,8 @@ packages: @@ -1685,8 +1685,8 @@ packages:
1685 dependencies: 1685 dependencies:
1686 cross-fetch: 3.1.4 1686 cross-fetch: 3.1.4
1687 1687
1688 - /@iconify/json/2.0.2:  
1689 - resolution: {integrity: sha512-LcGJCnYcnTBrbLEjC8ynJ9T2Pj5C3nt6dKksZAb+kCYD1kQReDen/Pjvo5ggFE1JkwMrBrzbjojR87YQGnh12g==} 1688 + /@iconify/json/2.0.3:
  1689 + resolution: {integrity: sha512-aAbuycbHyjaepxsj+Vp2u6AO9VIfbFiHQ1NO8lYdsH2IYCauXWeVSe+rBkkIntxGcc0dgYL/+jAX0s+R3oCNvQ==}
1690 dependencies: 1690 dependencies:
1691 '@iconify/types': 1.0.12 1691 '@iconify/types': 1.0.12
1692 pathe: 0.0.2 1692 pathe: 0.0.2
@@ -1768,20 +1768,20 @@ packages: @@ -1768,20 +1768,20 @@ packages:
1768 engines: {node: '>=8'} 1768 engines: {node: '>=8'}
1769 dev: true 1769 dev: true
1770 1770
1771 - /@jest/console/27.3.1:  
1772 - resolution: {integrity: sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==} 1771 + /@jest/console/27.4.0:
  1772 + resolution: {integrity: sha512-2m7Xwcd1zTWtai5DCl+b0TAfoH8p5uqUoKmfzJCAfCrIwoJAf3xB+4nx3eKEGoyNfg5oavrh3gjbZ1n5z5eh4Q==}
1773 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1773 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
1774 dependencies: 1774 dependencies:
1775 - '@jest/types': 27.2.5 1775 + '@jest/types': 27.4.0
1776 '@types/node': 16.11.10 1776 '@types/node': 16.11.10
1777 chalk: 4.1.2 1777 chalk: 4.1.2
1778 - jest-message-util: 27.3.1  
1779 - jest-util: 27.3.1 1778 + jest-message-util: 27.4.0
  1779 + jest-util: 27.4.0
1780 slash: 3.0.0 1780 slash: 3.0.0
1781 dev: true 1781 dev: true
1782 1782
1783 - /@jest/core/27.3.1_ts-node@10.4.0:  
1784 - resolution: {integrity: sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==} 1783 + /@jest/core/27.4.0_ts-node@10.4.0:
  1784 + resolution: {integrity: sha512-P6eoNIbE0OeenvCxrwdj0jRgeZg8r4eXNCS2zMgAS8EADzdp03mKe7TNwCsEPr460QIYCBwJo4W8wqai3UPXOA==}
1785 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1785 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
1786 peerDependencies: 1786 peerDependencies:
1787 node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1787 node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
@@ -1789,30 +1789,30 @@ packages: @@ -1789,30 +1789,30 @@ packages:
1789 node-notifier: 1789 node-notifier:
1790 optional: true 1790 optional: true
1791 dependencies: 1791 dependencies:
1792 - '@jest/console': 27.3.1  
1793 - '@jest/reporters': 27.3.1  
1794 - '@jest/test-result': 27.3.1  
1795 - '@jest/transform': 27.3.1  
1796 - '@jest/types': 27.2.5 1792 + '@jest/console': 27.4.0
  1793 + '@jest/reporters': 27.4.0
  1794 + '@jest/test-result': 27.4.0
  1795 + '@jest/transform': 27.4.0
  1796 + '@jest/types': 27.4.0
1797 '@types/node': 16.11.10 1797 '@types/node': 16.11.10
1798 ansi-escapes: 4.3.2 1798 ansi-escapes: 4.3.2
1799 chalk: 4.1.2 1799 chalk: 4.1.2
1800 emittery: 0.8.1 1800 emittery: 0.8.1
1801 exit: 0.1.2 1801 exit: 0.1.2
1802 graceful-fs: 4.2.8 1802 graceful-fs: 4.2.8
1803 - jest-changed-files: 27.3.0  
1804 - jest-config: 27.3.1_ts-node@10.4.0  
1805 - jest-haste-map: 27.3.1  
1806 - jest-message-util: 27.3.1  
1807 - jest-regex-util: 27.0.6  
1808 - jest-resolve: 27.3.1  
1809 - jest-resolve-dependencies: 27.3.1  
1810 - jest-runner: 27.3.1  
1811 - jest-runtime: 27.3.1  
1812 - jest-snapshot: 27.3.1  
1813 - jest-util: 27.3.1  
1814 - jest-validate: 27.3.1  
1815 - jest-watcher: 27.3.1 1803 + jest-changed-files: 27.4.0
  1804 + jest-config: 27.4.0_ts-node@10.4.0
  1805 + jest-haste-map: 27.4.0
  1806 + jest-message-util: 27.4.0
  1807 + jest-regex-util: 27.4.0
  1808 + jest-resolve: 27.4.0
  1809 + jest-resolve-dependencies: 27.4.0
  1810 + jest-runner: 27.4.0
  1811 + jest-runtime: 27.4.0
  1812 + jest-snapshot: 27.4.0
  1813 + jest-util: 27.4.0
  1814 + jest-validate: 27.4.0
  1815 + jest-watcher: 27.4.0
1816 micromatch: 4.0.4 1816 micromatch: 4.0.4
1817 rimraf: 3.0.2 1817 rimraf: 3.0.2
1818 slash: 3.0.0 1818 slash: 3.0.0
@@ -1825,39 +1825,39 @@ packages: @@ -1825,39 +1825,39 @@ packages:
1825 - utf-8-validate 1825 - utf-8-validate
1826 dev: true 1826 dev: true
1827 1827
1828 - /@jest/environment/27.3.1:  
1829 - resolution: {integrity: sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==} 1828 + /@jest/environment/27.4.0:
  1829 + resolution: {integrity: sha512-7HJ1c6lVNuxrj9PT5AD4yVDDqFt9B0lLsshxZJXShL/LOkLnBO4MoZMH3w1lXQJY3zxk3/l1yg2j7uRKpxF4yw==}
1830 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1830 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
1831 dependencies: 1831 dependencies:
1832 - '@jest/fake-timers': 27.3.1  
1833 - '@jest/types': 27.2.5 1832 + '@jest/fake-timers': 27.4.0
  1833 + '@jest/types': 27.4.0
1834 '@types/node': 16.11.10 1834 '@types/node': 16.11.10
1835 - jest-mock: 27.3.0 1835 + jest-mock: 27.4.0
1836 dev: true 1836 dev: true
1837 1837
1838 - /@jest/fake-timers/27.3.1:  
1839 - resolution: {integrity: sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==} 1838 + /@jest/fake-timers/27.4.0:
  1839 + resolution: {integrity: sha512-oyMxDKlj/ThRms9eS0xFkxmUvjJ8lHsNS4gNErDRFSruTER1/OQi2L5N0sJav+/AcBoY/Pa313CpB6RgdDacGA==}
1840 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1840 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
1841 dependencies: 1841 dependencies:
1842 - '@jest/types': 27.2.5 1842 + '@jest/types': 27.4.0
1843 '@sinonjs/fake-timers': 8.1.0 1843 '@sinonjs/fake-timers': 8.1.0
1844 '@types/node': 16.11.10 1844 '@types/node': 16.11.10
1845 - jest-message-util: 27.3.1  
1846 - jest-mock: 27.3.0  
1847 - jest-util: 27.3.1 1845 + jest-message-util: 27.4.0
  1846 + jest-mock: 27.4.0
  1847 + jest-util: 27.4.0
1848 dev: true 1848 dev: true
1849 1849
1850 - /@jest/globals/27.3.1:  
1851 - resolution: {integrity: sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==} 1850 + /@jest/globals/27.4.0:
  1851 + resolution: {integrity: sha512-jIkd2RSV18wvOqFx5climVkwONuxqNKD8jHMvIumj8+E0qqWqymBcWymidjbxmJ3L3Zr60l0lAJGKw0BstREeQ==}
1852 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1852 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
1853 dependencies: 1853 dependencies:
1854 - '@jest/environment': 27.3.1  
1855 - '@jest/types': 27.2.5  
1856 - expect: 27.3.1 1854 + '@jest/environment': 27.4.0
  1855 + '@jest/types': 27.4.0
  1856 + expect: 27.4.0
1857 dev: true 1857 dev: true
1858 1858
1859 - /@jest/reporters/27.3.1:  
1860 - resolution: {integrity: sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==} 1859 + /@jest/reporters/27.4.0:
  1860 + resolution: {integrity: sha512-QqIdI9WBH5tBwSHZ81FEZkt3h8fvw+zdV0YQrUtdEbJEBGV/AHgRsIP23sdD/ybLfRFpjZJEyWT+7dM4mxnPYQ==}
1861 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1861 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
1862 peerDependencies: 1862 peerDependencies:
1863 node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1863 node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
@@ -1866,10 +1866,10 @@ packages: @@ -1866,10 +1866,10 @@ packages:
1866 optional: true 1866 optional: true
1867 dependencies: 1867 dependencies:
1868 '@bcoe/v8-coverage': 0.2.3 1868 '@bcoe/v8-coverage': 0.2.3
1869 - '@jest/console': 27.3.1  
1870 - '@jest/test-result': 27.3.1  
1871 - '@jest/transform': 27.3.1  
1872 - '@jest/types': 27.2.5 1869 + '@jest/console': 27.4.0
  1870 + '@jest/test-result': 27.4.0
  1871 + '@jest/transform': 27.4.0
  1872 + '@jest/types': 27.4.0
1873 '@types/node': 16.11.10 1873 '@types/node': 16.11.10
1874 chalk: 4.1.2 1874 chalk: 4.1.2
1875 collect-v8-coverage: 1.0.1 1875 collect-v8-coverage: 1.0.1
@@ -1881,10 +1881,10 @@ packages: @@ -1881,10 +1881,10 @@ packages:
1881 istanbul-lib-report: 3.0.0 1881 istanbul-lib-report: 3.0.0
1882 istanbul-lib-source-maps: 4.0.1 1882 istanbul-lib-source-maps: 4.0.1
1883 istanbul-reports: 3.0.5 1883 istanbul-reports: 3.0.5
1884 - jest-haste-map: 27.3.1  
1885 - jest-resolve: 27.3.1  
1886 - jest-util: 27.3.1  
1887 - jest-worker: 27.3.1 1884 + jest-haste-map: 27.4.0
  1885 + jest-resolve: 27.4.0
  1886 + jest-util: 27.4.0
  1887 + jest-worker: 27.4.0
1888 slash: 3.0.0 1888 slash: 3.0.0
1889 source-map: 0.6.1 1889 source-map: 0.6.1
1890 string-length: 4.0.2 1890 string-length: 4.0.2
@@ -1894,8 +1894,8 @@ packages: @@ -1894,8 +1894,8 @@ packages:
1894 - supports-color 1894 - supports-color
1895 dev: true 1895 dev: true
1896 1896
1897 - /@jest/source-map/27.0.6:  
1898 - resolution: {integrity: sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==} 1897 + /@jest/source-map/27.4.0:
  1898 + resolution: {integrity: sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==}
1899 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1899 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
1900 dependencies: 1900 dependencies:
1901 callsites: 3.1.0 1901 callsites: 3.1.0
@@ -1903,42 +1903,42 @@ packages: @@ -1903,42 +1903,42 @@ packages:
1903 source-map: 0.6.1 1903 source-map: 0.6.1
1904 dev: true 1904 dev: true
1905 1905
1906 - /@jest/test-result/27.3.1:  
1907 - resolution: {integrity: sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==} 1906 + /@jest/test-result/27.4.0:
  1907 + resolution: {integrity: sha512-/RiwMUC9pKK1E85CEflPvb4uE4Zo9JK2Iq3RbkbBoj4FkEASb/Zsqta8WGot2J1GxOk3rqdW513tfSDYQQJVpA==}
1908 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1908 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
1909 dependencies: 1909 dependencies:
1910 - '@jest/console': 27.3.1  
1911 - '@jest/types': 27.2.5 1910 + '@jest/console': 27.4.0
  1911 + '@jest/types': 27.4.0
1912 '@types/istanbul-lib-coverage': 2.0.3 1912 '@types/istanbul-lib-coverage': 2.0.3
1913 collect-v8-coverage: 1.0.1 1913 collect-v8-coverage: 1.0.1
1914 dev: true 1914 dev: true
1915 1915
1916 - /@jest/test-sequencer/27.3.1:  
1917 - resolution: {integrity: sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==} 1916 + /@jest/test-sequencer/27.4.0:
  1917 + resolution: {integrity: sha512-yKu+sjFgelc5zUf0kcbbsO86qV0NIMPyYFFRaWTaEsq+j7aueX/Zev+NcX+bm7BCwCMWeK7V5AUE6HUOblylHA==}
1918 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1918 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
1919 dependencies: 1919 dependencies:
1920 - '@jest/test-result': 27.3.1 1920 + '@jest/test-result': 27.4.0
1921 graceful-fs: 4.2.8 1921 graceful-fs: 4.2.8
1922 - jest-haste-map: 27.3.1  
1923 - jest-runtime: 27.3.1 1922 + jest-haste-map: 27.4.0
  1923 + jest-runtime: 27.4.0
1924 transitivePeerDependencies: 1924 transitivePeerDependencies:
1925 - supports-color 1925 - supports-color
1926 dev: true 1926 dev: true
1927 1927
1928 - /@jest/transform/27.3.1:  
1929 - resolution: {integrity: sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==} 1928 + /@jest/transform/27.4.0:
  1929 + resolution: {integrity: sha512-/8Cb8kEoCtXN/Co5lvv+jG0zv4Uj3ruIvffYUzxNGRGmM7qqaHtOBZ3WbH0T1Nvjya5utTA4YtwbInZVS6Zt9A==}
1930 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1930 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
1931 dependencies: 1931 dependencies:
1932 '@babel/core': 7.16.0 1932 '@babel/core': 7.16.0
1933 - '@jest/types': 27.2.5 1933 + '@jest/types': 27.4.0
1934 babel-plugin-istanbul: 6.1.1 1934 babel-plugin-istanbul: 6.1.1
1935 chalk: 4.1.2 1935 chalk: 4.1.2
1936 convert-source-map: 1.8.0 1936 convert-source-map: 1.8.0
1937 fast-json-stable-stringify: 2.1.0 1937 fast-json-stable-stringify: 2.1.0
1938 graceful-fs: 4.2.8 1938 graceful-fs: 4.2.8
1939 - jest-haste-map: 27.3.1  
1940 - jest-regex-util: 27.0.6  
1941 - jest-util: 27.3.1 1939 + jest-haste-map: 27.4.0
  1940 + jest-regex-util: 27.4.0
  1941 + jest-util: 27.4.0
1942 micromatch: 4.0.4 1942 micromatch: 4.0.4
1943 pirates: 4.0.1 1943 pirates: 4.0.1
1944 slash: 3.0.0 1944 slash: 3.0.0
@@ -1959,6 +1959,17 @@ packages: @@ -1959,6 +1959,17 @@ packages:
1959 chalk: 4.1.2 1959 chalk: 4.1.2
1960 dev: true 1960 dev: true
1961 1961
  1962 + /@jest/types/27.4.0:
  1963 + resolution: {integrity: sha512-jIsLdASXMf8GS7P7oGFGwobNse/6Ewq3GBPHoo0i6XRmja+NrUoDqJm4a1ffF2bHGleKJizxokcp1sCqSktP3g==}
  1964 + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
  1965 + dependencies:
  1966 + '@types/istanbul-lib-coverage': 2.0.3
  1967 + '@types/istanbul-reports': 3.0.1
  1968 + '@types/node': 16.11.10
  1969 + '@types/yargs': 16.0.4
  1970 + chalk: 4.1.2
  1971 + dev: true
  1972 +
1962 /@logicflow/core/0.7.10: 1973 /@logicflow/core/0.7.10:
1963 resolution: {integrity: sha512-aZi/dH6aAsfvTrMgwcfPMWNRdDrpasOTr1E49DRlaMwKzUlczF2up4tnJooX/5O6oAQ/jiJ/pIzAmmWy3nwg4w==} 1974 resolution: {integrity: sha512-aZi/dH6aAsfvTrMgwcfPMWNRdDrpasOTr1E49DRlaMwKzUlczF2up4tnJooX/5O6oAQ/jiJ/pIzAmmWy3nwg4w==}
1964 dependencies: 1975 dependencies:
@@ -2303,6 +2314,14 @@ packages: @@ -2303,6 +2314,14 @@ packages:
2303 pretty-format: 27.3.1 2314 pretty-format: 27.3.1
2304 dev: true 2315 dev: true
2305 2316
  2317 + /@types/jsdom/16.2.13:
  2318 + resolution: {integrity: sha512-8JQCjdeAidptSsOcRWk2iTm9wCcwn9l+kRG6k5bzUacrnm1ezV4forq0kWjUih/tumAeoG+OspOvQEbbRucBTw==}
  2319 + dependencies:
  2320 + '@types/node': 16.11.10
  2321 + '@types/parse5': 6.0.2
  2322 + '@types/tough-cookie': 4.0.1
  2323 + dev: true
  2324 +
2306 /@types/json-schema/7.0.9: 2325 /@types/json-schema/7.0.9:
2307 resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==} 2326 resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==}
2308 dev: true 2327 dev: true
@@ -2352,6 +2371,10 @@ packages: @@ -2352,6 +2371,10 @@ packages:
2352 resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} 2371 resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
2353 dev: true 2372 dev: true
2354 2373
  2374 + /@types/parse5/6.0.2:
  2375 + resolution: {integrity: sha512-+hQX+WyJAOne7Fh3zF5CxPemILIbuhNcqHHodzK9caYOLnC8pD5efmPleRnw0z++LfKUC/sVNMwk0Gap+B0baA==}
  2376 + dev: true
  2377 +
2355 /@types/prettier/2.4.2: 2378 /@types/prettier/2.4.2:
2356 resolution: {integrity: sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==} 2379 resolution: {integrity: sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==}
2357 dev: true 2380 dev: true
@@ -2414,6 +2437,10 @@ packages: @@ -2414,6 +2437,10 @@ packages:
2414 resolution: {integrity: sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==} 2437 resolution: {integrity: sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==}
2415 dev: true 2438 dev: true
2416 2439
  2440 + /@types/tough-cookie/4.0.1:
  2441 + resolution: {integrity: sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==}
  2442 + dev: true
  2443 +
2417 /@types/trusted-types/2.0.2: 2444 /@types/trusted-types/2.0.2:
2418 resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} 2445 resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==}
2419 dev: true 2446 dev: true
@@ -2571,15 +2598,15 @@ packages: @@ -2571,15 +2598,15 @@ packages:
2571 vite: 2.7.0-beta.9_less@4.1.2 2598 vite: 2.7.0-beta.9_less@4.1.2
2572 dev: true 2599 dev: true
2573 2600
2574 - /@volar/code-gen/0.29.6:  
2575 - resolution: {integrity: sha512-qF2YHUj1Wk8X9uozdKfVnOImXpoduqWp8qkmrXBKO1nxZLoou/7Y2VWJhDVm4uDkKpsMW1s7ttz+a2/hDRKf4A==} 2601 + /@volar/code-gen/0.29.7:
  2602 + resolution: {integrity: sha512-PLcTp/37NMKA/urAkKCy+/oOCwNOsw0ywsz3Wc31c94bX6BAcMBHha5F3NPPY8U4CWuxoyxe2Enj0Ojdtkm2Kw==}
2576 dependencies: 2603 dependencies:
2577 - '@volar/shared': 0.29.6  
2578 - '@volar/source-map': 0.29.6 2604 + '@volar/shared': 0.29.7
  2605 + '@volar/source-map': 0.29.7
2579 dev: true 2606 dev: true
2580 2607
2581 - /@volar/html2pug/0.29.6:  
2582 - resolution: {integrity: sha512-GhDe7lkpa6F/UV0q5Bztsrxgd05QEtcbWECHk6LwHXIJSb3t6SKQswQJmgbEgk38c3rIp647D7s0E1BRW/rZHg==} 2608 + /@volar/html2pug/0.29.7:
  2609 + resolution: {integrity: sha512-YEu1yl11pvyaElYDFzuo3kMr6Sr9c8n+BC93pF3e7ykDrejEq7GsUVlhzl1w41s6MjeheGD/Iq1vwVQE4o3E0A==}
2583 dependencies: 2610 dependencies:
2584 domelementtype: 2.2.0 2611 domelementtype: 2.2.0
2585 domhandler: 4.2.2 2612 domhandler: 4.2.2
@@ -2587,33 +2614,33 @@ packages: @@ -2587,33 +2614,33 @@ packages:
2587 pug: 3.0.2 2614 pug: 3.0.2
2588 dev: true 2615 dev: true
2589 2616
2590 - /@volar/shared/0.29.6:  
2591 - resolution: {integrity: sha512-s397k+x70rHoccDwx6YVtpFOfAK+/b/bptRueLyQRM9d/21fk54csvC1bcc4Uk/fHw/j6p3FUfumohWtDRJ32w==} 2617 + /@volar/shared/0.29.7:
  2618 + resolution: {integrity: sha512-n9TXdin0q4fyGodL5zKh2YMlelYeAxdeuGw8epmf0kolQc26bHici7AIhfj6mmpDox7zRZoqShHgmB4/zJolfw==}
2592 dependencies: 2619 dependencies:
2593 upath: 2.0.1 2620 upath: 2.0.1
2594 vscode-jsonrpc: 8.0.0-next.4 2621 vscode-jsonrpc: 8.0.0-next.4
2595 vscode-uri: 3.0.2 2622 vscode-uri: 3.0.2
2596 dev: true 2623 dev: true
2597 2624
2598 - /@volar/source-map/0.29.6:  
2599 - resolution: {integrity: sha512-C8SFAu3nYsXeDR5mKQsr2fqf81SZI3rcbwCMLTjvps81lzFXboxWfmQIIDvdeKH91H2z/S8juHm3W3Prj3iLLg==} 2625 + /@volar/source-map/0.29.7:
  2626 + resolution: {integrity: sha512-O2EI4kcqNQHzWa7V6HOdNFC2VLRJwH+fneTtDH4JAltDLJEhoIUb4jrBNcFGjY38W/KMUXqxKm00cUM+ktATjA==}
2600 dependencies: 2627 dependencies:
2601 - '@volar/shared': 0.29.6 2628 + '@volar/shared': 0.29.7
2602 dev: true 2629 dev: true
2603 2630
2604 - /@volar/transforms/0.29.6:  
2605 - resolution: {integrity: sha512-bST+MnQDueGGBtnhYgA3uWmfp8gUKaKKD5dy3HCGWaPIgcBmzzTwsg//beBaoyJpihKSCq9AaJQd+rNmVZredg==} 2631 + /@volar/transforms/0.29.7:
  2632 + resolution: {integrity: sha512-5Yzm4NVQu4binahCA0tuTQyNhxC+VVddt0AsdhCPkUzO+hLR17Ye2QqIsFL72aMvC2tYA2vdNQ+0KxbeyIqG2Q==}
2606 dependencies: 2633 dependencies:
2607 - '@volar/shared': 0.29.6 2634 + '@volar/shared': 0.29.7
2608 vscode-languageserver: 8.0.0-next.5 2635 vscode-languageserver: 8.0.0-next.5
2609 dev: true 2636 dev: true
2610 2637
2611 - /@volar/vue-code-gen/0.29.6:  
2612 - resolution: {integrity: sha512-N3TlKuvPHqVaRhoyh6zogG0UAAJX0gTWsWHiR9Cpu59RNlpgCTymigsnvzXBKAMsefhxpupy05dXn04Su1+ORA==} 2638 + /@volar/vue-code-gen/0.29.7:
  2639 + resolution: {integrity: sha512-xrG2rtw5cKf+Os6qIa9EUPCTG1z4CeFmSKrzD5bAww/n+9QNMy6slkTSvnKjdCqvW4TzL8STlBWC96aEL1qoDA==}
2613 dependencies: 2640 dependencies:
2614 - '@volar/code-gen': 0.29.6  
2615 - '@volar/shared': 0.29.6  
2616 - '@volar/source-map': 0.29.6 2641 + '@volar/code-gen': 0.29.7
  2642 + '@volar/shared': 0.29.7
  2643 + '@volar/source-map': 0.29.7
2617 '@vue/compiler-core': 3.2.23 2644 '@vue/compiler-core': 3.2.23
2618 '@vue/compiler-dom': 3.2.23 2645 '@vue/compiler-dom': 3.2.23
2619 '@vue/shared': 3.2.23 2646 '@vue/shared': 3.2.23
@@ -2690,17 +2717,10 @@ packages: @@ -2690,17 +2717,10 @@ packages:
2690 resolution: {integrity: sha512-R2rfiRY+kZugzWh9ZyITaovx+jpU4vgivAEAiz80kvh3yviiTU3CBuGuyWpSwGz9/C7TkSWVM/FtQRGlZ16n8Q==} 2717 resolution: {integrity: sha512-R2rfiRY+kZugzWh9ZyITaovx+jpU4vgivAEAiz80kvh3yviiTU3CBuGuyWpSwGz9/C7TkSWVM/FtQRGlZ16n8Q==}
2691 dev: false 2718 dev: false
2692 2719
2693 - /@vue/reactivity/3.2.22:  
2694 - resolution: {integrity: sha512-xNkLAItjI0xB+lFeDgKCrSItmrHTaAzSnt8LmdSCPQnDyarmzbi/u4ESQnckWvlL7lSRKiEaOvblaNyqAa7OnQ==}  
2695 - dependencies:  
2696 - '@vue/shared': 3.2.22  
2697 - dev: true  
2698 -  
2699 /@vue/reactivity/3.2.23: 2720 /@vue/reactivity/3.2.23:
2700 resolution: {integrity: sha512-8RGVr/5Kpgb/EkCjgHXqttgA5IMc6n0lIXFY4TVbMkzdXrvaIhzBd7Te44oIDsTSYVKZLpfHd6/wEnuDqE8vFw==} 2721 resolution: {integrity: sha512-8RGVr/5Kpgb/EkCjgHXqttgA5IMc6n0lIXFY4TVbMkzdXrvaIhzBd7Te44oIDsTSYVKZLpfHd6/wEnuDqE8vFw==}
2701 dependencies: 2722 dependencies:
2702 '@vue/shared': 3.2.23 2723 '@vue/shared': 3.2.23
2703 - dev: false  
2704 2724
2705 /@vue/ref-transform/3.2.23: 2725 /@vue/ref-transform/3.2.23:
2706 resolution: {integrity: sha512-gW0GD2PSAs/th7mC7tPB/UwpIQxclbApVtsDtscDmOJXb2+cdu60ny+SuHNgfrlUT/JqWKQHq7jFKO4woxLNaA==} 2726 resolution: {integrity: sha512-gW0GD2PSAs/th7mC7tPB/UwpIQxclbApVtsDtscDmOJXb2+cdu60ny+SuHNgfrlUT/JqWKQHq7jFKO4woxLNaA==}
@@ -2736,10 +2756,6 @@ packages: @@ -2736,10 +2756,6 @@ packages:
2736 vue: 3.2.23 2756 vue: 3.2.23
2737 dev: false 2757 dev: false
2738 2758
2739 - /@vue/shared/3.2.22:  
2740 - resolution: {integrity: sha512-qWVav014mpjEtbWbEgl0q9pEyrrIySKum8UVYjwhC6njrKzknLZPvfuYdQyVbApsqr94tf/3dP4pCuZmmjdCWQ==}  
2741 - dev: true  
2742 -  
2743 /@vue/shared/3.2.23: 2759 /@vue/shared/3.2.23:
2744 resolution: {integrity: sha512-U+/Jefa0QfXUF2qVy9Dqlrb6HKJSr9/wJcM66wXmWcTOoqg7hOWzF4qruDle51pyF4x3wMn6TSH54UdjKjCKMA==} 2760 resolution: {integrity: sha512-U+/Jefa0QfXUF2qVy9Dqlrb6HKJSr9/wJcM66wXmWcTOoqg7hOWzF4qruDle51pyF4x3wMn6TSH54UdjKjCKMA==}
2745 2761
@@ -2883,7 +2899,7 @@ packages: @@ -2883,7 +2899,7 @@ packages:
2883 resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 2899 resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
2884 engines: {node: '>= 6.0.0'} 2900 engines: {node: '>= 6.0.0'}
2885 dependencies: 2901 dependencies:
2886 - debug: 4.3.2 2902 + debug: 4.3.3
2887 transitivePeerDependencies: 2903 transitivePeerDependencies:
2888 - supports-color 2904 - supports-color
2889 dev: true 2905 dev: true
@@ -3156,18 +3172,18 @@ packages: @@ -3156,18 +3172,18 @@ packages:
3156 - debug 3172 - debug
3157 dev: false 3173 dev: false
3158 3174
3159 - /babel-jest/27.3.1_@babel+core@7.16.0:  
3160 - resolution: {integrity: sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==} 3175 + /babel-jest/27.4.0_@babel+core@7.16.0:
  3176 + resolution: {integrity: sha512-4855S+YT4Hx0OiXFDBOWhrMj1Y9zYE7StlchuZtr1vbo1LEDBIkt8U6+7cse8jkpJSV98w3nBVDrPgol5Ab/cQ==}
3161 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 3177 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
3162 peerDependencies: 3178 peerDependencies:
3163 '@babel/core': ^7.8.0 3179 '@babel/core': ^7.8.0
3164 dependencies: 3180 dependencies:
3165 '@babel/core': 7.16.0 3181 '@babel/core': 7.16.0
3166 - '@jest/transform': 27.3.1  
3167 - '@jest/types': 27.2.5 3182 + '@jest/transform': 27.4.0
  3183 + '@jest/types': 27.4.0
3168 '@types/babel__core': 7.1.16 3184 '@types/babel__core': 7.1.16
3169 babel-plugin-istanbul: 6.1.1 3185 babel-plugin-istanbul: 6.1.1
3170 - babel-preset-jest: 27.2.0_@babel+core@7.16.0 3186 + babel-preset-jest: 27.4.0_@babel+core@7.16.0
3171 chalk: 4.1.2 3187 chalk: 4.1.2
3172 graceful-fs: 4.2.8 3188 graceful-fs: 4.2.8
3173 slash: 3.0.0 3189 slash: 3.0.0
@@ -3194,8 +3210,8 @@ packages: @@ -3194,8 +3210,8 @@ packages:
3194 - supports-color 3210 - supports-color
3195 dev: true 3211 dev: true
3196 3212
3197 - /babel-plugin-jest-hoist/27.2.0:  
3198 - resolution: {integrity: sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==} 3213 + /babel-plugin-jest-hoist/27.4.0:
  3214 + resolution: {integrity: sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==}
3199 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 3215 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
3200 dependencies: 3216 dependencies:
3201 '@babel/template': 7.16.0 3217 '@babel/template': 7.16.0
@@ -3260,14 +3276,14 @@ packages: @@ -3260,14 +3276,14 @@ packages:
3260 '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.16.0 3276 '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.16.0
3261 dev: true 3277 dev: true
3262 3278
3263 - /babel-preset-jest/27.2.0_@babel+core@7.16.0:  
3264 - resolution: {integrity: sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==} 3279 + /babel-preset-jest/27.4.0_@babel+core@7.16.0:
  3280 + resolution: {integrity: sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==}
3265 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 3281 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
3266 peerDependencies: 3282 peerDependencies:
3267 '@babel/core': ^7.0.0 3283 '@babel/core': ^7.0.0
3268 dependencies: 3284 dependencies:
3269 '@babel/core': 7.16.0 3285 '@babel/core': 7.16.0
3270 - babel-plugin-jest-hoist: 27.2.0 3286 + babel-plugin-jest-hoist: 27.4.0
3271 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.16.0 3287 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.16.0
3272 dev: true 3288 dev: true
3273 3289
@@ -4561,6 +4577,11 @@ packages: @@ -4561,6 +4577,11 @@ packages:
4561 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 4577 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
4562 dev: true 4578 dev: true
4563 4579
  4580 + /diff-sequences/27.4.0:
  4581 + resolution: {integrity: sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==}
  4582 + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
  4583 + dev: true
  4584 +
4564 /diff/4.0.2: 4585 /diff/4.0.2:
4565 resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 4586 resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
4566 engines: {node: '>=0.3.1'} 4587 engines: {node: '>=0.3.1'}
@@ -5101,7 +5122,7 @@ packages: @@ -5101,7 +5122,7 @@ packages:
5101 engines: {node: '>= 16.9.0', npm: '>= 7.0.0', pnpm: '>= 6.17.0'} 5122 engines: {node: '>= 16.9.0', npm: '>= 7.0.0', pnpm: '>= 6.17.0'}
5102 dev: true 5123 dev: true
5103 5124
5104 - /eslint-plugin-jest/25.3.0_4e52e098c69dc02e5d836ed593524821: 5125 + /eslint-plugin-jest/25.3.0_4a9aadc9705c463d5cb0fc674dd30934:
5105 resolution: {integrity: sha512-79WQtuBsTN1S8Y9+7euBYwxIOia/k7ykkl9OCBHL3xuww5ecursHy/D8GCIlvzHVWv85gOkS5Kv6Sh7RxOgK1Q==} 5126 resolution: {integrity: sha512-79WQtuBsTN1S8Y9+7euBYwxIOia/k7ykkl9OCBHL3xuww5ecursHy/D8GCIlvzHVWv85gOkS5Kv6Sh7RxOgK1Q==}
5106 engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 5127 engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
5107 peerDependencies: 5128 peerDependencies:
@@ -5117,7 +5138,7 @@ packages: @@ -5117,7 +5138,7 @@ packages:
5117 '@typescript-eslint/eslint-plugin': 5.4.0_5c8ff4cecd5a55e744866c0654edac32 5138 '@typescript-eslint/eslint-plugin': 5.4.0_5c8ff4cecd5a55e744866c0654edac32
5118 '@typescript-eslint/experimental-utils': 5.4.0_eslint@8.3.0+typescript@4.5.2 5139 '@typescript-eslint/experimental-utils': 5.4.0_eslint@8.3.0+typescript@4.5.2
5119 eslint: 8.3.0 5140 eslint: 8.3.0
5120 - jest: 27.3.1_ts-node@10.4.0 5141 + jest: 27.4.0_ts-node@10.4.0
5121 transitivePeerDependencies: 5142 transitivePeerDependencies:
5122 - supports-color 5143 - supports-color
5123 - typescript 5144 - typescript
@@ -5426,16 +5447,16 @@ packages: @@ -5426,16 +5447,16 @@ packages:
5426 homedir-polyfill: 1.0.3 5447 homedir-polyfill: 1.0.3
5427 dev: true 5448 dev: true
5428 5449
5429 - /expect/27.3.1:  
5430 - resolution: {integrity: sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==} 5450 + /expect/27.4.0:
  5451 + resolution: {integrity: sha512-3V4Nq5E5dS7bzFfinUThG0OnOnNIDdEPC0KG1pBgB1Z7ZTDVuuyvSBTOQewi0z0vaGKWPaJ880tGI+pPm+5aCg==}
5431 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 5452 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
5432 dependencies: 5453 dependencies:
5433 - '@jest/types': 27.2.5 5454 + '@jest/types': 27.4.0
5434 ansi-styles: 5.2.0 5455 ansi-styles: 5.2.0
5435 - jest-get-type: 27.3.1  
5436 - jest-matcher-utils: 27.3.1  
5437 - jest-message-util: 27.3.1  
5438 - jest-regex-util: 27.0.6 5456 + jest-get-type: 27.4.0
  5457 + jest-matcher-utils: 27.4.0
  5458 + jest-message-util: 27.4.0
  5459 + jest-regex-util: 27.4.0
5439 dev: true 5460 dev: true
5440 5461
5441 /ext-list/2.2.2: 5462 /ext-list/2.2.2:
@@ -6344,7 +6365,7 @@ packages: @@ -6344,7 +6365,7 @@ packages:
6344 dependencies: 6365 dependencies:
6345 '@tootallnate/once': 1.1.2 6366 '@tootallnate/once': 1.1.2
6346 agent-base: 6.0.2 6367 agent-base: 6.0.2
6347 - debug: 4.3.2 6368 + debug: 4.3.3
6348 transitivePeerDependencies: 6369 transitivePeerDependencies:
6349 - supports-color 6370 - supports-color
6350 dev: true 6371 dev: true
@@ -6354,7 +6375,7 @@ packages: @@ -6354,7 +6375,7 @@ packages:
6354 engines: {node: '>= 6'} 6375 engines: {node: '>= 6'}
6355 dependencies: 6376 dependencies:
6356 agent-base: 6.0.2 6377 agent-base: 6.0.2
6357 - debug: 4.3.2 6378 + debug: 4.3.3
6358 transitivePeerDependencies: 6379 transitivePeerDependencies:
6359 - supports-color 6380 - supports-color
6360 dev: true 6381 dev: true
@@ -7026,7 +7047,7 @@ packages: @@ -7026,7 +7047,7 @@ packages:
7026 resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 7047 resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
7027 engines: {node: '>=10'} 7048 engines: {node: '>=10'}
7028 dependencies: 7049 dependencies:
7029 - debug: 4.3.2 7050 + debug: 4.3.3
7030 istanbul-lib-coverage: 3.2.0 7051 istanbul-lib-coverage: 3.2.0
7031 source-map: 0.6.1 7052 source-map: 0.6.1
7032 transitivePeerDependencies: 7053 transitivePeerDependencies:
@@ -7059,35 +7080,35 @@ packages: @@ -7059,35 +7080,35 @@ packages:
7059 minimatch: 3.0.4 7080 minimatch: 3.0.4
7060 dev: true 7081 dev: true
7061 7082
7062 - /jest-changed-files/27.3.0:  
7063 - resolution: {integrity: sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==} 7083 + /jest-changed-files/27.4.0:
  7084 + resolution: {integrity: sha512-TacYni8ZumaB10L/fGRH92MbLYkn+MF2KtgHeAOcwnOzfmt+S6CDmJeslZuLOpnRUQKkV/Vr4qPAlrBTE5r67A==}
7064 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7085 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7065 dependencies: 7086 dependencies:
7066 - '@jest/types': 27.2.5 7087 + '@jest/types': 27.4.0
7067 execa: 5.1.1 7088 execa: 5.1.1
7068 throat: 6.0.1 7089 throat: 6.0.1
7069 dev: true 7090 dev: true
7070 7091
7071 - /jest-circus/27.3.1:  
7072 - resolution: {integrity: sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==} 7092 + /jest-circus/27.4.0:
  7093 + resolution: {integrity: sha512-WYmHSsuH82HZqOHPU1vD2AKyzUp5t/0R7jT1XJ8ga+hIGR5Ddv6PUQeMJvjnftyLC0izSm3tZaIYB+H6FfYqZA==}
7073 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7094 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7074 dependencies: 7095 dependencies:
7075 - '@jest/environment': 27.3.1  
7076 - '@jest/test-result': 27.3.1  
7077 - '@jest/types': 27.2.5 7096 + '@jest/environment': 27.4.0
  7097 + '@jest/test-result': 27.4.0
  7098 + '@jest/types': 27.4.0
7078 '@types/node': 16.11.10 7099 '@types/node': 16.11.10
7079 chalk: 4.1.2 7100 chalk: 4.1.2
7080 co: 4.6.0 7101 co: 4.6.0
7081 dedent: 0.7.0 7102 dedent: 0.7.0
7082 - expect: 27.3.1 7103 + expect: 27.4.0
7083 is-generator-fn: 2.1.0 7104 is-generator-fn: 2.1.0
7084 - jest-each: 27.3.1  
7085 - jest-matcher-utils: 27.3.1  
7086 - jest-message-util: 27.3.1  
7087 - jest-runtime: 27.3.1  
7088 - jest-snapshot: 27.3.1  
7089 - jest-util: 27.3.1  
7090 - pretty-format: 27.3.1 7105 + jest-each: 27.4.0
  7106 + jest-matcher-utils: 27.4.0
  7107 + jest-message-util: 27.4.0
  7108 + jest-runtime: 27.4.0
  7109 + jest-snapshot: 27.4.0
  7110 + jest-util: 27.4.0
  7111 + pretty-format: 27.4.0
7091 slash: 3.0.0 7112 slash: 3.0.0
7092 stack-utils: 2.0.5 7113 stack-utils: 2.0.5
7093 throat: 6.0.1 7114 throat: 6.0.1
@@ -7095,8 +7116,8 @@ packages: @@ -7095,8 +7116,8 @@ packages:
7095 - supports-color 7116 - supports-color
7096 dev: true 7117 dev: true
7097 7118
7098 - /jest-cli/27.3.1_ts-node@10.4.0:  
7099 - resolution: {integrity: sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==} 7119 + /jest-cli/27.4.0_ts-node@10.4.0:
  7120 + resolution: {integrity: sha512-cTL2ORt/ha+x6KJfVp0oTAyPmHVw7IJ+lA3kmT/kNcWoCiKa+t/JlF5x+nJ0UfL3/IQLV+ysYgu8MjGM8WXH+w==}
7100 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7121 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7101 hasBin: true 7122 hasBin: true
7102 peerDependencies: 7123 peerDependencies:
@@ -7105,16 +7126,16 @@ packages: @@ -7105,16 +7126,16 @@ packages:
7105 node-notifier: 7126 node-notifier:
7106 optional: true 7127 optional: true
7107 dependencies: 7128 dependencies:
7108 - '@jest/core': 27.3.1_ts-node@10.4.0  
7109 - '@jest/test-result': 27.3.1  
7110 - '@jest/types': 27.2.5 7129 + '@jest/core': 27.4.0_ts-node@10.4.0
  7130 + '@jest/test-result': 27.4.0
  7131 + '@jest/types': 27.4.0
7111 chalk: 4.1.2 7132 chalk: 4.1.2
7112 exit: 0.1.2 7133 exit: 0.1.2
7113 graceful-fs: 4.2.8 7134 graceful-fs: 4.2.8
7114 import-local: 3.0.3 7135 import-local: 3.0.3
7115 - jest-config: 27.3.1_ts-node@10.4.0  
7116 - jest-util: 27.3.1  
7117 - jest-validate: 27.3.1 7136 + jest-config: 27.4.0_ts-node@10.4.0
  7137 + jest-util: 27.4.0
  7138 + jest-validate: 27.4.0
7118 prompts: 2.4.2 7139 prompts: 2.4.2
7119 yargs: 16.2.0 7140 yargs: 16.2.0
7120 transitivePeerDependencies: 7141 transitivePeerDependencies:
@@ -7125,8 +7146,8 @@ packages: @@ -7125,8 +7146,8 @@ packages:
7125 - utf-8-validate 7146 - utf-8-validate
7126 dev: true 7147 dev: true
7127 7148
7128 - /jest-config/27.3.1_ts-node@10.4.0:  
7129 - resolution: {integrity: sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==} 7149 + /jest-config/27.4.0_ts-node@10.4.0:
  7150 + resolution: {integrity: sha512-4ZDJd0HLX4snqDNOQYswMjQj7d7I2Bm8+TYIytDcRSAy7mkneQCKHBJu2NtIuzXxAoS2Sy+sjZ1UX/9L06zZCQ==}
7130 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7151 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7131 peerDependencies: 7152 peerDependencies:
7132 ts-node: '>=9.0.0' 7153 ts-node: '>=9.0.0'
@@ -7135,26 +7156,27 @@ packages: @@ -7135,26 +7156,27 @@ packages:
7135 optional: true 7156 optional: true
7136 dependencies: 7157 dependencies:
7137 '@babel/core': 7.16.0 7158 '@babel/core': 7.16.0
7138 - '@jest/test-sequencer': 27.3.1  
7139 - '@jest/types': 27.2.5  
7140 - babel-jest: 27.3.1_@babel+core@7.16.0 7159 + '@jest/test-sequencer': 27.4.0
  7160 + '@jest/types': 27.4.0
  7161 + babel-jest: 27.4.0_@babel+core@7.16.0
7141 chalk: 4.1.2 7162 chalk: 4.1.2
7142 ci-info: 3.3.0 7163 ci-info: 3.3.0
7143 deepmerge: 4.2.2 7164 deepmerge: 4.2.2
7144 glob: 7.2.0 7165 glob: 7.2.0
7145 graceful-fs: 4.2.8 7166 graceful-fs: 4.2.8
7146 - jest-circus: 27.3.1  
7147 - jest-environment-jsdom: 27.3.1  
7148 - jest-environment-node: 27.3.1  
7149 - jest-get-type: 27.3.1  
7150 - jest-jasmine2: 27.3.1  
7151 - jest-regex-util: 27.0.6  
7152 - jest-resolve: 27.3.1  
7153 - jest-runner: 27.3.1  
7154 - jest-util: 27.3.1  
7155 - jest-validate: 27.3.1 7167 + jest-circus: 27.4.0
  7168 + jest-environment-jsdom: 27.4.0
  7169 + jest-environment-node: 27.4.0
  7170 + jest-get-type: 27.4.0
  7171 + jest-jasmine2: 27.4.0
  7172 + jest-regex-util: 27.4.0
  7173 + jest-resolve: 27.4.0
  7174 + jest-runner: 27.4.0
  7175 + jest-util: 27.4.0
  7176 + jest-validate: 27.4.0
7156 micromatch: 4.0.4 7177 micromatch: 4.0.4
7157 - pretty-format: 27.3.1 7178 + pretty-format: 27.4.0
  7179 + slash: 3.0.0
7158 ts-node: 10.4.0_36929cccfdb926da0bb85cc291f27124 7180 ts-node: 10.4.0_36929cccfdb926da0bb85cc291f27124
7159 transitivePeerDependencies: 7181 transitivePeerDependencies:
7160 - bufferutil 7182 - bufferutil
@@ -7173,34 +7195,45 @@ packages: @@ -7173,34 +7195,45 @@ packages:
7173 pretty-format: 27.3.1 7195 pretty-format: 27.3.1
7174 dev: true 7196 dev: true
7175 7197
7176 - /jest-docblock/27.0.6:  
7177 - resolution: {integrity: sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==} 7198 + /jest-diff/27.4.0:
  7199 + resolution: {integrity: sha512-fdXgpnyQH4LNSnYgRfHN/g413bqbPspWIAZPlXrdNISehDih1VNDtuRvlzGQJ4Go+fur1HKB2IyI25t6cWi5EA==}
  7200 + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
  7201 + dependencies:
  7202 + chalk: 4.1.2
  7203 + diff-sequences: 27.4.0
  7204 + jest-get-type: 27.4.0
  7205 + pretty-format: 27.4.0
  7206 + dev: true
  7207 +
  7208 + /jest-docblock/27.4.0:
  7209 + resolution: {integrity: sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==}
7178 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7210 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7179 dependencies: 7211 dependencies:
7180 detect-newline: 3.1.0 7212 detect-newline: 3.1.0
7181 dev: true 7213 dev: true
7182 7214
7183 - /jest-each/27.3.1:  
7184 - resolution: {integrity: sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==} 7215 + /jest-each/27.4.0:
  7216 + resolution: {integrity: sha512-dq6r/Uf6Q7sI/gND7WyCmQ7Z13p1CSusMkHEC//+schTrhTRe+ubPO2GtejHlWV+BldH6aMAAmtlEZgBroNrNg==}
7185 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7217 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7186 dependencies: 7218 dependencies:
7187 - '@jest/types': 27.2.5 7219 + '@jest/types': 27.4.0
7188 chalk: 4.1.2 7220 chalk: 4.1.2
7189 - jest-get-type: 27.3.1  
7190 - jest-util: 27.3.1  
7191 - pretty-format: 27.3.1 7221 + jest-get-type: 27.4.0
  7222 + jest-util: 27.4.0
  7223 + pretty-format: 27.4.0
7192 dev: true 7224 dev: true
7193 7225
7194 - /jest-environment-jsdom/27.3.1:  
7195 - resolution: {integrity: sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==} 7226 + /jest-environment-jsdom/27.4.0:
  7227 + resolution: {integrity: sha512-fgM6g4WftTTpRA8dB5FnmS3n+PthwjTdMwl/Lcq2QlCo0I5smyD+t82bzO9tX5w6ygxbCbnP4VkSWWYdqO4j+w==}
7196 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7228 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7197 dependencies: 7229 dependencies:
7198 - '@jest/environment': 27.3.1  
7199 - '@jest/fake-timers': 27.3.1  
7200 - '@jest/types': 27.2.5 7230 + '@jest/environment': 27.4.0
  7231 + '@jest/fake-timers': 27.4.0
  7232 + '@jest/types': 27.4.0
  7233 + '@types/jsdom': 16.2.13
7201 '@types/node': 16.11.10 7234 '@types/node': 16.11.10
7202 - jest-mock: 27.3.0  
7203 - jest-util: 27.3.1 7235 + jest-mock: 27.4.0
  7236 + jest-util: 27.4.0
7204 jsdom: 16.7.0 7237 jsdom: 16.7.0
7205 transitivePeerDependencies: 7238 transitivePeerDependencies:
7206 - bufferutil 7239 - bufferutil
@@ -7209,16 +7242,16 @@ packages: @@ -7209,16 +7242,16 @@ packages:
7209 - utf-8-validate 7242 - utf-8-validate
7210 dev: true 7243 dev: true
7211 7244
7212 - /jest-environment-node/27.3.1:  
7213 - resolution: {integrity: sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==} 7245 + /jest-environment-node/27.4.0:
  7246 + resolution: {integrity: sha512-VG3jLukpPhpffd7dUiC7+usyTG8Omytg4NOjGQtv88208O2AAMwcqpOAl1/uVOhUvbiegtVztyd3ZzAQtBxifA==}
7214 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7247 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7215 dependencies: 7248 dependencies:
7216 - '@jest/environment': 27.3.1  
7217 - '@jest/fake-timers': 27.3.1  
7218 - '@jest/types': 27.2.5 7249 + '@jest/environment': 27.4.0
  7250 + '@jest/fake-timers': 27.4.0
  7251 + '@jest/types': 27.4.0
7219 '@types/node': 16.11.10 7252 '@types/node': 16.11.10
7220 - jest-mock: 27.3.0  
7221 - jest-util: 27.3.1 7253 + jest-mock: 27.4.0
  7254 + jest-util: 27.4.0
7222 dev: true 7255 dev: true
7223 7256
7224 /jest-get-type/27.3.1: 7257 /jest-get-type/27.3.1:
@@ -7226,94 +7259,99 @@ packages: @@ -7226,94 +7259,99 @@ packages:
7226 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7259 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7227 dev: true 7260 dev: true
7228 7261
7229 - /jest-haste-map/27.3.1:  
7230 - resolution: {integrity: sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==} 7262 + /jest-get-type/27.4.0:
  7263 + resolution: {integrity: sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==}
  7264 + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
  7265 + dev: true
  7266 +
  7267 + /jest-haste-map/27.4.0:
  7268 + resolution: {integrity: sha512-xTXw1/JBJvdvTEsnTlRj9u9AAg2t23r5GHbtc5eC6AuEIRPfGWV02Y67U0p4K1KpEWLsk9Pb3b6Kfde/5a3C5A==}
7231 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7269 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7232 dependencies: 7270 dependencies:
7233 - '@jest/types': 27.2.5 7271 + '@jest/types': 27.4.0
7234 '@types/graceful-fs': 4.1.5 7272 '@types/graceful-fs': 4.1.5
7235 '@types/node': 16.11.10 7273 '@types/node': 16.11.10
7236 anymatch: 3.1.2 7274 anymatch: 3.1.2
7237 fb-watchman: 2.0.1 7275 fb-watchman: 2.0.1
7238 graceful-fs: 4.2.8 7276 graceful-fs: 4.2.8
7239 - jest-regex-util: 27.0.6  
7240 - jest-serializer: 27.0.6  
7241 - jest-util: 27.3.1  
7242 - jest-worker: 27.3.1 7277 + jest-regex-util: 27.4.0
  7278 + jest-serializer: 27.4.0
  7279 + jest-util: 27.4.0
  7280 + jest-worker: 27.4.0
7243 micromatch: 4.0.4 7281 micromatch: 4.0.4
7244 walker: 1.0.8 7282 walker: 1.0.8
7245 optionalDependencies: 7283 optionalDependencies:
7246 fsevents: 2.3.2 7284 fsevents: 2.3.2
7247 dev: true 7285 dev: true
7248 7286
7249 - /jest-jasmine2/27.3.1:  
7250 - resolution: {integrity: sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==} 7287 + /jest-jasmine2/27.4.0:
  7288 + resolution: {integrity: sha512-yvfWhQM/ZoxXfBZJdiKXCQxt18pOrciQUDqkT+EXtzhpKPIsbPdWCVv53NOqeWnRQR4HVhNgKK/fYD6BUXCxzA==}
7251 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7289 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7252 dependencies: 7290 dependencies:
7253 '@babel/traverse': 7.16.3 7291 '@babel/traverse': 7.16.3
7254 - '@jest/environment': 27.3.1  
7255 - '@jest/source-map': 27.0.6  
7256 - '@jest/test-result': 27.3.1  
7257 - '@jest/types': 27.2.5 7292 + '@jest/environment': 27.4.0
  7293 + '@jest/source-map': 27.4.0
  7294 + '@jest/test-result': 27.4.0
  7295 + '@jest/types': 27.4.0
7258 '@types/node': 16.11.10 7296 '@types/node': 16.11.10
7259 chalk: 4.1.2 7297 chalk: 4.1.2
7260 co: 4.6.0 7298 co: 4.6.0
7261 - expect: 27.3.1 7299 + expect: 27.4.0
7262 is-generator-fn: 2.1.0 7300 is-generator-fn: 2.1.0
7263 - jest-each: 27.3.1  
7264 - jest-matcher-utils: 27.3.1  
7265 - jest-message-util: 27.3.1  
7266 - jest-runtime: 27.3.1  
7267 - jest-snapshot: 27.3.1  
7268 - jest-util: 27.3.1  
7269 - pretty-format: 27.3.1 7301 + jest-each: 27.4.0
  7302 + jest-matcher-utils: 27.4.0
  7303 + jest-message-util: 27.4.0
  7304 + jest-runtime: 27.4.0
  7305 + jest-snapshot: 27.4.0
  7306 + jest-util: 27.4.0
  7307 + pretty-format: 27.4.0
7270 throat: 6.0.1 7308 throat: 6.0.1
7271 transitivePeerDependencies: 7309 transitivePeerDependencies:
7272 - supports-color 7310 - supports-color
7273 dev: true 7311 dev: true
7274 7312
7275 - /jest-leak-detector/27.3.1:  
7276 - resolution: {integrity: sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==} 7313 + /jest-leak-detector/27.4.0:
  7314 + resolution: {integrity: sha512-d7QeqzIOVQeMI6VROLPNeYagcxPCvqYD6A34Ol9D+vPzs72omGXsGbuuJrChD51zuA4ESXcLYZ81L9JHr1VYGw==}
7277 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7315 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7278 dependencies: 7316 dependencies:
7279 - jest-get-type: 27.3.1  
7280 - pretty-format: 27.3.1 7317 + jest-get-type: 27.4.0
  7318 + pretty-format: 27.4.0
7281 dev: true 7319 dev: true
7282 7320
7283 - /jest-matcher-utils/27.3.1:  
7284 - resolution: {integrity: sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==} 7321 + /jest-matcher-utils/27.4.0:
  7322 + resolution: {integrity: sha512-vBy1tEyuKiItYgV9x9ubccyadOy5xAAmDBgXk8dMppXBXG4glggrGcZvE+8l1r+te477bRcFLB/hRyGm5Tdxzw==}
7285 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7323 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7286 dependencies: 7324 dependencies:
7287 chalk: 4.1.2 7325 chalk: 4.1.2
7288 - jest-diff: 27.3.1  
7289 - jest-get-type: 27.3.1  
7290 - pretty-format: 27.3.1 7326 + jest-diff: 27.4.0
  7327 + jest-get-type: 27.4.0
  7328 + pretty-format: 27.4.0
7291 dev: true 7329 dev: true
7292 7330
7293 - /jest-message-util/27.3.1:  
7294 - resolution: {integrity: sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==} 7331 + /jest-message-util/27.4.0:
  7332 + resolution: {integrity: sha512-2KmfpnxFwt+5CF0YST6U1IwFomX9gx2dmcAV/ZjzF9/4tlmieExl7Ch7D36l94mIxWTXhDuPji4XOvxRBdswrQ==}
7295 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7333 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7296 dependencies: 7334 dependencies:
7297 '@babel/code-frame': 7.16.0 7335 '@babel/code-frame': 7.16.0
7298 - '@jest/types': 27.2.5 7336 + '@jest/types': 27.4.0
7299 '@types/stack-utils': 2.0.1 7337 '@types/stack-utils': 2.0.1
7300 chalk: 4.1.2 7338 chalk: 4.1.2
7301 graceful-fs: 4.2.8 7339 graceful-fs: 4.2.8
7302 micromatch: 4.0.4 7340 micromatch: 4.0.4
7303 - pretty-format: 27.3.1 7341 + pretty-format: 27.4.0
7304 slash: 3.0.0 7342 slash: 3.0.0
7305 stack-utils: 2.0.5 7343 stack-utils: 2.0.5
7306 dev: true 7344 dev: true
7307 7345
7308 - /jest-mock/27.3.0:  
7309 - resolution: {integrity: sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==} 7346 + /jest-mock/27.4.0:
  7347 + resolution: {integrity: sha512-hQMpGIFEjhb6rtOz4JZcZaMdQytXjm54tBif9rpXfdzbEgYZ9+JGOUNqdtu3n09KG95/zEVwRI07HAuoSV1Dxw==}
7310 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7348 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7311 dependencies: 7349 dependencies:
7312 - '@jest/types': 27.2.5 7350 + '@jest/types': 27.4.0
7313 '@types/node': 16.11.10 7351 '@types/node': 16.11.10
7314 dev: true 7352 dev: true
7315 7353
7316 - /jest-pnp-resolver/1.2.2_jest-resolve@27.3.1: 7354 + /jest-pnp-resolver/1.2.2_jest-resolve@27.4.0:
7317 resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} 7355 resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==}
7318 engines: {node: '>=6'} 7356 engines: {node: '>=6'}
7319 peerDependencies: 7357 peerDependencies:
@@ -7322,65 +7360,65 @@ packages: @@ -7322,65 +7360,65 @@ packages:
7322 jest-resolve: 7360 jest-resolve:
7323 optional: true 7361 optional: true
7324 dependencies: 7362 dependencies:
7325 - jest-resolve: 27.3.1 7363 + jest-resolve: 27.4.0
7326 dev: true 7364 dev: true
7327 7365
7328 - /jest-regex-util/27.0.6:  
7329 - resolution: {integrity: sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==} 7366 + /jest-regex-util/27.4.0:
  7367 + resolution: {integrity: sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==}
7330 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7368 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7331 dev: true 7369 dev: true
7332 7370
7333 - /jest-resolve-dependencies/27.3.1:  
7334 - resolution: {integrity: sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==} 7371 + /jest-resolve-dependencies/27.4.0:
  7372 + resolution: {integrity: sha512-D+Ean4nLgbRqhWCSKJIWpC36O7itmZbVQjnHWLF4brAP0r2sGATXjjhERIaiBCt/V2IhCDcH0EvS+PA7gSrf5g==}
7335 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7373 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7336 dependencies: 7374 dependencies:
7337 - '@jest/types': 27.2.5  
7338 - jest-regex-util: 27.0.6  
7339 - jest-snapshot: 27.3.1 7375 + '@jest/types': 27.4.0
  7376 + jest-regex-util: 27.4.0
  7377 + jest-snapshot: 27.4.0
7340 transitivePeerDependencies: 7378 transitivePeerDependencies:
7341 - supports-color 7379 - supports-color
7342 dev: true 7380 dev: true
7343 7381
7344 - /jest-resolve/27.3.1:  
7345 - resolution: {integrity: sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==} 7382 + /jest-resolve/27.4.0:
  7383 + resolution: {integrity: sha512-XF54RYG9a9fHTlovCwC5U49TVAfCkHLoJnMhgaT2AYif4E5BechlKUAlhYE4fkbr1J5LzP7O9qfgRA5JSR8HzQ==}
7346 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7384 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7347 dependencies: 7385 dependencies:
7348 - '@jest/types': 27.2.5 7386 + '@jest/types': 27.4.0
7349 chalk: 4.1.2 7387 chalk: 4.1.2
7350 graceful-fs: 4.2.8 7388 graceful-fs: 4.2.8
7351 - jest-haste-map: 27.3.1  
7352 - jest-pnp-resolver: 1.2.2_jest-resolve@27.3.1  
7353 - jest-util: 27.3.1  
7354 - jest-validate: 27.3.1 7389 + jest-haste-map: 27.4.0
  7390 + jest-pnp-resolver: 1.2.2_jest-resolve@27.4.0
  7391 + jest-util: 27.4.0
  7392 + jest-validate: 27.4.0
7355 resolve: 1.20.0 7393 resolve: 1.20.0
7356 resolve.exports: 1.1.0 7394 resolve.exports: 1.1.0
7357 slash: 3.0.0 7395 slash: 3.0.0
7358 dev: true 7396 dev: true
7359 7397
7360 - /jest-runner/27.3.1:  
7361 - resolution: {integrity: sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==} 7398 + /jest-runner/27.4.0:
  7399 + resolution: {integrity: sha512-ncnnOVQlqDorBAMNTuA2Htg3XJlnwAySpUBDmlJy4+WEwb5zB2cDLA3roPSMe0lVn8mGGXccl1/a8xwvE6txiQ==}
7362 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7400 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7363 dependencies: 7401 dependencies:
7364 - '@jest/console': 27.3.1  
7365 - '@jest/environment': 27.3.1  
7366 - '@jest/test-result': 27.3.1  
7367 - '@jest/transform': 27.3.1  
7368 - '@jest/types': 27.2.5 7402 + '@jest/console': 27.4.0
  7403 + '@jest/environment': 27.4.0
  7404 + '@jest/test-result': 27.4.0
  7405 + '@jest/transform': 27.4.0
  7406 + '@jest/types': 27.4.0
7369 '@types/node': 16.11.10 7407 '@types/node': 16.11.10
7370 chalk: 4.1.2 7408 chalk: 4.1.2
7371 emittery: 0.8.1 7409 emittery: 0.8.1
7372 exit: 0.1.2 7410 exit: 0.1.2
7373 graceful-fs: 4.2.8 7411 graceful-fs: 4.2.8
7374 - jest-docblock: 27.0.6  
7375 - jest-environment-jsdom: 27.3.1  
7376 - jest-environment-node: 27.3.1  
7377 - jest-haste-map: 27.3.1  
7378 - jest-leak-detector: 27.3.1  
7379 - jest-message-util: 27.3.1  
7380 - jest-resolve: 27.3.1  
7381 - jest-runtime: 27.3.1  
7382 - jest-util: 27.3.1  
7383 - jest-worker: 27.3.1 7412 + jest-docblock: 27.4.0
  7413 + jest-environment-jsdom: 27.4.0
  7414 + jest-environment-node: 27.4.0
  7415 + jest-haste-map: 27.4.0
  7416 + jest-leak-detector: 27.4.0
  7417 + jest-message-util: 27.4.0
  7418 + jest-resolve: 27.4.0
  7419 + jest-runtime: 27.4.0
  7420 + jest-util: 27.4.0
  7421 + jest-worker: 27.4.0
7384 source-map-support: 0.5.21 7422 source-map-support: 0.5.21
7385 throat: 6.0.1 7423 throat: 6.0.1
7386 transitivePeerDependencies: 7424 transitivePeerDependencies:
@@ -7390,17 +7428,17 @@ packages: @@ -7390,17 +7428,17 @@ packages:
7390 - utf-8-validate 7428 - utf-8-validate
7391 dev: true 7429 dev: true
7392 7430
7393 - /jest-runtime/27.3.1:  
7394 - resolution: {integrity: sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==} 7431 + /jest-runtime/27.4.0:
  7432 + resolution: {integrity: sha512-8IcQQFhVWWNq45wuDYooIDNdmhOVebOsIDOfXN/Xbw4h/6G1qy9+i5OND7Qmb4g+cSawK5C2tAdHcdR8Q9eSew==}
7395 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7433 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7396 dependencies: 7434 dependencies:
7397 - '@jest/console': 27.3.1  
7398 - '@jest/environment': 27.3.1  
7399 - '@jest/globals': 27.3.1  
7400 - '@jest/source-map': 27.0.6  
7401 - '@jest/test-result': 27.3.1  
7402 - '@jest/transform': 27.3.1  
7403 - '@jest/types': 27.2.5 7435 + '@jest/console': 27.4.0
  7436 + '@jest/environment': 27.4.0
  7437 + '@jest/globals': 27.4.0
  7438 + '@jest/source-map': 27.4.0
  7439 + '@jest/test-result': 27.4.0
  7440 + '@jest/transform': 27.4.0
  7441 + '@jest/types': 27.4.0
7404 '@types/yargs': 16.0.4 7442 '@types/yargs': 16.0.4
7405 chalk: 4.1.2 7443 chalk: 4.1.2
7406 cjs-module-lexer: 1.2.2 7444 cjs-module-lexer: 1.2.2
@@ -7409,14 +7447,14 @@ packages: @@ -7409,14 +7447,14 @@ packages:
7409 exit: 0.1.2 7447 exit: 0.1.2
7410 glob: 7.2.0 7448 glob: 7.2.0
7411 graceful-fs: 4.2.8 7449 graceful-fs: 4.2.8
7412 - jest-haste-map: 27.3.1  
7413 - jest-message-util: 27.3.1  
7414 - jest-mock: 27.3.0  
7415 - jest-regex-util: 27.0.6  
7416 - jest-resolve: 27.3.1  
7417 - jest-snapshot: 27.3.1  
7418 - jest-util: 27.3.1  
7419 - jest-validate: 27.3.1 7450 + jest-haste-map: 27.4.0
  7451 + jest-message-util: 27.4.0
  7452 + jest-mock: 27.4.0
  7453 + jest-regex-util: 27.4.0
  7454 + jest-resolve: 27.4.0
  7455 + jest-snapshot: 27.4.0
  7456 + jest-util: 27.4.0
  7457 + jest-validate: 27.4.0
7420 slash: 3.0.0 7458 slash: 3.0.0
7421 strip-bom: 4.0.0 7459 strip-bom: 4.0.0
7422 yargs: 16.2.0 7460 yargs: 16.2.0
@@ -7424,16 +7462,16 @@ packages: @@ -7424,16 +7462,16 @@ packages:
7424 - supports-color 7462 - supports-color
7425 dev: true 7463 dev: true
7426 7464
7427 - /jest-serializer/27.0.6:  
7428 - resolution: {integrity: sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==} 7465 + /jest-serializer/27.4.0:
  7466 + resolution: {integrity: sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==}
7429 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7467 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7430 dependencies: 7468 dependencies:
7431 '@types/node': 16.11.10 7469 '@types/node': 16.11.10
7432 graceful-fs: 4.2.8 7470 graceful-fs: 4.2.8
7433 dev: true 7471 dev: true
7434 7472
7435 - /jest-snapshot/27.3.1:  
7436 - resolution: {integrity: sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==} 7473 + /jest-snapshot/27.4.0:
  7474 + resolution: {integrity: sha512-iOisfzB00tQE/rk+LzLzjbjElT4Lq26ZrYHX/1OfhVb7IZbu/2i4bkS7YK3fimfw3zleWRTleUMCmWGi+GCjpQ==}
7437 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7475 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7438 dependencies: 7476 dependencies:
7439 '@babel/core': 7.16.0 7477 '@babel/core': 7.16.0
@@ -7442,23 +7480,23 @@ packages: @@ -7442,23 +7480,23 @@ packages:
7442 '@babel/plugin-syntax-typescript': 7.16.0_@babel+core@7.16.0 7480 '@babel/plugin-syntax-typescript': 7.16.0_@babel+core@7.16.0
7443 '@babel/traverse': 7.16.3 7481 '@babel/traverse': 7.16.3
7444 '@babel/types': 7.16.0 7482 '@babel/types': 7.16.0
7445 - '@jest/transform': 27.3.1  
7446 - '@jest/types': 27.2.5 7483 + '@jest/transform': 27.4.0
  7484 + '@jest/types': 27.4.0
7447 '@types/babel__traverse': 7.14.2 7485 '@types/babel__traverse': 7.14.2
7448 '@types/prettier': 2.4.2 7486 '@types/prettier': 2.4.2
7449 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.16.0 7487 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.16.0
7450 chalk: 4.1.2 7488 chalk: 4.1.2
7451 - expect: 27.3.1 7489 + expect: 27.4.0
7452 graceful-fs: 4.2.8 7490 graceful-fs: 4.2.8
7453 - jest-diff: 27.3.1  
7454 - jest-get-type: 27.3.1  
7455 - jest-haste-map: 27.3.1  
7456 - jest-matcher-utils: 27.3.1  
7457 - jest-message-util: 27.3.1  
7458 - jest-resolve: 27.3.1  
7459 - jest-util: 27.3.1 7491 + jest-diff: 27.4.0
  7492 + jest-get-type: 27.4.0
  7493 + jest-haste-map: 27.4.0
  7494 + jest-matcher-utils: 27.4.0
  7495 + jest-message-util: 27.4.0
  7496 + jest-resolve: 27.4.0
  7497 + jest-util: 27.4.0
7460 natural-compare: 1.4.0 7498 natural-compare: 1.4.0
7461 - pretty-format: 27.3.1 7499 + pretty-format: 27.4.0
7462 semver: 7.3.5 7500 semver: 7.3.5
7463 transitivePeerDependencies: 7501 transitivePeerDependencies:
7464 - supports-color 7502 - supports-color
@@ -7476,28 +7514,40 @@ packages: @@ -7476,28 +7514,40 @@ packages:
7476 picomatch: 2.3.0 7514 picomatch: 2.3.0
7477 dev: true 7515 dev: true
7478 7516
7479 - /jest-validate/27.3.1:  
7480 - resolution: {integrity: sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==} 7517 + /jest-util/27.4.0:
  7518 + resolution: {integrity: sha512-9HL5h/IWeg2u2dt0UIiseVRCnadh7CMPD4B9AeoEO23/NofaEfcPzIfl8dw45CpGHjP+xenw1viQYMd25DWquA==}
7481 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7519 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7482 dependencies: 7520 dependencies:
7483 - '@jest/types': 27.2.5 7521 + '@jest/types': 27.4.0
  7522 + '@types/node': 16.11.10
  7523 + chalk: 4.1.2
  7524 + ci-info: 3.3.0
  7525 + graceful-fs: 4.2.8
  7526 + picomatch: 2.3.0
  7527 + dev: true
  7528 +
  7529 + /jest-validate/27.4.0:
  7530 + resolution: {integrity: sha512-Gsfh/KtS7fXDNzz3oKmB1F8dFVqWwqOwhUqEHhKM8Y0R0bJK8R2HLiuqKfnqfbuybdiGiVdzqaK5c0poZaQAew==}
  7531 + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
  7532 + dependencies:
  7533 + '@jest/types': 27.4.0
7484 camelcase: 6.2.1 7534 camelcase: 6.2.1
7485 chalk: 4.1.2 7535 chalk: 4.1.2
7486 - jest-get-type: 27.3.1 7536 + jest-get-type: 27.4.0
7487 leven: 3.1.0 7537 leven: 3.1.0
7488 - pretty-format: 27.3.1 7538 + pretty-format: 27.4.0
7489 dev: true 7539 dev: true
7490 7540
7491 - /jest-watcher/27.3.1:  
7492 - resolution: {integrity: sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==} 7541 + /jest-watcher/27.4.0:
  7542 + resolution: {integrity: sha512-0ZXzsp/NArW6IXxo4g7DP/nCJqS/OLCZyl08qzd8ANGSEoTsliivBumjUK5/0gvx/K4Oc60APNyTMfJJ6WENcg==}
7493 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7543 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7494 dependencies: 7544 dependencies:
7495 - '@jest/test-result': 27.3.1  
7496 - '@jest/types': 27.2.5 7545 + '@jest/test-result': 27.4.0
  7546 + '@jest/types': 27.4.0
7497 '@types/node': 16.11.10 7547 '@types/node': 16.11.10
7498 ansi-escapes: 4.3.2 7548 ansi-escapes: 4.3.2
7499 chalk: 4.1.2 7549 chalk: 4.1.2
7500 - jest-util: 27.3.1 7550 + jest-util: 27.4.0
7501 string-length: 4.0.2 7551 string-length: 4.0.2
7502 dev: true 7552 dev: true
7503 7553
@@ -7510,8 +7560,8 @@ packages: @@ -7510,8 +7560,8 @@ packages:
7510 supports-color: 7.2.0 7560 supports-color: 7.2.0
7511 dev: true 7561 dev: true
7512 7562
7513 - /jest-worker/27.3.1:  
7514 - resolution: {integrity: sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==} 7563 + /jest-worker/27.4.0:
  7564 + resolution: {integrity: sha512-4WuKcUxtzxBoKOUFbt1MtTY9fJwPVD4aN/4Cgxee7OLetPZn5as2bjfZz98XSf2Zq1JFfhqPZpS+43BmWXKgCA==}
7515 engines: {node: '>= 10.13.0'} 7565 engines: {node: '>= 10.13.0'}
7516 dependencies: 7566 dependencies:
7517 '@types/node': 16.11.10 7567 '@types/node': 16.11.10
@@ -7519,8 +7569,8 @@ packages: @@ -7519,8 +7569,8 @@ packages:
7519 supports-color: 8.1.1 7569 supports-color: 8.1.1
7520 dev: true 7570 dev: true
7521 7571
7522 - /jest/27.3.1_ts-node@10.4.0:  
7523 - resolution: {integrity: sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==} 7572 + /jest/27.4.0_ts-node@10.4.0:
  7573 + resolution: {integrity: sha512-54SYE6EmGRoHS+9/OCspbb7tAD2WYAvBBXmny2Zp39/QgnNIWZD4KujhAZyRXHWASTBa9/WfXM2oekNBIOFV2A==}
7524 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 7574 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
7525 hasBin: true 7575 hasBin: true
7526 peerDependencies: 7576 peerDependencies:
@@ -7529,9 +7579,9 @@ packages: @@ -7529,9 +7579,9 @@ packages:
7529 node-notifier: 7579 node-notifier:
7530 optional: true 7580 optional: true
7531 dependencies: 7581 dependencies:
7532 - '@jest/core': 27.3.1_ts-node@10.4.0 7582 + '@jest/core': 27.4.0_ts-node@10.4.0
7533 import-local: 3.0.3 7583 import-local: 3.0.3
7534 - jest-cli: 27.3.1_ts-node@10.4.0 7584 + jest-cli: 27.4.0_ts-node@10.4.0
7535 transitivePeerDependencies: 7585 transitivePeerDependencies:
7536 - bufferutil 7586 - bufferutil
7537 - canvas 7587 - canvas
@@ -9178,6 +9228,16 @@ packages: @@ -9178,6 +9228,16 @@ packages:
9178 react-is: 17.0.2 9228 react-is: 17.0.2
9179 dev: true 9229 dev: true
9180 9230
  9231 + /pretty-format/27.4.0:
  9232 + resolution: {integrity: sha512-n0QR6hMREfp6nLzfVksXMAfIxk1ffOOfbb/FzKHFmRtn9iJKaZXB8WMzLr8a72IASShEAhqK06nlwp1gVWgqKg==}
  9233 + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
  9234 + dependencies:
  9235 + '@jest/types': 27.4.0
  9236 + ansi-regex: 5.0.1
  9237 + ansi-styles: 5.2.0
  9238 + react-is: 17.0.2
  9239 + dev: true
  9240 +
9181 /print-js/1.6.0: 9241 /print-js/1.6.0:
9182 resolution: {integrity: sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==} 9242 resolution: {integrity: sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==}
9183 dev: false 9243 dev: false
@@ -10820,7 +10880,7 @@ packages: @@ -10820,7 +10880,7 @@ packages:
10820 escape-string-regexp: 1.0.5 10880 escape-string-regexp: 1.0.5
10821 dev: true 10881 dev: true
10822 10882
10823 - /ts-jest/27.0.7_7e2a439bb7b53c38ff0c1a3c5e04c2c5: 10883 + /ts-jest/27.0.7_bfad92f4d8caf69d57ace222bbbf1afc:
10824 resolution: {integrity: sha512-O41shibMqzdafpuP+CkrOL7ykbmLh+FqQrXEmV9CydQ5JBk0Sj0uAEF5TNNe94fZWKm3yYvWa/IbyV4Yg1zK2Q==} 10884 resolution: {integrity: sha512-O41shibMqzdafpuP+CkrOL7ykbmLh+FqQrXEmV9CydQ5JBk0Sj0uAEF5TNNe94fZWKm3yYvWa/IbyV4Yg1zK2Q==}
10825 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 10885 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
10826 hasBin: true 10886 hasBin: true
@@ -10841,7 +10901,7 @@ packages: @@ -10841,7 +10901,7 @@ packages:
10841 '@types/jest': 27.0.3 10901 '@types/jest': 27.0.3
10842 bs-logger: 0.2.6 10902 bs-logger: 0.2.6
10843 fast-json-stable-stringify: 2.1.0 10903 fast-json-stable-stringify: 2.1.0
10844 - jest: 27.3.1_ts-node@10.4.0 10904 + jest: 27.4.0_ts-node@10.4.0
10845 jest-util: 27.3.1 10905 jest-util: 27.3.1
10846 json5: 2.2.0 10906 json5: 2.2.0
10847 lodash.memoize: 4.1.2 10907 lodash.memoize: 4.1.2
@@ -11279,13 +11339,13 @@ packages: @@ -11279,13 +11339,13 @@ packages:
11279 - supports-color 11339 - supports-color
11280 dev: true 11340 dev: true
11281 11341
11282 - /vite-plugin-pwa/0.11.7_vite@2.7.0-beta.9:  
11283 - resolution: {integrity: sha512-sU+VrUNVP87E79GCCBTusdoiqja3Qapsrp48+xFDf28zaeNZ2nuuCoCIPshmyusGuY0I51wRFxiBjcbdheEBSw==} 11342 + /vite-plugin-pwa/0.11.8_vite@2.7.0-beta.9:
  11343 + resolution: {integrity: sha512-IbiVEwvvXWlm2LeNPcTjnQfYTwPN/BDicbY6Nn9LNx2ECKjjCDDraLpqFe8v7OKATAiuXnx35q4DDI7UvJoqPw==}
11284 peerDependencies: 11344 peerDependencies:
11285 vite: ^2.0.0 11345 vite: ^2.0.0
11286 dependencies: 11346 dependencies:
11287 chalk: 4.1.2 11347 chalk: 4.1.2
11288 - debug: 4.3.2 11348 + debug: 4.3.3
11289 fast-glob: 3.2.7 11349 fast-glob: 3.2.7
11290 pretty-bytes: 5.6.0 11350 pretty-bytes: 5.6.0
11291 rollup: 2.60.1 11351 rollup: 2.60.1
@@ -11466,22 +11526,22 @@ packages: @@ -11466,22 +11526,22 @@ packages:
11466 resolution: {integrity: sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==} 11526 resolution: {integrity: sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==}
11467 dev: true 11527 dev: true
11468 11528
11469 - /vscode-pug-languageservice/0.29.6:  
11470 - resolution: {integrity: sha512-gkoM82pkCzYW+dfkLVRh22Bt3rjMT9QYl2X9lx1vV8yjeJjdYKM0vIhhio7+ZtmOO94JkdKI2YwA0K619/YEIA==} 11529 + /vscode-pug-languageservice/0.29.7:
  11530 + resolution: {integrity: sha512-OJ5N6Q1CU0uFvF8kSzRIqxsKYNGnexDss54DPSxla0f1E465ddHxxRsdI+bZQ8Va3rnyLBLGmEcM0gRn75DCWA==}
11471 dependencies: 11531 dependencies:
11472 - '@volar/code-gen': 0.29.6  
11473 - '@volar/shared': 0.29.6  
11474 - '@volar/source-map': 0.29.6  
11475 - '@volar/transforms': 0.29.6 11532 + '@volar/code-gen': 0.29.7
  11533 + '@volar/shared': 0.29.7
  11534 + '@volar/source-map': 0.29.7
  11535 + '@volar/transforms': 0.29.7
11476 pug-lexer: 5.0.1 11536 pug-lexer: 5.0.1
11477 pug-parser: 6.0.0 11537 pug-parser: 6.0.0
11478 vscode-languageserver: 8.0.0-next.5 11538 vscode-languageserver: 8.0.0-next.5
11479 dev: true 11539 dev: true
11480 11540
11481 - /vscode-typescript-languageservice/0.29.6:  
11482 - resolution: {integrity: sha512-bPfQWUw6EIDS6mlvie896IZ0RgvhtehZIAWB/fmqPFH5FU/tEcGj4E3y9pZEwCtG9xUtBbW6UcVI71HmrOXB+Q==} 11541 + /vscode-typescript-languageservice/0.29.7:
  11542 + resolution: {integrity: sha512-paqAiBPB3alZ/tnPHYf4y35+ob167r3YNZHWS1w7gKHqhnz/pOtdZG6MSya0FmSBRk9XdV//5xo3qZ5zZRCxjg==}
11483 dependencies: 11543 dependencies:
11484 - '@volar/shared': 0.29.6 11544 + '@volar/shared': 0.29.7
11485 semver: 7.3.5 11545 semver: 7.3.5
11486 upath: 2.0.1 11546 upath: 2.0.1
11487 vscode-languageserver: 8.0.0-next.5 11547 vscode-languageserver: 8.0.0-next.5
@@ -11496,18 +11556,18 @@ packages: @@ -11496,18 +11556,18 @@ packages:
11496 resolution: {integrity: sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==} 11556 resolution: {integrity: sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==}
11497 dev: true 11557 dev: true
11498 11558
11499 - /vscode-vue-languageservice/0.29.6:  
11500 - resolution: {integrity: sha512-5qZY6wMxDdMC82uye5EiUcWEHci06an4liYFMDHO9h0VpulLifLN0L3jAUNGfgAMSnevKqzgvY6FsxEDxDR/8g==} 11559 + /vscode-vue-languageservice/0.29.7:
  11560 + resolution: {integrity: sha512-YKIVJMLNmB81/D+z9hNMaSsn/4809bClYk5jk3X78zskGE7nIV9KfjhqY0LiO/SneF1ypvIxz/xJeEBILhDGBg==}
11501 dependencies: 11561 dependencies:
11502 - '@volar/code-gen': 0.29.6  
11503 - '@volar/html2pug': 0.29.6  
11504 - '@volar/shared': 0.29.6  
11505 - '@volar/source-map': 0.29.6  
11506 - '@volar/transforms': 0.29.6  
11507 - '@volar/vue-code-gen': 0.29.6 11562 + '@volar/code-gen': 0.29.7
  11563 + '@volar/html2pug': 0.29.7
  11564 + '@volar/shared': 0.29.7
  11565 + '@volar/source-map': 0.29.7
  11566 + '@volar/transforms': 0.29.7
  11567 + '@volar/vue-code-gen': 0.29.7
11508 '@vscode/emmet-helper': 2.8.2 11568 '@vscode/emmet-helper': 2.8.2
11509 - '@vue/reactivity': 3.2.22  
11510 - '@vue/shared': 3.2.22 11569 + '@vue/reactivity': 3.2.23
  11570 + '@vue/shared': 3.2.23
11511 request-light: 0.5.5 11571 request-light: 0.5.5
11512 upath: 2.0.1 11572 upath: 2.0.1
11513 vscode-css-languageservice: 5.1.8 11573 vscode-css-languageservice: 5.1.8
@@ -11515,8 +11575,8 @@ packages: @@ -11515,8 +11575,8 @@ packages:
11515 vscode-json-languageservice: 4.1.10 11575 vscode-json-languageservice: 4.1.10
11516 vscode-languageserver: 8.0.0-next.5 11576 vscode-languageserver: 8.0.0-next.5
11517 vscode-languageserver-textdocument: 1.0.3 11577 vscode-languageserver-textdocument: 1.0.3
11518 - vscode-pug-languageservice: 0.29.6  
11519 - vscode-typescript-languageservice: 0.29.6 11578 + vscode-pug-languageservice: 0.29.7
  11579 + vscode-typescript-languageservice: 0.29.7
11520 dev: true 11580 dev: true
11521 11581
11522 /vue-demi/0.12.1_vue@3.2.23: 11582 /vue-demi/0.12.1_vue@3.2.23:
@@ -11583,15 +11643,15 @@ packages: @@ -11583,15 +11643,15 @@ packages:
11583 vue: 3.2.23 11643 vue: 3.2.23
11584 dev: false 11644 dev: false
11585 11645
11586 - /vue-tsc/0.29.6_typescript@4.5.2:  
11587 - resolution: {integrity: sha512-P0vBtyS19vacn97qJtx+ZaJzPq/vNA42D8oe+FT9dhCeiey3+nvuyzHVzYGK1/AQYaMGq6FAP+scK1hQtSQk7g==} 11646 + /vue-tsc/0.29.7_typescript@4.5.2:
  11647 + resolution: {integrity: sha512-8jCGovixOZgV6Qu9nOyoTon3HUNUG9YD8cnMHUCGqdu/H21P5D+4k/d8rHzpGvbUlwq5dP2pFCx6rmRwfTfDmA==}
11588 hasBin: true 11648 hasBin: true
11589 peerDependencies: 11649 peerDependencies:
11590 typescript: '*' 11650 typescript: '*'
11591 dependencies: 11651 dependencies:
11592 - '@volar/shared': 0.29.6 11652 + '@volar/shared': 0.29.7
11593 typescript: 4.5.2 11653 typescript: 4.5.2
11594 - vscode-vue-languageservice: 0.29.6 11654 + vscode-vue-languageservice: 0.29.7
11595 dev: true 11655 dev: true
11596 11656
11597 /vue-types/3.0.2_vue@3.2.23: 11657 /vue-types/3.0.2_vue@3.2.23:
src/components/Tree/index.ts
1 import BasicTree from './src/Tree.vue'; 1 import BasicTree from './src/Tree.vue';
  2 +import './style';
2 3
3 export { BasicTree }; 4 export { BasicTree };
4 export type { ContextMenuItem } from '/@/hooks/web/useContextMenu'; 5 export type { ContextMenuItem } from '/@/hooks/web/useContextMenu';
5 -export * from './src/typing'; 6 +export * from './src/tree';
src/components/Tree/src/Tree.vue
1 <script lang="tsx"> 1 <script lang="tsx">
2 - import type { ReplaceFields, Keys, CheckKeys, TreeActionType, TreeItem } from './typing';  
3 - import type { CheckEvent } from './typing'; 2 + import type { CSSProperties } from 'vue';
  3 + import type { FieldNames, TreeState, TreeItem, KeyType, CheckKeys, TreeActionType } from './tree';
4 4
5 import { 5 import {
6 defineComponent, 6 defineComponent,
@@ -11,43 +11,31 @@ @@ -11,43 +11,31 @@
11 watchEffect, 11 watchEffect,
12 toRaw, 12 toRaw,
13 watch, 13 watch,
14 - CSSProperties,  
15 onMounted, 14 onMounted,
16 } from 'vue'; 15 } from 'vue';
17 import { Tree, Empty } from 'ant-design-vue'; 16 import { Tree, Empty } from 'ant-design-vue';
18 import { TreeIcon } from './TreeIcon'; 17 import { TreeIcon } from './TreeIcon';
19 import { ScrollContainer } from '/@/components/Container'; 18 import { ScrollContainer } from '/@/components/Container';
20 - import { omit, get, difference } from 'lodash-es'; 19 + import { omit, get, difference, cloneDeep } from 'lodash-es';
21 import { isArray, isBoolean, isEmpty, isFunction } from '/@/utils/is'; 20 import { isArray, isBoolean, isEmpty, isFunction } from '/@/utils/is';
22 import { extendSlots, getSlot } from '/@/utils/helper/tsxHelper'; 21 import { extendSlots, getSlot } from '/@/utils/helper/tsxHelper';
23 import { filter, treeToList } from '/@/utils/helper/treeHelper'; 22 import { filter, treeToList } from '/@/utils/helper/treeHelper';
24 import { useTree } from './useTree'; 23 import { useTree } from './useTree';
25 import { useContextMenu } from '/@/hooks/web/useContextMenu'; 24 import { useContextMenu } from '/@/hooks/web/useContextMenu';
26 - import { useDesign } from '/@/hooks/web/useDesign';  
27 - import { basicProps } from './props';  
28 import { CreateContextOptions } from '/@/components/ContextMenu'; 25 import { CreateContextOptions } from '/@/components/ContextMenu';
29 import TreeHeader from './TreeHeader.vue'; 26 import TreeHeader from './TreeHeader.vue';
  27 + import { treeEmits, treeProps } from './tree';
  28 + import { createBEM } from '/@/utils/bem';
30 29
31 - interface State {  
32 - expandedKeys: Keys;  
33 - selectedKeys: Keys;  
34 - checkedKeys: CheckKeys;  
35 - checkStrictly: boolean;  
36 - }  
37 export default defineComponent({ 30 export default defineComponent({
38 name: 'BasicTree', 31 name: 'BasicTree',
39 inheritAttrs: false, 32 inheritAttrs: false,
40 - props: basicProps,  
41 - emits: [  
42 - 'update:expandedKeys',  
43 - 'update:selectedKeys',  
44 - 'update:value',  
45 - 'change',  
46 - 'check',  
47 - 'update:searchValue',  
48 - ], 33 + props: treeProps,
  34 + emits: treeEmits,
49 setup(props, { attrs, slots, emit, expose }) { 35 setup(props, { attrs, slots, emit, expose }) {
50 - const state = reactive<State>({ 36 + const [bem] = createBEM('tree');
  37 +
  38 + const state = reactive<TreeState>({
51 checkStrictly: props.checkStrictly, 39 checkStrictly: props.checkStrictly,
52 expandedKeys: props.expandedKeys || [], 40 expandedKeys: props.expandedKeys || [],
53 selectedKeys: props.selectedKeys || [], 41 selectedKeys: props.selectedKeys || [],
@@ -63,15 +51,14 @@ @@ -63,15 +51,14 @@
63 const treeDataRef = ref<TreeItem[]>([]); 51 const treeDataRef = ref<TreeItem[]>([]);
64 52
65 const [createContextMenu] = useContextMenu(); 53 const [createContextMenu] = useContextMenu();
66 - const { prefixCls } = useDesign('basic-tree');  
67 54
68 - const getReplaceFields = computed((): Required<ReplaceFields> => {  
69 - const { replaceFields } = props; 55 + const getFieldNames = computed((): Required<FieldNames> => {
  56 + const { fieldNames } = props;
70 return { 57 return {
71 children: 'children', 58 children: 'children',
72 title: 'title', 59 title: 'title',
73 key: 'key', 60 key: 'key',
74 - ...replaceFields, 61 + ...fieldNames,
75 }; 62 };
76 }); 63 });
77 64
@@ -84,19 +71,19 @@ @@ -84,19 +71,19 @@
84 selectedKeys: state.selectedKeys, 71 selectedKeys: state.selectedKeys,
85 checkedKeys: state.checkedKeys, 72 checkedKeys: state.checkedKeys,
86 checkStrictly: state.checkStrictly, 73 checkStrictly: state.checkStrictly,
87 - replaceFields: unref(getReplaceFields),  
88 - 'onUpdate:expandedKeys': (v: Keys) => { 74 + filedNames: unref(getFieldNames),
  75 + 'onUpdate:expandedKeys': (v: KeyType[]) => {
89 state.expandedKeys = v; 76 state.expandedKeys = v;
90 emit('update:expandedKeys', v); 77 emit('update:expandedKeys', v);
91 }, 78 },
92 - 'onUpdate:selectedKeys': (v: Keys) => { 79 + 'onUpdate:selectedKeys': (v: KeyType[]) => {
93 state.selectedKeys = v; 80 state.selectedKeys = v;
94 emit('update:selectedKeys', v); 81 emit('update:selectedKeys', v);
95 }, 82 },
96 - onCheck: (v: CheckKeys, e: CheckEvent) => {  
97 - let currentValue = toRaw(state.checkedKeys) as Keys; 83 + onCheck: (v: CheckKeys, e) => {
  84 + let currentValue = toRaw(state.checkedKeys) as KeyType[];
98 if (isArray(currentValue) && searchState.startSearch) { 85 if (isArray(currentValue) && searchState.startSearch) {
99 - const { key } = unref(getReplaceFields); 86 + const { key } = unref(getFieldNames);
100 currentValue = difference(currentValue, getChildrenKeys(e.node.$attrs.node[key])); 87 currentValue = difference(currentValue, getChildrenKeys(e.node.$attrs.node[key]));
101 if (e.checked) { 88 if (e.checked) {
102 currentValue.push(e.node.$attrs.node[key]); 89 currentValue.push(e.node.$attrs.node[key]);
@@ -132,7 +119,7 @@ @@ -132,7 +119,7 @@
132 getAllKeys, 119 getAllKeys,
133 getChildrenKeys, 120 getChildrenKeys,
134 getEnabledKeys, 121 getEnabledKeys,
135 - } = useTree(treeDataRef, getReplaceFields); 122 + } = useTree(treeDataRef, getFieldNames);
136 123
137 function getIcon(params: Recordable, icon?: string) { 124 function getIcon(params: Recordable, icon?: string) {
138 if (!icon) { 125 if (!icon) {
@@ -161,14 +148,14 @@ @@ -161,14 +148,14 @@
161 createContextMenu(contextMenuOptions); 148 createContextMenu(contextMenuOptions);
162 } 149 }
163 150
164 - function setExpandedKeys(keys: Keys) { 151 + function setExpandedKeys(keys: KeyType[]) {
165 state.expandedKeys = keys; 152 state.expandedKeys = keys;
166 } 153 }
167 154
168 function getExpandedKeys() { 155 function getExpandedKeys() {
169 return state.expandedKeys; 156 return state.expandedKeys;
170 } 157 }
171 - function setSelectedKeys(keys: Keys) { 158 + function setSelectedKeys(keys: KeyType[]) {
172 state.selectedKeys = keys; 159 state.selectedKeys = keys;
173 } 160 }
174 161
@@ -185,11 +172,11 @@ @@ -185,11 +172,11 @@
185 } 172 }
186 173
187 function checkAll(checkAll: boolean) { 174 function checkAll(checkAll: boolean) {
188 - state.checkedKeys = checkAll ? getEnabledKeys() : ([] as Keys); 175 + state.checkedKeys = checkAll ? getEnabledKeys() : ([] as KeyType[]);
189 } 176 }
190 177
191 function expandAll(expandAll: boolean) { 178 function expandAll(expandAll: boolean) {
192 - state.expandedKeys = expandAll ? getAllKeys() : ([] as Keys); 179 + state.expandedKeys = expandAll ? getAllKeys() : ([] as KeyType[]);
193 } 180 }
194 181
195 function onStrictlyChange(strictly: boolean) { 182 function onStrictlyChange(strictly: boolean) {
@@ -227,21 +214,21 @@ @@ -227,21 +214,21 @@
227 const { filterFn, checkable, expandOnSearch, checkOnSearch, selectedOnSearch } = 214 const { filterFn, checkable, expandOnSearch, checkOnSearch, selectedOnSearch } =
228 unref(props); 215 unref(props);
229 searchState.startSearch = true; 216 searchState.startSearch = true;
230 - const { title: titleField, key: keyField } = unref(getReplaceFields); 217 + const { title: titleField, key: keyField } = unref(getFieldNames);
231 218
232 const matchedKeys: string[] = []; 219 const matchedKeys: string[] = [];
233 searchState.searchData = filter( 220 searchState.searchData = filter(
234 unref(treeDataRef), 221 unref(treeDataRef),
235 (node) => { 222 (node) => {
236 const result = filterFn 223 const result = filterFn
237 - ? filterFn(searchValue, node, unref(getReplaceFields)) 224 + ? filterFn(searchValue, node, unref(getFieldNames))
238 : node[titleField]?.includes(searchValue) ?? false; 225 : node[titleField]?.includes(searchValue) ?? false;
239 if (result) { 226 if (result) {
240 matchedKeys.push(node[keyField]); 227 matchedKeys.push(node[keyField]);
241 } 228 }
242 return result; 229 return result;
243 }, 230 },
244 - unref(getReplaceFields), 231 + unref(getFieldNames),
245 ); 232 );
246 233
247 if (expandOnSearch) { 234 if (expandOnSearch) {
@@ -317,15 +304,6 @@ @@ -317,15 +304,6 @@
317 }, 304 },
318 ); 305 );
319 306
320 - // watchEffect(() => {  
321 - // console.log('======================');  
322 - // console.log(props.value);  
323 - // console.log('======================');  
324 - // if (props.value) {  
325 - // state.checkedKeys = props.value;  
326 - // }  
327 - // });  
328 -  
329 watchEffect(() => { 307 watchEffect(() => {
330 state.checkStrictly = props.checkStrictly; 308 state.checkStrictly = props.checkStrictly;
331 }); 309 });
@@ -354,8 +332,6 @@ @@ -354,8 +332,6 @@
354 }, 332 },
355 }; 333 };
356 334
357 - expose(instance);  
358 -  
359 function renderAction(node: TreeItem) { 335 function renderAction(node: TreeItem) {
360 const { actionList } = props; 336 const { actionList } = props;
361 if (!actionList || actionList.length === 0) return; 337 if (!actionList || actionList.length === 0) return;
@@ -370,29 +346,25 @@ @@ -370,29 +346,25 @@
370 if (!nodeShow) return null; 346 if (!nodeShow) return null;
371 347
372 return ( 348 return (
373 - <span key={index} class={`${prefixCls}__action`}> 349 + <span key={index} class={bem('action')}>
374 {item.render(node)} 350 {item.render(node)}
375 </span> 351 </span>
376 ); 352 );
377 }); 353 });
378 } 354 }
379 355
380 - function renderTreeNode({ data, level }: { data: TreeItem[] | undefined; level: number }) {  
381 - if (!data) {  
382 - return null;  
383 - }  
384 - const searchText = searchState.searchText;  
385 - const { highlight } = unref(props);  
386 - return data.map((item) => { 356 + const treeData = computed(() => {
  357 + const data = cloneDeep(getTreeData.value);
  358 + data.forEach((item) => {
  359 + const searchText = searchState.searchText;
  360 + const { highlight } = unref(props);
387 const { 361 const {
388 title: titleField, 362 title: titleField,
389 key: keyField, 363 key: keyField,
390 children: childrenField, 364 children: childrenField,
391 - } = unref(getReplaceFields); 365 + } = unref(getFieldNames);
392 366
393 - const propsData = omit(item, 'title');  
394 - const icon = getIcon({ ...item, level }, item.icon);  
395 - const children = get(item, childrenField) || []; 367 + const icon = getIcon(item, item.icon);
396 const title = get(item, titleField); 368 const title = get(item, titleField);
397 369
398 const searchIdx = searchText ? title.indexOf(searchText) : -1; 370 const searchIdx = searchText ? title.indexOf(searchText) : -1;
@@ -401,7 +373,7 @@ @@ -401,7 +373,7 @@
401 const highlightStyle = `color: ${isBoolean(highlight) ? '#f50' : highlight}`; 373 const highlightStyle = `color: ${isBoolean(highlight) ? '#f50' : highlight}`;
402 374
403 const titleDom = isHighlight ? ( 375 const titleDom = isHighlight ? (
404 - <span class={unref(getBindValues)?.blockNode ? `${prefixCls}__content` : ''}> 376 + <span class={unref(getBindValues)?.blockNode ? `${bem('content')}` : ''}>
405 <span>{title.substr(0, searchIdx)}</span> 377 <span>{title.substr(0, searchIdx)}</span>
406 <span style={highlightStyle}>{searchText}</span> 378 <span style={highlightStyle}>{searchText}</span>
407 <span>{title.substr(searchIdx + (searchText as string).length)}</span> 379 <span>{title.substr(searchIdx + (searchText as string).length)}</span>
@@ -409,41 +381,34 @@ @@ -409,41 +381,34 @@
409 ) : ( 381 ) : (
410 title 382 title
411 ); 383 );
412 -  
413 - return (  
414 - <Tree.TreeNode {...propsData} node={toRaw(item)} key={get(item, keyField)}>  
415 - {{  
416 - title: () => (  
417 - <span  
418 - class={`${prefixCls}-title pl-2`}  
419 - onClick={handleClickNode.bind(null, item[keyField], item[childrenField])}  
420 - >  
421 - {item.slots?.title ? (  
422 - getSlot(slots, item.slots?.title, item)  
423 - ) : (  
424 - <>  
425 - {icon && <TreeIcon icon={icon} />}  
426 - {titleDom}  
427 - {/*{get(item, titleField)}*/}  
428 - <span class={`${prefixCls}__actions`}>  
429 - {renderAction({ ...item, level })}  
430 - </span>  
431 - </>  
432 - )}  
433 - </span>  
434 - ),  
435 - default: () => renderTreeNode({ data: children, level: level + 1 }),  
436 - }}  
437 - </Tree.TreeNode> 384 + item.title = (
  385 + <span
  386 + class={`${bem('title')} pl-2`}
  387 + onClick={handleClickNode.bind(null, item[keyField], item[childrenField])}
  388 + >
  389 + {item.slots?.title ? (
  390 + getSlot(slots, item.slots?.title, item)
  391 + ) : (
  392 + <>
  393 + {icon && <TreeIcon icon={icon} />}
  394 + {titleDom}
  395 + <span class={bem('actions')}>{renderAction(item)}</span>
  396 + </>
  397 + )}
  398 + </span>
438 ); 399 );
439 }); 400 });
440 - } 401 + return data;
  402 + });
  403 +
  404 + expose(instance);
  405 +
441 return () => { 406 return () => {
442 const { title, helpMessage, toolbar, search, checkable } = props; 407 const { title, helpMessage, toolbar, search, checkable } = props;
443 const showTitle = title || toolbar || search || slots.headerTitle; 408 const showTitle = title || toolbar || search || slots.headerTitle;
444 const scrollStyle: CSSProperties = { height: 'calc(100% - 38px)' }; 409 const scrollStyle: CSSProperties = { height: 'calc(100% - 38px)' };
445 return ( 410 return (
446 - <div class={[prefixCls, 'h-full', attrs.class]}> 411 + <div class={[bem(), 'h-full', attrs.class]}>
447 {showTitle && ( 412 {showTitle && (
448 <TreeHeader 413 <TreeHeader
449 checkable={checkable} 414 checkable={checkable}
@@ -461,15 +426,10 @@ @@ -461,15 +426,10 @@
461 </TreeHeader> 426 </TreeHeader>
462 )} 427 )}
463 <ScrollContainer style={scrollStyle} v-show={!unref(getNotFound)}> 428 <ScrollContainer style={scrollStyle} v-show={!unref(getNotFound)}>
464 - <Tree {...unref(getBindValues)} showIcon={false}>  
465 - {{  
466 - // switcherIcon: () => <DownOutlined />,  
467 - default: () => renderTreeNode({ data: unref(getTreeData), level: 1 }),  
468 - ...extendSlots(slots),  
469 - }} 429 + <Tree {...unref(getBindValues)} showIcon={false} treeData={treeData.value}>
  430 + {extendSlots(slots)}
470 </Tree> 431 </Tree>
471 </ScrollContainer> 432 </ScrollContainer>
472 -  
473 <Empty v-show={unref(getNotFound)} image={Empty.PRESENTED_IMAGE_SIMPLE} class="!mt-4" /> 433 <Empty v-show={unref(getNotFound)} image={Empty.PRESENTED_IMAGE_SIMPLE} class="!mt-4" />
474 </div> 434 </div>
475 ); 435 );
@@ -477,50 +437,3 @@ @@ -477,50 +437,3 @@
477 }, 437 },
478 }); 438 });
479 </script> 439 </script>
480 -<style lang="less">  
481 - @prefix-cls: ~'@{namespace}-basic-tree';  
482 -  
483 - .@{prefix-cls} {  
484 - background-color: @component-background;  
485 -  
486 - .ant-tree-node-content-wrapper {  
487 - position: relative;  
488 -  
489 - .ant-tree-title {  
490 - position: absolute;  
491 - left: 0;  
492 - width: 100%;  
493 - }  
494 - }  
495 -  
496 - &-title {  
497 - position: relative;  
498 - display: flex;  
499 - align-items: center;  
500 - width: 100%;  
501 - padding-right: 10px;  
502 -  
503 - &:hover {  
504 - .@{prefix-cls}__action {  
505 - visibility: visible;  
506 - }  
507 - }  
508 - }  
509 -  
510 - &__content {  
511 - overflow: hidden;  
512 - }  
513 -  
514 - &__actions {  
515 - position: absolute;  
516 - top: 2px;  
517 - right: 3px;  
518 - display: flex;  
519 - }  
520 -  
521 - &__action {  
522 - margin-left: 4px;  
523 - visibility: hidden;  
524 - }  
525 - }  
526 -</style>  
src/components/Tree/src/TreeHeader.vue
1 <template> 1 <template>
2 - <div class="flex px-2 py-1.5 items-center basic-tree-header">  
3 - <slot name="headerTitle" v-if="$slots.headerTitle"></slot>  
4 - <BasicTitle :helpMessage="helpMessage" v-if="!$slots.headerTitle && title"> 2 + <div :class="bem()" class="flex px-2 py-1.5 items-center">
  3 + <slot name="headerTitle" v-if="slots.headerTitle"></slot>
  4 + <BasicTitle :helpMessage="helpMessage" v-if="!slots.headerTitle && title">
5 {{ title }} 5 {{ title }}
6 </BasicTitle> 6 </BasicTitle>
7 -  
8 <div 7 <div
9 class="flex flex-1 justify-self-stretch items-center cursor-pointer" 8 class="flex flex-1 justify-self-stretch items-center cursor-pointer"
10 v-if="search || toolbar" 9 v-if="search || toolbar"
@@ -33,148 +32,140 @@ @@ -33,148 +32,140 @@
33 </div> 32 </div>
34 </div> 33 </div>
35 </template> 34 </template>
36 -<script lang="ts">  
37 - import { PropType } from 'vue';  
38 - import { defineComponent, computed, ref, watch } from 'vue';  
39 -  
40 - import { Dropdown, Menu, Input } from 'ant-design-vue'; 35 +<script lang="ts" setup>
  36 + import { computed, ref, watch, useSlots } from 'vue';
  37 + import { Dropdown, Menu, MenuItem, MenuDivider, InputSearch } from 'ant-design-vue';
41 import { Icon } from '/@/components/Icon'; 38 import { Icon } from '/@/components/Icon';
42 import { BasicTitle } from '/@/components/Basic'; 39 import { BasicTitle } from '/@/components/Basic';
43 -  
44 - import { propTypes } from '/@/utils/propTypes';  
45 -  
46 import { useI18n } from '/@/hooks/web/useI18n'; 40 import { useI18n } from '/@/hooks/web/useI18n';
47 import { useDebounceFn } from '@vueuse/core'; 41 import { useDebounceFn } from '@vueuse/core';
  42 + import { createBEM } from '/@/utils/bem';
  43 + import { ToolbarEnum } from './tree';
48 44
49 - enum ToolbarEnum {  
50 - SELECT_ALL,  
51 - UN_SELECT_ALL,  
52 - EXPAND_ALL,  
53 - UN_EXPAND_ALL,  
54 - CHECK_STRICTLY,  
55 - CHECK_UN_STRICTLY,  
56 - } 45 + const searchValue = ref('');
57 46
58 - interface MenuInfo {  
59 - key: ToolbarEnum;  
60 - }  
61 - export default defineComponent({  
62 - name: 'BasicTreeHeader',  
63 - components: {  
64 - BasicTitle,  
65 - Icon,  
66 - Dropdown,  
67 - Menu,  
68 - MenuItem: Menu.Item,  
69 - MenuDivider: Menu.Divider,  
70 - InputSearch: Input.Search, 47 + const [bem] = createBEM('tree-header');
  48 +
  49 + // eslint-disable vue/valid-define-emits
  50 + const props = defineProps({
  51 + helpMessage: {
  52 + type: [String, Array] as PropType<string | string[]>,
  53 + default: '',
71 }, 54 },
72 - props: {  
73 - helpMessage: {  
74 - type: [String, Array] as PropType<string | string[]>,  
75 - default: '',  
76 - },  
77 - title: propTypes.string,  
78 - toolbar: propTypes.bool,  
79 - checkable: propTypes.bool,  
80 - search: propTypes.bool,  
81 - checkAll: propTypes.func,  
82 - expandAll: propTypes.func,  
83 - searchText: propTypes.string, 55 + title: {
  56 + type: String,
  57 + default: '',
84 }, 58 },
85 - emits: ['strictly-change', 'search'],  
86 - setup(props, { emit, slots }) {  
87 - const { t } = useI18n();  
88 - const searchValue = ref(''); 59 + toolbar: {
  60 + type: Boolean,
  61 + default: false,
  62 + },
  63 + checkable: {
  64 + type: Boolean,
  65 + default: false,
  66 + },
  67 + search: {
  68 + type: Boolean,
  69 + default: false,
  70 + },
  71 + searchText: {
  72 + type: String,
  73 + default: '',
  74 + },
  75 + checkAll: {
  76 + type: Function,
  77 + default: undefined,
  78 + },
  79 + expandAll: {
  80 + type: Function,
  81 + default: undefined,
  82 + },
  83 + } as const);
  84 + const emit = defineEmits(['strictly-change', 'search']);
89 85
90 - const getInputSearchCls = computed(() => {  
91 - const titleExists = slots.headerTitle || props.title;  
92 - return [  
93 - 'mr-1',  
94 - 'w-full',  
95 - // titleExists ? 'w-2/3' : 'w-full',  
96 - {  
97 - ['ml-5']: titleExists,  
98 - },  
99 - ];  
100 - }); 86 + const slots = useSlots();
  87 + const { t } = useI18n();
  88 +
  89 + const getInputSearchCls = computed(() => {
  90 + const titleExists = slots.headerTitle || props.title;
  91 + return [
  92 + 'mr-1',
  93 + 'w-full',
  94 + {
  95 + ['ml-5']: titleExists,
  96 + },
  97 + ];
  98 + });
101 99
102 - const toolbarList = computed(() => {  
103 - const { checkable } = props;  
104 - const defaultToolbarList = [  
105 - { label: t('component.tree.expandAll'), value: ToolbarEnum.EXPAND_ALL }, 100 + const toolbarList = computed(() => {
  101 + const { checkable } = props;
  102 + const defaultToolbarList = [
  103 + { label: t('component.tree.expandAll'), value: ToolbarEnum.EXPAND_ALL },
  104 + {
  105 + label: t('component.tree.unExpandAll'),
  106 + value: ToolbarEnum.UN_EXPAND_ALL,
  107 + divider: checkable,
  108 + },
  109 + ];
  110 +
  111 + return checkable
  112 + ? [
  113 + { label: t('component.tree.selectAll'), value: ToolbarEnum.SELECT_ALL },
106 { 114 {
107 - label: t('component.tree.unExpandAll'),  
108 - value: ToolbarEnum.UN_EXPAND_ALL, 115 + label: t('component.tree.unSelectAll'),
  116 + value: ToolbarEnum.UN_SELECT_ALL,
109 divider: checkable, 117 divider: checkable,
110 }, 118 },
111 - ]; 119 + ...defaultToolbarList,
  120 + { label: t('component.tree.checkStrictly'), value: ToolbarEnum.CHECK_STRICTLY },
  121 + { label: t('component.tree.checkUnStrictly'), value: ToolbarEnum.CHECK_UN_STRICTLY },
  122 + ]
  123 + : defaultToolbarList;
  124 + });
112 125
113 - return checkable  
114 - ? [  
115 - { label: t('component.tree.selectAll'), value: ToolbarEnum.SELECT_ALL },  
116 - {  
117 - label: t('component.tree.unSelectAll'),  
118 - value: ToolbarEnum.UN_SELECT_ALL,  
119 - divider: checkable,  
120 - },  
121 - ...defaultToolbarList,  
122 - { label: t('component.tree.checkStrictly'), value: ToolbarEnum.CHECK_STRICTLY },  
123 - { label: t('component.tree.checkUnStrictly'), value: ToolbarEnum.CHECK_UN_STRICTLY },  
124 - ]  
125 - : defaultToolbarList;  
126 - }); 126 + function handleMenuClick(e: { key: ToolbarEnum }) {
  127 + const { key } = e;
  128 + switch (key) {
  129 + case ToolbarEnum.SELECT_ALL:
  130 + props.checkAll?.(true);
  131 + break;
  132 + case ToolbarEnum.UN_SELECT_ALL:
  133 + props.checkAll?.(false);
  134 + break;
  135 + case ToolbarEnum.EXPAND_ALL:
  136 + props.expandAll?.(true);
  137 + break;
  138 + case ToolbarEnum.UN_EXPAND_ALL:
  139 + props.expandAll?.(false);
  140 + break;
  141 + case ToolbarEnum.CHECK_STRICTLY:
  142 + emit('strictly-change', false);
  143 + break;
  144 + case ToolbarEnum.CHECK_UN_STRICTLY:
  145 + emit('strictly-change', true);
  146 + break;
  147 + }
  148 + }
127 149
128 - function handleMenuClick(e: MenuInfo) {  
129 - const { key } = e;  
130 - switch (key) {  
131 - case ToolbarEnum.SELECT_ALL:  
132 - props.checkAll?.(true);  
133 - break;  
134 - case ToolbarEnum.UN_SELECT_ALL:  
135 - props.checkAll?.(false);  
136 - break;  
137 - case ToolbarEnum.EXPAND_ALL:  
138 - props.expandAll?.(true);  
139 - break;  
140 - case ToolbarEnum.UN_EXPAND_ALL:  
141 - props.expandAll?.(false);  
142 - break;  
143 - case ToolbarEnum.CHECK_STRICTLY:  
144 - emit('strictly-change', false);  
145 - break;  
146 - case ToolbarEnum.CHECK_UN_STRICTLY:  
147 - emit('strictly-change', true);  
148 - break;  
149 - }  
150 - } 150 + function emitChange(value?: string): void {
  151 + emit('search', value);
  152 + }
151 153
152 - function emitChange(value?: string): void {  
153 - emit('search', value);  
154 - }  
155 - const debounceEmitChange = useDebounceFn(emitChange, 200); 154 + const debounceEmitChange = useDebounceFn(emitChange, 200);
156 155
157 - watch(  
158 - () => searchValue.value,  
159 - (v) => {  
160 - debounceEmitChange(v);  
161 - },  
162 - );  
163 - watch(  
164 - () => props.searchText,  
165 - (v) => {  
166 - if (v !== searchValue.value) {  
167 - searchValue.value = v;  
168 - }  
169 - },  
170 - ); 156 + watch(
  157 + () => searchValue.value,
  158 + (v) => {
  159 + debounceEmitChange(v);
  160 + },
  161 + );
171 162
172 - return { t, toolbarList, handleMenuClick, searchValue, getInputSearchCls }; 163 + watch(
  164 + () => props.searchText,
  165 + (v) => {
  166 + if (v !== searchValue.value) {
  167 + searchValue.value = v;
  168 + }
173 }, 169 },
174 - }); 170 + );
175 </script> 171 </script>
176 -<style lang="less" scoped>  
177 - .basic-tree-header {  
178 - border-bottom: 1px solid @border-color-base;  
179 - }  
180 -</style>  
src/components/Tree/src/TreeIcon.ts
1 import type { VNode, FunctionalComponent } from 'vue'; 1 import type { VNode, FunctionalComponent } from 'vue';
2 2
3 import { h } from 'vue'; 3 import { h } from 'vue';
4 -import { isString } from '/@/utils/is'; 4 +import { isString } from '@vue/shared';
5 import { Icon } from '/@/components/Icon'; 5 import { Icon } from '/@/components/Icon';
6 6
7 -export interface ComponentProps {  
8 - icon: VNode | string;  
9 -}  
10 -  
11 -export const TreeIcon: FunctionalComponent = ({ icon }: ComponentProps) => { 7 +export const TreeIcon: FunctionalComponent = ({ icon }: { icon: VNode | string }) => {
12 if (!icon) return null; 8 if (!icon) return null;
13 if (isString(icon)) { 9 if (isString(icon)) {
14 return h(Icon, { icon, class: 'mr-1' }); 10 return h(Icon, { icon, class: 'mr-1' });
src/components/Tree/src/props.ts deleted 100644 → 0
1 -import type { PropType } from 'vue';  
2 -import type {  
3 - ReplaceFields,  
4 - ActionItem,  
5 - Keys,  
6 - CheckKeys,  
7 - ContextMenuOptions,  
8 - TreeItem,  
9 -} from './typing';  
10 -import type { ContextMenuItem } from '/@/hooks/web/useContextMenu';  
11 -import type { TreeDataItem } from 'ant-design-vue/es/tree';  
12 -import { propTypes } from '/@/utils/propTypes';  
13 -  
14 -export const basicProps = {  
15 - value: {  
16 - type: [Object, Array] as PropType<Keys | CheckKeys>,  
17 - },  
18 - renderIcon: {  
19 - type: Function as PropType<(params: Recordable) => string>,  
20 - },  
21 -  
22 - helpMessage: {  
23 - type: [String, Array] as PropType<string | string[]>,  
24 - default: '',  
25 - },  
26 -  
27 - title: propTypes.string,  
28 - toolbar: propTypes.bool,  
29 - search: propTypes.bool,  
30 - searchValue: propTypes.string,  
31 - checkStrictly: propTypes.bool,  
32 - clickRowToExpand: propTypes.bool.def(true),  
33 - checkable: propTypes.bool.def(false),  
34 - defaultExpandLevel: {  
35 - type: [String, Number] as PropType<string | number>,  
36 - default: '',  
37 - },  
38 - defaultExpandAll: propTypes.bool.def(false),  
39 -  
40 - replaceFields: {  
41 - type: Object as PropType<ReplaceFields>,  
42 - },  
43 -  
44 - treeData: {  
45 - type: Array as PropType<TreeDataItem[]>,  
46 - },  
47 -  
48 - actionList: {  
49 - type: Array as PropType<ActionItem[]>,  
50 - default: () => [],  
51 - },  
52 -  
53 - expandedKeys: {  
54 - type: Array as PropType<Keys>,  
55 - default: () => [],  
56 - },  
57 -  
58 - selectedKeys: {  
59 - type: Array as PropType<Keys>,  
60 - default: () => [],  
61 - },  
62 -  
63 - checkedKeys: {  
64 - type: Array as PropType<CheckKeys>,  
65 - default: () => [],  
66 - },  
67 -  
68 - beforeRightClick: {  
69 - type: Function as PropType<(...arg: any) => ContextMenuItem[] | ContextMenuOptions>,  
70 - default: null,  
71 - },  
72 -  
73 - rightMenuList: {  
74 - type: Array as PropType<ContextMenuItem[]>,  
75 - },  
76 - // 自定义数据过滤判断方法(注: 不是整个过滤方法,而是内置过滤的判断方法,用于增强原本仅能通过title进行过滤的方式)  
77 - filterFn: {  
78 - type: Function as PropType<  
79 - (searchValue: any, node: TreeItem, replaceFields: ReplaceFields) => boolean  
80 - >,  
81 - default: null,  
82 - },  
83 - // 高亮搜索值,仅高亮具体匹配值(通过title)值为true时使用默认色值,值为#xxx时使用此值替代且高亮开启  
84 - highlight: {  
85 - type: [Boolean, String] as PropType<Boolean | String>,  
86 - default: false,  
87 - },  
88 - // 搜索完成时自动展开结果  
89 - expandOnSearch: propTypes.bool.def(false),  
90 - // 搜索完成自动选中所有结果,当且仅当 checkable===true 时生效  
91 - checkOnSearch: propTypes.bool.def(false),  
92 - // 搜索完成自动select所有结果  
93 - selectedOnSearch: propTypes.bool.def(false),  
94 -};  
95 -  
96 -export const treeNodeProps = {  
97 - actionList: {  
98 - type: Array as PropType<ActionItem[]>,  
99 - default: () => [],  
100 - },  
101 - replaceFields: {  
102 - type: Object as PropType<ReplaceFields>,  
103 - },  
104 - treeData: {  
105 - type: Array as PropType<TreeDataItem[]>,  
106 - default: () => [],  
107 - },  
108 -};  
src/components/Tree/src/tree.ts
  1 +import type { ExtractPropTypes } from 'vue';
  2 +import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
  3 +
  4 +import { buildProps } from '/@/utils/props';
  5 +
  6 +export enum ToolbarEnum {
  7 + SELECT_ALL,
  8 + UN_SELECT_ALL,
  9 + EXPAND_ALL,
  10 + UN_EXPAND_ALL,
  11 + CHECK_STRICTLY,
  12 + CHECK_UN_STRICTLY,
  13 +}
  14 +
  15 +export const treeEmits = [
  16 + 'update:expandedKeys',
  17 + 'update:selectedKeys',
  18 + 'update:value',
  19 + 'change',
  20 + 'check',
  21 + 'update:searchValue',
  22 +];
  23 +
  24 +export interface TreeState {
  25 + expandedKeys: KeyType[];
  26 + selectedKeys: KeyType[];
  27 + checkedKeys: CheckKeys;
  28 + checkStrictly: boolean;
  29 +}
  30 +
  31 +export interface FieldNames {
  32 + children?: string;
  33 + title?: string;
  34 + key?: string;
  35 +}
  36 +
  37 +export type KeyType = string | number;
  38 +
  39 +export type CheckKeys =
  40 + | KeyType[]
  41 + | { checked: string[] | number[]; halfChecked: string[] | number[] };
  42 +
  43 +export const treeProps = buildProps({
  44 + value: {
  45 + type: [Object, Array] as PropType<KeyType[] | CheckKeys>,
  46 + },
  47 +
  48 + renderIcon: {
  49 + type: Function as PropType<(params: Recordable) => string>,
  50 + },
  51 +
  52 + helpMessage: {
  53 + type: [String, Array] as PropType<string | string[]>,
  54 + default: '',
  55 + },
  56 +
  57 + title: {
  58 + type: String,
  59 + default: '',
  60 + },
  61 + toolbar: Boolean,
  62 + search: Boolean,
  63 + searchValue: {
  64 + type: String,
  65 + default: '',
  66 + },
  67 + checkStrictly: Boolean,
  68 + clickRowToExpand: {
  69 + type: Boolean,
  70 + default: false,
  71 + },
  72 + checkable: Boolean,
  73 + defaultExpandLevel: {
  74 + type: [String, Number] as PropType<string | number>,
  75 + default: '',
  76 + },
  77 + defaultExpandAll: Boolean,
  78 +
  79 + fieldNames: {
  80 + type: Object as PropType<FieldNames>,
  81 + },
  82 +
  83 + treeData: {
  84 + type: Array as PropType<TreeDataItem[]>,
  85 + },
  86 +
  87 + actionList: {
  88 + type: Array as PropType<TreeActionItem[]>,
  89 + default: () => [],
  90 + },
  91 +
  92 + expandedKeys: {
  93 + type: Array as PropType<KeyType[]>,
  94 + default: () => [],
  95 + },
  96 +
  97 + selectedKeys: {
  98 + type: Array as PropType<KeyType[]>,
  99 + default: () => [],
  100 + },
  101 +
  102 + checkedKeys: {
  103 + type: Array as PropType<CheckKeys>,
  104 + default: () => [],
  105 + },
  106 +
  107 + beforeRightClick: {
  108 + type: Function as PropType<(...arg: any) => ContextMenuItem[] | ContextMenuOptions>,
  109 + default: undefined,
  110 + },
  111 +
  112 + rightMenuList: {
  113 + type: Array as PropType<ContextMenuItem[]>,
  114 + },
  115 + // 自定义数据过滤判断方法(注: 不是整个过滤方法,而是内置过滤的判断方法,用于增强原本仅能通过title进行过滤的方式)
  116 + filterFn: {
  117 + type: Function as PropType<
  118 + (searchValue: any, node: TreeItem, replaceFields: FieldNames) => boolean
  119 + >,
  120 + default: undefined,
  121 + },
  122 + // 高亮搜索值,仅高亮具体匹配值(通过title)值为true时使用默认色值,值为#xxx时使用此值替代且高亮开启
  123 + highlight: {
  124 + type: [Boolean, String] as PropType<Boolean | String>,
  125 + default: false,
  126 + },
  127 + // 搜索完成时自动展开结果
  128 + expandOnSearch: Boolean,
  129 + // 搜索完成自动选中所有结果,当且仅当 checkable===true 时生效
  130 + checkOnSearch: Boolean,
  131 + // 搜索完成自动select所有结果
  132 + selectedOnSearch: Boolean,
  133 +});
  134 +
  135 +export type TreeProps = ExtractPropTypes<typeof treeProps>;
  136 +
  137 +export interface ContextMenuItem {
  138 + label: string;
  139 + icon?: string;
  140 + disabled?: boolean;
  141 + handler?: Fn;
  142 + divider?: boolean;
  143 + children?: ContextMenuItem[];
  144 +}
  145 +
  146 +export interface ContextMenuOptions {
  147 + icon?: string;
  148 + styles?: any;
  149 + items?: ContextMenuItem[];
  150 +}
  151 +
  152 +export interface TreeItem extends TreeDataItem {
  153 + icon?: any;
  154 +}
  155 +
  156 +export interface TreeActionItem {
  157 + render: (record: Recordable) => any;
  158 + show?: boolean | ((record: Recordable) => boolean);
  159 +}
  160 +
  161 +export interface InsertNodeParams {
  162 + parentKey: string | null;
  163 + node: TreeDataItem;
  164 + list?: TreeDataItem[];
  165 + push?: 'push' | 'unshift';
  166 +}
  167 +
  168 +export interface TreeActionType {
  169 + checkAll: (checkAll: boolean) => void;
  170 + expandAll: (expandAll: boolean) => void;
  171 + setExpandedKeys: (keys: KeyType[]) => void;
  172 + getExpandedKeys: () => KeyType[];
  173 + setSelectedKeys: (keys: KeyType[]) => void;
  174 + getSelectedKeys: () => KeyType[];
  175 + setCheckedKeys: (keys: CheckKeys) => void;
  176 + getCheckedKeys: () => CheckKeys;
  177 + filterByLevel: (level: number) => void;
  178 + insertNodeByKey: (opt: InsertNodeParams) => void;
  179 + insertNodesByKey: (opt: InsertNodeParams) => void;
  180 + deleteNodeByKey: (key: string) => void;
  181 + updateNodeByKey: (key: string, node: Omit<TreeDataItem, 'key'>) => void;
  182 + setSearchValue: (value: string) => void;
  183 + getSearchValue: () => string;
  184 +}
src/components/Tree/src/typing.ts deleted 100644 → 0
1 -import type { TreeDataItem, CheckEvent as CheckEventOrigin } from 'ant-design-vue/es/tree/Tree';  
2 -  
3 -import { ContextMenuItem } from '/@/hooks/web/useContextMenu';  
4 -  
5 -export interface ActionItem {  
6 - render: (record: Recordable) => any;  
7 - show?: boolean | ((record: Recordable) => boolean);  
8 -}  
9 -  
10 -export interface TreeItem extends TreeDataItem {  
11 - icon?: any;  
12 -}  
13 -  
14 -export interface ReplaceFields {  
15 - children?: string;  
16 - title?: string;  
17 - key?: string;  
18 -}  
19 -  
20 -export type Keys = (string | number)[];  
21 -export type CheckKeys =  
22 - | (string | number)[]  
23 - | { checked: (string | number)[]; halfChecked: (string | number)[] };  
24 -  
25 -export interface TreeActionType {  
26 - checkAll: (checkAll: boolean) => void;  
27 - expandAll: (expandAll: boolean) => void;  
28 - setExpandedKeys: (keys: Keys) => void;  
29 - getExpandedKeys: () => Keys;  
30 - setSelectedKeys: (keys: Keys) => void;  
31 - getSelectedKeys: () => Keys;  
32 - setCheckedKeys: (keys: CheckKeys) => void;  
33 - getCheckedKeys: () => CheckKeys;  
34 - filterByLevel: (level: number) => void;  
35 - insertNodeByKey: (opt: InsertNodeParams) => void;  
36 - insertNodesByKey: (opt: InsertNodeParams) => void;  
37 - deleteNodeByKey: (key: string) => void;  
38 - updateNodeByKey: (key: string, node: Omit<TreeDataItem, 'key'>) => void;  
39 - setSearchValue: (value: string) => void;  
40 - getSearchValue: () => string;  
41 -}  
42 -  
43 -export interface InsertNodeParams {  
44 - parentKey: string | null;  
45 - node: TreeDataItem;  
46 - list?: TreeDataItem[];  
47 - push?: 'push' | 'unshift';  
48 -}  
49 -  
50 -export interface ContextMenuOptions {  
51 - icon?: string;  
52 - styles?: any;  
53 - items?: ContextMenuItem[];  
54 -}  
55 -  
56 -export type CheckEvent = CheckEventOrigin;  
src/components/Tree/src/useTree.ts
1 -import type { InsertNodeParams, Keys, ReplaceFields } from './typing'; 1 +import type { InsertNodeParams, KeyType, FieldNames } from './tree';
2 import type { Ref, ComputedRef } from 'vue'; 2 import type { Ref, ComputedRef } from 'vue';
3 import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; 3 import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
4 4
@@ -6,14 +6,11 @@ import { cloneDeep } from &#39;lodash-es&#39;; @@ -6,14 +6,11 @@ import { cloneDeep } from &#39;lodash-es&#39;;
6 import { unref } from 'vue'; 6 import { unref } from 'vue';
7 import { forEach } from '/@/utils/helper/treeHelper'; 7 import { forEach } from '/@/utils/helper/treeHelper';
8 8
9 -export function useTree(  
10 - treeDataRef: Ref<TreeDataItem[]>,  
11 - getReplaceFields: ComputedRef<ReplaceFields>,  
12 -) { 9 +export function useTree(treeDataRef: Ref<TreeDataItem[]>, getFieldNames: ComputedRef<FieldNames>) {
13 function getAllKeys(list?: TreeDataItem[]) { 10 function getAllKeys(list?: TreeDataItem[]) {
14 const keys: string[] = []; 11 const keys: string[] = [];
15 const treeData = list || unref(treeDataRef); 12 const treeData = list || unref(treeDataRef);
16 - const { key: keyField, children: childrenField } = unref(getReplaceFields); 13 + const { key: keyField, children: childrenField } = unref(getFieldNames);
17 if (!childrenField || !keyField) return keys; 14 if (!childrenField || !keyField) return keys;
18 15
19 for (let index = 0; index < treeData.length; index++) { 16 for (let index = 0; index < treeData.length; index++) {
@@ -24,14 +21,14 @@ export function useTree( @@ -24,14 +21,14 @@ export function useTree(
24 keys.push(...(getAllKeys(children) as string[])); 21 keys.push(...(getAllKeys(children) as string[]));
25 } 22 }
26 } 23 }
27 - return keys as Keys; 24 + return keys as KeyType[];
28 } 25 }
29 26
30 // get keys that can be checked and selected 27 // get keys that can be checked and selected
31 function getEnabledKeys(list?: TreeDataItem[]) { 28 function getEnabledKeys(list?: TreeDataItem[]) {
32 const keys: string[] = []; 29 const keys: string[] = [];
33 const treeData = list || unref(treeDataRef); 30 const treeData = list || unref(treeDataRef);
34 - const { key: keyField, children: childrenField } = unref(getReplaceFields); 31 + const { key: keyField, children: childrenField } = unref(getFieldNames);
35 if (!childrenField || !keyField) return keys; 32 if (!childrenField || !keyField) return keys;
36 33
37 for (let index = 0; index < treeData.length; index++) { 34 for (let index = 0; index < treeData.length; index++) {
@@ -42,13 +39,13 @@ export function useTree( @@ -42,13 +39,13 @@ export function useTree(
42 keys.push(...(getEnabledKeys(children) as string[])); 39 keys.push(...(getEnabledKeys(children) as string[]));
43 } 40 }
44 } 41 }
45 - return keys as Keys; 42 + return keys as KeyType[];
46 } 43 }
47 44
48 - function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]): Keys {  
49 - const keys: Keys = []; 45 + function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]) {
  46 + const keys: KeyType[] = [];
50 const treeData = list || unref(treeDataRef); 47 const treeData = list || unref(treeDataRef);
51 - const { key: keyField, children: childrenField } = unref(getReplaceFields); 48 + const { key: keyField, children: childrenField } = unref(getFieldNames);
52 if (!childrenField || !keyField) return keys; 49 if (!childrenField || !keyField) return keys;
53 for (let index = 0; index < treeData.length; index++) { 50 for (let index = 0; index < treeData.length; index++) {
54 const node = treeData[index]; 51 const node = treeData[index];
@@ -64,14 +61,14 @@ export function useTree( @@ -64,14 +61,14 @@ export function useTree(
64 } 61 }
65 } 62 }
66 } 63 }
67 - return keys as Keys; 64 + return keys as KeyType[];
68 } 65 }
69 66
70 // Update node 67 // Update node
71 function updateNodeByKey(key: string, node: TreeDataItem, list?: TreeDataItem[]) { 68 function updateNodeByKey(key: string, node: TreeDataItem, list?: TreeDataItem[]) {
72 if (!key) return; 69 if (!key) return;
73 const treeData = list || unref(treeDataRef); 70 const treeData = list || unref(treeDataRef);
74 - const { key: keyField, children: childrenField } = unref(getReplaceFields); 71 + const { key: keyField, children: childrenField } = unref(getFieldNames);
75 72
76 if (!childrenField || !keyField) return; 73 if (!childrenField || !keyField) return;
77 74
@@ -98,7 +95,7 @@ export function useTree( @@ -98,7 +95,7 @@ export function useTree(
98 for (let index = 0; index < data.length; index++) { 95 for (let index = 0; index < data.length; index++) {
99 const item = data[index]; 96 const item = data[index];
100 97
101 - const { key: keyField, children: childrenField } = unref(getReplaceFields); 98 + const { key: keyField, children: childrenField } = unref(getFieldNames);
102 const key = keyField ? item[keyField] : ''; 99 const key = keyField ? item[keyField] : '';
103 const children = childrenField ? item[childrenField] : []; 100 const children = childrenField ? item[childrenField] : [];
104 res.push(key); 101 res.push(key);
@@ -120,7 +117,7 @@ export function useTree( @@ -120,7 +117,7 @@ export function useTree(
120 treeDataRef.value = treeData; 117 treeDataRef.value = treeData;
121 return; 118 return;
122 } 119 }
123 - const { key: keyField, children: childrenField } = unref(getReplaceFields); 120 + const { key: keyField, children: childrenField } = unref(getFieldNames);
124 if (!childrenField || !keyField) return; 121 if (!childrenField || !keyField) return;
125 122
126 forEach(treeData, (treeItem) => { 123 forEach(treeData, (treeItem) => {
@@ -145,7 +142,7 @@ export function useTree( @@ -145,7 +142,7 @@ export function useTree(
145 treeData[push](list[i]); 142 treeData[push](list[i]);
146 } 143 }
147 } else { 144 } else {
148 - const { key: keyField, children: childrenField } = unref(getReplaceFields); 145 + const { key: keyField, children: childrenField } = unref(getFieldNames);
149 if (!childrenField || !keyField) return; 146 if (!childrenField || !keyField) return;
150 147
151 forEach(treeData, (treeItem) => { 148 forEach(treeData, (treeItem) => {
@@ -164,7 +161,7 @@ export function useTree( @@ -164,7 +161,7 @@ export function useTree(
164 function deleteNodeByKey(key: string, list?: TreeDataItem[]) { 161 function deleteNodeByKey(key: string, list?: TreeDataItem[]) {
165 if (!key) return; 162 if (!key) return;
166 const treeData = list || unref(treeDataRef); 163 const treeData = list || unref(treeDataRef);
167 - const { key: keyField, children: childrenField } = unref(getReplaceFields); 164 + const { key: keyField, children: childrenField } = unref(getFieldNames);
168 if (!childrenField || !keyField) return; 165 if (!childrenField || !keyField) return;
169 166
170 for (let index = 0; index < treeData.length; index++) { 167 for (let index = 0; index < treeData.length; index++) {
src/components/Tree/style/index.less 0 → 100644
  1 +@tree-prefix-cls: ~'@{namespace}-tree';
  2 +
  3 +.@{tree-prefix-cls} {
  4 + background-color: @component-background;
  5 +
  6 + .ant-tree-node-content-wrapper {
  7 + position: relative;
  8 +
  9 + .ant-tree-title {
  10 + position: absolute;
  11 + left: 0;
  12 + width: 100%;
  13 + }
  14 + }
  15 +
  16 + &__title {
  17 + position: relative;
  18 + display: flex;
  19 + align-items: center;
  20 + width: 100%;
  21 + padding-right: 10px;
  22 +
  23 + &:hover {
  24 + .@{tree-prefix-cls}__action {
  25 + visibility: visible;
  26 + }
  27 + }
  28 + }
  29 +
  30 + &__content {
  31 + overflow: hidden;
  32 + }
  33 +
  34 + &__actions {
  35 + position: absolute;
  36 + top: 2px;
  37 + right: 3px;
  38 + display: flex;
  39 + }
  40 +
  41 + &__action {
  42 + margin-left: 4px;
  43 + visibility: hidden;
  44 + }
  45 +
  46 + &-header {
  47 + border-bottom: 1px solid @border-color-base;
  48 + }
  49 +}
src/components/Tree/style/index.ts 0 → 100644
  1 +import './index.less';
src/main.ts
@@ -15,13 +15,6 @@ import { setupGlobDirectives } from &#39;/@/directives&#39;; @@ -15,13 +15,6 @@ import { setupGlobDirectives } from &#39;/@/directives&#39;;
15 import { setupI18n } from '/@/locales/setupI18n'; 15 import { setupI18n } from '/@/locales/setupI18n';
16 import { registerGlobComp } from '/@/components/registerGlobComp'; 16 import { registerGlobComp } from '/@/components/registerGlobComp';
17 17
18 -// Importing on demand in local development will increase the number of browser requests by around 20%.  
19 -// This may slow down the browser refresh speed.  
20 -// Therefore, only enable on-demand importing in production environments .  
21 -if (import.meta.env.DEV) {  
22 - import('ant-design-vue/dist/antd.less');  
23 -}  
24 -  
25 async function bootstrap() { 18 async function bootstrap() {
26 const app = createApp(App); 19 const app = createApp(App);
27 20
src/utils/bem.ts 0 → 100644
  1 +import { prefixCls } from '/@/settings/designSetting';
  2 +
  3 +type Mod = string | { [key: string]: any };
  4 +type Mods = Mod | Mod[];
  5 +
  6 +export type BEM = ReturnType<typeof createBEM>;
  7 +
  8 +function genBem(name: string, mods?: Mods): string {
  9 + if (!mods) {
  10 + return '';
  11 + }
  12 +
  13 + if (typeof mods === 'string') {
  14 + return ` ${name}--${mods}`;
  15 + }
  16 +
  17 + if (Array.isArray(mods)) {
  18 + return mods.reduce<string>((ret, item) => ret + genBem(name, item), '');
  19 + }
  20 +
  21 + return Object.keys(mods).reduce((ret, key) => ret + (mods[key] ? genBem(name, key) : ''), '');
  22 +}
  23 +
  24 +/**
  25 + * bem helper
  26 + * b() // 'button'
  27 + * b('text') // 'button__text'
  28 + * b({ disabled }) // 'button button--disabled'
  29 + * b('text', { disabled }) // 'button__text button__text--disabled'
  30 + * b(['disabled', 'primary']) // 'button button--disabled button--primary'
  31 + */
  32 +export function buildBEM(name: string) {
  33 + return (el?: Mods, mods?: Mods): Mods => {
  34 + if (el && typeof el !== 'string') {
  35 + mods = el;
  36 + el = '';
  37 + }
  38 +
  39 + el = el ? `${name}__${el}` : name;
  40 +
  41 + return `${el}${genBem(el, mods)}`;
  42 + };
  43 +}
  44 +
  45 +export function createBEM(name: string) {
  46 + return [buildBEM(`${prefixCls}-${name}`)];
  47 +}
  48 +
  49 +export function createNamespace(name: string) {
  50 + const prefixedName = `${prefixCls}-${name}`;
  51 + return [prefixedName, buildBEM(prefixedName)] as const;
  52 +}
src/utils/props.ts 0 → 100644
  1 +// copy from element-plus
  2 +
  3 +import { warn } from 'vue';
  4 +import { isObject } from '@vue/shared';
  5 +import { fromPairs } from 'lodash-es';
  6 +import type { ExtractPropTypes, PropType } from '@vue/runtime-core';
  7 +import type { Mutable } from './types';
  8 +
  9 +const wrapperKey = Symbol();
  10 +export type PropWrapper<T> = { [wrapperKey]: T };
  11 +
  12 +export const propKey = Symbol();
  13 +
  14 +type ResolveProp<T> = ExtractPropTypes<{
  15 + key: { type: T; required: true };
  16 +}>['key'];
  17 +type ResolvePropType<T> = ResolveProp<T> extends { type: infer V } ? V : ResolveProp<T>;
  18 +type ResolvePropTypeWithReadonly<T> = Readonly<T> extends Readonly<Array<infer A>>
  19 + ? ResolvePropType<A[]>
  20 + : ResolvePropType<T>;
  21 +
  22 +type IfUnknown<T, V> = [unknown] extends [T] ? V : T;
  23 +
  24 +export type BuildPropOption<T, D extends BuildPropType<T, V, C>, R, V, C> = {
  25 + type?: T;
  26 + values?: readonly V[];
  27 + required?: R;
  28 + default?: R extends true
  29 + ? never
  30 + : D extends Record<string, unknown> | Array<any>
  31 + ? () => D
  32 + : (() => D) | D;
  33 + validator?: ((val: any) => val is C) | ((val: any) => boolean);
  34 +};
  35 +
  36 +type _BuildPropType<T, V, C> =
  37 + | (T extends PropWrapper<unknown>
  38 + ? T[typeof wrapperKey]
  39 + : [V] extends [never]
  40 + ? ResolvePropTypeWithReadonly<T>
  41 + : never)
  42 + | V
  43 + | C;
  44 +export type BuildPropType<T, V, C> = _BuildPropType<
  45 + IfUnknown<T, never>,
  46 + IfUnknown<V, never>,
  47 + IfUnknown<C, never>
  48 +>;
  49 +
  50 +type _BuildPropDefault<T, D> = [T] extends [
  51 + // eslint-disable-next-line @typescript-eslint/ban-types
  52 + Record<string, unknown> | Array<any> | Function,
  53 +]
  54 + ? D
  55 + : D extends () => T
  56 + ? ReturnType<D>
  57 + : D;
  58 +
  59 +export type BuildPropDefault<T, D, R> = R extends true
  60 + ? { readonly default?: undefined }
  61 + : {
  62 + readonly default: Exclude<D, undefined> extends never
  63 + ? undefined
  64 + : Exclude<_BuildPropDefault<T, D>, undefined>;
  65 + };
  66 +export type BuildPropReturn<T, D, R, V, C> = {
  67 + readonly type: PropType<BuildPropType<T, V, C>>;
  68 + readonly required: IfUnknown<R, false>;
  69 + readonly validator: ((val: unknown) => boolean) | undefined;
  70 + [propKey]: true;
  71 +} & BuildPropDefault<BuildPropType<T, V, C>, IfUnknown<D, never>, IfUnknown<R, false>>;
  72 +
  73 +/**
  74 + * @description Build prop. It can better optimize prop types
  75 + * @description 生成 prop,能更好地优化类型
  76 + * @example
  77 + // limited options
  78 + // the type will be PropType<'light' | 'dark'>
  79 + buildProp({
  80 + type: String,
  81 + values: ['light', 'dark'],
  82 + } as const)
  83 + * @example
  84 + // limited options and other types
  85 + // the type will be PropType<'small' | 'medium' | number>
  86 + buildProp({
  87 + type: [String, Number],
  88 + values: ['small', 'medium'],
  89 + validator: (val: unknown): val is number => typeof val === 'number',
  90 + } as const)
  91 + @link see more: https://github.com/element-plus/element-plus/pull/3341
  92 + */
  93 +export function buildProp<
  94 + T = never,
  95 + D extends BuildPropType<T, V, C> = never,
  96 + R extends boolean = false,
  97 + V = never,
  98 + C = never,
  99 +>(option: BuildPropOption<T, D, R, V, C>, key?: string): BuildPropReturn<T, D, R, V, C> {
  100 + // filter native prop type and nested prop, e.g `null`, `undefined` (from `buildProps`)
  101 + if (!isObject(option) || !!option[propKey]) return option as any;
  102 +
  103 + const { values, required, default: defaultValue, type, validator } = option;
  104 +
  105 + const _validator =
  106 + values || validator
  107 + ? (val: unknown) => {
  108 + let valid = false;
  109 + let allowedValues: unknown[] = [];
  110 +
  111 + if (values) {
  112 + allowedValues = [...values, defaultValue];
  113 + valid ||= allowedValues.includes(val);
  114 + }
  115 + if (validator) valid ||= validator(val);
  116 +
  117 + if (!valid && allowedValues.length > 0) {
  118 + const allowValuesText = [...new Set(allowedValues)]
  119 + .map((value) => JSON.stringify(value))
  120 + .join(', ');
  121 + warn(
  122 + `Invalid prop: validation failed${
  123 + key ? ` for prop "${key}"` : ''
  124 + }. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`,
  125 + );
  126 + }
  127 + return valid;
  128 + }
  129 + : undefined;
  130 +
  131 + return {
  132 + type:
  133 + typeof type === 'object' && Object.getOwnPropertySymbols(type).includes(wrapperKey)
  134 + ? type[wrapperKey]
  135 + : type,
  136 + required: !!required,
  137 + default: defaultValue,
  138 + validator: _validator,
  139 + [propKey]: true,
  140 + } as unknown as BuildPropReturn<T, D, R, V, C>;
  141 +}
  142 +
  143 +type NativePropType = [((...args: any) => any) | { new (...args: any): any } | undefined | null];
  144 +
  145 +export const buildProps = <
  146 + O extends {
  147 + [K in keyof O]: O[K] extends BuildPropReturn<any, any, any, any, any>
  148 + ? O[K]
  149 + : [O[K]] extends NativePropType
  150 + ? O[K]
  151 + : O[K] extends BuildPropOption<infer T, infer D, infer R, infer V, infer C>
  152 + ? D extends BuildPropType<T, V, C>
  153 + ? BuildPropOption<T, D, R, V, C>
  154 + : never
  155 + : never;
  156 + },
  157 +>(
  158 + props: O,
  159 +) =>
  160 + fromPairs(
  161 + Object.entries(props).map(([key, option]) => [key, buildProp(option as any, key)]),
  162 + ) as unknown as {
  163 + [K in keyof O]: O[K] extends { [propKey]: boolean }
  164 + ? O[K]
  165 + : [O[K]] extends NativePropType
  166 + ? O[K]
  167 + : O[K] extends BuildPropOption<
  168 + infer T,
  169 + // eslint-disable-next-line @typescript-eslint/no-unused-vars
  170 + infer _D,
  171 + infer R,
  172 + infer V,
  173 + infer C
  174 + >
  175 + ? BuildPropReturn<T, O[K]['default'], R, V, C>
  176 + : never;
  177 + };
  178 +
  179 +export const definePropType = <T>(val: any) => ({ [wrapperKey]: val } as PropWrapper<T>);
  180 +
  181 +export const keyOf = <T>(arr: T) => Object.keys(arr) as Array<keyof T>;
  182 +export const mutable = <T extends readonly any[] | Record<string, unknown>>(val: T) =>
  183 + val as Mutable<typeof val>;
  184 +
  185 +export const componentSize = ['large', 'medium', 'small', 'mini'] as const;
src/utils/types.ts 0 → 100644
  1 +// copy from element-plus
  2 +
  3 +import type { CSSProperties, Plugin } from 'vue';
  4 +
  5 +type OptionalKeys<T extends Record<string, unknown>> = {
  6 + [K in keyof T]: T extends Record<K, T[K]> ? never : K;
  7 +}[keyof T];
  8 +
  9 +type RequiredKeys<T extends Record<string, unknown>> = Exclude<keyof T, OptionalKeys<T>>;
  10 +
  11 +type MonoArgEmitter<T, Keys extends keyof T> = <K extends Keys>(evt: K, arg?: T[K]) => void;
  12 +
  13 +type BiArgEmitter<T, Keys extends keyof T> = <K extends Keys>(evt: K, arg: T[K]) => void;
  14 +
  15 +export type EventEmitter<T extends Record<string, unknown>> = MonoArgEmitter<T, OptionalKeys<T>> &
  16 + BiArgEmitter<T, RequiredKeys<T>>;
  17 +
  18 +export type AnyFunction<T> = (...args: any[]) => T;
  19 +
  20 +export type PartialReturnType<T extends (...args: unknown[]) => unknown> = Partial<ReturnType<T>>;
  21 +
  22 +export type SFCWithInstall<T> = T & Plugin;
  23 +
  24 +export type Nullable<T> = T | null;
  25 +
  26 +export type RefElement = Nullable<HTMLElement>;
  27 +
  28 +export type CustomizedHTMLElement<T> = HTMLElement & T;
  29 +
  30 +export type Indexable<T> = {
  31 + [key: string]: T;
  32 +};
  33 +
  34 +export type Hash<T> = Indexable<T>;
  35 +
  36 +export type TimeoutHandle = ReturnType<typeof global.setTimeout>;
  37 +
  38 +export type ComponentSize = 'large' | 'medium' | 'small' | 'mini';
  39 +
  40 +export type StyleValue = string | CSSProperties | Array<StyleValue>;
  41 +
  42 +export type Mutable<T> = { -readonly [P in keyof T]: T[P] };
vite.config.ts
@@ -95,6 +95,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig =&gt; { @@ -95,6 +95,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig =&gt; {
95 optimizeDeps: { 95 optimizeDeps: {
96 // @iconify/iconify: The dependency is dynamically and virtually loaded by @purge-icons/generated, so it needs to be specified explicitly 96 // @iconify/iconify: The dependency is dynamically and virtually loaded by @purge-icons/generated, so it needs to be specified explicitly
97 include: [ 97 include: [
  98 + '@vue/shared',
98 '@iconify/iconify', 99 '@iconify/iconify',
99 'ant-design-vue/es/locale/zh_CN', 100 'ant-design-vue/es/locale/zh_CN',
100 'ant-design-vue/es/locale/en_US', 101 'ant-design-vue/es/locale/en_US',