diff --git a/Makefile b/Makefile index 3f7ca8e1..1d114b81 100644 --- a/Makefile +++ b/Makefile @@ -92,5 +92,8 @@ clean: rm -rf $(AKASH_TS_ROOT)/dist .PHONY: clean-codegen -clean-codegen: - rm -rf $(AKASH_TS_ROOT)/src/generated \ No newline at end of file +clean-codegen: $(AKASH_DEVCACHE_BASE)/tmp/ts + rm -rf $(AKASH_TS_ROOT)/src/generated + +$(AKASH_DEVCACHE_BASE)/tmp/ts: + script/ts-patches.sh preserve \ No newline at end of file diff --git a/script/protocgen-legacy.sh b/script/protocgen-legacy.sh index 1c692989..f9e54b44 100755 --- a/script/protocgen-legacy.sh +++ b/script/protocgen-legacy.sh @@ -1,5 +1,4 @@ #!/usr/bin/env bash - set -eo pipefail PATH=$(pwd)/.cache/bin/legacy:$PATH @@ -98,3 +97,8 @@ cp -rv github.com/akash-network/akash-api/* ./ --doc_out=./docs/proto \ --doc_opt=./docs/protodoc-markdown.tmpl,provider.md \ $(find "./proto/provider" -maxdepth 4 -name '*.proto') + +script/ts-patches.sh restore + +cd "$AKASH_TS_ROOT" && npm run format + diff --git a/script/ts-patches.sh b/script/ts-patches.sh new file mode 100755 index 00000000..c91fc26c --- /dev/null +++ b/script/ts-patches.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +generated_dir="$AKASH_TS_ROOT/src/generated" +tmp_dir="$AKASH_DEVCACHE_BASE/tmp/ts" + +if [ ! -d "$generated_dir" ]; then + echo "Directory $generated_dir does not exist. Skipping..." + exit 0 +fi + +preserve_patches() { + echo "Preserving TypeScript patches..." + find "$generated_dir" -type f -name "*.original.ts" | while read -r src_file; do + src_file=${src_file//.original/} + gen_dir=$(dirname "$src_file") + gen_dir=${gen_dir//$generated_dir\//} + file=$(basename "$src_file" .original.ts) + mkdir -p "$tmp_dir/$gen_dir" + tmp_file="$tmp_dir/$gen_dir/$file" + + echo "Preserving $src_file to $tmp_file" + cp "$src_file" "$tmp_file" + done +} + +restore_patches() { + echo "Restoring TypeScript patches..." + find "$tmp_dir" -type f -name "*.ts" | while read -r src_file; do + original_file_path=${src_file/$tmp_dir\//} + renamed_original_file_path="${original_file_path/.ts/.original.ts}" + echo "Restoring $original_file_path to $generated_dir/$original_file_path" + + mv "$generated_dir/$original_file_path" "$generated_dir/$renamed_original_file_path" + mv "$tmp_dir/$original_file_path" "$generated_dir/$original_file_path" + done + rm -rf "$tmp_dir" +} + +if [ "$1" = "preserve" ]; then + preserve_patches +elif [ "$1" = "restore" ]; then + restore_patches +else + echo "Invalid argument. Use 'preserve' or 'restore'." + exit 1 +fi \ No newline at end of file diff --git a/ts/README.md b/ts/README.md index 30ce8861..e8c60adc 100644 --- a/ts/README.md +++ b/ts/README.md @@ -53,5 +53,7 @@ The files in the `src/generated` directory are auto-generated and should not be export * from '../../../../patch/cosmos/base/v1beta1/coin'; ``` +NOTE: Naming and paths are important to prevent the original file from being overwritten when the code is regenerated. See `script/preserve-ts-patches.sh` and `script/restore-ts-patches.sh` for more implementation details. + ### License This package is licensed under the Apache-2.0. \ No newline at end of file diff --git a/ts/package.json b/ts/package.json index c8b0bed0..b27d8d05 100644 --- a/ts/package.json +++ b/ts/package.json @@ -47,7 +47,7 @@ }, "scripts": { "build": "rimraf dist && tsc -p tsconfig.build.json && npm run format", - "format": "prettier --write './**/*.{js,jsx,ts,tsx,css,json}' --config ./.prettierrc", + "format": "prettier --write './**/*.{js,jsx,ts,tsx,css,json}' --config ./.prettierrc --log-level silent", "lint": "eslint src", "lint:fix": "npm run lint -- --fix", "postbuild": "script/generate-exports.js", @@ -63,4 +63,4 @@ }, "types": "dist/index.d.ts", "version": "0.0.0" -} \ No newline at end of file +}