You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
1.9 KiB
94 lines
1.9 KiB
'use strict' |
|
|
|
var stringify = require('unist-util-stringify-position') |
|
|
|
module.exports = VMessage |
|
|
|
// Inherit from `Error#`. |
|
function VMessagePrototype() {} |
|
VMessagePrototype.prototype = Error.prototype |
|
VMessage.prototype = new VMessagePrototype() |
|
|
|
// Message properties. |
|
var proto = VMessage.prototype |
|
|
|
proto.file = '' |
|
proto.name = '' |
|
proto.reason = '' |
|
proto.message = '' |
|
proto.stack = '' |
|
proto.fatal = null |
|
proto.column = null |
|
proto.line = null |
|
|
|
// Construct a new VMessage. |
|
// |
|
// Note: We cannot invoke `Error` on the created context, as that adds readonly |
|
// `line` and `column` attributes on Safari 9, thus throwing and failing the |
|
// data. |
|
function VMessage(reason, position, origin) { |
|
var parts |
|
var range |
|
var location |
|
|
|
if (typeof position === 'string') { |
|
origin = position |
|
position = null |
|
} |
|
|
|
parts = parseOrigin(origin) |
|
range = stringify(position) || '1:1' |
|
|
|
location = { |
|
start: {line: null, column: null}, |
|
end: {line: null, column: null} |
|
} |
|
|
|
// Node. |
|
if (position && position.position) { |
|
position = position.position |
|
} |
|
|
|
if (position) { |
|
// Position. |
|
if (position.start) { |
|
location = position |
|
position = position.start |
|
} else { |
|
// Point. |
|
location.start = position |
|
} |
|
} |
|
|
|
if (reason.stack) { |
|
this.stack = reason.stack |
|
reason = reason.message |
|
} |
|
|
|
this.message = reason |
|
this.name = range |
|
this.reason = reason |
|
this.line = position ? position.line : null |
|
this.column = position ? position.column : null |
|
this.location = location |
|
this.source = parts[0] |
|
this.ruleId = parts[1] |
|
} |
|
|
|
function parseOrigin(origin) { |
|
var result = [null, null] |
|
var index |
|
|
|
if (typeof origin === 'string') { |
|
index = origin.indexOf(':') |
|
|
|
if (index === -1) { |
|
result[1] = origin |
|
} else { |
|
result[0] = origin.slice(0, index) |
|
result[1] = origin.slice(index + 1) |
|
} |
|
} |
|
|
|
return result |
|
}
|
|
|