diff options
Diffstat (limited to 'scripts/create-tool.sh')
| -rwxr-xr-x | scripts/create-tool.sh | 98 |
1 files changed, 84 insertions, 14 deletions
diff --git a/scripts/create-tool.sh b/scripts/create-tool.sh index 40d2ef3..b6d56dc 100755 --- a/scripts/create-tool.sh +++ b/scripts/create-tool.sh @@ -1,17 +1,20 @@ #!/usr/bin/env bash set -e -# @describe Create a boilplate tool script file. +# @describe Create a boilplate tool scriptfile. +# # It automatically generate declaration json for `*.py` and `*.js` and generate `@option` tags for `.sh`. # Examples: # argc create abc.sh foo bar! baz+ qux* # ./scripts/create-tool.sh test.py foo bar! baz+ qux* +# +# @flag --force Override the exist tool file # @arg name! The script file name. # @arg params* The script parameters main() { output="tools/$argc_name" - if [[ -f "$output" ]]; then + if [[ -f "$output" ]] && [[ -z "$argc_force" ]]; then _die "$output already exists" fi ext="${argc_name##*.}" @@ -25,6 +28,7 @@ main() { py) create_py ;; *) _die "Invalid extension name: $ext, must be one of ${support_exts[*]}" ;; esac + _die "$output generated" } create_sh() { @@ -49,25 +53,91 @@ EOF } create_js() { + properties='' + for param in "${argc_params[@]}"; do + if [[ "$param" == *'!' ]]; then + param="${param:0:$((${#param}-1))}" + property=" * @property {string} $param - " + elif [[ "$param" == *'+' ]]; then + param="${param:0:$((${#param}-1))}" + property=" * @property {string[]} $param - " + elif [[ "$param" == *'*' ]]; then + param="${param:0:$((${#param}-1))}" + property=" * @property {string[]} [$param] - " + else + property=" * @property {string} [$param] - " + fi + properties+=$'\n'"$property" + done cat <<EOF > "$output" -exports.declarate = function declarate() { - return $(build_schema) -} - -exports.execute = function execute(data) { - console.log(data) +/** + * + * @typedef {Object} Args${properties} + * @param {Args} args + */ +exports.main = function main(args) { + console.log(args); } EOF } create_py() { + has_array_param=false + has_optional_pram=false + required_properties='' + optional_properties='' + required_arguments=() + optional_arguments=() + indent=" " + for param in "${argc_params[@]}"; do + optional=false + if [[ "$param" == *'!' ]]; then + param="${param:0:$((${#param}-1))}" + type="str" + elif [[ "$param" == *'+' ]]; then + param="${param:0:$((${#param}-1))}" + type="List[str]" + has_array_param=true + elif [[ "$param" == *'*' ]]; then + param="${param:0:$((${#param}-1))}" + type="Optional[List[str]] = None" + optional=true + has_array_param=true + else + optional=true + type="Optional[str] = None" + fi + if [[ "$optional" == "true" ]]; then + has_optional_pram=true + optional_arguments+="$param: $type, " + optional_properties+=$'\n'"$indent$indent$param: -" + else + required_arguments+="$param: $type, " + required_properties+=$'\n'"$indent$indent$param: -" + fi + done + import_typing_members=() + if [[ "$has_array_param" == "true" ]]; then + import_typing_members+=("List") + fi + if [[ "$has_optional_pram" == "true" ]]; then + import_typing_members+=("Optional") + fi + imports="" + if [[ -n "$import_typing_members" ]]; then + members="$(echo "${import_typing_members[*]}" | sed 's/ /, /')" + imports="from typing import $members"$'\n' + fi + if [[ -n "$imports" ]]; then + imports="$imports"$'\n' + fi cat <<EOF > "$output" -def declarate(): - return $(build_schema) - - -def execute(data): - print(data) +${imports} +def main(${required_arguments}${optional_arguments}): + """ + Args:${required_properties}${optional_properties} + """ + pass EOF } |
