@tbela99/css-parser
Version:
CSS parser for node and the browser
63 lines (60 loc) • 2.16 kB
JavaScript
export { EnumToken } from '../lib/ast/types.js';
export { minify } from '../lib/ast/minify.js';
export { walk, walkValues } from '../lib/ast/walk.js';
export { expand } from '../lib/ast/expand.js';
import { doRender } from '../lib/renderer/render.js';
export { renderToken } from '../lib/renderer/render.js';
import { doParse } from '../lib/parser/parse.js';
export { parseString, parseTokens } from '../lib/parser/parse.js';
import '../lib/renderer/color/utils/constants.js';
import '../lib/parser/utils/config.js';
import '../lib/validation/config.js';
import '../lib/validation/parser/types.js';
import '../lib/validation/parser/parse.js';
import '../lib/validation/syntaxes/complex-selector.js';
import { dirname, resolve } from '../lib/fs/resolve.js';
import { load } from './load.js';
/**
* render ast node
*/
function render(data, options = {}) {
return doRender(data, Object.assign(options, {
load,
resolve,
dirname,
cwd: options.cwd ?? self.location.pathname.endsWith('/') ? self.location.pathname : dirname(self.location.pathname)
}));
}
/**
* parse css
*/
async function parse(iterator, opt = {}) {
return doParse(iterator, Object.assign(opt, {
load,
resolve,
dirname,
cwd: opt.cwd ?? self.location.pathname.endsWith('/') ? self.location.pathname : dirname(self.location.pathname)
}));
}
/**
* parse and render css
*/
async function transform(css, options = {}) {
options = { minify: true, removeEmpty: true, removeCharset: true, ...options };
const startTime = performance.now();
return parse(css, options).then((parseResult) => {
const rendered = render(parseResult.ast, options);
return {
...parseResult,
...rendered,
errors: parseResult.errors.concat(rendered.errors),
stats: {
bytesOut: rendered.code.length,
...parseResult.stats,
render: rendered.stats.total,
total: `${(performance.now() - startTime).toFixed(2)}ms`
}
};
});
}
export { dirname, load, parse, render, resolve, transform };