drop angular (#1812)
Remove support for `@ngInject` as there are proper alternatives anyway.
This commit is contained in:
@@ -48,7 +48,6 @@ function Compressor(options, false_by_default) {
|
|||||||
return new Compressor(options, false_by_default);
|
return new Compressor(options, false_by_default);
|
||||||
TreeTransformer.call(this, this.before, this.after);
|
TreeTransformer.call(this, this.before, this.after);
|
||||||
this.options = defaults(options, {
|
this.options = defaults(options, {
|
||||||
angular : false,
|
|
||||||
booleans : !false_by_default,
|
booleans : !false_by_default,
|
||||||
cascade : !false_by_default,
|
cascade : !false_by_default,
|
||||||
collapse_vars : !false_by_default,
|
collapse_vars : !false_by_default,
|
||||||
@@ -536,9 +535,6 @@ merge(Compressor.prototype, {
|
|||||||
var CHANGED, max_iter = 10;
|
var CHANGED, max_iter = 10;
|
||||||
do {
|
do {
|
||||||
CHANGED = false;
|
CHANGED = false;
|
||||||
if (compressor.option("angular")) {
|
|
||||||
statements = process_for_angular(statements);
|
|
||||||
}
|
|
||||||
statements = eliminate_spurious_blocks(statements);
|
statements = eliminate_spurious_blocks(statements);
|
||||||
if (compressor.option("dead_code")) {
|
if (compressor.option("dead_code")) {
|
||||||
statements = eliminate_dead_code(statements, compressor);
|
statements = eliminate_dead_code(statements, compressor);
|
||||||
@@ -731,80 +727,6 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function process_for_angular(statements) {
|
|
||||||
function has_inject(comment) {
|
|
||||||
return /@ngInject/.test(comment.value);
|
|
||||||
}
|
|
||||||
function make_arguments_names_list(func) {
|
|
||||||
return func.argnames.map(function(sym){
|
|
||||||
return make_node(AST_String, sym, { value: sym.name });
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function make_array(orig, elements) {
|
|
||||||
return make_node(AST_Array, orig, { elements: elements });
|
|
||||||
}
|
|
||||||
function make_injector(func, name) {
|
|
||||||
return make_node(AST_SimpleStatement, func, {
|
|
||||||
body: make_node(AST_Assign, func, {
|
|
||||||
operator: "=",
|
|
||||||
left: make_node(AST_Dot, name, {
|
|
||||||
expression: make_node(AST_SymbolRef, name, name),
|
|
||||||
property: "$inject"
|
|
||||||
}),
|
|
||||||
right: make_array(func, make_arguments_names_list(func))
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function check_expression(body) {
|
|
||||||
if (body && body.args) {
|
|
||||||
// if this is a function call check all of arguments passed
|
|
||||||
body.args.forEach(function(argument, index, array) {
|
|
||||||
var comments = argument.start.comments_before;
|
|
||||||
// if the argument is function preceded by @ngInject
|
|
||||||
if (argument instanceof AST_Lambda && comments.length && has_inject(comments[0])) {
|
|
||||||
// replace the function with an array of names of its parameters and function at the end
|
|
||||||
array[index] = make_array(argument, make_arguments_names_list(argument).concat(argument));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// if this is chained call check previous one recursively
|
|
||||||
if (body.expression && body.expression.expression) {
|
|
||||||
check_expression(body.expression.expression);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return statements.reduce(function(a, stat){
|
|
||||||
a.push(stat);
|
|
||||||
|
|
||||||
if (stat.body && stat.body.args) {
|
|
||||||
check_expression(stat.body);
|
|
||||||
} else {
|
|
||||||
var token = stat.start;
|
|
||||||
var comments = token.comments_before;
|
|
||||||
if (comments && comments.length > 0) {
|
|
||||||
var last = comments.pop();
|
|
||||||
if (has_inject(last)) {
|
|
||||||
// case 1: defun
|
|
||||||
if (stat instanceof AST_Defun) {
|
|
||||||
a.push(make_injector(stat, stat.name));
|
|
||||||
}
|
|
||||||
else if (stat instanceof AST_Definitions) {
|
|
||||||
stat.definitions.forEach(function(def) {
|
|
||||||
if (def.value && def.value instanceof AST_Lambda) {
|
|
||||||
a.push(make_injector(def.value, def.name));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
compressor.warn("Unknown statement marked with @ngInject [{file}:{line},{col}]", token);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return a;
|
|
||||||
}, []);
|
|
||||||
}
|
|
||||||
|
|
||||||
function eliminate_spurious_blocks(statements) {
|
function eliminate_spurious_blocks(statements) {
|
||||||
var seen_dirs = [];
|
var seen_dirs = [];
|
||||||
return statements.reduce(function(a, stat){
|
return statements.reduce(function(a, stat){
|
||||||
|
|||||||
67
test/compress/angular-inject.js
vendored
67
test/compress/angular-inject.js
vendored
@@ -1,67 +0,0 @@
|
|||||||
ng_inject_defun: {
|
|
||||||
options = {
|
|
||||||
angular: true
|
|
||||||
};
|
|
||||||
input: {
|
|
||||||
/*@ngInject*/
|
|
||||||
function Controller(dependency) {
|
|
||||||
return dependency;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
expect: {
|
|
||||||
function Controller(dependency) {
|
|
||||||
return dependency;
|
|
||||||
}
|
|
||||||
Controller.$inject=['dependency']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ng_inject_assignment: {
|
|
||||||
options = {
|
|
||||||
angular: true
|
|
||||||
};
|
|
||||||
input: {
|
|
||||||
/*@ngInject*/
|
|
||||||
var Controller = function(dependency) {
|
|
||||||
return dependency;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
expect: {
|
|
||||||
var Controller = function(dependency) {
|
|
||||||
return dependency;
|
|
||||||
}
|
|
||||||
Controller.$inject=['dependency']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ng_inject_inline: {
|
|
||||||
options = {
|
|
||||||
angular: true
|
|
||||||
};
|
|
||||||
input: {
|
|
||||||
angular.module('a').
|
|
||||||
factory('b',
|
|
||||||
/*@ngInject*/
|
|
||||||
function(dependency) {
|
|
||||||
return dependency;
|
|
||||||
}).
|
|
||||||
directive('c',
|
|
||||||
/*@ngInject*/
|
|
||||||
function(anotherDependency) {
|
|
||||||
return anotherDependency;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
expect: {
|
|
||||||
angular.module('a').
|
|
||||||
factory('b',[
|
|
||||||
'dependency',
|
|
||||||
function(dependency) {
|
|
||||||
return dependency;
|
|
||||||
}]).
|
|
||||||
directive('c',[
|
|
||||||
'anotherDependency',
|
|
||||||
function(anotherDependency) {
|
|
||||||
return anotherDependency;
|
|
||||||
}])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user