From 68acc655215f6e577d5bf8d5d8320cb5c86cd03e Mon Sep 17 00:00:00 2001 From: York Yao Date: Tue, 25 Jan 2022 20:40:01 +0800 Subject: [PATCH] feat: support --update-if-higher #107 --- README.md | 2 ++ packages/cli/src/index.ts | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a205961..19f9466 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ name | type | description `-h`, `--help` | boolean? | show help(Added in `v2.5`) `--is` | number? | fail if coverage rate !== this value(Added in `v2.6`) `--update` | boolean? | update "typeCoverage" in package.json to current result(Added in `v2.6`) +`--update-if-higher` | boolean? | update "typeCoverage" in package.json to current result if new type coverage is higher(Added in `v2.20`) `--ignore-unread` | boolean? | allow writes to variables with implicit any types(Added in `v2.14`) `--ignore-nested` | boolean? | ignore any in type arguments, eg: `Promise`(Added in `v2.16`) `--ignore-as-assertion` | boolean? | ignore as assertion, eg: `foo as string`(Added in `v2.16`) @@ -101,6 +102,7 @@ This tool will ignore the files, eg: `--ignore-files "demo1/*.ts" --ignore-files "strict": true, // same as --strict (Added in `v2.11`) "suppressError": true, // same as --suppressError (Added in `v2.11`) "update": true, // same as --update (Added in `v2.11`) + "updateIfHigher": true, // same as --update-if-higher (Added in `v2.20`) "ignoreUnread": true, // same as --ignore-unread (Added in `v2.14`) "ignoreNested": true, // same as --ignore-nested (Added in `v2.16`) "ignoreAsAssertion": true, // same as --ignore-as-assertion (Added in `v2.16`) diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index a4b5d89..16f55f5 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -30,6 +30,7 @@ function printHelp() { -h,--help boolean? show help --is number? fail if coverage rate !== this value --update boolean? update "typeCoverage" in package.json to current result +--update-if-higher boolean? update "typeCoverage" in package.json to current result if new type coverage is higher --ignore-nested boolean? ignore any in type arguments, eg: Promise --ignore-as-assertion boolean? ignore as assertion, eg: foo as string --ignore-type-assertion boolean? ignore type assertion, eg: foo @@ -70,6 +71,7 @@ interface CliArgs extends BaseArgs { ['history-file']: string ['no-detail-when-failed']: boolean + ['update-if-higher']: boolean } interface PkgArgs extends BaseArgs { @@ -86,6 +88,7 @@ interface PkgArgs extends BaseArgs { historyFile: string noDetailWhenFailed: boolean + updateIfHigher: boolean } interface PackageJson { @@ -120,6 +123,7 @@ async function executeCommandLine() { project, strict, update, + updateIfHigher, ignoreNested, ignoreAsAssertion, ignoreTypeAssertion, @@ -157,6 +161,8 @@ async function executeCommandLine() { if (update) { await saveTarget(+percentString) + } else if (updateIfHigher) { + await saveTarget(+percentString, true) } if (historyFile) { await saveHistory(+percentString, historyFile) @@ -211,6 +217,7 @@ async function getTarget(argv: CliArgs) { const project = getArgOrCfgVal(['p', 'project']) || '.' const strict = getArgOrCfgVal(['strict']) const update = getArgOrCfgVal(['update']) + const updateIfHigher = getArgOrCfgVal(['update-if-higher', 'updateIfHigher']) const ignoreNested = getArgOrCfgVal(['ignore-nested', 'ignoreNested']) const ignoreAsAssertion = getArgOrCfgVal(['ignore-as-assertion', 'ignoreAsAssertion']) const ignoreTypeAssertion = getArgOrCfgVal(['ignore-type-assertion', 'ignoreTypeAssertion']) @@ -231,6 +238,7 @@ async function getTarget(argv: CliArgs) { project, strict, update, + updateIfHigher, ignoreNested, ignoreAsAssertion, ignoreTypeAssertion, @@ -241,7 +249,7 @@ async function getTarget(argv: CliArgs) { }; } -async function saveTarget(target: number) { +async function saveTarget(target: number, ifHigher?: boolean) { const packageJsonPath = path.resolve(process.cwd(), 'package.json') if (await existsAsync(packageJsonPath)) { const currentPackageJson: { @@ -252,9 +260,13 @@ async function saveTarget(target: number) { } = JSON.parse((await readFileAsync(packageJsonPath)).toString()) if (currentPackageJson.typeCoverage) { if (currentPackageJson.typeCoverage.atLeast) { - currentPackageJson.typeCoverage.atLeast = target + if (!ifHigher || target > currentPackageJson.typeCoverage.atLeast) { + currentPackageJson.typeCoverage.atLeast = target + } } else if (currentPackageJson.typeCoverage.is) { - currentPackageJson.typeCoverage.is = target + if (!ifHigher || target > currentPackageJson.typeCoverage.is) { + currentPackageJson.typeCoverage.is = target + } } await writeFileAsync(packageJsonPath, JSON.stringify(currentPackageJson, null, 2) + '\n') }