@@ -889,33 +889,36 @@ size_t KeyObjectData::GetSymmetricKeySize() const {
889889  return  symmetric_key_.size ();
890890}
891891
892+ bool  KeyObjectHandle::HasInstance (Environment* env, Local<Value> value) {
893+   Local<FunctionTemplate> t = env->crypto_key_object_handle_constructor ();
894+   return  !t.IsEmpty () && t->HasInstance (value);
895+ }
896+ 
892897v8::Local<v8::Function> KeyObjectHandle::Initialize (Environment* env) {
893-   Local<Function> templ = env->crypto_key_object_handle_constructor ();
894-   if  (!templ.IsEmpty ()) {
895-     return  templ;
898+   Local<FunctionTemplate> templ = env->crypto_key_object_handle_constructor ();
899+   if  (templ.IsEmpty ()) {
900+     Isolate* isolate = env->isolate ();
901+     templ = NewFunctionTemplate (isolate, New);
902+     templ->InstanceTemplate ()->SetInternalFieldCount (
903+         KeyObjectHandle::kInternalFieldCount );
904+     templ->Inherit (BaseObject::GetConstructorTemplate (env));
905+ 
906+     SetProtoMethod (isolate, templ, " init"  , Init);
907+     SetProtoMethodNoSideEffect (
908+         isolate, templ, " getSymmetricKeySize"  , GetSymmetricKeySize);
909+     SetProtoMethodNoSideEffect (
910+         isolate, templ, " getAsymmetricKeyType"  , GetAsymmetricKeyType);
911+     SetProtoMethod (isolate, templ, " export"  , Export);
912+     SetProtoMethod (isolate, templ, " exportJwk"  , ExportJWK);
913+     SetProtoMethod (isolate, templ, " initECRaw"  , InitECRaw);
914+     SetProtoMethod (isolate, templ, " initEDRaw"  , InitEDRaw);
915+     SetProtoMethod (isolate, templ, " initJwk"  , InitJWK);
916+     SetProtoMethod (isolate, templ, " keyDetail"  , GetKeyDetail);
917+     SetProtoMethod (isolate, templ, " equals"  , Equals);
918+ 
919+     env->set_crypto_key_object_handle_constructor (templ);
896920  }
897-   Isolate* isolate = env->isolate ();
898-   Local<FunctionTemplate> t = NewFunctionTemplate (isolate, New);
899-   t->InstanceTemplate ()->SetInternalFieldCount (
900-       KeyObjectHandle::kInternalFieldCount );
901-   t->Inherit (BaseObject::GetConstructorTemplate (env));
902- 
903-   SetProtoMethod (isolate, t, " init"  , Init);
904-   SetProtoMethodNoSideEffect (
905-       isolate, t, " getSymmetricKeySize"  , GetSymmetricKeySize);
906-   SetProtoMethodNoSideEffect (
907-       isolate, t, " getAsymmetricKeyType"  , GetAsymmetricKeyType);
908-   SetProtoMethod (isolate, t, " export"  , Export);
909-   SetProtoMethod (isolate, t, " exportJwk"  , ExportJWK);
910-   SetProtoMethod (isolate, t, " initECRaw"  , InitECRaw);
911-   SetProtoMethod (isolate, t, " initEDRaw"  , InitEDRaw);
912-   SetProtoMethod (isolate, t, " initJwk"  , InitJWK);
913-   SetProtoMethod (isolate, t, " keyDetail"  , GetKeyDetail);
914-   SetProtoMethod (isolate, t, " equals"  , Equals);
915- 
916-   auto  function = t->GetFunction (env->context ()).ToLocalChecked ();
917-   env->set_crypto_key_object_handle_constructor (function);
918-   return  function;
921+   return  templ->GetFunction (env->context ()).ToLocalChecked ();
919922}
920923
921924void  KeyObjectHandle::RegisterExternalReferences (
0 commit comments