@tanstack/db
Version:
A reactive client store for building super fast apps on sync
53 lines (52 loc) • 1.45 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const objectIds = /* @__PURE__ */ new WeakMap();
let nextObjectId = 1;
function getObjectId(obj) {
if (objectIds.has(obj)) {
return objectIds.get(obj);
}
const id = nextObjectId++;
objectIds.set(obj, id);
return id;
}
const ascComparator = (a, b) => {
if (a == null && b == null) return 0;
if (a == null) return -1;
if (b == null) return 1;
if (typeof a === `string` && typeof b === `string`) {
return a.localeCompare(b);
}
if (Array.isArray(a) && Array.isArray(b)) {
for (let i = 0; i < Math.min(a.length, b.length); i++) {
const result = ascComparator(a[i], b[i]);
if (result !== 0) {
return result;
}
}
return a.length - b.length;
}
if (a instanceof Date && b instanceof Date) {
return a.getTime() - b.getTime();
}
const aIsObject = typeof a === `object`;
const bIsObject = typeof b === `object`;
if (aIsObject || bIsObject) {
if (aIsObject && bIsObject) {
const aId = getObjectId(a);
const bId = getObjectId(b);
return aId - bId;
}
if (aIsObject) return 1;
if (bIsObject) return -1;
}
if (a < b) return -1;
if (a > b) return 1;
return 0;
};
const descComparator = (a, b) => {
return ascComparator(b, a);
};
exports.ascComparator = ascComparator;
exports.descComparator = descComparator;
//# sourceMappingURL=comparison.cjs.map