added unit testing, and started implementing unit tests...phew
This commit is contained in:
3
node_modules/logform/.babelrc
generated
vendored
Normal file
3
node_modules/logform/.babelrc
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"presets": ["@babel/preset-env"]
|
||||
}
|
7
node_modules/logform/.eslintrc
generated
vendored
Normal file
7
node_modules/logform/.eslintrc
generated
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"extends": "populist",
|
||||
"rules": {
|
||||
"no-undefined": 0,
|
||||
"strict": 0
|
||||
}
|
||||
}
|
1
node_modules/logform/.gitattributes
generated
vendored
Normal file
1
node_modules/logform/.gitattributes
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
package-lock.json binary
|
17
node_modules/logform/.travis.yml
generated
vendored
Normal file
17
node_modules/logform/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
sudo: false
|
||||
language: node_js
|
||||
node_js:
|
||||
- "6"
|
||||
- "8"
|
||||
- "10"
|
||||
|
||||
before_install:
|
||||
- travis_retry npm install
|
||||
|
||||
script:
|
||||
- npm test
|
||||
|
||||
notifications:
|
||||
email:
|
||||
- travis@nodejitsu.com
|
||||
irc: "irc.freenode.org#nodejitsu"
|
224
node_modules/logform/CHANGELOG.md
generated
vendored
Normal file
224
node_modules/logform/CHANGELOG.md
generated
vendored
Normal file
@ -0,0 +1,224 @@
|
||||
# CHANGELOG
|
||||
|
||||
### 2.1.2
|
||||
**2019/01/31**
|
||||
|
||||
- [#74] Remove all internal symbols before invoking `util.inspect`.
|
||||
- Related to [#31].
|
||||
|
||||
### 2.1.1
|
||||
**2019/01/29**
|
||||
|
||||
- [#71] Bump logform to be consistent with winston.
|
||||
- Fixes https://github.com/winstonjs/winston/issues/1584
|
||||
|
||||
### 2.1.0
|
||||
**2019/01/07**
|
||||
|
||||
- [#59], [#68], [#69] Add error normalizing format.
|
||||
- [#65] When MESSAGE symbol has a value and `{ all: true }` is set, colorize the entire serialized message.
|
||||
|
||||
### 2.0.0
|
||||
**2018/12/23**
|
||||
|
||||
- **BREAKING** [#57] Try better fix for [winston#1485]. See:
|
||||
[New `splat` behavior`](#new-splat-behavior) below.
|
||||
- [#54] Fix typo in `README.md`
|
||||
- [#55] Strip info[LEVEL] in prettyPrint. Fixes [#31].
|
||||
- [#56] Document built-in formats.
|
||||
- [#64] Add TypeScript definitions for all format options.
|
||||
Relates to [#9] and [#48].
|
||||
|
||||
#### New `splat` behavior
|
||||
|
||||
Previously `splat` would have added a `meta` property for any additional
|
||||
`info[SPLAT]` beyond the expected number of tokens.
|
||||
|
||||
**As of `logform@2.0.0`,** `format.splat` assumes additional splat paramters
|
||||
(aka "metas") are objects and merges enumerable properties into the `info`.
|
||||
e.g.
|
||||
|
||||
``` js
|
||||
const { format } = require('logform');
|
||||
const { splat } = format;
|
||||
const { MESSAGE, LEVEL, SPLAT } = require('triple-beam');
|
||||
|
||||
console.log(
|
||||
// Expects two tokens, but three splat parameters provided.
|
||||
splat().transform({
|
||||
level: 'info',
|
||||
message: 'Let us %s for %j',
|
||||
[LEVEL]: 'info',
|
||||
[MESSAGE]: 'Let us %s for %j',
|
||||
[SPLAT]: ['objects', { label: 'sure' }, { thisIsMeta: 'wut' }]
|
||||
})
|
||||
);
|
||||
|
||||
// logform@1.x behavior:
|
||||
// Added "meta" property.
|
||||
//
|
||||
// { level: 'info',
|
||||
// message: 'Let us objects for {"label":"sure"}',
|
||||
// meta: { thisIsMeta: 'wut' },
|
||||
// [Symbol(level)]: 'info',
|
||||
// [Symbol(message)]: 'Let us %s for %j',
|
||||
// [Symbol(splat)]: [ 'objects', { label: 'sure' } ] }
|
||||
|
||||
// logform@2.x behavior:
|
||||
// Enumerable properties assigned into `info`.
|
||||
//
|
||||
// { level: 'info',
|
||||
// message: 'Let us objects for {"label":"sure"}',
|
||||
// thisIsMeta: 'wut',
|
||||
// [Symbol(level)]: 'info',
|
||||
// [Symbol(message)]: 'Let us %s for %j',
|
||||
// [Symbol(splat)]: [ 'objects', { label: 'sure' } ] }
|
||||
```
|
||||
|
||||
The reason for this change is to be consistent with how `winston` itself
|
||||
handles `meta` objects in its variable-arity conventions.
|
||||
|
||||
**BE ADVISED** previous "metas" that _were not objects_ will very likely lead
|
||||
to odd behavior. e.g.
|
||||
|
||||
``` js
|
||||
const { format } = require('logform');
|
||||
const { splat } = format;
|
||||
const { MESSAGE, LEVEL, SPLAT } = require('triple-beam');
|
||||
|
||||
console.log(
|
||||
// Expects two tokens, but three splat parameters provided.
|
||||
splat().transform({
|
||||
level: 'info',
|
||||
message: 'Let us %s for %j',
|
||||
[LEVEL]: 'info',
|
||||
[MESSAGE]: 'Let us %s for %j',
|
||||
// !!NOTICE!! Additional parameters are a string and an Array
|
||||
[SPLAT]: ['objects', { label: 'sure' }, 'lol', ['ok', 'why']]
|
||||
})
|
||||
);
|
||||
|
||||
// logform@1.x behavior:
|
||||
// Added "meta" property.
|
||||
//
|
||||
// { level: 'info',
|
||||
// message: 'Let us objects for {"label":"sure"}',
|
||||
// meta: ['lol', ['ok', 'why']],
|
||||
// [Symbol(level)]: 'info',
|
||||
// [Symbol(message)]: 'Let us %s for %j',
|
||||
// [Symbol(splat)]: [ 'objects', { label: 'sure' } ] }
|
||||
|
||||
// logform@2.x behavior: Enumerable properties assigned into `info`.
|
||||
// **Strings and Arrays only have NUMERIC enumerable properties!**
|
||||
//
|
||||
// { '0': 'ok',
|
||||
// '1': 'why',
|
||||
// '2': 'l',
|
||||
// level: 'info',
|
||||
// message: 'Let us objects for {"label":"sure"}',
|
||||
// [Symbol(level)]: 'info',
|
||||
// [Symbol(message)]: 'Let us %s for %j',
|
||||
// [Symbol(splat)]: [ 'objects', { label: 'sure' } ] }
|
||||
```
|
||||
|
||||
### 1.10.0
|
||||
**2018/09/17**
|
||||
|
||||
- [#52] Add types field in package.json.
|
||||
- [#46], [#49] Changes for splat when there are no tokens present and no splat present.
|
||||
- [#47], [#53] Expose transpiled code for Browser-only scenarios.
|
||||
|
||||
### 1.9.1
|
||||
**2018/06/26**
|
||||
|
||||
- [#39] Don't break when there are % placeholders but no values.
|
||||
- [#42] Only set `meta` when non-zero additional `SPLAT` arguments are
|
||||
provided. (Fixes [winstonjs/winston#1358]).
|
||||
|
||||
### 1.9.0
|
||||
**2018/06/12**
|
||||
|
||||
- [#38] Migrate functionality from winston Logger to splat format.
|
||||
- [#37] Match expectations from `winston@2.x` for padLevels. Create a correct `Cli` format with initial state. (Fixes [#36]).
|
||||
|
||||
### 1.8.0
|
||||
**2018/06/11**
|
||||
|
||||
- [#35] Use `fast-safe-stringify` for perf and to support circular refs.
|
||||
- [#34] Colorize level symbol.
|
||||
|
||||
### 1.7.0
|
||||
**2018/05/24**
|
||||
|
||||
- [#28] Use more es6-features across the board.
|
||||
- [#30] Fix combine return value.
|
||||
- [#29] Add metadata function to format namespace.
|
||||
|
||||
### 1.6.0
|
||||
**2018/04/25**
|
||||
|
||||
- [#25] Implement padLevels format.
|
||||
- [#26] Update `dependencies` and add `node@10` to the travis build of the project.
|
||||
- [#27] Refactor logform to use triple-beam.
|
||||
|
||||
### 1.5.0
|
||||
**2018/04/22**
|
||||
|
||||
- [#23], (@ChrisAlderson) Add ms format to support '+N ms' format. Fixes #20.
|
||||
- [#24], (@aneilbaboo) Fix `webpack` warnings.
|
||||
- Add `.travis.yml`.
|
||||
|
||||
### 1.4.2
|
||||
**2018/04/19**
|
||||
|
||||
- [#22], (@Jasu) Fix compilation on Babel 6.
|
||||
|
||||
### 1.4.1
|
||||
**2018/04/06**
|
||||
|
||||
- [#21], (@dabh) Add tsconfig.json. Fixes #19.
|
||||
|
||||
### 1.4.0
|
||||
**2018/03/23**
|
||||
|
||||
- [#14] @iamkirkbater Added Initial Metadata Support.
|
||||
- Correct JSDoc for printf.js. Fixes #10.
|
||||
|
||||
### 1.3.0
|
||||
**2018/03/16**
|
||||
|
||||
- [#18] Expose browser.js for rollup and the like. Fixes [#5].
|
||||
- [#13] @dabh Use new version of colors.
|
||||
- [#15] @dabh Add Typescript typings (ported from DefinitelyTyped).
|
||||
- [#17], [#16] Fix error messages other typos.
|
||||
|
||||
### 1.2.2
|
||||
**2017/12/05**
|
||||
|
||||
- [#4], [#11] Fix timestamp and replace `date-fns` with `fecha` (with test cases) [`@ChrisAlderson`].
|
||||
|
||||
### 1.2.1
|
||||
**2017/10/01**
|
||||
|
||||
- [#3] Strip `info.splat` in `format.simple` to avoid double inclusion.
|
||||
|
||||
### 1.2.0
|
||||
**2017/09/30**
|
||||
|
||||
- Transition from `info.raw` to `info[Symbol.for('message')]`.
|
||||
- Finish `README.md` except for full list of all built-in formats.
|
||||
- 100% coverage for everything except for `{ align, cli, padLevels }`.
|
||||
|
||||
### 1.1.0
|
||||
**2017/09/29**
|
||||
|
||||
- [#2] Add baseline expected formats that were previously exposed as options to `common.log` in `winston@2.x` and below.
|
||||
- [#2] Introduce `format.combine` to remove inconsistency in behavior between `format(fn0)` and `format(fn0, ...moreFns)`.
|
||||
- [#2] `README.md` now covers all of the basics for `logform`.
|
||||
|
||||
### 1.0.0
|
||||
**2017/09/26**
|
||||
|
||||
- Initial release.
|
||||
|
||||
[winstonjs/winston#1358]: https://github.com/winstonjs/winston/issues/1358
|
21
node_modules/logform/LICENSE
generated
vendored
Normal file
21
node_modules/logform/LICENSE
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 Charlie Robbins & the Contributors.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
653
node_modules/logform/README.md
generated
vendored
Normal file
653
node_modules/logform/README.md
generated
vendored
Normal file
@ -0,0 +1,653 @@
|
||||
# logform
|
||||
|
||||
A mutable object-based log format designed for chaining & objectMode streams.
|
||||
|
||||
``` js
|
||||
const { format } = require('logform');
|
||||
|
||||
const alignedWithColorsAndTime = format.combine(
|
||||
format.colorize(),
|
||||
format.timestamp(),
|
||||
format.align(),
|
||||
format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
|
||||
);
|
||||
```
|
||||
|
||||
- [`info` Objects](#info-objects)
|
||||
- [Understanding formats](#understanding-formats)
|
||||
- [Combining formats](#combining-formats)
|
||||
- [Filtering `info` objects](#filtering-info-objects)
|
||||
- [Formats](#formats)
|
||||
- [Align](#align)
|
||||
- [CLI](#cli)
|
||||
- [Colorize](#colorize)
|
||||
- [Combine](#combine)
|
||||
- [Errors](#errors)
|
||||
- [JSON](#json)
|
||||
- [Label](#label)
|
||||
- [Logstash](#logstash)
|
||||
- [Metadata](#metadata)
|
||||
- [PadLevels](#padlevels)
|
||||
- [PrettyPrint](#prettyprint)
|
||||
- [Printf](#printf)
|
||||
- [Simple](#simple)
|
||||
- [Splat](#splat)
|
||||
- [Timestamp](#timestamp)
|
||||
- [Uncolorize](#uncolorize)
|
||||
|
||||
## `info` Objects
|
||||
|
||||
The `info` parameter provided to a given format represents a single log
|
||||
message. The object itself is mutable. Every `info` must have at least the
|
||||
`level` and `message` properties:
|
||||
|
||||
``` js
|
||||
const info = {
|
||||
level: 'info', // Level of the logging message
|
||||
message: 'Hey! Log something?' // Descriptive message being logged.
|
||||
}
|
||||
```
|
||||
|
||||
Properties **besides level and message** are considered as "`meta`". i.e.:
|
||||
|
||||
``` js
|
||||
const { level, message, ...meta } = info;
|
||||
```
|
||||
|
||||
Several of the formats in `logform` itself add additional properties:
|
||||
|
||||
| Property | Format added by | Description |
|
||||
| ----------- | --------------- | ----------- |
|
||||
| `splat` | `splat()` | String interpolation splat for `%d %s`-style messages. |
|
||||
| `timestamp` | `timestamp()` | timestamp the message was received. |
|
||||
| `label` | `label()` | Custom label associated with each message. |
|
||||
| `ms` | `ms()` | Number of milliseconds since the previous log message. |
|
||||
|
||||
As a consumer you may add whatever properties you wish – _internal state is
|
||||
maintained by `Symbol` properties:_
|
||||
|
||||
- `Symbol.for('level')` _**(READ-ONLY)**:_ equal to `level` property.
|
||||
**Is treated as immutable by all code.**
|
||||
- `Symbol.for('message'):` complete string message set by "finalizing formats":
|
||||
- `json`
|
||||
- `logstash`
|
||||
- `printf`
|
||||
- `prettyPrint`
|
||||
- `simple`
|
||||
- `Symbol.for('splat')`: additional string interpolation arguments. _Used
|
||||
exclusively by `splat()` format._
|
||||
|
||||
These Symbols are stored in another package: `triple-beam` so that all
|
||||
consumers of `logform` can have the same Symbol reference. i.e.:
|
||||
|
||||
``` js
|
||||
const { LEVEL, MESSAGE, SPLAT } = require('triple-beam');
|
||||
|
||||
console.log(LEVEL === Symbol.for('level'));
|
||||
// true
|
||||
|
||||
console.log(MESSAGE === Symbol.for('message'));
|
||||
// true
|
||||
|
||||
console.log(SPLAT === Symbol.for('splat'));
|
||||
// true
|
||||
```
|
||||
|
||||
## Understanding formats
|
||||
|
||||
Formats are prototypal objects (i.e. class instances) that define a single method: `transform(info, opts)` and return the mutated `info`
|
||||
|
||||
- `info`: an object representing the log message.
|
||||
- `opts`: setting specific to the current instance of the format.
|
||||
|
||||
They are expected to return one of two things:
|
||||
|
||||
- **An `info` Object** representing the modified `info` argument. Object references need not be preserved if immutability is preferred. All current built-in formats consider `info` mutable, but [immutablejs] is being considered for future releases.
|
||||
- **A falsey value** indicating that the `info` argument should be ignored by the caller. (See: [Filtering `info` Objects](#filtering-info-objects)) below.
|
||||
|
||||
`logform.format` is designed to be as simple as possible. To define a new format simple pass it a `transform(info, opts)` function to get a new `Format`.
|
||||
|
||||
The named `Format` returned can be used to create as many copies of the given `Format` as desired:
|
||||
|
||||
``` js
|
||||
const { format } = require('logform');
|
||||
|
||||
const volume = format((info, opts) => {
|
||||
if (opts.yell) {
|
||||
info.message = info.message.toUpperCase();
|
||||
} else if (opts.whisper) {
|
||||
info.message = info.message.toLowerCase();
|
||||
}
|
||||
|
||||
return info;
|
||||
});
|
||||
|
||||
// `volume` is now a function that returns instances of the format.
|
||||
const scream = volume({ yell: true });
|
||||
console.dir(scream.transform({
|
||||
level: 'info',
|
||||
message: `sorry for making you YELL in your head!`
|
||||
}, scream.options));
|
||||
// {
|
||||
// level: 'info'
|
||||
// message: 'SORRY FOR MAKING YOU YELL IN YOUR HEAD!'
|
||||
// }
|
||||
|
||||
// `volume` can be used multiple times to create different formats.
|
||||
const whisper = volume({ whisper: true });
|
||||
console.dir(whisper.transform({
|
||||
level: 'info',
|
||||
message: `WHY ARE THEY MAKING US YELL SO MUCH!`
|
||||
}), whisper.options);
|
||||
// {
|
||||
// level: 'info'
|
||||
// message: 'why are they making us yell so much!'
|
||||
// }
|
||||
```
|
||||
|
||||
### Combining formats
|
||||
|
||||
Any number of formats may be combined into a single format using `format.combine`. Since `format.combine` takes no `opts`, as a convenience it returns pre-created instance of the combined format.
|
||||
|
||||
``` js
|
||||
const { format } = require('logform');
|
||||
const { combine, timestamp, label } = format;
|
||||
|
||||
const labelTimestamp = combine(
|
||||
label({ label: 'right meow!' }),
|
||||
timestamp()
|
||||
);
|
||||
|
||||
const info = labelTimestamp.transform({
|
||||
level: 'info',
|
||||
message: 'What time is the testing at?'
|
||||
});
|
||||
|
||||
console.dir(info);
|
||||
// { level: 'info',
|
||||
// message: 'What time is the testing at?',
|
||||
// label: 'right meow!',
|
||||
// timestamp: '2017-09-30T03:57:26.875Z' }
|
||||
```
|
||||
|
||||
### Filtering `info` Objects
|
||||
|
||||
If you wish to filter out a given `info` Object completely then simply return a falsey value.
|
||||
|
||||
``` js
|
||||
const ignorePrivate = format((info, opts) => {
|
||||
if (info.private) { return false; }
|
||||
return info;
|
||||
});
|
||||
|
||||
console.dir(ignorePrivate.transform({
|
||||
level: 'error',
|
||||
message: 'Public error to share'
|
||||
}));
|
||||
// { level: 'error', message: 'Public error to share' }
|
||||
|
||||
console.dir(ignorePrivate.transform({
|
||||
level: 'error',
|
||||
private: true,
|
||||
message: 'This is super secret - hide it.'
|
||||
}));
|
||||
// false
|
||||
```
|
||||
|
||||
Use of `format.combine` will respect any falsey values return and stop evaluation of later formats in the series. For example:
|
||||
|
||||
``` js
|
||||
const { format } = require('logform');
|
||||
const { combine, timestamp, label } = format;
|
||||
|
||||
const willNeverThrow = format.combine(
|
||||
format(info => { return false })(), // Ignores everything
|
||||
format(info => { throw new Error('Never reached') })()
|
||||
);
|
||||
|
||||
console.dir(willNeverThrow.transform({
|
||||
level: 'info',
|
||||
message: 'wow such testing'
|
||||
}))
|
||||
```
|
||||
|
||||
## Formats
|
||||
|
||||
### Align
|
||||
|
||||
The `align` format adds a `\t` delimiter before the message to align it in the same place.
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
|
||||
const alignFormat = format.align();
|
||||
|
||||
const info = alignFormat.transform({
|
||||
level: 'info',
|
||||
message: 'my message'
|
||||
});
|
||||
|
||||
console.log(info);
|
||||
// { level: 'info', message: '\tmy message' }
|
||||
```
|
||||
|
||||
This was previously exposed as `{ align: true }` in `winston < 3.0.0`.
|
||||
|
||||
### CLI
|
||||
|
||||
The `cli` format is a combination of the `colorize` and the `padLevels` formats. It turns a log `info` object into the same format previously available in `winston.cli()` in `winston < 3.0.0`.
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
const LEVEL = Symbol.for('level');
|
||||
|
||||
const cliFormat = format.cli({ colors: { info: 'blue' }});
|
||||
|
||||
const info = cliFormat.transform({
|
||||
[LEVEL]: 'info',
|
||||
level: 'info',
|
||||
message: 'my message'
|
||||
}, { all: true });
|
||||
|
||||
console.log(info);
|
||||
// { level: '\u001b[34minfo\u001b[39m',
|
||||
// message: '\u001b[34m my message\u001b[39m',
|
||||
// [Symbol(level)]: 'info',
|
||||
// [Symbol(message)]:
|
||||
// '\u001b[34minfo\u001b[39m:\u001b[34m my message\u001b[39m' }
|
||||
```
|
||||
|
||||
### Colorize
|
||||
|
||||
The `colorize` format adds different colors depending on the log level to the message and/or level.
|
||||
It accepts the following options:
|
||||
|
||||
* **level**: If set to `true` the color will be applied to the `level`.
|
||||
* **all**: If set to `true` the color will be applied to the `message` and `level`.
|
||||
* **message**: If set to `true` the color will be applied to the `message`.
|
||||
* **colors**: An object containing the colors for the log levels. For example: `{ info: 'blue', error: 'red' }`
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
const LEVEL = Symbol.for('level');
|
||||
|
||||
const colorizeFormat = format.colorize({ colors: { info: 'blue' }});
|
||||
|
||||
const info = colorizeFormat.transform({
|
||||
[LEVEL]: 'info',
|
||||
level: 'info',
|
||||
message: 'my message'
|
||||
}, { all: true });
|
||||
|
||||
console.log(info);
|
||||
// { level: '\u001b[34minfo\u001b[39m',
|
||||
// message: '\u001b[34mmy message\u001b[39m',
|
||||
// [Symbol(level)]: 'info' }
|
||||
```
|
||||
|
||||
This was previously exposed as `{ colorize: true }` to transports in `winston < 3.0.0`.
|
||||
|
||||
### Combine
|
||||
|
||||
The `combine` Format allows to combine multiple formats:
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
const { combine, timestamp, json } = format;
|
||||
|
||||
const jsonWithTimestamp = combine(
|
||||
timestamp(),
|
||||
json()
|
||||
);
|
||||
|
||||
const info = jsonWithTimestamp.transform({
|
||||
level: 'info',
|
||||
message: 'my message'
|
||||
});
|
||||
|
||||
console.log(info);
|
||||
// { level: 'info',
|
||||
// message: 'my message',
|
||||
// timestamp: '2018-10-02T15:03:14.230Z',
|
||||
// [Symbol(message)]:
|
||||
// '{"level":"info","message":"my message","timestamp":"2018-10-02T15:03:14.230Z"}' }
|
||||
```
|
||||
|
||||
### Errors
|
||||
|
||||
The `errors` format allows you to pass in an instance of a JavaScript `Error`
|
||||
directly to the logger. It allows you to specify whether not to include the
|
||||
stack-trace.
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
const { errors } = format;
|
||||
|
||||
const errorsFormat = errors({ stack: true })
|
||||
|
||||
const info = errorsFormat.transform(new Error('Oh no!'));
|
||||
|
||||
console.log(info);
|
||||
// Error: Oh no!
|
||||
// at repl:1:13
|
||||
// at ContextifyScript.Script.runInThisContext (vm.js:50:33)
|
||||
// at REPLServer.defaultEval (repl.js:240:29)
|
||||
// at bound (domain.js:301:14)
|
||||
// at REPLServer.runBound [as eval] (domain.js:314:12)
|
||||
// at REPLServer.onLine (repl.js:468:10)
|
||||
// at emitOne (events.js:121:20)
|
||||
// at REPLServer.emit (events.js:211:7)
|
||||
// at REPLServer.Interface._onLine (readline.js:282:10)
|
||||
// at REPLServer.Interface._line (readline.js:631:8)
|
||||
```
|
||||
|
||||
It will also handle `{ message }` properties as `Error` instances:
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
const { errors } = format;
|
||||
|
||||
const errorsFormat = errors({ stack: true })
|
||||
|
||||
const info = errorsFormat.transform({
|
||||
message: new Error('Oh no!')
|
||||
});
|
||||
|
||||
console.log(info);
|
||||
// Error: Oh no!
|
||||
// at repl:1:13
|
||||
// at ContextifyScript.Script.runInThisContext (vm.js:50:33)
|
||||
// at REPLServer.defaultEval (repl.js:240:29)
|
||||
// at bound (domain.js:301:14)
|
||||
// at REPLServer.runBound [as eval] (domain.js:314:12)
|
||||
// at REPLServer.onLine (repl.js:468:10)
|
||||
// at emitOne (events.js:121:20)
|
||||
// at REPLServer.emit (events.js:211:7)
|
||||
// at REPLServer.Interface._onLine (readline.js:282:10)
|
||||
// at REPLServer.Interface._line (readline.js:631:8)
|
||||
```
|
||||
|
||||
### JSON
|
||||
|
||||
The `json` format uses `fast-safe-stringify` to finalize the message.
|
||||
It accepts the following options:
|
||||
|
||||
* **replacer**: A function that influences how the `info` is stringified.
|
||||
* **space**: The number of white space used to format the json.
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
|
||||
const jsonFormat = format.json();
|
||||
|
||||
const info = jsonFormat.transform({
|
||||
level: 'info',
|
||||
message: 'my message',
|
||||
});
|
||||
console.log(info);
|
||||
// { level: 'info',
|
||||
// message: 'my message',
|
||||
// [Symbol(message)]: '{"level":"info","message":"my message"}' }
|
||||
```
|
||||
|
||||
This was previously exposed as `{ json: true }` to transports in `winston < 3.0.0`.
|
||||
|
||||
### Label
|
||||
|
||||
The `label` format adds the specified `label` before the message or adds it to the `info` object.
|
||||
It accepts the following options:
|
||||
|
||||
* **label**: A label to be added before the message.
|
||||
* **message**: If set to `true` the `label` will be added to `info.message`. If set to `false` the `label` will be added as `info.label`.
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
|
||||
const labelFormat = format.label();
|
||||
|
||||
const info = labelFormat.transform({
|
||||
level: 'info',
|
||||
message: 'my message'
|
||||
}, { label: 'my label', message: true });
|
||||
|
||||
console.log(info);
|
||||
// { level: 'info', message: '[my label] my message' }
|
||||
```
|
||||
|
||||
This was previously exposed as `{ label: 'my label' }` to transports in `winston < 3.0.0`.
|
||||
|
||||
### Logstash
|
||||
|
||||
The `logstash` Format turns a log `info` object into pure JSON with the appropriate logstash options.
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
const { logstash, combine, timestamp } = format;
|
||||
|
||||
const logstashFormat = combine(
|
||||
timestamp(),
|
||||
logstash()
|
||||
);
|
||||
|
||||
const info = logstashFormat.transform({
|
||||
level: 'info',
|
||||
message: 'my message'
|
||||
});
|
||||
|
||||
console.log(info);
|
||||
// { level: 'info',
|
||||
// [Symbol(message)]:
|
||||
// '{"@message":"my message","@timestamp":"2018-10-02T11:04:52.915Z","@fields":{"level":"info"}}' }
|
||||
```
|
||||
|
||||
This was previously exposed as `{ logstash: true }` to transports in `winston < 3.0.0`.
|
||||
|
||||
### Metadata
|
||||
|
||||
The `metadata` format adds a metadata object to collect extraneous data, similar to the metadata object in winston 2.x.
|
||||
It accepts the following options:
|
||||
|
||||
* **key**: The name of the key used for the metadata object. Defaults to `metadata`.
|
||||
* **fillExcept**: An array of keys that should not be added to the metadata object.
|
||||
* **fillWith**: An array of keys that will be added to the metadata object.
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
|
||||
const metadataFormat = format.metadata();
|
||||
|
||||
const info = metadataFormat.transform({
|
||||
level: 'info',
|
||||
message: 'my message',
|
||||
meta: 42
|
||||
});
|
||||
|
||||
console.log(info);
|
||||
// { level: 'info', message: 'my message', metadata: { meta: 42 } }
|
||||
```
|
||||
|
||||
### PadLevels
|
||||
|
||||
The `padLevels` format pads levels to be the same length.
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
const LEVEL = Symbol.for('level');
|
||||
|
||||
const padLevelsFormat = format.padLevels();
|
||||
|
||||
const info = padLevelsFormat.transform({
|
||||
[LEVEL]: 'info',
|
||||
message: 'my message'
|
||||
});
|
||||
|
||||
console.log(info);
|
||||
// { message: ' my message', [Symbol(level)]: 'info' }
|
||||
```
|
||||
|
||||
This was previously exposed as `{ padLevels: true }` to transports in `winston < 3.0.0`.
|
||||
|
||||
### PrettyPrint
|
||||
|
||||
The `prettyPrint` format finalizes the message using `util.inspect`.
|
||||
It accepts the following options:
|
||||
|
||||
* **depth**: A `number` that specifies the maximum depth of the `info` object being stringified by `util.inspect`. Defaults to `2`.
|
||||
* **colorize**: Colorizes the message if set to `true`. Defaults to `false`.
|
||||
|
||||
The `prettyPrint` format should not be used in production because it may impact performance negatively and block the event loop.
|
||||
|
||||
> **NOTE:** the `LEVEL`, `MESSAGE`, and `SPLAT` symbols are stripped from the
|
||||
> output message _by design._
|
||||
|
||||
This was previously exposed as `{ prettyPrint: true }` to transports in `winston < 3.0.0`.
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
|
||||
const prettyPrintFormat = format.prettyPrint();
|
||||
|
||||
const info = prettyPrintFormat.transform({
|
||||
[LEVEL]: 'info',
|
||||
level: 'info',
|
||||
message: 'my message'
|
||||
});
|
||||
|
||||
console.log(info);
|
||||
// { level: 'info',
|
||||
// message: 'my message',
|
||||
// [Symbol(level)]: 'info',
|
||||
// [Symbol(message)]: '{ level: \'info\', message: \'my message\' }' }
|
||||
```
|
||||
|
||||
### Printf
|
||||
|
||||
The `printf` format allows to create a custom logging format:
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
|
||||
const myFormat = format.printf((info) => {
|
||||
return `${info.level} ${info.message}`;
|
||||
})
|
||||
|
||||
const info = myFormat.transform({
|
||||
level: 'info',
|
||||
message: 'my message'
|
||||
});
|
||||
|
||||
console.log(info);
|
||||
// { level: 'info',
|
||||
// message: 'my message',
|
||||
// [Symbol(message)]: 'info my message' }
|
||||
```
|
||||
|
||||
### Simple
|
||||
|
||||
The `simple` format finalizes the `info` object using the format: `level: message stringifiedRest`.
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
const MESSAGE = Symbol.for('message');
|
||||
|
||||
const simpleFormat = format.simple();
|
||||
|
||||
const info = simpleFormat.transform({
|
||||
level: 'info',
|
||||
message: 'my message',
|
||||
number: 123
|
||||
});
|
||||
console.log(info[MESSAGE]);
|
||||
// info: my message {number:123}
|
||||
```
|
||||
|
||||
### Splat
|
||||
|
||||
The `splat` format transforms the message by using `util.format` to complete any `info.message` provided it has string interpolation tokens.
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
|
||||
const splatFormat = format.splat();
|
||||
|
||||
const info = splatFormat.transform({
|
||||
level: 'info',
|
||||
message: 'my message %s',
|
||||
splat: ['test']
|
||||
});
|
||||
|
||||
console.log(info);
|
||||
// { level: 'info', message: 'my message test', splat: [ 'test' ] }
|
||||
```
|
||||
|
||||
Any additional splat parameters beyond those needed for the `%` tokens
|
||||
(aka "metas") are assumed to be objects. Their enumerable properties are
|
||||
merged into the `info`.
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
|
||||
const splatFormat = format.splat();
|
||||
|
||||
const info = splatFormat.transform({
|
||||
level: 'info',
|
||||
message: 'my message %s',
|
||||
splat: ['test', { thisIsMeta: true }]
|
||||
});
|
||||
|
||||
console.log(info);
|
||||
// { level: 'info',
|
||||
// message: 'my message test',
|
||||
// thisIsMeta: true,
|
||||
// splat: [ 'test' ] }
|
||||
```
|
||||
|
||||
This was previously exposed implicitly in `winston < 3.0.0`.
|
||||
|
||||
### Timestamp
|
||||
|
||||
The `timestamp` format adds a timestamp to the info.
|
||||
It accepts the following options:
|
||||
|
||||
* **format**: Either the format as a string accepted by the [fecha](https://github.com/taylorhakes/fecha) module or a function that returns a formatted date. If no format is provided `new Date().toISOString()` will be used.
|
||||
* **alias**: The name of an alias for the timestamp property, that will be added to the `info` object.
|
||||
|
||||
```js
|
||||
const { format } = require('logform');
|
||||
|
||||
const timestampFormat = format.timestamp();
|
||||
|
||||
const info = timestampFormat.transform({
|
||||
level: 'info',
|
||||
message: 'my message'
|
||||
});
|
||||
|
||||
console.log(info);
|
||||
// { level: 'info',
|
||||
// message: 'my message',
|
||||
// timestamp: '2018-10-02T11:47:02.682Z' }
|
||||
```
|
||||
|
||||
It was previously available in `winston < 3.0.0` as `{ timestamp: true }` and `{ timestamp: function:String }`.
|
||||
|
||||
|
||||
### Uncolorize
|
||||
|
||||
The `uncolorize` format strips colors from `info` objects.
|
||||
It accepts the following options:
|
||||
|
||||
* **level**: Disables the uncolorize format for `info.level` if set to `false`.
|
||||
* **message**: Disables the uncolorize format for `info.message` if set to `false`.
|
||||
* **raw**: Disables the uncolorize format for `info[MESSAGE]` if set to `false`.
|
||||
|
||||
This was previously exposed as `{ stripColors: true }` to transports in `winston < 3.0.0`.
|
||||
|
||||
## Tests
|
||||
|
||||
Tests are written with `mocha`, `assume`, and `nyc`. They can be run with `npm`:
|
||||
|
||||
```
|
||||
npm test
|
||||
```
|
||||
|
||||
##### LICENSE: MIT
|
||||
##### AUTHOR: [Charlie Robbins](https://github.com/indexzero)
|
14
node_modules/logform/align.js
generated
vendored
Normal file
14
node_modules/logform/align.js
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
'use strict';
|
||||
|
||||
const format = require('./format');
|
||||
|
||||
/*
|
||||
* function align (info)
|
||||
* Returns a new instance of the align Format which adds a `\t`
|
||||
* delimiter before the message to properly align it in the same place.
|
||||
* It was previously { align: true } in winston < 3.0.0
|
||||
*/
|
||||
module.exports = format(info => {
|
||||
info.message = `\t${info.message}`;
|
||||
return info;
|
||||
});
|
36
node_modules/logform/browser.js
generated
vendored
Normal file
36
node_modules/logform/browser.js
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
* @api public
|
||||
* @property {function} format
|
||||
* Both the construction method and set of exposed
|
||||
* formats.
|
||||
*/
|
||||
const format = exports.format = require('././format');
|
||||
|
||||
/*
|
||||
* @api public
|
||||
* @method {function} levels
|
||||
* Registers the specified levels with logform.
|
||||
*/
|
||||
exports.levels = require('././levels');
|
||||
|
||||
//
|
||||
// Setup all transports as eager-loaded exports
|
||||
// so that they are static for the bundlers.
|
||||
//
|
||||
Object.defineProperty(format, 'align', { value: require('./align') });
|
||||
Object.defineProperty(format, 'cli', { value: require('./cli') });
|
||||
Object.defineProperty(format, 'combine', { value: require('./combine') });
|
||||
Object.defineProperty(format, 'colorize', { value: require('./colorize') });
|
||||
Object.defineProperty(format, 'json', { value: require('./json') });
|
||||
Object.defineProperty(format, 'label', { value: require('./label') });
|
||||
Object.defineProperty(format, 'logstash', { value: require('./logstash') });
|
||||
Object.defineProperty(format, 'metadata', { value: require('./metadata') });
|
||||
Object.defineProperty(format, 'padLevels', { value: require('./pad-levels') });
|
||||
Object.defineProperty(format, 'prettyPrint', { value: require('./pretty-print') });
|
||||
Object.defineProperty(format, 'printf', { value: require('./printf') });
|
||||
Object.defineProperty(format, 'simple', { value: require('./simple') });
|
||||
Object.defineProperty(format, 'splat', { value: require('./splat') });
|
||||
Object.defineProperty(format, 'timestamp', { value: require('./timestamp') });
|
||||
Object.defineProperty(format, 'uncolorize', { value: require('./uncolorize') });
|
52
node_modules/logform/cli.js
generated
vendored
Normal file
52
node_modules/logform/cli.js
generated
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
'use strict';
|
||||
|
||||
const { Colorizer } = require('./colorize');
|
||||
const { Padder } = require('./pad-levels');
|
||||
const { configs, MESSAGE } = require('triple-beam');
|
||||
|
||||
|
||||
/**
|
||||
* Cli format class that handles initial state for a a separate
|
||||
* Colorizer and Padder instance.
|
||||
*/
|
||||
class CliFormat {
|
||||
constructor(opts = {}) {
|
||||
if (!opts.levels) {
|
||||
opts.levels = configs.npm.levels;
|
||||
}
|
||||
|
||||
this.colorizer = new Colorizer(opts);
|
||||
this.padder = new Padder(opts);
|
||||
this.options = opts;
|
||||
}
|
||||
|
||||
/*
|
||||
* function transform (info, opts)
|
||||
* Attempts to both:
|
||||
* 1. Pad the { level }
|
||||
* 2. Colorize the { level, message }
|
||||
* of the given `logform` info object depending on the `opts`.
|
||||
*/
|
||||
transform(info, opts) {
|
||||
this.colorizer.transform(
|
||||
this.padder.transform(info, opts),
|
||||
opts
|
||||
);
|
||||
|
||||
info[MESSAGE] = `${info.level}:${info.message}`;
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* function cli (opts)
|
||||
* Returns a new instance of the CLI format that turns a log
|
||||
* `info` object into the same format previously available
|
||||
* in `winston.cli()` in `winston < 3.0.0`.
|
||||
*/
|
||||
module.exports = opts => new CliFormat(opts);
|
||||
|
||||
//
|
||||
// Attach the CliFormat for registration purposes
|
||||
//
|
||||
module.exports.Format = CliFormat;
|
122
node_modules/logform/colorize.js
generated
vendored
Normal file
122
node_modules/logform/colorize.js
generated
vendored
Normal file
@ -0,0 +1,122 @@
|
||||
'use strict';
|
||||
|
||||
const colors = require('colors/safe');
|
||||
const { LEVEL, MESSAGE } = require('triple-beam');
|
||||
|
||||
//
|
||||
// Fix colors not appearing in non-tty environments
|
||||
//
|
||||
colors.enabled = true;
|
||||
|
||||
/**
|
||||
* @property {RegExp} hasSpace
|
||||
* Simple regex to check for presence of spaces.
|
||||
*/
|
||||
const hasSpace = /\s+/;
|
||||
|
||||
/*
|
||||
* Colorizer format. Wraps the `level` and/or `message` properties
|
||||
* of the `info` objects with ANSI color codes based on a few options.
|
||||
*/
|
||||
class Colorizer {
|
||||
constructor(opts = {}) {
|
||||
if (opts.colors) {
|
||||
this.addColors(opts.colors);
|
||||
}
|
||||
|
||||
this.options = opts;
|
||||
}
|
||||
|
||||
/*
|
||||
* Adds the colors Object to the set of allColors
|
||||
* known by the Colorizer
|
||||
*
|
||||
* @param {Object} colors Set of color mappings to add.
|
||||
*/
|
||||
static addColors(clrs) {
|
||||
const nextColors = Object.keys(clrs).reduce((acc, level) => {
|
||||
acc[level] = hasSpace.test(clrs[level])
|
||||
? clrs[level].split(hasSpace)
|
||||
: clrs[level];
|
||||
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
Colorizer.allColors = Object.assign({}, Colorizer.allColors || {}, nextColors);
|
||||
return Colorizer.allColors;
|
||||
}
|
||||
|
||||
/*
|
||||
* Adds the colors Object to the set of allColors
|
||||
* known by the Colorizer
|
||||
*
|
||||
* @param {Object} colors Set of color mappings to add.
|
||||
*/
|
||||
addColors(clrs) {
|
||||
return Colorizer.addColors(clrs);
|
||||
}
|
||||
|
||||
/*
|
||||
* function colorize (lookup, level, message)
|
||||
* Performs multi-step colorization using colors/safe
|
||||
*/
|
||||
colorize(lookup, level, message) {
|
||||
if (typeof message === 'undefined') {
|
||||
message = level;
|
||||
}
|
||||
|
||||
//
|
||||
// If the color for the level is just a string
|
||||
// then attempt to colorize the message with it.
|
||||
//
|
||||
if (!Array.isArray(Colorizer.allColors[lookup])) {
|
||||
return colors[Colorizer.allColors[lookup]](message);
|
||||
}
|
||||
|
||||
//
|
||||
// If it is an Array then iterate over that Array, applying
|
||||
// the colors function for each item.
|
||||
//
|
||||
for (let i = 0, len = Colorizer.allColors[lookup].length; i < len; i++) {
|
||||
message = colors[Colorizer.allColors[lookup][i]](message);
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
/*
|
||||
* function transform (info, opts)
|
||||
* Attempts to colorize the { level, message } of the given
|
||||
* `logform` info object.
|
||||
*/
|
||||
transform(info, opts) {
|
||||
if (opts.all && typeof info[MESSAGE] === 'string') {
|
||||
info[MESSAGE] = this.colorize(info[LEVEL], info.level, info[MESSAGE]);
|
||||
}
|
||||
|
||||
if (opts.level || opts.all || !opts.message) {
|
||||
info.level = this.colorize(info[LEVEL], info.level);
|
||||
}
|
||||
|
||||
if (opts.all || opts.message) {
|
||||
info.message = this.colorize(info[LEVEL], info.level, info.message);
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* function colorize (info)
|
||||
* Returns a new instance of the colorize Format that applies
|
||||
* level colors to `info` objects. This was previously exposed
|
||||
* as { colorize: true } to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
module.exports = opts => new Colorizer(opts);
|
||||
|
||||
//
|
||||
// Attach the Colorizer for registration purposes
|
||||
//
|
||||
module.exports.Colorizer
|
||||
= module.exports.Format
|
||||
= Colorizer;
|
66
node_modules/logform/combine.js
generated
vendored
Normal file
66
node_modules/logform/combine.js
generated
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
'use strict';
|
||||
|
||||
const format = require('./format');
|
||||
|
||||
/*
|
||||
* function cascade(formats)
|
||||
* Returns a function that invokes the `._format` function in-order
|
||||
* for the specified set of `formats`. In this manner we say that Formats
|
||||
* are "pipe-like", but not a pure pumpify implementation. Since there is no back
|
||||
* pressure we can remove all of the "readable" plumbing in Node streams.
|
||||
*/
|
||||
function cascade(formats) {
|
||||
if (!formats.every(isValidFormat)) {
|
||||
return;
|
||||
}
|
||||
|
||||
return info => {
|
||||
let obj = info;
|
||||
for (let i = 0; i < formats.length; i++) {
|
||||
obj = formats[i].transform(obj, formats[i].options);
|
||||
if (!obj) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return obj;
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* function isValidFormat(format)
|
||||
* If the format does not define a `transform` function throw an error
|
||||
* with more detailed usage.
|
||||
*/
|
||||
function isValidFormat(fmt) {
|
||||
if (typeof fmt.transform !== 'function') {
|
||||
throw new Error([
|
||||
'No transform function found on format. Did you create a format instance?',
|
||||
'const myFormat = format(formatFn);',
|
||||
'const instance = myFormat();'
|
||||
].join('\n'));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* function combine (info)
|
||||
* Returns a new instance of the combine Format which combines the specified
|
||||
* formats into a new format. This is similar to a pipe-chain in transform streams.
|
||||
* We choose to combine the prototypes this way because there is no back pressure in
|
||||
* an in-memory transform chain.
|
||||
*/
|
||||
module.exports = (...formats) => {
|
||||
const combinedFormat = format(cascade(formats));
|
||||
const instance = combinedFormat();
|
||||
instance.Format = combinedFormat.Format;
|
||||
return instance;
|
||||
};
|
||||
|
||||
//
|
||||
// Export the cascade method for use in cli and other
|
||||
// combined formats that should not be assumed to be
|
||||
// singletons.
|
||||
//
|
||||
module.exports.cascade = cascade;
|
15
node_modules/logform/dist/align.js
generated
vendored
Normal file
15
node_modules/logform/dist/align.js
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
'use strict';
|
||||
|
||||
var format = require('./format');
|
||||
/*
|
||||
* function align (info)
|
||||
* Returns a new instance of the align Format which adds a `\t`
|
||||
* delimiter before the message to properly align it in the same place.
|
||||
* It was previously { align: true } in winston < 3.0.0
|
||||
*/
|
||||
|
||||
|
||||
module.exports = format(function (info) {
|
||||
info.message = "\t".concat(info.message);
|
||||
return info;
|
||||
});
|
66
node_modules/logform/dist/browser.js
generated
vendored
Normal file
66
node_modules/logform/dist/browser.js
generated
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
'use strict';
|
||||
/*
|
||||
* @api public
|
||||
* @property {function} format
|
||||
* Both the construction method and set of exposed
|
||||
* formats.
|
||||
*/
|
||||
|
||||
var format = exports.format = require('././format');
|
||||
/*
|
||||
* @api public
|
||||
* @method {function} levels
|
||||
* Registers the specified levels with logform.
|
||||
*/
|
||||
|
||||
|
||||
exports.levels = require('././levels'); //
|
||||
// Setup all transports as eager-loaded exports
|
||||
// so that they are static for the bundlers.
|
||||
//
|
||||
|
||||
Object.defineProperty(format, 'align', {
|
||||
value: require('./align')
|
||||
});
|
||||
Object.defineProperty(format, 'cli', {
|
||||
value: require('./cli')
|
||||
});
|
||||
Object.defineProperty(format, 'combine', {
|
||||
value: require('./combine')
|
||||
});
|
||||
Object.defineProperty(format, 'colorize', {
|
||||
value: require('./colorize')
|
||||
});
|
||||
Object.defineProperty(format, 'json', {
|
||||
value: require('./json')
|
||||
});
|
||||
Object.defineProperty(format, 'label', {
|
||||
value: require('./label')
|
||||
});
|
||||
Object.defineProperty(format, 'logstash', {
|
||||
value: require('./logstash')
|
||||
});
|
||||
Object.defineProperty(format, 'metadata', {
|
||||
value: require('./metadata')
|
||||
});
|
||||
Object.defineProperty(format, 'padLevels', {
|
||||
value: require('./pad-levels')
|
||||
});
|
||||
Object.defineProperty(format, 'prettyPrint', {
|
||||
value: require('./pretty-print')
|
||||
});
|
||||
Object.defineProperty(format, 'printf', {
|
||||
value: require('./printf')
|
||||
});
|
||||
Object.defineProperty(format, 'simple', {
|
||||
value: require('./simple')
|
||||
});
|
||||
Object.defineProperty(format, 'splat', {
|
||||
value: require('./splat')
|
||||
});
|
||||
Object.defineProperty(format, 'timestamp', {
|
||||
value: require('./timestamp')
|
||||
});
|
||||
Object.defineProperty(format, 'uncolorize', {
|
||||
value: require('./uncolorize')
|
||||
});
|
75
node_modules/logform/dist/cli.js
generated
vendored
Normal file
75
node_modules/logform/dist/cli.js
generated
vendored
Normal file
@ -0,0 +1,75 @@
|
||||
'use strict';
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
||||
|
||||
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
||||
|
||||
var _require = require('./colorize'),
|
||||
Colorizer = _require.Colorizer;
|
||||
|
||||
var _require2 = require('./pad-levels'),
|
||||
Padder = _require2.Padder;
|
||||
|
||||
var _require3 = require('triple-beam'),
|
||||
configs = _require3.configs,
|
||||
MESSAGE = _require3.MESSAGE;
|
||||
/**
|
||||
* Cli format class that handles initial state for a a separate
|
||||
* Colorizer and Padder instance.
|
||||
*/
|
||||
|
||||
|
||||
var CliFormat =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
function CliFormat() {
|
||||
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||||
|
||||
_classCallCheck(this, CliFormat);
|
||||
|
||||
if (!opts.levels) {
|
||||
opts.levels = configs.npm.levels;
|
||||
}
|
||||
|
||||
this.colorizer = new Colorizer(opts);
|
||||
this.padder = new Padder(opts);
|
||||
this.options = opts;
|
||||
}
|
||||
/*
|
||||
* function transform (info, opts)
|
||||
* Attempts to both:
|
||||
* 1. Pad the { level }
|
||||
* 2. Colorize the { level, message }
|
||||
* of the given `logform` info object depending on the `opts`.
|
||||
*/
|
||||
|
||||
|
||||
_createClass(CliFormat, [{
|
||||
key: "transform",
|
||||
value: function transform(info, opts) {
|
||||
this.colorizer.transform(this.padder.transform(info, opts), opts);
|
||||
info[MESSAGE] = "".concat(info.level, ":").concat(info.message);
|
||||
return info;
|
||||
}
|
||||
}]);
|
||||
|
||||
return CliFormat;
|
||||
}();
|
||||
/*
|
||||
* function cli (opts)
|
||||
* Returns a new instance of the CLI format that turns a log
|
||||
* `info` object into the same format previously available
|
||||
* in `winston.cli()` in `winston < 3.0.0`.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = function (opts) {
|
||||
return new CliFormat(opts);
|
||||
}; //
|
||||
// Attach the CliFormat for registration purposes
|
||||
//
|
||||
|
||||
|
||||
module.exports.Format = CliFormat;
|
146
node_modules/logform/dist/colorize.js
generated
vendored
Normal file
146
node_modules/logform/dist/colorize.js
generated
vendored
Normal file
@ -0,0 +1,146 @@
|
||||
'use strict';
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
||||
|
||||
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
||||
|
||||
var colors = require('colors/safe');
|
||||
|
||||
var _require = require('triple-beam'),
|
||||
LEVEL = _require.LEVEL,
|
||||
MESSAGE = _require.MESSAGE; //
|
||||
// Fix colors not appearing in non-tty environments
|
||||
//
|
||||
|
||||
|
||||
colors.enabled = true;
|
||||
/**
|
||||
* @property {RegExp} hasSpace
|
||||
* Simple regex to check for presence of spaces.
|
||||
*/
|
||||
|
||||
var hasSpace = /\s+/;
|
||||
/*
|
||||
* Colorizer format. Wraps the `level` and/or `message` properties
|
||||
* of the `info` objects with ANSI color codes based on a few options.
|
||||
*/
|
||||
|
||||
var Colorizer =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
function Colorizer() {
|
||||
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||||
|
||||
_classCallCheck(this, Colorizer);
|
||||
|
||||
if (opts.colors) {
|
||||
this.addColors(opts.colors);
|
||||
}
|
||||
|
||||
this.options = opts;
|
||||
}
|
||||
/*
|
||||
* Adds the colors Object to the set of allColors
|
||||
* known by the Colorizer
|
||||
*
|
||||
* @param {Object} colors Set of color mappings to add.
|
||||
*/
|
||||
|
||||
|
||||
_createClass(Colorizer, [{
|
||||
key: "addColors",
|
||||
|
||||
/*
|
||||
* Adds the colors Object to the set of allColors
|
||||
* known by the Colorizer
|
||||
*
|
||||
* @param {Object} colors Set of color mappings to add.
|
||||
*/
|
||||
value: function addColors(clrs) {
|
||||
return Colorizer.addColors(clrs);
|
||||
}
|
||||
/*
|
||||
* function colorize (lookup, level, message)
|
||||
* Performs multi-step colorization using colors/safe
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "colorize",
|
||||
value: function colorize(lookup, level, message) {
|
||||
if (typeof message === 'undefined') {
|
||||
message = level;
|
||||
} //
|
||||
// If the color for the level is just a string
|
||||
// then attempt to colorize the message with it.
|
||||
//
|
||||
|
||||
|
||||
if (!Array.isArray(Colorizer.allColors[lookup])) {
|
||||
return colors[Colorizer.allColors[lookup]](message);
|
||||
} //
|
||||
// If it is an Array then iterate over that Array, applying
|
||||
// the colors function for each item.
|
||||
//
|
||||
|
||||
|
||||
for (var i = 0, len = Colorizer.allColors[lookup].length; i < len; i++) {
|
||||
message = colors[Colorizer.allColors[lookup][i]](message);
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
/*
|
||||
* function transform (info, opts)
|
||||
* Attempts to colorize the { level, message } of the given
|
||||
* `logform` info object.
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "transform",
|
||||
value: function transform(info, opts) {
|
||||
if (opts.all && typeof info[MESSAGE] === 'string') {
|
||||
info[MESSAGE] = this.colorize(info[LEVEL], info.level, info[MESSAGE]);
|
||||
}
|
||||
|
||||
if (opts.level || opts.all || !opts.message) {
|
||||
info.level = this.colorize(info[LEVEL], info.level);
|
||||
}
|
||||
|
||||
if (opts.all || opts.message) {
|
||||
info.message = this.colorize(info[LEVEL], info.level, info.message);
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
}], [{
|
||||
key: "addColors",
|
||||
value: function addColors(clrs) {
|
||||
var nextColors = Object.keys(clrs).reduce(function (acc, level) {
|
||||
acc[level] = hasSpace.test(clrs[level]) ? clrs[level].split(hasSpace) : clrs[level];
|
||||
return acc;
|
||||
}, {});
|
||||
Colorizer.allColors = Object.assign({}, Colorizer.allColors || {}, nextColors);
|
||||
return Colorizer.allColors;
|
||||
}
|
||||
}]);
|
||||
|
||||
return Colorizer;
|
||||
}();
|
||||
/*
|
||||
* function colorize (info)
|
||||
* Returns a new instance of the colorize Format that applies
|
||||
* level colors to `info` objects. This was previously exposed
|
||||
* as { colorize: true } to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = function (opts) {
|
||||
return new Colorizer(opts);
|
||||
}; //
|
||||
// Attach the Colorizer for registration purposes
|
||||
//
|
||||
|
||||
|
||||
module.exports.Colorizer = module.exports.Format = Colorizer;
|
71
node_modules/logform/dist/combine.js
generated
vendored
Normal file
71
node_modules/logform/dist/combine.js
generated
vendored
Normal file
@ -0,0 +1,71 @@
|
||||
'use strict';
|
||||
|
||||
var format = require('./format');
|
||||
/*
|
||||
* function cascade(formats)
|
||||
* Returns a function that invokes the `._format` function in-order
|
||||
* for the specified set of `formats`. In this manner we say that Formats
|
||||
* are "pipe-like", but not a pure pumpify implementation. Since there is no back
|
||||
* pressure we can remove all of the "readable" plumbing in Node streams.
|
||||
*/
|
||||
|
||||
|
||||
function cascade(formats) {
|
||||
if (!formats.every(isValidFormat)) {
|
||||
return;
|
||||
}
|
||||
|
||||
return function (info) {
|
||||
var obj = info;
|
||||
|
||||
for (var i = 0; i < formats.length; i++) {
|
||||
obj = formats[i].transform(obj, formats[i].options);
|
||||
|
||||
if (!obj) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return obj;
|
||||
};
|
||||
}
|
||||
/*
|
||||
* function isValidFormat(format)
|
||||
* If the format does not define a `transform` function throw an error
|
||||
* with more detailed usage.
|
||||
*/
|
||||
|
||||
|
||||
function isValidFormat(fmt) {
|
||||
if (typeof fmt.transform !== 'function') {
|
||||
throw new Error(['No transform function found on format. Did you create a format instance?', 'const myFormat = format(formatFn);', 'const instance = myFormat();'].join('\n'));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
/*
|
||||
* function combine (info)
|
||||
* Returns a new instance of the combine Format which combines the specified
|
||||
* formats into a new format. This is similar to a pipe-chain in transform streams.
|
||||
* We choose to combine the prototypes this way because there is no back pressure in
|
||||
* an in-memory transform chain.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = function () {
|
||||
for (var _len = arguments.length, formats = new Array(_len), _key = 0; _key < _len; _key++) {
|
||||
formats[_key] = arguments[_key];
|
||||
}
|
||||
|
||||
var combinedFormat = format(cascade(formats));
|
||||
var instance = combinedFormat();
|
||||
instance.Format = combinedFormat.Format;
|
||||
return instance;
|
||||
}; //
|
||||
// Export the cascade method for use in cli and other
|
||||
// combined formats that should not be assumed to be
|
||||
// singletons.
|
||||
//
|
||||
|
||||
|
||||
module.exports.cascade = cascade;
|
43
node_modules/logform/dist/errors.js
generated
vendored
Normal file
43
node_modules/logform/dist/errors.js
generated
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
/* eslint no-undefined: 0 */
|
||||
'use strict';
|
||||
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
var format = require('./format');
|
||||
|
||||
var _require = require('triple-beam'),
|
||||
LEVEL = _require.LEVEL,
|
||||
MESSAGE = _require.MESSAGE;
|
||||
/*
|
||||
* function errors (info)
|
||||
* If the `message` property of the `info` object is an instance of `Error`,
|
||||
* replace the `Error` object its own `message` property.
|
||||
*
|
||||
* Optionally, the Error's `stack` property can also be appended to the `info` object.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = format(function (einfo, _ref) {
|
||||
var stack = _ref.stack;
|
||||
|
||||
if (einfo instanceof Error) {
|
||||
var _Object$assign;
|
||||
|
||||
var info = Object.assign({}, einfo, (_Object$assign = {
|
||||
level: einfo.level
|
||||
}, _defineProperty(_Object$assign, LEVEL, einfo[LEVEL] || einfo.level), _defineProperty(_Object$assign, "message", einfo.message), _defineProperty(_Object$assign, MESSAGE, einfo[MESSAGE] || einfo.message), _Object$assign));
|
||||
if (stack) info.stack = einfo.stack;
|
||||
return info;
|
||||
}
|
||||
|
||||
if (!(einfo.message instanceof Error)) return einfo; // Assign all enumerable properties and the
|
||||
// message property from the error provided.
|
||||
|
||||
Object.assign(einfo, einfo.message);
|
||||
var err = einfo.message;
|
||||
einfo.message = err.message;
|
||||
einfo[MESSAGE] = err.message; // Assign the stack if requested.
|
||||
|
||||
if (stack) einfo.stack = err.stack;
|
||||
return einfo;
|
||||
});
|
85
node_modules/logform/dist/format.js
generated
vendored
Normal file
85
node_modules/logform/dist/format.js
generated
vendored
Normal file
@ -0,0 +1,85 @@
|
||||
'use strict';
|
||||
/*
|
||||
* Displays a helpful message and the source of
|
||||
* the format when it is invalid.
|
||||
*/
|
||||
|
||||
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
||||
|
||||
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
||||
|
||||
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
||||
|
||||
function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
|
||||
|
||||
function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
|
||||
|
||||
function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
|
||||
|
||||
function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
|
||||
|
||||
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
||||
|
||||
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
||||
|
||||
var InvalidFormatError =
|
||||
/*#__PURE__*/
|
||||
function (_Error) {
|
||||
_inherits(InvalidFormatError, _Error);
|
||||
|
||||
function InvalidFormatError(formatFn) {
|
||||
var _this;
|
||||
|
||||
_classCallCheck(this, InvalidFormatError);
|
||||
|
||||
_this = _possibleConstructorReturn(this, _getPrototypeOf(InvalidFormatError).call(this, "Format functions must be synchronous taking a two arguments: (info, opts)\nFound: ".concat(formatFn.toString().split('\n')[0], "\n")));
|
||||
Error.captureStackTrace(_assertThisInitialized(_assertThisInitialized(_this)), InvalidFormatError);
|
||||
return _this;
|
||||
}
|
||||
|
||||
return InvalidFormatError;
|
||||
}(_wrapNativeSuper(Error));
|
||||
/*
|
||||
* function format (formatFn)
|
||||
* Returns a create function for the `formatFn`.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = function (formatFn) {
|
||||
if (formatFn.length > 2) {
|
||||
throw new InvalidFormatError(formatFn);
|
||||
}
|
||||
/*
|
||||
* function Format (options)
|
||||
* Base prototype which calls a `_format`
|
||||
* function and pushes the result.
|
||||
*/
|
||||
|
||||
|
||||
function Format() {
|
||||
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
Format.prototype.transform = formatFn; //
|
||||
// Create a function which returns new instances of
|
||||
// FormatWrap for simple syntax like:
|
||||
//
|
||||
// require('winston').formats.json();
|
||||
//
|
||||
|
||||
function createFormatWrap(opts) {
|
||||
return new Format(opts);
|
||||
} //
|
||||
// Expose the FormatWrap through the create function
|
||||
// for testability.
|
||||
//
|
||||
|
||||
|
||||
createFormatWrap.Format = Format;
|
||||
return createFormatWrap;
|
||||
};
|
54
node_modules/logform/dist/index.js
generated
vendored
Normal file
54
node_modules/logform/dist/index.js
generated
vendored
Normal file
@ -0,0 +1,54 @@
|
||||
'use strict';
|
||||
/*
|
||||
* @api public
|
||||
* @property {function} format
|
||||
* Both the construction method and set of exposed
|
||||
* formats.
|
||||
*/
|
||||
|
||||
var format = exports.format = require('./format');
|
||||
/*
|
||||
* @api public
|
||||
* @method {function} levels
|
||||
* Registers the specified levels with logform.
|
||||
*/
|
||||
|
||||
|
||||
exports.levels = require('./levels');
|
||||
/*
|
||||
* @api private
|
||||
* method {function} exposeFormat
|
||||
* Exposes a sub-format on the main format object
|
||||
* as a lazy-loaded getter.
|
||||
*/
|
||||
|
||||
function exposeFormat(name, path) {
|
||||
path = path || name;
|
||||
Object.defineProperty(format, name, {
|
||||
get: function get() {
|
||||
return require("./".concat(path, ".js"));
|
||||
},
|
||||
configurable: true
|
||||
});
|
||||
} //
|
||||
// Setup all transports as lazy-loaded getters.
|
||||
//
|
||||
|
||||
|
||||
exposeFormat('align');
|
||||
exposeFormat('errors');
|
||||
exposeFormat('cli');
|
||||
exposeFormat('combine');
|
||||
exposeFormat('colorize');
|
||||
exposeFormat('json');
|
||||
exposeFormat('label');
|
||||
exposeFormat('logstash');
|
||||
exposeFormat('metadata');
|
||||
exposeFormat('ms');
|
||||
exposeFormat('padLevels', 'pad-levels');
|
||||
exposeFormat('prettyPrint', 'pretty-print');
|
||||
exposeFormat('printf');
|
||||
exposeFormat('simple');
|
||||
exposeFormat('splat');
|
||||
exposeFormat('timestamp');
|
||||
exposeFormat('uncolorize');
|
30
node_modules/logform/dist/json.js
generated
vendored
Normal file
30
node_modules/logform/dist/json.js
generated
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
'use strict';
|
||||
|
||||
var format = require('./format');
|
||||
|
||||
var _require = require('triple-beam'),
|
||||
MESSAGE = _require.MESSAGE;
|
||||
|
||||
var jsonStringify = require('fast-safe-stringify');
|
||||
/*
|
||||
* function replacer (key, value)
|
||||
* Handles proper stringification of Buffer output.
|
||||
*/
|
||||
|
||||
|
||||
function replacer(key, value) {
|
||||
return value instanceof Buffer ? value.toString('base64') : value;
|
||||
}
|
||||
/*
|
||||
* function json (info)
|
||||
* Returns a new instance of the JSON format that turns a log `info`
|
||||
* object into pure JSON. This was previously exposed as { json: true }
|
||||
* to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = format(function (info) {
|
||||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
info[MESSAGE] = jsonStringify(info, opts.replacer || replacer, opts.space);
|
||||
return info;
|
||||
});
|
20
node_modules/logform/dist/label.js
generated
vendored
Normal file
20
node_modules/logform/dist/label.js
generated
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
'use strict';
|
||||
|
||||
var format = require('./format');
|
||||
/*
|
||||
* function label (info)
|
||||
* Returns a new instance of the label Format which adds the specified
|
||||
* `opts.label` before the message. This was previously exposed as
|
||||
* { label: 'my label' } to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = format(function (info, opts) {
|
||||
if (opts.message) {
|
||||
info.message = "[".concat(opts.label, "] ").concat(info.message);
|
||||
return info;
|
||||
}
|
||||
|
||||
info.label = opts.label;
|
||||
return info;
|
||||
});
|
14
node_modules/logform/dist/levels.js
generated
vendored
Normal file
14
node_modules/logform/dist/levels.js
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
'use strict';
|
||||
|
||||
var _require = require('./colorize'),
|
||||
Colorizer = _require.Colorizer;
|
||||
/*
|
||||
* Simple method to register colors with a simpler require
|
||||
* path within the module.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = function (config) {
|
||||
Colorizer.addColors(config.colors || config);
|
||||
return config;
|
||||
};
|
34
node_modules/logform/dist/logstash.js
generated
vendored
Normal file
34
node_modules/logform/dist/logstash.js
generated
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
'use strict';
|
||||
|
||||
var format = require('./format');
|
||||
|
||||
var _require = require('triple-beam'),
|
||||
MESSAGE = _require.MESSAGE;
|
||||
|
||||
var jsonStringify = require('fast-safe-stringify');
|
||||
/*
|
||||
* function logstash (info)
|
||||
* Returns a new instance of the LogStash Format that turns a
|
||||
* log `info` object into pure JSON with the appropriate logstash
|
||||
* options. This was previously exposed as { logstash: true }
|
||||
* to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = format(function (info) {
|
||||
var logstash = {};
|
||||
|
||||
if (info.message) {
|
||||
logstash['@message'] = info.message;
|
||||
delete info.message;
|
||||
}
|
||||
|
||||
if (info.timestamp) {
|
||||
logstash['@timestamp'] = info.timestamp;
|
||||
delete info.timestamp;
|
||||
}
|
||||
|
||||
logstash['@fields'] = info;
|
||||
info[MESSAGE] = jsonStringify(logstash);
|
||||
return info;
|
||||
});
|
64
node_modules/logform/dist/metadata.js
generated
vendored
Normal file
64
node_modules/logform/dist/metadata.js
generated
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
'use strict';
|
||||
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
var format = require('./format');
|
||||
|
||||
function fillExcept(info, fillExceptKeys, metadataKey) {
|
||||
var savedKeys = fillExceptKeys.reduce(function (acc, key) {
|
||||
acc[key] = info[key];
|
||||
delete info[key];
|
||||
return acc;
|
||||
}, {});
|
||||
var metadata = Object.keys(info).reduce(function (acc, key) {
|
||||
acc[key] = info[key];
|
||||
delete info[key];
|
||||
return acc;
|
||||
}, {});
|
||||
Object.assign(info, savedKeys, _defineProperty({}, metadataKey, metadata));
|
||||
return info;
|
||||
}
|
||||
|
||||
function fillWith(info, fillWithKeys, metadataKey) {
|
||||
info[metadataKey] = fillWithKeys.reduce(function (acc, key) {
|
||||
acc[key] = info[key];
|
||||
delete info[key];
|
||||
return acc;
|
||||
}, {});
|
||||
return info;
|
||||
}
|
||||
/**
|
||||
* Adds in a "metadata" object to collect extraneous data, similar to the metadata
|
||||
* object in winston 2.x.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = format(function (info) {
|
||||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
var metadataKey = 'metadata';
|
||||
|
||||
if (opts.key) {
|
||||
metadataKey = opts.key;
|
||||
}
|
||||
|
||||
var fillExceptKeys = [];
|
||||
|
||||
if (!opts.fillExcept && !opts.fillWith) {
|
||||
fillExceptKeys.push('level');
|
||||
fillExceptKeys.push('message');
|
||||
}
|
||||
|
||||
if (opts.fillExcept) {
|
||||
fillExceptKeys = opts.fillExcept;
|
||||
}
|
||||
|
||||
if (fillExceptKeys.length > 0) {
|
||||
return fillExcept(info, fillExceptKeys, metadataKey);
|
||||
}
|
||||
|
||||
if (opts.fillWith) {
|
||||
return fillWith(info, opts.fillWith, metadataKey);
|
||||
}
|
||||
|
||||
return info;
|
||||
});
|
21
node_modules/logform/dist/ms.js
generated
vendored
Normal file
21
node_modules/logform/dist/ms.js
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
'use strict';
|
||||
|
||||
var _this = void 0;
|
||||
|
||||
var format = require('./format');
|
||||
|
||||
var ms = require('ms');
|
||||
/*
|
||||
* function ms (info)
|
||||
* Returns an `info` with a `ms` property. The `ms` property holds the Value
|
||||
* of the time difference between two calls in milliseconds.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = format(function (info) {
|
||||
var curr = +new Date();
|
||||
_this.diff = curr - (_this.prevTime || curr);
|
||||
_this.prevTime = curr;
|
||||
info.ms = "+".concat(ms(_this.diff));
|
||||
return info;
|
||||
});
|
125
node_modules/logform/dist/pad-levels.js
generated
vendored
Normal file
125
node_modules/logform/dist/pad-levels.js
generated
vendored
Normal file
@ -0,0 +1,125 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
'use strict';
|
||||
|
||||
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
|
||||
|
||||
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
|
||||
|
||||
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
|
||||
|
||||
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
||||
|
||||
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
||||
|
||||
var _require = require('triple-beam'),
|
||||
configs = _require.configs,
|
||||
LEVEL = _require.LEVEL,
|
||||
MESSAGE = _require.MESSAGE;
|
||||
|
||||
var Padder =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
function Padder() {
|
||||
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
||||
levels: configs.npm.levels
|
||||
};
|
||||
|
||||
_classCallCheck(this, Padder);
|
||||
|
||||
this.paddings = Padder.paddingForLevels(opts.levels, opts.filler);
|
||||
this.options = opts;
|
||||
}
|
||||
/**
|
||||
* Returns the maximum length of keys in the specified `levels` Object.
|
||||
* @param {Object} levels Set of all levels to calculate longest level against.
|
||||
* @returns {Number} Maximum length of the longest level string.
|
||||
*/
|
||||
|
||||
|
||||
_createClass(Padder, [{
|
||||
key: "transform",
|
||||
|
||||
/**
|
||||
* Prepends the padding onto the `message` based on the `LEVEL` of
|
||||
* the `info`. This is based on the behavior of `winston@2` which also
|
||||
* prepended the level onto the message.
|
||||
*
|
||||
* See: https://github.com/winstonjs/winston/blob/2.x/lib/winston/logger.js#L198-L201
|
||||
*
|
||||
* @param {Info} info Logform info object
|
||||
* @param {Object} opts Options passed along to this instance.
|
||||
* @returns {Info} Modified logform info object.
|
||||
*/
|
||||
value: function transform(info, opts) {
|
||||
info.message = "".concat(this.paddings[info[LEVEL]]).concat(info.message);
|
||||
|
||||
if (info[MESSAGE]) {
|
||||
info[MESSAGE] = "".concat(this.paddings[info[LEVEL]]).concat(info[MESSAGE]);
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
}], [{
|
||||
key: "getLongestLevel",
|
||||
value: function getLongestLevel(levels) {
|
||||
var lvls = Object.keys(levels).map(function (level) {
|
||||
return level.length;
|
||||
});
|
||||
return Math.max.apply(Math, _toConsumableArray(lvls));
|
||||
}
|
||||
/**
|
||||
* Returns the padding for the specified `level` assuming that the
|
||||
* maximum length of all levels it's associated with is `maxLength`.
|
||||
* @param {String} level Level to calculate padding for.
|
||||
* @param {String} filler Repeatable text to use for padding.
|
||||
* @param {Number} maxLength Length of the longest level
|
||||
* @returns {String} Padding string for the `level`
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "paddingForLevel",
|
||||
value: function paddingForLevel(level, filler, maxLength) {
|
||||
var targetLen = maxLength + 1 - level.length;
|
||||
var rep = Math.floor(targetLen / filler.length);
|
||||
var padding = "".concat(filler).concat(filler.repeat(rep));
|
||||
return padding.slice(0, targetLen);
|
||||
}
|
||||
/**
|
||||
* Returns an object with the string paddings for the given `levels`
|
||||
* using the specified `filler`.
|
||||
* @param {Object} levels Set of all levels to calculate padding for.
|
||||
* @param {String} filler Repeatable text to use for padding.
|
||||
* @returns {Object} Mapping of level to desired padding.
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "paddingForLevels",
|
||||
value: function paddingForLevels(levels) {
|
||||
var filler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ' ';
|
||||
var maxLength = Padder.getLongestLevel(levels);
|
||||
return Object.keys(levels).reduce(function (acc, level) {
|
||||
acc[level] = Padder.paddingForLevel(level, filler, maxLength);
|
||||
return acc;
|
||||
}, {});
|
||||
}
|
||||
}]);
|
||||
|
||||
return Padder;
|
||||
}();
|
||||
/*
|
||||
* function padLevels (info)
|
||||
* Returns a new instance of the padLevels Format which pads
|
||||
* levels to be the same length. This was previously exposed as
|
||||
* { padLevels: true } to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = function (opts) {
|
||||
return new Padder(opts);
|
||||
};
|
||||
|
||||
module.exports.Padder = module.exports.Format = Padder;
|
34
node_modules/logform/dist/pretty-print.js
generated
vendored
Normal file
34
node_modules/logform/dist/pretty-print.js
generated
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
'use strict';
|
||||
|
||||
var inspect = require('util').inspect;
|
||||
|
||||
var format = require('./format');
|
||||
|
||||
var _require = require('triple-beam'),
|
||||
LEVEL = _require.LEVEL,
|
||||
MESSAGE = _require.MESSAGE,
|
||||
SPLAT = _require.SPLAT;
|
||||
/*
|
||||
* function prettyPrint (info)
|
||||
* Returns a new instance of the prettyPrint Format that "prettyPrint"
|
||||
* serializes `info` objects. This was previously exposed as
|
||||
* { prettyPrint: true } to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = format(function (info) {
|
||||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
//
|
||||
// info[{LEVEL, MESSAGE, SPLAT}] are enumerable here. Since they
|
||||
// are internal, we remove them before util.inspect so they
|
||||
// are not printed.
|
||||
//
|
||||
var stripped = Object.assign({}, info); // Remark (indexzero): update this technique in April 2019
|
||||
// when node@6 is EOL
|
||||
|
||||
delete stripped[LEVEL];
|
||||
delete stripped[MESSAGE];
|
||||
delete stripped[SPLAT];
|
||||
info[MESSAGE] = inspect(stripped, false, opts.depth || null, opts.colorize);
|
||||
return info;
|
||||
});
|
43
node_modules/logform/dist/printf.js
generated
vendored
Normal file
43
node_modules/logform/dist/printf.js
generated
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
'use strict';
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
||||
|
||||
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
||||
|
||||
var _require = require('triple-beam'),
|
||||
MESSAGE = _require.MESSAGE;
|
||||
|
||||
var Printf =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
function Printf(templateFn) {
|
||||
_classCallCheck(this, Printf);
|
||||
|
||||
this.template = templateFn;
|
||||
}
|
||||
|
||||
_createClass(Printf, [{
|
||||
key: "transform",
|
||||
value: function transform(info) {
|
||||
info[MESSAGE] = this.template(info);
|
||||
return info;
|
||||
}
|
||||
}]);
|
||||
|
||||
return Printf;
|
||||
}();
|
||||
/*
|
||||
* function printf (templateFn)
|
||||
* Returns a new instance of the printf Format that creates an
|
||||
* intermediate prototype to store the template string-based formatter
|
||||
* function.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = function (opts) {
|
||||
return new Printf(opts);
|
||||
};
|
||||
|
||||
module.exports.Printf = module.exports.Format = Printf;
|
37
node_modules/logform/dist/simple.js
generated
vendored
Normal file
37
node_modules/logform/dist/simple.js
generated
vendored
Normal file
@ -0,0 +1,37 @@
|
||||
/* eslint no-undefined: 0 */
|
||||
'use strict';
|
||||
|
||||
var format = require('./format');
|
||||
|
||||
var _require = require('triple-beam'),
|
||||
MESSAGE = _require.MESSAGE;
|
||||
|
||||
var jsonStringify = require('fast-safe-stringify');
|
||||
/*
|
||||
* function simple (info)
|
||||
* Returns a new instance of the simple format TransformStream
|
||||
* which writes a simple representation of logs.
|
||||
*
|
||||
* const { level, message, splat, ...rest } = info;
|
||||
*
|
||||
* ${level}: ${message} if rest is empty
|
||||
* ${level}: ${message} ${JSON.stringify(rest)} otherwise
|
||||
*/
|
||||
|
||||
|
||||
module.exports = format(function (info) {
|
||||
var stringifiedRest = jsonStringify(Object.assign({}, info, {
|
||||
level: undefined,
|
||||
message: undefined,
|
||||
splat: undefined
|
||||
}));
|
||||
var padding = info.padding && info.padding[info.level] || '';
|
||||
|
||||
if (stringifiedRest !== '{}') {
|
||||
info[MESSAGE] = "".concat(info.level, ":").concat(padding, " ").concat(info.message, " ").concat(stringifiedRest);
|
||||
} else {
|
||||
info[MESSAGE] = "".concat(info.level, ":").concat(padding, " ").concat(info.message);
|
||||
}
|
||||
|
||||
return info;
|
||||
});
|
157
node_modules/logform/dist/splat.js
generated
vendored
Normal file
157
node_modules/logform/dist/splat.js
generated
vendored
Normal file
@ -0,0 +1,157 @@
|
||||
'use strict';
|
||||
|
||||
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
|
||||
|
||||
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
|
||||
|
||||
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
|
||||
|
||||
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
||||
|
||||
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
||||
|
||||
var util = require('util');
|
||||
|
||||
var _require = require('triple-beam'),
|
||||
SPLAT = _require.SPLAT;
|
||||
/**
|
||||
* Captures the number of format (i.e. %s strings) in a given string.
|
||||
* Based on `util.format`, see Node.js source:
|
||||
* https://github.com/nodejs/node/blob/b1c8f15c5f169e021f7c46eb7b219de95fe97603/lib/util.js#L201-L230
|
||||
* @type {RegExp}
|
||||
*/
|
||||
|
||||
|
||||
var formatRegExp = /%[scdjifoO%]/g;
|
||||
/**
|
||||
* Captures the number of escaped % signs in a format string (i.e. %s strings).
|
||||
* @type {RegExp}
|
||||
*/
|
||||
|
||||
var escapedPercent = /%%/g;
|
||||
|
||||
var Splatter =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
function Splatter(opts) {
|
||||
_classCallCheck(this, Splatter);
|
||||
|
||||
this.options = opts;
|
||||
}
|
||||
/**
|
||||
* Check to see if tokens <= splat.length, assign { splat, meta } into the
|
||||
* `info` accordingly, and write to this instance.
|
||||
*
|
||||
* @param {Info} info Logform info message.
|
||||
* @param {String[]} tokens Set of string interpolation tokens.
|
||||
* @returns {Info} Modified info message
|
||||
* @private
|
||||
*/
|
||||
|
||||
|
||||
_createClass(Splatter, [{
|
||||
key: "_splat",
|
||||
value: function _splat(info, tokens) {
|
||||
var msg = info.message;
|
||||
var splat = info[SPLAT] || info.splat || [];
|
||||
var percents = msg.match(escapedPercent);
|
||||
var escapes = percents && percents.length || 0; // The expected splat is the number of tokens minus the number of escapes
|
||||
// e.g.
|
||||
// - { expectedSplat: 3 } '%d %s %j'
|
||||
// - { expectedSplat: 5 } '[%s] %d%% %d%% %s %j'
|
||||
//
|
||||
// Any "meta" will be arugments in addition to the expected splat size
|
||||
// regardless of type. e.g.
|
||||
//
|
||||
// logger.log('info', '%d%% %s %j', 100, 'wow', { such: 'js' }, { thisIsMeta: true });
|
||||
// would result in splat of four (4), but only three (3) are expected. Therefore:
|
||||
//
|
||||
// extraSplat = 3 - 4 = -1
|
||||
// metas = [100, 'wow', { such: 'js' }, { thisIsMeta: true }].splice(-1, -1 * -1);
|
||||
// splat = [100, 'wow', { such: 'js' }]
|
||||
|
||||
var expectedSplat = tokens.length - escapes;
|
||||
var extraSplat = expectedSplat - splat.length;
|
||||
var metas = extraSplat < 0 ? splat.splice(extraSplat, -1 * extraSplat) : []; // Now that { splat } has been separated from any potential { meta }. we
|
||||
// can assign this to the `info` object and write it to our format stream.
|
||||
// If the additional metas are **NOT** objects or **LACK** enumerable properties
|
||||
// you are going to have a bad time.
|
||||
|
||||
var metalen = metas.length;
|
||||
|
||||
if (metalen) {
|
||||
for (var i = 0; i < metalen; i++) {
|
||||
Object.assign(info, metas[i]);
|
||||
}
|
||||
}
|
||||
|
||||
info.message = util.format.apply(util, [msg].concat(_toConsumableArray(splat)));
|
||||
return info;
|
||||
}
|
||||
/**
|
||||
* Transforms the `info` message by using `util.format` to complete
|
||||
* any `info.message` provided it has string interpolation tokens.
|
||||
* If no tokens exist then `info` is immutable.
|
||||
*
|
||||
* @param {Info} info Logform info message.
|
||||
* @param {Object} opts Options for this instance.
|
||||
* @returns {Info} Modified info message
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "transform",
|
||||
value: function transform(info) {
|
||||
var msg = info.message;
|
||||
var splat = info[SPLAT] || info.splat; // No need to process anything if splat is undefined
|
||||
|
||||
if (!splat || !splat.length) {
|
||||
return info;
|
||||
} // Extract tokens, if none available default to empty array to
|
||||
// ensure consistancy in expected results
|
||||
|
||||
|
||||
var tokens = msg && msg.match && msg.match(formatRegExp); // This condition will take care of inputs with info[SPLAT]
|
||||
// but no tokens present
|
||||
|
||||
if (!tokens && (splat || splat.length)) {
|
||||
var metas = splat.length > 1 ? splat.splice(0) : splat; // Now that { splat } has been separated from any potential { meta }. we
|
||||
// can assign this to the `info` object and write it to our format stream.
|
||||
// If the additional metas are **NOT** objects or **LACK** enumerable properties
|
||||
// you are going to have a bad time.
|
||||
|
||||
var metalen = metas.length;
|
||||
|
||||
if (metalen) {
|
||||
for (var i = 0; i < metalen; i++) {
|
||||
Object.assign(info, metas[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
if (tokens) {
|
||||
return this._splat(info, tokens);
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
}]);
|
||||
|
||||
return Splatter;
|
||||
}();
|
||||
/*
|
||||
* function splat (info)
|
||||
* Returns a new instance of the splat format TransformStream
|
||||
* which performs string interpolation from `info` objects. This was
|
||||
* previously exposed implicitly in `winston < 3.0.0`.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = function (opts) {
|
||||
return new Splatter(opts);
|
||||
};
|
32
node_modules/logform/dist/timestamp.js
generated
vendored
Normal file
32
node_modules/logform/dist/timestamp.js
generated
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
'use strict';
|
||||
|
||||
var fecha = require('fecha');
|
||||
|
||||
var format = require('./format');
|
||||
/*
|
||||
* function timestamp (info)
|
||||
* Returns a new instance of the timestamp Format which adds a timestamp
|
||||
* to the info. It was previously available in winston < 3.0.0 as:
|
||||
*
|
||||
* - { timestamp: true } // `new Date.toISOString()`
|
||||
* - { timestamp: function:String } // Value returned by `timestamp()`
|
||||
*/
|
||||
|
||||
|
||||
module.exports = format(function (info) {
|
||||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
|
||||
if (opts.format) {
|
||||
info.timestamp = typeof opts.format === 'function' ? opts.format() : fecha.format(new Date(), opts.format);
|
||||
}
|
||||
|
||||
if (!info.timestamp) {
|
||||
info.timestamp = new Date().toISOString();
|
||||
}
|
||||
|
||||
if (opts.alias) {
|
||||
info[opts.alias] = info.timestamp;
|
||||
}
|
||||
|
||||
return info;
|
||||
});
|
31
node_modules/logform/dist/uncolorize.js
generated
vendored
Normal file
31
node_modules/logform/dist/uncolorize.js
generated
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
'use strict';
|
||||
|
||||
var colors = require('colors/safe');
|
||||
|
||||
var format = require('./format');
|
||||
|
||||
var _require = require('triple-beam'),
|
||||
MESSAGE = _require.MESSAGE;
|
||||
/*
|
||||
* function uncolorize (info)
|
||||
* Returns a new instance of the uncolorize Format that strips colors
|
||||
* from `info` objects. This was previously exposed as { stripColors: true }
|
||||
* to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
|
||||
|
||||
module.exports = format(function (info, opts) {
|
||||
if (opts.level !== false) {
|
||||
info.level = colors.strip(info.level);
|
||||
}
|
||||
|
||||
if (opts.message !== false) {
|
||||
info.message = colors.strip(info.message);
|
||||
}
|
||||
|
||||
if (opts.raw !== false && info[MESSAGE]) {
|
||||
info[MESSAGE] = colors.strip(info[MESSAGE]);
|
||||
}
|
||||
|
||||
return info;
|
||||
});
|
39
node_modules/logform/errors.js
generated
vendored
Normal file
39
node_modules/logform/errors.js
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
/* eslint no-undefined: 0 */
|
||||
'use strict';
|
||||
|
||||
const format = require('./format');
|
||||
const { LEVEL, MESSAGE } = require('triple-beam');
|
||||
|
||||
/*
|
||||
* function errors (info)
|
||||
* If the `message` property of the `info` object is an instance of `Error`,
|
||||
* replace the `Error` object its own `message` property.
|
||||
*
|
||||
* Optionally, the Error's `stack` property can also be appended to the `info` object.
|
||||
*/
|
||||
module.exports = format((einfo, { stack }) => {
|
||||
if (einfo instanceof Error) {
|
||||
const info = Object.assign({}, einfo, {
|
||||
level: einfo.level,
|
||||
[LEVEL]: einfo[LEVEL] || einfo.level,
|
||||
message: einfo.message,
|
||||
[MESSAGE]: einfo[MESSAGE] || einfo.message
|
||||
});
|
||||
|
||||
if (stack) info.stack = einfo.stack;
|
||||
return info;
|
||||
}
|
||||
|
||||
if (!(einfo.message instanceof Error)) return einfo;
|
||||
|
||||
// Assign all enumerable properties and the
|
||||
// message property from the error provided.
|
||||
Object.assign(einfo, einfo.message);
|
||||
const err = einfo.message;
|
||||
einfo.message = err.message;
|
||||
einfo[MESSAGE] = err.message;
|
||||
|
||||
// Assign the stack if requested.
|
||||
if (stack) einfo.stack = err.stack;
|
||||
return einfo;
|
||||
});
|
14
node_modules/logform/examples/combine.js
generated
vendored
Normal file
14
node_modules/logform/examples/combine.js
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
const { format } = require('../');
|
||||
const { combine, timestamp, label } = format;
|
||||
|
||||
const labelTimestamp = combine(
|
||||
label({ label: 'right meow!' }),
|
||||
timestamp()
|
||||
);
|
||||
|
||||
const info = labelTimestamp.transform({
|
||||
level: 'info',
|
||||
message: 'What time is the testing at?'
|
||||
});
|
||||
|
||||
console.dir(info);
|
30
node_modules/logform/examples/filter.js
generated
vendored
Normal file
30
node_modules/logform/examples/filter.js
generated
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
|
||||
const { format } = require('../');
|
||||
const { combine, timestamp, label } = format;
|
||||
|
||||
const ignorePrivate = format((info, opts) => {
|
||||
if (info.private) { return false; }
|
||||
return info;
|
||||
})();
|
||||
|
||||
console.dir(ignorePrivate.transform({
|
||||
level: 'error',
|
||||
message: 'Public error to share'
|
||||
}));
|
||||
|
||||
console.dir(ignorePrivate.transform({
|
||||
level: 'error',
|
||||
private: true,
|
||||
message: 'This is super secret - hide it.'
|
||||
}));
|
||||
|
||||
const willNeverThrow = format.combine(
|
||||
format(info => { return false; })(), // Ignores everything
|
||||
format(info => { throw new Error('Never reached'); })()
|
||||
);
|
||||
|
||||
console.dir(willNeverThrow.transform({
|
||||
level: 'info',
|
||||
message: 'wow such testing'
|
||||
}));
|
6
node_modules/logform/examples/invalid.js
generated
vendored
Normal file
6
node_modules/logform/examples/invalid.js
generated
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
const { format } = require('../');
|
||||
|
||||
const invalid = format(function invalid(just, too, many, args) {
|
||||
return just;
|
||||
});
|
78
node_modules/logform/examples/metadata.js
generated
vendored
Normal file
78
node_modules/logform/examples/metadata.js
generated
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
const { format } = require('../');
|
||||
const { combine, json, metadata, timestamp } = format;
|
||||
|
||||
// Default Functionality (no options passed)
|
||||
const defaultFormatter = combine(
|
||||
timestamp(),
|
||||
metadata(),
|
||||
json()
|
||||
);
|
||||
|
||||
const defaultMessage = defaultFormatter.transform({
|
||||
level: 'info',
|
||||
message: 'This should be a message.',
|
||||
application: 'Microsoft Office',
|
||||
store: 'Big Box Store',
|
||||
purchaseAmount: '9.99'
|
||||
});
|
||||
|
||||
console.dir(defaultMessage);
|
||||
|
||||
|
||||
// Fill all keys into metadata except those provided
|
||||
const formattedLogger = combine(
|
||||
timestamp(),
|
||||
metadata({ fillExcept: ['message', 'level', 'timestamp'] }),
|
||||
json()
|
||||
);
|
||||
|
||||
const fillExceptMessage = formattedLogger.transform({
|
||||
level: 'info',
|
||||
message: 'This should have attached metadata',
|
||||
category: 'movies',
|
||||
subCategory: 'action'
|
||||
});
|
||||
|
||||
console.dir(fillExceptMessage);
|
||||
|
||||
|
||||
// Fill only the keys provided into the object, and also give it a different key
|
||||
const customMetadataLogger = combine(
|
||||
timestamp(),
|
||||
metadata({ fillWith: ['publisher', 'author', 'book'], key: 'bookInfo' }),
|
||||
json()
|
||||
);
|
||||
|
||||
const fillWithMessage = customMetadataLogger.transform({
|
||||
level: 'debug',
|
||||
message: 'This message should be outside of the bookInfo object',
|
||||
publisher: 'Lorem Press',
|
||||
author: 'Albert Einstein',
|
||||
book: '4D Chess for Dummies',
|
||||
label: 'myCustomLabel'
|
||||
});
|
||||
|
||||
console.dir(fillWithMessage);
|
||||
|
||||
// Demonstrates Metadata 'chaining' to combine multiple datapoints.
|
||||
const chainedMetadata = combine(
|
||||
timestamp(),
|
||||
metadata({ fillWith: ['publisher', 'author', 'book'], key: 'bookInfo' }),
|
||||
metadata({ fillWith: ['purchasePrice', 'purchaseDate', 'transactionId'], key: 'transactionInfo' }),
|
||||
metadata({ fillExcept: ['level', 'message', 'label', 'timestamp'] }),
|
||||
json()
|
||||
);
|
||||
|
||||
const chainedMessage = chainedMetadata.transform({
|
||||
level: 'debug',
|
||||
message: 'This message should be outside of the bookInfo object',
|
||||
publisher: 'Lorem Press',
|
||||
author: 'Albert Einstein',
|
||||
book: '4D Chess for Dummies',
|
||||
label: 'myCustomLabel',
|
||||
purchasePrice: '9.99',
|
||||
purchaseDate: '2.10.2018',
|
||||
transactionId: '123ABC'
|
||||
});
|
||||
|
||||
console.dir(chainedMessage);
|
39
node_modules/logform/examples/padLevels.js
generated
vendored
Normal file
39
node_modules/logform/examples/padLevels.js
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
const { format } = require('../');
|
||||
const { combine, padLevels, simple } = format;
|
||||
|
||||
const { MESSAGE } = require('triple-beam');
|
||||
|
||||
const paddedFormat = combine(
|
||||
padLevels({
|
||||
// Uncomment for a custom filler for the padding, defaults to ' '.
|
||||
// filler: 'foo',
|
||||
// Levels has to be defined, same as `winston.createLoggers({ levels })`.
|
||||
levels: {
|
||||
error: 0,
|
||||
warn: 1,
|
||||
info: 2,
|
||||
http: 3,
|
||||
verbose: 4,
|
||||
debug: 5,
|
||||
silly: 6
|
||||
}
|
||||
}),
|
||||
simple()
|
||||
);
|
||||
|
||||
const info = paddedFormat.transform({
|
||||
level: 'info',
|
||||
message: 'This is an info level message.'
|
||||
});
|
||||
const error = paddedFormat.transform({
|
||||
level: 'error',
|
||||
message: 'This is an error level message.'
|
||||
});
|
||||
const verbose = paddedFormat.transform({
|
||||
level: 'verbose',
|
||||
message: 'This is a verbose level message.'
|
||||
});
|
||||
|
||||
console.dir(info[MESSAGE]);
|
||||
console.dir(error[MESSAGE]);
|
||||
console.dir(verbose[MESSAGE]);
|
25
node_modules/logform/examples/volume.js
generated
vendored
Normal file
25
node_modules/logform/examples/volume.js
generated
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
const { format } = require('../');
|
||||
|
||||
const volume = format((info, opts) => {
|
||||
if (opts.yell) {
|
||||
info.message = info.message.toUpperCase();
|
||||
} else if (opts.whisper) {
|
||||
info.message = info.message.toLowerCase();
|
||||
}
|
||||
|
||||
return info;
|
||||
});
|
||||
|
||||
// `volume` is now a function that returns instances of the format.
|
||||
const scream = volume({ yell: true });
|
||||
console.dir(scream.transform({
|
||||
level: 'info',
|
||||
message: `sorry for making you YELL in your head!`
|
||||
}, scream.options));
|
||||
|
||||
// `volume` can be used multiple times to create different formats.
|
||||
const whisper = volume({ whisper: true });
|
||||
console.dir(whisper.transform({
|
||||
level: 'info',
|
||||
message: `WHY ARE THEY MAKING US YELL SO MUCH!`
|
||||
}, whisper.options));
|
52
node_modules/logform/format.js
generated
vendored
Normal file
52
node_modules/logform/format.js
generated
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
* Displays a helpful message and the source of
|
||||
* the format when it is invalid.
|
||||
*/
|
||||
class InvalidFormatError extends Error {
|
||||
constructor(formatFn) {
|
||||
super(`Format functions must be synchronous taking a two arguments: (info, opts)
|
||||
Found: ${formatFn.toString().split('\n')[0]}\n`);
|
||||
|
||||
Error.captureStackTrace(this, InvalidFormatError);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* function format (formatFn)
|
||||
* Returns a create function for the `formatFn`.
|
||||
*/
|
||||
module.exports = formatFn => {
|
||||
if (formatFn.length > 2) {
|
||||
throw new InvalidFormatError(formatFn);
|
||||
}
|
||||
|
||||
/*
|
||||
* function Format (options)
|
||||
* Base prototype which calls a `_format`
|
||||
* function and pushes the result.
|
||||
*/
|
||||
function Format(options = {}) {
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
Format.prototype.transform = formatFn;
|
||||
|
||||
//
|
||||
// Create a function which returns new instances of
|
||||
// FormatWrap for simple syntax like:
|
||||
//
|
||||
// require('winston').formats.json();
|
||||
//
|
||||
function createFormatWrap(opts) {
|
||||
return new Format(opts);
|
||||
}
|
||||
|
||||
//
|
||||
// Expose the FormatWrap through the create function
|
||||
// for testability.
|
||||
//
|
||||
createFormatWrap.Format = Format;
|
||||
return createFormatWrap;
|
||||
};
|
161
node_modules/logform/index.d.ts
generated
vendored
Normal file
161
node_modules/logform/index.d.ts
generated
vendored
Normal file
@ -0,0 +1,161 @@
|
||||
// Type definitions for logform 1.2
|
||||
// Project: https://github.com/winstonjs/logform
|
||||
// Definitions by: DABH <https://github.com/DABH>
|
||||
// Definitions: https://github.com/winstonjs/logform
|
||||
// TypeScript Version: 2.2
|
||||
|
||||
export interface TransformableInfo {
|
||||
level: string;
|
||||
message: string;
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
export type TransformFunction = (info: TransformableInfo, opts?: any) => TransformableInfo | boolean;
|
||||
export type Colors = { [key: string]: string | string[] }; // tslint:disable-line interface-over-type-literal
|
||||
export type FormatWrap = (opts?: any) => Format;
|
||||
|
||||
export class Format {
|
||||
constructor(opts?: object);
|
||||
|
||||
options?: object;
|
||||
transform: TransformFunction;
|
||||
}
|
||||
|
||||
export class Colorizer extends Format {
|
||||
constructor(opts?: object);
|
||||
|
||||
createColorize: (opts?: object) => Colorizer;
|
||||
addColors: (colors: Colors) => Colors;
|
||||
colorize: (level: string, message: string) => string;
|
||||
}
|
||||
|
||||
export function format(transform: TransformFunction): FormatWrap;
|
||||
|
||||
export function levels(config: object): object;
|
||||
|
||||
export namespace format {
|
||||
function align(): Format;
|
||||
function cli(opts?: CliOptions): Format;
|
||||
function colorize(opts?: ColorizeOptions): Colorizer;
|
||||
function combine(...formats: Format[]): Format;
|
||||
function errors(opts?: object): Format;
|
||||
function json(opts?: JsonOptions): Format;
|
||||
function label(opts?: LabelOptions): Format;
|
||||
function logstash(): Format;
|
||||
function metadata(opts?: MetadataOptions): Format;
|
||||
function ms(): Format;
|
||||
function padLevels(opts?: PadLevelsOptions): Format;
|
||||
function prettyPrint(opts?: PrettyPrintOptions): Format;
|
||||
function printf(templateFunction: (info: TransformableInfo) => string): Format;
|
||||
function simple(): Format;
|
||||
function splat(): Format;
|
||||
function timestamp(opts?: TimestampOptions): Format;
|
||||
function uncolorize(opts?: UncolorizeOptions): Format;
|
||||
}
|
||||
|
||||
export interface CliOptions extends ColorizeOptions, PadLevelsOptions {}
|
||||
|
||||
export interface ColorizeOptions {
|
||||
/**
|
||||
* If set to `true` the color will be applied to the `level`.
|
||||
*/
|
||||
level?: boolean;
|
||||
/**
|
||||
* If set to `true` the color will be applied to the `message` and `level`.
|
||||
*/
|
||||
all?: boolean;
|
||||
/**
|
||||
* If set to `true` the color will be applied to the `message`.
|
||||
*/
|
||||
message?: boolean;
|
||||
/**
|
||||
* An object containing the colors for the log levels. For example: `{ info: 'blue', error: 'red' }`.
|
||||
*/
|
||||
colors?: Record<string, string>;
|
||||
}
|
||||
|
||||
export interface JsonOptions {
|
||||
/**
|
||||
* A function that influences how the `info` is stringified.
|
||||
*/
|
||||
replacer?: (this: any, key: string, value: any) => any;
|
||||
/**
|
||||
* The number of white space used to format the json.
|
||||
*/
|
||||
space?: number;
|
||||
}
|
||||
|
||||
export interface LabelOptions {
|
||||
/**
|
||||
* A label to be added before the message.
|
||||
*/
|
||||
label?: string;
|
||||
/**
|
||||
* If set to `true` the `label` will be added to `info.message`. If set to `false` the `label`
|
||||
* will be added as `info.label`.
|
||||
*/
|
||||
message?: boolean;
|
||||
}
|
||||
|
||||
export interface MetadataOptions {
|
||||
/**
|
||||
* The name of the key used for the metadata object. Defaults to `metadata`.
|
||||
*/
|
||||
key?: string;
|
||||
/**
|
||||
* An array of keys that should not be added to the metadata object.
|
||||
*/
|
||||
fillExcept?: string[];
|
||||
/**
|
||||
* An array of keys that will be added to the metadata object.
|
||||
*/
|
||||
fillWith?: string[];
|
||||
}
|
||||
|
||||
export interface PadLevelsOptions {
|
||||
/**
|
||||
* Log levels. Defaults to `configs.npm.levels` from [triple-beam](https://github.com/winstonjs/triple-beam)
|
||||
* module.
|
||||
*/
|
||||
levels?: Record<string, number>;
|
||||
}
|
||||
|
||||
export interface PrettyPrintOptions {
|
||||
/**
|
||||
* A `number` that specifies the maximum depth of the `info` object being stringified by
|
||||
* `util.inspect`. Defaults to `2`.
|
||||
*/
|
||||
depth?: number;
|
||||
/**
|
||||
* Colorizes the message if set to `true`. Defaults to `false`.
|
||||
*/
|
||||
colorize?: boolean;
|
||||
}
|
||||
|
||||
export interface TimestampOptions {
|
||||
/**
|
||||
* Either the format as a string accepted by the [fecha](https://github.com/taylorhakes/fecha)
|
||||
* module or a function that returns a formatted date. If no format is provided `new
|
||||
* Date().toISOString()` will be used.
|
||||
*/
|
||||
format?: string;
|
||||
/**
|
||||
* The name of an alias for the timestamp property, that will be added to the `info` object.
|
||||
*/
|
||||
alias?: string;
|
||||
}
|
||||
|
||||
export interface UncolorizeOptions {
|
||||
/**
|
||||
* Disables the uncolorize format for `info.level` if set to `false`.
|
||||
*/
|
||||
level?: boolean;
|
||||
/**
|
||||
* Disables the uncolorize format for `info.message` if set to `false`.
|
||||
*/
|
||||
message?: boolean;
|
||||
/**
|
||||
* Disables the uncolorize format for `info[MESSAGE]` if set to `false`.
|
||||
*/
|
||||
raw?: boolean;
|
||||
}
|
53
node_modules/logform/index.js
generated
vendored
Normal file
53
node_modules/logform/index.js
generated
vendored
Normal file
@ -0,0 +1,53 @@
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
* @api public
|
||||
* @property {function} format
|
||||
* Both the construction method and set of exposed
|
||||
* formats.
|
||||
*/
|
||||
const format = exports.format = require('./format');
|
||||
|
||||
/*
|
||||
* @api public
|
||||
* @method {function} levels
|
||||
* Registers the specified levels with logform.
|
||||
*/
|
||||
exports.levels = require('./levels');
|
||||
|
||||
/*
|
||||
* @api private
|
||||
* method {function} exposeFormat
|
||||
* Exposes a sub-format on the main format object
|
||||
* as a lazy-loaded getter.
|
||||
*/
|
||||
function exposeFormat(name, path) {
|
||||
path = path || name;
|
||||
Object.defineProperty(format, name, {
|
||||
get() {
|
||||
return require(`./${path}.js`);
|
||||
},
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
|
||||
//
|
||||
// Setup all transports as lazy-loaded getters.
|
||||
//
|
||||
exposeFormat('align');
|
||||
exposeFormat('errors');
|
||||
exposeFormat('cli');
|
||||
exposeFormat('combine');
|
||||
exposeFormat('colorize');
|
||||
exposeFormat('json');
|
||||
exposeFormat('label');
|
||||
exposeFormat('logstash');
|
||||
exposeFormat('metadata');
|
||||
exposeFormat('ms');
|
||||
exposeFormat('padLevels', 'pad-levels');
|
||||
exposeFormat('prettyPrint', 'pretty-print');
|
||||
exposeFormat('printf');
|
||||
exposeFormat('simple');
|
||||
exposeFormat('splat');
|
||||
exposeFormat('timestamp');
|
||||
exposeFormat('uncolorize');
|
26
node_modules/logform/json.js
generated
vendored
Normal file
26
node_modules/logform/json.js
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
'use strict';
|
||||
|
||||
const format = require('./format');
|
||||
const { MESSAGE } = require('triple-beam');
|
||||
const jsonStringify = require('fast-safe-stringify');
|
||||
|
||||
/*
|
||||
* function replacer (key, value)
|
||||
* Handles proper stringification of Buffer output.
|
||||
*/
|
||||
function replacer(key, value) {
|
||||
return value instanceof Buffer
|
||||
? value.toString('base64')
|
||||
: value;
|
||||
}
|
||||
|
||||
/*
|
||||
* function json (info)
|
||||
* Returns a new instance of the JSON format that turns a log `info`
|
||||
* object into pure JSON. This was previously exposed as { json: true }
|
||||
* to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
module.exports = format((info, opts = {}) => {
|
||||
info[MESSAGE] = jsonStringify(info, opts.replacer || replacer, opts.space);
|
||||
return info;
|
||||
});
|
19
node_modules/logform/label.js
generated
vendored
Normal file
19
node_modules/logform/label.js
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
'use strict';
|
||||
|
||||
const format = require('./format');
|
||||
|
||||
/*
|
||||
* function label (info)
|
||||
* Returns a new instance of the label Format which adds the specified
|
||||
* `opts.label` before the message. This was previously exposed as
|
||||
* { label: 'my label' } to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
module.exports = format((info, opts) => {
|
||||
if (opts.message) {
|
||||
info.message = `[${opts.label}] ${info.message}`;
|
||||
return info;
|
||||
}
|
||||
|
||||
info.label = opts.label;
|
||||
return info;
|
||||
});
|
12
node_modules/logform/levels.js
generated
vendored
Normal file
12
node_modules/logform/levels.js
generated
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
'use strict';
|
||||
|
||||
const { Colorizer } = require('./colorize');
|
||||
|
||||
/*
|
||||
* Simple method to register colors with a simpler require
|
||||
* path within the module.
|
||||
*/
|
||||
module.exports = config => {
|
||||
Colorizer.addColors(config.colors || config);
|
||||
return config;
|
||||
};
|
29
node_modules/logform/logstash.js
generated
vendored
Normal file
29
node_modules/logform/logstash.js
generated
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
'use strict';
|
||||
|
||||
const format = require('./format');
|
||||
const { MESSAGE } = require('triple-beam');
|
||||
const jsonStringify = require('fast-safe-stringify');
|
||||
|
||||
/*
|
||||
* function logstash (info)
|
||||
* Returns a new instance of the LogStash Format that turns a
|
||||
* log `info` object into pure JSON with the appropriate logstash
|
||||
* options. This was previously exposed as { logstash: true }
|
||||
* to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
module.exports = format(info => {
|
||||
const logstash = {};
|
||||
if (info.message) {
|
||||
logstash['@message'] = info.message;
|
||||
delete info.message;
|
||||
}
|
||||
|
||||
if (info.timestamp) {
|
||||
logstash['@timestamp'] = info.timestamp;
|
||||
delete info.timestamp;
|
||||
}
|
||||
|
||||
logstash['@fields'] = info;
|
||||
info[MESSAGE] = jsonStringify(logstash);
|
||||
return info;
|
||||
});
|
61
node_modules/logform/metadata.js
generated
vendored
Normal file
61
node_modules/logform/metadata.js
generated
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
'use strict';
|
||||
|
||||
const format = require('./format');
|
||||
|
||||
function fillExcept(info, fillExceptKeys, metadataKey) {
|
||||
const savedKeys = fillExceptKeys.reduce((acc, key) => {
|
||||
acc[key] = info[key];
|
||||
delete info[key];
|
||||
return acc;
|
||||
}, {});
|
||||
const metadata = Object.keys(info).reduce((acc, key) => {
|
||||
acc[key] = info[key];
|
||||
delete info[key];
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
Object.assign(info, savedKeys, {
|
||||
[metadataKey]: metadata
|
||||
});
|
||||
return info;
|
||||
}
|
||||
|
||||
function fillWith(info, fillWithKeys, metadataKey) {
|
||||
info[metadataKey] = fillWithKeys.reduce((acc, key) => {
|
||||
acc[key] = info[key];
|
||||
delete info[key];
|
||||
return acc;
|
||||
}, {});
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds in a "metadata" object to collect extraneous data, similar to the metadata
|
||||
* object in winston 2.x.
|
||||
*/
|
||||
module.exports = format((info, opts = {}) => {
|
||||
let metadataKey = 'metadata';
|
||||
if (opts.key) {
|
||||
metadataKey = opts.key;
|
||||
}
|
||||
|
||||
let fillExceptKeys = [];
|
||||
if (!opts.fillExcept && !opts.fillWith) {
|
||||
fillExceptKeys.push('level');
|
||||
fillExceptKeys.push('message');
|
||||
}
|
||||
|
||||
if (opts.fillExcept) {
|
||||
fillExceptKeys = opts.fillExcept;
|
||||
}
|
||||
|
||||
if (fillExceptKeys.length > 0) {
|
||||
return fillExcept(info, fillExceptKeys, metadataKey);
|
||||
}
|
||||
|
||||
if (opts.fillWith) {
|
||||
return fillWith(info, opts.fillWith, metadataKey);
|
||||
}
|
||||
|
||||
return info;
|
||||
});
|
18
node_modules/logform/ms.js
generated
vendored
Normal file
18
node_modules/logform/ms.js
generated
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
const format = require('./format');
|
||||
const ms = require('ms');
|
||||
|
||||
/*
|
||||
* function ms (info)
|
||||
* Returns an `info` with a `ms` property. The `ms` property holds the Value
|
||||
* of the time difference between two calls in milliseconds.
|
||||
*/
|
||||
module.exports = format(info => {
|
||||
const curr = +new Date();
|
||||
this.diff = curr - (this.prevTime || curr);
|
||||
this.prevTime = curr;
|
||||
info.ms = `+${ms(this.diff)}`;
|
||||
|
||||
return info;
|
||||
});
|
162
node_modules/logform/node_modules/ms/index.js
generated
vendored
Normal file
162
node_modules/logform/node_modules/ms/index.js
generated
vendored
Normal file
@ -0,0 +1,162 @@
|
||||
/**
|
||||
* Helpers.
|
||||
*/
|
||||
|
||||
var s = 1000;
|
||||
var m = s * 60;
|
||||
var h = m * 60;
|
||||
var d = h * 24;
|
||||
var w = d * 7;
|
||||
var y = d * 365.25;
|
||||
|
||||
/**
|
||||
* Parse or format the given `val`.
|
||||
*
|
||||
* Options:
|
||||
*
|
||||
* - `long` verbose formatting [false]
|
||||
*
|
||||
* @param {String|Number} val
|
||||
* @param {Object} [options]
|
||||
* @throws {Error} throw an error if val is not a non-empty string or a number
|
||||
* @return {String|Number}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
module.exports = function(val, options) {
|
||||
options = options || {};
|
||||
var type = typeof val;
|
||||
if (type === 'string' && val.length > 0) {
|
||||
return parse(val);
|
||||
} else if (type === 'number' && isNaN(val) === false) {
|
||||
return options.long ? fmtLong(val) : fmtShort(val);
|
||||
}
|
||||
throw new Error(
|
||||
'val is not a non-empty string or a valid number. val=' +
|
||||
JSON.stringify(val)
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Parse the given `str` and return milliseconds.
|
||||
*
|
||||
* @param {String} str
|
||||
* @return {Number}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function parse(str) {
|
||||
str = String(str);
|
||||
if (str.length > 100) {
|
||||
return;
|
||||
}
|
||||
var match = /^((?:\d+)?\-?\d?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
|
||||
str
|
||||
);
|
||||
if (!match) {
|
||||
return;
|
||||
}
|
||||
var n = parseFloat(match[1]);
|
||||
var type = (match[2] || 'ms').toLowerCase();
|
||||
switch (type) {
|
||||
case 'years':
|
||||
case 'year':
|
||||
case 'yrs':
|
||||
case 'yr':
|
||||
case 'y':
|
||||
return n * y;
|
||||
case 'weeks':
|
||||
case 'week':
|
||||
case 'w':
|
||||
return n * w;
|
||||
case 'days':
|
||||
case 'day':
|
||||
case 'd':
|
||||
return n * d;
|
||||
case 'hours':
|
||||
case 'hour':
|
||||
case 'hrs':
|
||||
case 'hr':
|
||||
case 'h':
|
||||
return n * h;
|
||||
case 'minutes':
|
||||
case 'minute':
|
||||
case 'mins':
|
||||
case 'min':
|
||||
case 'm':
|
||||
return n * m;
|
||||
case 'seconds':
|
||||
case 'second':
|
||||
case 'secs':
|
||||
case 'sec':
|
||||
case 's':
|
||||
return n * s;
|
||||
case 'milliseconds':
|
||||
case 'millisecond':
|
||||
case 'msecs':
|
||||
case 'msec':
|
||||
case 'ms':
|
||||
return n;
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Short format for `ms`.
|
||||
*
|
||||
* @param {Number} ms
|
||||
* @return {String}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function fmtShort(ms) {
|
||||
var msAbs = Math.abs(ms);
|
||||
if (msAbs >= d) {
|
||||
return Math.round(ms / d) + 'd';
|
||||
}
|
||||
if (msAbs >= h) {
|
||||
return Math.round(ms / h) + 'h';
|
||||
}
|
||||
if (msAbs >= m) {
|
||||
return Math.round(ms / m) + 'm';
|
||||
}
|
||||
if (msAbs >= s) {
|
||||
return Math.round(ms / s) + 's';
|
||||
}
|
||||
return ms + 'ms';
|
||||
}
|
||||
|
||||
/**
|
||||
* Long format for `ms`.
|
||||
*
|
||||
* @param {Number} ms
|
||||
* @return {String}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function fmtLong(ms) {
|
||||
var msAbs = Math.abs(ms);
|
||||
if (msAbs >= d) {
|
||||
return plural(ms, msAbs, d, 'day');
|
||||
}
|
||||
if (msAbs >= h) {
|
||||
return plural(ms, msAbs, h, 'hour');
|
||||
}
|
||||
if (msAbs >= m) {
|
||||
return plural(ms, msAbs, m, 'minute');
|
||||
}
|
||||
if (msAbs >= s) {
|
||||
return plural(ms, msAbs, s, 'second');
|
||||
}
|
||||
return ms + ' ms';
|
||||
}
|
||||
|
||||
/**
|
||||
* Pluralization helper.
|
||||
*/
|
||||
|
||||
function plural(ms, msAbs, n, name) {
|
||||
var isPlural = msAbs >= n * 1.5;
|
||||
return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
|
||||
}
|
21
node_modules/logform/node_modules/ms/license.md
generated
vendored
Normal file
21
node_modules/logform/node_modules/ms/license.md
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Zeit, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
69
node_modules/logform/node_modules/ms/package.json
generated
vendored
Normal file
69
node_modules/logform/node_modules/ms/package.json
generated
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
{
|
||||
"_from": "ms@^2.1.1",
|
||||
"_id": "ms@2.1.1",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
|
||||
"_location": "/logform/ms",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "ms@^2.1.1",
|
||||
"name": "ms",
|
||||
"escapedName": "ms",
|
||||
"rawSpec": "^2.1.1",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^2.1.1"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/logform"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
|
||||
"_shasum": "30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a",
|
||||
"_spec": "ms@^2.1.1",
|
||||
"_where": "/Users/josh.burman/Projects/braid/node_modules/logform",
|
||||
"bugs": {
|
||||
"url": "https://github.com/zeit/ms/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "Tiny millisecond conversion utility",
|
||||
"devDependencies": {
|
||||
"eslint": "4.12.1",
|
||||
"expect.js": "0.3.1",
|
||||
"husky": "0.14.3",
|
||||
"lint-staged": "5.0.0",
|
||||
"mocha": "4.0.1"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": "eslint:recommended",
|
||||
"env": {
|
||||
"node": true,
|
||||
"es6": true
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"homepage": "https://github.com/zeit/ms#readme",
|
||||
"license": "MIT",
|
||||
"lint-staged": {
|
||||
"*.js": [
|
||||
"npm run lint",
|
||||
"prettier --single-quote --write",
|
||||
"git add"
|
||||
]
|
||||
},
|
||||
"main": "./index",
|
||||
"name": "ms",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/zeit/ms.git"
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "eslint lib/* bin/*",
|
||||
"precommit": "lint-staged",
|
||||
"test": "mocha tests.js"
|
||||
},
|
||||
"version": "2.1.1"
|
||||
}
|
60
node_modules/logform/node_modules/ms/readme.md
generated
vendored
Normal file
60
node_modules/logform/node_modules/ms/readme.md
generated
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
# ms
|
||||
|
||||
[](https://travis-ci.org/zeit/ms)
|
||||
[](https://zeit.chat/)
|
||||
|
||||
Use this package to easily convert various time formats to milliseconds.
|
||||
|
||||
## Examples
|
||||
|
||||
```js
|
||||
ms('2 days') // 172800000
|
||||
ms('1d') // 86400000
|
||||
ms('10h') // 36000000
|
||||
ms('2.5 hrs') // 9000000
|
||||
ms('2h') // 7200000
|
||||
ms('1m') // 60000
|
||||
ms('5s') // 5000
|
||||
ms('1y') // 31557600000
|
||||
ms('100') // 100
|
||||
ms('-3 days') // -259200000
|
||||
ms('-1h') // -3600000
|
||||
ms('-200') // -200
|
||||
```
|
||||
|
||||
### Convert from Milliseconds
|
||||
|
||||
```js
|
||||
ms(60000) // "1m"
|
||||
ms(2 * 60000) // "2m"
|
||||
ms(-3 * 60000) // "-3m"
|
||||
ms(ms('10 hours')) // "10h"
|
||||
```
|
||||
|
||||
### Time Format Written-Out
|
||||
|
||||
```js
|
||||
ms(60000, { long: true }) // "1 minute"
|
||||
ms(2 * 60000, { long: true }) // "2 minutes"
|
||||
ms(-3 * 60000, { long: true }) // "-3 minutes"
|
||||
ms(ms('10 hours'), { long: true }) // "10 hours"
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
- Works both in [Node.js](https://nodejs.org) and in the browser
|
||||
- If a number is supplied to `ms`, a string with a unit is returned
|
||||
- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`)
|
||||
- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned
|
||||
|
||||
## Related Packages
|
||||
|
||||
- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time.
|
||||
|
||||
## Caught a Bug?
|
||||
|
||||
1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device
|
||||
2. Link the package to the global module directory: `npm link`
|
||||
3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms!
|
||||
|
||||
As always, you can run the tests using: `npm test`
|
76
node_modules/logform/package.json
generated
vendored
Normal file
76
node_modules/logform/package.json
generated
vendored
Normal file
@ -0,0 +1,76 @@
|
||||
{
|
||||
"_from": "logform@^2.1.1",
|
||||
"_id": "logform@2.1.2",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==",
|
||||
"_location": "/logform",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "logform@^2.1.1",
|
||||
"name": "logform",
|
||||
"escapedName": "logform",
|
||||
"rawSpec": "^2.1.1",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^2.1.1"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/winston"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz",
|
||||
"_shasum": "957155ebeb67a13164069825ce67ddb5bb2dd360",
|
||||
"_spec": "logform@^2.1.1",
|
||||
"_where": "/Users/josh.burman/Projects/braid/node_modules/winston",
|
||||
"author": {
|
||||
"name": "Charlie Robbins",
|
||||
"email": "charlie.robbins@gmail.com"
|
||||
},
|
||||
"browser": "dist/browser.js",
|
||||
"bugs": {
|
||||
"url": "https://github.com/winstonjs/logform/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"colors": "^1.2.1",
|
||||
"fast-safe-stringify": "^2.0.4",
|
||||
"fecha": "^2.3.3",
|
||||
"ms": "^2.1.1",
|
||||
"triple-beam": "^1.3.0"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "An mutable object-based log format designed for chaining & objectMode streams.",
|
||||
"devDependencies": {
|
||||
"@babel/cli": "^7.2.3",
|
||||
"@babel/core": "^7.2.2",
|
||||
"@babel/preset-env": "^7.3.1",
|
||||
"assume": "^2.0.1",
|
||||
"eslint-config-populist": "^4.1.0",
|
||||
"mocha": "^5.1.1",
|
||||
"nyc": "^11.7.1",
|
||||
"rimraf": "^2.6.2"
|
||||
},
|
||||
"homepage": "https://github.com/winstonjs/logform#readme",
|
||||
"keywords": [
|
||||
"winston",
|
||||
"logging",
|
||||
"format",
|
||||
"winstonjs"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "logform",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/winstonjs/logform.git"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "rimraf dist && babel *.js -d ./dist",
|
||||
"lint": "populist *.js test/*.js examples/*.js",
|
||||
"prepublishOnly": "npm run build",
|
||||
"pretest": "npm run lint && npm run build",
|
||||
"test": "nyc mocha test/*.test.js"
|
||||
},
|
||||
"types": "./index.d.ts",
|
||||
"version": "2.1.2"
|
||||
}
|
83
node_modules/logform/pad-levels.js
generated
vendored
Normal file
83
node_modules/logform/pad-levels.js
generated
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
'use strict';
|
||||
|
||||
const { configs, LEVEL, MESSAGE } = require('triple-beam');
|
||||
|
||||
class Padder {
|
||||
constructor(opts = { levels: configs.npm.levels }) {
|
||||
this.paddings = Padder.paddingForLevels(opts.levels, opts.filler);
|
||||
this.options = opts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum length of keys in the specified `levels` Object.
|
||||
* @param {Object} levels Set of all levels to calculate longest level against.
|
||||
* @returns {Number} Maximum length of the longest level string.
|
||||
*/
|
||||
static getLongestLevel(levels) {
|
||||
const lvls = Object.keys(levels).map(level => level.length);
|
||||
return Math.max(...lvls);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the padding for the specified `level` assuming that the
|
||||
* maximum length of all levels it's associated with is `maxLength`.
|
||||
* @param {String} level Level to calculate padding for.
|
||||
* @param {String} filler Repeatable text to use for padding.
|
||||
* @param {Number} maxLength Length of the longest level
|
||||
* @returns {String} Padding string for the `level`
|
||||
*/
|
||||
static paddingForLevel(level, filler, maxLength) {
|
||||
const targetLen = maxLength + 1 - level.length;
|
||||
const rep = Math.floor(targetLen / filler.length);
|
||||
const padding = `${filler}${filler.repeat(rep)}`;
|
||||
return padding.slice(0, targetLen);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an object with the string paddings for the given `levels`
|
||||
* using the specified `filler`.
|
||||
* @param {Object} levels Set of all levels to calculate padding for.
|
||||
* @param {String} filler Repeatable text to use for padding.
|
||||
* @returns {Object} Mapping of level to desired padding.
|
||||
*/
|
||||
static paddingForLevels(levels, filler = ' ') {
|
||||
const maxLength = Padder.getLongestLevel(levels);
|
||||
return Object.keys(levels).reduce((acc, level) => {
|
||||
acc[level] = Padder.paddingForLevel(level, filler, maxLength);
|
||||
return acc;
|
||||
}, {});
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepends the padding onto the `message` based on the `LEVEL` of
|
||||
* the `info`. This is based on the behavior of `winston@2` which also
|
||||
* prepended the level onto the message.
|
||||
*
|
||||
* See: https://github.com/winstonjs/winston/blob/2.x/lib/winston/logger.js#L198-L201
|
||||
*
|
||||
* @param {Info} info Logform info object
|
||||
* @param {Object} opts Options passed along to this instance.
|
||||
* @returns {Info} Modified logform info object.
|
||||
*/
|
||||
transform(info, opts) {
|
||||
info.message = `${this.paddings[info[LEVEL]]}${info.message}`;
|
||||
if (info[MESSAGE]) {
|
||||
info[MESSAGE] = `${this.paddings[info[LEVEL]]}${info[MESSAGE]}`;
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* function padLevels (info)
|
||||
* Returns a new instance of the padLevels Format which pads
|
||||
* levels to be the same length. This was previously exposed as
|
||||
* { padLevels: true } to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
module.exports = opts => new Padder(opts);
|
||||
|
||||
module.exports.Padder
|
||||
= module.exports.Format
|
||||
= Padder;
|
29
node_modules/logform/pretty-print.js
generated
vendored
Normal file
29
node_modules/logform/pretty-print.js
generated
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
'use strict';
|
||||
|
||||
const inspect = require('util').inspect;
|
||||
const format = require('./format');
|
||||
const { LEVEL, MESSAGE, SPLAT } = require('triple-beam');
|
||||
|
||||
/*
|
||||
* function prettyPrint (info)
|
||||
* Returns a new instance of the prettyPrint Format that "prettyPrint"
|
||||
* serializes `info` objects. This was previously exposed as
|
||||
* { prettyPrint: true } to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
module.exports = format((info, opts = {}) => {
|
||||
//
|
||||
// info[{LEVEL, MESSAGE, SPLAT}] are enumerable here. Since they
|
||||
// are internal, we remove them before util.inspect so they
|
||||
// are not printed.
|
||||
//
|
||||
const stripped = Object.assign({}, info);
|
||||
|
||||
// Remark (indexzero): update this technique in April 2019
|
||||
// when node@6 is EOL
|
||||
delete stripped[LEVEL];
|
||||
delete stripped[MESSAGE];
|
||||
delete stripped[SPLAT];
|
||||
|
||||
info[MESSAGE] = inspect(stripped, false, opts.depth || null, opts.colorize);
|
||||
return info;
|
||||
});
|
26
node_modules/logform/printf.js
generated
vendored
Normal file
26
node_modules/logform/printf.js
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
'use strict';
|
||||
|
||||
const { MESSAGE } = require('triple-beam');
|
||||
|
||||
class Printf {
|
||||
constructor(templateFn) {
|
||||
this.template = templateFn;
|
||||
}
|
||||
|
||||
transform(info) {
|
||||
info[MESSAGE] = this.template(info);
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* function printf (templateFn)
|
||||
* Returns a new instance of the printf Format that creates an
|
||||
* intermediate prototype to store the template string-based formatter
|
||||
* function.
|
||||
*/
|
||||
module.exports = opts => new Printf(opts);
|
||||
|
||||
module.exports.Printf
|
||||
= module.exports.Format
|
||||
= Printf;
|
33
node_modules/logform/simple.js
generated
vendored
Normal file
33
node_modules/logform/simple.js
generated
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
/* eslint no-undefined: 0 */
|
||||
'use strict';
|
||||
|
||||
const format = require('./format');
|
||||
const { MESSAGE } = require('triple-beam');
|
||||
const jsonStringify = require('fast-safe-stringify');
|
||||
|
||||
/*
|
||||
* function simple (info)
|
||||
* Returns a new instance of the simple format TransformStream
|
||||
* which writes a simple representation of logs.
|
||||
*
|
||||
* const { level, message, splat, ...rest } = info;
|
||||
*
|
||||
* ${level}: ${message} if rest is empty
|
||||
* ${level}: ${message} ${JSON.stringify(rest)} otherwise
|
||||
*/
|
||||
module.exports = format(info => {
|
||||
const stringifiedRest = jsonStringify(Object.assign({}, info, {
|
||||
level: undefined,
|
||||
message: undefined,
|
||||
splat: undefined
|
||||
}));
|
||||
|
||||
const padding = info.padding && info.padding[info.level] || '';
|
||||
if (stringifiedRest !== '{}') {
|
||||
info[MESSAGE] = `${info.level}:${padding} ${info.message} ${stringifiedRest}`;
|
||||
} else {
|
||||
info[MESSAGE] = `${info.level}:${padding} ${info.message}`;
|
||||
}
|
||||
|
||||
return info;
|
||||
});
|
132
node_modules/logform/splat.js
generated
vendored
Normal file
132
node_modules/logform/splat.js
generated
vendored
Normal file
@ -0,0 +1,132 @@
|
||||
'use strict';
|
||||
|
||||
const util = require('util');
|
||||
const { SPLAT } = require('triple-beam');
|
||||
|
||||
/**
|
||||
* Captures the number of format (i.e. %s strings) in a given string.
|
||||
* Based on `util.format`, see Node.js source:
|
||||
* https://github.com/nodejs/node/blob/b1c8f15c5f169e021f7c46eb7b219de95fe97603/lib/util.js#L201-L230
|
||||
* @type {RegExp}
|
||||
*/
|
||||
const formatRegExp = /%[scdjifoO%]/g;
|
||||
|
||||
/**
|
||||
* Captures the number of escaped % signs in a format string (i.e. %s strings).
|
||||
* @type {RegExp}
|
||||
*/
|
||||
const escapedPercent = /%%/g;
|
||||
|
||||
class Splatter {
|
||||
constructor(opts) {
|
||||
this.options = opts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if tokens <= splat.length, assign { splat, meta } into the
|
||||
* `info` accordingly, and write to this instance.
|
||||
*
|
||||
* @param {Info} info Logform info message.
|
||||
* @param {String[]} tokens Set of string interpolation tokens.
|
||||
* @returns {Info} Modified info message
|
||||
* @private
|
||||
*/
|
||||
_splat(info, tokens) {
|
||||
const msg = info.message;
|
||||
const splat = info[SPLAT] || info.splat || [];
|
||||
const percents = msg.match(escapedPercent);
|
||||
const escapes = percents && percents.length || 0;
|
||||
|
||||
// The expected splat is the number of tokens minus the number of escapes
|
||||
// e.g.
|
||||
// - { expectedSplat: 3 } '%d %s %j'
|
||||
// - { expectedSplat: 5 } '[%s] %d%% %d%% %s %j'
|
||||
//
|
||||
// Any "meta" will be arugments in addition to the expected splat size
|
||||
// regardless of type. e.g.
|
||||
//
|
||||
// logger.log('info', '%d%% %s %j', 100, 'wow', { such: 'js' }, { thisIsMeta: true });
|
||||
// would result in splat of four (4), but only three (3) are expected. Therefore:
|
||||
//
|
||||
// extraSplat = 3 - 4 = -1
|
||||
// metas = [100, 'wow', { such: 'js' }, { thisIsMeta: true }].splice(-1, -1 * -1);
|
||||
// splat = [100, 'wow', { such: 'js' }]
|
||||
const expectedSplat = tokens.length - escapes;
|
||||
const extraSplat = expectedSplat - splat.length;
|
||||
const metas = extraSplat < 0
|
||||
? splat.splice(extraSplat, -1 * extraSplat)
|
||||
: [];
|
||||
|
||||
// Now that { splat } has been separated from any potential { meta }. we
|
||||
// can assign this to the `info` object and write it to our format stream.
|
||||
// If the additional metas are **NOT** objects or **LACK** enumerable properties
|
||||
// you are going to have a bad time.
|
||||
const metalen = metas.length;
|
||||
if (metalen) {
|
||||
for (let i = 0; i < metalen; i++) {
|
||||
Object.assign(info, metas[i]);
|
||||
}
|
||||
}
|
||||
|
||||
info.message = util.format(msg, ...splat);
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the `info` message by using `util.format` to complete
|
||||
* any `info.message` provided it has string interpolation tokens.
|
||||
* If no tokens exist then `info` is immutable.
|
||||
*
|
||||
* @param {Info} info Logform info message.
|
||||
* @param {Object} opts Options for this instance.
|
||||
* @returns {Info} Modified info message
|
||||
*/
|
||||
transform(info) {
|
||||
const msg = info.message;
|
||||
const splat = info[SPLAT] || info.splat;
|
||||
|
||||
// No need to process anything if splat is undefined
|
||||
if (!splat || !splat.length) {
|
||||
return info;
|
||||
}
|
||||
|
||||
// Extract tokens, if none available default to empty array to
|
||||
// ensure consistancy in expected results
|
||||
const tokens = msg && msg.match && msg.match(formatRegExp);
|
||||
|
||||
// This condition will take care of inputs with info[SPLAT]
|
||||
// but no tokens present
|
||||
if (!tokens && (splat || splat.length)) {
|
||||
const metas = splat.length > 1
|
||||
? splat.splice(0)
|
||||
: splat;
|
||||
|
||||
// Now that { splat } has been separated from any potential { meta }. we
|
||||
// can assign this to the `info` object and write it to our format stream.
|
||||
// If the additional metas are **NOT** objects or **LACK** enumerable properties
|
||||
// you are going to have a bad time.
|
||||
const metalen = metas.length;
|
||||
if (metalen) {
|
||||
for (let i = 0; i < metalen; i++) {
|
||||
Object.assign(info, metas[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
if (tokens) {
|
||||
return this._splat(info, tokens);
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* function splat (info)
|
||||
* Returns a new instance of the splat format TransformStream
|
||||
* which performs string interpolation from `info` objects. This was
|
||||
* previously exposed implicitly in `winston < 3.0.0`.
|
||||
*/
|
||||
module.exports = opts => new Splatter(opts);
|
30
node_modules/logform/timestamp.js
generated
vendored
Normal file
30
node_modules/logform/timestamp.js
generated
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
'use strict';
|
||||
|
||||
const fecha = require('fecha');
|
||||
const format = require('./format');
|
||||
|
||||
/*
|
||||
* function timestamp (info)
|
||||
* Returns a new instance of the timestamp Format which adds a timestamp
|
||||
* to the info. It was previously available in winston < 3.0.0 as:
|
||||
*
|
||||
* - { timestamp: true } // `new Date.toISOString()`
|
||||
* - { timestamp: function:String } // Value returned by `timestamp()`
|
||||
*/
|
||||
module.exports = format((info, opts = {}) => {
|
||||
if (opts.format) {
|
||||
info.timestamp = typeof opts.format === 'function'
|
||||
? opts.format()
|
||||
: fecha.format(new Date(), opts.format);
|
||||
}
|
||||
|
||||
if (!info.timestamp) {
|
||||
info.timestamp = new Date().toISOString();
|
||||
}
|
||||
|
||||
if (opts.alias) {
|
||||
info[opts.alias] = info.timestamp;
|
||||
}
|
||||
|
||||
return info;
|
||||
});
|
22
node_modules/logform/tsconfig.json
generated
vendored
Normal file
22
node_modules/logform/tsconfig.json
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"lib": [
|
||||
"es6"
|
||||
],
|
||||
"noImplicitAny": true,
|
||||
"noImplicitThis": true,
|
||||
"strictNullChecks": true,
|
||||
"strictFunctionTypes": true,
|
||||
"baseUrl": "../",
|
||||
"typeRoots": [
|
||||
"../"
|
||||
],
|
||||
"types": [],
|
||||
"noEmit": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
},
|
||||
"files": [
|
||||
"index.d.ts"
|
||||
]
|
||||
}
|
27
node_modules/logform/uncolorize.js
generated
vendored
Normal file
27
node_modules/logform/uncolorize.js
generated
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
'use strict';
|
||||
|
||||
const colors = require('colors/safe');
|
||||
const format = require('./format');
|
||||
const { MESSAGE } = require('triple-beam');
|
||||
|
||||
/*
|
||||
* function uncolorize (info)
|
||||
* Returns a new instance of the uncolorize Format that strips colors
|
||||
* from `info` objects. This was previously exposed as { stripColors: true }
|
||||
* to transports in `winston < 3.0.0`.
|
||||
*/
|
||||
module.exports = format((info, opts) => {
|
||||
if (opts.level !== false) {
|
||||
info.level = colors.strip(info.level);
|
||||
}
|
||||
|
||||
if (opts.message !== false) {
|
||||
info.message = colors.strip(info.message);
|
||||
}
|
||||
|
||||
if (opts.raw !== false && info[MESSAGE]) {
|
||||
info[MESSAGE] = colors.strip(info[MESSAGE]);
|
||||
}
|
||||
|
||||
return info;
|
||||
});
|
Reference in New Issue
Block a user