diff --git a/CHANGELOG.md b/CHANGELOG.md index b33d6101bc..68cce41c82 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 1b58fe140e..180ee995e1 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 24199e4a1c..4a15ccfc51 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);