fastbrowser_cli 1.0.9 → 1.0.10

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.
@@ -9,9 +9,15 @@ const node_fs_1 = __importDefault(require("node:fs"));
9
9
  const node_path_1 = __importDefault(require("node:path"));
10
10
  // npm imports
11
11
  const commander_1 = require("commander");
12
+ const string_argv_1 = __importDefault(require("string-argv"));
12
13
  // local imports
13
14
  const http_client_js_1 = require("./libs/http-client.js");
14
15
  const server_manager_js_1 = require("./libs/server-manager.js");
16
+ class SilentExitError extends Error {
17
+ constructor() {
18
+ super('silent-exit');
19
+ }
20
+ }
15
21
  function getServerFromCmd(cmd) {
16
22
  const globalOpts = cmd.optsWithGlobals();
17
23
  return http_client_js_1.HttpClient.getServerUrl(globalOpts.server);
@@ -22,18 +28,11 @@ function getAutostartFromCmd(cmd) {
22
28
  }
23
29
  async function runTool(cmd, routeName, body) {
24
30
  const server = getServerFromCmd(cmd);
25
- try {
26
- if (getAutostartFromCmd(cmd) === true) {
27
- await server_manager_js_1.ServerManager.ensureRunning(server);
28
- }
29
- const response = await http_client_js_1.HttpClient.postTool(server, routeName, body);
30
- http_client_js_1.HttpClient.printResponse(response);
31
- }
32
- catch (err) {
33
- const message = err instanceof Error ? err.message : String(err);
34
- console.error(`fastbrowser-cli error: ${message}`);
35
- process.exit(1);
31
+ if (getAutostartFromCmd(cmd) === true) {
32
+ await server_manager_js_1.ServerManager.ensureRunning(server);
36
33
  }
34
+ const response = await http_client_js_1.HttpClient.postTool(server, routeName, body);
35
+ http_client_js_1.HttpClient.printResponse(response);
37
36
  }
38
37
  ///////////////////////////////////////////////////////////////////////////////
39
38
  ///////////////////////////////////////////////////////////////////////////////
@@ -144,28 +143,14 @@ async function main() {
144
143
  .description('Start the fastbrowser HTTP server as a detached daemon')
145
144
  .action(async (_opts, cmd) => {
146
145
  const server = getServerFromCmd(cmd);
147
- try {
148
- await server_manager_js_1.ServerManager.start(server);
149
- }
150
- catch (err) {
151
- const message = err instanceof Error ? err.message : String(err);
152
- console.error(`fastbrowser-cli error: ${message}`);
153
- process.exit(1);
154
- }
146
+ await server_manager_js_1.ServerManager.start(server);
155
147
  });
156
148
  serverCmd
157
149
  .command('stop')
158
150
  .description('Stop the fastbrowser HTTP server')
159
151
  .action(async (_opts, cmd) => {
160
152
  const server = getServerFromCmd(cmd);
161
- try {
162
- await server_manager_js_1.ServerManager.stop(server);
163
- }
164
- catch (err) {
165
- const message = err instanceof Error ? err.message : String(err);
166
- console.error(`fastbrowser-cli error: ${message}`);
167
- process.exit(1);
168
- }
153
+ await server_manager_js_1.ServerManager.stop(server);
169
154
  });
170
155
  serverCmd
171
156
  .command('status')
@@ -175,7 +160,7 @@ async function main() {
175
160
  const state = await server_manager_js_1.ServerManager.status(server);
176
161
  console.log(`fastbrowser server at ${server}: ${state}`);
177
162
  if (state === 'stopped')
178
- process.exit(1);
163
+ throw new SilentExitError();
179
164
  });
180
165
  program
181
166
  .command('list_pages')
@@ -197,8 +182,7 @@ async function main() {
197
182
  .action(async (opts, cmd) => {
198
183
  const pageId = Number.parseInt(opts.pageId, 10);
199
184
  if (Number.isNaN(pageId) === true) {
200
- console.error(`Invalid --page-id: ${opts.pageId}`);
201
- process.exit(1);
185
+ throw new Error(`Invalid --page-id: ${opts.pageId}`);
202
186
  }
203
187
  await runTool(cmd, 'close_page', { pageId });
204
188
  });
@@ -220,7 +204,7 @@ async function main() {
220
204
  .command('fill_form')
221
205
  .description('Fill a form field by its accessibility selector')
222
206
  .requiredOption('-s, --selector <selector>', 'Accessibility selector (e.g. "#1_3" or \'textbox[name="Email"]\')')
223
- .requiredOption('--value <value>', 'Value to fill')
207
+ .requiredOption('-v, --value <value>', 'Value to fill')
224
208
  .action(async (opts, cmd) => {
225
209
  await runTool(cmd, 'fill_form', {
226
210
  elements: [{ selector: opts.selector, value: opts.value }],
@@ -238,14 +222,7 @@ async function main() {
238
222
  .option('--no-with-ancestors', 'Exclude ancestor nodes')
239
223
  .option('--selectors-json <json>', 'JSON array of {selector,limit,withAncestors} for per-selector control')
240
224
  .action(async (opts, cmd) => {
241
- let body;
242
- try {
243
- body = buildQuerySelectorsBody(opts);
244
- }
245
- catch (err) {
246
- console.error(`fastbrowser-cli error: ${err.message}`);
247
- process.exit(1);
248
- }
225
+ const body = buildQuerySelectorsBody(opts);
249
226
  await runTool(cmd, 'query_selectors_all', body);
250
227
  });
251
228
  program
@@ -259,14 +236,7 @@ async function main() {
259
236
  .option('--no-with-ancestors', 'Exclude ancestor nodes')
260
237
  .option('--selectors-json <json>', 'JSON array of {selector,withAncestors} for per-selector control')
261
238
  .action(async (opts, cmd) => {
262
- let body;
263
- try {
264
- body = buildQuerySelectorFirstBody(opts);
265
- }
266
- catch (err) {
267
- console.error(`fastbrowser-cli error: ${err.message}`);
268
- process.exit(1);
269
- }
239
+ const body = buildQuerySelectorFirstBody(opts);
270
240
  await runTool(cmd, 'query_selectors', body);
271
241
  });
272
242
  program
@@ -282,7 +252,92 @@ async function main() {
282
252
  .action(async (opts, cmd) => {
283
253
  await runTool(cmd, 'press_keys', { keys: opts.keys });
284
254
  });
285
- await program.parseAsync(process.argv);
255
+ program
256
+ .command('batch [file]')
257
+ .description('Run multiple commands from a file, piped stdin, or an inline --script string (one command per line, # comments allowed)')
258
+ .option('--script <script>', 'Inline multi-line script (overrides [file] and stdin)')
259
+ .option('--no-stop-on-error', 'Continue running subsequent lines after a failure (default: stop on first error)')
260
+ .action(async (file, opts, cmd) => {
261
+ const source = await readBatchSource(file, opts.script);
262
+ await runBatch(program, source, opts.stopOnError !== false, cmd);
263
+ });
264
+ program.exitOverride();
265
+ try {
266
+ await program.parseAsync(process.argv);
267
+ }
268
+ catch (err) {
269
+ if (err instanceof SilentExitError) {
270
+ process.exit(1);
271
+ }
272
+ if (err instanceof commander_1.CommanderError) {
273
+ process.exit(err.exitCode === undefined ? 1 : err.exitCode);
274
+ }
275
+ const message = err instanceof Error ? err.message : String(err);
276
+ console.error(`fastbrowser-cli error: ${message}`);
277
+ process.exit(1);
278
+ }
279
+ }
280
+ async function readBatchSource(file, inlineScript) {
281
+ if (inlineScript !== undefined && inlineScript !== '') {
282
+ return inlineScript;
283
+ }
284
+ if (file !== undefined && file !== '') {
285
+ return await node_fs_1.default.promises.readFile(file, 'utf-8');
286
+ }
287
+ if (process.stdin.isTTY === true) {
288
+ throw new Error('batch: no input. Provide a file path, --script, or pipe commands on stdin.');
289
+ }
290
+ return await readStdinToString();
291
+ }
292
+ async function readStdinToString() {
293
+ const chunks = [];
294
+ return await new Promise((resolve, reject) => {
295
+ process.stdin.on('data', (chunk) => chunks.push(chunk));
296
+ process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
297
+ process.stdin.on('error', (err) => reject(err));
298
+ });
299
+ }
300
+ async function runBatch(program, source, stopOnError, batchCmd) {
301
+ const globalOpts = batchCmd.optsWithGlobals();
302
+ const globalFlags = [];
303
+ if (globalOpts.server !== undefined) {
304
+ globalFlags.push('--server', globalOpts.server);
305
+ }
306
+ if (globalOpts.autostart === false) {
307
+ globalFlags.push('--no-autostart');
308
+ }
309
+ const lines = source.split('\n');
310
+ let ok = 0;
311
+ let failed = 0;
312
+ for (const rawLine of lines) {
313
+ const line = rawLine.trim();
314
+ if (line === '' || line.startsWith('#') === true)
315
+ continue;
316
+ const argv = (0, string_argv_1.default)(line);
317
+ if (argv.length === 0)
318
+ continue;
319
+ console.log(`> ${line}`);
320
+ try {
321
+ await program.parseAsync([...globalFlags, ...argv], { from: 'user' });
322
+ ok += 1;
323
+ }
324
+ catch (err) {
325
+ failed += 1;
326
+ if (err instanceof SilentExitError === false && err instanceof commander_1.CommanderError === false) {
327
+ const message = err instanceof Error ? err.message : String(err);
328
+ console.error(`fastbrowser-cli error: ${message}`);
329
+ }
330
+ if (stopOnError === true) {
331
+ throw new SilentExitError();
332
+ }
333
+ }
334
+ }
335
+ if (stopOnError === false) {
336
+ console.log(`batch: ${ok} ok, ${failed} failed`);
337
+ }
338
+ if (failed > 0) {
339
+ throw new SilentExitError();
340
+ }
286
341
  }
287
342
  void main();
288
343
  //# sourceMappingURL=fastbrowser_cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fastbrowser_cli.js","sourceRoot":"","sources":["../../src/fastbrowser_cli/fastbrowser_cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fastbrowser_cli.js","sourceRoot":"","sources":["../../src/fastbrowser_cli/fastbrowser_cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fastbrowser_cli",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "",
5
5
  "main": "dist/fastbrowser_cli/fastbrowser_cli.js",
6
6
  "bin": {
@@ -25,6 +25,7 @@
25
25
  "a11y_parse": "^1.0.1",
26
26
  "commander": "^12.1.0",
27
27
  "express": "^4.21.2",
28
+ "string-argv": "^0.3.2",
28
29
  "typescript": "^6.0.3",
29
30
  "zod": "^4.3.6",
30
31
  "zod-from-json-schema": "^0.5.2"
@@ -190,6 +190,41 @@ npx fastbrowser_cli press_keys --keys "Tab, Tab, Enter"
190
190
  npx fastbrowser_cli press_keys --keys "Hello, Tab, Enter"
191
191
  ```
192
192
 
193
+ ## Batch Execution
194
+
195
+ Run several commands from one invocation — each line is parsed and executed like a standalone command, reusing the persistent HTTP server session.
196
+
197
+ Syntax rules:
198
+ - One command per line, same syntax as the standalone CLI (e.g. `click -s '...'`)
199
+ - Shell-style quoting (single and double quotes)
200
+ - Blank lines are ignored
201
+ - Lines starting with `#` are comments
202
+
203
+ By default, the batch stops at the first failing line (shell `set -e` semantics). Pass `--no-stop-on-error` to log failures and continue; the process still exits non-zero at the end if any line failed.
204
+
205
+ ```bash
206
+ # From a file
207
+ npx fastbrowser_cli batch ./demo.fbs
208
+
209
+ # Piped on stdin
210
+ cat demo.fbs | npx fastbrowser_cli batch
211
+
212
+ # Inline script
213
+ npx fastbrowser_cli batch --script $'press_keys --keys "Enter"\nclick -s \'button[name^="Tout effacer"]\''
214
+
215
+ # Continue through failures
216
+ npx fastbrowser_cli batch --no-stop-on-error ./demo.fbs
217
+ ```
218
+
219
+ Example `demo.fbs`:
220
+
221
+ ```
222
+ # open a page and interact
223
+ new_page --url https://example.com
224
+ fill_form -s 'textbox[name="Email"]' --value 'hello@example.com'
225
+ press_keys --keys "Tab, Enter"
226
+ ```
227
+
193
228
  ## Command Reference
194
229
 
195
230
  | Command | Purpose | Required flags |
@@ -204,6 +239,7 @@ npx fastbrowser_cli press_keys --keys "Hello, Tab, Enter"
204
239
  | `click` | Click an element by accessibility selector | `--selector` / `-s` |
205
240
  | `fill_form` | Fill a form field by accessibility selector | `--selector` / `-s`, `--value` |
206
241
  | `press_keys` | Press a comma-separated key sequence | `--keys` |
242
+ | `batch` | Run multiple commands from a file, piped stdin, or `--script` inline | one of: `<file>`, `--script`, or piped stdin |
207
243
  | `server start` | Start the HTTP server daemon | — |
208
244
  | `server status` | Report server running/stopped | — |
209
245
  | `server stop` | Stop the HTTP server | — |
@@ -5,7 +5,8 @@ import fs from 'node:fs';
5
5
  import path from 'node:path';
6
6
 
7
7
  // npm imports
8
- import { Command } from 'commander';
8
+ import { Command, CommanderError } from 'commander';
9
+ import stringArgv from 'string-argv';
9
10
 
10
11
  // local imports
11
12
  import { HttpClient } from './libs/http-client.js';
@@ -24,6 +25,12 @@ type GlobalOpts = {
24
25
  autostart?: boolean;
25
26
  };
26
27
 
28
+ class SilentExitError extends Error {
29
+ constructor() {
30
+ super('silent-exit');
31
+ }
32
+ }
33
+
27
34
  function getServerFromCmd(cmd: Command): string {
28
35
  const globalOpts = cmd.optsWithGlobals<GlobalOpts>();
29
36
  return HttpClient.getServerUrl(globalOpts.server);
@@ -36,17 +43,11 @@ function getAutostartFromCmd(cmd: Command): boolean {
36
43
 
37
44
  async function runTool(cmd: Command, routeName: string, body: unknown): Promise<void> {
38
45
  const server = getServerFromCmd(cmd);
39
- try {
40
- if (getAutostartFromCmd(cmd) === true) {
41
- await ServerManager.ensureRunning(server);
42
- }
43
- const response = await HttpClient.postTool(server, routeName, body);
44
- HttpClient.printResponse(response);
45
- } catch (err) {
46
- const message = err instanceof Error ? err.message : String(err);
47
- console.error(`fastbrowser-cli error: ${message}`);
48
- process.exit(1);
46
+ if (getAutostartFromCmd(cmd) === true) {
47
+ await ServerManager.ensureRunning(server);
49
48
  }
49
+ const response = await HttpClient.postTool(server, routeName, body);
50
+ HttpClient.printResponse(response);
50
51
  }
51
52
 
52
53
  ///////////////////////////////////////////////////////////////////////////////
@@ -179,13 +180,7 @@ async function main(): Promise<void> {
179
180
  .description('Start the fastbrowser HTTP server as a detached daemon')
180
181
  .action(async (_opts, cmd: Command) => {
181
182
  const server = getServerFromCmd(cmd);
182
- try {
183
- await ServerManager.start(server);
184
- } catch (err) {
185
- const message = err instanceof Error ? err.message : String(err);
186
- console.error(`fastbrowser-cli error: ${message}`);
187
- process.exit(1);
188
- }
183
+ await ServerManager.start(server);
189
184
  });
190
185
 
191
186
  serverCmd
@@ -193,13 +188,7 @@ async function main(): Promise<void> {
193
188
  .description('Stop the fastbrowser HTTP server')
194
189
  .action(async (_opts, cmd: Command) => {
195
190
  const server = getServerFromCmd(cmd);
196
- try {
197
- await ServerManager.stop(server);
198
- } catch (err) {
199
- const message = err instanceof Error ? err.message : String(err);
200
- console.error(`fastbrowser-cli error: ${message}`);
201
- process.exit(1);
202
- }
191
+ await ServerManager.stop(server);
203
192
  });
204
193
 
205
194
  serverCmd
@@ -209,7 +198,7 @@ async function main(): Promise<void> {
209
198
  const server = getServerFromCmd(cmd);
210
199
  const state = await ServerManager.status(server);
211
200
  console.log(`fastbrowser server at ${server}: ${state}`);
212
- if (state === 'stopped') process.exit(1);
201
+ if (state === 'stopped') throw new SilentExitError();
213
202
  });
214
203
 
215
204
  program
@@ -234,8 +223,7 @@ async function main(): Promise<void> {
234
223
  .action(async (opts: { pageId: string }, cmd: Command) => {
235
224
  const pageId = Number.parseInt(opts.pageId, 10);
236
225
  if (Number.isNaN(pageId) === true) {
237
- console.error(`Invalid --page-id: ${opts.pageId}`);
238
- process.exit(1);
226
+ throw new Error(`Invalid --page-id: ${opts.pageId}`);
239
227
  }
240
228
  await runTool(cmd, 'close_page', { pageId });
241
229
  });
@@ -260,7 +248,7 @@ async function main(): Promise<void> {
260
248
  .command('fill_form')
261
249
  .description('Fill a form field by its accessibility selector')
262
250
  .requiredOption('-s, --selector <selector>', 'Accessibility selector (e.g. "#1_3" or \'textbox[name="Email"]\')')
263
- .requiredOption('--value <value>', 'Value to fill')
251
+ .requiredOption('-v, --value <value>', 'Value to fill')
264
252
  .action(async (opts: { selector: string; value: string }, cmd: Command) => {
265
253
  await runTool(cmd, 'fill_form', {
266
254
  elements: [{ selector: opts.selector, value: opts.value }],
@@ -284,13 +272,7 @@ async function main(): Promise<void> {
284
272
  withAncestors?: boolean;
285
273
  selectorsJson?: string;
286
274
  }, cmd: Command) => {
287
- let body: QuerySelectorsAllRequest;
288
- try {
289
- body = buildQuerySelectorsBody(opts);
290
- } catch (err) {
291
- console.error(`fastbrowser-cli error: ${(err as Error).message}`);
292
- process.exit(1);
293
- }
275
+ const body = buildQuerySelectorsBody(opts);
294
276
  await runTool(cmd, 'query_selectors_all', body);
295
277
  });
296
278
 
@@ -309,13 +291,7 @@ async function main(): Promise<void> {
309
291
  withAncestors?: boolean;
310
292
  selectorsJson?: string;
311
293
  }, cmd: Command) => {
312
- let body: QuerySelectorRequest;
313
- try {
314
- body = buildQuerySelectorFirstBody(opts);
315
- } catch (err) {
316
- console.error(`fastbrowser-cli error: ${(err as Error).message}`);
317
- process.exit(1);
318
- }
294
+ const body = buildQuerySelectorFirstBody(opts);
319
295
  await runTool(cmd, 'query_selectors', body);
320
296
  });
321
297
 
@@ -334,7 +310,97 @@ async function main(): Promise<void> {
334
310
  await runTool(cmd, 'press_keys', { keys: opts.keys });
335
311
  });
336
312
 
337
- await program.parseAsync(process.argv);
313
+ program
314
+ .command('batch [file]')
315
+ .description('Run multiple commands from a file, piped stdin, or an inline --script string (one command per line, # comments allowed)')
316
+ .option('--script <script>', 'Inline multi-line script (overrides [file] and stdin)')
317
+ .option('--no-stop-on-error', 'Continue running subsequent lines after a failure (default: stop on first error)')
318
+ .action(async (file: string | undefined, opts: { script?: string; stopOnError: boolean }, cmd: Command) => {
319
+ const source = await readBatchSource(file, opts.script);
320
+ await runBatch(program, source, opts.stopOnError !== false, cmd);
321
+ });
322
+
323
+ program.exitOverride();
324
+
325
+ try {
326
+ await program.parseAsync(process.argv);
327
+ } catch (err) {
328
+ if (err instanceof SilentExitError) {
329
+ process.exit(1);
330
+ }
331
+ if (err instanceof CommanderError) {
332
+ process.exit(err.exitCode === undefined ? 1 : err.exitCode);
333
+ }
334
+ const message = err instanceof Error ? err.message : String(err);
335
+ console.error(`fastbrowser-cli error: ${message}`);
336
+ process.exit(1);
337
+ }
338
+ }
339
+
340
+ async function readBatchSource(file: string | undefined, inlineScript: string | undefined): Promise<string> {
341
+ if (inlineScript !== undefined && inlineScript !== '') {
342
+ return inlineScript;
343
+ }
344
+ if (file !== undefined && file !== '') {
345
+ return await fs.promises.readFile(file, 'utf-8');
346
+ }
347
+ if (process.stdin.isTTY === true) {
348
+ throw new Error('batch: no input. Provide a file path, --script, or pipe commands on stdin.');
349
+ }
350
+ return await readStdinToString();
351
+ }
352
+
353
+ async function readStdinToString(): Promise<string> {
354
+ const chunks: Buffer[] = [];
355
+ return await new Promise((resolve, reject) => {
356
+ process.stdin.on('data', (chunk) => chunks.push(chunk as Buffer));
357
+ process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
358
+ process.stdin.on('error', (err) => reject(err));
359
+ });
360
+ }
361
+
362
+ async function runBatch(program: Command, source: string, stopOnError: boolean, batchCmd: Command): Promise<void> {
363
+ const globalOpts = batchCmd.optsWithGlobals<GlobalOpts>();
364
+ const globalFlags: string[] = [];
365
+ if (globalOpts.server !== undefined) {
366
+ globalFlags.push('--server', globalOpts.server);
367
+ }
368
+ if (globalOpts.autostart === false) {
369
+ globalFlags.push('--no-autostart');
370
+ }
371
+
372
+ const lines = source.split('\n');
373
+ let ok = 0;
374
+ let failed = 0;
375
+ for (const rawLine of lines) {
376
+ const line = rawLine.trim();
377
+ if (line === '' || line.startsWith('#') === true) continue;
378
+
379
+ const argv = stringArgv(line);
380
+ if (argv.length === 0) continue;
381
+
382
+ console.log(`> ${line}`);
383
+ try {
384
+ await program.parseAsync([...globalFlags, ...argv], { from: 'user' });
385
+ ok += 1;
386
+ } catch (err) {
387
+ failed += 1;
388
+ if (err instanceof SilentExitError === false && err instanceof CommanderError === false) {
389
+ const message = err instanceof Error ? err.message : String(err);
390
+ console.error(`fastbrowser-cli error: ${message}`);
391
+ }
392
+ if (stopOnError === true) {
393
+ throw new SilentExitError();
394
+ }
395
+ }
396
+ }
397
+
398
+ if (stopOnError === false) {
399
+ console.log(`batch: ${ok} ok, ${failed} failed`);
400
+ }
401
+ if (failed > 0) {
402
+ throw new SilentExitError();
403
+ }
338
404
  }
339
405
 
340
406
  void main();