// 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"; import { IFicmas } from "@models/challenges/ficmas"; // 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 as IFicmas)?.year == new Date().getFullYear() && (story.ficmas as IFicmas)?.anniversary && new Date() < new Date(Date.parse("Aug 1 " + new Date().getFullYear()))) || ((story.ficmas as IFicmas)?.year == new Date().getFullYear() && !(story.ficmas as IFicmas)?.anniversary && ficsHidden(Date.now())) ); } export function bufferizeStream(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))); }); } export async function stringifyStream(stream: GridFSBucketReadStream): Promise { let str = await bufferizeStream(stream); return str.toString("utf-8"); } export function norm(text: string): string { return text .replace(/\n/g, "
") .replace(/

/gm, "

") .replace(/

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

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