ily.li/src/SlugGenerator.ts

18 lines
559 B
TypeScript
Raw Permalink Normal View History

2020-07-06 10:49:18 +02:00
import config from "config";
2021-01-25 17:43:26 +01:00
import {nanoid} from "nanoid";
2022-02-19 09:30:51 +01:00
import {ServerError} from "swaf/HttpError";
import FileModel from "./models/FileModel.js";
2020-07-06 10:49:18 +02:00
export default async function generateSlug(tries: number): Promise<string> {
let i = 0;
do {
2021-01-25 17:43:26 +01:00
const slug = nanoid(config.get<number>('newlyGeneratedSlugSize'));
2020-07-06 10:49:18 +02:00
if (!await FileModel.getBySlug(slug)) {
return slug;
}
i++;
} while (i < tries);
throw new ServerError('Failed to generate slug; newly generated slug size should be increased by 1.');
2020-11-22 14:13:57 +01:00
}