Size: a a a

Советский Angular

2020 December 16

J💖

JSON Jenny 💖 in Советский Angular
Dmitriy Teplov
ну я могу скинуть под баш, из ограничений - работает только из рута репы (где лежит angular.json), должен быть установлен jq для парсинга json
#!/bin/bash

###-begin-nx-completion-###

_list_ng_projects_by_runner() {
 jq  ".projects | to_entries[] | select(.value.architect.$1) | .key" ./angular.json 2>/dev/null
}

_ng_project_runner_completion() {
 local cword pword opts

 COMPREPLY=()
 cword=${COMP_WORDS[COMP_CWORD]}
 pword=${COMP_WORDS[COMP_CWORD - 1]}

 case ${pword} in
   g|generate)
     opts="$(list-ng-schematics.sh)"
     COMP_WORDBREAKS=${COMP_WORDBREAKS//:/}
     COMP_WORDBREAKS=${COMP_WORDBREAKS//@/}
   ;;

   b|build) opts=$( _list_ng_projects_by_runner build ) ;;

   s|serve) opts=$( _list_ng_projects_by_runner serve ) ;;

   t|test) opts=$( _list_ng_projects_by_runner test ) ;;

   l|lint) opts=$( _list_ng_projects_by_runner lint ) ;;

   *) opts="" ;;
 esac


 COMPREPLY=( $(compgen -W "${opts}" -- $cword) )

 return 0
}

complete -o default -F _ng_project_runner_completion nx

###-end-nx-completion-###
погоди, это angular.json парсит
источник

DT

Dmitriy Teplov in Советский Angular
парсер схематиков (первый раз долго будет, потом кешируется в node_modules)

должен работать под макосью, опять же нужен jq

#!/bin/sh

#TODO: error handling
REQUIRED_COMMANDS='shasum jq'

# Relative to node_modules
CACHE_FILENAME=list-ng-schematics.cache
SHA_FILENAME=../package-lock.json

checkRequiredPrograms() {
 for COMMAND in $REQUIRED_COMMANDS; do
   if [ ! "$(command -v "$COMMAND")" ]; then
     echo "Missing '$COMMAND' command!" 1>&2
     exit 102
   fi
 done
}

checkRequiredPrograms

getNodeModules() {
 DIR="$1"

 if [ -d "$DIR/node_modules" ]; then
   echo "$DIR/node_modules"
   return
 fi

 if [ "$DIR" = "/" ]; then
   return
 fi

 # recursion
 PARENTDIR="$(dirname "$DIR")"
 getNodeModules "$PARENTDIR"
}

NODE_MODULES=$(getNodeModules "$(pwd)")

[ ! -d "$NODE_MODULES" ] \
 && echo >&2 "node_modules not found." \
 && exit 101

CACHE_PATH="$NODE_MODULES/$CACHE_FILENAME"
SHA_PATH="$NODE_MODULES/$SHA_FILENAME"

if [ ! -s "$CACHE_PATH" ] || [ "$(head -n 1 "$CACHE_PATH")" != "$(shasum "$SHA_PATH" | cut -d' ' -f1)" ]; then
 FULL_PKG_LIST=$(find "$NODE_MODULES"  -type f -name package.json | grep -ve "$NODE_MODULES/.*/node_modules")

 for PKG in $FULL_PKG_LIST; do
   # Only include packages with schematics collection defined in package.json
   if grep '\"schematics\":' "$PKG" 1>/dev/null 2>&1; then
     PKG_LIST=$(echo "$PKG_LIST"; echo "$PKG")
   fi
 done

 for PKG in $PKG_LIST; do
   RES=$(jq -r '.name, .schematics' "$PKG")
   PKG_NAME="$(echo "$RES" | sed '1q;d')"
   # Relative path.
   SCHMT_PATH="$(echo "$RES" | sed '2q;d')"
   # Abosolute denormalized path.
   SCHMT_PATH="$(dirname "$PKG")/$SCHMT_PATH"
   # Absolute path.
   SCHMT_PATH="$(cd "$(dirname "$SCHMT_PATH")"; pwd)/$(basename "$SCHMT_PATH")"

   SCHMT_LIST=$(echo "$SCHMT_LIST"; jq -r ".schematics | keys | .[] | \"$PKG_NAME:\" + ." "$SCHMT_PATH")
 done

 echo "$(shasum "$SHA_PATH" | cut -d' ' -f1)$SCHMT_LIST" > "$CACHE_PATH"
