-
-
Notifications
You must be signed in to change notification settings - Fork 28
/
node.js
41 lines (31 loc) · 1.03 KB
/
node.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
'use strict';
const nodeLSP = jest.createMockFromModule('vscode-languageserver/node');
/** @typedef {(globalModulesPath?: string, cwd?: string, trace?: TracerFn) => any} MockResolver */
/** @type {{[package: string]: MockResolver}} */
let mockedResolutions = {};
/**
* Mocks module resolution for a package.
* @param {string} packageName
* @param {MockResolver} resolver
*/
nodeLSP.Files.__mockResolution = (packageName, resolver) => {
mockedResolutions[packageName] = resolver;
};
/**
* Resets all mocked resolutions.
*/
nodeLSP.Files.__resetMockedResolutions = () => {
mockedResolutions = {};
};
/** @type {typeof import('vscode-languageserver/node').Files.resolve} */
const mockResolve = async (packageName, globalPath, cwd, trace) => {
if (mockedResolutions[packageName]) {
const resolved = mockedResolutions[packageName](globalPath, cwd, trace);
if (resolved) {
return resolved;
}
}
throw Error(`Failed to resolve module: ${packageName}`);
};
nodeLSP.Files.resolve = jest.fn(mockResolve);
module.exports = nodeLSP;