From c45ea7f999d7bd49711984d015ff9289f9bd1ecf Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Mon, 10 Mar 2025 16:48:09 +0800 Subject: [PATCH] perf: switch to cac, clean up deps --- .npmrc | 1 + package.json | 21 ++-- pnpm-lock.yaml | 194 +++++------------------------- src/cli.ts | 178 +++++++-------------------- src/commands/check/checkGlobal.ts | 2 +- src/commands/check/index.ts | 2 +- src/config.ts | 2 +- src/io/packages.ts | 5 +- src/utils/dependenciesFilter.ts | 2 +- src/utils/toArray.ts | 5 - 10 files changed, 90 insertions(+), 322 deletions(-) delete mode 100644 src/utils/toArray.ts diff --git a/.npmrc b/.npmrc index ae90f70..7969496 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ ignore-workspace-root-check=true +shell-emulator=true diff --git a/package.json b/package.json index 6ea6c60..df114fb 100644 --- a/package.json +++ b/package.json @@ -24,9 +24,9 @@ "dist" ], "scripts": { - "lint": "eslint .", - "dev": "cross-env DEBUG=taze:* esno ./src/cli.ts", - "start": "esno ./src/cli.ts", + "lint": "eslint", + "dev": "DEBUG=taze:* tsx ./src/cli.ts", + "start": "tsx ./src/cli.ts", "build": "unbuild", "typecheck": "tsc", "prepublishOnly": "nr build", @@ -35,47 +35,44 @@ }, "dependencies": { "@antfu/ni": "^24.1.0", + "cac": "^6.7.14", "find-up-simple": "^1.0.1", "ofetch": "^1.4.1", "package-manager-detector": "^1.0.0", "pathe": "^2.0.3", "pnpm-workspace-yaml": "^0.1.2", + "restore-cursor": "^5.1.0", "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.12", "unconfig": "^7.3.1", - "yaml": "^2.7.0", - "yargs": "^17.7.2" + "yaml": "^2.7.0" }, "devDependencies": { "@antfu/eslint-config": "^4.8.1", "@antfu/utils": "^9.1.0", "@npmcli/config": "10.0.1", + "@posva/prompts": "^2.4.4", "@types/cli-progress": "^3.11.6", "@types/debug": "^4.1.12", "@types/node": "^22.13.10", "@types/npm-package-arg": "^6.1.4", "@types/npm-registry-fetch": "^8.0.7", - "@types/prompts": "^2.4.9", "@types/semver": "^7.5.8", - "@types/yargs": "^17.0.33", "ansis": "^3.17.0", "bumpp": "^10.0.3", "cli-progress": "^3.12.0", - "cross-env": "^7.0.3", "debug": "^4.4.0", "deepmerge": "^4.3.1", "detect-indent": "^7.0.1", "eslint": "^9.22.0", - "esno": "^4.8.0", "fast-glob": "^3.3.3", "fast-npm-meta": "^0.3.1", "npm-package-arg": "^12.0.2", "npm-registry-fetch": "^18.0.2", "p-limit": "^6.2.0", - "prompts": "^2.4.2", - "restore-cursor": "^5.1.0", - "rimraf": "^6.0.1", "semver": "^7.7.1", "taze": "workspace:*", + "tsx": "^4.19.3", "typescript": "^5.8.2", "ufo": "^1.5.4", "unbuild": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 96cc091..beb6732 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@antfu/ni': specifier: ^24.1.0 version: 24.1.0 + cac: + specifier: ^6.7.14 + version: 6.7.14 find-up-simple: specifier: ^1.0.1 version: 1.0.1 @@ -26,18 +29,21 @@ importers: pnpm-workspace-yaml: specifier: ^0.1.2 version: 0.1.2 + restore-cursor: + specifier: ^5.1.0 + version: 5.1.0 tinyexec: specifier: ^0.3.2 version: 0.3.2 + tinyglobby: + specifier: ^0.2.12 + version: 0.2.12 unconfig: specifier: ^7.3.1 version: 7.3.1 yaml: specifier: ^2.7.0 version: 2.7.0 - yargs: - specifier: ^17.7.2 - version: 17.7.2 devDependencies: '@antfu/eslint-config': specifier: ^4.8.1 @@ -48,6 +54,9 @@ importers: '@npmcli/config': specifier: 10.0.1 version: 10.0.1 + '@posva/prompts': + specifier: ^2.4.4 + version: 2.4.4 '@types/cli-progress': specifier: ^3.11.6 version: 3.11.6 @@ -63,15 +72,9 @@ importers: '@types/npm-registry-fetch': specifier: ^8.0.7 version: 8.0.7 - '@types/prompts': - specifier: ^2.4.9 - version: 2.4.9 '@types/semver': specifier: ^7.5.8 version: 7.5.8 - '@types/yargs': - specifier: ^17.0.33 - version: 17.0.33 ansis: specifier: ^3.17.0 version: 3.17.0 @@ -81,9 +84,6 @@ importers: cli-progress: specifier: ^3.12.0 version: 3.12.0 - cross-env: - specifier: ^7.0.3 - version: 7.0.3 debug: specifier: ^4.4.0 version: 4.4.0 @@ -96,9 +96,6 @@ importers: eslint: specifier: ^9.22.0 version: 9.22.0(jiti@2.4.2) - esno: - specifier: ^4.8.0 - version: 4.8.0 fast-glob: specifier: ^3.3.3 version: 3.3.3 @@ -114,21 +111,15 @@ importers: p-limit: specifier: ^6.2.0 version: 6.2.0 - prompts: - specifier: ^2.4.2 - version: 2.4.2 - restore-cursor: - specifier: ^5.1.0 - version: 5.1.0 - rimraf: - specifier: ^6.0.1 - version: 6.0.1 semver: specifier: ^7.7.1 version: 7.7.1 taze: specifier: workspace:* version: 'link:' + tsx: + specifier: ^4.19.3 + version: 4.19.3 typescript: specifier: ^5.8.2 version: 5.8.2 @@ -683,6 +674,10 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@posva/prompts@2.4.4': + resolution: {integrity: sha512-8aPwklhbSV2VN/NQMBNFkuo8+hlJVdcFRXp4NCIfdcahh3qNEcaSoD8qXjru0OlN1sONJ7le7p6+YUbALaG6Mg==} + engines: {node: '>= 14'} + '@quansync/fs@0.1.1': resolution: {integrity: sha512-sx8J1O/+j2lqs8MvsEz6rs/6UAUpCb4fu7C6EqtMqzbS3CmqLkTDTOMK+DrWukvyUuHzl8DhMjfNJzQDTqfGJg==} engines: {node: '>=20.18.0'} @@ -888,9 +883,6 @@ packages: '@types/npmlog@7.0.0': resolution: {integrity: sha512-hJWbrKFvxKyWwSUXjZMYTINsSOY6IclhvGOZ97M8ac2tmR9hMwmTnYaMdpGhvju9ctWLTPhCS+eLfQNluiEjQQ==} - '@types/prompts@2.4.9': - resolution: {integrity: sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==} - '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -903,12 +895,6 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@8.26.0': resolution: {integrity: sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1186,10 +1172,6 @@ packages: resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} engines: {node: '>=4'} - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1231,11 +1213,6 @@ packages: core-js-compat@3.40.0: resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} - cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -1598,10 +1575,6 @@ packages: jiti: optional: true - esno@4.8.0: - resolution: {integrity: sha512-acMtooReAQGzLU0zcuEDHa8S62meh5aIyi8jboYxyvAePdmuWx2Mpwmt0xjwO0bs9/SXf+dvXJ0QJoDWw814Iw==} - hasBin: true - espree@10.3.0: resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1722,10 +1695,6 @@ packages: fzf@0.5.2: resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==} - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.7: resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} engines: {node: '>= 0.4'} @@ -1753,11 +1722,6 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - glob@11.0.1: - resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} - engines: {node: 20 || >=22} - hasBin: true - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -1890,10 +1854,6 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jackspeak@4.0.3: - resolution: {integrity: sha512-oSwM7q8PTHQWuZAlp995iPpPJ4Vkl7qT0ZRD+9duL9j2oBy6KcTfyxc8mEuHJYC+z/kbps80aJLkaNzTOrf/kw==} - engines: {node: 20 || >=22} - jiti@1.21.7: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true @@ -1957,6 +1917,10 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + knitwork@1.2.0: resolution: {integrity: sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==} @@ -1997,10 +1961,6 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.0.2: - resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} - engines: {node: 20 || >=22} - magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} @@ -2162,10 +2122,6 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - minimatch@10.0.1: - resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} - engines: {node: 20 || >=22} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2380,10 +2336,6 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} - engines: {node: 20 || >=22} - pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -2668,10 +2620,6 @@ packages: resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -2700,11 +2648,6 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true - rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} - engines: {node: 20 || >=22} - hasBin: true - rollup-plugin-dts@6.1.1: resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} engines: {node: '>=16'} @@ -3102,10 +3045,6 @@ packages: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -3122,14 +3061,6 @@ packages: engines: {node: '>= 14'} hasBin: true - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -3573,6 +3504,11 @@ snapshots: '@pkgr/core@0.1.1': {} + '@posva/prompts@2.4.4': + dependencies: + kleur: 4.1.5 + sisteransi: 1.0.5 + '@quansync/fs@0.1.1': dependencies: quansync: 0.2.8 @@ -3745,11 +3681,6 @@ snapshots: dependencies: '@types/node': 22.13.10 - '@types/prompts@2.4.9': - dependencies: - '@types/node': 22.13.10 - kleur: 3.0.3 - '@types/resolve@1.20.2': {} '@types/semver@7.5.8': {} @@ -3760,12 +3691,6 @@ snapshots: '@types/unist@3.0.3': {} - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.33': - dependencies: - '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -4111,12 +4036,6 @@ snapshots: dependencies: string-width: 4.2.3 - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -4147,10 +4066,6 @@ snapshots: dependencies: browserslist: 4.24.4 - cross-env@7.0.3: - dependencies: - cross-spawn: 7.0.6 - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -4656,10 +4571,6 @@ snapshots: transitivePeerDependencies: - supports-color - esno@4.8.0: - dependencies: - tsx: 4.19.3 - espree@10.3.0: dependencies: acorn: 8.14.0 @@ -4775,8 +4686,6 @@ snapshots: fzf@0.5.2: {} - get-caller-file@2.0.5: {} - get-intrinsic@1.2.7: dependencies: call-bind-apply-helpers: 1.0.2 @@ -4826,15 +4735,6 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@11.0.1: - dependencies: - foreground-child: 3.3.0 - jackspeak: 4.0.3 - minimatch: 10.0.1 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 2.0.0 - globals@14.0.0: {} globals@15.15.0: {} @@ -4944,10 +4844,6 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@4.0.3: - dependencies: - '@isaacs/cliui': 8.0.2 - jiti@1.21.7: {} jiti@2.4.2: {} @@ -4991,6 +4887,8 @@ snapshots: kleur@3.0.3: {} + kleur@4.1.5: {} + knitwork@1.2.0: {} levn@0.4.1: @@ -5024,8 +4922,6 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.0.2: {} - magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -5364,10 +5260,6 @@ snapshots: min-indent@1.0.1: {} - minimatch@10.0.1: - dependencies: - brace-expansion: 2.0.1 - minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -5590,11 +5482,6 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-scurry@2.0.0: - dependencies: - lru-cache: 11.0.2 - minipass: 7.1.2 - pathe@1.1.2: {} pathe@2.0.3: {} @@ -5861,8 +5748,6 @@ snapshots: dependencies: jsesc: 3.0.2 - require-directory@2.1.1: {} - resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -5886,11 +5771,6 @@ snapshots: dependencies: glob: 10.4.5 - rimraf@6.0.1: - dependencies: - glob: 11.0.1 - package-json-from-dist: 1.0.1 - rollup-plugin-dts@6.1.1(rollup@4.34.9)(typescript@5.8.2): dependencies: magic-string: 0.30.17 @@ -6340,8 +6220,6 @@ snapshots: xml-name-validator@4.0.0: {} - y18n@5.0.8: {} - yallist@4.0.0: {} yallist@5.0.0: {} @@ -6353,18 +6231,6 @@ snapshots: yaml@2.7.0: {} - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - yocto-queue@0.1.0: {} yocto-queue@1.1.1: {} diff --git a/src/cli.ts b/src/cli.ts index 21e2e6d..808e968 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,10 +1,8 @@ -import type { Argv } from 'yargs' -import type { CommonOptions } from './types' +import type { CAC } from 'cac' +import type { CheckOptions, RangeMode } from './types' import process from 'node:process' -import c from 'ansis' +import { cac } from 'cac' import restoreCursor from 'restore-cursor' -import yargs from 'yargs' -import { hideBin } from 'yargs/helpers' import pkgJson from '../package.json' import { check } from './commands/check' import { checkGlobal } from './commands/check/checkGlobal' @@ -12,137 +10,47 @@ import { resolveConfig } from './config' import { LOG_LEVELS, MODE_CHOICES } from './constants' import { SORT_CHOICES } from './utils/sort' -function commonOptions(args: Argv): Argv { - return args - .option('cwd', { - alias: 'C', - type: 'string', - describe: 'specify the current working directory', - }) - .option('loglevel', { - type: 'string', - describe: 'log level', - choices: LOG_LEVELS, - }) - .option('failOnOutdated', { - type: 'boolean', - describe: 'exit with code 1 if outdated dependencies are found', - }) - .option('silent', { - alias: 's', - type: 'boolean', - describe: 'complete silent', - }) - .option('recursive', { - alias: 'r', - type: 'boolean', - describe: 'recursively search for package.json in subdirectories', - }) - .option('force', { - alias: 'f', - type: 'boolean', - describe: 'force fetching from server, bypass cache', - }) - .option('ignore-paths', { - type: 'string', - describe: 'ignore paths for search package.json', - }) - .option('ignore-other-workspaces', { - type: 'boolean', - default: true, - describe: 'ignore package.json that in other workspaces (with their own .git,pnpm-workspace.yaml,etc.)', - }) - .option('include', { - alias: 'n', - type: 'string', - describe: 'only included dependencies will be checked for updates', - }) - .option('exclude', { - alias: 'x', - type: 'string', - describe: 'exclude dependencies to be checked, will override --include options', - }) -} +const cli: CAC = cac('taze') -// eslint-disable-next-line ts/no-unused-expressions -yargs(hideBin(process.argv)) - .scriptName('taze') - .usage('$0 [args]') - .command( - '* [mode]', - 'Keeps your deps fresh', - (args) => { - return commonOptions(args) - .positional('mode', { - type: 'string', - describe: 'the mode how version range resolves, can be "default", "major", "minor", "latest" or "newest"', - choices: MODE_CHOICES, - }) - .option('write', { - alias: 'w', - type: 'boolean', - describe: 'write to package.json', - }) - .option('global', { - alias: 'g', - type: 'boolean', - describe: 'update global packages', - }) - .option('interactive', { - alias: 'I', - type: 'boolean', - describe: 'interactive mode', - }) - .option('install', { - alias: 'i', - type: 'boolean', - describe: 'install directly after bumping', - }) - .option('update', { - alias: 'u', - type: 'boolean', - describe: 'update directly after bumping', - }) - .option('all', { - alias: 'a', - type: 'boolean', - describe: 'show all packages up to date info', - }) - .option('sort', { - type: 'string', - choices: SORT_CHOICES, - describe: 'sort by most outdated absolute or relative to dependency', - }) - .option('group', { - type: 'boolean', - describe: 'group dependencies by source on display', - }) - .option('includeLocked', { - alias: 'l', - type: 'boolean', - describe: 'include locked dependencies & devDependencies', - }) - .option('timediff', { - type: 'boolean', - describe: 'show time difference between the current and the updated version', - }) - .help() - }, - async (args) => { - let exitCode - if (args.global) - exitCode = await checkGlobal(await resolveConfig(args)) - else - exitCode = await check(await resolveConfig(args)) +cli + .command('[mode]', 'Keeps your deps fresh') + .option('--cwd, -C ', 'specify the current working directory') + .option('--loglevel ', `log level (${LOG_LEVELS.join('|')})`) + .option('--fail-on-outdated', 'exit with code 1 if outdated dependencies are found') + .option('--silent, -s', 'complete silent') + .option('--recursive, -r', 'recursively search for package.json in subdirectories') + .option('--force, -f', 'force fetching from server, bypass cache') + .option('--ignore-paths ', 'ignore paths for search package.json') + .option('--ignore-other-workspaces', 'ignore package.json that in other workspaces (with their own .git,pnpm-workspace.yaml,etc.)', { default: true }) + .option('--include, -n ', 'only included dependencies will be checked for updates') + .option('--exclude, -x ', 'exclude dependencies to be checked, will override --include options') + .option('--write, -w', 'write to package.json') + .option('--global, -g', 'update global packages') + .option('--interactive, -I', 'interactive mode') + .option('--install, -i', 'install directly after bumping') + .option('--update, -u', 'update directly after bumping') + .option('--all, -a', 'show all packages up to date info') + .option('--sort ', `sort by most outdated absolute or relative to dependency (${SORT_CHOICES.join('|')})`) + .option('--group', 'group dependencies by source on display') + .option('--include-locked, -l', 'include locked dependencies & devDependencies') + .option('--timediff', 'show time difference between the current and the updated version') + .action(async (mode: RangeMode | undefined, options: Partial) => { + if (mode && !MODE_CHOICES.includes(mode)) { + console.error(`Invalid mode: ${mode}. Please use one of the following: ${MODE_CHOICES.join('|')}`) + process.exit(1) + } + let exitCode + if (options.global) + exitCode = await checkGlobal(await resolveConfig({ ...options, mode } as CheckOptions)) + else + exitCode = await check(await resolveConfig({ ...options, mode } as CheckOptions)) - process.exit(exitCode) - }, - ) - .showHelpOnFail(false) - .alias('h', 'help') - .version('version', pkgJson.version) - .alias('v', 'version') - .help() - .argv + process.exit(exitCode) + }) + +cli.help() +cli.version(pkgJson.version) + +cli.parse() restoreCursor() diff --git a/src/commands/check/checkGlobal.ts b/src/commands/check/checkGlobal.ts index d3b0140..6eec2c3 100644 --- a/src/commands/check/checkGlobal.ts +++ b/src/commands/check/checkGlobal.ts @@ -1,8 +1,8 @@ import type { CheckOptions, GlobalPackageMeta, RawDep } from '../../types' /* eslint-disable no-console */ import { getCommand } from '@antfu/ni' +import prompts from '@posva/prompts' import c from 'ansis' -import prompts from 'prompts' import { exec } from 'tinyexec' import { dumpDependencies } from '../../io/dependencies' import { resolvePackage } from '../../io/resolves' diff --git a/src/commands/check/index.ts b/src/commands/check/index.ts index c333bd0..6538279 100644 --- a/src/commands/check/index.ts +++ b/src/commands/check/index.ts @@ -6,8 +6,8 @@ import type { PackageMeta, } from '../../types' import { detect, parseNi, parseNu, run } from '@antfu/ni' +import prompts from '@posva/prompts' import c from 'ansis' -import prompts from 'prompts' import { builtinAddons } from '../../addons' import { CheckPackages } from '../../api/check' import { writePackage } from '../../io/packages' diff --git a/src/config.ts b/src/config.ts index d5d902e..cada3a5 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,10 +1,10 @@ import type { CommonOptions } from './types' import process from 'node:process' +import { toArray } from '@antfu/utils' import _debug from 'debug' import deepmerge from 'deepmerge' import { createConfigLoader } from 'unconfig' import { DEFAULT_CHECK_OPTIONS } from './constants' -import { toArray } from './utils/toArray' const debug = _debug('taze:config') diff --git a/src/io/packages.ts b/src/io/packages.ts index b54ae41..8619b2d 100644 --- a/src/io/packages.ts +++ b/src/io/packages.ts @@ -2,9 +2,9 @@ import type { CommonOptions, PackageMeta } from '../types' import { existsSync, promises as fs } from 'node:fs' import process from 'node:process' import detectIndent from 'detect-indent' -import fg from 'fast-glob' import { findUp } from 'find-up-simple' import { dirname, join, resolve } from 'pathe' +import { glob } from 'tinyglobby' import { DEFAULT_IGNORE_PATHS } from '../constants' import { createDependenciesFilter } from '../utils/dependenciesFilter' import { loadPackageJSON, writePackageJSON } from './packageJson' @@ -52,11 +52,12 @@ export async function loadPackages(options: CommonOptions): Promise a.localeCompare(b)) } diff --git a/src/utils/dependenciesFilter.ts b/src/utils/dependenciesFilter.ts index 9e40052..a53010c 100644 --- a/src/utils/dependenciesFilter.ts +++ b/src/utils/dependenciesFilter.ts @@ -1,4 +1,4 @@ -import { toArray } from './toArray' +import { toArray } from '@antfu/utils' function escapeRegExp(str: string) { return str.replace(/[.+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string diff --git a/src/utils/toArray.ts b/src/utils/toArray.ts deleted file mode 100644 index 28d430a..0000000 --- a/src/utils/toArray.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function toArray(a: T | T[] | undefined | null): T[] { - if (a == null) - return [] - return Array.isArray(a) ? a : [a] -}