Opal-Estate-Pro/node_modules/postcss-message-helpers/index.js
2019-09-13 11:27:52 +07:00

82 lines
1.7 KiB
JavaScript
Executable File

/**
* Constants
*/
var SPLITTER = "\n at "
/**
* PostCSS helpers
*/
module.exports = {
sourceString: sourceString,
message: formatMessage,
try: tryCatch
}
/**
* Returns GNU style source
*
* @param {Object} source
*/
function sourceString(source) {
var message = "<css input>"
if (source) {
if (source.input && source.input.file) {
message = source.input.file
}
if (source.start) {
message += ":" + source.start.line + ":" + source.start.column
}
}
return message
}
/**
* Returns a GNU style message
*
* @param {String} message
* @param {Object} source a PostCSS source object
* @return {String}
*/
function formatMessage(message, source) {
return sourceString(source) + ": " + message
}
/**
* Do something and throw an error with enhanced exception (from given source)
*
* @param {Function} fn [description]
* @param {[type]} source [description]
*/
function tryCatch(fn, source) {
try {
return fn()
}
catch (err) {
err.originalMessage = err.message
err.message = formatMessage(err.message, source)
// if source seems interesting, enhance error
if (typeof source === "object") {
// add a stack item if something interesting available
if ((source.input && source.input.file) || source.start) {
var stack = err.stack.split(SPLITTER)
var firstStackItem = stack.shift()
stack.unshift(sourceString(source))
stack.unshift(firstStackItem)
err.stack = stack.join(SPLITTER)
}
if (source.input && source.input.file) {
err.fileName = source.input.file
}
if (source.start) {
err.lineNumber = source.start.line
err.columnNumber = source.start.column
}
}
throw err
}
}