{"version":3,"sources":["../../src/functions/kebabCase/kebabCase.ts"],"names":[],"mappings":";AAcO,SAAS,UAA4B,QAAyB;AACnE,MAAI,CAAC,UAAU,KAAK,MAAM,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,SAAO,OACJ,MAAM,WAAW,GAChB,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAC3B,KAAK,GAAG;AACb;AAEA,IAAM,cAAc","sourcesContent":["import type { KebabCase as KebabCaseImplementation } from 'type-fest';\n\n/**\n * Changes the casing of a string to kebab case.\n * @param string The input string to change the casing of.\n * @returns A new string with the casing changed to kebab case.\n * @example\n * ```ts\n * kebabCase('fooBar') // 'foo-bar'\n * kebabCase('foo bar') // 'foo-bar'\n * kebabCase('foo-bar') // 'foo-bar'\n * kebabCase('fooBar42') // 'foo-bar42'\n * ```\n */\nexport function kebabCase<S extends string>(string: S): KebabCase<S> {\n  if (!/[a-z]+/i.test(string)) {\n    return string as KebabCase<S>;\n  }\n\n  return string\n    .match(KEBAB_REGEX)\n    ?.map((x) => x.toLowerCase())\n    .join('-') as KebabCase<S>;\n}\n\nconst KEBAB_REGEX = /[A-Z]{2,}(?=[A-Z][a-z]+\\d*|\\b)|[A-Z]?[a-z]+\\d*|[A-Z]|\\d+/g;\n\n/**\n * Changes the casing of a string to kebab case.\n * @see {@link kebabCase}.\n */\nexport type KebabCase<S extends string> = TrimDashes<\n  ReduceDashes<KebabCaseImplementation<S>>\n>;\n\n/**\n * Reduces multiple dashes to a single dash.\n * @param S The input string.\n * @returns A new string with multiple dashes reduced to a single dash.\n * @example\n * ```ts\n * ReduceDashes<'foo--bar'> // 'foo-bar'\n * ReduceDashes<'foo-bar'> // 'foo-bar'\n * ReduceDashes<'foo---bar'> // 'foo-bar'\n * ```\n */\ntype ReduceDashes<S extends string> = S extends `${infer L}--${infer R}`\n  ? ReduceDashes<`${L}-${R}`>\n  : S extends `${infer L}${infer D}--${infer R}`\n    ? ReduceDashes<`${L}${D}-${R}`>\n    : S;\n\n/**\n * Trims dashes from the start and end of a string.\n * @param S The input string.\n * @returns A new string with dashes trimmed from the start and end.\n * @example\n * ```ts\n * TrimDashes<'-foo-bar-'> // 'foo-bar'\n * TrimDashes<'foo-bar-'> // 'foo-bar'\n * TrimDashes<'-foo-bar'> // 'foo-bar'\n * TrimDashes<'foo-bar'> // 'foo-bar'\n * ```\n */\ntype TrimDashes<S extends string> = S extends `-${infer R}`\n  ? TrimDashes<R>\n  : S extends `${infer L}-`\n    ? TrimDashes<L>\n    : S;\n"]}