extension 3.8.10 → 3.8.11
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-lib/messages.d.ts +2 -0
- package/dist/cli.cjs +37 -7
- package/package.json +4 -4
|
@@ -67,3 +67,5 @@ export type ProgramAIHelpJSON = {
|
|
|
67
67
|
export declare function programAIHelpJSON(version: string): ProgramAIHelpJSON;
|
|
68
68
|
export declare function invalidAIHelpFormat(value: string): string;
|
|
69
69
|
export declare function sourceInspectionNotSupported(command: 'start' | 'preview'): string;
|
|
70
|
+
export declare function removedNoRunnerFlag(): string;
|
|
71
|
+
export declare function noBrowserNotSupportedForCommand(command?: string): string;
|
package/dist/cli.cjs
CHANGED
|
@@ -483,6 +483,12 @@ Cross-Browser Compatibility
|
|
|
483
483
|
function sourceInspectionNotSupported(command) {
|
|
484
484
|
return `${getLoggingPrefix('error')} ${code(`extension ${command}`)} currently runs in run-only preview mode and does not support source inspection.\nUse ${code('extension dev --source <url>')} for source inspection features.`;
|
|
485
485
|
}
|
|
486
|
+
function removedNoRunnerFlag() {
|
|
487
|
+
return `${getLoggingPrefix('error')} ${code('--no-runner')} was removed.\nUse ${code('--no-browser')} instead.`;
|
|
488
|
+
}
|
|
489
|
+
function noBrowserNotSupportedForCommand(command) {
|
|
490
|
+
return `${getLoggingPrefix('error')} ${code('--no-browser')} is only supported for ${code('dev')}, ${code('start')}, and ${code('preview')}.\nReceived command: ${code(command || '(none)')}`;
|
|
491
|
+
}
|
|
486
492
|
const external_semver_namespaceObject = require("semver");
|
|
487
493
|
const external_node_fs_namespaceObject = require("node:fs");
|
|
488
494
|
var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
|
|
@@ -1006,7 +1012,7 @@ Cross-Browser Compatibility
|
|
|
1006
1012
|
}
|
|
1007
1013
|
const dev_require = (0, external_module_namespaceObject.createRequire)(__rslib_import_meta_url__);
|
|
1008
1014
|
function registerDevCommand(program, telemetry) {
|
|
1009
|
-
program.command('dev').arguments('[project-path|remote-url]').usage('dev [project-path|remote-url] [options]').description(commandDescriptions.dev).option('--profile <path-to-file | boolean>', 'what path to use for the browser profile. A boolean value of false sets the profile to the default user profile. Defaults to a fresh profile').option('--browser <chrome | chromium | edge | firefox | chromium-based | gecko-based | firefox-based>', 'specify a browser/engine to run. Defaults to `chromium`').option('--chromium-binary <path-to-binary>', 'specify a path to the Chromium binary. This option overrides the --browser setting. Defaults to the system default').option('--gecko-binary, --firefox-binary <path-to-binary>', 'specify a path to the Gecko binary. This option overrides the --browser setting. Defaults to the system default').option('--polyfill [boolean]', 'whether or not to apply the cross-browser polyfill. Defaults to `false`').option('--no-open', 'do not open the browser automatically (default: open)').option('--
|
|
1015
|
+
program.command('dev').arguments('[project-path|remote-url]').usage('dev [project-path|remote-url] [options]').description(commandDescriptions.dev).addHelpText('after', '\nAdditional option:\n --no-browser do not launch the browser (dev server still starts)\n').option('--profile <path-to-file | boolean>', 'what path to use for the browser profile. A boolean value of false sets the profile to the default user profile. Defaults to a fresh profile').option('--browser <chrome | chromium | edge | firefox | chromium-based | gecko-based | firefox-based>', 'specify a browser/engine to run. Defaults to `chromium`').option('--chromium-binary <path-to-binary>', 'specify a path to the Chromium binary. This option overrides the --browser setting. Defaults to the system default').option('--gecko-binary, --firefox-binary <path-to-binary>', 'specify a path to the Gecko binary. This option overrides the --browser setting. Defaults to the system default').option('--polyfill [boolean]', 'whether or not to apply the cross-browser polyfill. Defaults to `false`').option('--no-open', 'do not open the browser automatically (default: open)').option('--starting-url <url>', 'specify the starting URL for the browser. Defaults to `undefined`').option('--port <port>', 'specify the port to use for the development server. Defaults to `8080`').option('--log-context <list>', '[experimental] comma-separated contexts to include (background,content,page,sidebar,popup,options,devtools). Use `all` to include all contexts (default)').option('--logs <off|error|warn|info|debug|trace|all>', '[experimental] minimum centralized logger level to display in terminal (default: off)').option('--log-format <pretty|json|ndjson>', '[experimental] output format for logger events. Defaults to `pretty`').option('--no-log-timestamps', 'disable ISO timestamps in pretty output').option('--no-log-color', 'disable color in pretty output').option('--log-url <pattern>', '[experimental] only show logs where event.url matches this substring or regex (/re/i)').option('--log-tab <id>', 'only show logs for a specific tabId (number)').option('--source [url]', "[experimental] opens the provided URL in Chrome and prints the full, live HTML of the page after content scripts are injected").option('--watch-source [boolean]', '[experimental] re-print HTML on rebuilds or file changes (defaults to true when --source is present)', parseOptionalBoolean).option('--source-format <pretty|json|ndjson>', '[experimental] output format for source HTML (defaults to --log-format when present, otherwise JSON when --source is used)').option('--source-summary [boolean]', '[experimental] output a compact summary instead of full HTML', parseOptionalBoolean).option('--source-meta [boolean]', '[experimental] output page metadata (readyState, viewport, frames)', parseOptionalBoolean).option('--source-probe <selectors>', '[experimental] comma-separated CSS selectors to probe').option('--source-tree <off|root-only>', '[experimental] output a compact extension root tree').option('--source-console [boolean]', '[experimental] output console summary (best-effort)', parseOptionalBoolean).option('--source-dom [boolean]', '[experimental] output DOM snapshots and diffs (default: true when watch is enabled)', parseOptionalBoolean).option('--source-max-bytes <bytes>', '[experimental] limit HTML output size in bytes (0 disables truncation)').option('--source-redact <off|safe|strict>', '[experimental] redact sensitive content in HTML output (default: safe for JSON/NDJSON)').option('--source-include-shadow <off|open-only|all>', '[experimental] control Shadow DOM inclusion in HTML output (default: open-only)').option('--source-diff [boolean]', '[experimental] include diff metadata on watch updates (default: true when watch is enabled)', parseOptionalBoolean).option('--extensions <list>', 'comma-separated list of companion extensions or store URLs to load').option('--install [boolean]', '[internal] install project dependencies when missing', parseOptionalBoolean).option('--author, --author-mode', '[internal] enable maintainer diagnostics (does not affect user runtime logs)').action(async function(pathOrRemoteUrl, { browser = 'chromium', ...devOptions }) {
|
|
1010
1016
|
if (devOptions.author || devOptions['authorMode']) {
|
|
1011
1017
|
process.env.EXTENSION_AUTHOR_MODE = 'true';
|
|
1012
1018
|
if (!process.env.EXTENSION_VERBOSE) process.env.EXTENSION_VERBOSE = '1';
|
|
@@ -1078,7 +1084,7 @@ Cross-Browser Compatibility
|
|
|
1078
1084
|
sourceIncludeShadow: devOptions.sourceIncludeShadow,
|
|
1079
1085
|
sourceDiff: devOptions.sourceDiff,
|
|
1080
1086
|
install: devOptions.install,
|
|
1081
|
-
|
|
1087
|
+
noBrowser: '1' === process.env.EXTENSION_CLI_NO_BROWSER,
|
|
1082
1088
|
extensions: parseExtensionsList(devOptions.extensions),
|
|
1083
1089
|
logLevel: logsOption || devOptions.logLevel || 'off',
|
|
1084
1090
|
logContexts: parseLogContexts(logContextOption),
|
|
@@ -1105,7 +1111,7 @@ Cross-Browser Compatibility
|
|
|
1105
1111
|
}
|
|
1106
1112
|
const start_require = (0, external_module_namespaceObject.createRequire)(__rslib_import_meta_url__);
|
|
1107
1113
|
function registerStartCommand(program, telemetry) {
|
|
1108
|
-
program.command('start').arguments('[project-path|remote-url]').usage('start [project-path|remote-url] [options]').description(commandDescriptions.start).option('--profile <path-to-file | boolean>', 'what path to use for the browser profile. A boolean value of false sets the profile to the default user profile. Defaults to a fresh profile').option('--browser <chrome | chromium | edge | firefox | chromium-based | gecko-based | firefox-based>', 'specify a browser/engine to run. Defaults to `chromium`').option('--polyfill [boolean]', 'whether or not to apply the cross-browser polyfill. Defaults to `true`').option('--chromium-binary <path-to-binary>', 'specify a path to the Chromium binary. This option overrides the --browser setting. Defaults to the system default').option('--gecko-binary, --firefox-binary <path-to-binary>', 'specify a path to the Gecko binary. This option overrides the --browser setting. Defaults to the system default').option('--starting-url <url>', 'specify the starting URL for the browser. Defaults to `undefined`').option('--
|
|
1114
|
+
program.command('start').arguments('[project-path|remote-url]').usage('start [project-path|remote-url] [options]').description(commandDescriptions.start).addHelpText('after', '\nAdditional option:\n --no-browser do not launch the browser (build still runs)\n').option('--profile <path-to-file | boolean>', 'what path to use for the browser profile. A boolean value of false sets the profile to the default user profile. Defaults to a fresh profile').option('--browser <chrome | chromium | edge | firefox | chromium-based | gecko-based | firefox-based>', 'specify a browser/engine to run. Defaults to `chromium`').option('--polyfill [boolean]', 'whether or not to apply the cross-browser polyfill. Defaults to `true`').option('--chromium-binary <path-to-binary>', 'specify a path to the Chromium binary. This option overrides the --browser setting. Defaults to the system default').option('--gecko-binary, --firefox-binary <path-to-binary>', 'specify a path to the Gecko binary. This option overrides the --browser setting. Defaults to the system default').option('--starting-url <url>', 'specify the starting URL for the browser. Defaults to `undefined`').option('--port <port>', 'specify the port to use for the development server. Defaults to `8080`').option('--log-context <list>', '[experimental] comma-separated contexts to include (background,content,page,sidebar,popup,options,devtools). Use `all` to include all contexts (default)').option('--logs <off|error|warn|info|debug|trace|all>', '[experimental] minimum centralized logger level to display in terminal (default: off)').option('--log-format <pretty|json|ndjson>', '[experimental] output format for logger events. Defaults to `pretty`').option('--no-log-timestamps', 'disable ISO timestamps in pretty output').option('--no-log-color', 'disable color in pretty output').option('--log-url <pattern>', '[experimental] only show logs where event.url matches this substring or regex (/re/i)').option('--log-tab <id>', 'only show logs for a specific tabId (number)').option('--source [url]', "[experimental] opens the provided URL in Chrome and prints the full, live HTML of the page after content scripts are injected").option('--watch-source [boolean]', '[experimental] re-print HTML on rebuilds or file changes', parseOptionalBoolean).option('--source-format <pretty|json|ndjson>', '[experimental] output format for source HTML (defaults to --log-format when present, otherwise JSON when --source is used)').option('--source-summary [boolean]', '[experimental] output a compact summary instead of full HTML', parseOptionalBoolean).option('--source-meta [boolean]', '[experimental] output page metadata (readyState, viewport, frames)', parseOptionalBoolean).option('--source-probe <selectors>', '[experimental] comma-separated CSS selectors to probe').option('--source-tree <off|root-only>', '[experimental] output a compact extension root tree').option('--source-console [boolean]', '[experimental] output console summary (best-effort)', parseOptionalBoolean).option('--source-dom [boolean]', '[experimental] output DOM snapshots and diffs (default: true when watch is enabled)', parseOptionalBoolean).option('--source-max-bytes <bytes>', '[experimental] limit HTML output size in bytes (0 disables truncation)').option('--source-redact <off|safe|strict>', '[experimental] redact sensitive content in HTML output (default: safe for JSON/NDJSON)').option('--source-include-shadow <off|open-only|all>', '[experimental] control Shadow DOM inclusion in HTML output (default: open-only)').option('--source-diff [boolean]', '[experimental] include diff metadata on watch updates (default: true when watch is enabled)', parseOptionalBoolean).option('--extensions <list>', 'comma-separated list of companion extensions or store URLs to load').option('--install [boolean]', '[experimental] install project dependencies when missing', parseOptionalBoolean).option('--author, --author-mode', '[experimental] enable maintainer diagnostics (does not affect user runtime logs)').action(async function(pathOrRemoteUrl, { browser = 'chromium', ...startOptions }) {
|
|
1109
1115
|
const hasSourceInspectionFlags = void 0 !== startOptions.source || void 0 !== startOptions.watchSource || void 0 !== startOptions.sourceFormat || void 0 !== startOptions.sourceSummary || void 0 !== startOptions.sourceMeta || void 0 !== startOptions.sourceProbe || void 0 !== startOptions.sourceTree || void 0 !== startOptions.sourceConsole || void 0 !== startOptions.sourceDom || void 0 !== startOptions.sourceMaxBytes || void 0 !== startOptions.sourceRedact || void 0 !== startOptions.sourceIncludeShadow || void 0 !== startOptions.sourceDiff;
|
|
1110
1116
|
if (hasSourceInspectionFlags) {
|
|
1111
1117
|
console.error(sourceInspectionNotSupported('start'));
|
|
@@ -1163,7 +1169,7 @@ Cross-Browser Compatibility
|
|
|
1163
1169
|
startingUrl: startOptions.startingUrl,
|
|
1164
1170
|
port: startOptions.port,
|
|
1165
1171
|
install: startOptions.install,
|
|
1166
|
-
|
|
1172
|
+
noBrowser: '1' === process.env.EXTENSION_CLI_NO_BROWSER,
|
|
1167
1173
|
extensions: parseExtensionsList(startOptions.extensions),
|
|
1168
1174
|
source: 'string' == typeof startOptions.source ? startOptions.source : startOptions.source,
|
|
1169
1175
|
watchSource: startOptions.watchSource,
|
|
@@ -1202,7 +1208,7 @@ Cross-Browser Compatibility
|
|
|
1202
1208
|
}
|
|
1203
1209
|
const preview_require = (0, external_module_namespaceObject.createRequire)(__rslib_import_meta_url__);
|
|
1204
1210
|
function registerPreviewCommand(program, telemetry) {
|
|
1205
|
-
program.command('preview').arguments('[project-name]').usage('preview [path-to-remote-extension] [options]').description(commandDescriptions.preview).option('--profile <path-to-file | boolean>', 'what path to use for the browser profile. A boolean value of false sets the profile to the default user profile. Defaults to a fresh profile').option('--browser <chrome | chromium | edge | firefox | chromium-based | gecko-based | firefox-based>', 'specify a browser/engine to run. Defaults to `chromium`').option('--chromium-binary <path-to-binary>', 'specify a path to the Chromium binary. This option overrides the --browser setting. Defaults to the system default').option('--gecko-binary, --firefox-binary <path-to-binary>', 'specify a path to the Gecko binary. This option overrides the --browser setting. Defaults to the system default').option('--starting-url <url>', 'specify the starting URL for the browser. Defaults to `undefined`').option('--
|
|
1211
|
+
program.command('preview').arguments('[project-name]').usage('preview [path-to-remote-extension] [options]').description(commandDescriptions.preview).addHelpText('after', '\nAdditional option:\n --no-browser do not launch the browser\n').option('--profile <path-to-file | boolean>', 'what path to use for the browser profile. A boolean value of false sets the profile to the default user profile. Defaults to a fresh profile').option('--browser <chrome | chromium | edge | firefox | chromium-based | gecko-based | firefox-based>', 'specify a browser/engine to run. Defaults to `chromium`').option('--chromium-binary <path-to-binary>', 'specify a path to the Chromium binary. This option overrides the --browser setting. Defaults to the system default').option('--gecko-binary, --firefox-binary <path-to-binary>', 'specify a path to the Gecko binary. This option overrides the --browser setting. Defaults to the system default').option('--starting-url <url>', 'specify the starting URL for the browser. Defaults to `undefined`').option('--port <port>', 'specify the port to use for the development server. Defaults to `8080`').option('--log-context <list>', '[experimental] comma-separated contexts to include (background,content,page,sidebar,popup,options,devtools). Use `all` to include all contexts (default)').option('--logs <off|error|warn|info|debug|trace|all>', '[experimental] minimum centralized logger level to display in terminal (default: off)').option('--log-format <pretty|json|ndjson>', '[experimental] output format for logger events. Defaults to `pretty`').option('--no-log-timestamps', 'disable ISO timestamps in pretty output').option('--no-log-color', 'disable color in pretty output').option('--log-url <pattern>', '[experimental] only show logs where event.url matches this substring or regex (/re/i)').option('--log-tab <id>', 'only show logs for a specific tabId (number)').option('--source [url]', "[experimental] opens the provided URL in Chrome and prints the full, live HTML of the page after content scripts are injected").option('--watch-source [boolean]', '[experimental] re-print HTML on rebuilds or file changes', parseOptionalBoolean).option('--source-format <pretty|json|ndjson>', '[experimental] output format for source HTML (defaults to --log-format when present, otherwise JSON when --source is used)').option('--source-summary [boolean]', '[experimental] output a compact summary instead of full HTML', parseOptionalBoolean).option('--source-meta [boolean]', '[experimental] output page metadata (readyState, viewport, frames)', parseOptionalBoolean).option('--source-probe <selectors>', '[experimental] comma-separated CSS selectors to probe').option('--source-tree <off|root-only>', '[experimental] output a compact extension root tree').option('--source-console [boolean]', '[experimental] output console summary (best-effort)', parseOptionalBoolean).option('--source-dom [boolean]', '[experimental] output DOM snapshots and diffs (default: true when watch is enabled)', parseOptionalBoolean).option('--source-max-bytes <bytes>', '[experimental] limit HTML output size in bytes (0 disables truncation)').option('--source-redact <off|safe|strict>', '[experimental] redact sensitive content in HTML output (default: safe for JSON/NDJSON)').option('--source-include-shadow <off|open-only|all>', '[experimental] control Shadow DOM inclusion in HTML output (default: open-only)').option('--source-diff [boolean]', '[experimental] include diff metadata on watch updates (default: true when watch is enabled)', parseOptionalBoolean).option('--extensions <list>', 'comma-separated list of companion extensions or store URLs to load').option('--author, --author-mode', '[internal] enable maintainer diagnostics (does not affect user runtime logs)').action(async function(pathOrRemoteUrl, { browser = 'chromium', ...previewOptions }) {
|
|
1206
1212
|
const hasSourceInspectionFlags = void 0 !== previewOptions.source || void 0 !== previewOptions.watchSource || void 0 !== previewOptions.sourceFormat || void 0 !== previewOptions.sourceSummary || void 0 !== previewOptions.sourceMeta || void 0 !== previewOptions.sourceProbe || void 0 !== previewOptions.sourceTree || void 0 !== previewOptions.sourceConsole || void 0 !== previewOptions.sourceDom || void 0 !== previewOptions.sourceMaxBytes || void 0 !== previewOptions.sourceRedact || void 0 !== previewOptions.sourceIncludeShadow || void 0 !== previewOptions.sourceDiff;
|
|
1207
1213
|
if (hasSourceInspectionFlags) {
|
|
1208
1214
|
console.error(sourceInspectionNotSupported('preview'));
|
|
@@ -1262,7 +1268,7 @@ Cross-Browser Compatibility
|
|
|
1262
1268
|
geckoBinary: previewOptions.geckoBinary,
|
|
1263
1269
|
startingUrl: previewOptions.startingUrl,
|
|
1264
1270
|
port: previewOptions.port,
|
|
1265
|
-
|
|
1271
|
+
noBrowser: '1' === process.env.EXTENSION_CLI_NO_BROWSER,
|
|
1266
1272
|
extensions: parseExtensionsList(previewOptions.extensions),
|
|
1267
1273
|
source: 'string' == typeof previewOptions.source ? previewOptions.source : previewOptions.source,
|
|
1268
1274
|
watchSource: previewOptions.watchSource,
|
|
@@ -1487,6 +1493,29 @@ Cross-Browser Compatibility
|
|
|
1487
1493
|
if (formatIndex >= 0) return argv[formatIndex + 1] || '';
|
|
1488
1494
|
return 'pretty';
|
|
1489
1495
|
}
|
|
1496
|
+
function resolveCommandFromArgv(argv) {
|
|
1497
|
+
for(let i = 2; i < argv.length; i += 1){
|
|
1498
|
+
const arg = argv[i];
|
|
1499
|
+
if (!arg.startsWith('-')) return arg;
|
|
1500
|
+
}
|
|
1501
|
+
}
|
|
1502
|
+
function applyNoBrowserArgvShim(argv) {
|
|
1503
|
+
const hasNoRunner = argv.includes('--no-runner');
|
|
1504
|
+
if (hasNoRunner) {
|
|
1505
|
+
console.error(removedNoRunnerFlag());
|
|
1506
|
+
process.exit(1);
|
|
1507
|
+
}
|
|
1508
|
+
const hasNoBrowser = argv.includes('--no-browser');
|
|
1509
|
+
if (!hasNoBrowser) return argv;
|
|
1510
|
+
const command = resolveCommandFromArgv(argv);
|
|
1511
|
+
const supportsNoBrowser = 'dev' === command || 'start' === command || 'preview' === command;
|
|
1512
|
+
if (!supportsNoBrowser) {
|
|
1513
|
+
console.error(noBrowserNotSupportedForCommand(command));
|
|
1514
|
+
process.exit(1);
|
|
1515
|
+
}
|
|
1516
|
+
process.env.EXTENSION_CLI_NO_BROWSER = '1';
|
|
1517
|
+
return argv.filter((arg)=>'--no-browser' !== arg);
|
|
1518
|
+
}
|
|
1490
1519
|
check_updates_checkUpdates().then((updateMessage)=>{
|
|
1491
1520
|
if (!updateMessage) return;
|
|
1492
1521
|
if ('true' === process.env.EXTENSION_CLI_BANNER_PRINTED) return void console.log(updateMessage.message);
|
|
@@ -1517,7 +1546,8 @@ Cross-Browser Compatibility
|
|
|
1517
1546
|
extensionJs.outputHelp();
|
|
1518
1547
|
process.exit(0);
|
|
1519
1548
|
}
|
|
1520
|
-
|
|
1549
|
+
const index_argv = applyNoBrowserArgvShim(process.argv);
|
|
1550
|
+
extensionJs.parseAsync(index_argv).catch((err)=>{
|
|
1521
1551
|
console.error(unhandledError(err));
|
|
1522
1552
|
process.exit(1);
|
|
1523
1553
|
});
|
package/package.json
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"extension": "./bin/extension.cjs"
|
|
34
34
|
},
|
|
35
35
|
"name": "extension",
|
|
36
|
-
"version": "3.8.
|
|
36
|
+
"version": "3.8.11",
|
|
37
37
|
"description": "Create cross-browser extensions with no build configuration.",
|
|
38
38
|
"homepage": "https://extension.js.org/",
|
|
39
39
|
"bugs": {
|
|
@@ -90,9 +90,9 @@
|
|
|
90
90
|
"@types/chrome": "^0.1.33",
|
|
91
91
|
"@types/node": "^25.2.0",
|
|
92
92
|
"@types/webextension-polyfill": "0.12.4",
|
|
93
|
-
"extension-create": "3.8.
|
|
94
|
-
"extension-develop": "3.8.
|
|
95
|
-
"extension-install": "3.8.
|
|
93
|
+
"extension-create": "3.8.11",
|
|
94
|
+
"extension-develop": "3.8.11",
|
|
95
|
+
"extension-install": "3.8.11",
|
|
96
96
|
"commander": "^14.0.3",
|
|
97
97
|
"pintor": "0.3.0",
|
|
98
98
|
"semver": "^7.7.3",
|