diff --git a/lib/serialize/output.js b/lib/serialize/output.js index d5817198..cff90924 100644 --- a/lib/serialize/output.js +++ b/lib/serialize/output.js @@ -8,6 +8,7 @@ // Modules const {join: pathJoin, relative: pathRelative, dirname} = require('path').posix, {CodeGenerator} = require('@babel/generator'), + Printer = require('@babel/generator/lib/printer.js').default, sourceMapFromObject = require('convert-source-map').fromObject, last = require('lodash/last'), t = require('@babel/types'); @@ -26,6 +27,8 @@ const uniformHashPlaceholder = HASH_PLACEHOLDER_CHAR.repeat(HASH_LENGTH), // Exports +const {StringLiteral: printStingLiteral, Program: printProgram} = Printer.prototype; + module.exports = { /** * Output to files. @@ -296,27 +299,27 @@ module.exports = { shouldPrintComment: options.shouldPrintComment }, sourceMaps ? this.sourceFiles : undefined - )._generator; + ); + + const printer = new Printer(generator._format, generator._map); - // Shim generator's `StringLiteral` method to capture positions of import paths - const {StringLiteral} = generator; - generator.StringLiteral = function(strNode) { + // Shim printer's `StringLiteral` method to capture positions of import paths + printer.StringLiteral = function(strNode) { const startPos = this._buf._str.length; // NB: A space may be inserted after this - StringLiteral.call(this, strNode); + printStingLiteral.call(this, strNode); if (strNode[STRING_POSITIONS]) strNode[STRING_POSITIONS].push([startPos, this._buf._str.length]); }; if (minify) { - // Patch generator to remove final semi-colon if not required + // Patch printer to remove final semi-colon if not required // TODO: Remove this if https://github.com/babel/babel/issues/14160 is resolved - const {Program} = generator; - generator.Program = function(programNode) { - Program.call(this, programNode); + printer.Program = function(programNode) { + printProgram.call(this, programNode); this._buf.removeLastSemicolon(); }; } - const {code: js, map} = generator.generate(); + const {code: js, map} = printer.generate(node); return {js, map}; }, diff --git a/package-lock.json b/package-lock.json index 51586ffb..360f2529 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@babel/core": "^7.23.5", - "@babel/generator": "^7.23.5", + "@babel/generator": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", "@babel/parser": "^7.23.5", "@babel/plugin-transform-modules-commonjs": "^7.23.3", @@ -133,11 +133,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", - "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dependencies": { - "@babel/types": "^7.23.5", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -608,9 +608,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", - "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", diff --git a/package.json b/package.json index df6a0e00..2d091db4 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ }, "dependencies": { "@babel/core": "^7.23.5", - "@babel/generator": "^7.23.5", + "@babel/generator": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", "@babel/parser": "^7.23.5", "@babel/plugin-transform-modules-commonjs": "^7.23.3",