• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 "js_utils.h"
17 
18 #include "log_print.h"
19 
20 #ifndef MAC_PLATFORM
21 #include "securec.h"
22 #endif
23 
24 namespace OHOS {
25 namespace PreferencesJsKit {
Convert2NativeValue(napi_env env,napi_value jsValue,std::string & output)26 int32_t JSUtils::Convert2NativeValue(napi_env env, napi_value jsValue, std::string &output)
27 {
28     size_t bufferSize = 0;
29     napi_status status = napi_get_value_string_utf8(env, jsValue, nullptr, 0, &bufferSize);
30     if (status != napi_ok) {
31         LOG_DEBUG("get std::string failed, status = %{public}d", status);
32         return napi_invalid_arg;
33     }
34     if (bufferSize > MAX_VALUE_LENGTH) {
35         LOG_ERROR("get std::string maximum length.");
36         return EXCEED_MAX_LENGTH;
37     }
38     char *buffer = (char *)malloc(bufferSize + 1);
39     if (buffer == nullptr) {
40         LOG_ERROR("malloc failed, buffer is nullptr.");
41         return ERR;
42     }
43     status = napi_get_value_string_utf8(env, jsValue, buffer, bufferSize + 1, &bufferSize);
44     if (status != napi_ok) {
45         free(buffer);
46         LOG_DEBUG("JSUtils::Convert2NativeValue get jsVal failed, status = %{public}d", status);
47         return napi_invalid_arg;
48     }
49     output = buffer;
50     free(buffer);
51     return napi_ok;
52 }
53 
Convert2NativeValue(napi_env env,napi_value jsValue,bool & output)54 int32_t JSUtils::Convert2NativeValue(napi_env env, napi_value jsValue, bool &output)
55 {
56     bool bValue = false;
57     napi_status status = napi_get_value_bool(env, jsValue, &bValue);
58     if (status != napi_ok) {
59         LOG_DEBUG("get bool failed, status = %{public}d", status);
60         return napi_invalid_arg;
61     }
62     output = bValue;
63     return napi_ok;
64 }
65 
Convert2NativeValue(napi_env env,napi_value jsValue,double & output)66 int32_t JSUtils::Convert2NativeValue(napi_env env, napi_value jsValue, double &output)
67 {
68     double number = 0.0;
69     napi_status status = napi_get_value_double(env, jsValue, &number);
70     if (status != napi_ok) {
71         LOG_DEBUG("get double failed, status = %{public}d", status);
72         return napi_invalid_arg;
73     }
74     output = number;
75     return napi_ok;
76 }
77 
Convert2NativeValue(napi_env env,napi_value jsValue,float & output)78 int32_t JSUtils::Convert2NativeValue(napi_env env, napi_value jsValue, float &output)
79 {
80     LOG_DEBUG("Convert2NativeValue js just support double data not support float");
81     return napi_invalid_arg;
82 }
83 
Convert2NativeValue(napi_env env,napi_value jsValue,int32_t & output)84 int32_t JSUtils::Convert2NativeValue(napi_env env, napi_value jsValue, int32_t &output)
85 {
86     LOG_DEBUG("Convert2NativeValue js just support double data not support int32_t");
87     return napi_invalid_arg;
88 }
89 
Convert2NativeValue(napi_env env,napi_value jsValue,int64_t & output)90 int32_t JSUtils::Convert2NativeValue(napi_env env, napi_value jsValue, int64_t &output)
91 {
92     LOG_DEBUG("Convert2NativeValue js just support double data not support int64_t");
93     return napi_invalid_arg;
94 }
95 
Convert2NativeValue(napi_env env,napi_value jsValue,std::monostate & value)96 int32_t JSUtils::Convert2NativeValue(napi_env env, napi_value jsValue, std::monostate &value)
97 {
98     napi_value tempValue;
99     napi_get_null(env, &tempValue);
100     bool equal = false;
101     napi_strict_equals(env, jsValue, tempValue, &equal);
102     if (equal) {
103         return napi_ok;
104     }
105     napi_get_undefined(env, &tempValue);
106     napi_strict_equals(env, jsValue, tempValue, &equal);
107     if (equal) {
108         return napi_ok;
109     }
110     LOG_DEBUG("std::monostate is not null");
111     return napi_invalid_arg;
112 }
113 
Equals(napi_env env,napi_value value,napi_ref copy)114 bool JSUtils::Equals(napi_env env, napi_value value, napi_ref copy)
115 {
116     if (copy == nullptr) {
117         return (value == nullptr);
118     }
119 
120     napi_value copyValue = nullptr;
121     napi_get_reference_value(env, copy, &copyValue);
122 
123     bool isEquals = false;
124     napi_strict_equals(env, value, copyValue, &isEquals);
125     return isEquals;
126 }
127 
Convert2JSValue(napi_env env,int32_t value)128 napi_value JSUtils::Convert2JSValue(napi_env env, int32_t value)
129 {
130     napi_value jsValue;
131     if (napi_create_int32(env, value, &jsValue) != napi_ok) {
132         LOG_DEBUG("Convert int32_t failed");
133         return nullptr;
134     }
135     return jsValue;
136 }
137 
Convert2JSValue(napi_env env,uint32_t value)138 napi_value JSUtils::Convert2JSValue(napi_env env, uint32_t value)
139 {
140     napi_value jsValue;
141     if (napi_create_uint32(env, value, &jsValue) != napi_ok) {
142         LOG_DEBUG("Convert uint32_t failed");
143         return nullptr;
144     }
145     return jsValue;
146 }
147 
Convert2JSValue(napi_env env,int64_t value)148 napi_value JSUtils::Convert2JSValue(napi_env env, int64_t value)
149 {
150     napi_value jsValue;
151     if (napi_create_int64(env, value, &jsValue) != napi_ok) {
152         LOG_DEBUG("Convert int64_t failed");
153         return nullptr;
154     }
155     return jsValue;
156 }
157 
Convert2JSValue(napi_env env,bool value)158 napi_value JSUtils::Convert2JSValue(napi_env env, bool value)
159 {
160     napi_value jsValue;
161     if (napi_get_boolean(env, value, &jsValue) != napi_ok) {
162         LOG_DEBUG("Convert bool failed");
163         return nullptr;
164     }
165     return jsValue;
166 }
167 
Convert2JSValue(napi_env env,double value)168 napi_value JSUtils::Convert2JSValue(napi_env env, double value)
169 {
170     napi_value jsValue;
171     if (napi_create_double(env, value, &jsValue) != napi_ok) {
172         LOG_DEBUG("Convert double failed");
173         return nullptr;
174     }
175     return jsValue;
176 }
177 
Convert2JSValue(napi_env env,float value)178 napi_value JSUtils::Convert2JSValue(napi_env env, float value)
179 {
180     napi_value jsValue;
181     if (napi_create_double(env, value, &jsValue) != napi_ok) {
182         LOG_DEBUG("Convert float failed");
183         return nullptr;
184     }
185     return jsValue;
186 }
187 
Convert2JSValue(napi_env env,const std::string & value)188 napi_value JSUtils::Convert2JSValue(napi_env env, const std::string &value)
189 {
190     napi_value jsValue;
191     if (napi_create_string_utf8(env, value.c_str(), value.size(), &jsValue) != napi_ok) {
192         LOG_DEBUG("Convert std::string failed");
193         return nullptr;
194     }
195     return jsValue;
196 }
197 
Convert2JSValue(napi_env env,const std::monostate & value)198 napi_value JSUtils::Convert2JSValue(napi_env env, const std::monostate &value)
199 {
200     napi_value result = nullptr;
201     napi_get_null(env, &result);
202     return result;
203 }
204 } // namespace PreferencesJsKit
205 } // namespace OHOS
206