Skip to content

Commit b28b3a7

Browse files
authored
feat: add support for Temporal objects (#88)
1 parent 280b03e commit b28b3a7

4 files changed

Lines changed: 189 additions & 4 deletions

File tree

index.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,19 @@ function extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandTyp
234234
return entriesEqual(leftHandOperand, rightHandOperand, options);
235235
case 'Map':
236236
return entriesEqual(leftHandOperand, rightHandOperand, options);
237+
case 'Temporal.PlainDate':
238+
case 'Temporal.PlainTime':
239+
case 'Temporal.PlainDateTime':
240+
case 'Temporal.Instant':
241+
case 'Temporal.ZonedDateTime':
242+
case 'Temporal.PlainYearMonth':
243+
case 'Temporal.PlainMonthDay':
244+
return leftHandOperand.equals(rightHandOperand);
245+
case 'Temporal.Duration':
246+
return leftHandOperand.total('nanoseconds') === rightHandOperand.total('nanoseconds');
247+
case 'Temporal.TimeZone':
248+
case 'Temporal.Calendar':
249+
return leftHandOperand.toString() === rightHandOperand.toString();
237250
default:
238251
return objectEqual(leftHandOperand, rightHandOperand, options);
239252
}

package-lock.json

Lines changed: 40 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
"type-detect": "^4.0.0"
5757
},
5858
"devDependencies": {
59+
"@js-temporal/polyfill": "^0.4.1",
5960
"benchmark": "^2.1.0",
6061
"browserify": "^17.0.0",
6162
"browserify-istanbul": "^3.0.1",

test/temporal-types.js

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
'use strict';
2+
3+
var assert = require('simple-assert');
4+
var { Temporal } = require('@js-temporal/polyfill');
5+
var eql = require('..');
6+
7+
describe('TC39 Temporal', function () {
8+
describe('Temporal.PlainDate', function () {
9+
it('returns true for same dates', function () {
10+
assert(eql(new Temporal.PlainDate(2022, 1, 1), new Temporal.PlainDate(2022, 1, 1)),
11+
'eql(new Temporal.PlainDate(2022, 1, 1), new Temporal.PlainDate(2022, 1, 1))');
12+
});
13+
14+
it('returns false for different dates', function () {
15+
assert(eql(new Temporal.PlainDate(2022, 1, 1), new Temporal.PlainDate(2022, 1, 2)) === false,
16+
'eql(new Temporal.PlainDate(2022, 1, 1), new Temporal.PlainDate(2022, 1, 2)) === false');
17+
});
18+
});
19+
20+
describe('Temporal.PlainTime', function () {
21+
it('returns true for same times', function () {
22+
assert(eql(new Temporal.PlainTime(12, 0, 0), new Temporal.PlainTime(12, 0, 0)),
23+
'eql(new Temporal.PlainTime(12, 0, 0), new Temporal.PlainTime(12, 0, 0))');
24+
});
25+
26+
it('returns false for different times', function () {
27+
assert(eql(new Temporal.PlainTime(12, 0, 0), new Temporal.PlainTime(13, 0, 0)) === false,
28+
'eql(new Temporal.PlainTime(12, 0, 0), new Temporal.PlainTime(13, 0, 0)) === false');
29+
});
30+
});
31+
32+
describe('Temporal.PlainDateTime', function () {
33+
it('returns true for same date times', function () {
34+
assert(eql(new Temporal.PlainDateTime(2022, 1, 1, 12, 0, 0), new Temporal.PlainDateTime(2022, 1, 1, 12, 0, 0)),
35+
'eql(new Temporal.PlainDateTime(2022, 1, 1, 12, 0, 0), new Temporal.PlainDateTime(2022, 1, 1, 12, 0, 0))');
36+
});
37+
38+
it('returns false for different date times', function () {
39+
assert(eql(new Temporal.PlainDateTime(2022, 1, 1, 12, 0, 0),
40+
new Temporal.PlainDateTime(2022, 1, 1, 13, 0, 0)) === false,
41+
// eslint-disable-next-line max-len
42+
'eql(new Temporal.PlainDateTime(2022, 1, 1, 12, 0, 0), new Temporal.PlainDateTime(2022, 1, 1, 13, 0, 0)) === false');
43+
});
44+
});
45+
46+
describe('Temporal.Instant', function () {
47+
it('returns true for same instants', function () {
48+
assert(eql(Temporal.Instant.from('2022-01-01T12:00:00.000Z'), Temporal.Instant.from('2022-01-01T12:00:00.000Z')),
49+
'eql(Temporal.Instant.from("2022-01-01T12:00:00.000Z"), Temporal.Instant.from("2022-01-01T12:00:00.000Z"))');
50+
});
51+
52+
it('returns false for different instants', function () {
53+
assert(eql(Temporal.Instant.from('2022-01-01T12:00:00.000Z'),
54+
Temporal.Instant.from('2022-01-01T13:00:00.000Z')) === false,
55+
// eslint-disable-next-line max-len
56+
'eql(Temporal.Instant.from("2022-01-01T12:00:00.000Z"), Temporal.Instant.from("2022-01-01T13:00:00.000Z")) === false');
57+
});
58+
});
59+
60+
describe('Temporal.ZonedDateTime', function () {
61+
it('returns true for same zoned date times', function () {
62+
assert(eql(Temporal.ZonedDateTime.from('2022-01-01T12:00:00.000Z[+01:00]'),
63+
Temporal.ZonedDateTime.from('2022-01-01T12:00:00.000Z[+01:00]')),
64+
// eslint-disable-next-line max-len
65+
'eql(Temporal.ZonedDateTime.from("2022-01-01T12:00:00.000Z[+01:00]"), Temporal.ZonedDateTime.from("2022-01-01T12:00:00.000Z[+01:00]"))');
66+
});
67+
68+
it('returns false for different zoned date times', function () {
69+
assert(eql(Temporal.ZonedDateTime.from('2022-01-01T12:00:00.000Z[+01:00]'),
70+
Temporal.ZonedDateTime.from('2022-01-01T13:00:00.000Z[+01:00]')) === false,
71+
// eslint-disable-next-line max-len
72+
'eql(Temporal.ZonedDateTime.from("2022-01-01T12:00:00.000Z[+01:00]"), Temporal.ZonedDateTime.from("2022-01-01T13:00:00.000Z[+01:00]")) === false');
73+
});
74+
});
75+
76+
describe('Temporal.PlainYearMonth', function () {
77+
it('returns true for same plain year months', function () {
78+
assert(eql(new Temporal.PlainYearMonth(2022, 1), new Temporal.PlainYearMonth(2022, 1)),
79+
'eql(new Temporal.PlainYearMonth(2022, 1), new Temporal.PlainYearMonth(2022, 1))');
80+
});
81+
82+
it('returns false for different plain year months', function () {
83+
assert(eql(new Temporal.PlainYearMonth(2022, 1), new Temporal.PlainYearMonth(2022, 2)) === false,
84+
'eql(new Temporal.PlainYearMonth(2022, 1), new Temporal.PlainYearMonth(2022, 2)) === false');
85+
});
86+
});
87+
88+
describe('Temporal.PlainMonthDay', function () {
89+
it('returns true for same plain month days', function () {
90+
assert(eql(new Temporal.PlainMonthDay(1, 1), new Temporal.PlainMonthDay(1, 1)),
91+
'eql(new Temporal.PlainMonthDay(1, 1), new Temporal.PlainMonthDay(1, 1))');
92+
});
93+
94+
it('returns false for different plain month days', function () {
95+
assert(eql(new Temporal.PlainMonthDay(1, 1), new Temporal.PlainMonthDay(2, 1)) === false,
96+
'eql(new Temporal.PlainMonthDay(1, 1), new Temporal.PlainMonthDay(2, 1)) === false');
97+
});
98+
});
99+
100+
describe('Temporal.Duration', function () {
101+
it('returns true for same durations', function () {
102+
assert(eql(new Temporal.Duration(0, 0, 0, 1), new Temporal.Duration(0, 0, 0, 1)),
103+
'eql(new Temporal.Duration(0, 0, 0, 1), new Temporal.Duration(0, 0, 0, 1))');
104+
});
105+
106+
it('returns false for different durations', function () {
107+
assert(eql(new Temporal.Duration(0, 0, 0, 1), new Temporal.Duration(0, 0, 0, 2)) === false,
108+
'eql(new Temporal.Duration(0, 0, 0, 1), new Temporal.Duration(0, 0, 0, 2)) === false');
109+
});
110+
});
111+
112+
describe('Temporal.TimeZone', function () {
113+
it('returns true for same time zones', function () {
114+
assert(eql(new Temporal.TimeZone('+01:00'), new Temporal.TimeZone('+01:00')),
115+
'eql(new Temporal.TimeZone("+01:00"), new Temporal.TimeZone("+01:00"))');
116+
});
117+
118+
it('returns false for different time zones', function () {
119+
assert(eql(new Temporal.TimeZone('+01:00'), new Temporal.TimeZone('+02:00')) === false,
120+
'eql(new Temporal.TimeZone("+01:00"), new Temporal.TimeZone("+02:00")) === false');
121+
});
122+
});
123+
124+
describe('Temporal.Calendar', function () {
125+
it('returns true for same calendars', function () {
126+
assert(eql(new Temporal.Calendar('gregory'), new Temporal.Calendar('gregory')),
127+
'eql(new Temporal.Calendar("gregory"), new Temporal.Calendar("gregory"))');
128+
});
129+
130+
it('returns false for different calendars', function () {
131+
assert(eql(new Temporal.Calendar('gregory'), new Temporal.Calendar('iso8601')) === false,
132+
'eql(new Temporal.Calendar("gregory"), new Temporal.Calendar("iso8601")) === false');
133+
});
134+
});
135+
});

0 commit comments

Comments
 (0)