Files
vanillajs-seed/node_modules/minify/lib/minify.js
2019-12-20 20:02:44 +01:00

84 lines
1.7 KiB
JavaScript

'use strict';
const DIR = __dirname + '/';
const fs = require('fs');
const path = require('path');
const {promisify} = require('util');
const tryToCatch = require('try-to-catch');
const readFile = promisify(fs.readFile);
const log = require('debug')('minify');
for (const name of ['js', 'html', 'css', 'img']) {
minify[name] = require(DIR + name);
}
module.exports = minify;
function check(name) {
if (!name)
throw Error('name could not be empty!');
}
async function minify(name) {
const EXT = ['js', 'html', 'css'];
check(name);
const ext = path.extname(name).slice(1);
const is = ~EXT.indexOf(ext);
if (!is)
throw Error(`File type "${ext}" not supported.`);
log('optimizing ' + path.basename(name));
return optimize(name);
}
function getName(file) {
const notObj = typeof file !== 'object';
if (notObj)
return file;
return Object.keys(file)[0];
}
/**
* function minificate js,css and html files
*
* @param files - js, css or html file path
*/
async function optimize(file) {
check(file);
const name = getName(file);
log('reading file ' + path.basename(name));
const data = await readFile(name, 'utf8');
return onDataRead(file, data);
}
/**
* Processing of files
* @param fileData {name, data}
*/
async function onDataRead(filename, data) {
log('file ' + path.basename(filename) + ' read');
const ext = path.extname(filename).replace(/^\./, '');
const optimizedData = await minify[ext](data);
let b64Optimize;
if (ext === 'css')
[, b64Optimize] = await tryToCatch(minify.img, filename, optimizedData);
return b64Optimize || optimizedData;
}