1/* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 17/** 18 * state mgmt library uses its own class for logging 19* allows to remap separately from other use of aceConsole 20* 21* everything in this file is framework internal 22*/ 23 24class stateMgmtConsole { 25 public static log (...args : any) : void { 26 aceConsole.log(...args); 27 } 28 public static debug(...args : any) : void { 29 aceConsole.debug(...args); 30 } 31 public static info (...args : any) : void { 32 aceConsole.info(...args); 33 } 34 public static warn (...args : any) : void { 35 aceConsole.warn(...args); 36 } 37 public static error (...args : any) : void { 38 aceConsole.error(...args); 39 } 40 public static propertyAccess (...args : any) : void { 41 // enable for fran gran debugging variables observation 42 // this code line has been left in intentionally 43 // aceConsole.debug(...args); 44 } 45 public static applicationError (...args : any) : void { 46 aceConsole.error(`FIX THIS APPLICATION ERROR \n`, ...args); 47 } 48} 49 50type TraceArgs = string | number | boolean; 51 52class stateMgmtTrace { 53 public static scopedTrace<T>(codeBlock: () => T, arg1: string, ...args: TraceArgs[]): T{ 54 aceTrace.begin(arg1, ...args); 55 let result: T = codeBlock(); 56 aceTrace.end(); 57 return result; 58 } 59} 60 61class errorReport { 62 public static varValueCheckFailed<T>(params : { customComponent : string, variableDeco: string, variableName: string, expectedType: string, value : T }) : void { 63 let msg = `@Component '${params.customComponent}': Illegal variable value error with decorated variable ${params.variableDeco} '${params.variableName}': `; 64 msg += `failed validation: '${params.expectedType}`; 65 try { 66 msg += `, attempt to assign value type: '${typeof params.value}'`; 67 msg += `, value: '${JSON.stringify(params.value, null, 4)}'`; 68 } catch(e) {} 69 70 msg += "!"; 71 throw new TypeError(msg); 72 } 73 74 public static varObservationFailed<T>(params : { customComponent : string, variableDeco: string, variableName: string, value: T }) : void { 75 let msg = `@Component '${params.customComponent}': decorated variable ${params.variableDeco} '${params.variableName}': `; 76 msg += `its class is neither decorated with '@Observed' nor it is an instance of 'SubscribableAbstract'`; 77 78 try { 79 msg += `, attempt to assign value type: '${typeof params.value}'`; 80 msg += `, value: '${JSON.stringify(params.value, null, 4)}'`; 81 } catch(e) {} 82 83 msg += "!"; 84 85 throw new TypeError(msg); 86 } 87}