Skip to content

Commit d4d7386

Browse files
chore: bump dependencies and logger
1 parent 4ecf3bc commit d4d7386

File tree

7 files changed

+2028
-1001
lines changed

7 files changed

+2028
-1001
lines changed

package-lock.json

Lines changed: 1951 additions & 966 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
],
1010
"scripts": {
1111
"clean": "rimraf dist/",
12-
"clean-all": "rimraf dist/ node_modules/ package-lock.json",
12+
"clean:all": "rimraf dist/ node_modules/ package-lock.json",
1313
"lint": "tslint --fix './src/**/*.ts'",
1414
"docker": "docker-compose up --force-recreate &",
1515
"docker:kill": "docker-compose kill",
@@ -33,17 +33,17 @@
3333
"@creditkarma/dynamic-config": ">=0.7.0 <0.10.0"
3434
},
3535
"devDependencies": {
36-
"@creditkarma/dynamic-config": "^0.9.0",
37-
"@types/code": "^4.0.4",
38-
"@types/lab": "^11.1.0",
39-
"code": "^4.1.0",
40-
"lab": "^14.3.1",
36+
"@creditkarma/dynamic-config": "^0.9.7",
37+
"@creditkarma/consul-client": "^0.8.4",
38+
"@hapi/code": "^5.3.1",
39+
"@hapi/lab": "^19.0.1",
40+
"@types/hapi__code": "^5.3.0",
4141
"rimraf": "^2.6.2",
42-
"tslint": "^5.11.0",
43-
"typescript": "3.1.x",
44-
"wait-on": "^3.1.0"
42+
"tslint": "^5.17.0",
43+
"typescript": "3.5.x",
44+
"wait-on": "^3.2.0"
4545
},
4646
"dependencies": {
47-
"ajv": "^6.5.4"
47+
"ajv": "^6.10.0"
4848
}
4949
}

src/main/logger.ts

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,26 @@ function isDebug(): boolean {
55
)
66
}
77

8-
export const log = (msg: string, data?: any) => {
9-
if (data !== undefined && isDebug()) {
10-
console.log(`[feature-flags:info]: ${msg}: `, data)
11-
} else if (isDebug()) {
12-
console.log(`[feature-flags:info]: ${msg}`)
13-
}
14-
}
8+
export type LogFunction = (tags: Array<string>, data?: string | object) => void
159

16-
export const warn = (msg: string, data?: any) => {
17-
if (data !== undefined && isDebug()) {
18-
console.warn(`[feature-flags:warn]: ${msg}: `, data)
10+
export const defaultLogger: LogFunction = (tags: Array<string>, data?: string | object): void => {
11+
if (tags.includes('error')) {
12+
if (data !== undefined) {
13+
console.error(`[${tags.join(',')}]: `, data)
14+
} else {
15+
console.error(`[${tags.join(',')}]`)
16+
}
17+
} else if (tags.includes('warn')) {
18+
if (data !== undefined) {
19+
console.warn(`[${tags.join(',')}]: `, data)
20+
} else {
21+
console.warn(`[${tags.join(',')}]`)
22+
}
1923
} else if (isDebug()) {
20-
console.warn(`[feature-flags:warn]: ${msg}`)
21-
}
22-
}
23-
24-
export const error = (msg: string, data?: any) => {
25-
if (data !== undefined) {
26-
console.error(`[feature-flags:error]: ${msg}: `, data)
27-
} else {
28-
console.error(`[feature-flags:error]: ${msg}`)
24+
if (data !== undefined) {
25+
console.log(`[${tags.join(',')}]: `, data)
26+
} else {
27+
console.log(`[${tags.join(',')}]`)
28+
}
2929
}
3030
}

src/main/toggles.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { config } from '@creditkarma/dynamic-config'
22
import { DEFAULT_TOGGLES_PATH } from './constants'
3-
import * as logger from './logger'
3+
import { defaultLogger } from './logger'
44
import { toggleSchema } from './schema'
5+
56
import {
67
IToggleDescription,
78
Toggle,
89
ToggleMap,
910
} from './types'
11+
1012
import { memoize, objectMatchesSchema } from './utils'
1113

1214
const rawToggles: ToggleMap = new Map()
@@ -22,7 +24,7 @@ const lazyToggles: () => Promise<ToggleMap> = memoize(() => {
2224
resolve(Promise.resolve(rawToggles))
2325

2426
} else {
25-
logger.error(`Value of 'toggles' should be an array`)
27+
defaultLogger(['error', 'toggleMap'], `Value of 'toggles' should be an array`)
2628
reject(new Error(`Value of 'toggles' should be an array`))
2729
}
2830
})
@@ -38,7 +40,7 @@ export function toggleMap(key: string): Promise<Toggle> {
3840
return (randomInt < toggleDesc.fraction)
3941

4042
} else {
41-
logger.warn(`There is no toggle for key[${key}]. Defaults to false`)
43+
defaultLogger(['warn', 'toggleMap'], `There is no toggle for key[${key}]. Defaults to false`)
4244
return false
4345
}
4446
}

