Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ module.exports = {
],
"quotes": [
"error",
"double"
"double",
{ "allowTemplateLiterals": true }
],
"semi": [
"error",
Expand Down
11 changes: 6 additions & 5 deletions .github/ISSUE_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,22 @@
3. {...}

## Context
- UI5 Module Version *(output of `ui5 --version` when using the CLI)*: `{...}`
- Node.js Version: `{...}`
- npm Version: `{...}`
- OS/Platform: {...}
- Node.js Version: {...}
- npm Version: {...}
- Browser *(if relevant)*: {...}
- Other information: {...}

## Affected components
## Affected components *(if known)*
- [ ] [ui5-builder](https://github.com/SAP/ui5-builder)
- [ ] [ui5-server](https://github.com/SAP/ui5-server)
- [ ] [ui5-cli](https://github.com/SAP/ui5-cli)
- [ ] [ui5-fs](https://github.com/SAP/ui5-fs)
- [ ] [ui5-project](https://github.com/SAP/ui5-project)
- [ ] [ui5-logger](https://github.com/SAP/ui5-logger)

## Stack trace/log output
## Log Output / Stack Trace
```
{logs}
{...}
```
9 changes: 9 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
**Thank you for your contribution!** 🙌

To get it merged faster, kindly review the checklist below:

## Pull Request Checklist
- [ ] Reviewed the [Contributing Guidelines](https://github.com/SAP/ui5-tooling/blob/master/CONTRIBUTING.md#-contributing-code)
+ Especially the [How to Contribute](https://github.com/SAP/ui5-tooling/blob/master/CONTRIBUTING.md#how-to-contribute) section
- [ ] [No merge commits](https://github.com/SAP/ui5-tooling/blob/master/docs/Guidelines.md#no-merge-commits)
- [ ] [Correct commit message style](https://github.com/SAP/ui5-tooling/blob/master/docs/Guidelines.md#commit-message-style)
6 changes: 3 additions & 3 deletions lib/builder/builder.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ function build({tree, destPath, buildDependencies = false, dev = false, selfCont
" including dependencies..." + (dev ? " [dev mode]" : ""));
log.verbose(`Building to ${destPath}...`);

let selectedTasks = composeTaskList({dev, selfContained, includedTasks, excludedTasks});
const selectedTasks = composeTaskList({dev, selfContained, includedTasks, excludedTasks});

const fsTarget = resourceFactory.createAdapter({
fsBasePath: destPath,
Expand Down Expand Up @@ -201,7 +201,7 @@ function composeTaskList({dev, selfContained, includedTasks, excludedTasks}) {

// Exclude tasks
for (let i = 0; i < excludedTasks.length; i++) {
let taskName = excludedTasks[i];
const taskName = excludedTasks[i];
if (taskName === "*") {
Object.keys(selectedTasks).forEach((sKey) => {
selectedTasks[sKey] = false;
Expand All @@ -215,7 +215,7 @@ function composeTaskList({dev, selfContained, includedTasks, excludedTasks}) {

// Include tasks
for (let i = 0; i < includedTasks.length; i++) {
let taskName = includedTasks[i];
const taskName = includedTasks[i];
if (taskName === "*") {
Object.keys(selectedTasks).forEach((sKey) => {
selectedTasks[sKey] = true;
Expand Down
20 changes: 10 additions & 10 deletions lib/lbt/analyzer/ComponentAnalyzer.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,11 @@ class ComponentAnalyzer {
return info;
}

let manifestName = resource.name.replace(/Component\.js$/, "manifest.json");
const manifestName = resource.name.replace(/Component\.js$/, "manifest.json");
try {
let manifestResource = await this._pool.findResource(manifestName).catch(() => null);
const manifestResource = await this._pool.findResource(manifestName).catch(() => null);
if ( manifestResource ) {
let fileContent = await manifestResource.buffer();
const fileContent = await manifestResource.buffer();
this._analyzeManifest( JSON.parse(fileContent.toString()), info );
} else {
log.verbose("No manifest found for '%s', skipping analysis", resource.name);
Expand All @@ -82,7 +82,7 @@ class ComponentAnalyzer {
* @private
*/
_analyzeManifest( manifest, info ) {
let ui5 = (manifest && manifest["sap.ui5"]) || {};
const ui5 = (manifest && manifest["sap.ui5"]) || {};

if ( ui5.resources && ui5.resources.css ) {
// TODO how to handle CSS dependencies?
Expand All @@ -93,21 +93,21 @@ class ComponentAnalyzer {
}

if ( ui5.rootView ) {
let module = ModuleName.fromUI5LegacyName(
const module = ModuleName.fromUI5LegacyName(
ui5.rootView.viewName,
".view." + ui5.rootView.type.toLowerCase() );
log.verbose("adding root view dependency ", module);
info.addDependency( module );
}

each( ui5.dependencies && ui5.dependencies.libs, (options, lib) => {
let module = ModuleName.fromUI5LegacyName(lib, "/library.js");
const module = ModuleName.fromUI5LegacyName(lib, "/library.js");
log.verbose("adding library dependency ", module, options.lazy || false);
info.addDependency( module, options.lazy ); // lazy -> conditional dependency
});

each( ui5.dependencies && ui5.dependencies.components, (options, component) => {
let module = ModuleName.fromUI5LegacyName(component, "/Component.js");
const module = ModuleName.fromUI5LegacyName(component, "/Component.js");
log.verbose("adding component dependency ", module, options.lazy || false);
info.addDependency( module, options.lazy ); // lazy -> conditional dependency
});
Expand All @@ -116,18 +116,18 @@ class ComponentAnalyzer {

each( ui5.models, (options, model) => {
if ( options.type ) {
let module = ModuleName.fromUI5LegacyName( options.type );
const module = ModuleName.fromUI5LegacyName( options.type );
log.verbose("derived model implementation dependency ", module);
info.addDependency(module);
}
});

let routing = ui5.routing;
const routing = ui5.routing;
if ( routing ) {
if (Array.isArray(routing.routes)) {
routing.routes.forEach((route) => this._visitRoute(route, routing, info));
} else {
for (let key in routing.routes) {
for (const key in routing.routes) {
if (!routing.routes.hasOwnProperty(key)) {
continue;
}
Expand Down
28 changes: 14 additions & 14 deletions lib/lbt/analyzer/FioriElementsAnalyzer.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,11 @@ class FioriElementsAnalyzer {
return info;
}

let manifestName = resource.name.replace(/Component\.js$/, "manifest.json");
const manifestName = resource.name.replace(/Component\.js$/, "manifest.json");
try {
let manifestResource = await this._pool.findResource(manifestName).catch(() => null);
const manifestResource = await this._pool.findResource(manifestName).catch(() => null);
if ( manifestResource ) {
let fileContent = await manifestResource.buffer();
const fileContent = await manifestResource.buffer();
await this._analyzeManifest( JSON.parse(fileContent.toString()), info );
} else {
log.verbose("No manifest found for '%s', skipping analysis", resource.name);
Expand All @@ -119,8 +119,8 @@ class FioriElementsAnalyzer {
* @private
*/
async _analyzeManifest( manifest, info ) {
let promises = [];
let st = (manifest && manifest["sap.fe"]) || {};
const promises = [];
const st = (manifest && manifest["sap.fe"]) || {};

each(st.entitySets, (entitySetCfg) => {
each(entitySetCfg, (activityCfg, activity) => {
Expand All @@ -144,14 +144,14 @@ class FioriElementsAnalyzer {

async _analyzeTemplateComponent(moduleName, pageConfig, appInfo) {
// console.log("analyzing template component %s", moduleName);
let resource = await this._pool.findResource(moduleName);
let code = await resource.buffer();
let ast = esprima.parse(code);
let defaultTemplateName = this._analyzeAST(moduleName, ast);
let templateName = (pageConfig.component && pageConfig.component.settings &&
const resource = await this._pool.findResource(moduleName);
const code = await resource.buffer();
const ast = esprima.parse(code);
const defaultTemplateName = this._analyzeAST(moduleName, ast);
const templateName = (pageConfig.component && pageConfig.component.settings &&
pageConfig.component.settings.templateName) || defaultTemplateName;
if ( templateName ) {
let templateModuleName = ModuleName.fromUI5LegacyName( templateName, ".view.xml" );
const templateModuleName = ModuleName.fromUI5LegacyName( templateName, ".view.xml" );
log.verbose("template app: add dependency to template view %s", templateModuleName);
appInfo.addDependency(templateModuleName);
}
Expand All @@ -161,8 +161,8 @@ class FioriElementsAnalyzer {
let templateName = "";
if ( ast.body.length > 0 && (isMethodCall(ast.body[0].expression, CALL_SAP_UI_DEFINE) ||
isMethodCall(ast.body[0].expression, CALL_DEFINE)) ) {
let defineCall = new SapUiDefine(ast.body[0].expression, moduleName);
let TA = defineCall.findImportName("sap/fe/core/TemplateAssembler.js");
const defineCall = new SapUiDefine(ast.body[0].expression, moduleName);
const TA = defineCall.findImportName("sap/fe/core/TemplateAssembler.js");
// console.log("local name for TemplateAssembler: %s", TA);
if ( TA && defineCall.factory ) {
defineCall.factory.body.body.forEach( (stmt) => {
Expand All @@ -179,7 +179,7 @@ class FioriElementsAnalyzer {
}

_analyzeTemplateClassDefinition(clazz) {
let defaultValue = getValue(clazz, ["metadata", "properties", "templateName", "defaultValue"]);
const defaultValue = getValue(clazz, ["metadata", "properties", "templateName", "defaultValue"]);
if ( isString(defaultValue) ) {
return defaultValue.value;
}
Expand Down
22 changes: 11 additions & 11 deletions lib/lbt/analyzer/JSModuleAnalyzer.js
Original file line number Diff line number Diff line change
Expand Up @@ -164,16 +164,16 @@ const EnrichedVisitorKeys = (function() {
};

// check for unknown keys in our configuration
for ( let type in TempKeys ) {
for ( const type in TempKeys ) {
if ( VisitorKeys[type] === undefined ) {
throw new Error("configuration contains unknown node type '" + type + "'");
}
}

// merge with 'official' visitor keys
Object.keys(VisitorKeys).forEach( (type) => {
let visitorKeys = VisitorKeys[type];
let condKeys = TempKeys[type];
const visitorKeys = VisitorKeys[type];
const condKeys = TempKeys[type];
if ( condKeys === undefined ) {
// configuration missing in ConditionalKeys, maybe a new syntax ?
throw new Error(`unknown estree node type '${type}', new syntax?`);
Expand Down Expand Up @@ -269,7 +269,7 @@ class JSModuleAnalyzer {
return;
}

let condKeys = EnrichedVisitorKeys[node.type];
const condKeys = EnrichedVisitorKeys[node.type];
switch (node.type) {
case Syntax.CallExpression:
if ( !conditional && isMethodCall(node, CALL_JQUERY_SAP_DECLARE) ) {
Expand Down Expand Up @@ -336,7 +336,7 @@ class JSModuleAnalyzer {
|| isMethodCall(node, CALL_REQUIRE_PRELOAD)
|| isMethodCall(node, CALL_SAP_UI_REQUIRE_PRELOAD) ) {
// recognizes a call to jQuery.sap.registerPreloadedModules
let legacyCall = isMethodCall(node, CALL_JQUERY_SAP_REGISTER_PRELOADED_MODULES);
const legacyCall = isMethodCall(node, CALL_JQUERY_SAP_REGISTER_PRELOADED_MODULES);
info.setFormat( legacyCall ? ModuleFormat.UI5_LEGACY : ModuleFormat.UI5_DEFINE);
onRegisterPreloadedModules(node, legacyCall);
} else if ( isCallableExpression(node.callee) ) {
Expand All @@ -346,7 +346,7 @@ class JSModuleAnalyzer {
visit(node.callee.body, conditional);
} else {
// default visit
for ( let key of condKeys ) {
for ( const key of condKeys ) {
visit(node[key.key], key.conditional || conditional);
}
}
Expand All @@ -366,7 +366,7 @@ class JSModuleAnalyzer {
visit(node.alternate, true);
} else {
// default visit
for ( let key of condKeys ) {
for ( const key of condKeys ) {
visit(node[key.key], key.conditional || conditional);
}
}
Expand All @@ -378,7 +378,7 @@ class JSModuleAnalyzer {
throw new Error(`Unhandled AST node type ${node.type}`);
}
// default visit
for ( let key of condKeys ) {
for ( const key of condKeys ) {
visit(node[key.key], key.conditional || conditional);
}
break;
Expand Down Expand Up @@ -454,7 +454,7 @@ class JSModuleAnalyzer {
} else {
// UI5 signature with one or many required modules
for (let i = 0; i < nArgs; i++) {
let arg = args[i];
const arg = args[i];
if ( isString(arg) ) {
const requiredModuleName = ModuleName.fromUI5LegacyName( arg.value );
info.addDependency(requiredModuleName, conditional);
Expand All @@ -475,7 +475,7 @@ class JSModuleAnalyzer {
function onSapUiRequireSync(node, conditional) {
const args = node.arguments;
const nArgs = args.length;
let i = 0;
const i = 0;

if ( i < nArgs && isString(args[i]) ) {
const moduleName = ModuleName.fromRequireJSName( args[i].value );
Expand Down Expand Up @@ -509,7 +509,7 @@ class JSModuleAnalyzer {
if ( legacyCall ) {
const obj = args[0];
isNewSyntax = false;
let version = findOwnProperty(obj, "version");
const version = findOwnProperty(obj, "version");
if ( version && isString(version) && parseFloat(version.value) >= 2.0 ) {
isNewSyntax = true;
}
Expand Down
22 changes: 11 additions & 11 deletions lib/lbt/analyzer/SmartTemplateAnalyzer.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ class TemplateComponentAnalyzer {
return info;
}

let manifestName = resource.name.replace(/Component\.js$/, "manifest.json");
const manifestName = resource.name.replace(/Component\.js$/, "manifest.json");
try {
let manifestResource = await this._pool.findResource(manifestName).catch(() => null);
const manifestResource = await this._pool.findResource(manifestName).catch(() => null);
if ( manifestResource ) {
let fileContent = await manifestResource.buffer();
const fileContent = await manifestResource.buffer();
await this._analyzeManifest( JSON.parse(fileContent.toString()), info );
} else {
log.verbose("No manifest found for '%s', skipping analysis", resource.name);
Expand All @@ -78,14 +78,14 @@ class TemplateComponentAnalyzer {
* @private
*/
async _analyzeManifest( manifest, info ) {
let promises = [];
let that = this;
let st = (manifest && manifest["sap.ui.generic.app"]) || {};
const promises = [];
const that = this;
const st = (manifest && manifest["sap.ui.generic.app"]) || {};
function recurse(ctx) {
if ( ctx.pages ) {
ctx.pages.forEach((page) => {
if ( page.component && page.component.name ) {
let module = ModuleName.fromUI5LegacyName( page.component.name + ".Component" );
const module = ModuleName.fromUI5LegacyName( page.component.name + ".Component" );
log.verbose("template app: add dependency to template component %s", module);
info.addDependency(module);
promises.push( that._analyzeTemplateComponent(module, page, info) );
Expand All @@ -101,8 +101,8 @@ class TemplateComponentAnalyzer {

async _analyzeTemplateComponent(moduleName, pageConfig, appInfo) {
// console.log("analyzing template component %s", moduleName);
let resource = await this._pool.findResource(moduleName);
let code = await resource.buffer();
const resource = await this._pool.findResource(moduleName);
const code = await resource.buffer();
const ast = esprima.parse(code);
const defaultTemplateName = this._analyzeAST(moduleName, ast);
const templateName = (pageConfig.component && pageConfig.component.settings &&
Expand All @@ -118,8 +118,8 @@ class TemplateComponentAnalyzer {
let templateName = "";
if ( ast.body.length > 0 && (isMethodCall(ast.body[0].expression, CALL_SAP_UI_DEFINE) ||
isMethodCall(ast.body[0].expression, CALL_DEFINE)) ) {
let defineCall = new SapUiDefine(ast.body[0].expression, moduleName);
let TA = defineCall.findImportName("sap/suite/ui/generic/template/lib/TemplateAssembler.js");
const defineCall = new SapUiDefine(ast.body[0].expression, moduleName);
const TA = defineCall.findImportName("sap/suite/ui/generic/template/lib/TemplateAssembler.js");
// console.log("local name for TemplateAssembler: %s", TA);
if ( TA && defineCall.factory ) {
defineCall.factory.body.body.forEach( (stmt) => {
Expand Down
8 changes: 4 additions & 4 deletions lib/lbt/analyzer/XMLCompositeAnalyzer.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ class XMLCompositeAnalyzer {
if ( ast.body.length > 0 && ast.body[0].type === Syntax.ExpressionStatement &&
(isMethodCall(ast.body[0].expression, CALL_SAP_UI_DEFINE) ||
isMethodCall(ast.body[0].expression, CALL_DEFINE)) ) {
let defineCall = new SapUiDefine(ast.body[0].expression, moduleName);
let XMLC = defineCall.findImportName("sap/ui/core/XMLComposite.js");
const defineCall = new SapUiDefine(ast.body[0].expression, moduleName);
const XMLC = defineCall.findImportName("sap/ui/core/XMLComposite.js");
// console.log("local name for XMLComposite: %s", XMLC);
if ( XMLC && defineCall.factory ) {
defineCall.factory.body.body.forEach( (stmt) => {
Expand All @@ -31,7 +31,7 @@ class XMLCompositeAnalyzer {
}
});
if ( fragmentName ) {
let fragmentModule = ModuleName.fromUI5LegacyName( fragmentName, ".control.xml" );
const fragmentModule = ModuleName.fromUI5LegacyName( fragmentName, ".control.xml" );
log.verbose("fragment control: add dependency to template fragment %s", fragmentModule);
info.addDependency(fragmentModule);
}
Expand All @@ -55,7 +55,7 @@ class XMLCompositeAnalyzer {

_analyzeXMLCClassDefinition(clazz) {
// log.verbose(clazz);
let fragmentName = getValue(clazz, ["fragment"]);
const fragmentName = getValue(clazz, ["fragment"]);
if ( isString(fragmentName) ) {
return fragmentName.value;
}
Expand Down
Loading