• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_parse_utils.h"
17 
18 namespace {
19 constexpr int MAX_STRING_LENGTH = 40960;
20 }
21 
22 namespace OHOS {
23 namespace NWeb {
CreateEnumConstructor(napi_env env,napi_callback_info info)24 napi_value NapiParseUtils::CreateEnumConstructor(napi_env env, napi_callback_info info)
25 {
26     napi_value arg = nullptr;
27     napi_get_cb_info(env, info, nullptr, nullptr, &arg, nullptr);
28     return arg;
29 }
30 
ToInt32Value(napi_env env,int32_t number)31 napi_value NapiParseUtils::ToInt32Value(napi_env env, int32_t number)
32 {
33     napi_value result = nullptr;
34     napi_create_int32(env, number, &result);
35     return result;
36 }
37 
ParseInt32(napi_env env,napi_value argv,int32_t & outValue)38 bool NapiParseUtils::ParseInt32(napi_env env, napi_value argv, int32_t& outValue)
39 {
40     napi_valuetype valueType = napi_undefined;
41 
42     napi_typeof(env, argv, &valueType);
43     if (valueType != napi_number) {
44         return false;
45     }
46 
47     int32_t number = 0;
48     napi_get_value_int32(env, argv, &number);
49     outValue = number;
50 
51     return true;
52 }
53 
ParseString(napi_env env,napi_value argv,std::string & outValue)54 bool NapiParseUtils::ParseString(napi_env env, napi_value argv, std::string& outValue)
55 {
56     size_t bufferSize = 0;
57     napi_valuetype valueType = napi_undefined;
58 
59     napi_typeof(env, argv, &valueType);
60     if (valueType != napi_string) {
61         return false;
62     }
63     napi_get_value_string_utf8(env, argv, nullptr, 0, &bufferSize);
64     if (bufferSize > MAX_STRING_LENGTH) {
65         return false;
66     }
67     char stringValue[bufferSize + 1];
68     size_t jsStringLength = 0;
69     napi_get_value_string_utf8(env, argv, stringValue, bufferSize + 1, &jsStringLength);
70     if (jsStringLength != bufferSize) {
71         return false;
72     }
73     outValue = stringValue;
74     return true;
75 }
76 
ParseBoolean(napi_env env,napi_value argv,bool & outValue)77 bool NapiParseUtils::ParseBoolean(napi_env env, napi_value argv, bool& outValue)
78 {
79     napi_valuetype valueType = napi_null;
80 
81     napi_typeof(env, argv, &valueType);
82     if (valueType != napi_boolean) {
83         return false;
84     }
85 
86     bool boolValue;
87     napi_get_value_bool(env, argv, &boolValue);
88     outValue = boolValue;
89     return true;
90 }
91 
ParseStringArray(napi_env env,napi_value argv,std::vector<std::string> & outValue)92 bool NapiParseUtils::ParseStringArray(napi_env env, napi_value argv, std::vector<std::string>& outValue)
93 {
94     bool isArray = false;
95     napi_is_array(env, argv, &isArray);
96     if (!isArray) {
97         return false;
98     }
99 
100     uint32_t arrLen = 0;
101     napi_get_array_length(env, argv, &arrLen);
102     for (uint32_t i = 0; i < arrLen; ++i) {
103         napi_value item = nullptr;
104         napi_get_element(env, argv, i, &item);
105 
106         std::string str;
107         if (ParseString(env, item, str)) {
108             outValue.push_back(str);
109         }
110     }
111 
112     return true;
113 }
114 
ParseFloat(napi_env env,napi_value argv,float & outValue)115 bool NapiParseUtils::ParseFloat(napi_env env, napi_value argv, float& outValue)
116 {
117     napi_valuetype valueType = napi_undefined;
118     napi_typeof(env, argv, &valueType);
119     if (valueType != napi_number) {
120         return false;
121     }
122 
123     double value;
124     napi_get_value_double(env, argv, &value);
125     outValue = static_cast<float>(value);
126     return true;
127 }
128 } // namespace NWeb
129 } // namespace OHOS