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 "napi_common_fileaccess.h"
17 
18 #include "file_access_framework_errno.h"
19 #include "hilog_wrapper.h"
20 #include "napi_common_want.h"
21 
22 namespace OHOS {
23 namespace FileAccessFwk {
24 using namespace OHOS::AppExecFwk;
WrapUint32ToJS(napi_env env,uint32_t value)25 napi_value WrapUint32ToJS(napi_env env, uint32_t value)
26 {
27     napi_value result = nullptr;
28     NAPI_CALL(env, napi_create_uint32(env, value, &result));
29     return result;
30 }
31 
UnwrapUint32FromJS(napi_env env,napi_value param,uint32_t defaultValue)32 uint32_t UnwrapUint32FromJS(napi_env env, napi_value param, uint32_t defaultValue)
33 {
34     uint32_t value = defaultValue;
35     if (napi_get_value_uint32(env, param, &value) == napi_ok) {
36         return value;
37     } else {
38         return defaultValue;
39     }
40 }
41 
UnwrapUint32FromJS2(napi_env env,napi_value param,uint32_t & value)42 bool UnwrapUint32FromJS2(napi_env env, napi_value param, uint32_t &value)
43 {
44     bool result = false;
45     if (napi_get_value_uint32(env, param, &value) == napi_ok) {
46         result = true;
47     }
48     return result;
49 }
50 
UnwrapUint32ByPropertyName(napi_env env,napi_value param,const char * propertyName,uint32_t & value)51 bool UnwrapUint32ByPropertyName(napi_env env, napi_value param, const char *propertyName, uint32_t &value)
52 {
53     napi_value jsValue = GetPropertyValueByPropertyName(env, param, propertyName, napi_number);
54     if (jsValue != nullptr) {
55         return UnwrapUint32FromJS2(env, jsValue, value);
56     } else {
57         return false;
58     }
59 }
60 
WrapBigIntUint64ToJS(napi_env env,uint64_t value)61 napi_value WrapBigIntUint64ToJS(napi_env env, uint64_t value)
62 {
63     napi_value result = nullptr;
64     NAPI_CALL(env, napi_create_bigint_uint64(env, value, &result));
65     return result;
66 }
67 
UnwrapBigIntUint64FromJS(napi_env env,napi_value param,uint64_t defaultValue)68 uint64_t UnwrapBigIntUint64FromJS(napi_env env, napi_value param, uint64_t defaultValue)
69 {
70     bool lossless = true;
71     uint64_t value = defaultValue;
72     if (napi_get_value_bigint_uint64(env, param, &value, &lossless) == napi_ok) {
73         return value;
74     } else {
75         return defaultValue;
76     }
77 }
78 
UnwrapBigIntUint64FromJS2(napi_env env,napi_value param,uint64_t & defaultValue)79 bool UnwrapBigIntUint64FromJS2(napi_env env, napi_value param, uint64_t &defaultValue)
80 {
81     bool lossless = true;
82     if (napi_get_value_bigint_uint64(env, param, &defaultValue, &lossless) == napi_ok) {
83         return true;
84     } else {
85         return false;
86     }
87 }
88 
UnwrapBigIntUint64ByPropertyName(napi_env env,napi_value param,const char * propertyName,uint64_t & value)89 bool UnwrapBigIntUint64ByPropertyName(napi_env env, napi_value param, const char *propertyName, uint64_t &value)
90 {
91     napi_value jsValue = GetPropertyValueByPropertyName(env, param, propertyName, napi_bigint);
92     if (jsValue != nullptr) {
93         return UnwrapBigIntUint64FromJS2(env, jsValue, value);
94     } else {
95         return false;
96     }
97 }
98 
WrapArrayWantToJS(napi_env env,const std::vector<OHOS::AAFwk::Want> & wantVec)99 napi_value WrapArrayWantToJS(napi_env env, const std::vector<OHOS::AAFwk::Want> &wantVec)
100 {
101     napi_value jsArray = nullptr;
102     napi_value jsValue = nullptr;
103     uint32_t index = ERR_OK;
104     NAPI_CALL(env, napi_create_array(env, &jsArray));
105     for (auto want : wantVec) {
106         jsValue = OHOS::AppExecFwk::WrapWant(env, want);
107         if (napi_set_element(env, jsArray, index, jsValue) == napi_ok) {
108             index++;
109         }
110     }
111     return jsArray;
112 }
113 
UnwrapArrayWantFromJS(napi_env env,napi_value param,std::vector<OHOS::AAFwk::Want> & wantVec)114 bool UnwrapArrayWantFromJS(napi_env env, napi_value param, std::vector<OHOS::AAFwk::Want> &wantVec)
115 {
116     uint32_t arraySize = ERR_OK;
117     napi_value jsValue = nullptr;
118 
119     if (!IsArrayForNapiValue(env, param, arraySize)) {
120         return false;
121     }
122 
123     wantVec.clear();
124     for (uint32_t i = 0; i < arraySize; i++) {
125         jsValue = nullptr;
126         OHOS::AAFwk::Want want;
127         if (napi_get_element(env, param, i, &jsValue) != napi_ok) {
128             return false;
129         }
130 
131         if (!OHOS::AppExecFwk::UnwrapWant(env, jsValue, want)) {
132             return false;
133         }
134 
135         wantVec.push_back(want);
136     }
137     return true;
138 }
139 
GetUndefinedValue(napi_env env)140 napi_value GetUndefinedValue(napi_env env)
141 {
142     napi_value result{};
143     napi_get_undefined(env, &result);
144     return result;
145 }
146 
GetStringValue(napi_env env,napi_value value,std::string & result)147 napi_status GetStringValue(napi_env env, napi_value value, std::string &result)
148 {
149     size_t tempSize = 0;
150     if (napi_get_value_string_utf8(env, value, nullptr, 0, &tempSize) != napi_ok) {
151         return napi_generic_failure;
152     }
153     result.reserve(tempSize);
154     result.resize(tempSize);
155     if (napi_get_value_string_utf8(env, value, result.data(), tempSize + 1, &tempSize) != napi_ok) {
156         return napi_generic_failure;
157     }
158     return napi_ok;
159 }
160 } // namespace FileAccessFwk
161 } // namespace OHOS