@carlosv2/glue
Version:
Dependency injection library that stays out of the way
94 lines (93 loc) • 3.11 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());
});
};
export const library = '@carlosv2/glue';
export function isNull(value) {
return value === null;
}
export function isSymbol(value) {
return typeof value === 'symbol';
}
export function isString(value) {
return typeof value === 'string';
}
export function isNumber(value) {
return typeof value === 'number';
}
export function isObject(value) {
return !isNull(value) && typeof value === 'object';
}
export function isBoolean(value) {
return typeof value === 'boolean';
}
export function isUndefined(value) {
return typeof value === 'undefined';
}
export function isFunction(value) {
return typeof value === 'function';
}
export function isArray(value) {
return Array.isArray(value);
}
export function isDictionary(value) {
return isObject(value) && value.constructor.name === 'Object';
}
export 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;
}
export function zipObject(keys, values) {
return Object.fromEntries(zip([keys, values]));
}
export function unzip(data) {
const ts = [];
const ys = [];
data.forEach(([t, y]) => {
ts.push(t);
ys.push(y);
});
return [ts, ys];
}
export function has(key, obj) {
return key in obj;
}
export function gibberish(length) {
const generate = () => Math.random().toString(36).substring(2);
let result = '';
while (result.length < length)
result += generate();
return result.substring(0, length);
}
export function uniq(items) {
return Array.from(new Set(items));
}
export function isFirstChar(value, char) {
return (value.length > 1 && value.charAt(0) === char && value.charAt(1) !== char);
}
export 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;
}
export 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);
});
}