60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
const cssTree = require('css-tree');
|
|
const compress = require('./compress.cjs');
|
|
const specificity = require('./restructure/prepare/specificity.cjs');
|
|
|
|
function encodeString(value) {
|
|
const stringApostrophe = cssTree.string.encode(value, true);
|
|
const stringQuote = cssTree.string.encode(value);
|
|
|
|
return stringApostrophe.length < stringQuote.length
|
|
? stringApostrophe
|
|
: stringQuote;
|
|
}
|
|
|
|
const {
|
|
lexer,
|
|
tokenize,
|
|
parse,
|
|
generate,
|
|
walk,
|
|
find,
|
|
findLast,
|
|
findAll,
|
|
fromPlainObject,
|
|
toPlainObject
|
|
} = cssTree.fork({
|
|
node: {
|
|
String: {
|
|
generate(node) {
|
|
this.token(cssTree.tokenTypes.String, encodeString(node.value));
|
|
}
|
|
},
|
|
Url: {
|
|
generate(node) {
|
|
const encodedUrl = cssTree.url.encode(node.value);
|
|
const string = encodeString(node.value);
|
|
|
|
this.token(cssTree.tokenTypes.Url,
|
|
encodedUrl.length <= string.length + 5 /* "url()".length */
|
|
? encodedUrl
|
|
: 'url(' + string + ')'
|
|
);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
exports.compress = compress;
|
|
exports.specificity = specificity;
|
|
exports.find = find;
|
|
exports.findAll = findAll;
|
|
exports.findLast = findLast;
|
|
exports.fromPlainObject = fromPlainObject;
|
|
exports.generate = generate;
|
|
exports.lexer = lexer;
|
|
exports.parse = parse;
|
|
exports.toPlainObject = toPlainObject;
|
|
exports.tokenize = tokenize;
|
|
exports.walk = walk;
|