| const path = require(`path`); | 
| const {resolveModuleName} = require(`ts-pnp`); | 
| const {makeResolver} = require('./resolver'); | 
|   | 
| function nothing() { | 
|   // ¯\_(ツ)_/¯ | 
| } | 
|   | 
| function getModuleLocator(module, pnpapi) { | 
|   const moduleLocation = typeof module === `string` | 
|     ? module | 
|     : module.filename; | 
|   | 
|   if (!moduleLocation) | 
|     throw new Error(`The specified module doesn't seem to exist on the filesystem`); | 
|   | 
|   const moduleLocator = pnpapi.findPackageLocator(moduleLocation); | 
|   | 
|   if (!moduleLocator) | 
|     throw new Error(`the specified module doesn't seem to be part of the dependency tree`); | 
|   | 
|   return moduleLocator; | 
| } | 
|   | 
| function getDependencyLocator(sourceLocator, name, pnpapi) { | 
|   | 
|   const {packageDependencies} = pnpapi.getPackageInformation(sourceLocator); | 
|   const reference = packageDependencies.get(name); | 
|   | 
|   return {name, reference}; | 
| } | 
|   | 
| module.exports = process.versions.pnp ? { | 
|   apply: makeResolver({pnpapi: require(`pnpapi`)}), | 
| } : { | 
|   apply: nothing, | 
| }; | 
|   | 
| module.exports.makePlugin = (locator, filter) => process.versions.pnp ? { | 
|   apply: makeResolver({sourceLocator: locator, filter, pnpapi: require(`pnpapi`)}), | 
| } : { | 
|   apply: nothing, | 
| }; | 
|   | 
| module.exports.moduleLoader = (module) => { | 
|   if (process.versions.pnp) { | 
|     const pnpapi = require(`pnpapi`); | 
|     return { | 
|       apply: makeResolver({ | 
|         sourceLocator: getModuleLocator(module, pnpapi), | 
|         pnpapi, | 
|       }), | 
|     }; | 
|   } | 
|   return { | 
|     apply: nothing, | 
|   }; | 
| }; | 
|   | 
| module.exports.topLevelLoader = process.versions.pnp ? { | 
|   apply: makeResolver({sourceLocator: {name: null, reference: null}, pnpapi: require(`pnpapi`)}), | 
| } : { | 
|   apply: nothing, | 
| }; | 
|   | 
| module.exports.bind = (filter, module, dependency) => { | 
|   if (process.versions.pnp) { | 
|     const pnpapi = require(`pnpapi`); | 
|     return { | 
|       apply: makeResolver({ | 
|         sourceLocator: dependency | 
|           ? getDependencyLocator(getModuleLocator(module, pnpapi), dependency, pnpapi) | 
|           : getModuleLocator(module, pnpapi), | 
|         filter, | 
|         pnpapi, | 
|       }), | 
|     }; | 
|   } | 
|   return { | 
|     apply: nothing, | 
|   }; | 
| }; | 
|   | 
| module.exports.tsLoaderOptions = (options = {}) => process.versions.pnp ? Object.assign({}, options, { | 
|   resolveModuleName: resolveModuleName, | 
|   resolveTypeReferenceDirective: resolveModuleName, | 
| }) : options; | 
|   | 
| module.exports.forkTsCheckerOptions = (options = {}) => process.versions.pnp ? Object.assign({}, options, { | 
|   resolveModuleNameModule: require.resolve(`./ts`), | 
|   resolveTypeReferenceDirectiveModule: require.resolve(`./ts`), | 
| }) : options; |