Skip to content

Commit

Permalink
Created middleware
Browse files Browse the repository at this point in the history
  • Loading branch information
adambullmer committed Mar 27, 2016
1 parent 623c76a commit 8558ad0
Show file tree
Hide file tree
Showing 4 changed files with 245 additions and 0 deletions.
81 changes: 81 additions & 0 deletions .jscsrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
{
"disallowKeywords": ["with"],
"disallowKeywordsOnNewLine": ["else"],
"disallowMixedSpacesAndTabs": true,
"disallowNewlineBeforeBlockStatements": true,
"disallowQuotedKeysInObjects": true,
"disallowTrailingWhitespace": true,

"requireCapitalizedConstructors": true,
"requireCurlyBraces": [
"if",
"else",
"for",
"while",
"do",
"try",
"catch",
"function",
"switch"
],
"requireMultipleVarDecl": true,
"requirePaddingNewLineAfterVariableDeclaration": true,
"requirePaddingNewLinesAfterBlocks": true,
"requirePaddingNewlinesBeforeKeywords": [
"if",
"for",
"while",
"do",
"switch",
"return",
"try",
"function"
],
"requireSpaceBeforeKeywords": [
"else",
"catch",
"while"
],
"requireSpaceAfterKeywords": [
"if",
"else",
"for",
"while",
"do",
"switch",
"case",
"return",
"try",
"catch",
"typeof",
"function"
],
"requireSpaceAfterLineComment": true,
"requireSpaceAfterBinaryOperators": true,
"requireSpaceBeforeBinaryOperators": true,
"requireOperatorBeforeLineBreak": [
"?",
"=",
"+",
"-",
"/",
"*",
"==",
"===",
"!=",
"!==",
">",
">=",
"<",
"<="
],

"requireSpaceBeforeBlockStatements": true,
"requireSpaceBeforeObjectValues": true,
"requireSpacesInFunction": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
},
"validateIndentation": 4,
"validateLineBreaks": "LF"
}
56 changes: 56 additions & 0 deletions .jshintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
{
"bitwise" : false,
"curly" : true,
"eqeqeq" : true,
"es3" : false,
"forin" : true,
"iterator" : true,
"latedef" : false,
"maxerr" : 100,
"noarg" : true,
"nonew" : true,
"regexp" : true,
"smarttabs" : true,
"shadow" : true,
"singleGroups" : true,
"strict" : false,
"undef" : true,
"unused" : true,
"varstmt" : false,

"asi" : false,
"boss" : false,
"debug" : false,
"eqnull" : false,
"esnext" : true,
"evil" : false,
"expr" : false,
"funcscope" : false,
"globalstrict" : false,
"lastsemic" : false,
"loopfunc" : false,
"onecase" : false,
"plusplus" : false,
"proto" : false,
"scripturl" : false,
"supernew" : false,
"validthis" : false,

"laxbreak" : true,
"laxcomma" : true,
"sub" : true,
"camelcase" : false,
"indent" : false,
"immed" : false,
"maxlen" : false,
"multistr" : false,
"newcap" : false,
"noempty" : false,
"quotmark" : false,

"browser" : false,
"devel" : false,
"jasmine" : false,
"jquery" : false,
"node" : true
}
74 changes: 74 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
var broccoli = require('broccoli'),
Watcher = require('broccoli-sane-watcher'),
middleware = require('broccoli/lib/middleware'),
HashTree = require('broccoli-live-reload/lib/hash-tree'),
Sync = require('tree-sync'),
path = require('path'),
LrServer = require('tiny-lr').Server,
tree = broccoli.loadBrocfile(),
builder = new broccoli.Builder(tree),
watcher = new Watcher(builder, { verbose: true });

function BroccoliMiddleware (config) {
var destDir = path.resolve(config.destDir || 'dist'),
port = config.port || 35729;

this.lrServer = new LrServer();
this.lrServer.listen(port, this.onError.bind(this));

watcher.then(this.syncChanges.bind(this, destDir));
watcher.on('change', this.onChange.bind(this, destDir));

return middleware(watcher);
}

BroccoliMiddleware.prototype.syncChanges = function (destDir, results) {
return new Sync(results.directory, destDir).sync();
};

BroccoliMiddleware.prototype.onError = function (error) {
if (error) {
console.error(error.stack || error);
}
};

BroccoliMiddleware.prototype.computeHashes = function (destDir, tree, err, nodes) {
if (err) {
return console.log(err);
}

if (!this.tree) {
this.tree = tree;

return;
}

var diffs = this.tree.computeDiff(nodes).map(function ( file ) {
return path.join(destDir, file);
});

if (!diffs.length) {
this.tree = tree;

return;
}

this.lrServer.changed({
body: {
files: diffs
}
});

this.tree = tree;
};

BroccoliMiddleware.prototype.onChange = function (destDir, result) {
var tree = new HashTree(result.directory, {
path: destDir
});

this.syncChanges.apply(this, arguments);
tree.computeHashes(this.computeHashes.bind(this, destDir, tree));
};

module.exports = BroccoliMiddleware;
34 changes: 34 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "broccoli-livereload-middleware",
"version": "0.1.0",
"description": "middleware to build broccoli apps with a livereload server",
"main": "index.js",
"scripts": {
"test": "jshint index.js && jscs index.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/adambullmer/broccoli-livereload-middleware.git"
},
"keywords": [
"broccoli",
"middleware",
"livereload"
],
"author": "Adam Bullmer <psycodrumfreak@gmail.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/adambullmer/broccoli-livereload-middleware/issues"
},
"homepage": "https://github.com/adambullmer/broccoli-livereload-middleware#readme",
"dependencies": {
"broccoli": "^0.16.9",
"broccoli-sane-watcher": "^1.1.4",
"tiny-lr": "^0.2.1",
"tree-sync": "^1.1.0"
},
"devDependencies": {
"jscs": "^2.11.0",
"jshint": "^2.9.1"
}
}

0 comments on commit 8558ad0

Please sign in to comment.