UNPKG

aveazul

Version:

Bluebird drop-in replacement built on native Promise

74 lines 2.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.promisifyAll = promisifyAll; /* eslint-disable @typescript-eslint/no-explicit-any */ const promisify_ts_1 = require("./promisify.cjs"); const util_ts_1 = require("./util.cjs"); const defaultSuffix = "Async"; const defaultFilter = function (name) { return ((0, util_ts_1.isIdentifier)(name) && name.charAt(0) !== "_" && name !== "constructor" && !name.endsWith("Sync")); }; const defaultPromisifier = (fn, _defaultPromisifier, options) => { return (0, promisify_ts_1.promisify)(fn, { ...options, copyProps: false, }); }; function promisifyAll2(obj, options) { const allKeys = (0, util_ts_1.getObjectDataKeys)(obj); for (const key of allKeys) { const value = obj[key]; const promisifiedKey = key + options.suffix; const passesDefaultFilter = options.filter === defaultFilter ? true : defaultFilter(key, value, obj); if (typeof value !== "function" || (0, util_ts_1.isPromisified)(value) || obj[promisifiedKey] || !options.filter(key, value, obj, passesDefaultFilter)) { continue; } if (key.endsWith(options.suffix)) { throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/MqrFmX\u000a".replace("%s", options.suffix)); } obj[promisifiedKey] = options.promisifier(value, defaultPromisifier, { // context: obj, // promisified function should get the binded object using this copyProps: false, ...options, }); } } function promisifyAll(target, _options) { if (typeof target !== "function" && typeof target !== "object") { throw new TypeError("the target of promisifyAll must be an object or a function"); } const options = { suffix: defaultSuffix, filter: defaultFilter, promisifier: defaultPromisifier, Promise: globalThis.Promise, multiArgs: false, copyProps: true, context: undefined, ..._options, }; const suffix = options.suffix; if (!(0, util_ts_1.isIdentifier)(suffix)) { throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/MqrFmX\u000a"); } const allKeys = (0, util_ts_1.getObjectDataKeys)(target); for (const key of allKeys) { const value = target[key]; if (value && key !== "constructor" && !key.startsWith("_") && (0, util_ts_1.isClass)(value)) { promisifyAll2(value.prototype, options); promisifyAll2(value, options); } } promisifyAll2(target, options); return target; } //# sourceMappingURL=promisify-all.cjs.map