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 #define LOG_TAG "ValuesBucket"
16 #include "napi_values_bucket.h"
17
18 #include "js_utils.h"
19 #include "logger.h"
20 #include "value_object.h"
21
22 using namespace OHOS::Rdb;
23 using namespace OHOS::AppDataMgrJsKit;
24 using namespace OHOS::NativeRdb;
25
NAPI_OHOS_Data_RdbJsKit_ValuesBucketProxy_NewInstance(napi_env env,ValuesBucket & valuesBucket)26 __attribute__((visibility("default"))) napi_value NAPI_OHOS_Data_RdbJsKit_ValuesBucketProxy_NewInstance(
27 napi_env env, ValuesBucket &valuesBucket)
28 {
29 napi_value ret = nullptr;
30 NAPI_CALL(env, napi_create_object(env, &ret));
31 for (auto &[key, value]: valuesBucket.values_) {
32 napi_value jsValue = JSUtils::Convert2JSValue(env, value.value);
33 NAPI_CALL(env, napi_set_named_property(env, ret, key.c_str(), jsValue));
34 }
35
36 return ret;
37 }
38
NAPI_OHOS_Data_RdbJsKit_ValuesBucketProxy_GetNativeObject(napi_env env,napi_value & arg)39 __attribute__((visibility("default"))) ValuesBucket *NAPI_OHOS_Data_RdbJsKit_ValuesBucketProxy_GetNativeObject(
40 napi_env env, napi_value &arg)
41 {
42 ValuesBucket *valuesBucket = new (std::nothrow) ValuesBucket;
43 if (valuesBucket == nullptr) {
44 LOG_ERROR("ValuesBucket new failed, valuesBucket is nullptr");
45 return nullptr;
46 }
47 napi_value keys = nullptr;
48 napi_get_property_names(env, arg, &keys);
49 uint32_t arrLen = 0;
50 napi_status status = napi_get_array_length(env, keys, &arrLen);
51 if (status != napi_ok) {
52 LOG_DEBUG("ValuesBucket errr");
53 return valuesBucket;
54 }
55 for (size_t i = 0; i < arrLen; ++i) {
56 napi_value key = nullptr;
57 napi_get_element(env, keys, i, &key);
58 std::string keyStr = JSUtils::Convert2String(env, key);
59 napi_value value = nullptr;
60 napi_get_property(env, arg, key, &value);
61 napi_valuetype valueType = napi_undefined;
62 napi_typeof(env, value, &valueType);
63 if (valueType == napi_string) {
64 std::string valueString = JSUtils::Convert2String(env, value);
65 valuesBucket->PutString(keyStr, valueString);
66 } else if (valueType == napi_number) {
67 double valueNumber;
68 napi_get_value_double(env, value, &valueNumber);
69 valuesBucket->PutDouble(keyStr, valueNumber);
70 } else if (valueType == napi_boolean) {
71 bool valueBool = false;
72 napi_get_value_bool(env, value, &valueBool);
73 valuesBucket->PutBool(keyStr, valueBool);
74 } else if (valueType == napi_null) {
75 valuesBucket->PutNull(keyStr);
76 } else if (valueType == napi_object) {
77 std::vector<uint8_t> val = {};
78 JSUtils::Convert2Value(env, value, val);
79 valuesBucket->PutBlob(keyStr, val);
80 } else {
81 LOG_WARN("valuesBucket error");
82 }
83 }
84 return valuesBucket;
85 }