Skip to content

Commit 7694d17

Browse files
Revert all NativeString changes from last month (#1269)
* Revert "Fix NativeStringContext: fixed 8MB pool, malloc fallback, and proper free (#1264)" This reverts commit 71cac73. Co-authored-by: uNetworkingAB <110806833+uNetworkingAB@users.noreply.github.com> * Revert "Replace NativeString heap allocations with thread-local pool allocator (#1263)" This reverts commit 3e2ea85. Co-authored-by: uNetworkingAB <110806833+uNetworkingAB@users.noreply.github.com> * Revert "Update NativeString to use better copy mechanism and ValueView for utf8 string data direct access (#1262)" This reverts commit 6b4968f. Co-authored-by: uNetworkingAB <110806833+uNetworkingAB@users.noreply.github.com> * Revert "Add DataView support, update RecognizedString type (#1258)" This reverts commit 0b0c8f9. Co-authored-by: uNetworkingAB <110806833+uNetworkingAB@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: uNetworkingAB <110806833+uNetworkingAB@users.noreply.github.com>
1 parent 638267b commit 7694d17

8 files changed

Lines changed: 79 additions & 169 deletions

File tree

docs/index.d.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,10 @@ export interface AppDescriptor {
4747
* This because we expect UTF-8, which is packed in 8-byte chars. JavaScript strings are UTF-16 internally meaning extra copies and reinterpretation are required.
4848
*
4949
* That's why all events pass data by ArrayBuffer and not JavaScript strings, as they allow zero-copy data passing.
50+
*
5051
* You can always do Buffer.from(arrayBuffer).toString(), but keeping things binary and as ArrayBuffer is preferred.
51-
*
52-
* The ArrayBufferView type includes Node.js Buffer, DataView, and TypedArray (Uint8Array, Uint16Array, ...).
5352
*/
54-
export type RecognizedString = string | ArrayBuffer | SharedArrayBuffer | ArrayBufferView;
53+
export type RecognizedString = string | ArrayBuffer | Uint8Array | Int8Array | Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array | Float64Array;
5554

5655
/** A WebSocket connection that is valid from open to close event.
5756
* Read more about this in the user manual.

docs/tsconfig.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
{
22
"files": [ "index.d.ts" ],
3-
"compilerOptions": {
4-
"lib": [ "es2017" ]
5-
},
63
"typedocOptions": {
74
"name":"uWebSockets.js v20.61.0 documentation",
85
"entryPoints": [ "index.d.ts" ],

src/AppWrapper.h

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ void uWS_App_ws(const FunctionCallbackInfo<Value> &args) {
3737
/* This one is default constructed with defaults */
3838
typename APP::template WebSocketBehavior<PerSocketData> behavior = {};
3939

40-
NativeStringContext nativeStringContext;
41-
NativeString pattern(nativeStringContext, args.GetIsolate(), args[0]);
40+
NativeString pattern(args.GetIsolate(), args[0]);
4241
if (pattern.isInvalid(args)) {
4342
return;
4443
}
@@ -314,9 +313,8 @@ template <typename APP, typename F>
314313
void uWS_App_get(F f, const FunctionCallbackInfo<Value> &args) {
315314
APP *app = (APP *) args.This()->GetAlignedPointerFromInternalField(0);
316315

317-
NativeStringContext nativeStringContext;
318316
/* Pattern */
319-
NativeString pattern(nativeStringContext, args.GetIsolate(), args[0]);
317+
NativeString pattern(args.GetIsolate(), args[0]);
320318
if (pattern.isInvalid(args)) {
321319
return;
322320
}
@@ -330,7 +328,7 @@ void uWS_App_get(F f, const FunctionCallbackInfo<Value> &args) {
330328

331329
/* If the handler is String */
332330
if (args[1]->IsArrayBuffer()) {
333-
NativeString constantString(nativeStringContext, args.GetIsolate(), args[1]);
331+
NativeString constantString(args.GetIsolate(), args[1]);
334332
if (constantString.isInvalid(args)) {
335333
return;
336334
}
@@ -515,8 +513,7 @@ void uWS_App_listen_unix(const FunctionCallbackInfo<Value> &args) {
515513

516514
/* Path is last */
517515
std::string path;
518-
NativeStringContext nativeStringContext;
519-
NativeString h(nativeStringContext, isolate, args[args.Length() - 1]);
516+
NativeString h(isolate, args[args.Length() - 1]);
520517
if (h.isInvalid(args)) {
521518
return;
522519
}
@@ -548,9 +545,8 @@ void uWS_App_listen(const FunctionCallbackInfo<Value> &args) {
548545

549546
/* Host is first, if present */
550547
std::string host;
551-
NativeStringContext nativeStringContext;
552548
if (!args[0]->IsNumber()) {
553-
NativeString h(nativeStringContext, isolate, args[0]);
549+
NativeString h(isolate, args[0]);
554550
if (h.isInvalid(args)) {
555551
return;
556552
}
@@ -609,8 +605,7 @@ void uWS_App_domain(const FunctionCallbackInfo<Value> &args) {
609605
return;
610606
}
611607

612-
NativeStringContext nativeStringContext;
613-
NativeString serverName(nativeStringContext, isolate, args[0]);
608+
NativeString serverName(isolate, args[0]);
614609
if (serverName.isInvalid(args)) {
615610
return;
616611
}
@@ -631,13 +626,12 @@ void uWS_App_publish(const FunctionCallbackInfo<Value> &args) {
631626
return;
632627
}
633628

634-
NativeStringContext nativeStringContext;
635-
NativeString topic(nativeStringContext, isolate, args[0]);
629+
NativeString topic(isolate, args[0]);
636630
if (topic.isInvalid(args)) {
637631
return;
638632
}
639633

640-
NativeString message(nativeStringContext, isolate, args[1]);
634+
NativeString message(isolate, args[1]);
641635
if (message.isInvalid(args)) {
642636
return;
643637
}
@@ -658,8 +652,7 @@ void uWS_App_numSubscribers(const FunctionCallbackInfo<Value> &args) {
658652
return;
659653
}
660654

661-
NativeStringContext nativeStringContext;
662-
NativeString topic(nativeStringContext, isolate, args[0]);
655+
NativeString topic(isolate, args[0]);
663656
if (topic.isInvalid(args)) {
664657
return;
665658
}
@@ -682,9 +675,8 @@ std::pair<uWS::SocketContextOptions, bool> readOptionsObject(const FunctionCallb
682675

683676
Local<Object> optionsObject = Local<Object>::Cast(args[index]);
684677

685-
NativeStringContext nativeStringContext;
686678
/* Key file name */
687-
NativeString keyFileNameValue(nativeStringContext, isolate, optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "key_file_name", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked());
679+
NativeString keyFileNameValue(isolate, optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "key_file_name", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked());
688680
if (keyFileNameValue.isInvalid(args)) {
689681
return {};
690682
}
@@ -694,7 +686,7 @@ std::pair<uWS::SocketContextOptions, bool> readOptionsObject(const FunctionCallb
694686
}
695687

696688
/* Cert file name */
697-
NativeString certFileNameValue(nativeStringContext, isolate, optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "cert_file_name", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked());
689+
NativeString certFileNameValue(isolate, optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "cert_file_name", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked());
698690
if (certFileNameValue.isInvalid(args)) {
699691
return {};
700692
}
@@ -704,7 +696,7 @@ std::pair<uWS::SocketContextOptions, bool> readOptionsObject(const FunctionCallb
704696
}
705697

706698
/* Passphrase */
707-
NativeString passphraseValue(nativeStringContext, isolate, optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "passphrase", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked());
699+
NativeString passphraseValue(isolate, optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "passphrase", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked());
708700
if (passphraseValue.isInvalid(args)) {
709701
return {};
710702
}
@@ -714,7 +706,7 @@ std::pair<uWS::SocketContextOptions, bool> readOptionsObject(const FunctionCallb
714706
}
715707

716708
/* DH params file name */
717-
NativeString dhParamsFileNameValue(nativeStringContext, isolate, optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "dh_params_file_name", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked());
709+
NativeString dhParamsFileNameValue(isolate, optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "dh_params_file_name", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked());
718710
if (dhParamsFileNameValue.isInvalid(args)) {
719711
return {};
720712
}
@@ -724,7 +716,7 @@ std::pair<uWS::SocketContextOptions, bool> readOptionsObject(const FunctionCallb
724716
}
725717

726718
/* CA file name */
727-
NativeString caFileNameValue(nativeStringContext, isolate, optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "ca_file_name", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked());
719+
NativeString caFileNameValue(isolate, optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "ca_file_name", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked());
728720
if (caFileNameValue.isInvalid(args)) {
729721
return {};
730722
}
@@ -737,7 +729,7 @@ std::pair<uWS::SocketContextOptions, bool> readOptionsObject(const FunctionCallb
737729
options.ssl_prefer_low_memory_usage = optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "ssl_prefer_low_memory_usage", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked()->BooleanValue(isolate);
738730

739731
/* ssl_ciphers */
740-
NativeString sslCiphersValue(nativeStringContext, isolate, optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "ssl_ciphers", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked());
732+
NativeString sslCiphersValue(isolate, optionsObject->Get(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "ssl_ciphers", NewStringType::kNormal).ToLocalChecked()).ToLocalChecked());
741733
if (sslCiphersValue.isInvalid(args)) {
742734
return {};
743735
}
@@ -832,8 +824,7 @@ void uWS_App_addServerName(const FunctionCallbackInfo<Value> &args) {
832824
APP *app = (APP *) args.This()->GetAlignedPointerFromInternalField(0);
833825

834826
Isolate *isolate = args.GetIsolate();
835-
NativeStringContext nativeStringContext;
836-
NativeString hostnamePatternValue(nativeStringContext, isolate, args[0]);
827+
NativeString hostnamePatternValue(isolate, args[0]);
837828
if (hostnamePatternValue.isInvalid(args)) {
838829
return;
839830
}
@@ -857,8 +848,7 @@ void uWS_App_removeServerName(const FunctionCallbackInfo<Value> &args) {
857848
APP *app = (APP *) args.This()->GetAlignedPointerFromInternalField(0);
858849

859850
Isolate *isolate = args.GetIsolate();
860-
NativeStringContext nativeStringContext;
861-
NativeString hostnamePatternValue(nativeStringContext, isolate, args[0]);
851+
NativeString hostnamePatternValue(isolate, args[0]);
862852
if (hostnamePatternValue.isInvalid(args)) {
863853
return;
864854
}
@@ -940,9 +930,8 @@ void uWS_App(const FunctionCallbackInfo<Value> &args) {
940930

941931
APP *app = (APP *) args.This()->GetAlignedPointerFromInternalField(0);
942932

943-
NativeStringContext nativeStringContext;
944933
/* Pattern */
945-
NativeString pattern(nativeStringContext, args.GetIsolate(), args[0]);
934+
NativeString pattern(args.GetIsolate(), args[0]);
946935
if (pattern.isInvalid(args)) {
947936
return;
948937
}

src/HttpRequestWrapper.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ struct HttpRequestWrapper {
6262
template <int QUIC>
6363
static void req_getParameter(const FunctionCallbackInfo<Value> &args) {
6464
Isolate *isolate = args.GetIsolate();
65-
NativeStringContext nativeStringContext;
6665
auto *req = getHttpRequest<QUIC>(args);
6766
if (req) {
6867

@@ -72,7 +71,7 @@ struct HttpRequestWrapper {
7271
int index = args[0]->Uint32Value(isolate->GetCurrentContext()).ToChecked();
7372
parameter = req->getParameter(index);
7473
} else {
75-
NativeString data(nativeStringContext, args.GetIsolate(), args[0]);
74+
NativeString data(args.GetIsolate(), args[0]);
7675
if (data.isInvalid(args)) {
7776
return;
7877
}
@@ -99,10 +98,9 @@ struct HttpRequestWrapper {
9998
template <int QUIC>
10099
static void req_getHeader(const FunctionCallbackInfo<Value> &args) {
101100
Isolate *isolate = args.GetIsolate();
102-
NativeStringContext nativeStringContext;
103101
auto *req = getHttpRequest<QUIC>(args);
104102
if (req) {
105-
NativeString data(nativeStringContext, args.GetIsolate(), args[0]);
103+
NativeString data(args.GetIsolate(), args[0]);
106104
if (data.isInvalid(args)) {
107105
return;
108106
}
@@ -154,14 +152,13 @@ struct HttpRequestWrapper {
154152
template <int QUIC>
155153
static void req_getQuery(const FunctionCallbackInfo<Value> &args) {
156154
Isolate *isolate = args.GetIsolate();
157-
NativeStringContext nativeStringContext;
158155
auto *req = getHttpRequest<QUIC>(args);
159156
if (req) {
160157
std::string_view query;
161158

162159
/* Do we have a key argument? */
163160
if (args.Length() == 1) {
164-
NativeString keyString(nativeStringContext, isolate, args[0]);
161+
NativeString keyString(isolate, args[0]);
165162
if (keyString.isInvalid(args)) {
166163
return;
167164
}

src/HttpResponseWrapper.h

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,7 @@ struct HttpResponseWrapper {
369369
static void res_writeStatus(const FunctionCallbackInfo<Value> &args) {
370370
auto *res = getHttpResponse<SSL>(args);
371371
if (res) {
372-
NativeStringContext nativeStringContext;
373-
NativeString data(nativeStringContext, args.GetIsolate(), args[0]);
372+
NativeString data(args.GetIsolate(), args[0]);
374373
if (data.isInvalid(args)) {
375374
return;
376375
}
@@ -410,8 +409,7 @@ struct HttpResponseWrapper {
410409
static void res_end(const FunctionCallbackInfo<Value> &args) {
411410
auto *res = getHttpResponse<PROTOCOL>(args);
412411
if (res) {
413-
NativeStringContext nativeStringContext;
414-
NativeString data(nativeStringContext, args.GetIsolate(), args[0]);
412+
NativeString data(args.GetIsolate(), args[0]);
415413
if (data.isInvalid(args)) {
416414
return;
417415
}
@@ -434,10 +432,9 @@ struct HttpResponseWrapper {
434432
template <int PROTOCOL>
435433
static void res_tryEnd(const FunctionCallbackInfo<Value> &args) {
436434
Isolate *isolate = args.GetIsolate();
437-
NativeStringContext nativeStringContext;
438435
auto *res = getHttpResponse<PROTOCOL>(args);
439436
if (res) {
440-
NativeString data(nativeStringContext, args.GetIsolate(), args[0]);
437+
NativeString data(args.GetIsolate(), args[0]);
441438
if (data.isInvalid(args)) {
442439
return;
443440
}
@@ -468,10 +465,9 @@ struct HttpResponseWrapper {
468465
template <int PROTOCOL>
469466
static void res_write(const FunctionCallbackInfo<Value> &args) {
470467
Isolate *isolate = args.GetIsolate();
471-
NativeStringContext nativeStringContext;
472468
auto *res = getHttpResponse<PROTOCOL>(args);
473469
if (res) {
474-
NativeString data(nativeStringContext, args.GetIsolate(), args[0]);
470+
NativeString data(args.GetIsolate(), args[0]);
475471
if (data.isInvalid(args)) {
476472
return;
477473
}
@@ -486,14 +482,13 @@ struct HttpResponseWrapper {
486482
template <int PROTOCOL>
487483
static void res_writeHeader(const FunctionCallbackInfo<Value> &args) {
488484
Isolate *isolate = args.GetIsolate();
489-
NativeStringContext nativeStringContext;
490485
auto *res = getHttpResponse<PROTOCOL>(args);
491486
if (res) {
492-
NativeString header(nativeStringContext, args.GetIsolate(), args[0]);
487+
NativeString header(args.GetIsolate(), args[0]);
493488
if (header.isInvalid(args)) {
494489
return;
495490
}
496-
NativeString value(nativeStringContext, args.GetIsolate(), args[1]);
491+
NativeString value(args.GetIsolate(), args[1]);
497492
if (value.isInvalid(args)) {
498493
return;
499494
}
@@ -526,25 +521,24 @@ struct HttpResponseWrapper {
526521
template <int SSL>
527522
static void res_upgrade(const FunctionCallbackInfo<Value> &args) {
528523
Isolate *isolate = args.GetIsolate();
529-
NativeStringContext nativeStringContext;
530524
auto *res = getHttpResponse<SSL>(args);
531525
if (res) {
532526
/* We require exactly 5 arguments */
533527
if (args.Length() != 5) {
534528
return;
535529
}
536530

537-
NativeString secWebSocketKey(nativeStringContext, args.GetIsolate(), args[1]);
531+
NativeString secWebSocketKey(args.GetIsolate(), args[1]);
538532
if (secWebSocketKey.isInvalid(args)) {
539533
return;
540534
}
541535

542-
NativeString secWebSocketProtocol(nativeStringContext, args.GetIsolate(), args[2]);
536+
NativeString secWebSocketProtocol(args.GetIsolate(), args[2]);
543537
if (secWebSocketProtocol.isInvalid(args)) {
544538
return;
545539
}
546540

547-
NativeString secWebSocketExtensions(nativeStringContext, args.GetIsolate(), args[3]);
541+
NativeString secWebSocketExtensions(args.GetIsolate(), args[3]);
548542
if (secWebSocketExtensions.isInvalid(args)) {
549543
return;
550544
}

0 commit comments

Comments
 (0)