Skip to content
This repository has been archived by the owner on Feb 9, 2023. It is now read-only.

Commit

Permalink
Merge pull request #22 from hellyeahllc/update-iface-2.0
Browse files Browse the repository at this point in the history
Update interface to 2.0
  • Loading branch information
paulmillr committed Jan 17, 2016
2 parents c5e0d65 + 745eb2b commit f90cf0e
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 63 deletions.
85 changes: 85 additions & 0 deletions .eslintrc.json
@@ -0,0 +1,85 @@
{
"env": {
"node": true,
"es6": true
},
"rules": {
"block-spacing": [2, "always"],
"brace-style": [2, "1tbs", {"allowSingleLine": true}],
"comma-style": [2, "last"],
"func-style": [2, "expression"],
"semi": [2, "always"],
"quotes": [2, "single", "avoid-escape"],
"indent": [2, 2, {"SwitchCase": 1}],
"dot-location": [2, "property"],
"camelcase": [1, {"properties": "always"}],
"comma-spacing": [2, {"before": false, "after": true}],
"comma-dangle": [2, "never"],
"semi-spacing": [2, {"before": false, "after": true}],
"curly": [2, "multi-line", "consistent"],
"no-debugger": 2,
"no-dupe-args": 2,
"no-dupe-keys": 2,
"no-duplicate-case": 2,
"no-empty": 2,
"no-ex-assign": 2,
"no-extra-semi": 2,
"no-func-assign": 2,
"no-irregular-whitespace": 2,
"no-sparse-arrays": 2,
"no-unexpected-multiline": 2,
"no-unreachable": 2,
"no-unused-vars": [2, {"varsIgnorePattern": "ignored"}],
"valid-typeof": 2,
"eqeqeq": [2, "allow-null"],
"no-array-constructor": 2,
"no-caller": 2,
"no-eval": 2,
"no-extend-native": 2,
"no-extra-bind": 2,
"no-fallthrough": 2,
"no-labels": 2,
"no-iterator": 2,
"no-magic-numbers": [1, {"ignore": [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8]}],
"no-multi-spaces": 2,
"no-native-reassign": 2,
"no-new-func": 2,
"no-new-wrappers": 2,
"no-new": 2,
"no-octal-escape": 2,
"no-octal": 2,
"no-redeclare": 2,
"no-self-compare": 2,
"no-sequences": 2,
"no-unused-expressions": 2,
"no-useless-call": 2,
"no-warning-comments": [1, {"terms": ["todo", "fixme", "xxx"], "location": "start"}],
"no-with": 2,
"new-parens": 2,
"wrap-iife": [2, "inside"],
"no-catch-shadow": 2,
"no-delete-var": 2,
"no-shadow-restricted-names": 2,
"no-undef": 2,
"callback-return": 2,
"handle-callback-err": 2,
"no-path-concat": 2,
"array-bracket-spacing": 2,
"eol-last": 2,
"no-multiple-empty-lines": [2, {"max": 2}],
"no-spaced-func": 2,
"no-trailing-spaces": 2,
"no-unneeded-ternary": 2,
"space-before-keywords": 2,
"space-after-keywords": 2,
"space-before-blocks": 2,
"space-before-function-paren": [2, "never"],
"space-in-parens": 2,
"space-return-throw-case": 2,
"space-unary-ops": [2, {"words": true, "nonwords": false}],
"arrow-spacing": [2, {"before": true, "after": true}],
"prefer-arrow-callback": 2,
"prefer-template": 0,
"prefer-const": 2
}
}
96 changes: 50 additions & 46 deletions index.js
@@ -1,64 +1,68 @@
var coffeescript = require('coffee-script');
'use strict';

var isLiterate = function(path) {
return /\.(litcoffee|coffee\.md)$/.test(path);
};
const coffeescript = require('coffee-script');

const isLiterate = path => /\.(litcoffee|coffee\.md)$/.test(path);

