8000 Update dist for 2.4 · stacktracejs/stacktrace-gps@307e652 · GitHub
[go: up one dir, main page]

Skip to content

Commit 307e652

Browse files
committed
Update dist for 2.4
1 parent c15b737 commit 307e652

File tree

5 files changed

+65
-39
lines changed

5 files changed

+65
-39
lines changed

dist/stacktrace-gps-with-polyfills.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/stacktrace-gps-with-polyfills.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/stacktrace-gps.js

Lines changed: 61 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(function (root, factory) {
1+
(function(root, factory) {
22
'use strict';
33
// Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.
44

@@ -10,17 +10,17 @@
1010
} else {
1111
root.StackTraceGPS = factory(root.SourceMap || root.sourceMap, root.StackFrame);
1212
}
13-
}(this, function (SourceMap, StackFrame) {
13+
}(this, function(SourceMap, StackFrame) {
1414
'use strict';
1515

1616
/**
1717
* Make a X-Domain request to url and callback.
1818
*
19-
* @param url [String]
20-
* @return Promise with response text if fulfilled
19+
* @param {String} url
20+
* @returns {Promise} with response text if fulfilled
2121
*/
2222
function _xdr(url) {
23-
return new Promise(function (resolve, reject) {
23+
return new Promise(function(resolve, reject) {
2424
var req = new XMLHttpRequest();
2525
req.open('get', url);
2626
req.onerror = reject;
@@ -42,8 +42,8 @@
4242
* Convert a Base64-encoded string into its original representation.
4343
* Used for inline sourcemaps.
4444
*
45-
* @param b64str [String]
46-
* @return The original representation of the base64-encoded string.
45+
* @param {String} b64str Base-64 encoded string
46+
* @returns {String} original representation of the base64-encoded string.
4747
*/
4848
function _atob(b64str) {
4949
if (typeof window !== 'undefined' && window.atob) {
@@ -53,7 +53,15 @@
5353
}
5454
}
5555

56-
function _findFunctionName(source, lineNumber, columnNumber) {
56+
function _parseJson(string) {
57+
if (typeof JSON !== 'undefined' && JSON.parse) {
58+
return JSON.parse(string);
59+
} else {
60+
throw new Error('You must supply a polyfill for JSON.parse in this environment');
61+
}
62+
}
63+
64+
function _findFunctionName(source, lineNumber/*, columnNumber*/) {
5765
// function {name}({args}) m[1]=name m[2]=args
5866
var reFunctionDeclaration = /function\s+([^(]*?)\s*\(([^)]*)\)/;
5967
// {name} = function ({args}) TODO args capture
@@ -63,11 +71,13 @@
6371
var lines = source.split('\n');
6472

6573
// Walk backwards in the source lines until we find the line which matches one of the patterns above
66-
var code = '', line, maxLines = Math.min(lineNumber, 20), m, commentPos;
74+
var code = '';
75+
var maxLines = Math.min(lineNumber, 20);
76+
var m;
6777
for (var i = 0; i < maxLines; ++i) {
6878
// lineNo is 1-based, source[] is 0-based
69-
line = lines[lineNumber - i - 1];
70-
commentPos = line.indexOf('//');
79+
var line = lines[lineNumber - i - 1];
80+
var commentPos = line.indexOf('//');
7181
if (commentPos >= 0) {
7282
line = line.substr(0, commentPos);
7383
}
@@ -102,9 +112,13 @@
102112
throw new TypeError('Given StackFrame is not an object');
103113
} else if (typeof stackframe.fileName !== 'string') {
104114
throw new TypeError('Given file name is not a String');
105-
} else if (typeof stackframe.lineNumber !== 'number' || stackframe.lineNumber % 1 !== 0 || stackframe.lineNumber < 1) {
115+
} else if (typeof stackframe.lineNumber !== 'number' ||
116+
stackframe.lineNumber % 1 !== 0 ||
117+
stackframe.lineNumber < 1) {
106118
throw new TypeError('Given line number must be a positive integer');
107-
} else if (typeof stackframe.columnNumber !== 'number' || stackframe.columnNumber % 1 !== 0 || stackframe.columnNumber < 0) {
119+
} else if (typeof stackframe.columnNumber !== 'number' ||
120+
stackframe.columnNumber % 1 !== 0 ||
121+
stackframe.columnNumber < 0) {
108122
throw new TypeError('Given column number must be a non-negative integer');
109123
}
110124
return true;
@@ -136,7 +150,8 @@
136150
}
137151

138152
/**
139-
* @param opts: [Object] options.
153+
* @constructor
154+
* @param {Object} opts
140155
* opts.sourceCache = {url: "Source String"} => preload source cache
141156
* opts.offline = True to prevent network requests.
142157
* Best effort without sources or source maps.
@@ -155,7 +170,7 @@
155170
this._atob = opts.atob || _atob;
156171

157172
this._get = function _get(location) {
158-
return new Promise(function (resolve, reject) {
173+
return new Promise(function(resolve, reject) {
159174
var isDataUrl = location.substr(0, 5) === 'data:';
160175
if (this.sourceCache[location]) {
161176
resolve(this.sourceCache[location]);
@@ -191,13 +206,12 @@
191206
* Given a StackFrame, enhance function name and use source maps for a
192207
* better StackFrame.
193208
*
194-
* @param stackframe - {StackFrame}-like object
195-
* {fileName: 'path/to/file.js', lineNumber: 100, columnNumber: 5}
196-
* @return StackFrame with source-mapped location
209+
* @param {StackFrame} stackframe object
210+
* @returns {Promise} that resolves with with source-mapped StackFrame
197211
*/
198212
this.pinpoint = function StackTraceGPS$$pinpoint(stackframe) {
199-
return new Promise(function (resolve, reject) {
200-
this.getMappedLocation(stackframe).then(function (mappedStackFrame) {
213+
return new Promise(function(resolve, reject) {
214+
this.getMappedLocation(stackframe).then(function(mappedStackFrame) {
201215
function resolveMappedStackFrame() {
202216
resolve(mappedStackFrame);
203217
}
@@ -212,46 +226,58 @@
212226
/**
213227
* Given a StackFrame, guess function name from location information.
214228
*
215-
* @param stackframe - {StackFrame}-like object
216-
* {fileName: 'path/to/file.js', lineNumber: 100, columnNumber: 5}
217-
* @return StackFrame with guessed function name
229+
* @param {StackFrame} stackframe
230+
* @returns {Promise} that resolves with enhanced StackFrame.
218231
*/
219232
this.findFunctionName = function StackTraceGPS$$findFunctionName(stackframe) {
220-
return new Promise(function (resolve, reject) {
233+
return new Promise(function(resolve, reject) {
221234
_ensureStackFrameIsLegit(stackframe);
222235
this._get(stackframe.fileName).then(function getSourceCallback(source) {
223236
var guessedFunctionName = _findFunctionName(source, stackframe.lineNumber, stackframe.columnNumber);
224-
resolve(new StackFrame(guessedFunctionName, stackframe.args, stackframe.fileName, stackframe.lineNumber, stackframe.columnNumber));
237+
resolve(new StackFrame(guessedFunctionName,
238+
stackframe.args,
239+
stackframe.fileName,
240+
stackframe.lineNumber,
241+
stackframe.columnNumber));
225242
}, reject)['catch'](reject);
226243
}.bind(this));
227244
};
228245

229246
/**
230247
* Given a StackFrame, seek source-mapped location and return new enhanced StackFrame.
231248
*
232-
* @param stackframe - {StackFrame}-like object
233-
* {fileName: 'path/to/file.js', lineNumber: 100, columnNumber: 5}
234-
* @return StackFrame with source-mapped location
249+
* @param {StackFrame} stackframe
250+
* @returns {Promise} that resolves with enhanced StackFrame.
235251
*/
236252
this.getMappedLocation = function StackTraceGPS$$getMappedLocation(stackframe) {
237-
return new Promise(function (resolve, reject) {
253+
return new Promise(function(resolve, reject) {
238254
_ensureSupportedEnvironment();
239255
_ensureStackFrameIsLegit(stackframe);
240256

241257
var sourceCache = this.sourceCache;
242258
var fileName = stackframe.fileName;
243-
this._get(fileName).then(function (source) {
259+
this._get(fileName).then(function(source) {
244260
var sourceMappingURL = _findSourceMappingURL(source);
245261
var isDataUrl = sourceMappingURL.substr(0, 5) === 'data:';
262+
var base = fileName.substring(0, fileName.lastIndexOf('/') + 1);
246263

247264
if (sourceMappingURL[0] !== '/' && !isDataUrl && !(/^https?:\/\/|^\/\//i).test(sourceMappingURL)) {
248-
sourceMappingURL = fileName.substring(0, fileName.lastIndexOf('/') + 1) + sourceMappingURL;
265+
sourceMappingURL = base + sourceMappingURL;
249266
}
250267

251-
this._get(sourceMappingURL).then(function (map) {
252-
var lineNumber = stackframe.lineNumber;
253-
var columnNumber = stackframe.columnNumber;
254-
resolve(_extractLocationInfoFromSourceMap(map, stackframe.args, lineNumber, columnNumber, sourceCache));
268+
this._get(sourceMappingURL).then(function(map) {
269+
var line = stackframe.lineNumber;
270+
var column = stackframe.columnNumber;
271+
272+
if (typeof map === 'string') {
273+
map = _parseJson(map.replace(/^\)\]\}'/, ''));
274+
}
275+
276+
if (typeof map.sourceRoot === 'undefined') {
277+
map.sourceRoot = base;
278+
}
279+
280+
resolve(_extractLocationInfoFromSourceMap(map, stackframe.args, line, column, sourceCache));
255281
}, reject)['catch'](reject);
256282
}.bind(this), reject)['catch'](reject);
257283
}.bind(this));

0 commit comments

Comments
 (0)
0