diff options
| author | anatawa12 <anatawa12@icloud.com> | 2025-04-02 10:37:16 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-02 10:37:16 +0900 |
| commit | 55d835ad51dd4e114d367b3711ce0025a15fe26f (patch) | |
| tree | 4e886142e418596661ebadef799c46e1c6fec91f /packages/backend/src/misc/id/ulid.ts | |
| parent | 🎨 (diff) | |
| download | misskey-55d835ad51dd4e114d367b3711ce0025a15fe26f.tar.gz misskey-55d835ad51dd4e114d367b3711ce0025a15fe26f.tar.bz2 misskey-55d835ad51dd4e114d367b3711ce0025a15fe26f.zip | |
Fix: 通知のページネーションで2つ以上読み込めなくなることがある問題 (#15277)
* fix: notifications-groupedのinclude/exclude typesに:groupedを指定できてしまう問題
* refactor: 通知の取得処理を Notification Service に移動
* feat: add function to parse additional part of id
* fix: 通知のページネーションが正しく動かない問題
Redisにのページネーションで使用する時間及びidとRedis上のものが混同されていたので、Misskeyが生成するものに寄せました。
* pnpm run build-misskey-js-with-types
* chore: XADDをretryするように
* fix: notifications-groupedでxrevrangeしているのを消し忘れていた
Diffstat (limited to 'packages/backend/src/misc/id/ulid.ts')
| -rw-r--r-- | packages/backend/src/misc/id/ulid.ts | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/packages/backend/src/misc/id/ulid.ts b/packages/backend/src/misc/id/ulid.ts index fc3654d6d2..8b81702d19 100644 --- a/packages/backend/src/misc/id/ulid.ts +++ b/packages/backend/src/misc/id/ulid.ts @@ -5,15 +5,27 @@ // Crockford's Base32 // https://github.com/ulid/spec#encoding +import { parseBigInt32 } from '@/misc/bigint.js'; + const CHARS = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'; export const ulidRegExp = /^[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$/; -export function parseUlid(id: string): { date: Date; } { - const timestamp = id.slice(0, 10); +function parseBase32(timestamp: string) { let time = 0; - for (let i = 0; i < 10; i++) { + for (let i = 0; i < timestamp.length; i++) { time = time * 32 + CHARS.indexOf(timestamp[i]); } - return { date: new Date(time) }; + return time; +} + +export function parseUlid(id: string): { date: Date; } { + return { date: new Date(parseBase32(id.slice(0, 10))) }; +} + +export function parseUlidFull(id: string): { date: number; additional: bigint; } { + return { + date: parseBase32(id.slice(0, 10)), + additional: parseBigInt32(id.slice(10, 26)), + }; } |