overwriteSource.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.overwriteSource = void 0;
  4. const base_1 = require("./base");
  5. function overwriteSource(segments, ...args) {
  6. let loc;
  7. let newSegments;
  8. if (typeof args[0] === 'string') {
  9. const source = args[0];
  10. const sourceLoc = args[1];
  11. loc = typeof sourceLoc === 'number'
  12. ? searchSource(segments, source, sourceLoc)
  13. : [searchSource(segments, source, sourceLoc[0]), searchSource(segments, source, sourceLoc[1])];
  14. newSegments = args.slice(2);
  15. }
  16. else {
  17. const sourceLoc = args[0];
  18. loc = typeof sourceLoc === 'number'
  19. ? searchSource(segments, sourceLoc)
  20. : [searchSource(segments, sourceLoc[0]), searchSource(segments, sourceLoc[1])];
  21. newSegments = args.slice(1);
  22. }
  23. return (0, base_1.overwrite)(segments, loc, ...newSegments);
  24. }
  25. exports.overwriteSource = overwriteSource;
  26. function searchSource(segments, ...args) {
  27. const source = args.length >= 2 ? args[0] : undefined;
  28. const sourceLoc = args.length >= 2 ? args[1] : args[0];
  29. let _offset = 0;
  30. let result;
  31. for (const segment of segments) {
  32. if (typeof segment === 'string') {
  33. _offset += segment.length;
  34. continue;
  35. }
  36. if (segment[1] === source) {
  37. const segmentStart = typeof segment[2] === 'number' ? segment[2] : segment[2][0];
  38. const segmentEnd = typeof segment[2] === 'number' ? segment[2] + segment[0].length : segment[2][1];
  39. if (sourceLoc >= segmentStart && sourceLoc <= segmentEnd) {
  40. result = _offset + (sourceLoc - segmentStart);
  41. break;
  42. }
  43. }
  44. _offset += segment[0].length;
  45. }
  46. if (result === undefined) {
  47. throw new Error(`Source index not found, source: ${source}, index: ${sourceLoc}`);
  48. }
  49. return result;
  50. }
  51. //# sourceMappingURL=overwriteSource.js.map