feat(06-01): add useReadingTime composable fallback (200 wpm)
- 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.
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
* 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))
|
||||
}
|
||||
Reference in New Issue
Block a user