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; |