Repository URL to install this package:
|
Version:
1.1.21 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.toFloat = exports.get = exports.curriedGet = exports.getFalse = exports.getTrue = exports.getFloat = exports.getNumber = exports.getString = exports.getDefault = exports.getObj = exports.getArray = exports.getOneOfFor = exports.getStringFor = exports.getBooleanFor = exports.getFloatFor = exports.getObjFor = exports.getArrayFor = exports.getTyped = exports.getOneOf = exports.getStartDate = void 0;
var _get2 = _interopRequireDefault(require("lodash/get"));
var _toString = _interopRequireDefault(require("lodash/toString"));
var _index = require("../chain-able/index.js");
var _exotic = require("../exotic");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// @todo should use the one from chain
const toFloat = x => parseFloat(x, 10);
/**
* @param {*} obj
* @param {String | Array<String>} path
* @param {Array} [fallback=[]]
* @return {Array}
*/
exports.toFloat = toFloat;
const getArray = (obj, path, fallback = []) => {
const value = (0, _get2.default)(obj, path, fallback);
if ((0, _exotic.isArray)(value) === false) {
return fallback;
} else {
return value;
}
};
/**
* @param {*} obj
* @param {String | Array<String>} path
* @param {Array} [fallback={}]
* @return {Object}
*/
exports.getArray = getArray;
const getObj = (obj, path, fallback = {}) => {
const result = (0, _get2.default)(obj, path, fallback); // because for example on gql, the path is there, but it's null
// and lodash.get works by checking if it .hasOwnProperty
// not by checking value
// @todo why is this not working!
if ((0, _exotic.isObj)(result) === false || result === null) {
return fallback;
} else {
return result;
}
};
exports.getObj = getObj;
const getDefault = fallback => (obj, path) => (0, _get2.default)(obj, path, fallback);
/**
* @param {*} obj
* @param {String | Array<String>} path
* @param {Array} [fallback={}]
* @return {Object}
*/
exports.getDefault = getDefault;
const getFloat = (obj, path) => toFloat((0, _get2.default)(obj, path, 0));
exports.getFloat = getFloat;
const getNumber = (obj, path) => {
const result = (0, _get2.default)(obj, path, 0);
if ((0, _exotic.isNumber)(result) === false) {
return (0, _exotic.toNumber)(result);
} else {
return result;
}
};
/**
* @param {*} obj
* @param {String | Array<String>} path
* @param {String} [fallback='']
* @return {String}
*/
exports.getNumber = getNumber;
const getString = getDefault('');
/**
* @param {*} obj
* @param {String | Array<String>} path
* @param {Boolean} [fallback=true]
* @return {Boolean}
*/
exports.getString = getString;
const getTrue = getDefault(true);
/**
* @param {*} obj
* @param {String | Array<String>} path
* @param {Boolean} [fallback=false]
* @return {Boolean}
*/
exports.getTrue = getTrue;
const getFalse = getDefault(false);
exports.getFalse = getFalse;
const curriedGet = (0, _index.curry)(_get2.default); // @todo types
exports.get = exports.curriedGet = curriedGet;
const getArrayFor = array => path => getArray(array, path);
exports.getArrayFor = getArrayFor;
const getObjFor = obj => path => getObj(obj, path);
exports.getObjFor = getObjFor;
const getFloatFor = any => path => getFloat(any, path);
exports.getFloatFor = getFloatFor;
const getStringFor = any => path => (0, _toString.default)(getString(any, path));
exports.getStringFor = getStringFor;
const getNumberFor = any => path => (0, _exotic.toNumber)(getNumber(any, path)); // fromIshToBoolean
const convertStringToBoolean = string => {
switch (string) {
case 'true':
return true;
break;
case 'false':
return false;
default:
return false;
break;
}
};
const getBooleanFor = any => path => convertStringToBoolean(getFalse(any, path));
/**
* @see http://bit.ly/babel-arguments-spread-nested
*
* @param {Array | Object | *} obj
*
* @param {Array<String>} paths
*
* @param {*} [fallback=undefined]
*
* @return {*} fallback | *
*
* @example
* const response = {eh: 1, canada: 2, moose: 3}
* const oneOf = getOneOf(response)
*
* oneOf(['eh', 'canada'])
* //=> 1
*
* oneOf('canada')
* //=> 1
*
* oneOf('moose', 'canada')
* //=> 1
*/
exports.getBooleanFor = getBooleanFor;
const getOneOf = obj => (...paths) => {
// @todo exotic has a check for this
if ((0, _exotic.isArray)(paths[0])) {
paths = (0, _index.flatten)(paths);
}
for (let index = 0; index < paths.length; index++) {
// current path
const path = paths[index]; // fallback
const value = (0, _get2.default)(obj, path);
if ((0, _exotic.isSafe)(value)) {
return value;
}
}
return ''; // isSafe(fallback)
// ? fallback
// : ''
};
exports.getOneOf = getOneOf;
const getOneOfFor = (...paths) => obj => getOneOf(obj)(...paths);
exports.getOneOfFor = getOneOfFor;
const getTyped = response => {
const array = getArrayFor(response);
const obj = getObjFor(response);
const float = getFloatFor(response);
const number = getNumberFor(response);
const boolean = getBooleanFor(response);
const string = getStringFor(response);
const _get = (path, fallback) => (0, _get2.default)(response, path, fallback);
const oneOf = getOneOfFor(response);
return {
oneOf,
array,
obj,
float,
boolean,
string,
number,
any: _get,
get: _get
};
}; // @deprecated
// compatible export
exports.getTyped = getTyped;
const getStartDate = item => new Date(toFloat((0, _get2.default)(item, 'properties.state.starttime', 0)));
exports.getStartDate = getStartDate;