From 20870a3a6c53451849d1af1b23495ad32886db9c Mon Sep 17 00:00:00 2001 From: Nikita Rodionov Date: Tue, 10 Mar 2026 21:32:19 +0300 Subject: [PATCH 1/2] Include defi/*/models folder into generation and correctly handle aliases --- .../src/api/scripts/generate-json-schema.js | 24 +++++++++++++++++++ .../src/api/scripts/generate-openapi-spec.sh | 19 +++++---------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/packages/walletkit/src/api/scripts/generate-json-schema.js b/packages/walletkit/src/api/scripts/generate-json-schema.js index 92f56c87..c5c3627a 100644 --- a/packages/walletkit/src/api/scripts/generate-json-schema.js +++ b/packages/walletkit/src/api/scripts/generate-json-schema.js @@ -1494,6 +1494,27 @@ function postProcessConstantFields(schema) { } } +/** + * Post-process schema to convert pure $ref definitions (type aliases) into + * x-type-alias markers so openapi-generator will create a file and the + * template can emit a Swift typealias. + */ +function postProcessTypeAliases(schema) { + const definitions = schema.definitions || {}; + + for (const [, typeDef] of Object.entries(definitions)) { + if (typeDef.$ref && !typeDef.type && !typeDef.properties && !typeDef.allOf && !typeDef['x-enum-case-name']) { + const targetName = typeNameFromRef(typeDef.$ref); + + Object.keys(typeDef).forEach((k) => delete typeDef[k]); + typeDef.type = 'object'; + typeDef.properties = { _alias: { type: 'string' } }; + typeDef['x-type-alias'] = true; + typeDef['x-alias-target'] = targetName; + } + } +} + // ============================================================================ // Main // ============================================================================ @@ -1546,6 +1567,9 @@ try { // Post-process: convert single-literal properties to constant fields postProcessConstantFields(schema); + // Post-process: convert pure $ref definitions (type aliases) to x-type-alias + postProcessTypeAliases(schema); + fs.writeFileSync(outputPath, JSON.stringify(schema, null, 2)); } catch (error) { console.error('Error:', error.message); diff --git a/packages/walletkit/src/api/scripts/generate-openapi-spec.sh b/packages/walletkit/src/api/scripts/generate-openapi-spec.sh index f07440a2..fa58484c 100755 --- a/packages/walletkit/src/api/scripts/generate-openapi-spec.sh +++ b/packages/walletkit/src/api/scripts/generate-openapi-spec.sh @@ -6,31 +6,24 @@ set -e # Exit on error SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Configuration -TYPESCRIPT_INPUT="$SCRIPT_DIR/../models" +SRC_ROOT="$SCRIPT_DIR/../.." OUTPUT_FILE="$SCRIPT_DIR/generated/walletkit-openapi.json" TEMP_SCHEMA="$SCRIPT_DIR/generated/temp-schema.json" -if [ -z "$TYPESCRIPT_INPUT" ]; then - echo "❌ Error: TypeScript input path is required" -fi +# Input glob: api/models + any models folders under defi +TYPESCRIPT_INPUT="$SRC_ROOT/{api/models,defi/**/models}/**/*.ts" echo "🚀 Converting TypeScript to OpenAPI specification..." echo "📁 TypeScript input: $TYPESCRIPT_INPUT" echo "📄 Output file: $OUTPUT_FILE" echo "" -# Step 1: Validate TypeScript input -if [ ! -d "$TYPESCRIPT_INPUT" ] && [ ! -f "$TYPESCRIPT_INPUT" ]; then - echo "❌ Error: TypeScript input not found at '$TYPESCRIPT_INPUT'" - exit 1 -fi - -# Step 2: Ensure generated directory exists +# Step 1: Ensure generated directory exists mkdir -p "$SCRIPT_DIR/generated" -# Step 3: Generate JSON Schema using custom generator (with x-enum-varnames) +# Step 2: Generate JSON Schema using custom generator (with x-enum-varnames) echo "📝 Step 1: Generating JSON Schema with enum member names..." -node "$SCRIPT_DIR/generate-json-schema.js" "$TYPESCRIPT_INPUT/**/*.ts" "$TEMP_SCHEMA" || { +node "$SCRIPT_DIR/generate-json-schema.js" "$TYPESCRIPT_INPUT" "$TEMP_SCHEMA" || { echo "❌ Failed to generate JSON Schema" exit 1 } From 16141dc426a1288184099b835dd0343294203222 Mon Sep 17 00:00:00 2001 From: Nikita Rodionov Date: Tue, 10 Mar 2026 23:27:15 +0300 Subject: [PATCH 2/2] Fix --- .../src/api/scripts/generate-json-schema.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/walletkit/src/api/scripts/generate-json-schema.js b/packages/walletkit/src/api/scripts/generate-json-schema.js index c5c3627a..a11f099c 100644 --- a/packages/walletkit/src/api/scripts/generate-json-schema.js +++ b/packages/walletkit/src/api/scripts/generate-json-schema.js @@ -1499,6 +1499,20 @@ function postProcessConstantFields(schema) { * x-type-alias markers so openapi-generator will create a file and the * template can emit a Swift typealias. */ +/** + * Post-process schema to strip `default` values from properties. + * @default JSDoc is documentation-only and should not produce default values in generated code. + */ +function postProcessStripDefaults(schema) { + const definitions = schema.definitions || {}; + for (const typeDef of Object.values(definitions)) { + if (!typeDef.properties) continue; + for (const propDef of Object.values(typeDef.properties)) { + delete propDef.default; + } + } +} + function postProcessTypeAliases(schema) { const definitions = schema.definitions || {}; @@ -1567,6 +1581,9 @@ try { // Post-process: convert single-literal properties to constant fields postProcessConstantFields(schema); + // Post-process: strip @default values (documentation-only, not for codegen) + postProcessStripDefaults(schema); + // Post-process: convert pure $ref definitions (type aliases) to x-type-alias postProcessTypeAliases(schema);