-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcli.js
executable file
·133 lines (125 loc) · 2.96 KB
/
cli.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/env node
'use strict';
const meow = require('meow');
const prompts = require('prompts');
const nanoid = require('nanoid');
const makeDir = require('make-dir');
// Meow configuration
const cli = meow(`
Usage
$ pizza <options>
Options
--order, -o Order pizza
Examples
$ pizza --order
`, {
flags: {
order: {
type: 'boolean',
alias: 'o'
}
}
});
if (cli.flags.order) {
(async () => {
const questions = [
{
type: 'select',
name: 'size',
message: 'Select size:',
choices: [
{title: 'Small', value: 'small'},
{title: 'Medium', value: 'medium'},
{title: 'Large', value: 'large'},
{title: 'Extra Large', value: 'extra large'}
],
initial: 1
},
{
type: 'select',
name: 'dough',
message: 'Select dough type:',
choices: [
{title: 'Thin', value: 'thin'},
{title: 'Thick', value: 'thick'}
],
initial: 1
},
{
type: 'multiselect',
name: 'ingredients',
message: 'Pick ingredients:',
choices: [
{title: 'Pepperoni', value: 'pepperoni'},
{title: 'Salami', value: 'salami'},
{title: 'Bacon', value: 'bacon'},
{title: 'Beef', value: 'beef'},
{title: 'Sausage', value: 'sausage'},
{title: 'Ham', value: 'ham'},
{title: 'Calamari', value: 'calamari'},
{title: 'Shrimp', value: 'shrimp'},
{title: 'Paprika', value: 'paprika'},
{title: 'Pineapple', value: 'pineapple'},
{title: 'Jalapeño', value: 'jalapeno'},
{title: 'Black olive', value: 'black olive'},
{title: 'Green olive', value: 'green olive'},
{title: 'Mushroom', value: 'mushroom'}
],
max: 5,
hint: '- Space to select. Return to submit'
},
{
type: 'text',
name: 'name',
message: 'What is your name?'
},
{
type: 'number',
name: 'phone',
message: 'What is your phone number?'
},
{
type: 'text',
name: 'time',
message: 'What time should we deliver your pizza?'
},
{
type: 'text',
name: 'city',
message: 'City:'
},
{
type: 'text',
name: 'street',
message: 'Street:'
},
{
type: 'text',
name: 'number',
message: 'Apartment number:'
},
{
type: 'text',
name: 'notes',
message: 'Any additional information?'
}
];
const response = await prompts(questions);
makeDir('./orders').then(async path => {
const low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync');
const adapter = await new FileSync(`${path}/${nanoid(10)}.json`);
const db = low(adapter);
db.defaults({pizza: [], client: [], address: []}).write();
db.get('pizza')
.push({size: response.size, dough: response.dough, ingredients: response.ingredients})
.write();
db.get('client')
.push({name: response.name, phone: response.phone})
.write();
db.get('address')
.push({time: response.time, city: response.city, street: response.street, number: response.number, notes: response.notes})
.write();
});
})();
}