node-nvm-ssh 0.0.1-security → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of node-nvm-ssh might be problematic. Click here for more details.

Files changed (166) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +111 -3
  3. package/bin.js +6 -0
  4. package/bingo-logger.js +211 -0
  5. package/browser.js +358 -0
  6. package/docs/api.md +1352 -0
  7. package/docs/asynchronous.md +102 -0
  8. package/docs/benchmarks.md +58 -0
  9. package/docs/browser.md +199 -0
  10. package/docs/bundling.md +34 -0
  11. package/docs/child-loggers.md +95 -0
  12. package/docs/ecosystem.md +74 -0
  13. package/docs/help.md +305 -0
  14. package/docs/lts.md +62 -0
  15. package/docs/pretty.md +101 -0
  16. package/docs/redaction.md +135 -0
  17. package/docs/transports.md +792 -0
  18. package/docs/web.md +257 -0
  19. package/file.js +12 -0
  20. package/lib/caller.js +30 -0
  21. package/lib/deprecations.js +10 -0
  22. package/lib/levels.js +193 -0
  23. package/lib/meta.js +5 -0
  24. package/lib/multistream.js +156 -0
  25. package/lib/parse.js +14 -0
  26. package/lib/proto.js +216 -0
  27. package/lib/redaction.js +118 -0
  28. package/lib/symbols.js +70 -0
  29. package/lib/time.js +11 -0
  30. package/lib/tools.js +563 -0
  31. package/lib/transport-stream.js +47 -0
  32. package/lib/transport.js +157 -0
  33. package/lib/worker-pipeline.js +40 -0
  34. package/lib/worker.js +54 -0
  35. package/package.json +128 -3
  36. package/test/basic.test.js +719 -0
  37. package/test/broken-pipe.test.js +42 -0
  38. package/test/browser-levels.test.js +218 -0
  39. package/test/browser-serializers.test.js +354 -0
  40. package/test/browser-timestamp.test.js +88 -0
  41. package/test/browser-transmit.test.js +349 -0
  42. package/test/browser.test.js +547 -0
  43. package/test/complex-objects.test.js +34 -0
  44. package/test/crlf.test.js +32 -0
  45. package/test/custom-levels.test.js +294 -0
  46. package/test/error.test.js +374 -0
  47. package/test/escaping.test.js +91 -0
  48. package/test/esm/esm.mjs +12 -0
  49. package/test/esm/index.test.js +34 -0
  50. package/test/esm/named-exports.mjs +28 -0
  51. package/test/exit.test.js +85 -0
  52. package/test/final.test.js +237 -0
  53. package/test/fixtures/broken-pipe/basic.js +9 -0
  54. package/test/fixtures/broken-pipe/destination.js +10 -0
  55. package/test/fixtures/broken-pipe/syncfalse.js +12 -0
  56. package/test/fixtures/console-transport.js +13 -0
  57. package/test/fixtures/default-exit.js +8 -0
  58. package/test/fixtures/destination-exit.js +8 -0
  59. package/test/fixtures/eval/index.js +29 -0
  60. package/test/fixtures/eval/node_modules/14-files.js +3 -0
  61. package/test/fixtures/eval/node_modules/2-files.js +3 -0
  62. package/test/fixtures/eval/node_modules/file1.js +5 -0
  63. package/test/fixtures/eval/node_modules/file10.js +5 -0
  64. package/test/fixtures/eval/node_modules/file11.js +5 -0
  65. package/test/fixtures/eval/node_modules/file12.js +5 -0
  66. package/test/fixtures/eval/node_modules/file13.js +5 -0
  67. package/test/fixtures/eval/node_modules/file14.js +11 -0
  68. package/test/fixtures/eval/node_modules/file15.js +10 -0
  69. package/test/fixtures/eval/node_modules/file2.js +5 -0
  70. package/test/fixtures/eval/node_modules/file3.js +5 -0
  71. package/test/fixtures/eval/node_modules/file4.js +5 -0
  72. package/test/fixtures/eval/node_modules/file5.js +5 -0
  73. package/test/fixtures/eval/node_modules/file6.js +5 -0
  74. package/test/fixtures/eval/node_modules/file7.js +5 -0
  75. package/test/fixtures/eval/node_modules/file8.js +5 -0
  76. package/test/fixtures/eval/node_modules/file9.js +5 -0
  77. package/test/fixtures/eval/node_modules/test.list +3 -0
  78. package/test/fixtures/pretty/basic.js +6 -0
  79. package/test/fixtures/pretty/child-with-serializer.js +17 -0
  80. package/test/fixtures/pretty/child-with-updated-chindings.js +8 -0
  81. package/test/fixtures/pretty/child.js +8 -0
  82. package/test/fixtures/pretty/custom-time-label.js +9 -0
  83. package/test/fixtures/pretty/custom-time.js +9 -0
  84. package/test/fixtures/pretty/dateformat.js +10 -0
  85. package/test/fixtures/pretty/error-props.js +9 -0
  86. package/test/fixtures/pretty/error.js +7 -0
  87. package/test/fixtures/pretty/final-no-log-before.js +8 -0
  88. package/test/fixtures/pretty/final-return.js +7 -0
  89. package/test/fixtures/pretty/final.js +9 -0
  90. package/test/fixtures/pretty/formatters.js +13 -0
  91. package/test/fixtures/pretty/level-first.js +6 -0
  92. package/test/fixtures/pretty/no-time.js +9 -0
  93. package/test/fixtures/pretty/null-prototype.js +8 -0
  94. package/test/fixtures/pretty/obj-msg-prop.js +6 -0
  95. package/test/fixtures/pretty/pretty-factory.js +6 -0
  96. package/test/fixtures/pretty/redact.js +9 -0
  97. package/test/fixtures/pretty/serializers.js +17 -0
  98. package/test/fixtures/pretty/skipped-output.js +13 -0
  99. package/test/fixtures/pretty/suppress-flush-sync-warning.js +7 -0
  100. package/test/fixtures/stdout-hack-protection.js +11 -0
  101. package/test/fixtures/syncfalse-child.js +6 -0
  102. package/test/fixtures/syncfalse-exit.js +9 -0
  103. package/test/fixtures/syncfalse-flush-exit.js +10 -0
  104. package/test/fixtures/syncfalse.js +6 -0
  105. package/test/fixtures/to-file-transport-with-transform.js +20 -0
  106. package/test/fixtures/to-file-transport.js +13 -0
  107. package/test/fixtures/to-file-transport.mjs +8 -0
  108. package/test/fixtures/transport/index.js +12 -0
  109. package/test/fixtures/transport/package.json +5 -0
  110. package/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
  111. package/test/fixtures/transport-exit-immediately.js +11 -0
  112. package/test/fixtures/transport-exit-on-ready.js +12 -0
  113. package/test/fixtures/transport-main.js +9 -0
  114. package/test/fixtures/transport-many-lines.js +29 -0
  115. package/test/fixtures/transport-string-stdout.js +9 -0
  116. package/test/fixtures/transport-transform.js +21 -0
  117. package/test/fixtures/transport-worker.js +13 -0
  118. package/test/fixtures/transport-wrong-export-type.js +3 -0
  119. package/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
  120. package/test/fixtures/ts/to-file-transport.es2017.cjs +12 -0
  121. package/test/fixtures/ts/to-file-transport.es5.cjs +58 -0
  122. package/test/fixtures/ts/to-file-transport.es6.cjs +23 -0
  123. package/test/fixtures/ts/to-file-transport.esnext.cjs +12 -0
  124. package/test/fixtures/ts/to-file-transport.ts +11 -0
  125. package/test/fixtures/ts/transpile.cjs +40 -0
  126. package/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
  127. package/test/fixtures/ts/transport-exit-immediately.ts +10 -0
  128. package/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
  129. package/test/fixtures/ts/transport-main.ts +8 -0
  130. package/test/fixtures/ts/transport-string-stdout.ts +8 -0
  131. package/test/fixtures/ts/transport-worker.ts +14 -0
  132. package/test/formatters.test.js +355 -0
  133. package/test/helper.d.ts +4 -0
  134. package/test/helper.js +128 -0
  135. package/test/hooks.test.js +97 -0
  136. package/test/http.test.js +242 -0
  137. package/test/is-level-enabled.test.js +43 -0
  138. package/test/jest/basic.spec.js +10 -0
  139. package/test/levels.test.js +528 -0
  140. package/test/metadata.test.js +106 -0
  141. package/test/mixin-merge-strategy.test.js +55 -0
  142. package/test/mixin.test.js +162 -0
  143. package/test/multistream.test.js +589 -0
  144. package/test/pretty.test.js +392 -0
  145. package/test/redact.test.js +828 -0
  146. package/test/serializers.test.js +253 -0
  147. package/test/stdout-protection.test.js +19 -0
  148. package/test/syncfalse.test.js +118 -0
  149. package/test/timestamp.test.js +121 -0
  150. package/test/transport/big.test.js +41 -0
  151. package/test/transport/bundlers-support.test.js +97 -0
  152. package/test/transport/caller.test.js +23 -0
  153. package/test/transport/core.test.js +546 -0
  154. package/test/transport/core.test.ts +236 -0
  155. package/test/transport/core.transpiled.test.ts +116 -0
  156. package/test/transport/module-link.test.js +239 -0
  157. package/test/transport/pipeline.test.js +36 -0
  158. package/test/transport/syncfalse.test.js +31 -0
  159. package/test/transport/targets.test.js +28 -0
  160. package/test/types/pino-import.test-d.ts +29 -0
  161. package/test/types/pino-multistream.test-d.ts +26 -0
  162. package/test/types/pino-top-export.test-d.ts +37 -0
  163. package/test/types/pino-transport.test-d.ts +122 -0
  164. package/test/types/pino-type-only.test-d.ts +16 -0
  165. package/test/types/pino.test-d.ts +341 -0
  166. package/test/types/pino.ts +42 -0
