nuǝɯ pǝɥsᴉꞁod mǝu

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

    Install

    npm i combjs

    DownloadsWeekly Downloads

    5

    Version

    2.0.2

    License

    none

    Last publish

    Collaborators

    • yakimchuk