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.
		
		
		
		
		
			
		
			
				
					
					
						
							105 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
	
	
							105 lines
						
					
					
						
							3.9 KiB
						
					
					
				| 'use strict';
 | |
| 
 | |
| exports.__esModule = true;
 | |
| 
 | |
| var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 | |
| 
 | |
| var _jsBase = require('js-base64');
 | |
| 
 | |
| var _sourceMap = require('source-map');
 | |
| 
 | |
| var _sourceMap2 = _interopRequireDefault(_sourceMap);
 | |
| 
 | |
| var _path = require('path');
 | |
| 
 | |
| var _path2 = _interopRequireDefault(_path);
 | |
| 
 | |
| var _fs = require('fs');
 | |
| 
 | |
| var _fs2 = _interopRequireDefault(_fs);
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 | |
| 
 | |
| function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 | |
| 
 | |
| var PreviousMap = function () {
 | |
|     function PreviousMap(css, opts) {
 | |
|         _classCallCheck(this, PreviousMap);
 | |
| 
 | |
|         this.loadAnnotation(css);
 | |
|         this.inline = this.startWith(this.annotation, 'data:');
 | |
| 
 | |
|         var prev = opts.map ? opts.map.prev : undefined;
 | |
|         var text = this.loadMap(opts.from, prev);
 | |
|         if (text) this.text = text;
 | |
|     }
 | |
| 
 | |
|     PreviousMap.prototype.consumer = function consumer() {
 | |
|         if (!this.consumerCache) {
 | |
|             this.consumerCache = new _sourceMap2.default.SourceMapConsumer(this.text);
 | |
|         }
 | |
|         return this.consumerCache;
 | |
|     };
 | |
| 
 | |
|     PreviousMap.prototype.withContent = function withContent() {
 | |
|         return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
 | |
|     };
 | |
| 
 | |
|     PreviousMap.prototype.startWith = function startWith(string, start) {
 | |
|         if (!string) return false;
 | |
|         return string.substr(0, start.length) === start;
 | |
|     };
 | |
| 
 | |
|     PreviousMap.prototype.loadAnnotation = function loadAnnotation(css) {
 | |
|         var match = css.match(/\/\*\s*# sourceMappingURL=(.*)\s*\*\//);
 | |
|         if (match) this.annotation = match[1].trim();
 | |
|     };
 | |
| 
 | |
|     PreviousMap.prototype.decodeInline = function decodeInline(text) {
 | |
|         var uri = 'data:application/json,';
 | |
|         var base64 = 'data:application/json;base64,';
 | |
| 
 | |
|         if (this.startWith(text, uri)) {
 | |
|             return decodeURIComponent(text.substr(uri.length));
 | |
|         } else if (this.startWith(text, base64)) {
 | |
|             return _jsBase.Base64.decode(text.substr(base64.length));
 | |
|         } else {
 | |
|             var encoding = text.match(/data:application\/json;([^,]+),/)[1];
 | |
|             throw new Error('Unsupported source map encoding ' + encoding);
 | |
|         }
 | |
|     };
 | |
| 
 | |
|     PreviousMap.prototype.loadMap = function loadMap(file, prev) {
 | |
|         if (prev === false) return false;
 | |
| 
 | |
|         if (prev) {
 | |
|             if (typeof prev === 'string') {
 | |
|                 return prev;
 | |
|             } else if (prev instanceof _sourceMap2.default.SourceMapConsumer) {
 | |
|                 return _sourceMap2.default.SourceMapGenerator.fromSourceMap(prev).toString();
 | |
|             } else if (prev instanceof _sourceMap2.default.SourceMapGenerator) {
 | |
|                 return prev.toString();
 | |
|             } else if ((typeof prev === 'undefined' ? 'undefined' : _typeof(prev)) === 'object' && prev.mappings) {
 | |
|                 return JSON.stringify(prev);
 | |
|             } else {
 | |
|                 throw new Error('Unsupported previous source map format: ' + prev.toString());
 | |
|             }
 | |
|         } else if (this.inline) {
 | |
|             return this.decodeInline(this.annotation);
 | |
|         } else if (this.annotation) {
 | |
|             var map = this.annotation;
 | |
|             if (file) map = _path2.default.join(_path2.default.dirname(file), map);
 | |
| 
 | |
|             this.root = _path2.default.dirname(map);
 | |
|             if (_fs2.default.existsSync && _fs2.default.existsSync(map)) {
 | |
|                 return _fs2.default.readFileSync(map, 'utf-8').toString().trim();
 | |
|             } else {
 | |
|                 return false;
 | |
|             }
 | |
|         }
 | |
|     };
 | |
| 
 | |
|     return PreviousMap;
 | |
| }();
 | |
| 
 | |
| exports.default = PreviousMap; |