aboutsummaryrefslogtreecommitdiff
path: root/node_modules/css-what/lib/stringify.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/css-what/lib/stringify.js')
-rw-r--r--node_modules/css-what/lib/stringify.js105
1 files changed, 105 insertions, 0 deletions
diff --git a/node_modules/css-what/lib/stringify.js b/node_modules/css-what/lib/stringify.js
new file mode 100644
index 0000000..ccd3d6c
--- /dev/null
+++ b/node_modules/css-what/lib/stringify.js
@@ -0,0 +1,105 @@
+"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 });
+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), true), [
+ ":",
+ "[",
+ "]",
+ " ",
+ "\\",
+ "(",
+ ")",
+ "'",
+], false));
+/**
+ * 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("");
+}