| "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(""); |
| } |