All files OpenUI5RequireDependencyParserPlugin.js

27.54% Statements 19/69
11.11% Branches 2/18
14.29% Functions 2/14
29.69% Lines 19/64
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 103 104 105    1x 1x 1x 1x       1x       1x   1x               1x                   1x                     1x                     1x               1x   1x   1x   1x   1x                           1x                 1x                 1x  
'use strict';
 
const OpenUI5LazyInstanceDependency = require('./OpenUI5LazyInstanceDependency');
const OpenUI5RequireItemDependency = require('./OpenUI5RequireItemDependency');
const OpenUI5RequireContextDependency = require('./OpenUI5RequireContextDependency');
const ContextDependencyHelpers = require('./ContextDependencyHelpers');
 
class OpenUI5RequireDependencyParserPlugin {
  constructor(options) {
    this.options = options;
  }
 
  apply(parser) {
    const options = this.options || {};
 
    parser.plugin('call sap.ui.require', (expr) => {
      const param = parser.evaluateExpression(expr.arguments[0]);
      if (expr.arguments[0].type === 'Literal') {
        parser.applyPluginsBailResult('call require:openui5:item', expr, param);
        return true;
      }
    });
 
    parser.plugin('call sap.ui.requireSync', (expr) => {
      const param = parser.evaluateExpression(expr.arguments[0]);
 
      let result = parser.applyPluginsBailResult('call require:openui5:item', expr, param);
      if (result === undefined) {
        result = parser.applyPluginsBailResult('call require:openui5:context', expr, param);
      }
      return result;
    });
 
    parser.plugin('call lazyInstanceof', (expr) => {
      const param1 = parser.evaluateExpression(expr.arguments[1]);
      if (param1.string !== 'sap/ui/app/Application') {
        const dep = new OpenUI5LazyInstanceDependency(param1.string, expr.arguments[0].name, expr.range);
        dep.loc = expr.loc;
        dep.optional = !!parser.scope.inTry;
        parser.state.current.addDependency(dep);
        return true;
      }
    });
 
    parser.plugin('call jQuery.sap.require', (expr) => {
      const param = parser.evaluateExpression(expr.arguments[0]);
      if (expr.arguments[0].type === 'Literal') {
        parser.applyPluginsBailResult('call require:openui5:item', expr, param);
        return true;
      }
      // console.log(expr.arguments[0].type);
 
      return true;
    });
 
    parser.plugin('call $.sap.require', (expr) => {
      const param = parser.evaluateExpression(expr.arguments[0]);
      if (expr.arguments[0].type === 'Literal') {
        parser.applyPluginsBailResult('call require:openui5:item', expr, param);
        return true;
      }
    });
 
    parser.plugin('expression sap.ui.core.theming.Parameters', expr => parser.applyPluginsBailResult('expression require:openui5:global', expr, 'sap/ui/core/theming/Parameters'));
 
    parser.plugin('expression sap.viz.ui5.theming.Util', expr => parser.applyPluginsBailResult('expression require:openui5:global', expr, 'sap/viz/ui5/theming/Util'));
 
    parser.plugin('expression sap.ui.unified.DateRange', expr => parser.applyPluginsBailResult('expression require:openui5:global', expr, 'sap/ui/unified/DateRange'));
 
    parser.plugin('expression sap.ui.core.LabelEnablement', expr => parser.applyPluginsBailResult('expression require:openui5:global', expr, 'sap/ui/core/LabelEnablement'));
 
    parser.plugin('call require:openui5:item', (expr, param) => {
      if (param.isString()) {
        let item = param.string;
        if (item.substr(0, 10) !== 'jquery.sap') {
          item = item.replace(/\./g, '/');
        }
        const dep = new OpenUI5RequireItemDependency(item, expr.range);
        dep.loc = expr.loc;
        dep.optional = !!parser.scope.inTry;
        parser.state.current.addDependency(dep);
        return true;
      }
    });
 
    parser.plugin('call require:openui5:context', (expr, param) => {
      const dep = ContextDependencyHelpers.create(OpenUI5RequireContextDependency, expr.range, param, expr, options);
      if (!dep) return;
      dep.loc = expr.loc;
      dep.optional = !!parser.scope.inTry;
      parser.state.current.addDependency(dep);
      return true;
    });
 
    parser.plugin('expression require:openui5:global', (expr, request) => {
      const dep = new OpenUI5RequireItemDependency(request, expr.range, true);
      dep.loc = expr.loc;
      dep.optional = !!parser.scope.inTry;
      parser.state.current.addDependency(dep);
      return true;
    });
  }
}
module.exports = OpenUI5RequireDependencyParserPlugin;