ts-prime
Version:
A utility library for JavaScript and Typescript.
61 lines (60 loc) • 1.84 kB
JavaScript
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;
}