Skip to content

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

Merged
John-David Dalton (jdalton) merged 7 commits intomainfrom
refactor/scripts-mts
Apr 15, 2026
Merged

refactor: rename scripts/*.mjs to *.mts for native TypeScript#1204
John-David Dalton (jdalton) merged 7 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
Comment thread scripts/build.mts
Comment thread scripts/download-iocraft-binaries.mts
Comment thread scripts/get-platform-matrix.mts
Comment thread scripts/get-platform-targets.mts
- 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/)
Root scripts/ were renamed to .mts but files in packages/build-infra/
and packages/cli/scripts/ were not. Fix 7 cross-package imports that
incorrectly referenced .mts extensions, and revert package-builder
package.json script entries to .mjs.
Rename all .mjs scripts in packages/build-infra/lib/,
packages/cli/scripts/, packages/cli/.config/,
packages/package-builder/scripts/, and template files to .mts
to match the root scripts/ rename from commit 049107c.

- 73 files renamed via git mv (.mjs -> .mts)
- Updated all internal imports within renamed files
- Updated package.json script commands in cli, build-infra,
  package-builder, and template packages
- Updated cross-package imports in root scripts/
- Preserved socketaddon-main/index.mjs (published npm entry point)
- Preserved .mjs extension checks in bundle validation scripts
@jdalton John-David Dalton (jdalton) merged commit 91cd811 into main Apr 15, 2026
13 checks passed
@jdalton John-David Dalton (jdalton) deleted the refactor/scripts-mts branch April 15, 2026 21:58
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.

2 participants