next/lib/functions.ts

52 lines
1.4 KiB
TypeScript
Raw Normal View History

2023-10-02 15:55:38 -04:00
import { readFileSync } from "fs";
import { resolve } from "path";
// import chardet from "chardet";
// import iconv from "iconv-lite";
import { GridFSBucketReadStream } from "mongodb";
import { stripHtml } from "string-strip-html";
import { IStory } from "~/models/stories";
import { ficsHidden } from "./server/ficmas";
// const { encode, decode } = iconv;
export function countWords(string: string) {
return stripHtml(string).result.split(/W+/).length;
}
export function populate(field: string) {
return function (next: () => any) {
this.populate(field);
next();
};
}
export function populateSelected(field: string, selection: string) {
return function (next: () => any) {
this.populate(field, selection);
next();
};
}
export function isFicmasHidden(story: IStory): boolean {
return (
(story.ficmas.year == new Date().getFullYear() &&
story.ficmas.anniversary &&
new Date() < new Date(Date.parse("Aug 1 " + new Date().getFullYear()))) ||
(story.ficmas.year == new Date().getFullYear() &&
!story.ficmas.anniversary &&
ficsHidden(Date.now()))
);
}
export function stringifyStream(
stream: GridFSBucketReadStream,
): Promise<string> {
let chunks: Buffer[] = [];
return new Promise((res, rej) => {
stream.on("data", (c) => chunks.push(Buffer.from(c)));
stream.on("error", (err) => {
rej(err);
});
stream.on("end", () => res(Buffer.concat(chunks).toString("utf-8")));
});
}