Skip to content

Commit 4057a73

Browse files
committed
fix: Make error handling of missing adapter return error exit code
1 parent 73cd74d commit 4057a73

File tree

6 files changed

+47
-23
lines changed

6 files changed

+47
-23
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
"babel-polyfill": "^6.20.0",
5252
"babel-preset-node6": "^11.0.0",
5353
"jest": "^19.0.2",
54+
"micro-analytics-adapter-memory": "^0.1.0",
5455
"nodemon": "^1.11.0",
5556
"request-promise": "^4.1.1"
5657
}

src/index.js

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,26 @@ const micro = require('micro')
33
const parseArgs = require('./parseArgs')
44
const db = require('./db');
55

6-
const flags = parseArgs(process.argv)
6+
try {
7+
const flags = parseArgs(process.argv)
78

8-
db.initDbAdapter(flags)
9+
db.initDbAdapter(flags)
910

10-
const handler = require('./handler')
11-
const server = micro(handler)
11+
const handler = require('./handler')
12+
const server = micro(handler)
1213

13-
server.listen(flags.port, flags.host, (error) => {
14-
if (error) {
15-
console.error(error)
16-
process.exit(1)
17-
}
18-
19-
console.log(
20-
'micro-analytics listening on ' + flags.host + ':' + flags.port + '\n' +
21-
' with adapter ' + flags.adapter +
22-
(db.hasFeature("subscribe") ? '\n with server side events' : '')
23-
)
24-
})
14+
server.listen(flags.port, flags.host, (error) => {
15+
if (error) {
16+
console.error(error)
17+
process.exit(1)
18+
}
19+
console.log(
20+
'micro-analytics listening on ' + flags.host + ':' + flags.port + '\n' +
21+
' with adapter ' + flags.adapter +
22+
(db.hasFeature("subscribe") ? '\n with server side events' : '')
23+
)
24+
})
25+
} catch (error) {
26+
console.error(error.message)
27+
process.exit(1)
28+
}

src/parseArgs.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,7 @@ module.exports = function parseArgs(argv) {
2727
}
2828
} catch (err) {
2929
if (err.code === 'MODULE_NOT_FOUND') {
30-
if (process.env.NODE_ENV !== 'test') {
31-
// Console.error a warning message, but normally exit the process to avoid printing ugly npm ERR lines and stack trace.
32-
console.error(`\n${repeatCharacter(' ', 22)}⚠️ ERROR ⚠️\n${repeatCharacter('-', 55)}\nYou specified "${adapterName}" as the DB_ADAPTER, but no package\ncalled "micro-analytics-adapter-${adapterName}" was found.\n\nPlease make sure you spelled the name correctly and\nhave "npm install"ed the necessary adapter package!\n${repeatCharacter('-', 55)}\n`)
33-
process.exit(0)
34-
}
30+
throw new Error(`\n${repeatCharacter(' ', 22)}⚠️ ERROR ⚠️\n${repeatCharacter('-', 55)}\nYou specified "${adapterName}" as the DB_ADAPTER, but no package\ncalled "micro-analytics-adapter-${adapterName}" was found.\n\nPlease make sure you spelled the name correctly and\nhave "npm install"ed the necessary adapter package!\n${repeatCharacter('-', 55)}\n`)
3531
} else {
3632
throw err
3733
}

tests/__snapshots__/parseArgs.test.js.snap

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,16 @@ Object {
1212
"port": 3000,
1313
}
1414
`;
15+
16+
exports[`parseArgs should throw on non existing adapter 1`] = `
17+
"
18+
⚠️ ERROR ⚠️
19+
-------------------------------------------------------
20+
You specified \\"not-a-real-adapter\\" as the DB_ADAPTER, but no package
21+
called \\"micro-analytics-adapter-not-a-real-adapter\\" was found.
22+
23+
Please make sure you spelled the name correctly and
24+
have \\"npm install\\"ed the necessary adapter package!
25+
-------------------------------------------------------
26+
"
27+
`;

tests/parseArgs.test.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@ describe('parseArgs', () => {
66
expect(parseArgs(['node', 'micro-analytics'])).toMatchSnapshot();
77
})
88

9+
it('should throw on non existing adapter', () => {
10+
expect(() => {
11+
parseArgs(['node', 'micro-analytics', '-a', 'not-a-real-adapter'])
12+
}).toThrowErrorMatchingSnapshot()
13+
});
14+
915
it("should use DB_ADAPTER environment variable as default if set", () => {
10-
process.env.DB_ADAPTER = 'redis'
11-
expect(parseArgs(['node', 'micro-analytics']).adapter).toEqual('redis');
16+
process.env.DB_ADAPTER = 'memory'
17+
expect(parseArgs(['node', 'micro-analytics']).adapter).toEqual('memory');
1218
delete process.env.DB_ADAPTER
1319
})
1420

yarn.lock

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1836,6 +1836,10 @@ micro-analytics-adapter-flat-file-db@^1.2.1:
18361836
then-flat-file-db "^1.0.0"
18371837
zen-observable "^0.4.0"
18381838

1839+
micro-analytics-adapter-memory@^0.1.0:
1840+
version "0.1.0"
1841+
resolved "https://registry.yarnpkg.com/micro-analytics-adapter-memory/-/micro-analytics-adapter-memory-0.1.0.tgz#c8bcdb5e4e46be156d610be73931ab9a7456f329"
1842+
18391843
18401844
version "6.1.0"
18411845
resolved "https://registry.yarnpkg.com/micro/-/micro-6.1.0.tgz#c933e1dd90dea56b0517b62b2af00d3f5351d79d"

0 commit comments

Comments
 (0)