Skip to content

Commit 7f52dbf

Browse files
author
Jakob Rosenberg
committed
feat: simplify parameters
1 parent 4556233 commit 7f52dbf

File tree

4 files changed

+71
-77
lines changed

4 files changed

+71
-77
lines changed

configent.js

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const _defaults = {
3434
* @param {NodeModule} [configentOptions.module] required if multiple modules are using configent
3535
* @returns {options}
3636
*/
37-
function configent(defaults, input = {}, configentOptions) {
37+
function configent(configentOptions) {
3838
configentOptions = { ..._defaults, ...configentOptions }
3939
const getParentModuleDir = createGetParentModuleDir(configentOptions)
4040
configentOptions.name = configentOptions.name || require(resolve(getParentModuleDir(), 'package.json')).name
@@ -57,15 +57,13 @@ function configent(defaults, input = {}, configentOptions) {
5757

5858
function buildConfig() {
5959
delete (configentOptions.module)
60-
const hash = JSON.stringify({ name, defaults, input, configentOptions })
60+
const hash = JSON.stringify({ name, configentOptions })
6161
if (!instances[hash] || !cacheConfig) {
6262
instances[hash] = {
63-
...defaults,
6463
...useDetectDefaults && getDetectDefaults(),
6564
...usePackageConfig && getPackageConfig(),
6665
...useConfig && getUserConfig(),
6766
...useEnv && getEnvConfig(),
68-
...input
6967
}
7068
}
7169
return instances[hash]
@@ -81,10 +79,8 @@ function configent(defaults, input = {}, configentOptions) {
8179
return entries.reduce((prev, { key, value }) => ({ ...prev, [key]: value }), {})
8280

8381
function parseField([key, value]) {
84-
const shouldParseValue = k => typeof defaults[k] === 'object'
85-
8682
key = sanitizeEnvValue(key.replace(upperCaseRE, ''))
87-
value = shouldParseValue(key) ? JSON.parse(value) : value
83+
try { value = JSON.parse(value) } catch { }
8884
return { key, value }
8985
}
9086
}
@@ -121,7 +117,7 @@ function configent(defaults, input = {}, configentOptions) {
121117
.reverse()
122118
if (configTemplates) {
123119
if (configTemplates.length > 1) // we don't care about the default template
124-
console.log(`[%s] detected defaults from %s`, name, configTemplates.filter(template => template.file !== 'default.config.js').map(template => template.name).join(', '))
120+
console.log(`[%s] detected defaults from %s`, name, configTemplates.filter(template => template.file !== 'default.config.js').map(template => template.name).join(', '))
125121
detectedFromDefaults[hash] = Object.assign({}, ...configTemplates.map(template => template.config({ pkgjson })))
126122
}
127123
}

test/basic/test.spec.js

Lines changed: 31 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,38 @@
1-
2-
31
const test = require('ava').default
42
const { configent } = require('../..')
53
process.chdir(__dirname)
64

7-
8-
test('no env', async t => {
9-
const configentOptions = {
10-
useConfig: false,
11-
useDotEnv: false,
12-
useEnv: false,
13-
usePackageConfig: false
14-
}
15-
const defaults = { bar: 123, baz: 456 }
16-
const result = configent(defaults, {}, configentOptions)
17-
t.deepEqual(result, defaults)
5+
test('no env', async (t) => {
6+
const configentOptions = {
7+
useConfig: false,
8+
useDotEnv: false,
9+
useEnv: false,
10+
usePackageConfig: false,
11+
}
12+
const defaults = { bar: 123, baz: 456 }
13+
const result = { ...defaults, ...configent(configentOptions) }
14+
t.deepEqual(result, defaults)
1815
})
1916

20-
test('env', async t => {
21-
console.log('cwd2', process.cwd())
22-
process.env['BASIC_fromEnv'] = 'true'
23-
const defaults = {
24-
fromDefaults: true,
25-
fromDotEnv: false,
26-
fromEnv: false,
27-
fromOptions: false,
28-
fromConfig: false,
29-
fromPackageJson: false,
30-
}
31-
const options = { fromOptions: true }
32-
const result = configent(defaults, options)
33-
t.deepEqual(result, {
34-
fromDefaults: true,
35-
fromDotEnv: 'true',
36-
fromEnv: 'true',
37-
fromConfig: true,
38-
fromPackageJson: true,
39-
fromOptions: true,
40-
})
17+
test('env', async (t) => {
18+
console.log('cwd2', process.cwd())
19+
process.env['BASIC_fromEnv'] = 'true'
20+
const defaults = {
21+
fromDefaults: true,
22+
fromDotEnv: false,
23+
fromEnv: false,
24+
fromOptions: false,
25+
fromConfig: false,
26+
fromPackageJson: false,
27+
}
28+
const options = { fromOptions: true }
29+
const result = { ...defaults, ...configent(), ...options }
30+
t.deepEqual(result, {
31+
fromDefaults: true,
32+
fromDotEnv: true,
33+
fromEnv: true,
34+
fromConfig: true,
35+
fromPackageJson: true,
36+
fromOptions: true,
37+
})
4138
})

test/context-configs-circular/context.spec.js

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,21 @@ process.chdir(__dirname) //change cwd to __dirname
44

55
const defaults = { fromContext: false }
66
const configentOptions = {
7-
useDetectDefaults: true,
8-
cacheConfig: false
7+
useDetectDefaults: true,
8+
cacheConfig: false,
99
}
1010

11-
test('circular tests create error', async t => {
11+
test('circular tests create error', async (t) => {
12+
const res = await t.try(() => ({
13+
...defaults,
14+
...configent(configentOptions),
15+
}))
16+
res.discard()
1217

13-
const res = await t.try(() => {
14-
configent(defaults, {}, configentOptions)
15-
})
16-
res.discard()
17-
18-
t.is(res.errors[0].savedError.message,
19-
`Looks like you have circular supersedings ` +
20-
`\ncircular1.config.js supersedes circular2` +
21-
`\ncircular2.config.js supersedes circular1`
22-
)
18+
t.is(
19+
res.errors[0].savedError.message,
20+
`Looks like you have circular supersedings ` +
21+
`\ncircular1.config.js supersedes circular2` +
22+
`\ncircular2.config.js supersedes circular1`,
23+
)
2324
})

test/context-configs/context.spec.js

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,36 @@ process.chdir(__dirname) //change cwd to __dirname
44

55
const defaults = { fromContext: false }
66
const configentOptions = {
7-
useDetectDefaults: true,
8-
cacheConfig: false,
9-
cacheDetectedDefaults: false
7+
useDetectDefaults: true,
8+
cacheConfig: false,
9+
cacheDetectedDefaults: false,
1010
}
1111

12-
test('if no context is found, defaults are unchanged', async t => {
13-
const result = configent(defaults, {}, configentOptions)
14-
t.deepEqual(result, { fromContext: false })
12+
test('if no context is found, defaults are unchanged', async (t) => {
13+
const result = { ...defaults, ...configent(configentOptions) }
14+
t.deepEqual(result, { fromContext: false })
1515
})
1616

17-
test('if context is found, it sets defaults', async t => {
18-
process.env.USE_BASIC = "1"
19-
const result = configent(defaults, {}, configentOptions)
20-
t.deepEqual(result, { fromContext: 'basic' })
17+
test('if context is found, it sets defaults', async (t) => {
18+
process.env.USE_BASIC = '1'
19+
const result = { ...defaults, ...configent(configentOptions) }
20+
t.deepEqual(result, { fromContext: 'basic' })
2121
})
2222

23-
test('if multiple contexts are found, superseder wins', async t => {
24-
process.env.USE_SUPERSEDER = "1"
25-
const result = configent(defaults, {}, configentOptions)
26-
t.deepEqual(result, { fromContext: 'superseder' })
23+
test('if multiple contexts are found, superseder wins', async (t) => {
24+
process.env.USE_SUPERSEDER = '1'
25+
const result = { ...defaults, ...configent(configentOptions) }
26+
t.deepEqual(result, { fromContext: 'superseder' })
2727
})
2828

29-
test('can read package.json from cwd', async t => {
30-
process.env.USE_PKGJSON = "1"
31-
const result = configent(defaults, {}, configentOptions)
32-
t.deepEqual(result, { fromContext: 'usepkgjson' })
29+
test('can read package.json from cwd', async (t) => {
30+
process.env.USE_PKGJSON = '1'
31+
const result = { ...defaults, ...configent(configentOptions) }
32+
t.deepEqual(result, { fromContext: 'usepkgjson' })
3333
})
3434

35-
test('circular tests create error', async t => {
36-
process.env.USE_CIRCULAR = "1"
37-
const result = configent(defaults, {}, configentOptions)
38-
t.deepEqual(result, { fromContext: 'usepkgjson' })
35+
test('circular tests create error', async (t) => {
36+
process.env.USE_CIRCULAR = '1'
37+
const result = { ...defaults, ...configent(configentOptions) }
38+
t.deepEqual(result, { fromContext: 'usepkgjson' })
3939
})

0 commit comments

Comments
 (0)