• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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