From f9d8bcf4fe7c402efd4cd4841e9b2c9f854dad4e Mon Sep 17 00:00:00 2001 From: Chris Dickinson Date: Mon, 7 Sep 2020 21:25:04 -0700 Subject: [PATCH] fix: support file:// protocol seen in node14 ESM modules --- index.js | 9 ++++++++- package.json | 4 +++- test/esm.mjs | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 test/esm.mjs diff --git a/index.js b/index.js index b75d808..71c2fd9 100644 --- a/index.js +++ b/index.js @@ -284,7 +284,7 @@ module.exports = function stackman (opts) { properties.getFileName = { writable: true, value: function () { - var filename = getFileName.call(callsite) + var filename = getFileName.call(callsite).replace(/^file:\/\//, '') var sourceFile = getPosition().source if (!sourceFile) return filename var sourceDir = path.dirname(filename) @@ -303,6 +303,13 @@ module.exports = function stackman (opts) { return getPosition().column || getColumnNumber.call(callsite) } } + } else { + properties.getFileName = { + writable: true, + value: function () { + return getFileName.call(callsite).replace(/^file:\/\//, '') + } + } } Object.defineProperties(callsite, properties) diff --git a/package.json b/package.json index 0691eba..943397f 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,9 @@ "tape": "^4.13.2" }, "scripts": { - "test": "standard && node test/strict.js && node test/non-strict.js && node test/longjohn.js && node test/sourcemap.js" + "test": "node test/strict.js && node test/non-strict.js && node test/longjohn.js && node test/sourcemap.js && node test/esm.mjs", + "posttest": "npm run lint", + "lint": "standard" }, "repository": { "type": "git", diff --git a/test/esm.mjs b/test/esm.mjs new file mode 100644 index 0000000..1e6f83e --- /dev/null +++ b/test/esm.mjs @@ -0,0 +1,32 @@ +import test from 'tape' +import createStackman from '../index.js' + +const stackman = createStackman() + +test('callsite.getRelativeFileName()', function (t) { + var err = new Error('foo') + stackman.callsites(err, function (err, callsites) { + t.error(err) + t.equal(callsites[0].getRelativeFileName(), 'test/esm.mjs') + t.end() + }) +}) + +test('callsite.sourceContext()', function (t) { + var err = new Error() + stackman.callsites(err, function (err, callsites) { + t.error(err) + + callsites[0].sourceContext(function (err, context) { + t.error(err) + t.equal(typeof context, 'object') + t.equal(typeof context.line, 'string') + t.ok(Array.isArray(context.pre), 'should be an array') + t.ok(Array.isArray(context.post), 'should be an array') + t.equal(context.pre.length, 2) + t.equal(context.post.length, 2) + t.equal(context.line.trim(), 'var err = new Error()') + t.end() + }) + }) +})