diff --git a/webapp/package.json b/webapp/package.json index 652c1e24..729ccd76 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -14,16 +14,22 @@ "core-js": "^3.23.1", "spark-md5": "^3.0.2", "vue": "^3.2.27", + "vue-class-component": "^8.0.0-0", "vue-router": "^4.0.16" }, "devDependencies": { "@babel/core": "^7.18.5", "@babel/eslint-parser": "^7.18.2", + "@typescript-eslint/parser": "^5.29.0", "@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-eslint": "~5.0.0", + "@vue/cli-plugin-router": "^5.0.6", + "@vue/cli-plugin-typescript": "^5.0.6", "@vue/cli-service": "~5.0.0", + "@vue/eslint-config-typescript": "^11.0.0", "eslint": "^8.17.0", "eslint-plugin-vue": "^9.1.1", + "typescript": "^4.7.4", "vue-cli-plugin-compression": "~1.2.0" }, "eslintConfig": { @@ -33,10 +39,11 @@ }, "extends": [ "plugin:vue/vue3-essential", - "eslint:recommended" + "eslint:recommended", + "@vue/typescript/recommended" ], "parserOptions": { - "parser": "@babel/eslint-parser" + "ecmaVersion": 2020 }, "rules": {} }, diff --git a/webapp/src/components/DtuAdminView.vue b/webapp/src/components/DtuAdminView.vue index c87b892a..69b291c6 100644 --- a/webapp/src/components/DtuAdminView.vue +++ b/webapp/src/components/DtuAdminView.vue @@ -110,7 +110,7 @@ export default { saveDtuConfig(e) { e.preventDefault(); - let formData = new FormData(); + const formData = new FormData(); formData.append("data", JSON.stringify(this.dtuConfigList)); fetch("/api/dtu/config", { diff --git a/webapp/src/components/FirmwareUpgradeView.vue b/webapp/src/components/FirmwareUpgradeView.vue index 3cf57a23..cee7c2cd 100644 --- a/webapp/src/components/FirmwareUpgradeView.vue +++ b/webapp/src/components/FirmwareUpgradeView.vue @@ -106,7 +106,6 @@ export default { const spark = new SparkMD5.ArrayBuffer(); const fileReader = new FileReader(); let currentChunk = 0; - let loadNext; fileReader.onload = (e) => { spark.append(e.target.result); // Append array buffer currentChunk += 1; @@ -120,7 +119,7 @@ export default { fileReader.onerror = (e) => { reject(e); }; - loadNext = () => { + const loadNext = () => { const start = currentChunk * chunkSize; const end = start + chunkSize >= file.size ? file.size : start + chunkSize; diff --git a/webapp/src/components/HomeView.vue b/webapp/src/components/HomeView.vue index b580dac6..96eb844d 100644 --- a/webapp/src/components/HomeView.vue +++ b/webapp/src/components/HomeView.vue @@ -97,11 +97,11 @@ export default { if (this.isFirstFetchAfterConnect) { this.isFirstFetchAfterConnect = false; - var firstTabEl = this.$el.querySelector( + const firstTabEl = this.$el.querySelector( "#v-pills-tab:first-child button" ); if (firstTabEl != null) { - var firstTab = new bootstrap.Tab(firstTabEl); + const firstTab = new bootstrap.Tab(firstTabEl); firstTab.show(); } } diff --git a/webapp/src/components/InverterAdminView.vue b/webapp/src/components/InverterAdminView.vue index 735dc4fb..5a59f545 100644 --- a/webapp/src/components/InverterAdminView.vue +++ b/webapp/src/components/InverterAdminView.vue @@ -153,7 +153,7 @@ export default { .then((data) => (this.inverters = data.inverter)); }, onSubmit() { - let formData = new FormData(); + const formData = new FormData(); formData.append("data", JSON.stringify(this.inverterData)); fetch("/api/inverter/add", { @@ -180,7 +180,7 @@ export default { this.inverterData.name = ""; }, onDelete(id) { - let formData = new FormData(); + const formData = new FormData(); formData.append("data", JSON.stringify({ id: id })); fetch("/api/inverter/del", { @@ -215,7 +215,7 @@ export default { this.editInverterData.name = ""; }, onEditSubmit(id) { - let formData = new FormData(); + const formData = new FormData(); this.editInverterData.id = id; formData.append("data", JSON.stringify(this.editInverterData)); diff --git a/webapp/src/components/MqttAdminView.vue b/webapp/src/components/MqttAdminView.vue index 27ef910d..38b29ed0 100644 --- a/webapp/src/components/MqttAdminView.vue +++ b/webapp/src/components/MqttAdminView.vue @@ -237,7 +237,7 @@ export default { saveMqttConfig(e) { e.preventDefault(); - let formData = new FormData(); + const formData = new FormData(); formData.append("data", JSON.stringify(this.mqttConfigList)); fetch("/api/mqtt/config", { diff --git a/webapp/src/components/NetworkAdminView.vue b/webapp/src/components/NetworkAdminView.vue index b12e73a0..c63f7ecc 100644 --- a/webapp/src/components/NetworkAdminView.vue +++ b/webapp/src/components/NetworkAdminView.vue @@ -194,7 +194,7 @@ export default { saveNetworkConfig(e) { e.preventDefault(); - let formData = new FormData(); + const formData = new FormData(); formData.append("data", JSON.stringify(this.networkConfigList)); fetch("/api/network/config", { diff --git a/webapp/src/components/NtpAdminView.vue b/webapp/src/components/NtpAdminView.vue index 777376e5..27de5c87 100644 --- a/webapp/src/components/NtpAdminView.vue +++ b/webapp/src/components/NtpAdminView.vue @@ -115,7 +115,7 @@ export default { saveNtpConfig(e) { e.preventDefault(); - let formData = new FormData(); + const formData = new FormData(); formData.append("data", JSON.stringify(this.ntpConfigList)); fetch("/api/ntp/config", { diff --git a/webapp/src/components/partials/FirmwareInfo.vue b/webapp/src/components/partials/FirmwareInfo.vue index 709b50ae..47d0af9c 100644 --- a/webapp/src/components/partials/FirmwareInfo.vue +++ b/webapp/src/components/partials/FirmwareInfo.vue @@ -59,14 +59,14 @@ export default { computed: { timeInHours() { return (value) => { - let days = parseInt(Math.floor(value / 3600 / 24)); - let hours = parseInt(Math.floor((value - days * 3600 * 24) / 3600)); - let minutes = parseInt(Math.floor((value - days * 3600 * 24 - hours * 3600) / 60)); - let seconds = parseInt((value - days * 3600 * 24 - hours * 3600 + minutes * 60) % 60); + const days = parseInt(Math.floor(value / 3600 / 24)); + const hours = parseInt(Math.floor((value - days * 3600 * 24) / 3600)); + const minutes = parseInt(Math.floor((value - days * 3600 * 24 - hours * 3600) / 60)); + const seconds = parseInt((value - days * 3600 * 24 - hours * 3600 + minutes * 60) % 60); - let dHours = hours > 9 ? hours : "0" + hours; - let dMins = minutes > 9 ? minutes : "0" + minutes; - let dSecs = seconds > 9 ? seconds : "0" + seconds; + const dHours = hours > 9 ? hours : "0" + hours; + const dMins = minutes > 9 ? minutes : "0" + minutes; + const dSecs = seconds > 9 ? seconds : "0" + seconds; return days + " days " + dHours + ":" + dMins + ":" + dSecs; }; diff --git a/webapp/src/components/partials/WifiStationInfo.vue b/webapp/src/components/partials/WifiStationInfo.vue index 112ad8b6..f1f47c3a 100644 --- a/webapp/src/components/partials/WifiStationInfo.vue +++ b/webapp/src/components/partials/WifiStationInfo.vue @@ -56,7 +56,7 @@ export default { .then((data) => (this.networkDataList = data)); }, getRSSIasQuality(rssi) { - var quality = 0; + let quality = 0; if (rssi <= -100) { quality = 0; diff --git a/webapp/src/main.js b/webapp/src/main.ts similarity index 100% rename from webapp/src/main.js rename to webapp/src/main.ts diff --git a/webapp/src/router/index.js b/webapp/src/router/index.js deleted file mode 100644 index d462213f..00000000 --- a/webapp/src/router/index.js +++ /dev/null @@ -1,82 +0,0 @@ -import { createWebHistory, createRouter } from 'vue-router'; -import HomeView from '@/components/HomeView' -import AboutView from '@/components/AboutView' -import NetworkInfoView from '@/components/NetworkInfoView' -import SystemInfoView from '@/components/SystemInfoView' -import NtpInfoView from '@/components/NtpInfoView' -import NetworkAdminView from '@/components/NetworkAdminView' -import NtpAdminView from '@/components/NtpAdminView' -import MqttAdminView from '@/components/MqttAdminView' -import MqttInfoView from '@/components/MqttInfoView' -import InverterAdminView from '@/components/InverterAdminView' -import DtuAdminView from '@/components/DtuAdminView' -import FirmwareUpgradeView from '@/components/FirmwareUpgradeView' - -const routes = [{ - path: '/', - name: 'Home', - component: HomeView -}, -{ - path: '/about', - name: 'About', - component: AboutView -}, -{ - path: '/info/network', - name: 'Network', - component: NetworkInfoView -}, -{ - path: '/info/system', - name: 'System', - component: SystemInfoView -}, -{ - path: '/info/ntp', - name: 'NTP', - component: NtpInfoView -}, -{ - path: '/info/mqtt', - name: 'MqTT', - component: MqttInfoView -}, -{ - path: '/settings/network', - name: 'Network Settings', - component: NetworkAdminView -}, -{ - path: '/settings/ntp', - name: 'NTP Settings', - component: NtpAdminView -}, -{ - path: '/settings/mqtt', - name: 'MqTT Settings', - component: MqttAdminView -}, -{ - path: '/settings/inverter', - name: 'Inverter Settings', - component: InverterAdminView -}, -{ - path: '/settings/dtu', - name: 'DTU Settings', - component: DtuAdminView -}, -{ - path: '/firmware/upgrade', - name: 'Firmware Upgrade', - component: FirmwareUpgradeView -}]; - -const router = createRouter({ - history: createWebHistory(), - routes, - linkActiveClass: "active", -}); - -export default router; \ No newline at end of file diff --git a/webapp/src/router/index.ts b/webapp/src/router/index.ts new file mode 100644 index 00000000..71ca4396 --- /dev/null +++ b/webapp/src/router/index.ts @@ -0,0 +1,84 @@ +import { createWebHistory, createRouter, RouteRecordRaw } from 'vue-router'; +import HomeView from '@/components/HomeView.vue' +import AboutView from '@/components/AboutView.vue' +import NetworkInfoView from '@/components/NetworkInfoView.vue' +import SystemInfoView from '@/components/SystemInfoView.vue' +import NtpInfoView from '@/components/NtpInfoView.vue' +import NetworkAdminView from '@/components/NetworkAdminView.vue' +import NtpAdminView from '@/components/NtpAdminView.vue' +import MqttAdminView from '@/components/MqttAdminView.vue' +import MqttInfoView from '@/components/MqttInfoView.vue' +import InverterAdminView from '@/components/InverterAdminView.vue' +import DtuAdminView from '@/components/DtuAdminView.vue' +import FirmwareUpgradeView from '@/components/FirmwareUpgradeView.vue' + +const routes: Array = [ + { + path: '/', + name: 'Home', + component: HomeView + }, + { + path: '/about', + name: 'About', + component: AboutView + }, + { + path: '/info/network', + name: 'Network', + component: NetworkInfoView + }, + { + path: '/info/system', + name: 'System', + component: SystemInfoView + }, + { + path: '/info/ntp', + name: 'NTP', + component: NtpInfoView + }, + { + path: '/info/mqtt', + name: 'MqTT', + component: MqttInfoView + }, + { + path: '/settings/network', + name: 'Network Settings', + component: NetworkAdminView + }, + { + path: '/settings/ntp', + name: 'NTP Settings', + component: NtpAdminView + }, + { + path: '/settings/mqtt', + name: 'MqTT Settings', + component: MqttAdminView + }, + { + path: '/settings/inverter', + name: 'Inverter Settings', + component: InverterAdminView + }, + { + path: '/settings/dtu', + name: 'DTU Settings', + component: DtuAdminView + }, + { + path: '/firmware/upgrade', + name: 'Firmware Upgrade', + component: FirmwareUpgradeView + } +]; + +const router = createRouter({ + history: createWebHistory(), + routes, + linkActiveClass: "active", +}); + +export default router; \ No newline at end of file diff --git a/webapp/src/shims-vue.d.ts b/webapp/src/shims-vue.d.ts new file mode 100644 index 00000000..07ac9503 --- /dev/null +++ b/webapp/src/shims-vue.d.ts @@ -0,0 +1,6 @@ +/* eslint-disable */ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/webapp/tsconfig.json b/webapp/tsconfig.json new file mode 100644 index 00000000..be1b6f09 --- /dev/null +++ b/webapp/tsconfig.json @@ -0,0 +1,41 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "strict": true, + "jsx": "preserve", + "moduleResolution": "node", + "experimentalDecorators": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "useDefineForClassFields": true, + "sourceMap": true, + "baseUrl": ".", + "types": [ + "webpack-env" + ], + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 2b95f17b..9be5cfe3 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -11,6 +11,15 @@ event-pubsub "4.3.0" js-message "1.0.7" +"@achrinza/node-ipc@^9.2.5": + version "9.2.5" + resolved "https://registry.yarnpkg.com/@achrinza/node-ipc/-/node-ipc-9.2.5.tgz#29788e608ff41121f0543491da723b243266ac28" + integrity sha512-kBX7Ay911iXZ3VZ1pYltj3Rfu7Ow9H7sK4H4RSfWIfWR2JKNB40K808wppoRIEzE2j2hXLU+r6TJgCAliCGhyQ== + dependencies: + "@node-ipc/js-queue" "2.0.3" + event-pubsub "4.3.0" + js-message "1.0.7" + "@ampproject/remapping@^2.1.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" @@ -19,7 +28,7 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== @@ -1274,7 +1283,7 @@ dependencies: "@types/node" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -1341,6 +1350,11 @@ dependencies: "@types/node" "*" +"@types/webpack-env@^1.15.2": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.17.0.tgz#f99ce359f1bfd87da90cc4a57cab0a18f34a48d0" + integrity sha512-eHSaNYEyxRA5IAG0Ym/yCyf86niZUIF/TpWKofQI/CVfh5HsMEUyfE2kwFxha4ow0s5g0LfISQxpDKjbRDrizw== + "@types/ws@^8.5.1": version "8.5.3" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" @@ -1348,6 +1362,86 @@ dependencies: "@types/node" "*" +"@typescript-eslint/eslint-plugin@^5.0.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz#c67794d2b0fd0b4a47f50266088acdc52a08aab6" + integrity sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w== + dependencies: + "@typescript-eslint/scope-manager" "5.29.0" + "@typescript-eslint/type-utils" "5.29.0" + "@typescript-eslint/utils" "5.29.0" + debug "^4.3.4" + functional-red-black-tree "^1.0.1" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.29.0.tgz#41314b195b34d44ff38220caa55f3f93cfca43cf" + integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw== + dependencies: + "@typescript-eslint/scope-manager" "5.29.0" + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/typescript-estree" "5.29.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz#2a6a32e3416cb133e9af8dcf54bf077a916aeed3" + integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA== + dependencies: + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/visitor-keys" "5.29.0" + +"@typescript-eslint/type-utils@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz#241918001d164044020b37d26d5b9f4e37cc3d5d" + integrity sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg== + dependencies: + "@typescript-eslint/utils" "5.29.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" + integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== + +"@typescript-eslint/typescript-estree@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" + integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ== + dependencies: + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/visitor-keys" "5.29.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.29.0.tgz#775046effd5019667bd086bcf326acbe32cd0082" + integrity sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.29.0" + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/typescript-estree" "5.29.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz#7a4749fa7ef5160c44a451bf060ac1dc6dfb77ee" + integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ== + dependencies: + "@typescript-eslint/types" "5.29.0" + eslint-visitor-keys "^3.3.0" + "@vue/babel-helper-vue-jsx-merge-props@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81" @@ -1505,6 +1599,28 @@ dependencies: "@vue/cli-shared-utils" "^5.0.4" +"@vue/cli-plugin-router@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.6.tgz#b65d39845a8a53dc51b9c263bf75bdd24a53d8be" + integrity sha512-5ikUdfsSoKqpBhB5GhGYijH6mJnU+ZGqDv3QBf0brDeeh7PhClntxNAOLkB73c+LNxjBrlNCTkItuByF+AD29w== + dependencies: + "@vue/cli-shared-utils" "^5.0.6" + +"@vue/cli-plugin-typescript@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-typescript/-/cli-plugin-typescript-5.0.6.tgz#c98b6fe67d71034109694f53a92c4a102fd5f060" + integrity sha512-DKw3SZEWs+9v6oUMTJAGcmJY4XCIdLhwXU1MsXDmhea/VqoGTcY9yl1mb/QfZ3AttdRtC7n4Vk01tGa0pnewsA== + dependencies: + "@babel/core" "^7.12.16" + "@types/webpack-env" "^1.15.2" + "@vue/cli-shared-utils" "^5.0.6" + babel-loader "^8.2.2" + fork-ts-checker-webpack-plugin "^6.4.0" + globby "^11.0.2" + thread-loader "^3.0.0" + ts-loader "^9.2.5" + webpack "^5.54.0" + "@vue/cli-plugin-vuex@^5.0.4": version "5.0.4" resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.4.tgz#80853992ac4f423e8e3e8d05a120c46a94a81b5e" @@ -1589,6 +1705,24 @@ semver "^7.3.4" strip-ansi "^6.0.0" +"@vue/cli-shared-utils@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.6.tgz#f47202d68dfd4c2e41160c63721263b39cd97d1e" + integrity sha512-5HmlRtMByOCFO0P3mMUx8dVruTRhZ3pqQ0f1cCH9TmAoDjetmD/Ib7yx/5KxTHV8QY3xZJxYvgAmOU5C49K5xA== + dependencies: + "@achrinza/node-ipc" "^9.2.5" + chalk "^4.1.2" + execa "^1.0.0" + joi "^17.4.0" + launch-editor "^2.2.1" + lru-cache "^6.0.0" + node-fetch "^2.6.7" + open "^8.0.2" + ora "^5.3.0" + read-pkg "^5.1.1" + semver "^7.3.4" + strip-ansi "^6.0.0" + "@vue/compiler-core@3.2.37": version "3.2.37" resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz#b3c42e04c0e0f2c496ff1784e543fbefe91e215a" @@ -1652,6 +1786,15 @@ resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz#b4aec2f4b4599e11ba774a50c67fa378c9824e53" integrity sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ== +"@vue/eslint-config-typescript@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.0.tgz#bac0cb2d381625b5bf568d2025acffc0fd09113e" + integrity sha512-txuRzxnQVmtUvvy9UyWUy9sHWXNeRPGmSPqP53hRtaiUeCTAondI9Ho9GQYI/8/eWljYOST7iA4Aa8sANBkWaA== + dependencies: + "@typescript-eslint/eslint-plugin" "^5.0.0" + "@typescript-eslint/parser" "^5.0.0" + vue-eslint-parser "^9.0.0" + "@vue/reactivity-transform@3.2.37": version "3.2.37" resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz#0caa47c4344df4ae59f5a05dde2a8758829f8eca" @@ -1895,7 +2038,7 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.5.2: +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== @@ -1907,7 +2050,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2300,7 +2443,7 @@ charcodes@^0.2.0: resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== -chokidar@^3.5.3: +chokidar@^3.4.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -2571,6 +2714,17 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + cosmiconfig@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" @@ -2763,6 +2917,11 @@ deepmerge@^1.5.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + default-gateway@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" @@ -2933,7 +3092,7 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.9.3: +enhanced-resolve@^5.0.0, enhanced-resolve@^5.9.3: version "5.9.3" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88" integrity sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow== @@ -3333,6 +3492,25 @@ follow-redirects@^1.0.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== +fork-ts-checker-webpack-plugin@^6.4.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" + integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -3348,7 +3526,7 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -fs-extra@^9.1.0: +fs-extra@^9.0.0, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -3365,7 +3543,7 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" -fs-monkey@1.0.3: +fs-monkey@1.0.3, fs-monkey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== @@ -3445,7 +3623,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.1.3, glob@^7.1.4: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -3469,7 +3647,7 @@ globals@^13.15.0: dependencies: type-fest "^0.20.2" -globby@^11.0.2, globby@^11.0.3: +globby@^11.0.2, globby@^11.0.3, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -3689,7 +3867,7 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -4138,6 +4316,13 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +memfs@^3.1.2: + version "3.4.6" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.6.tgz#74097983d27c82b973665885dc75f27a65174510" + integrity sha512-rH9mjopto6Wkr7RFuH9l9dk3qb2XGOcYKr7xMhaYqfzuJqOqhRrcFvfD7JMuPj6SLmPreh5+6eAuv36NFAU+Mw== + dependencies: + fs-monkey "^1.0.3" + memfs@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.3.tgz#fc08ac32363b6ea6c95381cabb4d67838180d4e1" @@ -4172,7 +4357,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -5248,6 +5433,15 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" @@ -5303,7 +5497,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4, semver@^7.3.5, semver@^7.3.6: +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== @@ -5682,6 +5876,11 @@ svgo@^2.7.0: picocolors "^1.0.0" stable "^0.1.8" +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" @@ -5789,11 +5988,33 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= +ts-loader@^9.2.5: + version "9.3.0" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.3.0.tgz#980f4dbfb60e517179e15e10ed98e454b132159f" + integrity sha512-2kLLAdAD+FCKijvGKi9sS0OzoqxLCF3CxHpok7rVgCZ5UldRzH0TkbwG9XECKjBzHsAewntC5oDaI/FwKzEUog== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + tslib@^2.0.3: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -5824,6 +6045,11 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typescript@^4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -5916,6 +6142,11 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +vue-class-component@^8.0.0-0: + version "8.0.0-rc.1" + resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-8.0.0-rc.1.tgz#db692cd97656eb9a08206c03d0b7398cdb1d9420" + integrity sha512-w1nMzsT/UdbDAXKqhwTmSoyuJzUXKrxLE77PCFVuC6syr8acdFDAq116xgvZh9UCuV0h+rlCtxXolr3Hi3HyPQ== + vue-cli-plugin-compression@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/vue-cli-plugin-compression/-/vue-cli-plugin-compression-1.2.0.tgz#e8d46173073182dc4e23140f9b682bf29d1920b5" @@ -5923,7 +6154,7 @@ vue-cli-plugin-compression@~1.2.0: dependencies: compression-webpack-plugin "6.1.1" -vue-eslint-parser@^9.0.1: +vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1: version "9.0.2" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.0.2.tgz#d2535516f3f55adb387939427fe741065eb7948a" integrity sha512-uCPQwTGjOtAYrwnU+76pYxalhjsh7iFBsHwBqDHiOPTxtICDaraO4Szw54WFTNZTAEsgHHzqFOu1mmnBOBRzDA== @@ -6249,7 +6480,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0, yaml@^1.10.2: +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==