add transformer dependencies - fixes #1477
This commit is contained in:
parent
0b15a97013
commit
380293d030
@ -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 = [];
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
export var metadata = {
|
||||
stage: 0
|
||||
stage: 0,
|
||||
dependencies: ["es6.classes"]
|
||||
};
|
||||
|
||||
@ -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
|
||||
};
|
||||
|
||||
@ -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])) {
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user