UNPKG

minimalist-notation

Version:
76 lines (69 loc) 1.94 kB
const Path = require('path'); const through = require('through2'); const parserProvider = require('../mnParserProvider'); const compileProvider = require('../mnCompileProvider'); const isObject = require('mn-utils/isObject'); const isString = require('mn-utils/isString'); const isArray = require('mn-utils/isArray'); const forEachAsync = require('mn-utils/async/forEach'); const writeFile = require('mn-utils/node/file/promisify/write'); function normalize(v) { return v ? (isArray(v) ? (v.length ? v : null) : [v]) : null; } function gulpMN(outputs, options) { if (isString(outputs) || isArray(outputs)) { options || (options = {}); options.output = outputs; } else { if (!options && isObject(outputs)) options = outputs; } const settings = { ...defaultSettings, ...options, }; const parse = parserProvider(settings.attrs); const compile = compileProvider(settings); outputs = normalize(settings.output); let data = {}; return through.obj(function(file, enc, cb) { const { path, } = file; if ( file.isNull() || file.isStream() || Path.basename(path).indexOf('_') === 0 ) { return cb(null, file); } parse(data, file.contents.toString()); cb(null, file); }, function(cb) { const content = compile(data); data = {}; forEachAsync(outputs, (outputFileName) => { return writeFile(outputFileName, content); }).then(cb); }); } const defaultSettings = gulpMN.defaultSettings = { output: './mn.styles.css', selectorPrefix: '', attrs: { 'className': 'class', 'class': 'class', 'm': 'm', }, presets: [ require('../presets/prefixes'), require('../presets/styles'), require('../presets/medias'), // require('../presets/states'), require('../presets/synonyms'), // require('../presets/main'), ], onError(e) { console.error(e); }, }; module.exports = gulpMN;