版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

110 строки
3.5 KiB

  1. "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  2. var _chunk5TD4KD7Sjs = require('./chunk-5TD4KD7S.js');
  3. // src/resolve.ts
  4. var _fs = require('fs');
  5. var _promises = require('fs/promises');
  6. var _path = require('path'); var _path2 = _interopRequireDefault(_path);
  7. var RollupResolve = () => {
  8. const referencedFiles = /* @__PURE__ */ new Map();
  9. function collectReferencedFile(importer, file) {
  10. if (!importer)
  11. return;
  12. if (!referencedFiles.has(file)) {
  13. referencedFiles.set(file, /* @__PURE__ */ new Set([importer]));
  14. } else {
  15. referencedFiles.get(file).add(importer);
  16. }
  17. }
  18. const resolveCache = /* @__PURE__ */ new Map();
  19. function withResolveCache(id, importer, result) {
  20. if (!resolveCache.has(importer)) {
  21. resolveCache.set(importer, /* @__PURE__ */ new Map([[id, result]]));
  22. return result;
  23. }
  24. resolveCache.get(importer).set(id, result);
  25. return result;
  26. }
  27. const resolve = (ctx) => async (id, importer) => {
  28. var _a;
  29. async function tryPkgEntry() {
  30. var _a2;
  31. try {
  32. const pkgPath = (_a2 = await ctx.resolve(`${id}/package.json`, importer)) == null ? void 0 : _a2.id;
  33. if (!pkgPath)
  34. return;
  35. const pkg = JSON.parse(await _promises.readFile.call(void 0, pkgPath, "utf-8"));
  36. const types = pkg.types || pkg.typings;
  37. if (!types)
  38. return;
  39. const entry = _path2.default.resolve(pkgPath, "..", types);
  40. return _fs.existsSync.call(void 0, entry) ? entry : void 0;
  41. } catch (e) {
  42. }
  43. }
  44. const tryResolve = async (id2) => {
  45. var _a2, _b;
  46. try {
  47. return ((_a2 = await ctx.resolve(id2, importer)) == null ? void 0 : _a2.id) || ((_b = await ctx.resolve(`${id2}.d`, importer)) == null ? void 0 : _b.id);
  48. } catch (e2) {
  49. }
  50. return;
  51. };
  52. const cached = (_a = resolveCache.get(importer)) == null ? void 0 : _a.get(id);
  53. if (cached)
  54. return cached;
  55. if (!id.startsWith(".")) {
  56. const entry = await tryPkgEntry();
  57. if (entry)
  58. return withResolveCache(id, importer, entry);
  59. }
  60. let resolved = await tryResolve(id);
  61. if (!resolved)
  62. return;
  63. if (_fs.existsSync.call(void 0, resolved)) {
  64. collectReferencedFile(importer, resolved);
  65. return withResolveCache(id, importer, resolved);
  66. }
  67. resolved = await tryResolve(resolved);
  68. if (resolved && _fs.existsSync.call(void 0, resolved)) {
  69. collectReferencedFile(importer, resolved);
  70. return withResolveCache(id, importer, resolved);
  71. }
  72. };
  73. const handleHotUpdate = ({
  74. file,
  75. server,
  76. modules
  77. }) => {
  78. const cache = /* @__PURE__ */ new Map();
  79. function getAffectedModules(file2) {
  80. if (cache.has(file2))
  81. return cache.get(file2);
  82. if (!referencedFiles.has(file2))
  83. return /* @__PURE__ */ new Set([]);
  84. const modules2 = /* @__PURE__ */ new Set([]);
  85. cache.set(file2, modules2);
  86. for (const importer of referencedFiles.get(file2)) {
  87. const mods = server.moduleGraph.getModulesByFile(importer);
  88. if (mods)
  89. mods.forEach((m) => modules2.add(m));
  90. getAffectedModules(importer).forEach((m) => modules2.add(m));
  91. }
  92. return modules2;
  93. }
  94. if (_chunk5TD4KD7Sjs.tsFileCache[file])
  95. delete _chunk5TD4KD7Sjs.tsFileCache[file];
  96. const affected = getAffectedModules(file);
  97. return [...modules, ...affected];
  98. };
  99. return {
  100. resolve,
  101. handleHotUpdate
  102. };
  103. };
  104. exports.RollupResolve = RollupResolve;