Skip to content

namespaces returned by debug.disable are not always accepted by debug.enable #918

Open
@hurenkam

Description

@hurenkam

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 + '$'));

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugThis issue identifies a malfunction

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions