{"version":3,"file":"index.cjs","names":[],"sources":["../src/helpers.ts","../src/transformers.ts","../src/convert.ts","../src/revert.ts"],"sourcesContent":["export type Dictionary = Record<string, string>;\n\nexport const CAMELCASE_REGEXP_PATTERN =\n  \"(?:[a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))\";\n\nexport function replace(value: string, dictionary: Dictionary): string {\n  for (let index = 0, length = value.length; index < length; index++) {\n    const char = value[index];\n    const replacement = dictionary[char];\n\n    if (replacement !== undefined) {\n      value = value.slice(0, index) + replacement + value.slice(index + 1);\n\n      const addedCharsCount = replacement.length - 1;\n\n      index += addedCharsCount;\n      length += addedCharsCount;\n    }\n  }\n\n  return value;\n}\n","export type Transformer = (fragments: string[], separator: string) => string;\n\nexport const LOWERCASE_TRANSFORMER: Transformer = (fragments, separator) => {\n  return fragments.join(separator).toLowerCase();\n};\n\nexport const SENTENCECASE_TRANSFORMER: Transformer = (fragments, separator) => {\n  const sentence = fragments.join(separator);\n\n  return sentence.charAt(0).toUpperCase() + sentence.slice(1).toLowerCase();\n};\n\nexport const TITLECASE_TRANSFORMER: Transformer = (fragments, separator) => {\n  const buffer = [];\n\n  for (let index = 0; index < fragments.length; index++) {\n    buffer.push(\n      fragments[index].charAt(0).toUpperCase() +\n        fragments[index].slice(1).toLowerCase(),\n    );\n  }\n\n  return buffer.join(separator);\n};\n\nexport const UPPERCASE_TRANSFORMER: Transformer = (fragments, separator) => {\n  return fragments.join(separator).toUpperCase();\n};\n","import { CAMELCASE_REGEXP_PATTERN, type Dictionary, replace } from \"./helpers\";\nimport { LOWERCASE_TRANSFORMER, type Transformer } from \"./transformers\";\n\nexport interface ConvertOptions {\n  camelCase?: boolean;\n  dictionary?: Dictionary;\n  separator?: string;\n  transformer?: Transformer | null;\n}\n\nconst COMBINING_CHARS = /[\\u0300-\\u036F\\u1AB0-\\u1AFF\\u1DC0-\\u1DFF]+/g;\n\nconst CONVERT = /[A-Za-z\\d]+/g;\n\nconst CONVERT_CAMELCASE = new RegExp(\n  `[A-Za-z\\\\d]*?${CAMELCASE_REGEXP_PATTERN}|[A-Za-z\\\\d]+`,\n  \"g\",\n);\n\nexport default function convert(\n  value: string,\n  {\n    camelCase = true,\n    dictionary,\n    separator = \"-\",\n    transformer = LOWERCASE_TRANSFORMER,\n  }: ConvertOptions = {},\n): string {\n  const fragments = (dictionary ? replace(value, dictionary) : value)\n    .normalize(\"NFKD\")\n    .replace(COMBINING_CHARS, \"\")\n    .match(camelCase ? CONVERT_CAMELCASE : CONVERT);\n\n  if (!fragments) {\n    return \"\";\n  }\n\n  return transformer\n    ? transformer(fragments, separator)\n    : fragments.join(separator);\n}\n","import { CAMELCASE_REGEXP_PATTERN } from \"./helpers\";\nimport type { Transformer } from \"./transformers\";\n\nconst REVERT = /[^-._~!$&'()*+,;=]+/g;\n\nconst REVERT_CAMELCASE = new RegExp(\n  `[^-._~!$&'()*+,;=]*?${CAMELCASE_REGEXP_PATTERN}|[^-._~!$&'()*+,;=]+`,\n  \"g\",\n);\n\nconst REVERT_CAMELCASE_ONLY = new RegExp(\n  `.*?${CAMELCASE_REGEXP_PATTERN}|.+`,\n  \"g\",\n);\n\nexport interface RevertOptions {\n  camelCase?: boolean;\n  separator?: string | null;\n  transformer?: Transformer | null;\n}\n\nexport default function revert(\n  value: string,\n  {\n    camelCase = false,\n    separator = null,\n    transformer = null,\n  }: RevertOptions = {},\n): string {\n  let fragments: RegExpMatchArray | null;\n\n  /* Determine which method will be used to split the slug */\n\n  if (separator === \"\") {\n    fragments = camelCase ? value.match(REVERT_CAMELCASE_ONLY) : [value];\n  } else if (typeof separator === \"string\") {\n    fragments = value.split(separator) as [string, ...string[]];\n  } else {\n    fragments = value.match(camelCase ? REVERT_CAMELCASE : REVERT);\n  }\n\n  if (!fragments) {\n    return \"\";\n  }\n\n  return transformer ? transformer(fragments, \" \") : fragments.join(\" \");\n}\n"],"mappings":"+FAEA,MAAa,EACX,yCAEF,SAAgB,EAAQ,EAAe,EAAgC,CACrE,IAAK,IAAI,EAAQ,EAAG,EAAS,EAAM,OAAQ,EAAQ,EAAQ,IAAS,CAElE,IAAM,EAAc,EADP,EAAM,IAGnB,GAAI,IAAgB,IAAA,GAAW,CAC7B,EAAQ,EAAM,MAAM,EAAG,EAAM,CAAG,EAAc,EAAM,MAAM,EAAQ,EAAE,CAEpE,IAAM,EAAkB,EAAY,OAAS,EAE7C,GAAS,EACT,GAAU,GAId,OAAO,EClBT,MAAa,GAAsC,EAAW,IACrD,EAAU,KAAK,EAAU,CAAC,aAAa,CAGnC,GAAyC,EAAW,IAAc,CAC7E,IAAM,EAAW,EAAU,KAAK,EAAU,CAE1C,OAAO,EAAS,OAAO,EAAE,CAAC,aAAa,CAAG,EAAS,MAAM,EAAE,CAAC,aAAa,EAG9D,GAAsC,EAAW,IAAc,CAC1E,IAAM,EAAS,EAAE,CAEjB,IAAK,IAAI,EAAQ,EAAG,EAAQ,EAAU,OAAQ,IAC5C,EAAO,KACL,EAAU,GAAO,OAAO,EAAE,CAAC,aAAa,CACtC,EAAU,GAAO,MAAM,EAAE,CAAC,aAAa,CAC1C,CAGH,OAAO,EAAO,KAAK,EAAU,EAGlB,GAAsC,EAAW,IACrD,EAAU,KAAK,EAAU,CAAC,aAAa,CChB1C,EAAkB,8CAElB,EAAU,eAEV,EAAwB,OAC5B,gBAAgB,EAAyB,eACzC,IACD,CAED,SAAwB,EACtB,EACA,CACE,YAAY,GACZ,aACA,YAAY,IACZ,cAAc,GACI,EAAE,CACd,CACR,IAAM,GAAa,EAAa,EAAQ,EAAO,EAAW,CAAG,GAC1D,UAAU,OAAO,CACjB,QAAQ,EAAiB,GAAG,CAC5B,MAAM,EAAY,EAAoB,EAAQ,CAMjD,OAJK,EAIE,EACH,EAAY,EAAW,EAAU,CACjC,EAAU,KAAK,EAAU,CALpB,GC/BX,MAAM,EAAS,uBAET,EAAuB,OAC3B,uBAAuB,EAAyB,sBAChD,IACD,CAEK,EAA4B,OAChC,MAAM,EAAyB,KAC/B,IACD,CAQD,SAAwB,EACtB,EACA,CACE,YAAY,GACZ,YAAY,KACZ,cAAc,MACG,EAAE,CACb,CACR,IAAI,EAgBJ,MAZA,CAKE,EALE,IAAc,GACJ,EAAY,EAAM,MAAM,EAAsB,CAAG,CAAC,EAAM,CAC3D,OAAO,GAAc,SAClB,EAAM,MAAM,EAAU,CAEtB,EAAM,MAAM,EAAY,EAAmB,EAAO,CAG3D,EAIE,EAAc,EAAY,EAAW,IAAI,CAAG,EAAU,KAAK,IAAI,CAH7D"}