Skip to content

refactor: rename scripts/*.mjs to *.mts for native TypeScript#1204

Open
John-David Dalton (jdalton) wants to merge 3 commits intomainfrom
refactor/scripts-mts
Open

refactor: rename scripts/*.mjs to *.mts for native TypeScript#1204
John-David Dalton (jdalton) wants to merge 3 commits intomainfrom
refactor/scripts-mts

Conversation

@jdalton
Copy link
Copy Markdown
Contributor

@jdalton John-David Dalton (jdalton) commented Apr 15, 2026

Node 25.9.0 supports .mts natively. Rename all scripts from .mjs to .mts for explicit ESM TypeScript.


Note

Medium Risk
Broad rename of build/test/lint/setup script entrypoints and internal imports to .mts could break local dev/CI if any callers or workflows still reference .mjs or if Node/TS loader assumptions differ. Commit-hook hardening is low risk but affects developer commit flow if paths/permissions are misconfigured.

Overview
Updates the repo’s Node script toolchain to run TypeScript ESM directly by switching root and package-level package.json scripts from scripts/*.mjs to scripts/*.mts, and updating cross-script imports accordingly.

Hardens commit message hooks by improving error handling/cleanup in .git-hooks/commit-msg and making .husky/commit-msg fail fast with a clear error when the underlying hook is missing or non-executable.

Minor docs/metadata tweaks: points security tooling docs at external-tools.json and marks the security-scan skill as user-invocable while removing outdated hook documentation.

Reviewed by Cursor Bugbot for commit 400717d. Configure here.

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

Bugbot Autofix prepared fixes for both issues found in the latest run.

  • ✅ Fixed: CLI package.json references non-existent .mts script files
    • Reverted all local script references in packages/cli/package.json (19 entries) and packages/package-builder/package.json (5 entries) from .mts back to .mjs to match the actual filenames on disk.
  • ✅ Fixed: Cross-package imports reference non-existent .mts files
    • Fixed 7 cross-package import specifiers in 6 root scripts (build.mts, clean-cache.mts, validate-checksums.mts, download-iocraft-binaries.mts, get-platform-matrix.mts, get-platform-targets.mts) to use .mjs extensions matching the actual files in packages/build-infra/lib/ and packages/cli/scripts/constants/.

Create PR

Or push these changes by commenting:

@cursor push 4e9bb17aa7
Preview (4e9bb17aa7)
diff --git a/packages/cli/package.json b/packages/cli/package.json
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -18,12 +18,12 @@
     "logo-light.png"
   ],
   "scripts": {
-    "build": "node --max-old-space-size=8192 --import=./scripts/load.mjs scripts/build.mts",
-    "build:force": "node --max-old-space-size=8192 --import=./scripts/load.mjs scripts/build.mts --force",
-    "build:watch": "node --max-old-space-size=8192 --import=./scripts/load.mjs scripts/build.mts --watch",
-    "restore-cache": "node --import=./scripts/load.mjs scripts/restore-cache.mts",
-    "build:sea": "node --max-old-space-size=8192 --import=./scripts/load.mjs scripts/build-sea.mts",
-    "build:js": "node scripts/build-js.mts",
+    "build": "node --max-old-space-size=8192 --import=./scripts/load.mjs scripts/build.mjs",
+    "build:force": "node --max-old-space-size=8192 --import=./scripts/load.mjs scripts/build.mjs --force",
+    "build:watch": "node --max-old-space-size=8192 --import=./scripts/load.mjs scripts/build.mjs --watch",
+    "restore-cache": "node --import=./scripts/load.mjs scripts/restore-cache.mjs",
+    "build:sea": "node --max-old-space-size=8192 --import=./scripts/load.mjs scripts/build-sea.mjs",
+    "build:js": "node scripts/build-js.mjs",
     "dev:watch": "pnpm run build:watch",
     "check": "node ../../scripts/check.mts",
     "check-ci": "pnpm run check",
@@ -31,8 +31,8 @@
     "lint-ci": "pnpm run lint",
     "type": "tsc --noEmit",
     "type-ci": "pnpm run type",
-    "sync-checksums": "node scripts/sync-checksums.mts",
-    "cover": "node --import=./scripts/load.mjs scripts/cover.mts",
+    "sync-checksums": "node scripts/sync-checksums.mjs",
+    "cover": "node --import=./scripts/load.mjs scripts/cover.mjs",
     "clean": "run-p -c --aggregate-output clean:*",
     "clean:binject": "del-cli 'build/binject'",
     "clean:cache": "del-cli '**/.cache'",
