11#include " encoding_binding.h"
2+ #include " ada.h"
23#include " env-inl.h"
34#include " node_errors.h"
45#include " node_external_reference.h"
@@ -193,6 +194,28 @@ void BindingData::DecodeUTF8(const FunctionCallbackInfo<Value>& args) {
193194 args.GetReturnValue ().Set (ret);
194195}
195196
197+ void BindingData::ToASCII (const v8::FunctionCallbackInfo<v8::Value>& args) {
198+ Environment* env = Environment::GetCurrent (args);
199+ CHECK_GE (args.Length (), 1 );
200+ CHECK (args[0 ]->IsString ());
201+
202+ Utf8Value input (env->isolate (), args[0 ]);
203+ auto out = ada::idna::to_ascii (input.ToStringView ());
204+ args.GetReturnValue ().Set (
205+ String::NewFromUtf8 (env->isolate (), out.c_str ()).ToLocalChecked ());
206+ }
207+
208+ void BindingData::ToUnicode (const v8::FunctionCallbackInfo<v8::Value>& args) {
209+ Environment* env = Environment::GetCurrent (args);
210+ CHECK_GE (args.Length (), 1 );
211+ CHECK (args[0 ]->IsString ());
212+
213+ Utf8Value input (env->isolate (), args[0 ]);
214+ auto out = ada::idna::to_unicode (input.ToStringView ());
215+ args.GetReturnValue ().Set (
216+ String::NewFromUtf8 (env->isolate (), out.c_str ()).ToLocalChecked ());
217+ }
218+
196219void BindingData::Initialize (Local<Object> target,
197220 Local<Value> unused,
198221 Local<Context> context,
@@ -205,13 +228,17 @@ void BindingData::Initialize(Local<Object> target,
205228 SetMethod (context, target, " encodeInto" , EncodeInto);
206229 SetMethodNoSideEffect (context, target, " encodeUtf8String" , EncodeUtf8String);
207230 SetMethodNoSideEffect (context, target, " decodeUTF8" , DecodeUTF8);
231+ SetMethodNoSideEffect (context, target, " toASCII" , ToASCII);
232+ SetMethodNoSideEffect (context, target, " toUnicode" , ToUnicode);
208233}
209234
210235void BindingData::RegisterTimerExternalReferences (
211236 ExternalReferenceRegistry* registry) {
212237 registry->Register (EncodeInto);
213238 registry->Register (EncodeUtf8String);
214239 registry->Register (DecodeUTF8);
240+ registry->Register (ToASCII);
241+ registry->Register (ToUnicode);
215242}
216243
217244} // namespace encoding_binding
0 commit comments