48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
/** @typedef {import("./index.js").MinimizedResult} MinimizedResult */
 | 
						|
/** @typedef {import("./index.js").CustomOptions} CustomOptions */
 | 
						|
 | 
						|
/**
 | 
						|
 * @template T
 | 
						|
 * @param {import("./index.js").InternalOptions<T>} options
 | 
						|
 * @returns {Promise<MinimizedResult>}
 | 
						|
 */
 | 
						|
async function minify(options) {
 | 
						|
  const {
 | 
						|
    name,
 | 
						|
    input,
 | 
						|
    inputSourceMap,
 | 
						|
    extractComments
 | 
						|
  } = options;
 | 
						|
  const {
 | 
						|
    implementation,
 | 
						|
    options: minimizerOptions
 | 
						|
  } = options.minimizer;
 | 
						|
  return implementation({
 | 
						|
    [name]: input
 | 
						|
  }, inputSourceMap, minimizerOptions, extractComments);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @param {string} options
 | 
						|
 * @returns {Promise<MinimizedResult>}
 | 
						|
 */
 | 
						|
async function transform(options) {
 | 
						|
  // 'use strict' => this === undefined (Clean Scope)
 | 
						|
  // Safer for possible security issues, albeit not critical at all here
 | 
						|
  // eslint-disable-next-line no-param-reassign
 | 
						|
  const evaluatedOptions =
 | 
						|
  /**
 | 
						|
   * @template T
 | 
						|
   * @type {import("./index.js").InternalOptions<T>}
 | 
						|
   * */
 | 
						|
 | 
						|
  // eslint-disable-next-line no-new-func
 | 
						|
  new Function("exports", "require", "module", "__filename", "__dirname", `'use strict'\nreturn ${options}`)(exports, require, module, __filename, __dirname);
 | 
						|
  return minify(evaluatedOptions);
 | 
						|
}
 | 
						|
module.exports = {
 | 
						|
  minify,
 | 
						|
  transform
 | 
						|
}; |