Skip to content

Commit 463f373

Browse files
committed
First code commit
1 parent 45f1548 commit 463f373

File tree

5 files changed

+154
-0
lines changed

5 files changed

+154
-0
lines changed

cli.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#! /usr/bin/env node
2+
3+
'use strict'
4+
5+
const minimist = require('minimist')
6+
const Fastify = require('fastify')
7+
const path = require('path')
8+
const fs = require('fs')
9+
const help = fs.readFileSync('./help.txt', 'utf8')
10+
11+
function start (opts) {
12+
if (opts.help) {
13+
console.log(help)
14+
process.exit(0)
15+
}
16+
17+
if (opts._.length !== 1) {
18+
console.log('Missing the file parameter')
19+
process.exit(1)
20+
}
21+
22+
runFastify(opts)
23+
}
24+
25+
function stop (code) {
26+
process.exit(code)
27+
}
28+
29+
function runFastify (opts) {
30+
let file = null
31+
try {
32+
file = require(path.resolve(process.cwd(), opts._[0]))
33+
} catch (e) {
34+
console.log('Cannot find the specified file')
35+
process.exit(1)
36+
}
37+
38+
const fastify = Fastify({
39+
logger: {
40+
level: opts['log-level']
41+
}
42+
})
43+
44+
fastify.register(file, function (err) {
45+
if (err) {
46+
console.log(err)
47+
process.exit(1)
48+
}
49+
})
50+
51+
fastify.listen(opts.port, function (err) {
52+
if (err) {
53+
console.log(err)
54+
process.exit(1)
55+
}
56+
console.log(`Server listening on http://localhost:${fastify.server.address().port}`)
57+
})
58+
}
59+
60+
if (require.main === module) {
61+
start(minimist(process.argv.slice(2), {
62+
integer: ['port'],
63+
string: ['log-level'],
64+
alias: {
65+
port: 'p',
66+
help: 'h'
67+
},
68+
default: {
69+
port: 3000,
70+
'log-level': 'fatal'
71+
}
72+
}))
73+
}
74+
75+
module.exports = { start, stop, runFastify }

help.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Usage: fastify [opts] <file>
2+
-p Port to listen on [3000]
3+
--port
4+
5+
--log-level Log level [fatal]
6+
7+
-h Show this help message
8+
--help

package.json

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"name": "fastify-cli",
3+
"version": "0.1.0",
4+
"description": "Run a fastify route with one command!",
5+
"main": "cli.js",
6+
"bin": {
7+
"fastify": "cli.js"
8+
},
9+
"scripts": {
10+
"test": "standard && tap test.js"
11+
},
12+
"keywords": [
13+
"fastify",
14+
"cli",
15+
"one command"
16+
],
17+
"author": "Tomas Della Vedova - @delvedor (http://delved.org)",
18+
"license": "MIT",
19+
"repository": {
20+
"type": "git",
21+
"url": "git+https://github.com/delvedor/fastify-cli.git"
22+
},
23+
"bugs": {
24+
"url": "https://github.com/delvedor/fastify-cli/issues"
25+
},
26+
"homepage": "https://github.com/delvedor/fastify-cli#readme",
27+
"engines": {
28+
"node": ">= 4.0"
29+
},
30+
"dependencies": {
31+
"fastify": "^0.5.0",
32+
"minimist": "^1.2.0"
33+
},
34+
"devDependencies": {
35+
"request": "^2.79.0",
36+
"standard": "^8.6.0",
37+
"tap": "^8.0.1"
38+
}
39+
}

plugin.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module.exports = function (fastify, options, next) {
2+
fastify.get('/', function (req, reply) {
3+
reply(null, { hello: 'world' })
4+
})
5+
next()
6+
}

test.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
'use strict'
2+
3+
const t = require('tap')
4+
const test = t.test
5+
const request = require('request')
6+
const cli = require('./cli')
7+
8+
test('should start the server', t => {
9+
t.plan(4)
10+
11+
cli.start({
12+
port: 3000,
13+
_: ['./plugin.js']
14+
})
15+
16+
request({
17+
method: 'GET',
18+
uri: 'http://localhost:3000'
19+
}, (err, response, body) => {
20+
t.error(err)
21+
t.strictEqual(response.statusCode, 200)
22+
t.strictEqual(response.headers['content-length'], '' + body.length)
23+
t.deepEqual(JSON.parse(body), { hello: 'world' })
24+
cli.stop(0)
25+
})
26+
})

0 commit comments

Comments
 (0)