mirror of https://github.com/IoTcat/Ushio-js.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
3.9 KiB
148 lines
3.9 KiB
#!/usr/bin/env node |
|
|
|
/** |
|
* UglifyCSS |
|
* Port of YUI CSS Compressor to NodeJS |
|
* Author: Franck Marcia - https://github.com/fmarcia |
|
* MIT licenced |
|
*/ |
|
|
|
/** |
|
* cssmin.js |
|
* Author: Stoyan Stefanov - http://phpied.com/ |
|
* This is a JavaScript port of the CSS minification tool |
|
* distributed with YUICompressor, itself a port |
|
* of the cssmin utility by Isaac Schlueter - http://foohack.com/ |
|
* Permission is hereby granted to use the JavaScript version under the same |
|
* conditions as the YUICompressor (original YUICompressor note below). |
|
*/ |
|
|
|
/** |
|
* YUI Compressor |
|
* http://developer.yahoo.com/yui/compressor/ |
|
* Author: Julien Lecomte - http://www.julienlecomte.net/ |
|
* Copyright (c) 2011 Yahoo! Inc. All rights reserved. |
|
* The copyrights embodied in the content of this file are licensed |
|
* by Yahoo! Inc. under the BSD (revised) open source license. |
|
*/ |
|
|
|
const { defaultOptions, processString, processFiles } = require('./') |
|
const { writeFileSync } = require('fs') |
|
|
|
const UGLIFYCSS_VERSION = '0.0.29' |
|
|
|
// Info namespace |
|
const info = {} |
|
|
|
// Print usage |
|
info.help = _ => { |
|
console.log(` |
|
Usage: uglifycss [options] file1.css [file2.css [...]] > output |
|
options: |
|
--max-line-len n add a newline every n characters |
|
--expand-vars expand variables |
|
--ugly-comments remove newlines within preserved comments |
|
--cute-comments preserve newlines within and around preserved comments |
|
--convert-urls d convert relative urls using the d directory as location target |
|
--debug print full error stack on error |
|
--output f put the result in f file |
|
--help show this help |
|
--version display version number` |
|
.replace(/^\s+/gm, '') |
|
) |
|
} |
|
|
|
// Print version |
|
info.version = _ => { |
|
console.log(`uglifycss ${UGLIFYCSS_VERSION}`) |
|
} |
|
|
|
// Transform strings like "the-parameter" to "theParameter" |
|
const par2var = param => |
|
param.replace( |
|
/-(.)/g, |
|
(_, ch) => ch === '-' ? '' : ch.toUpperCase() |
|
) |
|
|
|
|
|
// Parse parameters from command line |
|
const parseArguments = argv => { |
|
|
|
const params = { |
|
options: defaultOptions, |
|
files: [] |
|
} |
|
|
|
const len = argv.length |
|
|
|
for (let i = 2; i < len; i += 1) { |
|
|
|
// get "propertyName" from "--argument-name" |
|
let v = par2var(argv[i]) |
|
|
|
// boolean parameters |
|
if (typeof params.options[v] === 'boolean') { |
|
params.options[v] = true |
|
|
|
// string parameter |
|
} else if (typeof params.options[v] === 'string') { |
|
params.options[v] = argv[i + 1] || '' |
|
i += 1 |
|
|
|
// integer parameter |
|
} else if (typeof params.options[v] !== 'undefined') { |
|
params.options[v] = parseInt(argv[i + 1], 10) |
|
i += 1 |
|
|
|
// help |
|
} else if (argv[i] === '--help') { |
|
return 'help' |
|
|
|
// version |
|
} else if (argv[i] === '--version') { |
|
return 'version' |
|
|
|
// file |
|
} else { |
|
params.files.push(argv[i]) |
|
} |
|
} |
|
|
|
return params |
|
} |
|
|
|
// Entry |
|
{ |
|
// parameters |
|
const params = parseArguments(process.argv) |
|
|
|
// info |
|
if (params === 'help' || params === 'version') { |
|
return info[params]() |
|
} |
|
|
|
// files |
|
if (params.files.length) { |
|
const ugly = processFiles(params.files, params.options) |
|
if (params.options.output) { |
|
return writeFileSync(params.options.output, ugly) |
|
} else { |
|
return console.log(ugly) |
|
} |
|
} |
|
|
|
// no file, no stdin: help |
|
if (process.stdin.isTTY) { |
|
return info.help() |
|
} |
|
|
|
// stdin |
|
if (params.options.convertUrls) { |
|
return console.error('uglifycss: stdin input and --convert-urls are not compatible') |
|
} |
|
let content = '' |
|
process.stdin.on('data', part => content += part) |
|
process.stdin.on('end', _ => |
|
console.log(processString(content, params.options)) |
|
) |
|
}
|
|
|