else
 SCHMT_LIST=$(sed '1d' "$CACHE_PATH")
fi

echo "$SCHMT_LIST"
источник

J💖

JSON Jenny 💖 in Советский Angular
а npm run скипты типо также?
источник

DT

Dmitriy Teplov in Советский Angular
JSON Jenny 💖
а npm run скипты типо также?
а, сек
источник

DT

Dmitriy Teplov in Советский Angular
JSON Jenny 💖
а npm run скипты типо также?
короче, там сейчас зависимость в виде ноды для парсинга джсона, потому что я подумал, что если у тебя есть npm, для которого делается комплит, то есть и нода)

но перфоманса ради надо переписать через jq, чтобы не запускать ноду.
здесь создаются алиасы nr и npmrun, комплит работает для них (чтобы родной комплит npm не ковырять, но оставить рабочим)

#!/bin/bash

###-begin-npmrun-completion-###

#TODO: rewrite in sh w/ jq.
get_package_scripts="const path=require('path');let curPath=process.cwd(),shouldTraverse=!0,limit=20;const rootDir=curPath.split(path.sep)[0]+path.sep;function getScripts(){try{console.log(Object.keys(require(path.join(curPath,'package.json')).scripts).join(' ')),shouldTraverse=!1}catch(t){}}for(getScripts();shouldTraverse&&limit-- >0;)curPath=path.join(curPath,'/..'),shouldTraverse=curPath!==rootDir,getScripts();"

alias _npm_scripts_print="\node -e \"$get_package_scripts\"";

_npmrun_completion() {
 local cur
 _get_comp_words_by_ref -n : cur
 opts=$( _npm_scripts_print )
 COMPREPLY=( $(compgen -W "${opts}" -- $cur) )
 __ltrim_colon_completions "$cur"
}

_npmrun()
{
 local aliases="npmrun nr"

 for alias in $aliases
 do
   alias ${alias}="npm run"
   complete -F _npmrun_completion ${alias}
 done
}
_npmrun

###-end-npmrun-completion-###
источник

DT

Dmitriy Teplov in Советский Angular
Dmitriy Teplov
короче, там сейчас зависимость в виде ноды для парсинга джсона, потому что я подумал, что если у тебя есть npm, для которого делается комплит, то есть и нода)

но перфоманса ради надо переписать через jq, чтобы не запускать ноду.
здесь создаются алиасы nr и npmrun, комплит работает для них (чтобы родной комплит npm не ковырять, но оставить рабочим)

#!/bin/bash

###-begin-npmrun-completion-###

#TODO: rewrite in sh w/ jq.
get_package_scripts="const path=require('path');let curPath=process.cwd(),shouldTraverse=!0,limit=20;const rootDir=curPath.split(path.sep)[0]+path.sep;function getScripts(){try{console.log(Object.keys(require(path.join(curPath,'package.json')).scripts).join(' ')),shouldTraverse=!1}catch(t){}}for(getScripts();shouldTraverse&&limit-- >0;)curPath=path.join(curPath,'/..'),shouldTraverse=curPath!==rootDir,getScripts();"

alias _npm_scripts_print="\node -e \"$get_package_scripts\"";

_npmrun_completion() {
 local cur
 _get_comp_words_by_ref -n : cur
 opts=$( _npm_scripts_print )
 COMPREPLY=( $(compgen -W "${opts}" -- $cur) )
 __ltrim_colon_completions "$cur"
}

_npmrun()
{
 local aliases="npmrun nr"

 for alias in $aliases
 do
   alias ${alias}="npm run"
   complete -F _npmrun_completion ${alias}
 done
}
_npmrun

###-end-npmrun-completion-###
он уже по дереву наверх гуляет и ищет ближайший package.json, так что работает не только из корня, но там ограничение в 20 шагов
источник

DT

Dmitriy Teplov in Советский Angular
Dmitriy Teplov
короче, там сейчас зависимость в виде ноды для парсинга джсона, потому что я подумал, что если у тебя есть npm, для которого делается комплит, то есть и нода)

