From 4223b5242d85c678d84f79253a76ab21e2d474da Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Fri, 12 Feb 2021 00:03:47 +0100 Subject: [PATCH] Add toRfc3339WithNanoseconds --- packages/tendermint-rpc/src/dates.spec.ts | 39 ++++++++++++++++++++++- packages/tendermint-rpc/src/dates.ts | 11 +++++-- packages/tendermint-rpc/src/index.ts | 7 +++- 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/packages/tendermint-rpc/src/dates.spec.ts b/packages/tendermint-rpc/src/dates.spec.ts index fa857109..4d028692 100644 --- a/packages/tendermint-rpc/src/dates.spec.ts +++ b/packages/tendermint-rpc/src/dates.spec.ts @@ -1,6 +1,6 @@ import { ReadonlyDate } from "readonly-date"; -import { DateTime, fromRfc3339WithNanoseconds } from "./dates"; +import { DateTime, DateWithNanoseconds, fromRfc3339WithNanoseconds, toRfc3339WithNanoseconds } from "./dates"; describe("dates", () => { it("fromRfc3339WithNanoseconds", () => { @@ -13,6 +13,43 @@ describe("dates", () => { expect(fromRfc3339WithNanoseconds("2020-12-15T10:57:26.778000009Z").nanoseconds).toEqual(9); }); + describe("toRfc3339WithNanoseconds", () => { + it("works", () => { + const date1 = new ReadonlyDate("2020-12-15T10:57:26.778Z"); + (date1 as any).nanoseconds = 0; + expect(toRfc3339WithNanoseconds(date1)).toEqual("2020-12-15T10:57:26.778000000Z"); + const date2 = new ReadonlyDate("2020-12-15T10:57:26.778Z"); + (date2 as any).nanoseconds = 900000; + expect(toRfc3339WithNanoseconds(date2)).toEqual("2020-12-15T10:57:26.778900000Z"); + const date3 = new ReadonlyDate("2020-12-15T10:57:26.778Z"); + (date3 as any).nanoseconds = 90000; + expect(toRfc3339WithNanoseconds(date3)).toEqual("2020-12-15T10:57:26.778090000Z"); + const date4 = new ReadonlyDate("2020-12-15T10:57:26.778Z"); + (date4 as any).nanoseconds = 9000; + expect(toRfc3339WithNanoseconds(date4)).toEqual("2020-12-15T10:57:26.778009000Z"); + const date5 = new ReadonlyDate("2020-12-15T10:57:26.778Z"); + (date5 as any).nanoseconds = 900; + expect(toRfc3339WithNanoseconds(date5)).toEqual("2020-12-15T10:57:26.778000900Z"); + const date6 = new ReadonlyDate("2020-12-15T10:57:26.778Z"); + (date6 as any).nanoseconds = 90; + expect(toRfc3339WithNanoseconds(date6)).toEqual("2020-12-15T10:57:26.778000090Z"); + const date7 = new ReadonlyDate("2020-12-15T10:57:26.778Z"); + (date7 as any).nanoseconds = 9; + expect(toRfc3339WithNanoseconds(date7)).toEqual("2020-12-15T10:57:26.778000009Z"); + }); + + it("works for DateWithNanoseconds", () => { + const date1: DateWithNanoseconds = new Date("2020-12-15T10:57:26.778Z"); + date1.nanoseconds = 1; + expect(toRfc3339WithNanoseconds(date1)).toEqual("2020-12-15T10:57:26.778000001Z"); + }); + + it("works for Date", () => { + const date1 = new Date("2020-12-15T10:57:26.778Z"); + expect(toRfc3339WithNanoseconds(date1)).toEqual("2020-12-15T10:57:26.778000000Z"); + }); + }); + describe("DateTime", () => { it("decodes a string", () => { expect(DateTime.decode("2020-12-15T10:57:26.778Z").nanoseconds).toEqual(0); diff --git a/packages/tendermint-rpc/src/dates.ts b/packages/tendermint-rpc/src/dates.ts index e99e7968..e4928fc8 100644 --- a/packages/tendermint-rpc/src/dates.ts +++ b/packages/tendermint-rpc/src/dates.ts @@ -20,15 +20,20 @@ export function fromRfc3339WithNanoseconds(dateTimeString: string): DateWithNano return out; } +export function toRfc3339WithNanoseconds(dateTime: ReadonlyDateWithNanoseconds): string { + const millisecondIso = dateTime.toISOString(); + const nanoseconds = dateTime.nanoseconds?.toString() ?? ""; + return `${millisecondIso.slice(0, -1)}${nanoseconds.padStart(6, "0")}Z`; +} + export class DateTime { /** @deprecated Use fromRfc3339WithNanoseconds instead */ public static decode(dateTimeString: string): ReadonlyDateWithNanoseconds { return fromRfc3339WithNanoseconds(dateTimeString); } + /** @deprecated Use toRfc3339WithNanoseconds instead */ public static encode(dateTime: ReadonlyDateWithNanoseconds): string { - const millisecondIso = dateTime.toISOString(); - const nanoseconds = dateTime.nanoseconds?.toString() ?? ""; - return `${millisecondIso.slice(0, -1)}${nanoseconds.padStart(6, "0")}Z`; + return toRfc3339WithNanoseconds(dateTime); } } diff --git a/packages/tendermint-rpc/src/index.ts b/packages/tendermint-rpc/src/index.ts index 17f2f367..c6584a41 100644 --- a/packages/tendermint-rpc/src/index.ts +++ b/packages/tendermint-rpc/src/index.ts @@ -1,7 +1,12 @@ export { Adaptor } from "./adaptor"; export { adaptor33, adaptor34 } from "./adaptors"; export { Client } from "./client"; -export { DateTime, ReadonlyDateWithNanoseconds, fromRfc3339WithNanoseconds } from "./dates"; +export { + DateTime, + ReadonlyDateWithNanoseconds, + fromRfc3339WithNanoseconds, + toRfc3339WithNanoseconds, +} from "./dates"; export { AbciInfoRequest, AbciQueryParams,