fractal-core
Version:
A minimalist and well crafted app, content or component is our conviction
132 lines • 3.92 kB
JavaScript
;
// -- Useful Functions
// Use them for building actions in a declarative and concise way
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.assoc = (key) => (value) => obj => {
obj[key] = value;
return obj;
};
exports.evolve = (index) => obj => {
for (let key in index) {
obj[key] = index[key](obj[key]);
}
return obj;
};
exports.evolveKey = (key) => (fn) => obj => {
obj[key] = fn(obj[key]);
return obj;
};
// pipe allows to pipe functions (left composing)
function pipe(...args) {
return function (value) {
let result = value;
for (let i = 0, len = args.length; i < len; i++) {
result = args[i](result);
}
return result;
};
}
exports.pipe = pipe;
function mapToObj(arr, fn) {
let result = {}, aux;
for (let i = 0, len = arr.length; i < len; i++) {
aux = fn(i, arr[i]);
result[aux[0]] = aux[1];
}
return result;
}
exports.mapToObj = mapToObj;
function merge(objSrc) {
return function (obj) {
let key;
for (key in objSrc) {
obj[key] = objSrc[key];
}
return obj;
};
}
exports.merge = merge;
const _deepmerge = require("deepmerge/dist/umd");
exports.deepmerge = _deepmerge;
exports.deepmergeAll = _deepmerge.all;
exports.mapAsync = (arr, fn) => __awaiter(this, void 0, void 0, function* () {
let res = [];
for (let i = 0, len = arr.length; i < len; i++) {
res[i] = yield fn(arr[i], i, arr);
}
return res;
});
exports.filterAsync = (arr, fn) => __awaiter(this, void 0, void 0, function* () {
let res = [];
for (let i = 0, len = arr.length; i < len; i++) {
if (yield fn(arr[i], i, arr)) {
res.push(arr[i]);
}
}
return res;
});
exports.reduceAsync = (arr, fn, v0) => __awaiter(this, void 0, void 0, function* () {
for (let i = 0, len = arr.length; i < len; i++) {
v0 = yield fn(v0, arr[i], i);
}
return v0;
});
exports.all = (arr) => __awaiter(this, void 0, void 0, function* () { return yield Promise.all(arr); });
exports.seq = (...arr) => __awaiter(this, void 0, void 0, function* () {
let element;
for (element of arr) {
yield element;
}
});
exports.range = (a, b) => {
let res = [];
if (a < b) {
b++;
for (; a < b; a++) {
res.push(a);
}
}
else {
b--;
for (; a > b; a--) {
res.push(a);
}
}
return res;
};
exports.waitMS = (ms) => new Promise(res => setTimeout(res, ms));
// Math
exports.sum = (numbers) => numbers.reduce((acc, n) => acc + n, 0);
// Path helpers
exports.getPath = (path, obj) => {
let actual = obj;
for (let i = 0, len = path.length; i < len; i++) {
actual = actual[path[i]];
}
return actual;
};
exports.getPaths = (paths, obj) => {
let res = [];
for (let i = 0, path; path = paths[i]; i++) {
res[i] = exports.getPath(path, obj);
}
return res;
};
function guid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
}
exports.guid = guid;
//# sourceMappingURL=fun.js.map