| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | 
							- "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 });
 
- exports.stringify = void 0;
 
- var types_1 = require("./types");
 
- var attribValChars = ["\\", '"'];
 
- var pseudoValChars = __spreadArray(__spreadArray([], attribValChars, true), ["(", ")"], false);
 
- var charsToEscapeInAttributeValue = new Set(attribValChars.map(function (c) { return c.charCodeAt(0); }));
 
- var charsToEscapeInPseudoValue = new Set(pseudoValChars.map(function (c) { return c.charCodeAt(0); }));
 
- var charsToEscapeInName = new Set(__spreadArray(__spreadArray([], pseudoValChars, true), [
 
-     "~",
 
-     "^",
 
-     "$",
 
-     "*",
 
-     "+",
 
-     "!",
 
-     "|",
 
-     ":",
 
-     "[",
 
-     "]",
 
-     " ",
 
-     ".",
 
- ], false).map(function (c) { return c.charCodeAt(0); }));
 
- /**
 
-  * Turns `selector` back into a string.
 
-  *
 
-  * @param selector Selector to stringify.
 
-  */
 
- function stringify(selector) {
 
-     return selector
 
-         .map(function (token) { return token.map(stringifyToken).join(""); })
 
-         .join(", ");
 
- }
 
- exports.stringify = stringify;
 
- function stringifyToken(token, index, arr) {
 
-     switch (token.type) {
 
-         // Simple types
 
-         case types_1.SelectorType.Child:
 
-             return index === 0 ? "> " : " > ";
 
-         case types_1.SelectorType.Parent:
 
-             return index === 0 ? "< " : " < ";
 
-         case types_1.SelectorType.Sibling:
 
-             return index === 0 ? "~ " : " ~ ";
 
-         case types_1.SelectorType.Adjacent:
 
-             return index === 0 ? "+ " : " + ";
 
-         case types_1.SelectorType.Descendant:
 
-             return " ";
 
-         case types_1.SelectorType.ColumnCombinator:
 
-             return index === 0 ? "|| " : " || ";
 
-         case types_1.SelectorType.Universal:
 
-             // Return an empty string if the selector isn't needed.
 
-             return token.namespace === "*" &&
 
-                 index + 1 < arr.length &&
 
-                 "name" in arr[index + 1]
 
-                 ? ""
 
-                 : "".concat(getNamespace(token.namespace), "*");
 
-         case types_1.SelectorType.Tag:
 
-             return getNamespacedName(token);
 
-         case types_1.SelectorType.PseudoElement:
 
-             return "::".concat(escapeName(token.name, charsToEscapeInName)).concat(token.data === null
 
-                 ? ""
 
-                 : "(".concat(escapeName(token.data, charsToEscapeInPseudoValue), ")"));
 
-         case types_1.SelectorType.Pseudo:
 
-             return ":".concat(escapeName(token.name, charsToEscapeInName)).concat(token.data === null
 
-                 ? ""
 
-                 : "(".concat(typeof token.data === "string"
 
-                     ? escapeName(token.data, charsToEscapeInPseudoValue)
 
-                     : stringify(token.data), ")"));
 
-         case types_1.SelectorType.Attribute: {
 
-             if (token.name === "id" &&
 
-                 token.action === types_1.AttributeAction.Equals &&
 
-                 token.ignoreCase === "quirks" &&
 
-                 !token.namespace) {
 
-                 return "#".concat(escapeName(token.value, charsToEscapeInName));
 
-             }
 
-             if (token.name === "class" &&
 
-                 token.action === types_1.AttributeAction.Element &&
 
-                 token.ignoreCase === "quirks" &&
 
-                 !token.namespace) {
 
-                 return ".".concat(escapeName(token.value, charsToEscapeInName));
 
-             }
 
-             var name_1 = getNamespacedName(token);
 
-             if (token.action === types_1.AttributeAction.Exists) {
 
-                 return "[".concat(name_1, "]");
 
-             }
 
-             return "[".concat(name_1).concat(getActionValue(token.action), "=\"").concat(escapeName(token.value, charsToEscapeInAttributeValue), "\"").concat(token.ignoreCase === null ? "" : token.ignoreCase ? " i" : " s", "]");
 
-         }
 
-     }
 
- }
 
- function getActionValue(action) {
 
-     switch (action) {
 
-         case types_1.AttributeAction.Equals:
 
-             return "";
 
-         case types_1.AttributeAction.Element:
 
-             return "~";
 
-         case types_1.AttributeAction.Start:
 
-             return "^";
 
-         case types_1.AttributeAction.End:
 
-             return "$";
 
-         case types_1.AttributeAction.Any:
 
-             return "*";
 
-         case types_1.AttributeAction.Not:
 
-             return "!";
 
-         case types_1.AttributeAction.Hyphen:
 
-             return "|";
 
-         case types_1.AttributeAction.Exists:
 
-             throw new Error("Shouldn't be here");
 
-     }
 
- }
 
- function getNamespacedName(token) {
 
-     return "".concat(getNamespace(token.namespace)).concat(escapeName(token.name, charsToEscapeInName));
 
- }
 
- function getNamespace(namespace) {
 
-     return namespace !== null
 
-         ? "".concat(namespace === "*"
 
-             ? "*"
 
-             : escapeName(namespace, charsToEscapeInName), "|")
 
-         : "";
 
- }
 
- function escapeName(str, charsToEscape) {
 
-     var lastIdx = 0;
 
-     var ret = "";
 
-     for (var i = 0; i < str.length; i++) {
 
-         if (charsToEscape.has(str.charCodeAt(i))) {
 
-             ret += "".concat(str.slice(lastIdx, i), "\\").concat(str.charAt(i));
 
-             lastIdx = i + 1;
 
-         }
 
-     }
 
-     return ret.length > 0 ? ret + str.slice(lastIdx) : str;
 
- }
 
 
  |