prejss
Version:
Get the power of PostCSS with plugins in your JSS styles. 🎨 Just put CSS into JS and get it as JSS object.
42 lines (34 loc) • 1.28 kB
JavaScript
import extractExpressions from './extract-expressions'
import restoreExpressions from './restore-expressions'
import isPromise from './utils/is-promise'
export default ({ prepare, parse, finalize, ...options }) => {
const extractFunc = options.extractExpressions || extractExpressions
const restoreFunc = options.restoreExpressions || restoreExpressions
return async (chunks, ...variables) => {
const { rawStyles, expressions } = extractFunc(chunks, ...variables)
const prepareResult = (typeof prepare === 'function') ? prepare(rawStyles) : rawStyles
let prepared
if (isPromise(prepareResult)) {
prepared = await prepareResult()
} else {
prepared = prepareResult
}
// throw error if parse() is not defined properly
const parseResult = parse(prepared)
let parsed
if (isPromise(parseResult)) {
parsed = await parseResult()
} else {
parsed = parseResult
}
const finalParsed = restoreFunc(parsed, expressions)
const finalizeResult = (typeof finalize === 'function') ? finalize(finalParsed) : finalParsed
let finalized
if (isPromise(finalizeResult)) {
finalized = await finalizeResult()
} else {
finalized = finalizeResult
}
return finalized
}
}