84 lines
2.6 KiB
JavaScript
84 lines
2.6 KiB
JavaScript
"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("");
|
|
}
|