"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var actionTypes = { equals: "", element: "~", start: "^", end: "$", any: "*", not: "!", hyphen: "|" }; var simpleSelectors = { child: " > ", parent: " < ", sibling: " ~ ", adjacent: " + ", descendant: " ", universal: "*" }; function stringify(token) { return token.map(stringifySubselector).join(", "); } exports.default = stringify; function stringifySubselector(token) { return token.map(stringifyToken).join(""); } function stringifyToken(token) { if (token.type in simpleSelectors) return simpleSelectors[token.type]; if (token.type === "tag") return escapeName(token.name); if (token.type === "pseudo-element") return "::" + escapeName(token.name); if (token.type === "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); } var atributeName = escapeName(token.name); var action = actionTypes[token.action]; var value = escapeName(token.value); var ignoreCase = token.ignoreCase ? "i" : ""; return "[" + atributeName + action + "='" + value + "'" + ignoreCase + "]"; } if (token.type === "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) + ")"; } throw new Error("Unknown type"); } function escapeName(str) { //TODO return str; }