You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2018/09/27 04:18:20 UTC

[2/3] ignite git commit: IGNITE-9569 Web console: Refactored DI to use $inject instead of arrays.

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/branding/terms.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/branding/terms.directive.js b/modules/web-console/frontend/app/modules/branding/terms.directive.js
index 0207745..8126a39 100644
--- a/modules/web-console/frontend/app/modules/branding/terms.directive.js
+++ b/modules/web-console/frontend/app/modules/branding/terms.directive.js
@@ -15,7 +15,10 @@
  * limitations under the License.
  */
 
-export default ['igniteTerms', ['IgniteBranding', (branding) => {
+/**
+ * @param {import('./branding.service').default} branding
+ */
+export default function factory(branding) {
     function controller() {
         const ctrl = this;
 
@@ -27,4 +30,6 @@ export default ['igniteTerms', ['IgniteBranding', (branding) => {
         controller,
         controllerAs: 'terms'
     };
-}]];
+}
+
+factory.$inject = ['IgniteBranding'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js b/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js
index f4a712d4..5f7eed2 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js
@@ -20,7 +20,12 @@ import _ from 'lodash';
 import {nonEmpty} from 'app/utils/lodashMixins';
 import { EmptyBean, Bean } from './Beans';
 
-export default ['JavaTypes', 'igniteClusterPlatformDefaults', 'igniteCachePlatformDefaults', function(JavaTypes, clusterDflts, cacheDflts) {
+/**
+ * @param {import('app/services/JavaTypes.service').default} JavaTypes
+ * @param {import('./defaults/Cluster.service').default} clusterDflts
+ * @param {import('./defaults/Cache.service').default} cacheDflts
+ */
+export default function service(JavaTypes, clusterDflts, cacheDflts) {
     class PlatformGenerator {
         static igniteConfigurationBean(cluster) {
             return new Bean('Apache.Ignite.Core.IgniteConfiguration', 'cfg', cluster, clusterDflts);
@@ -521,4 +526,6 @@ export default ['JavaTypes', 'igniteClusterPlatformDefaults', 'igniteCachePlatfo
     }
 
     return PlatformGenerator;
-}];
+}
+
+service.$inject = ['JavaTypes', 'igniteClusterPlatformDefaults', 'igniteCachePlatformDefaults'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/demo/Demo.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/demo/Demo.module.js b/modules/web-console/frontend/app/modules/demo/Demo.module.js
index 96d409f..6c14e4a 100644
--- a/modules/web-console/frontend/app/modules/demo/Demo.module.js
+++ b/modules/web-console/frontend/app/modules/demo/Demo.module.js
@@ -22,47 +22,12 @@ import templateUrl from 'views/templates/demo-info.tpl.pug';
 
 const DEMO_QUERY_STATE = {state: 'base.sql.notebook', params: {noteId: 'demo'}};
 
-angular
-.module('ignite-console.demo', [
-    'ignite-console.socket'
-])
-.config(['$stateProvider', ($stateProvider) => {
-    $stateProvider
-        .state('demo', {
-            abstract: true,
-            url: '/demo',
-            template: '<ui-view></ui-view>'
-        })
-        .state('demo.resume', {
-            url: '/resume',
-            permission: 'demo',
-            redirectTo: DEMO_QUERY_STATE,
-            unsaved: true,
-            tfMetaTags: {
-                title: 'Demo resume'
-            }
-        })
-        .state('demo.reset', {
-            url: '/reset',
-            permission: 'demo',
-            redirectTo: (trans) => {
-                const $http = trans.injector().get('$http');
-
-                return $http.post('/api/v1/demo/reset')
-                    .then(() => DEMO_QUERY_STATE)
-                    .catch((err) => {
-                        trans.injector().get('IgniteMessages').showError(err);
-
-                        return DEMO_QUERY_STATE;
-                    });
-            },
-            unsaved: true,
-            tfMetaTags: {
-                title: 'Demo reset'
-            }
-        });
-}])
-.provider('Demo', ['$stateProvider', '$httpProvider', 'igniteSocketFactoryProvider', function($state, $http, socketFactory) {
+/**
+ * @param {import('@uirouter/angularjs').StateProvider} $state
+ * @param {ng.IHttpProvider} $http
+ * @param {unknown} socketFactory
+ */
+export function DemoProvider($state, $http, socketFactory) {
     if (/(\/demo.*)/ig.test(location.pathname))
         sessionStorage.setItem('IgniteDemoMode', 'true');
 
@@ -74,13 +39,24 @@ angular
         $http.interceptors.push('demoInterceptor');
     }
 
-    this.$get = ['$rootScope', ($root) => {
+    function service($root) {
         $root.IgniteDemoMode = enabled;
 
         return {enabled};
-    }];
-}])
-.factory('demoInterceptor', ['Demo', function(Demo) {
+    }
+    service.$inject = ['$rootScope'];
+
+    this.$get = service;
+    return this;
+}
+
+DemoProvider.$inject = ['$stateProvider', '$httpProvider', 'igniteSocketFactoryProvider'];
+
+/**
+ * @param {{enabled: boolean}} Demo
+ * @returns {ng.IHttpInterceptor}
+ */
+function demoInterceptor(Demo) {
     const isApiRequest = (url) => /\/api\/v1/ig.test(url);
 
     return {
@@ -91,8 +67,17 @@ angular
             return cfg;
         }
     };
-}])
-.controller('demoController', ['$scope', '$state', '$window', 'IgniteConfirm', function($scope, $state, $window, Confirm) {
+}
+
+demoInterceptor.$inject = ['Demo'];
+
+/**
+ * @param {ng.IScope} $scope
+ * @param {import('@uirouter/angularjs').StateService} $state
+ * @param {ng.IWindowService} $window
+ * @param {ReturnType<typeof import('app/services/Confirm.service').default>} Confirm
+ */
+function demoController($scope, $state, $window, Confirm) {
     const _openTab = (stateName) => $window.open($state.href(stateName), '_blank');
 
     $scope.startDemo = () => {
@@ -111,17 +96,30 @@ angular
     $scope.closeDemo = () => {
         $window.close();
     };
-}])
-.provider('igniteDemoInfo', [function() {
+}
+
+demoController.$inject = ['$scope', '$state', '$window', 'IgniteConfirm'];
+
+function igniteDemoInfoProvider() {
     const items = DEMO_INFO;
 
     this.update = (data) => items[0] = data;
 
-    this.$get = [() => {
+    this.$get = () => {
         return items;
-    }];
-}])
-.service('DemoInfo', ['$rootScope', '$modal', '$state', '$q', 'igniteDemoInfo', 'AgentManager', function($rootScope, $modal, $state, $q, igniteDemoInfo, agentMgr) {
+    };
+    return this;
+}
+
+/**
+ * @param {ng.IRootScopeService} $rootScope
+ * @param {mgcrea.ngStrap.modal.IModalScope} $modal
+ * @param {import('@uirouter/angularjs').StateService} $state
+ * @param {ng.IQService} $q
+ * @param {Array<{title: string, message: Array<string>}>} igniteDemoInfo
+ * @param {import('app/modules/agent/AgentManager.service').default} agentMgr
+ */
+function DemoInfo($rootScope, $modal, $state, $q, igniteDemoInfo, agentMgr) {
     const scope = $rootScope.$new();
 
     let closePromise = null;
@@ -160,4 +158,59 @@ angular
                 .then(() => scope.hasAgents = true);
         }
     };
-}]);
+}
+
+DemoInfo.$inject = ['$rootScope', '$modal', '$state', '$q', 'igniteDemoInfo', 'AgentManager'];
+
+/**
+ * @param {import('@uirouter/angularjs').StateProvider} $stateProvider
+ */
+function config($stateProvider) {
+    $stateProvider
+        .state('demo', {
+            abstract: true,
+            url: '/demo',
+            template: '<ui-view></ui-view>'
+        })
+        .state('demo.resume', {
+            url: '/resume',
+            permission: 'demo',
+            redirectTo: DEMO_QUERY_STATE,
+            unsaved: true,
+            tfMetaTags: {
+                title: 'Demo resume'
+            }
+        })
+        .state('demo.reset', {
+            url: '/reset',
+            permission: 'demo',
+            redirectTo: (trans) => {
+                const $http = trans.injector().get('$http');
+
+                return $http.post('/api/v1/demo/reset')
+                    .then(() => DEMO_QUERY_STATE)
+                    .catch((err) => {
+                        trans.injector().get('IgniteMessages').showError(err);
+
+                        return DEMO_QUERY_STATE;
+                    });
+            },
+            unsaved: true,
+            tfMetaTags: {
+                title: 'Demo reset'
+            }
+        });
+}
+
+config.$inject = ['$stateProvider'];
+
+angular
+.module('ignite-console.demo', [
+    'ignite-console.socket'
+])
+.config(config)
+.provider('Demo', DemoProvider)
+.factory('demoInterceptor', demoInterceptor)
+.controller('demoController', demoController)
+.provider('igniteDemoInfo', igniteDemoInfoProvider)
+.service('DemoInfo', DemoInfo);

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/dialog/dialog-content.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/dialog/dialog-content.directive.js b/modules/web-console/frontend/app/modules/dialog/dialog-content.directive.js
index 98e9903..fb5d972 100644
--- a/modules/web-console/frontend/app/modules/dialog/dialog-content.directive.js
+++ b/modules/web-console/frontend/app/modules/dialog/dialog-content.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-export default ['igniteDialogContent', [() => {
+export default () => {
     const link = ($scope, $element, $attrs, igniteDialog) => {
         igniteDialog.content = $element.html();
 
@@ -28,4 +28,4 @@ export default ['igniteDialogContent', [() => {
         link,
         require: '^igniteDialog'
     };
-}]];
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/dialog/dialog-title.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/dialog/dialog-title.directive.js b/modules/web-console/frontend/app/modules/dialog/dialog-title.directive.js
index ed4adb8..ebd2d94 100644
--- a/modules/web-console/frontend/app/modules/dialog/dialog-title.directive.js
+++ b/modules/web-console/frontend/app/modules/dialog/dialog-title.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-export default ['igniteDialogTitle', [() => {
+export default () => {
     const link = ($scope, $element, $attrs, igniteDialog) => {
         igniteDialog.title = $element.text();
 
@@ -28,4 +28,4 @@ export default ['igniteDialogTitle', [() => {
         link,
         require: '^igniteDialog'
     };
-}]];
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/dialog/dialog.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/dialog/dialog.directive.js b/modules/web-console/frontend/app/modules/dialog/dialog.directive.js
index 7aab10f..96a96e2 100644
--- a/modules/web-console/frontend/app/modules/dialog/dialog.directive.js
+++ b/modules/web-console/frontend/app/modules/dialog/dialog.directive.js
@@ -19,7 +19,7 @@ import controller from './dialog.controller';
 
 const template = '<a ng-click="ctrl.show()"><span ng-transclude=""></span></a>';
 
-export default ['igniteDialog', [() => {
+export default () => {
     return {
         restrict: 'E',
         template,
@@ -29,4 +29,4 @@ export default ['igniteDialog', [() => {
         transclude: true,
         require: '^igniteDialog'
     };
-}]];
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/dialog/dialog.factory.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/dialog/dialog.factory.js b/modules/web-console/frontend/app/modules/dialog/dialog.factory.js
index 749f833..14afcdf 100644
--- a/modules/web-console/frontend/app/modules/dialog/dialog.factory.js
+++ b/modules/web-console/frontend/app/modules/dialog/dialog.factory.js
@@ -17,7 +17,10 @@
 
 import templateUrl from './dialog.tpl.pug';
 
-export default ['IgniteDialog', ['$modal', function($modal) {
+/**
+ * @param {mgcrea.ngStrap.modal.IModalService} $modal
+ */
+export default function factory($modal) {
     const defaults = {
         templateUrl,
         show: false
@@ -28,4 +31,6 @@ export default ['IgniteDialog', ['$modal', function($modal) {
 
         return $modal(options);
     };
-}]];
+}
+
+factory.$inject = ['$modal'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/dialog/dialog.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/dialog/dialog.module.js b/modules/web-console/frontend/app/modules/dialog/dialog.module.js
index c9ba9f9..6d9324f 100644
--- a/modules/web-console/frontend/app/modules/dialog/dialog.module.js
+++ b/modules/web-console/frontend/app/modules/dialog/dialog.module.js
@@ -26,7 +26,7 @@ angular
 .module('ignite-console.dialog', [
 
 ])
-.factory(...IgniteDialog)
-.directive(...igniteDialog)
-.directive(...igniteDialogTitle)
-.directive(...igniteDialogContent);
+.factory('IgniteDialog', IgniteDialog)
+.directive('igniteDialog', igniteDialog)
+.directive('igniteDialogTitle', igniteDialogTitle)
+.directive('igniteDialogContent', igniteDialogContent);

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/field/bs-select-placeholder.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/field/bs-select-placeholder.directive.js b/modules/web-console/frontend/app/modules/form/field/bs-select-placeholder.directive.js
index cecb49c..9d7f59f 100644
--- a/modules/web-console/frontend/app/modules/form/field/bs-select-placeholder.directive.js
+++ b/modules/web-console/frontend/app/modules/form/field/bs-select-placeholder.directive.js
@@ -16,7 +16,13 @@
  */
 
 // Override AngularStrap "bsSelect" in order to dynamically change placeholder and class.
-export default ['bsSelect', [() => {
+export default () => {
+    /**
+     * @param {ng.IScope} scope
+     * @param {JQLite} $element
+     * @param {ng.IAttributes} attrs
+     * @param {[ng.INgModelController]} [ngModel]
+     */
     const link = (scope, $element, attrs, [ngModel]) => {
         if (!ngModel)
             return;
@@ -48,4 +54,4 @@ export default ['bsSelect', [() => {
         link,
         require: ['?ngModel']
     };
-}]];
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/field/input/autofocus.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/field/input/autofocus.directive.js b/modules/web-console/frontend/app/modules/form/field/input/autofocus.directive.js
index 8ffc9a0..f54eaee 100644
--- a/modules/web-console/frontend/app/modules/form/field/input/autofocus.directive.js
+++ b/modules/web-console/frontend/app/modules/form/field/input/autofocus.directive.js
@@ -15,7 +15,17 @@
  * limitations under the License.
  */
 
-export default ['igniteFormFieldInputAutofocus', ['$timeout', ($timeout) => {
+import _ from 'lodash';
+
+/**
+ * @param {ng.ITimeoutService} $timeout
+ */
+export default function factory($timeout) {
+    /**
+     * @param {ng.IScope} scope
+     * @param {JQLite} el
+     * @param {ng.IAttributes} attrs
+     */
     const link = (scope, el, attrs) => {
         if (_.isUndefined(attrs.igniteFormFieldInputAutofocus) || attrs.igniteFormFieldInputAutofocus !== 'true')
             return;
@@ -27,4 +37,6 @@ export default ['igniteFormFieldInputAutofocus', ['$timeout', ($timeout) => {
         restrict: 'A',
         link
     };
-}]];
+}
+
+factory.$inject = ['$timeout'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/form.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/form.module.js b/modules/web-console/frontend/app/modules/form/form.module.js
index ac15c6a..29afa59 100644
--- a/modules/web-console/frontend/app/modules/form/form.module.js
+++ b/modules/web-console/frontend/app/modules/form/form.module.js
@@ -41,20 +41,20 @@ angular
 
 ])
 // Field.
-.directive(...placeholder)
+.directive('bsSelect', placeholder)
 // Validators.
-.directive(...ipaddress)
-.directive(...javaKeywords)
-.directive(...javaPackageSpecified)
-.directive(...javaBuiltInClass)
-.directive(...javaIdentifier)
-.directive(...javaPackageName)
-.directive(...propertyValueSpecified)
-.directive(...propertyUnique)
-.directive(...unique)
-.directive(...uuid)
+.directive('ipaddress', ipaddress)
+.directive('javaKeywords', javaKeywords)
+.directive('javaPackageSpecified', javaPackageSpecified)
+.directive('javaBuiltInClass', javaBuiltInClass)
+.directive('javaIdentifier', javaIdentifier)
+.directive('javaPackageName', javaPackageName)
+.directive('ignitePropertyValueSpecified', propertyValueSpecified)
+.directive('ignitePropertyUnique', propertyUnique)
+.directive('igniteUnique', unique)
+.directive('uuid', uuid)
 // Helpers.
-.directive(...igniteFormFieldInputAutofocus)
+.directive('igniteFormFieldInputAutofocus', igniteFormFieldInputAutofocus)
 
 // Generator of globally unique identifier.
 .service('IgniteFormGUID', IgniteFormGUID);

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/services/FormGUID.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/services/FormGUID.service.js b/modules/web-console/frontend/app/modules/form/services/FormGUID.service.js
index a018500..6b8df3c 100644
--- a/modules/web-console/frontend/app/modules/form/services/FormGUID.service.js
+++ b/modules/web-console/frontend/app/modules/form/services/FormGUID.service.js
@@ -15,8 +15,8 @@
  * limitations under the License.
  */
 
-export default [function() {
+export default function() {
     let guid = 0;
 
     return () => `form-field-${guid++}`;
-}];
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/validator/ipaddress.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/validator/ipaddress.directive.js b/modules/web-console/frontend/app/modules/form/validator/ipaddress.directive.js
index 77e63f6..531e682 100644
--- a/modules/web-console/frontend/app/modules/form/validator/ipaddress.directive.js
+++ b/modules/web-console/frontend/app/modules/form/validator/ipaddress.directive.js
@@ -15,7 +15,12 @@
  * limitations under the License.
  */
 
-export default ['ipaddress', ['IgniteInetAddress', (InetAddress) => {
+import _ from 'lodash';
+
+/**
+ * @param {ReturnType<typeof import('app/services/InetAddress.service').default>} InetAddress
+ */
+export default function factory(InetAddress) {
     const onlyDigits = (str) => (/^\d+$/.test(str));
 
     const strictParseInt = (str) => onlyDigits(str) ? parseInt(str, 10) : Number.NaN;
@@ -27,6 +32,12 @@ export default ['ipaddress', ['IgniteInetAddress', (InetAddress) => {
         return {ipOrHost, ports};
     };
 
+    /**
+     * @param {ng.IScope} scope
+     * @param {JQLite} el
+     * @param {ng.IAttributes} attrs
+     * @param {[ng.INgModelController]} [ngModel]
+     */
     const link = (scope, el, attrs, [ngModel]) => {
         const isEmpty = (modelValue) => {
             return ngModel.$isEmpty(modelValue) || _.isUndefined(attrs.ipaddress) || attrs.ipaddress !== 'true';
@@ -83,4 +94,6 @@ export default ['ipaddress', ['IgniteInetAddress', (InetAddress) => {
         link,
         require: ['ngModel']
     };
-}]];
+}
+
+factory.$inject = ['IgniteInetAddress'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/validator/java-built-in-class.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/validator/java-built-in-class.directive.js b/modules/web-console/frontend/app/modules/form/validator/java-built-in-class.directive.js
index f9aadc4..736179c 100644
--- a/modules/web-console/frontend/app/modules/form/validator/java-built-in-class.directive.js
+++ b/modules/web-console/frontend/app/modules/form/validator/java-built-in-class.directive.js
@@ -15,7 +15,18 @@
  * limitations under the License.
  */
 
-export default ['javaBuiltInClass', ['JavaTypes', (JavaTypes) => {
+import _ from 'lodash';
+
+/**
+ * @param {import('app/services/JavaTypes.service').default} JavaTypes
+ */
+export default function factory(JavaTypes) {
+    /**
+     * @param {ng.IScope} scope
+     * @param {JQLite} el
+     * @param {ng.IAttributes} attrs
+     * @param {[ng.INgModelController]} [ngModel]
+     */
     const link = (scope, el, attrs, [ngModel]) => {
         if (_.isUndefined(attrs.javaBuiltInClass) || !attrs.javaBuiltInClass)
             return;
@@ -32,4 +43,6 @@ export default ['javaBuiltInClass', ['JavaTypes', (JavaTypes) => {
         link,
         require: ['ngModel']
     };
-}]];
+}
+
+factory.$inject = ['JavaTypes'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/validator/java-identifier.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/validator/java-identifier.directive.js b/modules/web-console/frontend/app/modules/form/validator/java-identifier.directive.js
index a61d309..1b5a700 100644
--- a/modules/web-console/frontend/app/modules/form/validator/java-identifier.directive.js
+++ b/modules/web-console/frontend/app/modules/form/validator/java-identifier.directive.js
@@ -15,7 +15,18 @@
  * limitations under the License.
  */
 
-export default ['javaIdentifier', ['JavaTypes', (JavaTypes) => {
+import _ from 'lodash';
+
+/**
+ * @param {import('app/services/JavaTypes.service').default} JavaTypes
+ */
+export default function factory(JavaTypes) {
+    /**
+     * @param {ng.IScope} scope
+     * @param {JQLite} el
+     * @param {ng.IAttributes} attrs
+     * @param {[ng.INgModelController]} [ngModel]
+     */
     const link = (scope, el, attrs, [ngModel]) => {
         if (_.isNil(attrs.javaIdentifier) || attrs.javaIdentifier !== 'true')
             return;
@@ -35,4 +46,6 @@ export default ['javaIdentifier', ['JavaTypes', (JavaTypes) => {
         link,
         require: ['ngModel']
     };
-}]];
+}
+
+factory.$inject = ['JavaTypes'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/validator/java-keywords.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/validator/java-keywords.directive.js b/modules/web-console/frontend/app/modules/form/validator/java-keywords.directive.js
index 9d5c2aa..9581ee9 100644
--- a/modules/web-console/frontend/app/modules/form/validator/java-keywords.directive.js
+++ b/modules/web-console/frontend/app/modules/form/validator/java-keywords.directive.js
@@ -15,7 +15,18 @@
  * limitations under the License.
  */
 
-export default ['javaKeywords', ['JavaTypes', (JavaTypes) => {
+import _ from 'lodash';
+
+/**
+ * @param {import('app/services/JavaTypes.service').default} JavaTypes
+ */
+export default function factory(JavaTypes) {
+    /**
+     * @param {ng.IScope} scope
+     * @param {JQLite} el
+     * @param {ng.IAttributes} attrs
+     * @param {[ng.INgModelController]} [ngModel]
+     */
     const link = (scope, el, attrs, [ngModel]) => {
         if (_.isNil(attrs.javaKeywords) || attrs.javaKeywords === 'false')
             return;
@@ -36,4 +47,6 @@ export default ['javaKeywords', ['JavaTypes', (JavaTypes) => {
         link,
         require: ['ngModel']
     };
-}]];
+}
+
+factory.$inject = ['JavaTypes'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/validator/java-package-name.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/validator/java-package-name.directive.js b/modules/web-console/frontend/app/modules/form/validator/java-package-name.directive.js
index 49d4b55..9059112 100644
--- a/modules/web-console/frontend/app/modules/form/validator/java-package-name.directive.js
+++ b/modules/web-console/frontend/app/modules/form/validator/java-package-name.directive.js
@@ -15,7 +15,18 @@
  * limitations under the License.
  */
 
-export default ['javaPackageName', ['JavaTypes', (JavaTypes) => {
+import _ from 'lodash';
+
+/**
+ * @param {import('app/services/JavaTypes.service').default} JavaTypes
+ */
+export default function factory(JavaTypes) {
+    /**
+     * @param {ng.IScope} scope
+     * @param {JQLite} el
+     * @param {ng.IAttributes} attrs
+     * @param {[ng.INgModelController]} [ngModel]
+     */
     const link = (scope, el, attrs, [ngModel]) => {
         if (_.isNil(attrs.javaPackageName) || attrs.javaPackageName === 'false')
             return;
@@ -28,4 +39,6 @@ export default ['javaPackageName', ['JavaTypes', (JavaTypes) => {
         link,
         require: ['ngModel']
     };
-}]];
+}
+
+factory.$inject = ['JavaTypes'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/validator/java-package-specified.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/validator/java-package-specified.directive.js b/modules/web-console/frontend/app/modules/form/validator/java-package-specified.directive.js
index d3274ae..5ff25d5 100644
--- a/modules/web-console/frontend/app/modules/form/validator/java-package-specified.directive.js
+++ b/modules/web-console/frontend/app/modules/form/validator/java-package-specified.directive.js
@@ -15,7 +15,18 @@
  * limitations under the License.
  */
 
-export default ['javaPackageSpecified', ['JavaTypes', (JavaTypes) => {
+import _ from 'lodash';
+
+/**
+ * @param {import('app/services/JavaTypes.service').default} JavaTypes
+ */
+export default function factory(JavaTypes) {
+    /**
+     * @param {ng.IScope} scope
+     * @param {JQLite} el
+     * @param {ng.IAttributes} attrs
+     * @param {[ng.INgModelController]} [ngModel]
+     */
     const link = (scope, el, attrs, [ngModel]) => {
         if (_.isNil(attrs.javaPackageSpecified) || attrs.javaPackageSpecified === 'false')
             return;
@@ -36,4 +47,6 @@ export default ['javaPackageSpecified', ['JavaTypes', (JavaTypes) => {
         link,
         require: ['ngModel']
     };
-}]];
+}
+
+factory.$inject = ['JavaTypes'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/validator/property-unique.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/validator/property-unique.directive.js b/modules/web-console/frontend/app/modules/form/validator/property-unique.directive.js
index 8cfae89..fbcf734 100644
--- a/modules/web-console/frontend/app/modules/form/validator/property-unique.directive.js
+++ b/modules/web-console/frontend/app/modules/form/validator/property-unique.directive.js
@@ -15,7 +15,18 @@
  * limitations under the License.
  */
 
-export default ['ignitePropertyUnique', ['$parse', ($parse) => {
+import _ from 'lodash';
+
+/**
+ * @param {ng.IParseService} $parse
+ */
+export default function factory($parse) {
+    /**
+     * @param {ng.IScope} scope
+     * @param {JQLite} el
+     * @param {ng.IAttributes} attrs
+     * @param {[ng.INgModelController]} [ngModel]
+     */
     const link = (scope, el, attrs, [ngModel]) => {
         if (_.isUndefined(attrs.ignitePropertyUnique) || !attrs.ignitePropertyUnique)
             return;
@@ -44,4 +55,6 @@ export default ['ignitePropertyUnique', ['$parse', ($parse) => {
         link,
         require: ['ngModel']
     };
-}]];
+}
+
+factory.$inject = ['$parse'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/validator/property-value-specified.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/validator/property-value-specified.directive.js b/modules/web-console/frontend/app/modules/form/validator/property-value-specified.directive.js
index d113a4f..5136d1a 100644
--- a/modules/web-console/frontend/app/modules/form/validator/property-value-specified.directive.js
+++ b/modules/web-console/frontend/app/modules/form/validator/property-value-specified.directive.js
@@ -15,7 +15,15 @@
  * limitations under the License.
  */
 
-export default ['ignitePropertyValueSpecified', [() => {
+import _ from 'lodash';
+
+export default () => {
+    /**
+     * @param {ng.IScope} scope
+     * @param {JQLite} el
+     * @param {ng.IAttributes} attrs
+     * @param {[ng.INgModelController]} [ngModel]
+     */
     const link = (scope, el, attrs, [ngModel]) => {
         if (_.isUndefined(attrs.ignitePropertyValueSpecified) || !attrs.ignitePropertyValueSpecified)
             return;
@@ -28,4 +36,4 @@ export default ['ignitePropertyValueSpecified', [() => {
         link,
         require: ['ngModel']
     };
-}]];
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/validator/unique.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/validator/unique.directive.js b/modules/web-console/frontend/app/modules/form/validator/unique.directive.js
index 318b8b6..ac6787f 100644
--- a/modules/web-console/frontend/app/modules/form/validator/unique.directive.js
+++ b/modules/web-console/frontend/app/modules/form/validator/unique.directive.js
@@ -26,9 +26,16 @@ class Controller {
     listEditableTransclude;
     /** @type {Array} */
     items;
+    /** @type {string?} */
+    key;
+    /** @type {Array<string>} */
+    skip;
 
     static $inject = ['$scope'];
 
+    /**
+     * @param {ng.IScope} $scope
+     */
     constructor($scope) {
         this.$scope = $scope;
     }
@@ -69,7 +76,7 @@ class Controller {
     }
 }
 
-export default ['igniteUnique', () => {
+export default () => {
     return {
         controller: Controller,
         require: {
@@ -82,4 +89,4 @@ export default ['igniteUnique', () => {
             skip: '<?igniteUniqueSkip'
         }
     };
-}];
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/form/validator/uuid.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/validator/uuid.directive.js b/modules/web-console/frontend/app/modules/form/validator/uuid.directive.js
index 94c6e3f..cb20981 100644
--- a/modules/web-console/frontend/app/modules/form/validator/uuid.directive.js
+++ b/modules/web-console/frontend/app/modules/form/validator/uuid.directive.js
@@ -15,7 +15,18 @@
  * limitations under the License.
  */
 
-export default ['uuid', ['JavaTypes', (JavaTypes) => {
+import _ from 'lodash';
+
+/**
+ * @param {import('app/services/JavaTypes.service').default} JavaTypes
+ */
+export default function factory(JavaTypes) {
+    /**
+     * @param {ng.IScope} scope
+     * @param {JQLite} el
+     * @param {ng.IAttributes} attrs
+     * @param {[ng.INgModelController]} [ngModel]
+     */
     const link = (scope, el, attrs, [ngModel]) => {
         if (_.isNil(attrs.uuid) || attrs.uuid !== 'true')
             return;
@@ -28,4 +39,6 @@ export default ['uuid', ['JavaTypes', (JavaTypes) => {
         link,
         require: ['ngModel']
     };
-}]];
+}
+
+factory.$inject = ['JavaTypes'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/getting-started/GettingStarted.provider.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/getting-started/GettingStarted.provider.js b/modules/web-console/frontend/app/modules/getting-started/GettingStarted.provider.js
index 09b65f4..14dd26a 100644
--- a/modules/web-console/frontend/app/modules/getting-started/GettingStarted.provider.js
+++ b/modules/web-console/frontend/app/modules/getting-started/GettingStarted.provider.js
@@ -17,101 +17,130 @@
 
 import angular from 'angular';
 
-// Getting started pages.
+/**
+ * @typedef GettingStartedItem
+ * @prop {string} title
+ * @prop {Array<string>} message
+ */
+
+/**
+ * @typedef {Array<GettingStartedItem>} GettingStartedItems
+ */
+
 import PAGES from 'app/data/getting-started.json';
 import templateUrl from 'views/templates/getting-started.tpl.pug';
 
-angular
-    .module('ignite-console.getting-started', [])
-    .provider('igniteGettingStarted', function() {
-        const items = PAGES;
+export function provider() {
+    /**
+     * Getting started pages.
+     * @type {GettingStartedItems}
+     */
+    const items = PAGES;
 
-        this.push = (before, data) => {
-            const idx = _.findIndex(items, {title: before});
+    this.push = (before, data) => {
+        const idx = _.findIndex(items, {title: before});
 
-            if (idx < 0)
-                items.push(data);
-            else
-                items.splice(idx, 0, data);
-        };
+        if (idx < 0)
+            items.push(data);
+        else
+            items.splice(idx, 0, data);
+    };
 
-        this.update = (before, data) => {
-            const idx = _.findIndex(items, {title: before});
+    this.update = (before, data) => {
+        const idx = _.findIndex(items, {title: before});
 
-            if (idx >= 0)
-                items[idx] = data;
-        };
+        if (idx >= 0)
+            items[idx] = data;
+    };
 
-        this.$get = [function() {
-            return items;
-        }];
-    })
-    .service('gettingStarted', ['$rootScope', '$modal', 'igniteGettingStarted', function($root, $modal, igniteGettingStarted) {
-        const _model = igniteGettingStarted;
+    this.$get = function() {
+        return items;
+    };
 
-        let _page = 0;
+    return this;
+}
 
-        const scope = $root.$new();
+/**
+ * @param {ng.IRootScopeService} $root
+ * @param {mgcrea.ngStrap.modal.IModalService} $modal
+ * @param {GettingStartedItems} igniteGettingStarted
+ */
+export function service($root, $modal, igniteGettingStarted) {
+    const _model = igniteGettingStarted;
 
-        scope.ui = {
-            dontShowGettingStarted: false
-        };
+    let _page = 0;
 
-        function _fillPage() {
-            if (_page === 0)
-                scope.title = `${_model[_page].title}`;
-            else
-                scope.title = `${_page}. ${_model[_page].title}`;
+    const scope = $root.$new();
 
-            scope.message = _model[_page].message.join(' ');
-        }
+    scope.ui = {
+        dontShowGettingStarted: false
+    };
+
+    function _fillPage() {
+        if (_page === 0)
+            scope.title = `${_model[_page].title}`;
+        else
+            scope.title = `${_page}. ${_model[_page].title}`;
 
-        scope.isFirst = () => _page === 0;
+        scope.message = _model[_page].message.join(' ');
+    }
 
-        scope.isLast = () => _page === _model.length - 1;
+    scope.isFirst = () => _page === 0;
 
-        scope.next = () => {
-            _page += 1;
+    scope.isLast = () => _page === _model.length - 1;
 
-            _fillPage();
-        };
+    scope.next = () => {
+        _page += 1;
 
-        scope.prev = () => {
-            _page -= 1;
+        _fillPage();
+    };
 
-            _fillPage();
-        };
+    scope.prev = () => {
+        _page -= 1;
 
-        const dialog = $modal({ templateUrl, scope, show: false, backdrop: 'static'});
+        _fillPage();
+    };
 
-        scope.close = () => {
+    const dialog = $modal({ templateUrl, scope, show: false, backdrop: 'static'});
+
+    scope.close = () => {
+        try {
+            localStorage.showGettingStarted = !scope.ui.dontShowGettingStarted;
+        }
+        catch (ignore) {
+            // No-op.
+        }
+
+        dialog.hide();
+    };
+
+    return {
+        /**
+         * @param {boolean} force
+         */
+        tryShow: (force) => {
             try {
-                localStorage.showGettingStarted = !scope.ui.dontShowGettingStarted;
+                scope.ui.dontShowGettingStarted = !(_.isNil(localStorage.showGettingStarted)
+                        || localStorage.showGettingStarted === 'true');
             }
             catch (ignore) {
                 // No-op.
             }
 
-            dialog.hide();
-        };
+            if (force || !scope.ui.dontShowGettingStarted) {
+                _page = 0;
 
-        return {
-            tryShow: (force) => {
-                try {
-                    scope.ui.dontShowGettingStarted = !(_.isNil(localStorage.showGettingStarted)
-                        || localStorage.showGettingStarted === 'true');
-                }
-                catch (ignore) {
-                    // No-op.
-                }
+                _fillPage();
 
-                if (force || !scope.ui.dontShowGettingStarted) {
-                    _page = 0;
+                dialog.$promise.then(dialog.show);
+            }
+        }
+    };
+}
 
-                    _fillPage();
+service.$inject = ['$rootScope', '$modal', 'igniteGettingStarted'];
 
-                    dialog.$promise.then(dialog.show);
-                }
-            }
-        };
-    }]);
+export default angular
+    .module('ignite-console.getting-started', [])
+    .provider('igniteGettingStarted', provider)
+    .service('gettingStarted', service);

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/loading/loading.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/loading/loading.directive.js b/modules/web-console/frontend/app/modules/loading/loading.directive.js
index 8a4ca9f..983e597 100644
--- a/modules/web-console/frontend/app/modules/loading/loading.directive.js
+++ b/modules/web-console/frontend/app/modules/loading/loading.directive.js
@@ -18,7 +18,11 @@
 import template from './loading.pug';
 import './loading.scss';
 
-export default ['igniteLoading', ['IgniteLoading', '$compile', (Loading, $compile) => {
+/**
+ * @param {ReturnType<typeof import('./loading.service').default>} Loading
+ * @param {ng.ICompileService} $compile
+ */
+export default function factory(Loading, $compile) {
     const link = (scope, element) => {
         const compiledTemplate = $compile(template);
 
@@ -48,4 +52,6 @@ export default ['igniteLoading', ['IgniteLoading', '$compile', (Loading, $compil
         restrict: 'A',
         link
     };
-}]];
+}
+
+factory.$inject = ['IgniteLoading', '$compile'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/loading/loading.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/loading/loading.module.js b/modules/web-console/frontend/app/modules/loading/loading.module.js
index 889cd6b..ac9e127 100644
--- a/modules/web-console/frontend/app/modules/loading/loading.module.js
+++ b/modules/web-console/frontend/app/modules/loading/loading.module.js
@@ -22,5 +22,5 @@ import IgniteLoadingService from './loading.service';
 
 angular
     .module('ignite-console.loading', [])
-    .directive(...IgniteLoadingDirective)
-    .service(...IgniteLoadingService);
+    .directive('igniteLoading', IgniteLoadingDirective)
+    .service('IgniteLoading', IgniteLoadingService);

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/loading/loading.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/loading/loading.service.js b/modules/web-console/frontend/app/modules/loading/loading.service.js
index a5c9e7e..0aa02a3 100644
--- a/modules/web-console/frontend/app/modules/loading/loading.service.js
+++ b/modules/web-console/frontend/app/modules/loading/loading.service.js
@@ -15,9 +15,12 @@
  * limitations under the License.
  */
 
-export default ['IgniteLoading', [function() {
+export default function() {
     const _overlays = {};
 
+    /**
+     * @param {string} key
+     */
     const start = (key) => {
         setTimeout(() => {
             const loadingOverlay = _overlays[key];
@@ -26,6 +29,9 @@ export default ['IgniteLoading', [function() {
         });
     };
 
+    /**
+     * @param {string} key
+     */
     const finish = (key) => {
         setTimeout(() => {
             const loadingOverlay = _overlays[key];
@@ -45,4 +51,4 @@ export default ['IgniteLoading', [function() {
         start,
         finish
     };
-}]];
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js b/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js
index f1ae1b2..9b905d7 100644
--- a/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js
+++ b/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js
@@ -15,14 +15,16 @@
  * limitations under the License.
  */
 
-export default ['IgniteNavbar', [function() {
+export default function() {
     const items = [];
 
     this.push = function(data) {
         items.push(data);
     };
 
-    this.$get = [function() {
+    this.$get = function() {
         return items;
-    }];
-}]];
+    };
+
+    return this;
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/navbar/Userbar.provider.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/navbar/Userbar.provider.js b/modules/web-console/frontend/app/modules/navbar/Userbar.provider.js
index 9513641..9b905d7 100644
--- a/modules/web-console/frontend/app/modules/navbar/Userbar.provider.js
+++ b/modules/web-console/frontend/app/modules/navbar/Userbar.provider.js
@@ -15,14 +15,16 @@
  * limitations under the License.
  */
 
-export default ['IgniteUserbar', [function() {
+export default function() {
     const items = [];
 
     this.push = function(data) {
         items.push(data);
     };
 
-    this.$get = [function() {
+    this.$get = function() {
         return items;
-    }];
-}]];
+    };
+
+    return this;
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/navbar/navbar.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/navbar/navbar.directive.js b/modules/web-console/frontend/app/modules/navbar/navbar.directive.js
index 020cfe4..e400cf7 100644
--- a/modules/web-console/frontend/app/modules/navbar/navbar.directive.js
+++ b/modules/web-console/frontend/app/modules/navbar/navbar.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-export default ['igniteNavbar', ['IgniteNavbar', (IgniteNavbar) => {
+export default function factory(IgniteNavbar) {
     function controller() {
         const ctrl = this;
 
@@ -27,4 +27,6 @@ export default ['igniteNavbar', ['IgniteNavbar', (IgniteNavbar) => {
         controller,
         controllerAs: 'navbar'
     };
-}]];
+}
+
+factory.$inject = ['IgniteNavbar'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/navbar/navbar.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/navbar/navbar.module.js b/modules/web-console/frontend/app/modules/navbar/navbar.module.js
index b845cbc..63588c7 100644
--- a/modules/web-console/frontend/app/modules/navbar/navbar.module.js
+++ b/modules/web-console/frontend/app/modules/navbar/navbar.module.js
@@ -27,7 +27,7 @@ angular
 .module('ignite-console.navbar', [
 
 ])
-.provider(...IgniteNavbar)
-.provider(...IgniteUserbar)
-.directive(...igniteNavbar)
-.directive(...igniteUserbar);
+.provider('IgniteNavbar', IgniteNavbar)
+.provider('IgniteUserbar', IgniteUserbar)
+.directive('igniteNavbar', igniteNavbar)
+.directive('igniteUserbar', igniteUserbar);

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/navbar/userbar.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/navbar/userbar.directive.js b/modules/web-console/frontend/app/modules/navbar/userbar.directive.js
index 51f46d4..b636a34 100644
--- a/modules/web-console/frontend/app/modules/navbar/userbar.directive.js
+++ b/modules/web-console/frontend/app/modules/navbar/userbar.directive.js
@@ -15,36 +15,45 @@
  * limitations under the License.
  */
 
-export default ['igniteUserbar', [function() {
-    return {
-        restrict: 'A',
-        controller: ['$rootScope', 'IgniteUserbar', 'AclService', function($root, IgniteUserbar, AclService) {
-            const ctrl = this;
+/**
+ * @param {ng.IRootScopeService} $root
+ * @param {unknown} IgniteUserbar
+ * @param {unknown} AclService
+ */
+function controller($root, IgniteUserbar, AclService) {
+    const ctrl = this;
+
+    this.$onInit = () => {
+        ctrl.items = [
+            {text: 'Profile', sref: 'base.settings.profile'},
+            {text: 'Getting started', click: 'gettingStarted.tryShow(true)'}
+        ];
 
-            this.$onInit = () => {
-                ctrl.items = [
-                    {text: 'Profile', sref: 'base.settings.profile'},
-                    {text: 'Getting started', click: 'gettingStarted.tryShow(true)'}
-                ];
+        const _rebuildSettings = () => {
+            ctrl.items.splice(2);
 
-                const _rebuildSettings = () => {
-                    ctrl.items.splice(2);
+            if (AclService.can('admin_page'))
+                ctrl.items.push({text: 'Admin panel', sref: 'base.settings.admin'});
 
-                    if (AclService.can('admin_page'))
-                        ctrl.items.push({text: 'Admin panel', sref: 'base.settings.admin'});
+            ctrl.items.push(...IgniteUserbar);
 
-                    ctrl.items.push(...IgniteUserbar);
+            if (AclService.can('logout'))
+                ctrl.items.push({text: 'Log out', sref: 'logout'});
+        };
 
-                    if (AclService.can('logout'))
-                        ctrl.items.push({text: 'Log out', sref: 'logout'});
-                };
+        if ($root.user)
+            _rebuildSettings(null, $root.user);
 
-                if ($root.user)
-                    _rebuildSettings(null, $root.user);
+        $root.$on('user', _rebuildSettings);
+    };
+}
+
+controller.$inject = ['$rootScope', 'IgniteUserbar', 'AclService'];
 
-                $root.$on('user', _rebuildSettings);
-            };
-        }],
+export default function() {
+    return {
+        restrict: 'A',
+        controller,
         controllerAs: 'userbar'
     };
-}]];
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/nodes/Nodes.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/nodes/Nodes.service.js b/modules/web-console/frontend/app/modules/nodes/Nodes.service.js
index e231753..9130fc6 100644
--- a/modules/web-console/frontend/app/modules/nodes/Nodes.service.js
+++ b/modules/web-console/frontend/app/modules/nodes/Nodes.service.js
@@ -27,8 +27,8 @@ class Nodes {
     static $inject = ['$q', '$modal'];
 
     /**
-     * @param $q
-     * @param $modal
+     * @param {ng.IQService} $q
+     * @param {mgcrea.ngStrap.modal.IModalService} $modal
      */
     constructor($q, $modal) {
         this.$q = $q;

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/nodes/nodes-dialog.controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/nodes/nodes-dialog.controller.js b/modules/web-console/frontend/app/modules/nodes/nodes-dialog.controller.js
index 2296aed..a0cf80a 100644
--- a/modules/web-console/frontend/app/modules/nodes/nodes-dialog.controller.js
+++ b/modules/web-console/frontend/app/modules/nodes/nodes-dialog.controller.js
@@ -25,7 +25,7 @@ const COLUMNS_DEFS = [
     {displayName: 'OS information', field: 'os', headerTooltip: 'OS information for node\'s host', minWidth: 125}
 ];
 
-export default ['$scope', '$animate', 'uiGridConstants', 'nodes', 'options', function($scope, $animate, uiGridConstants, nodes, options) {
+export default function controller($scope, $animate, uiGridConstants, nodes, options) {
     const $ctrl = this;
 
     const updateSelected = () => {
@@ -65,4 +65,6 @@ export default ['$scope', '$animate', 'uiGridConstants', 'nodes', 'options', fun
         },
         ...options.grid
     };
-}];
+}
+
+controller.$inject = ['$scope', '$animate', 'uiGridConstants', 'nodes', 'options'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/socket.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/socket.module.js b/modules/web-console/frontend/app/modules/socket.module.js
index 3f50295..5a38bdb 100644
--- a/modules/web-console/frontend/app/modules/socket.module.js
+++ b/modules/web-console/frontend/app/modules/socket.module.js
@@ -21,7 +21,7 @@ import io from 'socket.io-client'; // eslint-disable-line no-unused-vars
 angular
 .module('ignite-console.socket', [
 ])
-.provider('igniteSocketFactory', [function() {
+.provider('igniteSocketFactory', function() {
     let _options = {};
 
     /**
@@ -31,11 +31,17 @@ angular
         _options = options;
     };
 
-    this.$get = ['socketFactory', function(socketFactory) {
+    function factory(socketFactory) {
         return function() {
             const ioSocket = io.connect(_options);
 
             return socketFactory({ioSocket});
         };
-    }];
-}]);
+    }
+
+    factory.$inject = ['socketFactory'];
+
+    this.$get = factory;
+
+    return this;
+});

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/states/admin.state.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/admin.state.js b/modules/web-console/frontend/app/modules/states/admin.state.js
index f45421a..68e65cf 100644
--- a/modules/web-console/frontend/app/modules/states/admin.state.js
+++ b/modules/web-console/frontend/app/modules/states/admin.state.js
@@ -21,7 +21,7 @@ angular
 .module('ignite-console.states.admin', [
     'ui.router'
 ])
-.config(['$stateProvider', function($stateProvider) {
+.config(['$stateProvider', /** @param {import('@uirouter/angularjs').StateProvider} $stateProvider */ function($stateProvider) {
     // set up the states
     $stateProvider
     .state('base.settings.admin', {

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/states/errors.state.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/errors.state.js b/modules/web-console/frontend/app/modules/states/errors.state.js
index fcc6a5b..19a1947 100644
--- a/modules/web-console/frontend/app/modules/states/errors.state.js
+++ b/modules/web-console/frontend/app/modules/states/errors.state.js
@@ -23,7 +23,7 @@ angular
     .module('ignite-console.states.errors', [
         'ui.router'
     ])
-    .config(['$stateProvider', function($stateProvider) {
+    .config(['$stateProvider', /** @param {import('@uirouter/angularjs').StateProvider} $stateProvider */ function($stateProvider) {
         // set up the states
         $stateProvider
             .state('404', {

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/states/logout.state.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/logout.state.js b/modules/web-console/frontend/app/modules/states/logout.state.js
index a46f871..9adc81b 100644
--- a/modules/web-console/frontend/app/modules/states/logout.state.js
+++ b/modules/web-console/frontend/app/modules/states/logout.state.js
@@ -20,7 +20,7 @@ import angular from 'angular';
 angular.module('ignite-console.states.logout', [
     'ui.router'
 ])
-.config(['$stateProvider', function($stateProvider) {
+.config(['$stateProvider', /** @param {import('@uirouter/angularjs').StateProvider} $stateProvider */ function($stateProvider) {
     // set up the states
     $stateProvider.state('logout', {
         url: '/logout',

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/states/settings.state.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/settings.state.js b/modules/web-console/frontend/app/modules/states/settings.state.js
index 1651376..e967bad 100644
--- a/modules/web-console/frontend/app/modules/states/settings.state.js
+++ b/modules/web-console/frontend/app/modules/states/settings.state.js
@@ -22,7 +22,7 @@ angular
     .module('ignite-console.states.settings', [
         'ui.router'
     ])
-    .config(['$stateProvider', function($stateProvider) {
+    .config(['$stateProvider', /** @param {import('@uirouter/angularjs').StateProvider} $stateProvider */ function($stateProvider) {
         // Set up the states.
         $stateProvider
             .state('base.settings', {

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/user/Auth.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/user/Auth.service.js b/modules/web-console/frontend/app/modules/user/Auth.service.js
index 744943a..8c3cc4e 100644
--- a/modules/web-console/frontend/app/modules/user/Auth.service.js
+++ b/modules/web-console/frontend/app/modules/user/Auth.service.js
@@ -30,7 +30,11 @@ export default class AuthService {
     /**
      * @param {ng.IHttpService} $http
      * @param {ng.IRootScopeService} $root
+     * @param {import('@uirouter/angularjs').StateService} $state
      * @param {ng.IWindowService} $window
+     * @param {ReturnType<typeof import('app/services/Messages.service').default>} Messages
+     * @param {ReturnType<typeof import('app/modules/getting-started/GettingStarted.provider').service>} gettingStarted
+     * @param {ReturnType<typeof import('./User.service').default>} User
      */
     constructor($http, $root, $state, $window, Messages, gettingStarted, User) {
         this.$http = $http;

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/user/User.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/user/User.service.js b/modules/web-console/frontend/app/modules/user/User.service.js
index 8b9a1e7..3fdb9b9 100644
--- a/modules/web-console/frontend/app/modules/user/User.service.js
+++ b/modules/web-console/frontend/app/modules/user/User.service.js
@@ -15,10 +15,35 @@
  * limitations under the License.
  */
 
-export default ['User', ['$q', '$injector', '$rootScope', '$state', '$http', function($q, $injector, $root, $state, $http) {
+/**
+ * @typedef User
+ * @prop {string} _id
+ * @prop {boolean} admin
+ * @prop {string} country
+ * @prop {string} email
+ * @prop {string} firstName
+ * @prop {string} lastName
+ * @prop {string} lastActivity
+ * @prop {string} lastLogin
+ * @prop {string} registered
+ * @prop {string} token
+ */
+
+/**
+ * @param {ng.IQService} $q
+ * @param {ng.auto.IInjectorService} $injector
+ * @param {ng.IRootScopeService} $root
+ * @param {import('@uirouter/angularjs').StateService} $state
+ * @param {ng.IHttpService} $http
+ */
+export default function User($q, $injector, $root, $state, $http) {
+    /** @type {ng.IPromise<User>} */
     let user;
 
     return {
+        /**
+         * @returns {ng.IPromise<User>}
+         */
         load() {
             return user = $http.post('/api/v1/user')
                 .then(({data}) => {
@@ -48,4 +73,6 @@ export default ['User', ['$q', '$injector', '$rootScope', '$state', '$http', fun
             sessionStorage.removeItem('IgniteDemoMode');
         }
     };
-}]];
+}
+
+User.$inject = ['$q', '$injector', '$rootScope', '$state', '$http'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/modules/user/user.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/user/user.module.js b/modules/web-console/frontend/app/modules/user/user.module.js
index 24dfc8f..9591a98 100644
--- a/modules/web-console/frontend/app/modules/user/user.module.js
+++ b/modules/web-console/frontend/app/modules/user/user.module.js
@@ -21,12 +21,12 @@ import aclData from './permissions';
 import Auth from './Auth.service';
 import User from './User.service';
 
-angular.module('ignite-console.user', [
-    'mm.acl',
-    'ignite-console.config',
-    'ignite-console.core'
-])
-.factory('sessionRecoverer', ['$injector', '$q', function($injector, $q) {
+/**
+ * @param {ng.auto.IInjectorService} $injector
+ * @param {ng.IQService} $q
+ */
+function sessionRecoverer($injector, $q) {
+    /** @type {ng.IHttpInterceptor} */
     return {
         responseError: (response) => {
             // Session has expired
@@ -42,13 +42,18 @@ angular.module('ignite-console.user', [
             return $q.reject(response);
         }
     };
-}])
-.config(['$httpProvider', ($httpProvider) => {
-    $httpProvider.interceptors.push('sessionRecoverer');
-}])
-.service('Auth', Auth)
-.service(...User)
-.run(['$rootScope', '$transitions', 'AclService', 'User', 'IgniteActivitiesData', ($root, $transitions, AclService, User, Activities) => {
+}
+
+sessionRecoverer.$inject = ['$injector', '$q'];
+
+/**
+ * @param {ng.IRootScopeService} $root
+ * @param {import('@uirouter/angularjs').TransitionService} $transitions
+ * @param {unknown} AclService
+ * @param {ReturnType<typeof import('./User.service').default>} User
+ * @param {ReturnType<typeof import('app/components/activities-user-dialog/index').default>} Activities
+ */
+function run($root, $transitions, AclService, User, Activities) {
     AclService.setAbilities(aclData);
     AclService.attachRole('guest');
 
@@ -90,4 +95,19 @@ angular.module('ignite-console.user', [
                 return $state.target(trans.to().failState || '403');
             });
     });
-}]);
+}
+
+run.$inject = ['$rootScope', '$transitions', 'AclService', 'User', 'IgniteActivitiesData'];
+
+angular.module('ignite-console.user', [
+    'mm.acl',
+    'ignite-console.config',
+    'ignite-console.core'
+])
+.factory('sessionRecoverer', sessionRecoverer)
+.config(['$httpProvider', ($httpProvider) => {
+    $httpProvider.interceptors.push('sessionRecoverer');
+}])
+.service('Auth', Auth)
+.service('User', User)
+.run(run);

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/ChartColors.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/ChartColors.service.js b/modules/web-console/frontend/app/services/ChartColors.service.js
index 843aa5c..061ff3f 100644
--- a/modules/web-console/frontend/app/services/ChartColors.service.js
+++ b/modules/web-console/frontend/app/services/ChartColors.service.js
@@ -17,6 +17,6 @@
 
 import COLORS from 'app/data/colors.json';
 
-export default ['IgniteChartColors', function() {
+export default function() {
     return COLORS;
-}];
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/Confirm.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/Confirm.service.js b/modules/web-console/frontend/app/services/Confirm.service.js
index 8c88a40..953bdcd 100644
--- a/modules/web-console/frontend/app/services/Confirm.service.js
+++ b/modules/web-console/frontend/app/services/Confirm.service.js
@@ -56,8 +56,15 @@ export class Confirm {
     }
 }
 
-// Confirm popup service.
-export default ['IgniteConfirm', ['$rootScope', '$q', '$modal', '$animate', function($root, $q, $modal, $animate) {
+/**
+ * Confirm popup service.
+ * @deprecated Use Confirm instead
+ * @param {ng.IRootScopeService} $root
+ * @param {ng.IQService} $q
+ * @param {mgcrea.ngStrap.modal.IModalService} $modal
+ * @param {ng.animate.IAnimateService} $animate
+ */
+export default function IgniteConfirm($root, $q, $modal, $animate) {
     const scope = $root.$new();
 
     const modal = $modal({templateUrl, scope, show: false, backdrop: true});
@@ -106,4 +113,6 @@ export default ['IgniteConfirm', ['$rootScope', '$q', '$modal', '$animate', func
     };
 
     return modal;
-}]];
+}
+
+IgniteConfirm.$inject = ['$rootScope', '$q', '$modal', '$animate'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/CopyToClipboard.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/CopyToClipboard.service.js b/modules/web-console/frontend/app/services/CopyToClipboard.service.js
index 52285a6..f3c6309 100644
--- a/modules/web-console/frontend/app/services/CopyToClipboard.service.js
+++ b/modules/web-console/frontend/app/services/CopyToClipboard.service.js
@@ -15,10 +15,17 @@
  * limitations under the License.
  */
 
-// Service to copy some value to OS clipboard.
-export default ['IgniteCopyToClipboard', ['$window', 'IgniteMessages', function($window, Messages) {
+import angular from 'angular';
+
+/**
+ * Service to copy some value to OS clipboard.
+ * @param {ng.IWindowService} $window
+ * @param {ReturnType<typeof import('./Messages.service').default>} Messages
+ */
+export default function factory($window, Messages) {
     const body = angular.element($window.document.body);
 
+    /** @type {JQuery<HTMLTextAreaElement>} */
     const textArea = angular.element('<textarea/>');
 
     textArea.css({
@@ -27,6 +34,9 @@ export default ['IgniteCopyToClipboard', ['$window', 'IgniteMessages', function(
     });
 
     return {
+        /**
+         * @param {string} toCopy
+         */
         copy(toCopy) {
             textArea.val(toCopy);
 
@@ -47,4 +57,6 @@ export default ['IgniteCopyToClipboard', ['$window', 'IgniteMessages', function(
             textArea.remove();
         }
     };
-}]];
+}
+
+factory.$inject = ['$window', 'IgniteMessages'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/Countries.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/Countries.service.js b/modules/web-console/frontend/app/services/Countries.service.js
index 575951e..2de6716 100644
--- a/modules/web-console/frontend/app/services/Countries.service.js
+++ b/modules/web-console/frontend/app/services/Countries.service.js
@@ -15,17 +15,29 @@
  * limitations under the License.
  */
 
+import _ from 'lodash';
 import COUNTRIES from 'app/data/countries.json';
 
-export default ['IgniteCountries', function() {
+/**
+ * @typedef {{label:string,value:string,code:string}} Country
+ */
+
+export default function() {
     const indexByName = _.keyBy(COUNTRIES, 'label');
     const UNDEFINED_COUNTRY = {label: '', value: '', code: ''};
 
+    /**
+     * @param {string} name
+     * @return {Country}
+     */
     const getByName = (name) => (indexByName[name] || UNDEFINED_COUNTRY);
+    /**
+     * @returns {Array<Country>}
+     */
     const getAll = () => (COUNTRIES);
 
     return {
         getByName,
         getAll
     };
-}];
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/DefaultState.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/DefaultState.js b/modules/web-console/frontend/app/services/DefaultState.js
index db7b3e3..b46bfec 100644
--- a/modules/web-console/frontend/app/services/DefaultState.js
+++ b/modules/web-console/frontend/app/services/DefaultState.js
@@ -15,6 +15,9 @@
  * limitations under the License.
  */
 
+/**
+ * @param {import('@uirouter/angularjs').StateProvider} $stateProvider
+ */
 function DefaultState($stateProvider) {
     const stateName = 'default-state';
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/ErrorParser.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/ErrorParser.service.js b/modules/web-console/frontend/app/services/ErrorParser.service.js
index 9cda8ed..88642b9 100644
--- a/modules/web-console/frontend/app/services/ErrorParser.service.js
+++ b/modules/web-console/frontend/app/services/ErrorParser.service.js
@@ -22,7 +22,7 @@ export default class {
     static $inject = ['JavaTypes'];
 
     /**
-     * @param JavaTypes service.
+     * @param {import('./JavaTypes.service').default} JavaTypes
      */
     constructor(JavaTypes) {
         this.JavaTypes = JavaTypes;

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/ErrorPopover.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/ErrorPopover.service.js b/modules/web-console/frontend/app/services/ErrorPopover.service.js
index bddf436..3b02a7e 100644
--- a/modules/web-console/frontend/app/services/ErrorPopover.service.js
+++ b/modules/web-console/frontend/app/services/ErrorPopover.service.js
@@ -22,10 +22,10 @@ export default class ErrorPopover {
     static $inject = ['$popover', '$anchorScroll', '$timeout', 'IgniteFormUtils'];
 
     /**
-     * @param $popover
-     * @param $anchorScroll
-     * @param $timeout
-     * @param FormUtils
+     * @param {mgcrea.ngStrap.popover.IPopoverService} $popover
+     * @param {ng.IAnchorScrollService} $anchorScroll
+     * @param {ng.ITimeoutService} $timeout
+     * @param {ReturnType<typeof import('app/services/FormUtils.service').default>} FormUtils
      */
     constructor($popover, $anchorScroll, $timeout, FormUtils) {
         this.$popover = $popover;
@@ -41,7 +41,7 @@ export default class ErrorPopover {
     /**
      * Check that element is document area.
      *
-     * @param el Element to check.
+     * @param {HTMLElement} el Element to check.
      * @returns {boolean} True when element in document area.
      */
     static _isElementInViewport(el) {
@@ -58,8 +58,8 @@ export default class ErrorPopover {
     /**
      * Internal show popover message with detected properties.
      *
-     * @param id Id element to show popover message.
-     * @param message Message to show.
+     * @param {string }id Id element to show popover message.
+     * @param {string} message Message to show.
      * @param showTime Time before popover will be hidden.
      */
     _show(id, message, showTime = 5000) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/Focus.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/Focus.service.js b/modules/web-console/frontend/app/services/Focus.service.js
index a285fbc..a152ff1 100644
--- a/modules/web-console/frontend/app/services/Focus.service.js
+++ b/modules/web-console/frontend/app/services/Focus.service.js
@@ -15,9 +15,15 @@
  * limitations under the License.
  */
 
-// Service to transfer focus for specified element.
-export default ['IgniteFocus', ['$timeout', function($timeout) {
+/**
+ * Service to transfer focus for specified element.
+ * @param {ng.ITimeoutService} $timeout
+ */
+export default function factory($timeout) {
     return {
+        /**
+         * @param {string} id Element id
+         */
         move(id) {
             // Timeout makes sure that is invoked after any other event has been triggered.
             // E.g. click events that need to run before the focus or inputs elements that are
@@ -30,4 +36,6 @@ export default ['IgniteFocus', ['$timeout', function($timeout) {
             }, 100);
         }
     };
-}]];
+}
+
+factory.$inject = ['$timeout'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/FormUtils.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/FormUtils.service.js b/modules/web-console/frontend/app/services/FormUtils.service.js
index cda68f7..c8ce4b0 100644
--- a/modules/web-console/frontend/app/services/FormUtils.service.js
+++ b/modules/web-console/frontend/app/services/FormUtils.service.js
@@ -16,7 +16,12 @@
  */
 import _ from 'lodash';
 
-export default ['IgniteFormUtils', ['$window', 'IgniteFocus', '$rootScope', function($window, Focus, $rootScope) {
+/**
+ * @param {ng.IWindowService} $window
+ * @param {ReturnType<typeof import('./Focus.service').default>} Focus
+ * @param {ng.IRootScopeService} $rootScope
+ */
+export default function service($window, Focus, $rootScope) {
     function ensureActivePanel(ui, pnl, focusId) {
         if (ui && ui.loadPanel) {
             const collapses = $('[bs-collapse-target]');
@@ -55,12 +60,13 @@ export default ['IgniteFormUtils', ['$window', 'IgniteFocus', '$rootScope', func
         }
     }
 
+    /** @type {CanvasRenderingContext2D} */
     let context = null;
 
     /**
      * Calculate width of specified text in body's font.
      *
-     * @param text Text to calculate width.
+     * @param {string} text Text to calculate width.
      * @returns {Number} Width of text in pixels.
      */
     function measureText(text) {
@@ -453,4 +459,6 @@ export default ['IgniteFormUtils', ['$window', 'IgniteFocus', '$rootScope', func
         },
         triggerValidation
     };
-}]];
+}
+
+service.$inject = ['$window', 'IgniteFocus', '$rootScope'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/IGFSs.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/IGFSs.js b/modules/web-console/frontend/app/services/IGFSs.js
index de9e43d..c9bde77 100644
--- a/modules/web-console/frontend/app/services/IGFSs.js
+++ b/modules/web-console/frontend/app/services/IGFSs.js
@@ -29,10 +29,16 @@ export default class IGFSs {
         {value: 'DUAL_ASYNC', label: 'DUAL_ASYNC'}
     ];
 
+    /**
+     * @param {ng.IHttpService} $http
+     */
     constructor($http) {
-        Object.assign(this, {$http});
+        this.$http = $http;
     }
 
+    /**
+     * @param {string} igfsID
+     */
     getIGFS(igfsID) {
         return this.$http.get(`/api/v1/configuration/igfs/${igfsID}`);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/InetAddress.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/InetAddress.service.js b/modules/web-console/frontend/app/services/InetAddress.service.js
index abdd8a3..1f50bdf 100644
--- a/modules/web-console/frontend/app/services/InetAddress.service.js
+++ b/modules/web-console/frontend/app/services/InetAddress.service.js
@@ -15,7 +15,9 @@
  * limitations under the License.
  */
 
-export default ['IgniteInetAddress', function() {
+import _ from 'lodash';
+
+export default function() {
     return {
         /**
          * @param {String} ip IP address to check.
@@ -36,18 +38,18 @@ export default ['IgniteInetAddress', function() {
             return regexp.test(hostNameOrIp) || this.validIp(hostNameOrIp);
         },
         /**
-         * @param {int} port Port value to check.
+         * @param {number} port Port value to check.
          * @returns boolean 'true' if given port is valid tcp/udp port range.
          */
         validPort(port) {
             return _.isInteger(port) && port > 0 && port <= 65535;
         },
         /**
-         * @param {int} port Port value to check.
+         * @param {number} port Port value to check.
          * @returns {boolean} 'true' if given port in non system port range(user+dynamic).
          */
         validNonSystemPort(port) {
             return _.isInteger(port) && port >= 1024 && port <= 65535;
         }
     };
-}];
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/LegacyTable.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/LegacyTable.service.js b/modules/web-console/frontend/app/services/LegacyTable.service.js
index 2d795ce..3086f4f 100644
--- a/modules/web-console/frontend/app/services/LegacyTable.service.js
+++ b/modules/web-console/frontend/app/services/LegacyTable.service.js
@@ -16,214 +16,220 @@
  */
 
 // TODO: Refactor this service for legacy tables with more than one input field.
-export default ['IgniteLegacyTable',
-    ['IgniteLegacyUtils', 'IgniteFocus', 'IgniteErrorPopover', function(LegacyUtils, Focus, ErrorPopover) {
-        function _model(item, field) {
-            let path = field.path;
-
-            if (_.isNil(path) || _.isNil(item))
-                return item;
+/**
+ * @param {ReturnType<typeof import('./LegacyUtils.service').default>} LegacyUtils
+ * @param {ReturnType<typeof import('./Focus.service').default>} Focus
+ * @param {import('./ErrorPopover.service').default} ErrorPopover
+ */
+export default function service(LegacyUtils, Focus, ErrorPopover) {
+    function _model(item, field) {
+        let path = field.path;
 
-            path = path.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
-            path = path.replace(/^\./, ''); // strip a leading dot
+        if (_.isNil(path) || _.isNil(item))
+            return item;
 
-            const segs = path.split('.');
-            let root = item;
+        path = path.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
+        path = path.replace(/^\./, ''); // strip a leading dot
 
-            while (segs.length > 0) {
-                const pathStep = segs.shift();
+        const segs = path.split('.');
+        let root = item;
 
-                if (typeof root[pathStep] === 'undefined')
-                    root[pathStep] = {};
+        while (segs.length > 0) {
+            const pathStep = segs.shift();
 
-                root = root[pathStep];
-            }
+            if (typeof root[pathStep] === 'undefined')
+                root[pathStep] = {};
 
-            return root;
+            root = root[pathStep];
         }
 
-        const table = {name: 'none', editIndex: -1};
+        return root;
+    }
 
-        function _tableReset() {
-            delete table.field;
-            table.name = 'none';
-            table.editIndex = -1;
+    const table = {name: 'none', editIndex: -1};
 
-            ErrorPopover.hide();
-        }
+    function _tableReset() {
+        delete table.field;
+        table.name = 'none';
+        table.editIndex = -1;
 
-        function _tableSaveAndReset() {
-            const field = table.field;
+        ErrorPopover.hide();
+    }
 
-            const save = LegacyUtils.isDefined(field) && LegacyUtils.isDefined(field.save);
+    function _tableSaveAndReset() {
+        const field = table.field;
 
-            if (!save || !LegacyUtils.isDefined(field) || field.save(field, table.editIndex, true)) {
-                _tableReset();
+        const save = LegacyUtils.isDefined(field) && LegacyUtils.isDefined(field.save);
 
-                return true;
-            }
+        if (!save || !LegacyUtils.isDefined(field) || field.save(field, table.editIndex, true)) {
+            _tableReset();
 
-            return false;
+            return true;
         }
 
-        function _tableState(field, editIndex, specName) {
-            table.field = field;
-            table.name = specName || field.model;
-            table.editIndex = editIndex;
-        }
+        return false;
+    }
 
-        function _tableUI(tbl) {
-            const ui = tbl.ui;
+    function _tableState(field, editIndex, specName) {
+        table.field = field;
+        table.name = specName || field.model;
+        table.editIndex = editIndex;
+    }
 
-            return ui ? ui : tbl.type;
-        }
+    function _tableUI(tbl) {
+        const ui = tbl.ui;
 
-        function _tableFocus(focusId, index) {
-            Focus.move((index < 0 ? 'new' : 'cur') + focusId + (index >= 0 ? index : ''));
-        }
+        return ui ? ui : tbl.type;
+    }
 
-        function _tablePairValue(filed, index) {
-            return index < 0 ? {key: filed.newKey, value: filed.newValue} : {
-                key: filed.curKey,
-                value: filed.curValue
-            };
-        }
+    function _tableFocus(focusId, index) {
+        Focus.move((index < 0 ? 'new' : 'cur') + focusId + (index >= 0 ? index : ''));
+    }
 
-        function _tableStartEdit(item, tbl, index, save) {
-            _tableState(tbl, index);
+    function _tablePairValue(filed, index) {
+        return index < 0 ? {key: filed.newKey, value: filed.newValue} : {
+            key: filed.curKey,
+            value: filed.curValue
+        };
+    }
 
-            const val = _.get(_model(item, tbl), tbl.model)[index];
+    function _tableStartEdit(item, tbl, index, save) {
+        _tableState(tbl, index);
 
-            const ui = _tableUI(tbl);
+        const val = _.get(_model(item, tbl), tbl.model)[index];
 
-            tbl.save = save;
+        const ui = _tableUI(tbl);
 
-            if (ui === 'table-pair') {
-                tbl.curKey = val[tbl.keyName];
-                tbl.curValue = val[tbl.valueName];
+        tbl.save = save;
 
-                _tableFocus('Key' + tbl.focusId, index);
-            }
-            else if (ui === 'table-db-fields') {
-                tbl.curDatabaseFieldName = val.databaseFieldName;
-                tbl.curDatabaseFieldType = val.databaseFieldType;
-                tbl.curJavaFieldName = val.javaFieldName;
-                tbl.curJavaFieldType = val.javaFieldType;
+        if (ui === 'table-pair') {
+            tbl.curKey = val[tbl.keyName];
+            tbl.curValue = val[tbl.valueName];
 
-                _tableFocus('DatabaseFieldName' + tbl.focusId, index);
-            }
-            else if (ui === 'table-indexes') {
-                tbl.curIndexName = val.name;
-                tbl.curIndexType = val.indexType;
-                tbl.curIndexFields = val.fields;
+            _tableFocus('Key' + tbl.focusId, index);
+        }
+        else if (ui === 'table-db-fields') {
+            tbl.curDatabaseFieldName = val.databaseFieldName;
+            tbl.curDatabaseFieldType = val.databaseFieldType;
+            tbl.curJavaFieldName = val.javaFieldName;
+            tbl.curJavaFieldType = val.javaFieldType;
 
-                _tableFocus(tbl.focusId, index);
-            }
+            _tableFocus('DatabaseFieldName' + tbl.focusId, index);
         }
+        else if (ui === 'table-indexes') {
+            tbl.curIndexName = val.name;
+            tbl.curIndexType = val.indexType;
+            tbl.curIndexFields = val.fields;
 
-        function _tableNewItem(tbl) {
-            _tableState(tbl, -1);
+            _tableFocus(tbl.focusId, index);
+        }
+    }
 
-            const ui = _tableUI(tbl);
+    function _tableNewItem(tbl) {
+        _tableState(tbl, -1);
 
-            if (ui === 'table-pair') {
-                tbl.newKey = null;
-                tbl.newValue = null;
+        const ui = _tableUI(tbl);
 
-                _tableFocus('Key' + tbl.focusId, -1);
-            }
-            else if (ui === 'table-db-fields') {
-                tbl.newDatabaseFieldName = null;
-                tbl.newDatabaseFieldType = null;
-                tbl.newJavaFieldName = null;
-                tbl.newJavaFieldType = null;
+        if (ui === 'table-pair') {
+            tbl.newKey = null;
+            tbl.newValue = null;
 
-                _tableFocus('DatabaseFieldName' + tbl.focusId, -1);
-            }
-            else if (ui === 'table-indexes') {
-                tbl.newIndexName = null;
-                tbl.newIndexType = 'SORTED';
-                tbl.newIndexFields = null;
+            _tableFocus('Key' + tbl.focusId, -1);
+        }
+        else if (ui === 'table-db-fields') {
+            tbl.newDatabaseFieldName = null;
+            tbl.newDatabaseFieldType = null;
+            tbl.newJavaFieldName = null;
+            tbl.newJavaFieldType = null;
 
-                _tableFocus(tbl.focusId, -1);
-            }
+            _tableFocus('DatabaseFieldName' + tbl.focusId, -1);
         }
+        else if (ui === 'table-indexes') {
+            tbl.newIndexName = null;
+            tbl.newIndexType = 'SORTED';
+            tbl.newIndexFields = null;
 
-        return {
-            tableState: _tableState,
-            tableReset: _tableReset,
-            tableSaveAndReset: _tableSaveAndReset,
-            tableNewItem: _tableNewItem,
-            tableNewItemActive(tbl) {
-                return table.name === tbl.model && table.editIndex < 0;
-            },
-            tableEditing(tbl, index) {
-                return table.name === tbl.model && table.editIndex === index;
-            },
-            tableEditedRowIndex() {
-                return table.editIndex;
-            },
-            tableField() {
-                return table.field;
-            },
-            tableStartEdit: _tableStartEdit,
-            tableRemove(item, field, index) {
-                _tableReset();
-
-                _.get(_model(item, field), field.model).splice(index, 1);
-            },
-            tablePairValue: _tablePairValue,
-            tablePairSave(pairValid, item, field, index, stopEdit) {
-                const valid = pairValid(item, field, index, stopEdit);
-
-                if (valid) {
-                    const pairValue = _tablePairValue(field, index);
-
-                    let pairModel = {};
-
-                    const container = _.get(item, field.model);
-
-                    if (index < 0) {
-                        pairModel[field.keyName] = pairValue.key;
-                        pairModel[field.valueName] = pairValue.value;
-
-                        if (container)
-                            container.push(pairModel);
-                        else
-                            _.set(item, field.model, [pairModel]);
+            _tableFocus(tbl.focusId, -1);
+        }
+    }
+
+    return {
+        tableState: _tableState,
+        tableReset: _tableReset,
+        tableSaveAndReset: _tableSaveAndReset,
+        tableNewItem: _tableNewItem,
+        tableNewItemActive(tbl) {
+            return table.name === tbl.model && table.editIndex < 0;
+        },
+        tableEditing(tbl, index) {
+            return table.name === tbl.model && table.editIndex === index;
+        },
+        tableEditedRowIndex() {
+            return table.editIndex;
+        },
+        tableField() {
+            return table.field;
+        },
+        tableStartEdit: _tableStartEdit,
+        tableRemove(item, field, index) {
+            _tableReset();
+
+            _.get(_model(item, field), field.model).splice(index, 1);
+        },
+        tablePairValue: _tablePairValue,
+        tablePairSave(pairValid, item, field, index, stopEdit) {
+            const valid = pairValid(item, field, index, stopEdit);
+
+            if (valid) {
+                const pairValue = _tablePairValue(field, index);
+
+                let pairModel = {};
+
+                const container = _.get(item, field.model);
+
+                if (index < 0) {
+                    pairModel[field.keyName] = pairValue.key;
+                    pairModel[field.valueName] = pairValue.value;
+
+                    if (container)
+                        container.push(pairModel);
+                    else
+                        _.set(item, field.model, [pairModel]);
+
+                    if (!stopEdit)
+                        _tableNewItem(field);
+                }
+                else {
+                    pairModel = container[index];
+
+                    pairModel[field.keyName] = pairValue.key;
+                    pairModel[field.valueName] = pairValue.value;
 
-                        if (!stopEdit)
+                    if (!stopEdit) {
+                        if (index < container.length - 1)
+                            _tableStartEdit(item, field, index + 1);
+                        else
                             _tableNewItem(field);
                     }
-                    else {
-                        pairModel = container[index];
-
-                        pairModel[field.keyName] = pairValue.key;
-                        pairModel[field.valueName] = pairValue.value;
-
-                        if (!stopEdit) {
-                            if (index < container.length - 1)
-                                _tableStartEdit(item, field, index + 1);
-                            else
-                                _tableNewItem(field);
-                        }
-                    }
                 }
+            }
 
-                return valid || stopEdit;
-            },
-            tablePairSaveVisible(field, index) {
-                const pairValue = _tablePairValue(field, index);
+            return valid || stopEdit;
+        },
+        tablePairSaveVisible(field, index) {
+            const pairValue = _tablePairValue(field, index);
 
-                return !LegacyUtils.isEmptyString(pairValue.key) && !LegacyUtils.isEmptyString(pairValue.value);
-            },
-            tableFocusInvalidField(index, id) {
-                _tableFocus(id, index);
+            return !LegacyUtils.isEmptyString(pairValue.key) && !LegacyUtils.isEmptyString(pairValue.value);
+        },
+        tableFocusInvalidField(index, id) {
+            _tableFocus(id, index);
 
-                return false;
-            },
-            tableFieldId(index, id) {
-                return (index < 0 ? 'new' : 'cur') + id + (index >= 0 ? index : '');
-            }
-        };
-    }]];
+            return false;
+        },
+        tableFieldId(index, id) {
+            return (index < 0 ? 'new' : 'cur') + id + (index >= 0 ? index : '');
+        }
+    };
+}
+
+service.$inject = ['IgniteLegacyUtils', 'IgniteFocus', 'IgniteErrorPopover'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e6e8bff/modules/web-console/frontend/app/services/LegacyUtils.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/LegacyUtils.service.js b/modules/web-console/frontend/app/services/LegacyUtils.service.js
index 1aea642..8362669 100644
--- a/modules/web-console/frontend/app/services/LegacyUtils.service.js
+++ b/modules/web-console/frontend/app/services/LegacyUtils.service.js
@@ -16,9 +16,13 @@
  */
 
 import saver from 'file-saver';
+import _ from 'lodash';
 
 // TODO: Refactor this service for legacy tables with more than one input field.
-export default ['IgniteLegacyUtils', ['IgniteErrorPopover', function(ErrorPopover) {
+/**
+ * @param {import('./ErrorPopover.service').default} ErrorPopover
+ */
+export default function service(ErrorPopover) {
     function isDefined(v) {
         return !_.isNil(v);
     }
@@ -547,4 +551,6 @@ export default ['IgniteLegacyUtils', ['IgniteErrorPopover', function(ErrorPopove
             return true;
         }
     };
-}]];
+}
+
+service.$inject = ['IgniteErrorPopover'];