Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion js/src/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ var path = require('path'),
"outfile": path,
"replace": Boolean,
"quiet": Boolean,
"minify": Boolean,
"type": ["js", "css", "html"],
"config": path,
"editorconfig": Boolean
Expand Down Expand Up @@ -357,6 +358,7 @@ function usage(err) {
' -r, --replace Write output in-place, replacing input',
' -o, --outfile Write output to file (default stdout)',
' --config Path to config file',
' --minify Minify to one line output (whitespace reduction)',
' --type [js|css|html] ["js"]',
' -q, --quiet Suppress logging to stdout',
' -h, --help Show this help',
Expand Down Expand Up @@ -490,7 +492,15 @@ function processInputSync(filepath) {

function makePretty(fileType, code, config, outfile, callback) {
try {
var pretty = beautify[fileType](code, config);
var pretty;
if (config.minify) {
if (typeof beautify[fileType].minify !== 'function') {
throw new Error('Minify is not available for type: ' + fileType);
}
pretty = beautify[fileType].minify(code, config);
} else {
pretty = beautify[fileType](code, config);
}

callback(null, pretty, outfile, config);
} catch (ex) {
Expand Down
20 changes: 20 additions & 0 deletions js/src/css/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,32 @@
var Beautifier = require('./beautifier').Beautifier,
Options = require('./options').Options;

function normalizeMinifyOutput(text) {
return text
.replace(/[\r\n]+/g, ' ')
.replace(/[ \t]{2,}/g, ' ')
.trim();
}

function css_beautify(source_text, options) {
var beautifier = new Beautifier(source_text, options);
return beautifier.beautify();
}

function css_minify(source_text, options) {
var minify_options = Object.assign({}, options, {
indent_size: 0,
preserve_newlines: false,
max_preserve_newlines: 0,
wrap_line_length: 0,
indent_with_tabs: false
});
var result = css_beautify(source_text, minify_options);
return normalizeMinifyOutput(result);
}

module.exports = css_beautify;
module.exports.minify = css_minify;
module.exports.defaultOptions = function() {
return new Options();
};
23 changes: 23 additions & 0 deletions js/src/html/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,35 @@
var Beautifier = require('./beautifier').Beautifier,
Options = require('./options').Options;

function normalizeMinifyOutput(text) {
return text
.replace(/[\r\n]+/g, ' ')
.replace(/>\s+</g, '><')
.replace(/[ \t]{2,}/g, ' ')
.trim();
}

function style_html(html_source, options, js_beautify, css_beautify) {
var beautifier = new Beautifier(html_source, options, js_beautify, css_beautify);
return beautifier.beautify();
}

function html_minify(html_source, options, js_beautify, css_beautify) {
var minify_options = Object.assign({}, options, {
preserve_newlines: false,
max_preserve_newlines: 0,
wrap_line_length: 0,
indent_size: 0,
indent_with_tabs: false,
indent_empty_lines: false
});

var result = style_html(html_source, minify_options, js_beautify, css_beautify);
return normalizeMinifyOutput(result);
}

module.exports = style_html;
module.exports.minify = html_minify;
module.exports.defaultOptions = function() {
return new Options();
};
15 changes: 15 additions & 0 deletions js/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,18 @@ style_html.defaultOptions = html_beautify.defaultOptions;
module.exports.js = js_beautify;
module.exports.css = css_beautify;
module.exports.html = style_html;

module.exports.js.minify = js_beautify.minify;
module.exports.css.minify = css_beautify.minify;
module.exports.html.minify = html_beautify.minify;

module.exports.minify = function(src, options) {
var type = (options && options.type) || 'js';
if (type === 'css') {
return module.exports.css.minify(src, options);
}
if (type === 'html') {
return module.exports.html.minify(src, options);
}
return module.exports.js.minify(src, options);
};
20 changes: 20 additions & 0 deletions js/src/javascript/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,32 @@
var Beautifier = require('./beautifier').Beautifier,
Options = require('./options').Options;

function normalizeMinifyOutput(text) {
return text
.replace(/[\r\n]+/g, ' ')
.replace(/[ \t]{2,}/g, ' ')
.trim();
}

function js_beautify(js_source_text, options) {
var beautifier = new Beautifier(js_source_text, options);
return beautifier.beautify();
}

function js_minify(js_source_text, options) {
var minify_options = Object.assign({}, options, {
indent_size: 0,
preserve_newlines: false,
max_preserve_newlines: 0,
wrap_line_length: 0,
indent_with_tabs: false
});
var result = js_beautify(js_source_text, minify_options);
return normalizeMinifyOutput(result);
}

module.exports = js_beautify;
module.exports.minify = js_minify;
module.exports.defaultOptions = function() {
return new Options();
};
26 changes: 26 additions & 0 deletions js/test/node-src-index-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,31 @@ function test_names() {
results.expect(typeof beautify.css, 'function');
results.expect(typeof beautify.html, 'function');

results.expect(typeof beautify.js.minify, 'function');
results.expect(typeof beautify.css.minify, 'function');
results.expect(typeof beautify.html.minify, 'function');

console.log(results.results_raw());
return results.get_exitcode();
}

function test_minify_output() {
var beautify = require('../index');
var results = new SanityTest();

var html_source = '<head>\n<style>\n* {\nmargin: 0 auto;\n}\n</style>\n</head>\n<body>\n<p>example blah blah blah</p>\n</body>';
var html_expected = '<head><style>* { margin: 0 auto; } </style></head><body><p>example blah blah blah</p></body>';

results.expect(beautify.html.minify(html_source), html_expected);

var css_source = '* {\nmargin: 0 auto;\npadding: 10px;\n}';
var css_expected = '* { margin: 0 auto; padding: 10px; }';
results.expect(beautify.css.minify(css_source), css_expected);

var js_source = 'function f() {\n return 1;\n}';
var js_expected = 'function f() { return 1; }';
results.expect(beautify.js.minify(js_source), js_expected);

console.log(results.results_raw());
return results.get_exitcode();
}
Expand All @@ -42,6 +67,7 @@ function node_beautifier_index_tests(name, test_runner) {
if (require.main === module) {
var exit = 0;
exit = exit || test_names();
exit = exit || test_minify_output();
exit = exit || node_beautifier_index_tests('js-beautifier', run_javascript_tests);
exit = exit || node_beautifier_index_tests('css-beautifier', run_css_tests);
exit = exit || node_beautifier_index_tests('html-beautifier', run_html_tests);
Expand Down