ts-prime
Version:
A utility library for JavaScript and Typescript.
64 lines (63 loc) • 2.07 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var guards_1 = require("./guards");
var pipe_1 = require("./pipe");
var sortBy_1 = require("./sortBy");
var map_1 = require("./map");
function anyToString(data) {
if (guards_1.isObject(data)) {
var keys = Object.keys(data);
return pipe_1.pipe(keys, map_1.map(function (key) {
var value = data[key];
if (guards_1.isString(value))
return key + ":" + value;
if (guards_1.isNumber(value))
return key + ":" + value;
if (guards_1.isBoolean(value))
return key + ":" + String(value);
if (guards_1.isObject(value)) {
return key + ":" + anyToString(value);
}
return key + ":" + String(value);
}), sortBy_1.sortBy(function (c) {
return c;
})).join(':');
}
if (guards_1.isArray(data)) {
return pipe_1.pipe(data.map(function (d) { return anyToString(d); }), sortBy_1.sortBy(function (c) { return c; })).join(':');
}
return String(data);
}
/**
* Recursivly sort arrays and objects.
* @param value - anything
*/
function deepSort(value) {
var v = value;
if (guards_1.isString(v))
return value;
if (guards_1.isNumber(v))
return value;
if (guards_1.isFunction(v))
return value;
if (guards_1.isPromise(v))
return value;
if (guards_1.isBoolean(v))
return value;
if (guards_1.isObject(v)) {
var keys = pipe_1.pipe(Object.keys(value), sortBy_1.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 (guards_1.isArray(v)) {
return pipe_1.pipe(v.map(function (q) { return deepSort(q); }), sortBy_1.sortBy(function (c) {
return anyToString(c);
}));
}
return value;
}
exports.deepSort = deepSort;