From 2aa9e760fdec25d487e667c43c46770e359ddc6a Mon Sep 17 00:00:00 2001 From: philip-ellis-sp Date: Sat, 27 Jun 2026 01:44:38 -0400 Subject: [PATCH 1/9] fixed issue with versions in prefix --- sdk-resources/build-versioned-sdk.js | 34 ++++++++++++++++------------ 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/sdk-resources/build-versioned-sdk.js b/sdk-resources/build-versioned-sdk.js index 6d736f75..6914f41b 100644 --- a/sdk-resources/build-versioned-sdk.js +++ b/sdk-resources/build-versioned-sdk.js @@ -232,7 +232,6 @@ function writePartitionConfig(partitionName) { `npmVersion: ${NPM_VERSION}`, `useSingleRequestParameter: true`, `apiVersion: ${API_VERSION}`, - `enumNameSuffix: V1`, `packageName: ${packageDir}`, ].join("\n"); @@ -263,8 +262,7 @@ function generatePartition(partitionName, bundledSpec, configPath) { "-o", outputDir, "--global-property", "skipFormModel=false,apiDocs=true,modelDocs=true", "--config", configPath, - "--api-name-suffix", "V1Api", - "--model-name-suffix", "V1", + "--api-name-suffix", "Api", ], { encoding: "utf8" } ); @@ -425,15 +423,15 @@ node sdk-resources/build-versioned-sdk.js // Regenerate sdk-output/index.ts from discovered partition packages // // Naming convention in the SailPoint namespace: -// Generated class AccountsV1Api → SailPoint.AccountsApi -// Generated class AccountsV2Api → still SailPoint.AccountsApi (combined) +// Generated class AccountsApi → SailPoint.AccountsApi +// Two partitions for same resource → combined class (extends latest, copies older methods) // -// The version suffix is stripped from the namespace name so the import never -// changes as new versions land. Method names carry the version suffix -// (listAccountsV1, listAccountsV2) so you always know which version you're -// calling. +// API class names carry no version suffix — versions live only in method names +// (listAccountsV1, listAccountsV2) so callers always know which version they call. +// Model names also carry no generated suffix; any version in a model name comes +// from the spec itself (e.g. accessrequestconfigv2 → AccessrequestconfigV2). // -// Single-version resource → const AccountsApi = _AccountsV1Api +// Single-version resource → const AccountsApi = _AccountsApi // Multi-version resource → generated combined class that extends the // latest version and copies older-version prototype methods, with // TypeScript interface merging for full type safety on all methods. @@ -444,12 +442,18 @@ node sdk-resources/build-versioned-sdk.js // import type { AccountV1 } from "sailpoint-api-client/accounts_v1/api" // --------------------------------------------------------------------------- -/** AccountsV1Api → AccountsApi */ +/** + * AccountsApi → AccountsApi (no-op for single-version; strips Vn for hypothetical + * future multi-version partitions whose class names include a version, e.g. AccountsV2Api). + */ function toResourceApiName(className) { return className.replace(/V\d+Api$/, "Api"); } -/** Extract the numeric version from a class name: AccountsV1Api → 1 */ +/** + * Extract the numeric version from a class name if present (e.g. AccountsV2Api → 2). + * Defaults to 1 so single-version classes (e.g. AccountsApi) sort correctly. + */ function classVersion(className) { return parseInt(className.match(/V(\d+)Api$/)?.[1] ?? "1", 10); } @@ -542,12 +546,12 @@ function generateIndexTs() { /* eslint-disable */ // Code generated by build-versioned-sdk.js; DO NOT EDIT. // -// Named imports — backward-compatible, version-explicit: -// import { AccountsV1Api, Configuration } from "sailpoint-api-client" +// Named imports — version-explicit class names: +// import { AccountsApi, Configuration } from "sailpoint-api-client" // // Namespace — resource-named, version-agnostic (preferred): // import { SailPoint, Configuration } from "sailpoint-api-client" -// const api = new SailPoint.AccountsApi(config) // works for v1, v2, v3 … +// const api = new SailPoint.AccountsApi(config) // api.listAccountsV1(...) // method name shows version // api.listAccountsV2(...) // when v2 partition lands // From b306e6236de84a58daca8bacee1723ce74eb0b7d Mon Sep 17 00:00:00 2001 From: philip-ellis-sp Date: Sat, 27 Jun 2026 01:58:12 -0400 Subject: [PATCH 2/9] fixed tests --- sdk-output/index.spec.ts | 4 ++-- sdk-output/paginator.ts | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/sdk-output/index.spec.ts b/sdk-output/index.spec.ts index d360a06b..1084eacc 100644 --- a/sdk-output/index.spec.ts +++ b/sdk-output/index.spec.ts @@ -1,5 +1,5 @@ import { SailPoint, Configuration, Paginator, UsersNERMApi, DelegationsNERMV2025Api } from "./index" -import type { SearchV1 } from "./search/api" +import type { Search } from "./search/api" describe('accounts', () => { it('list accounts', async () => { @@ -89,7 +89,7 @@ describe('search', () => { let apiConfig = new Configuration() let api = new SailPoint.SearchApi(apiConfig) - let search: SearchV1 = { + let search: Search = { indices: [ "identities" ], diff --git a/sdk-output/paginator.ts b/sdk-output/paginator.ts index 3e2c45d0..dbb3d6d6 100644 --- a/sdk-output/paginator.ts +++ b/sdk-output/paginator.ts @@ -1,8 +1,8 @@ import type { AxiosResponse, RawAxiosRequestConfig } from "axios"; import { - SearchV1, - SearchV1Api, - SearchV1ApiSearchPostV1Request, + Search, + SearchApi, + SearchApiSearchPostV1Request, } from "./search/api"; export interface PaginationParams { @@ -38,9 +38,9 @@ export interface ExtraParams { } interface SearchApiTypeMap { - SearchV1Api: { - search: SearchV1; - searchParams: SearchV1ApiSearchPostV1Request; + SearchApi: { + search: Search; + searchParams: SearchApiSearchPostV1Request; document: object; }; } @@ -48,7 +48,7 @@ interface SearchApiTypeMap { type ApiType = keyof SearchApiTypeMap; type ApiInstanceMap = { - SearchV1Api: SearchV1Api; + SearchApi: SearchApi; }; export class Paginator { @@ -174,11 +174,11 @@ export class Paginator { let results: AxiosResponse; try { - const searchParams: SearchV1ApiSearchPostV1Request = { - searchV1: search as SearchV1, + const searchParams: SearchApiSearchPostV1Request = { + searchV1: search as Search, limit: increment, }; - results = (await (searchAPI as SearchV1Api).searchPostV1( + results = (await (searchAPI as SearchApi).searchPostV1( searchParams )) as AxiosResponse; } catch (e: any) { @@ -235,11 +235,11 @@ export class Paginator { let results: AxiosResponse; try { - const searchParams: SearchV1ApiSearchPostV1Request = { - searchV1: search as SearchV1, + const searchParams: SearchApiSearchPostV1Request = { + searchV1: search as Search, limit: increment, }; - results = (await (searchAPI as SearchV1Api).searchPostV1( + results = (await (searchAPI as SearchApi).searchPostV1( searchParams )) as AxiosResponse; } catch (e: any) { From 4334b278dbf93034d070888a78344440f8e64344 Mon Sep 17 00:00:00 2001 From: philip-ellis-sp Date: Sat, 27 Jun 2026 02:08:54 -0400 Subject: [PATCH 3/9] fixed two more issues and added threads --- sdk-output/paginator.ts | 4 +- sdk-resources/build-versioned-sdk.js | 104 +++++++++++++++++---------- 2 files changed, 70 insertions(+), 38 deletions(-) diff --git a/sdk-output/paginator.ts b/sdk-output/paginator.ts index dbb3d6d6..163dddaa 100644 --- a/sdk-output/paginator.ts +++ b/sdk-output/paginator.ts @@ -175,7 +175,7 @@ export class Paginator { try { const searchParams: SearchApiSearchPostV1Request = { - searchV1: search as Search, + search: search as Search, limit: increment, }; results = (await (searchAPI as SearchApi).searchPostV1( @@ -236,7 +236,7 @@ export class Paginator { try { const searchParams: SearchApiSearchPostV1Request = { - searchV1: search as Search, + search: search as Search, limit: increment, }; results = (await (searchAPI as SearchApi).searchPostV1( diff --git a/sdk-resources/build-versioned-sdk.js b/sdk-resources/build-versioned-sdk.js index 6914f41b..b39c1c1e 100644 --- a/sdk-resources/build-versioned-sdk.js +++ b/sdk-resources/build-versioned-sdk.js @@ -35,7 +35,8 @@ const fs = require("fs"); const path = require("path"); -const { spawnSync } = require("child_process"); +const os = require("os"); +const { spawnSync, spawn } = require("child_process"); // --------------------------------------------------------------------------- // Constants @@ -60,14 +61,40 @@ const API_VERSION = "v1"; const args = process.argv.slice(2); if (args.length === 0 || args[0].startsWith("--")) { - console.error("Usage: node sdk-resources/build-versioned-sdk.js [--partition ] [--keep-tmp]"); + console.error("Usage: node sdk-resources/build-versioned-sdk.js [--partition ] [--concurrency ] [--keep-tmp]"); process.exit(1); } -const apisDir = path.resolve(args[0]); -const keepTmp = args.includes("--keep-tmp"); -const partitionIdx = args.indexOf("--partition"); -const onlyPartition = partitionIdx !== -1 ? args[partitionIdx + 1] : null; +const apisDir = path.resolve(args[0]); +const keepTmp = args.includes("--keep-tmp"); +const partitionIdx = args.indexOf("--partition"); +const onlyPartition = partitionIdx !== -1 ? args[partitionIdx + 1] : null; +const concurrencyIdx = args.indexOf("--concurrency"); +const concurrency = concurrencyIdx !== -1 ? parseInt(args[concurrencyIdx + 1], 10) : os.cpus().length; + +// --------------------------------------------------------------------------- +// Async process runner + concurrency pool +// --------------------------------------------------------------------------- + +function spawnAsync(cmd, args, options = {}) { + return new Promise((resolve) => { + const proc = spawn(cmd, args, options); + let stdout = "", stderr = ""; + proc.stdout?.setEncoding("utf8"); + proc.stderr?.setEncoding("utf8"); + proc.stdout?.on("data", d => { stdout += d; }); + proc.stderr?.on("data", d => { stderr += d; }); + proc.on("close", status => resolve({ status, stdout, stderr })); + }); +} + +async function runWithConcurrency(items, limit, fn) { + const queue = [...items]; + async function worker() { + while (queue.length > 0) await fn(queue.shift()); + } + await Promise.all(Array.from({ length: Math.min(limit, items.length) }, worker)); +} // --------------------------------------------------------------------------- // Utility: copy directory recursively @@ -180,16 +207,15 @@ function applyPrescriptFixes(tempApisDir) { // Bundle a single partition's openapi.yaml with redocly // --------------------------------------------------------------------------- -function bundlePartition(partitionName, tempApisDir) { +async function bundlePartition(partitionName, tempApisDir) { const inputSpec = path.join(tempApisDir, partitionName, "openapi.yaml"); const outputSpec = path.join(BUNDLED_DIR, `${partitionName}.yaml`); fs.mkdirSync(BUNDLED_DIR, { recursive: true }); - const result = spawnSync( + const result = await spawnAsync( "npx", ["redocly", "bundle", inputSpec, "-o", outputSpec, "--force"], - { encoding: "utf8" } ); return { @@ -244,7 +270,7 @@ function writePartitionConfig(partitionName) { // Run openapi-generator for a single partition // --------------------------------------------------------------------------- -function generatePartition(partitionName, bundledSpec, configPath) { +async function generatePartition(partitionName, bundledSpec, configPath) { const packageDir = partitionName.replaceAll("-", "_"); const outputDir = path.join(SDK_OUTPUT, packageDir); @@ -252,7 +278,7 @@ function generatePartition(partitionName, bundledSpec, configPath) { fs.rmSync(outputDir, { recursive: true, force: true }); } - const result = spawnSync( + const result = await spawnAsync( "java", [ "-jar", JAR, @@ -264,7 +290,6 @@ function generatePartition(partitionName, bundledSpec, configPath) { "--config", configPath, "--api-name-suffix", "Api", ], - { encoding: "utf8" } ); // Write a marker so cleanup and index generation can identify generated dirs @@ -286,12 +311,8 @@ function generatePartition(partitionName, bundledSpec, configPath) { // Run postscript.js on the generated output // --------------------------------------------------------------------------- -function runPostscript(outputDir) { - const result = spawnSync( - "node", - [POSTSCRIPT, outputDir], - { encoding: "utf8" } - ); +async function runPostscript(outputDir) { + const result = await spawnAsync("node", [POSTSCRIPT, outputDir]); return { ok: result.status === 0, @@ -665,52 +686,63 @@ async function main() { failed: [], }; - for (const partition of partitions) { - console.log(`\n${"=".repeat(60)}`); - console.log(` Building: ${partition}`); - console.log(`${"=".repeat(60)}`); + console.log(`Running with concurrency: ${Math.min(concurrency, partitions.length)}\n`); + + async function buildOnePartition(partition) { + const log = []; + const p = (msg) => log.push(msg); + + p(`\n${"=".repeat(60)}`); + p(` Building: ${partition}`); + p(`${"=".repeat(60)}`); // --- Step 1: Bundle --- - console.log(" [1/4] Bundling spec ..."); - const bundle = bundlePartition(partition, path.join(TEMP_DIR, "apis")); + p(" [1/4] Bundling spec ..."); + const bundle = await bundlePartition(partition, path.join(TEMP_DIR, "apis")); if (!bundle.ok) { const errorOutput = [bundle.stdout, bundle.stderr].filter(Boolean).join("\n"); - console.error(` ✗ bundling failed`); + p(` ✗ bundling failed`); + console.log(log.join("\n")); const reportPath = writeErrorReport(partition, "bundling", errorOutput, TEMP_DIR, apisDir); results.failed.push({ partition, step: "bundling", reportPath }); - continue; + return; } // --- Step 2: Config --- - console.log(" [2/4] Writing generator config ..."); + p(" [2/4] Writing generator config ..."); const configPath = writePartitionConfig(partition); // --- Step 3: Generate --- - console.log(" [3/4] Generating TypeScript SDK ..."); - const gen = generatePartition(partition, bundle.outputSpec, configPath); + p(" [3/4] Generating TypeScript SDK ..."); + const gen = await generatePartition(partition, bundle.outputSpec, configPath); if (!gen.ok) { const errorOutput = [gen.stdout, gen.stderr].filter(Boolean).join("\n"); - console.error(` ✗ generation failed`); + p(` ✗ generation failed`); + console.log(log.join("\n")); const reportPath = writeErrorReport(partition, "generation", errorOutput, TEMP_DIR, apisDir); results.failed.push({ partition, step: "generation", reportPath }); - continue; + return; } // --- Step 4: Postscript --- - console.log(" [4/4] Running postscript ..."); - const post = runPostscript(gen.outputDir); + p(" [4/4] Running postscript ..."); + const post = await runPostscript(gen.outputDir); if (!post.ok) { const errorOutput = [post.stdout, post.stderr].filter(Boolean).join("\n"); - console.error(` ✗ postscript failed`); + p(` ✗ postscript failed`); + console.log(log.join("\n")); const reportPath = writeErrorReport(partition, "postscript", errorOutput, TEMP_DIR, apisDir); results.failed.push({ partition, step: "postscript", reportPath }); - continue; + return; } results.success.push(partition); - console.log(` ✓ ${partition} → sdk-output/${gen.packageDir}/`); + p(` ✓ ${partition} → sdk-output/${gen.packageDir}/`); + console.log(log.join("\n")); } + await runWithConcurrency(partitions, concurrency, buildOnePartition); + // Cleanup if (!keepTmp) { console.log("\n[CLEANUP] Removing .sdk-build-tmp/ ..."); From 9593974ad8134a0d38ff60645dfd0817842c0871 Mon Sep 17 00:00:00 2001 From: philip-ellis-sp Date: Sat, 27 Jun 2026 02:15:00 -0400 Subject: [PATCH 4/9] added concerrency --- .github/actions/build-sdk/action.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/actions/build-sdk/action.yaml b/.github/actions/build-sdk/action.yaml index 2205cd2e..b6423c00 100644 --- a/.github/actions/build-sdk/action.yaml +++ b/.github/actions/build-sdk/action.yaml @@ -38,7 +38,8 @@ runs: shell: bash run: | node sdk-resources/build-versioned-sdk.js \ - ${{ inputs.api-specs-path }}/idn/apis + ${{ inputs.api-specs-path }}/idn/apis \ + --concurrency 16 - name: Build NERM SDK shell: bash From 38fcfc2695294b8f32c226c4db77ef48b135ae49 Mon Sep 17 00:00:00 2001 From: philip-ellis-sp Date: Sat, 27 Jun 2026 02:20:44 -0400 Subject: [PATCH 5/9] running on 8 cores --- .github/workflows/build_pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_pr.yml b/.github/workflows/build_pr.yml index 84305056..7a62705e 100644 --- a/.github/workflows/build_pr.yml +++ b/.github/workflows/build_pr.yml @@ -19,7 +19,7 @@ concurrency: jobs: build_typescript_sdk: name: Build TypeScript SDK - runs-on: ubuntu-latest + runs-on: ubuntu-latest-8-cores steps: - name: Checkout uses: actions/checkout@v6 From 8f135f53ace5159493715abbe0fc3f83c4617512 Mon Sep 17 00:00:00 2001 From: philip-ellis-sp Date: Sat, 27 Jun 2026 14:56:16 -0400 Subject: [PATCH 6/9] reverted multithread --- .github/actions/build-sdk/action.yaml | 3 +- .github/workflows/build_pr.yml | 2 +- sdk-resources/build-versioned-sdk.js | 111 +++++++++----------------- 3 files changed, 40 insertions(+), 76 deletions(-) diff --git a/.github/actions/build-sdk/action.yaml b/.github/actions/build-sdk/action.yaml index b6423c00..2205cd2e 100644 --- a/.github/actions/build-sdk/action.yaml +++ b/.github/actions/build-sdk/action.yaml @@ -38,8 +38,7 @@ runs: shell: bash run: | node sdk-resources/build-versioned-sdk.js \ - ${{ inputs.api-specs-path }}/idn/apis \ - --concurrency 16 + ${{ inputs.api-specs-path }}/idn/apis - name: Build NERM SDK shell: bash diff --git a/.github/workflows/build_pr.yml b/.github/workflows/build_pr.yml index 7a62705e..84305056 100644 --- a/.github/workflows/build_pr.yml +++ b/.github/workflows/build_pr.yml @@ -19,7 +19,7 @@ concurrency: jobs: build_typescript_sdk: name: Build TypeScript SDK - runs-on: ubuntu-latest-8-cores + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 diff --git a/sdk-resources/build-versioned-sdk.js b/sdk-resources/build-versioned-sdk.js index b39c1c1e..83d4df4f 100644 --- a/sdk-resources/build-versioned-sdk.js +++ b/sdk-resources/build-versioned-sdk.js @@ -35,8 +35,7 @@ const fs = require("fs"); const path = require("path"); -const os = require("os"); -const { spawnSync, spawn } = require("child_process"); +const { spawnSync } = require("child_process"); // --------------------------------------------------------------------------- // Constants @@ -61,40 +60,14 @@ const API_VERSION = "v1"; const args = process.argv.slice(2); if (args.length === 0 || args[0].startsWith("--")) { - console.error("Usage: node sdk-resources/build-versioned-sdk.js [--partition ] [--concurrency ] [--keep-tmp]"); + console.error("Usage: node sdk-resources/build-versioned-sdk.js [--partition ] [--keep-tmp]"); process.exit(1); } -const apisDir = path.resolve(args[0]); -const keepTmp = args.includes("--keep-tmp"); -const partitionIdx = args.indexOf("--partition"); -const onlyPartition = partitionIdx !== -1 ? args[partitionIdx + 1] : null; -const concurrencyIdx = args.indexOf("--concurrency"); -const concurrency = concurrencyIdx !== -1 ? parseInt(args[concurrencyIdx + 1], 10) : os.cpus().length; - -// --------------------------------------------------------------------------- -// Async process runner + concurrency pool -// --------------------------------------------------------------------------- - -function spawnAsync(cmd, args, options = {}) { - return new Promise((resolve) => { - const proc = spawn(cmd, args, options); - let stdout = "", stderr = ""; - proc.stdout?.setEncoding("utf8"); - proc.stderr?.setEncoding("utf8"); - proc.stdout?.on("data", d => { stdout += d; }); - proc.stderr?.on("data", d => { stderr += d; }); - proc.on("close", status => resolve({ status, stdout, stderr })); - }); -} - -async function runWithConcurrency(items, limit, fn) { - const queue = [...items]; - async function worker() { - while (queue.length > 0) await fn(queue.shift()); - } - await Promise.all(Array.from({ length: Math.min(limit, items.length) }, worker)); -} +const apisDir = path.resolve(args[0]); +const keepTmp = args.includes("--keep-tmp"); +const partitionIdx = args.indexOf("--partition"); +const onlyPartition = partitionIdx !== -1 ? args[partitionIdx + 1] : null; // --------------------------------------------------------------------------- // Utility: copy directory recursively @@ -207,15 +180,16 @@ function applyPrescriptFixes(tempApisDir) { // Bundle a single partition's openapi.yaml with redocly // --------------------------------------------------------------------------- -async function bundlePartition(partitionName, tempApisDir) { +function bundlePartition(partitionName, tempApisDir) { const inputSpec = path.join(tempApisDir, partitionName, "openapi.yaml"); const outputSpec = path.join(BUNDLED_DIR, `${partitionName}.yaml`); fs.mkdirSync(BUNDLED_DIR, { recursive: true }); - const result = await spawnAsync( + const result = spawnSync( "npx", ["redocly", "bundle", inputSpec, "-o", outputSpec, "--force"], + { encoding: "utf8" } ); return { @@ -270,7 +244,7 @@ function writePartitionConfig(partitionName) { // Run openapi-generator for a single partition // --------------------------------------------------------------------------- -async function generatePartition(partitionName, bundledSpec, configPath) { +function generatePartition(partitionName, bundledSpec, configPath) { const packageDir = partitionName.replaceAll("-", "_"); const outputDir = path.join(SDK_OUTPUT, packageDir); @@ -278,7 +252,7 @@ async function generatePartition(partitionName, bundledSpec, configPath) { fs.rmSync(outputDir, { recursive: true, force: true }); } - const result = await spawnAsync( + const result = spawnSync( "java", [ "-jar", JAR, @@ -290,6 +264,7 @@ async function generatePartition(partitionName, bundledSpec, configPath) { "--config", configPath, "--api-name-suffix", "Api", ], + { encoding: "utf8" } ); // Write a marker so cleanup and index generation can identify generated dirs @@ -311,8 +286,12 @@ async function generatePartition(partitionName, bundledSpec, configPath) { // Run postscript.js on the generated output // --------------------------------------------------------------------------- -async function runPostscript(outputDir) { - const result = await spawnAsync("node", [POSTSCRIPT, outputDir]); +function runPostscript(outputDir) { + const result = spawnSync( + "node", + [POSTSCRIPT, outputDir], + { encoding: "utf8" } + ); return { ok: result.status === 0, @@ -616,7 +595,7 @@ ${nsLines.join("\n")} // Main // --------------------------------------------------------------------------- -async function main() { +function main() { if (!fs.existsSync(apisDir)) { console.error(`Error: apis directory not found: ${apisDir}`); process.exit(1); @@ -686,63 +665,52 @@ async function main() { failed: [], }; - console.log(`Running with concurrency: ${Math.min(concurrency, partitions.length)}\n`); - - async function buildOnePartition(partition) { - const log = []; - const p = (msg) => log.push(msg); - - p(`\n${"=".repeat(60)}`); - p(` Building: ${partition}`); - p(`${"=".repeat(60)}`); + for (const partition of partitions) { + console.log(`\n${"=".repeat(60)}`); + console.log(` Building: ${partition}`); + console.log(`${"=".repeat(60)}`); // --- Step 1: Bundle --- - p(" [1/4] Bundling spec ..."); - const bundle = await bundlePartition(partition, path.join(TEMP_DIR, "apis")); + console.log(" [1/4] Bundling spec ..."); + const bundle = bundlePartition(partition, path.join(TEMP_DIR, "apis")); if (!bundle.ok) { const errorOutput = [bundle.stdout, bundle.stderr].filter(Boolean).join("\n"); - p(` ✗ bundling failed`); - console.log(log.join("\n")); + console.error(` ✗ bundling failed`); const reportPath = writeErrorReport(partition, "bundling", errorOutput, TEMP_DIR, apisDir); results.failed.push({ partition, step: "bundling", reportPath }); - return; + continue; } // --- Step 2: Config --- - p(" [2/4] Writing generator config ..."); + console.log(" [2/4] Writing generator config ..."); const configPath = writePartitionConfig(partition); // --- Step 3: Generate --- - p(" [3/4] Generating TypeScript SDK ..."); - const gen = await generatePartition(partition, bundle.outputSpec, configPath); + console.log(" [3/4] Generating TypeScript SDK ..."); + const gen = generatePartition(partition, bundle.outputSpec, configPath); if (!gen.ok) { const errorOutput = [gen.stdout, gen.stderr].filter(Boolean).join("\n"); - p(` ✗ generation failed`); - console.log(log.join("\n")); + console.error(` ✗ generation failed`); const reportPath = writeErrorReport(partition, "generation", errorOutput, TEMP_DIR, apisDir); results.failed.push({ partition, step: "generation", reportPath }); - return; + continue; } // --- Step 4: Postscript --- - p(" [4/4] Running postscript ..."); - const post = await runPostscript(gen.outputDir); + console.log(" [4/4] Running postscript ..."); + const post = runPostscript(gen.outputDir); if (!post.ok) { const errorOutput = [post.stdout, post.stderr].filter(Boolean).join("\n"); - p(` ✗ postscript failed`); - console.log(log.join("\n")); + console.error(` ✗ postscript failed`); const reportPath = writeErrorReport(partition, "postscript", errorOutput, TEMP_DIR, apisDir); results.failed.push({ partition, step: "postscript", reportPath }); - return; + continue; } results.success.push(partition); - p(` ✓ ${partition} → sdk-output/${gen.packageDir}/`); - console.log(log.join("\n")); + console.log(` ✓ ${partition} → sdk-output/${gen.packageDir}/`); } - await runWithConcurrency(partitions, concurrency, buildOnePartition); - // Cleanup if (!keepTmp) { console.log("\n[CLEANUP] Removing .sdk-build-tmp/ ..."); @@ -777,7 +745,4 @@ async function main() { } } -main().catch(err => { - console.error(`Unexpected error: ${err.message}`); - process.exit(1); -}); +main(); From 550f1a0dccfbb7d113df8c105c9e92eaa921e8a0 Mon Sep 17 00:00:00 2001 From: philip-ellis-sp Date: Sat, 27 Jun 2026 16:24:44 -0400 Subject: [PATCH 7/9] added error handling back in --- sdk-resources/build-versioned-sdk.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sdk-resources/build-versioned-sdk.js b/sdk-resources/build-versioned-sdk.js index 83d4df4f..55995014 100644 --- a/sdk-resources/build-versioned-sdk.js +++ b/sdk-resources/build-versioned-sdk.js @@ -745,4 +745,7 @@ function main() { } } -main(); +main().catch(err => { + console.error(`Unexpected error: ${err.message}`); + process.exit(1); +}); From d1a216b5d9c0689d1777784675af504087034c9f Mon Sep 17 00:00:00 2001 From: philip-ellis-sp Date: Sat, 27 Jun 2026 16:33:06 -0400 Subject: [PATCH 8/9] reverted --- sdk-resources/build-versioned-sdk.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sdk-resources/build-versioned-sdk.js b/sdk-resources/build-versioned-sdk.js index 55995014..393b5402 100644 --- a/sdk-resources/build-versioned-sdk.js +++ b/sdk-resources/build-versioned-sdk.js @@ -745,7 +745,4 @@ function main() { } } -main().catch(err => { - console.error(`Unexpected error: ${err.message}`); - process.exit(1); -}); +main() From 09f468c993469d3d2ca3fcb13845df721ad2f69c Mon Sep 17 00:00:00 2001 From: philip-ellis-sp Date: Sat, 27 Jun 2026 16:33:16 -0400 Subject: [PATCH 9/9] reverted --- sdk-resources/build-versioned-sdk.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk-resources/build-versioned-sdk.js b/sdk-resources/build-versioned-sdk.js index 393b5402..83d4df4f 100644 --- a/sdk-resources/build-versioned-sdk.js +++ b/sdk-resources/build-versioned-sdk.js @@ -745,4 +745,4 @@ function main() { } } -main() +main();