fix(deps): replace relative-time with date-fns for timestamp formatting

- Replace relative-time package (which uses Temporal API) with date-fns
- Update formatDate to use formatDistanceToNow from date-fns
- Remove relative-time type declarations
- Apply fix to both helpers.ts and bookmarkUtils.tsx
- Fix runtime error: relative-time expects Temporal objects, not Date objects
- date-fns provides better compatibility with current JavaScript standards
This commit is contained in:
Gigi
2025-10-03 09:25:05 +02:00
parent 6ad273b5f9
commit 5ea81bda8e
6 changed files with 26 additions and 29 deletions

16
node_modules/.package-lock.json generated vendored
View File

@@ -2613,6 +2613,16 @@
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"license": "MIT"
},
"node_modules/date-fns": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
"integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/kossnocorp"
}
},
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -5027,12 +5037,6 @@
"node": ">=0.10.0"
}
},
"node_modules/relative-time": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/relative-time/-/relative-time-2.1.0.tgz",
"integrity": "sha512-F27Uw3MySeXh3CQF7ufdhujG9QqKlLIWUQ9EG0cSaddUCFVzqsPQ5lVV3aoqu9Z4hRuq0FZHtc/g4r6idnqnPA==",
"license": "MIT"
},
"node_modules/remark": {
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz",

18
package-lock.json generated
View File

@@ -17,11 +17,11 @@
"applesauce-loaders": "^3.1.0",
"applesauce-react": "^3.1.0",
"applesauce-relay": "^3.1.0",
"date-fns": "^4.1.0",
"nostr-tools": "^2.4.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-markdown": "^10.1.0",
"relative-time": "^2.1.0",
"remark-gfm": "^4.0.1"
},
"devDependencies": {
@@ -2603,6 +2603,16 @@
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"license": "MIT"
},
"node_modules/date-fns": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
"integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/kossnocorp"
}
},
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -5017,12 +5027,6 @@
"node": ">=0.10.0"
}
},
"node_modules/relative-time": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/relative-time/-/relative-time-2.1.0.tgz",
"integrity": "sha512-F27Uw3MySeXh3CQF7ufdhujG9QqKlLIWUQ9EG0cSaddUCFVzqsPQ5lVV3aoqu9Z4hRuq0FZHtc/g4r6idnqnPA==",
"license": "MIT"
},
"node_modules/remark": {
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz",

View File

@@ -19,11 +19,11 @@
"applesauce-loaders": "^3.1.0",
"applesauce-react": "^3.1.0",
"applesauce-relay": "^3.1.0",
"date-fns": "^4.1.0",
"nostr-tools": "^2.4.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-markdown": "^10.1.0",
"relative-time": "^2.1.0",
"remark-gfm": "^4.0.1"
},
"devDependencies": {

View File

@@ -1,7 +0,0 @@
declare module 'relative-time' {
class RelativeTime {
from(date: Date): string
}
export default RelativeTime
}

View File

@@ -1,14 +1,12 @@
import React from 'react'
import RelativeTime from 'relative-time'
import { formatDistanceToNow } from 'date-fns'
import { ParsedContent, ParsedNode } from '../types/bookmarks'
import ResolvedMention from '../components/ResolvedMention'
// Note: ContentWithResolvedProfiles is imported by components directly to keep this file component-only for fast refresh
const relativeTime = new RelativeTime()
export const formatDate = (timestamp: number) => {
const date = new Date(timestamp * 1000)
return relativeTime.from(date)
return formatDistanceToNow(date, { addSuffix: true })
}
// Component to render content with resolved nprofile names

View File

@@ -1,10 +1,8 @@
import RelativeTime from 'relative-time'
const relativeTime = new RelativeTime()
import { formatDistanceToNow } from 'date-fns'
export const formatDate = (timestamp: number): string => {
const date = new Date(timestamp * 1000)
return relativeTime.from(date)
return formatDistanceToNow(date, { addSuffix: true })
}
// Extract pubkeys from nprofile strings in content