From 2e22f00a981919069968a868404a144b6b90ef2b Mon Sep 17 00:00:00 2001 From: SnowCait Date: Sat, 15 Aug 2026 12:40:02 +0900 Subject: [PATCH] export event comparator. --- core.test.ts | 18 +++++++++++++++++- core.ts | 18 ++++++++++++------ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/core.test.ts b/core.test.ts index 60475ad..643e03c 100644 --- a/core.test.ts +++ b/core.test.ts @@ -1,5 +1,21 @@ import { test, expect } from 'bun:test' -import { sortEvents } from './core.ts' +import { compareEvents, sortEvents } from './core.ts' + +test('compareEvents', () => { + const event = { + id: 'abc123', + pubkey: 'key1', + created_at: 1620000000, + kind: 1, + tags: [], + content: 'Hello', + sig: 'sig1', + } + + expect(compareEvents(event, { ...event, created_at: 1610000000 })).toBeLessThan(0) + expect(compareEvents(event, { ...event, id: 'abc124' })).toBeLessThan(0) + expect(compareEvents(event, { ...event })).toBe(0) +}) test('sortEvents', () => { const events = [ diff --git a/core.ts b/core.ts index d479da3..c07c67f 100644 --- a/core.ts +++ b/core.ts @@ -52,16 +52,22 @@ export function validateEvent(event: T): event is T & UnsignedEvent { return true } +/** + * Compare events in reverse-chronological order by the `created_at` timestamp, + * and then by the event `id` (lexicographically) in case of ties. + */ +export function compareEvents(a: Event, b: Event): number { + if (a.created_at !== b.created_at) { + return b.created_at - a.created_at + } + return a.id.localeCompare(b.id) +} + /** * Sort events in reverse-chronological order by the `created_at` timestamp, * and then by the event `id` (lexicographically) in case of ties. * This mutates the array. */ export function sortEvents(events: Event[]): Event[] { - return events.sort((a: NostrEvent, b: NostrEvent): number => { - if (a.created_at !== b.created_at) { - return b.created_at - a.created_at - } - return a.id.localeCompare(b.id) - }) + return events.sort(compareEvents) }