diff options
Diffstat (limited to 'lib/utils/log-shim.js')
-rw-r--r-- | lib/utils/log-shim.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/utils/log-shim.js b/lib/utils/log-shim.js new file mode 100644 index 000000000..9d5a36d96 --- /dev/null +++ b/lib/utils/log-shim.js @@ -0,0 +1,59 @@ +const NPMLOG = require('npmlog') +const PROCLOG = require('proc-log') + +// Sets getter and optionally a setter +// otherwise setting should throw +const accessors = (obj, set) => (k) => ({ + get: () => obj[k], + set: set ? (v) => (obj[k] = v) : () => { + throw new Error(`Cant set ${k}`) + }, +}) + +// Set the value to a bound function on the object +const value = (obj) => (k) => ({ + value: (...args) => obj[k].apply(obj, args), +}) + +const properties = { + // npmlog getters/setters + level: accessors(NPMLOG, true), + heading: accessors(NPMLOG, true), + levels: accessors(NPMLOG), + gauge: accessors(NPMLOG), + stream: accessors(NPMLOG), + tracker: accessors(NPMLOG), + progressEnabled: accessors(NPMLOG), + // npmlog methods + useColor: value(NPMLOG), + enableColor: value(NPMLOG), + disableColor: value(NPMLOG), + enableUnicode: value(NPMLOG), + disableUnicode: value(NPMLOG), + enableProgress: value(NPMLOG), + disableProgress: value(NPMLOG), + clearProgress: value(NPMLOG), + showProgress: value(NPMLOG), + newItem: value(NPMLOG), + newGroup: value(NPMLOG), + // proclog methods + notice: value(PROCLOG), + error: value(PROCLOG), + warn: value(PROCLOG), + info: value(PROCLOG), + verbose: value(PROCLOG), + http: value(PROCLOG), + silly: value(PROCLOG), + pause: value(PROCLOG), + resume: value(PROCLOG), +} + +const descriptors = Object.entries(properties).reduce((acc, [k, v]) => { + acc[k] = { enumerable: true, ...v(k) } + return acc +}, {}) + +// Create an object with the allowed properties rom npm log and all +// the logging methods from proc log +// XXX: this should go away and requires of this should be replaced with proc-log + new display +module.exports = Object.freeze(Object.defineProperties({}, descriptors)) |