src/tests/integration/bootstrap.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
#!/usr/bin/env node
22
import { KvStore } from '@creditkarma/consul-client'
3+
import { CONSUL_ADDRESS } from './constants'
34

45
process.chdir(__dirname)
56

67
setTimeout(() => {
7-
const consulClient: KvStore = new KvStore([ 'http://localhost:8510' ])
8+
const consulClient: KvStore = new KvStore([ CONSUL_ADDRESS ])
89

910
Promise.all([
1011
consulClient.set({ path: 'toggles' }, [

src/tests/integration/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const CONSUL_ADDRESS = 'http://localhost:8510'

src/tests/integration/index.spec.ts

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
import { expect } from 'code'
2-
import * as Lab from 'lab'
1+
import { expect } from '@hapi/code'
2+
import * as Lab from '@hapi/lab'
3+
4+
import { KvStore } from '@creditkarma/consul-client'
5+
import { CONSUL_ADDRESS } from './constants'
36

47
import { toggleMap } from '../../main'
58

@@ -8,6 +11,16 @@ export const lab = Lab.script()
811
const describe = lab.describe
912
const it = lab.it
1013

14+
const consulClient: KvStore = new KvStore([ CONSUL_ADDRESS ])
15+
16+
function delay(time: number = 3000): Promise<void> {
17+
return new Promise((resolve, reject) => {
18+
setTimeout(() => {
19+
resolve()
20+
}, time)
21+
})
22+
}
23+
1124
describe('ToggleMap', () => {
1225
it('should return false for toggle set to 0.0', async () => {
1326
const toggle = await toggleMap('com.creditkarma.featureFlags.AlwaysDisabled')
@@ -18,4 +31,29 @@ describe('ToggleMap', () => {
1831
const toggle = await toggleMap('com.creditkarma.featureFlags.AlwaysEnabled')
1932
expect(toggle()).to.equal(true)
2033
})
34+
35+
it('should respond to dynamic updates', async () => {
36+
await consulClient.set({ path: 'toggles' }, [
37+
{
38+
id: 'com.creditkarma.featureFlags.AlwaysEnabled',
39+
description: "It's a feature toggle",
40+
fraction: 0,
41+
},
42+
{
43+
id: 'com.creditkarma.featureFlags.AlwaysDisabled',
44+
description: "It's a feature toggle",
45+
fraction: 1.0,
46+
},
47+
{
48+
id: 'com.creditkarma.featureFlags.SometimesDisabled',
49+
description: "It's a feature toggle",
50+
fraction: 0.4,
51+
},
52+
])
53+
54+
await delay()
55+
56+
const toggle = await toggleMap('com.creditkarma.featureFlags.AlwaysEnabled')
57+
expect(toggle()).to.equal(false)
58+
})
2159
})

0 commit comments

Comments
 (0)