Description
I have seen some strange behavior when temporary disabling the current namespaces, and trying to re-enable the namespaces returned by the debug.disable() call later in the debug.enable() call.
This happened while debugging a node-red custom node that I'm working on:
First I start node-red with some logging enabled:
DEBUG="*:error:*" node-red
Then using a REST call i fetch the current namespaces as follows:
RED.httpAdmin.get('/debug', function (req, res) {
console.log("/debug",req.method);
var namespaces = debug.disable();
console.log("/debug",req.method,namespaces);
debug.enable(namespaces);
res.end(JSON.stringify(Object({ "namespaces": namespaces })));
});
When this function is called, it prints the following on the console:
/debug GET
/debug GET .*?:error:*
SyntaxError: Invalid regular expression: /^..*??:error:.*?$/: Nothing to repeat
at new RegExp (<anonymous>)
at Function.enable (/home/hurenkam/Workspace/node-red-contrib-mh-hue/node_modules/debug/src/common.js:184:28)
at /home/hurenkam/Workspace/node-red-contrib-mh-hue/src/debug.js:21:15
at Layer.handle [as handle_request] (/usr/local/lib/node_modules/node-red/node_modules/express/lib/router/layer.js:95:5)
at next (/usr/local/lib/node_modules/node-red/node_modules/express/lib/router/route.js:144:13)
at Route.dispatch (/usr/local/lib/node_modules/node-red/node_modules/express/lib/router/route.js:114:3)
at Layer.handle [as handle_request] (/usr/local/lib/node_modules/node-red/node_modules/express/lib/router/layer.js:95:5)
at /usr/local/lib/node_modules/node-red/node_modules/express/lib/router/index.js:284:15
at Function.process_params (/usr/local/lib/node_modules/node-red/node_modules/express/lib/router/index.js:346:12)
at next (/usr/local/lib/node_modules/node-red/node_modules/express/lib/router/index.js:280:10)
It would seem that the wildcard namespace "*:error:*"
is being translated to ".*?:error:*"
which when fed back into debug.enable() triggers an error in common.js @ line 184 when trying to push the expression into a RegExp:
common.js:
184: createDebug.names.push(new RegExp('^' + namespaces + '$'));