|
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.safeToString = exports.objectToString = void 0; |
|
exports.createPromiseCallback = createPromiseCallback; |
|
exports.inOperator = inOperator; |
|
|
|
const objectToString = (obj) => Object.prototype.toString.call(obj); |
|
exports.objectToString = objectToString; |
|
|
|
|
|
|
|
const safeArrayToString = (arr, seenArrays) => { |
|
|
|
if (typeof arr.join !== 'function') |
|
return (0, exports.objectToString)(arr); |
|
seenArrays.add(arr); |
|
const mapped = arr.map((val) => val === null || val === undefined || seenArrays.has(val) |
|
? '' |
|
: safeToStringImpl(val, seenArrays)); |
|
return mapped.join(); |
|
}; |
|
const safeToStringImpl = (val, seenArrays = new WeakSet()) => { |
|
|
|
|
|
if (typeof val !== 'object' || val === null) { |
|
return String(val); |
|
} |
|
else if (typeof val.toString === 'function') { |
|
return Array.isArray(val) |
|
? |
|
safeArrayToString(val, seenArrays) |
|
: String(val); |
|
} |
|
else { |
|
|
|
return (0, exports.objectToString)(val); |
|
} |
|
}; |
|
|
|
const safeToString = (val) => safeToStringImpl(val); |
|
exports.safeToString = safeToString; |
|
|
|
function createPromiseCallback(cb) { |
|
let callback; |
|
let resolve; |
|
let reject; |
|
const promise = new Promise((_resolve, _reject) => { |
|
resolve = _resolve; |
|
reject = _reject; |
|
}); |
|
if (typeof cb === 'function') { |
|
callback = (err, result) => { |
|
try { |
|
if (err) |
|
cb(err); |
|
|
|
|
|
|
|
else |
|
cb(null, result); |
|
} |
|
catch (e) { |
|
reject(e instanceof Error ? e : new Error()); |
|
} |
|
}; |
|
} |
|
else { |
|
callback = (err, result) => { |
|
try { |
|
|
|
|
|
if (err) |
|
reject(err); |
|
|
|
else |
|
resolve(result); |
|
} |
|
catch (e) { |
|
reject(e instanceof Error ? e : new Error()); |
|
} |
|
}; |
|
} |
|
return { |
|
promise, |
|
callback, |
|
resolve: (value) => { |
|
callback(null, value); |
|
return promise; |
|
}, |
|
reject: (error) => { |
|
callback(error); |
|
return promise; |
|
}, |
|
}; |
|
} |
|
function inOperator(k, o) { |
|
return k in o; |
|
} |
|
|