var normalizeChecker = function(item) {
const normalizeChecker = item => {
switch (toString.call(item)) {
case '[object RegExp]':
return function(string) {
return item.test(string);
};
return string => item.test(string);
case '[object Function]':
return item;
default:
return function() {
return false;
};
return () => false;
}
};

function CoffeeScriptCompiler(config) {
if (config == null) config = {};
var plugin = config.plugins && config.plugins.coffeescript;
var conv = config.conventions && config.conventions.vendor;
this.bare = plugin && plugin.bare;
this.sourceMaps = !!config.sourceMaps;
this.isVendor = normalizeChecker(conv);
class CoffeeScriptCompiler {
constructor(config) {
if (config == null) config = {};
const plugin = config.plugins && config.plugins.coffeescript || {};
const conv = config.conventions && config.conventions.vendor;
this.bare = plugin.bare;
this.sourceMaps = !!config.sourceMaps;
this.isVendor = normalizeChecker(conv);
}

compile(params) {
const data = params.data;
const path = params.path;

const options = {
bare: this.bare == null ? !this.isVendor(path) : this.bare,
sourceMap: this.sourceMaps,
sourceFiles: [path],
literate: isLiterate(path)
};

let compiled;
try {
compiled = coffeescript.compile(data, options);
} catch (err) {
const loc = err.location;
let error;
if (loc) {
error = loc.first_line + ':' + loc.first_column + ' ' + (err.toString());
} else {
error = err.toString();
}
console.log('rejecting for', error);
return Promise.reject(error);
}
const result = (options.sourceMap && typeof compiled === 'object') ? {
data: compiled.js,
map: compiled.v3SourceMap
} : {
data: compiled
};
return Promise.resolve(result);
}
}

CoffeeScriptCompiler.prototype.brunchPlugin = true;
CoffeeScriptCompiler.prototype.type = 'javascript';
CoffeeScriptCompiler.prototype.extension = 'coffee';
CoffeeScriptCompiler.prototype.pattern = /\.(coffee(\.md)?|litcoffee)$/;

CoffeeScriptCompiler.prototype.compile = function(data, path, callback) {
var options = {
bare: this.bare == null ? !this.isVendor(path) : this.bare,
sourceMap: this.sourceMaps,
sourceFiles: [path],
literate: isLiterate(path)
};
var compiled;
try {
compiled = coffeescript.compile(data, options);
} catch (err) {
var loc = err.location, error;
if (loc) {
error = loc.first_line + ":" + loc.first_column + " " + (err.toString());
} else {
error = err.toString();
}
return callback(error);
}
var result = (options.sourceMap && typeof compiled === 'object') ? {
data: compiled.js,
map: compiled.v3SourceMap
} : {
data: compiled
};
return callback(null, result);
};

module.exports = CoffeeScriptCompiler;
5 changes: 3 additions & 2 deletions package.json
Expand Up @@ -9,13 +9,14 @@
"url": "git@github.com:brunch/coffee-script-brunch.git"
},
"scripts": {
"test": "node_modules/.bin/mocha"
"test": "node_modules/.bin/eslint index.js && node_modules/.bin/mocha"
},
"dependencies": {
"coffee-script": "~1.10.0"
},
"devDependencies": {
"mocha": "1.11.0",
"chai": "1.7.0"
"chai": "1.7.0",
"eslint": "^1.10.3"
}
}
25 changes: 10 additions & 15 deletions test.js
Expand Up @@ -20,23 +20,21 @@ describe('Plugin', function() {
var content = 'a = 1';
var expected = 'var a;\n\na = 1;\n';

plugin.compile(content, 'file.coffee', function(error, data) {
expect(error).not.to.be.ok;
plugin.compile({data: content, path: 'file.coffee'}).then(data => {
expect(data.data).to.equal(expected);
done();
});
}, error => expect(error).not.to.be.ok);
});

it('should compile literal source and produce valid result', function(done)
{
var content = 'I am a literal string\n\n a = 1';
var expected = 'var a;\n\na = 1;\n';

plugin.compile(content, 'file.litcoffee', function(error, data) {
expect(error).not.to.be.ok;
plugin.compile({data: content, path: 'file.litcoffee'}).then(data => {
expect(data.data).to.equal(expected);
done();
});
}, error => expect(error).not.to.be.ok);
});

it('should produce source maps', function(done) {
Expand All @@ -45,12 +43,11 @@ describe('Plugin', function() {
var content = 'a = 1';
var expected = 'var a;\n\na = 1;\n';

plugin.compile(content, 'file.coffee', function(error, data) {
expect(error).not.to.be.ok;
plugin.compile({data: content, path: 'file.coffee'}).then(data => {
expect(data.data).to.equal(expected);
expect(data.map).to.be.a('string');
done();
});
}, error => expect(error).not.to.be.ok);
});

it('should support explicit bare setting', function(done) {
Expand All @@ -59,19 +56,17 @@ describe('Plugin', function() {
var content = 'a = 1';
var expected = '(function() {\n var a;\n\n a = 1;\n\n}).call(this);\n';

plugin.compile(content, 'file.coffee', function(error, data) {
expect(error).not.to.be.ok;
plugin.compile({data: content, path: 'file.coffee'}).then(data => {
expect(data.data).to.equal(expected);

plugin = new Plugin({plugins:{coffeescript:{bare:true}}});
content = 'a = 1';
expected = 'var a;\n\na = 1;\n';

plugin.compile(content, 'file.coffee', function(error, data) {
expect(error).not.to.be.ok;
plugin.compile({data: content, path: 'file.coffee'}).then(data => {
expect(data.data).to.equal(expected);
done();
});
});
}, error => expect(error).not.to.be.ok);
}, error => expect(error).not.to.be.ok);
});
});

0 comments on commit f90cf0e

Please sign in to comment.