From b892b0806af7a7418106b8ab07735e49e78d8e4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Szewczak?= Date: Fri, 24 Nov 2017 22:13:19 +0100 Subject: [PATCH] Add support for Windows and fix tests for debug module > v2.6.0 (#9) * fix: add support for windows * fix: fix tests for debug versions from 2.6.1 (#4) * fix: bump debug version (#4) * always add replace code for resolved path Code will work only on Windows platform, on Linux machine this code will have no impact. Code coverage tool will not complain about testing process.platform * change replace code to only escape backslashes * add comment describing purpose of escaping backslashes --- index.js | 27 ++++++++++++++++++++++----- package.json | 2 +- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index 7e22eb4..6b06bb4 100644 --- a/index.js +++ b/index.js @@ -17,15 +17,17 @@ function pinoDebug (logger, opts) { opts = opts || {} var auto = 'auto' in opts ? opts.auto : true var map = opts.map || {} + var namespaces = [] debug.map = Object.keys(map).sort(byPrecision).reduce(function (m, k) { - if (auto) debug.enable(k) + if (auto) namespaces.push(k) m.set(RegExp('^' + k.replace(/[\\^$+?.()|[\]{}]/g, '\\$&').replace(/\*/g, '.*?') + '$'), map[k]) return m }, new Map()) debug.logger = logger || pino({level: 'debug'}) if (opts.skip) { - opts.skip.map(function (ns) { return '-' + ns }).forEach(debug.enable) + opts.skip.map(function (ns) { return '-' + ns }).forEach(function (ns) { namespaces.push(ns) }) } + debug.enable(namespaces.join(',')) } function byPrecision (a, b) { @@ -41,12 +43,27 @@ function byPrecision (a, b) { } function override (script) { + // Escape backslashes to prevent from interpreting backslashes on Windows platform + // during expression interpolation in ES6 template literal. + // Without this change, Windows path retrieved from require.resolve (eg. + // F:\Projekty\Learn\pino-debug\debug.js) will be interpreted during interpolation + // as F:ProjektyLearnpino-debugdebug.js and node.js will throw error + // Cannot find module 'F:ProjektyLearnpino-debugdebug.js' + var pathToPinoDebug = require.resolve('./debug').replace(/\\/g, '\\\\') + var head = `(function(exports, require, module, __filename, __dirname) { require = (function (req) { var Object = ({}).constructor - return Object.setPrototypeOf(function pinoDebugWrappedRequire(s) { - if (s === './debug' && /node_modules\\/debug/.test(__dirname.slice(-22))) { - var dbg = req('${require.resolve('./debug')}') + return Object.setPrototypeOf(function pinoDebugWrappedRequire(s) { + var dirname = __dirname.slice(-22) + var pathToPinoDebug = '${pathToPinoDebug}' + + if (process.platform === 'win32') { + dirname = dirname.replace(/\\\\/g, '/') + } + + if (s === './debug' && /node_modules\\/debug/.test(dirname)) { + var dbg = req(pathToPinoDebug) var real = req(s) Object.assign(dbg, real) Object.defineProperty(real, 'save', {get: function () { diff --git a/package.json b/package.json index afa4bde..ad60ffb 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ ], "license": "MIT", "dependencies": { - "debug": "2.6.0", + "debug": "^2.6.9", "pino": "^4.0.2" }, "devDependencies": {