export type OneOrMore = [T, ...T[]]; export interface MetaLanguage { local: string; english: string; pop: number | null; direction: 'ltr' | 'rtl'; } export interface MetaTranslationName { local: string; local_abbrev: string; english: string; english_abbrev: string; } export interface MetaRestrictions { forbid_limitless: boolean; forbid_commercial: boolean; forbid_derivatives: boolean | 'same-license'; forbid_attributionless: boolean; forbid_other: boolean; } export interface MetaStandardLicense { name: string; restrictions: MetaRestrictions; } export interface MetaCopyright { attribution: string; attribution_url: string; licenses: { license: string | MetaRestrictions; url: string; }[]; } export interface DistManifestItem { name: MetaTranslationName; year: number; books_ot: true | string[]; books_nt: true | string[]; copyright: MetaCopyright; direction: 'ltr' | 'rtl'; tags: MetaTag[]; partial?: string[]; } export interface DistTranslation extends DistManifestItem { } export interface DistGloss extends DistManifestItem { } export interface DistNotes extends DistManifestItem { } export type MetaTag = 'recommended' | 'archaic' | 'questionable' | 'niche' | 'literal1' | 'literal2' | 'literal3' | 'literal4' | 'literal5'; export interface DistManifest { bibles: Record; glosses: Record; notes: Record; languages: Record; language2to3: Record; languages_most_spoken: string[]; books_ordered: string[]; book_names_english: Record; licenses: Record; } export interface BookSection { start_chapter: number; start_verse: number; end_chapter: number; end_verse: number; heading: string | null; } export interface DistTranslationExtra { book_names: Record; chapter_headings: Record; sections: Record; wj_markup: boolean; } export interface BookNames { normal: string; long: string; abbrev: string; } export interface BibleJsonHtml { book: string; name: BookNames; contents: string[][][]; } export interface TxtHeading { type: 'heading'; contents: string; level: 1 | 2 | 3; } export interface TxtNote { type: 'note'; contents: string; } export type TxtContent = string | TxtHeading | TxtNote; export interface BibleJsonTxt { book: string; name: BookNames; contents: TxtContent[][][]; } export interface BibleJsonTypst { book: string; name: BookNames; contents: string[][][]; } export type CrossrefSingle = [string, number, number]; export type CrossrefRange = [...CrossrefSingle, number, number]; export type CrossrefData = Record>; export interface GlossesData { trans_id: string; book: string; contents: [string, string][][][]; } export interface MultiVerseNote { start_chapter: number; start_verse: number; end_chapter: number; end_verse: number; contents: string; } export interface NotesData { notes_id: string; book: string; verses: Record>; ranges: MultiVerseNote[]; } export interface SearchData { id: string; source: string; url: string; books: Record; }