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