cortex-handlebars-compiler
Advanced tools
Comparing version 0.1.3 to 0.2.0
72
index.js
@@ -8,2 +8,4 @@ 'use strict'; | ||
var node_path = require('path'); | ||
var semver = require('semver'); | ||
var pkg = require('neuron-pkg'); | ||
@@ -58,3 +60,3 @@ function compiler (options) { | ||
'facade({', | ||
"mod:'" + title + "'", | ||
'mod:"' + this._facade_mod(title) + '"', | ||
'});', | ||
@@ -68,2 +70,70 @@ '</script>' | ||
// Suppose current package: | ||
// name: foo | ||
// version: 0.2.0 | ||
// Then, | ||
// 1. | ||
// facade(foo) -> facade(foo@0.2.0) | ||
// 2. | ||
// facade() -> facade(foo@0.2.0) | ||
// 3. | ||
// facade(foo/abc) -> facade(foo@0.2.0/abc) | ||
// 4. | ||
// facade(foo@1.2.3) -> check if 1.2.3 exists in current shrinkwrap, otherwise -> throw | ||
Compiler.prototype._facade_mod = function(title) { | ||
var name = this.pkg.name; | ||
var version = this.pkg.version; | ||
// facade() -> current package | ||
if (!title || Object(title) === title) { | ||
return pkg.format({ | ||
name: name, | ||
version: version | ||
}); | ||
} | ||
var obj = pkg(title); | ||
// if the facade uses the current package, force the version | ||
if (obj.name === name) { | ||
obj.version = version; | ||
} | ||
if (obj.version) { | ||
return pkg.format(obj); | ||
} | ||
// 'a' -> 'a@latest' | ||
obj.range = obj.range || 'latest'; | ||
var is_range_valid = semver.validRange(obj.range) || obj.range === 'latest'; | ||
var facade_pkg = pkg.format({ | ||
name: obj.name, | ||
range: obj.range | ||
}); | ||
if (!is_range_valid) { | ||
throw new Error( | ||
'Facade: invalid version "' + facade_pkg + '", make sure you have install it.\n' + | ||
'Or you might as well specify the explicit version of "' + facade_name + '".' | ||
); | ||
} | ||
// parse ranges | ||
obj.version = this._parse_range(obj.name, obj.range); | ||
if (!obj.version) { | ||
throw new Error('Facade: invalid range "' + facade_pkg + '", make sure your have `cortex install --save` it.'); | ||
} | ||
return pkg.format(obj); | ||
}; | ||
Compiler.prototype._parse_range = function(name, range) { | ||
var ranges = this.neuron_hashmaps.ranges; | ||
return ranges[name] && ranges[name][range]; | ||
}; | ||
Compiler.prototype._neuron_framework = function() { | ||
@@ -70,0 +140,0 @@ return this._output_engines() + this._neuron_config(); |
{ | ||
"name": "cortex-handlebars-compiler", | ||
"version": "0.1.3", | ||
"version": "0.2.0", | ||
"description": "Handlebar helpers for cortex template.", | ||
@@ -36,4 +36,6 @@ "main": "index.js", | ||
"shrinked": "^0.1.2", | ||
"neuron-hashmaps": "^1.0.0" | ||
"neuron-hashmaps": "^1.0.0", | ||
"semver": "^2.3.0", | ||
"neuron-pkg": "^0.1.0" | ||
} | ||
} |
@@ -9,25 +9,55 @@ 'use strict'; | ||
var template = '<html><head></head><body>{{{facade "cortex-hybrid-sample"}}}</body></html>'; | ||
var fixtures = node_path.join(__dirname, 'fixtures'); | ||
var cortex_json = node_path.join(fixtures, 'cortex.json'); | ||
var shrinkwrap_json = node_path.join(fixtures, 'cortex-shrinkwrap.json'); | ||
var expected_html = node_path.join(fixtures, 'expected.html'); | ||
var pkg = jf.readFileSync(cortex_json); | ||
var shrinkwrap = jf.readFileSync(shrinkwrap_json); | ||
var expected = fs.readFileSync(expected_html).toString(); | ||
var c = compiler({ | ||
pkg: pkg, | ||
shrinkWrap: shrinkwrap, | ||
root: '../../../', | ||
ext: '.min.js' | ||
}); | ||
describe("compiler()", function(){ | ||
[ | ||
{ | ||
name: 'normal' | ||
}, | ||
{ | ||
name: 'single' | ||
}, | ||
{ | ||
name: 'more' | ||
}, | ||
{ | ||
name: 'range-not-found', | ||
throw: true | ||
} | ||
].forEach(function (c) { | ||
var template_file = node_path.join(fixtures, c.name + '.template'); | ||
var template = fs.readFileSync(template_file).toString(); | ||
it(template, function(){ | ||
var cp = compiler({ | ||
pkg: pkg, | ||
shrinkWrap: shrinkwrap, | ||
root: '../../../', | ||
ext: '.min.js' | ||
}); | ||
describe("compiler()", function(){ | ||
it(".compile(template)()", function(){ | ||
var fn = c.compile(template); | ||
expect(fn()).to.equal(expected); | ||
var compiled; | ||
var error; | ||
try { | ||
compiled = cp.compile(template)(); | ||
} catch(e) { | ||
error = e; | ||
} | ||
if (c.throw) { | ||
expect(error).not.to.equal(); | ||
return; | ||
} | ||
var expected_file = node_path.join(fixtures, c.name + '.expected.html'); | ||
var expected = fs.readFileSync(expected_file).toString(); | ||
expect(compiled).to.equal(expected); | ||
}); | ||
}); | ||
}); |
11650
17
237
5
+ Addedneuron-pkg@^0.1.0
+ Addedsemver@^2.3.0
+ Addedneuron-pkg@0.1.5(transitive)
+ Addedsemver@2.3.25.7.2(transitive)