Skip to content

Commit 7d3e646

Browse files
committed
Fixed date handling
1 parent 1536150 commit 7d3e646

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

index.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,26 @@ export default function diff(
1515
type: "REMOVE",
1616
path: [key],
1717
});
18-
} else if (obj[key] && typeof obj[key] === "object") {
18+
} else if (
19+
obj[key] &&
20+
typeof obj[key] === "object" &&
21+
!(obj[key] instanceof Date)
22+
) {
1923
const nestedDiffs = diff(obj[key], newObj[key]);
2024
diffs.push(
2125
...nestedDiffs.map((difference) => {
2226
difference.path.unshift(key);
2327
return difference;
2428
})
2529
);
26-
} else if (obj[key] !== newObj[key]) {
30+
} else if (
31+
obj[key] !== newObj[key] &&
32+
!(
33+
obj[key] instanceof Date &&
34+
newObj[key] instanceof Date &&
35+
+obj[key] === +newObj[key]
36+
)
37+
) {
2738
diffs.push({
2839
path: [key],
2940
type: "CHANGE",

tests/dates.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { test } from "uvu";
2+
import * as assert from "uvu/assert";
3+
import diff from "../dist/index.js";
4+
5+
test("Handles equal dates", () => {
6+
assert.equal(diff({ date: new Date(1) }, { date: new Date(1) }), []);
7+
});
8+
test("Handles unequal dates", () => {
9+
assert.equal(diff({ date: new Date(1) }, { date: new Date(2) }), [
10+
{
11+
path: ["date"],
12+
type: "CHANGE",
13+
value: new Date(2),
14+
},
15+
]);
16+
});
17+
test("Handles value being a date and the other not", () => {
18+
assert.equal(diff({ date: new Date(1) }, { date: "not date" }), [
19+
{
20+
path: ["date"],
21+
type: "CHANGE",
22+
value: "not date",
23+
},
24+
]);
25+
assert.equal(diff({ date: "not date" }, { date: new Date(1) }), [
26+
{
27+
path: ["date"],
28+
type: "CHANGE",
29+
value: new Date(1),
30+
},
31+
]);
32+
});
33+
34+
test.run();

0 commit comments

Comments
 (0)