| #!/usr/bin/env node |
| |
| let { nanoid, customAlphabet } = require('..') |
| |
| function print(msg) { |
| process.stdout.write(msg + '\n') |
| } |
| |
| function error(msg) { |
| process.stderr.write(msg + '\n') |
| process.exit(1) |
| } |
| |
| if (process.argv.includes('--help') || process.argv.includes('-h')) { |
| print(` |
| Usage |
| $ nanoid [options] |
| |
| Options |
| -s, --size Generated ID size |
| -a, --alphabet Alphabet to use |
| -h, --help Show this help |
| |
| Examples |
| $ nano --s 15 |
| S9sBF77U6sDB8Yg |
| |
| $ nano --size 10 --alphabet abc |
| bcabababca`) |
| process.exit() |
| } |
| |
| let alphabet, size |
| for (let i = 2; i < process.argv.length; i++) { |
| let arg = process.argv[i] |
| if (arg === '--size' || arg === '-s') { |
| size = Number(process.argv[i + 1]) |
| i += 1 |
| if (Number.isNaN(size) || size <= 0) { |
| error('Size must be positive integer') |
| } |
| } else if (arg === '--alphabet' || arg === '-a') { |
| alphabet = process.argv[i + 1] |
| i += 1 |
| } else { |
| error('Unknown argument ' + arg) |
| } |
| } |
| |
| if (alphabet) { |
| if (typeof size === 'undefined') { |
| error('You must also specify size option, when using custom alphabet') |
| } |
| let customNanoid = customAlphabet(alphabet, size) |
| print(customNanoid()) |
| } else { |
| print(nanoid(size)) |
| } |