├── .gitignore ├── .npmignore ├── .prettierrc ├── CHANGELOG.md ├── README.md ├── icon.png ├── index.js ├── package.json ├── plugin.server.js ├── utils.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | icon.png -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true, 4 | "printWidth": 100 5 | } 6 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 | 8 | ## [Unreleased] 9 | 10 | - ... 11 | 12 | ## [v1.2.0] - 11-4-2020 13 | ### Added 14 | - Added ability to avoid filesystem access in non-filesystem based logging setups using `autoCreateLogPath` and `useDefaultLogger` options. Documented in README.md (usage items #3 and #4). 15 | - Example in your apps `nuxt.config.js`: 16 | ```js 17 | // ... 18 | winstonLog: { 19 | autoCreateLogPath: false, 20 | useDefaultLogger: false, 21 | loggerOptions: { 22 | format: combine( 23 | label({ label: 'Custom Nuxt logging!' }), 24 | timestamp(), 25 | prettyPrint() 26 | ), 27 | transports: [new transports.Console()] 28 | } 29 | } 30 | // ... 31 | ``` 32 | - Added ability to remove default request and error middleware handlers. Use the `skipRequestMiddlewareHandler` and `skipErrorMiddlewareHandler` options to skip the registration of these. Documented in README.md. 33 | 34 | ### Changed 35 | - Updated README w/ information on new features 36 | 37 | ## [v1.1.1] - 11-4-2020 38 | ### Changed 39 | - Bumped deps 40 | 41 | ## [v1.1.0] - 4-13-2020 42 | ### Added 43 | - Added reference to winston logger instance from Nuxt `context` object. Access via `context.$winstonLog` from within `asyncData`, `nuxtServerInit`, or other Nuxt lifecyle areas that receive a `context` object. 44 | - Learn more about the `context` object here: https://nuxtjs.org/api/context 45 | - Added support for passing options to module via inline module options in `nuxt.config.js` 46 | - For example: 47 | ```js 48 | // ... 49 | modules: [ 50 | ['nuxt-winston-log', { logName: 'special-logs.log' }] 51 | ] 52 | // ... 53 | ``` 54 | 55 | ### Changed 56 | - Updated README w/ information on new `$winstonLog` key in Nuxt `context` objects 57 | 58 | ## [v1.0.1] - 12-20-2019 59 | ### Removed 60 | - Remove stale devDeps 61 | 62 | ## [v1.0.1] - 12-20-2019 63 | ### Changed 64 | - Update README 65 | ### Removed 66 | - Cleanup now-defunct `capturePath` option 67 | 68 | ## [v1.0.0] - 12-20-2019 69 | ### Removed 70 | - Remove client side capturing feature. This is best replicated with something like the new [Browser Log Collection features](https://docs.datadoghq.com/logs/log_collection/javascript/?tab=us) in Datadog 71 | ### Changed 72 | - Update reqInfo writes to be more succinct 73 | - Improve stack trace passthrough for error captures 74 | - Filter out internal requests to `~/_nuxt/*` assets in access logs 75 | - Filter out non-HTML and non-JSON requests in access logs 76 | 77 | ## [v0.1.0] - 5-11-2019 78 | ### Removed 79 | - Remove `serialize-error` dependency for IE 11 browser compat 80 | 81 | ## [v0.0.6] - 5-26-2019 82 | ### Changed 83 | - Readme fix for new logo path 84 | 85 | ## [v0.0.3] - 5-26-2019 86 | ### Added 87 | - Add a logo, but ignore it from NPM package. No logo for you! 88 | 89 | ## [v0.0.2] - 5-26-2019 90 | ### Added 91 | - Add readme and a changelog 92 | - Add web URLs to `./package.json` 93 | 94 | ## [v0.0.1] - 5-17-2019 95 | ### Added 96 | - Initial bits! 🎉 97 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nuxt-winston-log 2 | 3 | A Nuxt `2.x` module to add [winston](https://github.com/winstonjs/winston)-powered logging to your Nuxt application. 4 | 5 | * **Works with**: Nuxt `@2.x` projects running on a server (e.g. universal, SSR mode). 6 | * **Does not support**: Statically generated Nuxt projects (i.e. SSG via `nuxt generate`). 7 | 8 | Winston + Nuxt logo 9 | 10 | # Introduction 11 | 12 | By default the following events are captured: 13 | 14 | 1. `error` level: SSR errors via Nuxt middleware hooks 15 | 3. `info` level: Basic access logs for `serverMiddleware` endpoints + pages in your Nuxt app 16 | 17 | All logs captured include a bit of additional metadata pulled from the [Node.js `request` object](https://nodejs.org/dist/latest-v10.x/docs/api/http.html#http_class_http_incomingmessage): 18 | 19 | ```js 20 | { 21 | url: 'https://cool.net', 22 | method: 'GET', 23 | headers: { 24 | 'X-Plumbus': "36f7b241-2910-4439-8671-749fc77dc213" 25 | } 26 | } 27 | ``` 28 | 29 | Logs are output at `./logs/{NODE_ENV}.log` by default. They are created in [JSON Lines](http://jsonlines.org/) format. 30 | 31 | # Installation 32 | 33 | 1. Install npm package 34 | 35 | ```sh 36 | $ yarn add nuxt-winston-log # or npm i nuxt-winston-log 37 | ``` 38 | 39 | 2. Edit your `nuxt.config.js` file to add module 40 | 41 | ```js 42 | { 43 | modules: ['nuxt-winston-log'] 44 | } 45 | ``` 46 | 47 | 3. Change options using the `winstonLog` key as needed. See Usage section for details. 48 | 49 | # Usage 50 | 51 | 1. By default, `nuxt-winston-log` exposes some basic options for common needs. Internally, these options are used to create a basic [Logger instance](https://github.com/winstonjs/winston#creating-your-own-logger) and wire up middleware. 52 | 53 | The default values are: 54 | 55 | ```js 56 | // ... 57 | { 58 | // Path that log files will be created in. 59 | // Change this to keep things neat. 60 | logPath: './logs', 61 | 62 | // Name of log file. 63 | // Change this to keep things tidy. 64 | logName: `${process.env.NODE_ENV}.log`, 65 | 66 | // Setting to determine if filesystem is accessed to auto-create logPath. 67 | // Set this to `false` for non-filesystem based logging setups. 68 | autoCreateLogPath: true, 69 | 70 | // Setting to determine if default logger instance is created for you. 71 | // Set this to `false` and provide `loggerOptions` (usage item #3) to 72 | // completely customize the logger instance (formatting, transports, etc.) 73 | useDefaultLogger: true, 74 | 75 | // Settings to determine if default handlers should be 76 | // registered for requests and errors respectively. 77 | // Set to `true` to skip request logging (level: info). 78 | skipRequestMiddlewareHandler: false, 79 | // Set to `true` to skip error logging (level: error). 80 | skipErrorMiddlewareHandler: false 81 | } 82 | // ... 83 | ``` 84 | 85 | 2. To customize the [File Transport instance](https://github.com/winstonjs/winston/blob/master/docs/transports.md#file-transport), pass options to the `transportOptions` key: 86 | 87 | Example in your apps `~/nuxt.config.js` file: 88 | ```js 89 | import path from 'path' 90 | const logfilePath = path.resolve(process.cwd(), './logs', `${process.env.NODE_ENV}.log`) 91 | 92 | export default { 93 | // Configure nuxt-winston-log module 94 | winstonLog: { 95 | transportOptions: { 96 | filename: logfilePath 97 | } 98 | } 99 | } 100 | ``` 101 | 102 | 3. To customize the [Logger instance](https://github.com/winstonjs/winston#creating-your-own-logger), set `useDefaultLogger` option to `false`, and make sure you provide a custom set of `loggerOptions` to be passed to [Winston's `createLogger`](https://github.com/winstonjs/winston#creating-your-own-logger) under the hood: 103 | 104 | Example in your apps `~/nuxt.config.js` file: 105 | ```js 106 | // Note imports from winston core for transports, formatting helpers, etc. 107 | import { format, transports } from 'winston' 108 | const { combine, timestamp, label, prettyPrint } = format 109 | 110 | export default { 111 | // Configure nuxt-winston-log module 112 | winstonLog: { 113 | useDefaultLogger: false, 114 | loggerOptions: { 115 | format: combine( 116 | label({ label: 'Custom Nuxt logging!' }), 117 | timestamp(), 118 | prettyPrint() 119 | ), 120 | transports: [new transports.Console()] 121 | } 122 | } 123 | } 124 | ``` 125 | 126 | 4. To disable automatic creation of the `logPath` directory, set `autoCreateLogPath` option to `false`: 127 | 128 | Example in your apps `~/nuxt.config.js` file: 129 | ```js 130 | // ... 131 | export default { 132 | // Configure nuxt-winston-log module 133 | winstonLog: { 134 | autoCreateLogPath: false 135 | } 136 | } 137 | // ... 138 | ``` 139 | 140 | 5. To access the winston logger instance from within Nuxt lifecycle areas, use the `$winstonLog` key from the Nuxt `context` object. **Note:** This is only available for server-side executions. For example, because `asyncData` is an isomorphic function in Nuxt, you will need to guard `$winstonLog` access with something like `if (process.server) { ... }` 141 | 142 | Example `nuxtServerInit` in your apps `~/store/index.js`: 143 | ```js 144 | // ... 145 | export const actions = { 146 | async nuxtServerInit({ store, commit }, { req, $winstonLog }) { 147 | $winstonLog.info(`x-forwarded-host: ${req.headers['x-forwarded-host']}`) 148 | } 149 | } 150 | // ... 151 | ``` 152 | 153 | Example `asyncData` in your apps `~/pages/somepage.vue`: 154 | ```js 155 | // ... 156 | asyncData(context) { 157 | if (process.server) { 158 | context.$winstonLog.info('Hello from asyncData on server') 159 | } 160 | } 161 | // ... 162 | ``` 163 | 164 | 6. To disable default request and error logging behaviors, the `skipRequestMiddlewareHandler` and `skipErrorMiddlewareHandler` options can be set to `true`. For more information on what these handlers do out of the box, see the source at the [bottom of the `~/index.js` file](https://github.com/aaronransley/nuxt-winston-log/blob/master/index.js#L58-L89). 165 | 166 | Example in your apps `~/nuxt.config.js` file: 167 | ```js 168 | // ... 169 | export default { 170 | // Configure nuxt-winston-log module 171 | winstonLog: { 172 | skipRequestMiddlewareHandler: true, 173 | skipErrorMiddlewareHandler: true 174 | } 175 | } 176 | // ... 177 | ``` 178 | 179 | Adding your own middleware handlers to Nuxt is outside the scope of this documentation, but can be accomplished using [a custom module of your own](https://nuxtjs.org/docs/2.x/directory-structure/modules#write-your-own-module). 180 | 181 | # Using `process.winstonLog` in a Nuxt Module 182 | 183 | Because modules are executed sequentially, any additional [Nuxt modules](https://nuxtjs.org/docs/2.x/directory-structure/modules#write-your-own-module) should be loaded _after the `nuxt-winston-log` module_. You can then access the logger instance via `process.winstonLog` as needed. 184 | 185 | # [Changelog](./CHANGELOG.md) 186 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronransley/nuxt-winston-log/f7f4d707b2f2c0ba4dfc6727ebeb0afb383cddd0/icon.png -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import { resolve } from 'path' 2 | import { createLogger, format, transports } from 'winston' 3 | import { 4 | checkHeadersAccepts, 5 | checkHeadersContentType, 6 | extractReqInfo, 7 | mkdirIfNotExists, 8 | } from './utils' 9 | 10 | const pkg = require('./package.json') 11 | const { combine, timestamp, json, errors } = format 12 | 13 | module.exports = function WinstonLog(moduleOptions = {}) { 14 | const winstonOptions = { 15 | logPath: './logs', 16 | logName: `${process.env.NODE_ENV}.log`, 17 | autoCreateLogPath: true, 18 | useDefaultLogger: true, 19 | skipRequestMiddlewareHandler: false, 20 | skipErrorMiddlewareHandler: false, 21 | ...this.options.winstonLog, 22 | ...moduleOptions, 23 | } 24 | 25 | if (winstonOptions.autoCreateLogPath) { 26 | mkdirIfNotExists(resolve(process.cwd(), winstonOptions.logPath)) 27 | } 28 | 29 | let logger 30 | 31 | if (winstonOptions.useDefaultLogger) { 32 | logger = createLogger({ 33 | exitOnError: false, 34 | format: combine(timestamp(), errors({ stack: true }), json()), 35 | transports: [ 36 | new transports.File({ 37 | filename: resolve(winstonOptions.logPath, winstonOptions.logName), 38 | ...winstonOptions.transportOptions, 39 | }), 40 | ], 41 | ...winstonOptions.loggerOptions, 42 | }) 43 | } else { 44 | logger = createLogger(winstonOptions.loggerOptions) 45 | } 46 | 47 | // Persist a reference to Winston logger instance. 48 | // This is injected by `~/plugin.server.js` for use via Nuxt context objects 49 | process.winstonLog = logger 50 | 51 | // Add serverside-only plugin 52 | this.addPlugin({ 53 | src: resolve(__dirname, 'plugin.server.js'), 54 | fileName: 'plugin.server.js', 55 | mode: 'server', 56 | }) 57 | 58 | if (winstonOptions.skipRequestMiddlewareHandler !== true) { 59 | this.nuxt.hook('render:setupMiddleware', (app) => 60 | app.use((req, res, next) => { 61 | const reqInfo = extractReqInfo(req) 62 | const isHtmlOrJson = 63 | checkHeadersAccepts(reqInfo.headers, ['text/html', 'application/xhtml']) || 64 | checkHeadersContentType(reqInfo.headers, ['application/json']) 65 | const isInternalNuxtRequest = reqInfo.url && reqInfo.url.includes('/_nuxt/') 66 | 67 | if (isHtmlOrJson && !isInternalNuxtRequest) { 68 | logger.info(`Accessed ${req.url}`, { 69 | ...reqInfo, 70 | }) 71 | } 72 | next() 73 | }) 74 | ) 75 | } 76 | 77 | if (winstonOptions.skipErrorMiddlewareHandler !== true) { 78 | this.nuxt.hook('render:errorMiddleware', (app) => 79 | app.use((err, req, res, next) => { 80 | const newError = new Error(err) 81 | newError.stack = err.stack 82 | logger.error(newError, { 83 | ...extractReqInfo(req), 84 | }) 85 | next(err) 86 | }) 87 | ) 88 | } 89 | } 90 | 91 | module.exports.meta = pkg 92 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nuxt-winston-log", 3 | "version": "1.2.0", 4 | "description": "Enable logging to Winston in your Nuxt application", 5 | "main": "index.js", 6 | "author": "Aaron Ransley (https://aaronransley.com)", 7 | "homepage": "https://github.com/aaronransley/nuxt-winston-log", 8 | "repository": "github:aaronransley/nuxt-winston-log", 9 | "contributors": [ 10 | "Charlie Pitkin", 11 | "FINE, A Brand Agency (https://wearefine.com)" 12 | ], 13 | "license": "MIT", 14 | "dependencies": { 15 | "vue": "^2.6.12", 16 | "winston": "^3.3.3" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /plugin.server.js: -------------------------------------------------------------------------------- 1 | export default function (ctx, inject) { 2 | // Inject winston logger instance to the Nuxt context as $winstonLog 3 | ctx.$winstonLog = process.winstonLog || {} 4 | } 5 | -------------------------------------------------------------------------------- /utils.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | 3 | export function extractReqInfo(req) { 4 | return { 5 | url: req.url, 6 | method: req.method, 7 | headers: req.headers 8 | } 9 | } 10 | 11 | export function mkdirIfNotExists(dir) { 12 | if (!fs.existsSync(dir)) { 13 | fs.mkdirSync(dir) 14 | } 15 | } 16 | 17 | export function checkHeadersAccepts(headers, accepted) { 18 | const hasAcceptHeaders = headers.accept 19 | if (hasAcceptHeaders) { 20 | return accepted.some(x => headers.accept.includes(x)) 21 | } 22 | return false 23 | } 24 | 25 | export function checkHeadersContentType(headers, contentTypes) { 26 | const hasContentType = headers['content-type'] 27 | if (hasContentType) { 28 | return contentTypes.some(x => headers['content-type'].includes(x)) 29 | } 30 | return false 31 | } 32 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@dabh/diagnostics@^2.0.2": 6 | version "2.0.2" 7 | resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" 8 | integrity sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q== 9 | dependencies: 10 | colorspace "1.1.x" 11 | enabled "2.0.x" 12 | kuler "^2.0.0" 13 | 14 | async@^3.1.0: 15 | version "3.2.0" 16 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" 17 | integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== 18 | 19 | color-convert@^1.9.1: 20 | version "1.9.3" 21 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 22 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 23 | dependencies: 24 | color-name "1.1.3" 25 | 26 | color-name@1.1.3: 27 | version "1.1.3" 28 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 29 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 30 | 31 | color-name@^1.0.0: 32 | version "1.1.4" 33 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 34 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 35 | 36 | color-string@^1.5.2: 37 | version "1.5.3" 38 | resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" 39 | integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== 40 | dependencies: 41 | color-name "^1.0.0" 42 | simple-swizzle "^0.2.2" 43 | 44 | color@3.0.x: 45 | version "3.0.0" 46 | resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" 47 | integrity sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w== 48 | dependencies: 49 | color-convert "^1.9.1" 50 | color-string "^1.5.2" 51 | 52 | colors@^1.2.1: 53 | version "1.4.0" 54 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" 55 | integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== 56 | 57 | colorspace@1.1.x: 58 | version "1.1.2" 59 | resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5" 60 | integrity sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ== 61 | dependencies: 62 | color "3.0.x" 63 | text-hex "1.0.x" 64 | 65 | core-util-is@~1.0.0: 66 | version "1.0.2" 67 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 68 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 69 | 70 | enabled@2.0.x: 71 | version "2.0.0" 72 | resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" 73 | integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== 74 | 75 | fast-safe-stringify@^2.0.4: 76 | version "2.0.7" 77 | resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" 78 | integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== 79 | 80 | fecha@^4.2.0: 81 | version "4.2.0" 82 | resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.0.tgz#3ffb6395453e3f3efff850404f0a59b6747f5f41" 83 | integrity sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg== 84 | 85 | fn.name@1.x.x: 86 | version "1.1.0" 87 | resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" 88 | integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== 89 | 90 | inherits@^2.0.3, inherits@~2.0.3: 91 | version "2.0.4" 92 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 93 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 94 | 95 | is-arrayish@^0.3.1: 96 | version "0.3.2" 97 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" 98 | integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== 99 | 100 | is-stream@^2.0.0: 101 | version "2.0.0" 102 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" 103 | integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== 104 | 105 | isarray@~1.0.0: 106 | version "1.0.0" 107 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 108 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 109 | 110 | kuler@^2.0.0: 111 | version "2.0.0" 112 | resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" 113 | integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== 114 | 115 | logform@^2.2.0: 116 | version "2.2.0" 117 | resolved "https://registry.yarnpkg.com/logform/-/logform-2.2.0.tgz#40f036d19161fc76b68ab50fdc7fe495544492f2" 118 | integrity sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg== 119 | dependencies: 120 | colors "^1.2.1" 121 | fast-safe-stringify "^2.0.4" 122 | fecha "^4.2.0" 123 | ms "^2.1.1" 124 | triple-beam "^1.3.0" 125 | 126 | ms@^2.1.1: 127 | version "2.1.2" 128 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 129 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 130 | 131 | one-time@^1.0.0: 132 | version "1.0.0" 133 | resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" 134 | integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== 135 | dependencies: 136 | fn.name "1.x.x" 137 | 138 | process-nextick-args@~2.0.0: 139 | version "2.0.1" 140 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 141 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 142 | 143 | readable-stream@^2.3.7: 144 | version "2.3.7" 145 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 146 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 147 | dependencies: 148 | core-util-is "~1.0.0" 149 | inherits "~2.0.3" 150 | isarray "~1.0.0" 151 | process-nextick-args "~2.0.0" 152 | safe-buffer "~5.1.1" 153 | string_decoder "~1.1.1" 154 | util-deprecate "~1.0.1" 155 | 156 | readable-stream@^3.4.0: 157 | version "3.6.0" 158 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 159 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 160 | dependencies: 161 | inherits "^2.0.3" 162 | string_decoder "^1.1.1" 163 | util-deprecate "^1.0.1" 164 | 165 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 166 | version "5.1.2" 167 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 168 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 169 | 170 | safe-buffer@~5.2.0: 171 | version "5.2.0" 172 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 173 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 174 | 175 | simple-swizzle@^0.2.2: 176 | version "0.2.2" 177 | resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" 178 | integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= 179 | dependencies: 180 | is-arrayish "^0.3.1" 181 | 182 | stack-trace@0.0.x: 183 | version "0.0.10" 184 | resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" 185 | integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= 186 | 187 | string_decoder@^1.1.1: 188 | version "1.3.0" 189 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 190 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 191 | dependencies: 192 | safe-buffer "~5.2.0" 193 | 194 | string_decoder@~1.1.1: 195 | version "1.1.1" 196 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 197 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 198 | dependencies: 199 | safe-buffer "~5.1.0" 200 | 201 | text-hex@1.0.x: 202 | version "1.0.0" 203 | resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" 204 | integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== 205 | 206 | triple-beam@^1.2.0, triple-beam@^1.3.0: 207 | version "1.3.0" 208 | resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" 209 | integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== 210 | 211 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 212 | version "1.0.2" 213 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 214 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 215 | 216 | vue@^2.6.12: 217 | version "2.6.12" 218 | resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123" 219 | integrity sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg== 220 | 221 | winston-transport@^4.4.0: 222 | version "4.4.0" 223 | resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59" 224 | integrity sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw== 225 | dependencies: 226 | readable-stream "^2.3.7" 227 | triple-beam "^1.2.0" 228 | 229 | winston@^3.3.3: 230 | version "3.3.3" 231 | resolved "https://registry.yarnpkg.com/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" 232 | integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw== 233 | dependencies: 234 | "@dabh/diagnostics" "^2.0.2" 235 | async "^3.1.0" 236 | is-stream "^2.0.0" 237 | logform "^2.2.0" 238 | one-time "^1.0.0" 239 | readable-stream "^3.4.0" 240 | stack-trace "0.0.x" 241 | triple-beam "^1.3.0" 242 | winston-transport "^4.4.0" 243 | --------------------------------------------------------------------------------