Skip to content

Commit 5f076a4

Browse files
authored
chore: fix up node engines script (#607)
Process docs report a global rather than a module which trips a bunch of stuff up.
1 parent b6b0725 commit 5f076a4

File tree

1 file changed

+46
-11
lines changed

1 file changed

+46
-11
lines changed

scripts/update-engines-node.ts

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,16 @@ interface DocumentedNodeClass {
4444
classMethods?: Array<DocumentedNodeClassMethod | DocumentedUnknownNode>;
4545
}
4646

47+
interface DocumentedNodeGlobal {
48+
type: 'global';
49+
name: string;
50+
introduced_in?: string;
51+
modules?: Array<DocumentedNodeModule | DocumentedUnknownNode>;
52+
classes?: Array<DocumentedNodeClass | DocumentedUnknownNode>;
53+
properties?: Array<DocumentedNodeProperty>;
54+
methods?: Array<DocumentedNodeMethod | DocumentedUnknownNode>;
55+
}
56+
4757
interface DocumentedNodeModule {
4858
type: 'module';
4959
name: string;
@@ -53,11 +63,13 @@ interface DocumentedNodeModule {
5363
classes?: Array<DocumentedNodeClass | DocumentedUnknownNode>;
5464
properties?: Array<DocumentedNodeProperty>;
5565
methods?: Array<DocumentedNodeMethod | DocumentedUnknownNode>;
66+
globals?: Array<DocumentedNodeGlobal | DocumentedUnknownNode>;
5667
}
5768

5869
interface RootDocumentedNodeModule {
5970
type: 'module';
60-
modules: DocumentedNodeModule[];
71+
modules?: DocumentedNodeModule[];
72+
globals?: DocumentedNodeGlobal[];
6173
}
6274

6375
// Maps subpath module names (after stripping node: prefix) to the base module
@@ -115,7 +127,7 @@ function earliestVersion(versions: string[]): string {
115127
}
116128

117129
function findExportVersion(
118-
module: DocumentedNodeModule,
130+
module: DocumentedNodeModule | DocumentedNodeGlobal,
119131
exportName: string,
120132
lastIntroducedIn?: string
121133
): string | null {
@@ -157,15 +169,35 @@ function findExportVersion(
157169
}
158170

159171
function findSubmodule(
160-
module: DocumentedNodeModule,
172+
module: DocumentedNodeModule | DocumentedNodeGlobal,
161173
name: string
162-
): DocumentedNodeModule | null {
174+
): DocumentedNodeModule | DocumentedNodeGlobal | null {
163175
for (const sub of module.modules ?? []) {
164176
if (sub.type !== 'module') continue;
165177
if (sub.name === name) return sub;
166178
const found = findSubmodule(sub, name);
167179
if (found) return found;
168180
}
181+
if (module.type === 'module') {
182+
for (const global of module.globals ?? []) {
183+
if (global.type !== 'global') continue;
184+
if (global.name.toLowerCase() === name.toLowerCase()) return global;
185+
const found = findSubmodule(global, name);
186+
if (found) return found;
187+
}
188+
}
189+
return null;
190+
}
191+
192+
function findDefaultModuleOrGlobal(
193+
mod: RootDocumentedNodeModule
194+
): DocumentedNodeModule | DocumentedNodeGlobal | null {
195+
if (mod.modules && mod.modules.length === 1) {
196+
return mod.modules[0];
197+
}
198+
if (mod.globals && mod.globals.length === 1) {
199+
return mod.globals[0];
200+
}
169201
return null;
170202
}
171203

@@ -177,23 +209,26 @@ async function getNodeVersion(
177209
const data = await fetchNodeModuleData(base);
178210
if (!data) return null;
179211

180-
let rootModule = data.modules[0];
181-
if (!rootModule) return null;
212+
const targetModuleOrGlobal = findDefaultModuleOrGlobal(data);
213+
214+
if (!targetModuleOrGlobal) return null;
215+
216+
let root: DocumentedNodeModule | DocumentedNodeGlobal = targetModuleOrGlobal;
182217

183218
if (submodule) {
184-
const sub = findSubmodule(rootModule, submodule);
219+
const sub = findSubmodule(targetModuleOrGlobal, submodule);
185220
if (!sub) return null;
186-
rootModule = sub;
221+
root = sub;
187222
}
188223

189224
if (!exportName) {
190-
if (rootModule.introduced_in) {
191-
return rootModule.introduced_in.replace(/^v/, '');
225+
if (root.introduced_in) {
226+
return root.introduced_in.replace(/^v/, '');
192227
}
193228
return null;
194229
}
195230

196-
return findExportVersion(rootModule, exportName);
231+
return findExportVersion(root, exportName);
197232
}
198233

199234
async function updateReplacementNodeEngine(

0 commit comments

Comments
 (0)