combjs v2.0.2
CombJS
Tool for combing JavaScript code.
Installation
$ npm install combjs --save
What can that module?
This module can format this code (example):
var Stream = require('stream').Stream
, es = exports
, through = require('through')
, from = require('from')
, duplex = require('duplexer')
, map = require('map-stream')
, pause = require('pause-stream')
, split = require('split')
, pipeline = require('stream-combiner')
, immediately = global.setImmediate || process.nextTick;
es.Stream = Stream //re-export Stream from core
es.through = through
es.from = from
es.duplex = duplex
es.map = map
es.pause = pause
es.split = split
es.pipeline = es.connect = es.pipe = pipeline
// merge / concat
//
// combine multiple streams into a single stream.
// will emit end only once
es.concat = //actually this should be called concat
es.merge = function (/*streams...*/) {
var toMerge = [].slice.call(arguments)
var stream = new Stream()
stream.setMaxListeners(0) // allow adding more than 11 streams
var endCount = 0
stream.writable = stream.readable = true
toMerge.forEach(function (e) {
e.pipe(stream, {end: false})
var ended = false
e.on('end', function () {
ended = true
endCount ++
})
})
stream.write = function (data) {
this.emit('data', data)
}
stream.destroy = function () {
toMerge.forEach(function (e) {
})
}
return stream
}
into:
var Stream = require('stream').Stream,
es = exports,
through = require('through'),
from = require('from'),
duplex = require('duplexer'),
map = require('map-stream'),
pause = require('pause-stream'),
split = require('split'),
pipeline = require('stream-combiner'),
immediately = global.setImmediate || process.nextTick;
es.Stream = Stream;
//re-export Stream from core
es.through = through;
es.from = from;
es.duplex = duplex;
es.map = map;
es.pause = pause;
es.split = split;
es.pipeline = es.connect = es.pipe = pipeline;
// merge / concat
//
// combine multiple streams into a single stream.
// will emit end only once
es.concat = //actually this should be called concat
es.merge = function (/*streams...*/) {
var toMerge = [].slice.call(arguments);
var stream = new Stream();
stream.setMaxListeners(0);
// allow adding more than 11 streams
var endCount = 0;
stream.writable = stream.readable = true;
toMerge.forEach(function (e) {
e.pipe(stream , {
end: false
});
var ended = false;
e.on('end' , function () {
ended = true;
endCount++;
});
});
stream.write = function (data) {
this.emit('data' , data);
};
stream.destroy = function () {
toMerge.forEach(function (e) {});
};
return stream;
};
##API
Module will provide the object with method "comb" for combing of a JavaScript code:
combjs.comb(source String, rules Object, progressCallback Function);
Example:
// mkdir example && cd example && npm init && npm install combjs --save
var combjs = require('combjs'),
source = 'var a=1,b=2;',
rules = {
emptylinesAfterCloseBraces: true,
emptylinesAfterMultilineExpressions: true,
emptylinesAfterOpenBraces: true,
emptylinesAfterVariableDefinitions: true,
emptylinesBeforeCloseBraces: true,
emptylinesBeforeComments: true,
emptylinesBeforeMultilineExpressions: true,
emptylinesBeforeVariableDefinitions: true,
indent: 4, // You can define any count of spaces
keywordsBraces: 'inline', // You can define value 'multiline' if needed
linebreaksAfterCloseBraces: true,
linebreaksAfterColon: true,
linebreaksAfterComma: true,
linebreaksAfterMultilineComment: true,
linebreaksAfterOpenBraces: true,
linebreaksAfterSemicolon: true,
linebreaksBeforeCloseBraces: true,
spacesAfterColon: true,
spacesAfterComma: true,
spacesAroundBinaryExpressions: [
'+',
'-',
'/',
'*',
'%',
'<',
'>',
'<=',
'>=',
'==',
'!=',
'===',
'!==',
'<<',
'>>',
'>>>',
'&',
'|',
'^',
'&&',
'||',
'=',
'*=',
'/=',
'%=',
'+=',
'-=',
'<<=',
'>>=',
'>>>=',
'&=',
'^=',
'|='
],
spacesBeforeComma: true,
spacesNearKeywords: true,
stringQuotes: 'single' // You can define value 'double' if needed
};
var combed = combjs.comb(source, rules, function (currentProgress, total) {
console.log('current: ', currentProgress, 'remain: ', total - currentProgress);
});
console.log(combed);
// some stuff with formatted code inside variable "combed"...
You can see full example here: https://github.com/yakimchuk/combjs/blob/master/example-formatter.js
Current available configurations
var config = {
emptylinesAfterCloseBraces: true,
emptylinesAfterMultilineExpressions: true,
emptylinesAfterOpenBraces: true,
emptylinesAfterVariableDefinitions: true,
emptylinesBeforeCloseBraces: true,
emptylinesBeforeComments: true,
emptylinesBeforeMultilineExpressions: true,
emptylinesBeforeVariableDefinitions: true,
indent: 4, // You can define any count of spaces
keywordsBraces: 'inline', // You can define value 'multiline' if needed
linebreaksAfterCloseBraces: true,
linebreaksAfterColon: true,
linebreaksAfterComma: true,
linebreaksAfterMultilineComment: true,
linebreaksAfterOpenBraces: true,
linebreaksAfterSemicolon: true,
linebreaksBeforeCloseBraces: true,
spacesAfterColon: true,
spacesAfterComma: true,
spacesAroundBinaryExpressions: [
'+',
'-',
'/',
'*',
'%',
'<',
'>',
'<=',
'>=',
'==',
'!=',
'===',
'!==',
'<<',
'>>',
'>>>',
'&',
'|',
'^',
'&&',
'||',
'=',
'*=',
'/=',
'%=',
'+=',
'-=',
'<<=',
'>>=',
'>>>=',
'&=',
'^=',
'|='
],
spacesBeforeComma: true,
spacesNearKeywords: true,
stringQuotes: 'single' // You can define value 'double' if needed
};
Contribution
I accept any of your changes. Modify the code, and send pull requests to me :)
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago