@autofleet/node-common 1.0.9 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintrc.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": [
3
+ "airbnb/base"
4
+ ],
5
+ "env": {
6
+ "jest": true
7
+ },
8
+ "rules": {
9
+ "semi": ["error", "never"]
10
+ }
11
+ }
package/logger/example.js CHANGED
@@ -1,4 +1,6 @@
1
1
  const logger = require('./index')('debug')
2
+
2
3
  logger.info('it is working')
3
4
  logger.error('errors displayed in logs/error.log')
4
- logger.debug('debug with object', {a: 5})
5
+ logger.debug('debug with object', { a: 5 })
6
+ logger.debug('debug with 2 objects', { 1: { a: 5 }, 2: { b: 2 } })
package/logger/index.js CHANGED
@@ -1,32 +1,55 @@
1
- require('dotenv').config();
2
- const winston = require('winston')
1
+ const { createLogger, transports, format } = require('winston')
2
+
3
+ const { combine, timestamp, printf } = format
4
+
5
+ require('dotenv').config()
6
+
3
7
  const { env } = process
4
8
 
5
9
  const getLevel = (logLevel) => {
6
10
  if (logLevel) return logLevel
7
- if (env.LOG_LEVEL) return env.LOG_LEVEL
8
- if (env.NODE_ENV === 'development') return 'debug'
11
+ if (env.LOG_LEVEL) return env.LOG_LEVEL
12
+ if (env.NODE_ENV === 'development') return 'debug'
9
13
  // test and producion will return info
10
14
  return 'info'
11
15
  }
12
16
 
13
17
  const getTransporters = () => {
14
- let transporters = [new winston.transports.Console()]
18
+ const consoleTrasporter = new transports.Console()
19
+ let transporters = [consoleTrasporter]
15
20
  if (env.USE_LOG_FILES === 'true') {
16
21
  transporters = transporters.concat([
17
- new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
18
- new winston.transports.File({ filename: 'logs/all.log' })
22
+ new transports.File({ filename: 'logs/error.log', level: 'error' }),
23
+ new transports.File({ filename: 'logs/all.log' }),
19
24
  ])
20
25
  }
21
26
  return transporters
22
27
  }
23
28
 
