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 { 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"))); }); }