name.cjs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. 'use strict';
  2. const matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;
  3. const stringToIcon = (value, validate, allowSimpleName, provider = "") => {
  4. const colonSeparated = value.split(":");
  5. if (value.slice(0, 1) === "@") {
  6. if (colonSeparated.length < 2 || colonSeparated.length > 3) {
  7. return null;
  8. }
  9. provider = colonSeparated.shift().slice(1);
  10. }
  11. if (colonSeparated.length > 3 || !colonSeparated.length) {
  12. return null;
  13. }
  14. if (colonSeparated.length > 1) {
  15. const name2 = colonSeparated.pop();
  16. const prefix = colonSeparated.pop();
  17. const result = {
  18. // Allow provider without '@': "provider:prefix:name"
  19. provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,
  20. prefix,
  21. name: name2
  22. };
  23. return validate && !validateIconName(result) ? null : result;
  24. }
  25. const name = colonSeparated[0];
  26. const dashSeparated = name.split("-");
  27. if (dashSeparated.length > 1) {
  28. const result = {
  29. provider,
  30. prefix: dashSeparated.shift(),
  31. name: dashSeparated.join("-")
  32. };
  33. return validate && !validateIconName(result) ? null : result;
  34. }
  35. if (allowSimpleName && provider === "") {
  36. const result = {
  37. provider,
  38. prefix: "",
  39. name
  40. };
  41. return validate && !validateIconName(result, allowSimpleName) ? null : result;
  42. }
  43. return null;
  44. };
  45. const validateIconName = (icon, allowSimpleName) => {
  46. if (!icon) {
  47. return false;
  48. }
  49. return !!// Check prefix: cannot be empty, unless allowSimpleName is enabled
  50. // Check name: cannot be empty
  51. ((allowSimpleName && icon.prefix === "" || !!icon.prefix) && !!icon.name);
  52. };
  53. exports.matchIconName = matchIconName;
  54. exports.stringToIcon = stringToIcon;
  55. exports.validateIconName = validateIconName;