mirror of
https://github.com/JuanCanham/HackMyResume.git
synced 2024-11-05 09:56:22 +00:00
b26799f9fc
Add support for detection of invalid line breaks in JSON string values. Fixes #137. Could be improved to fetch the column number and drop the messy grabbing of the line number from the exception message via regex, but currently the "jsonlint" library (not to be confused with "json-lint") only emits an error string. Since this is also the library that drives http://jsonlint.com, we'll accept the messy regex in return for more robust error checking when our default json-lint path fails. All of the above only necessary because standard JSON.parse error handling is broken in all environments. : )
56 lines
1.3 KiB
JavaScript
56 lines
1.3 KiB
JavaScript
|
|
/**
|
|
Definition of the SyntaxErrorEx class.
|
|
@module utils/syntax-error-ex
|
|
@license MIT. See LICENSE.md for details.
|
|
*/
|
|
|
|
|
|
/**
|
|
Represents a SyntaxError exception with line and column info.
|
|
Collect syntax error information from the provided exception object. The
|
|
JavaScript `SyntaxError` exception isn't interpreted uniformly across environ-
|
|
ments, so we reparse on error to grab the line and column.
|
|
See: http://stackoverflow.com/q/13323356
|
|
@class SyntaxErrorEx
|
|
*/
|
|
|
|
(function() {
|
|
var SyntaxErrorEx;
|
|
|
|
SyntaxErrorEx = (function() {
|
|
function SyntaxErrorEx(ex, rawData) {
|
|
var JSONLint, colNum, lineNum, lint, ref;
|
|
lineNum = null;
|
|
colNum = null;
|
|
JSONLint = require('json-lint');
|
|
lint = JSONLint(rawData, {
|
|
comments: false
|
|
});
|
|
if (lint.error) {
|
|
ref = [lint.line, lint.character], this.line = ref[0], this.col = ref[1];
|
|
}
|
|
if (!lint.error) {
|
|
JSONLint = require('jsonlint');
|
|
try {
|
|
JSONLint.parse(rawData);
|
|
} catch (_error) {
|
|
this.line = (/on line (\d+)/.exec(_error))[1];
|
|
}
|
|
}
|
|
}
|
|
|
|
return SyntaxErrorEx;
|
|
|
|
})();
|
|
|
|
SyntaxErrorEx.is = function(ex) {
|
|
return ex instanceof SyntaxError;
|
|
};
|
|
|
|
module.exports = SyntaxErrorEx;
|
|
|
|
}).call(this);
|
|
|
|
//# sourceMappingURL=syntax-error-ex.js.map
|