'How to link the imported dependencies of module created by vm.SourceTextModule to it?

Let's say we are creating a module called app by constructing a new vm.SourceTextModule object:

const context = {
  exports: {},
  console,  // custom console object
};
const sandbox = vm.createContext(context);

const app = new vm.SourceTextModule(
  `import path from 'path';
   console.log(path.resolve('./src'));`,
  {
    context: sandbox,
  }
);

According to the Node.js documentation to obtain the default export from path module we should "link" the imported dependencies of app module to it.
To achieve this we should pass linker callback to app.link method:

async function linker(specifier, referencingModule) {
    // the desired logic...
}

await app.link(linker);

How to implement linker function properly so that we could import path module in newly created app module and use it:

await app.evaluate();  // => /home/user/Documents/project/src

P.S. We are using TypeScript, so I checked if we have installed types for path package.

package.json:

"@types/node": "^17.0.31",


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source