You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

161 lines
16 KiB

4 years ago
  1. "use strict";
  2. exports.__esModule = true;
  3. exports.default = void 0;
  4. var _sourceMap = _interopRequireDefault(require("source-map"));
  5. var _path = _interopRequireDefault(require("path"));
  6. var _fs = _interopRequireDefault(require("fs"));
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8. function fromBase64(str) {
  9. if (Buffer) {
  10. return Buffer.from(str, 'base64').toString();
  11. } else {
  12. return window.atob(str);
  13. }
  14. }
  15. /**
  16. * Source map information from input CSS.
  17. * For example, source map after Sass compiler.
  18. *
  19. * This class will automatically find source map in input CSS or in file system
  20. * near input file (according `from` option).
  21. *
  22. * @example
  23. * const root = postcss.parse(css, { from: 'a.sass.css' })
  24. * root.input.map //=> PreviousMap
  25. */
  26. var PreviousMap =
  27. /*#__PURE__*/
  28. function () {
  29. /**
  30. * @param {string} css Input CSS source.
  31. * @param {processOptions} [opts] {@link Processor#process} options.
  32. */
  33. function PreviousMap(css, opts) {
  34. this.loadAnnotation(css);
  35. /**
  36. * Was source map inlined by data-uri to input CSS.
  37. *
  38. * @type {boolean}
  39. */
  40. this.inline = this.startWith(this.annotation, 'data:');
  41. var prev = opts.map ? opts.map.prev : undefined;
  42. var text = this.loadMap(opts.from, prev);
  43. if (text) this.text = text;
  44. }
  45. /**
  46. * Create a instance of `SourceMapGenerator` class
  47. * from the `source-map` library to work with source map information.
  48. *
  49. * It is lazy method, so it will create object only on first call
  50. * and then it will use cache.
  51. *
  52. * @return {SourceMapGenerator} Object with source map information.
  53. */
  54. var _proto = PreviousMap.prototype;
  55. _proto.consumer = function consumer() {
  56. if (!this.consumerCache) {
  57. this.consumerCache = new _sourceMap.default.SourceMapConsumer(this.text);
  58. }
  59. return this.consumerCache;
  60. }
  61. /**
  62. * Does source map contains `sourcesContent` with input source text.
  63. *
  64. * @return {boolean} Is `sourcesContent` present.
  65. */
  66. ;
  67. _proto.withContent = function withContent() {
  68. return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
  69. };
  70. _proto.startWith = function startWith(string, start) {
  71. if (!string) return false;
  72. return string.substr(0, start.length) === start;
  73. };
  74. _proto.loadAnnotation = function loadAnnotation(css) {
  75. var match = css.match(/\/\*\s*# sourceMappingURL=(.*)\s*\*\//);
  76. if (match) this.annotation = match[1].trim();
  77. };
  78. _proto.decodeInline = function decodeInline(text) {
  79. var baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/;
  80. var baseUri = /^data:application\/json;base64,/;
  81. var uri = 'data:application/json,';
  82. if (this.startWith(text, uri)) {
  83. return decodeURIComponent(text.substr(uri.length));
  84. }
  85. if (baseCharsetUri.test(text) || baseUri.test(text)) {
  86. return fromBase64(text.substr(RegExp.lastMatch.length));
  87. }
  88. var encoding = text.match(/data:application\/json;([^,]+),/)[1];
  89. throw new Error('Unsupported source map encoding ' + encoding);
  90. };
  91. _proto.loadMap = function loadMap(file, prev) {
  92. if (prev === false) return false;
  93. if (prev) {
  94. if (typeof prev === 'string') {
  95. return prev;
  96. } else if (typeof prev === 'function') {
  97. var prevPath = prev(file);
  98. if (prevPath && _fs.default.existsSync && _fs.default.existsSync(prevPath)) {
  99. return _fs.default.readFileSync(prevPath, 'utf-8').toString().trim();
  100. } else {
  101. throw new Error('Unable to load previous source map: ' + prevPath.toString());
  102. }
  103. } else if (prev instanceof _sourceMap.default.SourceMapConsumer) {
  104. return _sourceMap.default.SourceMapGenerator.fromSourceMap(prev).toString();
  105. } else if (prev instanceof _sourceMap.default.SourceMapGenerator) {
  106. return prev.toString();
  107. } else if (this.isMap(prev)) {
  108. return JSON.stringify(prev);
  109. } else {
  110. throw new Error('Unsupported previous source map format: ' + prev.toString());
  111. }
  112. } else if (this.inline) {
  113. return this.decodeInline(this.annotation);
  114. } else if (this.annotation) {
  115. var map = this.annotation;
  116. if (file) map = _path.default.join(_path.default.dirname(file), map);
  117. this.root = _path.default.dirname(map);
  118. if (_fs.default.existsSync && _fs.default.existsSync(map)) {
  119. return _fs.default.readFileSync(map, 'utf-8').toString().trim();
  120. } else {
  121. return false;
  122. }
  123. }
  124. };
  125. _proto.isMap = function isMap(map) {
  126. if (typeof map !== 'object') return false;
  127. return typeof map.mappings === 'string' || typeof map._mappings === 'string';
  128. };
  129. return PreviousMap;
  130. }();
  131. var _default = PreviousMap;
  132. exports.default = _default;
  133. module.exports = exports.default;
  134. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByZXZpb3VzLW1hcC5lczYiXSwibmFtZXMiOlsiZnJvbUJhc2U2NCIsInN0ciIsIkJ1ZmZlciIsImZyb20iLCJ0b1N0cmluZyIsIndpbmRvdyIsImF0b2IiLCJQcmV2aW91c01hcCIsImNzcyIsIm9wdHMiLCJsb2FkQW5ub3RhdGlvbiIsImlubGluZSIsInN0YXJ0V2l0aCIsImFubm90YXRpb24iLCJwcmV2IiwibWFwIiwidW5kZWZpbmVkIiwidGV4dCIsImxvYWRNYXAiLCJjb25zdW1lciIsImNvbnN1bWVyQ2FjaGUiLCJtb3ppbGxhIiwiU291cmNlTWFwQ29uc3VtZXIiLCJ3aXRoQ29udGVudCIsInNvdXJjZXNDb250ZW50IiwibGVuZ3RoIiwic3RyaW5nIiwic3RhcnQiLCJzdWJzdHIiLCJtYXRjaCIsInRyaW0iLCJkZWNvZGVJbmxpbmUiLCJiYXNlQ2hhcnNldFVyaSIsImJhc2VVcmkiLCJ1cmkiLCJkZWNvZGVVUklDb21wb25lbnQiLCJ0ZXN0IiwiUmVnRXhwIiwibGFzdE1hdGNoIiwiZW5jb2RpbmciLCJFcnJvciIsImZpbGUiLCJwcmV2UGF0aCIsImZzIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsIlNvdXJjZU1hcEdlbmVyYXRvciIsImZyb21Tb3VyY2VNYXAiLCJpc01hcCIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYXRoIiwiam9pbiIsImRpcm5hbWUiLCJyb290IiwibWFwcGluZ3MiLCJfbWFwcGluZ3MiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxTQUFTQSxVQUFULENBQXFCQyxHQUFyQixFQUEwQjtBQUN4QixNQUFJQyxNQUFKLEVBQVk7QUFDVixXQUFPQSxNQUFNLENBQUNDLElBQVAsQ0FBWUYsR0FBWixFQUFpQixRQUFqQixFQUEyQkcsUUFBM0IsRUFBUDtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU9DLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZTCxHQUFaLENBQVA7QUFDRDtBQUNGO0FBRUQ7Ozs7Ozs7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