Separate project scripts from binary packages

If `jq` utility is installed:

- Suggests script names from `package.json` and their associated script

Following [this feedback](https://github.com/robbyrussell/oh-my-zsh/pull/8118#issuecomment-537148142), binaries will always be suggested.
This commit is contained in:
Maxim Devoir 2019-10-02 02:47:13 -07:00
parent 922eee0706
commit c6bdbc69e1
No known key found for this signature in database
GPG Key ID: 15FE60D138565324
1 changed files with 23 additions and 3 deletions

View File

@ -76,14 +76,34 @@ _global_commands=(
_yarn_commands_scripts() {
local -a scripts
scripts=($(yarn run --json 2>/dev/null | sed -E '/Commands available|possibleCommands/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g' | tr , '\n' | sed -e 's/:/\\:/g'))
scripts=($(yarn run --json 2>/dev/null | sed -E '/possibleCommands/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g' | tr , '\n' | sed -e 's/:/\\:/g'))
_describe 'command or script' _commands -- _global_commands -- scripts
}
_yarn_scripts() {
local -a commands
local -a binaries
local -a scripts
scripts=($(yarn run --json 2>/dev/null | sed -E '/Commands available|possibleCommands/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g' | tr , '\n' | sed -e 's/:/\\:/g'))
_describe 'script' scripts
local -a scriptsUnescaped
binaries=($(yarn run --json 2>/dev/null | sed -E '/Commands available/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g' | tr , '\n' | sed -e 's/:/\\:/g'))
scriptsUnescaped=($(yarn run --json 2>/dev/null | sed -E '/possibleCommands/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g' | tr , '\n'))
scripts=($(echo "${scriptsUnescaped[@]}" | sed -e 's/:/\\:/g'))
scriptsObject=$(yarn run --json 2>/dev/null | sed -n '/.type.\s\?:\s\?.possibleCommands./p' | head -1)
if [ "$(command -v jq)" ]; then
for script in "${scriptsUnescaped[@]}"; do
scriptCommand=$(echo -E $scriptsObject | jq ".data.hints.\"$script\"")
commands+=("$(echo "${script//:/\\:}"):$scriptCommand")
done
else
for script in "${scripts[@]}"; do
commands+=("$script:package\.json")
done
fi
commands=("${commands[@]}" "${binaries[@]}")
_describe 'scripts' commands
}
_yarn_global_commands() {