yarfl
Version:
Yet Another Redux Forms Library
205 lines • 7.84 kB
JavaScript
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
import * as _append from 'ramda/src/append';
import * as _assocPath from 'ramda/src/assocPath';
import * as _merge from 'ramda/src/merge';
import * as _mergeDeepRight from 'ramda/src/mergeDeepRight';
import * as _omit from 'ramda/src/omit';
import * as _path from 'ramda/src/path';
import * as _pick from 'ramda/src/pick';
import * as _remove from 'ramda/src/remove';
var R = {
assocPath: _assocPath,
merge: _merge,
mergeDeepRight: _mergeDeepRight,
omit: _omit,
pick: _pick,
remove: _remove,
append: _append,
path: _path,
};
import { FieldType, } from '../typings';
import { checkPath } from './checkers';
export var firstDefined = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
for (var i in args) {
if (typeof args[i] !== 'undefined' && args[i] !== null) {
return args[i];
}
}
};
var caseFnWrapper = function (fn) { return function (str) {
var seperated = str.replace(/(\d+)/, ' $1 ');
return fn(seperated);
}; };
// tslint:disable:no-var-requires
export var capitalize = caseFnWrapper(require('sentence-case'));
export var titleCase = caseFnWrapper(require('title-case'));
export var kebabCase = caseFnWrapper(require('param-case'));
export var camelCase = caseFnWrapper(require('camel-case'));
// tslint:enable:no-var-requires
export var isNonEmptyArray = function (test) { return !!(test && Array.isArray(test) && test.length); };
var regex = /\[\d+\]/;
export var parseKey = function (key, endWith) {
if (key.includes('.') || regex.test(key) || endWith) {
var split = key.split('.')
.reduce(function (acc, curr, currIndex, splitArr) {
var match = regex.test(curr) && curr.match(/\[(\d+)\]/);
if (match) {
var index = parseInt(match[1]);
var noIndex = curr.replace(regex, '');
return acc.concat([noIndex, 'fields', index]);
}
return currIndex < splitArr.length - 1
? acc.concat([curr, 'fields']) : acc.concat([curr]);
}, []);
return endWith ? split.concat(endWith) : split;
}
return [key];
};
export var removeAt = function (arr, index, count) {
if (count === void 0) { count = 1; }
return R.remove(index, count, arr);
};
export var append = function (arr, value) { return R.append(value, arr); };
export var getIn = function (obj, path) { return R.path(path, obj); };
export var setInWithKey = function (state, key, target, value) {
var fieldPath = ['fields'].concat(parseKey(key), [target]);
return R.assocPath(fieldPath, value, state);
};
export var setInWithPath = function (obj, path, value) { return R.assocPath(path, value, obj); };
export var mergeIn = function (state, key, value) {
var fieldPath = ['fields'].concat(parseKey(key));
var target = getIn(state, fieldPath);
var merged = R.merge(target, value);
return R.assocPath(fieldPath, merged, state);
};
export var mergeDeep = R.mergeDeepRight;
export var mergeDeepIn = function (state, key, value) {
var fieldPath = ['fields'].concat(parseKey(key));
var target = getIn(state, fieldPath);
var merged = mergeDeep(target, value);
return R.assocPath(fieldPath, merged, state);
};
// recursively merges value up the state tree
export var mergeUp = function (state, key, value) {
var updated = !/\[\d+\]$/.test(key)
? mergeIn(state, key, value)
: state;
if (key.includes('.')) {
var path = key.split('.');
var nextKey = path.slice(0, path.length - 1).join('.');
return mergeUp(updated, nextKey, value);
}
return updated;
};
export var selectField = function (target, key, graceful) {
if (graceful === void 0) { graceful = false; }
var path = ['fields'].concat(parseKey(key));
var field = getIn(target, path);
if (typeof field === 'undefined' && !graceful) {
checkPath(path, target, key);
}
return field;
};
export var extract = function (fields, key, options) {
var defaultOptions = { ignoreEmptyStrings: false, flatten: false };
var optionsWithDefaults = __assign({}, defaultOptions, options);
var extraction = Object.entries(fields)
.reduce(function (acc, _a) {
var k = _a[0], entry = _a[1];
var _b, _c, _d, _e;
switch (entry.fieldType) {
case FieldType.Simple:
var value = entry[key];
var ignoreEmptyStrings = optionsWithDefaults.ignoreEmptyStrings;
var skip = ignoreEmptyStrings && value === '';
return skip ? acc : __assign({}, acc, (_b = {}, _b[k] = value, _b));
case FieldType.Array:
var arrayFields = entry.fields;
var arr = arrayFields.map(function (field) { return extract(field, key, options); });
return __assign({}, acc, (_c = {}, _c[k] = arr, _c));
case FieldType.Parent:
var childFields = entry.fields;
var node = extract(childFields, key, options);
return __assign({}, acc, (_d = {}, _d[k] = node, _d));
default:
// @ts-ignore
return __assign({}, acc, (_e = {}, _e[k] = extract(entry, key, options), _e));
}
return {};
}, {});
return optionsWithDefaults.flatten
? flattenObj(extraction)
: extraction;
};
export var throwError = function () {
var errorMessage = [];
for (var _i = 0; _i < arguments.length; _i++) {
errorMessage[_i] = arguments[_i];
}
throw new Error("YARFL: " + errorMessage.join(' '));
};
export var logError = function () {
var errorMessage = [];
for (var _i = 0; _i < arguments.length; _i++) {
errorMessage[_i] = arguments[_i];
}
console.error("YARFL: " + errorMessage.join(' '));
};
export var logWarning = function () {
var errorMessage = [];
for (var _i = 0; _i < arguments.length; _i++) {
errorMessage[_i] = arguments[_i];
}
console.warn("YARFL: " + errorMessage.join(' '));
};
export var flatten = function (target) {
return Array.isArray(target)
? flattenArray(target)
: flattenObj(target);
};
var flattenArray = function (arr) { return arr.reduce(function (a, b) {
return Array.isArray(b)
? a.concat(flattenArray(b)) : a.concat([b]);
}, []); };
var flattenObj = function (obj, prefix) {
return Object.entries(obj).reduce(function (acc, _a) {
var key = _a[0], entry = _a[1];
var _b;
var k = prefix ? prefix + "." + key : key;
if (isNonEmptyArray(entry)) {
var map = entry.reduce(function (prev, next, index) {
var _a;
return (__assign({}, prev, (_a = {}, _a[k + "[" + index + "]"] = next, _a)));
}, {});
return __assign({}, acc, flattenObj(map));
}
if (typeof entry === 'object' && !Array.isArray(entry)) {
return __assign({}, acc, flattenObj(entry, k));
}
return __assign({}, acc, (_b = {}, _b[k] = entry, _b));
}, {});
};
export var pick = function (target, props) {
return R.pick(props, target);
};
export var omit = function (target, props) {
return R.omit(props, target);
};
export var isPromise = function (target) {
if (Promise && Promise.resolve) {
return Promise.resolve(target) === target;
}
throw new Error('Promise not supported in your environment');
};
//# sourceMappingURL=utils.js.map