• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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_want.h"
17 #include "pasteboard_common.h"
18 #include "pasteboard_hilog.h"
19 #include "pasteboard_js_err.h"
20 #include "pasteboard_napi.h"
21 #include "pixel_map_napi.h"
22 #include "systempasteboard_napi.h"
23 #include "uri.h"
24 using namespace OHOS::MiscServices;
25 using namespace OHOS::Media;
26 
27 namespace OHOS {
28 namespace MiscServicesNapi {
29 constexpr size_t MAX_ARGS = 6;
CreateHtmlRecord(napi_env env,napi_value in)30 napi_value PasteboardNapi::CreateHtmlRecord(napi_env env, napi_value in)
31 {
32     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreateHtmlRecord is called!");
33     std::string value;
34     bool ret = GetValue(env, in, value);
35     if (!ret) {
36         PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to GetValue!");
37         return nullptr;
38     }
39     napi_value instance = nullptr;
40     PasteDataRecordNapi::NewHtmlTextRecordInstance(env, value, instance);
41     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
42     return instance;
43 }
44 
CreatePlainTextRecord(napi_env env,napi_value in)45 napi_value PasteboardNapi::CreatePlainTextRecord(napi_env env, napi_value in)
46 {
47     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreatePlainTextRecord is called!");
48     std::string value;
49     bool ret = GetValue(env, in, value);
50     if (!ret) {
51         PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to GetValue!");
52         return nullptr;
53     }
54     napi_value instance = nullptr;
55     PasteDataRecordNapi::NewPlainTextRecordInstance(env, value, instance);
56     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
57     return instance;
58 }
59 
CreateUriRecord(napi_env env,napi_value in)60 napi_value PasteboardNapi::CreateUriRecord(napi_env env, napi_value in)
61 {
62     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreateUriRecord is called!");
63     std::string value;
64     bool ret = GetValue(env, in, value);
65     if (!ret) {
66         PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to GetValue!");
67         return nullptr;
68     }
69     napi_value instance = nullptr;
70     PasteDataRecordNapi::NewUriRecordInstance(env, value, instance);
71     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
72     return instance;
73 }
74 
CreatePixelMapRecord(napi_env env,napi_value in)75 napi_value PasteboardNapi::CreatePixelMapRecord(napi_env env, napi_value in)
76 {
77     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreatePixelMapRecord is called!");
78     std::shared_ptr<PixelMap> pixelMap = PixelMapNapi::GetPixelMap(env, in);
79     if (pixelMap == nullptr) {
80         PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to get pixelMap!");
81         return nullptr;
82     }
83     napi_value instance = nullptr;
84     PasteDataRecordNapi::NewPixelMapRecordInstance(env, pixelMap, instance);
85     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
86     return instance;
87 }
88 
CreateWantRecord(napi_env env,napi_value in)89 napi_value PasteboardNapi::CreateWantRecord(napi_env env, napi_value in)
90 {
91     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreateWantRecord is called!");
92     AAFwk::Want want;
93     bool ret = OHOS::AppExecFwk::UnwrapWant(env, in, want);
94     if (!ret) {
95         PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to unwrap want!");
96         return nullptr;
97     }
98     napi_value instance = nullptr;
99     PasteDataRecordNapi::NewWantRecordInstance(env, std::make_shared<AAFwk::Want>(want), instance);
100     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
101     return instance;
102 }
103 
104 // common function of CreateHtmlData, CreatePlainTextData, CreateUriData
CreateDataCommon(napi_env env,napi_value in,std::string & str,napi_value & instance)105 PasteDataNapi *PasteboardNapi::CreateDataCommon(napi_env env, napi_value in, std::string &str, napi_value &instance)
106 {
107     bool ret = GetValue(env, in, str);
108     if (!ret) {
109         PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "GetValue failed");
110         return nullptr;
111     }
112     NAPI_CALL(env, PasteDataNapi::NewInstance(env, instance));
113     PasteDataNapi *obj = nullptr;
114     napi_status status = napi_unwrap(env, instance, reinterpret_cast<void **>(&obj));
115     if ((status != napi_ok) || (obj == nullptr)) {
116         return nullptr;
117     }
118     return obj;
119 }
120 
CreateHtmlData(napi_env env,napi_value in)121 napi_value PasteboardNapi::CreateHtmlData(napi_env env, napi_value in)
122 {
123     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreateHtmlData is called!");
124     std::string str;
125     napi_value instance = nullptr;
126     PasteDataNapi *obj = CreateDataCommon(env, in, str, instance);
127     if (obj == nullptr) {
128         return nullptr;
129     }
130     obj->value_ = PasteboardClient::GetInstance()->CreateHtmlData(str);
131     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
132     return instance;
133 }
134 
CreatePlainTextData(napi_env env,napi_value in)135 napi_value PasteboardNapi::CreatePlainTextData(napi_env env, napi_value in)
136 {
137     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreatePlainTextData is called!");
138     std::string str;
139     napi_value instance = nullptr;
140     PasteDataNapi *obj = CreateDataCommon(env, in, str, instance);
141     if (obj == nullptr) {
142         return nullptr;
143     }
144     obj->value_ = PasteboardClient::GetInstance()->CreatePlainTextData(str);
145     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
146     return instance;
147 }
148 
CreateUriData(napi_env env,napi_value in)149 napi_value PasteboardNapi::CreateUriData(napi_env env, napi_value in)
150 {
151     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreateUriData is called!");
152     std::string str;
153     napi_value instance = nullptr;
154     PasteDataNapi *obj = CreateDataCommon(env, in, str, instance);
155     if (obj == nullptr) {
156         return nullptr;
157     }
158     obj->value_ = PasteboardClient::GetInstance()->CreateUriData(OHOS::Uri(str));
159     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
160     return instance;
161 }
162 
CreatePixelMapData(napi_env env,napi_value in)163 napi_value PasteboardNapi::CreatePixelMapData(napi_env env, napi_value in)
164 {
165     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreatePixelMapData is called!");
166     std::shared_ptr<PixelMap> pixelMap = PixelMapNapi::GetPixelMap(env, in);
167     if (pixelMap == nullptr) {
168         PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to get pixelMap!");
169         return nullptr;
170     }
171     napi_value instance = nullptr;
172     NAPI_CALL(env, PasteDataNapi::NewInstance(env, instance));
173     PasteDataNapi *obj = nullptr;
174     napi_status status = napi_unwrap(env, instance, reinterpret_cast<void **>(&obj));
175     if ((status != napi_ok) || (obj == nullptr)) {
176         PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "unwrap Failed!");
177         return nullptr;
178     }
179     obj->value_ = PasteboardClient::GetInstance()->CreatePixelMapData(pixelMap);
180     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
181     return instance;
182 }
183 
CreateWantData(napi_env env,napi_value in)184 napi_value PasteboardNapi::CreateWantData(napi_env env, napi_value in)
185 {
186     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreateWantData is called!");
187     AAFwk::Want want;
188     bool ret = OHOS::AppExecFwk::UnwrapWant(env, in, want);
189     if (!ret) {
190         PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to unwrap want!");
191         return nullptr;
192     }
193     napi_value instance = nullptr;
194     NAPI_CALL(env, PasteDataNapi::NewInstance(env, instance));
195     PasteDataNapi *obj = nullptr;
196     napi_status status = napi_unwrap(env, instance, reinterpret_cast<void **>(&obj));
197     if ((status != napi_ok) || (obj == nullptr)) {
198         return nullptr;
199     }
200     obj->value_ = PasteboardClient::GetInstance()->CreateWantData(std::make_shared<AAFwk::Want>(want));
201     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
202     return instance;
203 }
204 
JScreateHtmlTextRecord(napi_env env,napi_callback_info info)205 napi_value PasteboardNapi::JScreateHtmlTextRecord(napi_env env, napi_callback_info info)
206 {
207     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateHtmlTextRecord is called!");
208     size_t argc = MAX_ARGS;
209     napi_value argv[MAX_ARGS] = { 0 };
210     napi_value thisVar = nullptr;
211 
212     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
213     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
214 
215     return CreateHtmlRecord(env, argv[0]);
216 }
217 
JScreateWantRecord(napi_env env,napi_callback_info info)218 napi_value PasteboardNapi::JScreateWantRecord(napi_env env, napi_callback_info info)
219 {
220     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateWantRecord is called!");
221     size_t argc = MAX_ARGS;
222     napi_value argv[MAX_ARGS] = { 0 };
223     napi_value thisVar = nullptr;
224 
225     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
226     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
227     napi_valuetype valueType = napi_undefined;
228     NAPI_CALL(env, napi_typeof(env, argv[0], &valueType));
229     NAPI_ASSERT(env, valueType == napi_object, "Wrong argument type. Object expected.");
230 
231     return CreateWantRecord(env, argv[0]);
232 }
233 
JScreateShareOption(napi_env env,napi_callback_info info)234 napi_value PasteboardNapi::JScreateShareOption(napi_env env, napi_callback_info info)
235 {
236     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateShareOption is called!");
237 
238     napi_value jsShareOption = nullptr;
239     napi_create_object(env, &jsShareOption);
240 
241     napi_value jsInApp = CreateNapiNumber(env, static_cast<int32_t>(ShareOption::InApp));
242     NAPI_CALL(env, napi_set_named_property(env, jsShareOption, "InApp", jsInApp));
243     NAPI_CALL(env, napi_set_named_property(env, jsShareOption, "INAPP", jsInApp));
244 
245     napi_value jsLocalDevice = CreateNapiNumber(env, static_cast<int32_t>(ShareOption::LocalDevice));
246     NAPI_CALL(env, napi_set_named_property(env, jsShareOption, "LocalDevice", jsLocalDevice));
247     NAPI_CALL(env, napi_set_named_property(env, jsShareOption, "LOCALDEVICE", jsLocalDevice));
248 
249     napi_value jsCrossDevice = CreateNapiNumber(env, static_cast<int32_t>(ShareOption::CrossDevice));
250     NAPI_CALL(env, napi_set_named_property(env, jsShareOption, "CrossDevice", jsCrossDevice));
251     NAPI_CALL(env, napi_set_named_property(env, jsShareOption, "CROSSDEVICE", jsCrossDevice));
252 
253     return jsShareOption;
254 }
255 
JScreatePlainTextRecord(napi_env env,napi_callback_info info)256 napi_value PasteboardNapi::JScreatePlainTextRecord(napi_env env, napi_callback_info info)
257 {
258     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreatePlainTextRecord is called!");
259     size_t argc = MAX_ARGS;
260     napi_value argv[MAX_ARGS] = { 0 };
261     napi_value thisVar = nullptr;
262 
263     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
264     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
265 
266     return CreatePlainTextRecord(env, argv[0]);
267 }
268 
JScreatePixelMapRecord(napi_env env,napi_callback_info info)269 napi_value PasteboardNapi::JScreatePixelMapRecord(napi_env env, napi_callback_info info)
270 {
271     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreatePixelMapRecord is called!");
272     size_t argc = MAX_ARGS;
273     napi_value argv[MAX_ARGS] = { 0 };
274     napi_value thisVar = nullptr;
275 
276     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
277     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
278 
279     napi_valuetype valueType = napi_undefined;
280     NAPI_CALL(env, napi_typeof(env, argv[0], &valueType));
281     NAPI_ASSERT(env, valueType == napi_object, "Wrong argument type. Object expected.");
282 
283     return CreatePixelMapRecord(env, argv[0]);
284 }
285 
JScreateUriRecord(napi_env env,napi_callback_info info)286 napi_value PasteboardNapi::JScreateUriRecord(napi_env env, napi_callback_info info)
287 {
288     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateUriRecord is called!");
289     size_t argc = MAX_ARGS;
290     napi_value argv[MAX_ARGS] = { 0 };
291     napi_value thisVar = nullptr;
292 
293     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
294     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
295 
296     return CreateUriRecord(env, argv[0]);
297 }
298 
JSCreateRecord(napi_env env,napi_callback_info info)299 napi_value PasteboardNapi::JSCreateRecord(napi_env env, napi_callback_info info)
300 {
301     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSCreateRecord is called!");
302     size_t argc = MAX_ARGS;
303     napi_value argv[MAX_ARGS] = { 0 };
304     napi_value thisVar = nullptr;
305     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
306     std::string mimeType;
307     if (!CheckArgs(env, argv, argc, mimeType)) {
308         return nullptr;
309     }
310     auto it = createRecordMap_.find(mimeType);
311     if (it != createRecordMap_.end()) {
312         return (it->second)(env, argv[1]);
313     }
314 
315     void *data = nullptr;
316     size_t dataLen = 0;
317     NAPI_CALL(env, napi_get_arraybuffer_info(env, argv[1], &data, &dataLen));
318     std::vector<uint8_t> arrayBuf(reinterpret_cast<uint8_t *>(data), reinterpret_cast<uint8_t *>(data) + dataLen);
319     napi_value instance = nullptr;
320     PasteDataRecordNapi::NewKvRecordInstance(env, mimeType, arrayBuf, instance);
321     return instance;
322 }
323 
JScreateHtmlData(napi_env env,napi_callback_info info)324 napi_value PasteboardNapi::JScreateHtmlData(napi_env env, napi_callback_info info)
325 {
326     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateHtmlData is called!");
327     size_t argc = MAX_ARGS;
328     napi_value argv[MAX_ARGS] = { 0 };
329     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
330     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
331 
332     return CreateHtmlData(env, argv[0]);
333 }
334 
JScreateWantData(napi_env env,napi_callback_info info)335 napi_value PasteboardNapi::JScreateWantData(napi_env env, napi_callback_info info)
336 {
337     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateWantData is called!");
338     size_t argc = MAX_ARGS;
339     napi_value argv[MAX_ARGS] = { 0 };
340     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
341     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
342     napi_valuetype valueType = napi_undefined;
343     NAPI_CALL(env, napi_typeof(env, argv[0], &valueType));
344     NAPI_ASSERT(env, valueType == napi_object, "Wrong argument type. Object expected.");
345 
346     return CreateWantData(env, argv[0]);
347 }
348 
JScreatePlainTextData(napi_env env,napi_callback_info info)349 napi_value PasteboardNapi::JScreatePlainTextData(napi_env env, napi_callback_info info)
350 {
351     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreatePlainTextData is called!");
352     size_t argc = MAX_ARGS;
353     napi_value argv[MAX_ARGS] = { 0 };
354     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
355     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
356 
357     return CreatePlainTextData(env, argv[0]);
358 }
359 
JScreatePixelMapData(napi_env env,napi_callback_info info)360 napi_value PasteboardNapi::JScreatePixelMapData(napi_env env, napi_callback_info info)
361 {
362     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreatePixelMapData is called!");
363     size_t argc = MAX_ARGS;
364     napi_value argv[MAX_ARGS] = { 0 };
365     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
366     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
367     napi_valuetype valueType = napi_undefined;
368     NAPI_CALL(env, napi_typeof(env, argv[0], &valueType));
369     NAPI_ASSERT(env, valueType == napi_object, "Wrong argument type. Object expected.");
370 
371     return CreatePixelMapData(env, argv[0]);
372 }
373 
JScreateUriData(napi_env env,napi_callback_info info)374 napi_value PasteboardNapi::JScreateUriData(napi_env env, napi_callback_info info)
375 {
376     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateUriData is called!");
377     size_t argc = MAX_ARGS;
378     napi_value argv[MAX_ARGS] = { 0 };
379     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
380     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
381 
382     return CreateUriData(env, argv[0]);
383 }
384 
JSCreateKvData(napi_env env,const std::string & mimeType,const std::vector<uint8_t> & arrayBuffer)385 napi_value PasteboardNapi::JSCreateKvData(
386     napi_env env, const std::string &mimeType, const std::vector<uint8_t> &arrayBuffer)
387 {
388     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSCreateKvData is called!");
389 
390     napi_value instance = nullptr;
391     NAPI_CALL(env, PasteDataNapi::NewInstance(env, instance));
392     PasteDataNapi *obj = nullptr;
393     napi_status status = napi_unwrap(env, instance, reinterpret_cast<void **>(&obj));
394     if ((status != napi_ok) || (obj == nullptr)) {
395         PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "unwrap failed!");
396         return nullptr;
397     }
398 
399     obj->value_ = PasteboardClient::GetInstance()->CreateKvData(mimeType, arrayBuffer);
400     return instance;
401 }
402 
JSCreateData(napi_env env,napi_callback_info info)403 napi_value PasteboardNapi::JSCreateData(napi_env env, napi_callback_info info)
404 {
405     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSCreateData is called!");
406     size_t argc = MAX_ARGS;
407     napi_value argv[MAX_ARGS] = { 0 };
408     napi_value thisVar = nullptr;
409     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
410     std::string mimeType;
411     if (!CheckArgs(env, argv, argc, mimeType)) {
412         return nullptr;
413     }
414     auto it = createDataMap_.find(mimeType);
415     if (it != createDataMap_.end()) {
416         return (it->second)(env, argv[1]);
417     }
418 
419     void *data = nullptr;
420     size_t dataLen = 0;
421     NAPI_CALL(env, napi_get_arraybuffer_info(env, argv[1], &data, &dataLen));
422     std::vector<uint8_t> arrayBuf(reinterpret_cast<uint8_t *>(data), reinterpret_cast<uint8_t *>(data) + dataLen);
423     return JSCreateKvData(env, mimeType, arrayBuf);
424 }
425 
JSgetSystemPasteboard(napi_env env,napi_callback_info info)426 napi_value PasteboardNapi::JSgetSystemPasteboard(napi_env env, napi_callback_info info)
427 {
428     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSgetSystemPasteboard is called!");
429     size_t argc = MAX_ARGS;
430     napi_value argv[MAX_ARGS] = { 0 };
431     napi_value thisVar = nullptr;
432 
433     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
434     napi_value instance = nullptr;
435     napi_status status = SystemPasteboardNapi::NewInstance(env, instance); // 0 arguments
436     if (status != napi_ok) {
437         PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSgetSystemPasteboard create instance failed");
438         return NapiGetNull(env);
439     }
440 
441     return instance;
442 }
443 
PasteBoardInit(napi_env env,napi_value exports)444 napi_value PasteboardNapi::PasteBoardInit(napi_env env, napi_value exports)
445 {
446     napi_property_descriptor desc[] = { DECLARE_NAPI_FUNCTION("createHtmlData", JScreateHtmlData),
447         DECLARE_NAPI_FUNCTION("createWantData", JScreateWantData),
448         DECLARE_NAPI_FUNCTION("createPlainTextData", JScreatePlainTextData),
449         DECLARE_NAPI_FUNCTION("createPixelMapData", JScreatePixelMapData),
450         DECLARE_NAPI_FUNCTION("createUriData", JScreateUriData),
451         DECLARE_NAPI_FUNCTION("createData", JSCreateData),
452         DECLARE_NAPI_FUNCTION("createHtmlTextRecord", JScreateHtmlTextRecord),
453         DECLARE_NAPI_FUNCTION("createWantRecord", JScreateWantRecord),
454         DECLARE_NAPI_FUNCTION("createPlainTextRecord", JScreatePlainTextRecord),
455         DECLARE_NAPI_FUNCTION("createPixelMapRecord", JScreatePixelMapRecord),
456         DECLARE_NAPI_FUNCTION("createUriRecord", JScreateUriRecord),
457         DECLARE_NAPI_FUNCTION("createRecord", JSCreateRecord),
458         DECLARE_NAPI_FUNCTION("getSystemPasteboard", JSgetSystemPasteboard),
459         DECLARE_NAPI_GETTER("ShareOption", JScreateShareOption),
460         DECLARE_NAPI_PROPERTY("MAX_RECORD_NUM", CreateNapiNumber(env, PasteData::MAX_RECORD_NUM)),
461         DECLARE_NAPI_PROPERTY("MIMETYPE_PIXELMAP", CreateNapiString(env, MIMETYPE_PIXELMAP)),
462         DECLARE_NAPI_PROPERTY("MIMETYPE_TEXT_HTML", CreateNapiString(env, MIMETYPE_TEXT_HTML)),
463         DECLARE_NAPI_PROPERTY("MIMETYPE_TEXT_WANT", CreateNapiString(env, MIMETYPE_TEXT_WANT)),
464         DECLARE_NAPI_PROPERTY("MIMETYPE_TEXT_PLAIN", CreateNapiString(env, MIMETYPE_TEXT_PLAIN)),
465         DECLARE_NAPI_PROPERTY("MIMETYPE_TEXT_URI", CreateNapiString(env, MIMETYPE_TEXT_URI)) };
466 
467     NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
468 
469     return exports;
470 }
471 
472 std::unordered_map<std::string, PasteboardNapi::FUNC> PasteboardNapi::createRecordMap_ = {
473     { "text/html", &PasteboardNapi::CreateHtmlRecord }, { "text/plain", &PasteboardNapi::CreatePlainTextRecord },
474     { "text/uri", &PasteboardNapi::CreateUriRecord }, { "pixelMap", &PasteboardNapi::CreatePixelMapRecord },
475     { "text/want", &PasteboardNapi::CreateWantRecord }
476 };
477 
478 std::unordered_map<std::string, PasteboardNapi::FUNC> PasteboardNapi::createDataMap_ = {
479     { "text/html", &PasteboardNapi::CreateHtmlData }, { "text/plain", &PasteboardNapi::CreatePlainTextData },
480     { "text/uri", &PasteboardNapi::CreateUriData }, { "pixelMap", &PasteboardNapi::CreatePixelMapData },
481     { "text/want", &PasteboardNapi::CreateWantData }
482 };
483 } // namespace MiscServicesNapi
484 } // namespace OHOS