UNPKG

ts-prime

Version:

A utility library for JavaScript and Typescript.

61 lines (60 loc) 1.84 kB
import { isString, isNumber, isFunction, isPromise, isBoolean, isObject, isArray, } from './guards'; import { pipe } from './pipe'; import { sortBy } from './sortBy'; import { map } from './map'; function anyToString(data) { if (isObject(data)) { var keys = Object.keys(data); return pipe(keys, map(function (key) { var value = data[key]; if (isString(value)) return key + ":" + value; if (isNumber(value)) return key + ":" + value; if (isBoolean(value)) return key + ":" + String(value); if (isObject(value)) { return key + ":" + anyToString(value); } return key + ":" + String(value); }), sortBy(function (c) { return c; })).join(':'); } if (isArray(data)) { return pipe(data.map(function (d) { return anyToString(d); }), sortBy(function (c) { return c; })).join(':'); } return String(data); } /** * Recursivly sort arrays and objects. * @param value - anything */ export function deepSort(value) { var v = value; if (isString(v)) return value; if (isNumber(v)) return value; if (isFunction(v)) return value; if (isPromise(v)) return value; if (isBoolean(v)) return value; if (isObject(v)) { var keys = pipe(Object.keys(value), sortBy(function (c) { return c; })); var obj = {}; for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) { var k = keys_1[_i]; obj[k] = deepSort(v[k]); } return obj; } if (isArray(v)) { return pipe(v.map(function (q) { return deepSort(q); }), sortBy(function (c) { return anyToString(c); })); } return value; }