0.1.5Updated 6 months ago
import { flow } from "@infinity-beyond/utils/flow.ts";
import { singular } from "https://deno.land/x/deno_plural@2.0.0/mod.ts";

export const Sluggify = (input: string) => {
  return flow(
    singularize,
    add_underscores_before_capitals,
    remove_invalid_characters,
    remove_repeated_underscores,
    trim_undescores_and_spaces,
    to_lowercase,
  )(input);
}

const singularize = (input: string) => singular(input);
const add_underscores_before_capitals = (input: string) => input.replace(/([A-Z])/g, '_$1');
const remove_invalid_characters = (input: string) => input.replace(/[^\w]/g, '_');
const remove_repeated_underscores = (input: string) => input.replace(/_{2,}/g, '_');
const trim_undescores_and_spaces = (input: string) => input.replace(/^[\s_]+|[\s_]+$/, '');
const to_lowercase = (input: string) => input.toLowerCase();