1/* 2 * Copyright (c) 2023 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 fine grain debugging variable observation 42 // aceConsole debug (...args) 43 } 44 public static applicationError(...args: any): void { 45 aceConsole.error(`FIX THIS APPLICATION ERROR \n`, ...args); 46 } 47} 48 49type TraceArgs = string | number | boolean; 50 51class stateMgmtTrace { 52 public static scopedTrace<T>(codeBlock: () => T, arg1: string, ...args: TraceArgs[]): T { 53 aceTrace.begin(arg1, ...args); 54 let result: T = codeBlock(); 55 aceTrace.end(); 56 return result; 57 } 58} 59 60class errorReport { 61 public static varValueCheckFailed<T>(params: { customComponent: string, variableDeco: string, variableName: string, expectedType: string, value: T }): void { 62 let msg = `@Component '${params.customComponent}': Illegal variable value error with decorated variable ${params.variableDeco} '${params.variableName}': `; 63 msg += `failed validation: '${params.expectedType}`; 64 try { 65 msg += `, attempt to assign value type: '${typeof params.value}'`; 66 msg += `, value: '${JSON.stringify(params.value, null, 4)}'`; 67 } catch (e) { } 68 69 msg += "!"; 70 throw new TypeError(msg); 71 } 72 73 public static varObservationFailed<T>(params: { customComponent: string, variableDeco: string, variableName: string, value: T }): void { 74 let msg = `@Component '${params.customComponent}': decorated variable ${params.variableDeco} '${params.variableName}': `; 75 msg += `its class is neither decorated with '@Observed' nor it is an instance of 'SubscribableAbstract'`; 76 77 try { 78 msg += `, attempt to assign value type: '${typeof params.value}'`; 79 msg += `, value: '${JSON.stringify(params.value, null, 4)}'`; 80 } catch (e) { } 81 82 msg += "!"; 83 84 throw new TypeError(msg); 85 } 86}