vuestic-ui
Version:
Vue 3 UI Framework
1 lines • 3.28 kB
Source Map (JSON)
{"version":3,"file":"dynamic-segment.mjs","sources":["../../../../../../src/services/icon/utils/dynamic-segment.ts"],"sourcesContent":["import { regexGroupsValues } from './regex'\n\nconst dynamicSegmentRegex = /{[^}]*}/g // match {any-thing}, {even with space}\n\n/**\n * Replace {anything} to regex (.*) group\n * @example\n * ```\n * \"fa-{code}\" -> \"fa-(.*)\"\n * \"fa-{code}-{suffix}\" -> \"fa-(.*)-(.*)\"\n * ```\n */\nconst dynamicSegmentStringToRegex = (template: string) => {\n return template.replace(dynamicSegmentRegex, '(.*)')\n}\n\n/**\n Returns content from string in {}\n @example\n ```\n \"fa-{code}-{suffix}\" -> ['code', 'suffix']\n ```\n */\nconst dynamicSegmentsNames = (template: string) => {\n return (template.match(dynamicSegmentRegex) || []) // 'fa-{code}-{suffix}' -> ['{code}', '{suffix}']\n .map((g) => g.replace(/{|}/g, '')) // ['{code}', '{suffix}'] -> ['code', 'suffix']\n}\n\n/**\n * Transform template to regex and returns regex group values\n * @example\n * ```\n * \"fa-clock-o\", \"fa-{code}-{suffix}\" -> [\"clock\", \"o\"]\n * ```\n */\nconst dynamicSegmentsValues = (str: string, template: string) => {\n return regexGroupsValues(str, dynamicSegmentStringToRegex(template))\n}\n\n/**\n * Returns object with param name from template and match value from str\n * @example\n * ```\n * \"fa-phone\", \"fa-{icon code}\" -> { 'icon code': 'phone' }\n * \"fa4 clock-o\", \"fa4 {icon-code}-{suffix}\" -> { 'icon-code': 'clock', 'suffix': 'o' }\n * \"fa4 clock-o\", \"fa4 {icon-code}\" -> { 'icon-code': 'clock-o' }\n * ```\n */\nexport const dynamicSegments = (str: string, template: string) => {\n const params = dynamicSegmentsNames(template)\n const values = dynamicSegmentsValues(str, template)\n\n return params.reduce((acc, paramValue, i) => ({ ...acc, [paramValue]: values[i] }), {})\n}\n\n/**\n * Returns true if match string equals to input `str`\n * @example\n * ```\n * \"vuestic-home-open\", /vuestic-(.*)-o/ -> false\n * \"vuestic-home-open\", /vuestic-(.*)-open/ -> true\n * ```\n */\nconst strictMatch = (str: string, regex: RegExp) => {\n return (str.match(regex) || [])[0] === str\n}\n\n/**\n * Returns true if str match template\n * @example\n * ```\n * \"fa-phone\", \"fa-{icon code}\" -> true\n * \"fa4 clock-o\", \"fa4 {icon-code}-{suffix}\" -> true\n * \"fa4 clock-o\", \"fa4 {icon-code}\" -> false\n * ```\n */\nexport const isMatchDynamicSegments = (str: string, template: string) => {\n const templateRegex = dynamicSegmentStringToRegex(template)\n return strictMatch(str, new RegExp(templateRegex))\n}\n"],"names":[],"mappings":";AAEA,MAAM,sBAAsB;AAU5B,MAAM,8BAA8B,CAAC,aAAqB;AACjD,SAAA,SAAS,QAAQ,qBAAqB,MAAM;AACrD;AASA,MAAM,uBAAuB,CAAC,aAAqB;AACjD,UAAQ,SAAS,MAAM,mBAAmB,KAAK,CAAA,GAC5C,IAAI,CAAC,MAAM,EAAE,QAAQ,QAAQ,EAAE,CAAC;AACrC;AASA,MAAM,wBAAwB,CAAC,KAAa,aAAqB;AAC/D,SAAO,kBAAkB,KAAK,4BAA4B,QAAQ,CAAC;AACrE;AAWa,MAAA,kBAAkB,CAAC,KAAa,aAAqB;AAC1D,QAAA,SAAS,qBAAqB,QAAQ;AACtC,QAAA,SAAS,sBAAsB,KAAK,QAAQ;AAElD,SAAO,OAAO,OAAO,CAAC,KAAK,YAAY,OAAO,EAAE,GAAG,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,IAAI,CAAE,CAAA;AACxF;AAUA,MAAM,cAAc,CAAC,KAAa,UAAkB;AAClD,UAAQ,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,MAAM;AACzC;AAWa,MAAA,yBAAyB,CAAC,KAAa,aAAqB;AACjE,QAAA,gBAAgB,4BAA4B,QAAQ;AAC1D,SAAO,YAAY,KAAK,IAAI,OAAO,aAAa,CAAC;AACnD;"}