You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
2.5 KiB
135 lines
2.5 KiB
'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) { |
|
css = css.toString() |
|
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 |
|
} |
|
}) |
|
|
|
let map = new MapGenerator(str, root, this._opts, css) |
|
if (map.isMap()) { |
|
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 |
|
} |
|
|
|
if (this.error) { |
|
throw this.error |
|
} else { |
|
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
|
|
|