ts-minifer
Version:
Advanced TypeScript code minification and compression tool
130 lines • 5.07 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const compressor_1 = require("../compressor");
const types_1 = require("../types");
describe('TypeScriptCompressor', () => {
let compressor;
const testDir = path.join(__dirname, 'test-files');
beforeEach(() => {
compressor = new compressor_1.TypeScriptCompressor(false);
// Ensure test directory exists
if (!fs.existsSync(testDir)) {
fs.mkdirSync(testDir, { recursive: true });
}
});
afterEach(() => {
// Clean up test files
fs.rmSync(testDir, { recursive: true, force: true });
});
const createTestFile = (filename, content) => {
fs.writeFileSync(path.join(testDir, filename), content);
};
test('compresses single file with minimal settings', () => {
createTestFile('sample.ts', `
// This is a comment
const longVariableName = 'Hello World';
function longFunctionName() {
console.log(longVariableName);
}
longFunctionName();
`);
const result = compressor.compressFiles([testDir], {
level: types_1.CompressionLevel.MINIMAL,
outputFormat: 'single'
});
expect(result.outputFiles.length).toBe(1);
expect(result.stats.compressionRatio).toBeGreaterThan(0);
const compressedContent = fs.readFileSync(result.outputFiles[0], 'utf-8');
expect(compressedContent).not.toContain('// This is a comment');
});
test('compresses multiple files with aggressive settings', () => {
createTestFile('file1.ts', `
const complexVariableName = 'First File';
export function complexFunctionName() {
return complexVariableName;
}
`);
createTestFile('file2.ts', `
const anotherComplexVariable = 'Second File';
export function anotherComplexFunction() {
return anotherComplexVariable;
}
`);
const result = compressor.compressFiles([testDir], {
level: types_1.CompressionLevel.AGGRESSIVE,
outputFormat: 'multiple',
generateSourceMaps: true
});
expect(result.outputFiles.length).toBe(2);
expect(result.sourceMapFiles?.length).toBe(2);
expect(result.stats.compressionRatio).toBeGreaterThan(0);
});
test('handles source map generation', () => {
createTestFile('sourcemap.ts', `
function originalFunction() {
const originalVariable = 'Test';
return originalVariable;
}
`);
const result = compressor.compressFiles([testDir], {
level: types_1.CompressionLevel.MINIMAL,
outputFormat: 'single',
generateSourceMaps: true
});
expect(result.sourceMapFiles?.length).toBe(1);
const sourceMapContent = fs.readFileSync(result.sourceMapFiles[0], 'utf-8');
expect(sourceMapContent).toBeTruthy();
});
test('excludes specified files', () => {
createTestFile('include.ts', `
const includeVar = 'Include Me';
`);
createTestFile('exclude.ts', `
const excludeVar = 'Exclude Me';
`);
const result = compressor.compressFiles([testDir], {
level: types_1.CompressionLevel.MINIMAL,
outputFormat: 'multiple',
excludePatterns: ['**/exclude.ts']
});
const outputFileNames = result.outputFiles.map(f => path.basename(f));
expect(outputFileNames).toContain('include.ts');
expect(outputFileNames).not.toContain('exclude.ts');
});
});
//# sourceMappingURL=compressor.test.js.map