1 /* 2 * Copyright (c) 2024 Shenzhen Kaihong Digital Industry Development 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 #ifndef NAPITUTORIALS_CJSONCOMMON_H 17 #define NAPITUTORIALS_CJSONCOMMON_H 18 19 #include <js_native_api.h> 20 #include <js_native_api_types.h> 21 #include <string> 22 #include <stdio.h> 23 #include <vector> 24 #include "hilog/log.h" 25 #include "napi/native_api.h" 26 #include "cjson/cJSON.h" 27 28 #define GLOBAL_RESMGR (0xFFEE) 29 const unsigned int LOG_PRINT_DOMAIN = 0xFF00; 30 31 constexpr int32_t STR_MAX_SIZES = 200; 32 constexpr int32_t LONG_STR_MAX_SIZES = 1024; 33 34 constexpr uint8_t PARAMS0 = 0; 35 constexpr uint8_t PARAMS1 = 1; 36 constexpr uint8_t PARAMS2 = 2; 37 constexpr uint8_t PARAMS3 = 3; 38 constexpr uint8_t PARAMS4 = 4; 39 constexpr uint8_t PARAMS5 = 5; 40 constexpr uint8_t PARAMS6 = 6; 41 constexpr uint8_t PARAMS7 = 7; 42 constexpr uint8_t PARAMS8 = 8; 43 constexpr uint8_t PARAMS9 = 9; 44 constexpr uint8_t PARAMS10 = 10; 45 constexpr uint8_t PARAMS11 = 11; 46 constexpr uint8_t PARAMS12 = 12; 47 constexpr uint8_t PARAMS100 = 100; 48 49 void getErrMessage(napi_status &status, napi_env &env, const napi_extended_error_info *&extended_error_info, 50 const char *info, const char *tag); 51 52 /* 去除字符串中的换行符,便于查找打印, 公共方法 53 * str: 待去除\n的字符串 54 */ 55 void RemoveNewlines(std::string &str); 56 57 /* 检查JavaScript对象是否为空(不含自己的属性),公共方法 58 * env: 当前环境的句柄,代表当前的Node.js环境 59 * obj: 类型是napi_object 60 * tag: 日志打印标识符 61 */ 62 bool IsEmptyObject(napi_env env, napi_value obj, const char *tag); 63 64 /* 在native初始化js传递的对象, 公共方法 65 * env: 当前环境的句柄,代表当前的Node.js环境 66 * cjsonObj: 从js传递的cJSON对象 67 * jsonObj: 待初始化的native层cJSON对象 68 * tag: 日志打印标识符 69 */ 70 cJSON *initCJSON_Object(napi_env env, napi_value cjsonObj, cJSON *jsonObj, const char *tag); 71 72 /* 在native初始化js传递的对象, 公共方法 73 * env: 当前环境的句柄,代表当前的Node.js环境 74 * cjsonObj: 从js传递的cJSON对象,该对象表示一个数组,如:[{"name":"ann"},{"name":"john"}] 75 * jsonObj: 待初始化的native层cJSON对象 76 * tag: 日志打印标识符 77 * flag: true表示判断是普通array,如:[2,-3,6];false表示判断数组元素是否是对象,如:[{"name":"ann"},{"name":"john"}] 78 * return cJSON: 返回c++ cJSON对象 79 */ 80 cJSON *initCJSON_ArrayObj(napi_env env, napi_value cjsonObj, cJSON *jsonObj, const char *tag, bool flag); 81 82 /* 在native初始化js传递的对象, 公共方法 83 * env: 当前环境的句柄,代表当前的Node.js环境 84 * cjsonObj: 从js传递的cJSON对象,该对象表示一个基本类型的数组,如[9,-2,7] 85 * jsonObj: 待初始化的native层cJSON对象 86 * tag: 日志打印标识符 87 * flag: true表示判断是普通array,如:[2,-3,6];false表示判断数组元素是否是对象,如:[{"name":"ann"},{"name":"john"}] 88 * return cJSON: 返回c++ cJSON对象 89 */ 90 cJSON *initCJSON_Array(napi_env env, napi_value cjsonObj, cJSON *jsonObj, const char *tag, bool flag); 91 92 /* 判断是单纯对象还是arrObj或objArr 93 * env: 当前环境的句柄,代表当前的Node.js环境 94 * cjsonObj: 从js传递的cJSON对象 95 * tag: 日志打印标识 96 * return 布尔值:若对象是array object或者object array返回true,如[{"name":"john"}]或{"testArr":[9,8,7]} 97 */ 98 bool isArrObject(napi_env env, napi_value cjsonObj, const char *tag); 99 100 #endif // NAPITUTORIALS_CJSONCOMMON_H