import { Client } from '@coder/node-browser'; import { fromTar } from '@coder/requirefs'; import { URI } from 'vs/base/common/uri'; import { ILogService } from 'vs/platform/log/common/log'; import { ExtensionActivationTimesBuilder } from 'vs/workbench/api/common/extHostExtensionActivator'; import { IExtHostNodeProxy } from './extHostNodeProxy'; export const loadCommonJSModule = async ( module: URI, activationTimesBuilder: ExtensionActivationTimesBuilder, nodeProxy: IExtHostNodeProxy, logService: ILogService, vscode: any, ): Promise => { const client = new Client(nodeProxy, { logger: logService }); const [buffer, init] = await Promise.all([ nodeProxy.fetchExtension(module), client.handshake(), ]); const rfs = fromTar(buffer); (self).global = self; rfs.provide('vscode', vscode); Object.keys(client.modules).forEach((key) => { const mod = (client.modules as any)[key]; if (key === 'process') { (self).process = mod; (self).process.env = init.env; return; } rfs.provide(key, mod); switch (key) { case 'buffer': (self).Buffer = mod.Buffer; break; case 'timers': (self).setImmediate = mod.setImmediate; break; } }); try { activationTimesBuilder.codeLoadingStart(); return rfs.require('.'); } finally { activationTimesBuilder.codeLoadingStop(); } };