| "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), [ |
| ":", |
| "[", |
| "]", |
| " ", |
| "\\", |
| "(", |
| ")", |
| ])); |
| /** |
| * 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" : "") + "]"; |
| } |
| } |
| } |
| function getNamespacedName(token) { |
| return "" + getNamespace(token.namespace) + escapeName(token.name); |
| } |
| function getNamespace(namespace) { |
| return namespace |
| ? (namespace === "*" ? "*" : escapeName(namespace)) + "|" |
| : ""; |
| } |
| function escapeName(str) { |
| return str |
| .split("") |
| .map(function (c) { return (charsToEscape.has(c) ? "\\" + c : c); }) |
| .join(""); |
| } |