From fc9f4dd66f9c0651c10f380d778e7a89b76bebfc Mon Sep 17 00:00:00 2001 From: Elias Nygren Date: Thu, 16 Aug 2018 23:10:17 +0300 Subject: [PATCH] allow using micro-dev programmatically --- lib/index.js | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 60 insertions(+) create mode 100644 lib/index.js diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..b7ea6f8 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,59 @@ +// Ensure that the loaded files and packages have the correct env +process.env.NODE_ENV = process.env.NODE_ENV || 'development'; + +// Packages +const serve = require('micro/lib'); +const ip = require('ip'); +const chalk = require('chalk'); +const boxen = require('boxen'); + +// Utilities +const log = require('./log'); + + +/** + * micro-dev for programmatic usage + * + * Usage: + * + * require('micro-dev')({ silent: false, limit: '1mb', host: '::', port: PORT })(handler) + */ +module.exports = flags => handler => { + const module = flags.silent ? handler : log(handler, flags.limit); + const server = serve(module); + + const sockets = []; + server.on('connection', socket => { + const index = sockets.push(socket); + socket.once('close', () => sockets.splice(index, 1)); + }); + + server.listen(flags.port, flags.host, err => { + if (err) { + console.error('micro:', err.stack); + process.exit(1); + } + + // message + const details = server.address(); + const ipAddress = ip.address(); + const url = `http://${ipAddress}:${details.port}`; + let message = chalk.green('Micro is running programmatically!'); + message += '\n\n'; + + const host = flags.host === '::' ? 'localhost' : flags.host; + const localURL = `http://${host}:${details.port}`; + + message += `• ${chalk.bold('Local: ')} ${localURL}\n`; + message += `• ${chalk.bold('On Your Network: ')} ${url}\n\n`; + + const box = boxen(message, { + padding: 1, + borderColor: 'green', + margin: 1 + }); + + // Print out the message + console.log(box); + }); +}; diff --git a/package.json b/package.json index b87909b..28536ad 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "micro-dev", "version": "3.0.0", + "main": "./lib/index.js", "files": [ "bin", "lib"