register.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var match_path_sync_1 = require("./match-path-sync");
  4. var config_loader_1 = require("./config-loader");
  5. var options_1 = require("./options");
  6. var noOp = function () { return void 0; };
  7. function getCoreModules(builtinModules) {
  8. builtinModules = builtinModules || [
  9. "assert",
  10. "buffer",
  11. "child_process",
  12. "cluster",
  13. "crypto",
  14. "dgram",
  15. "dns",
  16. "domain",
  17. "events",
  18. "fs",
  19. "http",
  20. "https",
  21. "net",
  22. "os",
  23. "path",
  24. "punycode",
  25. "querystring",
  26. "readline",
  27. "stream",
  28. "string_decoder",
  29. "tls",
  30. "tty",
  31. "url",
  32. "util",
  33. "v8",
  34. "vm",
  35. "zlib"
  36. ];
  37. var coreModules = {};
  38. for (var _i = 0, builtinModules_1 = builtinModules; _i < builtinModules_1.length; _i++) {
  39. var module_1 = builtinModules_1[_i];
  40. coreModules[module_1] = true;
  41. }
  42. return coreModules;
  43. }
  44. /**
  45. * Installs a custom module load function that can adhere to paths in tsconfig.
  46. * Returns a function to undo paths registration.
  47. */
  48. function register(explicitParams) {
  49. var configLoaderResult = config_loader_1.configLoader({
  50. cwd: options_1.options.cwd,
  51. explicitParams: explicitParams
  52. });
  53. if (configLoaderResult.resultType === "failed") {
  54. console.warn(configLoaderResult.message + ". tsconfig-paths will be skipped");
  55. return noOp;
  56. }
  57. var matchPath = match_path_sync_1.createMatchPath(configLoaderResult.absoluteBaseUrl, configLoaderResult.paths, configLoaderResult.mainFields, configLoaderResult.addMatchAll);
  58. // Patch node's module loading
  59. // tslint:disable-next-line:no-require-imports variable-name
  60. var Module = require("module");
  61. var originalResolveFilename = Module._resolveFilename;
  62. var coreModules = getCoreModules(Module.builtinModules);
  63. // tslint:disable-next-line:no-any
  64. Module._resolveFilename = function (request, _parent) {
  65. var isCoreModule = coreModules.hasOwnProperty(request);
  66. if (!isCoreModule) {
  67. var found = matchPath(request);
  68. if (found) {
  69. var modifiedArguments = [found].concat([].slice.call(arguments, 1)); // Passes all arguments. Even those that is not specified above.
  70. // tslint:disable-next-line:no-invalid-this
  71. return originalResolveFilename.apply(this, modifiedArguments);
  72. }
  73. }
  74. // tslint:disable-next-line:no-invalid-this
  75. return originalResolveFilename.apply(this, arguments);
  76. };
  77. return function () {
  78. // Return node's module loading to original state.
  79. Module._resolveFilename = originalResolveFilename;
  80. };
  81. }
  82. exports.register = register;