'use strict';
const OpenUI5DefineDependency = require('./OpenUI5DefineDependency');
const OpenUI5RequireItemDependency = require('./OpenUI5RequireItemDependency');
class OpenUI5DefineDependencyParserPlugin {
constructor(options) {
this.options = options;
}
newDefineDependency(range, arrayRange, functionRange) {
return new OpenUI5DefineDependency(range, arrayRange, functionRange);
}
apply(parser) {
const options = this.options;
parser.plugin('call sap.ui.define', (expr) => {
let array, fn;
Iif (expr.arguments.length > 2) {
if (expr.arguments[1].type === 'ArrayExpression' && expr.arguments[2].type === 'FunctionExpression') {
array = expr.arguments[1];
fn = expr.arguments[2];
// TODO named module
} else if (expr.arguments[0].type === 'ArrayExpression' && expr.arguments[1].type === 'FunctionExpression') {
array = expr.arguments[0];
fn = expr.arguments[1];
} else {
console.error('not implemented!!!!');
console.log(expr.arguments[0].type);
console.log(expr.arguments[1].type);
console.log(expr.arguments[2].type);
}
} else Eif (expr.arguments.length > 1) {
Eif (expr.arguments[0].type === 'ArrayExpression' && expr.arguments[1].type === 'FunctionExpression') {
array = expr.arguments[0];
fn = expr.arguments[1];
} else if (expr.arguments[0].type === 'FunctionExpression') {
fn = expr.arguments[0];
} else {
console.error('not implemented!!!!');
console.log(expr.arguments[0].type);
console.log(expr.arguments[1].type);
}
} else if (expr.arguments[0].type === 'FunctionExpression') {
fn = expr.arguments[0];
} else {
console.error('not implemented!!!!');
console.log(expr.arguments[0].type);
}
Eif (array) {
const param = parser.evaluateExpression(array);
const result = parser.applyPluginsBailResult('call define:openui5:array', expr, param);
Iif (!result) return;
}
Eif (fn && fn.type === 'FunctionExpression') {
Eif (fn.body.type === 'BlockStatement') {
parser.walkStatement(fn.body);
} else {
parser.walkExpression(fn.body);
}
}
const dep = this.newDefineDependency(
expr.range,
array ? array.range : null,
fn ? fn.range : null,
);
dep.loc = expr.loc;
parser.state.current.addDependency(dep);
return true;
});
parser.plugin('call define:openui5:array', (expr, param) => {
param.items.forEach((param) => {
parser.applyPluginsBailResult('call define:openui5:item', expr, param);
});
return true;
});
parser.plugin('call define:openui5:item', (expr, param) => {
const dep = new OpenUI5RequireItemDependency(param.string, param.range);
// dep.loc = expr.loc;
// parser.state.current.addDependency(dep);
return true;
});
}
}
module.exports = OpenUI5DefineDependencyParserPlugin;
|