diff --git a/src/babel/transformation/file/index.js b/src/babel/transformation/file/index.js index 029173a2ed..8f9fc5d2c0 100644 --- a/src/babel/transformation/file/index.js +++ b/src/babel/transformation/file/index.js @@ -85,6 +85,8 @@ export default class File { "default-props" ]; + static soloHelpers = []; + static options = require("./options"); normalizeOptions(opts: Object) { @@ -375,7 +377,9 @@ export default class File { } addHelper(name: string): Object { - if (!includes(File.helpers, name)) { + var isSolo = includes(File.soloHelpers, name); + + if (!isSolo && !includes(File.helpers, name)) { throw new ReferenceError(`Unknown helper ${name}`); } @@ -386,24 +390,26 @@ export default class File { this.usedHelpers[name] = true; - var generator = this.get("helperGenerator"); - var runtime = this.get("helpersNamespace"); - if (generator) { - return generator(name); - } else if (runtime) { - var id = t.identifier(t.toIdentifier(name)); - return t.memberExpression(runtime, id); - } else { - var ref = util.template("helper-" + name); - ref._compact = true; - var uid = this.scope.generateUidIdentifier(name); - this.scope.push({ - key: name, - id: uid, - init: ref - }); - return uid; + if (!isSolo) { + var generator = this.get("helperGenerator"); + var runtime = this.get("helpersNamespace"); + if (generator) { + return generator(name); + } else if (runtime) { + var id = t.identifier(t.toIdentifier(name)); + return t.memberExpression(runtime, id); + } } + + var ref = util.template("helper-" + name); + ref._compact = true; + var uid = this.scope.generateUidIdentifier(name); + this.scope.push({ + key: name, + id: uid, + init: ref + }); + return uid; } errorWithNode(node, msg, Error = SyntaxError) {