decode-it
Version:
a simple zero-dependency type safe json decoder for typescript
39 lines • 1.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.deepEq = exports.shallowEq = exports.objectDeepEqual = exports.arrayDeepEqual = exports.flatObject = void 0;
const typeCheckers_1 = require("./typeCheckers");
const flatObject = (obj) => Object.entries(obj).reduce((flattened, prop) => {
const [key, value] = prop;
if (typeCheckers_1.isObject(value)) {
const innerObj = exports.flatObject(value);
return flattened.concat(innerObj.map(([innerKey, val]) => [`${key}.${innerKey}`, val]));
}
return flattened.concat([prop]);
}, []);
exports.flatObject = flatObject;
function arrayDeepEqual(as, bs) {
return as.every((a, i) => {
const b = bs[i];
if (typeCheckers_1.isObject(a) && typeCheckers_1.isObject(b))
return objectDeepEqual(a, b);
if (typeCheckers_1.isArray(a) && typeCheckers_1.isArray(b))
return arrayDeepEqual(a, b);
return b === a;
});
}
exports.arrayDeepEqual = arrayDeepEqual;
function objectDeepEqual(a, b) {
return arrayDeepEqual(Object.entries(a), Object.entries(b));
}
exports.objectDeepEqual = objectDeepEqual;
const shallowEq = (a, b) => a === b;
exports.shallowEq = shallowEq;
const deepEq = (a, b) => {
if (typeCheckers_1.isObject(a) && typeCheckers_1.isObject(b))
return objectDeepEqual(a, b);
if (typeCheckers_1.isArray(a) && typeCheckers_1.isArray(b))
return arrayDeepEqual(a, b);
return exports.shallowEq(a, b);
};
exports.deepEq = deepEq;
//# sourceMappingURL=utils.js.map