import { fork, string, url, tokenTypes as TYPE } from 'css-tree'; import compress from './compress.js'; import specificity from './restructure/prepare/specificity.js'; function encodeString(value) { const stringApostrophe = string.encode(value, true); const stringQuote = string.encode(value); return stringApostrophe.length < stringQuote.length ? stringApostrophe : stringQuote; } const { lexer, tokenize, parse, generate, walk, find, findLast, findAll, fromPlainObject, toPlainObject } = fork({ node: { String: { generate(node) { this.token(TYPE.String, encodeString(node.value)); } }, Url: { generate(node) { const encodedUrl = url.encode(node.value); const string = encodeString(node.value); this.token(TYPE.Url, encodedUrl.length <= string.length + 5 /* "url()".length */ ? encodedUrl : 'url(' + string + ')' ); } } } }); export { lexer, tokenize, parse, generate, walk, find, findLast, findAll, fromPlainObject, toPlainObject, specificity, compress };