@@ -49,22 +49,22 @@
     "dev:npm": "cross-env SOCKET_CLI_MODE=npm node --experimental-strip-types src/cli-dispatch.mts",
     "dev:npx": "cross-env SOCKET_CLI_MODE=npx node --experimental-strip-types src/cli-dispatch.mts",
     "e2e-tests": "dotenvx -q run -f .env.test -- vitest run --config vitest.e2e.config.mts",
-    "e2e:js": "node scripts/e2e.mts --js",
-    "e2e:sea": "node scripts/e2e.mts --sea",
-    "e2e:all": "node scripts/e2e.mts --all",
+    "e2e:js": "node scripts/e2e.mjs --js",
+    "e2e:sea": "node scripts/e2e.mjs --sea",
+    "e2e:all": "node scripts/e2e.mjs --all",
     "test": "run-s check test:*",
     "test:prepare": "dotenvx -q run -f .env.test -- pnpm build && del-cli 'test/**/node_modules'",
-    "test:unit": "node --import=./scripts/load.mjs scripts/test-wrapper.mts",
-    "test:unit:update": "node --import=./scripts/load.mjs scripts/test-wrapper.mts --update",
-    "test:unit:coverage": "node --import=./scripts/load.mjs scripts/test-wrapper.mts --coverage",
-    "test:validate": "node --import=./scripts/load.mjs scripts/validate-tests.mts",
+    "test:unit": "node --import=./scripts/load.mjs scripts/test-wrapper.mjs",
+    "test:unit:update": "node --import=./scripts/load.mjs scripts/test-wrapper.mjs --update",
+    "test:unit:coverage": "node --import=./scripts/load.mjs scripts/test-wrapper.mjs --coverage",
+    "test:validate": "node --import=./scripts/load.mjs scripts/validate-tests.mjs",
     "test-ci": "run-s test:*",
     "test-pre-commit": "cross-env PRE_COMMIT=1 pnpm test",
     "update": "node ../../scripts/update.mts",
-    "verify": "node scripts/verify-package.mts",
-    "wasm": "node scripts/wasm.mts",
-    "wasm:build": "node scripts/wasm.mts --build",
-    "wasm:download": "node scripts/wasm.mts --download"
+    "verify": "node scripts/verify-package.mjs",
+    "wasm": "node scripts/wasm.mjs",
+    "wasm:build": "node scripts/wasm.mjs --build",
+    "wasm:download": "node scripts/wasm.mjs --download"
   },
   "devDependencies": {
     "@babel/generator": "catalog:",

diff --git a/packages/package-builder/package.json b/packages/package-builder/package.json
--- a/packages/package-builder/package.json
+++ b/packages/package-builder/package.json
@@ -8,11 +8,11 @@
     "./scripts/*": "./scripts/*"
   },
   "scripts": {
-    "generate:all": "node scripts/generate-all.mts",
-    "generate:cli": "node scripts/generate-cli-packages.mts",
-    "generate:cli-sentry": "node scripts/generate-cli-sentry-package.mts",
-    "generate:socketaddon": "node scripts/generate-socketaddon-packages.mts",
-    "generate:socketbin": "node scripts/generate-socketbin-packages.mts"
+    "generate:all": "node scripts/generate-all.mjs",
+    "generate:cli": "node scripts/generate-cli-packages.mjs",
+    "generate:cli-sentry": "node scripts/generate-cli-sentry-package.mjs",
+    "generate:socketaddon": "node scripts/generate-socketaddon-packages.mjs",
+    "generate:socketbin": "node scripts/generate-socketbin-packages.mjs"
   },
   "dependencies": {
     "@socketsecurity/lib": "catalog:",

diff --git a/scripts/build.mts b/scripts/build.mts
--- a/scripts/build.mts
+++ b/scripts/build.mts
@@ -33,7 +33,7 @@
   PLATFORM_TARGETS,
   formatPlatformTarget,
   parsePlatformTarget,
-} from '../packages/build-infra/lib/platform-targets.mts'
+} from '../packages/build-infra/lib/platform-targets.mjs'
 
 const logger = getDefaultLogger()
 const __filename = fileURLToPath(import.meta.url)

diff --git a/scripts/clean-cache.mts b/scripts/clean-cache.mts
--- a/scripts/clean-cache.mts
+++ b/scripts/clean-cache.mts
@@ -15,7 +15,7 @@
 import { safeDelete } from '@socketsecurity/lib/fs'
 import { getDefaultLogger } from '@socketsecurity/lib/logger'
 
-import { getGlobalCacheDirs } from '../packages/cli/scripts/constants/paths.mts'
+import { getGlobalCacheDirs } from '../packages/cli/scripts/constants/paths.mjs'
 
 const logger = getDefaultLogger()
 

