'use strict' let MapGenerator = require('./map-generator') let stringify = require('./stringify') let warnOnce = require('./warn-once') let parse = require('./parse') const Result = require('./result') class NoWorkResult { constructor(processor, css, opts) { this.stringified = false this._processor = processor this._css = css this._opts = opts this._map = undefined let root let str = stringify this.result = new Result(this._processor, root, this._opts) this.result.css = css let self = this Object.defineProperty(this.result, 'root', { get() { return self.root } }) if (this._opts.map) { let map = new MapGenerator(str, root, this._opts, css) let [generatedCSS, generatedMap] = map.generate() if (generatedCSS) { this.result.css = generatedCSS } if (generatedMap) { this.result.map = generatedMap } } } get [Symbol.toStringTag]() { return 'NoWorkResult' } get processor() { return this.result.processor } get opts() { return this.result.opts } get css() { return this.result.css } get content() { return this.result.css } get map() { return this.result.map } get root() { if (this._root) { return this._root } let root let parser = parse try { root = parser(this._css, this._opts) } catch (error) { this.error = error } this._root = root return root } get messages() { return [] } warnings() { return [] } toString() { return this._css } then(onFulfilled, onRejected) { if (process.env.NODE_ENV !== 'production') { if (!('from' in this._opts)) { warnOnce( 'Without `from` option PostCSS could generate wrong source map ' + 'and will not find Browserslist config. Set it to CSS file path ' + 'or to `undefined` to prevent this warning.' ) } } return this.async().then(onFulfilled, onRejected) } catch(onRejected) { return this.async().catch(onRejected) } finally(onFinally) { return this.async().then(onFinally, onFinally) } async() { if (this.error) return Promise.reject(this.error) return Promise.resolve(this.result) } sync() { if (this.error) throw this.error return this.result } } module.exports = NoWorkResult NoWorkResult.default = NoWorkResult