24
- const createLogger = (level, transporters) => {
25
- const logger = winston.createLogger({
29
+ const newLogger = (level, transporters) => {
30
+ const customFormat = printf((info) => {
31
+ const level = info.level
32
+ const message = info.message
33
+ const timestamp = info.timestamp
34
+ delete info.level
35
+ delete info.message
36
+ delete info.timestamp
37
+ const params = JSON.stringify(info, null, 2)
38
+ return `${level}: ${message} ${timestamp} \n ${params} \n *****************`
39
+ })
40
+
41
+ const logger = createLogger({
42
+ format: combine(
43
+ format.colorize(),
44
+ // format.json(),
45
+ format.simple(),
46
+ // prettyPrint(),
47
+ timestamp(),
48
+ customFormat,
49
+ ),
26
50
  level,
27
- format: winston.format.simple(),
28
- transports: transporters
29
- });
51
+ transports: transporters,
52
+ })
30
53
 
31
54
  return logger
32
55
  }
@@ -34,7 +57,8 @@ const createLogger = (level, transporters) => {
34
57
  const getLogger = (logLevel) => {
35
58
  const level = getLevel(logLevel)
36
59
  const transporters = getTransporters()
37
- return createLogger(level, transporters)
60
+ return newLogger(level, transporters)
38
61
  }
39
62
 
40
- module.exports = getLogger
63
+ module.exports = getLogger
64
+
@@ -1,57 +1,65 @@
1
1
  const Logger = require('./index')
2
- const fs = require('fs');
3
- const wait = require('wait-promise');
2
+ const fs = require('fs')
3
+ const wait = require('wait-promise')
4
4
 
5
5
  const { env } = process
6
6
 
7
- const waitForFileToHaveContent = (filePath) => {
8
- return wait.limit(30).until(() => {
9
- if(fs.existsSync(filePath)) {
10
- const content = fs.readFileSync(filePath, 'utf8');
11
- return content != ''
12
- }
13
- return false
14
- })
7
+ const deleteLogFile = (filePath) => {
8
+ const dir = 'logs'
9
+ if (!fs.existsSync(dir)) {
10
+ fs.mkdirSync(dir)
11
+ }
12
+ if (fs.existsSync(filePath)) {
13
+ fs.unlinkSync(filePath)
14
+ }
15
15
  }
16
16
 
17
+ const waitForFileToHaveContent = (filePath => wait.limit(30).until(() => {
18
+ if (fs.existsSync(filePath)) {
19
+ const content = fs.readFileSync(filePath, 'utf8')
20
+ return content !== ''
21
+ }
22
+ return false
23
+ }))
24
+
17
25
  describe('Logger', () => {
18
26
  it('it`s default level is info', () => {
19
- env.NODE_ENV=''
27
+ env.NODE_ENV = ''
20
28
  const logger = Logger()
21
- expect(logger).toBeDefined();
22
- expect(logger.level).toBe('info');
29
+ expect(logger).toBeDefined()
30
+ expect(logger.level).toBe('info')
23
31
  })
24
32
 
25
33
  it('its default develpment level is debug', () => {
26
- env.NODE_ENV='development'
34
+ env.NODE_ENV = 'development'
27
35
  const logger = Logger()
28
- expect(logger.level).toBe('debug');
36
+ expect(logger.level).toBe('debug')
29
37
  })
30
38
 
31
39
  it('its default test level is info', () => {
32
- env.NODE_ENV='test'
40
+ env.NODE_ENV = 'test'
33
41
  const logger = Logger()
34
- expect(logger.level).toBe('info');
42
+ expect(logger.level).toBe('info')
35
43
  })
36
44
 
37
45
  it('its default production level is info', () => {
38
- env.NODE_ENV='production'
46
+ env.NODE_ENV = 'production'
39
47
  const logger = Logger()
40
- expect(logger.level).toBe('info');
48
+ expect(logger.level).toBe('info')
41
49
  })
42
50
 
43
51
  it('its level can be override by LOG_LEVEL env variable', () => {
44
- env.NODE_ENV='development'
45
- env.LOG_LEVEL='warn'
52
+ env.NODE_ENV = 'development'
53
+ env.LOG_LEVEL = 'warn'
46
54
  const logger = Logger()
47
- expect(logger.level).toBe('warn');
55
+ expect(logger.level).toBe('warn')
48
56
  })
49
57
 
50
58
  it('its level can be override by function variable', () => {
51
- env.NODE_ENV='production'
52
- env.LOG_LEVEL='warn'
59
+ env.NODE_ENV = 'production'
60
+ env.LOG_LEVEL = 'warn'
53
61
  const logger = Logger('silly')
54
- expect(logger.level).toBe('silly');
62
+ expect(logger.level).toBe('silly')
55
63
  })
56
64
 
57
65
  it('its has functions for each level', () => {
@@ -65,36 +73,36 @@ describe('Logger', () => {
65
73
  })
66
74
 
67
75
  it('it can have general file transporters', async () => {
68
- env.USE_LOG_FILES='true'
76
+ env.USE_LOG_FILES = 'true'
69
77
  const allPath = 'logs/all.log'
70
- fs.unlinkSync(allPath)
78
+ deleteLogFile(allPath)
79
+
71
80
  const logger = Logger()
72
- const errorText = "this is error"
81
+ const errorText = 'this is error'
73
82
  logger.error(errorText)
74
83
 
75
84
  await waitForFileToHaveContent(allPath)
76
85
 
77
86
  expect(fs.existsSync(allPath)).toBe(true)
78
-
79
- const contents = fs.readFileSync(allPath, 'utf8');
87
+
88
+ const contents = fs.readFileSync(allPath, 'utf8')
80
89
  expect(contents).toBe(`error: ${errorText}\n`)
81
90
  })
82
91
 
83
92
  it('it can have general file transporters', async () => {
84
- env.USE_LOG_FILES='true'
85
-
93
+ env.USE_LOG_FILES = 'true'
86
94
  const errorPath = 'logs/error.log'
87
- fs.unlinkSync(errorPath)
95
+ deleteLogFile(errorPath)
96
+
88
97
  expect(fs.existsSync(errorPath)).toBe(false)
89
98
 
90
99
  const logger = Logger()
91
- const errorText = "this is error"
100
+ const errorText = 'this is error'
92
101
  logger.error(errorText)
93
102
 
94
103
  await waitForFileToHaveContent(errorPath)
95
104
 
96
- const contents = fs.readFileSync(errorPath, 'utf8');
105
+ const contents = fs.readFileSync(errorPath, 'utf8')
97
106
  expect(contents).toBe(`error: ${errorText}\n`)
98
107
  })
99
-
100
- });
108
+ })
package/network/index.js CHANGED
@@ -1,11 +1,12 @@
1
- const axios = require('axios');
2
- require('dotenv').config();
1
+ const axios = require('axios')
2
+ const httpAdapter = require('axios/lib/adapters/http')
3
+ require('dotenv').config()
3
4
  /**
4
- * Add support for nock testing
5
+ * Add support for nock testing
5
6
  * see s://github.com/axios/axios/issues/305
6
7
  */
7
8
  if (process.env.NODE_ENV === 'test') {
8
- axios.defaults.adapter = require('axios/lib/adapters/http')
9
+ axios.defaults.adapter = httpAdapter
9
10
  }
10
11
 
11
12
  const HTTPMethods = [
@@ -15,12 +16,12 @@ const HTTPMethods = [
15
16
  'head',
16
17
  'put',
17
18
  'patch',
18
- 'options'
19
+ 'options',
19
20
  ]
20
21
 
21
22
  const defaultSettings = {
22
23
  timeout: 2500,
23
- headers: { 'X-AF-AUTH': 'ANYONE' }
24
+ headers: { 'X-AF-AUTH': 'ANYONE' },
24
25
  }
25
26
 
26
27
  module.exports = class Network {
@@ -38,23 +39,25 @@ module.exports = class Network {
38
39
  }
39
40
 
40
41
  createBaseUrl() {
41
- let settings = this.settings
42
+ const { settings } = this
42
43
  if (settings.serviceUrl) {
43
- settings.baseURL = settings.serviceUrl;
44
+ settings.baseURL = settings.serviceUrl
44
45
  } else if (settings.serviceName) {
45
46
  const envServiceHostName = `${settings.serviceName}_SERVICE_HOST`
46
- settings.baseURL = 'http://' + process.env[envServiceHostName]
47
- if(!settings.baseURL) {
47
+ settings.baseURL = `http://${process.env[envServiceHostName]}`
48
+ if (!settings.baseURL) {
48
49
  throw new Error(`Missing environment variable: ${envServiceHostName}`)
49
50
  }
50
51
  }
51
52
  }
52
-
53
+
53
54
  /**
54
55
  * Build class methods that wrap axios methods
55
56
  */
56
57
  buildClassHttpMethods() {
57
- this.axios = axios.create(this.settings);
58
- HTTPMethods.map((method) => this[method] = (...args) => this.axios[method](...args))
58
+ this.axios = axios.create(this.settings)
59
+ HTTPMethods.forEach((method) => {
60
+ this[method] = (...args) => this.axios[method](...args)
61
+ })
59
62
  }
60
63
  }
@@ -1,5 +1,5 @@
1
- const nock = require('nock');
2
- const Network = require('./index');
1
+ const nock = require('nock')
2
+ const Network = require('./index')
3
3
 
4
4
  nock('http://www.google.com')
5
5
  .get('/resource')
@@ -13,19 +13,19 @@ nock('https://www.apple.com')
13
13
  describe('Network', () => {
14
14
  it('Making requests by service name from ENV', async () => {
15
15
  process.env.TEST_SERVICE_HOST = 'www.google.com'
16
- n = new Network({ serviceName: 'TEST' });
17
- const response = await n.get('/resource');
18
- expect(response).toBeDefined();
19
- expect(response.data).toBeDefined();
20
- expect(response.data.one).toBe(1);
16
+ const n = new Network({ serviceName: 'TEST' })
17
+ const response = await n.get('/resource')
18
+ expect(response).toBeDefined()
19
+ expect(response.data).toBeDefined()
20
+ expect(response.data.one).toBe(1)
21
21
  })
22
22
 
23
23
  it('Making requests by service name from ENV', async () => {
24
24
  process.env.TEST_SERVICE_HOST = 'www.google.com'
25
- n = new Network({ serviceUrl: 'https://www.apple.com' });
26
- const response = await n.get('/resource');
27
- expect(response).toBeDefined();
28
- expect(response.data).toBeDefined();
29
- expect(response.data.two).toBe(2);
25
+ const n = new Network({ serviceUrl: 'https://www.apple.com' })
26
+ const response = await n.get('/resource')
27
+ expect(response).toBeDefined()
28
+ expect(response.data).toBeDefined()
29
+ expect(response.data.two).toBe(2)
30
30
  })
31
- });
31
+ })
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@autofleet/node-common",
3
- "version": "1.0.9",
3
+ "version": "1.1.2",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "coverage": "jest --coverage --forceExit --runInBand",
7
7
  "test": "jest --forceExit --runInBand",
8
- "test-auto": "jest --watch --runInBand"
8
+ "test-auto": "jest --watch --runInBand",
9
+ "linter": "./node_modules/.bin/eslint ."
9
10
  },
10
11
  "jest": {
11
12
  "setupTestFrameworkScriptFile": "jest-extended"
@@ -28,6 +29,9 @@
28
29
  "winston": "^3.0.0-rc5"
29
30
  },
30
31
  "devDependencies": {
32
+ "eslint": "^4.19.1",
33
+ "eslint-config-airbnb": "^16.1.0",
34
+ "eslint-plugin-import": "^2.11.0",
31
35
  "jest-extended": "^0.7.1",
32
36
  "nock": "^9.2.5"
33
37
  }