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 _sourceMap = _interopRequireDefault ( require ( "source-map" ) ) ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
var _path = _interopRequireDefault ( require ( "path" ) ) ;
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 } ; }
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 ; }
var MapGenerator = /*#__PURE__*/ function ( ) {
function MapGenerator ( stringify , root , opts ) {
this . stringify = stringify ;
this . mapOpts = opts . map || { } ;
this . root = root ;
this . opts = opts ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
var _proto = MapGenerator . prototype ;
_proto . isMap = function isMap ( ) {
2023-07-01 10:42:40 +02:00
if ( typeof this . opts . map !== 'undefined' ) {
2023-07-05 11:02:15 +02:00
return ! ! this . opts . map ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
return this . previous ( ) . length > 0 ;
} ;
_proto . previous = function previous ( ) {
var _this = this ;
2023-07-01 10:42:40 +02:00
if ( ! this . previousMaps ) {
2023-07-05 11:02:15 +02:00
this . previousMaps = [ ] ;
this . root . walk ( function ( node ) {
if ( node . source && node . source . input . map ) {
var map = node . source . input . map ;
if ( _this . previousMaps . indexOf ( map ) === - 1 ) {
_this . previousMaps . push ( map ) ;
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 this . previousMaps ;
} ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
_proto . isInline = function isInline ( ) {
2023-07-01 10:42:40 +02:00
if ( typeof this . mapOpts . inline !== 'undefined' ) {
2023-07-05 11:02:15 +02:00
return this . mapOpts . inline ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
var annotation = this . mapOpts . annotation ;
2023-07-01 10:42:40 +02:00
if ( typeof annotation !== 'undefined' && annotation !== true ) {
2023-07-05 11:02:15 +02:00
return false ;
2023-07-01 10:42:40 +02:00
}
if ( this . previous ( ) . length ) {
2023-07-05 11:02:15 +02:00
return this . previous ( ) . some ( function ( i ) {
return i . inline ;
} ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
return true ;
} ;
_proto . isSourcesContent = function isSourcesContent ( ) {
2023-07-01 10:42:40 +02:00
if ( typeof this . mapOpts . sourcesContent !== 'undefined' ) {
2023-07-05 11:02:15 +02:00
return this . mapOpts . sourcesContent ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
2023-07-01 10:42:40 +02:00
if ( this . previous ( ) . length ) {
2023-07-05 11:02:15 +02:00
return this . previous ( ) . some ( function ( i ) {
return i . withContent ( ) ;
} ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
return true ;
} ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
_proto . clearAnnotation = function clearAnnotation ( ) {
if ( this . mapOpts . annotation === false ) return ;
var node ;
for ( var i = this . root . nodes . length - 1 ; i >= 0 ; i -- ) {
node = this . root . nodes [ i ] ;
if ( node . type !== 'comment' ) continue ;
if ( node . text . indexOf ( '# sourceMappingURL=' ) === 0 ) {
this . root . removeChild ( i ) ;
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 . setSourcesContent = function setSourcesContent ( ) {
var _this2 = this ;
var already = { } ;
this . root . walk ( function ( node ) {
if ( node . source ) {
var from = node . source . input . from ;
if ( from && ! already [ from ] ) {
already [ from ] = true ;
var relative = _this2 . relative ( from ) ;
_this2 . map . setSourceContent ( relative , node . source . input . css ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
}
} ) ;
} ;
_proto . applyPrevMaps = function applyPrevMaps ( ) {
for ( var _iterator = _createForOfIteratorHelperLoose ( this . previous ( ) ) , _step ; ! ( _step = _iterator ( ) ) . done ; ) {
var prev = _step . value ;
var from = this . relative ( prev . file ) ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
var root = prev . root || _path . default . dirname ( prev . file ) ;
var map = void 0 ;
2023-07-01 10:42:40 +02:00
if ( this . mapOpts . sourcesContent === false ) {
2023-07-05 11:02:15 +02:00
map = new _sourceMap . default . SourceMapConsumer ( prev . text ) ;
2023-07-01 10:42:40 +02:00
if ( map . sourcesContent ) {
2023-07-05 11:02:15 +02:00
map . sourcesContent = map . sourcesContent . map ( function ( ) {
return null ;
} ) ;
2023-07-01 10:42:40 +02:00
}
} else {
2023-07-05 11:02:15 +02:00
map = prev . consumer ( ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
this . map . applySourceMap ( map , from , this . relative ( root ) ) ;
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 . isAnnotation = function isAnnotation ( ) {
2023-07-01 10:42:40 +02:00
if ( this . isInline ( ) ) {
2023-07-05 11:02:15 +02:00
return true ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
2023-07-01 10:42:40 +02:00
if ( typeof this . mapOpts . annotation !== 'undefined' ) {
2023-07-05 11:02:15 +02:00
return this . mapOpts . annotation ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
2023-07-01 10:42:40 +02:00
if ( this . previous ( ) . length ) {
2023-07-05 11:02:15 +02:00
return this . previous ( ) . some ( function ( i ) {
return i . annotation ;
} ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
return true ;
} ;
_proto . toBase64 = function toBase64 ( str ) {
2023-07-01 10:42:40 +02:00
if ( Buffer ) {
2023-07-05 11:02:15 +02:00
return Buffer . from ( str ) . toString ( 'base64' ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
return window . btoa ( unescape ( encodeURIComponent ( str ) ) ) ;
} ;
_proto . addAnnotation = function addAnnotation ( ) {
var content ;
2023-07-01 10:42:40 +02:00
if ( this . isInline ( ) ) {
2023-07-05 11:02:15 +02:00
content = 'data:application/json;base64,' + this . toBase64 ( this . map . toString ( ) ) ;
2023-07-01 10:42:40 +02:00
} else if ( typeof this . mapOpts . annotation === 'string' ) {
2023-07-05 11:02:15 +02:00
content = this . mapOpts . annotation ;
2023-07-01 10:42:40 +02:00
} else {
2023-07-05 11:02:15 +02:00
content = this . outputFile ( ) + '.map' ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
var eol = '\n' ;
if ( this . css . indexOf ( '\r\n' ) !== - 1 ) eol = '\r\n' ;
this . css += eol + '/*# sourceMappingURL=' + content + ' */' ;
} ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
_proto . outputFile = function outputFile ( ) {
2023-07-01 10:42:40 +02:00
if ( this . opts . to ) {
2023-07-05 11:02:15 +02:00
return this . relative ( this . opts . to ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
if ( this . opts . from ) {
return this . relative ( this . opts . from ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
return 'to.css' ;
} ;
_proto . generateMap = function generateMap ( ) {
this . generateString ( ) ;
if ( this . isSourcesContent ( ) ) this . setSourcesContent ( ) ;
if ( this . previous ( ) . length > 0 ) this . applyPrevMaps ( ) ;
if ( this . isAnnotation ( ) ) this . addAnnotation ( ) ;
2023-07-01 10:42:40 +02:00
if ( this . isInline ( ) ) {
2023-07-05 11:02:15 +02:00
return [ this . css ] ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
return [ this . css , this . map ] ;
} ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
_proto . relative = function relative ( file ) {
if ( file . indexOf ( '<' ) === 0 ) return file ;
if ( /^\w+:\/\// . test ( file ) ) return file ;
var from = this . opts . to ? _path . default . dirname ( this . opts . to ) : '.' ;
2023-07-01 10:42:40 +02:00
if ( typeof this . mapOpts . annotation === 'string' ) {
2023-07-05 11:02:15 +02:00
from = _path . default . dirname ( _path . default . resolve ( from , this . mapOpts . annotation ) ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
file = _path . default . relative ( from , file ) ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
if ( _path . default . sep === '\\' ) {
return file . replace ( /\\/g , '/' ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
return file ;
} ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
_proto . sourcePath = function sourcePath ( node ) {
2023-07-01 10:42:40 +02:00
if ( this . mapOpts . from ) {
2023-07-05 11:02:15 +02:00
return this . mapOpts . from ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
return this . relative ( node . source . input . from ) ;
} ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
_proto . generateString = function generateString ( ) {
var _this3 = this ;
2023-07-01 10:42:40 +02:00
2023-07-05 11:02:15 +02:00
this . css = '' ;
this . map = new _sourceMap . default . SourceMapGenerator ( {
file : this . outputFile ( )
} ) ;
var line = 1 ;
var column = 1 ;
var lines , last ;
this . stringify ( this . root , function ( str , node , type ) {
_this3 . css += str ;
2023-07-01 10:42:40 +02:00
if ( node && type !== 'end' ) {
if ( node . source && node . source . start ) {
2023-07-05 11:02:15 +02:00
_this3 . map . addMapping ( {
source : _this3 . sourcePath ( node ) ,
generated : {
line : line ,
column : column - 1
} ,
original : {
line : node . source . start . line ,
column : node . source . start . column - 1
}
} ) ;
2023-07-01 10:42:40 +02:00
} else {
2023-07-05 11:02:15 +02:00
_this3 . map . addMapping ( {
source : '<no source>' ,
original : {
line : 1 ,
column : 0
} ,
generated : {
line : line ,
column : column - 1
}
} ) ;
2023-07-01 10:42:40 +02:00
}
}
2023-07-05 11:02:15 +02:00
lines = str . match ( /\n/g ) ;
2023-07-01 10:42:40 +02:00
if ( lines ) {
2023-07-05 11:02:15 +02:00
line += lines . length ;
last = str . lastIndexOf ( '\n' ) ;
column = str . length - last ;
2023-07-01 10:42:40 +02:00
} else {
2023-07-05 11:02:15 +02:00
column += str . length ;
2023-07-01 10:42:40 +02:00
}
if ( node && type !== 'start' ) {
2023-07-05 11:02:15 +02:00
var p = node . parent || {
raws : { }
} ;
if ( node . type !== 'decl' || node !== p . last || p . raws . semicolon ) {
2023-07-01 10:42:40 +02:00
if ( node . source && node . source . end ) {
2023-07-05 11:02:15 +02:00
_this3 . map . addMapping ( {
source : _this3 . sourcePath ( node ) ,
generated : {
line : line ,
column : column - 2
} ,
original : {
line : node . source . end . line ,
column : node . source . end . column - 1
}
} ) ;
2023-07-01 10:42:40 +02:00
} else {
2023-07-05 11:02:15 +02:00
_this3 . map . addMapping ( {
source : '<no source>' ,
original : {
line : 1 ,
column : 0
} ,
generated : {
line : line ,
column : column - 1
}
} ) ;
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 . generate = function generate ( ) {
this . clearAnnotation ( ) ;
if ( this . isMap ( ) ) {
return this . generateMap ( ) ;
2023-07-01 10:42:40 +02:00
}
2023-07-05 11:02:15 +02:00
var result = '' ;
this . stringify ( this . root , function ( i ) {
result += i ;
} ) ;
return [ result ] ;
} ;
return MapGenerator ;
} ( ) ;
var _default = MapGenerator ;
exports . default = _default ;
module . exports = exports . default ;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hcC1nZW5lcmF0b3IuZXM2Il0sIm5hbWVzIjpbIk1hcEdlbmVyYXRvciIsInN0cmluZ2lmeSIsInJvb3QiLCJvcHRzIiwibWFwT3B0cyIsIm1hcCIsImlzTWFwIiwicHJldmlvdXMiLCJsZW5ndGgiLCJwcmV2aW91c01hcHMiLCJ3YWxrIiwibm9kZSIsInNvdXJjZSIsImlucHV0IiwiaW5kZXhPZiIsInB1c2giLCJpc0lubGluZSIsImlubGluZSIsImFubm90YXRpb24iLCJzb21lIiwiaSIsImlzU291cmNlc0NvbnRlbnQiLCJzb3VyY2VzQ29udGVudCIsIndpdGhDb250ZW50IiwiY2xlYXJBbm5vdGF0aW9uIiwibm9kZXMiLCJ0eXBlIiwidGV4dCIsInJlbW92ZUNoaWxkIiwic2V0U291cmNlc0NvbnRlbnQiLCJhbHJlYWR5IiwiZnJvbSIsInJlbGF0aXZlIiwic2V0U291cmNlQ29udGVudCIsImNzcyIsImFwcGx5UHJldk1hcHMiLCJwcmV2IiwiZmlsZSIsInBhdGgiLCJkaXJuYW1lIiwibW96aWxsYSIsIlNvdXJjZU1hcENvbnN1bWVyIiwiY29uc3VtZXIiLCJhcHBseVNvdXJjZU1hcCIsImlzQW5ub3RhdGlvbiIsInRvQmFzZTY0Iiwic3RyIiwiQnVmZmVyIiwidG9TdHJpbmciLCJ3aW5kb3ciLCJidG9hIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJhZGRBbm5vdGF0aW9uIiwiY29udGVudCIsIm91dHB1dEZpbGUiLCJlb2wiLCJ0byIsImdlbmVyYXRlTWFwIiwiZ2VuZXJhdGVTdHJpbmciLCJ0ZXN0IiwicmVzb2x2ZSIsInNlcCIsInJlcGxhY2UiLCJzb3VyY2VQYXRoIiwiU291cmNlTWFwR2VuZXJhdG9yIiwibGluZSIsImNvbHVtbiIsImxpbmVzIiwibGFzdCIsInN0YXJ0IiwiYWRkTWFwcGluZyIsImdlbmVyYXRlZCIsIm9yaWdpbmFsIiwibWF0Y2giLCJsYXN0SW5kZXhPZiIsInAiLCJwYXJlbnQiLCJyYXdzIiwic2VtaWNv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