diff --git a/package-lock.json b/package-lock.json index d49f466..e4cdbe6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@homebridge/node-pty-prebuilt-multiarch": "^0.11.12", - "@withfig/autocomplete": "2.651.0", + "@withfig/autocomplete": "2.675.0", "@xterm/addon-unicode11": "^0.8.0", "@xterm/headless": "^5.5.0", "ajv": "^8.12.0", @@ -918,27 +918,6 @@ "node": ">=4.2.0" } }, - "node_modules/@fig/autocomplete-hooks": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@fig/autocomplete-hooks/-/autocomplete-hooks-1.0.2.tgz", - "integrity": "sha512-4T/UVZcrJjnv9zy+hF8ifIrlCd0DeZ0I+t3Zy8dvKqFXeYnMM+z/SdQYb8SvTwu5VdRcQtvYnJHINks8jySG+A==", - "dependencies": { - "@withfig/api-bindings": "^0.29.3", - "react": "^18.2.0" - } - }, - "node_modules/@fig/autocomplete-hooks/node_modules/@withfig/api-bindings": { - "version": "0.29.4", - "resolved": "https://registry.npmjs.org/@withfig/api-bindings/-/api-bindings-0.29.4.tgz", - "integrity": "sha512-+HrbQdHaXQdGTRQzlqM4GQwm7aBQ8SA6PD5tNSZh0Z71jcVhNeFc/vMBf07A9KqwkMTjojOiJYXz1YkQN/eZEA==", - "dependencies": { - "long": "^5.2.1", - "protobufjs": "^7.1.2" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/@homebridge/node-pty-prebuilt-multiarch": { "version": "0.11.12", "resolved": "https://registry.npmjs.org/@homebridge/node-pty-prebuilt-multiarch/-/node-pty-prebuilt-multiarch-0.11.12.tgz", @@ -1692,60 +1671,6 @@ "node": ">=14" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -2118,7 +2043,8 @@ "node_modules/@types/node": { "version": "20.8.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", - "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==" + "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==", + "dev": true }, "node_modules/@types/prop-types": { "version": "15.7.8", @@ -2371,35 +2297,20 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@withfig/api-bindings": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/@withfig/api-bindings/-/api-bindings-0.30.3.tgz", - "integrity": "sha512-BDtsXb888gzUq6NPPvnHW8InLRM2zqgvF1Eq7ns/tlducbygRbHvM71UPkJekDkLMTUhkFCOhrtsWIR3LuESmw==", - "dependencies": { - "long": "^5.2.3", - "protobufjs": "^7.2.4" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/@withfig/autocomplete": { - "version": "2.651.0", - "resolved": "https://registry.npmjs.org/@withfig/autocomplete/-/autocomplete-2.651.0.tgz", - "integrity": "sha512-Qw9cRf1rqMyervbtU7SU2XZcIBCJW4OmSP0ykgnzw5tP0FmZZhnyZKl8guzoDVvKfdBDBYwecqnLbBIF0sEruQ==", + "version": "2.675.0", + "resolved": "https://registry.npmjs.org/@withfig/autocomplete/-/autocomplete-2.675.0.tgz", + "integrity": "sha512-G6peK+GJyr0UceMV/oo4jo4fCmbKTbIe3Bhaso3M0Holwy69iLGW+uTbGdWdg1COeQZATZIPubdIUJb1GufJrA==", "dependencies": { "@fig/autocomplete-generators": "^2.4.0", "@fig/autocomplete-helpers": "^1.0.7", - "@fig/autocomplete-hooks": "^1.0.2", - "@withfig/api-bindings": "^0.30.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "semver": "^7.5.4", + "semver": "^7.6.2", "strip-json-comments": "^5.0.1", - "yaml": "^2.3.2" + "yaml": "^2.4.5" }, "engines": { - "node": ">=18" + "node": ">=20", + "pnpm": ">=9" } }, "node_modules/@withfig/autocomplete-types": { @@ -6374,7 +6285,8 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "3.14.1", @@ -6865,15 +6777,11 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -6881,17 +6789,6 @@ "loose-envify": "cli.js" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -7569,29 +7466,6 @@ "signal-exit": "^3.0.2" } }, - "node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -7667,29 +7541,6 @@ "node": ">=0.10.0" } }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -7967,21 +7818,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -9040,11 +8880,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/yaml": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", @@ -9808,26 +9643,6 @@ } } }, - "@fig/autocomplete-hooks": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@fig/autocomplete-hooks/-/autocomplete-hooks-1.0.2.tgz", - "integrity": "sha512-4T/UVZcrJjnv9zy+hF8ifIrlCd0DeZ0I+t3Zy8dvKqFXeYnMM+z/SdQYb8SvTwu5VdRcQtvYnJHINks8jySG+A==", - "requires": { - "@withfig/api-bindings": "^0.29.3", - "react": "^18.2.0" - }, - "dependencies": { - "@withfig/api-bindings": { - "version": "0.29.4", - "resolved": "https://registry.npmjs.org/@withfig/api-bindings/-/api-bindings-0.29.4.tgz", - "integrity": "sha512-+HrbQdHaXQdGTRQzlqM4GQwm7aBQ8SA6PD5tNSZh0Z71jcVhNeFc/vMBf07A9KqwkMTjojOiJYXz1YkQN/eZEA==", - "requires": { - "long": "^5.2.1", - "protobufjs": "^7.1.2" - } - } - } - }, "@homebridge/node-pty-prebuilt-multiarch": { "version": "0.11.12", "resolved": "https://registry.npmjs.org/@homebridge/node-pty-prebuilt-multiarch/-/node-pty-prebuilt-multiarch-0.11.12.tgz", @@ -10389,60 +10204,6 @@ "dev": true, "optional": true }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, "@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -10707,7 +10468,8 @@ "@types/node": { "version": "20.8.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", - "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==" + "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==", + "dev": true }, "@types/prop-types": { "version": "15.7.8", @@ -10871,29 +10633,16 @@ "eslint-visitor-keys": "^3.4.1" } }, - "@withfig/api-bindings": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/@withfig/api-bindings/-/api-bindings-0.30.3.tgz", - "integrity": "sha512-BDtsXb888gzUq6NPPvnHW8InLRM2zqgvF1Eq7ns/tlducbygRbHvM71UPkJekDkLMTUhkFCOhrtsWIR3LuESmw==", - "requires": { - "long": "^5.2.3", - "protobufjs": "^7.2.4" - } - }, "@withfig/autocomplete": { - "version": "2.651.0", - "resolved": "https://registry.npmjs.org/@withfig/autocomplete/-/autocomplete-2.651.0.tgz", - "integrity": "sha512-Qw9cRf1rqMyervbtU7SU2XZcIBCJW4OmSP0ykgnzw5tP0FmZZhnyZKl8guzoDVvKfdBDBYwecqnLbBIF0sEruQ==", + "version": "2.675.0", + "resolved": "https://registry.npmjs.org/@withfig/autocomplete/-/autocomplete-2.675.0.tgz", + "integrity": "sha512-G6peK+GJyr0UceMV/oo4jo4fCmbKTbIe3Bhaso3M0Holwy69iLGW+uTbGdWdg1COeQZATZIPubdIUJb1GufJrA==", "requires": { "@fig/autocomplete-generators": "^2.4.0", "@fig/autocomplete-helpers": "^1.0.7", - "@fig/autocomplete-hooks": "^1.0.2", - "@withfig/api-bindings": "^0.30.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "semver": "^7.5.4", + "semver": "^7.6.2", "strip-json-comments": "^5.0.1", - "yaml": "^2.3.2" + "yaml": "^2.4.5" } }, "@withfig/autocomplete-types": { @@ -13720,7 +13469,8 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "js-yaml": { "version": "3.14.1", @@ -14061,27 +13811,15 @@ } } }, - "long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -14572,25 +14310,6 @@ "signal-exit": "^3.0.2" } }, - "protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - } - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -14635,23 +14354,6 @@ } } }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -14827,21 +14529,10 @@ "is-regex": "^1.1.4" } }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" }, "set-function-name": { "version": "2.0.1", @@ -15574,11 +15265,6 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "yaml": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", diff --git a/package.json b/package.json index 53e7b5f..648bd84 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "homepage": "https://github.com/microsoft/inshellisense#readme", "dependencies": { "@homebridge/node-pty-prebuilt-multiarch": "^0.11.12", - "@withfig/autocomplete": "2.651.0", + "@withfig/autocomplete": "2.675.0", "@xterm/addon-unicode11": "^0.8.0", "@xterm/headless": "^5.5.0", "ajv": "^8.12.0", diff --git a/src/runtime/suggestion.ts b/src/runtime/suggestion.ts index 5e0f2d9..0dd94f0 100644 --- a/src/runtime/suggestion.ts +++ b/src/runtime/suggestion.ts @@ -9,7 +9,7 @@ import { runTemplates } from "./template.js"; import { Suggestion, SuggestionBlob } from "./model.js"; import log from "../utils/log.js"; -enum SuggestionIcons { +export enum SuggestionIcons { File = "📄", Folder = "📁", Subcommand = "📦", diff --git a/src/tests/runtime/__snapshots__/runtime.test.ts.snap b/src/tests/runtime/__snapshots__/runtime.test.ts.snap index 2e2eb37..d138eca 100644 --- a/src/tests/runtime/__snapshots__/runtime.test.ts.snap +++ b/src/tests/runtime/__snapshots__/runtime.test.ts.snap @@ -476,7 +476,7 @@ exports[`parseCommand loadSpec 1`] = ` "allNames": [ "add-tags-to-certificate", ], - "description": "Adds one or more tags to an ACM certificate. Tags are labels that you can use to identify and organize your AWS resources. Each tag consists of a key and an optional value. You specify the certificate on input by its Amazon Resource Name (ARN). You specify the tag by using a key-value pair. You can apply a tag to just one certificate if you want to identify a specific characteristic of that certificate, or you can apply the same tag to multiple certificates if you want to filter for a common relationship among those certificates. Similarly, you can apply the same tag to multiple resources if you want to specify a relationship among those resources. For example, you can add the same tag to an ACM certificate and an Elastic Load Balancing load balancer to indicate that they are both used by the same website. For more information, see Tagging ACM certificates. To remove one or more tags, use the RemoveTagsFromCertificate action. To view all of the tags that have been applied to the certificate, use the ListTagsForCertificate action", + "description": "Adds one or more tags to an ACM certificate. Tags are labels that you can use to identify and organize your Amazon Web Services resources. Each tag consists of a key and an optional value. You specify the certificate on input by its Amazon Resource Name (ARN). You specify the tag by using a key-value pair. You can apply a tag to just one certificate if you want to identify a specific characteristic of that certificate, or you can apply the same tag to multiple certificates if you want to filter for a common relationship among those certificates. Similarly, you can apply the same tag to multiple resources if you want to specify a relationship among those resources. For example, you can add the same tag to an ACM certificate and an Elastic Load Balancing load balancer to indicate that they are both used by the same website. For more information, see Tagging ACM certificates. To remove one or more tags, use the RemoveTagsFromCertificate action. To view all of the tags that have been applied to the certificate, use the ListTagsForCertificate action", "icon": "📦", "insertValue": undefined, "name": "add-tags-to-certificate", diff --git a/src/tests/runtime/runtime.test.ts b/src/tests/runtime/runtime.test.ts index 5acf7af..a65e563 100644 --- a/src/tests/runtime/runtime.test.ts +++ b/src/tests/runtime/runtime.test.ts @@ -1,8 +1,11 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +import fs from "node:fs"; + import { getSuggestions } from "../../runtime/runtime.js"; import { Shell } from "../../utils/shell.js"; +import { SuggestionIcons } from "../../runtime/suggestion.js"; const testData = [ { name: "partialPrefixFilter", command: "git sta" }, @@ -39,20 +42,48 @@ describe(`parseCommand`, () => { }); }); -const platformTestData = [ - { name: "macosSpawnCommand", command: "brew install mullvad-brow", platform: "darwin", maxSuggestions: 1, expectedNames: ["mullvad-browser"] }, +const commandSuggestionsData = [ + { + name: "brewInstallMullvad", + command: "brew install mullvad-brow", + platforms: ["darwin"], + maxSuggestions: 1, + expectedNames: ["mullvad-browser"], + expectedIcons: ["🍺"], + }, + { name: "gitStat", command: "git stat", maxSuggestions: 1, expectedNames: ["status"], expectedIcons: [SuggestionIcons.Subcommand] }, // subcommand generator + { name: "gitStatus", command: "git status ", expectedNames: ["demo.ts"] }, // script + post-process generator + { name: "ls", command: "ls ", expectedNames: [".eslintrc.cjs"], expectedIcons: [SuggestionIcons.File] }, // file generator + { name: "cd", command: "cd ", expectedNames: ["docs/"], expectedIcons: [SuggestionIcons.Folder] }, // folder generator + { name: "find", command: "find -", maxSuggestions: 1, expectedIcons: [SuggestionIcons.Option] }, // filtering file generator + { name: "goTool", command: "go build -buildmode ", maxSuggestions: 1, expectedNames: ["archive"] }, // script + split-on generator + { name: "preCommitRun", command: "pre-commit run ", maxSuggestions: 1, expectedIcons: [SuggestionIcons.Option] }, // script + post-process generator w/ console logs ]; -describe(`parsePlatformCommand`, () => { - platformTestData.forEach(({ command, name, maxSuggestions, expectedNames, platform }) => { - if (platform != null && process.platform != platform) return; +describe(`getCommandSuggestions`, () => { + beforeAll(async () => await getCommandSuggestionsSetup()); + + commandSuggestionsData.forEach(({ command, name, maxSuggestions, expectedNames, expectedIcons, platforms }) => { + if (platforms != null && !platforms.includes(process.platform)) return; test(name, async () => { const suggestions = await getSuggestions(command, process.cwd(), Shell.Cmd); if (suggestions != null && suggestions.suggestions != null) { suggestions.suggestions = suggestions?.suggestions.slice(0, maxSuggestions); } const names = suggestions?.suggestions.map((s) => s.allNames).flat() ?? []; - expect(names).toEqual(expect.arrayContaining(expectedNames)); + const icons = suggestions?.suggestions.map((s) => s.icon) ?? []; + expect(names).toEqual(expect.arrayContaining(expectedNames ?? [])); + expect(icons).toEqual(expect.arrayContaining(expectedIcons ?? [])); }); }); + + afterAll(async () => await getCommandSuggestionsCleanup()); }); + +const getCommandSuggestionsSetup = async () => { + fs.closeSync(fs.openSync("demo.ts", "w")); +}; + +const getCommandSuggestionsCleanup = async () => { + fs.rmSync("demo.ts"); +};