diff options
Diffstat (limited to 'node_modules/css-what/lib/stringify.js')
-rw-r--r-- | node_modules/css-what/lib/stringify.js | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/node_modules/css-what/lib/stringify.js b/node_modules/css-what/lib/stringify.js new file mode 100644 index 0000000..ccd3d6c --- /dev/null +++ b/node_modules/css-what/lib/stringify.js @@ -0,0 +1,105 @@ +"use strict"; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var actionTypes = { + equals: "", + element: "~", + start: "^", + end: "$", + any: "*", + not: "!", + hyphen: "|", +}; +var charsToEscape = new Set(__spreadArray(__spreadArray([], Object.keys(actionTypes) + .map(function (typeKey) { return actionTypes[typeKey]; }) + .filter(Boolean), true), [ + ":", + "[", + "]", + " ", + "\\", + "(", + ")", + "'", +], false)); +/** + * Turns `selector` back into a string. + * + * @param selector Selector to stringify. + */ +function stringify(selector) { + return selector.map(stringifySubselector).join(", "); +} +exports.default = stringify; +function stringifySubselector(token) { + return token.map(stringifyToken).join(""); +} +function stringifyToken(token) { + switch (token.type) { + // Simple types + case "child": + return " > "; + case "parent": + return " < "; + case "sibling": + return " ~ "; + case "adjacent": + return " + "; + case "descendant": + return " "; + case "universal": + return getNamespace(token.namespace) + "*"; + case "tag": + return getNamespacedName(token); + case "pseudo-element": + return "::" + escapeName(token.name); + case "pseudo": + if (token.data === null) + return ":" + escapeName(token.name); + if (typeof token.data === "string") { + return ":" + escapeName(token.name) + "(" + escapeName(token.data) + ")"; + } + return ":" + escapeName(token.name) + "(" + stringify(token.data) + ")"; + case "attribute": { + if (token.name === "id" && + token.action === "equals" && + !token.ignoreCase && + !token.namespace) { + return "#" + escapeName(token.value); + } + if (token.name === "class" && + token.action === "element" && + !token.ignoreCase && + !token.namespace) { + return "." + escapeName(token.value); + } + var name_1 = getNamespacedName(token); + if (token.action === "exists") { + return "[" + name_1 + "]"; + } + return "[" + name_1 + actionTypes[token.action] + "='" + escapeName(token.value) + "'" + (token.ignoreCase ? "i" : token.ignoreCase === false ? "s" : "") + "]"; + } + } +} +function getNamespacedName(token) { + return "" + getNamespace(token.namespace) + escapeName(token.name); +} +function getNamespace(namespace) { + return namespace !== null + ? (namespace === "*" ? "*" : escapeName(namespace)) + "|" + : ""; +} +function escapeName(str) { + return str + .split("") + .map(function (c) { return (charsToEscape.has(c) ? "\\" + c : c); }) + .join(""); +} |