qrfi
Version:
A CLI Wi-Fi QR Code Generator.
82 lines (70 loc) • 1.9 kB
text/typescript
import * as program from 'commander'
import * as fs from 'fs'
import { isatty } from 'tty'
import * as outdent from '@kamataryo/outdent'
import Qrfi from '.'
const { version, description } = JSON.parse(
fs.readFileSync(__dirname + '/../package.json').toString('utf-8')
)
program
.version(version)
.description(description)
.usage('[ssid] [options]')
.option(
'-t, --authentication-type <value>',
'Optional. One of WEP, WPA, nopass. Default value is WPA.'
)
.option('-p, --password <value>', 'Optional.')
.option(
'-H, --hidden',
'Optional. The SSID is hidden or not. Default value is `false`.'
)
.option('-f, --format <value>', 'Optional. ascii as default, png or svg.')
program.on('--help', () => {
process.stdout.write(
`
Examples:
$ qrfi YOUR-SSID -p YOUR-PASSWORD
$ qrfi YOUR-SSID -p YOUR-PASSWORD -f png > qr.png
$ echo YOUR-SSID | qrfi -p YOUR-PASSWORD
`[outdent as string]
)
})
program.parse(process.argv)
const args = [...program.args]
// options
const authenticationType = program.authenticationType || 'WPA'
const password = program.password || ''
const hidden = !!program.hidden
const format = program.format || 'ascii'
// stdin
process.stdin.resume()
process.stdin.setEncoding('utf8')
let stdinData = ''
const onEnd = () => {
const networkSSID = args[0] || stdinData
let qrfi: Qrfi
try {
qrfi = new Qrfi({ authenticationType, networkSSID, password, hidden })
} catch (e) {
process.stdout.write(e.message)
process.exit(1)
}
qrfi
.toQR({ format })
.then(qrcode => {
process.stdout.write(qrcode)
process.exit(0)
})
.catch(e => {
process.stderr.write(e.message)
process.exit(2)
})
}
if (isatty(0)) {
onEnd()
} else {
process.stdin.on('data', chunk => (stdinData += chunk))
process.stdin.on('end', onEnd)
}