async function processWithTextApi([options, pages, stylesheets]) {
    /* If we specified a raw string of CSS, add it to the stylesheets array */
    if (options.raw) {
        if (_.isString(options.raw)) {
            stylesheets.push(options.raw);
        } else {
            throw new Error('UnCSS: options.raw - expected a string');
        }
    }

    /* At this point, there isn't any point in running the rest of the task if:
     * - We didn't specify any stylesheet links in the options object
     * - We couldn't find any stylesheet links in the HTML itself
     * - We weren't passed a string of raw CSS in addition to, or to replace
     *     either of the above
     */
    if (!_.flatten(stylesheets).length) {
        throw new Error('UnCSS: no stylesheets found');
    }

    /* OK, so we have some CSS to work with!
     * Three steps:
     * - Parse the CSS
     * - Remove the unused rules
     * - Return the optimized CSS as a string
     */
    const cssStr = stylesheets.join(' \n');
    let pcss, report;

    try {
        pcss = postcss.parse(cssStr);
    } catch (err) {
        /* Try and construct a helpful error message */
        throw utility.parseErrorMessage(err, cssStr);
    }

    const [css, rep] = await uncss(pages, pcss, options.ignore);
    let newCssStr = '';
    postcss.stringify(css, result => {
        newCssStr += result;
    });

    if (options.report) {
        report = {
            original: cssStr,
            selectors: rep,
        };
    }
    return [newCssStr, report];
}
Do the actual work
@param  {Array}   files       List of HTML files
@param  {Object}  options     UnCSS options
@param  {Array}   pages       Pages opened by jsdom
@param  {Array}   stylesheets List of CSS files
@return {Promise}