All files OpenUI5DefineDependencyParserPlugin.js

94.64% Statements 53/56
83.33% Branches 25/30
100% Functions 7/7
96.36% Lines 53/55
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 1031x 1x 1x 1x       19x       7x       19x         7x   1x 1x   3x 1x 1x 2x 1x 1x   1x   3x   2x 1x 1x 1x   1x 1x   2x   1x 1x 1x       7x 4x 4x 4x     7x 7x 7x           7x           7x 7x 3x   7x 7x     19x 4x 4x   4x     19x   4x 4x     4x   4x 4x 4x       1x  
const LocalModulesHelpers = require('webpack/lib/dependencies/LocalModulesHelpers');
const LocalModuleDependency = require('webpack/lib/dependencies/LocalModuleDependency');
const OpenUI5DefineDependency = require('./OpenUI5DefineDependency');
const OpenUI5RequireItemDependency = require('./OpenUI5RequireItemDependency');
 
class OpenUI5DefineDependencyParserPlugin {
  constructor(options) {
    this.options = options;
  }
 
  newDefineDependency(range, arrayRange, functionRange, namedModule) {
    return new OpenUI5DefineDependency(range, arrayRange, functionRange, namedModule);
  }
 
  apply(parser) {
    parser.plugin('call sap.ui.define', (expr) => {
      let array;
      let fn;
      let namedModule;
 
      switch (expr.arguments.length) {
        case 1:
          fn = expr.arguments[0];
          break;
        case 2:
          if (expr.arguments[0].type === 'Literal') {
            namedModule = expr.arguments[0].value;
            fn = expr.arguments[1];
          } else if (expr.arguments[0].type === 'ArrayExpression') {
            array = expr.arguments[0];
            fn = expr.arguments[1];
          } else {
            fn = expr.arguments[0];
          }
          break;
        case 3:
          if (expr.arguments[0].type === 'Literal') {
            namedModule = expr.arguments[0].value;
            array = expr.arguments[1];
            fn = expr.arguments[2];
          } else {
            array = expr.arguments[0];
            fn = expr.arguments[1];
          }
          break;
        case 4:
          namedModule = expr.arguments[0].value;
          array = expr.arguments[1];
          fn = expr.arguments[2];
        // no default
      }
 
      if (array) {
        const param = parser.evaluateExpression(array);
        const result = parser.applyPluginsBailResult('call define:openui5:array', expr, param, namedModule);
        Iif (!result) return false;
      }
 
      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,
        namedModule || null,
      );
      dep.loc = expr.loc;
      if (namedModule) {
        dep.localModule = LocalModulesHelpers.addLocalModule(parser.state, namedModule);
      }
      parser.state.current.addDependency(dep);
      return true;
    });
 
    parser.plugin('call define:openui5:array', (expr, param, namedModule) => {
      param.items.forEach((param) => {
        parser.applyPluginsBailResult('call define:openui5:item', expr, param, namedModule);
      });
      return true;
    });
 
    parser.plugin('call define:openui5:item', (expr, param, namedModule) => {
      let dep;
      const localModule = LocalModulesHelpers.getLocalModule(parser.state, param.string, namedModule);
      Iif (localModule) {
        dep = new LocalModuleDependency(localModule, param.range);
      } else {
        dep = new OpenUI5RequireItemDependency(param.string, param.range);
      }
      dep.loc = expr.loc;
      parser.state.current.addDependency(dep);
      return true;
    });
  }
}
module.exports = OpenUI5DefineDependencyParserPlugin;