• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <cstring>
17 #include <vector>
18 
19 #include "commonlibrary/ets_utils/js_util_module/util/js_base64.h"
20 #include "commonlibrary/ets_utils/js_util_module/util/js_textdecoder.h"
21 #include "commonlibrary/ets_utils/js_util_module/util/js_textencoder.h"
22 #include "commonlibrary/ets_utils/js_util_module/util/js_types.h"
23 #include "commonlibrary/ets_utils/js_util_module/util/js_uuid.h"
24 
25 #include "securec.h"
26 #include "utils/log.h"
27 
28 #include "napi/native_api.h"
29 #include "napi/native_node_api.h"
30 #include "jni_helper.h"
31 
32 extern const char _binary_util_js_js_start[];
33 extern const char _binary_util_js_js_end[];
34 extern const char _binary_util_abc_start[];
35 extern const char _binary_util_abc_end[];
36 static const std::vector<std::string> conventFormat = {"utf-8", "UTF-8", "gbk", "GBK", "GB2312", "gb2312",
37                                                        "GB18030", "gb18030"};
38 namespace OHOS::Util {
39     using namespace Commonlibrary::Platform;
IsValidValue(napi_env env,napi_value value)40     static bool IsValidValue(napi_env env, napi_value value)
41     {
42         napi_value undefinedRef = nullptr;
43         napi_value nullRef = nullptr;
44         napi_get_undefined(env, &undefinedRef);
45         napi_get_null(env, &nullRef);
46         bool isUndefined = false;
47         bool isNull = false;
48         napi_strict_equals(env, value, undefinedRef, &isUndefined);
49         napi_strict_equals(env, value, nullRef, &isNull);
50         return !(isUndefined || isNull);
51     }
52 
ApplyMemory(const size_t length)53     static char* ApplyMemory(const size_t length)
54     {
55         if (length == 0) {
56             return nullptr;
57         }
58         char *type = new char[length + 1];
59         if (memset_s(type, length + 1, '\0', length + 1) != EOK) {
60             HILOG_ERROR("type memset_s failed");
61             delete[] type;
62             return nullptr;
63         }
64         return type;
65     }
66 
67     static std::string temp = "cdfijoOs";
DealWithPrintf(const std::string & format,const std::vector<std::string> & value)68     static std::string DealWithPrintf(const std::string &format, const std::vector<std::string> &value)
69     {
70         size_t i = 0;
71         size_t j = 0;
72         std::string str;
73         size_t formatSize = format.size();
74         size_t valueSize = value.size();
75         while (i < formatSize && j < valueSize) {
76             if (format[i] == '%' && (i + 1 < formatSize && format[i + 1] == '%')) {
77                 str += '%';
78                 i += 2; // 2:The array goes back two digits.
79             } else if (format[i] == '%' && (i + 1 < formatSize && (temp.find(format[i + 1])) != std::string::npos)) {
80                 if (format[i + 1] == 'c') {
81                     j++;
82                 } else {
83                     str += value[j++];
84                 }
85                 i += 2; // 2:The array goes back two digits.
86             } else if (format[i] == '%' && (i + 1 < formatSize && (temp.find(format[i + 1])) == std::string::npos)) {
87                 str += '%';
88                 i++;
89             }
90             if (i < formatSize && format[i] != '%') {
91                 size_t pos = 0;
92                 if ((pos = format.find('%', i)) == std::string::npos) {
93                     str += format.substr(i);
94                     i = formatSize;
95                     break;
96                 } else {
97                     str += format.substr(i, pos - i);
98                     i = pos;
99                 }
100             }
101         }
102         while (j < valueSize) {
103             str += " " + value[j++];
104         }
105         if (i < formatSize) {
106             str += format.substr(i);
107         }
108         return str;
109     }
110 
FormatString(napi_env env,std::string & str)111     static napi_value FormatString(napi_env env, std::string &str)
112     {
113         std::string res;
114         size_t strSize = str.size();
115         for (size_t i = 0; i < strSize; ++i) {
116             if (str[i] == '%' && (i + 1 < strSize && temp.find(str[i + 1]) != std::string::npos)) {
117                 if (str[i + 1] == 'o') {
118                     res += "o ";
119                 } else if (str[i + 1] == 'O') {
120                     res += "O ";
121                 } else if (str[i + 1] == 'i') {
122                     res += "i ";
123                 } else if (str[i + 1] == 'j') {
124                     res += "j ";
125                 } else if (str[i + 1] == 'd') {
126                     res += "d ";
127                 } else if (str[i + 1] == 's') {
128                     res += "s ";
129                 } else if (str[i + 1] == 'f') {
130                     res += "f ";
131                 } else if (str[i + 1] == 'c') {
132                     res += "c ";
133                 }
134                 i++;
135             } else if (str[i] == '%' && (i + 1 < strSize && str[i + 1] == '%')) {
136                 i++;
137             }
138         }
139         res = res.substr(0, res.size() - 1);
140         napi_value result = nullptr;
141         napi_create_string_utf8(env, res.c_str(), res.size(), &result);
142         return result;
143     }
144 
FreeMemory(napi_value * address)145     static void FreeMemory(napi_value *address)
146     {
147         delete[] address;
148         address = nullptr;
149     }
150 
DealWithFormatString(napi_env env,napi_callback_info info)151     static napi_value DealWithFormatString(napi_env env, napi_callback_info info)
152     {
153         size_t argc = 1;
154         napi_value argv = nullptr;
155         napi_get_cb_info(env, info, &argc, 0, nullptr, nullptr);
156 
157         napi_get_cb_info(env, info, &argc, &argv, nullptr, nullptr);
158         std::string format = "";
159         size_t formatsize = 0;
160         if (napi_get_value_string_utf8(env, argv, nullptr, 0, &formatsize) != napi_ok) {
161             HILOG_ERROR("can not get argv size");
162             return nullptr;
163         }
164         format.reserve(formatsize + 1);
165         format.resize(formatsize);
166         if (napi_get_value_string_utf8(env, argv, format.data(), formatsize + 1, &formatsize) != napi_ok) {
167             HILOG_ERROR("can not get argv value");
168             return nullptr;
169         }
170         return FormatString(env, format);
171     }
172 
PrintfString(const std::string & format,const std::vector<std::string> & value)173     static std::string PrintfString(const std::string &format, const std::vector<std::string> &value)
174     {
175         std::string printInfo = DealWithPrintf(format, value);
176         return printInfo;
177     }
178 
Printf(napi_env env,napi_callback_info info)179     static napi_value Printf(napi_env env, napi_callback_info info)
180     {
181         napi_value result = nullptr;
182         size_t argc = 0;
183         napi_get_cb_info(env, info, &argc, nullptr, nullptr, nullptr);
184         napi_value *argv = nullptr;
185         if (argc > 0) {
186             argv = new napi_value[argc];
187             napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
188             std::string format = "";
189             size_t formatsize = 0;
190             if (napi_get_value_string_utf8(env, argv[0], nullptr, 0, &formatsize) != napi_ok) {
191                 HILOG_ERROR("can not get argv[0] size");
192                 FreeMemory(argv);
193                 return nullptr;
194             }
195             format.reserve(formatsize);
196             format.resize(formatsize);
197             if (napi_get_value_string_utf8(env, argv[0], format.data(), formatsize + 1, &formatsize) != napi_ok) {
198                 HILOG_ERROR("can not get argv[0] value");
199                 FreeMemory(argv);
200                 return nullptr;
201             }
202             std::vector<std::string> value;
203             for (size_t i = 1; i < argc; i++) {
204                 std::string valueString = "";
205                 size_t valuesize = 0;
206                 if (napi_get_value_string_utf8(env, argv[i], nullptr, 0, &valuesize) != napi_ok) {
207                     HILOG_ERROR("can not get argv[i] size");
208                     FreeMemory(argv);
209                     return nullptr;
210                 }
211                 valueString.reserve(valuesize);
212                 valueString.resize(valuesize);
213                 if (napi_get_value_string_utf8(env, argv[i], valueString.data(),
214                                                valuesize + 1, &valuesize) != napi_ok) {
215                     HILOG_ERROR("can not get argv[i] value");
216                     FreeMemory(argv);
217                     return nullptr;
218                 }
219                 value.push_back(valueString.data());
220             }
221             std::string printInfo = PrintfString(format.data(), value);
222             napi_create_string_utf8(env, printInfo.c_str(), printInfo.size(), &result);
223             FreeMemory(argv);
224             return result;
225         }
226         napi_value res = nullptr;
227         NAPI_CALL(env, napi_get_undefined(env, &res));
228         return res;
229     }
230 
GetErrorString(napi_env env,napi_callback_info info)231     static napi_value GetErrorString(napi_env env, napi_callback_info info)
232     {
233         napi_value thisVar = nullptr;
234         napi_value result = nullptr;
235         std::string errInfo;
236         size_t argc = 1;
237         napi_value argv = nullptr;
238         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &argv, &thisVar, nullptr));
239         int32_t err = 0;
240         NAPI_CALL(env, napi_get_value_int32(env, argv, &err));
241         errInfo = uv_strerror(err);
242         NAPI_CALL(env, napi_create_string_utf8(env, errInfo.c_str(), errInfo.size(), &result));
243         return result;
244     }
245 
RandomUUID(napi_env env,napi_callback_info info)246     static napi_value RandomUUID(napi_env env, napi_callback_info info)
247     {
248         napi_value thisVar = nullptr;
249         size_t requireArgc = 1;
250         size_t argc = 1;
251         napi_value args[1] = { 0 };
252         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
253         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
254         bool flag = false;
255         napi_get_value_bool(env, args[0], &flag);
256         std::string uuidString = OHOS::Util::GetStringUUID(env, flag);
257         napi_value result = nullptr;
258         size_t tempLen = uuidString.size();
259         napi_create_string_utf8(env, uuidString.c_str(), tempLen, &result);
260         return result;
261     }
262 
RandomBinaryUUID(napi_env env,napi_callback_info info)263     static napi_value RandomBinaryUUID(napi_env env, napi_callback_info info)
264     {
265         napi_value thisVar = nullptr;
266         size_t requireArgc = 1;
267         size_t argc = 1;
268         napi_value args[1] = { 0 };
269         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
270         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
271         bool flag = false;
272         napi_get_value_bool(env, args[0], &flag);
273         napi_value result = OHOS::Util::GetBinaryUUID(env, flag);
274         return result;
275     }
276 
ParseUUID(napi_env env,napi_callback_info info)277     static napi_value ParseUUID(napi_env env, napi_callback_info info)
278     {
279         napi_value thisVar = nullptr;
280         size_t requireArgc = 1;
281         size_t argc = 1;
282         napi_value args[1] = { nullptr };
283         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
284         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
285         napi_valuetype valuetype;
286         NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
287         NAPI_ASSERT(env, valuetype == napi_string, "Wrong argument type. String expected.");
288         napi_value result = OHOS::Util::DoParseUUID(env, args[0]);
289         return result;
290     }
291 
SetVec(const napi_status fatSta,const napi_status bomSta,const bool fat,const bool bom,std::vector<int> & paraVec)292     static void SetVec(const napi_status fatSta, const napi_status bomSta, const bool fat, const bool bom,
293         std::vector<int> &paraVec)
294     {
295         if (paraVec.size() != 2) { // 2:The number of parameters is 2
296             return;
297         }
298         if (fatSta == napi_ok) {
299             if (fat) {
300                 paraVec[0] = 1;
301             } else {
302                 paraVec[0] = 0;
303             }
304         }
305         if (bomSta == napi_ok) {
306             if (bom) {
307                 paraVec[1] = 1;
308             } else {
309                 paraVec[1] = 0;
310             }
311         }
312     }
313 
GetSecPara(napi_env env,napi_value valData,std::vector<int> & paraVec)314     static napi_value GetSecPara(napi_env env, napi_value valData, std::vector<int> &paraVec)
315     {
316         napi_value messageKeyFatal = nullptr;
317         const char *messageKeyStrFatal = "fatal";
318         napi_value messageKeyIgnorebom = nullptr;
319         const char *messageKeyStrIgnorebom = "ignoreBOM";
320         napi_value resultFatal = nullptr;
321         napi_value resultIgnorebom = nullptr;
322         bool bResultFat = false;
323         bool bResultIgnbom = false;
324         NAPI_CALL(env, napi_create_string_utf8(env, messageKeyStrFatal, strlen(messageKeyStrFatal),
325             &messageKeyFatal));
326         NAPI_CALL(env, napi_create_string_utf8(env, messageKeyStrIgnorebom, strlen(messageKeyStrIgnorebom),
327             &messageKeyIgnorebom));
328         NAPI_CALL(env, napi_get_property(env, valData, messageKeyFatal, &resultFatal));
329         NAPI_CALL(env, napi_get_property(env, valData, messageKeyIgnorebom, &resultIgnorebom));
330         napi_status naFat = napi_get_value_bool(env, resultFatal, &bResultFat);
331         napi_status naBom = napi_get_value_bool(env, resultIgnorebom, &bResultIgnbom);
332         SetVec(naFat, naBom, bResultFat, bResultIgnbom, paraVec);
333         return nullptr;
334     }
335 
ThrowError(napi_env env,const char * errMessage)336     static napi_value ThrowError(napi_env env, const char* errMessage)
337     {
338         napi_value utilError = nullptr;
339         napi_value code = nullptr;
340         uint32_t errCode = 401;
341         napi_create_uint32(env, errCode, &code);
342         napi_value name = nullptr;
343         std::string errName = "BusinessError";
344         napi_value msg = nullptr;
345         napi_create_string_utf8(env, errMessage, NAPI_AUTO_LENGTH, &msg);
346         napi_create_string_utf8(env, errName.c_str(), NAPI_AUTO_LENGTH, &name);
347         napi_create_error(env, nullptr, msg, &utilError);
348         napi_set_named_property(env, utilError, "code", code);
349         napi_set_named_property(env, utilError, "name", name);
350         napi_throw(env, utilError);
351         napi_value res = nullptr;
352         NAPI_CALL(env, napi_get_undefined(env, &res));
353         return res;
354     }
355 
TextdecoderConstructor(napi_env env,napi_callback_info info)356     static napi_value TextdecoderConstructor(napi_env env, napi_callback_info info)
357     {
358         size_t tempArgc = 0;
359         napi_value thisVar = nullptr;
360         napi_get_cb_info(env, info, &tempArgc, nullptr, &thisVar, nullptr);
361         size_t argc = 0;
362         void *data = nullptr;
363         char *type = nullptr;
364         size_t typeLen = 0;
365         std::vector<int> paraVec(2, 0); // 2: Specifies the size of the container to be applied for.
366         if (tempArgc == 1) {
367             argc = 1;
368             napi_value argv = nullptr;
369             napi_get_cb_info(env, info, &argc, &argv, nullptr, &data);
370             napi_get_value_string_utf8(env, argv, nullptr, 0, &typeLen);
371             if (typeLen > 0) {
372                 type = ApplyMemory(typeLen);
373             }
374             napi_get_value_string_utf8(env, argv, type, typeLen + 1, &typeLen);
375         } else if (tempArgc == 2) { // 2: The number of parameters is 2.
376             argc = 2; // 2: The number of parameters is 2.
377             napi_value argvArr[2] = { 0 }; // 2:The number of parameters is 2
378             napi_get_cb_info(env, info, &argc, argvArr, nullptr, &data);
379             // first para
380             napi_get_value_string_utf8(env, argvArr[0], nullptr, 0, &typeLen);
381             if (typeLen > 0) {
382                 type = ApplyMemory(typeLen);
383             }
384             napi_get_value_string_utf8(env, argvArr[0], type, typeLen + 1, &typeLen);
385             napi_valuetype valueType1;
386             napi_typeof(env, argvArr[1], &valueType1);
387             if (valueType1 != napi_undefined && valueType1 != napi_null) {
388                 // second para
389                 GetSecPara(env, argvArr[1], paraVec);
390             }
391         }
392         std::string enconding = "utf-8";
393         if (type != nullptr) {
394             enconding = type;
395         }
396         delete []type;
397         type = nullptr;
398         auto objectInfo = new TextDecoder(enconding, paraVec);
399         NAPI_CALL(env, napi_wrap(
400             env, thisVar, objectInfo,
401             [](napi_env environment, void *data, void *hint) {
402                 auto objInfo = reinterpret_cast<TextDecoder*>(data);
403                 if (objInfo != nullptr) {
404                     delete objInfo;
405                 }
406             },
407             nullptr, nullptr));
408         return thisVar;
409     }
410 
TextdecoderDecode(napi_env env,napi_callback_info info)411     static napi_value TextdecoderDecode(napi_env env, napi_callback_info info)
412     {
413         size_t tempArgc = 2; // 2:The number of parameters is 2
414         napi_value thisVar = nullptr;
415         napi_get_cb_info(env, info, &tempArgc, nullptr, &thisVar, nullptr);
416         size_t argc = 0;
417         void *dataPara = nullptr;
418         napi_typedarray_type type;
419         size_t length = 0;
420         void *data = nullptr;
421         napi_value arraybuffer = nullptr;
422         size_t byteOffset = 0;
423         bool iStream = false;
424         TextDecoder *textDecoder = nullptr;
425         napi_unwrap(env, thisVar, (void**)&textDecoder);
426         napi_value valStr = nullptr;
427         if (tempArgc == 1) {
428             argc = 1;
429             napi_value argv = nullptr;
430             napi_get_cb_info(env, info, &argc, &argv, nullptr, &dataPara);
431             // first para
432             napi_get_typedarray_info(env, argv, &type, &length, &data, &arraybuffer, &byteOffset);
433             if (type != napi_uint8_array) {
434                 return ThrowError(env, "The type of Parameter must be Uint8Array.");
435             }
436             valStr = textDecoder->Decode(env, argv, iStream);
437         } else if (tempArgc == 2) { // 2: The number of parameters is 2.
438             argc = 2; // 2: The number of parameters is 2.
439             napi_value argvArr[2] = { 0 }; // 2:The number of parameters is 2
440             napi_get_cb_info(env, info, &argc, argvArr, nullptr, &dataPara);
441             // first para
442             napi_get_typedarray_info(env, argvArr[0], &type, &length, &data, &arraybuffer, &byteOffset);
443             // second para
444             if (type != napi_uint8_array) {
445                 return ThrowError(env, "The type of Parameter must be string.");
446             }
447             napi_valuetype valueType1;
448             napi_typeof(env, argvArr[1], &valueType1);
449             if (valueType1 != napi_undefined && valueType1 != napi_null) {
450                 if (valueType1 != napi_object) {
451                     return ThrowError(env, "The type of Parameter must be object.");
452                 }
453                 napi_value messageKeyStream = nullptr;
454                 const char *messageKeyStrStream = "stream";
455 
456                 napi_value resultStream = nullptr;
457                 NAPI_CALL(env, napi_create_string_utf8(env, messageKeyStrStream, strlen(messageKeyStrStream),
458                     &messageKeyStream));
459                 NAPI_CALL(env, napi_get_property(env, argvArr[1], messageKeyStream, &resultStream));
460                 NAPI_CALL(env, napi_get_value_bool(env, resultStream, &iStream));
461             }
462             valStr = textDecoder->Decode(env, argvArr[0], iStream);
463         }
464         return valStr;
465     }
466 
TextdecoderGetEncoding(napi_env env,napi_callback_info info)467     static napi_value TextdecoderGetEncoding(napi_env env, napi_callback_info info)
468     {
469         napi_value thisVar = nullptr;
470         NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr));
471         TextDecoder *textDecoder = nullptr;
472         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&textDecoder));
473         napi_value retVal = textDecoder->GetEncoding(env);
474         return retVal;
475     }
476 
TextdecoderGetFatal(napi_env env,napi_callback_info info)477     static napi_value TextdecoderGetFatal(napi_env env, napi_callback_info info)
478     {
479         napi_value thisVar = nullptr;
480         NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr));
481         TextDecoder *textDecoder = nullptr;
482         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&textDecoder));
483         napi_value retVal = textDecoder->GetFatal(env);
484         return retVal;
485     }
486 
TextdecoderGetIgnoreBOM(napi_env env,napi_callback_info info)487     static napi_value TextdecoderGetIgnoreBOM(napi_env env, napi_callback_info info)
488     {
489         napi_value thisVar = nullptr;
490         NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr));
491         TextDecoder *textDecoder = nullptr;
492         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&textDecoder));
493         napi_value retVal = textDecoder->GetIgnoreBOM(env);
494         return retVal;
495     }
496 
CheckEncodingFormat(const std::string & encoding)497     static bool CheckEncodingFormat(const std::string &encoding)
498     {
499         for (const auto& format : conventFormat) {
500             if (format == encoding) {
501                 return true;
502             }
503         }
504         return false;
505     }
506 
507     // Encoder
TextEncoderConstructor(napi_env env,napi_callback_info info)508     static napi_value TextEncoderConstructor(napi_env env, napi_callback_info info)
509     {
510         size_t argc = 0;
511         napi_value thisVar = nullptr;
512         napi_value src = nullptr;
513         napi_get_cb_info(env, info, &argc, &src, &thisVar, nullptr);
514         std::string enconding = "utf-8";
515         if (argc == 1) {
516             napi_get_cb_info(env, info, &argc, &src, nullptr, nullptr);
517             napi_valuetype valuetype;
518             napi_typeof(env, src, &valuetype);
519             if (valuetype != napi_undefined && valuetype != napi_null) {
520                 if (valuetype != napi_string) {
521                     return ThrowError(env, "The type of Parameter must be string.");
522                 }
523                 size_t bufferSize = 0;
524                 if (napi_get_value_string_utf8(env, src, nullptr, 0, &bufferSize) != napi_ok) {
525                     HILOG_ERROR("can not get src size");
526                     return nullptr;
527                 }
528                 std::string buffer(bufferSize, '\0');
529                 if (napi_get_value_string_utf8(env, src, buffer.data(), bufferSize + 1, &bufferSize) != napi_ok) {
530                     HILOG_ERROR("can not get src value");
531                     return nullptr;
532                 }
533                 NAPI_ASSERT(env, CheckEncodingFormat(buffer),
534                             "Wrong encoding format, only support utf-8 gbk gb2312 gb18030");
535                 enconding = buffer;
536             }
537         }
538         auto object = new TextEncoder(enconding);
539         napi_wrap(
540             env, thisVar, object,
541             [](napi_env environment, void *data, void *hint) {
542                 auto obj = reinterpret_cast<TextEncoder*>(data);
543                 if (obj != nullptr) {
544                     delete obj;
545                 }
546             },
547             nullptr, nullptr);
548         return thisVar;
549     }
550 
GetEncoding(napi_env env,napi_callback_info info)551     static napi_value GetEncoding(napi_env env, napi_callback_info info)
552     {
553         napi_value thisVar = nullptr;
554         NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr));
555 
556         TextEncoder *object = nullptr;
557         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
558 
559         return object->GetEncoding(env);
560     }
561 
Encode(napi_env env,napi_callback_info info)562     static napi_value Encode(napi_env env, napi_callback_info info)
563     {
564         napi_value thisVar = nullptr;
565         size_t requireArgc = 1;
566         size_t argc = 1;
567         napi_value args = nullptr;
568         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
569         NAPI_ASSERT(env, argc <= requireArgc, "Wrong number of arguments");
570 
571         napi_value result;
572         if (argc == 1) {
573             napi_valuetype valuetype;
574             NAPI_CALL(env, napi_typeof(env, args, &valuetype));
575             if (!IsValidValue(env, args)) {
576                 napi_get_undefined(env, &result);
577                 return result;
578             }
579             NAPI_ASSERT(env, valuetype == napi_string, "Wrong argument type. String expected.");
580         } else {
581             napi_get_undefined(env, &result);
582             return result;
583         }
584         TextEncoder *object = nullptr;
585         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
586 
587         result = object->Encode(env, args);
588 
589         return result;
590     }
591 
EncodeIntoOne(napi_env env,napi_callback_info info)592     static napi_value EncodeIntoOne(napi_env env, napi_callback_info info)
593     {
594         napi_value thisVar = nullptr;
595         size_t argc = 1;
596         napi_value args = nullptr;
597         napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr);
598         napi_value result;
599         if (argc == 1) {
600             napi_valuetype valuetype;
601             NAPI_CALL(env, napi_typeof(env, args, &valuetype));
602             if (!IsValidValue(env, args)) {
603                 napi_get_undefined(env, &result);
604                 return result;
605             }
606             if (valuetype != napi_string) {
607                 return ThrowError(env, "The type of Parameter must be string.");
608             }
609         } else {
610             napi_get_undefined(env, &result);
611             return result;
612         }
613         TextEncoder *object = nullptr;
614         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
615         result = object->Encode(env, args);
616         return result;
617     }
618 
EncodeIntoTwo(napi_env env,napi_callback_info info)619     static napi_value EncodeIntoTwo(napi_env env, napi_callback_info info)
620     {
621         napi_value thisVar = nullptr;
622         size_t requireArgc = 2; // 2:The number of parameters is 2
623         size_t argc = 2; // 2:The number of parameters is 2
624         napi_value args[2] = { nullptr }; // 2:The number of parameters is 2
625         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
626 
627         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
628 
629         napi_valuetype valuetype0;
630         NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
631 
632         napi_typedarray_type valuetype1;
633         size_t length = 0;
634         void *data = nullptr;
635         napi_value arraybuffer = nullptr;
636         size_t byteOffset = 0;
637         NAPI_CALL(env, napi_get_typedarray_info(env, args[1], &valuetype1, &length, &data, &arraybuffer, &byteOffset));
638 
639         NAPI_ASSERT(env, valuetype0 == napi_string, "Wrong argument type. String expected.");
640         NAPI_ASSERT(env, valuetype1 == napi_uint8_array, "Wrong argument type. napi_uint8_array expected.");
641 
642         TextEncoder *object = nullptr;
643         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
644 
645         napi_value result = object->EncodeInto(env, args[0], args[1]);
646 
647         return result;
648     }
649 
EncodeIntoUint8Array(napi_env env,napi_callback_info info)650     static napi_value EncodeIntoUint8Array(napi_env env, napi_callback_info info)
651     {
652         napi_value thisVar = nullptr;
653         size_t argc = 2; // 2:The number of parameters is 2
654         napi_value args[2] = { nullptr }; // 2:The number of parameters is 2
655         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
656         napi_valuetype valuetype0;
657         NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
658         napi_typedarray_type valuetype1;
659         size_t length = 0;
660         void *data = nullptr;
661         napi_value arraybuffer = nullptr;
662         size_t byteOffset = 0;
663         napi_get_typedarray_info(env, args[1], &valuetype1, &length, &data, &arraybuffer, &byteOffset);
664         if (valuetype0 != napi_string) {
665             return ThrowError(env, "The type of Parameter must be string.");
666         }
667         if (valuetype1 != napi_uint8_array) {
668             return ThrowError(env, "The type of Parameter must be Uint8Array.");
669         }
670         TextEncoder *object = nullptr;
671         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
672         napi_value result = object->EncodeInto(env, args[0], args[1]);
673         return result;
674     }
675 
EncodeIntoArgs(napi_env env,napi_callback_info info)676     static napi_value EncodeIntoArgs(napi_env env, napi_callback_info info)
677     {
678         napi_value thisVar = nullptr;
679         size_t argc = 0;
680         napi_value args[2] = { nullptr }; // 2:The number of parameters is 2
681         napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr);
682         if (argc == 2 || argc >= 2) { // 2:The number of parameters is 2
683             return EncodeIntoTwo(env, info);
684         }
685         return EncodeIntoOne(env, info);
686     }
687 
TextcoderInit(napi_env env,napi_value exports)688     static napi_value TextcoderInit(napi_env env, napi_value exports)
689     {
690         const char *textEncoderClassName = "TextEncoder";
691         napi_value textEncoderClass = nullptr;
692         napi_property_descriptor textEncoderDesc[] = {
693             DECLARE_NAPI_GETTER("encoding", GetEncoding),
694             DECLARE_NAPI_FUNCTION("encode", Encode),
695             DECLARE_NAPI_FUNCTION("encodeInto", EncodeIntoArgs),
696             DECLARE_NAPI_FUNCTION("encodeIntoUint8Array", EncodeIntoUint8Array),
697 
698         };
699         NAPI_CALL(env, napi_define_class(env, textEncoderClassName, strlen(textEncoderClassName),
700                                          TextEncoderConstructor, nullptr,
701                                          sizeof(textEncoderDesc) / sizeof(textEncoderDesc[0]),
702                                          textEncoderDesc, &textEncoderClass));
703 
704         const char *textDecoderClassName = "TextDecoder";
705         napi_value textDecoderClass = nullptr;
706         napi_property_descriptor textdecoderDesc[] = {
707             DECLARE_NAPI_FUNCTION("decode", TextdecoderDecode),
708             DECLARE_NAPI_FUNCTION("decodeWithStream", TextdecoderDecode),
709             DECLARE_NAPI_GETTER("encoding", TextdecoderGetEncoding),
710             DECLARE_NAPI_GETTER("fatal", TextdecoderGetFatal),
711             DECLARE_NAPI_GETTER("ignoreBOM", TextdecoderGetIgnoreBOM),
712         };
713         NAPI_CALL(env, napi_define_class(env, textDecoderClassName, strlen(textDecoderClassName),
714                                          TextdecoderConstructor, nullptr,
715                                          sizeof(textdecoderDesc) / sizeof(textdecoderDesc[0]),
716                                          textdecoderDesc, &textDecoderClass));
717         napi_property_descriptor desc[] = {
718             DECLARE_NAPI_PROPERTY("TextEncoder", textEncoderClass),
719             DECLARE_NAPI_PROPERTY("TextDecoder", textDecoderClass),
720         };
721 
722         NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
723 
724         napi_value global = nullptr;
725         NAPI_CALL(env, napi_get_global(env, &global));
726         NAPI_CALL(env, napi_set_named_property(env, global, "TextDecoderCreate_", textDecoderClass));
727 
728         return exports;
729     }
730 
Base64Constructor(napi_env env,napi_callback_info info)731     static napi_value Base64Constructor(napi_env env, napi_callback_info info)
732     {
733         napi_value thisVar = nullptr;
734         void *data = nullptr;
735         NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, &data));
736         auto objectInfo = new Base64();
737         napi_wrap(
738             env, thisVar, objectInfo,
739             [](napi_env environment, void *data, void *hint) {
740                 auto objInfo = reinterpret_cast<Base64*>(data);
741                 if (objInfo != nullptr) {
742                     delete objInfo;
743                 }
744             },
745             nullptr, nullptr);
746         return thisVar;
747     }
748 
EncodeBase64(napi_env env,napi_callback_info info)749     static napi_value EncodeBase64(napi_env env, napi_callback_info info)
750     {
751         napi_value thisVar = nullptr;
752         size_t requireArgc = 1;
753         size_t argc = 1;
754         napi_value args[1] = { nullptr };
755         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
756         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
757         napi_typedarray_type valuetype0;
758         size_t length = 0;
759         void *data = nullptr;
760         napi_value arraybuffer = nullptr;
761         size_t byteOffset = 0;
762         NAPI_CALL(env, napi_get_typedarray_info(env, args[0], &valuetype0, &length, &data, &arraybuffer, &byteOffset));
763         NAPI_ASSERT(env, valuetype0 == napi_uint8_array, "Wrong argument type. napi_uint8_array expected.");
764         Base64 *object = nullptr;
765         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
766         napi_value result = object->EncodeSync(env, args[0]);
767         return result;
768     }
769 
EncodeToString(napi_env env,napi_callback_info info)770     static napi_value EncodeToString(napi_env env, napi_callback_info info)
771     {
772         napi_value thisVar = nullptr;
773         size_t requireArgc = 1;
774         size_t argc = 1;
775         napi_value args[1] = { nullptr };
776         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
777         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
778         napi_typedarray_type valuetype0;
779         size_t length = 0;
780         void *data = nullptr;
781         napi_value arraybuffer = nullptr;
782         size_t byteOffset = 0;
783         NAPI_CALL(env, napi_get_typedarray_info(env, args[0], &valuetype0, &length, &data, &arraybuffer, &byteOffset));
784         NAPI_ASSERT(env, valuetype0 == napi_uint8_array, "Wrong argument type. napi_uint8_array expected.");
785         Base64 *object = nullptr;
786         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
787         napi_value result = object->EncodeToStringSync(env, args[0]);
788         return result;
789     }
790 
DecodeBase64(napi_env env,napi_callback_info info)791     static napi_value DecodeBase64(napi_env env, napi_callback_info info)
792     {
793         napi_value thisVar = nullptr;
794         size_t requireArgc = 1;
795         size_t argc = 1;
796         napi_value args[1] = { nullptr };
797         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
798         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
799         napi_typedarray_type valuetype0;
800         napi_valuetype valuetype1;
801         size_t length = 0;
802         void *data = nullptr;
803         napi_value arraybuffer = nullptr;
804         size_t byteOffset = 0;
805         NAPI_CALL(env, napi_typeof(env, args[0], &valuetype1));
806         if (valuetype1 != napi_valuetype::napi_string) {
807             NAPI_CALL(env, napi_get_typedarray_info(env, args[0], &valuetype0, &length,
808                                                     &data, &arraybuffer, &byteOffset));
809         }
810         if ((valuetype1 != napi_valuetype::napi_string) && (valuetype0 != napi_typedarray_type::napi_uint8_array)) {
811             napi_throw_error(env, nullptr, "The parameter type is incorrect");
812             return nullptr;
813         }
814         Base64 *object = nullptr;
815         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
816         napi_value result = object->DecodeSync(env, args[0]);
817         return result;
818     }
EncodeAsync(napi_env env,napi_callback_info info)819     static napi_value EncodeAsync(napi_env env, napi_callback_info info)
820     {
821         napi_value thisVar = nullptr;
822         size_t requireArgc = 1;
823         size_t argc = 1;
824         napi_value args[1] = { nullptr };
825         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
826         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
827         napi_typedarray_type valuetype0;
828         size_t length = 0;
829         void *data = nullptr;
830         napi_value arraybuffer = nullptr;
831         size_t byteOffset = 0;
832         NAPI_CALL(env, napi_get_typedarray_info(env, args[0], &valuetype0, &length, &data, &arraybuffer, &byteOffset));
833         NAPI_ASSERT(env, valuetype0 == napi_uint8_array, "Wrong argument type. napi_uint8_array expected.");
834         Base64 *object = nullptr;
835         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
836         napi_value result = object->Encode(env, args[0]);
837         return result;
838     }
EncodeToStringAsync(napi_env env,napi_callback_info info)839     static napi_value EncodeToStringAsync(napi_env env, napi_callback_info info)
840     {
841         napi_value thisVar = nullptr;
842         size_t requireArgc = 1;
843         size_t argc = 1;
844         napi_value args[1] = { nullptr };
845         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
846         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
847         napi_typedarray_type valuetype0;
848         size_t length = 0;
849         void *data = nullptr;
850         napi_value arraybuffer = nullptr;
851         size_t byteOffset = 0;
852         NAPI_CALL(env, napi_get_typedarray_info(env, args[0], &valuetype0, &length, &data, &arraybuffer, &byteOffset));
853         NAPI_ASSERT(env, valuetype0 == napi_uint8_array, "Wrong argument type. napi_uint8_array expected.");
854         Base64 *object = nullptr;
855         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
856         napi_value result = object->EncodeToString(env, args[0]);
857         return result;
858     }
DecodeAsync(napi_env env,napi_callback_info info)859     static napi_value DecodeAsync(napi_env env, napi_callback_info info)
860     {
861         napi_value thisVar = nullptr;
862         size_t requireArgc = 1;
863         size_t argc = 1;
864         napi_value args[1] = { nullptr };
865         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
866         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
867         napi_typedarray_type valuetype0;
868         napi_valuetype valuetype1;
869         size_t length = 0;
870         void *data = nullptr;
871         napi_value arraybuffer = nullptr;
872         size_t byteOffset = 0;
873         NAPI_CALL(env, napi_typeof(env, args[0], &valuetype1));
874         if (valuetype1 != napi_valuetype::napi_string) {
875             NAPI_CALL(env, napi_get_typedarray_info(env, args[0], &valuetype0,
876                                                     &length, &data, &arraybuffer, &byteOffset));
877         }
878         if ((valuetype1 != napi_valuetype::napi_string) && (valuetype0 != napi_typedarray_type::napi_uint8_array)) {
879             napi_throw_error(env, nullptr, "The parameter type is incorrect");
880             return nullptr;
881         }
882         Base64 *object = nullptr;
883         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
884         napi_value result = object->Decode(env, args[0]);
885         return result;
886     }
887 
EncodeHelper(napi_env env,size_t argc,napi_value args)888     static napi_value EncodeHelper(napi_env env, size_t argc, napi_value args)
889     {
890         size_t requireArgc = 1;
891         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
892         napi_typedarray_type valuetype0;
893         size_t length = 0;
894         void *data = nullptr;
895         napi_value arraybuffer = nullptr;
896         size_t byteOffset = 0;
897         NAPI_CALL(env, napi_get_typedarray_info(env, args, &valuetype0, &length, &data, &arraybuffer, &byteOffset));
898         if (valuetype0 != napi_uint8_array) {
899             return ThrowError(env, "The type of Parameter must be Uint8Array");
900         }
901         return args;
902     }
903 
EncodeToStringHelper(napi_env env,napi_callback_info info)904     static napi_value EncodeToStringHelper(napi_env env, napi_callback_info info)
905     {
906         size_t argc = 1;
907         napi_value args[1] = { nullptr };
908         napi_value thisVar = nullptr;
909         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
910         Base64 *object = nullptr;
911         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
912         return object->EncodeToStringSync(env, EncodeHelper(env, argc, args[0]));
913     }
914 
EncodeBase64Helper(napi_env env,napi_callback_info info)915     static napi_value EncodeBase64Helper(napi_env env, napi_callback_info info)
916     {
917         size_t argc = 1;
918         napi_value args[1] = { nullptr };
919         napi_value thisVar = nullptr;
920         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
921         Base64 *object = nullptr;
922         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
923         return object->EncodeSync(env, EncodeHelper(env, argc, args[0]));
924     }
925 
EncodeAsyncHelper(napi_env env,napi_callback_info info)926     static napi_value EncodeAsyncHelper(napi_env env, napi_callback_info info)
927     {
928         size_t argc = 1;
929         napi_value args[1] = { nullptr };
930         napi_value thisVar = nullptr;
931         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
932         Base64 *object = nullptr;
933         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
934         return object->Encode(env, EncodeHelper(env, argc, args[0]));
935     }
936 
EncodeToStringAsyncHelper(napi_env env,napi_callback_info info)937     static napi_value EncodeToStringAsyncHelper(napi_env env, napi_callback_info info)
938     {
939         size_t argc = 1;
940         napi_value args[1] = { nullptr };
941         napi_value thisVar = nullptr;
942         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
943         Base64 *object = nullptr;
944         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
945         napi_value result = object->EncodeToString(env, args[0]);
946         return result;
947     }
948 
DecodeHelper(napi_env env,size_t argc,napi_value args)949     static napi_value DecodeHelper(napi_env env, size_t argc, napi_value args)
950     {
951         size_t requireArgc = 1;
952         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
953         napi_typedarray_type valuetype0;
954         napi_valuetype valuetype1;
955         size_t length = 0;
956         void *data = nullptr;
957         napi_value arraybuffer = nullptr;
958         size_t byteOffset = 0;
959         NAPI_CALL(env, napi_typeof(env, args, &valuetype1));
960         if (valuetype1 != napi_valuetype::napi_string) {
961             NAPI_CALL(env, napi_get_typedarray_info(env, args, &valuetype0, &length,
962                                                     &data, &arraybuffer, &byteOffset));
963         }
964         if ((valuetype1 != napi_valuetype::napi_string) && (valuetype0 != napi_typedarray_type::napi_uint8_array)) {
965             return ThrowError(env, "The type of Parameter must be Uint8Array or string");
966         }
967         return args;
968     }
969 
DecodeBase64Helper(napi_env env,napi_callback_info info)970     static napi_value DecodeBase64Helper(napi_env env, napi_callback_info info)
971     {
972         size_t argc = 1;
973         napi_value args[1] = { nullptr };
974         napi_value thisVar = nullptr;
975         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
976         Base64 *object = nullptr;
977         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
978         return object->DecodeSync(env, DecodeHelper(env, argc, args[0]));
979     }
980 
DecodeAsyncHelper(napi_env env,napi_callback_info info)981     static napi_value DecodeAsyncHelper(napi_env env, napi_callback_info info)
982     {
983         size_t argc = 1;
984         napi_value args[1] = { nullptr };
985         napi_value thisVar = nullptr;
986         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr));
987         Base64 *object = nullptr;
988         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
989         return object->Decode(env, DecodeHelper(env, argc, args[0]));
990     }
991 
992     // Types
TypesConstructor(napi_env env,napi_callback_info info)993     static napi_value TypesConstructor(napi_env env, napi_callback_info info)
994     {
995         napi_value thisVar = nullptr;
996         void* data = nullptr;
997         NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, &data));
998         auto objectInfo = new Types();
999         napi_wrap(
1000             env, thisVar, objectInfo,
1001             [](napi_env environment, void* data, void* hint) {
1002                 auto objectInformation = reinterpret_cast<Types*>(data);
1003                 if (objectInformation != nullptr) {
1004                     delete objectInformation;
1005                 }
1006             },
1007             nullptr, nullptr);
1008         return thisVar;
1009     }
1010 
IsAnyArrayBuffer(napi_env env,napi_callback_info info)1011     static napi_value IsAnyArrayBuffer(napi_env env, napi_callback_info info)
1012     {
1013         napi_value thisVar = nullptr;
1014         size_t argc = 1;
1015         napi_value args = nullptr;
1016         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1017         Types* object = nullptr;
1018         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1019         napi_value rst = object->IsAnyArrayBuffer(env, args);
1020         return rst;
1021     }
1022 
IsArrayBufferView(napi_env env,napi_callback_info info)1023     static napi_value IsArrayBufferView(napi_env env, napi_callback_info info)
1024     {
1025         napi_value thisVar = nullptr;
1026         size_t argc = 1;
1027         napi_value args = nullptr;
1028         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1029         Types* object = nullptr;
1030         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1031         napi_value rst = object->IsArrayBufferView(env, args);
1032         return rst;
1033     }
1034 
IsArgumentsObject(napi_env env,napi_callback_info info)1035     static napi_value IsArgumentsObject(napi_env env, napi_callback_info info)
1036     {
1037         napi_value thisVar = nullptr;
1038         size_t argc = 1;
1039         napi_value args = nullptr;
1040         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1041         Types* object = nullptr;
1042         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1043         napi_value rst = object->IsArgumentsObject(env, args);
1044         return rst;
1045     }
1046 
IsArrayBuffer(napi_env env,napi_callback_info info)1047     static napi_value IsArrayBuffer(napi_env env, napi_callback_info info)
1048     {
1049         napi_value thisVar = nullptr;
1050         size_t argc = 1;
1051         napi_value args = nullptr;
1052         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1053         Types* object = nullptr;
1054         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1055         napi_value rst = object->IsArrayBuffer(env, args);
1056         return rst;
1057     }
1058 
IsAsyncFunction(napi_env env,napi_callback_info info)1059     static napi_value IsAsyncFunction(napi_env env, napi_callback_info info)
1060     {
1061         napi_value thisVar = nullptr;
1062         size_t argc = 1;
1063         napi_value args = nullptr;
1064         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1065         Types* object = nullptr;
1066         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1067         napi_value rst = object->IsAsyncFunction(env, args);
1068         return rst;
1069     }
1070 
IsBigInt64Array(napi_env env,napi_callback_info info)1071     static napi_value IsBigInt64Array(napi_env env, napi_callback_info info)
1072     {
1073         napi_value thisVar = nullptr;
1074         size_t argc = 1;
1075         napi_value args = nullptr;
1076         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1077         Types* object = nullptr;
1078         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1079         napi_value rst = object->IsBigInt64Array(env, args);
1080         return rst;
1081     }
1082 
IsBigUint64Array(napi_env env,napi_callback_info info)1083     static napi_value IsBigUint64Array(napi_env env, napi_callback_info info)
1084     {
1085         napi_value thisVar = nullptr;
1086         size_t argc = 1;
1087         napi_value args = nullptr;
1088         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1089         Types* object = nullptr;
1090         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1091         napi_value rst = object->IsBigUint64Array(env, args);
1092         return rst;
1093     }
1094 
IsBooleanObject(napi_env env,napi_callback_info info)1095     static napi_value IsBooleanObject(napi_env env, napi_callback_info info)
1096     {
1097         napi_value thisVar = nullptr;
1098         size_t argc = 1;
1099         napi_value args = nullptr;
1100         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1101         Types* object = nullptr;
1102         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1103         napi_value rst = object->IsBooleanObject(env, args);
1104         return rst;
1105     }
1106 
IsBoxedPrimitive(napi_env env,napi_callback_info info)1107     static napi_value IsBoxedPrimitive(napi_env env, napi_callback_info info)
1108     {
1109         napi_value thisVar = nullptr;
1110         size_t argc = 1;
1111         napi_value args = nullptr;
1112         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1113         Types* object = nullptr;
1114         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1115         napi_value rst = object->IsBoxedPrimitive(env, args);
1116         return rst;
1117     }
1118 
IsDataView(napi_env env,napi_callback_info info)1119     static napi_value IsDataView(napi_env env, napi_callback_info info)
1120     {
1121         napi_value thisVar = nullptr;
1122         size_t argc = 1;
1123         napi_value args = nullptr;
1124         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1125         Types* object = nullptr;
1126         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1127         napi_value rst = object->IsDataView(env, args);
1128         return rst;
1129     }
1130 
IsDate(napi_env env,napi_callback_info info)1131     static napi_value IsDate(napi_env env, napi_callback_info info)
1132     {
1133         napi_value thisVar = nullptr;
1134         size_t argc = 1;
1135         napi_value args = nullptr;
1136         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1137         Types* object = nullptr;
1138         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1139         napi_value rst = object->IsDate(env, args);
1140         return rst;
1141     }
1142 
IsExternal(napi_env env,napi_callback_info info)1143     static napi_value IsExternal(napi_env env, napi_callback_info info)
1144     {
1145         napi_value thisVar = nullptr;
1146         size_t argc = 1;
1147         napi_value args = nullptr;
1148         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1149         Types* object = nullptr;
1150         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1151         napi_value rst = object->IsExternal(env, args);
1152         return rst;
1153     }
1154 
IsFloat32Array(napi_env env,napi_callback_info info)1155     static napi_value IsFloat32Array(napi_env env, napi_callback_info info)
1156     {
1157         napi_value thisVar = nullptr;
1158         size_t argc = 1;
1159         napi_value args = nullptr;
1160         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1161         Types* object = nullptr;
1162         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1163         napi_value rst = object->IsFloat32Array(env, args);
1164         return rst;
1165     }
1166 
IsFloat64Array(napi_env env,napi_callback_info info)1167     static napi_value IsFloat64Array(napi_env env, napi_callback_info info)
1168     {
1169         napi_value thisVar = nullptr;
1170         size_t argc = 1;
1171         napi_value args = nullptr;
1172         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1173         Types* object = nullptr;
1174         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1175         napi_value rst = object->IsFloat64Array(env, args);
1176         return rst;
1177     }
1178 
IsGeneratorFunction(napi_env env,napi_callback_info info)1179     static napi_value IsGeneratorFunction(napi_env env, napi_callback_info info)
1180     {
1181         napi_value thisVar = nullptr;
1182         size_t argc = 1;
1183         napi_value args = nullptr;
1184         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1185         Types* object = nullptr;
1186         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1187         napi_value rst = object->IsGeneratorFunction(env, args);
1188         return rst;
1189     }
1190 
IsGeneratorObject(napi_env env,napi_callback_info info)1191     static napi_value IsGeneratorObject(napi_env env, napi_callback_info info)
1192     {
1193         napi_value thisVar = nullptr;
1194         size_t requireArgc = 1;
1195         size_t argc = 1;
1196         napi_value args = nullptr;
1197         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1198         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1199         Types* object = nullptr;
1200         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1201         napi_value result = object->IsGeneratorObject(env, args);
1202         return result;
1203     }
1204 
IsInt8Array(napi_env env,napi_callback_info info)1205     static napi_value IsInt8Array(napi_env env, napi_callback_info info)
1206     {
1207         napi_value thisVar = nullptr;
1208         size_t requireArgc = 1;
1209         size_t argc = 1;
1210         napi_value args = nullptr;
1211         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1212         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1213         Types* object = nullptr;
1214         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1215         napi_value result = object->IsInt8Array(env, args);
1216         return result;
1217     }
1218 
IsInt16Array(napi_env env,napi_callback_info info)1219     static napi_value IsInt16Array(napi_env env, napi_callback_info info)
1220     {
1221         napi_value thisVar = nullptr;
1222         size_t requireArgc = 1;
1223         size_t argc = 1;
1224         napi_value args = nullptr;
1225         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1226         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1227         Types* object = nullptr;
1228         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1229         napi_value result = object->IsInt16Array(env, args);
1230         return result;
1231     }
1232 
IsInt32Array(napi_env env,napi_callback_info info)1233     static napi_value IsInt32Array(napi_env env, napi_callback_info info)
1234     {
1235         napi_value thisVar = nullptr;
1236         size_t requireArgc = 1;
1237         size_t argc = 1;
1238         napi_value args = nullptr;
1239         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1240         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1241         Types* object = nullptr;
1242         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1243         napi_value result = object->IsInt32Array(env, args);
1244         return result;
1245     }
1246 
IsMap(napi_env env,napi_callback_info info)1247     static napi_value IsMap(napi_env env, napi_callback_info info)
1248     {
1249         napi_value thisVar = nullptr;
1250         size_t requireArgc = 1;
1251         size_t argc = 1;
1252         napi_value args = nullptr;
1253         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1254         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1255         Types* object = nullptr;
1256         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1257         napi_value result = object->IsMap(env, args);
1258         return result;
1259     }
1260 
IsMapIterator(napi_env env,napi_callback_info info)1261     static napi_value IsMapIterator(napi_env env, napi_callback_info info)
1262     {
1263         napi_value thisVar = nullptr;
1264         size_t requireArgc = 1;
1265         size_t argc = 1;
1266         napi_value args = nullptr;
1267         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1268         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1269         Types* object = nullptr;
1270         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1271         napi_value result = object->IsMapIterator(env, args);
1272         return result;
1273     }
1274 
IsModuleNamespaceObject(napi_env env,napi_callback_info info)1275     static napi_value IsModuleNamespaceObject(napi_env env, napi_callback_info info)
1276     {
1277         napi_value thisVar = nullptr;
1278         size_t requireArgc = 1;
1279         size_t argc = 1;
1280         napi_value args = nullptr;
1281         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1282         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1283         Types* object = nullptr;
1284         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1285         napi_value result = object->IsModuleNamespaceObject(env, args);
1286         return result;
1287     }
1288 
IsNativeError(napi_env env,napi_callback_info info)1289     static napi_value IsNativeError(napi_env env, napi_callback_info info)
1290     {
1291         napi_value thisVar = nullptr;
1292         size_t requireArgc = 1;
1293         size_t argc = 1;
1294         napi_value args = nullptr;
1295         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1296         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1297         Types* object = nullptr;
1298         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1299         napi_value result = object->IsNativeError(env, args);
1300         return result;
1301     }
1302 
IsNumberObject(napi_env env,napi_callback_info info)1303     static napi_value IsNumberObject(napi_env env, napi_callback_info info)
1304     {
1305         napi_value thisVar = nullptr;
1306         size_t requireArgc = 1;
1307         size_t argc = 1;
1308         napi_value args = nullptr;
1309         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1310         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1311         Types* object = nullptr;
1312         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1313         napi_value result = object->IsNumberObject(env, args);
1314         return result;
1315     }
1316 
IsPromise(napi_env env,napi_callback_info info)1317     static napi_value IsPromise(napi_env env, napi_callback_info info)
1318     {
1319         napi_value thisVar = nullptr;
1320         size_t requireArgc = 1;
1321         size_t argc = 1;
1322         napi_value args = nullptr;
1323         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1324         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1325         Types* object = nullptr;
1326         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1327         napi_value result = object->IsPromise(env, args);
1328         return result;
1329     }
1330 
IsProxy(napi_env env,napi_callback_info info)1331     static napi_value IsProxy(napi_env env, napi_callback_info info)
1332     {
1333         napi_value thisVar = nullptr;
1334         size_t requireArgc = 1;
1335         size_t argc = 1;
1336         napi_value args = nullptr;
1337         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1338         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1339         Types* object = nullptr;
1340         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1341         napi_value result = object->IsProxy(env, args);
1342         return result;
1343     }
1344 
IsRegExp(napi_env env,napi_callback_info info)1345     static napi_value IsRegExp(napi_env env, napi_callback_info info)
1346     {
1347         napi_value thisVar = nullptr;
1348         size_t requireArgc = 1;
1349         size_t argc = 1;
1350         napi_value args = nullptr;
1351         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1352         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1353         Types* object = nullptr;
1354         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1355         napi_value result = object->IsRegExp(env, args);
1356         return result;
1357     }
1358 
IsSet(napi_env env,napi_callback_info info)1359     static napi_value IsSet(napi_env env, napi_callback_info info)
1360     {
1361         napi_value thisVar = nullptr;
1362         size_t requireArgc = 1;
1363         size_t argc = 1;
1364         napi_value args = nullptr;
1365         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1366         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1367         Types* object = nullptr;
1368         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1369         napi_value result = object->IsSet(env, args);
1370         return result;
1371     }
1372 
IsSetIterator(napi_env env,napi_callback_info info)1373     static napi_value IsSetIterator(napi_env env, napi_callback_info info)
1374     {
1375         napi_value thisVar = nullptr;
1376         size_t requireArgc = 1;
1377         size_t argc = 1;
1378         napi_value args = nullptr;
1379         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1380         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1381         Types* object = nullptr;
1382         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1383         napi_value result = object->IsSetIterator(env, args);
1384         return result;
1385     }
1386 
IsSharedArrayBuffer(napi_env env,napi_callback_info info)1387     static napi_value IsSharedArrayBuffer(napi_env env, napi_callback_info info)
1388     {
1389         napi_value thisVar = nullptr;
1390         size_t requireArgc = 1;
1391         size_t argc = 1;
1392         napi_value args = nullptr;
1393         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1394         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1395         Types* object = nullptr;
1396         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1397         napi_value result = object->IsSharedArrayBuffer(env, args);
1398         return result;
1399     }
1400 
IsStringObject(napi_env env,napi_callback_info info)1401     static napi_value IsStringObject(napi_env env, napi_callback_info info)
1402     {
1403         napi_value thisVar = nullptr;
1404         size_t requireArgc = 1;
1405         size_t argc = 1;
1406         napi_value args = nullptr;
1407         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1408         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1409         Types* object = nullptr;
1410         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1411         napi_value result = object->IsStringObject(env, args);
1412         return result;
1413     }
1414 
IsSymbolObject(napi_env env,napi_callback_info info)1415     static napi_value IsSymbolObject(napi_env env, napi_callback_info info)
1416     {
1417         napi_value thisVar = nullptr;
1418         size_t requireArgc = 1;
1419         size_t argc = 1;
1420         napi_value args = nullptr;
1421         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1422         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1423         Types* object = nullptr;
1424         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1425         napi_value result = object->IsSymbolObject(env, args);
1426         return result;
1427     }
1428 
IsTypedArray(napi_env env,napi_callback_info info)1429     static napi_value IsTypedArray(napi_env env, napi_callback_info info)
1430     {
1431         napi_value thisVar = nullptr;
1432         size_t requireArgc = 1;
1433         size_t argc = 1;
1434         napi_value args = nullptr;
1435         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1436         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1437         Types* object = nullptr;
1438         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1439         napi_value result = object->IsTypedArray(env, args);
1440         return result;
1441     }
1442 
IsUint8Array(napi_env env,napi_callback_info info)1443     static napi_value IsUint8Array(napi_env env, napi_callback_info info)
1444     {
1445         napi_value thisVar = nullptr;
1446         size_t requireArgc = 1;
1447         size_t argc = 1;
1448         napi_value args = nullptr;
1449         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1450         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1451         Types* object = nullptr;
1452         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1453         napi_value result = object->IsUint8Array(env, args);
1454         return result;
1455     }
1456 
IsUint8ClampedArray(napi_env env,napi_callback_info info)1457     static napi_value IsUint8ClampedArray(napi_env env, napi_callback_info info)
1458     {
1459         napi_value thisVar = nullptr;
1460         size_t requireArgc = 1;
1461         size_t argc = 1;
1462         napi_value args = nullptr;
1463         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1464         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1465         Types* object = nullptr;
1466         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1467         napi_value result = object->IsUint8ClampedArray(env, args);
1468         return result;
1469     }
1470 
IsUint16Array(napi_env env,napi_callback_info info)1471     static napi_value IsUint16Array(napi_env env, napi_callback_info info)
1472     {
1473         napi_value thisVar = nullptr;
1474         size_t requireArgc = 1;
1475         size_t argc = 1;
1476         napi_value args = nullptr;
1477         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1478         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1479         Types* object = nullptr;
1480         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1481         napi_value result = object->IsUint16Array(env, args);
1482         return result;
1483     }
1484 
IsUint32Array(napi_env env,napi_callback_info info)1485     static napi_value IsUint32Array(napi_env env, napi_callback_info info)
1486     {
1487         napi_value thisVar = nullptr;
1488         size_t requireArgc = 1;
1489         size_t argc = 1;
1490         napi_value args = nullptr;
1491         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1492         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1493         Types* object = nullptr;
1494         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1495         napi_value result = object->IsUint32Array(env, args);
1496         return result;
1497     }
1498 
IsWeakMap(napi_env env,napi_callback_info info)1499     static napi_value IsWeakMap(napi_env env, napi_callback_info info)
1500     {
1501         napi_value thisVar = nullptr;
1502         size_t requireArgc = 1;
1503         size_t argc = 1;
1504         napi_value args = nullptr;
1505         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1506         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1507         Types* object = nullptr;
1508         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1509         napi_value result = object->IsWeakMap(env, args);
1510         return result;
1511     }
1512 
IsWeakSet(napi_env env,napi_callback_info info)1513     static napi_value IsWeakSet(napi_env env, napi_callback_info info)
1514     {
1515         napi_value thisVar = nullptr;
1516         size_t requireArgc = 1;
1517         size_t argc = 1;
1518         napi_value args = nullptr;
1519         NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr));
1520         NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments");
1521         Types* object = nullptr;
1522         NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object));
1523         napi_value result = object->IsWeakSet(env, args);
1524         return result;
1525     }
1526 
TypeofInit(napi_env env,napi_value exports)1527     static napi_value TypeofInit(napi_env env, napi_value exports)
1528     {
1529         const char* typeofClassName = "Types";
1530         napi_value typeofClass = nullptr;
1531         napi_property_descriptor typeofDesc[] = {
1532             DECLARE_NAPI_FUNCTION("isBigInt64Array", IsBigInt64Array),
1533             DECLARE_NAPI_FUNCTION("isBigUint64Array", IsBigUint64Array),
1534             DECLARE_NAPI_FUNCTION("isBooleanObject", IsBooleanObject),
1535             DECLARE_NAPI_FUNCTION("isBoxedPrimitive", IsBoxedPrimitive),
1536             DECLARE_NAPI_FUNCTION("isAnyArrayBuffer", IsAnyArrayBuffer),
1537             DECLARE_NAPI_FUNCTION("isArrayBufferView", IsArrayBufferView),
1538             DECLARE_NAPI_FUNCTION("isArgumentsObject", IsArgumentsObject),
1539             DECLARE_NAPI_FUNCTION("isArrayBuffer", IsArrayBuffer),
1540             DECLARE_NAPI_FUNCTION("isDataView", IsDataView),
1541             DECLARE_NAPI_FUNCTION("isDate", IsDate),
1542             DECLARE_NAPI_FUNCTION("isExternal", IsExternal),
1543             DECLARE_NAPI_FUNCTION("isFloat32Array", IsFloat32Array),
1544             DECLARE_NAPI_FUNCTION("isFloat64Array", IsFloat64Array),
1545             DECLARE_NAPI_FUNCTION("isGeneratorFunction", IsGeneratorFunction),
1546             DECLARE_NAPI_FUNCTION("isGeneratorObject", IsGeneratorObject),
1547             DECLARE_NAPI_FUNCTION("isInt8Array", IsInt8Array),
1548             DECLARE_NAPI_FUNCTION("isInt16Array", IsInt16Array),
1549             DECLARE_NAPI_FUNCTION("isInt32Array", IsInt32Array),
1550             DECLARE_NAPI_FUNCTION("isMap", IsMap),
1551             DECLARE_NAPI_FUNCTION("isMapIterator", IsMapIterator),
1552             DECLARE_NAPI_FUNCTION("isModuleNamespaceObject", IsModuleNamespaceObject),
1553             DECLARE_NAPI_FUNCTION("isNativeError", IsNativeError),
1554             DECLARE_NAPI_FUNCTION("isNumberObject", IsNumberObject),
1555             DECLARE_NAPI_FUNCTION("isPromise", IsPromise),
1556             DECLARE_NAPI_FUNCTION("isProxy", IsProxy),
1557             DECLARE_NAPI_FUNCTION("isRegExp", IsRegExp),
1558             DECLARE_NAPI_FUNCTION("isSet", IsSet),
1559             DECLARE_NAPI_FUNCTION("isSetIterator", IsSetIterator),
1560             DECLARE_NAPI_FUNCTION("isSharedArrayBuffer", IsSharedArrayBuffer),
1561             DECLARE_NAPI_FUNCTION("isStringObject", IsStringObject),
1562             DECLARE_NAPI_FUNCTION("isSymbolObject", IsSymbolObject),
1563             DECLARE_NAPI_FUNCTION("isTypedArray", IsTypedArray),
1564             DECLARE_NAPI_FUNCTION("isUint8Array", IsUint8Array),
1565             DECLARE_NAPI_FUNCTION("isUint8ClampedArray", IsUint8ClampedArray),
1566             DECLARE_NAPI_FUNCTION("isUint16Array", IsUint16Array),
1567             DECLARE_NAPI_FUNCTION("isUint32Array", IsUint32Array),
1568             DECLARE_NAPI_FUNCTION("isWeakMap", IsWeakMap),
1569             DECLARE_NAPI_FUNCTION("isWeakSet", IsWeakSet),
1570             DECLARE_NAPI_FUNCTION("isAsyncFunction", IsAsyncFunction),
1571         };
1572         NAPI_CALL(env, napi_define_class(env, typeofClassName, strlen(typeofClassName), TypesConstructor,
1573                                          nullptr, sizeof(typeofDesc) / sizeof(typeofDesc[0]), typeofDesc,
1574                                          &typeofClass));
1575         napi_property_descriptor desc[] = { DECLARE_NAPI_PROPERTY("Types", typeofClass) };
1576         NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
1577         return exports;
1578     }
1579 
Base64Init(napi_env env,napi_value exports)1580     static napi_value Base64Init(napi_env env, napi_value exports)
1581     {
1582         const char *base64ClassName = "Base64";
1583         napi_value base64Class = nullptr;
1584         napi_property_descriptor base64Desc[] = {
1585             DECLARE_NAPI_FUNCTION("encodeSync", EncodeBase64),
1586             DECLARE_NAPI_FUNCTION("encodeToStringSync", EncodeToString),
1587             DECLARE_NAPI_FUNCTION("decodeSync", DecodeBase64),
1588             DECLARE_NAPI_FUNCTION("encode", EncodeAsync),
1589             DECLARE_NAPI_FUNCTION("encodeToString", EncodeToStringAsync),
1590             DECLARE_NAPI_FUNCTION("decode", DecodeAsync),
1591         };
1592         NAPI_CALL(env, napi_define_class(env, base64ClassName, strlen(base64ClassName), Base64Constructor,
1593                                          nullptr, sizeof(base64Desc) / sizeof(base64Desc[0]), base64Desc,
1594                                          &base64Class));
1595         napi_property_descriptor desc[] = {
1596             DECLARE_NAPI_PROPERTY("Base64", base64Class)
1597         };
1598         NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
1599         return exports;
1600     }
1601 
Base64HelperInit(napi_env env,napi_value exports)1602     static napi_value Base64HelperInit(napi_env env, napi_value exports)
1603     {
1604         const char *base64HelperClassName = "Base64Helper";
1605         napi_value Base64HelperClass = nullptr;
1606         napi_property_descriptor Base64HelperDesc[] = {
1607             DECLARE_NAPI_FUNCTION("encodeSync", EncodeBase64Helper),
1608             DECLARE_NAPI_FUNCTION("encodeToStringSync", EncodeToStringHelper),
1609             DECLARE_NAPI_FUNCTION("decodeSync", DecodeBase64Helper),
1610             DECLARE_NAPI_FUNCTION("encode", EncodeAsyncHelper),
1611             DECLARE_NAPI_FUNCTION("encodeToString", EncodeToStringAsyncHelper),
1612             DECLARE_NAPI_FUNCTION("decode", DecodeAsyncHelper),
1613         };
1614         NAPI_CALL(env, napi_define_class(env, base64HelperClassName, strlen(base64HelperClassName), Base64Constructor,
1615                                          nullptr, sizeof(Base64HelperDesc) / sizeof(Base64HelperDesc[0]),
1616                                          Base64HelperDesc, &Base64HelperClass));
1617         napi_property_descriptor desc[] = {
1618             DECLARE_NAPI_PROPERTY("Base64Helper", Base64HelperClass)
1619         };
1620         NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
1621         return exports;
1622     }
1623 
UtilInit(napi_env env,napi_value exports)1624     static napi_value UtilInit(napi_env env, napi_value exports)
1625     {
1626         napi_property_descriptor desc[] = {
1627             DECLARE_NAPI_FUNCTION("printf", Printf),
1628             DECLARE_NAPI_FUNCTION("format", Printf),
1629             DECLARE_NAPI_FUNCTION("geterrorstring", GetErrorString),
1630             DECLARE_NAPI_FUNCTION("errnoToString", GetErrorString),
1631             DECLARE_NAPI_FUNCTION("dealwithformatstring", DealWithFormatString),
1632             DECLARE_NAPI_FUNCTION("randomUUID", RandomUUID),
1633             DECLARE_NAPI_FUNCTION("randomBinaryUUID", RandomBinaryUUID),
1634             DECLARE_NAPI_FUNCTION("parseUUID", ParseUUID)
1635         };
1636         NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
1637         TextcoderInit(env, exports);
1638         Base64Init(env, exports);
1639         Base64HelperInit(env, exports);
1640         TypeofInit(env, exports);
1641         return exports;
1642     }
1643 
1644     // util JS register
1645     extern "C"
NAPI_util_GetJSCode(const char ** buf,int * buflen)1646     __attribute__((visibility("default"))) void NAPI_util_GetJSCode(const char **buf, int *buflen)
1647     {
1648         if (buf != nullptr) {
1649             *buf = _binary_util_js_js_start;
1650         }
1651         if (buflen != nullptr) {
1652             *buflen = _binary_util_js_js_end - _binary_util_js_js_start;
1653         }
1654     }
1655     extern "C"
NAPI_util_GetABCCode(const char ** buf,int * buflen)1656     __attribute__((visibility("default"))) void NAPI_util_GetABCCode(const char** buf, int* buflen)
1657     {
1658         if (buf != nullptr) {
1659             *buf = _binary_util_abc_start;
1660         }
1661         if (buflen != nullptr) {
1662             *buflen = _binary_util_abc_end - _binary_util_abc_start;
1663         }
1664     }
1665 
1666     // util module define
1667     static napi_module_with_js utilModule = {
1668         .nm_version = 1,
1669         .nm_flags = 0,
1670         .nm_filename = nullptr,
1671         .nm_register_func = UtilInit,
1672         .nm_modname = "util",
1673         .nm_priv = ((void*)0),
1674         .nm_get_abc_code = NAPI_util_GetABCCode,
1675         .nm_get_js_code = NAPI_util_GetJSCode,
1676     };
1677     // util module register
1678     extern "C"
UtilRegisterModule()1679     __attribute__((constructor)) void UtilRegisterModule()
1680     {
1681         napi_module_with_js_register(&utilModule);
1682         UtilPluginJniRegister();
1683     }
1684 }
1685