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"; import { PreMiddlewareFunction, Query } from "mongoose"; // const { encode, decode } = iconv; export function countWords(string: string) { return stripHtml(string).result.split(/W+/).length; } export function populate( field: string, model: string, ): PreMiddlewareFunction> { return function (next: () => any) { this.populate(field, undefined, model); next(); }; } export function populateSelected( field: string, model: string, selection: string, ): PreMiddlewareFunction> { return function (next: () => any) { this.populate(field, selection, model); 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"))); }); } export function norm(text: string): string { return text .replace(/\n/g, "
") .replace(/

/gm, "

") .replace(/

 <\/p>/gm, "") .replace(/

<\/p>/gm, ""); }