思いつきでエラーのクローン。使い道とか全く思いつかないけど
cloneError.js
;(function (global) {
'use strict'
var isBrowser = !! global.self
var isWorker = !! global.WorkerLocation
var isNodeJS = !! global.global
function cloneError (err) {
if (!(err instanceof Error)) throw new TypeError(
({}).toString.apply(err) + ' not instanceof Error')
return new global[err.name](err.message)
}
isNodeJS ? (module.exports = cloneError)
: (global['cloneError'] = cloneError)
})(this.self || global)
error.test.js
var test = require('tape')
var cloneError = require('cloneError')
test('shallow clone "Error"', function (t) {
var error = new URIError('not found')
var clone = cloneError(error)
t.equal(error.toString(), clone.toString(), '.toString() -> ' + clone.toString())
t.not(error, clone, 'originalError !== clonedError')
t.end()
})
tap --tap error.test.js
してみる
TAP version 13
# error.test.js
# TAP version 13
# shallow clone "Error"
ok 1 .toString() -> URIError: not found
ok 2 originalError !== clonedError
# tests 2
# pass 2
# ok
ok 3 ./error.test.js
1..3
# tests 3
# pass 3
# ok