diff --git a/frameworks/jskitsimpl/distributeddata/include/js_field_node.h b/frameworks/jskitsimpl/distributeddata/include/js_field_node.h index 2845c94b07f13117e67218c74256ada7e5efdf76..693c499a72900903842bcfa2eea268be820b9887 100644 --- a/frameworks/jskitsimpl/distributeddata/include/js_field_node.h +++ b/frameworks/jskitsimpl/distributeddata/include/js_field_node.h @@ -36,7 +36,6 @@ public: private: static napi_value AppendChild(napi_env env, napi_callback_info info); - static napi_value ToJson(napi_env env, napi_callback_info info); static napi_value GetDefaultValue(napi_env env, napi_callback_info info); static napi_value SetDefaultValue(napi_env env, napi_callback_info info); static napi_value GetNullable(napi_env env, napi_callback_info info); diff --git a/frameworks/jskitsimpl/distributeddata/include/js_schema.h b/frameworks/jskitsimpl/distributeddata/include/js_schema.h index 860d3cea539581ccc64bd21b802631ff35f00cda..961de71b0dabc3befb4e8cbecf54aa85392408d4 100644 --- a/frameworks/jskitsimpl/distributeddata/include/js_schema.h +++ b/frameworks/jskitsimpl/distributeddata/include/js_schema.h @@ -29,8 +29,10 @@ public: static napi_value Constructor(napi_env env); static napi_value New(napi_env env, napi_callback_info info); + + static napi_status ToJson(napi_env env, napi_value inner, JsSchema*& out); + std::string Dump(); private: - static napi_value ToJson(napi_env env, napi_callback_info info); static napi_value GetRootNode(napi_env env, napi_callback_info info); static napi_value SetRootNode(napi_env env, napi_callback_info info); static napi_value GetMode(napi_env env, napi_callback_info info); @@ -40,8 +42,6 @@ private: static napi_value GetIndexes(napi_env env, napi_callback_info info); static napi_value SetIndexes(napi_env env, napi_callback_info info); - std::string Dump(); - enum { SCHEMA_MODE_SLOPPY, SCHEMA_MODE_STRICT, diff --git a/frameworks/jskitsimpl/distributeddata/include/js_util.h b/frameworks/jskitsimpl/distributeddata/include/js_util.h index 10a25b9aafd44163002f52e055fc6f7734a5b72f..d6c2d003de2499301926567f05f1142118e628ae 100644 --- a/frameworks/jskitsimpl/distributeddata/include/js_util.h +++ b/frameworks/jskitsimpl/distributeddata/include/js_util.h @@ -36,6 +36,7 @@ public: DOUBLE = 5, INVALID = 255 }; + using JsSchema = class JsSchema; using Blob = OHOS::DistributedKv::Blob; using ChangeNotification = OHOS::DistributedKv::ChangeNotification; using Options = OHOS::DistributedKv::Options; @@ -133,6 +134,8 @@ public: /* napi_value <-> std::map */ static napi_status GetValue(napi_env env, napi_value in, std::map& out); static napi_status SetValue(napi_env env, const std::map& in, napi_value& out); + + static napi_status GetValue(napi_env env, napi_value in, JsSchema*& out); /* napi_get_named_property wrapper */ template diff --git a/frameworks/jskitsimpl/distributeddata/src/js_field_node.cpp b/frameworks/jskitsimpl/distributeddata/src/js_field_node.cpp index cbf2c5798aba4b2b4aa6b88283556d16c5a552db..ea5b8b230dcbd3bac9488f6944826b8f4c360c40 100644 --- a/frameworks/jskitsimpl/distributeddata/src/js_field_node.cpp +++ b/frameworks/jskitsimpl/distributeddata/src/js_field_node.cpp @@ -61,7 +61,6 @@ napi_value JsFieldNode::Constructor(napi_env env) { const napi_property_descriptor properties[] = { DECLARE_NAPI_FUNCTION("appendChild", JsFieldNode::AppendChild), - DECLARE_NAPI_FUNCTION("toJson", JsFieldNode::ToJson), DECLARE_NAPI_GETTER_SETTER("default", JsFieldNode::GetDefaultValue, JsFieldNode::SetDefaultValue), DECLARE_NAPI_GETTER_SETTER("nullable", JsFieldNode::GetNullable, JsFieldNode::SetNullable), DECLARE_NAPI_GETTER_SETTER("type", JsFieldNode::GetValueType, JsFieldNode::SetValueType) @@ -120,19 +119,6 @@ napi_value JsFieldNode::AppendChild(napi_env env, napi_callback_info info) return ctxt->output; } -napi_value JsFieldNode::ToJson(napi_env env, napi_callback_info info) -{ - ZLOGD("FieldNode::ToJson"); - auto ctxt = std::make_shared(); - ctxt->GetCbInfoSync(env, info); - NAPI_ASSERT(env, ctxt->status == napi_ok, "invalid arguments!"); - - auto fieldNode = reinterpret_cast(ctxt->native); - std::string js = fieldNode->Dump(); - JSUtil::SetValue(env, js, ctxt->output); - return ctxt->output; -} - napi_value JsFieldNode::GetDefaultValue(napi_env env, napi_callback_info info) { ZLOGD("FieldNode::GetDefaultValue"); diff --git a/frameworks/jskitsimpl/distributeddata/src/js_schema.cpp b/frameworks/jskitsimpl/distributeddata/src/js_schema.cpp index 2d2bf484053470940897a90c234bd363ada3b7a4..1aaeef14361c616c41109e38901dc7c2e0201b1b 100644 --- a/frameworks/jskitsimpl/distributeddata/src/js_schema.cpp +++ b/frameworks/jskitsimpl/distributeddata/src/js_schema.cpp @@ -50,7 +50,6 @@ napi_value JsSchema::Constructor(napi_env env) { ZLOGD("Init JsSchema"); const napi_property_descriptor properties[] = { - DECLARE_NAPI_FUNCTION("toJsonString", JsSchema::ToJson), DECLARE_NAPI_GETTER_SETTER("root", JsSchema::GetRootNode, JsSchema::SetRootNode), DECLARE_NAPI_GETTER_SETTER("indexes", JsSchema::GetIndexes, JsSchema::SetIndexes), DECLARE_NAPI_GETTER_SETTER("mode", JsSchema::GetMode, JsSchema::SetMode), @@ -80,17 +79,10 @@ napi_value JsSchema::New(napi_env env, napi_callback_info info) return ctxt->self; } -napi_value JsSchema::ToJson(napi_env env, napi_callback_info info) +napi_status JsSchema::ToJson(napi_env env, napi_value inner, JsSchema*& out) { - ZLOGD("Schema::New"); - auto ctxt = std::make_shared(); - ctxt->GetCbInfoSync(env, info); - NAPI_ASSERT(env, ctxt->status == napi_ok, "invalid arguments!"); - - auto schema = reinterpret_cast(ctxt->native); - auto json = schema->Dump(); - JSUtil::SetValue(env, json, ctxt->output); - return ctxt->output; + ZLOGD("Schema::ToJson"); + return JSUtil::Unwrap(env, inner, (void**)(&out), JsSchema::Constructor(env)); } napi_value JsSchema::GetRootNode(napi_env env, napi_callback_info info) diff --git a/frameworks/jskitsimpl/distributeddata/src/js_util.cpp b/frameworks/jskitsimpl/distributeddata/src/js_util.cpp index efea296a9069f175fb28048504fcd1371772f675..9a92202f29e08e073c6ae06f9a4869f2f9181355 100644 --- a/frameworks/jskitsimpl/distributeddata/src/js_util.cpp +++ b/frameworks/jskitsimpl/distributeddata/src/js_util.cpp @@ -17,6 +17,7 @@ #include #include +#include "js_schema.h" #include "log_print.h" #include "napi_queue.h" @@ -884,7 +885,11 @@ napi_status JSUtil::GetValue(napi_env env, napi_value in, DistributedKv::Options GetNamedProperty(env, in, "kvStoreType", kvStoreType); options.kvStoreType = static_cast(kvStoreType); - GetNamedProperty(env, in, "schema", options.schema); + JsSchema *jsSchema = nullptr; + napi_status status = GetNamedProperty(env, in, "schema", jsSchema); + if (status == napi_ok) { + options.schema = jsSchema->Dump(); + } int32_t level = 0; GetNamedProperty(env, in, "securityLevel", level); @@ -892,6 +897,11 @@ napi_status JSUtil::GetValue(napi_env env, napi_value in, DistributedKv::Options return napi_ok; } +napi_status JSUtil::GetValue(napi_env env, napi_value inner, JsSchema*& out) +{ + return JsSchema::ToJson(env, inner, out); +} + napi_status JSUtil::SetValue(napi_env env, const DistributedKv::Options& in, napi_value& out) { (void)(env);