add transformer dependencies - fixes #1477

This commit is contained in:
Sebastian McKenzie 2015-05-07 21:35:12 +01:00
parent 0b15a97013
commit 380293d030
8 changed files with 28 additions and 16 deletions

View File

@ -29,6 +29,8 @@ import * as t from "../../types";
export default class File {
constructor(opts = {}, pipeline) {
this.transformerDependencies = {};
this.dynamicImportTypes = {};
this.dynamicImportIds = {};
this.dynamicImports = [];
@ -221,13 +223,21 @@ export default class File {
}
stack = beforePlugins.concat(stack, afterPlugins);
// register
this.transformerStack = this.mergeStack(stack.concat(secondaryStack));
// build transformer stack
stack = stack.concat(secondaryStack);
// build dependency graph
for (var pass of (stack: Array)) {
for (var dep of (pass.transformer.dependencies: Array)) {
this.transformerDependencies[dep] = pass.key;
}
}
// collapse stack categories
this.transformerStack = this.collapseStack(stack);
}
mergeStack(_stack) {
collapseStack(_stack) {
var stack = [];
var ignore = [];

View File

@ -10,23 +10,24 @@ export default class TransformerPass {
constructor(file: File, transformer: Transformer) {
this.transformer = transformer;
this.handlers = transformer.handlers;
this.skipKey = transformer.skipKey;
this.file = file;
this.ran = false;
this.key = transformer.key;
}
canTransform(): boolean {
return this.file.pipeline.canTransform(this.transformer, this.file.opts);
return this.file.transformerDependencies[this.key] ||
this.file.pipeline.canTransform(this.transformer, this.file.opts);
}
transform() {
var file = this.file;
file.log.debug(`Start transformer ${this.transformer.key}`);
file.log.debug(`Start transformer ${this.key}`);
traverse(file.ast, this.handlers, file.scope, file);
file.log.debug(`Finish transformer ${this.transformer.key}`);
file.log.debug(`Finish transformer ${this.key}`);
this.ran = true;
}

View File

@ -26,6 +26,7 @@ export default class Transformer {
this.manipulateOptions = take("manipulateOptions");
this.metadata = take("metadata") || {};
this.dependencies = this.metadata.dependencies || [];
this.parser = take("parser");
this.post = take("post");
this.pre = take("pre");

View File

@ -1,3 +1,4 @@
export var metadata = {
stage: 0
stage: 0,
dependencies: ["es6.classes"]
};

View File

@ -3,6 +3,7 @@ import * as defineMap from "../../helpers/define-map";
import * as t from "../../../types";
export var metadata = {
dependencies: ["es6.classes"],
optional: true,
stage: 1
};

View File

@ -3,13 +3,10 @@
import * as t from "../../../types";
export var metadata = {
stage: 1
stage: 1,
dependencies: ["es6.destructuring"]
};
export function manipulateOptions(opts) {
if (opts.whitelist) opts.whitelist.push("es6.destructuring");
}
var hasSpread = function (node) {
for (var i = 0; i < node.properties.length; i++) {
if (t.isSpreadProperty(node.properties[i])) {

View File

@ -3,7 +3,8 @@ import remapAsyncToGenerator from "../../helpers/remap-async-to-generator";
export { manipulateOptions } from "./bluebird-coroutines";
export var metadata = {
optional: true
optional: true,
dependencies: ["es7.asyncFunctions", "es6.classes"]
};
exports.Function = function (node, parent, scope, file) {

View File

@ -2,12 +2,12 @@ import remapAsyncToGenerator from "../../helpers/remap-async-to-generator";
import * as t from "../../../types";
export function manipulateOptions(opts) {
opts.optional.push("es7.asyncFunctions");
opts.blacklist.push("regenerator");
}
export var metadata = {
optional: true
optional: true,
dependencies: ["es7.asyncFunctions", "es6.classes"]
};
exports.Function = function (node, parent, scope, file) {