From 2d290298edee7a1469bc6a890aa4a5636bb6f83b Mon Sep 17 00:00:00 2001 From: jdalton Date: Wed, 15 Apr 2026 20:57:19 -0400 Subject: [PATCH 1/3] fix: resolve @babel/traverse CJS/ESM interop for native .mts execution Node's ESM loader wraps CJS modules so the default export is a namespace object, not the function itself. Extract `.default` at runtime with a cast to satisfy TypeScript. Also bump .node-version to 25.9.0. --- .node-version | 2 +- scripts/generate-sdk.mts | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.node-version b/.node-version index 609800fb..88299155 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -25.8.2 \ No newline at end of file +25.9.0 \ No newline at end of file diff --git a/scripts/generate-sdk.mts b/scripts/generate-sdk.mts index 09531825..943b22b1 100644 --- a/scripts/generate-sdk.mts +++ b/scripts/generate-sdk.mts @@ -15,7 +15,7 @@ import path from 'node:path' import process from 'node:process' import { parse } from '@babel/parser' -import { default as traverse } from '@babel/traverse' +import _traverse from '@babel/traverse' import * as t from '@babel/types' import MagicString from 'magic-string' @@ -26,6 +26,9 @@ import { spawn } from '@socketsecurity/lib/spawn' import { getRootPath } from './utils/path-helpers.mts' import { runCommand } from './utils/run-command.mts' +// CJS/ESM interop: @babel/traverse wraps the function under .default in ESM +const traverse = (_traverse as unknown as { default: typeof _traverse }).default + const OPENAPI_URL = 'https://api.socket.dev/v0/openapi' const rootPath = getRootPath(import.meta.url) From 8d983efb85b295b430b5fd7be11db5c3b33b1329 Mon Sep 17 00:00:00 2001 From: jdalton Date: Wed, 15 Apr 2026 20:59:31 -0400 Subject: [PATCH 2/3] fix: use consistent @babel/traverse CJS/ESM interop pattern Apply the same runtime-safe interop resolution in both generate-sdk.mts and bundle-validation.test.mts. The typeof check handles both Vitest (where the import may already be the function) and native Node ESM (where it's wrapped under .default). --- scripts/generate-sdk.mts | 6 +++++- test/unit/bundle-validation.test.mts | 9 ++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/scripts/generate-sdk.mts b/scripts/generate-sdk.mts index 943b22b1..af694410 100644 --- a/scripts/generate-sdk.mts +++ b/scripts/generate-sdk.mts @@ -27,7 +27,11 @@ import { getRootPath } from './utils/path-helpers.mts' import { runCommand } from './utils/run-command.mts' // CJS/ESM interop: @babel/traverse wraps the function under .default in ESM -const traverse = (_traverse as unknown as { default: typeof _traverse }).default +const traverse = ( + typeof _traverse === 'function' + ? _traverse + : (_traverse as unknown as { default: typeof _traverse }).default +) as typeof _traverse const OPENAPI_URL = 'https://api.socket.dev/v0/openapi' diff --git a/test/unit/bundle-validation.test.mts b/test/unit/bundle-validation.test.mts index bf885507..508b2442 100644 --- a/test/unit/bundle-validation.test.mts +++ b/test/unit/bundle-validation.test.mts @@ -8,9 +8,16 @@ import path from 'node:path' import { fileURLToPath } from 'node:url' import { parse } from '@babel/parser' -import { default as traverse } from '@babel/traverse' +import _traverse from '@babel/traverse' import { describe, expect, it } from 'vitest' +// CJS/ESM interop: @babel/traverse wraps the function under .default in ESM +const traverse = ( + typeof _traverse === 'function' + ? _traverse + : (_traverse as unknown as { default: typeof _traverse }).default +) as typeof _traverse + const __dirname = path.dirname(fileURLToPath(import.meta.url)) const packagePath = path.resolve(__dirname, '../..') const distPath = path.join(packagePath, 'dist') From 3f8a54edfa20151dd93f903acda8eb1138c41744 Mon Sep 17 00:00:00 2001 From: jdalton Date: Wed, 15 Apr 2026 21:00:20 -0400 Subject: [PATCH 3/3] refactor: simplify traverse interop to nullish coalescing --- scripts/generate-sdk.mts | 6 +----- test/unit/bundle-validation.test.mts | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/scripts/generate-sdk.mts b/scripts/generate-sdk.mts index af694410..fae75500 100644 --- a/scripts/generate-sdk.mts +++ b/scripts/generate-sdk.mts @@ -27,11 +27,7 @@ import { getRootPath } from './utils/path-helpers.mts' import { runCommand } from './utils/run-command.mts' // CJS/ESM interop: @babel/traverse wraps the function under .default in ESM -const traverse = ( - typeof _traverse === 'function' - ? _traverse - : (_traverse as unknown as { default: typeof _traverse }).default -) as typeof _traverse +const traverse = ((_traverse as any).default ?? _traverse) as typeof _traverse const OPENAPI_URL = 'https://api.socket.dev/v0/openapi' diff --git a/test/unit/bundle-validation.test.mts b/test/unit/bundle-validation.test.mts index 508b2442..e7e5a5f9 100644 --- a/test/unit/bundle-validation.test.mts +++ b/test/unit/bundle-validation.test.mts @@ -12,11 +12,7 @@ import _traverse from '@babel/traverse' import { describe, expect, it } from 'vitest' // CJS/ESM interop: @babel/traverse wraps the function under .default in ESM -const traverse = ( - typeof _traverse === 'function' - ? _traverse - : (_traverse as unknown as { default: typeof _traverse }).default -) as typeof _traverse +const traverse = ((_traverse as any).default ?? _traverse) as typeof _traverse const __dirname = path.dirname(fileURLToPath(import.meta.url)) const packagePath = path.resolve(__dirname, '../..')