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