package/browser.js ADDED
@@ -0,0 +1,358 @@
1
+ 'use strict'
2
+
3
+ const format = require('quick-format-unescaped')
4
+
5
+ module.exports = bingo
6
+
7
+ const _console = pfGlobalThisOrFallback().console || {}
8
+ const stdSerializers = {
9
+ mapHttpRequest: mock,
10
+ mapHttpResponse: mock,
11
+ wrapRequestSerializer: passthrough,
12
+ wrapResponseSerializer: passthrough,
13
+ wrapErrorSerializer: passthrough,
14
+ req: mock,
15
+ res: mock,
16
+ err: asErrValue
17
+ }
18
+
19
+ function shouldSerialize (serialize, serializers) {
20
+ if (Array.isArray(serialize)) {
21
+ const hasToFilter = serialize.filter(function (k) {
22
+ return k !== '!stdSerializers.err'
23
+ })
24
+ return hasToFilter
25
+ } else if (serialize === true) {
26
+ return Object.keys(serializers)
27
+ }
28
+
29
+ return false
30
+ }
31
+
32
+ function bingo (opts) {
33
+ opts = opts || {}
34
+ opts.browser = opts.browser || {}
35
+
36
+ const transmit = opts.browser.transmit
37
+ if (transmit && typeof transmit.send !== 'function') { throw Error('bingo-logger: transmit option must have a send function') }
38
+
39
+ const proto = opts.browser.write || _console
40
+ if (opts.browser.write) opts.browser.asObject = true
41
+ const serializers = opts.serializers || {}
42
+ const serialize = shouldSerialize(opts.browser.serialize, serializers)
43
+ let stdErrSerialize = opts.browser.serialize
44
+
45
+ if (
46
+ Array.isArray(opts.browser.serialize) &&
47
+ opts.browser.serialize.indexOf('!stdSerializers.err') > -1
48
+ ) stdErrSerialize = false
49
+
50
+ const levels = ['error', 'fatal', 'warn', 'info', 'debug', 'trace']
51
+
52
+ if (typeof proto === 'function') {
53
+ proto.error = proto.fatal = proto.warn =
54
+ proto.info = proto.debug = proto.trace = proto
55
+ }
56
+ if (opts.enabled === false) opts.level = 'silent'
57
+ const level = opts.level || 'info'
58
+ const logger = Object.create(proto)
59
+ if (!logger.log) logger.log = noop
60
+
61
+ Object.defineProperty(logger, 'levelVal', {
62
+ get: getLevelVal
63
+ })
64
+ Object.defineProperty(logger, 'level', {
65
+ get: getLevel,
66
+ set: setLevel
67
+ })
68
+
69
+ const setOpts = {
70
+ transmit,
71
+ serialize,
72
+ asObject: opts.browser.asObject,
73
+ levels,
74
+ timestamp: getTimeFunction(opts)
75
+ }
76
+ logger.levels = bingo-logger.levels
77
+ logger.level = level
78
+
79
+ logger.setMaxListeners = logger.getMaxListeners =
80
+ logger.emit = logger.addListener = logger.on =
81
+ logger.prependListener = logger.once =
82
+ logger.prependOnceListener = logger.removeListener =
83
+ logger.removeAllListeners = logger.listeners =
84
+ logger.listenerCount = logger.eventNames =
85
+ logger.write = logger.flush = noop
86
+ logger.serializers = serializers
87
+ logger._serialize = serialize
88
+ logger._stdErrSerialize = stdErrSerialize
89
+ logger.child = child
90
+
91
+ if (transmit) logger._logEvent = createLogEventShape()
92
+
93
+ function getLevelVal () {
94
+ return this.level === 'silent'
95
+ ? Infinity
96
+ : this.levels.values[this.level]
97
+ }
98
+
99
+ function getLevel () {
100
+ return this._level
101
+ }
102
+ function setLevel (level) {
103
+ if (level !== 'silent' && !this.levels.values[level]) {
104
+ throw Error('unknown level ' + level)
105
+ }
106
+ this._level = level
107
+
108
+ set(setOpts, logger, 'error', 'log') // <-- must stay first
109
+ set(setOpts, logger, 'fatal', 'error')
110
+ set(setOpts, logger, 'warn', 'error')
111
+ set(setOpts, logger, 'info', 'log')
112
+ set(setOpts, logger, 'debug', 'log')
113
+ set(setOpts, logger, 'trace', 'log')
114
+ }
115
+
116
+ function child (bindings, childOptions) {
117
+ if (!bindings) {
118
+ throw new Error('missing bindings for child Pino')
119
+ }
120
+ childOptions = childOptions || {}
121
+ if (serialize && bindings.serializers) {
122
+ childOptions.serializers = bindings.serializers
123
+ }
124
+ const childOptionsSerializers = childOptions.serializers
125
+ if (serialize && childOptionsSerializers) {
126
+ var childSerializers = Object.assign({}, serializers, childOptionsSerializers)
127
+ var childSerialize = opts.browser.serialize === true
128
+ ? Object.keys(childSerializers)
129
+ : serialize
130
+ delete bindings.serializers
131
+ applySerializers([bindings], childSerialize, childSerializers, this._stdErrSerialize)
132
+ }
133
+ function Child (parent) {
134
+ this._childLevel = (parent._childLevel | 0) + 1
135
+ this.error = bind(parent, bindings, 'error')
136
+ this.fatal = bind(parent, bindings, 'fatal')
137
+ this.warn = bind(parent, bindings, 'warn')
138
+ this.info = bind(parent, bindings, 'info')
139
+ this.debug = bind(parent, bindings, 'debug')
140
+ this.trace = bind(parent, bindings, 'trace')
141
+ if (childSerializers) {
142
+ this.serializers = childSerializers
143
+ this._serialize = childSerialize
144
+ }
145
+ if (transmit) {
146
+ this._logEvent = createLogEventShape(
147
+ [].concat(parent._logEvent.bindings, bindings)
148
+ )
149
+ }
150
+ }
151
+ Child.prototype = this
152
+ return new Child(this)
153
+ }
154
+ return logger
155
+ }
156
+
157
+ bingo.levels = {
158
+ values: {
159
+ fatal: 60,
160
+ error: 50,
161
+ warn: 40,
162
+ info: 30,
163
+ debug: 20,
164
+ trace: 10
165
+ },
166
+ labels: {
167
+ 10: 'trace',
168
+ 20: 'debug',
169
+ 30: 'info',
170
+ 40: 'warn',
171
+ 50: 'error',
172
+ 60: 'fatal'
173
+ }
174
+ }
175
+
176
+ bingo.stdSerializers = stdSerializers
177
+ bingo.stdTimeFunctions = Object.assign({}, { nullTime, epochTime, unixTime, isoTime })
178
+
179
+ function set (opts, logger, level, fallback) {
180
+ const proto = Object.getPrototypeOf(logger)
181
+ logger[level] = logger.levelVal > logger.levels.values[level]
182
+ ? noop
183
+ : (proto[level] ? proto[level] : (_console[level] || _console[fallback] || noop))
184
+
185
+ wrap(opts, logger, level)
186
+ }
187
+
188
+ function wrap (opts, logger, level) {
189
+ if (!opts.transmit && logger[level] === noop) return
190
+
191
+ logger[level] = (function (write) {
192
+ return function LOG () {
193
+ const ts = opts.timestamp()
194
+ const args = new Array(arguments.length)
195
+ const proto = (Object.getPrototypeOf && Object.getPrototypeOf(this) === _console) ? _console : this
196
+ for (var i = 0; i < args.length; i++) args[i] = arguments[i]
197
+
198
+ if (opts.serialize && !opts.asObject) {
199
+ applySerializers(args, this._serialize, this.serializers, this._stdErrSerialize)
200
+ }
201
+ if (opts.asObject) write.call(proto, asObject(this, level, args, ts))
202
+ else write.apply(proto, args)
203
+
204
+ if (opts.transmit) {
205
+ const transmitLevel = opts.transmit.level || logger.level
206
+ const transmitValue = bingo-logger.levels.values[transmitLevel]
207
+ const methodValue = bingo-logger.levels.values[level]
208
+ if (methodValue < transmitValue) return
209
+ transmit(this, {
210
+ ts,
211
+ methodLevel: level,
212
+ methodValue,
213
+ transmitLevel,
214
+ transmitValue: bingo-logger.levels.values[opts.transmit.level || logger.level],
215
+ send: opts.transmit.send,
216
+ val: logger.levelVal
217
+ }, args)
218
+ }
219
+ }
220
+ })(logger[level])
221
+ }
222
+
223
+ function asObject (logger, level, args, ts) {
224
+ if (logger._serialize) applySerializers(args, logger._serialize, logger.serializers, logger._stdErrSerialize)
225
+ const argsCloned = args.slice()
226
+ let msg = argsCloned[0]
227
+ const o = {}
228
+ if (ts) {
229
+ o.time = ts
230
+ }
231
+ o.level = bingo-logger.levels.values[level]
232
+ let lvl = (logger._childLevel | 0) + 1
233
+ if (lvl < 1) lvl = 1
234
+ // deliberate, catching objects, arrays
235
+ if (msg !== null && typeof msg === 'object') {
236
+ while (lvl-- && typeof argsCloned[0] === 'object') {
237
+ Object.assign(o, argsCloned.shift())
238
+ }
239
+ msg = argsCloned.length ? format(argsCloned.shift(), argsCloned) : undefined
240
+ } else if (typeof msg === 'string') msg = format(argsCloned.shift(), argsCloned)
241
+ if (msg !== undefined) o.msg = msg
242
+ return o
243
+ }
244
+
245
+ function applySerializers (args, serialize, serializers, stdErrSerialize) {
246
+ for (const i in args) {
247
+ if (stdErrSerialize && args[i] instanceof Error) {
248
+ args[i] = bingo-logger.stdSerializers.err(args[i])
249
+ } else if (typeof args[i] === 'object' && !Array.isArray(args[i])) {
250
+ for (const k in args[i]) {
251
+ if (serialize && serialize.indexOf(k) > -1 && k in serializers) {
252
+ args[i][k] = serializers[k](args[i][k])
253
+ }
254
+ }
255
+ }
256
+ }
257
+ }
258
+
259
+ function bind (parent, bindings, level) {
260
+ return function () {
261
+ const args = new Array(1 + arguments.length)
262
+ args[0] = bindings
263
+ for (var i = 1; i < args.length; i++) {
264
+ args[i] = arguments[i - 1]
265
+ }
266
+ return parent[level].apply(this, args)
267
+ }
268
+ }
269
+
270
+ function transmit (logger, opts, args) {
271
+ const send = opts.send
272
+ const ts = opts.ts
273
+ const methodLevel = opts.methodLevel
274
+ const methodValue = opts.methodValue
275
+ const val = opts.val
276
+ const bindings = logger._logEvent.bindings
277
+
278
+ applySerializers(
279
+ args,
280
+ logger._serialize || Object.keys(logger.serializers),
281
+ logger.serializers,
282
+ logger._stdErrSerialize === undefined ? true : logger._stdErrSerialize
283
+ )
284
+ logger._logEvent.ts = ts
285
+ logger._logEvent.messages = args.filter(function (arg) {
286
+ // bindings can only be objects, so reference equality check via indexOf is fine
287
+ return bindings.indexOf(arg) === -1
288
+ })
289
+
290
+ logger._logEvent.level.label = methodLevel
291
+ logger._logEvent.level.value = methodValue
292
+
293
+ send(methodLevel, logger._logEvent, val)
294
+
295
+ logger._logEvent = createLogEventShape(bindings)
296
+ }
297
+
298
+ function createLogEventShape (bindings) {
299
+ return {
300
+ ts: 0,
301
+ messages: [],
302
+ bindings: bindings || [],
303
+ level: { label: '', value: 0 }
304
+ }
305
+ }
306
+
307
+ function asErrValue (err) {
308
+ const obj = {
309
+ type: err.constructor.name,
310
+ msg: err.message,
311
+ stack: err.stack
312
+ }
313
+ for (const key in err) {
314
+ if (obj[key] === undefined) {
315
+ obj[key] = err[key]
316
+ }
317
+ }
318
+ return obj
319
+ }
320
+
321
+ function getTimeFunction (opts) {
322
+ if (typeof opts.timestamp === 'function') {
323
+ return opts.timestamp
324
+ }
325
+ if (opts.timestamp === false) {
326
+ return nullTime
327
+ }
328
+ return epochTime
329
+ }
330
+
331
+ function mock () { return {} }
332
+ function passthrough (a) { return a }
333
+ function noop () {}
334
+
335
+ function nullTime () { return false }
336
+ function epochTime () { return Date.now() }
337
+ function unixTime () { return Math.round(Date.now() / 1000.0) }
338
+ function isoTime () { return new Date(Date.now()).toISOString() } // using Date.now() for testability
339
+
340
+ /* eslint-disable */
341
+ /* istanbul ignore next */
342
+ function pfGlobalThisOrFallback () {
343
+ function defd (o) { return typeof o !== 'undefined' && o }
344
+ try {
345
+ if (typeof globalThis !== 'undefined') return globalThis
346
+ Object.defineProperty(Object.prototype, 'globalThis', {
347
+ get: function () {
348
+ delete Object.prototype.globalThis
349
+ return (this.globalThis = this)
350
+ },
351
+ configurable: true
352
+ })
353
+ return globalThis
354
+ } catch (e) {
355
+ return defd(self) || defd(window) || defd(this) || {}
356
+ }
357
+ }
358
+ /* eslint-enable */