"use strict"; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; Object.defineProperty(exports, "__esModule", { value: true }); var actionTypes = { equals: "", element: "~", start: "^", end: "$", any: "*", not: "!", hyphen: "|", }; var charsToEscape = new Set(__spreadArrays(Object.keys(actionTypes) .map(function (typeKey) { return actionTypes[typeKey]; }) .filter(Boolean), [ ":", "[", "]", " ", "\\", ])); function stringify(token) { return token.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 "*"; case "tag": return escapeName(token.name); 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) + "(" + token.data + ")"; } return ":" + escapeName(token.name) + "(" + stringify(token.data) + ")"; case "attribute": if (token.action === "exists") { return "[" + escapeName(token.name) + "]"; } if (token.name === "id" && token.action === "equals" && !token.ignoreCase) { return "#" + escapeName(token.value); } if (token.name === "class" && token.action === "element" && !token.ignoreCase) { return "." + escapeName(token.value); } return "[" + escapeName(token.name) + actionTypes[token.action] + "='" + escapeName(token.value) + "'" + (token.ignoreCase ? "i" : "") + "]"; } } function escapeName(str) { return str .split("") .map(function (c) { return (charsToEscape.has(c) ? "\\" + c : c); }) .join(""); }