"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; }; 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)), [ ":", "[", "]", " ", "\\", "(", ")", "'", ])); /** * 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(""); }