mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2026-01-08 05:26:19 +00:00
Chore: Fix type generation script (#20151)
* Udpate the json1ts script * Update the new types * fix the json, update types and type generation script * revert the changes in the existing script and add new script for type generation for all schemas * Add script for generating TypeScript types from JSON schemas
This commit is contained in:
parent
70fb6cc19f
commit
69df8cdde5
135
openmetadata-ui/src/main/resources/ui/json2ts-generate-all.sh
Normal file
135
openmetadata-ui/src/main/resources/ui/json2ts-generate-all.sh
Normal file
@ -0,0 +1,135 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright 2022 Collate.
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
# Script configuration
|
||||
readonly SCHEMA_DIRECTORY='openmetadata-spec/src/main/resources/json/schema/'
|
||||
readonly UI_OUTPUT_DIRECTORY='openmetadata-ui/src/main/resources/ui/src/generated'
|
||||
readonly MAX_PARALLEL_JOBS=35
|
||||
readonly TEMP_DIR=$(mktemp -d)
|
||||
|
||||
# Default value for add_licensing flag
|
||||
ADD_LICENSING=false
|
||||
|
||||
# Parse command line arguments
|
||||
while getopts "l:" opt; do
|
||||
case $opt in
|
||||
l)
|
||||
if [[ "${OPTARG}" == "true" ]]; then
|
||||
ADD_LICENSING=true
|
||||
fi
|
||||
;;
|
||||
\?)
|
||||
echo "Invalid option: -$OPTARG" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
addLicensing(){
|
||||
dir=$1
|
||||
current_year=$(date +%Y)
|
||||
# First read and modify the license text with current year
|
||||
modified_license=$(sed "s/Copyright [0-9]\{4\}/Copyright ${current_year}/" openmetadata-ui/src/main/resources/ui/types-licensing.txt)
|
||||
# Combine modified license with file content, adding a newline in between
|
||||
echo "${modified_license}
|
||||
$(cat "$dir")" > "$dir"
|
||||
}
|
||||
|
||||
# Function to modify schema file by updating $id field
|
||||
# Args:
|
||||
# $1 - Input schema file path
|
||||
# $2 - Output temporary schema file path
|
||||
generate_temp_schema() {
|
||||
local input_schema="$1"
|
||||
local output_schema="$2"
|
||||
|
||||
if [[ ! -f "$input_schema" ]]; then
|
||||
echo "Error: Input schema file not found: $input_schema"
|
||||
return 1
|
||||
fi
|
||||
|
||||
jq '(."$id" |= sub("https://open-metadata.org/schema";"";"i"))' "$input_schema" > "$output_schema"
|
||||
}
|
||||
|
||||
# Function to generate TypeScript types from JSON schema
|
||||
# Args:
|
||||
# $1 - Input temporary schema file
|
||||
# $2 - Output TypeScript file path
|
||||
generate_typescript() {
|
||||
local input_schema="$1"
|
||||
local output_file="$2"
|
||||
|
||||
echo "Generating ${output_file} from specification at ${input_schema}"
|
||||
./node_modules/.bin/quicktype -s schema "$input_schema" -o "$output_file" --just-types
|
||||
|
||||
# Remove empty output files
|
||||
if [[ ! -s "$output_file" ]]; then
|
||||
rm -f "$output_file"
|
||||
else
|
||||
# Only add licensing if the flag is true
|
||||
if [[ "$ADD_LICENSING" == "true" ]]; then
|
||||
addLicensing "$output_file"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Main function to process all schema files and generate TypeScript types
|
||||
process_schema_files() {
|
||||
# Clean existing output directory
|
||||
if [[ -d "$UI_OUTPUT_DIRECTORY" ]]; then
|
||||
rm -r "$UI_OUTPUT_DIRECTORY"
|
||||
fi
|
||||
|
||||
# First pass: Create temporary schema files
|
||||
echo "Creating temporary schema files..."
|
||||
for file_path in $(find "$SCHEMA_DIRECTORY" -name "*.json" | sed -e "s|$SCHEMA_DIRECTORY||g"); do
|
||||
local temp_dir="$TEMP_DIR/$(dirname "$file_path")"
|
||||
mkdir -p "$temp_dir"
|
||||
local temp_schema_file="${temp_dir}/$(basename -- "$file_path")"
|
||||
generate_temp_schema "$PWD/$SCHEMA_DIRECTORY$file_path" "$temp_schema_file"
|
||||
done
|
||||
|
||||
# Second pass: Generate TypeScript files
|
||||
echo "Generating TypeScript files..."
|
||||
local escaped_temp_dir=$(echo "$TEMP_DIR" | sed -e 's/[]\/$*.^[]/\\&/g')
|
||||
for file_path in $(find "$TEMP_DIR" -name "*.json" | sed -e "s|${escaped_temp_dir}||g"); do
|
||||
# Wait if we have too many parallel jobs
|
||||
while [[ $(jobs | wc -l) -ge $MAX_PARALLEL_JOBS ]]; do
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# Prepare output directory and file paths
|
||||
mkdir -p "$(dirname "$UI_OUTPUT_DIRECTORY$file_path")"
|
||||
local typescript_file=$(echo "$file_path" | sed "s/.json/.ts/g")
|
||||
local output_typescript="$PWD/$UI_OUTPUT_DIRECTORY$typescript_file"
|
||||
local input_schema="$TEMP_DIR$file_path"
|
||||
|
||||
# Generate TypeScript in background
|
||||
generate_typescript "$input_schema" "$output_typescript" &
|
||||
done
|
||||
}
|
||||
|
||||
# Main execution
|
||||
echo "Starting JSON Schema to TypeScript conversion..."
|
||||
cd "$(dirname "$0")/../../../../.." || {
|
||||
echo "Error: Failed to change to root directory"
|
||||
exit 1
|
||||
}
|
||||
|
||||
process_schema_files
|
||||
wait $(jobs -p)
|
||||
|
||||
# Cleanup
|
||||
rm -rf "$TEMP_DIR"
|
||||
echo "Conversion completed successfully!"
|
||||
12
openmetadata-ui/src/main/resources/ui/types-licensing.txt
Normal file
12
openmetadata-ui/src/main/resources/ui/types-licensing.txt
Normal file
@ -0,0 +1,12 @@
|
||||
/*
|
||||
* Copyright 2025 Collate.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
Loading…
x
Reference in New Issue
Block a user