-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathindex.ts
126 lines (120 loc) · 3.1 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import {
Author,
Chapter,
LockedWorkSummary,
WorkSummary,
} from "types/entities";
import {
getChaptersList,
getWorkAuthors as getWorkAuthorsFromChaptersIndex,
getWorkTitle as getWorkTitleFromChaptersIndex,
} from "./chapter-getters";
import {
getChapterIndex,
getChapterName,
getChapterSummary,
getWorkAdditionalTags,
getWorkAuthors,
getWorkBookmarkCount,
getWorkCategory,
getWorkCharacters,
getWorkCommentCount,
getWorkFandoms,
getWorkHits,
getWorkKudosCount,
getWorkLanguage,
getWorkLocked,
getWorkPublishDate,
getWorkPublishedChapters,
getWorkRating,
getWorkRelationships,
getWorkSeries,
getWorkSummary,
getWorkTitle,
getWorkTotalChapters,
getWorkUpdateDate,
getWorkWarnings,
getWorkWordCount,
} from "./work-getters";
import { loadChaptersIndexPage, loadWorkPage } from "../page-loaders";
export const getWork = async ({
workId,
chapterId,
}: {
workId: string;
chapterId?: string;
}): Promise<WorkSummary | LockedWorkSummary> => {
const workPage = await loadWorkPage({ workId, chapterId });
if (getWorkLocked(workPage)) {
return {
id: workId.toString(),
locked: true,
};
}
const totalChapters = getWorkTotalChapters(workPage);
const publishedChapters = getWorkPublishedChapters(workPage);
const chapterIndex = getChapterIndex(workPage);
return {
id: workId.toString(),
authors: getWorkAuthors(workPage),
title: getWorkTitle(workPage),
words: getWorkWordCount(workPage),
language: getWorkLanguage(workPage),
rating: getWorkRating(workPage),
category: getWorkCategory(workPage),
// TODO: figure out how to get this
adult: false,
fandoms: getWorkFandoms(workPage),
tags: {
warnings: getWorkWarnings(workPage),
characters: getWorkCharacters(workPage),
relationships: getWorkRelationships(workPage),
additional: getWorkAdditionalTags(workPage),
},
publishedAt: getWorkPublishDate(workPage),
updatedAt: getWorkUpdateDate(workPage),
chapters: {
published: publishedChapters,
total: totalChapters,
},
chapterInfo: chapterId
? {
id: chapterId,
index: chapterIndex,
name: getChapterName(workPage),
summary: getChapterSummary(workPage),
}
: null,
complete: totalChapters !== null && totalChapters === publishedChapters,
series: getWorkSeries(workPage),
summary:
chapterIndex === 1 || totalChapters === 1
? getWorkSummary(workPage)
: null,
stats: {
bookmarks: getWorkBookmarkCount(workPage),
comments: getWorkCommentCount(workPage),
hits: getWorkHits(workPage),
kudos: getWorkKudosCount(workPage),
},
locked: false,
};
};
export const getWorkWithChapters = async ({
workId,
}: {
workId: string;
}): Promise<{
title: string;
authors: "Anonymous" | Author[];
workId: string;
chapters: Chapter[];
}> => {
const page = await loadChaptersIndexPage({ workId });
return {
title: getWorkTitleFromChaptersIndex(page),
authors: getWorkAuthorsFromChaptersIndex(page),
workId,
chapters: getChaptersList(page),
};
};