@xbrowser/cli 0.15.0 → 0.15.1
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/dist/cli.js +53 -2
- package/dist/index.js +53 -2
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -10618,6 +10618,22 @@ var HTTPServer = class {
|
|
|
10618
10618
|
};
|
|
10619
10619
|
|
|
10620
10620
|
// src/router.ts
|
|
10621
|
+
var KNOWN_GLOBAL_OPTIONS = /* @__PURE__ */ new Set([
|
|
10622
|
+
"json",
|
|
10623
|
+
"yaml",
|
|
10624
|
+
"session",
|
|
10625
|
+
"cdp",
|
|
10626
|
+
"cdp-endpoint",
|
|
10627
|
+
"version",
|
|
10628
|
+
"v",
|
|
10629
|
+
"help",
|
|
10630
|
+
"h",
|
|
10631
|
+
"target",
|
|
10632
|
+
"port",
|
|
10633
|
+
"token",
|
|
10634
|
+
"timeout",
|
|
10635
|
+
"headless"
|
|
10636
|
+
]);
|
|
10621
10637
|
function showCommandHelp(siteName, cmd, siteConfig, mode) {
|
|
10622
10638
|
const c = cmd;
|
|
10623
10639
|
if (mode === "json") {
|
|
@@ -10766,6 +10782,23 @@ async function routeCommand(argv, stdinCommands) {
|
|
|
10766
10782
|
}
|
|
10767
10783
|
const parsed = parseArgs(argv);
|
|
10768
10784
|
const { positional, options } = parsed;
|
|
10785
|
+
const command = positional[0];
|
|
10786
|
+
const cmdArgs = positional.slice(1);
|
|
10787
|
+
const isPluginCommand = command ? !allBuiltins.find((b) => b.name === command) && !getCommand(command) && command !== "help" : false;
|
|
10788
|
+
if (!isPluginCommand && command) {
|
|
10789
|
+
const unknownOptions = Object.keys(options).filter((k) => !KNOWN_GLOBAL_OPTIONS.has(k));
|
|
10790
|
+
if (unknownOptions.length > 0) {
|
|
10791
|
+
const unknown = unknownOptions.map((k) => `--${k}`).join(", ");
|
|
10792
|
+
outputError(
|
|
10793
|
+
`Unknown option: ${unknown}
|
|
10794
|
+
Did you mean to use a global flag? Global flags must come BEFORE the command:
|
|
10795
|
+
\u2717 xbrowser goto <url> --cdp-endpoint <endpoint> (treated as unknown)
|
|
10796
|
+
\u2713 xbrowser --cdp <endpoint> goto <url> (correct)
|
|
10797
|
+
Run "xbrowser --help" to see available global options.`
|
|
10798
|
+
);
|
|
10799
|
+
return;
|
|
10800
|
+
}
|
|
10801
|
+
}
|
|
10769
10802
|
const mode = options.json ? "json" : options.yaml ? "yaml" : "text";
|
|
10770
10803
|
const sessionName = options.session || process.env.XBROWSER_SESSION || "default";
|
|
10771
10804
|
const cdpEndpoint = options.cdp;
|
|
@@ -10777,8 +10810,6 @@ async function routeCommand(argv, stdinCommands) {
|
|
|
10777
10810
|
showMainHelp();
|
|
10778
10811
|
return;
|
|
10779
10812
|
}
|
|
10780
|
-
const command = positional[0];
|
|
10781
|
-
const cmdArgs = positional.slice(1);
|
|
10782
10813
|
if ((options.help || options.h) && positional.length > 0) {
|
|
10783
10814
|
const loader = await getPluginLoader();
|
|
10784
10815
|
const internalLoader = loader.getCore().loader;
|
|
@@ -10993,6 +11024,26 @@ Run "xbrowser ${command} --help" to see available commands.`
|
|
|
10993
11024
|
const subCmdIdx = pluginNameIdx >= 0 ? argv.indexOf(subCommand, pluginNameIdx + 1) : -1;
|
|
10994
11025
|
const rawPluginArgs = subCmdIdx >= 0 ? argv.slice(subCmdIdx + 1) : [];
|
|
10995
11026
|
const params = parsePluginParams(rawPluginArgs, cmdEntry.parameters);
|
|
11027
|
+
if (cmdEntry.parameters) {
|
|
11028
|
+
const schemaAny = cmdEntry.parameters;
|
|
11029
|
+
const def = schemaAny._def;
|
|
11030
|
+
const shapeOrFn = def?.shape ?? schemaAny.shape;
|
|
11031
|
+
const shapeObj = typeof shapeOrFn === "function" ? shapeOrFn() : shapeOrFn;
|
|
11032
|
+
if (shapeObj && typeof shapeObj === "object") {
|
|
11033
|
+
const knownKeys = new Set(Object.keys(shapeObj));
|
|
11034
|
+
knownKeys.add("_target");
|
|
11035
|
+
for (const gk of KNOWN_GLOBAL_OPTIONS) knownKeys.add(gk.replace(/-([a-z])/g, (_, c) => c.toUpperCase()));
|
|
11036
|
+
const unknownKeys = Object.keys(params).filter((k) => !knownKeys.has(k));
|
|
11037
|
+
if (unknownKeys.length > 0) {
|
|
11038
|
+
const unknown = unknownKeys.map((k) => `--${k.replace(/([A-Z])/g, "-$1").toLowerCase()}`).join(", ");
|
|
11039
|
+
outputError(
|
|
11040
|
+
`Unknown parameter: ${unknown}
|
|
11041
|
+
Run "xbrowser ${command} ${subCommand} --help" to see available parameters.`
|
|
11042
|
+
);
|
|
11043
|
+
return;
|
|
11044
|
+
}
|
|
11045
|
+
}
|
|
11046
|
+
}
|
|
10996
11047
|
if (options.target && !params._target) {
|
|
10997
11048
|
params._target = options.target;
|
|
10998
11049
|
}
|
package/dist/index.js
CHANGED
|
@@ -10932,6 +10932,22 @@ var HTTPServer = class {
|
|
|
10932
10932
|
};
|
|
10933
10933
|
|
|
10934
10934
|
// src/router.ts
|
|
10935
|
+
var KNOWN_GLOBAL_OPTIONS = /* @__PURE__ */ new Set([
|
|
10936
|
+
"json",
|
|
10937
|
+
"yaml",
|
|
10938
|
+
"session",
|
|
10939
|
+
"cdp",
|
|
10940
|
+
"cdp-endpoint",
|
|
10941
|
+
"version",
|
|
10942
|
+
"v",
|
|
10943
|
+
"help",
|
|
10944
|
+
"h",
|
|
10945
|
+
"target",
|
|
10946
|
+
"port",
|
|
10947
|
+
"token",
|
|
10948
|
+
"timeout",
|
|
10949
|
+
"headless"
|
|
10950
|
+
]);
|
|
10935
10951
|
function showCommandHelp(siteName, cmd, siteConfig, mode) {
|
|
10936
10952
|
const c = cmd;
|
|
10937
10953
|
if (mode === "json") {
|
|
@@ -11080,6 +11096,23 @@ async function routeCommand(argv, stdinCommands) {
|
|
|
11080
11096
|
}
|
|
11081
11097
|
const parsed = parseArgs(argv);
|
|
11082
11098
|
const { positional, options } = parsed;
|
|
11099
|
+
const command = positional[0];
|
|
11100
|
+
const cmdArgs = positional.slice(1);
|
|
11101
|
+
const isPluginCommand = command ? !allBuiltins.find((b) => b.name === command) && !getCommand(command) && command !== "help" : false;
|
|
11102
|
+
if (!isPluginCommand && command) {
|
|
11103
|
+
const unknownOptions = Object.keys(options).filter((k) => !KNOWN_GLOBAL_OPTIONS.has(k));
|
|
11104
|
+
if (unknownOptions.length > 0) {
|
|
11105
|
+
const unknown = unknownOptions.map((k) => `--${k}`).join(", ");
|
|
11106
|
+
outputError(
|
|
11107
|
+
`Unknown option: ${unknown}
|
|
11108
|
+
Did you mean to use a global flag? Global flags must come BEFORE the command:
|
|
11109
|
+
\u2717 xbrowser goto <url> --cdp-endpoint <endpoint> (treated as unknown)
|
|
11110
|
+
\u2713 xbrowser --cdp <endpoint> goto <url> (correct)
|
|
11111
|
+
Run "xbrowser --help" to see available global options.`
|
|
11112
|
+
);
|
|
11113
|
+
return;
|
|
11114
|
+
}
|
|
11115
|
+
}
|
|
11083
11116
|
const mode = options.json ? "json" : options.yaml ? "yaml" : "text";
|
|
11084
11117
|
const sessionName = options.session || process.env.XBROWSER_SESSION || "default";
|
|
11085
11118
|
const cdpEndpoint = options.cdp;
|
|
@@ -11091,8 +11124,6 @@ async function routeCommand(argv, stdinCommands) {
|
|
|
11091
11124
|
showMainHelp();
|
|
11092
11125
|
return;
|
|
11093
11126
|
}
|
|
11094
|
-
const command = positional[0];
|
|
11095
|
-
const cmdArgs = positional.slice(1);
|
|
11096
11127
|
if ((options.help || options.h) && positional.length > 0) {
|
|
11097
11128
|
const loader = await getPluginLoader();
|
|
11098
11129
|
const internalLoader = loader.getCore().loader;
|
|
@@ -11307,6 +11338,26 @@ Run "xbrowser ${command} --help" to see available commands.`
|
|
|
11307
11338
|
const subCmdIdx = pluginNameIdx >= 0 ? argv.indexOf(subCommand, pluginNameIdx + 1) : -1;
|
|
11308
11339
|
const rawPluginArgs = subCmdIdx >= 0 ? argv.slice(subCmdIdx + 1) : [];
|
|
11309
11340
|
const params = parsePluginParams(rawPluginArgs, cmdEntry.parameters);
|
|
11341
|
+
if (cmdEntry.parameters) {
|
|
11342
|
+
const schemaAny = cmdEntry.parameters;
|
|
11343
|
+
const def = schemaAny._def;
|
|
11344
|
+
const shapeOrFn = def?.shape ?? schemaAny.shape;
|
|
11345
|
+
const shapeObj = typeof shapeOrFn === "function" ? shapeOrFn() : shapeOrFn;
|
|
11346
|
+
if (shapeObj && typeof shapeObj === "object") {
|
|
11347
|
+
const knownKeys = new Set(Object.keys(shapeObj));
|
|
11348
|
+
knownKeys.add("_target");
|
|
11349
|
+
for (const gk of KNOWN_GLOBAL_OPTIONS) knownKeys.add(gk.replace(/-([a-z])/g, (_, c) => c.toUpperCase()));
|
|
11350
|
+
const unknownKeys = Object.keys(params).filter((k) => !knownKeys.has(k));
|
|
11351
|
+
if (unknownKeys.length > 0) {
|
|
11352
|
+
const unknown = unknownKeys.map((k) => `--${k.replace(/([A-Z])/g, "-$1").toLowerCase()}`).join(", ");
|
|
11353
|
+
outputError(
|
|
11354
|
+
`Unknown parameter: ${unknown}
|
|
11355
|
+
Run "xbrowser ${command} ${subCommand} --help" to see available parameters.`
|
|
11356
|
+
);
|
|
11357
|
+
return;
|
|
11358
|
+
}
|
|
11359
|
+
}
|
|
11360
|
+
}
|
|
11310
11361
|
if (options.target && !params._target) {
|
|
11311
11362
|
params._target = options.target;
|
|
11312
11363
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xbrowser/cli",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.1",
|
|
4
4
|
"description": "Browser automation CLI for web scraping, headless browsing, SEO analysis, and AI agent workflows. A command-line alternative to Playwright, Puppeteer, and Selenium.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|