MCPcopy Create free account
hub / github.com/NodeRT/NodeRT / CreateExternalWinRTObject

Function CreateExternalWinRTObject

src/NodeRTLib/ProjectFiles/NodeRtUtils.cpp:220–272  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

218}
219
220Local<Value> CreateExternalWinRTObject(const char* ns,
221 const char* objectName,
222 ::Platform::Object ^ instance) {
223 EscapableHandleScope scope;
224 Handle<Value> opaqueWrapper = CreateOpaqueWrapper(instance);
225
226 Local<Object> global = Nan::GetCurrentContext()->Global();
227 if (!Nan::Has(global,
228 Nan::New<String>("__winRtNamespaces__").ToLocalChecked())
229 .FromMaybe(false)) {
230 return scope.Escape(opaqueWrapper);
231 }
232
233 Local<Object> winRtObj =
234 Nan::To<Object>(
235 Nan::Get(global,
236 Nan::New<String>("__winRtNamespaces__").ToLocalChecked())
237 .ToLocalChecked())
238 .ToLocalChecked();
239
240 Local<String> nsSymbol = Nan::New<String>(ns).ToLocalChecked();
241 if (!Nan::Has(winRtObj, nsSymbol).FromMaybe(false)) {
242 return scope.Escape(opaqueWrapper);
243 }
244
245 v8::MaybeLocal<Value> maybeLocalRef = Nan::Get(winRtObj, nsSymbol);
246
247 if (maybeLocalRef.IsEmpty()) {
248 return scope.Escape(opaqueWrapper);
249 }
250
251 Local<Value> nsObjectValue = maybeLocalRef.ToLocalChecked();
252
253 if (Nan::Equals(nsObjectValue, Undefined()).FromMaybe(false)) {
254 Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(
255 L"Failed to obtain external namespace object")));
256 return Undefined();
257 }
258
259 Local<Object> nsObject = Nan::To<Object>(nsObjectValue).ToLocalChecked();
260
261 Local<String> objectNameSymbol =
262 Nan::New<String>(objectName).ToLocalChecked();
263 if (!Nan::Has(nsObject, objectNameSymbol).FromMaybe(false)) {
264 return scope.Escape(opaqueWrapper);
265 }
266
267 Local<Function> objectFunc =
268 Nan::Get(nsObject, objectNameSymbol).ToLocalChecked().As<Function>();
269 Local<Value> args[] = {opaqueWrapper};
270 return scope.Escape(
271 Nan::NewInstance(objectFunc, _countof(args), args).ToLocalChecked());
272}
273
274bool IsWinRtWrapper(Local<Value> value) {
275 if (value.IsEmpty() || (!value->IsObject() && !value->IsNull())) {

Callers

nothing calls this directly

Calls 1

NewStringFunction · 0.85

Tested by

no test coverage detected