"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _terser = require("terser"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var buildUglifyOptions = function buildUglifyOptions() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, ecma = _ref.ecma, warnings = _ref.warnings, _ref$parse = _ref.parse, parse = _ref$parse === void 0 ? {} : _ref$parse, _ref$compress = _ref.compress, compress = _ref$compress === void 0 ? {} : _ref$compress, mangle = _ref.mangle, output = _ref.output, toplevel = _ref.toplevel, nameCache = _ref.nameCache, ie8 = _ref.ie8, keep_classnames = _ref.keep_classnames, keep_fnames = _ref.keep_fnames, safari10 = _ref.safari10; return { ecma, warnings, parse: _objectSpread({}, parse), compress: typeof compress === 'boolean' ? compress : _objectSpread({}, compress), // eslint-disable-next-line no-nested-ternary mangle: mangle == null ? true : typeof mangle === 'boolean' ? mangle : _objectSpread({}, mangle), output: _objectSpread({ shebang: true, comments: false, beautify: false, semicolons: true }, output), // Ignoring sourceMap from options sourceMap: null, toplevel, nameCache, ie8, keep_classnames, keep_fnames, safari10 }; }; var buildComments = function buildComments(options, terserOptions, extractedComments) { var condition = {}; var commentsOpts = terserOptions.output.comments; // /^\**!|@preserve|@license|@cc_on/ if (typeof options.extractComments === 'boolean') { condition.preserve = commentsOpts; condition.extract = /^\**!|@preserve|@license|@cc_on/; } else if (typeof options.extractComments === 'string' || options.extractComments instanceof RegExp) { // extractComments specifies the extract condition and commentsOpts specifies the preserve condition condition.preserve = commentsOpts; condition.extract = options.extractComments; } else if (typeof options.extractComments === 'function') { condition.preserve = false; condition.extract = options.extractComments; } else if (Object.prototype.hasOwnProperty.call(options.extractComments, 'condition')) { // Extract condition is given in extractComments.condition condition.preserve = commentsOpts; condition.extract = options.extractComments.condition; } else { // No extract condition is given. Extract comments that match commentsOpts instead of preserving them condition.preserve = false; condition.extract = commentsOpts; } // Ensure that both conditions are functions ['preserve', 'extract'].forEach(function (key) { var regexStr; var regex; switch (typeof condition[key]) { case 'boolean': condition[key] = condition[key] ? function () { return true; } : function () { return false; }; break; case 'function': break; case 'string': if (condition[key] === 'all') { condition[key] = function () { return true; }; break; } if (condition[key] === 'some') { condition[key] = function (astNode, comment) { return comment.type === 'comment2' && /@preserve|@license|@cc_on/i.test(comment.value); }; break; } regexStr = condition[key]; condition[key] = function (astNode, comment) { return new RegExp(regexStr).test(comment.value); }; break; default: regex = condition[key]; condition[key] = function (astNode, comment) { return regex.test(comment.value); }; } }); // Redefine the comments function to extract and preserve // comments according to the two conditions return function (astNode, comment) { if (condition.extract(astNode, comment)) { extractedComments.push(comment.type === 'comment2' ? `/*${comment.value}*/` : `//${comment.value}`); } return condition.preserve(astNode, comment); }; }; var minify = function minify(options) { var file = options.file, input = options.input, inputSourceMap = options.inputSourceMap, extractComments = options.extractComments, minifyFn = options.minify; if (minifyFn) { return minifyFn({ [file]: input }, inputSourceMap); } // Copy uglify options var terserOptions = buildUglifyOptions(options.uglifyOptions); // Add source map data if (inputSourceMap) { terserOptions.sourceMap = { content: inputSourceMap }; } var extractedComments = []; if (extractComments) { terserOptions.output.comments = buildComments(options, terserOptions, extractedComments); } var _terserMinify = (0, _terser.minify)({ [file]: input }, terserOptions), error = _terserMinify.error, map = _terserMinify.map, code = _terserMinify.code, warnings = _terserMinify.warnings; return { error, map, code, warnings, extractedComments }; }; var _default = minify; exports.default = _default;