UNPKG

@beenotung/tslib

Version:
332 lines 8.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.another = exports.not_equals = exports.equals = exports.cast = exports.applyIf = exports._if = exports.chainObject = exports.tryWithDefault = exports.tryCall = exports.tryApply = exports.repeatI = exports.mapI = exports.forI = exports.toNumber = exports.isNumber = exports.notDefined = exports.isDefined = exports.genFunction = exports.copyToArray = exports.copyArray = exports.concatArgs = exports.argsToArray = exports.objValues = exports.objToArray = exports.objFilter = exports.objMap = exports.objForEach = exports.deepCall = exports.compareString = exports.caseFunctionLookup = exports.caseLookup = exports.bindFunction = exports.ifNullFAsync = exports.ifNullF = exports.ifNull = exports.first_non_null = exports.getPropWithDefault = exports.checkedGetProp = exports.hasProp = exports.deepGetProp = void 0; const tslib_1 = require("tslib"); /** * Created by beenotung on 12/26/16. */ const defer_1 = require("./async/defer"); function deepGetProp(name, o) { if (o[name]) { return o[name]; } const xs = name.split('.'); if (xs.length === 1) { const message = `key '${name}' not found in object`; console.warn(message, { name, o }); throw new TypeError(message); } const topLevelName = xs.shift(); const nextLevelName = xs.join('.'); return deepGetProp(nextLevelName, o[topLevelName]); } exports.deepGetProp = deepGetProp; function hasProp(k, o) { if (typeof o[k] !== 'undefined') { return true; } if (Array.isArray(o)) { return o.indexOf(k) !== -1; } return Object.keys(o).filter(x => x === k).length !== 0; } exports.hasProp = hasProp; function checkedGetProp(k, o) { if (hasProp(k, o)) { return o[k]; } else { throw new TypeError(`property '${k}' does not exist in the object.`); } } exports.checkedGetProp = checkedGetProp; function getPropWithDefault(v, k, o) { if (hasProp(k, o)) { return o[k]; } else { return v; } } exports.getPropWithDefault = getPropWithDefault; function first_non_null(...args) { for (const arg of args) { if (arg) { return arg; } } return null; } exports.first_non_null = first_non_null; /* return b if a is null or undefined (or false) */ function ifNull(a, b) { return a ? a : b; } exports.ifNull = ifNull; function ifNullF(a, f) { return a ? a : f(); } exports.ifNullF = ifNullF; /** * @remark won't flatten a * */ function ifNullFAsync(a, f) { return tslib_1.__awaiter(this, void 0, void 0, function* () { /* not using Promise.resolve(a) directly to avoid flattening a when a is a promise */ const defer = defer_1.createDefer(); if (a) { defer.resolve(a); } else { f().then(x => defer.resolve(x)); } return defer.promise; }); } exports.ifNullFAsync = ifNullFAsync; /* tslint:disable:ban-types */ function bindFunction(f) { const res = f.bind(f); res.prototype = f.prototype; return res; } exports.bindFunction = bindFunction; /* tslint:enable:ban-types */ function caseLookup(cases, target) { const xss = cases.filter(xs => xs[0] === target); if (xss.length === 1) { return xss[0][1]; } else { throw new Error('expect only 1 match, number of match:' + xss.length); } } exports.caseLookup = caseLookup; function caseFunctionLookup(cases, target) { return caseLookup(cases, target)(); } exports.caseFunctionLookup = caseFunctionLookup; /** * @deprecated use compare() or compare_string() instead * */ function compareString(a, b) { if (a === b) { return 0; } return a < b ? -1 : 1; } exports.compareString = compareString; function deepCall(f) { while (typeof f === 'function') { f = f(); } return f; } exports.deepCall = deepCall; function objForEach(f) { return o => Object.keys(o).forEach(x => f(o[x], x, o)); } exports.objForEach = objForEach; function objMap(f) { return o => Object.keys(o).map(x => f(o[x], x, o)); } exports.objMap = objMap; function objFilter(f) { return o => Object.keys(o) .filter(x => f(o[x], x, o)) .map(x => o[x]); } exports.objFilter = objFilter; function objToArray(o) { const xs = Object.keys(o); const res = new Array(xs.length); xs.forEach((x, i) => (res[i] = [o[x], x])); return res; } exports.objToArray = objToArray; function objValues(o) { return Object.keys(o).map(x => o[x]); } exports.objValues = objValues; function argsToArray(args) { const len = args.length; const res = new Array(len); for (let i = 0; i < len; i++) { res[i] = args[i]; } return res; } exports.argsToArray = argsToArray; /** * take all from as ++ take some from args * */ function concatArgs(as, args, offsetArgs = 0, nArgs = args.length) { const na = as.length; const res = new Array(na + nArgs); let offset = 0; for (; offset < na; offset++) { res[offset] = as[offset]; } for (let i = 0; i < nArgs; i++) { res[offset + offsetArgs + i] = args[i]; } return res; } exports.concatArgs = concatArgs; function copyArray(xs, offset = 0, count = xs.length) { const res = new Array(count); for (let i = 0; i < count; i++) { res[i] = xs[offset + i]; } return res; } exports.copyArray = copyArray; function copyToArray(dest, destOffset = 0, src, srcOffset = 0, count = src.length) { for (let i = 0; i < count; i++) { dest[destOffset + i] = src[srcOffset + i]; } return dest; } exports.copyToArray = copyToArray; /* tslint:disable:ban-types */ const nFuncs = []; function genFunction(n, f) { if (n < 1) { return function fun0() { return f.apply(null, arguments); }; } if (!nFuncs[n]) { let args = 'a0'; for (let i = 1; i < n; i++) { args += ', a' + i; } const code = `nFuncs[${n}] = function(f){ return function fun${n}(${args}){ return f.apply(null, arguments); }; }`; /* tslint:disable:no-eval */ eval(code); /* tslint:enable:no-eval */ } return nFuncs[n](f); } exports.genFunction = genFunction; /* tslint:enable:ban-types */ function isDefined(a) { return a !== null && a !== void 0; } exports.isDefined = isDefined; function notDefined(a) { return !isDefined(a); } exports.notDefined = notDefined; function isNumber(i) { return Number.isFinite(+i) && i !== ''; } exports.isNumber = isNumber; /** @deprecated */ const toString = JSON.stringify.bind(JSON); function toNumber(i) { if (!isNumber(i)) { throw new TypeError(`expect number string, but got \`${toString(i)}\` of type ${typeof i}`); } return +i; } exports.toNumber = toNumber; /** * @param f: consumer function * @param end: ending (exclusive) * @param start: offset (inclusive) * */ function forI(f, end, start = 0) { for (let i = start; i < end; i++) { f(i); } } exports.forI = forI; function mapI(f, size) { const res = new Array(size); forI(i => (res[i] = f(i)), size, 0); return res; } exports.mapI = mapI; function repeatI(f, size) { return mapI(f, size); } exports.repeatI = repeatI; /** apply the function without throwing exception */ function tryApply(f, args) { try { return f(...args); } catch (e) { console.error(e); } } exports.tryApply = tryApply; /** call the function without throwing exception */ function tryCall(f, ...args) { try { return f(...args); } catch (e) { console.error(e); } } exports.tryCall = tryCall; function tryWithDefault(f, defaultValue, args = []) { try { return f(...args); } catch (e) { return defaultValue; } } exports.tryWithDefault = tryWithDefault; function chainObject(a) { const res = (f) => { f(a); return res; }; return res; } exports.chainObject = chainObject; /* tslint:enable:ban-types */ function _if(f) { return b => { if (b) { f(); } }; } exports._if = _if; function applyIf(a, f) { if (a) { return f(a); } } exports.applyIf = applyIf; var noop_1 = require("./noop"); /**@deprecated*/ Object.defineProperty(exports, "gen_noop", { enumerable: true, get: function () { return noop_1.gen_noop; } }); /**@deprecated*/ Object.defineProperty(exports, "noop", { enumerable: true, get: function () { return noop_1.noop; } }); function cast(o) { return o; } exports.cast = cast; function equals(a, b) { return a === b; } exports.equals = equals; function not_equals(a, b) { return a !== b; } exports.not_equals = not_equals; function another(a, b, compare) { return compare === a ? b : compare === b ? a : compare; } exports.another = another; //# sourceMappingURL=lang.js.map