UNPKG

1.88 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3// Native
4const path = require('path')
5
6// Packages
7const asyncToGen = require('async-to-gen/register')
8const updateNotifier = require('update-notifier')
9const nodeVersion = require('node-version')
10const args = require('args')
11const isAsyncSupported = require('is-async-supported')
12
13// Ours
14const pkg = require('../package')
15
16// Throw an error if node version is too low
17if (nodeVersion.major < 6) {
18 console.error(`Error! Micro requires at least version 6 of Node. Please upgrade!`)
19 process.exit(1)
20}
21
22// Let user know if there's an update
23// This isn't important when deployed to Now
24if (!process.env.NOW && pkg.dist) {
25 updateNotifier({pkg}).notify()
26}
27
28args
29 .option('port', 'Port to listen on', process.env.PORT || 3000)
30 .option(['H', 'host'], 'Host to listen on', '0.0.0.0')
31
32const flags = args.parse(process.argv)
33let file = args.sub[0]
34
35if (!file) {
36 try {
37 // eslint-disable-next-line import/no-dynamic-require
38 const packageJson = require(path.resolve(process.cwd(), 'package.json'))
39 file = packageJson.main || 'index.js'
40 } catch (err) {
41 if (err.code !== 'MODULE_NOT_FOUND') {
42 console.error(`micro: Could not read \`package.json\`: ${err.message}`)
43 process.exit(1)
44 }
45 }
46}
47
48if (!file) {
49 console.error('micro: Please supply a file.')
50 args.showHelp()
51}
52
53if (file[0] !== '/') {
54 file = path.resolve(process.cwd(), file)
55}
56
57if (!isAsyncSupported()) {
58 // Support for keywords "async" and "await"
59 const pathSep = process.platform === 'win32' ? '\\\\' : '/'
60 const directoryName = path.parse(path.join(__dirname, '..')).base
61
62 asyncToGen({
63 includes: new RegExp(`.*${directoryName}?${pathSep}(lib|bin)|${file}.*`),
64 excludes: null,
65 sourceMaps: false
66 })
67}
68
69// Load package core with async/await support
70// If needed... Otherwise use the native implementation
71require('../lib')(file, flags)