| 109 | process.on('SIGTERM', shutdown); |
| 110 | |
| 111 | const readLoop = async () => { |
| 112 | while (true) { |
| 113 | const { done, value } = await reader.read(); |
| 114 | if (done) { |
| 115 | shutdown(); |
| 116 | break; |
| 117 | } |
| 118 | |
| 119 | const text = decoder.decode(value).trim(); |
| 120 | if (!text) { |
| 121 | prompt(); |
| 122 | continue; |
| 123 | } |
| 124 | |
| 125 | if (text.toLowerCase() === 'list') { |
| 126 | console.log('\nPeople in database:'); |
| 127 | let count = 0; |
| 128 | for (const person of conn.db.person.iter()) { |
| 129 | console.log(` - ${person.name}`); |
| 130 | count++; |
| 131 | } |
| 132 | if (count === 0) { |
| 133 | console.log(' (none)'); |
| 134 | } |
| 135 | console.log(); |
| 136 | } else if (text.toLowerCase() === 'hello') { |
| 137 | conn.reducers.sayHello({}); |
| 138 | console.log('Called sayHello reducer (check server logs)\n'); |
| 139 | } else { |
| 140 | conn.reducers.add({ name: text }); |
| 141 | } |
| 142 | prompt(); |
| 143 | } |
| 144 | }; |
| 145 | |
| 146 | readLoop().catch(err => { |
| 147 | console.error('CLI error:', err); |