Highly ambitious ATProtocol AppView service and sdks
at main 2.9 kB view raw
1#!/bin/bash 2 3# Script to generate network_slices_lexicons.txt from lexicon files 4# This script finds all network.slices.* lexicon JSON files (record types only) and converts them 5# to the format used in network_slices_lexicons.txt 6# 7# Purpose: In case the system lexicons are deleted, copy and paste these one by one into https://pdsls.dev/ 8# This allows restoring the lexicon definitions to the PDS. 9# Note: This is not a common thing and only slices.network needs to worry about this right now. 10 11set -e 12 13LEXICONS_DIR="./lexicons" 14OUTPUT_FILE="./network_slices_lexicons.txt" 15SLICES_CONFIG="./slices.json" 16 17# Check if required files/directories exist 18if [ ! -d "$LEXICONS_DIR" ]; then 19 echo "Error: lexicons directory not found at $LEXICONS_DIR" 20 exit 1 21fi 22 23if [ ! -f "$SLICES_CONFIG" ]; then 24 echo "Error: slices.json not found at $SLICES_CONFIG" 25 exit 1 26fi 27 28# Extract slice URI from slices.json 29SLICE_URI=$(jq -r '.slice' "$SLICES_CONFIG") 30if [ "$SLICE_URI" = "null" ] || [ -z "$SLICE_URI" ]; then 31 echo "Error: Could not extract slice URI from $SLICES_CONFIG" 32 exit 1 33fi 34 35# Get current timestamp 36CREATED_AT=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ") 37 38# Clear output file 39> "$OUTPUT_FILE" 40 41# Counter for generated lexicons 42COUNT=0 43 44echo "Generating network.slices lexicons..." 45 46# Find all network.slices lexicon files and process them 47find "$LEXICONS_DIR" -path "*/network/slices/*" -name "*.json" -type f | sort | while read -r file; do 48 # Extract the lexicon ID from the file content 49 LEXICON_ID=$(jq -r '.id // empty' "$file" 2>/dev/null) 50 51 # Skip if not a network.slices lexicon or if ID extraction failed 52 if [ -z "$LEXICON_ID" ] || [[ ! "$LEXICON_ID" =~ ^network\.slices\. ]]; then 53 continue 54 fi 55 56 # Extract definitions 57 DEFINITIONS=$(jq -c '.defs' "$file" 2>/dev/null) 58 59 if [ "$DEFINITIONS" = "null" ] || [ -z "$DEFINITIONS" ]; then 60 echo "Warning: Could not extract definitions from $file" 61 continue 62 fi 63 64 # Check if this is a record type (skip procedures and queries) 65 MAIN_TYPE=$(jq -r '.defs.main.type // empty' "$file" 2>/dev/null) 66 if [ "$MAIN_TYPE" != "record" ]; then 67 continue 68 fi 69 70 # Create the output JSON object 71 OUTPUT_JSON=$(jq -n \ 72 --arg nsid "$LEXICON_ID" \ 73 --arg type "network.slices.lexicon" \ 74 --arg slice "$SLICE_URI" \ 75 --arg createdAt "$CREATED_AT" \ 76 --argjson definitions "$DEFINITIONS" \ 77 '{ 78 "nsid": $nsid, 79 "$type": $type, 80 "slice": $slice, 81 "createdAt": $createdAt, 82 "definitions": ($definitions | tostring) 83 }') 84 85 # Append to output file with double newline separator 86 if [ $COUNT -gt 0 ]; then 87 echo "" >> "$OUTPUT_FILE" 88 fi 89 echo "$OUTPUT_JSON" >> "$OUTPUT_FILE" 90 91 echo " - $LEXICON_ID" 92 COUNT=$((COUNT + 1)) 93done 94 95echo "" 96echo "Generated $COUNT lexicon entries in $OUTPUT_FILE"