Fix T2929, T6796, stop leaking directives

This commit is contained in:
Casey Foster
2016-01-08 13:21:35 -06:00
parent fb0977b4b3
commit c7c4d7f5fd
32 changed files with 94 additions and 93 deletions

View File

@@ -1,9 +1,13 @@
import template from "babel-template";
let buildDefine = template(`
define(MODULE_NAME, [SOURCES], function (PARAMS) {
define(MODULE_NAME, [SOURCES], FACTORY);
`);
let buildFactory = template(`
(function (PARAMS) {
BODY;
});
})
`);
export default function ({ types: t }) {
@@ -73,7 +77,7 @@ export default function ({ types: t }) {
exit(path) {
if (this.ran) return;
this.ran = true;
path.traverse(amdVisitor, this);
let params = this.sources.map(source => source[0]);
@@ -96,11 +100,18 @@ export default function ({ types: t }) {
params.unshift(t.identifier("module"));
}
path.node.body = [buildDefine({
let { node } = path;
let factory = buildFactory({
PARAMS: params,
BODY: node.body
});
factory.expression.body.directives = node.directives;
node.directives = [];
node.body = [buildDefine({
MODULE_NAME: moduleName,
SOURCES: sources,
PARAMS: params,
BODY: path.node.body
FACTORY: factory
})];
}
}