less-plugin-sass2less
Version:
A plugin for less that converts SASS files into LESS. It comes with a cmd utility too.
88 lines (73 loc) • 2.53 kB
JavaScript
let cli = require('cli')
let fs = require('fs')
let mkdirp = require('mkdirp')
let sass2less = require('../lib')
let path = require('path')
const PATTERN_KEYS = Object.keys(path.parse(''))
// create instance
let converter = new sass2less()
let files = []
cli
.enable('version', 'help', 'glob')
.setApp(__dirname + '/../package.json')
.setUsage('sass2less [source] filename-pattern')
.parse({
cwd: ['c', 'Resolve path names from this directory', 'string', '.'],
rename: ['r', 'Rename input files rather than creating converted copies', 'boolean', false]
})
if (!cli.args.length) {
cli.getUsage(1)
} else {
cli.options.pattern = cli.args.length > 1 ? cli.args.pop() : null
if (cli.args.length) {
files = cli.args.reduce(function(files, pattern) {
return files.concat(cli.glob.sync(path.join(cli.options.cwd, pattern)))
}, [])
}
if (!files.length) return cli.info('No files to convert found. Aborted!')
files.forEach(function(file) {
fs.stat(file, function(err, stats) {
if (stats.isFile()) {
fs.readFile(file, 'utf8', function(err, contents) {
if (err) return cli.error(err)
let result = converter.process(contents, { fileInfo: { filename: 'anything.scss' } })
persist(file, result);
})
}
})
})
}
function parseFilePattern(pattern, fileName, cwd) {
pattern = pattern || ''
fileName = fileName || ''
let values = path.parse(fileName)
values.dir = path.relative(cwd, values.dir)
return PATTERN_KEYS.reduce(function(newFilePath, key) {
return newFilePath.replace('{' + key + '}', values[key]);
}, pattern)
}
function persist (file, result) {
if (cli.options.pattern) {
let fileName = path.resolve(cli.options.cwd, parseFilePattern(cli.options.pattern, file, cli.options.cwd))
if (cli.options.rename === true) {
fs.rename(file, fileName, function(err) {
if (err) return cli.error(err)
fs.writeFile(fileName, result, function(err) {
if (err) return cli.error(err)
cli.ok(file + ' successfully converted and renamed')
})
})
} else {
mkdirp(path.dirname(fileName), function(err) {
if (err) return cli.error(err)
fs.writeFile(fileName, result, function(err) {
if (err) return cli.error(err)
cli.ok(file + ' successfully converted')
})
})
}
} else {
console.log(result)
}
}