2023-07-05 11:02:15 +02:00
"use strict" ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
exports . _ _esModule = true ;
exports . default = void 0 ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
var _mapGenerator = _interopRequireDefault ( require ( "./map-generator" ) ) ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
var _stringify2 = _interopRequireDefault ( require ( "./stringify" ) ) ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
var _warnOnce = _interopRequireDefault ( require ( "./warn-once" ) ) ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
var _result = _interopRequireDefault ( require ( "./result" ) ) ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
var _parse = _interopRequireDefault ( require ( "./parse" ) ) ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
function _createForOfIteratorHelperLoose ( o , allowArrayLike ) { var it ; if ( typeof Symbol === "undefined" || o [ Symbol . iterator ] == null ) { if ( Array . isArray ( o ) || ( it = _unsupportedIterableToArray ( o ) ) || allowArrayLike && o && typeof o . length === "number" ) { if ( it ) o = it ; var i = 0 ; return function ( ) { if ( i >= o . length ) return { done : true } ; return { done : false , value : o [ i ++ ] } ; } ; } throw new TypeError ( "Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." ) ; } it = o [ Symbol . iterator ] ( ) ; return it . next . bind ( it ) ; }
function _unsupportedIterableToArray ( o , minLen ) { if ( ! o ) return ; if ( typeof o === "string" ) return _arrayLikeToArray ( o , minLen ) ; var n = Object . prototype . toString . call ( o ) . slice ( 8 , - 1 ) ; if ( n === "Object" && o . constructor ) n = o . constructor . name ; if ( n === "Map" || n === "Set" ) return Array . from ( o ) ; if ( n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/ . test ( n ) ) return _arrayLikeToArray ( o , minLen ) ; }
function _arrayLikeToArray ( arr , len ) { if ( len == null || len > arr . length ) len = arr . length ; for ( var i = 0 , arr2 = new Array ( len ) ; i < len ; i ++ ) { arr2 [ i ] = arr [ i ] ; } return arr2 ; }
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
function _defineProperties ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) ; } }
function _createClass ( Constructor , protoProps , staticProps ) { if ( protoProps ) _defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) _defineProperties ( Constructor , staticProps ) ; return Constructor ; }
function isPromise ( obj ) {
return typeof obj === 'object' && typeof obj . then === 'function' ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
/ * *
* A Promise proxy for the result of PostCSS transformations .
*
* A ` LazyResult ` instance is returned by { @ link Processor # process } .
*
* @ example
* const lazy = postcss ( [ autoprefixer ] ) . process ( css )
* /
var LazyResult = /*#__PURE__*/ function ( ) {
function LazyResult ( processor , css , opts ) {
this . stringified = false ;
this . processed = false ;
var root ;
if ( typeof css === 'object' && css !== null && css . type === 'root' ) {
root = css ;
} else if ( css instanceof LazyResult || css instanceof _result . default ) {
root = css . root ;
2023-07-01 10:42:40 +02:00
if ( css . map ) {
2023-07-05 11:02:15 +02:00
if ( typeof opts . map === 'undefined' ) opts . map = { } ;
if ( ! opts . map . inline ) opts . map . inline = false ;
opts . map . prev = css . map ;
2023-07-01 10:42:40 +02:00
}
} else {
2023-07-05 11:02:15 +02:00
var parser = _parse . default ;
if ( opts . syntax ) parser = opts . syntax . parse ;
if ( opts . parser ) parser = opts . parser ;
if ( parser . parse ) parser = parser . parse ;
2023-07-01 10:42:40 +02:00
try {
2023-07-05 11:02:15 +02:00
root = parser ( css , opts ) ;
2023-07-01 10:42:40 +02:00
} catch ( error ) {
2023-07-05 11:02:15 +02:00
this . error = error ;
2023-07-01 10:42:40 +02:00
}
}
2023-07-05 11:02:15 +02:00
this . result = new _result . default ( processor , root , opts ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
/ * *
* Returns a { @ link Processor } instance , which will be used
* for CSS transformations .
*
* @ type { Processor }
* /
var _proto = LazyResult . prototype ;
/ * *
* Processes input CSS through synchronous plugins
* and calls { @ link Result # warnings ( ) } .
*
* @ return { Warning [ ] } Warnings from plugins .
* /
_proto . warnings = function warnings ( ) {
return this . sync ( ) . warnings ( ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
/ * *
* Alias for the { @ link LazyResult # css } property .
*
* @ example
* lazy + '' === lazy . css
*
* @ return { string } Output CSS .
* /
;
_proto . toString = function toString ( ) {
return this . css ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
/ * *
* Processes input CSS through synchronous and asynchronous plugins
* and calls ` onFulfilled ` with a Result instance . If a plugin throws
* an error , the ` onRejected ` callback will be executed .
*
* It implements standard Promise API .
*
* @ param { onFulfilled } onFulfilled Callback will be executed
* when all plugins will finish work .
* @ param { onRejected } onRejected Callback will be executed on any error .
*
* @ return { Promise } Promise API to make queue .
*
* @ example
* postcss ( [ autoprefixer ] ) . process ( css , { from : cssPath } ) . then ( result => {
* console . log ( result . css )
* } )
* /
;
_proto . then = function then ( onFulfilled , onRejected ) {
2023-07-01 10:42:40 +02:00
if ( process . env . NODE _ENV !== 'production' ) {
if ( ! ( 'from' in this . opts ) ) {
2023-07-05 11:02:15 +02:00
( 0 , _warnOnce . default ) ( '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.' ) ;
2023-07-01 10:42:40 +02:00
}
}
2023-07-05 11:02:15 +02:00
return this . async ( ) . then ( onFulfilled , onRejected ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
/ * *
* Processes input CSS through synchronous and asynchronous plugins
* and calls onRejected for each error thrown in any plugin .
*
* It implements standard Promise API .
*
* @ param { onRejected } onRejected Callback will be executed on any error .
*
* @ return { Promise } Promise API to make queue .
*
* @ example
* postcss ( [ autoprefixer ] ) . process ( css ) . then ( result => {
* console . log ( result . css )
* } ) . catch ( error => {
* console . error ( error )
* } )
* /
;
_proto . catch = function _catch ( onRejected ) {
return this . async ( ) . catch ( onRejected ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
/ * *
* Processes input CSS through synchronous and asynchronous plugins
* and calls onFinally on any error or when all plugins will finish work .
*
* It implements standard Promise API .
*
* @ param { onFinally } onFinally Callback will be executed on any error or
* when all plugins will finish work .
*
* @ return { Promise } Promise API to make queue .
*
* @ example
* postcss ( [ autoprefixer ] ) . process ( css ) . finally ( ( ) => {
* console . log ( 'processing ended' )
* } )
* /
;
_proto . finally = function _finally ( onFinally ) {
return this . async ( ) . then ( onFinally , onFinally ) ;
} ;
_proto . handleError = function handleError ( error , plugin ) {
try {
this . error = error ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
if ( error . name === 'CssSyntaxError' && ! error . plugin ) {
error . plugin = plugin . postcssPlugin ;
error . setMessage ( ) ;
} else if ( plugin . postcssVersion ) {
if ( process . env . NODE _ENV !== 'production' ) {
var pluginName = plugin . postcssPlugin ;
var pluginVer = plugin . postcssVersion ;
var runtimeVer = this . result . processor . version ;
var a = pluginVer . split ( '.' ) ;
var b = runtimeVer . split ( '.' ) ;
if ( a [ 0 ] !== b [ 0 ] || parseInt ( a [ 1 ] ) > parseInt ( b [ 1 ] ) ) {
console . error ( 'Unknown error from PostCSS plugin. Your current PostCSS ' + 'version is ' + runtimeVer + ', but ' + pluginName + ' uses ' + pluginVer + '. Perhaps this is the source of the error below.' ) ;
}
}
}
} catch ( err ) {
if ( console && console . error ) console . error ( err ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
} ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
_proto . asyncTick = function asyncTick ( resolve , reject ) {
var _this = this ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
if ( this . plugin >= this . processor . plugins . length ) {
this . processed = true ;
return resolve ( ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
try {
var plugin = this . processor . plugins [ this . plugin ] ;
var promise = this . run ( plugin ) ;
this . plugin += 1 ;
2023-07-01 10:42:40 +02:00
if ( isPromise ( promise ) ) {
2023-07-05 11:02:15 +02:00
promise . then ( function ( ) {
_this . asyncTick ( resolve , reject ) ;
} ) . catch ( function ( error ) {
_this . handleError ( error , plugin ) ;
_this . processed = true ;
reject ( error ) ;
} ) ;
} else {
this . asyncTick ( resolve , reject ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
} catch ( error ) {
this . processed = true ;
reject ( error ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
} ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
_proto . async = function async ( ) {
var _this2 = this ;
if ( this . processed ) {
return new Promise ( function ( resolve , reject ) {
if ( _this2 . error ) {
reject ( _this2 . error ) ;
2023-07-01 10:42:40 +02:00
} else {
2023-07-05 11:02:15 +02:00
resolve ( _this2 . stringify ( ) ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
} ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
if ( this . processing ) {
return this . processing ;
}
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
this . processing = new Promise ( function ( resolve , reject ) {
if ( _this2 . error ) return reject ( _this2 . error ) ;
_this2 . plugin = 0 ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
_this2 . asyncTick ( resolve , reject ) ;
} ) . then ( function ( ) {
_this2 . processed = true ;
return _this2 . stringify ( ) ;
} ) ;
return this . processing ;
} ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
_proto . sync = function sync ( ) {
if ( this . processed ) return this . result ;
this . processed = true ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
if ( this . processing ) {
throw new Error ( 'Use process(css).then(cb) to work with async plugins' ) ;
}
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
if ( this . error ) throw this . error ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
for ( var _iterator = _createForOfIteratorHelperLoose ( this . result . processor . plugins ) , _step ; ! ( _step = _iterator ( ) ) . done ; ) {
var plugin = _step . value ;
var promise = this . run ( plugin ) ;
2023-07-01 10:42:40 +02:00
if ( isPromise ( promise ) ) {
2023-07-05 11:02:15 +02:00
throw new Error ( 'Use process(css).then(cb) to work with async plugins' ) ;
2023-07-01 10:42:40 +02:00
}
}
2023-07-05 11:02:15 +02:00
return this . result ;
} ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
_proto . run = function run ( plugin ) {
this . result . lastPlugin = plugin ;
2023-07-01 10:42:40 +02:00
try {
2023-07-05 11:02:15 +02:00
return plugin ( this . result . root , this . result ) ;
} catch ( error ) {
this . handleError ( error , plugin ) ;
throw error ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
} ;
_proto . stringify = function stringify ( ) {
if ( this . stringified ) return this . result ;
this . stringified = true ;
this . sync ( ) ;
var opts = this . result . opts ;
var str = _stringify2 . default ;
if ( opts . syntax ) str = opts . syntax . stringify ;
if ( opts . stringifier ) str = opts . stringifier ;
if ( str . stringify ) str = str . stringify ;
var map = new _mapGenerator . default ( str , this . result . root , this . result . opts ) ;
var data = map . generate ( ) ;
this . result . css = data [ 0 ] ;
this . result . map = data [ 1 ] ;
return this . result ;
} ;
_createClass ( LazyResult , [ {
key : "processor" ,
get : function get ( ) {
return this . result . processor ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
/ * *
* Options from the { @ link Processor # process } call .
*
* @ type { processOptions }
* /
} , {
key : "opts" ,
get : function get ( ) {
return this . result . opts ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
/ * *
* Processes input CSS through synchronous plugins , converts ` Root `
* to a CSS string and returns { @ link Result # css } .
*
* This property will only work with synchronous plugins .
* If the processor contains any asynchronous plugins
* it will throw an error . This is why this method is only
* for debug purpose , you should always use { @ link LazyResult # then } .
*
* @ type { string }
* @ see Result # css
* /
} , {
key : "css" ,
get : function get ( ) {
return this . stringify ( ) . css ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
/ * *
* An alias for the ` css ` property . Use it with syntaxes
* that generate non - CSS output .
*
* This property will only work with synchronous plugins .
* If the processor contains any asynchronous plugins
* it will throw an error . This is why this method is only
* for debug purpose , you should always use { @ link LazyResult # then } .
*
* @ type { string }
* @ see Result # content
* /
} , {
key : "content" ,
get : function get ( ) {
return this . stringify ( ) . content ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
/ * *
* Processes input CSS through synchronous plugins
* and returns { @ link Result # map } .
*
* This property will only work with synchronous plugins .
* If the processor contains any asynchronous plugins
* it will throw an error . This is why this method is only
* for debug purpose , you should always use { @ link LazyResult # then } .
*
* @ type { SourceMapGenerator }
* @ see Result # map
* /
} , {
key : "map" ,
get : function get ( ) {
return this . stringify ( ) . map ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
/ * *
* Processes input CSS through synchronous plugins
* and returns { @ link Result # root } .
*
* This property will only work with synchronous plugins . If the processor
* contains any asynchronous plugins it will throw an error .
*
* This is why this method is only for debug purpose ,
* you should always use { @ link LazyResult # then } .
*
* @ type { Root }
* @ see Result # root
* /
} , {
key : "root" ,
get : function get ( ) {
return this . sync ( ) . root ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
/ * *
* Processes input CSS through synchronous plugins
* and returns { @ link Result # messages } .
*
* This property will only work with synchronous plugins . If the processor
* contains any asynchronous plugins it will throw an error .
*
* This is why this method is only for debug purpose ,
* you should always use { @ link LazyResult # then } .
*
* @ type { Message [ ] }
* @ see Result # messages
* /
} , {
key : "messages" ,
get : function get ( ) {
return this . sync ( ) . messages ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
} ] ) ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
return LazyResult ;
} ( ) ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
var _default = LazyResult ;
/ * *
* @ callback onFulfilled
* @ param { Result } result
* /
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
/ * *
* @ callback onRejected
* @ param { Error } error
* /
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
exports . default = _default ;
module . exports = exports . default ;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxhenktcmVzdWx0LmVzNiJdLCJuYW1lcyI6WyJpc1Byb21pc2UiLCJvYmoiLCJ0aGVuIiwiTGF6eVJlc3VsdCIsInByb2Nlc3NvciIsImNzcyIsIm9wdHMiLCJzdHJpbmdpZmllZCIsInByb2Nlc3NlZCIsInJvb3QiLCJ0eXBlIiwiUmVzdWx0IiwibWFwIiwiaW5saW5lIiwicHJldiIsInBhcnNlciIsInBhcnNlIiwic3ludGF4IiwiZXJyb3IiLCJyZXN1bHQiLCJ3YXJuaW5ncyIsInN5bmMiLCJ0b1N0cmluZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImFzeW5jIiwiY2F0Y2giLCJmaW5hbGx5Iiwib25GaW5hbGx5IiwiaGFuZGxlRXJyb3IiLCJwbHVnaW4iLCJuYW1lIiwicG9zdGNzc1BsdWdpbiIsInNldE1lc3NhZ2UiLCJwb3N0Y3NzVmVyc2lvbiIsInBsdWdpbk5hbWUiLCJwbHVnaW5WZXIiLCJydW50aW1lVmVyIiwidmVyc2lvbiIsImEiLCJzcGxpdCIsImIiLCJwYXJzZUludCIsImNvbnNvbGUiLCJlcnIiLCJhc3luY1RpY2siLCJyZXNvbHZlIiwicmVqZWN0IiwicGx1Z2lucyIsImxlbmd0aCIsInByb21pc2UiLCJydW4iLCJQcm9taXNlIiwic3RyaW5naWZ5IiwicHJvY2Vzc2luZyIsIkVycm9yIiwibGFzdFBsdWdpbiIsInN0ciIsInN0cmluZ2lmaWVyIiwiTWFwR2VuZXJhdG9yIiwiZGF0YSIsImdlbmVyYXRlIiwiY29udGVudCIsIm1lc3NhZ2VzIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7OztBQUVBLFNBQVNBLFNBQVQsQ0FBb0JDLEdBQXBCLEVBQXlCO0FBQ3ZCLFNBQU8sT0FBT0EsR0FBUCxLQUFlLFFBQWYsSUFBMkIsT0FBT0EsR0FBRyxDQUFDQyxJQUFYLEtBQW9CLFVBQXREO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztJ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