"use strict"; var cssesc = require("cssesc"); var stringify; function escape(str, stringType) { return cssesc(str, { quotes: stringType === "\"" ? "double" : "single" }); } function stringifyWithoutBeforeAfter(tree) { switch(tree.type) { case "values": return tree.nodes.map(stringify).join(","); case "value": return tree.nodes.map(stringify).join(""); case "item": return tree.name; case "nested-item": return tree.name + "(" + tree.nodes.map(stringify).join(",") + ")"; case "invalid": return tree.value; case "comment": return "/*" + tree.content + "*/"; case "string": switch(tree.stringType) { case "'": return "'" + escape(tree.value, "'") + "'"; case "\"": return "\"" + escape(tree.value, "\"") + "\""; } /* istanbul ignore next */ throw new Error("Invalid stringType"); case "url": var start = "url(" + (tree.innerSpacingBefore || ""); var end = (tree.innerSpacingAfter || "") + ")"; switch(tree.stringType) { case "'": return start + "'" + tree.url.replace(/(\\)/g, "\\$1").replace(/'/g, "\\'") + "'" + end; case "\"": return start + "\"" + tree.url.replace(/(\\)/g, "\\$1").replace(/"/g, "\\\"") + "\"" + end; default: return start + tree.url.replace(/("|'|\)|\\)/g, "\\$1") + end; } } } stringify = function stringify(tree) { var str = stringifyWithoutBeforeAfter(tree); if(tree.before) { str = tree.before + str; } if(tree.after) { str = str + tree.after; } return str; }; module.exports = stringify;