diff --git a/package.json b/package.json index 193da1a..9bb024d 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ }, "dependencies": { "terminal-columns": "^1.4.1", - "type-flag": "^2.0.1" + "type-flag": "^2.1.0" }, "devDependencies": { "@pvtnbr/eslint-config": "^0.11.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 458755a..d0c458d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,12 +14,12 @@ specifiers: terminal-columns: ^1.4.1 tsd: ^0.19.1 tsup: ^5.11.10 - type-flag: ^2.0.1 + type-flag: ^2.1.0 typescript: ^4.5.4 dependencies: terminal-columns: 1.4.1 - type-flag: 2.0.1 + type-flag: 2.1.0 devDependencies: '@pvtnbr/eslint-config': 0.11.0_eslint@8.6.0+typescript@4.5.4 @@ -1705,6 +1705,7 @@ packages: resolution: {integrity: sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==} cpu: [arm64] os: [android] + requiresBuild: true dev: true optional: true @@ -1712,6 +1713,7 @@ packages: resolution: {integrity: sha512-vzkTafHKoiMX4uIN1kBnE/HXYLpNT95EgGanVk6DHGeYgDolU0NBxjO7yZpq4ZGFPOx8384eAdDrBYhO11TAlQ==} cpu: [arm64] os: [android] + requiresBuild: true dev: true optional: true @@ -1719,6 +1721,7 @@ packages: resolution: {integrity: sha512-tAEoSHnPBSH0cCAFa/aYs3LPsoTY4SwsP6wDKi4PaelbQYNJjqNpAeweyJ8l98g1D6ZkLyqsHbkYj+209sezkA==} cpu: [arm64] os: [android] + requiresBuild: true dev: true optional: true @@ -1726,6 +1729,7 @@ packages: resolution: {integrity: sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==} cpu: [x64] os: [darwin] + requiresBuild: true dev: true optional: true @@ -1733,6 +1737,7 @@ packages: resolution: {integrity: sha512-DJwzFVB95ZV7C3PQbf052WqaUuuMFXJeZJ0LKdnP1w+QOU0rlbKfX0tzuhoS//rOXUj1TFIwRuRsd0FX6skR7A==} cpu: [x64] os: [darwin] + requiresBuild: true dev: true optional: true @@ -1740,6 +1745,7 @@ packages: resolution: {integrity: sha512-t7p7WzTb+ybiD/irkMt5j/NzB+jY+8yPTsrXk5zCOH1O7DdthRnAUJ7pJPwImdL7jAGRbLtYRxUPgCHs/0qUPw==} cpu: [x64] os: [darwin] + requiresBuild: true dev: true optional: true @@ -1747,6 +1753,7 @@ packages: resolution: {integrity: sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==} cpu: [arm64] os: [darwin] + requiresBuild: true dev: true optional: true @@ -1754,6 +1761,7 @@ packages: resolution: {integrity: sha512-RNaaoZDg3nsqs5z56vYCjk/VJ76npf752W0rOaCl5lO5TsgV9zecfdYgt7dtUrIx8b7APhVaNYud+tGsDOVC9g==} cpu: [arm64] os: [darwin] + requiresBuild: true dev: true optional: true @@ -1761,6 +1769,7 @@ packages: resolution: {integrity: sha512-5FeaT2zMUajKnBwUMSsjZev5iA38YHrDmXhkOCwZQIFUvhqojinqCrvv/X7dyxb1987bcY9KGwJ+EwDwd922HQ==} cpu: [arm64] os: [darwin] + requiresBuild: true dev: true optional: true @@ -1768,6 +1777,7 @@ packages: resolution: {integrity: sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==} cpu: [x64] os: [freebsd] + requiresBuild: true dev: true optional: true @@ -1775,6 +1785,7 @@ packages: resolution: {integrity: sha512-10B3AzW894u6bGZZhWiJOHw1uEHb4AFbUuBdyml1Ht0vIqd+KqWW+iY/yMwQAzILr2WJZqEhbOXRkJtY8aRqOw==} cpu: [x64] os: [freebsd] + requiresBuild: true dev: true optional: true @@ -1782,6 +1793,7 @@ packages: resolution: {integrity: sha512-pGHBLSf7ynfyDZXUtbq/GsA2VIwQlWXrUj1AMcE0id47mRdEUM8/1ZuqMGZx63hRnNgtK9zNJ8OIu2c7qq76Qw==} cpu: [x64] os: [freebsd] + requiresBuild: true dev: true optional: true @@ -1789,6 +1801,7 @@ packages: resolution: {integrity: sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==} cpu: [arm64] os: [freebsd] + requiresBuild: true dev: true optional: true @@ -1796,6 +1809,7 @@ packages: resolution: {integrity: sha512-mSQrKB7UaWvuryBTCo9leOfY2uEUSimAvcKIaUWbk5Hth9Sg+Try+qNA/NibPgs/vHkX0KFo/Rce6RPea+P15g==} cpu: [arm64] os: [freebsd] + requiresBuild: true dev: true optional: true @@ -1803,6 +1817,7 @@ packages: resolution: {integrity: sha512-g4GgAnrx6Gh1BjKJjJWgPnOR4tW2FcAx9wFvyUjRsIjB35gT+aAFR+P/zStu5OG9LnbS8Pvjd4wS68QIXk+2dA==} cpu: [arm64] os: [freebsd] + requiresBuild: true dev: true optional: true @@ -1810,6 +1825,7 @@ packages: resolution: {integrity: sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==} cpu: [ia32] os: [linux] + requiresBuild: true dev: true optional: true @@ -1817,6 +1833,7 @@ packages: resolution: {integrity: sha512-lktF09JgJLZ63ANYHIPdYe339PDuVn19Q/FcGKkXWf+jSPkn5xkYzAabboNGZNUgNqSJ/vY7VrOn6UrBbJjgYA==} cpu: [ia32] os: [linux] + requiresBuild: true dev: true optional: true @@ -1824,6 +1841,7 @@ packages: resolution: {integrity: sha512-wPfQJadF5vTzriw/B8Ide74PeAJlZW7czNx3NIUHkHlXb+En1SeIqNzl6jG9DuJUl57xD9Ucl9YJFEkFeX8eLg==} cpu: [ia32] os: [linux] + requiresBuild: true dev: true optional: true @@ -1831,6 +1849,7 @@ packages: resolution: {integrity: sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==} cpu: [x64] os: [linux] + requiresBuild: true dev: true optional: true @@ -1838,6 +1857,7 @@ packages: resolution: {integrity: sha512-K+gCQz2oLIIBI8ZM77e9sYD5/DwEpeYCrOQ2SYXx+R4OU2CT9QjJDi4/OpE7ko4AcYMlMW7qrOCuLSgAlEj4Wg==} cpu: [x64] os: [linux] + requiresBuild: true dev: true optional: true @@ -1845,6 +1865,7 @@ packages: resolution: {integrity: sha512-+RNuLk9RhRDL2kG+KTEYl5cIgF6AGLkRnKKWEu9DpCZaickONEqrKyQSVn410Hj105DLdW6qvIXQQHPycJhExg==} cpu: [x64] os: [linux] + requiresBuild: true dev: true optional: true @@ -1852,6 +1873,7 @@ packages: resolution: {integrity: sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==} cpu: [arm] os: [linux] + requiresBuild: true dev: true optional: true @@ -1859,6 +1881,7 @@ packages: resolution: {integrity: sha512-BYa60dZ/KPmNKYxtHa3LSEdfKWHcm/RzP0MjB4AeBPhjS0D6/okhaBesZIY9kVIGDyeenKsJNOmnVt4+dhNnvQ==} cpu: [arm] os: [linux] + requiresBuild: true dev: true optional: true @@ -1866,6 +1889,7 @@ packages: resolution: {integrity: sha512-HIct38SvUAIJbiTwV/PVQroimQo96TGtzRDAEZxTorB4vsAj1r8bd0keXExPU4RH7G0zIqC4loQQpWYL+nH4Vg==} cpu: [arm] os: [linux] + requiresBuild: true dev: true optional: true @@ -1873,6 +1897,7 @@ packages: resolution: {integrity: sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==} cpu: [arm64] os: [linux] + requiresBuild: true dev: true optional: true @@ -1880,6 +1905,7 @@ packages: resolution: {integrity: sha512-+qocQuQvcp5wo/V+OLXxqHPc+gxHttJEvbU/xrCGE03vIMqraL4wMua8JQx0SWEnJCWP+Nhf//v8OSwz1Xr5kA==} cpu: [arm64] os: [linux] + requiresBuild: true dev: true optional: true @@ -1887,6 +1913,7 @@ packages: resolution: {integrity: sha512-BtWoKNYul9UoxUvQUSdSrvSmJyFL1sGnNPTSqWCg1wMe4kmc8UY2yVsXSSkKO8N2jtHxlgFyz/XhvNBzEwGVcw==} cpu: [arm64] os: [linux] + requiresBuild: true dev: true optional: true @@ -1894,6 +1921,7 @@ packages: resolution: {integrity: sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==} cpu: [mips64el] os: [linux] + requiresBuild: true dev: true optional: true @@ -1901,6 +1929,7 @@ packages: resolution: {integrity: sha512-nmUd2xoBXpGo4NJCEWoaBj+n4EtDoLEvEYc8Z3aSJrY0Oa6s04czD1flmhd0I/d6QEU8b7GQ9U0g/rtBfhtxBg==} cpu: [mips64el] os: [linux] + requiresBuild: true dev: true optional: true @@ -1908,6 +1937,7 @@ packages: resolution: {integrity: sha512-0DxnCl9XTvaQtsX6Qa+Phr5i9b04INwwSv2RbQ2UWRLoQ/037iaFzbmuhgrcmaGOcRwPkCa+4Qo5EgI01MUgsQ==} cpu: [mips64el] os: [linux] + requiresBuild: true dev: true optional: true @@ -1915,6 +1945,7 @@ packages: resolution: {integrity: sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==} cpu: [ppc64] os: [linux] + requiresBuild: true dev: true optional: true @@ -1922,6 +1953,7 @@ packages: resolution: {integrity: sha512-vsOWZjm0rZix7HSmqwPph9arRVCyPtUpcURdayQDuIhMG2/UxJxpbdRaa//w4zYqcJzAWwuyH2PAlyy0ZNuxqQ==} cpu: [ppc64] os: [linux] + requiresBuild: true dev: true optional: true @@ -1929,6 +1961,7 @@ packages: resolution: {integrity: sha512-Uzr/OMj97Q0qoWLXCvXCKUY/z1SNI4iSZEuYylM5Nd71HGStL32XWq/MReJ0PYMvUMKKJicKSKw2jWM1uBQ84Q==} cpu: [ppc64] os: [linux] + requiresBuild: true dev: true optional: true @@ -1936,6 +1969,7 @@ packages: resolution: {integrity: sha512-knArKKZm0ypIYWOWyOT7+accVwbVV1LZnl2FWWy05u9Tyv5oqJ2F5+X2Vqe/gqd61enJXQWqoufXopvG3zULOg==} cpu: [s390x] os: [linux] + requiresBuild: true dev: true optional: true @@ -1943,6 +1977,7 @@ packages: resolution: {integrity: sha512-vURka7aCA5DrRoOqOn6pXYwFlDSoQ4qnqam8AC0Ikn6tibutuhgar6M3Ek2DCuz9yqd396mngdYr5A8x2TPkww==} cpu: [s390x] os: [linux] + requiresBuild: true dev: true optional: true @@ -1950,6 +1985,7 @@ packages: resolution: {integrity: sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==} cpu: [x64] os: [netbsd] + requiresBuild: true dev: true optional: true @@ -1957,6 +1993,7 @@ packages: resolution: {integrity: sha512-6Gg8neVcLeyq0yt9bZpReb8ntZ8LBEjthxrcYWVrBElcltnDjIy1hrzsujt0+sC2rL+TlSsE9dzgyuvlDdPp2w==} cpu: [x64] os: [netbsd] + requiresBuild: true dev: true optional: true @@ -1964,6 +2001,7 @@ packages: resolution: {integrity: sha512-tjyDak2/pp0VUAhBW6/ueuReMd5qLHNlisXl5pq0Xn0z+kH9urA/t1igm0JassWbdMz123td5ZEQWoD9KbtOAw==} cpu: [x64] os: [netbsd] + requiresBuild: true dev: true optional: true @@ -1980,6 +2018,7 @@ packages: resolution: {integrity: sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==} cpu: [x64] os: [openbsd] + requiresBuild: true dev: true optional: true @@ -1987,6 +2026,7 @@ packages: resolution: {integrity: sha512-9rkHZzp10zI90CfKbFrwmQjqZaeDmyQ6s9/hvCwRkbOCHuto6RvMYH9ghQpcr5cUxD5OQIA+sHXi0zokRNXjcg==} cpu: [x64] os: [openbsd] + requiresBuild: true dev: true optional: true @@ -1994,6 +2034,7 @@ packages: resolution: {integrity: sha512-zAKKV15fIyAuDDga5rQv0lW2ufBWj/OCjqjDBb3dJf5SfoAi/DMIHuzmkKQeDQ+oxt9Rp1D7ZOlOBVflutFTqQ==} cpu: [x64] os: [openbsd] + requiresBuild: true dev: true optional: true @@ -2011,6 +2052,7 @@ packages: resolution: {integrity: sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==} cpu: [x64] os: [sunos] + requiresBuild: true dev: true optional: true @@ -2018,6 +2060,7 @@ packages: resolution: {integrity: sha512-mEU+pqkhkhbwpJj5DiN3vL0GUFR/yrL3qj8ER1amIVyRibKbj02VM1QaIuk1sy5DRVIKiFXXgCaHvH3RNWCHIw==} cpu: [x64] os: [sunos] + requiresBuild: true dev: true optional: true @@ -2025,6 +2068,7 @@ packages: resolution: {integrity: sha512-xV41Wa8imziM/2dbWZjLKQbIETRgo5dE0oc/uPsgaecJhsrdA0VkGa/V432LJSUYv967xHDQdoRRl5tr80+NnQ==} cpu: [x64] os: [sunos] + requiresBuild: true dev: true optional: true @@ -2032,6 +2076,7 @@ packages: resolution: {integrity: sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==} cpu: [ia32] os: [win32] + requiresBuild: true dev: true optional: true @@ -2039,6 +2084,7 @@ packages: resolution: {integrity: sha512-Z5DieUL1N6s78dOSdL95KWf8Y89RtPGxIoMF+LEy8ChDsX+pZpz6uAVCn+YaWpqQXO+2TnrcbgBIoprq2Mco1g==} cpu: [ia32] os: [win32] + requiresBuild: true dev: true optional: true @@ -2046,6 +2092,7 @@ packages: resolution: {integrity: sha512-AxpdeLKQSyCZo7MzdOyV4OgEbEJcjnrS/2niAjbHESbjuS5P1DN/5vZoJ/JSWDVa/40OkBuHBhAXMx1HK3UDsg==} cpu: [ia32] os: [win32] + requiresBuild: true dev: true optional: true @@ -2053,6 +2100,7 @@ packages: resolution: {integrity: sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==} cpu: [x64] os: [win32] + requiresBuild: true dev: true optional: true @@ -2060,6 +2108,7 @@ packages: resolution: {integrity: sha512-LE5Mm62y0Bilu7RDryBhHIX8rK3at5VwJ6IGM3BsASidCfOBTzqcs7Yy0/Vkq39VKeTmy9/66BAfVoZRNznoDw==} cpu: [x64] os: [win32] + requiresBuild: true dev: true optional: true @@ -2067,6 +2116,7 @@ packages: resolution: {integrity: sha512-/3pllNoy8mrz/E1rYalwiwwhzJBrYQhEapwAteHZbFVhGzYuB8F80e8x5eA8dhFHxDiZh1VzK+hREwwSt8UTQA==} cpu: [x64] os: [win32] + requiresBuild: true dev: true optional: true @@ -2074,6 +2124,7 @@ packages: resolution: {integrity: sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==} cpu: [arm64] os: [win32] + requiresBuild: true dev: true optional: true @@ -2081,6 +2132,7 @@ packages: resolution: {integrity: sha512-OJOyxDtabvcUYTc+O4dR0JMzLBz6G9+gXIHA7Oc5d5Fv1xiYa0nUeo8+W5s2e6ZkPRdIwOseYoL70rZz80S5BA==} cpu: [arm64] os: [win32] + requiresBuild: true dev: true optional: true @@ -2088,6 +2140,7 @@ packages: resolution: {integrity: sha512-lTm5naoNgaUvzIiax3XYIEebqwr3bIIEEtqUhzQ2UQ+JMBmvhr02w3sJIJqF3axTX6TgWrC1OtM7DYNvFG+aXA==} cpu: [arm64] os: [win32] + requiresBuild: true dev: true optional: true @@ -2754,6 +2807,7 @@ packages: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + requiresBuild: true dev: true optional: true @@ -5285,8 +5339,8 @@ packages: engines: {node: '>=8'} dev: true - /type-flag/2.0.1: - resolution: {integrity: sha512-dYdZq0d+UaeGx82jeYDHsNg6WXCohgtob9rOP+PpUpx7smqlXDdCOzo8mejmoRaJLbPuY00Dl5iDjJNr8vhN+Q==} + /type-flag/2.1.0: + resolution: {integrity: sha512-ln8u/BdNzppXeFP8JsmsofElwVC2/FYoQAIipzhx45jjFwSApFqIieBEY93TKoLpphQBAbazX8LCoIY59Vwxlg==} dev: false /typedarray-to-buffer/3.1.5: diff --git a/src/cli.ts b/src/cli.ts index 398eb4f..8ee5d5c 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -166,7 +166,7 @@ function cliBase< if (options.parameters) { const parsedParameters = parseParameters(options.parameters); - const _ = parsed._ as (string[] & Record); + const _ = parsed._ as (typeof parsed._ & Record); for (let i = 0; i < parsedParameters.length; i += 1) { const { name, required, spread } = parsedParameters[i]; diff --git a/tests/cleye.test-d.ts b/tests/cleye.test-d.ts index a72b3d1..cfe1e1b 100644 --- a/tests/cleye.test-d.ts +++ b/tests/cleye.test-d.ts @@ -1,7 +1,11 @@ import { expectType } from 'tsd'; import { cli, command } from '..'; +type Arguments = string[] & { '--': string[] }; + const parsed = cli({ + parameters: ['[foo]', ''], + flags: { booleanFlag: Boolean, booleanFlagDefault: { @@ -29,6 +33,9 @@ const parsed = cli({ commands: [ command({ name: 'commandA', + + parameters: ['[bar]', ''], + flags: { booleanFlag: Boolean, booleanFlagDefault: { @@ -79,6 +86,13 @@ const parsed = cli({ }); if (parsed.command === undefined) { + expectType< + Arguments & { + foo: string | undefined; + bar: string[]; + } + >(parsed._); + expectType<{ booleanFlag: boolean | undefined; booleanFlagDefault: boolean; @@ -92,6 +106,13 @@ if (parsed.command === undefined) { } if (parsed.command === 'commandA') { + expectType< + Arguments & { + bar: string | undefined; + foo: string[]; + } + >(parsed._); + expectType<{ booleanFlag: boolean | undefined; booleanFlagDefault: boolean;