@semics-tech/mongolite 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +91 -20
- package/dist/bin/mongolite-debug.d.ts +6 -1
- package/dist/bin/mongolite-debug.js +6 -113
- package/dist/bin/mongolite-debug.js.map +1 -1
- package/dist/bin/mongolite.d.ts +13 -0
- package/dist/bin/mongolite.js +172 -0
- package/dist/bin/mongolite.js.map +1 -0
- package/dist/cjs/bin/mongolite-debug.js +6 -149
- package/dist/cjs/bin/mongolite.js +207 -0
- package/dist/cjs/cli/discover.js +156 -0
- package/dist/cjs/cli/explorer.js +929 -0
- package/dist/cjs/cli/filter-builder.js +276 -0
- package/dist/cjs/cli/format.js +161 -0
- package/dist/cjs/cli/schema.js +211 -0
- package/dist/cjs/cli/ui.js +431 -0
- package/dist/cjs/collection.js +8 -1
- package/dist/cjs/cursors/findCursor.js +20 -8
- package/dist/cjs/index.js +108 -1
- package/dist/cjs/mongo-client.js +18 -1
- package/dist/cjs/server.js +164 -0
- package/dist/cjs/sync/commands.js +126 -0
- package/dist/cjs/sync/diff.js +174 -0
- package/dist/cjs/sync/httpSink.js +159 -0
- package/dist/cjs/sync/index.js +40 -0
- package/dist/cjs/sync/mongoExecutor.js +306 -0
- package/dist/cjs/sync/mongoSink.js +161 -0
- package/dist/cjs/sync/outbox.js +358 -0
- package/dist/cjs/sync/protocol.js +177 -0
- package/dist/cjs/sync/replicator.js +747 -0
- package/dist/cjs/sync/shadow.js +178 -0
- package/dist/cjs/sync/types.js +2 -0
- package/dist/cli/discover.d.ts +40 -0
- package/dist/cli/discover.js +146 -0
- package/dist/cli/discover.js.map +1 -0
- package/dist/cli/explorer.d.ts +59 -0
- package/dist/cli/explorer.js +923 -0
- package/dist/cli/explorer.js.map +1 -0
- package/dist/cli/filter-builder.d.ts +52 -0
- package/dist/cli/filter-builder.js +268 -0
- package/dist/cli/filter-builder.js.map +1 -0
- package/dist/cli/format.d.ts +29 -0
- package/dist/cli/format.js +153 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/schema.d.ts +58 -0
- package/dist/cli/schema.js +205 -0
- package/dist/cli/schema.js.map +1 -0
- package/dist/cli/ui.d.ts +71 -0
- package/dist/cli/ui.js +379 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/cloudflare.d.ts +1 -1
- package/dist/cloudflare.js.map +1 -1
- package/dist/collection.js +8 -1
- package/dist/collection.js.map +1 -1
- package/dist/cursors/findCursor.d.ts +12 -0
- package/dist/cursors/findCursor.js +20 -8
- package/dist/cursors/findCursor.js.map +1 -1
- package/dist/index.d.ts +68 -2
- package/dist/index.js +96 -1
- package/dist/index.js.map +1 -1
- package/dist/mongo-client.d.ts +13 -0
- package/dist/mongo-client.js +18 -1
- package/dist/mongo-client.js.map +1 -1
- package/dist/server.d.ts +97 -0
- package/dist/server.js +158 -0
- package/dist/server.js.map +1 -0
- package/dist/sync/commands.d.ts +49 -0
- package/dist/sync/commands.js +118 -0
- package/dist/sync/commands.js.map +1 -0
- package/dist/sync/diff.d.ts +55 -0
- package/dist/sync/diff.js +169 -0
- package/dist/sync/diff.js.map +1 -0
- package/dist/sync/httpSink.d.ts +93 -0
- package/dist/sync/httpSink.js +155 -0
- package/dist/sync/httpSink.js.map +1 -0
- package/dist/sync/index.d.ts +17 -0
- package/dist/sync/index.js +10 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/mongoExecutor.d.ts +37 -0
- package/dist/sync/mongoExecutor.js +302 -0
- package/dist/sync/mongoExecutor.js.map +1 -0
- package/dist/sync/mongoSink.d.ts +109 -0
- package/dist/sync/mongoSink.js +123 -0
- package/dist/sync/mongoSink.js.map +1 -0
- package/dist/sync/outbox.d.ts +120 -0
- package/dist/sync/outbox.js +355 -0
- package/dist/sync/outbox.js.map +1 -0
- package/dist/sync/protocol.d.ts +93 -0
- package/dist/sync/protocol.js +168 -0
- package/dist/sync/protocol.js.map +1 -0
- package/dist/sync/replicator.d.ts +177 -0
- package/dist/sync/replicator.js +744 -0
- package/dist/sync/replicator.js.map +1 -0
- package/dist/sync/shadow.d.ts +54 -0
- package/dist/sync/shadow.js +173 -0
- package/dist/sync/shadow.js.map +1 -0
- package/dist/sync/types.d.ts +388 -0
- package/dist/sync/types.js +2 -0
- package/dist/sync/types.js.map +1 -0
- package/package.json +16 -1
package/dist/cli/ui.js
ADDED
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Small, dependency-free terminal UI helpers used by the guided MongoLite CLI.
|
|
3
|
+
*
|
|
4
|
+
* Everything degrades gracefully:
|
|
5
|
+
* - When stdin/stdout is a TTY the prompts are interactive (arrow keys, filtering).
|
|
6
|
+
* - When it is not (pipes, CI, dumb terminals) the same prompts fall back to a
|
|
7
|
+
* numbered list read line-by-line, so the CLI stays scriptable.
|
|
8
|
+
*/
|
|
9
|
+
import * as readline from 'node:readline';
|
|
10
|
+
const NO_COLOR = process.env.NO_COLOR !== undefined || process.env.TERM === 'dumb';
|
|
11
|
+
export const isInteractive = () => Boolean(process.stdin.isTTY && process.stdout.isTTY && !process.env.MONGOLITE_NON_INTERACTIVE);
|
|
12
|
+
const wrap = (open, close) => (text) => NO_COLOR || !process.stdout.isTTY ? text : `\u001b[${open}m${text}\u001b[${close}m`;
|
|
13
|
+
export const style = {
|
|
14
|
+
bold: wrap('1', '22'),
|
|
15
|
+
dim: wrap('2', '22'),
|
|
16
|
+
italic: wrap('3', '23'),
|
|
17
|
+
underline: wrap('4', '24'),
|
|
18
|
+
red: wrap('31', '39'),
|
|
19
|
+
green: wrap('32', '39'),
|
|
20
|
+
yellow: wrap('33', '39'),
|
|
21
|
+
blue: wrap('34', '39'),
|
|
22
|
+
magenta: wrap('35', '39'),
|
|
23
|
+
cyan: wrap('36', '39'),
|
|
24
|
+
grey: wrap('90', '39'),
|
|
25
|
+
};
|
|
26
|
+
/** Visible width of a string, ignoring ANSI escape sequences. */
|
|
27
|
+
export function displayWidth(text) {
|
|
28
|
+
return text.replace(/\u001b\[[0-9;]*m/g, '').length;
|
|
29
|
+
}
|
|
30
|
+
/** Truncate to `max` visible characters, appending an ellipsis when cut. */
|
|
31
|
+
export function truncate(text, max) {
|
|
32
|
+
if (max <= 0)
|
|
33
|
+
return '';
|
|
34
|
+
if (text.length <= max)
|
|
35
|
+
return text;
|
|
36
|
+
if (max <= 1)
|
|
37
|
+
return text.slice(0, max);
|
|
38
|
+
return `${text.slice(0, max - 1)}…`;
|
|
39
|
+
}
|
|
40
|
+
export function terminalWidth() {
|
|
41
|
+
return Math.max(40, process.stdout.columns || 100);
|
|
42
|
+
}
|
|
43
|
+
/** Thrown when the user aborts a prompt with Esc or Ctrl+C. */
|
|
44
|
+
export class PromptCancelledError extends Error {
|
|
45
|
+
constructor() {
|
|
46
|
+
super('Prompt cancelled');
|
|
47
|
+
this.name = 'PromptCancelledError';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function selectableIndexes(choices) {
|
|
51
|
+
return choices.map((c, i) => (c.separator ? -1 : i)).filter((i) => i >= 0);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Ask the user to pick one of `choices`.
|
|
55
|
+
* Interactive terminals get an arrow-key menu with type-to-filter; everything
|
|
56
|
+
* else gets a numbered list.
|
|
57
|
+
*/
|
|
58
|
+
export async function select(options) {
|
|
59
|
+
if (options.choices.length === 0) {
|
|
60
|
+
throw new Error(`Nothing to choose from for: ${options.message}`);
|
|
61
|
+
}
|
|
62
|
+
const selectable = selectableIndexes(options.choices);
|
|
63
|
+
if (selectable.length === 1 && options.choices.length === 1) {
|
|
64
|
+
// Nothing to decide - tell the user what was picked for them and move on.
|
|
65
|
+
const only = options.choices[selectable[0]];
|
|
66
|
+
process.stdout.write(`${style.green('?')} ${style.bold(options.message)} ${style.cyan(only.label)} ${style.grey('(only option)')}\n`);
|
|
67
|
+
return only.value;
|
|
68
|
+
}
|
|
69
|
+
return isInteractive() ? interactiveSelect(options) : fallbackSelect(options);
|
|
70
|
+
}
|
|
71
|
+
async function interactiveSelect(options) {
|
|
72
|
+
const { message, choices } = options;
|
|
73
|
+
const pageSize = Math.min(options.pageSize ?? 12, Math.max(3, (process.stdout.rows || 24) - 6));
|
|
74
|
+
let filter = '';
|
|
75
|
+
let cursor = 0;
|
|
76
|
+
let renderedLines = 0;
|
|
77
|
+
const visible = () => {
|
|
78
|
+
const lowered = filter.toLowerCase();
|
|
79
|
+
return choices
|
|
80
|
+
.map((choice, index) => ({ choice, index }))
|
|
81
|
+
.filter(({ choice }) => {
|
|
82
|
+
if (!filter)
|
|
83
|
+
return true;
|
|
84
|
+
if (choice.separator)
|
|
85
|
+
return false;
|
|
86
|
+
return `${choice.label} ${choice.hint ?? ''}`.toLowerCase().includes(lowered);
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
const selectablePositions = (list) => list.map((entry, pos) => (entry.choice.separator ? -1 : pos)).filter((pos) => pos >= 0);
|
|
90
|
+
const initial = options.initialIndex ?? 0;
|
|
91
|
+
{
|
|
92
|
+
const list = visible();
|
|
93
|
+
const positions = selectablePositions(list);
|
|
94
|
+
const wanted = list.findIndex((entry) => entry.index === initial);
|
|
95
|
+
cursor = positions.includes(wanted) ? wanted : (positions[0] ?? 0);
|
|
96
|
+
}
|
|
97
|
+
const clear = () => {
|
|
98
|
+
if (renderedLines > 0) {
|
|
99
|
+
process.stdout.write(`\u001b[${renderedLines}A`);
|
|
100
|
+
process.stdout.write('\u001b[0J');
|
|
101
|
+
}
|
|
102
|
+
renderedLines = 0;
|
|
103
|
+
};
|
|
104
|
+
const render = () => {
|
|
105
|
+
clear();
|
|
106
|
+
const width = terminalWidth();
|
|
107
|
+
const list = visible();
|
|
108
|
+
const positions = selectablePositions(list);
|
|
109
|
+
if (positions.length && !positions.includes(cursor)) {
|
|
110
|
+
cursor = positions[0];
|
|
111
|
+
}
|
|
112
|
+
const lines = [];
|
|
113
|
+
const filterSuffix = filter ? ` ${style.yellow(`/${filter}`)}` : '';
|
|
114
|
+
lines.push(`${style.green('?')} ${style.bold(message)}${filterSuffix}`);
|
|
115
|
+
lines.push(style.grey(options.hint ?? ' ↑/↓ move · type to filter · enter to select · esc to go back'));
|
|
116
|
+
// Scroll window so the cursor stays visible.
|
|
117
|
+
let start = 0;
|
|
118
|
+
if (list.length > pageSize) {
|
|
119
|
+
start = Math.min(Math.max(0, cursor - Math.floor(pageSize / 2)), list.length - pageSize);
|
|
120
|
+
}
|
|
121
|
+
const window = list.slice(start, start + pageSize);
|
|
122
|
+
if (window.length === 0) {
|
|
123
|
+
lines.push(style.grey(' no matches'));
|
|
124
|
+
}
|
|
125
|
+
window.forEach((entry, offset) => {
|
|
126
|
+
const pos = start + offset;
|
|
127
|
+
const { choice } = entry;
|
|
128
|
+
if (choice.separator) {
|
|
129
|
+
lines.push(style.grey(` ${choice.label}`));
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const active = pos === cursor;
|
|
133
|
+
const pointer = active ? style.cyan('❯') : ' ';
|
|
134
|
+
const label = active ? style.cyan(choice.label) : choice.label;
|
|
135
|
+
const hint = choice.hint ? ` ${style.grey(choice.hint)}` : '';
|
|
136
|
+
const line = `${pointer} ${label}${hint}`;
|
|
137
|
+
lines.push(displayWidth(line) > width ? truncate(line, width) : line);
|
|
138
|
+
});
|
|
139
|
+
if (list.length > pageSize) {
|
|
140
|
+
lines.push(style.grey(` … ${start + window.length}/${list.length}`));
|
|
141
|
+
}
|
|
142
|
+
process.stdout.write(`${lines.join('\n')}\n`);
|
|
143
|
+
renderedLines = lines.length;
|
|
144
|
+
};
|
|
145
|
+
return new Promise((resolve, reject) => {
|
|
146
|
+
readline.emitKeypressEvents(process.stdin);
|
|
147
|
+
const wasRaw = process.stdin.isRaw;
|
|
148
|
+
process.stdin.setRawMode(true);
|
|
149
|
+
process.stdin.resume();
|
|
150
|
+
const finish = (fn) => {
|
|
151
|
+
process.stdin.removeListener('keypress', onKeypress);
|
|
152
|
+
process.stdin.setRawMode(Boolean(wasRaw));
|
|
153
|
+
process.stdin.pause();
|
|
154
|
+
fn();
|
|
155
|
+
};
|
|
156
|
+
const onKeypress = (str, key) => {
|
|
157
|
+
const list = visible();
|
|
158
|
+
const positions = selectablePositions(list);
|
|
159
|
+
if (key.ctrl && key.name === 'c') {
|
|
160
|
+
clear();
|
|
161
|
+
finish(() => {
|
|
162
|
+
process.stdout.write(style.grey('Cancelled.\n'));
|
|
163
|
+
process.exit(0);
|
|
164
|
+
});
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
switch (key.name) {
|
|
168
|
+
case 'escape':
|
|
169
|
+
clear();
|
|
170
|
+
finish(() => reject(new PromptCancelledError()));
|
|
171
|
+
return;
|
|
172
|
+
case 'up': {
|
|
173
|
+
const at = positions.indexOf(cursor);
|
|
174
|
+
cursor = positions[(at - 1 + positions.length) % positions.length] ?? cursor;
|
|
175
|
+
render();
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
case 'down': {
|
|
179
|
+
const at = positions.indexOf(cursor);
|
|
180
|
+
cursor = positions[(at + 1) % positions.length] ?? cursor;
|
|
181
|
+
render();
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
case 'pageup':
|
|
185
|
+
cursor = positions[0] ?? cursor;
|
|
186
|
+
render();
|
|
187
|
+
return;
|
|
188
|
+
case 'pagedown':
|
|
189
|
+
cursor = positions[positions.length - 1] ?? cursor;
|
|
190
|
+
render();
|
|
191
|
+
return;
|
|
192
|
+
case 'return':
|
|
193
|
+
case 'enter': {
|
|
194
|
+
const chosen = list[cursor];
|
|
195
|
+
if (!chosen || chosen.choice.separator)
|
|
196
|
+
return;
|
|
197
|
+
clear();
|
|
198
|
+
process.stdout.write(`${style.green('?')} ${style.bold(message)} ${style.cyan(chosen.choice.label)}\n`);
|
|
199
|
+
finish(() => resolve(chosen.choice.value));
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
case 'backspace':
|
|
203
|
+
filter = filter.slice(0, -1);
|
|
204
|
+
render();
|
|
205
|
+
return;
|
|
206
|
+
default:
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
if (str && !key.ctrl && !key.meta && str >= ' ' && str <= '~') {
|
|
210
|
+
filter += str;
|
|
211
|
+
render();
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
process.stdin.on('keypress', onKeypress);
|
|
215
|
+
render();
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
async function fallbackSelect(options) {
|
|
219
|
+
const { message, choices } = options;
|
|
220
|
+
const numbered = choices
|
|
221
|
+
.map((choice, index) => ({ choice, index }))
|
|
222
|
+
.filter((e) => !e.choice.separator);
|
|
223
|
+
process.stdout.write(`\n${style.bold(message)}\n`);
|
|
224
|
+
numbered.forEach((entry, position) => {
|
|
225
|
+
const hint = entry.choice.hint ? ` ${style.grey(entry.choice.hint)}` : '';
|
|
226
|
+
process.stdout.write(` ${position + 1}) ${entry.choice.label}${hint}\n`);
|
|
227
|
+
});
|
|
228
|
+
for (;;) {
|
|
229
|
+
const answer = (await question(`Choose 1-${numbered.length}: `)).trim();
|
|
230
|
+
if (answer === '')
|
|
231
|
+
continue;
|
|
232
|
+
const position = Number.parseInt(answer, 10);
|
|
233
|
+
if (Number.isInteger(position) && position >= 1 && position <= numbered.length) {
|
|
234
|
+
return numbered[position - 1].choice.value;
|
|
235
|
+
}
|
|
236
|
+
// Also accept an exact (case-insensitive) label so scripted input stays readable.
|
|
237
|
+
const byLabel = numbered.find((entry) => entry.choice.label.toLowerCase() === answer.toLowerCase());
|
|
238
|
+
if (byLabel)
|
|
239
|
+
return byLabel.choice.value;
|
|
240
|
+
process.stdout.write(style.red(' Not a valid choice, try again.\n'));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* A single readline interface is reused for line input when stdin is not a
|
|
245
|
+
* TTY. Creating one per prompt would work for a human typing, but a *piped*
|
|
246
|
+
* script has all its answers buffered at once: closing the interface after the
|
|
247
|
+
* first question discards every remaining line. Interactive sessions still get
|
|
248
|
+
* a throwaway interface per prompt so they can coexist with the raw-mode
|
|
249
|
+
* keypress handling in `select`.
|
|
250
|
+
*/
|
|
251
|
+
let sharedInterface = null;
|
|
252
|
+
let stdinEnded = false;
|
|
253
|
+
/** Lines that arrived before anything asked for them. */
|
|
254
|
+
const bufferedLines = [];
|
|
255
|
+
/** Callbacks waiting for the next line; `null` means stdin ended first. */
|
|
256
|
+
const lineWaiters = [];
|
|
257
|
+
function getSharedInterface() {
|
|
258
|
+
if (!sharedInterface) {
|
|
259
|
+
sharedInterface = readline.createInterface({
|
|
260
|
+
input: process.stdin,
|
|
261
|
+
output: process.stdout,
|
|
262
|
+
});
|
|
263
|
+
// Queue every line as it arrives. Piped input delivers all of its lines
|
|
264
|
+
// immediately, long before the later prompts ask for them.
|
|
265
|
+
sharedInterface.on('line', (line) => {
|
|
266
|
+
const waiter = lineWaiters.shift();
|
|
267
|
+
if (waiter)
|
|
268
|
+
waiter(line);
|
|
269
|
+
else
|
|
270
|
+
bufferedLines.push(line);
|
|
271
|
+
});
|
|
272
|
+
sharedInterface.on('close', () => {
|
|
273
|
+
stdinEnded = true;
|
|
274
|
+
while (lineWaiters.length > 0)
|
|
275
|
+
lineWaiters.shift()?.(null);
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
return sharedInterface;
|
|
279
|
+
}
|
|
280
|
+
/** Release the shared interface so the process can exit. */
|
|
281
|
+
export function closePrompts() {
|
|
282
|
+
sharedInterface?.close();
|
|
283
|
+
sharedInterface = null;
|
|
284
|
+
}
|
|
285
|
+
/** Read a single line from stdin. */
|
|
286
|
+
export function question(prompt) {
|
|
287
|
+
if (isInteractive()) {
|
|
288
|
+
return new Promise((resolve) => {
|
|
289
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
290
|
+
rl.question(prompt, (answer) => {
|
|
291
|
+
rl.close();
|
|
292
|
+
resolve(answer);
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
getSharedInterface();
|
|
297
|
+
process.stdout.write(prompt);
|
|
298
|
+
const buffered = bufferedLines.shift();
|
|
299
|
+
if (buffered !== undefined) {
|
|
300
|
+
process.stdout.write(`${buffered}\n`);
|
|
301
|
+
return Promise.resolve(buffered);
|
|
302
|
+
}
|
|
303
|
+
if (stdinEnded) {
|
|
304
|
+
// Input is exhausted - carrying on would spin forever re-asking.
|
|
305
|
+
process.stdout.write(`\n${style.grey('Input ended.')}\n`);
|
|
306
|
+
process.exit(0);
|
|
307
|
+
}
|
|
308
|
+
return new Promise((resolve) => {
|
|
309
|
+
lineWaiters.push((line) => {
|
|
310
|
+
if (line === null) {
|
|
311
|
+
process.stdout.write(`\n${style.grey('Input ended.')}\n`);
|
|
312
|
+
process.exit(0);
|
|
313
|
+
}
|
|
314
|
+
resolve(line);
|
|
315
|
+
});
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
/** Ask for free-text input, re-prompting until `validate` is happy. */
|
|
319
|
+
export async function text(options) {
|
|
320
|
+
const suffix = options.defaultValue ? style.grey(` (${options.defaultValue})`) : '';
|
|
321
|
+
if (options.hint)
|
|
322
|
+
process.stdout.write(`${style.grey(options.hint)}\n`);
|
|
323
|
+
for (;;) {
|
|
324
|
+
const raw = await question(`${style.green('?')} ${style.bold(options.message)}${suffix} `);
|
|
325
|
+
const value = raw.trim() === '' ? (options.defaultValue ?? '') : raw.trim();
|
|
326
|
+
if (value === '' && !options.allowEmpty && !options.defaultValue) {
|
|
327
|
+
process.stdout.write(style.red(' A value is required.\n'));
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
const error = options.validate?.(value);
|
|
331
|
+
if (error) {
|
|
332
|
+
process.stdout.write(`${style.red(` ${error}`)}\n`);
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
return value;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/** Ask for multi-line input; a blank line ends the entry. */
|
|
339
|
+
export async function multilineText(message) {
|
|
340
|
+
process.stdout.write(`${style.green('?')} ${style.bold(message)}\n`);
|
|
341
|
+
process.stdout.write(style.grey(' Finish with an empty line.\n'));
|
|
342
|
+
const lines = [];
|
|
343
|
+
for (;;) {
|
|
344
|
+
const line = await question(' ');
|
|
345
|
+
if (line.trim() === '')
|
|
346
|
+
break;
|
|
347
|
+
lines.push(line);
|
|
348
|
+
}
|
|
349
|
+
return lines.join('\n');
|
|
350
|
+
}
|
|
351
|
+
export async function confirm(message, defaultValue = false) {
|
|
352
|
+
const hint = defaultValue ? 'Y/n' : 'y/N';
|
|
353
|
+
const answer = (await question(`${style.green('?')} ${style.bold(message)} ${style.grey(`(${hint})`)} `))
|
|
354
|
+
.trim()
|
|
355
|
+
.toLowerCase();
|
|
356
|
+
if (answer === '')
|
|
357
|
+
return defaultValue;
|
|
358
|
+
return answer === 'y' || answer === 'yes';
|
|
359
|
+
}
|
|
360
|
+
/** Wait for the user before scrolling more output past them. */
|
|
361
|
+
export async function pause(message = 'Press enter to continue') {
|
|
362
|
+
await question(style.grey(`${message} `));
|
|
363
|
+
}
|
|
364
|
+
export function heading(text) {
|
|
365
|
+
process.stdout.write(`\n${style.bold(style.underline(text))}\n`);
|
|
366
|
+
}
|
|
367
|
+
export function info(text) {
|
|
368
|
+
process.stdout.write(`${text}\n`);
|
|
369
|
+
}
|
|
370
|
+
export function warn(text) {
|
|
371
|
+
process.stdout.write(`${style.yellow('!')} ${text}\n`);
|
|
372
|
+
}
|
|
373
|
+
export function error(text) {
|
|
374
|
+
process.stdout.write(`${style.red('✖')} ${text}\n`);
|
|
375
|
+
}
|
|
376
|
+
export function success(text) {
|
|
377
|
+
process.stdout.write(`${style.green('✔')} ${text}\n`);
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"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"}
|
package/dist/cloudflare.d.ts
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
export { MongoLite } from './mongo-client.js';
|
|
32
32
|
export type { MongoLiteBaseOptions } from './mongo-client.js';
|
|
33
33
|
export { CloudflareDurableObjectAdapter } from './adapters/cloudflare.js';
|
|
34
|
-
export type { SqlStorage, SqlStorageCursor, SqlStorageValue
|
|
34
|
+
export type { SqlStorage, SqlStorageCursor, SqlStorageValue } from './adapters/cloudflare.js';
|
|
35
35
|
export type { IDatabaseAdapter } from './db.js';
|
|
36
36
|
export { MongoLiteCollection } from './collection.js';
|
|
37
37
|
export * from './types.js';
|
package/dist/cloudflare.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,qFAAqF;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,8BAA8B;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,qFAAqF;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,8BAA8B;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAK1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,cAAc,YAAY,CAAC;AAE3B,qDAAqD;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/collection.js
CHANGED
|
@@ -1282,7 +1282,14 @@ export class MongoLiteCollection {
|
|
|
1282
1282
|
if (!upsert) {
|
|
1283
1283
|
return { acknowledged: true, matchedCount: 0, modifiedCount: 0, upsertedId: null };
|
|
1284
1284
|
}
|
|
1285
|
-
|
|
1285
|
+
// An upsert adopts the `_id` the filter pinned down, matching MongoDB. Without
|
|
1286
|
+
// this the inserted document gets a freshly generated id and the caller's
|
|
1287
|
+
// `replaceOne({ _id }, ..., { upsert: true })` silently creates the wrong row.
|
|
1288
|
+
const filterId = filter._id;
|
|
1289
|
+
const seeded = typeof filterId === 'string'
|
|
1290
|
+
? { ...replacement, _id: filterId }
|
|
1291
|
+
: replacement;
|
|
1292
|
+
const result = await this.insertOne(seeded);
|
|
1286
1293
|
return {
|
|
1287
1294
|
acknowledged: true,
|
|
1288
1295
|
matchedCount: 0,
|