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_rdb_const_properties.h"
17 #include "rdb_common.h"
18 #include "rdb_store.h"
19 #include "js_utils.h"
20 #if !defined(WINDOWS_PLATFORM) && !defined(MAC_PLATFORM)
21 #include "rdb_store_config.h"
22 #include "rdb_types.h"
23
24 using OHOS::DistributedRdb::SyncMode;
25 using OHOS::DistributedRdb::SubscribeMode;
26
27 #endif
28 using OHOS::NativeRdb::SecurityLevel;
29 using OHOS::NativeRdb::ConflictResolution;
30 using OHOS::DistributedRdb::ProgressCode;
31 using OHOS::DistributedRdb::DistributedTableType;
32
33 #define SET_NAPI_PROPERTY(object, prop, value) \
34 napi_set_named_property((env), (object), (prop), AppDataMgrJsKit::JSUtils::Convert2JSValue((env), (value)))
35
36 namespace OHOS::RelationalStoreJsKit {
37 #if !defined(WINDOWS_PLATFORM) && !defined(MAC_PLATFORM)
38
ExportSyncMode(napi_env env)39 static napi_value ExportSyncMode(napi_env env)
40 {
41 napi_value syncMode = nullptr;
42 napi_create_object(env, &syncMode);
43
44 SET_NAPI_PROPERTY(syncMode, "SYNC_MODE_PUSH", int32_t(SyncMode::PUSH));
45 SET_NAPI_PROPERTY(syncMode, "SYNC_MODE_PULL", int32_t(SyncMode::PULL));
46 SET_NAPI_PROPERTY(syncMode, "SYNC_MODE_TIME_FIRST", int32_t(SyncMode::TIME_FIRST));
47 SET_NAPI_PROPERTY(syncMode, "SYNC_MODE_NATIVE_FIRST", int32_t(SyncMode::NATIVE_FIRST));
48 SET_NAPI_PROPERTY(syncMode, "SYNC_MODE_CLOUD_FIRST", int32_t(SyncMode::CLOUD_FIRST));
49 napi_object_freeze(env, syncMode);
50 return syncMode;
51 }
52
ExportSubscribeType(napi_env env)53 static napi_value ExportSubscribeType(napi_env env)
54 {
55 napi_value subscribeType = nullptr;
56 napi_create_object(env, &subscribeType);
57
58 SET_NAPI_PROPERTY(subscribeType, "SUBSCRIBE_TYPE_REMOTE", int32_t(SubscribeMode::REMOTE));
59 SET_NAPI_PROPERTY(subscribeType, "SUBSCRIBE_TYPE_CLOUD", int32_t(SubscribeMode::CLOUD));
60 SET_NAPI_PROPERTY(subscribeType, "SUBSCRIBE_TYPE_CLOUD_DETAILS", int32_t(SubscribeMode::CLOUD_DETAIL));
61 SET_NAPI_PROPERTY(subscribeType, "SUBSCRIBE_TYPE_LOCAL_DETAILS", int32_t(SubscribeMode::LOCAL_DETAIL));
62 napi_object_freeze(env, subscribeType);
63 return subscribeType;
64 }
65
ExportSecurityLevel(napi_env env)66 static napi_value ExportSecurityLevel(napi_env env)
67 {
68 napi_value securityLevel = nullptr;
69 napi_create_object(env, &securityLevel);
70
71 SET_NAPI_PROPERTY(securityLevel, "S1", int32_t(SecurityLevel::S1));
72 SET_NAPI_PROPERTY(securityLevel, "S2", int32_t(SecurityLevel::S2));
73 SET_NAPI_PROPERTY(securityLevel, "S3", int32_t(SecurityLevel::S3));
74 SET_NAPI_PROPERTY(securityLevel, "S4", int32_t(SecurityLevel::S4));
75 napi_object_freeze(env, securityLevel);
76 return securityLevel;
77 }
78 #endif
79
ExportProgress(napi_env env)80 static napi_value ExportProgress(napi_env env)
81 {
82 napi_value progress = nullptr;
83 napi_create_object(env, &progress);
84
85 SET_NAPI_PROPERTY(progress, "SYNC_BEGIN", int32_t(DistributedRdb::Progress::SYNC_BEGIN));
86 SET_NAPI_PROPERTY(progress, "SYNC_IN_PROGRESS", int32_t(DistributedRdb::Progress::SYNC_IN_PROGRESS));
87 SET_NAPI_PROPERTY(progress, "SYNC_FINISH", int32_t(DistributedRdb::Progress::SYNC_FINISH));
88 napi_object_freeze(env, progress);
89 return progress;
90 }
91
ExportProgressCode(napi_env env)92 static napi_value ExportProgressCode(napi_env env)
93 {
94 napi_value progressCode = nullptr;
95 napi_create_object(env, &progressCode);
96
97 SET_NAPI_PROPERTY(progressCode, "SUCCESS", int32_t(ProgressCode::SUCCESS));
98 SET_NAPI_PROPERTY(progressCode, "UNKNOWN_ERROR", int32_t(ProgressCode::UNKNOWN_ERROR));
99 SET_NAPI_PROPERTY(progressCode, "NETWORK_ERROR", int32_t(ProgressCode::NETWORK_ERROR));
100 SET_NAPI_PROPERTY(progressCode, "CLOUD_DISABLED", int32_t(ProgressCode::CLOUD_DISABLED));
101 SET_NAPI_PROPERTY(progressCode, "LOCKED_BY_OTHERS", int32_t(ProgressCode::LOCKED_BY_OTHERS));
102 SET_NAPI_PROPERTY(progressCode, "RECORD_LIMIT_EXCEEDED", int32_t(ProgressCode::RECORD_LIMIT_EXCEEDED));
103 SET_NAPI_PROPERTY(progressCode, "NO_SPACE_FOR_ASSET", int32_t(ProgressCode::NO_SPACE_FOR_ASSET));
104 SET_NAPI_PROPERTY(progressCode, "BLOCKED_BY_NETWORK_STRATEGY", int32_t(ProgressCode::BLOCKED_BY_NETWORK_STRATEGY));
105 napi_object_freeze(env, progressCode);
106 return progressCode;
107 }
108
ExportOrigin(napi_env env)109 static napi_value ExportOrigin(napi_env env)
110 {
111 napi_value origin = nullptr;
112 napi_create_object(env, &origin);
113
114 SET_NAPI_PROPERTY(origin, "LOCAL", int32_t(NativeRdb::AbsPredicates::Origin::LOCAL));
115 SET_NAPI_PROPERTY(origin, "CLOUD", int32_t(NativeRdb::AbsPredicates::Origin::CLOUD));
116 SET_NAPI_PROPERTY(origin, "REMOTE", int32_t(NativeRdb::AbsPredicates::Origin::REMOTE));
117 napi_object_freeze(env, origin);
118 return origin;
119 }
120
ExportField(napi_env env)121 static napi_value ExportField(napi_env env)
122 {
123 napi_value field = nullptr;
124 napi_create_object(env, &field);
125
126 SET_NAPI_PROPERTY(field, "CURSOR_FIELD", std::string(DistributedRdb::Field::CURSOR_FIELD));
127 SET_NAPI_PROPERTY(field, "ORIGIN_FIELD", std::string(DistributedRdb::Field::ORIGIN_FIELD));
128 SET_NAPI_PROPERTY(field, "DELETED_FLAG_FIELD", std::string(DistributedRdb::Field::DELETED_FLAG_FIELD));
129 SET_NAPI_PROPERTY(field, "DATA_STATUS_FIELD", std::string(DistributedRdb::Field::DATA_STATUS_FIELD));
130 SET_NAPI_PROPERTY(field, "OWNER_FIELD", std::string(DistributedRdb::Field::OWNER_FIELD));
131 SET_NAPI_PROPERTY(field, "PRIVILEGE_FIELD", std::string(DistributedRdb::Field::PRIVILEGE_FIELD));
132 SET_NAPI_PROPERTY(field, "SHARING_RESOURCE_FIELD", std::string(DistributedRdb::Field::SHARING_RESOURCE_FIELD));
133 napi_object_freeze(env, field);
134 return field;
135 }
136
ExportDistributedType(napi_env env)137 static napi_value ExportDistributedType(napi_env env)
138 {
139 napi_value distributedType = nullptr;
140 napi_create_object(env, &distributedType);
141
142 SET_NAPI_PROPERTY(distributedType, "DISTRIBUTED_DEVICE", int32_t(DistributedTableType::DISTRIBUTED_DEVICE));
143 SET_NAPI_PROPERTY(distributedType, "DISTRIBUTED_CLOUD", int32_t(DistributedTableType::DISTRIBUTED_CLOUD));
144 napi_object_freeze(env, distributedType);
145 return distributedType;
146 }
147
ExportChangeType(napi_env env)148 static napi_value ExportChangeType(napi_env env)
149 {
150 napi_value changeType = nullptr;
151 napi_create_object(env, &changeType);
152
153 SET_NAPI_PROPERTY(changeType, "DATA_CHANGE", int32_t(DistributedRdb::Origin::BASIC_DATA));
154 SET_NAPI_PROPERTY(changeType, "ASSET_CHANGE", int32_t(DistributedRdb::Origin::ASSET_DATA));
155 napi_object_freeze(env, changeType);
156 return changeType;
157 }
158
ExportAssetStatus(napi_env env)159 static napi_value ExportAssetStatus(napi_env env)
160 {
161 napi_value assetStatus = nullptr;
162 napi_create_object(env, &assetStatus);
163
164 SET_NAPI_PROPERTY(assetStatus, "ASSET_NORMAL", int32_t(NativeRdb::AssetValue::STATUS_NORMAL));
165 SET_NAPI_PROPERTY(assetStatus, "ASSET_INSERT", int32_t(NativeRdb::AssetValue::STATUS_INSERT));
166 SET_NAPI_PROPERTY(assetStatus, "ASSET_UPDATE", int32_t(NativeRdb::AssetValue::STATUS_UPDATE));
167 SET_NAPI_PROPERTY(assetStatus, "ASSET_DELETE", int32_t(NativeRdb::AssetValue::STATUS_DELETE));
168 SET_NAPI_PROPERTY(assetStatus, "ASSET_ABNORMAL", int32_t(NativeRdb::AssetValue::STATUS_ABNORMAL));
169 SET_NAPI_PROPERTY(assetStatus, "ASSET_DOWNLOADING", int32_t(NativeRdb::AssetValue::STATUS_DOWNLOADING));
170 napi_object_freeze(env, assetStatus);
171 return assetStatus;
172 }
173
ExportConflictResolution(napi_env env)174 static napi_value ExportConflictResolution(napi_env env)
175 {
176 napi_value conflictResolution = nullptr;
177 napi_create_object(env, &conflictResolution);
178
179 SET_NAPI_PROPERTY(conflictResolution, "ON_CONFLICT_NONE", int32_t(ConflictResolution::ON_CONFLICT_NONE));
180 SET_NAPI_PROPERTY(conflictResolution, "ON_CONFLICT_ROLLBACK", int32_t(ConflictResolution::ON_CONFLICT_ROLLBACK));
181 SET_NAPI_PROPERTY(conflictResolution, "ON_CONFLICT_ABORT", int32_t(ConflictResolution::ON_CONFLICT_ABORT));
182 SET_NAPI_PROPERTY(conflictResolution, "ON_CONFLICT_FAIL", int32_t(ConflictResolution::ON_CONFLICT_FAIL));
183 SET_NAPI_PROPERTY(conflictResolution, "ON_CONFLICT_IGNORE", int32_t(ConflictResolution::ON_CONFLICT_IGNORE));
184 SET_NAPI_PROPERTY(conflictResolution, "ON_CONFLICT_REPLACE", int32_t(ConflictResolution::ON_CONFLICT_REPLACE));
185
186 napi_object_freeze(env, conflictResolution);
187 return conflictResolution;
188 }
189
ExportRebuiltType(napi_env env)190 static napi_value ExportRebuiltType(napi_env env)
191 {
192 napi_value rebuiltType = nullptr;
193 napi_create_object(env, &rebuiltType);
194
195 SET_NAPI_PROPERTY(rebuiltType, "NONE", int32_t(NativeRdb::RebuiltType::NONE));
196 SET_NAPI_PROPERTY(rebuiltType, "REBUILT", int32_t(NativeRdb::RebuiltType::REBUILT));
197 SET_NAPI_PROPERTY(rebuiltType, "REPAIRED", int32_t(NativeRdb::RebuiltType::REPAIRED));
198
199 napi_object_freeze(env, rebuiltType);
200 return rebuiltType;
201 }
202
ExportHAMode(napi_env env)203 static napi_value ExportHAMode(napi_env env)
204 {
205 napi_value haMode = nullptr;
206 napi_create_object(env, &haMode);
207
208 SET_NAPI_PROPERTY(haMode, "SINGLE", int32_t(NativeRdb::HAMode::SINGLE));
209 SET_NAPI_PROPERTY(haMode, "MAIN_REPLICA", int32_t(NativeRdb::HAMode::MAIN_REPLICA));
210 napi_object_freeze(env, haMode);
211 return haMode;
212 }
213
ExportEncryptionAlgo(napi_env env)214 static napi_value ExportEncryptionAlgo(napi_env env)
215 {
216 napi_value encryptionAlgo = nullptr;
217 napi_create_object(env, &encryptionAlgo);
218
219 SET_NAPI_PROPERTY(encryptionAlgo, "AES_256_GCM", int32_t(NativeRdb::EncryptAlgo::AES_256_GCM));
220 SET_NAPI_PROPERTY(encryptionAlgo, "AES_256_CBC", int32_t(NativeRdb::EncryptAlgo::AES_256_CBC));
221 napi_object_freeze(env, encryptionAlgo);
222 return encryptionAlgo;
223 }
224
ExportHmacAlgo(napi_env env)225 static napi_value ExportHmacAlgo(napi_env env)
226 {
227 napi_value hmacAlgo = nullptr;
228 napi_create_object(env, &hmacAlgo);
229
230 SET_NAPI_PROPERTY(hmacAlgo, "SHA1", int32_t(NativeRdb::HmacAlgo::SHA1));
231 SET_NAPI_PROPERTY(hmacAlgo, "SHA256", int32_t(NativeRdb::HmacAlgo::SHA256));
232 SET_NAPI_PROPERTY(hmacAlgo, "SHA512", int32_t(NativeRdb::HmacAlgo::SHA512));
233 napi_object_freeze(env, hmacAlgo);
234 return hmacAlgo;
235 }
236
ExportKdfAlgo(napi_env env)237 static napi_value ExportKdfAlgo(napi_env env)
238 {
239 napi_value kdfAlgo = nullptr;
240 napi_create_object(env, &kdfAlgo);
241
242 SET_NAPI_PROPERTY(kdfAlgo, "KDF_SHA1", int32_t(NativeRdb::KdfAlgo::KDF_SHA1));
243 SET_NAPI_PROPERTY(kdfAlgo, "KDF_SHA256", int32_t(NativeRdb::KdfAlgo::KDF_SHA256));
244 SET_NAPI_PROPERTY(kdfAlgo, "KDF_SHA512", int32_t(NativeRdb::KdfAlgo::KDF_SHA512));
245 napi_object_freeze(env, kdfAlgo);
246 return kdfAlgo;
247 }
248
ExportTransactionType(napi_env env)249 static napi_value ExportTransactionType(napi_env env)
250 {
251 napi_value transactionType = nullptr;
252 napi_create_object(env, &transactionType);
253
254 SET_NAPI_PROPERTY(transactionType, "DEFERRED", int32_t(NativeRdb::Transaction::DEFERRED));
255 SET_NAPI_PROPERTY(transactionType, "IMMEDIATE", int32_t(NativeRdb::Transaction::IMMEDIATE));
256 SET_NAPI_PROPERTY(transactionType, "EXCLUSIVE", int32_t(NativeRdb::Transaction::EXCLUSIVE));
257 napi_object_freeze(env, transactionType);
258 return transactionType;
259 }
260
InitConstProperties(napi_env env,napi_value exports)261 napi_status InitConstProperties(napi_env env, napi_value exports)
262 {
263 const napi_property_descriptor properties[] = {
264 DECLARE_NAPI_PROPERTY("ConflictResolution", ExportConflictResolution(env)),
265 #if !defined(WINDOWS_PLATFORM) && !defined(MAC_PLATFORM)
266 DECLARE_NAPI_PROPERTY("SyncMode", ExportSyncMode(env)),
267 DECLARE_NAPI_PROPERTY("SubscribeType", ExportSubscribeType(env)),
268 DECLARE_NAPI_PROPERTY("SecurityLevel", ExportSecurityLevel(env)),
269 #endif
270 DECLARE_NAPI_PROPERTY("Progress", ExportProgress(env)),
271 DECLARE_NAPI_PROPERTY("ProgressCode", ExportProgressCode(env)),
272 DECLARE_NAPI_PROPERTY("DistributedType", ExportDistributedType(env)),
273 DECLARE_NAPI_PROPERTY("AssetStatus", ExportAssetStatus(env)),
274 DECLARE_NAPI_PROPERTY("ChangeType", ExportChangeType(env)),
275 DECLARE_NAPI_PROPERTY("Origin", ExportOrigin(env)),
276 DECLARE_NAPI_PROPERTY("Field", ExportField(env)),
277 DECLARE_NAPI_PROPERTY("RebuildType", ExportRebuiltType(env)),
278 DECLARE_NAPI_PROPERTY("HAMode", ExportHAMode(env)),
279 DECLARE_NAPI_PROPERTY("EncryptionAlgo", ExportEncryptionAlgo(env)),
280 DECLARE_NAPI_PROPERTY("HmacAlgo", ExportHmacAlgo(env)),
281 DECLARE_NAPI_PROPERTY("KdfAlgo", ExportKdfAlgo(env)),
282 DECLARE_NAPI_PROPERTY("TransactionType", ExportTransactionType(env)),
283 };
284
285 size_t count = sizeof(properties) / sizeof(properties[0]);
286 return napi_define_properties(env, exports, count, properties);
287 }
288 } // namespace OHOS::RelationalStoreJsKit