changeset 2601:cf86eb67f0a2

Modules: fixed merging of js_path directives. The issue initially appeared in 1b54abb (0.7.7).
author Dmitry Volyntsev <xeioex@nginx.com>
date Mon, 11 Aug 2025 18:55:18 -0700
parents 6ce7e16a4a69
children 840a3f263d08
files nginx/ngx_js.c nginx/t/js_paths.t
diffstat 2 files changed, 22 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/nginx/ngx_js.c	Mon Aug 11 16:25:47 2025 -0700
+++ b/nginx/ngx_js.c	Mon Aug 11 18:55:18 2025 -0700
@@ -3483,7 +3483,7 @@
                 return NGX_ERROR;
             }
 
-            s = prev->imports->elts;
+            s = prev->paths->elts;
 
             for (i = 0; i < prev->paths->nelts; i++) {
                 path = ngx_array_push(paths);
@@ -3494,7 +3494,7 @@
                 *path = s[i];
             }
 
-            s = conf->imports->elts;
+            s = conf->paths->elts;
 
             for (i = 0; i < conf->paths->nelts; i++) {
                 path = ngx_array_push(paths);
--- a/nginx/t/js_paths.t	Mon Aug 11 16:25:47 2025 -0700
+++ b/nginx/t/js_paths.t	Mon Aug 11 18:55:18 2025 -0700
@@ -51,6 +51,11 @@
         location /test2 {
             js_content test.test2;
         }
+
+        location /merge {
+            js_path "lib3";
+            js_content test.test3;
+        }
     }
 }
 
@@ -60,6 +65,7 @@
     import m1 from 'module1.js';
     import m2 from 'module2.js';
     import m3 from 'lib1/module1.js';
+    import m4 from 'lib3/module3.js';
 
     function test(r) {
         r.return(200, m1[r.args.fun](r.args.a, r.args.b));
@@ -70,10 +76,10 @@
     }
 
     function test3(r) {
-        r.return(200, m3.sum(r.args.a, r.args.b));
+        m4.handler(r);
     }
 
-    export default {test, test2};
+    export default {test, test2, test3};
 
 EOF
 
@@ -81,6 +87,7 @@
 
 mkdir("$d/lib1");
 mkdir("$d/lib2");
+mkdir("$d/lib3");
 
 $t->write_file('lib1/module1.js', <<EOF);
     function sum(a, b) { return Number(a) + Number(b); }
@@ -97,8 +104,17 @@
 
 EOF
 
+$t->write_file('lib3/module3.js', <<EOF);
+    function handler(r) {
+        r.return(200, 'Hello from lib3');
+    }
 
-$t->try_run('no njs available')->plan(4);
+    export default {handler};
+
+EOF
+
+
+$t->try_run('no njs available')->plan(5);
 
 ###############################################################################
 
@@ -106,5 +122,6 @@
 like(http_get('/test?fun=prod&a=3&b=4'), qr/12/s, 'test prod');
 like(http_get('/test2?a=3&b=4'), qr/34/s, 'test2');
 like(http_get('/test2?a=A&b=B'), qr/AB/s, 'test2 relative');
+like(http_get('/merge'), qr/Hello from lib3/s, 'test merge');
 
 ###############################################################################