aboutsummaryrefslogtreecommitdiff
path: root/node_modules/clean-stack/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/clean-stack/index.js')
-rw-r--r--node_modules/clean-stack/index.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/node_modules/clean-stack/index.js b/node_modules/clean-stack/index.js
new file mode 100644
index 000000000..10aca5e7e
--- /dev/null
+++ b/node_modules/clean-stack/index.js
@@ -0,0 +1,38 @@
+'use strict';
+const os = require('os');
+
+const extractPathRegex = /\s+at.*(?:\(|\s)(.*)\)?/;
+const pathRegex = /^(?:(?:(?:node|(?:internal\/[\w/]*|.*node_modules\/babel-polyfill\/.*)?\w+)\.js:\d+:\d+)|native)/;
+const homeDir = os.homedir();
+
+module.exports = (stack, options) => {
+ options = Object.assign({pretty: false}, options);
+
+ return stack.replace(/\\/g, '/')
+ .split('\n')
+ .filter(x => {
+ const pathMatches = x.match(extractPathRegex);
+ if (pathMatches === null || !pathMatches[1]) {
+ return true;
+ }
+
+ const match = pathMatches[1];
+
+ // Electron
+ if (match.includes('.app/Contents/Resources/electron.asar') ||
+ match.includes('.app/Contents/Resources/default_app.asar')) {
+ return false;
+ }
+
+ return !pathRegex.test(match);
+ })
+ .filter(x => x.trim() !== '')
+ .map(x => {
+ if (options.pretty) {
+ return x.replace(extractPathRegex, (m, p1) => m.replace(p1, p1.replace(homeDir, '~')));
+ }
+
+ return x;
+ })
+ .join('\n');
+};