15bebb993Sopenharmony_ci/* 25bebb993Sopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 35bebb993Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 45bebb993Sopenharmony_ci * you may not use this file except in compliance with the License. 55bebb993Sopenharmony_ci * You may obtain a copy of the License at 65bebb993Sopenharmony_ci * 75bebb993Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 85bebb993Sopenharmony_ci * 95bebb993Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 105bebb993Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 115bebb993Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 125bebb993Sopenharmony_ci * See the License for the specific language governing permissions and 135bebb993Sopenharmony_ci * limitations under the License. 145bebb993Sopenharmony_ci */ 155bebb993Sopenharmony_ci 165bebb993Sopenharmony_ci#include "n_val.h" 175bebb993Sopenharmony_ci 185bebb993Sopenharmony_ci#include <string> 195bebb993Sopenharmony_ci 205bebb993Sopenharmony_ci#include "file_utils.h" 215bebb993Sopenharmony_ci#include "filemgmt_libhilog.h" 225bebb993Sopenharmony_ci#include "n_error.h" 235bebb993Sopenharmony_ci 245bebb993Sopenharmony_cinamespace OHOS { 255bebb993Sopenharmony_cinamespace FileManagement { 265bebb993Sopenharmony_cinamespace LibN { 275bebb993Sopenharmony_ciusing namespace std; 285bebb993Sopenharmony_ci 295bebb993Sopenharmony_ciNVal::NVal(napi_env nEnv, napi_value nVal = nullptr) : env_(nEnv), val_(nVal) {} 305bebb993Sopenharmony_ci 315bebb993Sopenharmony_ciNVal::operator bool() const 325bebb993Sopenharmony_ci{ 335bebb993Sopenharmony_ci return env_ && val_; 345bebb993Sopenharmony_ci} 355bebb993Sopenharmony_ci 365bebb993Sopenharmony_cibool NVal::TypeIs(napi_valuetype expType) const 375bebb993Sopenharmony_ci{ 385bebb993Sopenharmony_ci if (!*this) { 395bebb993Sopenharmony_ci return false; 405bebb993Sopenharmony_ci } 415bebb993Sopenharmony_ci napi_valuetype valueType; 425bebb993Sopenharmony_ci napi_typeof(env_, val_, &valueType); 435bebb993Sopenharmony_ci 445bebb993Sopenharmony_ci if (expType != valueType) { 455bebb993Sopenharmony_ci return false; 465bebb993Sopenharmony_ci } 475bebb993Sopenharmony_ci return true; 485bebb993Sopenharmony_ci} 495bebb993Sopenharmony_ci 505bebb993Sopenharmony_cibool NVal::TypeIsError(bool checkErrno) const 515bebb993Sopenharmony_ci{ 525bebb993Sopenharmony_ci if (!*this) { 535bebb993Sopenharmony_ci return false; 545bebb993Sopenharmony_ci } 555bebb993Sopenharmony_ci 565bebb993Sopenharmony_ci bool res = false; 575bebb993Sopenharmony_ci napi_is_error(env_, val_, &res); 585bebb993Sopenharmony_ci 595bebb993Sopenharmony_ci return res; 605bebb993Sopenharmony_ci} 615bebb993Sopenharmony_ci 625bebb993Sopenharmony_cistd::tuple<bool, std::unique_ptr<char[]>, size_t> NVal::ToUTF8StringPath() const 635bebb993Sopenharmony_ci{ 645bebb993Sopenharmony_ci auto [succ, path, strLen] = ToUTF8String(); 655bebb993Sopenharmony_ci if (succ == false || std::strlen(path.get()) < strLen) { 665bebb993Sopenharmony_ci return { false, nullptr, 0 }; 675bebb993Sopenharmony_ci } 685bebb993Sopenharmony_ci return make_tuple(true, move(path), strLen); 695bebb993Sopenharmony_ci} 705bebb993Sopenharmony_ci 715bebb993Sopenharmony_cituple<bool, unique_ptr<char[]>, size_t> NVal::ToUTF8String() const 725bebb993Sopenharmony_ci{ 735bebb993Sopenharmony_ci size_t strLen = 0; 745bebb993Sopenharmony_ci napi_status status = napi_get_value_string_utf8(env_, val_, nullptr, -1, &strLen); 755bebb993Sopenharmony_ci if (status != napi_ok) { 765bebb993Sopenharmony_ci return { false, nullptr, 0 }; 775bebb993Sopenharmony_ci } 785bebb993Sopenharmony_ci if (strLen == std::numeric_limits<size_t>::max()) { 795bebb993Sopenharmony_ci HILOGE("string is too long"); 805bebb993Sopenharmony_ci return { false, nullptr, 0 }; 815bebb993Sopenharmony_ci } 825bebb993Sopenharmony_ci size_t bufLen = strLen + 1; 835bebb993Sopenharmony_ci auto str = CreateUniquePtr<char[]>(bufLen); 845bebb993Sopenharmony_ci if (str == nullptr) { 855bebb993Sopenharmony_ci return { false, nullptr, 0 }; 865bebb993Sopenharmony_ci } 875bebb993Sopenharmony_ci status = napi_get_value_string_utf8(env_, val_, str.get(), bufLen, &strLen); 885bebb993Sopenharmony_ci if (str == nullptr) { 895bebb993Sopenharmony_ci return { false, nullptr, 0 }; 905bebb993Sopenharmony_ci } 915bebb993Sopenharmony_ci return make_tuple(status == napi_ok, move(str), strLen); 925bebb993Sopenharmony_ci} 935bebb993Sopenharmony_ci 945bebb993Sopenharmony_cituple<bool, unique_ptr<char[]>, size_t> NVal::ToUTF8String(string defaultValue) const 955bebb993Sopenharmony_ci{ 965bebb993Sopenharmony_ci if (TypeIs(napi_undefined) || TypeIs(napi_function)) { 975bebb993Sopenharmony_ci auto str = CreateUniquePtr<char[]>(defaultValue.size() + 1); 985bebb993Sopenharmony_ci if (str == nullptr) { 995bebb993Sopenharmony_ci return { false, nullptr, 0 }; 1005bebb993Sopenharmony_ci } 1015bebb993Sopenharmony_ci copy(defaultValue.begin(), defaultValue.end(), str.get()); 1025bebb993Sopenharmony_ci str[defaultValue.size()] = '\0'; 1035bebb993Sopenharmony_ci return make_tuple(true, move(str), defaultValue.size()); 1045bebb993Sopenharmony_ci } 1055bebb993Sopenharmony_ci return ToUTF8String(); 1065bebb993Sopenharmony_ci} 1075bebb993Sopenharmony_ci 1085bebb993Sopenharmony_cituple<bool, unique_ptr<char[]>, size_t> NVal::ToUTF16String() const 1095bebb993Sopenharmony_ci{ 1105bebb993Sopenharmony_ci#ifdef FILE_SUBSYSTEM_DEBUG_LOCAL 1115bebb993Sopenharmony_ci size_t strLen = 0; 1125bebb993Sopenharmony_ci napi_status status = napi_get_value_string_utf16(env_, val_, nullptr, -1, &strLen); 1135bebb993Sopenharmony_ci if (status != napi_ok) { 1145bebb993Sopenharmony_ci return { false, nullptr, 0 }; 1155bebb993Sopenharmony_ci } 1165bebb993Sopenharmony_ci 1175bebb993Sopenharmony_ci auto str = CreateUniquePtr<char16_t[]>(++strLen); 1185bebb993Sopenharmony_ci if (str == nullptr) { 1195bebb993Sopenharmony_ci return { false, nullptr, 0 }; 1205bebb993Sopenharmony_ci } 1215bebb993Sopenharmony_ci status = napi_get_value_string_utf16(env_, val_, str.get(), strLen, nullptr); 1225bebb993Sopenharmony_ci if (status != napi_ok) { 1235bebb993Sopenharmony_ci return { false, nullptr, 0 }; 1245bebb993Sopenharmony_ci } 1255bebb993Sopenharmony_ci 1265bebb993Sopenharmony_ci strLen = reinterpret_cast<char *>(str.get() + strLen) - reinterpret_cast<char *>(str.get()); 1275bebb993Sopenharmony_ci auto strRet = unique_ptr<char[]>(reinterpret_cast<char *>(str.release())); 1285bebb993Sopenharmony_ci return {true, move(strRet), strLen}; 1295bebb993Sopenharmony_ci#else 1305bebb993Sopenharmony_ci // Note that quickjs doesn't support utf16 1315bebb993Sopenharmony_ci return ToUTF8String(); 1325bebb993Sopenharmony_ci#endif 1335bebb993Sopenharmony_ci} 1345bebb993Sopenharmony_ci 1355bebb993Sopenharmony_cituple<bool, void *> NVal::ToPointer() const 1365bebb993Sopenharmony_ci{ 1375bebb993Sopenharmony_ci void *res = nullptr; 1385bebb993Sopenharmony_ci napi_status status = napi_get_value_external(env_, val_, &res); 1395bebb993Sopenharmony_ci return make_tuple(status == napi_ok, res); 1405bebb993Sopenharmony_ci} 1415bebb993Sopenharmony_ci 1425bebb993Sopenharmony_cituple<bool, bool> NVal::ToBool() const 1435bebb993Sopenharmony_ci{ 1445bebb993Sopenharmony_ci bool flag = false; 1455bebb993Sopenharmony_ci napi_status status = napi_get_value_bool(env_, val_, &flag); 1465bebb993Sopenharmony_ci return make_tuple(status == napi_ok, flag); 1475bebb993Sopenharmony_ci} 1485bebb993Sopenharmony_ci 1495bebb993Sopenharmony_cituple<bool, bool> NVal::ToBool(bool defaultValue) const 1505bebb993Sopenharmony_ci{ 1515bebb993Sopenharmony_ci if (TypeIs(napi_undefined) || TypeIs(napi_function)) { 1525bebb993Sopenharmony_ci return make_tuple(true, defaultValue); 1535bebb993Sopenharmony_ci } 1545bebb993Sopenharmony_ci return ToBool(); 1555bebb993Sopenharmony_ci} 1565bebb993Sopenharmony_ci 1575bebb993Sopenharmony_cituple<bool, int32_t> NVal::ToInt32() const 1585bebb993Sopenharmony_ci{ 1595bebb993Sopenharmony_ci int32_t res = 0; 1605bebb993Sopenharmony_ci napi_status status = napi_get_value_int32(env_, val_, &res); 1615bebb993Sopenharmony_ci return make_tuple(status == napi_ok, res); 1625bebb993Sopenharmony_ci} 1635bebb993Sopenharmony_ci 1645bebb993Sopenharmony_cituple<bool, int32_t> NVal::ToInt32(int32_t defaultValue) const 1655bebb993Sopenharmony_ci{ 1665bebb993Sopenharmony_ci if (TypeIs(napi_undefined) || TypeIs(napi_function)) { 1675bebb993Sopenharmony_ci return make_tuple(true, defaultValue); 1685bebb993Sopenharmony_ci } 1695bebb993Sopenharmony_ci return ToInt32(); 1705bebb993Sopenharmony_ci} 1715bebb993Sopenharmony_ci 1725bebb993Sopenharmony_cituple<bool, int64_t> NVal::ToInt64() const 1735bebb993Sopenharmony_ci{ 1745bebb993Sopenharmony_ci int64_t res = 0; 1755bebb993Sopenharmony_ci napi_status status = napi_get_value_int64(env_, val_, &res); 1765bebb993Sopenharmony_ci return make_tuple(status == napi_ok, res); 1775bebb993Sopenharmony_ci} 1785bebb993Sopenharmony_ci 1795bebb993Sopenharmony_cituple<bool, int64_t> NVal::ToInt64(int64_t defaultValue) const 1805bebb993Sopenharmony_ci{ 1815bebb993Sopenharmony_ci if (TypeIs(napi_undefined) || TypeIs(napi_function)) { 1825bebb993Sopenharmony_ci return make_tuple(true, defaultValue); 1835bebb993Sopenharmony_ci } 1845bebb993Sopenharmony_ci return ToInt64(); 1855bebb993Sopenharmony_ci} 1865bebb993Sopenharmony_ci 1875bebb993Sopenharmony_cituple<bool, double> NVal::ToDouble() const 1885bebb993Sopenharmony_ci{ 1895bebb993Sopenharmony_ci double res = 0; 1905bebb993Sopenharmony_ci napi_status status = napi_get_value_double(env_, val_, &res); 1915bebb993Sopenharmony_ci return make_tuple(status == napi_ok, res); 1925bebb993Sopenharmony_ci} 1935bebb993Sopenharmony_ci 1945bebb993Sopenharmony_cituple<bool, uint32_t> NVal::ToUint32() const 1955bebb993Sopenharmony_ci{ 1965bebb993Sopenharmony_ci uint32_t res = 0; 1975bebb993Sopenharmony_ci napi_status status = napi_get_value_uint32(env_, val_, &res); 1985bebb993Sopenharmony_ci return make_tuple(status == napi_ok, res); 1995bebb993Sopenharmony_ci} 2005bebb993Sopenharmony_ci 2015bebb993Sopenharmony_cituple<bool, uint64_t, bool> NVal::ToUint64() const 2025bebb993Sopenharmony_ci{ 2035bebb993Sopenharmony_ci uint64_t res = 0; 2045bebb993Sopenharmony_ci bool lossless = false; 2055bebb993Sopenharmony_ci napi_status status = napi_get_value_bigint_uint64(env_, val_, &res, &lossless); 2065bebb993Sopenharmony_ci return make_tuple(status == napi_ok, res, lossless); 2075bebb993Sopenharmony_ci} 2085bebb993Sopenharmony_ci 2095bebb993Sopenharmony_cituple<bool, vector<string>, uint32_t> NVal::ToStringArray() 2105bebb993Sopenharmony_ci{ 2115bebb993Sopenharmony_ci napi_status status; 2125bebb993Sopenharmony_ci uint32_t size = 0; 2135bebb993Sopenharmony_ci status = napi_get_array_length(env_, val_, &size); 2145bebb993Sopenharmony_ci vector<string> stringArray; 2155bebb993Sopenharmony_ci napi_value result; 2165bebb993Sopenharmony_ci for (uint32_t i = 0; i < size; i++) { 2175bebb993Sopenharmony_ci status = napi_get_element(env_, val_, i, &result); 2185bebb993Sopenharmony_ci auto [succ, str, ignore] = NVal(env_, result).ToUTF8String(); 2195bebb993Sopenharmony_ci stringArray.push_back(string(str.get())); 2205bebb993Sopenharmony_ci } 2215bebb993Sopenharmony_ci return make_tuple(status == napi_ok, stringArray, size); 2225bebb993Sopenharmony_ci} 2235bebb993Sopenharmony_ci 2245bebb993Sopenharmony_cituple<bool, void *, size_t> NVal::ToArraybuffer() const 2255bebb993Sopenharmony_ci{ 2265bebb993Sopenharmony_ci void *buf = nullptr; 2275bebb993Sopenharmony_ci size_t bufLen = 0; 2285bebb993Sopenharmony_ci bool status = napi_get_arraybuffer_info(env_, val_, &buf, &bufLen); 2295bebb993Sopenharmony_ci return make_tuple(status == napi_ok, buf, bufLen); 2305bebb993Sopenharmony_ci} 2315bebb993Sopenharmony_ci 2325bebb993Sopenharmony_cituple<bool, void *, size_t> NVal::ToTypedArray() const 2335bebb993Sopenharmony_ci{ 2345bebb993Sopenharmony_ci napi_typedarray_type type; 2355bebb993Sopenharmony_ci napi_value in_array_buffer = nullptr; 2365bebb993Sopenharmony_ci size_t byte_offset; 2375bebb993Sopenharmony_ci size_t length; 2385bebb993Sopenharmony_ci void *data = nullptr; 2395bebb993Sopenharmony_ci napi_status status = 2405bebb993Sopenharmony_ci napi_get_typedarray_info(env_, val_, &type, &length, (void **)&data, &in_array_buffer, &byte_offset); 2415bebb993Sopenharmony_ci return make_tuple(status == napi_ok, data, length); 2425bebb993Sopenharmony_ci} 2435bebb993Sopenharmony_ci 2445bebb993Sopenharmony_cibool NVal::HasProp(string propName) const 2455bebb993Sopenharmony_ci{ 2465bebb993Sopenharmony_ci bool res = false; 2475bebb993Sopenharmony_ci 2485bebb993Sopenharmony_ci if (!env_ || !val_ || !TypeIs(napi_object)) { 2495bebb993Sopenharmony_ci return false; 2505bebb993Sopenharmony_ci } 2515bebb993Sopenharmony_ci 2525bebb993Sopenharmony_ci napi_status status = napi_has_named_property(env_, val_, propName.c_str(), &res); 2535bebb993Sopenharmony_ci return (status == napi_ok) && res; 2545bebb993Sopenharmony_ci} 2555bebb993Sopenharmony_ci 2565bebb993Sopenharmony_ci#ifdef WIN_PLATFORM 2575bebb993Sopenharmony_ciNVal NVal::GetPropValue(string propName) const 2585bebb993Sopenharmony_ci#else 2595bebb993Sopenharmony_ciNVal NVal::GetProp(string propName) const 2605bebb993Sopenharmony_ci#endif 2615bebb993Sopenharmony_ci{ 2625bebb993Sopenharmony_ci if (!HasProp(propName)) { 2635bebb993Sopenharmony_ci return {env_, nullptr}; 2645bebb993Sopenharmony_ci } 2655bebb993Sopenharmony_ci 2665bebb993Sopenharmony_ci napi_value prop = nullptr; 2675bebb993Sopenharmony_ci napi_status status = napi_get_named_property(env_, val_, propName.c_str(), &prop); 2685bebb993Sopenharmony_ci if (status != napi_ok) { 2695bebb993Sopenharmony_ci return {env_, nullptr}; 2705bebb993Sopenharmony_ci } 2715bebb993Sopenharmony_ci return NVal(env_, prop); 2725bebb993Sopenharmony_ci} 2735bebb993Sopenharmony_ci 2745bebb993Sopenharmony_cibool NVal::AddProp(vector<napi_property_descriptor> &&propVec) const 2755bebb993Sopenharmony_ci{ 2765bebb993Sopenharmony_ci if (!TypeIs(napi_valuetype::napi_object)) { 2775bebb993Sopenharmony_ci HILOGE("INNER BUG. Prop should only be added to objects"); 2785bebb993Sopenharmony_ci return false; 2795bebb993Sopenharmony_ci } 2805bebb993Sopenharmony_ci 2815bebb993Sopenharmony_ci napi_status status = napi_define_properties(env_, val_, propVec.size(), propVec.data()); 2825bebb993Sopenharmony_ci if (status != napi_ok) { 2835bebb993Sopenharmony_ci HILOGE("INNER BUG. Cannot define properties because of %{public}d", status); 2845bebb993Sopenharmony_ci return false; 2855bebb993Sopenharmony_ci } 2865bebb993Sopenharmony_ci return true; 2875bebb993Sopenharmony_ci} 2885bebb993Sopenharmony_ci 2895bebb993Sopenharmony_cibool NVal::AddProp(string propName, napi_value val) const 2905bebb993Sopenharmony_ci{ 2915bebb993Sopenharmony_ci if (!TypeIs(napi_valuetype::napi_object) || HasProp(propName)) { 2925bebb993Sopenharmony_ci HILOGE("INNER BUG. Prop should only be added to objects"); 2935bebb993Sopenharmony_ci return false; 2945bebb993Sopenharmony_ci } 2955bebb993Sopenharmony_ci 2965bebb993Sopenharmony_ci napi_status status = napi_set_named_property(env_, val_, propName.c_str(), val); 2975bebb993Sopenharmony_ci if (status != napi_ok) { 2985bebb993Sopenharmony_ci HILOGE("INNER BUG. Cannot set named property because of %{public}d", status); 2995bebb993Sopenharmony_ci return false; 3005bebb993Sopenharmony_ci } 3015bebb993Sopenharmony_ci return true; 3025bebb993Sopenharmony_ci} 3035bebb993Sopenharmony_ci 3045bebb993Sopenharmony_ciNVal NVal::CreateUndefined(napi_env env) 3055bebb993Sopenharmony_ci{ 3065bebb993Sopenharmony_ci napi_value res = nullptr; 3075bebb993Sopenharmony_ci napi_get_undefined(env, &res); 3085bebb993Sopenharmony_ci return {env, res}; 3095bebb993Sopenharmony_ci} 3105bebb993Sopenharmony_ci 3115bebb993Sopenharmony_ciNVal NVal::CreateBigInt64(napi_env env, int64_t val) 3125bebb993Sopenharmony_ci{ 3135bebb993Sopenharmony_ci napi_value res = nullptr; 3145bebb993Sopenharmony_ci napi_create_bigint_int64(env, val, &res); 3155bebb993Sopenharmony_ci return { env, res }; 3165bebb993Sopenharmony_ci} 3175bebb993Sopenharmony_ci 3185bebb993Sopenharmony_ciNVal NVal::CreateInt64(napi_env env, int64_t val) 3195bebb993Sopenharmony_ci{ 3205bebb993Sopenharmony_ci napi_value res = nullptr; 3215bebb993Sopenharmony_ci napi_create_int64(env, val, &res); 3225bebb993Sopenharmony_ci return {env, res}; 3235bebb993Sopenharmony_ci} 3245bebb993Sopenharmony_ci 3255bebb993Sopenharmony_ciNVal NVal::CreateInt32(napi_env env, int32_t val) 3265bebb993Sopenharmony_ci{ 3275bebb993Sopenharmony_ci napi_value res = nullptr; 3285bebb993Sopenharmony_ci napi_create_int32(env, val, &res); 3295bebb993Sopenharmony_ci return {env, res}; 3305bebb993Sopenharmony_ci} 3315bebb993Sopenharmony_ci 3325bebb993Sopenharmony_ciNVal NVal::CreateUint32(napi_env env, int32_t val) 3335bebb993Sopenharmony_ci{ 3345bebb993Sopenharmony_ci napi_value res = nullptr; 3355bebb993Sopenharmony_ci napi_create_uint32(env, val, &res); 3365bebb993Sopenharmony_ci return {env, res}; 3375bebb993Sopenharmony_ci} 3385bebb993Sopenharmony_ci 3395bebb993Sopenharmony_ciNVal NVal::CreateObject(napi_env env) 3405bebb993Sopenharmony_ci{ 3415bebb993Sopenharmony_ci napi_value res = nullptr; 3425bebb993Sopenharmony_ci napi_create_object(env, &res); 3435bebb993Sopenharmony_ci return {env, res}; 3445bebb993Sopenharmony_ci} 3455bebb993Sopenharmony_ci 3465bebb993Sopenharmony_ciNVal NVal::CreateBool(napi_env env, bool val) 3475bebb993Sopenharmony_ci{ 3485bebb993Sopenharmony_ci napi_value res = nullptr; 3495bebb993Sopenharmony_ci napi_get_boolean(env, val, &res); 3505bebb993Sopenharmony_ci return {env, res}; 3515bebb993Sopenharmony_ci} 3525bebb993Sopenharmony_ci 3535bebb993Sopenharmony_ciNVal NVal::CreateUTF8String(napi_env env, std::string str) 3545bebb993Sopenharmony_ci{ 3555bebb993Sopenharmony_ci napi_value res = nullptr; 3565bebb993Sopenharmony_ci napi_create_string_utf8(env, str.c_str(), str.length(), &res); 3575bebb993Sopenharmony_ci return {env, res}; 3585bebb993Sopenharmony_ci} 3595bebb993Sopenharmony_ci 3605bebb993Sopenharmony_ciNVal NVal::CreateUTF8String(napi_env env, const char *str, ssize_t len) 3615bebb993Sopenharmony_ci{ 3625bebb993Sopenharmony_ci napi_value res = nullptr; 3635bebb993Sopenharmony_ci napi_create_string_utf8(env, str, len, &res); 3645bebb993Sopenharmony_ci return {env, res}; 3655bebb993Sopenharmony_ci} 3665bebb993Sopenharmony_ci 3675bebb993Sopenharmony_ciNVal NVal::CreateUint8Array(napi_env env, void *buf, size_t bufLen) 3685bebb993Sopenharmony_ci{ 3695bebb993Sopenharmony_ci napi_value output_buffer = nullptr; 3705bebb993Sopenharmony_ci napi_create_external_arraybuffer( 3715bebb993Sopenharmony_ci env, buf, bufLen, [](napi_env env, void *finalize_data, void *finalize_hint) { free(finalize_data); }, NULL, 3725bebb993Sopenharmony_ci &output_buffer); 3735bebb993Sopenharmony_ci napi_value output_array = nullptr; 3745bebb993Sopenharmony_ci napi_create_typedarray(env, napi_uint8_array, bufLen, output_buffer, 0, &output_array); 3755bebb993Sopenharmony_ci return {env, output_array}; 3765bebb993Sopenharmony_ci} 3775bebb993Sopenharmony_ci 3785bebb993Sopenharmony_ciNVal NVal::CreateArrayString(napi_env env, vector<string> strs) 3795bebb993Sopenharmony_ci{ 3805bebb993Sopenharmony_ci napi_value res = nullptr; 3815bebb993Sopenharmony_ci napi_create_array(env, &res); 3825bebb993Sopenharmony_ci for (size_t i = 0; i < strs.size(); i++) { 3835bebb993Sopenharmony_ci napi_value filename; 3845bebb993Sopenharmony_ci napi_create_string_utf8(env, strs[i].c_str(), strs[i].length(), &filename); 3855bebb993Sopenharmony_ci napi_set_element(env, res, i, filename); 3865bebb993Sopenharmony_ci } 3875bebb993Sopenharmony_ci return {env, res}; 3885bebb993Sopenharmony_ci} 3895bebb993Sopenharmony_ci 3905bebb993Sopenharmony_cituple<NVal, void *> NVal::CreateArrayBuffer(napi_env env, size_t len) 3915bebb993Sopenharmony_ci{ 3925bebb993Sopenharmony_ci napi_value val; 3935bebb993Sopenharmony_ci void *buf = nullptr; 3945bebb993Sopenharmony_ci napi_create_arraybuffer(env, len, &buf, &val); 3955bebb993Sopenharmony_ci return {{env, val}, {buf}}; 3965bebb993Sopenharmony_ci} 3975bebb993Sopenharmony_ci 3985bebb993Sopenharmony_cinapi_property_descriptor NVal::DeclareNapiProperty(const char *name, napi_value val) 3995bebb993Sopenharmony_ci{ 4005bebb993Sopenharmony_ci return {(name), nullptr, nullptr, nullptr, nullptr, val, napi_default, nullptr}; 4015bebb993Sopenharmony_ci} 4025bebb993Sopenharmony_ci 4035bebb993Sopenharmony_cinapi_property_descriptor NVal::DeclareNapiStaticProperty(const char *name, napi_value val) 4045bebb993Sopenharmony_ci{ 4055bebb993Sopenharmony_ci return {(name), nullptr, nullptr, nullptr, nullptr, val, napi_static, nullptr}; 4065bebb993Sopenharmony_ci} 4075bebb993Sopenharmony_ci 4085bebb993Sopenharmony_cinapi_property_descriptor NVal::DeclareNapiFunction(const char *name, napi_callback func) 4095bebb993Sopenharmony_ci{ 4105bebb993Sopenharmony_ci return {(name), nullptr, (func), nullptr, nullptr, nullptr, napi_default, nullptr}; 4115bebb993Sopenharmony_ci} 4125bebb993Sopenharmony_ci 4135bebb993Sopenharmony_cinapi_property_descriptor NVal::DeclareNapiStaticFunction(const char *name, napi_callback func) 4145bebb993Sopenharmony_ci{ 4155bebb993Sopenharmony_ci return {(name), nullptr, (func), nullptr, nullptr, nullptr, napi_static, nullptr}; 4165bebb993Sopenharmony_ci} 4175bebb993Sopenharmony_ci 4185bebb993Sopenharmony_cinapi_property_descriptor NVal::DeclareNapiGetter(const char *name, napi_callback getter) 4195bebb993Sopenharmony_ci{ 4205bebb993Sopenharmony_ci return {(name), nullptr, nullptr, (getter), nullptr, nullptr, napi_default, nullptr}; 4215bebb993Sopenharmony_ci} 4225bebb993Sopenharmony_ci 4235bebb993Sopenharmony_cinapi_property_descriptor NVal::DeclareNapiSetter(const char *name, napi_callback setter) 4245bebb993Sopenharmony_ci{ 4255bebb993Sopenharmony_ci return {(name), nullptr, nullptr, nullptr, (setter), nullptr, napi_default, nullptr}; 4265bebb993Sopenharmony_ci} 4275bebb993Sopenharmony_ci 4285bebb993Sopenharmony_cinapi_property_descriptor NVal::DeclareNapiGetterSetter(const char *name, napi_callback getter, napi_callback setter) 4295bebb993Sopenharmony_ci{ 4305bebb993Sopenharmony_ci return {(name), nullptr, nullptr, (getter), (setter), nullptr, napi_default, nullptr}; 4315bebb993Sopenharmony_ci} 4325bebb993Sopenharmony_ci} // namespace LibN 4335bebb993Sopenharmony_ci} // namespace FileManagement 4345bebb993Sopenharmony_ci} // namespace OHOS 435