swc/node-swc/__tests__/minify_test.mjs
Donny/강동윤 98cc79a2be
fix(es/minifer): Fix bugs (#2397)
swc_ecma_codegen:
 - Fix sourcemap of `export` tokens.
 - Fix codegen of numeric operands in left of a binary expression.
 - Fix codegen of unary operations.

swc_ecma_minifier:
 - Visit `AssignPatProp.valie`.
 - Move `inline_prevented` to analyzer.
 - Add `Ctx.dont_invoke_iife`.
 - `iife`: Check for `arugments`

swc:
 - `inline_sources_content`: true by default for `minify()`.
2021-10-11 07:44:42 +00:00

139 lines
3.7 KiB
JavaScript

import swc from '../..';
it("should compress", async () => {
const { code } = await swc.minify(`
import foo from '@src/app';
console.log(foo)
`);
expect(code).toMatchInlineSnapshot(`"import foo from'@src/app';console.log(foo)"`);
})
it("should accept object", async () => {
const { code } = await swc.minify(`
import foo from '@src/app';
console.log(foo)
`, {});
expect(code).toMatchInlineSnapshot(`"import foo from'@src/app';console.log(foo)"`);
})
it("should accpept { mangle = true }", async () => {
const { code } = await swc.minify(`
import foo from '@src/app';
console.log(foo)
`, {
compress: false,
mangle: true,
});
expect(code).toMatchInlineSnapshot(`"import a from'@src/app';console.log(a)"`);
})
it("should accpept { mangle = object }", async () => {
const { code } = await swc.minify(`
import foo from '@src/app';
console.log(foo)
`, {
compress: false,
mangle: {
topLevel: true
},
});
expect(code).toMatchInlineSnapshot(`"import a from'@src/app';console.log(a)"`);
})
it("should mangle locals", async () => {
const { code } = await swc.minify(`
(function(){
const longName = Math.random() + '_' + Math.random();
console.log(longName);
console.log(longName);
console.log(longName);
console.log(longName);
console.log(longName);
console.log(longName);
})()
`, {
compress: false,
mangle: {
topLevel: true
},
});
expect(code).toMatchInlineSnapshot(`"(function(){const a=Math.random()+'_'+Math.random();console.log(a);console.log(a);console.log(a);console.log(a);console.log(a);console.log(a)})()"`);
})
describe('soruce map', () => {
it("should have `names`", async () => {
const { map } = await swc.minify(`
(function(){
const longName = Math.random() + '_' + Math.random();
console.log(longName);
console.log(longName);
})()
`, {
sourceMap: true,
compress: false,
mangle: {
topLevel: true
},
});
expect(JSON.parse(map)).toHaveProperty("names");
expect(JSON.parse(map).names).not.toEqual([])
});
it("should have `sources` if file name is speicified", async () => {
const { map } = await swc.minify({
'foo.js': `(function(){
const longName = Math.random() + '_' + Math.random();
console.log(longName);
})()`
}, {
sourceMap: true,
compress: false,
mangle: {
topLevel: true
},
});
const j = JSON.parse(map);
expect(j).toHaveProperty("sources");
expect(j.sources).not.toEqual([]);
});
})
describe('transform apis', () => {
it("handle jsc.minify", async () => {
const { code } = await swc.transform(`
(function(){
const longName = Math.random() + '_' + Math.random();
console.log(longName);
console.log(longName);
console.log(longName);
console.log(longName);
console.log(longName);
console.log(longName);
})()
`, {
jsc: {
minify: {
compress: false,
mangle: {
topLevel: true
},
}
},
minify: true,
});
expect(code).toMatchInlineSnapshot(`"(function(){var a=Math.random()+'_'+Math.random();console.log(a);console.log(a);console.log(a);console.log(a);console.log(a);console.log(a)})()"`);
})
})