aboutsummaryrefslogtreecommitdiff
path: root/node_modules/postcss-message-helpers/index.js
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/postcss-message-helpers/index.js
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/postcss-message-helpers/index.js')
-rwxr-xr-xnode_modules/postcss-message-helpers/index.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/node_modules/postcss-message-helpers/index.js b/node_modules/postcss-message-helpers/index.js
new file mode 100755
index 00000000..e57cc29f
--- /dev/null
+++ b/node_modules/postcss-message-helpers/index.js
@@ -0,0 +1,81 @@
+/**
+ * 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
+ }
+}