mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
src: replace idna functions with ada::idna
Co-authored-by: Daniel Lemire <daniel@lemire.me> PR-URL: https://github.com/nodejs/node/pull/47735 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Minwoo Jung <nodecorelab@gmail.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
'use strict';
|
||||
|
||||
const { domainToASCII, domainToUnicode } = require('internal/url');
|
||||
module.exports = { toASCII: domainToASCII, toUnicode: domainToUnicode };
|
||||
const { toASCII, toUnicode } = internalBinding('encoding_binding');
|
||||
module.exports = { toASCII, toUnicode };
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "encoding_binding.h"
|
||||
#include "ada.h"
|
||||
#include "env-inl.h"
|
||||
#include "node_errors.h"
|
||||
#include "node_external_reference.h"
|
||||
@@ -193,6 +194,28 @@ void BindingData::DecodeUTF8(const FunctionCallbackInfo<Value>& args) {
|
||||
args.GetReturnValue().Set(ret);
|
||||
}
|
||||
|
||||
void BindingData::ToASCII(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
||||
Environment* env = Environment::GetCurrent(args);
|
||||
CHECK_GE(args.Length(), 1);
|
||||
CHECK(args[0]->IsString());
|
||||
|
||||
Utf8Value input(env->isolate(), args[0]);
|
||||
auto out = ada::idna::to_ascii(input.ToStringView());
|
||||
args.GetReturnValue().Set(
|
||||
String::NewFromUtf8(env->isolate(), out.c_str()).ToLocalChecked());
|
||||
}
|
||||
|
||||
void BindingData::ToUnicode(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
||||
Environment* env = Environment::GetCurrent(args);
|
||||
CHECK_GE(args.Length(), 1);
|
||||
CHECK(args[0]->IsString());
|
||||
|
||||
Utf8Value input(env->isolate(), args[0]);
|
||||
auto out = ada::idna::to_unicode(input.ToStringView());
|
||||
args.GetReturnValue().Set(
|
||||
String::NewFromUtf8(env->isolate(), out.c_str()).ToLocalChecked());
|
||||
}
|
||||
|
||||
void BindingData::Initialize(Local<Object> target,
|
||||
Local<Value> unused,
|
||||
Local<Context> context,
|
||||
@@ -205,6 +228,8 @@ void BindingData::Initialize(Local<Object> target,
|
||||
SetMethod(context, target, "encodeInto", EncodeInto);
|
||||
SetMethodNoSideEffect(context, target, "encodeUtf8String", EncodeUtf8String);
|
||||
SetMethodNoSideEffect(context, target, "decodeUTF8", DecodeUTF8);
|
||||
SetMethodNoSideEffect(context, target, "toASCII", ToASCII);
|
||||
SetMethodNoSideEffect(context, target, "toUnicode", ToUnicode);
|
||||
}
|
||||
|
||||
void BindingData::RegisterTimerExternalReferences(
|
||||
@@ -212,6 +237,8 @@ void BindingData::RegisterTimerExternalReferences(
|
||||
registry->Register(EncodeInto);
|
||||
registry->Register(EncodeUtf8String);
|
||||
registry->Register(DecodeUTF8);
|
||||
registry->Register(ToASCII);
|
||||
registry->Register(ToUnicode);
|
||||
}
|
||||
|
||||
} // namespace encoding_binding
|
||||
|
||||
@@ -32,6 +32,9 @@ class BindingData : public SnapshotableObject {
|
||||
static void EncodeUtf8String(const v8::FunctionCallbackInfo<v8::Value>& args);
|
||||
static void DecodeUTF8(const v8::FunctionCallbackInfo<v8::Value>& args);
|
||||
|
||||
static void ToASCII(const v8::FunctionCallbackInfo<v8::Value>& args);
|
||||
static void ToUnicode(const v8::FunctionCallbackInfo<v8::Value>& args);
|
||||
|
||||
static void Initialize(v8::Local<v8::Object> target,
|
||||
v8::Local<v8::Value> unused,
|
||||
v8::Local<v8::Context> context,
|
||||
|
||||
Reference in New Issue
Block a user