Index: third_party/WebKit/Source/devtools/front_end/sdk/SourceMap.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/SourceMap.js b/third_party/WebKit/Source/devtools/front_end/sdk/SourceMap.js |
index 598a8a3fa96359827960c5f5f2a2eedbaf401ea9..dce2f0a658ce891a2a8afb6d364e562eb96d7183 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/sdk/SourceMap.js |
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/SourceMap.js |
@@ -27,12 +27,11 @@ |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
- |
/** |
- * @constructor |
+ * @unrestricted |
*/ |
-function SourceMapV3() |
-{ |
+var SourceMapV3 = class { |
+ constructor() { |
/** @type {number} */ this.version; |
/** @type {string|undefined} */ this.file; |
/** @type {!Array.<string>} */ this.sources; |
@@ -40,142 +39,153 @@ function SourceMapV3() |
/** @type {string} */ this.mappings; |
/** @type {string|undefined} */ this.sourceRoot; |
/** @type {!Array.<string>|undefined} */ this.names; |
-} |
+ } |
+}; |
/** |
- * @constructor |
+ * @unrestricted |
*/ |
-SourceMapV3.Section = function() |
-{ |
+SourceMapV3.Section = class { |
+ constructor() { |
/** @type {!SourceMapV3} */ this.map; |
/** @type {!SourceMapV3.Offset} */ this.offset; |
+ } |
}; |
/** |
- * @constructor |
+ * @unrestricted |
*/ |
-SourceMapV3.Offset = function() |
-{ |
+SourceMapV3.Offset = class { |
+ constructor() { |
/** @type {number} */ this.line; |
/** @type {number} */ this.column; |
+ } |
}; |
/** |
- * @constructor |
- * @param {number} lineNumber |
- * @param {number} columnNumber |
- * @param {string=} sourceURL |
- * @param {number=} sourceLineNumber |
- * @param {number=} sourceColumnNumber |
- * @param {string=} name |
+ * @unrestricted |
*/ |
-WebInspector.SourceMapEntry = function(lineNumber, columnNumber, sourceURL, sourceLineNumber, sourceColumnNumber, name) |
-{ |
+WebInspector.SourceMapEntry = class { |
+ /** |
+ * @param {number} lineNumber |
+ * @param {number} columnNumber |
+ * @param {string=} sourceURL |
+ * @param {number=} sourceLineNumber |
+ * @param {number=} sourceColumnNumber |
+ * @param {string=} name |
+ */ |
+ constructor(lineNumber, columnNumber, sourceURL, sourceLineNumber, sourceColumnNumber, name) { |
this.lineNumber = lineNumber; |
this.columnNumber = columnNumber; |
this.sourceURL = sourceURL; |
this.sourceLineNumber = sourceLineNumber; |
this.sourceColumnNumber = sourceColumnNumber; |
this.name = name; |
+ } |
}; |
/** |
* @interface |
*/ |
-WebInspector.SourceMap = function() { }; |
+WebInspector.SourceMap = function() {}; |
WebInspector.SourceMap.prototype = { |
- /** |
- * @return {string} |
- */ |
- compiledURL: function() { }, |
- |
- /** |
- * @return {string} |
- */ |
- url: function() { }, |
- |
- /** |
- * @return {!Array<string>} |
- */ |
- sourceURLs: function() { }, |
- |
- /** |
- * @param {string} sourceURL |
- * @param {!WebInspector.ResourceType} contentType |
- * @return {!WebInspector.ContentProvider} |
- */ |
- sourceContentProvider: function(sourceURL, contentType) { }, |
- |
- /** |
- * @param {string} sourceURL |
- * @return {?string} |
- */ |
- embeddedContentByURL: function(sourceURL) { }, |
- |
- /** |
- * @param {number} lineNumber in compiled resource |
- * @param {number} columnNumber in compiled resource |
- * @return {?WebInspector.SourceMapEntry} |
- */ |
- findEntry: function(lineNumber, columnNumber) { }, |
- |
- /** |
- * @return {boolean} |
- */ |
- editable: function() { }, |
- |
- /** |
- * @param {!Array<!WebInspector.TextRange>} ranges |
- * @param {!Array<string>} texts |
- * @return {!Promise<?WebInspector.SourceMap.EditResult>} |
- */ |
- editCompiled: function(ranges, texts) { }, |
+ /** |
+ * @return {string} |
+ */ |
+ compiledURL: function() {}, |
+ |
+ /** |
+ * @return {string} |
+ */ |
+ url: function() {}, |
+ |
+ /** |
+ * @return {!Array<string>} |
+ */ |
+ sourceURLs: function() {}, |
+ |
+ /** |
+ * @param {string} sourceURL |
+ * @param {!WebInspector.ResourceType} contentType |
+ * @return {!WebInspector.ContentProvider} |
+ */ |
+ sourceContentProvider: function(sourceURL, contentType) {}, |
+ |
+ /** |
+ * @param {string} sourceURL |
+ * @return {?string} |
+ */ |
+ embeddedContentByURL: function(sourceURL) {}, |
+ |
+ /** |
+ * @param {number} lineNumber in compiled resource |
+ * @param {number} columnNumber in compiled resource |
+ * @return {?WebInspector.SourceMapEntry} |
+ */ |
+ findEntry: function(lineNumber, columnNumber) {}, |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ editable: function() {}, |
+ |
+ /** |
+ * @param {!Array<!WebInspector.TextRange>} ranges |
+ * @param {!Array<string>} texts |
+ * @return {!Promise<?WebInspector.SourceMap.EditResult>} |
+ */ |
+ editCompiled: function(ranges, texts) {}, |
}; |
/** |
- * @constructor |
- * @param {!WebInspector.SourceMap} map |
- * @param {!Array<!WebInspector.SourceEdit>} compiledEdits |
- * @param {!Map<string, string>} newSources |
+ * @unrestricted |
*/ |
-WebInspector.SourceMap.EditResult = function(map, compiledEdits, newSources) |
-{ |
+WebInspector.SourceMap.EditResult = class { |
+ /** |
+ * @param {!WebInspector.SourceMap} map |
+ * @param {!Array<!WebInspector.SourceEdit>} compiledEdits |
+ * @param {!Map<string, string>} newSources |
+ */ |
+ constructor(map, compiledEdits, newSources) { |
this.map = map; |
this.compiledEdits = compiledEdits; |
this.newSources = newSources; |
+ } |
}; |
/** |
* @interface |
*/ |
-WebInspector.SourceMapFactory = function() { }; |
+WebInspector.SourceMapFactory = function() {}; |
WebInspector.SourceMapFactory.prototype = { |
- /** |
- * @param {!WebInspector.Target} target |
- * @param {!WebInspector.SourceMap} sourceMap |
- * @return {!Promise<?WebInspector.SourceMap>} |
- */ |
- editableSourceMap: function(target, sourceMap) { }, |
+ /** |
+ * @param {!WebInspector.Target} target |
+ * @param {!WebInspector.SourceMap} sourceMap |
+ * @return {!Promise<?WebInspector.SourceMap>} |
+ */ |
+ editableSourceMap: function(target, sourceMap) {}, |
}; |
/** |
- * Implements Source Map V3 model. See https://github.com/google/closure-compiler/wiki/Source-Maps |
- * for format description. |
- * @constructor |
* @implements {WebInspector.SourceMap} |
- * @param {string} compiledURL |
- * @param {string} sourceMappingURL |
- * @param {!SourceMapV3} payload |
+ * @unrestricted |
*/ |
-WebInspector.TextSourceMap = function(compiledURL, sourceMappingURL, payload) |
-{ |
- if (!WebInspector.TextSourceMap.prototype._base64Map) { |
- const base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
- WebInspector.TextSourceMap.prototype._base64Map = {}; |
- for (var i = 0; i < base64Digits.length; ++i) |
- WebInspector.TextSourceMap.prototype._base64Map[base64Digits.charAt(i)] = i; |
+WebInspector.TextSourceMap = class { |
+ /** |
+ * Implements Source Map V3 model. See https://github.com/google/closure-compiler/wiki/Source-Maps |
+ * for format description. |
+ * @param {string} compiledURL |
+ * @param {string} sourceMappingURL |
+ * @param {!SourceMapV3} payload |
+ */ |
+ constructor(compiledURL, sourceMappingURL, payload) { |
+ if (!WebInspector.TextSourceMap._base64Map) { |
+ const base64Digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; |
+ WebInspector.TextSourceMap._base64Map = {}; |
+ for (var i = 0; i < base64Digits.length; ++i) |
+ WebInspector.TextSourceMap._base64Map[base64Digits.charAt(i)] = i; |
} |
this._json = payload; |
@@ -186,16 +196,15 @@ WebInspector.TextSourceMap = function(compiledURL, sourceMappingURL, payload) |
/** @type {!Map<string, !WebInspector.TextSourceMap.SourceInfo>} */ |
this._sourceInfos = new Map(); |
this._eachSection(this._parseSources.bind(this)); |
-}; |
- |
-/** |
- * @param {string} sourceMapURL |
- * @param {string} compiledURL |
- * @return {!Promise<?WebInspector.TextSourceMap>} |
- * @this {WebInspector.TextSourceMap} |
- */ |
-WebInspector.TextSourceMap.load = function(sourceMapURL, compiledURL) |
-{ |
+ } |
+ |
+ /** |
+ * @param {string} sourceMapURL |
+ * @param {string} compiledURL |
+ * @return {!Promise<?WebInspector.TextSourceMap>} |
+ * @this {WebInspector.TextSourceMap} |
+ */ |
+ static load(sourceMapURL, compiledURL) { |
var callback; |
var promise = new Promise(fulfill => callback = fulfill); |
WebInspector.multitargetNetworkManager.loadResource(sourceMapURL, contentLoaded); |
@@ -206,392 +215,382 @@ WebInspector.TextSourceMap.load = function(sourceMapURL, compiledURL) |
* @param {!Object.<string, string>} headers |
* @param {string} content |
*/ |
- function contentLoaded(statusCode, headers, content) |
- { |
- if (!content || statusCode >= 400) { |
- callback(null); |
- return; |
- } |
- |
- if (content.slice(0, 3) === ")]}") |
- content = content.substring(content.indexOf("\n")); |
- try { |
- var payload = /** @type {!SourceMapV3} */ (JSON.parse(content)); |
- var baseURL = sourceMapURL.startsWith("data:") ? compiledURL : sourceMapURL; |
- callback(new WebInspector.TextSourceMap(compiledURL, baseURL, payload)); |
- } catch (e) { |
- console.error(e); |
- WebInspector.console.warn("DevTools failed to parse SourceMap: " + sourceMapURL); |
- callback(null); |
- } |
+ function contentLoaded(statusCode, headers, content) { |
+ if (!content || statusCode >= 400) { |
+ callback(null); |
+ return; |
+ } |
+ |
+ if (content.slice(0, 3) === ')]}') |
+ content = content.substring(content.indexOf('\n')); |
+ try { |
+ var payload = /** @type {!SourceMapV3} */ (JSON.parse(content)); |
+ var baseURL = sourceMapURL.startsWith('data:') ? compiledURL : sourceMapURL; |
+ callback(new WebInspector.TextSourceMap(compiledURL, baseURL, payload)); |
+ } catch (e) { |
+ console.error(e); |
+ WebInspector.console.warn('DevTools failed to parse SourceMap: ' + sourceMapURL); |
+ callback(null); |
+ } |
} |
-}; |
- |
-WebInspector.TextSourceMap.prototype = { |
- /** |
- * @override |
- * @return {string} |
- */ |
- compiledURL: function() |
- { |
- return this._compiledURL; |
- }, |
- |
- /** |
- * @override |
- * @return {string} |
- */ |
- url: function() |
- { |
- return this._sourceMappingURL; |
- }, |
- |
- /** |
- * @override |
- * @return {!Array.<string>} |
- */ |
- sourceURLs: function() |
- { |
- return this._sourceInfos.keysArray(); |
- }, |
- |
- /** |
- * @override |
- * @param {string} sourceURL |
- * @param {!WebInspector.ResourceType} contentType |
- * @return {!WebInspector.ContentProvider} |
- */ |
- sourceContentProvider: function(sourceURL, contentType) |
- { |
- var info = this._sourceInfos.get(sourceURL); |
- if (info.content) |
- return WebInspector.StaticContentProvider.fromString(sourceURL, contentType, info.content); |
- return new WebInspector.CompilerSourceMappingContentProvider(sourceURL, contentType); |
- }, |
- |
- /** |
- * @override |
- * @param {string} sourceURL |
- * @return {?string} |
- */ |
- embeddedContentByURL: function(sourceURL) |
- { |
- if (!this._sourceInfos.has(sourceURL)) |
- return null; |
- return this._sourceInfos.get(sourceURL).content; |
- }, |
- |
- /** |
- * @override |
- * @return {boolean} |
- */ |
- editable: function() |
- { |
- return false; |
- }, |
- |
- /** |
- * @override |
- * @param {!Array<!WebInspector.TextRange>} ranges |
- * @param {!Array<string>} texts |
- * @return {!Promise<?WebInspector.SourceMap.EditResult>} |
- */ |
- editCompiled: function(ranges, texts) |
- { |
- return Promise.resolve(/** @type {?WebInspector.SourceMap.EditResult} */(null)); |
- }, |
- |
- /** |
- * @override |
- * @param {number} lineNumber in compiled resource |
- * @param {number} columnNumber in compiled resource |
- * @return {?WebInspector.SourceMapEntry} |
- */ |
- findEntry: function(lineNumber, columnNumber) |
- { |
- var first = 0; |
- var mappings = this.mappings(); |
- var count = mappings.length; |
- while (count > 1) { |
- var step = count >> 1; |
- var middle = first + step; |
- var mapping = mappings[middle]; |
- if (lineNumber < mapping.lineNumber || (lineNumber === mapping.lineNumber && columnNumber < mapping.columnNumber)) { |
- count = step; |
- } else { |
- first = middle; |
- count -= step; |
- } |
- } |
- var entry = mappings[first]; |
- if (!first && entry && (lineNumber < entry.lineNumber || (lineNumber === entry.lineNumber && columnNumber < entry.columnNumber))) |
- return null; |
- return entry; |
- }, |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {string} |
+ */ |
+ compiledURL() { |
+ return this._compiledURL; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {string} |
+ */ |
+ url() { |
+ return this._sourceMappingURL; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {!Array.<string>} |
+ */ |
+ sourceURLs() { |
+ return this._sourceInfos.keysArray(); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {string} sourceURL |
+ * @param {!WebInspector.ResourceType} contentType |
+ * @return {!WebInspector.ContentProvider} |
+ */ |
+ sourceContentProvider(sourceURL, contentType) { |
+ var info = this._sourceInfos.get(sourceURL); |
+ if (info.content) |
+ return WebInspector.StaticContentProvider.fromString(sourceURL, contentType, info.content); |
+ return new WebInspector.CompilerSourceMappingContentProvider(sourceURL, contentType); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {string} sourceURL |
+ * @return {?string} |
+ */ |
+ embeddedContentByURL(sourceURL) { |
+ if (!this._sourceInfos.has(sourceURL)) |
+ return null; |
+ return this._sourceInfos.get(sourceURL).content; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {boolean} |
+ */ |
+ editable() { |
+ return false; |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!Array<!WebInspector.TextRange>} ranges |
+ * @param {!Array<string>} texts |
+ * @return {!Promise<?WebInspector.SourceMap.EditResult>} |
+ */ |
+ editCompiled(ranges, texts) { |
+ return Promise.resolve(/** @type {?WebInspector.SourceMap.EditResult} */ (null)); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {number} lineNumber in compiled resource |
+ * @param {number} columnNumber in compiled resource |
+ * @return {?WebInspector.SourceMapEntry} |
+ */ |
+ findEntry(lineNumber, columnNumber) { |
+ var first = 0; |
+ var mappings = this.mappings(); |
+ var count = mappings.length; |
+ while (count > 1) { |
+ var step = count >> 1; |
+ var middle = first + step; |
+ var mapping = mappings[middle]; |
+ if (lineNumber < mapping.lineNumber || |
+ (lineNumber === mapping.lineNumber && columnNumber < mapping.columnNumber)) { |
+ count = step; |
+ } else { |
+ first = middle; |
+ count -= step; |
+ } |
+ } |
+ var entry = mappings[first]; |
+ if (!first && entry && |
+ (lineNumber < entry.lineNumber || (lineNumber === entry.lineNumber && columnNumber < entry.columnNumber))) |
+ return null; |
+ return entry; |
+ } |
+ |
+ /** |
+ * @param {string} sourceURL |
+ * @param {number} lineNumber |
+ * @return {?WebInspector.SourceMapEntry} |
+ */ |
+ firstSourceLineMapping(sourceURL, lineNumber) { |
+ var mappings = this._reversedMappings(sourceURL); |
+ var index = mappings.lowerBound(lineNumber, lineComparator); |
+ if (index >= mappings.length || mappings[index].sourceLineNumber !== lineNumber) |
+ return null; |
+ return mappings[index]; |
/** |
- * @param {string} sourceURL |
* @param {number} lineNumber |
- * @return {?WebInspector.SourceMapEntry} |
- */ |
- firstSourceLineMapping: function(sourceURL, lineNumber) |
- { |
- var mappings = this._reversedMappings(sourceURL); |
- var index = mappings.lowerBound(lineNumber, lineComparator); |
- if (index >= mappings.length || mappings[index].sourceLineNumber !== lineNumber) |
- return null; |
- return mappings[index]; |
- |
- /** |
- * @param {number} lineNumber |
- * @param {!WebInspector.SourceMapEntry} mapping |
- * @return {number} |
- */ |
- function lineComparator(lineNumber, mapping) |
- { |
- return lineNumber - mapping.sourceLineNumber; |
- } |
- }, |
- |
- /** |
- * @return {!Array<!WebInspector.SourceMapEntry>} |
- */ |
- mappings: function() |
- { |
- if (this._mappings === null) { |
- this._mappings = []; |
- this._eachSection(this._parseMap.bind(this)); |
- this._json = null; |
- } |
- return /** @type {!Array<!WebInspector.SourceMapEntry>} */ (this._mappings); |
- }, |
- |
- /** |
- * @param {string} sourceURL |
- * @return {!Array.<!WebInspector.SourceMapEntry>} |
+ * @param {!WebInspector.SourceMapEntry} mapping |
+ * @return {number} |
*/ |
- _reversedMappings: function(sourceURL) |
- { |
- if (!this._sourceInfos.has(sourceURL)) |
- return []; |
- var mappings = this.mappings(); |
- var info = this._sourceInfos.get(sourceURL); |
- if (info.reverseMappings === null) |
- info.reverseMappings = mappings.filter((mapping) => mapping.sourceURL === sourceURL).sort(sourceMappingComparator); |
- return info.reverseMappings; |
- |
- /** |
- * @param {!WebInspector.SourceMapEntry} a |
- * @param {!WebInspector.SourceMapEntry} b |
- * @return {number} |
- */ |
- function sourceMappingComparator(a, b) |
- { |
- if (a.sourceLineNumber !== b.sourceLineNumber) |
- return a.sourceLineNumber - b.sourceLineNumber; |
- if (a.sourceColumnNumber !== b.sourceColumnNumber) |
- return a.sourceColumnNumber - b.sourceColumnNumber; |
- |
- if (a.lineNumber !== b.lineNumber) |
- return a.lineNumber - b.lineNumber; |
- |
- return a.columnNumber - b.columnNumber; |
- } |
- }, |
+ function lineComparator(lineNumber, mapping) { |
+ return lineNumber - mapping.sourceLineNumber; |
+ } |
+ } |
+ |
+ /** |
+ * @return {!Array<!WebInspector.SourceMapEntry>} |
+ */ |
+ mappings() { |
+ if (this._mappings === null) { |
+ this._mappings = []; |
+ this._eachSection(this._parseMap.bind(this)); |
+ this._json = null; |
+ } |
+ return /** @type {!Array<!WebInspector.SourceMapEntry>} */ (this._mappings); |
+ } |
+ |
+ /** |
+ * @param {string} sourceURL |
+ * @return {!Array.<!WebInspector.SourceMapEntry>} |
+ */ |
+ _reversedMappings(sourceURL) { |
+ if (!this._sourceInfos.has(sourceURL)) |
+ return []; |
+ var mappings = this.mappings(); |
+ var info = this._sourceInfos.get(sourceURL); |
+ if (info.reverseMappings === null) |
+ info.reverseMappings = |
+ mappings.filter((mapping) => mapping.sourceURL === sourceURL).sort(sourceMappingComparator); |
+ return info.reverseMappings; |
/** |
- * @param {function(!SourceMapV3, number, number)} callback |
+ * @param {!WebInspector.SourceMapEntry} a |
+ * @param {!WebInspector.SourceMapEntry} b |
+ * @return {number} |
*/ |
- _eachSection: function(callback) { |
- if (!this._json.sections) { |
- callback(this._json, 0, 0); |
- return; |
- } |
- for (var section of this._json.sections) |
- callback(section.map, section.offset.line, section.offset.column); |
- }, |
+ function sourceMappingComparator(a, b) { |
+ if (a.sourceLineNumber !== b.sourceLineNumber) |
+ return a.sourceLineNumber - b.sourceLineNumber; |
+ if (a.sourceColumnNumber !== b.sourceColumnNumber) |
+ return a.sourceColumnNumber - b.sourceColumnNumber; |
- /** |
- * @param {!SourceMapV3} sourceMap |
- */ |
- _parseSources: function(sourceMap) { |
- var sourcesList = []; |
- var sourceRoot = sourceMap.sourceRoot || ""; |
- if (sourceRoot && !sourceRoot.endsWith("/")) |
- sourceRoot += "/"; |
- for (var i = 0; i < sourceMap.sources.length; ++i) { |
- var href = sourceRoot + sourceMap.sources[i]; |
- var url = WebInspector.ParsedURL.completeURL(this._sourceMappingURL, href) || href; |
- var source = sourceMap.sourcesContent && sourceMap.sourcesContent[i]; |
- if (url === this._compiledURL && source) |
- url += WebInspector.UIString(" [sm]"); |
- this._sourceInfos.set(url, new WebInspector.TextSourceMap.SourceInfo(source, null)); |
- sourcesList.push(url); |
- } |
- sourceMap[WebInspector.TextSourceMap._sourcesListSymbol] = sourcesList; |
- }, |
+ if (a.lineNumber !== b.lineNumber) |
+ return a.lineNumber - b.lineNumber; |
- /** |
- * @param {!SourceMapV3} map |
- * @param {number} lineNumber |
- * @param {number} columnNumber |
- */ |
- _parseMap: function(map, lineNumber, columnNumber) |
- { |
- var sourceIndex = 0; |
- var sourceLineNumber = 0; |
- var sourceColumnNumber = 0; |
- var nameIndex = 0; |
- var sources = map[WebInspector.TextSourceMap._sourcesListSymbol]; |
- var names = map.names || []; |
- var stringCharIterator = new WebInspector.TextSourceMap.StringCharIterator(map.mappings); |
- var sourceURL = sources[sourceIndex]; |
- |
- while (true) { |
- if (stringCharIterator.peek() === ",") |
- stringCharIterator.next(); |
- else { |
- while (stringCharIterator.peek() === ";") { |
- lineNumber += 1; |
- columnNumber = 0; |
- stringCharIterator.next(); |
- } |
- if (!stringCharIterator.hasNext()) |
- break; |
- } |
- |
- columnNumber += this._decodeVLQ(stringCharIterator); |
- if (!stringCharIterator.hasNext() || this._isSeparator(stringCharIterator.peek())) { |
- this._mappings.push(new WebInspector.SourceMapEntry(lineNumber, columnNumber)); |
- continue; |
- } |
- |
- var sourceIndexDelta = this._decodeVLQ(stringCharIterator); |
- if (sourceIndexDelta) { |
- sourceIndex += sourceIndexDelta; |
- sourceURL = sources[sourceIndex]; |
- } |
- sourceLineNumber += this._decodeVLQ(stringCharIterator); |
- sourceColumnNumber += this._decodeVLQ(stringCharIterator); |
- |
- if (!stringCharIterator.hasNext() || this._isSeparator(stringCharIterator.peek())) { |
- this._mappings.push(new WebInspector.SourceMapEntry(lineNumber, columnNumber, sourceURL, sourceLineNumber, sourceColumnNumber)); |
- continue; |
- } |
- |
- nameIndex += this._decodeVLQ(stringCharIterator); |
- this._mappings.push(new WebInspector.SourceMapEntry(lineNumber, columnNumber, sourceURL, sourceLineNumber, sourceColumnNumber, names[nameIndex])); |
+ return a.columnNumber - b.columnNumber; |
+ } |
+ } |
+ |
+ /** |
+ * @param {function(!SourceMapV3, number, number)} callback |
+ */ |
+ _eachSection(callback) { |
+ if (!this._json.sections) { |
+ callback(this._json, 0, 0); |
+ return; |
+ } |
+ for (var section of this._json.sections) |
+ callback(section.map, section.offset.line, section.offset.column); |
+ } |
+ |
+ /** |
+ * @param {!SourceMapV3} sourceMap |
+ */ |
+ _parseSources(sourceMap) { |
+ var sourcesList = []; |
+ var sourceRoot = sourceMap.sourceRoot || ''; |
+ if (sourceRoot && !sourceRoot.endsWith('/')) |
+ sourceRoot += '/'; |
+ for (var i = 0; i < sourceMap.sources.length; ++i) { |
+ var href = sourceRoot + sourceMap.sources[i]; |
+ var url = WebInspector.ParsedURL.completeURL(this._sourceMappingURL, href) || href; |
+ var source = sourceMap.sourcesContent && sourceMap.sourcesContent[i]; |
+ if (url === this._compiledURL && source) |
+ url += WebInspector.UIString(' [sm]'); |
+ this._sourceInfos.set(url, new WebInspector.TextSourceMap.SourceInfo(source, null)); |
+ sourcesList.push(url); |
+ } |
+ sourceMap[WebInspector.TextSourceMap._sourcesListSymbol] = sourcesList; |
+ } |
+ |
+ /** |
+ * @param {!SourceMapV3} map |
+ * @param {number} lineNumber |
+ * @param {number} columnNumber |
+ */ |
+ _parseMap(map, lineNumber, columnNumber) { |
+ var sourceIndex = 0; |
+ var sourceLineNumber = 0; |
+ var sourceColumnNumber = 0; |
+ var nameIndex = 0; |
+ var sources = map[WebInspector.TextSourceMap._sourcesListSymbol]; |
+ var names = map.names || []; |
+ var stringCharIterator = new WebInspector.TextSourceMap.StringCharIterator(map.mappings); |
+ var sourceURL = sources[sourceIndex]; |
+ |
+ while (true) { |
+ if (stringCharIterator.peek() === ',') |
+ stringCharIterator.next(); |
+ else { |
+ while (stringCharIterator.peek() === ';') { |
+ lineNumber += 1; |
+ columnNumber = 0; |
+ stringCharIterator.next(); |
} |
- }, |
- |
- /** |
- * @param {string} char |
- * @return {boolean} |
- */ |
- _isSeparator: function(char) |
- { |
- return char === "," || char === ";"; |
- }, |
- |
+ if (!stringCharIterator.hasNext()) |
+ break; |
+ } |
+ |
+ columnNumber += this._decodeVLQ(stringCharIterator); |
+ if (!stringCharIterator.hasNext() || this._isSeparator(stringCharIterator.peek())) { |
+ this._mappings.push(new WebInspector.SourceMapEntry(lineNumber, columnNumber)); |
+ continue; |
+ } |
+ |
+ var sourceIndexDelta = this._decodeVLQ(stringCharIterator); |
+ if (sourceIndexDelta) { |
+ sourceIndex += sourceIndexDelta; |
+ sourceURL = sources[sourceIndex]; |
+ } |
+ sourceLineNumber += this._decodeVLQ(stringCharIterator); |
+ sourceColumnNumber += this._decodeVLQ(stringCharIterator); |
+ |
+ if (!stringCharIterator.hasNext() || this._isSeparator(stringCharIterator.peek())) { |
+ this._mappings.push( |
+ new WebInspector.SourceMapEntry(lineNumber, columnNumber, sourceURL, sourceLineNumber, sourceColumnNumber)); |
+ continue; |
+ } |
+ |
+ nameIndex += this._decodeVLQ(stringCharIterator); |
+ this._mappings.push(new WebInspector.SourceMapEntry( |
+ lineNumber, columnNumber, sourceURL, sourceLineNumber, sourceColumnNumber, names[nameIndex])); |
+ } |
+ } |
+ |
+ /** |
+ * @param {string} char |
+ * @return {boolean} |
+ */ |
+ _isSeparator(char) { |
+ return char === ',' || char === ';'; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.TextSourceMap.StringCharIterator} stringCharIterator |
+ * @return {number} |
+ */ |
+ _decodeVLQ(stringCharIterator) { |
+ // Read unsigned value. |
+ var result = 0; |
+ var shift = 0; |
+ do { |
+ var digit = WebInspector.TextSourceMap._base64Map[stringCharIterator.next()]; |
+ result += (digit & WebInspector.TextSourceMap._VLQ_BASE_MASK) << shift; |
+ shift += WebInspector.TextSourceMap._VLQ_BASE_SHIFT; |
+ } while (digit & WebInspector.TextSourceMap._VLQ_CONTINUATION_MASK); |
+ |
+ // Fix the sign. |
+ var negative = result & 1; |
+ result >>= 1; |
+ return negative ? -result : result; |
+ } |
+ |
+ /** |
+ * @param {string} url |
+ * @param {!WebInspector.TextRange} textRange |
+ * @return {!WebInspector.TextRange} |
+ */ |
+ reverseMapTextRange(url, textRange) { |
/** |
- * @param {!WebInspector.TextSourceMap.StringCharIterator} stringCharIterator |
+ * @param {!{lineNumber: number, columnNumber: number}} position |
+ * @param {!WebInspector.SourceMapEntry} mapping |
* @return {number} |
*/ |
- _decodeVLQ: function(stringCharIterator) |
- { |
- // Read unsigned value. |
- var result = 0; |
- var shift = 0; |
- do { |
- var digit = this._base64Map[stringCharIterator.next()]; |
- result += (digit & this._VLQ_BASE_MASK) << shift; |
- shift += this._VLQ_BASE_SHIFT; |
- } while (digit & this._VLQ_CONTINUATION_MASK); |
- |
- // Fix the sign. |
- var negative = result & 1; |
- result >>= 1; |
- return negative ? -result : result; |
- }, |
- |
- /** |
- * @param {string} url |
- * @param {!WebInspector.TextRange} textRange |
- * @return {!WebInspector.TextRange} |
- */ |
- reverseMapTextRange: function(url, textRange) |
- { |
- /** |
- * @param {!{lineNumber: number, columnNumber: number}} position |
- * @param {!WebInspector.SourceMapEntry} mapping |
- * @return {number} |
- */ |
- function comparator(position, mapping) |
- { |
- if (position.lineNumber !== mapping.sourceLineNumber) |
- return position.lineNumber - mapping.sourceLineNumber; |
- |
- return position.columnNumber - mapping.sourceColumnNumber; |
- } |
+ function comparator(position, mapping) { |
+ if (position.lineNumber !== mapping.sourceLineNumber) |
+ return position.lineNumber - mapping.sourceLineNumber; |
- var mappings = this._reversedMappings(url); |
- var startIndex = mappings.lowerBound({lineNumber: textRange.startLine, columnNumber: textRange.startColumn}, comparator); |
- var endIndex = mappings.upperBound({lineNumber: textRange.endLine, columnNumber: textRange.endColumn}, comparator); |
+ return position.columnNumber - mapping.sourceColumnNumber; |
+ } |
- var startMapping = mappings[startIndex]; |
- var endMapping = mappings[endIndex]; |
- return new WebInspector.TextRange(startMapping.lineNumber, startMapping.columnNumber, endMapping.lineNumber, endMapping.columnNumber); |
- }, |
+ var mappings = this._reversedMappings(url); |
+ var startIndex = |
+ mappings.lowerBound({lineNumber: textRange.startLine, columnNumber: textRange.startColumn}, comparator); |
+ var endIndex = mappings.upperBound({lineNumber: textRange.endLine, columnNumber: textRange.endColumn}, comparator); |
- _VLQ_BASE_SHIFT: 5, |
- _VLQ_BASE_MASK: (1 << 5) - 1, |
- _VLQ_CONTINUATION_MASK: 1 << 5 |
+ var startMapping = mappings[startIndex]; |
+ var endMapping = mappings[endIndex]; |
+ return new WebInspector.TextRange( |
+ startMapping.lineNumber, startMapping.columnNumber, endMapping.lineNumber, endMapping.columnNumber); |
+ } |
}; |
+WebInspector.TextSourceMap._VLQ_BASE_SHIFT = 5; |
+WebInspector.TextSourceMap._VLQ_BASE_MASK = (1 << 5) - 1; |
+WebInspector.TextSourceMap._VLQ_CONTINUATION_MASK = 1 << 5; |
+ |
+ |
/** |
- * @constructor |
- * @param {string} string |
+ * @unrestricted |
*/ |
-WebInspector.TextSourceMap.StringCharIterator = function(string) |
-{ |
+WebInspector.TextSourceMap.StringCharIterator = class { |
+ /** |
+ * @param {string} string |
+ */ |
+ constructor(string) { |
this._string = string; |
this._position = 0; |
-}; |
- |
-WebInspector.TextSourceMap.StringCharIterator.prototype = { |
- /** |
- * @return {string} |
- */ |
- next: function() |
- { |
- return this._string.charAt(this._position++); |
- }, |
- |
- /** |
- * @return {string} |
- */ |
- peek: function() |
- { |
- return this._string.charAt(this._position); |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- hasNext: function() |
- { |
- return this._position < this._string.length; |
- } |
+ } |
+ |
+ /** |
+ * @return {string} |
+ */ |
+ next() { |
+ return this._string.charAt(this._position++); |
+ } |
+ |
+ /** |
+ * @return {string} |
+ */ |
+ peek() { |
+ return this._string.charAt(this._position); |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ hasNext() { |
+ return this._position < this._string.length; |
+ } |
}; |
/** |
- * @constructor |
- * @param {?string} content |
- * @param {?Array<!WebInspector.SourceMapEntry>} reverseMappings |
+ * @unrestricted |
*/ |
-WebInspector.TextSourceMap.SourceInfo = function(content, reverseMappings) { |
+WebInspector.TextSourceMap.SourceInfo = class { |
+ /** |
+ * @param {?string} content |
+ * @param {?Array<!WebInspector.SourceMapEntry>} reverseMappings |
+ */ |
+ constructor(content, reverseMappings) { |
this.content = content; |
this.reverseMappings = reverseMappings; |
+ } |
}; |
-WebInspector.TextSourceMap._sourcesListSymbol = Symbol("sourcesList"); |
+WebInspector.TextSourceMap._sourcesListSymbol = Symbol('sourcesList'); |