Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
772 changes: 697 additions & 75 deletions nginx/ngx_http_js_module.c

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions nginx/ngx_js.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@
#define NGX_JS_BOOLEAN 8
#define NGX_JS_NUMBER 16

#define NGX_JS_BODY_ARRAY_BUFFER 0
#define NGX_JS_BODY_JSON 1
#define NGX_JS_BODY_TEXT 2

#define NGX_JS_BOOL_FALSE 0
#define NGX_JS_BOOL_TRUE 1
#define NGX_JS_BOOL_UNSET 2
Expand Down
3 changes: 0 additions & 3 deletions nginx/ngx_js_fetch.c
Original file line number Diff line number Diff line change
Expand Up @@ -268,9 +268,6 @@ static njs_external_t ngx_js_ext_http_request[] = {
.enumerable = 1,
.u.method = {
.native = ngx_request_js_ext_body,
#define NGX_JS_BODY_ARRAY_BUFFER 0
#define NGX_JS_BODY_JSON 1
#define NGX_JS_BODY_TEXT 2
.magic8 = NGX_JS_BODY_ARRAY_BUFFER
}
},
Expand Down
31 changes: 14 additions & 17 deletions nginx/ngx_qjs_fetch.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,40 +131,37 @@ static const JSCFunctionListEntry ngx_qjs_ext_fetch_headers_proto[] = {


static const JSCFunctionListEntry ngx_qjs_ext_fetch_request_proto[] = {
#define NGX_QJS_BODY_ARRAY_BUFFER 0
#define NGX_QJS_BODY_JSON 1
#define NGX_QJS_BODY_TEXT 2
JS_CFUNC_MAGIC_DEF("arrayBuffer", 0, ngx_qjs_ext_fetch_request_body,
NGX_QJS_BODY_ARRAY_BUFFER),
NGX_JS_BODY_ARRAY_BUFFER),
JS_CGETSET_DEF("bodyUsed", ngx_qjs_ext_fetch_request_body_used, NULL),
JS_CGETSET_DEF("cache", ngx_qjs_ext_fetch_request_cache, NULL),
JS_CGETSET_DEF("credentials", ngx_qjs_ext_fetch_request_credentials, NULL),
JS_CFUNC_MAGIC_DEF("json", 0, ngx_qjs_ext_fetch_request_body,
NGX_QJS_BODY_JSON),
NGX_JS_BODY_JSON),
JS_CGETSET_DEF("headers", ngx_qjs_ext_fetch_request_headers, NULL ),
JS_CGETSET_MAGIC_DEF("method", ngx_qjs_ext_fetch_request_field, NULL,
offsetof(ngx_js_request_t, method) ),
JS_CGETSET_DEF("mode", ngx_qjs_ext_fetch_request_mode, NULL),
JS_CFUNC_MAGIC_DEF("text", 0, ngx_qjs_ext_fetch_request_body,
NGX_QJS_BODY_TEXT),
NGX_JS_BODY_TEXT),
JS_CGETSET_MAGIC_DEF("url", ngx_qjs_ext_fetch_request_field, NULL,
offsetof(ngx_js_request_t, url) ),
};


static const JSCFunctionListEntry ngx_qjs_ext_fetch_response_proto[] = {
JS_CFUNC_MAGIC_DEF("arrayBuffer", 0, ngx_qjs_ext_fetch_response_body,
NGX_QJS_BODY_ARRAY_BUFFER),
NGX_JS_BODY_ARRAY_BUFFER),
JS_CGETSET_DEF("bodyUsed", ngx_qjs_ext_fetch_response_body_used, NULL),
JS_CGETSET_DEF("headers", ngx_qjs_ext_fetch_response_headers, NULL ),
JS_CFUNC_MAGIC_DEF("json", 0, ngx_qjs_ext_fetch_response_body,
NGX_QJS_BODY_JSON),
NGX_JS_BODY_JSON),
JS_CGETSET_DEF("ok", ngx_qjs_ext_fetch_response_ok, NULL),
JS_CGETSET_DEF("redirected", ngx_qjs_ext_fetch_response_redirected, NULL),
JS_CGETSET_DEF("status", ngx_qjs_ext_fetch_response_status, NULL),
JS_CGETSET_DEF("statusText", ngx_qjs_ext_fetch_response_status_text, NULL),
JS_CFUNC_MAGIC_DEF("text", 0, ngx_qjs_ext_fetch_response_body,
NGX_QJS_BODY_TEXT),
NGX_JS_BODY_TEXT),
JS_CGETSET_DEF("type", ngx_qjs_ext_fetch_response_type, NULL),
JS_CGETSET_MAGIC_DEF("url", ngx_qjs_ext_fetch_response_field, NULL,
offsetof(ngx_js_response_t, url) ),
Expand Down Expand Up @@ -2027,7 +2024,7 @@ ngx_qjs_ext_fetch_request_body(JSContext *cx, JSValueConst this_val,
request->body_used = 1;

switch (magic) {
case NGX_QJS_BODY_ARRAY_BUFFER:
case NGX_JS_BODY_ARRAY_BUFFER:
/*
* no free_func for JS_NewArrayBuffer()
* because request->body is allocated from e->pool
Expand All @@ -2041,15 +2038,15 @@ ngx_qjs_ext_fetch_request_body(JSContext *cx, JSValueConst this_val,

break;

case NGX_QJS_BODY_JSON:
case NGX_QJS_BODY_TEXT:
case NGX_JS_BODY_JSON:
case NGX_JS_BODY_TEXT:
default:
result = qjs_string_create(cx, request->body.data, request->body.len);
if (JS_IsException(result)) {
return JS_ThrowOutOfMemory(cx);
}

if (magic == NGX_QJS_BODY_JSON) {
if (magic == NGX_JS_BODY_JSON) {
string = js_malloc(cx, request->body.len + 1);

JS_FreeValue(cx, result);
Expand Down Expand Up @@ -2309,14 +2306,14 @@ ngx_qjs_ext_fetch_response_body(JSContext *cx, JSValueConst this_val,
response->body_used = 1;

switch (magic) {
case NGX_QJS_BODY_ARRAY_BUFFER:
case NGX_QJS_BODY_TEXT:
case NGX_JS_BODY_ARRAY_BUFFER:
case NGX_JS_BODY_TEXT:
ret = njs_chb_join(&response->chain, &string);
if (ret != NJS_OK) {
return JS_ThrowOutOfMemory(cx);
}

if (magic == NGX_QJS_BODY_TEXT) {
if (magic == NGX_JS_BODY_TEXT) {
result = qjs_string_create(cx, string.start, string.length);
if (JS_IsException(result)) {
return JS_ThrowOutOfMemory(cx);
Expand All @@ -2338,7 +2335,7 @@ ngx_qjs_ext_fetch_response_body(JSContext *cx, JSValueConst this_val,

break;

case NGX_QJS_BODY_JSON:
case NGX_JS_BODY_JSON:
default:
/* 'string.start' must be zero terminated. */
njs_chb_append_literal(&response->chain, "\0");
Expand Down
Loading
Loading