dependencies.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. "use strict";
  2. exports.__esModule = true;
  3. exports.resolve = resolve;
  4. exports.has = has;
  5. exports.logMissing = logMissing;
  6. exports.laterLogMissing = laterLogMissing;
  7. var _path = _interopRequireDefault(require("path"));
  8. var _lodash = _interopRequireDefault(require("lodash.debounce"));
  9. var _resolve = _interopRequireDefault(require("resolve"));
  10. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  11. const nativeRequireResolve = parseFloat(process.versions.node) >= 8.9;
  12. function resolve(dirname, moduleName, absoluteImports) {
  13. if (absoluteImports === false) return moduleName;
  14. let basedir = dirname;
  15. if (typeof absoluteImports === "string") {
  16. basedir = _path.default.resolve(basedir, absoluteImports);
  17. }
  18. try {
  19. if (nativeRequireResolve) {
  20. // $FlowIgnore
  21. return require.resolve(moduleName, {
  22. paths: [basedir]
  23. });
  24. } else {
  25. return _resolve.default.sync(moduleName, {
  26. basedir
  27. });
  28. }
  29. } catch (err) {
  30. if (err.code !== "MODULE_NOT_FOUND") throw err; // $FlowIgnore
  31. throw Object.assign(new Error(`Failed to resolve "${moduleName}" relative to "${dirname}"`), {
  32. code: "BABEL_POLYFILL_NOT_FOUND",
  33. polyfill: moduleName,
  34. dirname
  35. });
  36. }
  37. }
  38. function has(basedir, name) {
  39. try {
  40. if (nativeRequireResolve) {
  41. // $FlowIgnore
  42. require.resolve(name, {
  43. paths: [basedir]
  44. });
  45. } else {
  46. _resolve.default.sync(name, {
  47. basedir
  48. });
  49. }
  50. return true;
  51. } catch (_unused) {
  52. return false;
  53. }
  54. }
  55. function logMissing(missingDeps) {
  56. if (missingDeps.size === 0) return;
  57. const deps = Array.from(missingDeps).sort().join(" ");
  58. console.warn("\nSome polyfills have been added but are not present in your dependencies.\n" + "Please run one of the following commands:\n" + `\tnpm install --save ${deps}\n` + `\tyarn add ${deps}\n`);
  59. process.exitCode = 1;
  60. }
  61. let allMissingDeps = new Set();
  62. const laterLogMissingDependencies = (0, _lodash.default)(() => {
  63. logMissing(allMissingDeps);
  64. allMissingDeps = new Set();
  65. }, 100);
  66. function laterLogMissing(missingDeps) {
  67. if (missingDeps.size === 0) return;
  68. missingDeps.forEach(name => allMissingDeps.add(name));
  69. laterLogMissingDependencies();
  70. }