Add "Playing It Safe" draft and improve type-checking
- Remove most type assertions and improve types - Validate wordCount property - Add "Vore Day" tag - Add licenses
This commit is contained in:
parent
17ef8c652c
commit
fe908a4989
37 changed files with 1309 additions and 841 deletions
|
|
@ -84,7 +84,8 @@ function getUsernameForWebsite(user: CollectionEntry<"users">, website: Website)
|
|||
}
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unhandled Website "${website}"`);
|
||||
let _: never = website;
|
||||
throw new Error(`Unhandled website "${website}"`);
|
||||
}
|
||||
} else {
|
||||
return link[1].replace(/^@/, "");
|
||||
|
|
@ -174,9 +175,9 @@ export const getStaticPaths: GetStaticPaths = async () => {
|
|||
export const GET: APIRoute<Props, Params> = async ({ props: { story }, site }) => {
|
||||
const { lang } = story.data;
|
||||
const copyrightedCharacters = await formatCopyrightedCharacters(story.data.copyrightedCharacters);
|
||||
const authorsList = await getEntries([story.data.authors].flat());
|
||||
const commissioner = story.data.commissioner && (await getEntry(story.data.commissioner));
|
||||
const requester = story.data.requester && (await getEntry(story.data.requester));
|
||||
const authorsList = await getEntries(story.data.authors);
|
||||
const commissionersList = story.data.commissioner && (await getEntries(story.data.commissioner));
|
||||
const requestersList = story.data.requester && (await getEntries(story.data.requester));
|
||||
|
||||
const description = Object.fromEntries(
|
||||
WEBSITE_LIST.map<[ExportWebsiteName, string]>(({ website, exportFormat }) => {
|
||||
|
|
@ -185,14 +186,24 @@ export const GET: APIRoute<Props, Params> = async ({ props: { story }, site }) =
|
|||
const storyDescription = (
|
||||
[
|
||||
story.data.description,
|
||||
`*${t(lang, "story/warnings", story.data.wordCount, story.data.contentWarning.trim())}*`,
|
||||
`*${t(lang, "story/warnings", story.data.wordCount, story.data.contentWarning)}*`,
|
||||
t(
|
||||
lang,
|
||||
"export_story/writing",
|
||||
authorsList.map((author) => u(author)),
|
||||
),
|
||||
requester && t(lang, "export_story/request_for", u(requester)),
|
||||
commissioner && t(lang, "export_story/commissioned_by", u(commissioner)),
|
||||
requestersList &&
|
||||
t(
|
||||
lang,
|
||||
"export_story/request_for",
|
||||
requestersList.map((requester) => u(requester)),
|
||||
),
|
||||
commissionersList &&
|
||||
t(
|
||||
lang,
|
||||
"export_story/commissioned_by",
|
||||
commissionersList.map((commissioner) => u(commissioner)),
|
||||
),
|
||||
...copyrightedCharacters.map(([user, characterList]) =>
|
||||
characterList[0] == ""
|
||||
? t(lang, "characters/all_characters_are_copyrighted_by", u(user))
|
||||
|
|
@ -206,12 +217,7 @@ export const GET: APIRoute<Props, Params> = async ({ props: { story }, site }) =
|
|||
(_, group1, group2) => `[${group1}](${new URL(group2, site).toString()})`,
|
||||
);
|
||||
if (exportFormat === "bbcode") {
|
||||
return [
|
||||
website,
|
||||
markdownToBbcode(storyDescription)
|
||||
.replaceAll(/\n\n\n+/g, "\n\n")
|
||||
.trim(),
|
||||
];
|
||||
return [website, markdownToBbcode(storyDescription).replaceAll(/\n\n\n+/g, "\n\n")];
|
||||
} else if (exportFormat === "markdown") {
|
||||
return [website, storyDescription.replaceAll(/\n\n\n+/g, "\n\n").trim()];
|
||||
} else {
|
||||
|
|
@ -227,8 +233,20 @@ export const GET: APIRoute<Props, Params> = async ({ props: { story }, site }) =
|
|||
"story/authors",
|
||||
authorsList.map((author) => getUsernameForLang(author, lang)),
|
||||
)}\n` +
|
||||
(commissioner ? `${t(lang, "story/commissioned_by", getUsernameForLang(commissioner, lang))}\n` : "") +
|
||||
(requester ? `${t(lang, "story/requested_by", getUsernameForLang(requester, lang))}\n` : "");
|
||||
(requestersList
|
||||
? `${t(
|
||||
lang,
|
||||
"story/requested_by",
|
||||
requestersList.map((requester) => getUsernameForLang(requester, lang)),
|
||||
)}\n`
|
||||
: "") +
|
||||
(commissionersList
|
||||
? `${t(
|
||||
lang,
|
||||
"story/commissioned_by",
|
||||
commissionersList.map((commissioner) => getUsernameForLang(commissioner, lang)),
|
||||
)}\n`
|
||||
: "");
|
||||
|
||||
const storyText = `${storyHeader}\n===\n\n${story.body.replaceAll(/\\([=*])/g, "$1")}`
|
||||
.replaceAll(/\n\n\n+/g, "\n\n")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue