Merge pull request #1386 from jayphelps/module-id-overload

Added getModuleName() option as a function
This commit is contained in:
Sebastian McKenzie 2015-05-04 22:20:31 +01:00
commit 0b100c4273
3 changed files with 86 additions and 2 deletions

View File

@ -25,6 +25,10 @@
"type": "string"
},
"getModuleName": {
"hidden": true
},
"retainLines": {
"hidden": true,
"type": "boolean",

View File

@ -184,7 +184,10 @@ export default class DefaultFormatter {
getModuleName() {
var opts = this.file.opts;
if (opts.moduleId) return opts.moduleId;
// moduleId is n/a if a `getModuleName()` is provided
if (opts.moduleId && !opts.getModuleName) {
return opts.moduleId;
}
var filenameRelative = opts.filenameRelative;
var moduleName = "";
@ -213,7 +216,13 @@ export default class DefaultFormatter {
// normalize path separators
moduleName = moduleName.replace(/\\/g, "/");
return moduleName;
if (opts.getModuleName) {
// If return is falsy, assume they want us to use
// our generated default name
return opts.getModuleName(moduleName) || moduleName;
} else {
return moduleName;
}
}
_pushStatement(ref, nodes) {

View File

@ -18,6 +18,77 @@ suite("api", function () {
assert.ok(!result.ast);
});
suite("getModuleName() {} option", function () {
// As of this commit, `getModuleName` is the only option that isn't JSON
// compatible which is why it's not inside /test/core/fixtures/transformation
function getModuleNameTest(moduleFormat, expected) {
var result = transform("foo('bar');", {
filename: "foo/bar/index",
modules: moduleFormat,
moduleIds: true,
getModuleName: function (name) {
return name.replace(/\/index$/, "");
}
});
assert.equal(result.code, expected);
}
test("{ modules: \"amd\" }", function () {
var expected = [
"define('foo/bar', ['exports'], function (exports) {",
" 'use strict';",
"",
" foo('bar');",
"});"
].join("\n");
getModuleNameTest("amd", expected);
});
test("{ modules: \"umd\" }", function () {
var expected = [
"(function (global, factory) {",
" if (typeof define === 'function' && define.amd) {",
" define('foo/bar', ['exports'], factory);",
" } else if (typeof exports !== 'undefined') {",
" factory(exports);",
" } else {",
" var mod = {",
" exports: {}",
" };",
" factory(mod.exports);",
" global.fooBar = mod.exports;",
" }",
"})(this, function (exports) {",
" 'use strict';",
"",
" foo('bar');",
"});",
].join("\n");
getModuleNameTest("umd", expected);
});
test("{ modules: \"system\" }", function () {
var expected = [
"System.register('foo/bar', [], function (_export) {",
" return {",
" setters: [],",
" execute: function () {",
" 'use strict';",
"",
" foo('bar');",
" }",
" };",
"});",
].join("\n");
getModuleNameTest("system", expected);
});
});
test("addHelper unknown", function () {
var file = new File({}, transform.pipeline);
assert.throws(function () {