| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 'use strict';
- const matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;
- const stringToIcon = (value, validate, allowSimpleName, provider = "") => {
- const colonSeparated = value.split(":");
- if (value.slice(0, 1) === "@") {
- if (colonSeparated.length < 2 || colonSeparated.length > 3) {
- return null;
- }
- provider = colonSeparated.shift().slice(1);
- }
- if (colonSeparated.length > 3 || !colonSeparated.length) {
- return null;
- }
- if (colonSeparated.length > 1) {
- const name2 = colonSeparated.pop();
- const prefix = colonSeparated.pop();
- const result = {
- // Allow provider without '@': "provider:prefix:name"
- provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,
- prefix,
- name: name2
- };
- return validate && !validateIconName(result) ? null : result;
- }
- const name = colonSeparated[0];
- const dashSeparated = name.split("-");
- if (dashSeparated.length > 1) {
- const result = {
- provider,
- prefix: dashSeparated.shift(),
- name: dashSeparated.join("-")
- };
- return validate && !validateIconName(result) ? null : result;
- }
- if (allowSimpleName && provider === "") {
- const result = {
- provider,
- prefix: "",
- name
- };
- return validate && !validateIconName(result, allowSimpleName) ? null : result;
- }
- return null;
- };
- const validateIconName = (icon, allowSimpleName) => {
- if (!icon) {
- return false;
- }
- return !!// Check prefix: cannot be empty, unless allowSimpleName is enabled
- // Check name: cannot be empty
- ((allowSimpleName && icon.prefix === "" || !!icon.prefix) && !!icon.name);
- };
- exports.matchIconName = matchIconName;
- exports.stringToIcon = stringToIcon;
- exports.validateIconName = validateIconName;
|