[READ-ONLY] Mirror of https://github.com/andrioid/gh-action-k8s-set-image. A more compact way of setting images across a Kubernetes cluster
0

Configure Feed

Select the types of activity you want to include in your feed.

gh-action-k8s-set-image / dist / sourcemap-register.js
124 kB 3910 lines
1module.exports = 2/******/ (() => { // webpackBootstrap 3/******/ var __webpack_modules__ = ({ 4 5/***/ 650: 6/***/ ((module) => { 7 8var toString = Object.prototype.toString 9 10var isModern = ( 11 typeof Buffer.alloc === 'function' && 12 typeof Buffer.allocUnsafe === 'function' && 13 typeof Buffer.from === 'function' 14) 15 16function isArrayBuffer (input) { 17 return toString.call(input).slice(8, -1) === 'ArrayBuffer' 18} 19 20function fromArrayBuffer (obj, byteOffset, length) { 21 byteOffset >>>= 0 22 23 var maxLength = obj.byteLength - byteOffset 24 25 if (maxLength < 0) { 26 throw new RangeError("'offset' is out of bounds") 27 } 28 29 if (length === undefined) { 30 length = maxLength 31 } else { 32 length >>>= 0 33 34 if (length > maxLength) { 35 throw new RangeError("'length' is out of bounds") 36 } 37 } 38 39 return isModern 40 ? Buffer.from(obj.slice(byteOffset, byteOffset + length)) 41 : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length))) 42} 43 44function fromString (string, encoding) { 45 if (typeof encoding !== 'string' || encoding === '') { 46 encoding = 'utf8' 47 } 48 49 if (!Buffer.isEncoding(encoding)) { 50 throw new TypeError('"encoding" must be a valid string encoding') 51 } 52 53 return isModern 54 ? Buffer.from(string, encoding) 55 : new Buffer(string, encoding) 56} 57 58function bufferFrom (value, encodingOrOffset, length) { 59 if (typeof value === 'number') { 60 throw new TypeError('"value" argument must not be a number') 61 } 62 63 if (isArrayBuffer(value)) { 64 return fromArrayBuffer(value, encodingOrOffset, length) 65 } 66 67 if (typeof value === 'string') { 68 return fromString(value, encodingOrOffset) 69 } 70 71 return isModern 72 ? Buffer.from(value) 73 : new Buffer(value) 74} 75 76module.exports = bufferFrom 77 78 79/***/ }), 80 81/***/ 645: 82/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { 83 84__webpack_require__(284).install(); 85 86 87/***/ }), 88 89/***/ 284: 90/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 91 92var SourceMapConsumer = __webpack_require__(596).SourceMapConsumer; 93var path = __webpack_require__(622); 94 95var fs; 96try { 97 fs = __webpack_require__(747); 98 if (!fs.existsSync || !fs.readFileSync) { 99 // fs doesn't have all methods we need 100 fs = null; 101 } 102} catch (err) { 103 /* nop */ 104} 105 106var bufferFrom = __webpack_require__(650); 107 108// Only install once if called multiple times 109var errorFormatterInstalled = false; 110var uncaughtShimInstalled = false; 111 112// If true, the caches are reset before a stack trace formatting operation 113var emptyCacheBetweenOperations = false; 114 115// Supports {browser, node, auto} 116var environment = "auto"; 117 118// Maps a file path to a string containing the file contents 119var fileContentsCache = {}; 120 121// Maps a file path to a source map for that file 122var sourceMapCache = {}; 123 124// Regex for detecting source maps 125var reSourceMap = /^data:application\/json[^,]+base64,/; 126 127// Priority list of retrieve handlers 128var retrieveFileHandlers = []; 129var retrieveMapHandlers = []; 130 131function isInBrowser() { 132 if (environment === "browser") 133 return true; 134 if (environment === "node") 135 return false; 136 return ((typeof window !== 'undefined') && (typeof XMLHttpRequest === 'function') && !(window.require && window.module && window.process && window.process.type === "renderer")); 137} 138 139function hasGlobalProcessEventEmitter() { 140 return ((typeof process === 'object') && (process !== null) && (typeof process.on === 'function')); 141} 142 143function handlerExec(list) { 144 return function(arg) { 145 for (var i = 0; i < list.length; i++) { 146 var ret = list[i](arg); 147 if (ret) { 148 return ret; 149 } 150 } 151 return null; 152 }; 153} 154 155var retrieveFile = handlerExec(retrieveFileHandlers); 156 157retrieveFileHandlers.push(function(path) { 158 // Trim the path to make sure there is no extra whitespace. 159 path = path.trim(); 160 if (/^file:/.test(path)) { 161 // existsSync/readFileSync can't handle file protocol, but once stripped, it works 162 path = path.replace(/file:\/\/\/(\w:)?/, function(protocol, drive) { 163 return drive ? 164 '' : // file:///C:/dir/file -> C:/dir/file 165 '/'; // file:///root-dir/file -> /root-dir/file 166 }); 167 } 168 if (path in fileContentsCache) { 169 return fileContentsCache[path]; 170 } 171 172 var contents = ''; 173 try { 174 if (!fs) { 175 // Use SJAX if we are in the browser 176 var xhr = new XMLHttpRequest(); 177 xhr.open('GET', path, /** async */ false); 178 xhr.send(null); 179 if (xhr.readyState === 4 && xhr.status === 200) { 180 contents = xhr.responseText; 181 } 182 } else if (fs.existsSync(path)) { 183 // Otherwise, use the filesystem 184 contents = fs.readFileSync(path, 'utf8'); 185 } 186 } catch (er) { 187 /* ignore any errors */ 188 } 189 190 return fileContentsCache[path] = contents; 191}); 192 193// Support URLs relative to a directory, but be careful about a protocol prefix 194// in case we are in the browser (i.e. directories may start with "http://" or "file:///") 195function supportRelativeURL(file, url) { 196 if (!file) return url; 197 var dir = path.dirname(file); 198 var match = /^\w+:\/\/[^\/]*/.exec(dir); 199 var protocol = match ? match[0] : ''; 200 var startPath = dir.slice(protocol.length); 201 if (protocol && /^\/\w\:/.test(startPath)) { 202 // handle file:///C:/ paths 203 protocol += '/'; 204 return protocol + path.resolve(dir.slice(protocol.length), url).replace(/\\/g, '/'); 205 } 206 return protocol + path.resolve(dir.slice(protocol.length), url); 207} 208 209function retrieveSourceMapURL(source) { 210 var fileData; 211 212 if (isInBrowser()) { 213 try { 214 var xhr = new XMLHttpRequest(); 215 xhr.open('GET', source, false); 216 xhr.send(null); 217 fileData = xhr.readyState === 4 ? xhr.responseText : null; 218 219 // Support providing a sourceMappingURL via the SourceMap header 220 var sourceMapHeader = xhr.getResponseHeader("SourceMap") || 221 xhr.getResponseHeader("X-SourceMap"); 222 if (sourceMapHeader) { 223 return sourceMapHeader; 224 } 225 } catch (e) { 226 } 227 } 228 229 // Get the URL of the source map 230 fileData = retrieveFile(source); 231 var re = /(?:\/\/[@#][ \t]+sourceMappingURL=([^\s'"]+?)[ \t]*$)|(?:\/\*[@#][ \t]+sourceMappingURL=([^\*]+?)[ \t]*(?:\*\/)[ \t]*$)/mg; 232 // Keep executing the search to find the *last* sourceMappingURL to avoid 233 // picking up sourceMappingURLs from comments, strings, etc. 234 var lastMatch, match; 235 while (match = re.exec(fileData)) lastMatch = match; 236 if (!lastMatch) return null; 237 return lastMatch[1]; 238}; 239 240// Can be overridden by the retrieveSourceMap option to install. Takes a 241// generated source filename; returns a {map, optional url} object, or null if 242// there is no source map. The map field may be either a string or the parsed 243// JSON object (ie, it must be a valid argument to the SourceMapConsumer 244// constructor). 245var retrieveSourceMap = handlerExec(retrieveMapHandlers); 246retrieveMapHandlers.push(function(source) { 247 var sourceMappingURL = retrieveSourceMapURL(source); 248 if (!sourceMappingURL) return null; 249 250 // Read the contents of the source map 251 var sourceMapData; 252 if (reSourceMap.test(sourceMappingURL)) { 253 // Support source map URL as a data url 254 var rawData = sourceMappingURL.slice(sourceMappingURL.indexOf(',') + 1); 255 sourceMapData = bufferFrom(rawData, "base64").toString(); 256 sourceMappingURL = source; 257 } else { 258 // Support source map URLs relative to the source URL 259 sourceMappingURL = supportRelativeURL(source, sourceMappingURL); 260 sourceMapData = retrieveFile(sourceMappingURL); 261 } 262 263 if (!sourceMapData) { 264 return null; 265 } 266 267 return { 268 url: sourceMappingURL, 269 map: sourceMapData 270 }; 271}); 272 273function mapSourcePosition(position) { 274 var sourceMap = sourceMapCache[position.source]; 275 if (!sourceMap) { 276 // Call the (overrideable) retrieveSourceMap function to get the source map. 277 var urlAndMap = retrieveSourceMap(position.source); 278 if (urlAndMap) { 279 sourceMap = sourceMapCache[position.source] = { 280 url: urlAndMap.url, 281 map: new SourceMapConsumer(urlAndMap.map) 282 }; 283 284 // Load all sources stored inline with the source map into the file cache 285 // to pretend like they are already loaded. They may not exist on disk. 286 if (sourceMap.map.sourcesContent) { 287 sourceMap.map.sources.forEach(function(source, i) { 288 var contents = sourceMap.map.sourcesContent[i]; 289 if (contents) { 290 var url = supportRelativeURL(sourceMap.url, source); 291 fileContentsCache[url] = contents; 292 } 293 }); 294 } 295 } else { 296 sourceMap = sourceMapCache[position.source] = { 297 url: null, 298 map: null 299 }; 300 } 301 } 302 303 // Resolve the source URL relative to the URL of the source map 304 if (sourceMap && sourceMap.map) { 305 var originalPosition = sourceMap.map.originalPositionFor(position); 306 307 // Only return the original position if a matching line was found. If no 308 // matching line is found then we return position instead, which will cause 309 // the stack trace to print the path and line for the compiled file. It is 310 // better to give a precise location in the compiled file than a vague 311 // location in the original file. 312 if (originalPosition.source !== null) { 313 originalPosition.source = supportRelativeURL( 314 sourceMap.url, originalPosition.source); 315 return originalPosition; 316 } 317 } 318 319 return position; 320} 321 322// Parses code generated by FormatEvalOrigin(), a function inside V8: 323// https://code.google.com/p/v8/source/browse/trunk/src/messages.js 324function mapEvalOrigin(origin) { 325 // Most eval() calls are in this format 326 var match = /^eval at ([^(]+) \((.+):(\d+):(\d+)\)$/.exec(origin); 327 if (match) { 328 var position = mapSourcePosition({ 329 source: match[2], 330 line: +match[3], 331 column: match[4] - 1 332 }); 333 return 'eval at ' + match[1] + ' (' + position.source + ':' + 334 position.line + ':' + (position.column + 1) + ')'; 335 } 336 337 // Parse nested eval() calls using recursion 338 match = /^eval at ([^(]+) \((.+)\)$/.exec(origin); 339 if (match) { 340 return 'eval at ' + match[1] + ' (' + mapEvalOrigin(match[2]) + ')'; 341 } 342 343 // Make sure we still return useful information if we didn't find anything 344 return origin; 345} 346 347// This is copied almost verbatim from the V8 source code at 348// https://code.google.com/p/v8/source/browse/trunk/src/messages.js. The 349// implementation of wrapCallSite() used to just forward to the actual source 350// code of CallSite.prototype.toString but unfortunately a new release of V8 351// did something to the prototype chain and broke the shim. The only fix I 352// could find was copy/paste. 353function CallSiteToString() { 354 var fileName; 355 var fileLocation = ""; 356 if (this.isNative()) { 357 fileLocation = "native"; 358 } else { 359 fileName = this.getScriptNameOrSourceURL(); 360 if (!fileName && this.isEval()) { 361 fileLocation = this.getEvalOrigin(); 362 fileLocation += ", "; // Expecting source position to follow. 363 } 364 365 if (fileName) { 366 fileLocation += fileName; 367 } else { 368 // Source code does not originate from a file and is not native, but we 369 // can still get the source position inside the source string, e.g. in 370 // an eval string. 371 fileLocation += "<anonymous>"; 372 } 373 var lineNumber = this.getLineNumber(); 374 if (lineNumber != null) { 375 fileLocation += ":" + lineNumber; 376 var columnNumber = this.getColumnNumber(); 377 if (columnNumber) { 378 fileLocation += ":" + columnNumber; 379 } 380 } 381 } 382 383 var line = ""; 384 var functionName = this.getFunctionName(); 385 var addSuffix = true; 386 var isConstructor = this.isConstructor(); 387 var isMethodCall = !(this.isToplevel() || isConstructor); 388 if (isMethodCall) { 389 var typeName = this.getTypeName(); 390 // Fixes shim to be backward compatable with Node v0 to v4 391 if (typeName === "[object Object]") { 392 typeName = "null"; 393 } 394 var methodName = this.getMethodName(); 395 if (functionName) { 396 if (typeName && functionName.indexOf(typeName) != 0) { 397 line += typeName + "."; 398 } 399 line += functionName; 400 if (methodName && functionName.indexOf("." + methodName) != functionName.length - methodName.length - 1) { 401 line += " [as " + methodName + "]"; 402 } 403 } else { 404 line += typeName + "." + (methodName || "<anonymous>"); 405 } 406 } else if (isConstructor) { 407 line += "new " + (functionName || "<anonymous>"); 408 } else if (functionName) { 409 line += functionName; 410 } else { 411 line += fileLocation; 412 addSuffix = false; 413 } 414 if (addSuffix) { 415 line += " (" + fileLocation + ")"; 416 } 417 return line; 418} 419 420function cloneCallSite(frame) { 421 var object = {}; 422 Object.getOwnPropertyNames(Object.getPrototypeOf(frame)).forEach(function(name) { 423 object[name] = /^(?:is|get)/.test(name) ? function() { return frame[name].call(frame); } : frame[name]; 424 }); 425 object.toString = CallSiteToString; 426 return object; 427} 428 429function wrapCallSite(frame) { 430 if(frame.isNative()) { 431 return frame; 432 } 433 434 // Most call sites will return the source file from getFileName(), but code 435 // passed to eval() ending in "//# sourceURL=..." will return the source file 436 // from getScriptNameOrSourceURL() instead 437 var source = frame.getFileName() || frame.getScriptNameOrSourceURL(); 438 if (source) { 439 var line = frame.getLineNumber(); 440 var column = frame.getColumnNumber() - 1; 441 442 // Fix position in Node where some (internal) code is prepended. 443 // See https://github.com/evanw/node-source-map-support/issues/36 444 var headerLength = 62; 445 if (line === 1 && column > headerLength && !isInBrowser() && !frame.isEval()) { 446 column -= headerLength; 447 } 448 449 var position = mapSourcePosition({ 450 source: source, 451 line: line, 452 column: column 453 }); 454 frame = cloneCallSite(frame); 455 var originalFunctionName = frame.getFunctionName; 456 frame.getFunctionName = function() { return position.name || originalFunctionName(); }; 457 frame.getFileName = function() { return position.source; }; 458 frame.getLineNumber = function() { return position.line; }; 459 frame.getColumnNumber = function() { return position.column + 1; }; 460 frame.getScriptNameOrSourceURL = function() { return position.source; }; 461 return frame; 462 } 463 464 // Code called using eval() needs special handling 465 var origin = frame.isEval() && frame.getEvalOrigin(); 466 if (origin) { 467 origin = mapEvalOrigin(origin); 468 frame = cloneCallSite(frame); 469 frame.getEvalOrigin = function() { return origin; }; 470 return frame; 471 } 472 473 // If we get here then we were unable to change the source position 474 return frame; 475} 476 477// This function is part of the V8 stack trace API, for more info see: 478// http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi 479function prepareStackTrace(error, stack) { 480 if (emptyCacheBetweenOperations) { 481 fileContentsCache = {}; 482 sourceMapCache = {}; 483 } 484 485 return error + stack.map(function(frame) { 486 return '\n at ' + wrapCallSite(frame); 487 }).join(''); 488} 489 490// Generate position and snippet of original source with pointer 491function getErrorSource(error) { 492 var match = /\n at [^(]+ \((.*):(\d+):(\d+)\)/.exec(error.stack); 493 if (match) { 494 var source = match[1]; 495 var line = +match[2]; 496 var column = +match[3]; 497 498 // Support the inline sourceContents inside the source map 499 var contents = fileContentsCache[source]; 500 501 // Support files on disk 502 if (!contents && fs && fs.existsSync(source)) { 503 try { 504 contents = fs.readFileSync(source, 'utf8'); 505 } catch (er) { 506 contents = ''; 507 } 508 } 509 510 // Format the line from the original source code like node does 511 if (contents) { 512 var code = contents.split(/(?:\r\n|\r|\n)/)[line - 1]; 513 if (code) { 514 return source + ':' + line + '\n' + code + '\n' + 515 new Array(column).join(' ') + '^'; 516 } 517 } 518 } 519 return null; 520} 521 522function printErrorAndExit (error) { 523 var source = getErrorSource(error); 524 525 // Ensure error is printed synchronously and not truncated 526 if (process.stderr._handle && process.stderr._handle.setBlocking) { 527 process.stderr._handle.setBlocking(true); 528 } 529 530 if (source) { 531 console.error(); 532 console.error(source); 533 } 534 535 console.error(error.stack); 536 process.exit(1); 537} 538 539function shimEmitUncaughtException () { 540 var origEmit = process.emit; 541 542 process.emit = function (type) { 543 if (type === 'uncaughtException') { 544 var hasStack = (arguments[1] && arguments[1].stack); 545 var hasListeners = (this.listeners(type).length > 0); 546 547 if (hasStack && !hasListeners) { 548 return printErrorAndExit(arguments[1]); 549 } 550 } 551 552 return origEmit.apply(this, arguments); 553 }; 554} 555 556var originalRetrieveFileHandlers = retrieveFileHandlers.slice(0); 557var originalRetrieveMapHandlers = retrieveMapHandlers.slice(0); 558 559exports.wrapCallSite = wrapCallSite; 560exports.getErrorSource = getErrorSource; 561exports.mapSourcePosition = mapSourcePosition; 562exports.retrieveSourceMap = retrieveSourceMap; 563 564exports.install = function(options) { 565 options = options || {}; 566 567 if (options.environment) { 568 environment = options.environment; 569 if (["node", "browser", "auto"].indexOf(environment) === -1) { 570 throw new Error("environment " + environment + " was unknown. Available options are {auto, browser, node}") 571 } 572 } 573 574 // Allow sources to be found by methods other than reading the files 575 // directly from disk. 576 if (options.retrieveFile) { 577 if (options.overrideRetrieveFile) { 578 retrieveFileHandlers.length = 0; 579 } 580 581 retrieveFileHandlers.unshift(options.retrieveFile); 582 } 583 584 // Allow source maps to be found by methods other than reading the files 585 // directly from disk. 586 if (options.retrieveSourceMap) { 587 if (options.overrideRetrieveSourceMap) { 588 retrieveMapHandlers.length = 0; 589 } 590 591 retrieveMapHandlers.unshift(options.retrieveSourceMap); 592 } 593 594 // Support runtime transpilers that include inline source maps 595 if (options.hookRequire && !isInBrowser()) { 596 var Module; 597 try { 598 Module = __webpack_require__(282); 599 } catch (err) { 600 // NOP: Loading in catch block to convert webpack error to warning. 601 } 602 var $compile = Module.prototype._compile; 603 604 if (!$compile.__sourceMapSupport) { 605 Module.prototype._compile = function(content, filename) { 606 fileContentsCache[filename] = content; 607 sourceMapCache[filename] = undefined; 608 return $compile.call(this, content, filename); 609 }; 610 611 Module.prototype._compile.__sourceMapSupport = true; 612 } 613 } 614 615 // Configure options 616 if (!emptyCacheBetweenOperations) { 617 emptyCacheBetweenOperations = 'emptyCacheBetweenOperations' in options ? 618 options.emptyCacheBetweenOperations : false; 619 } 620 621 // Install the error reformatter 622 if (!errorFormatterInstalled) { 623 errorFormatterInstalled = true; 624 Error.prepareStackTrace = prepareStackTrace; 625 } 626 627 if (!uncaughtShimInstalled) { 628 var installHandler = 'handleUncaughtExceptions' in options ? 629 options.handleUncaughtExceptions : true; 630 631 // Provide the option to not install the uncaught exception handler. This is 632 // to support other uncaught exception handlers (in test frameworks, for 633 // example). If this handler is not installed and there are no other uncaught 634 // exception handlers, uncaught exceptions will be caught by node's built-in 635 // exception handler and the process will still be terminated. However, the 636 // generated JavaScript code will be shown above the stack trace instead of 637 // the original source code. 638 if (installHandler && hasGlobalProcessEventEmitter()) { 639 uncaughtShimInstalled = true; 640 shimEmitUncaughtException(); 641 } 642 } 643}; 644 645exports.resetRetrieveHandlers = function() { 646 retrieveFileHandlers.length = 0; 647 retrieveMapHandlers.length = 0; 648 649 retrieveFileHandlers = originalRetrieveFileHandlers.slice(0); 650 retrieveMapHandlers = originalRetrieveMapHandlers.slice(0); 651} 652 653 654/***/ }), 655 656/***/ 837: 657/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 658 659/* -*- Mode: js; js-indent-level: 2; -*- */ 660/* 661 * Copyright 2011 Mozilla Foundation and contributors 662 * Licensed under the New BSD license. See LICENSE or: 663 * http://opensource.org/licenses/BSD-3-Clause 664 */ 665 666var util = __webpack_require__(983); 667var has = Object.prototype.hasOwnProperty; 668var hasNativeMap = typeof Map !== "undefined"; 669 670/** 671 * A data structure which is a combination of an array and a set. Adding a new 672 * member is O(1), testing for membership is O(1), and finding the index of an 673 * element is O(1). Removing elements from the set is not supported. Only 674 * strings are supported for membership. 675 */ 676function ArraySet() { 677 this._array = []; 678 this._set = hasNativeMap ? new Map() : Object.create(null); 679} 680 681/** 682 * Static method for creating ArraySet instances from an existing array. 683 */ 684ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { 685 var set = new ArraySet(); 686 for (var i = 0, len = aArray.length; i < len; i++) { 687 set.add(aArray[i], aAllowDuplicates); 688 } 689 return set; 690}; 691 692/** 693 * Return how many unique items are in this ArraySet. If duplicates have been 694 * added, than those do not count towards the size. 695 * 696 * @returns Number 697 */ 698ArraySet.prototype.size = function ArraySet_size() { 699 return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; 700}; 701 702/** 703 * Add the given string to this set. 704 * 705 * @param String aStr 706 */ 707ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { 708 var sStr = hasNativeMap ? aStr : util.toSetString(aStr); 709 var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); 710 var idx = this._array.length; 711 if (!isDuplicate || aAllowDuplicates) { 712 this._array.push(aStr); 713 } 714 if (!isDuplicate) { 715 if (hasNativeMap) { 716 this._set.set(aStr, idx); 717 } else { 718 this._set[sStr] = idx; 719 } 720 } 721}; 722 723/** 724 * Is the given string a member of this set? 725 * 726 * @param String aStr 727 */ 728ArraySet.prototype.has = function ArraySet_has(aStr) { 729 if (hasNativeMap) { 730 return this._set.has(aStr); 731 } else { 732 var sStr = util.toSetString(aStr); 733 return has.call(this._set, sStr); 734 } 735}; 736 737/** 738 * What is the index of the given string in the array? 739 * 740 * @param String aStr 741 */ 742ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { 743 if (hasNativeMap) { 744 var idx = this._set.get(aStr); 745 if (idx >= 0) { 746 return idx; 747 } 748 } else { 749 var sStr = util.toSetString(aStr); 750 if (has.call(this._set, sStr)) { 751 return this._set[sStr]; 752 } 753 } 754 755 throw new Error('"' + aStr + '" is not in the set.'); 756}; 757 758/** 759 * What is the element at the given index? 760 * 761 * @param Number aIdx 762 */ 763ArraySet.prototype.at = function ArraySet_at(aIdx) { 764 if (aIdx >= 0 && aIdx < this._array.length) { 765 return this._array[aIdx]; 766 } 767 throw new Error('No element indexed by ' + aIdx); 768}; 769 770/** 771 * Returns the array representation of this set (which has the proper indices 772 * indicated by indexOf). Note that this is a copy of the internal array used 773 * for storing the members so that no one can mess with internal state. 774 */ 775ArraySet.prototype.toArray = function ArraySet_toArray() { 776 return this._array.slice(); 777}; 778 779exports.I = ArraySet; 780 781 782/***/ }), 783 784/***/ 215: 785/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 786 787/* -*- Mode: js; js-indent-level: 2; -*- */ 788/* 789 * Copyright 2011 Mozilla Foundation and contributors 790 * Licensed under the New BSD license. See LICENSE or: 791 * http://opensource.org/licenses/BSD-3-Clause 792 * 793 * Based on the Base 64 VLQ implementation in Closure Compiler: 794 * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java 795 * 796 * Copyright 2011 The Closure Compiler Authors. All rights reserved. 797 * Redistribution and use in source and binary forms, with or without 798 * modification, are permitted provided that the following conditions are 799 * met: 800 * 801 * * Redistributions of source code must retain the above copyright 802 * notice, this list of conditions and the following disclaimer. 803 * * Redistributions in binary form must reproduce the above 804 * copyright notice, this list of conditions and the following 805 * disclaimer in the documentation and/or other materials provided 806 * with the distribution. 807 * * Neither the name of Google Inc. nor the names of its 808 * contributors may be used to endorse or promote products derived 809 * from this software without specific prior written permission. 810 * 811 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 812 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 813 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 814 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 815 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 816 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 817 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 818 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 819 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 820 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 821 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 822 */ 823 824var base64 = __webpack_require__(537); 825 826// A single base 64 digit can contain 6 bits of data. For the base 64 variable 827// length quantities we use in the source map spec, the first bit is the sign, 828// the next four bits are the actual value, and the 6th bit is the 829// continuation bit. The continuation bit tells us whether there are more 830// digits in this value following this digit. 831// 832// Continuation 833// | Sign 834// | | 835// V V 836// 101011 837 838var VLQ_BASE_SHIFT = 5; 839 840// binary: 100000 841var VLQ_BASE = 1 << VLQ_BASE_SHIFT; 842 843// binary: 011111 844var VLQ_BASE_MASK = VLQ_BASE - 1; 845 846// binary: 100000 847var VLQ_CONTINUATION_BIT = VLQ_BASE; 848 849/** 850 * Converts from a two-complement value to a value where the sign bit is 851 * placed in the least significant bit. For example, as decimals: 852 * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) 853 * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) 854 */ 855function toVLQSigned(aValue) { 856 return aValue < 0 857 ? ((-aValue) << 1) + 1 858 : (aValue << 1) + 0; 859} 860 861/** 862 * Converts to a two-complement value from a value where the sign bit is 863 * placed in the least significant bit. For example, as decimals: 864 * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 865 * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 866 */ 867function fromVLQSigned(aValue) { 868 var isNegative = (aValue & 1) === 1; 869 var shifted = aValue >> 1; 870 return isNegative 871 ? -shifted 872 : shifted; 873} 874 875/** 876 * Returns the base 64 VLQ encoded value. 877 */ 878exports.encode = function base64VLQ_encode(aValue) { 879 var encoded = ""; 880 var digit; 881 882 var vlq = toVLQSigned(aValue); 883 884 do { 885 digit = vlq & VLQ_BASE_MASK; 886 vlq >>>= VLQ_BASE_SHIFT; 887 if (vlq > 0) { 888 // There are still more digits in this value, so we must make sure the 889 // continuation bit is marked. 890 digit |= VLQ_CONTINUATION_BIT; 891 } 892 encoded += base64.encode(digit); 893 } while (vlq > 0); 894 895 return encoded; 896}; 897 898/** 899 * Decodes the next base 64 VLQ value from the given string and returns the 900 * value and the rest of the string via the out parameter. 901 */ 902exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { 903 var strLen = aStr.length; 904 var result = 0; 905 var shift = 0; 906 var continuation, digit; 907 908 do { 909 if (aIndex >= strLen) { 910 throw new Error("Expected more digits in base 64 VLQ value."); 911 } 912 913 digit = base64.decode(aStr.charCodeAt(aIndex++)); 914 if (digit === -1) { 915 throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); 916 } 917 918 continuation = !!(digit & VLQ_CONTINUATION_BIT); 919 digit &= VLQ_BASE_MASK; 920 result = result + (digit << shift); 921 shift += VLQ_BASE_SHIFT; 922 } while (continuation); 923 924 aOutParam.value = fromVLQSigned(result); 925 aOutParam.rest = aIndex; 926}; 927 928 929/***/ }), 930 931/***/ 537: 932/***/ ((__unused_webpack_module, exports) => { 933 934/* -*- Mode: js; js-indent-level: 2; -*- */ 935/* 936 * Copyright 2011 Mozilla Foundation and contributors 937 * Licensed under the New BSD license. See LICENSE or: 938 * http://opensource.org/licenses/BSD-3-Clause 939 */ 940 941var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); 942 943/** 944 * Encode an integer in the range of 0 to 63 to a single base 64 digit. 945 */ 946exports.encode = function (number) { 947 if (0 <= number && number < intToCharMap.length) { 948 return intToCharMap[number]; 949 } 950 throw new TypeError("Must be between 0 and 63: " + number); 951}; 952 953/** 954 * Decode a single base 64 character code digit to an integer. Returns -1 on 955 * failure. 956 */ 957exports.decode = function (charCode) { 958 var bigA = 65; // 'A' 959 var bigZ = 90; // 'Z' 960 961 var littleA = 97; // 'a' 962 var littleZ = 122; // 'z' 963 964 var zero = 48; // '0' 965 var nine = 57; // '9' 966 967 var plus = 43; // '+' 968 var slash = 47; // '/' 969 970 var littleOffset = 26; 971 var numberOffset = 52; 972 973 // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ 974 if (bigA <= charCode && charCode <= bigZ) { 975 return (charCode - bigA); 976 } 977 978 // 26 - 51: abcdefghijklmnopqrstuvwxyz 979 if (littleA <= charCode && charCode <= littleZ) { 980 return (charCode - littleA + littleOffset); 981 } 982 983 // 52 - 61: 0123456789 984 if (zero <= charCode && charCode <= nine) { 985 return (charCode - zero + numberOffset); 986 } 987 988 // 62: + 989 if (charCode == plus) { 990 return 62; 991 } 992 993 // 63: / 994 if (charCode == slash) { 995 return 63; 996 } 997 998 // Invalid base64 digit. 999 return -1; 1000}; 1001 1002 1003/***/ }), 1004 1005/***/ 164: 1006/***/ ((__unused_webpack_module, exports) => { 1007 1008/* -*- Mode: js; js-indent-level: 2; -*- */ 1009/* 1010 * Copyright 2011 Mozilla Foundation and contributors 1011 * Licensed under the New BSD license. See LICENSE or: 1012 * http://opensource.org/licenses/BSD-3-Clause 1013 */ 1014 1015exports.GREATEST_LOWER_BOUND = 1; 1016exports.LEAST_UPPER_BOUND = 2; 1017 1018/** 1019 * Recursive implementation of binary search. 1020 * 1021 * @param aLow Indices here and lower do not contain the needle. 1022 * @param aHigh Indices here and higher do not contain the needle. 1023 * @param aNeedle The element being searched for. 1024 * @param aHaystack The non-empty array being searched. 1025 * @param aCompare Function which takes two elements and returns -1, 0, or 1. 1026 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or 1027 * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the 1028 * closest element that is smaller than or greater than the one we are 1029 * searching for, respectively, if the exact element cannot be found. 1030 */ 1031function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { 1032 // This function terminates when one of the following is true: 1033 // 1034 // 1. We find the exact element we are looking for. 1035 // 1036 // 2. We did not find the exact element, but we can return the index of 1037 // the next-closest element. 1038 // 1039 // 3. We did not find the exact element, and there is no next-closest 1040 // element than the one we are searching for, so we return -1. 1041 var mid = Math.floor((aHigh - aLow) / 2) + aLow; 1042 var cmp = aCompare(aNeedle, aHaystack[mid], true); 1043 if (cmp === 0) { 1044 // Found the element we are looking for. 1045 return mid; 1046 } 1047 else if (cmp > 0) { 1048 // Our needle is greater than aHaystack[mid]. 1049 if (aHigh - mid > 1) { 1050 // The element is in the upper half. 1051 return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); 1052 } 1053 1054 // The exact needle element was not found in this haystack. Determine if 1055 // we are in termination case (3) or (2) and return the appropriate thing. 1056 if (aBias == exports.LEAST_UPPER_BOUND) { 1057 return aHigh < aHaystack.length ? aHigh : -1; 1058 } else { 1059 return mid; 1060 } 1061 } 1062 else { 1063 // Our needle is less than aHaystack[mid]. 1064 if (mid - aLow > 1) { 1065 // The element is in the lower half. 1066 return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); 1067 } 1068 1069 // we are in termination case (3) or (2) and return the appropriate thing. 1070 if (aBias == exports.LEAST_UPPER_BOUND) { 1071 return mid; 1072 } else { 1073 return aLow < 0 ? -1 : aLow; 1074 } 1075 } 1076} 1077 1078/** 1079 * This is an implementation of binary search which will always try and return 1080 * the index of the closest element if there is no exact hit. This is because 1081 * mappings between original and generated line/col pairs are single points, 1082 * and there is an implicit region between each of them, so a miss just means 1083 * that you aren't on the very start of a region. 1084 * 1085 * @param aNeedle The element you are looking for. 1086 * @param aHaystack The array that is being searched. 1087 * @param aCompare A function which takes the needle and an element in the 1088 * array and returns -1, 0, or 1 depending on whether the needle is less 1089 * than, equal to, or greater than the element, respectively. 1090 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or 1091 * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the 1092 * closest element that is smaller than or greater than the one we are 1093 * searching for, respectively, if the exact element cannot be found. 1094 * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. 1095 */ 1096exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { 1097 if (aHaystack.length === 0) { 1098 return -1; 1099 } 1100 1101 var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, 1102 aCompare, aBias || exports.GREATEST_LOWER_BOUND); 1103 if (index < 0) { 1104 return -1; 1105 } 1106 1107 // We have found either the exact element, or the next-closest element than 1108 // the one we are searching for. However, there may be more than one such 1109 // element. Make sure we always return the smallest of these. 1110 while (index - 1 >= 0) { 1111 if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { 1112 break; 1113 } 1114 --index; 1115 } 1116 1117 return index; 1118}; 1119 1120 1121/***/ }), 1122 1123/***/ 740: 1124/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 1125 1126/* -*- Mode: js; js-indent-level: 2; -*- */ 1127/* 1128 * Copyright 2014 Mozilla Foundation and contributors 1129 * Licensed under the New BSD license. See LICENSE or: 1130 * http://opensource.org/licenses/BSD-3-Clause 1131 */ 1132 1133var util = __webpack_require__(983); 1134 1135/** 1136 * Determine whether mappingB is after mappingA with respect to generated 1137 * position. 1138 */ 1139function generatedPositionAfter(mappingA, mappingB) { 1140 // Optimized for most common case 1141 var lineA = mappingA.generatedLine; 1142 var lineB = mappingB.generatedLine; 1143 var columnA = mappingA.generatedColumn; 1144 var columnB = mappingB.generatedColumn; 1145 return lineB > lineA || lineB == lineA && columnB >= columnA || 1146 util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; 1147} 1148 1149/** 1150 * A data structure to provide a sorted view of accumulated mappings in a 1151 * performance conscious manner. It trades a neglibable overhead in general 1152 * case for a large speedup in case of mappings being added in order. 1153 */ 1154function MappingList() { 1155 this._array = []; 1156 this._sorted = true; 1157 // Serves as infimum 1158 this._last = {generatedLine: -1, generatedColumn: 0}; 1159} 1160 1161/** 1162 * Iterate through internal items. This method takes the same arguments that 1163 * `Array.prototype.forEach` takes. 1164 * 1165 * NOTE: The order of the mappings is NOT guaranteed. 1166 */ 1167MappingList.prototype.unsortedForEach = 1168 function MappingList_forEach(aCallback, aThisArg) { 1169 this._array.forEach(aCallback, aThisArg); 1170 }; 1171 1172/** 1173 * Add the given source mapping. 1174 * 1175 * @param Object aMapping 1176 */ 1177MappingList.prototype.add = function MappingList_add(aMapping) { 1178 if (generatedPositionAfter(this._last, aMapping)) { 1179 this._last = aMapping; 1180 this._array.push(aMapping); 1181 } else { 1182 this._sorted = false; 1183 this._array.push(aMapping); 1184 } 1185}; 1186 1187/** 1188 * Returns the flat, sorted array of mappings. The mappings are sorted by 1189 * generated position. 1190 * 1191 * WARNING: This method returns internal data without copying, for 1192 * performance. The return value must NOT be mutated, and should be treated as 1193 * an immutable borrow. If you want to take ownership, you must make your own 1194 * copy. 1195 */ 1196MappingList.prototype.toArray = function MappingList_toArray() { 1197 if (!this._sorted) { 1198 this._array.sort(util.compareByGeneratedPositionsInflated); 1199 this._sorted = true; 1200 } 1201 return this._array; 1202}; 1203 1204exports.H = MappingList; 1205 1206 1207/***/ }), 1208 1209/***/ 226: 1210/***/ ((__unused_webpack_module, exports) => { 1211 1212/* -*- Mode: js; js-indent-level: 2; -*- */ 1213/* 1214 * Copyright 2011 Mozilla Foundation and contributors 1215 * Licensed under the New BSD license. See LICENSE or: 1216 * http://opensource.org/licenses/BSD-3-Clause 1217 */ 1218 1219// It turns out that some (most?) JavaScript engines don't self-host 1220// `Array.prototype.sort`. This makes sense because C++ will likely remain 1221// faster than JS when doing raw CPU-intensive sorting. However, when using a 1222// custom comparator function, calling back and forth between the VM's C++ and 1223// JIT'd JS is rather slow *and* loses JIT type information, resulting in 1224// worse generated code for the comparator function than would be optimal. In 1225// fact, when sorting with a comparator, these costs outweigh the benefits of 1226// sorting in C++. By using our own JS-implemented Quick Sort (below), we get 1227// a ~3500ms mean speed-up in `bench/bench.html`. 1228 1229/** 1230 * Swap the elements indexed by `x` and `y` in the array `ary`. 1231 * 1232 * @param {Array} ary 1233 * The array. 1234 * @param {Number} x 1235 * The index of the first item. 1236 * @param {Number} y 1237 * The index of the second item. 1238 */ 1239function swap(ary, x, y) { 1240 var temp = ary[x]; 1241 ary[x] = ary[y]; 1242 ary[y] = temp; 1243} 1244 1245/** 1246 * Returns a random integer within the range `low .. high` inclusive. 1247 * 1248 * @param {Number} low 1249 * The lower bound on the range. 1250 * @param {Number} high 1251 * The upper bound on the range. 1252 */ 1253function randomIntInRange(low, high) { 1254 return Math.round(low + (Math.random() * (high - low))); 1255} 1256 1257/** 1258 * The Quick Sort algorithm. 1259 * 1260 * @param {Array} ary 1261 * An array to sort. 1262 * @param {function} comparator 1263 * Function to use to compare two items. 1264 * @param {Number} p 1265 * Start index of the array 1266 * @param {Number} r 1267 * End index of the array 1268 */ 1269function doQuickSort(ary, comparator, p, r) { 1270 // If our lower bound is less than our upper bound, we (1) partition the 1271 // array into two pieces and (2) recurse on each half. If it is not, this is 1272 // the empty array and our base case. 1273 1274 if (p < r) { 1275 // (1) Partitioning. 1276 // 1277 // The partitioning chooses a pivot between `p` and `r` and moves all 1278 // elements that are less than or equal to the pivot to the before it, and 1279 // all the elements that are greater than it after it. The effect is that 1280 // once partition is done, the pivot is in the exact place it will be when 1281 // the array is put in sorted order, and it will not need to be moved 1282 // again. This runs in O(n) time. 1283 1284 // Always choose a random pivot so that an input array which is reverse 1285 // sorted does not cause O(n^2) running time. 1286 var pivotIndex = randomIntInRange(p, r); 1287 var i = p - 1; 1288 1289 swap(ary, pivotIndex, r); 1290 var pivot = ary[r]; 1291 1292 // Immediately after `j` is incremented in this loop, the following hold 1293 // true: 1294 // 1295 // * Every element in `ary[p .. i]` is less than or equal to the pivot. 1296 // 1297 // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. 1298 for (var j = p; j < r; j++) { 1299 if (comparator(ary[j], pivot) <= 0) { 1300 i += 1; 1301 swap(ary, i, j); 1302 } 1303 } 1304 1305 swap(ary, i + 1, j); 1306 var q = i + 1; 1307 1308 // (2) Recurse on each half. 1309 1310 doQuickSort(ary, comparator, p, q - 1); 1311 doQuickSort(ary, comparator, q + 1, r); 1312 } 1313} 1314 1315/** 1316 * Sort the given array in-place with the given comparator function. 1317 * 1318 * @param {Array} ary 1319 * An array to sort. 1320 * @param {function} comparator 1321 * Function to use to compare two items. 1322 */ 1323exports.U = function (ary, comparator) { 1324 doQuickSort(ary, comparator, 0, ary.length - 1); 1325}; 1326 1327 1328/***/ }), 1329 1330/***/ 327: 1331/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 1332 1333var __webpack_unused_export__; 1334/* -*- Mode: js; js-indent-level: 2; -*- */ 1335/* 1336 * Copyright 2011 Mozilla Foundation and contributors 1337 * Licensed under the New BSD license. See LICENSE or: 1338 * http://opensource.org/licenses/BSD-3-Clause 1339 */ 1340 1341var util = __webpack_require__(983); 1342var binarySearch = __webpack_require__(164); 1343var ArraySet = __webpack_require__(837)/* .ArraySet */ .I; 1344var base64VLQ = __webpack_require__(215); 1345var quickSort = __webpack_require__(226)/* .quickSort */ .U; 1346 1347function SourceMapConsumer(aSourceMap, aSourceMapURL) { 1348 var sourceMap = aSourceMap; 1349 if (typeof aSourceMap === 'string') { 1350 sourceMap = util.parseSourceMapInput(aSourceMap); 1351 } 1352 1353 return sourceMap.sections != null 1354 ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL) 1355 : new BasicSourceMapConsumer(sourceMap, aSourceMapURL); 1356} 1357 1358SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) { 1359 return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL); 1360} 1361 1362/** 1363 * The version of the source mapping spec that we are consuming. 1364 */ 1365SourceMapConsumer.prototype._version = 3; 1366 1367// `__generatedMappings` and `__originalMappings` are arrays that hold the 1368// parsed mapping coordinates from the source map's "mappings" attribute. They 1369// are lazily instantiated, accessed via the `_generatedMappings` and 1370// `_originalMappings` getters respectively, and we only parse the mappings 1371// and create these arrays once queried for a source location. We jump through 1372// these hoops because there can be many thousands of mappings, and parsing 1373// them is expensive, so we only want to do it if we must. 1374// 1375// Each object in the arrays is of the form: 1376// 1377// { 1378// generatedLine: The line number in the generated code, 1379// generatedColumn: The column number in the generated code, 1380// source: The path to the original source file that generated this 1381// chunk of code, 1382// originalLine: The line number in the original source that 1383// corresponds to this chunk of generated code, 1384// originalColumn: The column number in the original source that 1385// corresponds to this chunk of generated code, 1386// name: The name of the original symbol which generated this chunk of 1387// code. 1388// } 1389// 1390// All properties except for `generatedLine` and `generatedColumn` can be 1391// `null`. 1392// 1393// `_generatedMappings` is ordered by the generated positions. 1394// 1395// `_originalMappings` is ordered by the original positions. 1396 1397SourceMapConsumer.prototype.__generatedMappings = null; 1398Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { 1399 configurable: true, 1400 enumerable: true, 1401 get: function () { 1402 if (!this.__generatedMappings) { 1403 this._parseMappings(this._mappings, this.sourceRoot); 1404 } 1405 1406 return this.__generatedMappings; 1407 } 1408}); 1409 1410SourceMapConsumer.prototype.__originalMappings = null; 1411Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { 1412 configurable: true, 1413 enumerable: true, 1414 get: function () { 1415 if (!this.__originalMappings) { 1416 this._parseMappings(this._mappings, this.sourceRoot); 1417 } 1418 1419 return this.__originalMappings; 1420 } 1421}); 1422 1423SourceMapConsumer.prototype._charIsMappingSeparator = 1424 function SourceMapConsumer_charIsMappingSeparator(aStr, index) { 1425 var c = aStr.charAt(index); 1426 return c === ";" || c === ","; 1427 }; 1428 1429/** 1430 * Parse the mappings in a string in to a data structure which we can easily 1431 * query (the ordered arrays in the `this.__generatedMappings` and 1432 * `this.__originalMappings` properties). 1433 */ 1434SourceMapConsumer.prototype._parseMappings = 1435 function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { 1436 throw new Error("Subclasses must implement _parseMappings"); 1437 }; 1438 1439SourceMapConsumer.GENERATED_ORDER = 1; 1440SourceMapConsumer.ORIGINAL_ORDER = 2; 1441 1442SourceMapConsumer.GREATEST_LOWER_BOUND = 1; 1443SourceMapConsumer.LEAST_UPPER_BOUND = 2; 1444 1445/** 1446 * Iterate over each mapping between an original source/line/column and a 1447 * generated line/column in this source map. 1448 * 1449 * @param Function aCallback 1450 * The function that is called with each mapping. 1451 * @param Object aContext 1452 * Optional. If specified, this object will be the value of `this` every 1453 * time that `aCallback` is called. 1454 * @param aOrder 1455 * Either `SourceMapConsumer.GENERATED_ORDER` or 1456 * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to 1457 * iterate over the mappings sorted by the generated file's line/column 1458 * order or the original's source/line/column order, respectively. Defaults to 1459 * `SourceMapConsumer.GENERATED_ORDER`. 1460 */ 1461SourceMapConsumer.prototype.eachMapping = 1462 function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { 1463 var context = aContext || null; 1464 var order = aOrder || SourceMapConsumer.GENERATED_ORDER; 1465 1466 var mappings; 1467 switch (order) { 1468 case SourceMapConsumer.GENERATED_ORDER: 1469 mappings = this._generatedMappings; 1470 break; 1471 case SourceMapConsumer.ORIGINAL_ORDER: 1472 mappings = this._originalMappings; 1473 break; 1474 default: 1475 throw new Error("Unknown order of iteration."); 1476 } 1477 1478 var sourceRoot = this.sourceRoot; 1479 mappings.map(function (mapping) { 1480 var source = mapping.source === null ? null : this._sources.at(mapping.source); 1481 source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL); 1482 return { 1483 source: source, 1484 generatedLine: mapping.generatedLine, 1485 generatedColumn: mapping.generatedColumn, 1486 originalLine: mapping.originalLine, 1487 originalColumn: mapping.originalColumn, 1488 name: mapping.name === null ? null : this._names.at(mapping.name) 1489 }; 1490 }, this).forEach(aCallback, context); 1491 }; 1492 1493/** 1494 * Returns all generated line and column information for the original source, 1495 * line, and column provided. If no column is provided, returns all mappings 1496 * corresponding to a either the line we are searching for or the next 1497 * closest line that has any mappings. Otherwise, returns all mappings 1498 * corresponding to the given line and either the column we are searching for 1499 * or the next closest column that has any offsets. 1500 * 1501 * The only argument is an object with the following properties: 1502 * 1503 * - source: The filename of the original source. 1504 * - line: The line number in the original source. The line number is 1-based. 1505 * - column: Optional. the column number in the original source. 1506 * The column number is 0-based. 1507 * 1508 * and an array of objects is returned, each with the following properties: 1509 * 1510 * - line: The line number in the generated source, or null. The 1511 * line number is 1-based. 1512 * - column: The column number in the generated source, or null. 1513 * The column number is 0-based. 1514 */ 1515SourceMapConsumer.prototype.allGeneratedPositionsFor = 1516 function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { 1517 var line = util.getArg(aArgs, 'line'); 1518 1519 // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping 1520 // returns the index of the closest mapping less than the needle. By 1521 // setting needle.originalColumn to 0, we thus find the last mapping for 1522 // the given line, provided such a mapping exists. 1523 var needle = { 1524 source: util.getArg(aArgs, 'source'), 1525 originalLine: line, 1526 originalColumn: util.getArg(aArgs, 'column', 0) 1527 }; 1528 1529 needle.source = this._findSourceIndex(needle.source); 1530 if (needle.source < 0) { 1531 return []; 1532 } 1533 1534 var mappings = []; 1535 1536 var index = this._findMapping(needle, 1537 this._originalMappings, 1538 "originalLine", 1539 "originalColumn", 1540 util.compareByOriginalPositions, 1541 binarySearch.LEAST_UPPER_BOUND); 1542 if (index >= 0) { 1543 var mapping = this._originalMappings[index]; 1544 1545 if (aArgs.column === undefined) { 1546 var originalLine = mapping.originalLine; 1547 1548 // Iterate until either we run out of mappings, or we run into 1549 // a mapping for a different line than the one we found. Since 1550 // mappings are sorted, this is guaranteed to find all mappings for 1551 // the line we found. 1552 while (mapping && mapping.originalLine === originalLine) { 1553 mappings.push({ 1554 line: util.getArg(mapping, 'generatedLine', null), 1555 column: util.getArg(mapping, 'generatedColumn', null), 1556 lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) 1557 }); 1558 1559 mapping = this._originalMappings[++index]; 1560 } 1561 } else { 1562 var originalColumn = mapping.originalColumn; 1563 1564 // Iterate until either we run out of mappings, or we run into 1565 // a mapping for a different line than the one we were searching for. 1566 // Since mappings are sorted, this is guaranteed to find all mappings for 1567 // the line we are searching for. 1568 while (mapping && 1569 mapping.originalLine === line && 1570 mapping.originalColumn == originalColumn) { 1571 mappings.push({ 1572 line: util.getArg(mapping, 'generatedLine', null), 1573 column: util.getArg(mapping, 'generatedColumn', null), 1574 lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) 1575 }); 1576 1577 mapping = this._originalMappings[++index]; 1578 } 1579 } 1580 } 1581 1582 return mappings; 1583 }; 1584 1585exports.SourceMapConsumer = SourceMapConsumer; 1586 1587/** 1588 * A BasicSourceMapConsumer instance represents a parsed source map which we can 1589 * query for information about the original file positions by giving it a file 1590 * position in the generated source. 1591 * 1592 * The first parameter is the raw source map (either as a JSON string, or 1593 * already parsed to an object). According to the spec, source maps have the 1594 * following attributes: 1595 * 1596 * - version: Which version of the source map spec this map is following. 1597 * - sources: An array of URLs to the original source files. 1598 * - names: An array of identifiers which can be referrenced by individual mappings. 1599 * - sourceRoot: Optional. The URL root from which all sources are relative. 1600 * - sourcesContent: Optional. An array of contents of the original source files. 1601 * - mappings: A string of base64 VLQs which contain the actual mappings. 1602 * - file: Optional. The generated file this source map is associated with. 1603 * 1604 * Here is an example source map, taken from the source map spec[0]: 1605 * 1606 * { 1607 * version : 3, 1608 * file: "out.js", 1609 * sourceRoot : "", 1610 * sources: ["foo.js", "bar.js"], 1611 * names: ["src", "maps", "are", "fun"], 1612 * mappings: "AA,AB;;ABCDE;" 1613 * } 1614 * 1615 * The second parameter, if given, is a string whose value is the URL 1616 * at which the source map was found. This URL is used to compute the 1617 * sources array. 1618 * 1619 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# 1620 */ 1621function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) { 1622 var sourceMap = aSourceMap; 1623 if (typeof aSourceMap === 'string') { 1624 sourceMap = util.parseSourceMapInput(aSourceMap); 1625 } 1626 1627 var version = util.getArg(sourceMap, 'version'); 1628 var sources = util.getArg(sourceMap, 'sources'); 1629 // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which 1630 // requires the array) to play nice here. 1631 var names = util.getArg(sourceMap, 'names', []); 1632 var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); 1633 var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); 1634 var mappings = util.getArg(sourceMap, 'mappings'); 1635 var file = util.getArg(sourceMap, 'file', null); 1636 1637 // Once again, Sass deviates from the spec and supplies the version as a 1638 // string rather than a number, so we use loose equality checking here. 1639 if (version != this._version) { 1640 throw new Error('Unsupported version: ' + version); 1641 } 1642 1643 if (sourceRoot) { 1644 sourceRoot = util.normalize(sourceRoot); 1645 } 1646 1647 sources = sources 1648 .map(String) 1649 // Some source maps produce relative source paths like "./foo.js" instead of 1650 // "foo.js". Normalize these first so that future comparisons will succeed. 1651 // See bugzil.la/1090768. 1652 .map(util.normalize) 1653 // Always ensure that absolute sources are internally stored relative to 1654 // the source root, if the source root is absolute. Not doing this would 1655 // be particularly problematic when the source root is a prefix of the 1656 // source (valid, but why??). See github issue #199 and bugzil.la/1188982. 1657 .map(function (source) { 1658 return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) 1659 ? util.relative(sourceRoot, source) 1660 : source; 1661 }); 1662 1663 // Pass `true` below to allow duplicate names and sources. While source maps 1664 // are intended to be compressed and deduplicated, the TypeScript compiler 1665 // sometimes generates source maps with duplicates in them. See Github issue 1666 // #72 and bugzil.la/889492. 1667 this._names = ArraySet.fromArray(names.map(String), true); 1668 this._sources = ArraySet.fromArray(sources, true); 1669 1670 this._absoluteSources = this._sources.toArray().map(function (s) { 1671 return util.computeSourceURL(sourceRoot, s, aSourceMapURL); 1672 }); 1673 1674 this.sourceRoot = sourceRoot; 1675 this.sourcesContent = sourcesContent; 1676 this._mappings = mappings; 1677 this._sourceMapURL = aSourceMapURL; 1678 this.file = file; 1679} 1680 1681BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); 1682BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; 1683 1684/** 1685 * Utility function to find the index of a source. Returns -1 if not 1686 * found. 1687 */ 1688BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) { 1689 var relativeSource = aSource; 1690 if (this.sourceRoot != null) { 1691 relativeSource = util.relative(this.sourceRoot, relativeSource); 1692 } 1693 1694 if (this._sources.has(relativeSource)) { 1695 return this._sources.indexOf(relativeSource); 1696 } 1697 1698 // Maybe aSource is an absolute URL as returned by |sources|. In 1699 // this case we can't simply undo the transform. 1700 var i; 1701 for (i = 0; i < this._absoluteSources.length; ++i) { 1702 if (this._absoluteSources[i] == aSource) { 1703 return i; 1704 } 1705 } 1706 1707 return -1; 1708}; 1709 1710/** 1711 * Create a BasicSourceMapConsumer from a SourceMapGenerator. 1712 * 1713 * @param SourceMapGenerator aSourceMap 1714 * The source map that will be consumed. 1715 * @param String aSourceMapURL 1716 * The URL at which the source map can be found (optional) 1717 * @returns BasicSourceMapConsumer 1718 */ 1719BasicSourceMapConsumer.fromSourceMap = 1720 function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) { 1721 var smc = Object.create(BasicSourceMapConsumer.prototype); 1722 1723 var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); 1724 var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); 1725 smc.sourceRoot = aSourceMap._sourceRoot; 1726 smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), 1727 smc.sourceRoot); 1728 smc.file = aSourceMap._file; 1729 smc._sourceMapURL = aSourceMapURL; 1730 smc._absoluteSources = smc._sources.toArray().map(function (s) { 1731 return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL); 1732 }); 1733 1734 // Because we are modifying the entries (by converting string sources and 1735 // names to indices into the sources and names ArraySets), we have to make 1736 // a copy of the entry or else bad things happen. Shared mutable state 1737 // strikes again! See github issue #191. 1738 1739 var generatedMappings = aSourceMap._mappings.toArray().slice(); 1740 var destGeneratedMappings = smc.__generatedMappings = []; 1741 var destOriginalMappings = smc.__originalMappings = []; 1742 1743 for (var i = 0, length = generatedMappings.length; i < length; i++) { 1744 var srcMapping = generatedMappings[i]; 1745 var destMapping = new Mapping; 1746 destMapping.generatedLine = srcMapping.generatedLine; 1747 destMapping.generatedColumn = srcMapping.generatedColumn; 1748 1749 if (srcMapping.source) { 1750 destMapping.source = sources.indexOf(srcMapping.source); 1751 destMapping.originalLine = srcMapping.originalLine; 1752 destMapping.originalColumn = srcMapping.originalColumn; 1753 1754 if (srcMapping.name) { 1755 destMapping.name = names.indexOf(srcMapping.name); 1756 } 1757 1758 destOriginalMappings.push(destMapping); 1759 } 1760 1761 destGeneratedMappings.push(destMapping); 1762 } 1763 1764 quickSort(smc.__originalMappings, util.compareByOriginalPositions); 1765 1766 return smc; 1767 }; 1768 1769/** 1770 * The version of the source mapping spec that we are consuming. 1771 */ 1772BasicSourceMapConsumer.prototype._version = 3; 1773 1774/** 1775 * The list of original sources. 1776 */ 1777Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { 1778 get: function () { 1779 return this._absoluteSources.slice(); 1780 } 1781}); 1782 1783/** 1784 * Provide the JIT with a nice shape / hidden class. 1785 */ 1786function Mapping() { 1787 this.generatedLine = 0; 1788 this.generatedColumn = 0; 1789 this.source = null; 1790 this.originalLine = null; 1791 this.originalColumn = null; 1792 this.name = null; 1793} 1794 1795/** 1796 * Parse the mappings in a string in to a data structure which we can easily 1797 * query (the ordered arrays in the `this.__generatedMappings` and 1798 * `this.__originalMappings` properties). 1799 */ 1800BasicSourceMapConsumer.prototype._parseMappings = 1801 function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { 1802 var generatedLine = 1; 1803 var previousGeneratedColumn = 0; 1804 var previousOriginalLine = 0; 1805 var previousOriginalColumn = 0; 1806 var previousSource = 0; 1807 var previousName = 0; 1808 var length = aStr.length; 1809 var index = 0; 1810 var cachedSegments = {}; 1811 var temp = {}; 1812 var originalMappings = []; 1813 var generatedMappings = []; 1814 var mapping, str, segment, end, value; 1815 1816 while (index < length) { 1817 if (aStr.charAt(index) === ';') { 1818 generatedLine++; 1819 index++; 1820 previousGeneratedColumn = 0; 1821 } 1822 else if (aStr.charAt(index) === ',') { 1823 index++; 1824 } 1825 else { 1826 mapping = new Mapping(); 1827 mapping.generatedLine = generatedLine; 1828 1829 // Because each offset is encoded relative to the previous one, 1830 // many segments often have the same encoding. We can exploit this 1831 // fact by caching the parsed variable length fields of each segment, 1832 // allowing us to avoid a second parse if we encounter the same 1833 // segment again. 1834 for (end = index; end < length; end++) { 1835 if (this._charIsMappingSeparator(aStr, end)) { 1836 break; 1837 } 1838 } 1839 str = aStr.slice(index, end); 1840 1841 segment = cachedSegments[str]; 1842 if (segment) { 1843 index += str.length; 1844 } else { 1845 segment = []; 1846 while (index < end) { 1847 base64VLQ.decode(aStr, index, temp); 1848 value = temp.value; 1849 index = temp.rest; 1850 segment.push(value); 1851 } 1852 1853 if (segment.length === 2) { 1854 throw new Error('Found a source, but no line and column'); 1855 } 1856 1857 if (segment.length === 3) { 1858 throw new Error('Found a source and line, but no column'); 1859 } 1860 1861 cachedSegments[str] = segment; 1862 } 1863 1864 // Generated column. 1865 mapping.generatedColumn = previousGeneratedColumn + segment[0]; 1866 previousGeneratedColumn = mapping.generatedColumn; 1867 1868 if (segment.length > 1) { 1869 // Original source. 1870 mapping.source = previousSource + segment[1]; 1871 previousSource += segment[1]; 1872 1873 // Original line. 1874 mapping.originalLine = previousOriginalLine + segment[2]; 1875 previousOriginalLine = mapping.originalLine; 1876 // Lines are stored 0-based 1877 mapping.originalLine += 1; 1878 1879 // Original column. 1880 mapping.originalColumn = previousOriginalColumn + segment[3]; 1881 previousOriginalColumn = mapping.originalColumn; 1882 1883 if (segment.length > 4) { 1884 // Original name. 1885 mapping.name = previousName + segment[4]; 1886 previousName += segment[4]; 1887 } 1888 } 1889 1890 generatedMappings.push(mapping); 1891 if (typeof mapping.originalLine === 'number') { 1892 originalMappings.push(mapping); 1893 } 1894 } 1895 } 1896 1897 quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); 1898 this.__generatedMappings = generatedMappings; 1899 1900 quickSort(originalMappings, util.compareByOriginalPositions); 1901 this.__originalMappings = originalMappings; 1902 }; 1903 1904/** 1905 * Find the mapping that best matches the hypothetical "needle" mapping that 1906 * we are searching for in the given "haystack" of mappings. 1907 */ 1908BasicSourceMapConsumer.prototype._findMapping = 1909 function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, 1910 aColumnName, aComparator, aBias) { 1911 // To return the position we are searching for, we must first find the 1912 // mapping for the given position and then return the opposite position it 1913 // points to. Because the mappings are sorted, we can use binary search to 1914 // find the best mapping. 1915 1916 if (aNeedle[aLineName] <= 0) { 1917 throw new TypeError('Line must be greater than or equal to 1, got ' 1918 + aNeedle[aLineName]); 1919 } 1920 if (aNeedle[aColumnName] < 0) { 1921 throw new TypeError('Column must be greater than or equal to 0, got ' 1922 + aNeedle[aColumnName]); 1923 } 1924 1925 return binarySearch.search(aNeedle, aMappings, aComparator, aBias); 1926 }; 1927 1928/** 1929 * Compute the last column for each generated mapping. The last column is 1930 * inclusive. 1931 */ 1932BasicSourceMapConsumer.prototype.computeColumnSpans = 1933 function SourceMapConsumer_computeColumnSpans() { 1934 for (var index = 0; index < this._generatedMappings.length; ++index) { 1935 var mapping = this._generatedMappings[index]; 1936 1937 // Mappings do not contain a field for the last generated columnt. We 1938 // can come up with an optimistic estimate, however, by assuming that 1939 // mappings are contiguous (i.e. given two consecutive mappings, the 1940 // first mapping ends where the second one starts). 1941 if (index + 1 < this._generatedMappings.length) { 1942 var nextMapping = this._generatedMappings[index + 1]; 1943 1944 if (mapping.generatedLine === nextMapping.generatedLine) { 1945 mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; 1946 continue; 1947 } 1948 } 1949 1950 // The last mapping for each line spans the entire line. 1951 mapping.lastGeneratedColumn = Infinity; 1952 } 1953 }; 1954 1955/** 1956 * Returns the original source, line, and column information for the generated 1957 * source's line and column positions provided. The only argument is an object 1958 * with the following properties: 1959 * 1960 * - line: The line number in the generated source. The line number 1961 * is 1-based. 1962 * - column: The column number in the generated source. The column 1963 * number is 0-based. 1964 * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or 1965 * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the 1966 * closest element that is smaller than or greater than the one we are 1967 * searching for, respectively, if the exact element cannot be found. 1968 * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. 1969 * 1970 * and an object is returned with the following properties: 1971 * 1972 * - source: The original source file, or null. 1973 * - line: The line number in the original source, or null. The 1974 * line number is 1-based. 1975 * - column: The column number in the original source, or null. The 1976 * column number is 0-based. 1977 * - name: The original identifier, or null. 1978 */ 1979BasicSourceMapConsumer.prototype.originalPositionFor = 1980 function SourceMapConsumer_originalPositionFor(aArgs) { 1981 var needle = { 1982 generatedLine: util.getArg(aArgs, 'line'), 1983 generatedColumn: util.getArg(aArgs, 'column') 1984 }; 1985 1986 var index = this._findMapping( 1987 needle, 1988 this._generatedMappings, 1989 "generatedLine", 1990 "generatedColumn", 1991 util.compareByGeneratedPositionsDeflated, 1992 util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) 1993 ); 1994 1995 if (index >= 0) { 1996 var mapping = this._generatedMappings[index]; 1997 1998 if (mapping.generatedLine === needle.generatedLine) { 1999 var source = util.getArg(mapping, 'source', null); 2000 if (source !== null) { 2001 source = this._sources.at(source); 2002 source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL); 2003 } 2004 var name = util.getArg(mapping, 'name', null); 2005 if (name !== null) { 2006 name = this._names.at(name); 2007 } 2008 return { 2009 source: source, 2010 line: util.getArg(mapping, 'originalLine', null), 2011 column: util.getArg(mapping, 'originalColumn', null), 2012 name: name 2013 }; 2014 } 2015 } 2016 2017 return { 2018 source: null, 2019 line: null, 2020 column: null, 2021 name: null 2022 }; 2023 }; 2024 2025/** 2026 * Return true if we have the source content for every source in the source 2027 * map, false otherwise. 2028 */ 2029BasicSourceMapConsumer.prototype.hasContentsOfAllSources = 2030 function BasicSourceMapConsumer_hasContentsOfAllSources() { 2031 if (!this.sourcesContent) { 2032 return false; 2033 } 2034 return this.sourcesContent.length >= this._sources.size() && 2035 !this.sourcesContent.some(function (sc) { return sc == null; }); 2036 }; 2037 2038/** 2039 * Returns the original source content. The only argument is the url of the 2040 * original source file. Returns null if no original source content is 2041 * available. 2042 */ 2043BasicSourceMapConsumer.prototype.sourceContentFor = 2044 function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { 2045 if (!this.sourcesContent) { 2046 return null; 2047 } 2048 2049 var index = this._findSourceIndex(aSource); 2050 if (index >= 0) { 2051 return this.sourcesContent[index]; 2052 } 2053 2054 var relativeSource = aSource; 2055 if (this.sourceRoot != null) { 2056 relativeSource = util.relative(this.sourceRoot, relativeSource); 2057 } 2058 2059 var url; 2060 if (this.sourceRoot != null 2061 && (url = util.urlParse(this.sourceRoot))) { 2062 // XXX: file:// URIs and absolute paths lead to unexpected behavior for 2063 // many users. We can help them out when they expect file:// URIs to 2064 // behave like it would if they were running a local HTTP server. See 2065 // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. 2066 var fileUriAbsPath = relativeSource.replace(/^file:\/\//, ""); 2067 if (url.scheme == "file" 2068 && this._sources.has(fileUriAbsPath)) { 2069 return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] 2070 } 2071 2072 if ((!url.path || url.path == "/") 2073 && this._sources.has("/" + relativeSource)) { 2074 return this.sourcesContent[this._sources.indexOf("/" + relativeSource)]; 2075 } 2076 } 2077 2078 // This function is used recursively from 2079 // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we 2080 // don't want to throw if we can't find the source - we just want to 2081 // return null, so we provide a flag to exit gracefully. 2082 if (nullOnMissing) { 2083 return null; 2084 } 2085 else { 2086 throw new Error('"' + relativeSource + '" is not in the SourceMap.'); 2087 } 2088 }; 2089 2090/** 2091 * Returns the generated line and column information for the original source, 2092 * line, and column positions provided. The only argument is an object with 2093 * the following properties: 2094 * 2095 * - source: The filename of the original source. 2096 * - line: The line number in the original source. The line number 2097 * is 1-based. 2098 * - column: The column number in the original source. The column 2099 * number is 0-based. 2100 * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or 2101 * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the 2102 * closest element that is smaller than or greater than the one we are 2103 * searching for, respectively, if the exact element cannot be found. 2104 * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. 2105 * 2106 * and an object is returned with the following properties: 2107 * 2108 * - line: The line number in the generated source, or null. The 2109 * line number is 1-based. 2110 * - column: The column number in the generated source, or null. 2111 * The column number is 0-based. 2112 */ 2113BasicSourceMapConsumer.prototype.generatedPositionFor = 2114 function SourceMapConsumer_generatedPositionFor(aArgs) { 2115 var source = util.getArg(aArgs, 'source'); 2116 source = this._findSourceIndex(source); 2117 if (source < 0) { 2118 return { 2119 line: null, 2120 column: null, 2121 lastColumn: null 2122 }; 2123 } 2124 2125 var needle = { 2126 source: source, 2127 originalLine: util.getArg(aArgs, 'line'), 2128 originalColumn: util.getArg(aArgs, 'column') 2129 }; 2130 2131 var index = this._findMapping( 2132 needle, 2133 this._originalMappings, 2134 "originalLine", 2135 "originalColumn", 2136 util.compareByOriginalPositions, 2137 util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) 2138 ); 2139 2140 if (index >= 0) { 2141 var mapping = this._originalMappings[index]; 2142 2143 if (mapping.source === needle.source) { 2144 return { 2145 line: util.getArg(mapping, 'generatedLine', null), 2146 column: util.getArg(mapping, 'generatedColumn', null), 2147 lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) 2148 }; 2149 } 2150 } 2151 2152 return { 2153 line: null, 2154 column: null, 2155 lastColumn: null 2156 }; 2157 }; 2158 2159__webpack_unused_export__ = BasicSourceMapConsumer; 2160 2161/** 2162 * An IndexedSourceMapConsumer instance represents a parsed source map which 2163 * we can query for information. It differs from BasicSourceMapConsumer in 2164 * that it takes "indexed" source maps (i.e. ones with a "sections" field) as 2165 * input. 2166 * 2167 * The first parameter is a raw source map (either as a JSON string, or already 2168 * parsed to an object). According to the spec for indexed source maps, they 2169 * have the following attributes: 2170 * 2171 * - version: Which version of the source map spec this map is following. 2172 * - file: Optional. The generated file this source map is associated with. 2173 * - sections: A list of section definitions. 2174 * 2175 * Each value under the "sections" field has two fields: 2176 * - offset: The offset into the original specified at which this section 2177 * begins to apply, defined as an object with a "line" and "column" 2178 * field. 2179 * - map: A source map definition. This source map could also be indexed, 2180 * but doesn't have to be. 2181 * 2182 * Instead of the "map" field, it's also possible to have a "url" field 2183 * specifying a URL to retrieve a source map from, but that's currently 2184 * unsupported. 2185 * 2186 * Here's an example source map, taken from the source map spec[0], but 2187 * modified to omit a section which uses the "url" field. 2188 * 2189 * { 2190 * version : 3, 2191 * file: "app.js", 2192 * sections: [{ 2193 * offset: {line:100, column:10}, 2194 * map: { 2195 * version : 3, 2196 * file: "section.js", 2197 * sources: ["foo.js", "bar.js"], 2198 * names: ["src", "maps", "are", "fun"], 2199 * mappings: "AAAA,E;;ABCDE;" 2200 * } 2201 * }], 2202 * } 2203 * 2204 * The second parameter, if given, is a string whose value is the URL 2205 * at which the source map was found. This URL is used to compute the 2206 * sources array. 2207 * 2208 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt 2209 */ 2210function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) { 2211 var sourceMap = aSourceMap; 2212 if (typeof aSourceMap === 'string') { 2213 sourceMap = util.parseSourceMapInput(aSourceMap); 2214 } 2215 2216 var version = util.getArg(sourceMap, 'version'); 2217 var sections = util.getArg(sourceMap, 'sections'); 2218 2219 if (version != this._version) { 2220 throw new Error('Unsupported version: ' + version); 2221 } 2222 2223 this._sources = new ArraySet(); 2224 this._names = new ArraySet(); 2225 2226 var lastOffset = { 2227 line: -1, 2228 column: 0 2229 }; 2230 this._sections = sections.map(function (s) { 2231 if (s.url) { 2232 // The url field will require support for asynchronicity. 2233 // See https://github.com/mozilla/source-map/issues/16 2234 throw new Error('Support for url field in sections not implemented.'); 2235 } 2236 var offset = util.getArg(s, 'offset'); 2237 var offsetLine = util.getArg(offset, 'line'); 2238 var offsetColumn = util.getArg(offset, 'column'); 2239 2240 if (offsetLine < lastOffset.line || 2241 (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { 2242 throw new Error('Section offsets must be ordered and non-overlapping.'); 2243 } 2244 lastOffset = offset; 2245 2246 return { 2247 generatedOffset: { 2248 // The offset fields are 0-based, but we use 1-based indices when 2249 // encoding/decoding from VLQ. 2250 generatedLine: offsetLine + 1, 2251 generatedColumn: offsetColumn + 1 2252 }, 2253 consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL) 2254 } 2255 }); 2256} 2257 2258IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); 2259IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; 2260 2261/** 2262 * The version of the source mapping spec that we are consuming. 2263 */ 2264IndexedSourceMapConsumer.prototype._version = 3; 2265 2266/** 2267 * The list of original sources. 2268 */ 2269Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { 2270 get: function () { 2271 var sources = []; 2272 for (var i = 0; i < this._sections.length; i++) { 2273 for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { 2274 sources.push(this._sections[i].consumer.sources[j]); 2275 } 2276 } 2277 return sources; 2278 } 2279}); 2280 2281/** 2282 * Returns the original source, line, and column information for the generated 2283 * source's line and column positions provided. The only argument is an object 2284 * with the following properties: 2285 * 2286 * - line: The line number in the generated source. The line number 2287 * is 1-based. 2288 * - column: The column number in the generated source. The column 2289 * number is 0-based. 2290 * 2291 * and an object is returned with the following properties: 2292 * 2293 * - source: The original source file, or null. 2294 * - line: The line number in the original source, or null. The 2295 * line number is 1-based. 2296 * - column: The column number in the original source, or null. The 2297 * column number is 0-based. 2298 * - name: The original identifier, or null. 2299 */ 2300IndexedSourceMapConsumer.prototype.originalPositionFor = 2301 function IndexedSourceMapConsumer_originalPositionFor(aArgs) { 2302 var needle = { 2303 generatedLine: util.getArg(aArgs, 'line'), 2304 generatedColumn: util.getArg(aArgs, 'column') 2305 }; 2306 2307 // Find the section containing the generated position we're trying to map 2308 // to an original position. 2309 var sectionIndex = binarySearch.search(needle, this._sections, 2310 function(needle, section) { 2311 var cmp = needle.generatedLine - section.generatedOffset.generatedLine; 2312 if (cmp) { 2313 return cmp; 2314 } 2315 2316 return (needle.generatedColumn - 2317 section.generatedOffset.generatedColumn); 2318 }); 2319 var section = this._sections[sectionIndex]; 2320 2321 if (!section) { 2322 return { 2323 source: null, 2324 line: null, 2325 column: null, 2326 name: null 2327 }; 2328 } 2329 2330 return section.consumer.originalPositionFor({ 2331 line: needle.generatedLine - 2332 (section.generatedOffset.generatedLine - 1), 2333 column: needle.generatedColumn - 2334 (section.generatedOffset.generatedLine === needle.generatedLine 2335 ? section.generatedOffset.generatedColumn - 1 2336 : 0), 2337 bias: aArgs.bias 2338 }); 2339 }; 2340 2341/** 2342 * Return true if we have the source content for every source in the source 2343 * map, false otherwise. 2344 */ 2345IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = 2346 function IndexedSourceMapConsumer_hasContentsOfAllSources() { 2347 return this._sections.every(function (s) { 2348 return s.consumer.hasContentsOfAllSources(); 2349 }); 2350 }; 2351 2352/** 2353 * Returns the original source content. The only argument is the url of the 2354 * original source file. Returns null if no original source content is 2355 * available. 2356 */ 2357IndexedSourceMapConsumer.prototype.sourceContentFor = 2358 function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { 2359 for (var i = 0; i < this._sections.length; i++) { 2360 var section = this._sections[i]; 2361 2362 var content = section.consumer.sourceContentFor(aSource, true); 2363 if (content) { 2364 return content; 2365 } 2366 } 2367 if (nullOnMissing) { 2368 return null; 2369 } 2370 else { 2371 throw new Error('"' + aSource + '" is not in the SourceMap.'); 2372 } 2373 }; 2374 2375/** 2376 * Returns the generated line and column information for the original source, 2377 * line, and column positions provided. The only argument is an object with 2378 * the following properties: 2379 * 2380 * - source: The filename of the original source. 2381 * - line: The line number in the original source. The line number 2382 * is 1-based. 2383 * - column: The column number in the original source. The column 2384 * number is 0-based. 2385 * 2386 * and an object is returned with the following properties: 2387 * 2388 * - line: The line number in the generated source, or null. The 2389 * line number is 1-based. 2390 * - column: The column number in the generated source, or null. 2391 * The column number is 0-based. 2392 */ 2393IndexedSourceMapConsumer.prototype.generatedPositionFor = 2394 function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { 2395 for (var i = 0; i < this._sections.length; i++) { 2396 var section = this._sections[i]; 2397 2398 // Only consider this section if the requested source is in the list of 2399 // sources of the consumer. 2400 if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) { 2401 continue; 2402 } 2403 var generatedPosition = section.consumer.generatedPositionFor(aArgs); 2404 if (generatedPosition) { 2405 var ret = { 2406 line: generatedPosition.line + 2407 (section.generatedOffset.generatedLine - 1), 2408 column: generatedPosition.column + 2409 (section.generatedOffset.generatedLine === generatedPosition.line 2410 ? section.generatedOffset.generatedColumn - 1 2411 : 0) 2412 }; 2413 return ret; 2414 } 2415 } 2416 2417 return { 2418 line: null, 2419 column: null 2420 }; 2421 }; 2422 2423/** 2424 * Parse the mappings in a string in to a data structure which we can easily 2425 * query (the ordered arrays in the `this.__generatedMappings` and 2426 * `this.__originalMappings` properties). 2427 */ 2428IndexedSourceMapConsumer.prototype._parseMappings = 2429 function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { 2430 this.__generatedMappings = []; 2431 this.__originalMappings = []; 2432 for (var i = 0; i < this._sections.length; i++) { 2433 var section = this._sections[i]; 2434 var sectionMappings = section.consumer._generatedMappings; 2435 for (var j = 0; j < sectionMappings.length; j++) { 2436 var mapping = sectionMappings[j]; 2437 2438 var source = section.consumer._sources.at(mapping.source); 2439 source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL); 2440 this._sources.add(source); 2441 source = this._sources.indexOf(source); 2442 2443 var name = null; 2444 if (mapping.name) { 2445 name = section.consumer._names.at(mapping.name); 2446 this._names.add(name); 2447 name = this._names.indexOf(name); 2448 } 2449 2450 // The mappings coming from the consumer for the section have 2451 // generated positions relative to the start of the section, so we 2452 // need to offset them to be relative to the start of the concatenated 2453 // generated file. 2454 var adjustedMapping = { 2455 source: source, 2456 generatedLine: mapping.generatedLine + 2457 (section.generatedOffset.generatedLine - 1), 2458 generatedColumn: mapping.generatedColumn + 2459 (section.generatedOffset.generatedLine === mapping.generatedLine 2460 ? section.generatedOffset.generatedColumn - 1 2461 : 0), 2462 originalLine: mapping.originalLine, 2463 originalColumn: mapping.originalColumn, 2464 name: name 2465 }; 2466 2467 this.__generatedMappings.push(adjustedMapping); 2468 if (typeof adjustedMapping.originalLine === 'number') { 2469 this.__originalMappings.push(adjustedMapping); 2470 } 2471 } 2472 } 2473 2474 quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); 2475 quickSort(this.__originalMappings, util.compareByOriginalPositions); 2476 }; 2477 2478__webpack_unused_export__ = IndexedSourceMapConsumer; 2479 2480 2481/***/ }), 2482 2483/***/ 341: 2484/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 2485 2486/* -*- Mode: js; js-indent-level: 2; -*- */ 2487/* 2488 * Copyright 2011 Mozilla Foundation and contributors 2489 * Licensed under the New BSD license. See LICENSE or: 2490 * http://opensource.org/licenses/BSD-3-Clause 2491 */ 2492 2493var base64VLQ = __webpack_require__(215); 2494var util = __webpack_require__(983); 2495var ArraySet = __webpack_require__(837)/* .ArraySet */ .I; 2496var MappingList = __webpack_require__(740)/* .MappingList */ .H; 2497 2498/** 2499 * An instance of the SourceMapGenerator represents a source map which is 2500 * being built incrementally. You may pass an object with the following 2501 * properties: 2502 * 2503 * - file: The filename of the generated source. 2504 * - sourceRoot: A root for all relative URLs in this source map. 2505 */ 2506function SourceMapGenerator(aArgs) { 2507 if (!aArgs) { 2508 aArgs = {}; 2509 } 2510 this._file = util.getArg(aArgs, 'file', null); 2511 this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); 2512 this._skipValidation = util.getArg(aArgs, 'skipValidation', false); 2513 this._sources = new ArraySet(); 2514 this._names = new ArraySet(); 2515 this._mappings = new MappingList(); 2516 this._sourcesContents = null; 2517} 2518 2519SourceMapGenerator.prototype._version = 3; 2520 2521/** 2522 * Creates a new SourceMapGenerator based on a SourceMapConsumer 2523 * 2524 * @param aSourceMapConsumer The SourceMap. 2525 */ 2526SourceMapGenerator.fromSourceMap = 2527 function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { 2528 var sourceRoot = aSourceMapConsumer.sourceRoot; 2529 var generator = new SourceMapGenerator({ 2530 file: aSourceMapConsumer.file, 2531 sourceRoot: sourceRoot 2532 }); 2533 aSourceMapConsumer.eachMapping(function (mapping) { 2534 var newMapping = { 2535 generated: { 2536 line: mapping.generatedLine, 2537 column: mapping.generatedColumn 2538 } 2539 }; 2540 2541 if (mapping.source != null) { 2542 newMapping.source = mapping.source; 2543 if (sourceRoot != null) { 2544 newMapping.source = util.relative(sourceRoot, newMapping.source); 2545 } 2546 2547 newMapping.original = { 2548 line: mapping.originalLine, 2549 column: mapping.originalColumn 2550 }; 2551 2552 if (mapping.name != null) { 2553 newMapping.name = mapping.name; 2554 } 2555 } 2556 2557 generator.addMapping(newMapping); 2558 }); 2559 aSourceMapConsumer.sources.forEach(function (sourceFile) { 2560 var sourceRelative = sourceFile; 2561 if (sourceRoot !== null) { 2562 sourceRelative = util.relative(sourceRoot, sourceFile); 2563 } 2564 2565 if (!generator._sources.has(sourceRelative)) { 2566 generator._sources.add(sourceRelative); 2567 } 2568 2569 var content = aSourceMapConsumer.sourceContentFor(sourceFile); 2570 if (content != null) { 2571 generator.setSourceContent(sourceFile, content); 2572 } 2573 }); 2574 return generator; 2575 }; 2576 2577/** 2578 * Add a single mapping from original source line and column to the generated 2579 * source's line and column for this source map being created. The mapping 2580 * object should have the following properties: 2581 * 2582 * - generated: An object with the generated line and column positions. 2583 * - original: An object with the original line and column positions. 2584 * - source: The original source file (relative to the sourceRoot). 2585 * - name: An optional original token name for this mapping. 2586 */ 2587SourceMapGenerator.prototype.addMapping = 2588 function SourceMapGenerator_addMapping(aArgs) { 2589 var generated = util.getArg(aArgs, 'generated'); 2590 var original = util.getArg(aArgs, 'original', null); 2591 var source = util.getArg(aArgs, 'source', null); 2592 var name = util.getArg(aArgs, 'name', null); 2593 2594 if (!this._skipValidation) { 2595 this._validateMapping(generated, original, source, name); 2596 } 2597 2598 if (source != null) { 2599 source = String(source); 2600 if (!this._sources.has(source)) { 2601 this._sources.add(source); 2602 } 2603 } 2604 2605 if (name != null) { 2606 name = String(name); 2607 if (!this._names.has(name)) { 2608 this._names.add(name); 2609 } 2610 } 2611 2612 this._mappings.add({ 2613 generatedLine: generated.line, 2614 generatedColumn: generated.column, 2615 originalLine: original != null && original.line, 2616 originalColumn: original != null && original.column, 2617 source: source, 2618 name: name 2619 }); 2620 }; 2621 2622/** 2623 * Set the source content for a source file. 2624 */ 2625SourceMapGenerator.prototype.setSourceContent = 2626 function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { 2627 var source = aSourceFile; 2628 if (this._sourceRoot != null) { 2629 source = util.relative(this._sourceRoot, source); 2630 } 2631 2632 if (aSourceContent != null) { 2633 // Add the source content to the _sourcesContents map. 2634 // Create a new _sourcesContents map if the property is null. 2635 if (!this._sourcesContents) { 2636 this._sourcesContents = Object.create(null); 2637 } 2638 this._sourcesContents[util.toSetString(source)] = aSourceContent; 2639 } else if (this._sourcesContents) { 2640 // Remove the source file from the _sourcesContents map. 2641 // If the _sourcesContents map is empty, set the property to null. 2642 delete this._sourcesContents[util.toSetString(source)]; 2643 if (Object.keys(this._sourcesContents).length === 0) { 2644 this._sourcesContents = null; 2645 } 2646 } 2647 }; 2648 2649/** 2650 * Applies the mappings of a sub-source-map for a specific source file to the 2651 * source map being generated. Each mapping to the supplied source file is 2652 * rewritten using the supplied source map. Note: The resolution for the 2653 * resulting mappings is the minimium of this map and the supplied map. 2654 * 2655 * @param aSourceMapConsumer The source map to be applied. 2656 * @param aSourceFile Optional. The filename of the source file. 2657 * If omitted, SourceMapConsumer's file property will be used. 2658 * @param aSourceMapPath Optional. The dirname of the path to the source map 2659 * to be applied. If relative, it is relative to the SourceMapConsumer. 2660 * This parameter is needed when the two source maps aren't in the same 2661 * directory, and the source map to be applied contains relative source 2662 * paths. If so, those relative source paths need to be rewritten 2663 * relative to the SourceMapGenerator. 2664 */ 2665SourceMapGenerator.prototype.applySourceMap = 2666 function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { 2667 var sourceFile = aSourceFile; 2668 // If aSourceFile is omitted, we will use the file property of the SourceMap 2669 if (aSourceFile == null) { 2670 if (aSourceMapConsumer.file == null) { 2671 throw new Error( 2672 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + 2673 'or the source map\'s "file" property. Both were omitted.' 2674 ); 2675 } 2676 sourceFile = aSourceMapConsumer.file; 2677 } 2678 var sourceRoot = this._sourceRoot; 2679 // Make "sourceFile" relative if an absolute Url is passed. 2680 if (sourceRoot != null) { 2681 sourceFile = util.relative(sourceRoot, sourceFile); 2682 } 2683 // Applying the SourceMap can add and remove items from the sources and 2684 // the names array. 2685 var newSources = new ArraySet(); 2686 var newNames = new ArraySet(); 2687 2688 // Find mappings for the "sourceFile" 2689 this._mappings.unsortedForEach(function (mapping) { 2690 if (mapping.source === sourceFile && mapping.originalLine != null) { 2691 // Check if it can be mapped by the source map, then update the mapping. 2692 var original = aSourceMapConsumer.originalPositionFor({ 2693 line: mapping.originalLine, 2694 column: mapping.originalColumn 2695 }); 2696 if (original.source != null) { 2697 // Copy mapping 2698 mapping.source = original.source; 2699 if (aSourceMapPath != null) { 2700 mapping.source = util.join(aSourceMapPath, mapping.source) 2701 } 2702 if (sourceRoot != null) { 2703 mapping.source = util.relative(sourceRoot, mapping.source); 2704 } 2705 mapping.originalLine = original.line; 2706 mapping.originalColumn = original.column; 2707 if (original.name != null) { 2708 mapping.name = original.name; 2709 } 2710 } 2711 } 2712 2713 var source = mapping.source; 2714 if (source != null && !newSources.has(source)) { 2715 newSources.add(source); 2716 } 2717 2718 var name = mapping.name; 2719 if (name != null && !newNames.has(name)) { 2720 newNames.add(name); 2721 } 2722 2723 }, this); 2724 this._sources = newSources; 2725 this._names = newNames; 2726 2727 // Copy sourcesContents of applied map. 2728 aSourceMapConsumer.sources.forEach(function (sourceFile) { 2729 var content = aSourceMapConsumer.sourceContentFor(sourceFile); 2730 if (content != null) { 2731 if (aSourceMapPath != null) { 2732 sourceFile = util.join(aSourceMapPath, sourceFile); 2733 } 2734 if (sourceRoot != null) { 2735 sourceFile = util.relative(sourceRoot, sourceFile); 2736 } 2737 this.setSourceContent(sourceFile, content); 2738 } 2739 }, this); 2740 }; 2741 2742/** 2743 * A mapping can have one of the three levels of data: 2744 * 2745 * 1. Just the generated position. 2746 * 2. The Generated position, original position, and original source. 2747 * 3. Generated and original position, original source, as well as a name 2748 * token. 2749 * 2750 * To maintain consistency, we validate that any new mapping being added falls 2751 * in to one of these categories. 2752 */ 2753SourceMapGenerator.prototype._validateMapping = 2754 function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, 2755 aName) { 2756 // When aOriginal is truthy but has empty values for .line and .column, 2757 // it is most likely a programmer error. In this case we throw a very 2758 // specific error message to try to guide them the right way. 2759 // For example: https://github.com/Polymer/polymer-bundler/pull/519 2760 if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { 2761 throw new Error( 2762 'original.line and original.column are not numbers -- you probably meant to omit ' + 2763 'the original mapping entirely and only map the generated position. If so, pass ' + 2764 'null for the original mapping instead of an object with empty or null values.' 2765 ); 2766 } 2767 2768 if (aGenerated && 'line' in aGenerated && 'column' in aGenerated 2769 && aGenerated.line > 0 && aGenerated.column >= 0 2770 && !aOriginal && !aSource && !aName) { 2771 // Case 1. 2772 return; 2773 } 2774 else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated 2775 && aOriginal && 'line' in aOriginal && 'column' in aOriginal 2776 && aGenerated.line > 0 && aGenerated.column >= 0 2777 && aOriginal.line > 0 && aOriginal.column >= 0 2778 && aSource) { 2779 // Cases 2 and 3. 2780 return; 2781 } 2782 else { 2783 throw new Error('Invalid mapping: ' + JSON.stringify({ 2784 generated: aGenerated, 2785 source: aSource, 2786 original: aOriginal, 2787 name: aName 2788 })); 2789 } 2790 }; 2791 2792/** 2793 * Serialize the accumulated mappings in to the stream of base 64 VLQs 2794 * specified by the source map format. 2795 */ 2796SourceMapGenerator.prototype._serializeMappings = 2797 function SourceMapGenerator_serializeMappings() { 2798 var previousGeneratedColumn = 0; 2799 var previousGeneratedLine = 1; 2800 var previousOriginalColumn = 0; 2801 var previousOriginalLine = 0; 2802 var previousName = 0; 2803 var previousSource = 0; 2804 var result = ''; 2805 var next; 2806 var mapping; 2807 var nameIdx; 2808 var sourceIdx; 2809 2810 var mappings = this._mappings.toArray(); 2811 for (var i = 0, len = mappings.length; i < len; i++) { 2812 mapping = mappings[i]; 2813 next = '' 2814 2815 if (mapping.generatedLine !== previousGeneratedLine) { 2816 previousGeneratedColumn = 0; 2817 while (mapping.generatedLine !== previousGeneratedLine) { 2818 next += ';'; 2819 previousGeneratedLine++; 2820 } 2821 } 2822 else { 2823 if (i > 0) { 2824 if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { 2825 continue; 2826 } 2827 next += ','; 2828 } 2829 } 2830 2831 next += base64VLQ.encode(mapping.generatedColumn 2832 - previousGeneratedColumn); 2833 previousGeneratedColumn = mapping.generatedColumn; 2834 2835 if (mapping.source != null) { 2836 sourceIdx = this._sources.indexOf(mapping.source); 2837 next += base64VLQ.encode(sourceIdx - previousSource); 2838 previousSource = sourceIdx; 2839 2840 // lines are stored 0-based in SourceMap spec version 3 2841 next += base64VLQ.encode(mapping.originalLine - 1 2842 - previousOriginalLine); 2843 previousOriginalLine = mapping.originalLine - 1; 2844 2845 next += base64VLQ.encode(mapping.originalColumn 2846 - previousOriginalColumn); 2847 previousOriginalColumn = mapping.originalColumn; 2848 2849 if (mapping.name != null) { 2850 nameIdx = this._names.indexOf(mapping.name); 2851 next += base64VLQ.encode(nameIdx - previousName); 2852 previousName = nameIdx; 2853 } 2854 } 2855 2856 result += next; 2857 } 2858 2859 return result; 2860 }; 2861 2862SourceMapGenerator.prototype._generateSourcesContent = 2863 function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { 2864 return aSources.map(function (source) { 2865 if (!this._sourcesContents) { 2866 return null; 2867 } 2868 if (aSourceRoot != null) { 2869 source = util.relative(aSourceRoot, source); 2870 } 2871 var key = util.toSetString(source); 2872 return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) 2873 ? this._sourcesContents[key] 2874 : null; 2875 }, this); 2876 }; 2877 2878/** 2879 * Externalize the source map. 2880 */ 2881SourceMapGenerator.prototype.toJSON = 2882 function SourceMapGenerator_toJSON() { 2883 var map = { 2884 version: this._version, 2885 sources: this._sources.toArray(), 2886 names: this._names.toArray(), 2887 mappings: this._serializeMappings() 2888 }; 2889 if (this._file != null) { 2890 map.file = this._file; 2891 } 2892 if (this._sourceRoot != null) { 2893 map.sourceRoot = this._sourceRoot; 2894 } 2895 if (this._sourcesContents) { 2896 map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); 2897 } 2898 2899 return map; 2900 }; 2901 2902/** 2903 * Render the source map being generated to a string. 2904 */ 2905SourceMapGenerator.prototype.toString = 2906 function SourceMapGenerator_toString() { 2907 return JSON.stringify(this.toJSON()); 2908 }; 2909 2910exports.h = SourceMapGenerator; 2911 2912 2913/***/ }), 2914 2915/***/ 990: 2916/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 2917 2918var __webpack_unused_export__; 2919/* -*- Mode: js; js-indent-level: 2; -*- */ 2920/* 2921 * Copyright 2011 Mozilla Foundation and contributors 2922 * Licensed under the New BSD license. See LICENSE or: 2923 * http://opensource.org/licenses/BSD-3-Clause 2924 */ 2925 2926var SourceMapGenerator = __webpack_require__(341)/* .SourceMapGenerator */ .h; 2927var util = __webpack_require__(983); 2928 2929// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other 2930// operating systems these days (capturing the result). 2931var REGEX_NEWLINE = /(\r?\n)/; 2932 2933// Newline character code for charCodeAt() comparisons 2934var NEWLINE_CODE = 10; 2935 2936// Private symbol for identifying `SourceNode`s when multiple versions of 2937// the source-map library are loaded. This MUST NOT CHANGE across 2938// versions! 2939var isSourceNode = "$$$isSourceNode$$$"; 2940 2941/** 2942 * SourceNodes provide a way to abstract over interpolating/concatenating 2943 * snippets of generated JavaScript source code while maintaining the line and 2944 * column information associated with the original source code. 2945 * 2946 * @param aLine The original line number. 2947 * @param aColumn The original column number. 2948 * @param aSource The original source's filename. 2949 * @param aChunks Optional. An array of strings which are snippets of 2950 * generated JS, or other SourceNodes. 2951 * @param aName The original identifier. 2952 */ 2953function SourceNode(aLine, aColumn, aSource, aChunks, aName) { 2954 this.children = []; 2955 this.sourceContents = {}; 2956 this.line = aLine == null ? null : aLine; 2957 this.column = aColumn == null ? null : aColumn; 2958 this.source = aSource == null ? null : aSource; 2959 this.name = aName == null ? null : aName; 2960 this[isSourceNode] = true; 2961 if (aChunks != null) this.add(aChunks); 2962} 2963 2964/** 2965 * Creates a SourceNode from generated code and a SourceMapConsumer. 2966 * 2967 * @param aGeneratedCode The generated code 2968 * @param aSourceMapConsumer The SourceMap for the generated code 2969 * @param aRelativePath Optional. The path that relative sources in the 2970 * SourceMapConsumer should be relative to. 2971 */ 2972SourceNode.fromStringWithSourceMap = 2973 function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { 2974 // The SourceNode we want to fill with the generated code 2975 // and the SourceMap 2976 var node = new SourceNode(); 2977 2978 // All even indices of this array are one line of the generated code, 2979 // while all odd indices are the newlines between two adjacent lines 2980 // (since `REGEX_NEWLINE` captures its match). 2981 // Processed fragments are accessed by calling `shiftNextLine`. 2982 var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); 2983 var remainingLinesIndex = 0; 2984 var shiftNextLine = function() { 2985 var lineContents = getNextLine(); 2986 // The last line of a file might not have a newline. 2987 var newLine = getNextLine() || ""; 2988 return lineContents + newLine; 2989 2990 function getNextLine() { 2991 return remainingLinesIndex < remainingLines.length ? 2992 remainingLines[remainingLinesIndex++] : undefined; 2993 } 2994 }; 2995 2996 // We need to remember the position of "remainingLines" 2997 var lastGeneratedLine = 1, lastGeneratedColumn = 0; 2998 2999 // The generate SourceNodes we need a code range. 3000 // To extract it current and last mapping is used. 3001 // Here we store the last mapping. 3002 var lastMapping = null; 3003 3004 aSourceMapConsumer.eachMapping(function (mapping) { 3005 if (lastMapping !== null) { 3006 // We add the code from "lastMapping" to "mapping": 3007 // First check if there is a new line in between. 3008 if (lastGeneratedLine < mapping.generatedLine) { 3009 // Associate first line with "lastMapping" 3010 addMappingWithCode(lastMapping, shiftNextLine()); 3011 lastGeneratedLine++; 3012 lastGeneratedColumn = 0; 3013 // The remaining code is added without mapping 3014 } else { 3015 // There is no new line in between. 3016 // Associate the code between "lastGeneratedColumn" and 3017 // "mapping.generatedColumn" with "lastMapping" 3018 var nextLine = remainingLines[remainingLinesIndex] || ''; 3019 var code = nextLine.substr(0, mapping.generatedColumn - 3020 lastGeneratedColumn); 3021 remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - 3022 lastGeneratedColumn); 3023 lastGeneratedColumn = mapping.generatedColumn; 3024 addMappingWithCode(lastMapping, code); 3025 // No more remaining code, continue 3026 lastMapping = mapping; 3027 return; 3028 } 3029 } 3030 // We add the generated code until the first mapping 3031 // to the SourceNode without any mapping. 3032 // Each line is added as separate string. 3033 while (lastGeneratedLine < mapping.generatedLine) { 3034 node.add(shiftNextLine()); 3035 lastGeneratedLine++; 3036 } 3037 if (lastGeneratedColumn < mapping.generatedColumn) { 3038 var nextLine = remainingLines[remainingLinesIndex] || ''; 3039 node.add(nextLine.substr(0, mapping.generatedColumn)); 3040 remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); 3041 lastGeneratedColumn = mapping.generatedColumn; 3042 } 3043 lastMapping = mapping; 3044 }, this); 3045 // We have processed all mappings. 3046 if (remainingLinesIndex < remainingLines.length) { 3047 if (lastMapping) { 3048 // Associate the remaining code in the current line with "lastMapping" 3049 addMappingWithCode(lastMapping, shiftNextLine()); 3050 } 3051 // and add the remaining lines without any mapping 3052 node.add(remainingLines.splice(remainingLinesIndex).join("")); 3053 } 3054 3055 // Copy sourcesContent into SourceNode 3056 aSourceMapConsumer.sources.forEach(function (sourceFile) { 3057 var content = aSourceMapConsumer.sourceContentFor(sourceFile); 3058 if (content != null) { 3059 if (aRelativePath != null) { 3060 sourceFile = util.join(aRelativePath, sourceFile); 3061 } 3062 node.setSourceContent(sourceFile, content); 3063 } 3064 }); 3065 3066 return node; 3067 3068 function addMappingWithCode(mapping, code) { 3069 if (mapping === null || mapping.source === undefined) { 3070 node.add(code); 3071 } else { 3072 var source = aRelativePath 3073 ? util.join(aRelativePath, mapping.source) 3074 : mapping.source; 3075 node.add(new SourceNode(mapping.originalLine, 3076 mapping.originalColumn, 3077 source, 3078 code, 3079 mapping.name)); 3080 } 3081 } 3082 }; 3083 3084/** 3085 * Add a chunk of generated JS to this source node. 3086 * 3087 * @param aChunk A string snippet of generated JS code, another instance of 3088 * SourceNode, or an array where each member is one of those things. 3089 */ 3090SourceNode.prototype.add = function SourceNode_add(aChunk) { 3091 if (Array.isArray(aChunk)) { 3092 aChunk.forEach(function (chunk) { 3093 this.add(chunk); 3094 }, this); 3095 } 3096 else if (aChunk[isSourceNode] || typeof aChunk === "string") { 3097 if (aChunk) { 3098 this.children.push(aChunk); 3099 } 3100 } 3101 else { 3102 throw new TypeError( 3103 "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk 3104 ); 3105 } 3106 return this; 3107}; 3108 3109/** 3110 * Add a chunk of generated JS to the beginning of this source node. 3111 * 3112 * @param aChunk A string snippet of generated JS code, another instance of 3113 * SourceNode, or an array where each member is one of those things. 3114 */ 3115SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { 3116 if (Array.isArray(aChunk)) { 3117 for (var i = aChunk.length-1; i >= 0; i--) { 3118 this.prepend(aChunk[i]); 3119 } 3120 } 3121 else if (aChunk[isSourceNode] || typeof aChunk === "string") { 3122 this.children.unshift(aChunk); 3123 } 3124 else { 3125 throw new TypeError( 3126 "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk 3127 ); 3128 } 3129 return this; 3130}; 3131 3132/** 3133 * Walk over the tree of JS snippets in this node and its children. The 3134 * walking function is called once for each snippet of JS and is passed that 3135 * snippet and the its original associated source's line/column location. 3136 * 3137 * @param aFn The traversal function. 3138 */ 3139SourceNode.prototype.walk = function SourceNode_walk(aFn) { 3140 var chunk; 3141 for (var i = 0, len = this.children.length; i < len; i++) { 3142 chunk = this.children[i]; 3143 if (chunk[isSourceNode]) { 3144 chunk.walk(aFn); 3145 } 3146 else { 3147 if (chunk !== '') { 3148 aFn(chunk, { source: this.source, 3149 line: this.line, 3150 column: this.column, 3151 name: this.name }); 3152 } 3153 } 3154 } 3155}; 3156 3157/** 3158 * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between 3159 * each of `this.children`. 3160 * 3161 * @param aSep The separator. 3162 */ 3163SourceNode.prototype.join = function SourceNode_join(aSep) { 3164 var newChildren; 3165 var i; 3166 var len = this.children.length; 3167 if (len > 0) { 3168 newChildren = []; 3169 for (i = 0; i < len-1; i++) { 3170 newChildren.push(this.children[i]); 3171 newChildren.push(aSep); 3172 } 3173 newChildren.push(this.children[i]); 3174 this.children = newChildren; 3175 } 3176 return this; 3177}; 3178 3179/** 3180 * Call String.prototype.replace on the very right-most source snippet. Useful 3181 * for trimming whitespace from the end of a source node, etc. 3182 * 3183 * @param aPattern The pattern to replace. 3184 * @param aReplacement The thing to replace the pattern with. 3185 */ 3186SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { 3187 var lastChild = this.children[this.children.length - 1]; 3188 if (lastChild[isSourceNode]) { 3189 lastChild.replaceRight(aPattern, aReplacement); 3190 } 3191 else if (typeof lastChild === 'string') { 3192 this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); 3193 } 3194 else { 3195 this.children.push(''.replace(aPattern, aReplacement)); 3196 } 3197 return this; 3198}; 3199 3200/** 3201 * Set the source content for a source file. This will be added to the SourceMapGenerator 3202 * in the sourcesContent field. 3203 * 3204 * @param aSourceFile The filename of the source file 3205 * @param aSourceContent The content of the source file 3206 */ 3207SourceNode.prototype.setSourceContent = 3208 function SourceNode_setSourceContent(aSourceFile, aSourceContent) { 3209 this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; 3210 }; 3211 3212/** 3213 * Walk over the tree of SourceNodes. The walking function is called for each 3214 * source file content and is passed the filename and source content. 3215 * 3216 * @param aFn The traversal function. 3217 */ 3218SourceNode.prototype.walkSourceContents = 3219 function SourceNode_walkSourceContents(aFn) { 3220 for (var i = 0, len = this.children.length; i < len; i++) { 3221 if (this.children[i][isSourceNode]) { 3222 this.children[i].walkSourceContents(aFn); 3223 } 3224 } 3225 3226 var sources = Object.keys(this.sourceContents); 3227 for (var i = 0, len = sources.length; i < len; i++) { 3228 aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); 3229 } 3230 }; 3231 3232/** 3233 * Return the string representation of this source node. Walks over the tree 3234 * and concatenates all the various snippets together to one string. 3235 */ 3236SourceNode.prototype.toString = function SourceNode_toString() { 3237 var str = ""; 3238 this.walk(function (chunk) { 3239 str += chunk; 3240 }); 3241 return str; 3242}; 3243 3244/** 3245 * Returns the string representation of this source node along with a source 3246 * map. 3247 */ 3248SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { 3249 var generated = { 3250 code: "", 3251 line: 1, 3252 column: 0 3253 }; 3254 var map = new SourceMapGenerator(aArgs); 3255 var sourceMappingActive = false; 3256 var lastOriginalSource = null; 3257 var lastOriginalLine = null; 3258 var lastOriginalColumn = null; 3259 var lastOriginalName = null; 3260 this.walk(function (chunk, original) { 3261 generated.code += chunk; 3262 if (original.source !== null 3263 && original.line !== null 3264 && original.column !== null) { 3265 if(lastOriginalSource !== original.source 3266 || lastOriginalLine !== original.line 3267 || lastOriginalColumn !== original.column 3268 || lastOriginalName !== original.name) { 3269 map.addMapping({ 3270 source: original.source, 3271 original: { 3272 line: original.line, 3273 column: original.column 3274 }, 3275 generated: { 3276 line: generated.line, 3277 column: generated.column 3278 }, 3279 name: original.name 3280 }); 3281 } 3282 lastOriginalSource = original.source; 3283 lastOriginalLine = original.line; 3284 lastOriginalColumn = original.column; 3285 lastOriginalName = original.name; 3286 sourceMappingActive = true; 3287 } else if (sourceMappingActive) { 3288 map.addMapping({ 3289 generated: { 3290 line: generated.line, 3291 column: generated.column 3292 } 3293 }); 3294 lastOriginalSource = null; 3295 sourceMappingActive = false; 3296 } 3297 for (var idx = 0, length = chunk.length; idx < length; idx++) { 3298 if (chunk.charCodeAt(idx) === NEWLINE_CODE) { 3299 generated.line++; 3300 generated.column = 0; 3301 // Mappings end at eol 3302 if (idx + 1 === length) { 3303 lastOriginalSource = null; 3304 sourceMappingActive = false; 3305 } else if (sourceMappingActive) { 3306 map.addMapping({ 3307 source: original.source, 3308 original: { 3309 line: original.line, 3310 column: original.column 3311 }, 3312 generated: { 3313 line: generated.line, 3314 column: generated.column 3315 }, 3316 name: original.name 3317 }); 3318 } 3319 } else { 3320 generated.column++; 3321 } 3322 } 3323 }); 3324 this.walkSourceContents(function (sourceFile, sourceContent) { 3325 map.setSourceContent(sourceFile, sourceContent); 3326 }); 3327 3328 return { code: generated.code, map: map }; 3329}; 3330 3331__webpack_unused_export__ = SourceNode; 3332 3333 3334/***/ }), 3335 3336/***/ 983: 3337/***/ ((__unused_webpack_module, exports) => { 3338 3339/* -*- Mode: js; js-indent-level: 2; -*- */ 3340/* 3341 * Copyright 2011 Mozilla Foundation and contributors 3342 * Licensed under the New BSD license. See LICENSE or: 3343 * http://opensource.org/licenses/BSD-3-Clause 3344 */ 3345 3346/** 3347 * This is a helper function for getting values from parameter/options 3348 * objects. 3349 * 3350 * @param args The object we are extracting values from 3351 * @param name The name of the property we are getting. 3352 * @param defaultValue An optional value to return if the property is missing 3353 * from the object. If this is not specified and the property is missing, an 3354 * error will be thrown. 3355 */ 3356function getArg(aArgs, aName, aDefaultValue) { 3357 if (aName in aArgs) { 3358 return aArgs[aName]; 3359 } else if (arguments.length === 3) { 3360 return aDefaultValue; 3361 } else { 3362 throw new Error('"' + aName + '" is a required argument.'); 3363 } 3364} 3365exports.getArg = getArg; 3366 3367var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/; 3368var dataUrlRegexp = /^data:.+\,.+$/; 3369 3370function urlParse(aUrl) { 3371 var match = aUrl.match(urlRegexp); 3372 if (!match) { 3373 return null; 3374 } 3375 return { 3376 scheme: match[1], 3377 auth: match[2], 3378 host: match[3], 3379 port: match[4], 3380 path: match[5] 3381 }; 3382} 3383exports.urlParse = urlParse; 3384 3385function urlGenerate(aParsedUrl) { 3386 var url = ''; 3387 if (aParsedUrl.scheme) { 3388 url += aParsedUrl.scheme + ':'; 3389 } 3390 url += '//'; 3391 if (aParsedUrl.auth) { 3392 url += aParsedUrl.auth + '@'; 3393 } 3394 if (aParsedUrl.host) { 3395 url += aParsedUrl.host; 3396 } 3397 if (aParsedUrl.port) { 3398 url += ":" + aParsedUrl.port 3399 } 3400 if (aParsedUrl.path) { 3401 url += aParsedUrl.path; 3402 } 3403 return url; 3404} 3405exports.urlGenerate = urlGenerate; 3406 3407/** 3408 * Normalizes a path, or the path portion of a URL: 3409 * 3410 * - Replaces consecutive slashes with one slash. 3411 * - Removes unnecessary '.' parts. 3412 * - Removes unnecessary '<dir>/..' parts. 3413 * 3414 * Based on code in the Node.js 'path' core module. 3415 * 3416 * @param aPath The path or url to normalize. 3417 */ 3418function normalize(aPath) { 3419 var path = aPath; 3420 var url = urlParse(aPath); 3421 if (url) { 3422 if (!url.path) { 3423 return aPath; 3424 } 3425 path = url.path; 3426 } 3427 var isAbsolute = exports.isAbsolute(path); 3428 3429 var parts = path.split(/\/+/); 3430 for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { 3431 part = parts[i]; 3432 if (part === '.') { 3433 parts.splice(i, 1); 3434 } else if (part === '..') { 3435 up++; 3436 } else if (up > 0) { 3437 if (part === '') { 3438 // The first part is blank if the path is absolute. Trying to go 3439 // above the root is a no-op. Therefore we can remove all '..' parts 3440 // directly after the root. 3441 parts.splice(i + 1, up); 3442 up = 0; 3443 } else { 3444 parts.splice(i, 2); 3445 up--; 3446 } 3447 } 3448 } 3449 path = parts.join('/'); 3450 3451 if (path === '') { 3452 path = isAbsolute ? '/' : '.'; 3453 } 3454 3455 if (url) { 3456 url.path = path; 3457 return urlGenerate(url); 3458 } 3459 return path; 3460} 3461exports.normalize = normalize; 3462 3463/** 3464 * Joins two paths/URLs. 3465 * 3466 * @param aRoot The root path or URL. 3467 * @param aPath The path or URL to be joined with the root. 3468 * 3469 * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a 3470 * scheme-relative URL: Then the scheme of aRoot, if any, is prepended 3471 * first. 3472 * - Otherwise aPath is a path. If aRoot is a URL, then its path portion 3473 * is updated with the result and aRoot is returned. Otherwise the result 3474 * is returned. 3475 * - If aPath is absolute, the result is aPath. 3476 * - Otherwise the two paths are joined with a slash. 3477 * - Joining for example 'http://' and 'www.example.com' is also supported. 3478 */ 3479function join(aRoot, aPath) { 3480 if (aRoot === "") { 3481 aRoot = "."; 3482 } 3483 if (aPath === "") { 3484 aPath = "."; 3485 } 3486 var aPathUrl = urlParse(aPath); 3487 var aRootUrl = urlParse(aRoot); 3488 if (aRootUrl) { 3489 aRoot = aRootUrl.path || '/'; 3490 } 3491 3492 // `join(foo, '//www.example.org')` 3493 if (aPathUrl && !aPathUrl.scheme) { 3494 if (aRootUrl) { 3495 aPathUrl.scheme = aRootUrl.scheme; 3496 } 3497 return urlGenerate(aPathUrl); 3498 } 3499 3500 if (aPathUrl || aPath.match(dataUrlRegexp)) { 3501 return aPath; 3502 } 3503 3504 // `join('http://', 'www.example.com')` 3505 if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { 3506 aRootUrl.host = aPath; 3507 return urlGenerate(aRootUrl); 3508 } 3509 3510 var joined = aPath.charAt(0) === '/' 3511 ? aPath 3512 : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); 3513 3514 if (aRootUrl) { 3515 aRootUrl.path = joined; 3516 return urlGenerate(aRootUrl); 3517 } 3518 return joined; 3519} 3520exports.join = join; 3521 3522exports.isAbsolute = function (aPath) { 3523 return aPath.charAt(0) === '/' || urlRegexp.test(aPath); 3524}; 3525 3526/** 3527 * Make a path relative to a URL or another path. 3528 * 3529 * @param aRoot The root path or URL. 3530 * @param aPath The path or URL to be made relative to aRoot. 3531 */ 3532function relative(aRoot, aPath) { 3533 if (aRoot === "") { 3534 aRoot = "."; 3535 } 3536 3537 aRoot = aRoot.replace(/\/$/, ''); 3538 3539 // It is possible for the path to be above the root. In this case, simply 3540 // checking whether the root is a prefix of the path won't work. Instead, we 3541 // need to remove components from the root one by one, until either we find 3542 // a prefix that fits, or we run out of components to remove. 3543 var level = 0; 3544 while (aPath.indexOf(aRoot + '/') !== 0) { 3545 var index = aRoot.lastIndexOf("/"); 3546 if (index < 0) { 3547 return aPath; 3548 } 3549 3550 // If the only part of the root that is left is the scheme (i.e. http://, 3551 // file:///, etc.), one or more slashes (/), or simply nothing at all, we 3552 // have exhausted all components, so the path is not relative to the root. 3553 aRoot = aRoot.slice(0, index); 3554 if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { 3555 return aPath; 3556 } 3557 3558 ++level; 3559 } 3560 3561 // Make sure we add a "../" for each component we removed from the root. 3562 return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); 3563} 3564exports.relative = relative; 3565 3566var supportsNullProto = (function () { 3567 var obj = Object.create(null); 3568 return !('__proto__' in obj); 3569}()); 3570 3571function identity (s) { 3572 return s; 3573} 3574 3575/** 3576 * Because behavior goes wacky when you set `__proto__` on objects, we 3577 * have to prefix all the strings in our set with an arbitrary character. 3578 * 3579 * See https://github.com/mozilla/source-map/pull/31 and 3580 * https://github.com/mozilla/source-map/issues/30 3581 * 3582 * @param String aStr 3583 */ 3584function toSetString(aStr) { 3585 if (isProtoString(aStr)) { 3586 return '$' + aStr; 3587 } 3588 3589 return aStr; 3590} 3591exports.toSetString = supportsNullProto ? identity : toSetString; 3592 3593function fromSetString(aStr) { 3594 if (isProtoString(aStr)) { 3595 return aStr.slice(1); 3596 } 3597 3598 return aStr; 3599} 3600exports.fromSetString = supportsNullProto ? identity : fromSetString; 3601 3602function isProtoString(s) { 3603 if (!s) { 3604 return false; 3605 } 3606 3607 var length = s.length; 3608 3609 if (length < 9 /* "__proto__".length */) { 3610 return false; 3611 } 3612 3613 if (s.charCodeAt(length - 1) !== 95 /* '_' */ || 3614 s.charCodeAt(length - 2) !== 95 /* '_' */ || 3615 s.charCodeAt(length - 3) !== 111 /* 'o' */ || 3616 s.charCodeAt(length - 4) !== 116 /* 't' */ || 3617 s.charCodeAt(length - 5) !== 111 /* 'o' */ || 3618 s.charCodeAt(length - 6) !== 114 /* 'r' */ || 3619 s.charCodeAt(length - 7) !== 112 /* 'p' */ || 3620 s.charCodeAt(length - 8) !== 95 /* '_' */ || 3621 s.charCodeAt(length - 9) !== 95 /* '_' */) { 3622 return false; 3623 } 3624 3625 for (var i = length - 10; i >= 0; i--) { 3626 if (s.charCodeAt(i) !== 36 /* '$' */) { 3627 return false; 3628 } 3629 } 3630 3631 return true; 3632} 3633 3634/** 3635 * Comparator between two mappings where the original positions are compared. 3636 * 3637 * Optionally pass in `true` as `onlyCompareGenerated` to consider two 3638 * mappings with the same original source/line/column, but different generated 3639 * line and column the same. Useful when searching for a mapping with a 3640 * stubbed out mapping. 3641 */ 3642function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { 3643 var cmp = strcmp(mappingA.source, mappingB.source); 3644 if (cmp !== 0) { 3645 return cmp; 3646 } 3647 3648 cmp = mappingA.originalLine - mappingB.originalLine; 3649 if (cmp !== 0) { 3650 return cmp; 3651 } 3652 3653 cmp = mappingA.originalColumn - mappingB.originalColumn; 3654 if (cmp !== 0 || onlyCompareOriginal) { 3655 return cmp; 3656 } 3657 3658 cmp = mappingA.generatedColumn - mappingB.generatedColumn; 3659 if (cmp !== 0) { 3660 return cmp; 3661 } 3662 3663 cmp = mappingA.generatedLine - mappingB.generatedLine; 3664 if (cmp !== 0) { 3665 return cmp; 3666 } 3667 3668 return strcmp(mappingA.name, mappingB.name); 3669} 3670exports.compareByOriginalPositions = compareByOriginalPositions; 3671 3672/** 3673 * Comparator between two mappings with deflated source and name indices where 3674 * the generated positions are compared. 3675 * 3676 * Optionally pass in `true` as `onlyCompareGenerated` to consider two 3677 * mappings with the same generated line and column, but different 3678 * source/name/original line and column the same. Useful when searching for a 3679 * mapping with a stubbed out mapping. 3680 */ 3681function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { 3682 var cmp = mappingA.generatedLine - mappingB.generatedLine; 3683 if (cmp !== 0) { 3684 return cmp; 3685 } 3686 3687 cmp = mappingA.generatedColumn - mappingB.generatedColumn; 3688 if (cmp !== 0 || onlyCompareGenerated) { 3689 return cmp; 3690 } 3691 3692 cmp = strcmp(mappingA.source, mappingB.source); 3693 if (cmp !== 0) { 3694 return cmp; 3695 } 3696 3697 cmp = mappingA.originalLine - mappingB.originalLine; 3698 if (cmp !== 0) { 3699 return cmp; 3700 } 3701 3702 cmp = mappingA.originalColumn - mappingB.originalColumn; 3703 if (cmp !== 0) { 3704 return cmp; 3705 } 3706 3707 return strcmp(mappingA.name, mappingB.name); 3708} 3709exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; 3710 3711function strcmp(aStr1, aStr2) { 3712 if (aStr1 === aStr2) { 3713 return 0; 3714 } 3715 3716 if (aStr1 === null) { 3717 return 1; // aStr2 !== null 3718 } 3719 3720 if (aStr2 === null) { 3721 return -1; // aStr1 !== null 3722 } 3723 3724 if (aStr1 > aStr2) { 3725 return 1; 3726 } 3727 3728 return -1; 3729} 3730 3731/** 3732 * Comparator between two mappings with inflated source and name strings where 3733 * the generated positions are compared. 3734 */ 3735function compareByGeneratedPositionsInflated(mappingA, mappingB) { 3736 var cmp = mappingA.generatedLine - mappingB.generatedLine; 3737 if (cmp !== 0) { 3738 return cmp; 3739 } 3740 3741 cmp = mappingA.generatedColumn - mappingB.generatedColumn; 3742 if (cmp !== 0) { 3743 return cmp; 3744 } 3745 3746 cmp = strcmp(mappingA.source, mappingB.source); 3747 if (cmp !== 0) { 3748 return cmp; 3749 } 3750 3751 cmp = mappingA.originalLine - mappingB.originalLine; 3752 if (cmp !== 0) { 3753 return cmp; 3754 } 3755 3756 cmp = mappingA.originalColumn - mappingB.originalColumn; 3757 if (cmp !== 0) { 3758 return cmp; 3759 } 3760 3761 return strcmp(mappingA.name, mappingB.name); 3762} 3763exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; 3764 3765/** 3766 * Strip any JSON XSSI avoidance prefix from the string (as documented 3767 * in the source maps specification), and then parse the string as 3768 * JSON. 3769 */ 3770function parseSourceMapInput(str) { 3771 return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, '')); 3772} 3773exports.parseSourceMapInput = parseSourceMapInput; 3774 3775/** 3776 * Compute the URL of a source given the the source root, the source's 3777 * URL, and the source map's URL. 3778 */ 3779function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) { 3780 sourceURL = sourceURL || ''; 3781 3782 if (sourceRoot) { 3783 // This follows what Chrome does. 3784 if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') { 3785 sourceRoot += '/'; 3786 } 3787 // The spec says: 3788 // Line 4: An optional source root, useful for relocating source 3789 // files on a server or removing repeated values in the 3790 // “sources” entry. This value is prepended to the individual 3791 // entries in the “source” field. 3792 sourceURL = sourceRoot + sourceURL; 3793 } 3794 3795 // Historically, SourceMapConsumer did not take the sourceMapURL as 3796 // a parameter. This mode is still somewhat supported, which is why 3797 // this code block is conditional. However, it's preferable to pass 3798 // the source map URL to SourceMapConsumer, so that this function 3799 // can implement the source URL resolution algorithm as outlined in 3800 // the spec. This block is basically the equivalent of: 3801 // new URL(sourceURL, sourceMapURL).toString() 3802 // ... except it avoids using URL, which wasn't available in the 3803 // older releases of node still supported by this library. 3804 // 3805 // The spec says: 3806 // If the sources are not absolute URLs after prepending of the 3807 // “sourceRoot”, the sources are resolved relative to the 3808 // SourceMap (like resolving script src in a html document). 3809 if (sourceMapURL) { 3810 var parsed = urlParse(sourceMapURL); 3811 if (!parsed) { 3812 throw new Error("sourceMapURL could not be parsed"); 3813 } 3814 if (parsed.path) { 3815 // Strip the last path component, but keep the "/". 3816 var index = parsed.path.lastIndexOf('/'); 3817 if (index >= 0) { 3818 parsed.path = parsed.path.substring(0, index + 1); 3819 } 3820 } 3821 sourceURL = join(urlGenerate(parsed), sourceURL); 3822 } 3823 3824 return normalize(sourceURL); 3825} 3826exports.computeSourceURL = computeSourceURL; 3827 3828 3829/***/ }), 3830 3831/***/ 596: 3832/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 3833 3834/* 3835 * Copyright 2009-2011 Mozilla Foundation and contributors 3836 * Licensed under the New BSD license. See LICENSE.txt or: 3837 * http://opensource.org/licenses/BSD-3-Clause 3838 */ 3839/* unused reexport */ __webpack_require__(341)/* .SourceMapGenerator */ .h; 3840exports.SourceMapConsumer = __webpack_require__(327).SourceMapConsumer; 3841/* unused reexport */ __webpack_require__(990); 3842 3843 3844/***/ }), 3845 3846/***/ 747: 3847/***/ ((module) => { 3848 3849"use strict"; 3850module.exports = require("fs"); 3851 3852/***/ }), 3853 3854/***/ 282: 3855/***/ ((module) => { 3856 3857"use strict"; 3858module.exports = require("module"); 3859 3860/***/ }), 3861 3862/***/ 622: 3863/***/ ((module) => { 3864 3865"use strict"; 3866module.exports = require("path"); 3867 3868/***/ }) 3869 3870/******/ }); 3871/************************************************************************/ 3872/******/ // The module cache 3873/******/ var __webpack_module_cache__ = {}; 3874/******/ 3875/******/ // The require function 3876/******/ function __webpack_require__(moduleId) { 3877/******/ // Check if module is in cache 3878/******/ if(__webpack_module_cache__[moduleId]) { 3879/******/ return __webpack_module_cache__[moduleId].exports; 3880/******/ } 3881/******/ // Create a new module (and put it into the cache) 3882/******/ var module = __webpack_module_cache__[moduleId] = { 3883/******/ // no module.id needed 3884/******/ // no module.loaded needed 3885/******/ exports: {} 3886/******/ }; 3887/******/ 3888/******/ // Execute the module function 3889/******/ var threw = true; 3890/******/ try { 3891/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 3892/******/ threw = false; 3893/******/ } finally { 3894/******/ if(threw) delete __webpack_module_cache__[moduleId]; 3895/******/ } 3896/******/ 3897/******/ // Return the exports of the module 3898/******/ return module.exports; 3899/******/ } 3900/******/ 3901/************************************************************************/ 3902/******/ /* webpack/runtime/compat */ 3903/******/ 3904/******/ __webpack_require__.ab = __dirname + "/";/************************************************************************/ 3905/******/ // module exports must be returned from runtime so entry inlining is disabled 3906/******/ // startup 3907/******/ // Load entry module and return exports 3908/******/ return __webpack_require__(645); 3909/******/ })() 3910;