MOBILE-3303 lint: Fix linting errors in first implementation

main
Noel De Martin 2020-10-07 10:11:20 +02:00 committed by Dani Palou
parent e1c37437a2
commit 1617c30cc3
12 changed files with 165 additions and 133 deletions

View File

@ -71,9 +71,26 @@ module.exports = {
}, },
], ],
'@typescript-eslint/member-ordering': 'error', '@typescript-eslint/member-ordering': 'error',
'@typescript-eslint/naming-convention': 'error', '@typescript-eslint/naming-convention': [
'error',
{
selector: 'property',
modifiers: ['readonly'],
format: ['UPPER_CASE'],
},
{
selector: 'property',
format: ['camelCase'],
},
],
'@typescript-eslint/no-empty-function': 'error', '@typescript-eslint/no-empty-function': 'error',
'@typescript-eslint/no-empty-interface': 'error', '@typescript-eslint/no-empty-interface': 'off',
'@typescript-eslint/no-explicit-any': [
'warn',
{
fixToUnknown: true,
},
],
'@typescript-eslint/no-inferrable-types': [ '@typescript-eslint/no-inferrable-types': [
'error', 'error',
{ {
@ -113,15 +130,8 @@ module.exports = {
], ],
1, 1,
], ],
'one-var': ['error', 'never'], 'arrow-body-style': ['error', 'as-needed'],
'comma-dangle': ['error', 'always-multiline'], 'comma-dangle': ['error', 'always-multiline'],
'capitalized-comments': [
'error',
'always',
{
ignoreConsecutiveComments: true,
},
],
'constructor-super': 'error', 'constructor-super': 'error',
'curly': 'error', 'curly': 'error',
'default-case': 'error', 'default-case': 'error',
@ -171,6 +181,7 @@ module.exports = {
'no-underscore-dangle': 'error', 'no-underscore-dangle': 'error',
'no-unused-labels': 'error', 'no-unused-labels': 'error',
'no-var': 'error', 'no-var': 'error',
'one-var': ['error', 'never'],
'padding-line-between-statements': [ 'padding-line-between-statements': [
'error', 'error',
{ {
@ -181,9 +192,13 @@ module.exports = {
], ],
'prefer-arrow/prefer-arrow-functions': [ 'prefer-arrow/prefer-arrow-functions': [
'error', 'error',
{ allowStandaloneDeclarations: true }, {
singleReturnOnly: true,
allowStandaloneDeclarations: true,
},
], ],
'prefer-const': 'error', 'prefer-const': 'error',
'prefer-spread': 'off',
'quote-props': [ 'quote-props': [
'error', 'error',
'consistent-as-needed', 'consistent-as-needed',

View File

@ -22,7 +22,7 @@ class CoreSingleton {}
/** /**
* Token that can be used to resolve instances from the injector. * Token that can be used to resolve instances from the injector.
*/ */
export type CoreInjectionToken<Service> = Type<Service> | Type<any> | string; export type CoreInjectionToken<Service> = Type<Service> | Type<unknown> | string;
/** /**
* Singleton class created using the factory. * Singleton class created using the factory.
@ -55,20 +55,20 @@ export class CoreSingletonsFactory {
* provider was defined using a class or the string used in the `provide` key if it was defined using an object. * provider was defined using a class or the string used in the `provide` key if it was defined using an object.
*/ */
makeSingleton<Service>(injectionToken: CoreInjectionToken<Service>): CoreSingletonClass<Service> { makeSingleton<Service>(injectionToken: CoreInjectionToken<Service>): CoreSingletonClass<Service> {
// tslint:disable: no-this-assignment // eslint-disable-next-line @typescript-eslint/no-this-alias
const factory = this; const factory = this;
return class { return class {
private static _instance: Service; private static serviceInstance: Service;
static get instance(): Service { static get instance(): Service {
// Initialize instances lazily. // Initialize instances lazily.
if (!this._instance) { if (!this.serviceInstance) {
this._instance = factory.injector.get(injectionToken); this.serviceInstance = factory.injector.get(injectionToken);
} }
return this._instance; return this.serviceInstance;
} }
}; };

View File

@ -28,79 +28,81 @@ export const enum ContextLevel {
* Static class to contain all the core constants. * Static class to contain all the core constants.
*/ */
export class CoreConstants { export class CoreConstants {
static SECONDS_YEAR = 31536000; /* eslint-disable max-len */
static SECONDS_WEEK = 604800;
static SECONDS_DAY = 86400; static readonly SECONDS_YEAR = 31536000;
static SECONDS_HOUR = 3600; static readonly SECONDS_WEEK = 604800;
static SECONDS_MINUTE = 60; static readonly SECONDS_DAY = 86400;
static WIFI_DOWNLOAD_THRESHOLD = 104857600; // 100MB. static readonly SECONDS_HOUR = 3600;
static DOWNLOAD_THRESHOLD = 10485760; // 10MB. static readonly SECONDS_MINUTE = 60;
static MINIMUM_FREE_SPACE = 10485760; // 10MB. static readonly WIFI_DOWNLOAD_THRESHOLD = 104857600; // 100MB.
static IOS_FREE_SPACE_THRESHOLD = 524288000; // 500MB. static readonly DOWNLOAD_THRESHOLD = 10485760; // 10MB.
static DONT_SHOW_ERROR = 'CoreDontShowError'; static readonly MINIMUM_FREE_SPACE = 10485760; // 10MB.
static NO_SITE_ID = 'NoSite'; static readonly IOS_FREE_SPACE_THRESHOLD = 524288000; // 500MB.
static readonly DONT_SHOW_ERROR = 'CoreDontShowError';
static readonly NO_SITE_ID = 'NoSite';
// Settings constants. // Settings constants.
static SETTINGS_RICH_TEXT_EDITOR = 'CoreSettingsRichTextEditor'; static readonly SETTINGS_RICH_TEXT_EDITOR = 'CoreSettingsRichTextEditor';
static SETTINGS_NOTIFICATION_SOUND = 'CoreSettingsNotificationSound'; static readonly SETTINGS_NOTIFICATION_SOUND = 'CoreSettingsNotificationSound';
static SETTINGS_SYNC_ONLY_ON_WIFI = 'CoreSettingsSyncOnlyOnWifi'; static readonly SETTINGS_SYNC_ONLY_ON_WIFI = 'CoreSettingsSyncOnlyOnWifi';
static SETTINGS_DEBUG_DISPLAY = 'CoreSettingsDebugDisplay'; static readonly SETTINGS_DEBUG_DISPLAY = 'CoreSettingsDebugDisplay';
static SETTINGS_REPORT_IN_BACKGROUND = 'CoreSettingsReportInBackground'; // @deprecated since 3.5.0 static readonly SETTINGS_REPORT_IN_BACKGROUND = 'CoreSettingsReportInBackground'; // @deprecated since 3.5.0
static SETTINGS_SEND_ON_ENTER = 'CoreSettingsSendOnEnter'; static readonly SETTINGS_SEND_ON_ENTER = 'CoreSettingsSendOnEnter';
static SETTINGS_FONT_SIZE = 'CoreSettingsFontSize'; static readonly SETTINGS_FONT_SIZE = 'CoreSettingsFontSize';
static SETTINGS_COLOR_SCHEME = 'CoreSettingsColorScheme'; static readonly SETTINGS_COLOR_SCHEME = 'CoreSettingsColorScheme';
static SETTINGS_ANALYTICS_ENABLED = 'CoreSettingsAnalyticsEnabled'; static readonly SETTINGS_ANALYTICS_ENABLED = 'CoreSettingsAnalyticsEnabled';
// WS constants. // WS constants.
static WS_TIMEOUT = 30000; // Timeout when not in WiFi. static readonly WS_TIMEOUT = 30000; // Timeout when not in WiFi.
static WS_TIMEOUT_WIFI = 30000; // Timeout when in WiFi. static readonly WS_TIMEOUT_WIFI = 30000; // Timeout when in WiFi.
static WS_PREFIX = 'local_mobile_'; static readonly WS_PREFIX = 'local_mobile_';
// Login constants. // Login constants.
static LOGIN_SSO_CODE = 2; // SSO in browser window is required. static readonly LOGIN_SSO_CODE = 2; // SSO in browser window is required.
static LOGIN_SSO_INAPP_CODE = 3; // SSO in embedded browser is required. static readonly LOGIN_SSO_INAPP_CODE = 3; // SSO in embedded browser is required.
static LOGIN_LAUNCH_DATA = 'CoreLoginLaunchData'; static readonly LOGIN_LAUNCH_DATA = 'CoreLoginLaunchData';
// Download status constants. // Download status constants.
static DOWNLOADED = 'downloaded'; static readonly DOWNLOADED = 'downloaded';
static DOWNLOADING = 'downloading'; static readonly DOWNLOADING = 'downloading';
static NOT_DOWNLOADED = 'notdownloaded'; static readonly NOT_DOWNLOADED = 'notdownloaded';
static OUTDATED = 'outdated'; static readonly OUTDATED = 'outdated';
static NOT_DOWNLOADABLE = 'notdownloadable'; static readonly NOT_DOWNLOADABLE = 'notdownloadable';
// Constants from Moodle's resourcelib. // Constants from Moodle's resourcelib.
static RESOURCELIB_DISPLAY_AUTO = 0; // Try the best way. static readonly RESOURCELIB_DISPLAY_AUTO = 0; // Try the best way.
static RESOURCELIB_DISPLAY_EMBED = 1; // Display using object tag. static readonly RESOURCELIB_DISPLAY_EMBED = 1; // Display using object tag.
static RESOURCELIB_DISPLAY_FRAME = 2; // Display inside frame. static readonly RESOURCELIB_DISPLAY_FRAME = 2; // Display inside frame.
static RESOURCELIB_DISPLAY_NEW = 3; // Display normal link in new window. static readonly RESOURCELIB_DISPLAY_NEW = 3; // Display normal link in new window.
static RESOURCELIB_DISPLAY_DOWNLOAD = 4; // Force download of file instead of display. static readonly RESOURCELIB_DISPLAY_DOWNLOAD = 4; // Force download of file instead of display.
static RESOURCELIB_DISPLAY_OPEN = 5; // Open directly. static readonly RESOURCELIB_DISPLAY_OPEN = 5; // Open directly.
static RESOURCELIB_DISPLAY_POPUP = 6; // Open in "emulated" pop-up without navigation. static readonly RESOURCELIB_DISPLAY_POPUP = 6; // Open in "emulated" pop-up without navigation.
// Feature constants. Used to report features that are, or are not, supported by a module. // Feature constants. Used to report features that are, or are not, supported by a module.
static FEATURE_GRADE_HAS_GRADE = 'grade_has_grade'; // True if module can provide a grade. static readonly FEATURE_GRADE_HAS_GRADE = 'grade_has_grade'; // True if module can provide a grade.
static FEATURE_GRADE_OUTCOMES = 'outcomes'; // True if module supports outcomes. static readonly FEATURE_GRADE_OUTCOMES = 'outcomes'; // True if module supports outcomes.
static FEATURE_ADVANCED_GRADING = 'grade_advanced_grading'; // True if module supports advanced grading methods. static readonly FEATURE_ADVANCED_GRADING = 'grade_advanced_grading'; // True if module supports advanced grading methods.
static FEATURE_CONTROLS_GRADE_VISIBILITY = 'controlsgradevisbility'; // True if module controls grade visibility over gradebook. static readonly FEATURE_CONTROLS_GRADE_VISIBILITY = 'controlsgradevisbility'; // True if module controls grade visibility over gradebook.
static FEATURE_PLAGIARISM = 'plagiarism'; // True if module supports plagiarism plugins. static readonly FEATURE_PLAGIARISM = 'plagiarism'; // True if module supports plagiarism plugins.
static FEATURE_COMPLETION_TRACKS_VIEWS = 'completion_tracks_views'; // True if module tracks whether somebody viewed it. static readonly FEATURE_COMPLETION_TRACKS_VIEWS = 'completion_tracks_views'; // True if module tracks whether somebody viewed it.
static FEATURE_COMPLETION_HAS_RULES = 'completion_has_rules'; // True if module has custom completion rules. static readonly FEATURE_COMPLETION_HAS_RULES = 'completion_has_rules'; // True if module has custom completion rules.
static FEATURE_NO_VIEW_LINK = 'viewlink'; // True if module has no 'view' page (like label). static readonly FEATURE_NO_VIEW_LINK = 'viewlink'; // True if module has no 'view' page (like label).
static FEATURE_IDNUMBER = 'idnumber'; // True if module wants support for setting the ID number for grade calculation purposes. static readonly FEATURE_IDNUMBER = 'idnumber'; // True if module wants support for setting the ID number for grade calculation purposes.
static FEATURE_GROUPS = 'groups'; // True if module supports groups. static readonly FEATURE_GROUPS = 'groups'; // True if module supports groups.
static FEATURE_GROUPINGS = 'groupings'; // True if module supports groupings. static readonly FEATURE_GROUPINGS = 'groupings'; // True if module supports groupings.
static FEATURE_MOD_ARCHETYPE = 'mod_archetype'; // Type of module. static readonly FEATURE_MOD_ARCHETYPE = 'mod_archetype'; // Type of module.
static FEATURE_MOD_INTRO = 'mod_intro'; // True if module supports intro editor. static readonly FEATURE_MOD_INTRO = 'mod_intro'; // True if module supports intro editor.
static FEATURE_MODEDIT_DEFAULT_COMPLETION = 'modedit_default_completion'; // True if module has default completion. static readonly FEATURE_MODEDIT_DEFAULT_COMPLETION = 'modedit_default_completion'; // True if module has default completion.
static FEATURE_COMMENT = 'comment'; static readonly FEATURE_COMMENT = 'comment';
static FEATURE_RATE = 'rate'; static readonly FEATURE_RATE = 'rate';
static FEATURE_BACKUP_MOODLE2 = 'backup_moodle2'; // True if module supports backup/restore of moodle2 format. static readonly FEATURE_BACKUP_MOODLE2 = 'backup_moodle2'; // True if module supports backup/restore of moodle2 format.
static FEATURE_SHOW_DESCRIPTION = 'showdescription'; // True if module can show description on course main page. static readonly FEATURE_SHOW_DESCRIPTION = 'showdescription'; // True if module can show description on course main page.
static FEATURE_USES_QUESTIONS = 'usesquestions'; // True if module uses the question bank. static readonly FEATURE_USES_QUESTIONS = 'usesquestions'; // True if module uses the question bank.
// Pssobile archetypes for modules. // Possbile archetypes for modules.
static MOD_ARCHETYPE_OTHER = 0; // Unspecified module archetype. static readonly MOD_ARCHETYPE_OTHER = 0; // Unspecified module archetype.
static MOD_ARCHETYPE_RESOURCE = 1; // Resource-like type module. static readonly MOD_ARCHETYPE_RESOURCE = 1; // Resource-like type module.
static MOD_ARCHETYPE_ASSIGNMENT = 2; // Assignment module archetype. static readonly MOD_ARCHETYPE_ASSIGNMENT = 2; // Assignment module archetype.
static MOD_ARCHETYPE_SYSTEM = 3; // System (not user-addable) module archetype. static readonly MOD_ARCHETYPE_SYSTEM = 3; // System (not user-addable) module archetype.
} }

View File

@ -69,6 +69,6 @@ import { Zip } from '@ionic-native/zip/ngx';
StatusBar, StatusBar,
WebIntent, WebIntent,
Zip, Zip,
] ],
}) })
export class CoreEmulatorModule { } export class CoreEmulatorModule { }

View File

@ -17,7 +17,6 @@ import { Router } from '@angular/router';
import { CoreApp } from '@services/app'; import { CoreApp } from '@services/app';
import { CoreInit } from '@services/init'; import { CoreInit } from '@services/init';
import { CoreConstants } from '@core/constants';
import { SplashScreen } from '@singletons/core.singletons'; import { SplashScreen } from '@singletons/core.singletons';
/** /**
@ -42,7 +41,7 @@ export class CoreLoginInitPage implements OnInit {
const redirectData = CoreApp.instance.getRedirect(); const redirectData = CoreApp.instance.getRedirect();
if (redirectData.siteId) { if (redirectData.siteId) {
// Unset redirect data. // Unset redirect data.
CoreApp.instance.storeRedirect('', '', ''); CoreApp.instance.storeRedirect('', '', {});
// Only accept the redirect if it was stored less than 20 seconds ago. // Only accept the redirect if it was stored less than 20 seconds ago.
if (Date.now() - redirectData.timemodified < 20000) { if (Date.now() - redirectData.timemodified < 20000) {

View File

@ -28,6 +28,7 @@ export class CoreLoginSitePage implements OnInit {
* Initialize the component. * Initialize the component.
*/ */
ngOnInit(): void { ngOnInit(): void {
//
} }
} }

View File

@ -25,19 +25,22 @@ import { CoreLogger } from '@singletons/logger';
/** /**
* Factory to provide some global functionalities, like access to the global app database. * Factory to provide some global functionalities, like access to the global app database.
*
* @description * @description
* Each service or component should be responsible of creating their own database tables. Example: * Each service or component should be responsible of creating their own database tables. Example:
* *
* ```ts
* constructor(appProvider: CoreAppProvider) { * constructor(appProvider: CoreAppProvider) {
* this.appDB = appProvider.getDB(); * this.appDB = appProvider.getDB();
* this.appDB.createTableFromSchema(this.tableSchema); * this.appDB.createTableFromSchema(this.tableSchema);
* } * }
* ```
*/ */
@Injectable() @Injectable()
export class CoreAppProvider { export class CoreAppProvider {
protected DBNAME = 'MoodleMobile'; protected DBNAME = 'MoodleMobile';
protected db: SQLiteDB; protected db: SQLiteDB;
protected logger; protected logger: CoreLogger;
protected ssoAuthenticationPromise: Promise<any>; protected ssoAuthenticationPromise: Promise<any>;
protected isKeyboardShown = false; protected isKeyboardShown = false;
protected _isKeyboardOpening = false; protected _isKeyboardOpening = false;
@ -567,18 +570,18 @@ export class CoreAppProvider {
* *
* @return Object with siteid, state, params and timemodified. * @return Object with siteid, state, params and timemodified.
*/ */
getRedirect(): CoreRedirectData { getRedirect<Params extends Record<string, unknown> = Record<string, unknown>>(): CoreRedirectData<Params> {
if (localStorage && localStorage.getItem) { if (localStorage && localStorage.getItem) {
try { try {
const data: CoreRedirectData = { const paramsJson = localStorage.getItem('CoreRedirectParams');
const data: CoreRedirectData<Params> = {
siteId: localStorage.getItem('CoreRedirectSiteId'), siteId: localStorage.getItem('CoreRedirectSiteId'),
page: localStorage.getItem('CoreRedirectState'), page: localStorage.getItem('CoreRedirectState'),
params: localStorage.getItem('CoreRedirectParams'), timemodified: parseInt(localStorage.getItem('CoreRedirectTime'), 10),
timemodified: parseInt(localStorage.getItem('CoreRedirectTime'), 10)
}; };
if (data.params) { if (paramsJson) {
data.params = JSON.parse(data.params); data.params = JSON.parse(paramsJson);
} }
return data; return data;
@ -597,7 +600,7 @@ export class CoreAppProvider {
* @param page Page to go. * @param page Page to go.
* @param params Page params. * @param params Page params.
*/ */
storeRedirect(siteId: string, page: string, params: any): void { storeRedirect(siteId: string, page: string, params: Record<string, unknown>): void {
if (localStorage && localStorage.setItem) { if (localStorage && localStorage.setItem) {
try { try {
localStorage.setItem('CoreRedirectSiteId', siteId); localStorage.setItem('CoreRedirectSiteId', siteId);
@ -704,7 +707,7 @@ export class CoreApp extends makeSingleton(CoreAppProvider) {}
/** /**
* Data stored for a redirect to another page/site. * Data stored for a redirect to another page/site.
*/ */
export type CoreRedirectData = { export type CoreRedirectData<Params extends Record<string, unknown>> = {
/** /**
* ID of the site to load. * ID of the site to load.
*/ */
@ -718,7 +721,7 @@ export type CoreRedirectData = {
/** /**
* Params to pass to the page. * Params to pass to the page.
*/ */
params?: any; params?: Params;
/** /**
* Timestamp when this redirect was last modified. * Timestamp when this redirect was last modified.

View File

@ -50,8 +50,8 @@ export type CoreInitHandler = {
*/ */
@Injectable() @Injectable()
export class CoreInitDelegate { export class CoreInitDelegate {
static DEFAULT_PRIORITY = 100; // Default priority for init processes. static readonly DEFAULT_PRIORITY = 100; // Default priority for init processes.
static MAX_RECOMMENDED_PRIORITY = 600; static readonly MAX_RECOMMENDED_PRIORITY = 600;
protected initProcesses = {}; protected initProcesses = {};
protected logger: CoreLogger; protected logger: CoreLogger;
@ -77,16 +77,12 @@ export class CoreInitDelegate {
for (const name in this.initProcesses) { for (const name in this.initProcesses) {
ordered.push(this.initProcesses[name]); ordered.push(this.initProcesses[name]);
} }
ordered.sort((a, b) => { ordered.sort((a, b) => b.priority - a.priority);
return b.priority - a.priority;
});
ordered = ordered.map((data: CoreInitHandler) => { ordered = ordered.map((data: CoreInitHandler) => ({
return {
func: this.prepareProcess.bind(this, data), func: this.prepareProcess.bind(this, data),
blocking: !!data.blocking, blocking: !!data.blocking,
}; }));
});
// Execute all the processes in order to solve dependencies. // Execute all the processes in order to solve dependencies.
CoreUtils.instance.executeOrderedPromises(ordered).finally(this.readiness.resolve); CoreUtils.instance.executeOrderedPromises(ordered).finally(this.readiness.resolve);
@ -115,20 +111,14 @@ export class CoreInitDelegate {
* @param data The data of the process. * @param data The data of the process.
* @return Promise of the process. * @return Promise of the process.
*/ */
protected prepareProcess(data: CoreInitHandler): Promise<any> { protected async prepareProcess(data: CoreInitHandler): Promise<void> {
let promise;
this.logger.debug(`Executing init process '${data.name}'`); this.logger.debug(`Executing init process '${data.name}'`);
try { try {
promise = data.load(); await data.load();
} catch (e) { } catch (e) {
this.logger.error('Error while calling the init process \'' + data.name + '\'. ' + e); this.logger.error('Error while calling the init process \'' + data.name + '\'. ' + e);
return;
} }
return promise;
} }
/** /**
@ -136,13 +126,13 @@ export class CoreInitDelegate {
* *
* @return Resolved when the app is initialised. Never rejected. * @return Resolved when the app is initialised. Never rejected.
*/ */
ready(): Promise<any> { async ready(): Promise<void> {
if (typeof this.readiness == 'undefined') { if (typeof this.readiness == 'undefined') {
// Prevent race conditions if this is called before executeInitProcesses. // Prevent race conditions if this is called before executeInitProcesses.
this.initReadiness(); this.initReadiness();
} }
return this.readiness.promise; await this.readiness.promise;
} }
/** /**

View File

@ -85,7 +85,7 @@ export class CoreUtilsProvider {
* @param promises Promises. * @param promises Promises.
* @return Promise resolved if all promises are resolved and rejected if at least 1 promise fails. * @return Promise resolved if all promises are resolved and rejected if at least 1 promise fails.
*/ */
allPromises(promises: Promise<any>[]): Promise<any> { allPromises(promises: Promise<unknown>[]): Promise<void> {
if (!promises || !promises.length) { if (!promises || !promises.length) {
return Promise.resolve(); return Promise.resolve();
} }
@ -366,7 +366,7 @@ export class CoreUtilsProvider {
* - blocking: Boolean. If promise should block the following. * - blocking: Boolean. If promise should block the following.
* @return Promise resolved when all promises are resolved. * @return Promise resolved when all promises are resolved.
*/ */
executeOrderedPromises(orderedPromisesData: any[]): Promise<any> { executeOrderedPromises(orderedPromisesData: OrderedPromiseData[]): Promise<void> {
const promises = []; const promises = [];
let dependency = Promise.resolve(); let dependency = Promise.resolve();
@ -377,17 +377,13 @@ export class CoreUtilsProvider {
// Add the process to the dependency stack. // Add the process to the dependency stack.
promise = dependency.finally(() => { promise = dependency.finally(() => {
let prom;
try { try {
prom = data.func.apply(data.context, data.params || []); return data.function();
} catch (e) { } catch (e) {
this.logger.error(e.message); this.logger.error(e.message);
return; return;
} }
return prom;
}); });
promises.push(promise); promises.push(promise);
@ -1582,5 +1578,20 @@ export type PromiseDefer<T> = {
* *
* @param reason The reject param. * @param reason The reject param.
*/ */
reject?: (reason?: any) => void; reject?: (reason?: unknown) => void;
};
/**
* Data for each entry of executeOrderedPromises.
*/
export type OrderedPromiseData = {
/**
* Function to execute.
*/
function: () => Promise<unknown>;
/**
* Whether the promise should block the following one.
*/
blocking?: boolean;
}; };

View File

@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
import * as moment from 'moment'; import moment from 'moment';
import { environment } from '@/environments/environment'; import { environment } from '@/environments/environment';
/** /**
@ -42,27 +42,33 @@ export class CoreLogger {
static getInstance(className: string): CoreLogger { static getInstance(className: string): CoreLogger {
// Disable log on production. // Disable log on production.
if (environment.production) { if (environment.production) {
/* tslint:next-line no-console */ // eslint-disable-next-line no-console
console.warn('Log is disabled in production app'); console.warn('Log is disabled in production app');
// eslint-disable-next-line @typescript-eslint/no-empty-function
const muted = () => {};
return { return {
log: () => {}, log: muted,
info: () => {}, info: muted,
warn: () => {}, warn: muted,
debug: () => {}, debug: muted,
error: () => {}, error: muted,
}; };
} }
className = className || ''; className = className || '';
/* tslint:disable no-console */
return { return {
// eslint-disable-next-line no-console
log: CoreLogger.prepareLogFn(console.log.bind(console), className), log: CoreLogger.prepareLogFn(console.log.bind(console), className),
// eslint-disable-next-line no-console
info: CoreLogger.prepareLogFn(console.info.bind(console), className), info: CoreLogger.prepareLogFn(console.info.bind(console), className),
// eslint-disable-next-line no-console
warn: CoreLogger.prepareLogFn(console.warn.bind(console), className), warn: CoreLogger.prepareLogFn(console.warn.bind(console), className),
// eslint-disable-next-line no-console
debug: CoreLogger.prepareLogFn(console.debug.bind(console), className), debug: CoreLogger.prepareLogFn(console.debug.bind(console), className),
// eslint-disable-next-line no-console
error: CoreLogger.prepareLogFn(console.error.bind(console), className), error: CoreLogger.prepareLogFn(console.error.bind(console), className),
}; };
} }
@ -87,4 +93,4 @@ export class CoreLogger {
/** /**
* Log function type. * Log function type.
*/ */
type LogFunction = (...data: any[]) => void; type LogFunction = (...data: unknown[]) => void;

View File

@ -29,6 +29,7 @@
"src/**/*.d.ts" "src/**/*.d.ts"
], ],
"exclude": [ "exclude": [
"src/**/*.test.ts" "src/**/*.test.ts",
"src/tests/**"
] ]
} }

View File

@ -17,6 +17,10 @@
"es2018", "es2018",
"dom" "dom"
], ],
"types": [
"jest",
"node"
],
"paths": { "paths": {
"@/*": ["*"], "@/*": ["*"],
"@addon/*": ["app/addon/*"], "@addon/*": ["app/addon/*"],