2.0.2 • Published 10 years ago

combjs v2.0.2

Weekly downloads
11
License
-
Repository
-
Last release
10 years ago

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

2.0.2

10 years ago

2.0.1

10 years ago

1.0.53

10 years ago

1.0.52

10 years ago

1.0.51

10 years ago

1.0.5

10 years ago

1.0.49

10 years ago

1.0.48

10 years ago

1.0.47

10 years ago

1.0.46

10 years ago

1.0.45

10 years ago

1.0.44

10 years ago

1.0.43

10 years ago

1.0.42

10 years ago

1.0.41

10 years ago

1.0.4

10 years ago

1.0.39

10 years ago

1.0.38

10 years ago

1.0.37

10 years ago

1.0.36

10 years ago

1.0.35

10 years ago

1.0.34

10 years ago

1.0.33

10 years ago

1.0.32

10 years ago

1.0.31

10 years ago

1.0.30

10 years ago

1.0.29

10 years ago

1.0.28

10 years ago

1.0.27

10 years ago

1.0.25

10 years ago

1.0.24

10 years ago

1.0.23

10 years ago

1.0.22

10 years ago

1.0.21

10 years ago

1.0.2

10 years ago

1.0.1

10 years ago

1.0.0

10 years ago