diff --git a/scripts/download-iocraft-binaries.mts b/scripts/download-iocraft-binaries.mts
--- a/scripts/download-iocraft-binaries.mts
+++ b/scripts/download-iocraft-binaries.mts
@@ -19,8 +19,8 @@
 import {
   PLATFORM_CONFIGS,
   parsePlatformArgs,
-} from '../packages/build-infra/lib/platform-targets.mts'
-import { logTransientErrorHelp } from '../packages/build-infra/lib/github-error-utils.mts'
+} from '../packages/build-infra/lib/platform-targets.mjs'
+import { logTransientErrorHelp } from '../packages/build-infra/lib/github-error-utils.mjs'
 
 import { getDefaultLogger } from '@socketsecurity/lib/logger'
 import { downloadSocketBtmRelease } from '@socketsecurity/lib/releases/socket-btm'

diff --git a/scripts/get-platform-matrix.mts b/scripts/get-platform-matrix.mts
--- a/scripts/get-platform-matrix.mts
+++ b/scripts/get-platform-matrix.mts
@@ -8,7 +8,7 @@
  *   # Outputs: {"include":[...]}
  */
 
-import { PLATFORM_CONFIGS } from '../packages/build-infra/lib/platform-targets.mts'
+import { PLATFORM_CONFIGS } from '../packages/build-infra/lib/platform-targets.mjs'
 
 const matrix = {
   include: PLATFORM_CONFIGS.map(c => ({

diff --git a/scripts/get-platform-targets.mts b/scripts/get-platform-targets.mts
--- a/scripts/get-platform-targets.mts
+++ b/scripts/get-platform-targets.mts
@@ -8,6 +8,6 @@
  *   # Outputs space-separated: linux-x64 linux-arm64 ...
  */
 
-import { PLATFORM_TARGETS } from '../packages/build-infra/lib/platform-targets.mts'
+import { PLATFORM_TARGETS } from '../packages/build-infra/lib/platform-targets.mjs'
 
 console.log(PLATFORM_TARGETS.join(' '))

diff --git a/scripts/validate-checksums.mts b/scripts/validate-checksums.mts
--- a/scripts/validate-checksums.mts
+++ b/scripts/validate-checksums.mts
@@ -19,7 +19,7 @@
 
 import { getDefaultLogger } from '@socketsecurity/lib/logger'
 
-import { PLATFORM_MAP_TOOLS } from '../packages/cli/scripts/constants/external-tools-platforms.mts'
+import { PLATFORM_MAP_TOOLS } from '../packages/cli/scripts/constants/external-tools-platforms.mjs'
 
 const logger = getDefaultLogger()
 const __dirname = path.dirname(fileURLToPath(import.meta.url))

You can send follow-ups to the cloud agent here.

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 400717d. Configure here.

Comment thread packages/cli/package.json Outdated
"verify": "node scripts/verify-package.mts",
"wasm": "node scripts/wasm.mts",
"wasm:build": "node scripts/wasm.mts --build",
"wasm:download": "node scripts/wasm.mts --download"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CLI package.json references non-existent .mts script files

High Severity

All script entries in packages/cli/package.json were updated to reference .mts files (e.g., scripts/build.mts, scripts/test-wrapper.mts), but the actual files in packages/cli/scripts/ are still .mjs. The same applies to packages/package-builder/package.json. Node.js will fail with "file not found" when running any of these scripts (e.g., pnpm build, pnpm test:unit), breaking the entire CLI build and test pipeline.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 400717d. Configure here.

Comment thread scripts/build.mts
formatPlatformTarget,
parsePlatformTarget,
} from '../packages/build-infra/lib/platform-targets.mjs'
} from '../packages/build-infra/lib/platform-targets.mts'
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cross-package imports reference non-existent .mts files

High Severity

Several root scripts updated their import specifiers to .mts for files in other packages that were not renamed. For example, scripts/build.mts imports from ../packages/build-infra/lib/platform-targets.mts, but that file is still platform-targets.mjs. The same issue affects imports from packages/cli/scripts/constants/ and packages/build-infra/lib/github-error-utils. Node.js ESM requires exact file extensions and does not resolve .mts to .mjs.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 400717d. Configure here.

- scripts/check.mts: update 4 validate-* spawn paths from .mjs to .mts
- scripts/validate-no-cdn-refs.mts: fix self-skip check extension
- scripts/lib/build-exec.mts: fix dynamic import of build-helpers
- .github/workflows/provenance.yml: update 11 root script references
- packages/cli/package.json: revert local script refs back to .mjs
  (only root scripts/ were renamed, not packages/cli/scripts/)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant