Deployed the page to Github Pages.

This commit is contained in:
Batuhan Berk Başoğlu 2024-11-03 21:30:09 -05:00
parent 1d79754e93
commit 2c89899458
Signed by: batuhan-basoglu
SSH key fingerprint: SHA256:kEsnuHX+qbwhxSAXPUQ4ox535wFHu/hIRaa53FzxRpo
62797 changed files with 6551425 additions and 15279 deletions

3
node_modules/logform/.babelrc generated vendored Normal file
View file

@ -0,0 +1,3 @@
{
"presets": ["@babel/preset-env"]
}

7
node_modules/logform/.eslintrc generated vendored Normal file
View file

@ -0,0 +1,7 @@
{
"extends": "@dabh/eslint-config-populist",
"rules": {
"no-undefined": 0,
"strict": 0
}
}

1
node_modules/logform/.gitattributes generated vendored Normal file
View file

@ -0,0 +1 @@
package-lock.json binary

309
node_modules/logform/CHANGELOG.md generated vendored Normal file
View file

@ -0,0 +1,309 @@
# CHANGELOG
### [2.5.1](https://github.com/winstonjs/logform/compare/v2.5.0...v2.5.1)
**2023/02/07**
## Bugfix
The triple-beam types package has been promoted to a full dependency, by first-time contributor @carboneater (Thanks!)
in https://github.com/winstonjs/logform/pull/243 to fix https://github.com/winstonjs/logform/issues/242.
### [2.5.0](https://github.com/winstonjs/logform/compare/v2.4.2...v2.5.0)
**2023/02/06**
## Most Important:
* Now incompatible with TypeScript < 4.4 due to [PR #240](https://github.com/winstonjs/logform/pull/240), as pointed out in [#244](https://github.com/winstonjs/logform/issues/244).
## Improvements
All the improvements in this release are from first-time contributors - thanks for your contributions!
* Feature - optionally include Error.cause property by @davidnbooth in https://github.com/winstonjs/logform/pull/226
* Add triple beam properties to types by @robinpokorny in https://github.com/winstonjs/logform/pull/194
* TransformableInfo should support symbols as keys by @dancrumb in https://github.com/winstonjs/logform/pull/240
## Dependency updates by @dependabot
* Bump @babel/cli from 7.18.6 to 7.19.3 by @dependabot in https://github.com/winstonjs/logform/pull/214
* Bump @babel/core from 7.18.6 to 7.20.12 by @dependabot in https://github.com/winstonjs/logform/pull/212
and https://github.com/winstonjs/logform/pull/237
* Bump @babel/preset-env from 7.18.6 to 7.20.2 by @dependabot in https://github.com/winstonjs/logform/pull/217
and https://github.com/winstonjs/logform/pull/225
* Bump eslint from 8.19.0 to 8.33.0 by @dependabot in https://github.com/winstonjs/logform/pull/215
and https://github.com/winstonjs/logform/pull/241
* Bump mocha from 10.0.0 to 10.2.0 by @dependabot in https://github.com/winstonjs/logform/pull/218
and https://github.com/winstonjs/logform/pull/232
* Bump safe-stable-stringify from 2.3.1 to 2.4.2 by @dependabot in https://github.com/winstonjs/logform/pull/206
and https://github.com/winstonjs/logform/pull/235
### [2.4.2](https://github.com/winstonjs/logform/compare/v2.4.1...v2.4.2)
**2022/07/05**
## Bugfixes
This patch-level release includes a fix for a crash on attempt to uncolorize Symbol.
Thanks to @Alexsey for that first contribution in https://github.com/winstonjs/logform/pull/188.
## Maintainability updates:
Line break styles were changed to be LF (instead of CRLF) more consistently so that linter warnings
aren't drowned out by notes about that.
## Dependency updates by @dependabot
* @babel/cli from 7.17.10 to 7.18.6 in https://github.com/winstonjs/logform/pull/187
* @babel/core from 7.18.5 to 7.18.6 in https://github.com/winstonjs/logform/pull/185
* @babel/preset-env from 7.18.2 to 7.18.6 in https://github.com/winstonjs/logform/pull/184
* eslint from 8.18.0 to 8.19.0 in https://github.com/winstonjs/logform/pull/186
### 2.4.1
**2022/06/21**
- [#178] Change TransformableInfo message prop to any: Loosening types to fix #172 (thanks, @gregbair!)
- [#149] Adopted issue templates for reporting issues, affects GitHub project management only (thanks, @maverick1872!)
- Updated dependencies, from dependabot
### 2.4.0
**2022/02/12**
- Updated all dependencies
- [#135] Use CLI levels (not NPM levels) in `CliFormat` (this was likely a typo originally)
- [#134] Expose `safe-stable-stringify` 2.x options as parameters in `JsonOptions`
### 2.3.2
**2022/01/09**
This update, which also used up version number 2.3.1, pinned the version of the `colors` dependency
due to vandalism by a developer of that package, as noted [here](https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/).
[As discussed in the `winston` package](https://github.com/winstonjs/winston/issues/2011), all users should update to this (or a later version, should one exist) ASAP.
### 2.3.0
**2021/09/21**
- Update dependencies
- Removing some superfluous semicolons & commas lint
- Avoid dynamic requires [#117]
- Replace JSON stringify library "fast-safe-stringify" by "safe-stable-stringify" [#98]
- More correctly format errors even if the “message” property is enumerable [#101]
- Fix errors and ms export for browsers [#106]
### 2.2.0
**2020/06/21**
- [#90], [#91] Add option for using stable stringify when formatting as JSON.
- [#84] Add replacer for BigInt on JSON formatter.
- [#79] Timestamp format type definitions can accept functions.
- Update dependencies and fix most of the oustanding npm audit notices.
### 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
View 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
View 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 `safe-stable-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
View 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;
});

38
node_modules/logform/browser.js generated vendored Normal file
View file

@ -0,0 +1,38 @@
'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, 'colorize', { value: require('./colorize') });
Object.defineProperty(format, 'combine', { value: require('./combine') });
Object.defineProperty(format, 'errors', { value: require('./errors') });
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, 'ms', { value: require('./ms') });
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
View 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.cli.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
View file

@ -0,0 +1,122 @@
'use strict';
const colors = require('@colors/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/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
View 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;

14
node_modules/logform/dist/align.js generated vendored Normal file
View file

@ -0,0 +1,14 @@
'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;
});

72
node_modules/logform/dist/browser.js generated vendored Normal file
View file

@ -0,0 +1,72 @@
'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, 'colorize', {
value: require('./colorize')
});
Object.defineProperty(format, 'combine', {
value: require('./combine')
});
Object.defineProperty(format, 'errors', {
value: require('./errors')
});
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, 'ms', {
value: require('./ms')
});
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')
});

63
node_modules/logform/dist/cli.js generated vendored Normal file
View file

@ -0,0 +1,63 @@
'use strict';
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
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, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
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.cli.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;

132
node_modules/logform/dist/colorize.js generated vendored Normal file
View file

@ -0,0 +1,132 @@
'use strict';
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
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, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var colors = require('@colors/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",
value:
/*
* Adds the colors Object to the set of allColors
* known by the Colorizer
*
* @param {Object} colors Set of color mappings to add.
*/
function addColors(clrs) {
return Colorizer.addColors(clrs);
}
/*
* function colorize (lookup, level, message)
* Performs multi-step colorization using @colors/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;

62
node_modules/logform/dist/combine.js generated vendored Normal file
View file

@ -0,0 +1,62 @@
'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;

44
node_modules/logform/dist/errors.js generated vendored Normal file
View file

@ -0,0 +1,44 @@
/* eslint no-undefined: 0 */
'use strict';
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
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` and/or `cause` properties can also be appended to the `info` object.
*/
module.exports = format(function (einfo, _ref) {
var stack = _ref.stack,
cause = _ref.cause;
if (einfo instanceof Error) {
var info = Object.assign({}, einfo, _defineProperty(_defineProperty(_defineProperty({
level: einfo.level
}, LEVEL, einfo[LEVEL] || einfo.level), "message", einfo.message), MESSAGE, einfo[MESSAGE] || einfo.message));
if (stack) info.stack = einfo.stack;
if (cause) info.cause = einfo.cause;
return info;
}
if (!(einfo.message instanceof Error)) return einfo;
// Assign all enumerable properties and the
// message property from the error provided.
var err = einfo.message;
Object.assign(einfo, err);
einfo.message = err.message;
einfo[MESSAGE] = err.message;
// Assign the stack and/or cause if requested.
if (stack) einfo.stack = err.stack;
if (cause) einfo.cause = err.cause;
return einfo;
});

71
node_modules/logform/dist/format.js generated vendored Normal file
View file

@ -0,0 +1,71 @@
'use strict';
/*
* Displays a helpful message and the source of
* the format when it is invalid.
*/
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
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, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
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 } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
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 _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } 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 _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
function _isNativeFunction(fn) { try { return Function.toString.call(fn).indexOf("[native code]") !== -1; } catch (e) { return typeof fn === "function"; } }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
var InvalidFormatError = /*#__PURE__*/function (_Error) {
_inherits(InvalidFormatError, _Error);
var _super = _createSuper(InvalidFormatError);
function InvalidFormatError(formatFn) {
var _this;
_classCallCheck(this, InvalidFormatError);
_this = _super.call(this, "Format functions must be synchronous taking a two arguments: (info, opts)\nFound: ".concat(formatFn.toString().split('\n')[0], "\n"));
Error.captureStackTrace(_assertThisInitialized(_this), InvalidFormatError);
return _this;
}
return _createClass(InvalidFormatError);
}( /*#__PURE__*/_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;
};

86
node_modules/logform/dist/index.js generated vendored Normal file
View file

@ -0,0 +1,86 @@
'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, requireFormat) {
Object.defineProperty(format, name, {
get: function get() {
return requireFormat();
},
configurable: true
});
}
//
// Setup all transports as lazy-loaded getters.
//
exposeFormat('align', function () {
return require('./align');
});
exposeFormat('errors', function () {
return require('./errors');
});
exposeFormat('cli', function () {
return require('./cli');
});
exposeFormat('combine', function () {
return require('./combine');
});
exposeFormat('colorize', function () {
return require('./colorize');
});
exposeFormat('json', function () {
return require('./json');
});
exposeFormat('label', function () {
return require('./label');
});
exposeFormat('logstash', function () {
return require('./logstash');
});
exposeFormat('metadata', function () {
return require('./metadata');
});
exposeFormat('ms', function () {
return require('./ms');
});
exposeFormat('padLevels', function () {
return require('./pad-levels');
});
exposeFormat('prettyPrint', function () {
return require('./pretty-print');
});
exposeFormat('printf', function () {
return require('./printf');
});
exposeFormat('simple', function () {
return require('./simple');
});
exposeFormat('splat', function () {
return require('./splat');
});
exposeFormat('timestamp', function () {
return require('./timestamp');
});
exposeFormat('uncolorize', function () {
return require('./uncolorize');
});

30
node_modules/logform/dist/json.js generated vendored Normal file
View file

@ -0,0 +1,30 @@
'use strict';
var format = require('./format');
var _require = require('triple-beam'),
MESSAGE = _require.MESSAGE;
var stringify = require('safe-stable-stringify');
/*
* function replacer (key, value)
* Handles proper stringification of Buffer and bigint output.
*/
function replacer(key, value) {
// safe-stable-stringify does support BigInt, however, it doesn't wrap the value in quotes.
// Leading to a loss in fidelity if the resulting string is parsed.
// It would also be a breaking change for logform.
if (typeof value === 'bigint') return value.toString();
return 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, opts) {
var jsonStringify = stringify.configure(opts);
info[MESSAGE] = jsonStringify(info, opts.replacer || replacer, opts.space);
return info;
});

18
node_modules/logform/dist/label.js generated vendored Normal file
View file

@ -0,0 +1,18 @@
'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;
});

13
node_modules/logform/dist/levels.js generated vendored Normal file
View file

@ -0,0 +1,13 @@
'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;
};

28
node_modules/logform/dist/logstash.js generated vendored Normal file
View file

@ -0,0 +1,28 @@
'use strict';
var format = require('./format');
var _require = require('triple-beam'),
MESSAGE = _require.MESSAGE;
var jsonStringify = require('safe-stable-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;
});

56
node_modules/logform/dist/metadata.js generated vendored Normal file
View file

@ -0,0 +1,56 @@
'use strict';
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
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;
});

18
node_modules/logform/dist/ms.js generated vendored Normal file
View file

@ -0,0 +1,18 @@
'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;
});

111
node_modules/logform/dist/pad-levels.js generated vendored Normal file
View file

@ -0,0 +1,111 @@
/* eslint no-unused-vars: 0 */
'use strict';
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; 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, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
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",
value:
/**
* 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.
*/
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;

32
node_modules/logform/dist/pretty-print.js generated vendored Normal file
View file

@ -0,0 +1,32 @@
'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;
});

34
node_modules/logform/dist/printf.js generated vendored Normal file
View file

@ -0,0 +1,34 @@
'use strict';
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
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, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
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;

32
node_modules/logform/dist/simple.js generated vendored Normal file
View file

@ -0,0 +1,32 @@
/* eslint no-undefined: 0 */
'use strict';
var format = require('./format');
var _require = require('triple-beam'),
MESSAGE = _require.MESSAGE;
var jsonStringify = require('safe-stable-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;
});

144
node_modules/logform/dist/splat.js generated vendored Normal file
View file

@ -0,0 +1,144 @@
'use strict';
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; 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, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
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);
};

26
node_modules/logform/dist/timestamp.js generated vendored Normal file
View file

@ -0,0 +1,26 @@
'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;
});

25
node_modules/logform/dist/uncolorize.js generated vendored Normal file
View file

@ -0,0 +1,25 @@
'use strict';
var colors = require('@colors/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(String(info.message));
}
if (opts.raw !== false && info[MESSAGE]) {
info[MESSAGE] = colors.strip(String(info[MESSAGE]));
}
return info;
});

41
node_modules/logform/errors.js generated vendored Normal file
View file

@ -0,0 +1,41 @@
/* 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` and/or `cause` properties can also be appended to the `info` object.
*/
module.exports = format((einfo, { stack, cause }) => {
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;
if (cause) info.cause = einfo.cause;
return info;
}
if (!(einfo.message instanceof Error)) return einfo;
// Assign all enumerable properties and the
// message property from the error provided.
const err = einfo.message;
Object.assign(einfo, err);
einfo.message = err.message;
einfo[MESSAGE] = err.message;
// Assign the stack and/or cause if requested.
if (stack) einfo.stack = err.stack;
if (cause) einfo.cause = err.cause;
return einfo;
});

52
node_modules/logform/format.js generated vendored Normal file
View 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;
};

201
node_modules/logform/index.d.ts generated vendored Normal file
View file

@ -0,0 +1,201 @@
// Type definitions for logform 2.x
// Project: https://github.com/winstonjs/logform
// Definitions by: DABH <https://github.com/DABH>
// Definitions: https://github.com/winstonjs/logform
// TypeScript Version: 2.2
import {LEVEL, MESSAGE, SPLAT} from 'triple-beam'
export interface TransformableInfo {
level: string;
message: any;
[LEVEL]?: string;
[MESSAGE]?: any;
[SPLAT]?: any;
[key: string | symbol]: 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;
// The following options come from safe-stable-stringify
// https://github.com/BridgeAR/safe-stable-stringify/blob/main/index.d.ts
/**
* If `true`, bigint values are converted to a number. Otherwise, they are ignored.
* This option is ignored by default as Logform stringifies BigInt in the default replacer.
* @default true
*/
bigint?: boolean,
/**
* Defines the value for circular references.
* Set to `undefined`, circular properties are not serialized (array entries are replaced with null).
* Set to `Error`, to throw on circular references.
* @default "[Circular]"
*/
circularValue?: string | null | TypeErrorConstructor | ErrorConstructor,
/**
* If `true`, guarantee a deterministic key order instead of relying on the insertion order.
* @default true
*/
deterministic?: boolean,
/**
* Maximum number of entries to serialize per object (at least one).
* The serialized output contains information about how many entries have not been serialized.
* Ignored properties are counted as well (e.g., properties with symbol values).
* Using the array replacer overrules this option.
* @default Infinity
*/
maximumBreadth?: number,
/**
* Maximum number of object nesting levels (at least 1) that will be serialized.
* Objects at the maximum level are serialized as `"[Object]"` and arrays as `"[Array]"`.
* @default Infinity
*/
maximumDepth?: 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 | (() => 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;
}

52
node_modules/logform/index.js generated vendored Normal file
View file

@ -0,0 +1,52 @@
'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, requireFormat) {
Object.defineProperty(format, name, {
get() {
return requireFormat();
},
configurable: true
});
}
//
// Setup all transports as lazy-loaded getters.
//
exposeFormat('align', function () { return require('./align'); });
exposeFormat('errors', function () { return require('./errors'); });
exposeFormat('cli', function () { return require('./cli'); });
exposeFormat('combine', function () { return require('./combine'); });
exposeFormat('colorize', function () { return require('./colorize'); });
exposeFormat('json', function () { return require('./json'); });
exposeFormat('label', function () { return require('./label'); });
exposeFormat('logstash', function () { return require('./logstash'); });
exposeFormat('metadata', function () { return require('./metadata'); });
exposeFormat('ms', function () { return require('./ms'); });
exposeFormat('padLevels', function () { return require('./pad-levels'); });
exposeFormat('prettyPrint', function () { return require('./pretty-print'); });
exposeFormat('printf', function () { return require('./printf'); });
exposeFormat('simple', function () { return require('./simple'); });
exposeFormat('splat', function () { return require('./splat'); });
exposeFormat('timestamp', function () { return require('./timestamp'); });
exposeFormat('uncolorize', function () { return require('./uncolorize'); });

30
node_modules/logform/json.js generated vendored Normal file
View file

@ -0,0 +1,30 @@
'use strict';
const format = require('./format');
const { MESSAGE } = require('triple-beam');
const stringify = require('safe-stable-stringify');
/*
* function replacer (key, value)
* Handles proper stringification of Buffer and bigint output.
*/
function replacer(key, value) {
// safe-stable-stringify does support BigInt, however, it doesn't wrap the value in quotes.
// Leading to a loss in fidelity if the resulting string is parsed.
// It would also be a breaking change for logform.
if (typeof value === 'bigint')
return value.toString();
return 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) => {
const jsonStringify = stringify.configure(opts);
info[MESSAGE] = jsonStringify(info, opts.replacer || replacer, opts.space);
return info;
});

19
node_modules/logform/label.js generated vendored Normal file
View 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
View 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
View file

@ -0,0 +1,29 @@
'use strict';
const format = require('./format');
const { MESSAGE } = require('triple-beam');
const jsonStringify = require('safe-stable-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
View 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
View 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;
});

View file

@ -0,0 +1,26 @@
MIT License
Original Library
- Copyright (c) Marak Squires
Additional Functionality
- Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
- Copyright (c) DABH (https://github.com/DABH)
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.

View file

@ -0,0 +1,219 @@
# @colors/colors ("colors.js")
[![Build Status](https://github.com/DABH/colors.js/actions/workflows/ci.yml/badge.svg)](https://github.com/DABH/colors.js/actions/workflows/ci.yml)
[![version](https://img.shields.io/npm/v/@colors/colors.svg)](https://www.npmjs.org/package/@colors/colors)
Please check out the [roadmap](ROADMAP.md) for upcoming features and releases. Please open Issues to provide feedback.
## get color and style in your node.js console
![Demo](https://raw.githubusercontent.com/DABH/colors.js/master/screenshots/colors.png)
## Installation
npm install @colors/colors
## colors and styles!
### text colors
- black
- red
- green
- yellow
- blue
- magenta
- cyan
- white
- gray
- grey
### bright text colors
- brightRed
- brightGreen
- brightYellow
- brightBlue
- brightMagenta
- brightCyan
- brightWhite
### background colors
- bgBlack
- bgRed
- bgGreen
- bgYellow
- bgBlue
- bgMagenta
- bgCyan
- bgWhite
- bgGray
- bgGrey
### bright background colors
- bgBrightRed
- bgBrightGreen
- bgBrightYellow
- bgBrightBlue
- bgBrightMagenta
- bgBrightCyan
- bgBrightWhite
### styles
- reset
- bold
- dim
- italic
- underline
- inverse
- hidden
- strikethrough
### extras
- rainbow
- zebra
- america
- trap
- random
## Usage
By popular demand, `@colors/colors` now ships with two types of usages!
The super nifty way
```js
var colors = require('@colors/colors');
console.log('hello'.green); // outputs green text
console.log('i like cake and pies'.underline.red); // outputs red underlined text
console.log('inverse the color'.inverse); // inverses the color
console.log('OMG Rainbows!'.rainbow); // rainbow
console.log('Run the trap'.trap); // Drops the bass
```
or a slightly less nifty way which doesn't extend `String.prototype`
```js
var colors = require('@colors/colors/safe');
console.log(colors.green('hello')); // outputs green text
console.log(colors.red.underline('i like cake and pies')); // outputs red underlined text
console.log(colors.inverse('inverse the color')); // inverses the color
console.log(colors.rainbow('OMG Rainbows!')); // rainbow
console.log(colors.trap('Run the trap')); // Drops the bass
```
I prefer the first way. Some people seem to be afraid of extending `String.prototype` and prefer the second way.
If you are writing good code you will never have an issue with the first approach. If you really don't want to touch `String.prototype`, the second usage will not touch `String` native object.
## Enabling/Disabling Colors
The package will auto-detect whether your terminal can use colors and enable/disable accordingly. When colors are disabled, the color functions do nothing. You can override this with a command-line flag:
```bash
node myapp.js --no-color
node myapp.js --color=false
node myapp.js --color
node myapp.js --color=true
node myapp.js --color=always
FORCE_COLOR=1 node myapp.js
```
Or in code:
```javascript
var colors = require('@colors/colors');
colors.enable();
colors.disable();
```
## Console.log [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data)
```js
var name = 'Beowulf';
console.log(colors.green('Hello %s'), name);
// outputs -> 'Hello Beowulf'
```
## Custom themes
### Using standard API
```js
var colors = require('@colors/colors');
colors.setTheme({
silly: 'rainbow',
input: 'grey',
verbose: 'cyan',
prompt: 'grey',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow',
debug: 'blue',
error: 'red'
});
// outputs red text
console.log("this is an error".error);
// outputs yellow text
console.log("this is a warning".warn);
```
### Using string safe API
```js
var colors = require('@colors/colors/safe');
// set single property
var error = colors.red;
error('this is red');
// set theme
colors.setTheme({
silly: 'rainbow',
input: 'grey',
verbose: 'cyan',
prompt: 'grey',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow',
debug: 'blue',
error: 'red'
});
// outputs red text
console.log(colors.error("this is an error"));
// outputs yellow text
console.log(colors.warn("this is a warning"));
```
### Combining Colors
```javascript
var colors = require('@colors/colors');
colors.setTheme({
custom: ['red', 'underline']
});
console.log('test'.custom);
```
*Protip: There is a secret undocumented style in `colors`. If you find the style you can summon him.*

View file

@ -0,0 +1,83 @@
var colors = require('../lib/index');
console.log('First some yellow text'.yellow);
console.log('Underline that text'.yellow.underline);
console.log('Make it bold and red'.red.bold);
console.log(('Double Raindows All Day Long').rainbow);
console.log('Drop the bass'.trap);
console.log('DROP THE RAINBOW BASS'.trap.rainbow);
// styles not widely supported
console.log('Chains are also cool.'.bold.italic.underline.red);
// styles not widely supported
console.log('So '.green + 'are'.underline + ' ' + 'inverse'.inverse
+ ' styles! '.yellow.bold);
console.log('Zebras are so fun!'.zebra);
//
// Remark: .strikethrough may not work with Mac OS Terminal App
//
console.log('This is ' + 'not'.strikethrough + ' fun.');
console.log('Background color attack!'.black.bgWhite);
console.log('Use random styles on everything!'.random);
console.log('America, Heck Yeah!'.america);
// eslint-disable-next-line max-len
console.log('Blindingly '.brightCyan + 'bright? '.brightRed + 'Why '.brightYellow + 'not?!'.brightGreen);
console.log('Setting themes is useful');
//
// Custom themes
//
console.log('Generic logging theme as JSON'.green.bold.underline);
// Load theme with JSON literal
colors.setTheme({
silly: 'rainbow',
input: 'grey',
verbose: 'cyan',
prompt: 'grey',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow',
debug: 'blue',
error: 'red',
});
// outputs red text
console.log('this is an error'.error);
// outputs yellow text
console.log('this is a warning'.warn);
// outputs grey text
console.log('this is an input'.input);
console.log('Generic logging theme as file'.green.bold.underline);
// Load a theme from file
try {
colors.setTheme(require(__dirname + '/../themes/generic-logging.js'));
} catch (err) {
console.log(err);
}
// outputs red text
console.log('this is an error'.error);
// outputs yellow text
console.log('this is a warning'.warn);
// outputs grey text
console.log('this is an input'.input);
// console.log("Don't summon".zalgo)

View file

@ -0,0 +1,80 @@
var colors = require('../safe');
console.log(colors.yellow('First some yellow text'));
console.log(colors.yellow.underline('Underline that text'));
console.log(colors.red.bold('Make it bold and red'));
console.log(colors.rainbow('Double Raindows All Day Long'));
console.log(colors.trap('Drop the bass'));
console.log(colors.rainbow(colors.trap('DROP THE RAINBOW BASS')));
// styles not widely supported
console.log(colors.bold.italic.underline.red('Chains are also cool.'));
// styles not widely supported
console.log(colors.green('So ') + colors.underline('are') + ' '
+ colors.inverse('inverse') + colors.yellow.bold(' styles! '));
console.log(colors.zebra('Zebras are so fun!'));
console.log('This is ' + colors.strikethrough('not') + ' fun.');
console.log(colors.black.bgWhite('Background color attack!'));
console.log(colors.random('Use random styles on everything!'));
console.log(colors.america('America, Heck Yeah!'));
// eslint-disable-next-line max-len
console.log(colors.brightCyan('Blindingly ') + colors.brightRed('bright? ') + colors.brightYellow('Why ') + colors.brightGreen('not?!'));
console.log('Setting themes is useful');
//
// Custom themes
//
// console.log('Generic logging theme as JSON'.green.bold.underline);
// Load theme with JSON literal
colors.setTheme({
silly: 'rainbow',
input: 'blue',
verbose: 'cyan',
prompt: 'grey',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow',
debug: 'blue',
error: 'red',
});
// outputs red text
console.log(colors.error('this is an error'));
// outputs yellow text
console.log(colors.warn('this is a warning'));
// outputs blue text
console.log(colors.input('this is an input'));
// console.log('Generic logging theme as file'.green.bold.underline);
// Load a theme from file
colors.setTheme(require(__dirname + '/../themes/generic-logging.js'));
// outputs red text
console.log(colors.error('this is an error'));
// outputs yellow text
console.log(colors.warn('this is a warning'));
// outputs grey text
console.log(colors.input('this is an input'));
// console.log(colors.zalgo("Don't summon him"))

View file

@ -0,0 +1,184 @@
// Type definitions for @colors/colors 1.4+
// Project: https://github.com/Marak/colors.js
// Definitions by: Bart van der Schoor <https://github.com/Bartvds>, Staffan Eketorp <https://github.com/staeke>
// Definitions: https://github.com/DABH/colors.js
export interface Color {
(text: string): string;
strip: Color;
stripColors: Color;
black: Color;
red: Color;
green: Color;
yellow: Color;
blue: Color;
magenta: Color;
cyan: Color;
white: Color;
gray: Color;
grey: Color;
brightRed: Color;
brightGreen: Color;
brightYellow: Color;
brightBlue: Color;
brightMagenta: Color;
brightCyan: Color;
brightWhite: Color;
bgBlack: Color;
bgRed: Color;
bgGreen: Color;
bgYellow: Color;
bgBlue: Color;
bgMagenta: Color;
bgCyan: Color;
bgWhite: Color;
bgBrightRed: Color;
bgBrightGreen: Color;
bgBrightYellow: Color;
bgBrightBlue: Color;
bgBrightMagenta: Color;
bgBrightCyan: Color;
bgBrightWhite: Color;
reset: Color;
bold: Color;
dim: Color;
italic: Color;
underline: Color;
inverse: Color;
hidden: Color;
strikethrough: Color;
rainbow: Color;
zebra: Color;
america: Color;
trap: Color;
random: Color;
zalgo: Color;
}
export function enable(): void;
export function disable(): void;
export function setTheme(theme: any): void;
export let enabled: boolean;
export const strip: Color;
export const stripColors: Color;
export const black: Color;
export const red: Color;
export const green: Color;
export const yellow: Color;
export const blue: Color;
export const magenta: Color;
export const cyan: Color;
export const white: Color;
export const gray: Color;
export const grey: Color;
export const brightRed: Color;
export const brightGreen: Color;
export const brightYellow: Color;
export const brightBlue: Color;
export const brightMagenta: Color;
export const brightCyan: Color;
export const brightWhite: Color;
export const bgBlack: Color;
export const bgRed: Color;
export const bgGreen: Color;
export const bgYellow: Color;
export const bgBlue: Color;
export const bgMagenta: Color;
export const bgCyan: Color;
export const bgWhite: Color;
export const bgBrightRed: Color;
export const bgBrightGreen: Color;
export const bgBrightYellow: Color;
export const bgBrightBlue: Color;
export const bgBrightMagenta: Color;
export const bgBrightCyan: Color;
export const bgBrightWhite: Color;
export const reset: Color;
export const bold: Color;
export const dim: Color;
export const italic: Color;
export const underline: Color;
export const inverse: Color;
export const hidden: Color;
export const strikethrough: Color;
export const rainbow: Color;
export const zebra: Color;
export const america: Color;
export const trap: Color;
export const random: Color;
export const zalgo: Color;
declare global {
interface String {
strip: string;
stripColors: string;
black: string;
red: string;
green: string;
yellow: string;
blue: string;
magenta: string;
cyan: string;
white: string;
gray: string;
grey: string;
brightRed: string;
brightGreen: string;
brightYellow: string;
brightBlue: string;
brightMagenta: string;
brightCyan: string;
brightWhite: string;
bgBlack: string;
bgRed: string;
bgGreen: string;
bgYellow: string;
bgBlue: string;
bgMagenta: string;
bgCyan: string;
bgWhite: string;
bgBrightRed: string;
bgBrightGreen: string;
bgBrightYellow: string;
bgBrightBlue: string;
bgBrightMagenta: string;
bgBrightCyan: string;
bgBrightWhite: string;
reset: string;
// @ts-ignore
bold: string;
dim: string;
italic: string;
underline: string;
inverse: string;
hidden: string;
strikethrough: string;
rainbow: string;
zebra: string;
america: string;
trap: string;
random: string;
zalgo: string;
}
}

View file

@ -0,0 +1,211 @@
/*
The MIT License (MIT)
Original Library
- Copyright (c) Marak Squires
Additional functionality
- Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
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.
*/
var colors = {};
module['exports'] = colors;
colors.themes = {};
var util = require('util');
var ansiStyles = colors.styles = require('./styles');
var defineProps = Object.defineProperties;
var newLineRegex = new RegExp(/[\r\n]+/g);
colors.supportsColor = require('./system/supports-colors').supportsColor;
if (typeof colors.enabled === 'undefined') {
colors.enabled = colors.supportsColor() !== false;
}
colors.enable = function() {
colors.enabled = true;
};
colors.disable = function() {
colors.enabled = false;
};
colors.stripColors = colors.strip = function(str) {
return ('' + str).replace(/\x1B\[\d+m/g, '');
};
// eslint-disable-next-line no-unused-vars
var stylize = colors.stylize = function stylize(str, style) {
if (!colors.enabled) {
return str+'';
}
var styleMap = ansiStyles[style];
// Stylize should work for non-ANSI styles, too
if (!styleMap && style in colors) {
// Style maps like trap operate as functions on strings;
// they don't have properties like open or close.
return colors[style](str);
}
return styleMap.open + str + styleMap.close;
};
var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
var escapeStringRegexp = function(str) {
if (typeof str !== 'string') {
throw new TypeError('Expected a string');
}
return str.replace(matchOperatorsRe, '\\$&');
};
function build(_styles) {
var builder = function builder() {
return applyStyle.apply(builder, arguments);
};
builder._styles = _styles;
// __proto__ is used because we must return a function, but there is
// no way to create a function with a different prototype.
builder.__proto__ = proto;
return builder;
}
var styles = (function() {
var ret = {};
ansiStyles.grey = ansiStyles.gray;
Object.keys(ansiStyles).forEach(function(key) {
ansiStyles[key].closeRe =
new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
ret[key] = {
get: function() {
return build(this._styles.concat(key));
},
};
});
return ret;
})();
var proto = defineProps(function colors() {}, styles);
function applyStyle() {
var args = Array.prototype.slice.call(arguments);
var str = args.map(function(arg) {
// Use weak equality check so we can colorize null/undefined in safe mode
if (arg != null && arg.constructor === String) {
return arg;
} else {
return util.inspect(arg);
}
}).join(' ');
if (!colors.enabled || !str) {
return str;
}
var newLinesPresent = str.indexOf('\n') != -1;
var nestedStyles = this._styles;
var i = nestedStyles.length;
while (i--) {
var code = ansiStyles[nestedStyles[i]];
str = code.open + str.replace(code.closeRe, code.open) + code.close;
if (newLinesPresent) {
str = str.replace(newLineRegex, function(match) {
return code.close + match + code.open;
});
}
}
return str;
}
colors.setTheme = function(theme) {
if (typeof theme === 'string') {
console.log('colors.setTheme now only accepts an object, not a string. ' +
'If you are trying to set a theme from a file, it is now your (the ' +
'caller\'s) responsibility to require the file. The old syntax ' +
'looked like colors.setTheme(__dirname + ' +
'\'/../themes/generic-logging.js\'); The new syntax looks like '+
'colors.setTheme(require(__dirname + ' +
'\'/../themes/generic-logging.js\'));');
return;
}
for (var style in theme) {
(function(style) {
colors[style] = function(str) {
if (typeof theme[style] === 'object') {
var out = str;
for (var i in theme[style]) {
out = colors[theme[style][i]](out);
}
return out;
}
return colors[theme[style]](str);
};
})(style);
}
};
function init() {
var ret = {};
Object.keys(styles).forEach(function(name) {
ret[name] = {
get: function() {
return build([name]);
},
};
});
return ret;
}
var sequencer = function sequencer(map, str) {
var exploded = str.split('');
exploded = exploded.map(map);
return exploded.join('');
};
// custom formatter methods
colors.trap = require('./custom/trap');
colors.zalgo = require('./custom/zalgo');
// maps
colors.maps = {};
colors.maps.america = require('./maps/america')(colors);
colors.maps.zebra = require('./maps/zebra')(colors);
colors.maps.rainbow = require('./maps/rainbow')(colors);
colors.maps.random = require('./maps/random')(colors);
for (var map in colors.maps) {
(function(map) {
colors[map] = function(str) {
return sequencer(colors.maps[map], str);
};
})(map);
}
defineProps(colors, init());

View file

@ -0,0 +1,46 @@
module['exports'] = function runTheTrap(text, options) {
var result = '';
text = text || 'Run the trap, drop the bass';
text = text.split('');
var trap = {
a: ['\u0040', '\u0104', '\u023a', '\u0245', '\u0394', '\u039b', '\u0414'],
b: ['\u00df', '\u0181', '\u0243', '\u026e', '\u03b2', '\u0e3f'],
c: ['\u00a9', '\u023b', '\u03fe'],
d: ['\u00d0', '\u018a', '\u0500', '\u0501', '\u0502', '\u0503'],
e: ['\u00cb', '\u0115', '\u018e', '\u0258', '\u03a3', '\u03be', '\u04bc',
'\u0a6c'],
f: ['\u04fa'],
g: ['\u0262'],
h: ['\u0126', '\u0195', '\u04a2', '\u04ba', '\u04c7', '\u050a'],
i: ['\u0f0f'],
j: ['\u0134'],
k: ['\u0138', '\u04a0', '\u04c3', '\u051e'],
l: ['\u0139'],
m: ['\u028d', '\u04cd', '\u04ce', '\u0520', '\u0521', '\u0d69'],
n: ['\u00d1', '\u014b', '\u019d', '\u0376', '\u03a0', '\u048a'],
o: ['\u00d8', '\u00f5', '\u00f8', '\u01fe', '\u0298', '\u047a', '\u05dd',
'\u06dd', '\u0e4f'],
p: ['\u01f7', '\u048e'],
q: ['\u09cd'],
r: ['\u00ae', '\u01a6', '\u0210', '\u024c', '\u0280', '\u042f'],
s: ['\u00a7', '\u03de', '\u03df', '\u03e8'],
t: ['\u0141', '\u0166', '\u0373'],
u: ['\u01b1', '\u054d'],
v: ['\u05d8'],
w: ['\u0428', '\u0460', '\u047c', '\u0d70'],
x: ['\u04b2', '\u04fe', '\u04fc', '\u04fd'],
y: ['\u00a5', '\u04b0', '\u04cb'],
z: ['\u01b5', '\u0240'],
};
text.forEach(function(c) {
c = c.toLowerCase();
var chars = trap[c] || [' '];
var rand = Math.floor(Math.random() * chars.length);
if (typeof trap[c] !== 'undefined') {
result += trap[c][rand];
} else {
result += c;
}
});
return result;
};

View file

@ -0,0 +1,110 @@
// please no
module['exports'] = function zalgo(text, options) {
text = text || ' he is here ';
var soul = {
'up': [
'̍', '̎', '̄', '̅',
'̿', '̑', '̆', '̐',
'͒', '͗', '͑', '̇',
'̈', '̊', '͂', '̓',
'̈', '͊', '͋', '͌',
'̃', '̂', '̌', '͐',
'̀', '́', '̋', '̏',
'̒', '̓', '̔', '̽',
'̉', 'ͣ', 'ͤ', 'ͥ',
'ͦ', 'ͧ', 'ͨ', 'ͩ',
'ͪ', 'ͫ', 'ͬ', 'ͭ',
'ͮ', 'ͯ', '̾', '͛',
'͆', '̚',
],
'down': [
'̖', '̗', '̘', '̙',
'̜', '̝', '̞', '̟',
'̠', '̤', '̥', '̦',
'̩', '̪', '̫', '̬',
'̭', '̮', '̯', '̰',
'̱', '̲', '̳', '̹',
'̺', '̻', '̼', 'ͅ',
'͇', '͈', '͉', '͍',
'͎', '͓', '͔', '͕',
'͖', '͙', '͚', '̣',
],
'mid': [
'̕', '̛', '̀', '́',
'͘', '̡', '̢', '̧',
'̨', '̴', '̵', '̶',
'͜', '͝', '͞',
'͟', '͠', '͢', '̸',
'̷', '͡', ' ҉',
],
};
var all = [].concat(soul.up, soul.down, soul.mid);
function randomNumber(range) {
var r = Math.floor(Math.random() * range);
return r;
}
function isChar(character) {
var bool = false;
all.filter(function(i) {
bool = (i === character);
});
return bool;
}
function heComes(text, options) {
var result = '';
var counts;
var l;
options = options || {};
options['up'] =
typeof options['up'] !== 'undefined' ? options['up'] : true;
options['mid'] =
typeof options['mid'] !== 'undefined' ? options['mid'] : true;
options['down'] =
typeof options['down'] !== 'undefined' ? options['down'] : true;
options['size'] =
typeof options['size'] !== 'undefined' ? options['size'] : 'maxi';
text = text.split('');
for (l in text) {
if (isChar(l)) {
continue;
}
result = result + text[l];
counts = {'up': 0, 'down': 0, 'mid': 0};
switch (options.size) {
case 'mini':
counts.up = randomNumber(8);
counts.mid = randomNumber(2);
counts.down = randomNumber(8);
break;
case 'maxi':
counts.up = randomNumber(16) + 3;
counts.mid = randomNumber(4) + 1;
counts.down = randomNumber(64) + 3;
break;
default:
counts.up = randomNumber(8) + 1;
counts.mid = randomNumber(6) / 2;
counts.down = randomNumber(8) + 1;
break;
}
var arr = ['up', 'mid', 'down'];
for (var d in arr) {
var index = arr[d];
for (var i = 0; i <= counts[index]; i++) {
if (options[index]) {
result = result + soul[index][randomNumber(soul[index].length)];
}
}
}
}
return result;
}
// don't summon him
return heComes(text, options);
};

View file

@ -0,0 +1,110 @@
var colors = require('./colors');
module['exports'] = function() {
//
// Extends prototype of native string object to allow for "foo".red syntax
//
var addProperty = function(color, func) {
String.prototype.__defineGetter__(color, func);
};
addProperty('strip', function() {
return colors.strip(this);
});
addProperty('stripColors', function() {
return colors.strip(this);
});
addProperty('trap', function() {
return colors.trap(this);
});
addProperty('zalgo', function() {
return colors.zalgo(this);
});
addProperty('zebra', function() {
return colors.zebra(this);
});
addProperty('rainbow', function() {
return colors.rainbow(this);
});
addProperty('random', function() {
return colors.random(this);
});
addProperty('america', function() {
return colors.america(this);
});
//
// Iterate through all default styles and colors
//
var x = Object.keys(colors.styles);
x.forEach(function(style) {
addProperty(style, function() {
return colors.stylize(this, style);
});
});
function applyTheme(theme) {
//
// Remark: This is a list of methods that exist
// on String that you should not overwrite.
//
var stringPrototypeBlacklist = [
'__defineGetter__', '__defineSetter__', '__lookupGetter__',
'__lookupSetter__', 'charAt', 'constructor', 'hasOwnProperty',
'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString',
'valueOf', 'charCodeAt', 'indexOf', 'lastIndexOf', 'length',
'localeCompare', 'match', 'repeat', 'replace', 'search', 'slice',
'split', 'substring', 'toLocaleLowerCase', 'toLocaleUpperCase',
'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight',
];
Object.keys(theme).forEach(function(prop) {
if (stringPrototypeBlacklist.indexOf(prop) !== -1) {
console.log('warn: '.red + ('String.prototype' + prop).magenta +
' is probably something you don\'t want to override. ' +
'Ignoring style name');
} else {
if (typeof(theme[prop]) === 'string') {
colors[prop] = colors[theme[prop]];
addProperty(prop, function() {
return colors[prop](this);
});
} else {
var themePropApplicator = function(str) {
var ret = str || this;
for (var t = 0; t < theme[prop].length; t++) {
ret = colors[theme[prop][t]](ret);
}
return ret;
};
addProperty(prop, themePropApplicator);
colors[prop] = function(str) {
return themePropApplicator(str);
};
}
}
});
}
colors.setTheme = function(theme) {
if (typeof theme === 'string') {
console.log('colors.setTheme now only accepts an object, not a string. ' +
'If you are trying to set a theme from a file, it is now your (the ' +
'caller\'s) responsibility to require the file. The old syntax ' +
'looked like colors.setTheme(__dirname + ' +
'\'/../themes/generic-logging.js\'); The new syntax looks like '+
'colors.setTheme(require(__dirname + ' +
'\'/../themes/generic-logging.js\'));');
return;
} else {
applyTheme(theme);
}
};
};

View file

@ -0,0 +1,13 @@
var colors = require('./colors');
module['exports'] = colors;
// Remark: By default, colors will add style properties to String.prototype.
//
// If you don't wish to extend String.prototype, you can do this instead and
// native String will not be touched:
//
// var colors = require('@colors/colors/safe');
// colors.red("foo")
//
//
require('./extendStringPrototype')();

View file

@ -0,0 +1,10 @@
module['exports'] = function(colors) {
return function(letter, i, exploded) {
if (letter === ' ') return letter;
switch (i%3) {
case 0: return colors.red(letter);
case 1: return colors.white(letter);
case 2: return colors.blue(letter);
}
};
};

View file

@ -0,0 +1,12 @@
module['exports'] = function(colors) {
// RoY G BiV
var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta'];
return function(letter, i, exploded) {
if (letter === ' ') {
return letter;
} else {
return colors[rainbowColors[i++ % rainbowColors.length]](letter);
}
};
};

View file

@ -0,0 +1,11 @@
module['exports'] = function(colors) {
var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green',
'blue', 'white', 'cyan', 'magenta', 'brightYellow', 'brightRed',
'brightGreen', 'brightBlue', 'brightWhite', 'brightCyan', 'brightMagenta'];
return function(letter, i, exploded) {
return letter === ' ' ? letter :
colors[
available[Math.round(Math.random() * (available.length - 2))]
](letter);
};
};

View file

@ -0,0 +1,5 @@
module['exports'] = function(colors) {
return function(letter, i, exploded) {
return i % 2 === 0 ? letter : colors.inverse(letter);
};
};

View file

@ -0,0 +1,95 @@
/*
The MIT License (MIT)
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
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.
*/
var styles = {};
module['exports'] = styles;
var codes = {
reset: [0, 0],
bold: [1, 22],
dim: [2, 22],
italic: [3, 23],
underline: [4, 24],
inverse: [7, 27],
hidden: [8, 28],
strikethrough: [9, 29],
black: [30, 39],
red: [31, 39],
green: [32, 39],
yellow: [33, 39],
blue: [34, 39],
magenta: [35, 39],
cyan: [36, 39],
white: [37, 39],
gray: [90, 39],
grey: [90, 39],
brightRed: [91, 39],
brightGreen: [92, 39],
brightYellow: [93, 39],
brightBlue: [94, 39],
brightMagenta: [95, 39],
brightCyan: [96, 39],
brightWhite: [97, 39],
bgBlack: [40, 49],
bgRed: [41, 49],
bgGreen: [42, 49],
bgYellow: [43, 49],
bgBlue: [44, 49],
bgMagenta: [45, 49],
bgCyan: [46, 49],
bgWhite: [47, 49],
bgGray: [100, 49],
bgGrey: [100, 49],
bgBrightRed: [101, 49],
bgBrightGreen: [102, 49],
bgBrightYellow: [103, 49],
bgBrightBlue: [104, 49],
bgBrightMagenta: [105, 49],
bgBrightCyan: [106, 49],
bgBrightWhite: [107, 49],
// legacy styles for colors pre v1.0.0
blackBG: [40, 49],
redBG: [41, 49],
greenBG: [42, 49],
yellowBG: [43, 49],
blueBG: [44, 49],
magentaBG: [45, 49],
cyanBG: [46, 49],
whiteBG: [47, 49],
};
Object.keys(codes).forEach(function(key) {
var val = codes[key];
var style = styles[key] = [];
style.open = '\u001b[' + val[0] + 'm';
style.close = '\u001b[' + val[1] + 'm';
});

View file

@ -0,0 +1,35 @@
/*
MIT License
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
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.
*/
'use strict';
module.exports = function(flag, argv) {
argv = argv || process.argv || [];
var terminatorPos = argv.indexOf('--');
var prefix = /^-{1,2}/.test(flag) ? '' : '--';
var pos = argv.indexOf(prefix + flag);
return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);
};

View file

@ -0,0 +1,151 @@
/*
The MIT License (MIT)
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
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.
*/
'use strict';
var os = require('os');
var hasFlag = require('./has-flag.js');
var env = process.env;
var forceColor = void 0;
if (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false')) {
forceColor = false;
} else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true')
|| hasFlag('color=always')) {
forceColor = true;
}
if ('FORCE_COLOR' in env) {
forceColor = env.FORCE_COLOR.length === 0
|| parseInt(env.FORCE_COLOR, 10) !== 0;
}
function translateLevel(level) {
if (level === 0) {
return false;
}
return {
level: level,
hasBasic: true,
has256: level >= 2,
has16m: level >= 3,
};
}
function supportsColor(stream) {
if (forceColor === false) {
return 0;
}
if (hasFlag('color=16m') || hasFlag('color=full')
|| hasFlag('color=truecolor')) {
return 3;
}
if (hasFlag('color=256')) {
return 2;
}
if (stream && !stream.isTTY && forceColor !== true) {
return 0;
}
var min = forceColor ? 1 : 0;
if (process.platform === 'win32') {
// Node.js 7.5.0 is the first version of Node.js to include a patch to
// libuv that enables 256 color output on Windows. Anything earlier and it
// won't work. However, here we target Node.js 8 at minimum as it is an LTS
// release, and Node.js 7 is not. Windows 10 build 10586 is the first
// Windows release that supports 256 colors. Windows 10 build 14931 is the
// first release that supports 16m/TrueColor.
var osRelease = os.release().split('.');
if (Number(process.versions.node.split('.')[0]) >= 8
&& Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
return Number(osRelease[2]) >= 14931 ? 3 : 2;
}
return 1;
}
if ('CI' in env) {
if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(function(sign) {
return sign in env;
}) || env.CI_NAME === 'codeship') {
return 1;
}
return min;
}
if ('TEAMCITY_VERSION' in env) {
return (/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0
);
}
if ('TERM_PROGRAM' in env) {
var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
switch (env.TERM_PROGRAM) {
case 'iTerm.app':
return version >= 3 ? 3 : 2;
case 'Hyper':
return 3;
case 'Apple_Terminal':
return 2;
// No default
}
}
if (/-256(color)?$/i.test(env.TERM)) {
return 2;
}
if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
return 1;
}
if ('COLORTERM' in env) {
return 1;
}
if (env.TERM === 'dumb') {
return min;
}
return min;
}
function getSupportLevel(stream) {
var level = supportsColor(stream);
return translateLevel(level);
}
module.exports = {
supportsColor: getSupportLevel,
stdout: getSupportLevel(process.stdout),
stderr: getSupportLevel(process.stderr),
};

View file

@ -0,0 +1,45 @@
{
"name": "@colors/colors",
"description": "get colors in your node.js console",
"version": "1.6.0",
"author": "DABH",
"contributors": [
{
"name": "DABH",
"url": "https://github.com/DABH"
}
],
"homepage": "https://github.com/DABH/colors.js",
"bugs": "https://github.com/DABH/colors.js/issues",
"keywords": [
"ansi",
"terminal",
"colors"
],
"repository": {
"type": "git",
"url": "http://github.com/DABH/colors.js.git"
},
"license": "MIT",
"scripts": {
"lint": "eslint . --fix",
"test": "export FORCE_COLOR=1 && node tests/basic-test.js && node tests/safe-test.js"
},
"engines": {
"node": ">=0.1.90"
},
"main": "lib/index.js",
"files": [
"examples",
"lib",
"LICENSE",
"safe.js",
"themes",
"index.d.ts",
"safe.d.ts"
],
"devDependencies": {
"eslint": "^8.9.0",
"eslint-config-google": "^0.14.0"
}
}

View file

@ -0,0 +1,64 @@
// Type definitions for Colors.js 1.2
// Project: https://github.com/Marak/colors.js
// Definitions by: Bart van der Schoor <https://github.com/Bartvds>, Staffan Eketorp <https://github.com/staeke>
// Definitions: https://github.com/Marak/colors.js
export const enabled: boolean;
export function enable(): void;
export function disable(): void;
export function setTheme(theme: any): void;
export function strip(str: string): string;
export function stripColors(str: string): string;
export function black(str: string): string;
export function red(str: string): string;
export function green(str: string): string;
export function yellow(str: string): string;
export function blue(str: string): string;
export function magenta(str: string): string;
export function cyan(str: string): string;
export function white(str: string): string;
export function gray(str: string): string;
export function grey(str: string): string;
export function brightRed(str: string): string;
export function brightGreen(str: string): string;
export function brightYellow(str: string): string;
export function brightBlue(str: string): string;
export function brightMagenta(str: string): string;
export function brightCyan(str: string): string;
export function brightWhite(str: string): string;
export function bgBlack(str: string): string;
export function bgRed(str: string): string;
export function bgGreen(str: string): string;
export function bgYellow(str: string): string;
export function bgBlue(str: string): string;
export function bgMagenta(str: string): string;
export function bgCyan(str: string): string;
export function bgWhite(str: string): string;
export function bgBrightRed(str: string): string;
export function bgBrightGreen(str: string): string;
export function bgBrightYellow(str: string): string;
export function bgBrightBlue(str: string): string;
export function bgBrightMagenta(str: string): string;
export function bgBrightCyan(str: string): string;
export function bgBrightWhite(str: string): string;
export function reset(str: string): string;
export function bold(str: string): string;
export function dim(str: string): string;
export function italic(str: string): string;
export function underline(str: string): string;
export function inverse(str: string): string;
export function hidden(str: string): string;
export function strikethrough(str: string): string;
export function rainbow(str: string): string;
export function zebra(str: string): string;
export function america(str: string): string;
export function trap(str: string): string;
export function random(str: string): string;
export function zalgo(str: string): string;

View file

@ -0,0 +1,10 @@
//
// Remark: Requiring this file will use the "safe" colors API,
// which will not touch String.prototype.
//
// var colors = require('colors/safe');
// colors.red("foo")
//
//
var colors = require('./lib/colors');
module['exports'] = colors;

View file

@ -0,0 +1,12 @@
module['exports'] = {
silly: 'rainbow',
input: 'grey',
verbose: 'cyan',
prompt: 'grey',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow',
debug: 'blue',
error: 'red',
};

53
node_modules/logform/package.json generated vendored Normal file
View file

@ -0,0 +1,53 @@
{
"name": "logform",
"version": "2.6.1",
"description": "An mutable object-based log format designed for chaining & objectMode streams.",
"main": "index.js",
"browser": "dist/browser.js",
"scripts": {
"lint": "eslint *.js test/*.js examples/*.js --resolve-plugins-relative-to ./node_modules/@dabh/eslint-config-populist",
"pretest": "npm run lint && npm run build",
"test": "nyc mocha test/*.test.js",
"build": "rimraf dist && babel *.js -d ./dist",
"prepublishOnly": "npm run build"
},
"repository": {
"type": "git",
"url": "git+https://github.com/winstonjs/logform.git"
},
"keywords": [
"winston",
"logging",
"format",
"winstonjs"
],
"author": "Charlie Robbins <charlie.robbins@gmail.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/winstonjs/logform/issues"
},
"homepage": "https://github.com/winstonjs/logform#readme",
"dependencies": {
"@colors/colors": "1.6.0",
"@types/triple-beam": "^1.3.2",
"fecha": "^4.2.0",
"ms": "^2.1.1",
"safe-stable-stringify": "^2.3.1",
"triple-beam": "^1.3.0"
},
"devDependencies": {
"@babel/cli": "^7.10.3",
"@babel/core": "^7.10.3",
"@babel/preset-env": "^7.10.3",
"@dabh/eslint-config-populist": "^5.0.0",
"assume": "^2.2.0",
"eslint": "^8.8.0",
"mocha": "^10.0.0",
"nyc": "^15.1.0",
"rimraf": "^5.0.5"
},
"types": "./index.d.ts",
"engines": {
"node": ">= 12.0.0"
}
}

83
node_modules/logform/pad-levels.js generated vendored Normal file
View 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
View 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
View 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
View file

@ -0,0 +1,33 @@
/* eslint no-undefined: 0 */
'use strict';
const format = require('./format');
const { MESSAGE } = require('triple-beam');
const jsonStringify = require('safe-stable-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
View 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
View 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
View 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
View file

@ -0,0 +1,27 @@
'use strict';
const colors = require('@colors/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(String(info.message));
}
if (opts.raw !== false && info[MESSAGE]) {
info[MESSAGE] = colors.strip(String(info[MESSAGE]));
}
return info;
});