'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 }