combjs

2.0.2 • Public • Published

CombJS

Tool for combing JavaScript code.

NPM Version NPM Downloads

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 :)

Package Sidebar

Install

npm i combjs

Weekly Downloads

2

Version

2.0.2

License

none

Last publish

Collaborators

  • yakimchuk