{"version":3,"file":"index.cjs","sources":["../src/normalize.ts","../src/special.ts","../src/cases.ts"],"sourcesContent":["export let normalizeCase = (input: string) => {\n  return (\n    input\n      // Replace underscores and hyphens with spaces for easy splitting\n      .replace(/[_-]/g, ' ')\n      // Insert spaces between lowercase-to-uppercase transitions (camelCase & PascalCase)\n      .replace(/([a-z])([A-Z])/g, '$1 $2')\n      // Insert spaces between number-letter transitions\n      .replace(/([0-9])([a-zA-Z])/g, '$1 $2')\n      .replace(/([a-zA-Z])([0-9])/g, '$1 $2')\n      // Split by spaces and normalize to lowercase\n      .split(/\\s+/)\n      .map(word => word.trim().toLowerCase())\n      .filter(Boolean) // Remove empty strings\n  );\n};\n","// Blatantly stolen from https://github.com/vercel/title\n\nlet conjunctions = ['for', 'and', 'nor', 'but', 'or', 'yet', 'so'];\n\nlet articles = ['a', 'an', 'the'];\n\nlet prepositions = [\n  'aboard',\n  'about',\n  'above',\n  'across',\n  'after',\n  'against',\n  'along',\n  'amid',\n  'among',\n  'anti',\n  'around',\n  'as',\n  'at',\n  'before',\n  'behind',\n  'below',\n  'beneath',\n  'beside',\n  'besides',\n  'between',\n  'beyond',\n  'but',\n  'by',\n  'concerning',\n  'considering',\n  'despite',\n  'down',\n  'during',\n  'except',\n  'excepting',\n  'excluding',\n  'following',\n  'for',\n  'from',\n  'in',\n  'inside',\n  'into',\n  'like',\n  'minus',\n  'near',\n  'of',\n  'off',\n  'on',\n  'onto',\n  'opposite',\n  'over',\n  'past',\n  'per',\n  'plus',\n  'regarding',\n  'round',\n  'save',\n  'since',\n  'than',\n  'through',\n  'to',\n  'toward',\n  'towards',\n  'under',\n  'underneath',\n  'unlike',\n  'until',\n  'up',\n  'upon',\n  'versus',\n  'via',\n  'with',\n  'within',\n  'without'\n];\n\nlet specials = [\n  'Metorial',\n  'MCP',\n  'CLI',\n  'API',\n  'HTTP',\n  'HTTPS',\n  'JSX',\n  'DNS',\n  'URL',\n  'CI',\n  'CD',\n  'CDN',\n  'package.json',\n  'package.lock',\n  'yarn.lock',\n  'GitHub',\n  'GitLab',\n  'CSS',\n  'Sass',\n  'JS',\n  'JavaScript',\n  'TypeScript',\n  'HTML',\n  'WordPress',\n  'Next.js',\n  'Node.js',\n  'Webpack',\n  'Docker',\n  'Bash',\n  'Kubernetes',\n  'SWR',\n  'TinaCMS',\n  'UI',\n  'UX',\n  'TS',\n  'TSX',\n  'iPhone',\n  'iPad',\n  'watchOS',\n  'iOS',\n  'iPadOS',\n  'macOS',\n  'PHP',\n  'composer.json',\n  'composer.lock',\n  'CMS',\n  'SQL',\n  'C',\n  'C#',\n  'GraphQL',\n  'GraphiQL',\n  'JWT',\n  'JWTs'\n];\n\nlet specialMap = new Map([\n  ...conjunctions.map(c => [c.toLowerCase(), c] as const),\n  ...articles.map(a => [a.toLowerCase(), a] as const),\n  ...prepositions.map(p => [p.toLowerCase(), p] as const),\n  ...specials.map(s => [s.toLowerCase(), s] as const)\n]);\n\nexport let titleWord = (word: string) => {\n  let lower = word.toLowerCase();\n  if (specialMap.has(lower)) {\n    return specialMap.get(lower)!;\n  }\n\n  return word.charAt(0).toUpperCase() + word.slice(1);\n};\n\nexport let word = (word: string) => {\n  let lower = word.toLowerCase();\n  if (specialMap.has(lower)) {\n    return specialMap.get(lower)!;\n  }\n\n  return word.charAt(0).toUpperCase() + word.slice(1);\n};\n","import { normalizeCase } from './normalize';\nimport { titleWord, word } from './special';\n\nexport class Cases {\n  #normalized: string[];\n\n  constructor(input: string) {\n    this.#normalized = normalizeCase(input);\n  }\n\n  static toCamelCase(input: string) {\n    return new Cases(input).toCamelCase();\n  }\n\n  static toPascalCase(input: string) {\n    return new Cases(input).toPascalCase();\n  }\n\n  static toKebabCase(input: string) {\n    return new Cases(input).toKebabCase();\n  }\n\n  static toSnakeCase(input: string) {\n    return new Cases(input).toSnakeCase();\n  }\n\n  static toTitleCase(input: string) {\n    return new Cases(input).toTitleCase();\n  }\n\n  static toSentenceCase(input: string) {\n    return new Cases(input).toSentenceCase();\n  }\n\n  toCamelCase() {\n    return this.#normalized\n      .map((word, i) => (i === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)))\n      .join('');\n  }\n\n  toPascalCase() {\n    return this.#normalized.map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('');\n  }\n\n  toKebabCase() {\n    return this.#normalized.join('-');\n  }\n\n  toSnakeCase() {\n    return this.#normalized.join('_');\n  }\n\n  toTitleCase() {\n    return this.#normalized.map(w => titleWord(w)).join(' ');\n  }\n\n  toSentenceCase() {\n    return this.#normalized.map((w, i) => (i === 0 ? titleWord(w) : word(w))).join(' ');\n  }\n}\n\nexport let capitalize = (input: string) => Cases.toTitleCase(input);\n"],"names":["specialMap","Map","concat","map","c","toLowerCase","a","p","s","titleWord","word","lower","has","get","charAt","toUpperCase","slice","_normalized","_classPrivateFieldLooseKey","Cases","input","Object","defineProperty","this","writable","value","_classPrivateFieldLooseBase","replace","split","trim","filter","Boolean","normalizeCase","toCamelCase","toPascalCase","toKebabCase","toSnakeCase","toTitleCase","toSentenceCase","_proto","prototype","i","join","w"],"mappings":"kLAAW,ICsIPA,EAAa,IAAIC,IAAG,GAAAC,OApIL,CAAC,MAAO,MAAO,MAAO,MAAO,KAAM,MAAO,MAqI3CC,IAAI,SAAAC,GAAK,MAAA,CAACA,EAAEC,cAAeD,EAAW,GAnIzC,CAAC,IAAK,KAAM,OAoIbD,IAAI,SAAAG,GAAC,MAAI,CAACA,EAAED,cAAeC,EAAW,GAlIjC,CACjB,SACA,QACA,QACA,SACA,QACA,UACA,QACA,OACA,QACA,OACA,SACA,KACA,KACA,SACA,SACA,QACA,UACA,SACA,UACA,UACA,SACA,MACA,KACA,aACA,cACA,UACA,OACA,SACA,SACA,YACA,YACA,YACA,MACA,OACA,KACA,SACA,OACA,OACA,QACA,OACA,KACA,MACA,KACA,OACA,WACA,OACA,OACA,MACA,OACA,YACA,QACA,OACA,QACA,OACA,UACA,KACA,SACA,UACA,QACA,aACA,SACA,QACA,KACA,OACA,SACA,MACA,OACA,SACA,WA8DgBH,IAAI,SAAAI,GAAK,MAAA,CAACA,EAAEF,cAAeE,EAAW,GA3DzC,CACb,WACA,MACA,MACA,MACA,OACA,QACA,MACA,MACA,MACA,KACA,KACA,MACA,eACA,eACA,YACA,SACA,SACA,MACA,OACA,KACA,aACA,aACA,OACA,YACA,UACA,UACA,UACA,SACA,OACA,aACA,MACA,UACA,KACA,KACA,KACA,MACA,SACA,OACA,UACA,MACA,SACA,QACA,MACA,gBACA,gBACA,MACA,MACA,IACA,KACA,UACA,WACA,MACA,QAOYJ,IAAI,SAAAK,GAAK,MAAA,CAACA,EAAEH,cAAeG,EAAW,KAGzCC,EAAY,SAACC,GACtB,IAAIC,EAAQD,EAAKL,cACjB,OAAIL,EAAWY,IAAID,GACVX,EAAWa,IAAIF,GAGjBD,EAAKI,OAAO,GAAGC,cAAgBL,EAAKM,MAAM,EACnD,ECnJ4CC,eAAAC,EAE5C,cAAaC,0BAGX,SAAAA,EAAYC,GAAaC,OAAAC,eAAAC,KAAAN,EAAA,CAAAO,UAAA,EAAAC,WACvBC,IAAAA,EAAIH,KAAAN,GAAAA,GFPmB,SAACG,GAC1B,OACEA,EAEGO,QAAQ,QAAS,KAEjBA,QAAQ,kBAAmB,SAE3BA,QAAQ,qBAAsB,SAC9BA,QAAQ,qBAAsB,SAE9BC,MAAM,OACNzB,IAAI,SAAAO,GAAQ,OAAAA,EAAKmB,OAAOxB,aAAa,GACrCyB,OAAOC,QAEd,CERuBC,CAAcZ,EACnC,CAACD,EAEMc,YAAP,SAAmBb,GACjB,OAAO,IAAID,EAAMC,GAAOa,aAC1B,EAACd,EAEMe,aAAP,SAAoBd,GAClB,WAAWD,EAAMC,GAAOc,cAC1B,EAACf,EAEMgB,YAAP,SAAmBf,GACjB,OAAO,IAAID,EAAMC,GAAOe,aAC1B,EAAChB,EAEMiB,YAAP,SAAmBhB,GACjB,OAAW,IAAAD,EAAMC,GAAOgB,aAC1B,EAACjB,EAEMkB,YAAP,SAAmBjB,GACjB,OAAW,IAAAD,EAAMC,GAAOiB,aAC1B,EAAClB,EAEMmB,eAAP,SAAsBlB,GACpB,OAAW,IAAAD,EAAMC,GAAOkB,gBAC1B,EAACC,IAAAA,EAAApB,EAAAqB,iBAAAD,EAEDN,YAAA,WACE,OAAOP,EAAAH,KAAIN,GAAAA,GACRd,IAAI,SAACO,EAAM+B,GAAO,OAAM,IAANA,EAAU/B,EAAOA,EAAKI,OAAO,GAAGC,cAAgBL,EAAKM,MAAM,EAAE,GAC/E0B,KAAK,GACV,EAACH,EAEDL,aAAA,WACE,OAAOR,EAAIH,KAAAN,GAAAA,GAAad,IAAI,SAAAO,GAAI,OAAIA,EAAKI,OAAO,GAAGC,cAAgBL,EAAKM,MAAM,EAAE,GAAE0B,KAAK,GACzF,EAACH,EAEDJ,YAAA,WACE,OAAOT,EAAIH,KAAAN,GAAAA,GAAayB,KAAK,IAC/B,EAACH,EAEDH,YAAA,WACE,OAAOV,EAAIH,KAAAN,GAAAA,GAAayB,KAAK,IAC/B,EAACH,EAEDF,YAAA,WACE,OAAOX,EAAIH,KAAAN,GAAAA,GAAad,IAAI,SAAAwC,GAAC,OAAIlC,EAAUkC,EAAE,GAAED,KAAK,IACtD,EAACH,EAEDD,eAAA,WACE,OAAOZ,EAAIH,KAAAN,GAAAA,GAAad,IAAI,SAACwC,EAAGF,GAAC,OAAY,IAANA,EAAUhC,EAAUkC,ID8FzDhC,GADaD,EC7FsDiC,GD8FtDtC,cACbL,EAAWY,IAAID,GACVX,EAAWa,IAAIF,GAGjBD,EAAKI,OAAO,GAAGC,cAAgBL,EAAKM,MAAM,IANjC,IAACN,EACbC,CC9FqE,GAAG+B,KAAK,IACjF,EAACvB,CAAA,uCAGqB,SAACC,GAAa,OAAKD,EAAMkB,YAAYjB,EAAM"}