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> ¶Vec) 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> ¶Vec) 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