Skip to content

Commit 70ae2d2

Browse files
committed
Gate updating builtin-names based on Node next
1 parent db09543 commit 70ae2d2

File tree

2 files changed

+33
-21
lines changed

2 files changed

+33
-21
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
"npm-run-all2": "^7.0.2",
7878
"oxlint": "0.15.13",
7979
"pacote": "^21.0.0",
80+
"semver": "^7.7.1",
8081
"tap": "^21.1.0",
8182
"typescript": "5.8.2",
8283
"validate-npm-package-name": "^6.0.0"

scripts/update-data-npm.js

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
'use strict'
22

3-
const fs = require('node:fs/promises')
43
const Module = require('node:module')
54
const path = require('node:path')
65

76
const pacote = require('pacote')
7+
const semver = require('semver')
88
const validateNpmPackageName = require('validate-npm-package-name')
99

1010
const constants = require('@socketsecurity/registry/lib/constants')
11+
const { writeJson } = require('@socketsecurity/registry/lib/fs')
1112
const { logger } = require('@socketsecurity/registry/lib/logger')
1213
const { pFilter } = require('@socketsecurity/registry/lib/promises')
1314
const { confirm } = require('@socketsecurity/registry/lib/prompts')
@@ -22,6 +23,34 @@ const npmBuiltinNamesJsonPath = path.join(npmDataPath, 'builtin-names.json')
2223
const npmLegacyNamesJsonPath = path.join(npmDataPath, 'legacy-names.json')
2324

2425
void (async () => {
26+
// Lazily access constants.spinner.
27+
const { spinner } = constants
28+
29+
spinner.start()
30+
31+
// Lazily access constants.maintainedNodeVersions.
32+
const { next } = constants.maintainedNodeVersions
33+
const nodeVersion = process.version.slice(1)
34+
const isGteNext = semver.gte(nodeVersion, next)
35+
if (
36+
await confirm({
37+
message: `Update builtin package names?${isGteNext ? '' : ` (Requires Node >=${next})`}`,
38+
default: true
39+
})
40+
) {
41+
const nodeVersion = process.version.slice(1)
42+
if (isGteNext) {
43+
const builtinNames = Module.builtinModules
44+
// Node 23 introduces 'node:sea', 'node:sqlite', 'node:test', and 'node:test/reporters'
45+
// that have no unprefixed version so we skip them.
46+
.filter(n => !n.startsWith('node:'))
47+
.sort(naturalCompare)
48+
await writeJson(npmBuiltinNamesJsonPath, builtinNames, { spaces: 2 })
49+
} else {
50+
spinner.warn(`Skipping... (Running ${nodeVersion})`)
51+
}
52+
}
53+
2554
if (
2655
!(await confirm({
2756
message: 'Update npm package names data?',
@@ -30,16 +59,6 @@ void (async () => {
3059
) {
3160
return
3261
}
33-
// Lazily access constants.spinner.
34-
const { spinner } = constants
35-
36-
spinner.start()
37-
38-
const builtinNames = Module.builtinModules
39-
// Node 23 introduces 'node:sea', 'node:sqlite', 'node:test', and 'node:test/reporters'
40-
// that have no unprefixed version so we skip them.
41-
.filter(n => !n.startsWith('node:'))
42-
.sort(naturalCompare)
4362
const allThePackageNames = [
4463
...new Set([
4564
// Load the 43.1MB names.json file of '[email protected]'
@@ -81,17 +100,9 @@ void (async () => {
81100
},
82101
{ retries: 4, signal: abortSignal }
83102
)
84-
spinner.setText('Writing json files...')
85-
await Promise.all(
86-
[
87-
{ json: builtinNames, path: npmBuiltinNamesJsonPath },
88-
{ json: legacyNames, path: npmLegacyNamesJsonPath }
89-
].map(d =>
90-
fs.writeFile(d.path, `${JSON.stringify(d.json, null, 2)}\n`, 'utf8')
91-
)
92-
)
103+
await writeJson(npmLegacyNamesJsonPath, legacyNames, { spaces: 2 })
93104
spinner.stop()
94105
if (invalidNames.size) {
95-
logger.warn(`Removed missing packages:`, [...invalidNames])
106+
logger.warn('Removed missing packages:', [...invalidNames])
96107
}
97108
})()

0 commit comments

Comments
 (0)