From 81e6177339ad250dab8fae91424adf723d3699a1 Mon Sep 17 00:00:00 2001 From: Eric Willhoit Date: Thu, 10 Oct 2024 10:48:32 -0500 Subject: [PATCH 1/4] feat: search enhancements --- package.json | 8 +- src/commands/search.ts | 198 ++++++++++++++++++++++++---- yarn.lock | 293 +++++++++++++++++++++++++++++------------ 3 files changed, 390 insertions(+), 109 deletions(-) diff --git a/package.json b/package.json index 6549f354..844dcf44 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,13 @@ "author": "Salesforce", "bugs": "https://github.com/oclif/plugin-search/issues", "dependencies": { + "@inquirer/search": "^2.0.1", "@oclif/core": "^4", - "ansi-escapes": "^7.0.0", - "inquirer-autocomplete-standalone": "^0.8.1" + "ansis": "^3.3.2", + "clipboardy": "^4.0.0", + "fuzzysort": "^3.0.2", + "got": "^14.4.2", + "open": "^10.1.0" }, "devDependencies": { "@commitlint/config-conventional": "^19", diff --git a/src/commands/search.ts b/src/commands/search.ts index b87632ef..6ae533b2 100644 --- a/src/commands/search.ts +++ b/src/commands/search.ts @@ -5,22 +5,41 @@ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ -import {Command, loadHelpClass, toConfiguredId, toStandardizedId, ux} from '@oclif/core' -import ansiEscapes from 'ansi-escapes' -import autocomplete from 'inquirer-autocomplete-standalone' +import {Command, Flags, loadHelpClass, toConfiguredId, toStandardizedId, ux} from '@oclif/core' import readline from 'node:readline' +import search from '@inquirer/search' +import fuzzysort from 'fuzzysort' +import { bold } from 'ansis' +import clipboard from 'clipboardy'; +import open from 'open'; +import { got } from 'got' export default class Search extends Command { public static description = 'Once you select a command, hit enter and it will show the help for that command.' public static summary = 'Search for a command.' + public static readonly strict = false; + + public static readonly flags = { + action: Flags.string({ + char: 'a', + summary: 'Action to take on the selected command', + options: ['help', 'copy', 'doctor', 'source', 'npm'], + }), + } public async run(): Promise { - this.log( - ux.colorize( - 'cyan', - `Use ${ux.colorize('bold', '↑')} and ${ux.colorize('bold', '↓')} keys or type to search for a command.\nPress ${ux.colorize('bold', 'ENTER')} to view help. Press ${ux.colorize('bold', 'ESC')} to exit.\n`, - ), - ) + const { flags, argv } = await this.parse(Search); + // Join the args together into a string so you can pass something like 'dep sta' to fuzzy search + const args = argv.join(' '); + + const theme = { + prefix: ux.colorize('cyan', `Use ${ux.colorize('bold', '↑')} and ${ux.colorize('bold', '↓')} keys or type to search for a command.\nPress ${ux.colorize('bold', 'ENTER')} to view help. Press ${ux.colorize('bold', 'ESC')} to exit.\n\n`), + style: { + description: (desc: string) => `\n${ux.colorize('cyan', desc)}`, // Give the description a little extra padding + }, + helpMode: 'never' + } + const commandChoices = this.config.commands .filter((c) => !c.hidden && !c.aliases.includes(c.id)) .sort((a, b) => a.id.localeCompare(b.id)) @@ -34,27 +53,40 @@ export default class Search extends Command { }) const pageSize = Math.floor(process.stdout.rows < 20 ? process.stdout.rows / 2 : 10) - const commandPromise = autocomplete({ - emptyText: 'Nothing found!', + const commandPromise = search({ message: 'Search for a command', + // @ts-expect-error Not sure why this is complaining about the helpMode type + theme, pageSize, async source(input) { - return input ? commandChoices.filter((c) => c.name.includes(input)) : commandChoices - }, - }) + // TODO: There is a bug here somewhere: + // - pass an arg + // - hit down arrow + // - hit any other character with clear the input + // - hitting delete will clear input, but keep the fuzzy results + if (input === undefined && args) input = args; - function cancel() { - commandPromise.cancel() - // erase the list of commands - process.stdout.write(ansiEscapes.eraseLines(pageSize + 3)) - } + const results = fuzzysort.go(input!, commandChoices, {key: 'name', all: true}) + + return results.map((r) => ({ + description: r.obj.description, + name: r.highlight(bold.open, bold.close), + value: r.obj.value, + })) + }, + }, { clearPromptOnDone: true }) readline.emitKeypressEvents(process.stdin) process.stdin.setRawMode(true) - process.stdin.on('keypress', (_, key) => { - if (key.name === 'escape') cancel() - if (key.name === 'c' && key.ctrl) cancel() + // If args were passed in, we "replay" the key presses to populate the search + if (args) process.stdin.emit('data', args) + + // Allow the user to exit the search with the escape key or with ctrl+c + process.stdin.on('keypress', (_, key) => { + if ((key.name === 'escape') || (key.name === 'c' && key.ctrl)) { + if (commandPromise) commandPromise.cancel() + } }) const command = await commandPromise @@ -66,8 +98,124 @@ export default class Search extends Command { if (!command) return - const Help = await loadHelpClass(this.config) - const help = new Help(this.config, this.config.pjson.oclif.helpOptions ?? this.config.pjson.helpOptions) - return help.showHelp([toStandardizedId(command, this.config)]) + const getPluginDetails = (command: string) => { + const commandId = toStandardizedId(command, this.config); + const commandConfig = this.config.findCommand(commandId) + const pluginName = commandConfig?.pluginName; + + if (!pluginName) this.error('Key `pluginName` not found in the config for this command.'); + + const commandPjson = this.config.plugins.get(pluginName)?.pjson; + const homepage = commandPjson?.homepage; + // todo - add a check for homepage + const commandVersion = commandPjson?.version; + + return { commandId, commandConfig, pluginName, homepage, commandPjson, commandVersion } + } + + const getSourceUrl = async (homepage: string, commandId: string, commandVersion?: string) => { + if (!homepage) return; + const commandToPath = `${commandId.replaceAll(':', '/')}.ts` + // TODO: do we need to take into account directory level index.ts command files? + // TODO: talk to Mike about dynamically built command paths + const urls = [ + `/blob/${commandVersion}/src/commands/${commandToPath}`, + `/blob/v${commandVersion}/src/commands/${commandToPath}`, + `/blob/-/src/commands/${commandToPath}`, + `/blob/main/src/commands/${commandToPath}`, + `/blob/master/src/commands/${commandToPath}`, + ]; + + const responses = (await Promise.all(urls.map(url => got(`${homepage}${url}`, {throwHttpErrors: false})))); + return responses.find(r => r.statusCode === 200)?.url ?? undefined; + } + + const { commandId, pluginName, homepage, commandVersion } = getPluginDetails(command); + const sourceUrl = await getSourceUrl(homepage, commandId, commandVersion) + + let actionPrompt; + + if (!flags.action) { + const actions = [ + { + name: 'Show help', + value: 'help', + description: 'Show the help text for this command', + }, + { + name: 'Copy command', + value: 'copy', + description: 'Copy the command to your clipboard' + }, + { + name: 'Copy command for doctor', + value: 'doctor', + description: 'Copy the command to your clipboard for use with the doctor command' + }, + { + name: 'Go to source code', + value: 'source', + description: 'Open the source code for this command on GitHub', + disabled: sourceUrl ? false : '(Unable to resolve source code URL)' + }, + { + name: 'View package on npm', + value: 'npm', + description: 'View the npm details for this package' + } + ] + + const actionPromise = search({ + message: `Select an action for: ${ux.colorize('dim', '$ sf ' + command)}`, + // @ts-expect-error Not sure why this is complaining about the helpMode type + theme, + pageSize, + async source(input) { + const results = fuzzysort.go(input!, actions, {key: 'name', all: true}) + + return results.map((r) => ({ + description: r.obj.description, + name: r.highlight(bold.open, bold.close), + value: r.obj.value, + disabled: r.obj.disabled, + })) + }, + }, { clearPromptOnDone: true }) + + // Allow the user to exit the search with the escape key or with ctrl+c + process.stdin.on('keypress', (_, key) => { + if ((key.name === 'escape') || (key.name === 'c' && key.ctrl)) { + if (actionPromise) actionPromise.cancel() + } + }) + + actionPrompt = await actionPromise + .catch((error) => { + if (error.message === 'Prompt was canceled') return + throw error + }) + .then((result) => result) + } + + switch (flags.action ?? actionPrompt) { + case 'help': + const Help = await loadHelpClass(this.config) + const help = new Help(this.config, this.config.pjson.oclif.helpOptions ?? this.config.pjson.helpOptions) + return help.showHelp([toStandardizedId(command, this.config)]) + case 'copy': + clipboard.writeSync(`sf ${command} `); + this.log(ux.colorize('green', 'Command copied to clipboard!')); + break; + case 'doctor': + clipboard.writeSync(`sf doctor --command "${command}"`); + this.log(ux.colorize('green', 'Command copied to clipboard!')); + break; + case 'npm': + open(`https://www.npmjs.com/package/${pluginName}/v/${commandVersion}`); + break; + case 'source': + open(sourceUrl!); + break; + } } } diff --git a/yarn.lock b/yarn.lock index 09e868a7..46543b7f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -906,25 +906,6 @@ "@inquirer/core" "^9.0.10" "@inquirer/type" "^1.5.2" -"@inquirer/core@^3.1.1": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-3.1.2.tgz#d9691e6ffae85935685641550b8370ab7e599caa" - integrity sha512-lR2GaqBkp42Ew9BOAOqf2pSp+ymVES1qN8OC90WWh45yeoYLl0Ty1GyCxmkKqBJtq/+Ea1MF12AdFcZcpRNFsw== - dependencies: - "@inquirer/type" "^1.1.2" - "@types/mute-stream" "^0.0.1" - "@types/node" "^20.4.8" - "@types/wrap-ansi" "^3.0.0" - ansi-escapes "^4.3.2" - chalk "^4.1.2" - cli-spinners "^2.9.0" - cli-width "^4.1.0" - figures "^3.2.0" - mute-stream "^1.0.0" - run-async "^3.0.0" - strip-ansi "^6.0.1" - wrap-ansi "^6.2.0" - "@inquirer/core@^9.0.10": version "9.0.10" resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.0.10.tgz#4270191e2ad3bea6223530a093dd9479bcbc7dd0" @@ -963,6 +944,24 @@ wrap-ansi "^6.2.0" yoctocolors-cjs "^2.1.2" +"@inquirer/core@^9.2.1": + version "9.2.1" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.2.1.tgz#677c49dee399c9063f31e0c93f0f37bddc67add1" + integrity sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg== + dependencies: + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + "@types/mute-stream" "^0.0.4" + "@types/node" "^22.5.5" + "@types/wrap-ansi" "^3.0.0" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^1.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + "@inquirer/figures@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.3.tgz#1227cc980f88e6d6ab85abadbf164f5038041edd" @@ -973,6 +972,11 @@ resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.5.tgz#57f9a996d64d3e3345d2a3ca04d36912e94f8790" integrity sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA== +"@inquirer/figures@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.6.tgz#1a562f916da39888c56b65b78259d2261bd7d40b" + integrity sha512-yfZzps3Cso2UbM7WlxKwZQh2Hs6plrbjs1QnzQDZhK2DgyCo6D8AaHps9olkNcUFlcYERMqU3uJSp1gmy3s/qQ== + "@inquirer/input@^2.2.4": version "2.2.9" resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-2.2.9.tgz#08fdf9a48e4f6fc64c2d508b9d10afac843f9bd8" @@ -981,6 +985,16 @@ "@inquirer/core" "^9.0.10" "@inquirer/type" "^1.5.2" +"@inquirer/search@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-2.0.1.tgz#69b774a0a826de2e27b48981d01bc5ad81e73721" + integrity sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + yoctocolors-cjs "^2.1.2" + "@inquirer/select@^2.3.10": version "2.3.10" resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-2.3.10.tgz#4491805435984726c75f89e8f810ddb1fe503123" @@ -992,11 +1006,6 @@ ansi-escapes "^4.3.2" yoctocolors-cjs "^2.1.2" -"@inquirer/type@^1.1.2": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.1.5.tgz#b8c171f755859c8159b10e41e1e3a88f0ca99d7f" - integrity sha512-wmwHvHozpPo4IZkkNtbYenem/0wnfI6hvOcGKmPEa0DwuaH5XUQzFqy6OpEpjEegZMhYIk8HDYITI16BPLtrRA== - "@inquirer/type@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.4.0.tgz#3dd0c8f78c0548bbc18b9c07af16a86c4007e1f0" @@ -1011,6 +1020,13 @@ dependencies: mute-stream "^1.0.0" +"@inquirer/type@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-2.0.0.tgz#08fa513dca2cb6264fe1b0a2fabade051444e3f6" + integrity sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag== + dependencies: + mute-stream "^1.0.0" + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -1350,6 +1366,11 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@sec-ant/readable-stream@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" + integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== + "@sigstore/bundle@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.2.0.tgz#e3f555a5c503fe176d8d1e0e829b00f842502e46" @@ -1399,6 +1420,11 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== +"@sindresorhus/is@^7.0.0": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-7.0.1.tgz#693cd0bfa7fdc71a3386b72088b660fb70851927" + integrity sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ== + "@smithy/abort-controller@^3.1.4": version "3.1.4" resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.4.tgz#7cb22871f7392319c565d1d9ab3cb04e635c4dd9" @@ -1955,7 +1981,7 @@ dependencies: "@types/node" "*" -"@types/http-cache-semantics@^4.0.2": +"@types/http-cache-semantics@^4.0.2", "@types/http-cache-semantics@^4.0.4": version "4.0.4" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== @@ -1988,13 +2014,6 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.8.tgz#a7eff5816e070c3b4d803f1d3cd780c4e42934a1" integrity sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw== -"@types/mute-stream@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.1.tgz#8ec7d16d51e2ceb054d8be0226250169d17af5b2" - integrity sha512-0yQLzYhCqGz7CQPE3iDmYjhb7KMBFOP+tBkyw+/Y2YyDI5wpS7itXXxneN1zSsUwWx3Ji6YiVYrhAnpQGS/vkw== - dependencies: - "@types/node" "*" - "@types/mute-stream@^0.0.4": version "0.0.4" resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" @@ -2016,13 +2035,20 @@ dependencies: undici-types "~5.26.4" -"@types/node@^20.14.9", "@types/node@^20.4.8": +"@types/node@^20.14.9": version "20.14.11" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.11.tgz#09b300423343460455043ddd4d0ded6ac579b74b" integrity sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA== dependencies: undici-types "~5.26.4" +"@types/node@^22.5.5": + version "22.5.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.5.tgz#52f939dd0f65fc552a4ad0b392f3c466cc5d7a44" + integrity sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA== + dependencies: + undici-types "~6.19.2" + "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" @@ -2514,6 +2540,13 @@ builtins@^5.0.1: dependencies: semver "^7.0.0" +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + cacache@^18.0.0, cacache@^18.0.2: version "18.0.2" resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.2.tgz#fd527ea0f03a603be5c0da5805635f8eef00c60c" @@ -2550,6 +2583,19 @@ cacheable-request@^10.2.8: normalize-url "^8.0.0" responselike "^3.0.0" +cacheable-request@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-12.0.1.tgz#e6f473b5b76c02e72a0ec2cd44c7cfb7c751d7c5" + integrity sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg== + dependencies: + "@types/http-cache-semantics" "^4.0.4" + get-stream "^9.0.1" + http-cache-semantics "^4.1.1" + keyv "^4.5.4" + mimic-response "^4.0.0" + normalize-url "^8.0.1" + responselike "^3.0.0" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -2731,7 +2777,7 @@ cli-progress@^3.12.0: dependencies: string-width "^4.2.3" -cli-spinners@^2.9.0, cli-spinners@^2.9.2: +cli-spinners@^2.9.2: version "2.9.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== @@ -2758,6 +2804,15 @@ cli-width@^4.1.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== +clipboardy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-4.0.0.tgz#e73ced93a76d19dd379ebf1f297565426dffdca1" + integrity sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w== + dependencies: + execa "^8.0.1" + is-wsl "^3.1.0" + is64bit "^2.0.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" @@ -3002,6 +3057,19 @@ deep-is@^0.1.3: resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +default-browser-id@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + +default-browser@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + defaults@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -3023,6 +3091,11 @@ define-data-property@^1.0.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" @@ -3274,11 +3347,6 @@ escape-string-regexp@^1.0.5: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - eslint-config-oclif-typescript@^3.1.10: version "3.1.10" resolved "https://registry.yarnpkg.com/eslint-config-oclif-typescript/-/eslint-config-oclif-typescript-3.1.10.tgz#4d56eeda70295f153bd1a491a08e6d1b67a826c6" @@ -3567,7 +3635,7 @@ eventemitter3@^5.0.1: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -execa@~8.0.1: +execa@^8.0.1, execa@~8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== @@ -3655,21 +3723,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -figures@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-5.0.0.tgz#126cd055052dea699f8a54e8c9450e6ecfc44d5f" - integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== - dependencies: - escape-string-regexp "^5.0.0" - is-unicode-supported "^1.2.0" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" @@ -3761,6 +3814,11 @@ form-data-encoder@^2.1.2: resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== +form-data-encoder@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-4.0.2.tgz#dd286fd5f9049e8ded1d44ce427f5e29185c7c12" + integrity sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw== + fs-extra@^8.1: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" @@ -3829,6 +3887,11 @@ functions-have-names@^1.2.2, functions-have-names@^1.2.3: resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +fuzzysort@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/fuzzysort/-/fuzzysort-3.0.2.tgz#22c84fb8776ad3646d9ac9bae500ee12370c770e" + integrity sha512-ZyahVgxvckB1Qosn7YGWLDJJp2XlyaQ2WmZeI+d0AzW0AMqVYnz5N89G6KAKa6m/LOtv+kzJn4lhDF/yVg11Cg== + gauge@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" @@ -3897,6 +3960,14 @@ get-stream@^8.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== +get-stream@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" + integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== + dependencies: + "@sec-ant/readable-stream" "^0.4.1" + is-stream "^4.0.1" + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -4054,6 +4125,23 @@ got@^13: p-cancelable "^3.0.0" responselike "^3.0.0" +got@^14.4.2: + version "14.4.2" + resolved "https://registry.yarnpkg.com/got/-/got-14.4.2.tgz#988ed18d8deca3a3933915fbeff36065f8f58db7" + integrity sha512-+Te/qEZ6hr7i+f0FNgXx/6WQteSM/QqueGvxeYQQFm0GDfoxLVJ/oiwUKYMTeioColWUTdewZ06hmrBjw6F7tw== + dependencies: + "@sindresorhus/is" "^7.0.0" + "@szmarczak/http-timer" "^5.0.1" + cacheable-lookup "^7.0.0" + cacheable-request "^12.0.1" + decompress-response "^6.0.0" + form-data-encoder "^4.0.2" + http2-wrapper "^2.2.1" + lowercase-keys "^3.0.0" + p-cancelable "^4.0.1" + responselike "^3.0.0" + type-fest "^4.19.0" + graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.8" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" @@ -4182,7 +4270,7 @@ http-proxy-agent@^7.0.0: agent-base "^7.1.0" debug "^4.3.4" -http2-wrapper@^2.1.10: +http2-wrapper@^2.1.10, http2-wrapper@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== @@ -4286,16 +4374,6 @@ init-package-json@^6.0.0: validate-npm-package-license "^3.0.4" validate-npm-package-name "^5.0.0" -inquirer-autocomplete-standalone@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/inquirer-autocomplete-standalone/-/inquirer-autocomplete-standalone-0.8.1.tgz#540ac162d5dd01f83d0f4016b76bf0bb64e2fff8" - integrity sha512-mlzwCTiXDX1Cw4yJL5PCq32k23XYLTK8K6BDFoL1a76iJeFB5ul6IoMU9spgdDagl2SM7P6ZaCNjj8VNXRDPOQ== - dependencies: - "@inquirer/core" "^3.1.1" - "@inquirer/type" "^1.1.2" - figures "^5.0.0" - picocolors "^1.0.0" - internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -4437,6 +4515,11 @@ is-docker@^2.0.0: resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" @@ -4466,6 +4549,13 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-lambda@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" @@ -4538,6 +4628,11 @@ is-stream@^3.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== +is-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" + integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -4582,11 +4677,6 @@ is-unicode-supported@^0.1.0: resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-unicode-supported@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" - integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -4601,6 +4691,20 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + +is64bit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is64bit/-/is64bit-2.0.0.tgz#198c627cbcb198bbec402251f88e5e1a51236c07" + integrity sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw== + dependencies: + system-architecture "^0.1.0" + isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -4744,7 +4848,7 @@ just-diff@^6.0.0: resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== -keyv@^4.5.3: +keyv@^4.5.3, keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -5316,7 +5420,7 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^8.0.0: +normalize-url@^8.0.0, normalize-url@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== @@ -5617,6 +5721,16 @@ onetime@^7.0.0: dependencies: mimic-function "^5.0.0" +open@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" + integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" + optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -5634,6 +5748,11 @@ p-cancelable@^3.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== +p-cancelable@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-4.0.1.tgz#2d1edf1ab8616b72c73db41c4bc9ecdd10af640e" + integrity sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg== + p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" @@ -5826,11 +5945,6 @@ pathval@^1.1.1: resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.0" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" @@ -6130,10 +6244,10 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -run-async@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" - integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== +run-applescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== run-parallel@^1.1.9: version "1.2.0" @@ -6590,6 +6704,11 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +system-architecture@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/system-architecture/-/system-architecture-0.1.0.tgz#71012b3ac141427d97c67c56bc7921af6bff122d" + integrity sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA== + tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" @@ -6741,6 +6860,11 @@ type-fest@^0.8.1: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^4.19.0: + version "4.26.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.26.1.tgz#a4a17fa314f976dd3e6d6675ef6c775c16d7955e" + integrity sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg== + typed-array-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" @@ -6805,6 +6929,11 @@ undici-types@~6.13.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + unicorn-magic@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" From 03ef805b5d7d708c6d76a15b0424b3e249c600b4 Mon Sep 17 00:00:00 2001 From: Eric Willhoit Date: Thu, 10 Oct 2024 11:21:10 -0500 Subject: [PATCH 2/4] chore: liiiiiiiiinting --- src/commands/search.ts | 194 +++++++++++++++++++++++------------------ 1 file changed, 107 insertions(+), 87 deletions(-) diff --git a/src/commands/search.ts b/src/commands/search.ts index 6ae533b2..0b857c46 100644 --- a/src/commands/search.ts +++ b/src/commands/search.ts @@ -5,39 +5,43 @@ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ -import {Command, Flags, loadHelpClass, toConfiguredId, toStandardizedId, ux} from '@oclif/core' -import readline from 'node:readline' import search from '@inquirer/search' +import {Command, Flags, loadHelpClass, toConfiguredId, toStandardizedId, ux} from '@oclif/core' +import {bold} from 'ansis' +import clipboard from 'clipboardy' import fuzzysort from 'fuzzysort' -import { bold } from 'ansis' -import clipboard from 'clipboardy'; -import open from 'open'; -import { got } from 'got' +import {got} from 'got' +import readline from 'node:readline' +import open from 'open' export default class Search extends Command { public static description = 'Once you select a command, hit enter and it will show the help for that command.' - public static summary = 'Search for a command.' - public static readonly strict = false; public static readonly flags = { action: Flags.string({ char: 'a', - summary: 'Action to take on the selected command', options: ['help', 'copy', 'doctor', 'source', 'npm'], + summary: 'Action to take on the selected command', }), } + public static readonly strict = false + public static summary = 'Search for a command.' + public async run(): Promise { - const { flags, argv } = await this.parse(Search); + const {argv, flags} = await this.parse(Search) // Join the args together into a string so you can pass something like 'dep sta' to fuzzy search - const args = argv.join(' '); + const args = argv.join(' ') const theme = { - prefix: ux.colorize('cyan', `Use ${ux.colorize('bold', '↑')} and ${ux.colorize('bold', '↓')} keys or type to search for a command.\nPress ${ux.colorize('bold', 'ENTER')} to view help. Press ${ux.colorize('bold', 'ESC')} to exit.\n\n`), + helpMode: 'never', + prefix: ux.colorize( + 'cyan', + `Use ${ux.colorize('bold', '↑')} and ${ux.colorize('bold', '↓')} keys or type to search for a command.\nPress ${ux.colorize('bold', 'ENTER')} to view help. Press ${ux.colorize('bold', 'ESC')} to exit.\n\n`, + ), style: { description: (desc: string) => `\n${ux.colorize('cyan', desc)}`, // Give the description a little extra padding }, - helpMode: 'never' } const commandChoices = this.config.commands @@ -53,28 +57,31 @@ export default class Search extends Command { }) const pageSize = Math.floor(process.stdout.rows < 20 ? process.stdout.rows / 2 : 10) - const commandPromise = search({ - message: 'Search for a command', - // @ts-expect-error Not sure why this is complaining about the helpMode type - theme, - pageSize, - async source(input) { - // TODO: There is a bug here somewhere: - // - pass an arg - // - hit down arrow - // - hit any other character with clear the input - // - hitting delete will clear input, but keep the fuzzy results - if (input === undefined && args) input = args; - - const results = fuzzysort.go(input!, commandChoices, {key: 'name', all: true}) - - return results.map((r) => ({ + const commandPromise = search( + { + message: 'Search for a command', + pageSize, + async source(input) { + // TODO: There is a bug here somewhere: + // - pass an arg + // - hit down arrow + // - hit any other character with clear the input + // - hitting delete will clear input, but keep the fuzzy results + if (input === undefined && args) input = args + + const results = fuzzysort.go(input!, commandChoices, {all: true, key: 'name'}) + + return results.map((r) => ({ description: r.obj.description, name: r.highlight(bold.open, bold.close), value: r.obj.value, - })) + })) + }, + // @ts-expect-error Not sure why this is complaining about the helpMode type + theme, }, - }, { clearPromptOnDone: true }) + {clearPromptOnDone: true}, + ) readline.emitKeypressEvents(process.stdin) process.stdin.setRawMode(true) @@ -84,8 +91,8 @@ export default class Search extends Command { // Allow the user to exit the search with the escape key or with ctrl+c process.stdin.on('keypress', (_, key) => { - if ((key.name === 'escape') || (key.name === 'c' && key.ctrl)) { - if (commandPromise) commandPromise.cancel() + if ((key.name === 'escape' || (key.name === 'c' && key.ctrl)) && commandPromise) { + commandPromise.cancel() } }) @@ -98,23 +105,24 @@ export default class Search extends Command { if (!command) return + // eslint-disable-next-line unicorn/consistent-function-scoping const getPluginDetails = (command: string) => { - const commandId = toStandardizedId(command, this.config); + const commandId = toStandardizedId(command, this.config) const commandConfig = this.config.findCommand(commandId) - const pluginName = commandConfig?.pluginName; + const pluginName = commandConfig?.pluginName - if (!pluginName) this.error('Key `pluginName` not found in the config for this command.'); + if (!pluginName) this.error('Key `pluginName` not found in the config for this command.') - const commandPjson = this.config.plugins.get(pluginName)?.pjson; - const homepage = commandPjson?.homepage; - // todo - add a check for homepage - const commandVersion = commandPjson?.version; + const commandPjson = this.config.plugins.get(pluginName)?.pjson + const homepage = commandPjson?.homepage + // TODO: add a check for homepage + const commandVersion = commandPjson?.version - return { commandId, commandConfig, pluginName, homepage, commandPjson, commandVersion } + return {commandConfig, commandId, commandPjson, commandVersion, homepage, pluginName} } const getSourceUrl = async (homepage: string, commandId: string, commandVersion?: string) => { - if (!homepage) return; + if (!homepage) return const commandToPath = `${commandId.replaceAll(':', '/')}.ts` // TODO: do we need to take into account directory level index.ts command files? // TODO: talk to Mike about dynamically built command paths @@ -124,98 +132,110 @@ export default class Search extends Command { `/blob/-/src/commands/${commandToPath}`, `/blob/main/src/commands/${commandToPath}`, `/blob/master/src/commands/${commandToPath}`, - ]; + ] - const responses = (await Promise.all(urls.map(url => got(`${homepage}${url}`, {throwHttpErrors: false})))); - return responses.find(r => r.statusCode === 200)?.url ?? undefined; + const responses = await Promise.all(urls.map((url) => got(`${homepage}${url}`, {throwHttpErrors: false}))) + return responses.find((r) => r.statusCode === 200)?.url ?? undefined } - const { commandId, pluginName, homepage, commandVersion } = getPluginDetails(command); + const {commandId, commandVersion, homepage, pluginName} = getPluginDetails(command) const sourceUrl = await getSourceUrl(homepage, commandId, commandVersion) - let actionPrompt; + let actionPrompt if (!flags.action) { const actions = [ { + description: 'Show the help text for this command', name: 'Show help', value: 'help', - description: 'Show the help text for this command', }, { + description: 'Copy the command to your clipboard', name: 'Copy command', value: 'copy', - description: 'Copy the command to your clipboard' }, { + description: 'Copy the command to your clipboard for use with the doctor command', name: 'Copy command for doctor', value: 'doctor', - description: 'Copy the command to your clipboard for use with the doctor command' }, { + description: 'Open the source code for this command on GitHub', + disabled: sourceUrl ? false : '(Unable to resolve source code URL)', name: 'Go to source code', value: 'source', - description: 'Open the source code for this command on GitHub', - disabled: sourceUrl ? false : '(Unable to resolve source code URL)' }, { + description: 'View the npm details for this package', name: 'View package on npm', value: 'npm', - description: 'View the npm details for this package' - } + }, ] - const actionPromise = search({ - message: `Select an action for: ${ux.colorize('dim', '$ sf ' + command)}`, - // @ts-expect-error Not sure why this is complaining about the helpMode type - theme, - pageSize, - async source(input) { - const results = fuzzysort.go(input!, actions, {key: 'name', all: true}) + const actionPromise = search( + { + message: `Select an action for: ${ux.colorize('dim', '$ sf ' + command)}`, + pageSize, + async source(input) { + const results = fuzzysort.go(input!, actions, {all: true, key: 'name'}) - return results.map((r) => ({ + return results.map((r) => ({ description: r.obj.description, + disabled: r.obj.disabled, name: r.highlight(bold.open, bold.close), value: r.obj.value, - disabled: r.obj.disabled, - })) + })) + }, + // @ts-expect-error Not sure why this is complaining about the helpMode type + theme, }, - }, { clearPromptOnDone: true }) + {clearPromptOnDone: true}, + ) // Allow the user to exit the search with the escape key or with ctrl+c process.stdin.on('keypress', (_, key) => { - if ((key.name === 'escape') || (key.name === 'c' && key.ctrl)) { - if (actionPromise) actionPromise.cancel() + if ((key.name === 'escape' || (key.name === 'c' && key.ctrl)) && actionPromise) { + actionPromise.cancel() } }) actionPrompt = await actionPromise - .catch((error) => { - if (error.message === 'Prompt was canceled') return - throw error - }) - .then((result) => result) + .catch((error) => { + if (error.message === 'Prompt was canceled') return + throw error + }) + .then((result) => result) } switch (flags.action ?? actionPrompt) { - case 'help': + case 'help': { const Help = await loadHelpClass(this.config) const help = new Help(this.config, this.config.pjson.oclif.helpOptions ?? this.config.pjson.helpOptions) return help.showHelp([toStandardizedId(command, this.config)]) - case 'copy': - clipboard.writeSync(`sf ${command} `); - this.log(ux.colorize('green', 'Command copied to clipboard!')); - break; - case 'doctor': - clipboard.writeSync(`sf doctor --command "${command}"`); - this.log(ux.colorize('green', 'Command copied to clipboard!')); - break; - case 'npm': - open(`https://www.npmjs.com/package/${pluginName}/v/${commandVersion}`); - break; - case 'source': - open(sourceUrl!); - break; + } + + case 'copy': { + clipboard.writeSync(`sf ${command} `) + this.log(ux.colorize('green', 'Command copied to clipboard!')) + break + } + + case 'doctor': { + clipboard.writeSync(`sf doctor --command "${command}"`) + this.log(ux.colorize('green', 'Command copied to clipboard!')) + break + } + + case 'npm': { + open(`https://www.npmjs.com/package/${pluginName}/v/${commandVersion}`) + break + } + + case 'source': { + open(sourceUrl!) + break + } } } } From 777f5fcdac0c3bb00a7376038ba5d77463dc1cb9 Mon Sep 17 00:00:00 2001 From: Eric Willhoit Date: Thu, 10 Oct 2024 11:23:23 -0500 Subject: [PATCH 3/4] chore: got version --- package.json | 2 +- yarn.lock | 78 ++++------------------------------------------------ 2 files changed, 6 insertions(+), 74 deletions(-) diff --git a/package.json b/package.json index 844dcf44..05acedc0 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "ansis": "^3.3.2", "clipboardy": "^4.0.0", "fuzzysort": "^3.0.2", - "got": "^14.4.2", + "got": "^13.0.0", "open": "^10.1.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 46543b7f..0da47ff3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1366,11 +1366,6 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@sec-ant/readable-stream@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" - integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== - "@sigstore/bundle@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.2.0.tgz#e3f555a5c503fe176d8d1e0e829b00f842502e46" @@ -1420,11 +1415,6 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== -"@sindresorhus/is@^7.0.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-7.0.1.tgz#693cd0bfa7fdc71a3386b72088b660fb70851927" - integrity sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ== - "@smithy/abort-controller@^3.1.4": version "3.1.4" resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.4.tgz#7cb22871f7392319c565d1d9ab3cb04e635c4dd9" @@ -1981,7 +1971,7 @@ dependencies: "@types/node" "*" -"@types/http-cache-semantics@^4.0.2", "@types/http-cache-semantics@^4.0.4": +"@types/http-cache-semantics@^4.0.2": version "4.0.4" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== @@ -2583,19 +2573,6 @@ cacheable-request@^10.2.8: normalize-url "^8.0.0" responselike "^3.0.0" -cacheable-request@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-12.0.1.tgz#e6f473b5b76c02e72a0ec2cd44c7cfb7c751d7c5" - integrity sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg== - dependencies: - "@types/http-cache-semantics" "^4.0.4" - get-stream "^9.0.1" - http-cache-semantics "^4.1.1" - keyv "^4.5.4" - mimic-response "^4.0.0" - normalize-url "^8.0.1" - responselike "^3.0.0" - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -3814,11 +3791,6 @@ form-data-encoder@^2.1.2: resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== -form-data-encoder@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-4.0.2.tgz#dd286fd5f9049e8ded1d44ce427f5e29185c7c12" - integrity sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw== - fs-extra@^8.1: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" @@ -3960,14 +3932,6 @@ get-stream@^8.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== -get-stream@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" - integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== - dependencies: - "@sec-ant/readable-stream" "^0.4.1" - is-stream "^4.0.1" - get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -4108,7 +4072,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -got@^13: +got@^13, got@^13.0.0: version "13.0.0" resolved "https://registry.yarnpkg.com/got/-/got-13.0.0.tgz#a2402862cef27a5d0d1b07c0fb25d12b58175422" integrity sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA== @@ -4125,23 +4089,6 @@ got@^13: p-cancelable "^3.0.0" responselike "^3.0.0" -got@^14.4.2: - version "14.4.2" - resolved "https://registry.yarnpkg.com/got/-/got-14.4.2.tgz#988ed18d8deca3a3933915fbeff36065f8f58db7" - integrity sha512-+Te/qEZ6hr7i+f0FNgXx/6WQteSM/QqueGvxeYQQFm0GDfoxLVJ/oiwUKYMTeioColWUTdewZ06hmrBjw6F7tw== - dependencies: - "@sindresorhus/is" "^7.0.0" - "@szmarczak/http-timer" "^5.0.1" - cacheable-lookup "^7.0.0" - cacheable-request "^12.0.1" - decompress-response "^6.0.0" - form-data-encoder "^4.0.2" - http2-wrapper "^2.2.1" - lowercase-keys "^3.0.0" - p-cancelable "^4.0.1" - responselike "^3.0.0" - type-fest "^4.19.0" - graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.8" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" @@ -4270,7 +4217,7 @@ http-proxy-agent@^7.0.0: agent-base "^7.1.0" debug "^4.3.4" -http2-wrapper@^2.1.10, http2-wrapper@^2.2.1: +http2-wrapper@^2.1.10: version "2.2.1" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== @@ -4628,11 +4575,6 @@ is-stream@^3.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== -is-stream@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" - integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== - is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -4848,7 +4790,7 @@ just-diff@^6.0.0: resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== -keyv@^4.5.3, keyv@^4.5.4: +keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -5420,7 +5362,7 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^8.0.0, normalize-url@^8.0.1: +normalize-url@^8.0.0: version "8.0.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== @@ -5748,11 +5690,6 @@ p-cancelable@^3.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== -p-cancelable@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-4.0.1.tgz#2d1edf1ab8616b72c73db41c4bc9ecdd10af640e" - integrity sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg== - p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" @@ -6860,11 +6797,6 @@ type-fest@^0.8.1: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^4.19.0: - version "4.26.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.26.1.tgz#a4a17fa314f976dd3e6d6675ef6c775c16d7955e" - integrity sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg== - typed-array-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" From 91ed5dfaf464dad5a19f1fc23ad25f56235564ee Mon Sep 17 00:00:00 2001 From: svc-cli-bot Date: Thu, 10 Oct 2024 16:27:32 +0000 Subject: [PATCH 4/4] chore(release): 1.2.12-dev.0 [skip ci] --- README.md | 10 +++++++--- package.json | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 71a0a3b4..6f447375 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @oclif/plugin-search $ @oclif/plugin-search COMMAND running command... $ @oclif/plugin-search (--version) -@oclif/plugin-search/1.2.11 linux-x64 node-v18.20.4 +@oclif/plugin-search/1.2.12-dev.0 linux-x64 node-v18.20.4 $ @oclif/plugin-search --help [COMMAND] USAGE $ @oclif/plugin-search COMMAND @@ -45,7 +45,11 @@ Search for a command. ``` USAGE - $ @oclif/plugin-search search + $ @oclif/plugin-search search [-a help|copy|doctor|source|npm] + +FLAGS + -a, --action=