From f52d134f42e2462bc7ce255ec834f8ee4ed28875 Mon Sep 17 00:00:00 2001 From: Settel Date: Thu, 1 Sep 2022 19:17:27 +0200 Subject: [PATCH] refactor: make source code typescript strict mode ready --- client/package.json | 4 +- client/src/composables/engine/callApi.ts | 2 +- client/src/composables/engine/fetchUpdate.ts | 21 ++- client/src/composables/engine/gamemaster.ts | 11 +- client/src/composables/engine/play.ts | 3 +- client/src/composables/engine/quotes.ts | 12 +- client/src/composables/engine/startStop.ts | 5 +- client/src/composables/useEngine.ts | 4 +- client/src/composables/useI18n.ts | 9 +- client/src/stores/EngineStore.ts | 2 +- client/src/stores/GameinfoStore.ts | 2 +- client/src/stores/UserinfoStore.ts | 2 +- client/tsconfig.json | 6 + client/yarn.lock | 138 ++++++++++++++++++- 14 files changed, 188 insertions(+), 33 deletions(-) diff --git a/client/package.json b/client/package.json index 99333a7..535a690 100644 --- a/client/package.json +++ b/client/package.json @@ -11,11 +11,13 @@ "devDependencies": { "nuxt": "3.0.0-rc.8", "sass": "^1.54.0", - "sass-loader": "^13.0.2" + "sass-loader": "^13.0.2", + "typescript-strict-plugin": "^2.0.1" }, "dependencies": { "@pinia/nuxt": "^0.3.1", "build-url": "^6.0.1", + "typescript": "^4.8.2", "vue-contenteditable": "^4.0.4" } } diff --git a/client/src/composables/engine/callApi.ts b/client/src/composables/engine/callApi.ts index d1f2af9..dd0fad3 100644 --- a/client/src/composables/engine/callApi.ts +++ b/client/src/composables/engine/callApi.ts @@ -4,7 +4,7 @@ export type QueryParams = { [name: string]: string } -export async function callApi(path: string, queryParams: QueryParams) { +export async function callApi(path: string, queryParams?: QueryParams) { const url = buildUrl('/', { path, queryParams, diff --git a/client/src/composables/engine/fetchUpdate.ts b/client/src/composables/engine/fetchUpdate.ts index 9e0333a..cc84886 100644 --- a/client/src/composables/engine/fetchUpdate.ts +++ b/client/src/composables/engine/fetchUpdate.ts @@ -3,8 +3,21 @@ import { useUserinfoStore } from "@/stores/UserinfoStore" import { useGameinfoStore } from "@/stores/GameinfoStore" import { useRoundStore } from "@/stores/RoundStore" import { usePlayersStore } from "@/stores/PlayersStore" +import { EngineContext } from '@/composables/useEngine' -export async function fetchUpdate() { +type EngineResponse = { + version: string, + game: { + id: string, + name: string, + state: string, + phase: string, + round: any, + players: Array, + }, +} + +export async function fetchUpdate(this: EngineContext) { if (this.shouldStop || !this.isActive) { this.isActive = false this.shouldStop = false @@ -16,9 +29,9 @@ export async function fetchUpdate() { try { const userInfoStore = useUserinfoStore() const response = await this.callApi('/api/sync', { - v: this.version + 1, + v: '' + (this.version + 1), g: userInfoStore.gameId, - }) + }) as EngineResponse if (!Number.isInteger(response.version)) { throw Error('unexpected response from /api/sync') @@ -41,7 +54,7 @@ export async function fetchUpdate() { console.warn('engine: respawning too fast, throttling down') delay = 5000 } - } catch (e) { + } catch (e: any) { this.isConnected.value = false this.retry.value++ diff --git a/client/src/composables/engine/gamemaster.ts b/client/src/composables/engine/gamemaster.ts index cec9fb9..ebc8feb 100644 --- a/client/src/composables/engine/gamemaster.ts +++ b/client/src/composables/engine/gamemaster.ts @@ -1,34 +1,35 @@ import { useUserinfoStore } from "@/stores/UserinfoStore" +import { EngineContext } from '@/composables/useEngine' -export async function collectQuotes(): Promise { +export async function collectQuotes(this: EngineContext): Promise { const userInfoStore = useUserinfoStore() await this.callApi('/api/collectQuotes', { g: userInfoStore.gameId, }) } -export async function startGame(): Promise { +export async function startGame(this: EngineContext): Promise { const userInfoStore = useUserinfoStore() await this.callApi('/api/startGame', { g: userInfoStore.gameId, }) } -export async function continueGame(): Promise { +export async function continueGame(this: EngineContext): Promise { const userInfoStore = useUserinfoStore() await this.callApi('/api/continueGame', { g: userInfoStore.gameId, }) } -export async function resetGame(): Promise { +export async function resetGame(this: EngineContext): Promise { const userInfoStore = useUserinfoStore() await this.callApi('/api/resetGame', { g: userInfoStore.gameId, }) } -export async function finishGame(): Promise { +export async function finishGame(this: EngineContext): Promise { const userInfoStore = useUserinfoStore() await this.callApi('/api/finishGame', { g: userInfoStore.gameId, diff --git a/client/src/composables/engine/play.ts b/client/src/composables/engine/play.ts index 9e7f477..5a3c525 100644 --- a/client/src/composables/engine/play.ts +++ b/client/src/composables/engine/play.ts @@ -1,6 +1,7 @@ import { useUserinfoStore } from "@/stores/UserinfoStore" +import { EngineContext } from '@/composables/useEngine' -export async function saveSelection(selection: string): Promise { +export async function saveSelection(this: EngineContext, selection: string): Promise { const userInfoStore = useUserinfoStore() await this.callApi('/api/saveSelection', { g: userInfoStore.gameId, diff --git a/client/src/composables/engine/quotes.ts b/client/src/composables/engine/quotes.ts index a07a3b6..2e4b703 100644 --- a/client/src/composables/engine/quotes.ts +++ b/client/src/composables/engine/quotes.ts @@ -1,15 +1,19 @@ import { Ref, ref } from 'vue' import type { Quotes } from '@/composables/engine.d' import { useUserinfoStore } from "@/stores/UserinfoStore" +import { EngineContext } from '@/composables/useEngine' +type QuotesResponse = { + quotes: Quotes +} const quotes = ref([]) as Ref -export async function loadQuotes(): Promise { +export async function loadQuotes(this: EngineContext): Promise { const userInfoStore = useUserinfoStore() const response = await this.callApi('/api/getQuotes', { g: userInfoStore.gameId, - }) + }) as QuotesResponse quotes.value.splice(0, quotes.value.length, ...response.quotes) } @@ -18,7 +22,7 @@ export function getQuotesRef(): Ref { return quotes } -export async function deleteQuote(id: string): Promise { +export async function deleteQuote(this: EngineContext, id: string): Promise { const userInfoStore = useUserinfoStore() await this.callApi('/api/removeQuote', { g: userInfoStore.gameId, @@ -28,7 +32,7 @@ export async function deleteQuote(id: string): Promise { await this.loadQuotes() } -export async function saveQuote(id: string, quote: string): Promise { +export async function saveQuote(this: EngineContext, id: string, quote: string): Promise { const userInfoStore = useUserinfoStore() await this.callApi('/api/saveQuote', { g: userInfoStore.gameId, diff --git a/client/src/composables/engine/startStop.ts b/client/src/composables/engine/startStop.ts index 5ac28ff..d4d02ba 100644 --- a/client/src/composables/engine/startStop.ts +++ b/client/src/composables/engine/startStop.ts @@ -1,6 +1,7 @@ import { useUserinfoStore } from "@/stores/UserinfoStore" +import { EngineContext } from '@/composables/useEngine' -export function start(): void { +export function start(this: EngineContext): void { if (this.isActive && !this.shouldStop) { console.warn('attempt to start already running engine!') return @@ -18,7 +19,7 @@ export function start(): void { console.log('start engine') } -export function stop(): void { +export function stop(this: EngineContext): void { if (this.isActive) { this.shouldStop = true this.isConnected.value = true diff --git a/client/src/composables/useEngine.ts b/client/src/composables/useEngine.ts index 96547e1..5c8990f 100644 --- a/client/src/composables/useEngine.ts +++ b/client/src/composables/useEngine.ts @@ -7,14 +7,14 @@ import { collectQuotes, startGame, continueGame, resetGame, finishGame } from '@ import { saveSelection } from '@/composables/engine/play' import type { Quotes } from '@/composables/engine.d' -interface EngineContext { +export interface EngineContext { isActive: boolean shouldStop: boolean version: number lastFetched: Array isConnected: Ref retry: Ref - callApi: (url: string, queryParams?: QueryParams) => Promise + callApi: (path: string, queryParams?: QueryParams) => Promise fetchUpdate: () => Promise loadQuotes: () => Promise } diff --git a/client/src/composables/useI18n.ts b/client/src/composables/useI18n.ts index fab9a5e..ea3d61f 100644 --- a/client/src/composables/useI18n.ts +++ b/client/src/composables/useI18n.ts @@ -5,8 +5,11 @@ export type i18nMap = { }, } -let lang = 'de' -const defaultLang = navigator.language ? navigator.language.substr(0, 2) : 'en' +export type Lang = 'de' | 'en' + +const browserLang = navigator.language ? navigator.language.substring(0, 2) : 'en' +const defaultLang: Lang = browserLang === 'de' ? 'de' : 'en' +let lang: Lang = defaultLang export interface useI18n { setLang(lang: string): void @@ -15,7 +18,7 @@ export interface useI18n { export default (map: i18nMap): useI18n => { return { - setLang: (_lang: string): void => { + setLang: (_lang: Lang): void => { lang = _lang }, $t: (key: string): string => { diff --git a/client/src/stores/EngineStore.ts b/client/src/stores/EngineStore.ts index f8644bb..21915f8 100644 --- a/client/src/stores/EngineStore.ts +++ b/client/src/stores/EngineStore.ts @@ -7,7 +7,7 @@ export const useEngineStore = defineStore('EngineStore', { } }, actions: { - setJson(json: unknown): void { + setJson(json: any): void { this.json = json }, }, diff --git a/client/src/stores/GameinfoStore.ts b/client/src/stores/GameinfoStore.ts index d857eef..2d1b324 100644 --- a/client/src/stores/GameinfoStore.ts +++ b/client/src/stores/GameinfoStore.ts @@ -30,7 +30,7 @@ export const useGameinfoStore = defineStore('GameinfoStore', { isFinal: (state): boolean => state.gameInfo.state === 'final', }, actions: { - setGameinfo(gameInfo: unknown): void { + setGameinfo(gameInfo: Gameinfo): void { this.gameInfo = gameInfo }, }, diff --git a/client/src/stores/UserinfoStore.ts b/client/src/stores/UserinfoStore.ts index f2d6a5e..07ed6df 100644 --- a/client/src/stores/UserinfoStore.ts +++ b/client/src/stores/UserinfoStore.ts @@ -31,7 +31,7 @@ export const useUserinfoStore = defineStore('UserinfoStore', { gameId: (state): string => state.userInfo.game, }, actions: { - setUserInfo(userInfo: unknown): void { + setUserInfo(userInfo: Userinfo): void { this.userInfo = userInfo }, }, diff --git a/client/tsconfig.json b/client/tsconfig.json index 82616e0..8ff371f 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -5,6 +5,12 @@ ], "extends": "./.nuxt/tsconfig.json", "compilerOptions": { + "strict": false, + "plugins": [ + { + "name": "typescript-strict-plugin" + } + ], "types": [ "@pinia/nuxt" ] diff --git a/client/yarn.lock b/client/yarn.lock index 4d3b3ef..fd43153 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -964,7 +964,7 @@ bindings@^1.4.0: dependencies: file-uri-to-path "1.0.0" -bl@^4.0.3: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -1097,7 +1097,15 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.1: +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1145,6 +1153,13 @@ ci-info@^3.3.2: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + cli-cursor@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" @@ -1152,7 +1167,7 @@ cli-cursor@^4.0.0: dependencies: restore-cursor "^4.0.0" -cli-spinners@^2.6.1: +cli-spinners@^2.5.0, cli-spinners@^2.6.1: version "2.7.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== @@ -1309,7 +1324,7 @@ create-require@^1.1.1: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1573,7 +1588,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -end-of-stream@^1.4.1: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -1918,6 +1933,21 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -2105,6 +2135,13 @@ get-port-please@^2.6.1: dependencies: fs-memo "^1.2.0" +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -2265,6 +2302,11 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -2394,6 +2436,11 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-interactive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" @@ -2438,6 +2485,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-unicode-supported@^1.1.0, is-unicode-supported@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz#f4f54f34d8ebc84a46b93559a036763b6d3e1014" @@ -2618,6 +2670,14 @@ lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + log-symbols@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" @@ -2950,7 +3010,7 @@ normalize-url@^6.0.1, normalize-url@^6.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-run-path@^4.0.1: +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -3053,7 +3113,7 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -3076,6 +3136,21 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + ora@^6.1.2: version "6.1.2" resolved "https://registry.yarnpkg.com/ora/-/ora-6.1.2.tgz#7b3c1356b42fd90fb1dad043d5dbe649388a0bf5" @@ -3465,6 +3540,14 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -3575,6 +3658,14 @@ resolve@^1.1.7, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + restore-cursor@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" @@ -4062,6 +4153,21 @@ type-fest@^2.11.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== +typescript-strict-plugin@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/typescript-strict-plugin/-/typescript-strict-plugin-2.0.1.tgz#4e676704818c4458a8b11125e9d32032e0513de4" + integrity sha512-8LHbwpkeQN12KZMK4BsmC6U1AyF+QisiLlaPH6GoCDV3xd52emyg6mOsL4I3C1Uy2n65HrnAdSkc8yi6bWb/6Q== + dependencies: + chalk "^3.0.0" + execa "^4.0.0" + ora "^5.4.1" + yargs "^16.2.0" + +typescript@^4.8.2: + version "4.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" + integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== + ufo@^0.8.3, ufo@^0.8.4, ufo@^0.8.5: version "0.8.5" resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.8.5.tgz#e367b4205ece9d9723f2fa54f887d43ed1bce5d0" @@ -4433,11 +4539,29 @@ yaml@^1.10.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + yargs-parser@^21.0.0: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@^17.5.1: version "17.5.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e"