From 7fff4499fd915bcea3fa93b1aa8b35f4fe7a6027 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Sun, 28 May 2017 00:38:50 +0200 Subject: add linting (and some initial fixes) --- node_modules/release-zalgo/lib/Thenable.js | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 node_modules/release-zalgo/lib/Thenable.js (limited to 'node_modules/release-zalgo/lib/Thenable.js') diff --git a/node_modules/release-zalgo/lib/Thenable.js b/node_modules/release-zalgo/lib/Thenable.js new file mode 100644 index 000000000..7a809b266 --- /dev/null +++ b/node_modules/release-zalgo/lib/Thenable.js @@ -0,0 +1,39 @@ +'use strict' + +const constants = require('./constants') +const unwrapSync = require('./unwrapSync') + +// Behaves like a Promise, though the then() and catch() methods are unbound and +// must be called with the instance as their thisArg. +// +// The executor must either return a value or throw a rejection reason. It is +// not provided resolver or rejecter methods. The executor may return another +// thenable. +class Thenable { + constructor (executor) { + try { + this.result = unwrapSync(executor()) + this.state = constants.RESOLVED + } catch (err) { + this.result = err + this.state = constants.REJECTED + } + } + + then (onFulfilled, onRejected) { + if (this.state === constants.RESOLVED && typeof onFulfilled === 'function') { + return new Thenable(() => onFulfilled(this.result)) + } + + if (this.state === constants.REJECTED && typeof onRejected === 'function') { + return new Thenable(() => onRejected(this.result)) + } + + return this + } + + catch (onRejected) { + return this.then(null, onRejected) + } +} +module.exports = Thenable -- cgit v1.2.3