From da9459553e9eec4eda2d701fe3febcbdf8430d23 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Fri, 12 Feb 2021 14:37:24 +0100 Subject: [PATCH] Let fromRfc3339 return mutable Date type --- CHANGELOG.md | 3 +++ packages/encoding/src/rfc3339.ts | 7 +++---- packages/tendermint-rpc/src/dates.ts | 3 +-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b33d6101..68cce41c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,9 @@ ### Changed +- @cosmjs/encoding: Change return type of `fromRfc3339` from `ReadonlyDate` to + `Date` as the caller becomes the owner of the object and can safely mutate it + in any way. - @cosmjs/launchpad-ledger: Renamed to @cosmjs/ledger-amino. - @cosmjs/ledger-amino: `LedgerSigner.sign` method renamed `signAmino`. diff --git a/packages/encoding/src/rfc3339.ts b/packages/encoding/src/rfc3339.ts index 1b58fe14..180ee995 100644 --- a/packages/encoding/src/rfc3339.ts +++ b/packages/encoding/src/rfc3339.ts @@ -7,7 +7,7 @@ function padded(integer: number, length = 2): string { return filled.substring(filled.length - length); } -export function fromRfc3339(str: string): ReadonlyDate { +export function fromRfc3339(str: string): Date { const matches = rfc3339Matcher.exec(str); if (!matches) { throw new Error("Date string is not in RFC3339 format"); @@ -40,9 +40,8 @@ export function fromRfc3339(str: string): ReadonlyDate { const tzOffset = tzOffsetSign * (tzOffsetHours * 60 + tzOffsetMinutes) * 60; // seconds - return new ReadonlyDate( - ReadonlyDate.UTC(year, month - 1, day, hour, minute, second, milliSeconds) - tzOffset * 1000, - ); + const timestamp = Date.UTC(year, month - 1, day, hour, minute, second, milliSeconds) - tzOffset * 1000; + return new Date(timestamp); } export function toRfc3339(date: Date | ReadonlyDate): string { diff --git a/packages/tendermint-rpc/src/dates.ts b/packages/tendermint-rpc/src/dates.ts index 24199e4a..4a15ccfc 100644 --- a/packages/tendermint-rpc/src/dates.ts +++ b/packages/tendermint-rpc/src/dates.ts @@ -12,8 +12,7 @@ export interface DateWithNanoseconds extends Date { } export function fromRfc3339WithNanoseconds(dateTimeString: string): DateWithNanoseconds { - // fromRfc3339 should give the caller a regular Date directly - const out: DateWithNanoseconds = new Date(fromRfc3339(dateTimeString).getTime()); + const out: DateWithNanoseconds = fromRfc3339(dateTimeString); const nanosecondsMatch = dateTimeString.match(/\.(\d+)Z$/); const nanoseconds = nanosecondsMatch ? nanosecondsMatch[1].slice(3) : ""; out.nanoseconds = parseInt(nanoseconds.padEnd(6, "0"), 10);