Skip to content

Commit

Permalink
Merge pull request #51 from riot/cjs-require
Browse files Browse the repository at this point in the history
Fixing require for CJS
  • Loading branch information
aMarCruz committed Feb 3, 2016
2 parents bd22af1 + fe9f7d6 commit fc48412
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 48 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
@@ -1,5 +1,9 @@
# Compiler Changes

### v2.3.23
- Fix [riot#1325](https://github.com/riot/riot/issues/1325) : Gulp + Browserify + Babelify + type="es6" error.
- The keyword `defer` in `<script src=file>` avoids that the compiler loads the file, preserving the tag - Requested by [riot#1492](https://github.com/riot/riot/issues/1492) : Stop script tags from being evaluated with serverside `riot.render`.

### v2.3.22
- Fix [riot#1511](https://github.com/riot/riot/issues/1511) : Escape Quotes - They may be some issues to fix.
- Regression of logic to parse style and script tags, due to loss of performance and other issues.
Expand Down
4 changes: 2 additions & 2 deletions dist/es6.compiler.js
@@ -1,6 +1,6 @@
/**
* Compiler for riot custom tags
* @version v2.3.22
* @version WIP
*/

import { brackets } from 'riot-tmpl'
Expand Down Expand Up @@ -638,7 +638,7 @@ function compile (src, opts, url) {
return src
}

var version = 'v2.3.22'
var version = 'WIP'

export default {
compile,
Expand Down
4 changes: 2 additions & 2 deletions dist/riot.compiler.js
Expand Up @@ -92,7 +92,7 @@ riot.parsers = parsers

/**
* Compiler for riot custom tags
* @version v2.3.22
* @version WIP
*/
var compile = (function () {

Expand Down Expand Up @@ -641,7 +641,7 @@ var compile = (function () {
html: compileHTML,
css: compileCSS,
js: compileJS,
version: 'v2.3.22'
version: 'WIP'
}
return compile

Expand Down
85 changes: 45 additions & 40 deletions lib/parsers.js
Expand Up @@ -14,34 +14,6 @@ var _mods = {
javascript: _none
}

/**
* Returns the module name for the given parser's name.
*
* @param {string} name - one of the `html`, `css`, or `js` parsers.
* @returns {string} The module name for using with `require()`
* @static
*/
function _modname (name) {
switch (name) {
case 'es6':
return 'babel'
case 'babel':
return 'babel-core'
case 'javascript':
return 'none'
case 'coffee':
case 'coffeescript':
return 'coffee-script'
case 'scss':
case 'sass':
return 'node-sass'
case 'typescript':
return 'typescript-simple'
default:
return name
}
}

/**
* Loads a parser instance via `require`, without generating error.
*
Expand All @@ -50,19 +22,54 @@ function _modname (name) {
* @returns {function} parser function, or null if error
*/
function _try (name, req) {
var mod

function fn (r) {
try { return require(r) } catch (_) {/**/}
return null
try {
switch (name) {
// html
case 'jade':
mod = require('jade')
break
// css
case 'sass':
case 'scss':
mod = require('node-sass')
break
case 'less':
mod = require('less')
break
case 'stylus':
mod = require('stylus')
_mods.nib = null
_mods.nib = require('nib')
break
// js
case 'es6': // istanbul ignore next
mod = require('babel') || require('babel-core')
break
case 'babel':
mod = require('babel-core')
break
case 'coffee':
case 'coffeescript':
mod = require('coffee-script')
break
case 'livescript':
mod = require('livescript')
break
case 'typescript':
mod = require('typescript-simple')
break
default:
mod = require(req || name)
break
}
} catch (_) {
/**/
}
_mods[name] = mod || (mod = null)

var p = _mods[name] = fn(req || _modname(name))

// istanbul ignore next: babel-core v5.8.x is not loaded by CI
if (!p && name === 'es6') {
p = _mods[name] = fn('babel-core')
}
return p
return mod
}

/**
Expand Down Expand Up @@ -197,10 +204,8 @@ module.exports = {
},
none: _none, javascript: _none
},
_modname: _modname,
_req: _req
}

exports = module.exports
exports.js.coffeescript = exports.js.coffee // 4 the nostalgics

2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "riot-compiler",
"version": "2.3.22",
"version": "2.3.23",
"description": "Compiler for riot .tag files",
"main": "lib/compiler.js",
"jsnext:main": "dist/es6.compiler.js",
Expand Down
26 changes: 26 additions & 0 deletions test/specs/helpers.js
Expand Up @@ -6,5 +6,31 @@ module.exports = {
.replace(/\n\n+/g, '\n')
.replace(/^\/\/src:.*\n/, '')
.trim()
},
/**
* Returns the module name for the given parser's name.
*
* @param {string} name - one of the `html`, `css`, or `js` parsers.
* @returns {string} The module name for using with `require()`
*/
requireName: function (name) {
switch (name) {
case 'es6':
return 'babel'
case 'babel':
return 'babel-core'
case 'javascript':
return 'none'
case 'coffee':
case 'coffeescript':
return 'coffee-script'
case 'scss':
case 'sass':
return 'node-sass'
case 'typescript':
return 'typescript-simple'
default:
return name
}
}
}
6 changes: 3 additions & 3 deletions test/specs/parsers/suite.js
Expand Up @@ -8,7 +8,8 @@
var
path = require('path'),
fs = require('fs'),
norm = require('../helpers').normalizeJS
norm = require('../helpers').normalizeJS,
reqname = require('../helpers').requireName

var
fixtures = __dirname,
Expand All @@ -19,7 +20,7 @@ function have (mod, req) {
if (parsers._req(mod, req)) return true

if (mod !== 'unknown') {
if (!req) req = parsers._modname(mod)
if (!req) req = reqname(mod)
console.error('\tnot installed locally: ' + req + ' alias "' + mod + '"')
}
return false
Expand Down Expand Up @@ -181,7 +182,6 @@ describe('JavaScript parsers', function () {
it('the javascript parser is an alias of "none" and does nothing', function () {
var code = 'fn () {\n}\n'

expect(parsers._modname('javascript')).to.be('none')
expect(parsers.js.javascript(code)).to.be(code)
})

Expand Down

0 comments on commit fc48412

Please sign in to comment.