2024-09-18 08:27:46 -07:00
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . default = generate ;
var _sourceMap = require ( "./source-map.js" ) ;
var _printer = require ( "./printer.js" ) ;
2024-11-04 11:06:36 -08:00
function normalizeOptions ( code , opts , ast ) {
if ( opts . experimental _preserveFormat ) {
if ( typeof code !== "string" ) {
throw new Error ( "`experimental_preserveFormat` requires the original `code` to be passed to @babel/generator as a string" ) ;
}
if ( ! opts . retainLines ) {
throw new Error ( "`experimental_preserveFormat` requires `retainLines` to be set to `true`" ) ;
}
if ( opts . compact && opts . compact !== "auto" ) {
throw new Error ( "`experimental_preserveFormat` is not compatible with the `compact` option" ) ;
}
if ( opts . minified ) {
throw new Error ( "`experimental_preserveFormat` is not compatible with the `minified` option" ) ;
}
if ( opts . jsescOption ) {
throw new Error ( "`experimental_preserveFormat` is not compatible with the `jsescOption` option" ) ;
}
if ( ! Array . isArray ( ast . tokens ) ) {
throw new Error ( "`experimental_preserveFormat` requires the AST to have attatched the token of the input code. Make sure to enable the `tokens: true` parser option." ) ;
}
}
2024-09-18 08:27:46 -07:00
const format = {
auxiliaryCommentBefore : opts . auxiliaryCommentBefore ,
auxiliaryCommentAfter : opts . auxiliaryCommentAfter ,
shouldPrintComment : opts . shouldPrintComment ,
2024-11-04 11:06:36 -08:00
preserveFormat : opts . experimental _preserveFormat ,
2024-09-18 08:27:46 -07:00
retainLines : opts . retainLines ,
retainFunctionParens : opts . retainFunctionParens ,
comments : opts . comments == null || opts . comments ,
compact : opts . compact ,
minified : opts . minified ,
concise : opts . concise ,
indent : {
adjustMultilineComment : true ,
style : " "
} ,
jsescOption : Object . assign ( {
quotes : "double" ,
wrap : true ,
minimal : false
} , opts . jsescOption ) ,
topicToken : opts . topicToken ,
importAttributesKeyword : opts . importAttributesKeyword
} ;
{
var _opts$recordAndTupleS ;
format . decoratorsBeforeExport = opts . decoratorsBeforeExport ;
format . jsescOption . json = opts . jsonCompatibleStrings ;
format . recordAndTupleSyntaxType = ( _opts$recordAndTupleS = opts . recordAndTupleSyntaxType ) != null ? _opts$recordAndTupleS : "hash" ;
}
if ( format . minified ) {
format . compact = true ;
format . shouldPrintComment = format . shouldPrintComment || ( ( ) => format . comments ) ;
} else {
format . shouldPrintComment = format . shouldPrintComment || ( value => format . comments || value . includes ( "@license" ) || value . includes ( "@preserve" ) ) ;
}
if ( format . compact === "auto" ) {
format . compact = typeof code === "string" && code . length > 500000 ;
if ( format . compact ) {
console . error ( "[BABEL] Note: The code generator has deoptimised the styling of " + ` ${ opts . filename } as it exceeds the max of ${ "500KB" } . ` ) ;
}
}
2024-11-04 11:06:36 -08:00
if ( format . compact || format . preserveFormat ) {
2024-09-18 08:27:46 -07:00
format . indent . adjustMultilineComment = false ;
}
const {
auxiliaryCommentBefore ,
auxiliaryCommentAfter ,
shouldPrintComment
} = format ;
if ( auxiliaryCommentBefore && ! shouldPrintComment ( auxiliaryCommentBefore ) ) {
format . auxiliaryCommentBefore = undefined ;
}
if ( auxiliaryCommentAfter && ! shouldPrintComment ( auxiliaryCommentAfter ) ) {
format . auxiliaryCommentAfter = undefined ;
}
return format ;
}
{
exports . CodeGenerator = class CodeGenerator {
constructor ( ast , opts = { } , code ) {
this . _ast = void 0 ;
this . _format = void 0 ;
this . _map = void 0 ;
this . _ast = ast ;
2024-11-04 11:06:36 -08:00
this . _format = normalizeOptions ( code , opts , ast ) ;
2024-09-18 08:27:46 -07:00
this . _map = opts . sourceMaps ? new _sourceMap . default ( opts , code ) : null ;
}
generate ( ) {
const printer = new _printer . default ( this . _format , this . _map ) ;
return printer . generate ( this . _ast ) ;
}
} ;
}
function generate ( ast , opts = { } , code ) {
2024-11-04 11:06:36 -08:00
const format = normalizeOptions ( code , opts , ast ) ;
2024-09-18 08:27:46 -07:00
const map = opts . sourceMaps ? new _sourceMap . default ( opts , code ) : null ;
2024-11-04 11:06:36 -08:00
const printer = new _printer . default ( format , map , ast . tokens , typeof code === "string" ? code : null ) ;
2024-09-18 08:27:46 -07:00
return printer . generate ( ast ) ;
}
//# sourceMappingURL=index.js.map