@carlosv2/glue
Version:
Dependency injection library that stays out of the way
116 lines (115 loc) • 3.64 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.library = void 0;
exports.isNull = isNull;
exports.isSymbol = isSymbol;
exports.isString = isString;
exports.isNumber = isNumber;
exports.isObject = isObject;
exports.isBoolean = isBoolean;
exports.isUndefined = isUndefined;
exports.isFunction = isFunction;
exports.isArray = isArray;
exports.isDictionary = isDictionary;
exports.zip = zip;
exports.zipObject = zipObject;
exports.unzip = unzip;
exports.has = has;
exports.gibberish = gibberish;
exports.uniq = uniq;
exports.isFirstChar = isFirstChar;
exports.getCallerFile = getCallerFile;
exports.resolvePromises = resolvePromises;
exports.library = '@carlosv2/glue';
function isNull(value) {
return value === null;
}
function isSymbol(value) {
return typeof value === 'symbol';
}
function isString(value) {
return typeof value === 'string';
}
function isNumber(value) {
return typeof value === 'number';
}
function isObject(value) {
return !isNull(value) && typeof value === 'object';
}
function isBoolean(value) {
return typeof value === 'boolean';
}
function isUndefined(value) {
return typeof value === 'undefined';
}
function isFunction(value) {
return typeof value === 'function';
}
function isArray(value) {
return Array.isArray(value);
}
function isDictionary(value) {
return isObject(value) && value.constructor.name === 'Object';
}
function zip([ts, ys]) {
const length = Math.min(ts.length, ys.length);
const result = [];
for (let i = 0; i < length; i++) {
result.push([ts[i], ys[i]]);
}
return result;
}
function zipObject(keys, values) {
return Object.fromEntries(zip([keys, values]));
}
function unzip(data) {
const ts = [];
const ys = [];
data.forEach(([t, y]) => {
ts.push(t);
ys.push(y);
});
return [ts, ys];
}
function has(key, obj) {
return key in obj;
}
function gibberish(length) {
const generate = () => Math.random().toString(36).substring(2);
let result = '';
while (result.length < length)
result += generate();
return result.substring(0, length);
}
function uniq(items) {
return Array.from(new Set(items));
}
function isFirstChar(value, char) {
return (value.length > 1 && value.charAt(0) === char && value.charAt(1) !== char);
}
function getCallerFile() {
const oldPrepareStackTrace = Error.prepareStackTrace;
Error.prepareStackTrace = (_, stack) => stack;
const stack = new Error().stack;
Error.prepareStackTrace = oldPrepareStackTrace;
if (stack !== null && typeof stack === 'object') {
return stack[3] ? stack[3].getFileName() : undefined;
}
return undefined;
}
function resolvePromises(obj) {
return __awaiter(this, void 0, void 0, function* () {
const [keys, promises] = unzip(Object.entries(obj));
const values = yield Promise.all(promises);
return zipObject(keys, values);
});
}