From c160ea11e4ece4db52731ac8b83dd09ca2d1ef11 Mon Sep 17 00:00:00 2001 From: Oisin Canty Date: Mon, 24 May 2021 09:01:42 +0000 Subject: Node.js: renamed "require_shim" to "loader". --- docs/changes.xml | 2 +- src/nodejs/unit-http/loader.js | 27 +++++++++++++++++++ src/nodejs/unit-http/loader.mjs | 18 +++++++++++++ src/nodejs/unit-http/require_shim.js | 27 ------------------- src/nodejs/unit-http/require_shim.mjs | 18 ------------- test/node/loader/es_modules_http/app.mjs | 6 +++++ test/node/loader/es_modules_http_indirect/app.js | 1 + .../loader/es_modules_http_indirect/module.mjs | 6 +++++ test/node/loader/es_modules_websocket/app.mjs | 30 ++++++++++++++++++++++ .../loader/es_modules_websocket_indirect/app.js | 1 + .../es_modules_websocket_indirect/module.mjs | 30 ++++++++++++++++++++++ test/node/loader/transitive_dependency/app.js | 1 + .../transitive_dependency/transitive_http.js | 8 ++++++ test/node/loader/unit_http/app.js | 4 +++ test/node/require_shim/es_modules_http/app.mjs | 6 ----- .../require_shim/es_modules_http_indirect/app.js | 1 - .../es_modules_http_indirect/module.mjs | 6 ----- .../node/require_shim/es_modules_websocket/app.mjs | 30 ---------------------- .../es_modules_websocket_indirect/app.js | 1 - .../es_modules_websocket_indirect/module.mjs | 30 ---------------------- .../node/require_shim/transitive_dependency/app.js | 1 - .../transitive_dependency/transitive_http.js | 8 ------ test/node/require_shim/unit_http/app.js | 4 --- test/test_node_application.py | 8 +++--- test/test_node_es_modules.py | 12 ++++----- test/unit/applications/lang/node.py | 6 ++--- 26 files changed, 146 insertions(+), 146 deletions(-) create mode 100644 src/nodejs/unit-http/loader.js create mode 100644 src/nodejs/unit-http/loader.mjs delete mode 100644 src/nodejs/unit-http/require_shim.js delete mode 100644 src/nodejs/unit-http/require_shim.mjs create mode 100644 test/node/loader/es_modules_http/app.mjs create mode 100644 test/node/loader/es_modules_http_indirect/app.js create mode 100644 test/node/loader/es_modules_http_indirect/module.mjs create mode 100644 test/node/loader/es_modules_websocket/app.mjs create mode 100644 test/node/loader/es_modules_websocket_indirect/app.js create mode 100644 test/node/loader/es_modules_websocket_indirect/module.mjs create mode 100644 test/node/loader/transitive_dependency/app.js create mode 100644 test/node/loader/transitive_dependency/transitive_http.js create mode 100644 test/node/loader/unit_http/app.js delete mode 100644 test/node/require_shim/es_modules_http/app.mjs delete mode 100644 test/node/require_shim/es_modules_http_indirect/app.js delete mode 100644 test/node/require_shim/es_modules_http_indirect/module.mjs delete mode 100644 test/node/require_shim/es_modules_websocket/app.mjs delete mode 100644 test/node/require_shim/es_modules_websocket_indirect/app.js delete mode 100644 test/node/require_shim/es_modules_websocket_indirect/module.mjs delete mode 100644 test/node/require_shim/transitive_dependency/app.js delete mode 100644 test/node/require_shim/transitive_dependency/transitive_http.js delete mode 100644 test/node/require_shim/unit_http/app.js diff --git a/docs/changes.xml b/docs/changes.xml index 528ab483..58181173 100644 --- a/docs/changes.xml +++ b/docs/changes.xml @@ -39,7 +39,7 @@ multiple "targets" in Python applications. -a shim for automatic overriding "http" and "websocket" modules in Node.js. +a loader for automatic overriding "http" and "websocket" modules in Node.js. diff --git a/src/nodejs/unit-http/loader.js b/src/nodejs/unit-http/loader.js new file mode 100644 index 00000000..e5aa3558 --- /dev/null +++ b/src/nodejs/unit-http/loader.js @@ -0,0 +1,27 @@ +// can only be ran as part of a --require param on the node process +if (module.parent && module.parent.id === "internal/preload") { + const { Module } = require("module") + + if (!Module.prototype.require.__unit_loader) { + const http = require("./http") + const websocket = require("./websocket") + + const original = Module.prototype.require; + + Module.prototype.require = function (id) { + switch(id) { + case "http": + case "unit-http": + return http + + case "websocket": + case "unit-http/websocket": + return websocket + } + + return original.apply(this, arguments); + } + + Module.prototype.require.__unit_loader = true; + } +} diff --git a/src/nodejs/unit-http/loader.mjs b/src/nodejs/unit-http/loader.mjs new file mode 100644 index 00000000..067d63d4 --- /dev/null +++ b/src/nodejs/unit-http/loader.mjs @@ -0,0 +1,18 @@ +// must be ran as part of a --loader or --experimental-loader param +export async function resolve(specifier, context, defaultResolver) { + switch (specifier) { + case "websocket": + return { + url: new URL("./websocket.js", import.meta.url).href, + format: "cjs" + } + + case "http": + return { + url: new URL("./http.js", import.meta.url).href, + format: "cjs" + } + } + + return defaultResolver(specifier, context, defaultResolver) +} diff --git a/src/nodejs/unit-http/require_shim.js b/src/nodejs/unit-http/require_shim.js deleted file mode 100644 index 2b307629..00000000 --- a/src/nodejs/unit-http/require_shim.js +++ /dev/null @@ -1,27 +0,0 @@ -// can only be ran as part of a --require param on the node process -if (module.parent && module.parent.id === "internal/preload") { - const { Module } = require("module") - - if (!Module.prototype.require.__unit_shim) { - const http = require("./http") - const websocket = require("./websocket") - - const original = Module.prototype.require; - - Module.prototype.require = function (id) { - switch(id) { - case "http": - case "unit-http": - return http - - case "websocket": - case "unit-http/websocket": - return websocket - } - - return original.apply(this, arguments); - } - - Module.prototype.require.__unit_shim = true; - } -} diff --git a/src/nodejs/unit-http/require_shim.mjs b/src/nodejs/unit-http/require_shim.mjs deleted file mode 100644 index 067d63d4..00000000 --- a/src/nodejs/unit-http/require_shim.mjs +++ /dev/null @@ -1,18 +0,0 @@ -// must be ran as part of a --loader or --experimental-loader param -export async function resolve(specifier, context, defaultResolver) { - switch (specifier) { - case "websocket": - return { - url: new URL("./websocket.js", import.meta.url).href, - format: "cjs" - } - - case "http": - return { - url: new URL("./http.js", import.meta.url).href, - format: "cjs" - } - } - - return defaultResolver(specifier, context, defaultResolver) -} diff --git a/test/node/loader/es_modules_http/app.mjs b/test/node/loader/es_modules_http/app.mjs new file mode 100644 index 00000000..c7bcfe49 --- /dev/null +++ b/test/node/loader/es_modules_http/app.mjs @@ -0,0 +1,6 @@ +import http from "http" + +http.createServer(function (req, res) { + res.writeHead(200, {'Content-Length': 12, 'Content-Type': 'text/plain'}) + .end('Hello World\n'); +}).listen(7080); diff --git a/test/node/loader/es_modules_http_indirect/app.js b/test/node/loader/es_modules_http_indirect/app.js new file mode 100644 index 00000000..535befba --- /dev/null +++ b/test/node/loader/es_modules_http_indirect/app.js @@ -0,0 +1 @@ +import("./module.mjs") diff --git a/test/node/loader/es_modules_http_indirect/module.mjs b/test/node/loader/es_modules_http_indirect/module.mjs new file mode 100644 index 00000000..c7bcfe49 --- /dev/null +++ b/test/node/loader/es_modules_http_indirect/module.mjs @@ -0,0 +1,6 @@ +import http from "http" + +http.createServer(function (req, res) { + res.writeHead(200, {'Content-Length': 12, 'Content-Type': 'text/plain'}) + .end('Hello World\n'); +}).listen(7080); diff --git a/test/node/loader/es_modules_websocket/app.mjs b/test/node/loader/es_modules_websocket/app.mjs new file mode 100644 index 00000000..a71ffa9d --- /dev/null +++ b/test/node/loader/es_modules_websocket/app.mjs @@ -0,0 +1,30 @@ +import http from "http" +import websocket from "websocket" + +let server = http.createServer(function() {}); +let webSocketServer = websocket.server; + +server.listen(7080, function() {}); + +var wsServer = new webSocketServer({ + maxReceivedMessageSize: 0x1000000000, + maxReceivedFrameSize: 0x1000000000, + fragmentOutgoingMessages: false, + fragmentationThreshold: 0x1000000000, + httpServer: server, +}); + +wsServer.on('request', function(request) { + var connection = request.accept(null); + + connection.on('message', function(message) { + if (message.type === 'utf8') { + connection.send(message.utf8Data); + } else if (message.type === 'binary') { + connection.send(message.binaryData); + } + + }); + + connection.on('close', function(r) {}); +}); diff --git a/test/node/loader/es_modules_websocket_indirect/app.js b/test/node/loader/es_modules_websocket_indirect/app.js new file mode 100644 index 00000000..535befba --- /dev/null +++ b/test/node/loader/es_modules_websocket_indirect/app.js @@ -0,0 +1 @@ +import("./module.mjs") diff --git a/test/node/loader/es_modules_websocket_indirect/module.mjs b/test/node/loader/es_modules_websocket_indirect/module.mjs new file mode 100644 index 00000000..a71ffa9d --- /dev/null +++ b/test/node/loader/es_modules_websocket_indirect/module.mjs @@ -0,0 +1,30 @@ +import http from "http" +import websocket from "websocket" + +let server = http.createServer(function() {}); +let webSocketServer = websocket.server; + +server.listen(7080, function() {}); + +var wsServer = new webSocketServer({ + maxReceivedMessageSize: 0x1000000000, + maxReceivedFrameSize: 0x1000000000, + fragmentOutgoingMessages: false, + fragmentationThreshold: 0x1000000000, + httpServer: server, +}); + +wsServer.on('request', function(request) { + var connection = request.accept(null); + + connection.on('message', function(message) { + if (message.type === 'utf8') { + connection.send(message.utf8Data); + } else if (message.type === 'binary') { + connection.send(message.binaryData); + } + + }); + + connection.on('close', function(r) {}); +}); diff --git a/test/node/loader/transitive_dependency/app.js b/test/node/loader/transitive_dependency/app.js new file mode 100644 index 00000000..aaca5216 --- /dev/null +++ b/test/node/loader/transitive_dependency/app.js @@ -0,0 +1 @@ +require("./transitive_http") diff --git a/test/node/loader/transitive_dependency/transitive_http.js b/test/node/loader/transitive_dependency/transitive_http.js new file mode 100644 index 00000000..f1eb98e5 --- /dev/null +++ b/test/node/loader/transitive_dependency/transitive_http.js @@ -0,0 +1,8 @@ +const http = require("http"); + +http.createServer(function (req, res) { + res.writeHead(200, {'Content-Length': 12, 'Content-Type': 'text/plain'}) + .end('Hello World\n'); +}).listen(7080); + +module.exports = http; diff --git a/test/node/loader/unit_http/app.js b/test/node/loader/unit_http/app.js new file mode 100644 index 00000000..9172e44f --- /dev/null +++ b/test/node/loader/unit_http/app.js @@ -0,0 +1,4 @@ +require("unit-http").createServer(function (req, res) { + res.writeHead(200, {'Content-Length': 12, 'Content-Type': 'text/plain'}) + .end('Hello World\n'); +}).listen(7080); diff --git a/test/node/require_shim/es_modules_http/app.mjs b/test/node/require_shim/es_modules_http/app.mjs deleted file mode 100644 index c7bcfe49..00000000 --- a/test/node/require_shim/es_modules_http/app.mjs +++ /dev/null @@ -1,6 +0,0 @@ -import http from "http" - -http.createServer(function (req, res) { - res.writeHead(200, {'Content-Length': 12, 'Content-Type': 'text/plain'}) - .end('Hello World\n'); -}).listen(7080); diff --git a/test/node/require_shim/es_modules_http_indirect/app.js b/test/node/require_shim/es_modules_http_indirect/app.js deleted file mode 100644 index 535befba..00000000 --- a/test/node/require_shim/es_modules_http_indirect/app.js +++ /dev/null @@ -1 +0,0 @@ -import("./module.mjs") diff --git a/test/node/require_shim/es_modules_http_indirect/module.mjs b/test/node/require_shim/es_modules_http_indirect/module.mjs deleted file mode 100644 index c7bcfe49..00000000 --- a/test/node/require_shim/es_modules_http_indirect/module.mjs +++ /dev/null @@ -1,6 +0,0 @@ -import http from "http" - -http.createServer(function (req, res) { - res.writeHead(200, {'Content-Length': 12, 'Content-Type': 'text/plain'}) - .end('Hello World\n'); -}).listen(7080); diff --git a/test/node/require_shim/es_modules_websocket/app.mjs b/test/node/require_shim/es_modules_websocket/app.mjs deleted file mode 100644 index a71ffa9d..00000000 --- a/test/node/require_shim/es_modules_websocket/app.mjs +++ /dev/null @@ -1,30 +0,0 @@ -import http from "http" -import websocket from "websocket" - -let server = http.createServer(function() {}); -let webSocketServer = websocket.server; - -server.listen(7080, function() {}); - -var wsServer = new webSocketServer({ - maxReceivedMessageSize: 0x1000000000, - maxReceivedFrameSize: 0x1000000000, - fragmentOutgoingMessages: false, - fragmentationThreshold: 0x1000000000, - httpServer: server, -}); - -wsServer.on('request', function(request) { - var connection = request.accept(null); - - connection.on('message', function(message) { - if (message.type === 'utf8') { - connection.send(message.utf8Data); - } else if (message.type === 'binary') { - connection.send(message.binaryData); - } - - }); - - connection.on('close', function(r) {}); -}); diff --git a/test/node/require_shim/es_modules_websocket_indirect/app.js b/test/node/require_shim/es_modules_websocket_indirect/app.js deleted file mode 100644 index 535befba..00000000 --- a/test/node/require_shim/es_modules_websocket_indirect/app.js +++ /dev/null @@ -1 +0,0 @@ -import("./module.mjs") diff --git a/test/node/require_shim/es_modules_websocket_indirect/module.mjs b/test/node/require_shim/es_modules_websocket_indirect/module.mjs deleted file mode 100644 index a71ffa9d..00000000 --- a/test/node/require_shim/es_modules_websocket_indirect/module.mjs +++ /dev/null @@ -1,30 +0,0 @@ -import http from "http" -import websocket from "websocket" - -let server = http.createServer(function() {}); -let webSocketServer = websocket.server; - -server.listen(7080, function() {}); - -var wsServer = new webSocketServer({ - maxReceivedMessageSize: 0x1000000000, - maxReceivedFrameSize: 0x1000000000, - fragmentOutgoingMessages: false, - fragmentationThreshold: 0x1000000000, - httpServer: server, -}); - -wsServer.on('request', function(request) { - var connection = request.accept(null); - - connection.on('message', function(message) { - if (message.type === 'utf8') { - connection.send(message.utf8Data); - } else if (message.type === 'binary') { - connection.send(message.binaryData); - } - - }); - - connection.on('close', function(r) {}); -}); diff --git a/test/node/require_shim/transitive_dependency/app.js b/test/node/require_shim/transitive_dependency/app.js deleted file mode 100644 index aaca5216..00000000 --- a/test/node/require_shim/transitive_dependency/app.js +++ /dev/null @@ -1 +0,0 @@ -require("./transitive_http") diff --git a/test/node/require_shim/transitive_dependency/transitive_http.js b/test/node/require_shim/transitive_dependency/transitive_http.js deleted file mode 100644 index f1eb98e5..00000000 --- a/test/node/require_shim/transitive_dependency/transitive_http.js +++ /dev/null @@ -1,8 +0,0 @@ -const http = require("http"); - -http.createServer(function (req, res) { - res.writeHead(200, {'Content-Length': 12, 'Content-Type': 'text/plain'}) - .end('Hello World\n'); -}).listen(7080); - -module.exports = http; diff --git a/test/node/require_shim/unit_http/app.js b/test/node/require_shim/unit_http/app.js deleted file mode 100644 index 9172e44f..00000000 --- a/test/node/require_shim/unit_http/app.js +++ /dev/null @@ -1,4 +0,0 @@ -require("unit-http").createServer(function (req, res) { - res.writeHead(200, {'Content-Length': 12, 'Content-Type': 'text/plain'}) - .end('Hello World\n'); -}).listen(7080); diff --git a/test/test_node_application.py b/test/test_node_application.py index 59601ff0..48ed8d3d 100644 --- a/test/test_node_application.py +++ b/test/test_node_application.py @@ -19,13 +19,13 @@ class TestNodeApplication(TestApplicationNode): self.assert_basic_application() - def test_node_application_require_shim_unit_http(self): - self.load('require_shim/unit_http') + def test_node_application_loader_unit_http(self): + self.load('loader/unit_http') self.assert_basic_application() - def test_node_application_require_shim_transitive_dependency(self): - self.load('require_shim/transitive_dependency') + def test_node_application_loader_transitive_dependency(self): + self.load('loader/transitive_dependency') self.assert_basic_application() diff --git a/test/test_node_es_modules.py b/test/test_node_es_modules.py index ce27e474..0945a967 100644 --- a/test/test_node_es_modules.py +++ b/test/test_node_es_modules.py @@ -20,18 +20,18 @@ class TestNodeESModules(TestApplicationNode): assert resp['headers']['Content-Type'] == 'text/plain', 'basic header' assert resp['body'] == 'Hello World\n', 'basic body' - def test_node_es_modules_require_shim_http(self): - self.load('require_shim/es_modules_http', name="app.mjs") + def test_node_es_modules_loader_http(self): + self.load('loader/es_modules_http', name="app.mjs") self.assert_basic_application() - def test_node_es_modules_require_shim_http_indirect(self): - self.load('require_shim/es_modules_http_indirect', name="app.js") + def test_node_es_modules_loader_http_indirect(self): + self.load('loader/es_modules_http_indirect', name="app.js") self.assert_basic_application() - def test_node_es_modules_require_shim_websockets(self): - self.load('require_shim/es_modules_websocket', name="app.mjs") + def test_node_es_modules_loader_websockets(self): + self.load('loader/es_modules_websocket', name="app.mjs") message = 'blah' diff --git a/test/unit/applications/lang/node.py b/test/unit/applications/lang/node.py index 3254f3d4..5d05c70c 100644 --- a/test/unit/applications/lang/node.py +++ b/test/unit/applications/lang/node.py @@ -31,14 +31,14 @@ class TestApplicationNode(TestApplicationProto): arguments = [ "node", "--loader", - "unit-http/require_shim.mjs", + "unit-http/loader.mjs", "--require", - "unit-http/require_shim", + "unit-http/loader", name, ] else: - arguments = ["node", "--require", "unit-http/require_shim", name] + arguments = ["node", "--require", "unit-http/loader", name] self._load_conf( { -- cgit