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