external-reading.ts 998 B

123456789101112131415161718192021
  1. export function extractReadingWords(value: unknown): string[] {
  2. let parsed = value;
  3. for (let depth = 0; depth < 2 && typeof parsed === 'string'; depth += 1) {
  4. try { parsed = JSON.parse(parsed) as unknown; }
  5. catch { return []; }
  6. }
  7. const entries = Array.isArray(parsed)
  8. ? parsed
  9. : parsed && typeof parsed === 'object' ? Object.values(parsed) : [];
  10. return entries
  11. .map((entry) => {
  12. if (typeof entry === 'string') return entry.trim();
  13. if (!entry || typeof entry !== 'object') return '';
  14. const item = entry as Record<string, unknown>;
  15. const detailValue = Array.isArray(item['detail']) ? item['detail'][0] : item['detail'];
  16. const detail = detailValue && typeof detailValue === 'object' ? detailValue as Record<string, unknown> : {};
  17. return String(item['Title'] ?? item['title'] ?? item['word'] ?? item['Word']
  18. ?? detail['Title'] ?? detail['title'] ?? detail['word'] ?? detail['Word'] ?? '').trim();
  19. })
  20. .filter(Boolean);
  21. }