UNPKG

1.64 kBJavaScriptView Raw
1'use strict';
2
3const dedent = require('dedent');
4const bunyan = require('./rewire')('bunyan/bin/bunyan', code => {
5 // Remove shebang.
6 code = code.replace(/^#!(.*?)\n/g, '');
7
8 // Modify `parseArgv(argv)` method.
9 code = code.replace(
10 /function\s+parseArgv\s*\(\s*argv\s*\)\s*{\s*var\s+parsed\s*=/m,
11 dedent`
12 function parseArgv(argv) {
13 var parsed = { args: [] };
14 parsed._defaults =
15 `
16 );
17
18 // Simplified versions of injected `rewire` getter/setter.
19 code += dedent`
20 \n;var format = require('util').format;
21
22 exports.__set__ = function () {
23 arguments.varName = arguments[0];
24 arguments.varValue = arguments[1];
25 return eval(format('%s = arguments.varValue;', arguments.varName));
26 };
27
28 exports.__get__ = function () {
29 arguments.varName = arguments[0];
30 return eval(arguments.varName);
31 };
32 `;
33
34 return code;
35});
36
37const getter = (proxiedModule, name) => ({
38 get: () => proxiedModule.__get__(name)
39});
40
41const prop = (proxiedModule, name) => ({
42 ...getter(proxiedModule, name),
43 set: val => proxiedModule.__set__(name, val)
44});
45
46module.exports = Object.defineProperties({}, {
47 emit: prop(bunyan, 'emit'),
48 emitRecord: prop(bunyan, 'emitRecord'),
49 indent: getter(bunyan, 'indent'),
50 isValidRecord: getter(bunyan, 'isValidRecord'),
51 levelFromName: getter(bunyan, 'levelFromName'),
52 main: getter(bunyan, 'main'),
53 OM_FROM_NAME: getter(bunyan, 'OM_FROM_NAME'),
54 OM_LONG: getter(bunyan, 'OM_LONG'),
55 OM_SHORT: getter(bunyan, 'OM_SHORT'),
56 parseArgv: prop(bunyan, 'parseArgv'),
57 print: prop(bunyan, 'p'),
58 printHelp: prop(bunyan, 'printHelp')
59});