но перфоманса ради надо переписать через jq, чтобы не запускать ноду.
здесь создаются алиасы nr и npmrun, комплит работает для них (чтобы родной комплит npm не ковырять, но оставить рабочим)

#!/bin/bash

###-begin-npmrun-completion-###

#TODO: rewrite in sh w/ jq.
get_package_scripts="const path=require('path');let curPath=process.cwd(),shouldTraverse=!0,limit=20;const rootDir=curPath.split(path.sep)[0]+path.sep;function getScripts(){try{console.log(Object.keys(require(path.join(curPath,'package.json')).scripts).join(' ')),shouldTraverse=!1}catch(t){}}for(getScripts();shouldTraverse&&limit-- >0;)curPath=path.join(curPath,'/..'),shouldTraverse=curPath!==rootDir,getScripts();"

alias _npm_scripts_print="\node -e \"$get_package_scripts\"";

_npmrun_completion() {
 local cur
 _get_comp_words_by_ref -n : cur
 opts=$( _npm_scripts_print )
 COMPREPLY=( $(compgen -W "${opts}" -- $cur) )
 __ltrim_colon_completions "$cur"
}

_npmrun()
{
 local aliases="npmrun nr"

 for alias in $aliases
 do
   alias ${alias}="npm run"
   complete -F _npmrun_completion ${alias}
 done
}
_npmrun

###-end-npmrun-completion-###
а, судя по всему, он ещё зависит от git completions (__ltrim_colon_completions)
источник

J💖

JSON Jenny 💖 in Советский Angular
Dmitriy Teplov
короче, там сейчас зависимость в виде ноды для парсинга джсона, потому что я подумал, что если у тебя есть npm, для которого делается комплит, то есть и нода)

но перфоманса ради надо переписать через jq, чтобы не запускать ноду.
здесь создаются алиасы nr и npmrun, комплит работает для них (чтобы родной комплит npm не ковырять, но оставить рабочим)

#!/bin/bash

###-begin-npmrun-completion-###

#TODO: rewrite in sh w/ jq.
get_package_scripts="const path=require('path');let curPath=process.cwd(),shouldTraverse=!0,limit=20;const rootDir=curPath.split(path.sep)[0]+path.sep;function getScripts(){try{console.log(Object.keys(require(path.join(curPath,'package.json')).scripts).join(' ')),shouldTraverse=!1}catch(t){}}for(getScripts();shouldTraverse&&limit-- >0;)curPath=path.join(curPath,'/..'),shouldTraverse=curPath!==rootDir,getScripts();"

alias _npm_scripts_print="\node -e \"$get_package_scripts\"";

_npmrun_completion() {
 local cur
 _get_comp_words_by_ref -n : cur
 opts=$( _npm_scripts_print )
 COMPREPLY=( $(compgen -W "${opts}" -- $cur) )
 __ltrim_colon_completions "$cur"
}

_npmrun()
{
 local aliases="npmrun nr"

 for alias in $aliases
 do
   alias ${alias}="npm run"
   complete -F _npmrun_completion ${alias}
 done
}
_npmrun

###-end-npmrun-completion-###
спасибо)
источник

AT

Arams Tomojans in Советский Angular
Вот так украсили наш город)
источник

AT

Arams Tomojans in Советский Angular
источник

AT

Arams Tomojans in Советский Angular
источник

AT

Arams Tomojans in Советский Angular
источник

AT

Arams Tomojans in Советский Angular
источник

AT

Arams Tomojans in Советский Angular
источник

AT

Arams Tomojans in Советский Angular
источник

AT

Arams Tomojans in Советский Angular
источник

AT

Arams Tomojans in Советский Angular
источник

ДМ

Денис Макаров... in Советский Angular
Arams Tomojans
Вот так украсили наш город)
сразу видно, что Собянина у вас нет
снега не завезли
источник

S

Smooth Operator in Советский Angular
Денис Макаров
сразу видно, что Собянина у вас нет
снега не завезли
эээ брат
я только про Собянина подумал а ты уше пошутил
источник

AT

Arams Tomojans in Советский Angular
Денис Макаров
сразу видно, что Собянина у вас нет
снега не завезли
А в прошлом году кстати у нас тут снег лежал, но я в Питере был в это время)). В этом году погода запаздыаает, обычно ноябрь пару недель дождливый а декабрь сухой
источник