UNPKG

shineout

Version:

Shein 前端组件库

77 lines (66 loc) 2.17 kB
"use strict"; exports.__esModule = true; exports.splitRule = splitRule; exports.default = _default; exports.convertRule = void 0; var _is = require("../utils/is"); var _func = require("../utils/func"); var quoteReg = /("(?:[^"\\]|\\.)*")|('(?:[^'\\]|\\.)*')/g; var emptyFuncReg = /([\w|\d$]+)\s*\(\s*\)/; var funcReg = /([\w|\d$]+)\s*\((.+)\)/; var numberReg = /^-?(\d*\.)?\d+(e[-+]?\d+)?$/i; var strArgReg = /\[(\d+)\]/; function getSingleRule(str, ss) { var firstQuote = str.indexOf('('); if (firstQuote < 0) return [str.trim()]; var match = emptyFuncReg.exec(str); if (match) return [match[1]]; match = funcReg.exec(str); if (!match) throw new Error("\"" + str + "\" is not a valid rule."); var rule = []; rule.push(match[1]); match[2].split(',').forEach(function (arg) { arg = arg.trim(); if (numberReg.test(arg)) { rule.push(parseFloat(arg)); return; } var m = strArgReg.exec(arg); if (!m) throw new Error("Rule argument expect a number or a string. Do you missing the quotes of \"" + arg + "\"?"); rule.push(ss[m[1]]); }); return rule; } function splitRule(str) { var matchs = str.match(quoteReg) || []; var arr = []; var newString = str; matchs.forEach(function (m, i) { arr.push(m.substring(1, m.length - 1).replace(/\\"/g, '"').replace(/\\'/g, "'")); newString = newString.replace(m, "[" + i + "]"); }); var rules = []; newString.split(';').forEach(function (s) { if (s) rules.push(getSingleRule(s, arr)); }); return rules; } var convertRule = (0, _func.curry)(function (rule, arr) { var method = arr[0], args = arr.slice(1); if (!rule[method]) throw new Error("Method \"" + method + "\" is not existed."); return rule[method].apply(rule, args); }); exports.convertRule = convertRule; function _default(rule, str) { if (!(0, _is.isObject)(rule) || !str) { console.error(new Error('Convert arguments expect an Rule object and a string.')); return []; } try { var convert = convertRule(rule); return splitRule(str).map(convert); } catch (e) { throw new Error("Conver string \"" + str + "\" to rules failed. " + e.message); } }