exthost: allow aliasing required modules for back compat

Fixes #140585
This commit is contained in:
Connor Peet
2022-01-12 12:10:07 -08:00
parent 08b9273809
commit 3d1576a655
2 changed files with 89 additions and 17 deletions

View File

@@ -23,8 +23,25 @@ class NodeModuleRequireInterceptor extends RequireInterceptor {
protected _installInterceptor(): void {
const that = this;
const node_module = <any>require.__$__nodeRequire('module');
const original = node_module._load;
const originalLoad = node_module._load;
node_module._load = function load(request: string, parent: { filename: string; }, isMain: boolean) {
request = applyAlternatives(request);
if (!that._factories.has(request)) {
return originalLoad.apply(this, arguments);
}
return that._factories.get(request)!.load(
request,
URI.file(realpathSync(parent.filename)),
request => originalLoad.apply(this, [request, parent, isMain])
);
};
const originalLookup = node_module._resolveLookupPaths;
node_module._resolveLookupPaths = (request: string, parent: unknown) => {
return originalLookup.call(this, applyAlternatives(request), parent);
};
const applyAlternatives = (request: string) => {
for (let alternativeModuleName of that._alternatives) {
let alternative = alternativeModuleName(request);
if (alternative) {
@@ -32,14 +49,7 @@ class NodeModuleRequireInterceptor extends RequireInterceptor {
break;
}
}
if (!that._factories.has(request)) {
return original.apply(this, arguments);
}
return that._factories.get(request)!.load(
request,
URI.file(realpathSync(parent.filename)),
request => original.apply(this, [request, parent, isMain])
);
return request;
};
}
}