@@ -565,6 +565,36 @@ void StringSlice(const FunctionCallbackInfo<Value>& args) {
565565 args.GetReturnValue ().Set (ret);
566566}
567567
568+ // Convert the input into a encoded string
569+ void AsString (const FunctionCallbackInfo<Value>& args) {
570+ Environment* env = Environment::GetCurrent (args); // list, encoding
571+
572+ if (!(args[0 ]->IsArrayBuffer () || args[0 ]->IsSharedArrayBuffer () ||
573+ args[0 ]->IsArrayBufferView ())) {
574+ return node::THROW_ERR_INVALID_ARG_TYPE (
575+ env->isolate (),
576+ " The \" list\" argument must be an instance of SharedArrayBuffer, "
577+ " ArrayBuffer or ArrayBufferView." );
578+ }
579+
580+ CHECK (args[1 ]->IsString ());
581+
582+ ArrayBufferViewContents<char > buffer (args[0 ]);
583+ enum encoding enc = ParseEncoding (env->isolate (), args[1 ], UTF8);
584+
585+ if (buffer.length () == 0 ) return args.GetReturnValue ().SetEmptyString ();
586+
587+ Local<Value> error;
588+ MaybeLocal<Value> maybe_ret = StringBytes::Encode (
589+ env->isolate (), buffer.data (), buffer.length (), enc, &error);
590+ Local<Value> ret;
591+ if (!maybe_ret.ToLocal (&ret)) {
592+ CHECK (!error.IsEmpty ());
593+ env->isolate ()->ThrowException (error);
594+ return ;
595+ }
596+ args.GetReturnValue ().Set (ret);
597+ }
568598
569599// bytesCopied = copy(buffer, target[, targetStart][, sourceStart][, sourceEnd])
570600void Copy (const FunctionCallbackInfo<Value> &args) {
@@ -1282,6 +1312,7 @@ void Initialize(Local<Object> target,
12821312
12831313 SetMethod (context, target, " setBufferPrototype" , SetBufferPrototype);
12841314 SetMethodNoSideEffect (context, target, " createFromString" , CreateFromString);
1315+ SetMethodNoSideEffect (context, target, " asString" , AsString);
12851316
12861317 SetMethodNoSideEffect (context, target, " byteLengthUtf8" , ByteLengthUtf8);
12871318 SetMethod (context, target, " copy" , Copy);
@@ -1339,6 +1370,7 @@ void Initialize(Local<Object> target,
13391370void RegisterExternalReferences (ExternalReferenceRegistry* registry) {
13401371 registry->Register (SetBufferPrototype);
13411372 registry->Register (CreateFromString);
1373+ registry->Register (AsString);
13421374
13431375 registry->Register (ByteLengthUtf8);
13441376 registry->Register (Copy);
0 commit comments