@@ -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