64dfe376bf
- Pure synchronous helper returning minutes (>= 1) from either a pre-computed word count (number) or raw text (string, tokenized on whitespace). - Client-side safety net when `article.minutes` isn't yet populated (e.g., dev hot-reload before the Nitro hook re-parsed). Source of truth remains the Nitro `content:file:afterParse` hook (D-19). - Same 200 wpm formula as server-side hook — ensures listing ↔ article parity. - Auto-imported by Nuxt thanks to `use*` naming convention.
18 lines
748 B
TypeScript
18 lines
748 B
TypeScript
/**
|
|
* Fallback reading-time helper when `article.minutes` is not available
|
|
* (e.g., dev hot-reload before the Nitro hook has re-parsed).
|
|
*
|
|
* Source of truth = server/plugins/reading-time.ts + content.config.ts schema.
|
|
* This is only a client-side safety net (per D-19).
|
|
*
|
|
* @param wordCountOrText number (word count already computed) OR string (raw text to tokenize)
|
|
* @returns minutes (>= 1), rounded up, using 200 words per minute
|
|
*/
|
|
export function useReadingTime(wordCountOrText: number | string): number {
|
|
if (typeof wordCountOrText === 'number') {
|
|
return Math.max(1, Math.ceil(wordCountOrText / 200))
|
|
}
|
|
const count = wordCountOrText.trim().split(/\s+/).filter(Boolean).length
|
|
return Math.max(1, Math.ceil(count / 200))
|
|
}
|