版博士V2.0程序
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

69 líneas
2.0 KiB

  1. const NUMBER_CHAR_RE = /\d/;
  2. const STR_SPLITTERS = ["-", "_", "/", "."];
  3. function isUppercase(char = "") {
  4. if (NUMBER_CHAR_RE.test(char)) {
  5. return void 0;
  6. }
  7. return char.toUpperCase() === char;
  8. }
  9. function splitByCase(string_, separators) {
  10. const splitters = separators ?? STR_SPLITTERS;
  11. const parts = [];
  12. if (!string_ || typeof string_ !== "string") {
  13. return parts;
  14. }
  15. let buff = "";
  16. let previousUpper;
  17. let previousSplitter;
  18. for (const char of string_) {
  19. const isSplitter = splitters.includes(char);
  20. if (isSplitter === true) {
  21. parts.push(buff);
  22. buff = "";
  23. previousUpper = void 0;
  24. continue;
  25. }
  26. const isUpper = isUppercase(char);
  27. if (previousSplitter === false) {
  28. if (previousUpper === false && isUpper === true) {
  29. parts.push(buff);
  30. buff = char;
  31. previousUpper = isUpper;
  32. continue;
  33. }
  34. if (previousUpper === true && isUpper === false && buff.length > 1) {
  35. const lastChar = buff[buff.length - 1];
  36. parts.push(buff.slice(0, Math.max(0, buff.length - 1)));
  37. buff = lastChar + char;
  38. previousUpper = isUpper;
  39. continue;
  40. }
  41. }
  42. buff += char;
  43. previousUpper = isUpper;
  44. previousSplitter = isSplitter;
  45. }
  46. parts.push(buff);
  47. return parts;
  48. }
  49. function upperFirst(string_) {
  50. return !string_ ? "" : string_[0].toUpperCase() + string_.slice(1);
  51. }
  52. function lowerFirst(string_) {
  53. return !string_ ? "" : string_[0].toLowerCase() + string_.slice(1);
  54. }
  55. function pascalCase(string_) {
  56. return !string_ ? "" : (Array.isArray(string_) ? string_ : splitByCase(string_)).map((p) => upperFirst(p)).join("");
  57. }
  58. function camelCase(string_) {
  59. return lowerFirst(pascalCase(string_));
  60. }
  61. function kebabCase(string_, joiner) {
  62. return !string_ ? "" : (Array.isArray(string_) ? string_ : splitByCase(string_)).map((p) => p.toLowerCase()).join(joiner ?? "-");
  63. }
  64. function snakeCase(string_) {
  65. return kebabCase(string_, "_");
  66. }
  67. export { camelCase, isUppercase, kebabCase, lowerFirst, pascalCase, snakeCase, splitByCase, upperFirst };