|
1 | 1 | // Ignore this file, this is only needed for internal purposes. |
2 | | -// We mock `require()` so that examples look the same as if the library |
3 | | -// was directly installed. |
| 2 | +// We mock `require()` so that examples look the same as if the library was |
| 3 | +// directly installed. |
4 | 4 |
|
5 | | -// eslint-disable-next-line filenames/match-exported |
6 | 5 | 'use strict' |
7 | 6 |
|
| 7 | +const Module = require('module') |
| 8 | + |
8 | 9 | const { name } = require('../package') |
9 | 10 |
|
10 | | -const mockedRequire = function(moduleName, ...args) { |
11 | | - // istanbul ignore next |
12 | | - const moduleNameA = moduleName === name ? `${__dirname}/..` : moduleName |
13 | | - // eslint-disable-next-line import/no-dynamic-require |
14 | | - return require(moduleNameA, ...args) |
| 11 | +const originalRequire = Module.prototype.require |
| 12 | + |
| 13 | +// eslint-disable-next-line fp/no-mutation, func-names |
| 14 | +Module.prototype.require = function(moduleName, ...args) { |
| 15 | + const moduleNameA = getMockedName(moduleName) |
| 16 | + // eslint-disable-next-line fp/no-this |
| 17 | + return originalRequire.call(this, moduleNameA, ...args) |
15 | 18 | } |
16 | 19 |
|
17 | | -module.exports = mockedRequire |
| 20 | +const getMockedName = function(moduleName) { |
| 21 | + if (moduleName !== name && !moduleName.startsWith(`${name}/`)) { |
| 22 | + return moduleName |
| 23 | + } |
| 24 | + |
| 25 | + return moduleName.replace(name, `${__dirname}/..`) |
| 26 | +} |
0 commit comments