Skip to content

Instantly share code, notes, and snippets.

View xeioex's full-sized avatar

Dmitry Volyntsev xeioex

View GitHub Profile

js_set Inline Syntax: Comparison of Approaches

1. $var Shorthand vs No Shorthand

$var shorthand No shorthand
Syntax '$uri.toUpperCase()' 'r.uri.toUpperCase()'
Expands to r.variables.uri.toUpperCase() used as-is
nginx-idiomatic Yes — familiar $var references No — pure JS, foreign to nginx users
Access scope r.variables.* only Full request object (r.uri, r.headersIn, r.args, etc.)

js_set Inline Syntax: Comparison of Approaches

1. $var Shorthand vs No Shorthand

$var shorthand No shorthand
Syntax '$uri.toUpperCase()' 'r.uri.toUpperCase()'
Expands to r.variables.uri.toUpperCase() used as-is
nginx-idiomatic Yes — familiar $var references No — pure JS, foreign to nginx users
Access scope r.variables.* only Full request object (r.uri, r.headersIn, r.args, etc.)

njs Source Code Internals

Detailed notes on the njs JavaScript engine internals gathered during the optional chaining (?.) implementation. Intended as a reference for future feature work.


1. Parser State Machine

var _mcp_messages = [];
var _mcp_buffer = "";
function clear_content_length(r) {
delete r.headersOut['Content-Length'];
}
function filter(r, data, flags) {
_mcp_buffer += data;
r.sendBuffer(data, flags);
package main
import (
"bufio"
"bytes"
"context"
"crypto/rand"
"encoding/json"
"flag"
"fmt"
/tmp/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/aaaaaaaaaaa
diff --git a/examples/t/async_request.t b/examples/t/async_request.t
index 3d09ddd5..88b1e37e 100644
--- a/examples/t/async_request.t
+++ b/examples/t/async_request.t
@@ -21,7 +21,7 @@ use Test::Nginx;
select STDERR; $| = 1;
select STDOUT; $| = 1;
-my $t = Test::Nginx->new()->has(qw/http/)->plan(1)
+my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(2)
commit d5fae2e1ccc37de58573e4961958e82cf8d6d6b2
Author: Dmitry Volyntsev <xeioex@nginx.com>
Date: Fri Jan 30 17:43:17 2026 -0800
Attaching JS stack trace for exceptions thrown by C code.
This fixes #1019 issue on Github.
diff --git a/nginx/t/js_fetch_error_stack.t b/nginx/t/js_fetch_error_stack.t
new file mode 100644

SharedArrayBuffer Implementation Plan for nginx njs

Overview

Implementation of js_shared_array directive for nginx njs modules (HTTP and Stream) that creates shared memory zones accessible as SharedArrayBuffer objects via ngx.sharedArray.foo dynamic property lookup.

Scope: QuickJS engine only (wrapped in #if (NJS_HAVE_QUICKJS))

Architecture

diff --git a/auto/cc b/auto/cc
index 5b21e17e..d2ce8f89 100644
--- a/auto/cc
+++ b/auto/cc
@@ -169,6 +169,20 @@ case $NJS_CC_NAME in
esac
+njs_feature="-Wl,-E"
+njs_feature_name=