extension-develop 3.8.16 → 3.9.0-canary.231.7b387a7

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/module.cjs CHANGED
@@ -127131,6 +127131,124 @@ var __webpack_modules__ = {
127131
127131
  });
127132
127132
  module.exports = library;
127133
127133
  },
127134
+ "./webpack/dev-server/messages.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
127135
+ "use strict";
127136
+ __webpack_require__.d(__webpack_exports__, {
127137
+ Df: ()=>autoExitForceKill,
127138
+ Gc: ()=>ready,
127139
+ Nq: ()=>bundlerFatalError,
127140
+ UF: ()=>devServerStartTimeout,
127141
+ VL: ()=>extensionJsRunnerError,
127142
+ aO: ()=>portInUse,
127143
+ bL: ()=>browserRunnerDisabled,
127144
+ eP: ()=>bundlerRecompiling,
127145
+ nI: ()=>noEntrypointsDetected,
127146
+ o6: ()=>autoExitModeEnabled,
127147
+ tJ: ()=>autoExitTriggered,
127148
+ tl: ()=>spacerLine
127149
+ });
127150
+ var fs__rspack_import_0 = __webpack_require__("fs");
127151
+ var pintor__rspack_import_1 = __webpack_require__("pintor");
127152
+ var pintor__rspack_import_1_default = /*#__PURE__*/ __webpack_require__.n(pintor__rspack_import_1);
127153
+ function getLoggingPrefix(type) {
127154
+ const isAuthor = 'true' === process.env.EXTENSION_AUTHOR_MODE;
127155
+ if (isAuthor) {
127156
+ const base = 'error' === type ? 'ERROR Author says' : '►►► Author says';
127157
+ return pintor__rspack_import_1_default().brightMagenta(base);
127158
+ }
127159
+ if ('error' === type) return pintor__rspack_import_1_default().red('ERROR');
127160
+ if ('warn' === type) return pintor__rspack_import_1_default().brightYellow('►►►');
127161
+ if ('info' === type) return pintor__rspack_import_1_default().gray('►►►');
127162
+ return pintor__rspack_import_1_default().green('►►►');
127163
+ }
127164
+ function ready(mode, browser) {
127165
+ const extensionOutput = 'firefox' === browser || 'gecko-based' === browser || 'edge' === browser ? 'Add-on' : 'Extension';
127166
+ const b = String(browser || '');
127167
+ const cap = b.charAt(0).toUpperCase() + b.slice(1);
127168
+ const pretty = pintor__rspack_import_1_default().green('ready for ' + mode);
127169
+ return `${getLoggingPrefix('info')} ${cap} ${extensionOutput} ${pretty}.`;
127170
+ }
127171
+ function readJsonRecord(filePath) {
127172
+ try {
127173
+ return JSON.parse(fs__rspack_import_0.readFileSync(filePath, 'utf8'));
127174
+ } catch {
127175
+ return null;
127176
+ }
127177
+ }
127178
+ function capitalizeToken(value) {
127179
+ return value.split('-').filter(Boolean).map((token)=>token.charAt(0).toUpperCase() + token.slice(1)).join('-');
127180
+ }
127181
+ function getExtensionVersion() {
127182
+ return process.env.EXTENSION_DEVELOP_VERSION || process.env.EXTENSION_CLI_VERSION || (()=>{
127183
+ try {
127184
+ return __webpack_require__("./package.json").rE;
127185
+ } catch {
127186
+ return 'unknown';
127187
+ }
127188
+ })();
127189
+ }
127190
+ function browserRunnerDisabled(args) {
127191
+ const manifest = readJsonRecord(args.manifestPath);
127192
+ const ready = readJsonRecord(args.readyPath);
127193
+ const browserLabel = capitalizeToken(String(args.browser || 'unknown'));
127194
+ const runId = String(ready?.runId || '').trim();
127195
+ const pid = Number.isInteger(ready?.pid) ? String(ready?.pid) : '';
127196
+ const runLabel = runId ? `${pintor__rspack_import_1_default().gray(runId)}${pid ? ` · ${pintor__rspack_import_1_default().gray(`PID ${pid}`)}` : ''}` : pid ? pintor__rspack_import_1_default().gray(`PID ${pid}`) : pintor__rspack_import_1_default().gray('n/a');
127197
+ const extensionName = String(manifest?.name || 'Extension');
127198
+ const extensionVersion = String(manifest?.version || '').trim();
127199
+ const extensionLabel = extensionVersion ? `${extensionName} ${extensionVersion}` : extensionName;
127200
+ const extensionJsVersion = getExtensionVersion();
127201
+ return [
127202
+ ` 🧩 ${pintor__rspack_import_1_default().brightBlue('Extension.js')} ${pintor__rspack_import_1_default().gray(extensionJsVersion)}`,
127203
+ ` Browser ${pintor__rspack_import_1_default().gray(args.browserModeLabel || `${browserLabel} (build-only mode)`)}`,
127204
+ ` Extension ${pintor__rspack_import_1_default().gray(extensionLabel)}`,
127205
+ ` Run ID ${runLabel}`
127206
+ ].join('\n');
127207
+ }
127208
+ function portInUse(requestedPort, newPort) {
127209
+ return `Port: Requested port ${pintor__rspack_import_1_default().brightBlue(requestedPort.toString())} is in use; using ${pintor__rspack_import_1_default().brightBlue(newPort.toString())} instead.`;
127210
+ }
127211
+ function extensionJsRunnerError(error) {
127212
+ return `Extension.js Runner Error:\n${pintor__rspack_import_1_default().red(String(error))}`;
127213
+ }
127214
+ function autoExitModeEnabled(ms) {
127215
+ return `Auto-exit enabled. Will exit after ${pintor__rspack_import_1_default().brightBlue(ms.toString())} ms if idle.`;
127216
+ }
127217
+ function autoExitTriggered(ms) {
127218
+ return `Auto-exit triggered after ${pintor__rspack_import_1_default().brightBlue(ms.toString())} ms. Cleaning up...`;
127219
+ }
127220
+ function autoExitForceKill(ms) {
127221
+ return `Force-killing process after ${pintor__rspack_import_1_default().brightBlue(ms.toString())} ms to ensure exit.`;
127222
+ }
127223
+ function devServerStartTimeout(ms) {
127224
+ return [
127225
+ `Dev server startup is taking longer than expected (${pintor__rspack_import_1_default().brightBlue(ms.toString())} ms).`,
127226
+ "The bundler may have encountered an error before emitting the first build.",
127227
+ `If nothing else prints, try setting ${pintor__rspack_import_1_default().brightBlue('EXTENSION_VERBOSE=1')} for more logs.`
127228
+ ].join('\n');
127229
+ }
127230
+ function bundlerFatalError(error) {
127231
+ const text = error instanceof Error ? error.stack || error.message : String(error);
127232
+ return `Build failed to start:\n${pintor__rspack_import_1_default().red(text)}`;
127233
+ }
127234
+ function bundlerRecompiling() {
127235
+ return "Recompiling due to file changes…";
127236
+ }
127237
+ function noEntrypointsDetected(port) {
127238
+ return [
127239
+ "No entrypoints or assets were produced by the initial compilation.",
127240
+ `The dev server is running on 127.0.0.1:${pintor__rspack_import_1_default().brightBlue(port.toString())}, but nothing is being built.`,
127241
+ "Possible causes:",
127242
+ " • Empty or missing entry configuration.",
127243
+ " • Extension-related plugins are disabled (entries not derived from manifest).",
127244
+ " • All sources are ignored or excluded.",
127245
+ `Try enabling verbose logs with ${pintor__rspack_import_1_default().brightBlue('EXTENSION_VERBOSE=1')} or review your extension config.`
127246
+ ].join('\n');
127247
+ }
127248
+ function spacerLine() {
127249
+ return ' ';
127250
+ }
127251
+ },
127134
127252
  "./webpack/feature-special-folders/folder-extensions/resolve-config.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
127135
127253
  "use strict";
127136
127254
  __webpack_require__.d(__webpack_exports__, {
@@ -127425,6 +127543,22 @@ var __webpack_modules__ = {
127425
127543
  if ('string' != typeof value) return '';
127426
127544
  return value.trim();
127427
127545
  }
127546
+ function readReadyMetadata(readyPath) {
127547
+ if (!readyPath) return null;
127548
+ try {
127549
+ return JSON.parse(fs__rspack_import_0.readFileSync(readyPath, 'utf-8'));
127550
+ } catch {
127551
+ return null;
127552
+ }
127553
+ }
127554
+ function resolveRunLabel(ready) {
127555
+ const runId = toNormalizedId(ready?.runId);
127556
+ const pid = 'number' == typeof ready?.pid && Number.isFinite(ready.pid) ? String(ready.pid) : '';
127557
+ if (runId && pid) return `${runId} · PID ${pid}`;
127558
+ if (runId) return runId;
127559
+ if (pid) return `PID ${pid}`;
127560
+ return '';
127561
+ }
127428
127562
  function deriveChromiumExtensionIdFromManifest(manifest) {
127429
127563
  const key = toNormalizedId(manifest?.key);
127430
127564
  if (!key) return '';
@@ -127507,6 +127641,8 @@ var __webpack_modules__ = {
127507
127641
  try {
127508
127642
  const manifestPath = path__rspack_import_1.join(opts.outPath, 'manifest.json');
127509
127643
  const manifest = JSON.parse(fs__rspack_import_0.readFileSync(manifestPath, 'utf-8'));
127644
+ const ready = readReadyMetadata(opts.readyPath);
127645
+ const runLabel = opts.includeRunId ? resolveRunLabel(ready) : '';
127510
127646
  const runtimeInfo = opts.runtime ? {
127511
127647
  extensionId: opts.runtime.extensionId,
127512
127648
  name: opts.runtime.name,
@@ -127529,7 +127665,8 @@ var __webpack_modules__ = {
127529
127665
  };
127530
127666
  console.log(_messages__rspack_import_3.io8());
127531
127667
  console.log(_messages__rspack_import_3.e_P(manifest, opts.browser, message, browserLabel, updateSuffix || void 0, {
127532
- includeExtensionId: opts.includeExtensionId
127668
+ includeExtensionId: opts.includeExtensionId,
127669
+ runLabel
127533
127670
  }));
127534
127671
  console.log(_messages__rspack_import_3.io8());
127535
127672
  } else {
@@ -127544,7 +127681,8 @@ var __webpack_modules__ = {
127544
127681
  };
127545
127682
  console.log(_messages__rspack_import_3.io8());
127546
127683
  console.log(_messages__rspack_import_3.e_P(manifest, opts.browser, message, browserLabel, updateSuffix || void 0, {
127547
- includeExtensionId: opts.includeExtensionId
127684
+ includeExtensionId: opts.includeExtensionId,
127685
+ runLabel
127548
127686
  }));
127549
127687
  console.log(_messages__rspack_import_3.io8());
127550
127688
  }
@@ -127656,6 +127794,7 @@ var __webpack_modules__ = {
127656
127794
  VkK: ()=>enhancedProcessManagementCleanup,
127657
127795
  WVu: ()=>addonInstallError,
127658
127796
  WVz: ()=>sourceInspectorHTMLOutputFooter,
127797
+ WsE: ()=>chromiumHardReloadFailed,
127659
127798
  Ww: ()=>sourceInspectorTargetCreated,
127660
127799
  X6h: ()=>firefoxRemoteDebuggingReady,
127661
127800
  XHr: ()=>enhancedProcessManagementTerminating,
@@ -128258,6 +128397,7 @@ var __webpack_modules__ = {
128258
128397
  const displayVersion = String(version1 || manifest.version || '');
128259
128398
  lines.push(` 🧩 ${pintor__rspack_import_4_default().brightBlue('Extension.js')} ${pintor__rspack_import_4_default().gray(`${extensionVersion}`)}${updateNotice}`, ` Browser ${pintor__rspack_import_4_default().gray(browserLabel)}`, ` Extension ${pintor__rspack_import_4_default().gray(displayVersion ? `${displayName} ${displayVersion}` : displayName)}`);
128260
128399
  if (includeExtensionId && cleanId) lines.push(` Extension ID ${pintor__rspack_import_4_default().gray(cleanId)}`);
128400
+ if (opts?.runLabel) lines.push(` Run ID ${pintor__rspack_import_4_default().gray(opts.runLabel)}`);
128261
128401
  return lines.join('\n');
128262
128402
  }
128263
128403
  function emptyLine() {
@@ -128327,6 +128467,11 @@ var __webpack_modules__ = {
128327
128467
  exts = 'edge' === browser ? pintor__rspack_import_4_default().underline('edge://extensions') : pintor__rspack_import_4_default().underline('chrome://extensions');
128328
128468
  return `${getLoggingPrefix('warn')} Configuration required\nEnable ${pintor__rspack_import_4_default().yellow('Developer mode')} in ${exts} for reliable reloads.\nWithout it, hard reloads may disable your unpacked extension.`;
128329
128469
  }
128470
+ function chromiumHardReloadFailed(browser) {
128471
+ let exts = '';
128472
+ exts = 'edge' === browser ? pintor__rspack_import_4_default().underline('edge://extensions') : pintor__rspack_import_4_default().underline('chrome://extensions');
128473
+ return `${getLoggingPrefix('warn')} Reload failed\nChromium could not reload your unpacked extension.\nIf you are using an existing profile, verify ${pintor__rspack_import_4_default().yellow('Developer mode')} is enabled in ${exts}.`;
128474
+ }
128330
128475
  },
128331
128476
  "./webpack/plugin-browsers/browsers-lib/output-binaries-resolver.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
128332
128477
  "use strict";
@@ -128656,6 +128801,7 @@ var __webpack_modules__ = {
128656
128801
  var output_binaries_resolver = __webpack_require__("./webpack/plugin-browsers/browsers-lib/output-binaries-resolver.ts");
128657
128802
  var shared_utils = __webpack_require__("./webpack/plugin-browsers/browsers-lib/shared-utils.ts");
128658
128803
  var banner = __webpack_require__("./webpack/plugin-browsers/browsers-lib/banner.ts");
128804
+ var dev_server_messages = __webpack_require__("./webpack/dev-server/messages.ts");
128659
128805
  var external_path_ = __webpack_require__("path");
128660
128806
  const masterPreferences = {
128661
128807
  alternate_error_pages: {
@@ -128945,6 +129091,7 @@ var __webpack_modules__ = {
128945
129091
  console.log(messages.E8B(chromiumConfig.join(' ')));
128946
129092
  }
128947
129093
  var extension_output_path = __webpack_require__("./webpack/plugin-browsers/run-chromium/chromium-launch/extension-output-path.ts");
129094
+ var manifest_readiness = __webpack_require__("./webpack/plugin-browsers/run-chromium/manifest-readiness.ts");
128948
129095
  var external_os_ = __webpack_require__("os");
128949
129096
  function isWslEnv() {
128950
129097
  if ('linux' !== process.platform) return false;
@@ -129036,26 +129183,17 @@ var __webpack_modules__ = {
129036
129183
  else obj[key] = value;
129037
129184
  return obj;
129038
129185
  }
129039
- async function waitForManifest(outPath, timeoutMs = 8000) {
129040
- const manifestPath = `${outPath}/manifest.json`;
129041
- const start = Date.now();
129042
- while(Date.now() - start < timeoutMs){
129043
- try {
129044
- if (external_fs_.existsSync(manifestPath)) return true;
129045
- } catch {}
129046
- await new Promise((resolve)=>setTimeout(resolve, 150));
129047
- }
129048
- return false;
129049
- }
129050
129186
  async function maybePrintDevBanner(args) {
129051
129187
  const mode = args.compilation?.options?.mode || 'development';
129052
129188
  if ('development' !== mode) return;
129053
- if (args.enableCdp) return;
129054
129189
  const loadExtensionFlag = args.chromiumConfig.find((flag)=>flag.startsWith('--load-extension='));
129055
129190
  const extensionOutputPath = (0, extension_output_path.W)(args.compilation, loadExtensionFlag);
129056
129191
  if (!extensionOutputPath) return;
129057
- const ready = await waitForManifest(extensionOutputPath, 10000);
129192
+ const ready = await (0, manifest_readiness.f)(extensionOutputPath, {
129193
+ timeoutMs: 10000
129194
+ });
129058
129195
  if (!ready) return;
129196
+ if (args.enableCdp) return;
129059
129197
  await (0, banner.a)({
129060
129198
  browser: args.browser,
129061
129199
  outPath: extensionOutputPath,
@@ -129088,7 +129226,7 @@ var __webpack_modules__ = {
129088
129226
  if (this.didLaunch) return;
129089
129227
  await this.launchChromium(stats.compilation);
129090
129228
  this.didLaunch = true;
129091
- this.logger.info(messages.ACl(this.options.browser, stats.compilation.options.mode));
129229
+ if (!this.didReportReady) console.log(dev_server_messages.Gc(stats.compilation.options.mode, this.options.browser));
129092
129230
  } catch (error) {
129093
129231
  try {
129094
129232
  this.logger.error(messages._D4(this.options.browser, error));
@@ -129142,9 +129280,10 @@ var __webpack_modules__ = {
129142
129280
  return 'npx extension install chrome';
129143
129281
  }
129144
129282
  };
129283
+ const isAuthorMode = 'true' === process.env.EXTENSION_AUTHOR_MODE;
129145
129284
  switch(browser){
129146
129285
  case 'chrome':
129147
- console.log(messages.GqE(browser));
129286
+ if (isAuthorMode) console.log(messages.GqE(browser));
129148
129287
  if (!skipDetection) try {
129149
129288
  try {
129150
129289
  const located = (0, external_chrome_location2_.locateChromeOrExplain)({
@@ -129181,7 +129320,7 @@ var __webpack_modules__ = {
129181
129320
  }
129182
129321
  break;
129183
129322
  case 'chromium':
129184
- console.log(messages.GqE(browser));
129323
+ if (isAuthorMode) console.log(messages.GqE(browser));
129185
129324
  browserBinaryLocation = this.options?.chromiumBinary || null;
129186
129325
  if (this.options?.chromiumBinary) {
129187
129326
  const normalized = normalizePath(String(this.options.chromiumBinary));
@@ -129201,7 +129340,7 @@ var __webpack_modules__ = {
129201
129340
  if (!browserBinaryLocation) browserBinaryLocation = resolveWslWindowsBinary(browser);
129202
129341
  break;
129203
129342
  case 'edge':
129204
- console.log(messages.GqE(browser));
129343
+ if (isAuthorMode) console.log(messages.GqE(browser));
129205
129344
  try {
129206
129345
  const override = String(process.env.EDGE_BINARY || '').trim();
129207
129346
  if (override) {
@@ -129376,6 +129515,10 @@ var __webpack_modules__ = {
129376
129515
  });
129377
129516
  if (this.options.dryRun) return void logChromiumDryRun(browserBinaryLocation, chromiumConfig);
129378
129517
  await this.launchWithDirectSpawn(browserBinaryLocation, chromiumConfig);
129518
+ if ('development' === compilation.options.mode && !this.didReportReady) {
129519
+ console.log(dev_server_messages.Gc(compilation.options.mode, this.options.browser));
129520
+ this.didReportReady = true;
129521
+ }
129379
129522
  try {
129380
129523
  let browserVersionLine;
129381
129524
  try {
@@ -129485,12 +129628,96 @@ var __webpack_modules__ = {
129485
129628
  _define_property(this, "options", void 0);
129486
129629
  _define_property(this, "ctx", void 0);
129487
129630
  _define_property(this, "didLaunch", void 0);
129631
+ _define_property(this, "didReportReady", void 0);
129488
129632
  _define_property(this, "logger", void 0);
129489
129633
  this.options = options;
129490
129634
  this.ctx = ctx;
129491
129635
  this.didLaunch = false;
129636
+ this.didReportReady = false;
129637
+ }
129638
+ }
129639
+ },
129640
+ "./webpack/plugin-browsers/run-chromium/manifest-readiness.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
129641
+ "use strict";
129642
+ __webpack_require__.d(__webpack_exports__, {
129643
+ f: ()=>waitForStableManifest
129644
+ });
129645
+ var fs__rspack_import_0 = __webpack_require__("fs");
129646
+ var path__rspack_import_1 = __webpack_require__("path");
129647
+ function sleep(ms) {
129648
+ return new Promise((resolve)=>setTimeout(resolve, ms));
129649
+ }
129650
+ function readValidManifest(manifestPath) {
129651
+ try {
129652
+ const content = fs__rspack_import_0.readFileSync(manifestPath, 'utf-8');
129653
+ if (!content.trim()) return;
129654
+ JSON.parse(content);
129655
+ return content;
129656
+ } catch {
129657
+ return;
129658
+ }
129659
+ }
129660
+ function normalizeManifestFile(filePath) {
129661
+ if ('string' != typeof filePath) return;
129662
+ const normalized = filePath.trim().replace(/^\/+/, '');
129663
+ if (!normalized) return;
129664
+ if (/^(https?:)?\/\//i.test(filePath)) return;
129665
+ if (/[*?[\]{}]/.test(normalized)) return;
129666
+ return normalized;
129667
+ }
129668
+ function getManifestRequiredFiles(content) {
129669
+ try {
129670
+ const manifest = JSON.parse(content);
129671
+ const requiredFiles = new Set();
129672
+ const addFile = (filePath)=>{
129673
+ const normalized = normalizeManifestFile(filePath);
129674
+ if (normalized) requiredFiles.add(normalized);
129675
+ };
129676
+ addFile(manifest.background?.service_worker);
129677
+ addFile(manifest.background?.page);
129678
+ if (Array.isArray(manifest.background?.scripts)) for (const script of manifest.background?.scripts || [])addFile(script);
129679
+ addFile(manifest.side_panel?.default_path);
129680
+ if (Array.isArray(manifest.content_scripts)) for (const contentScript of manifest.content_scripts){
129681
+ if (Array.isArray(contentScript?.js)) for (const jsFile of contentScript.js)addFile(jsFile);
129682
+ if (Array.isArray(contentScript?.css)) for (const cssFile of contentScript.css)addFile(cssFile);
129683
+ }
129684
+ return [
129685
+ ...requiredFiles
129686
+ ];
129687
+ } catch {
129688
+ return [];
129492
129689
  }
129493
129690
  }
129691
+ function hasRequiredManifestFiles(outPath, content) {
129692
+ const requiredFiles = getManifestRequiredFiles(content);
129693
+ for (const relativeFile of requiredFiles)if (!fs__rspack_import_0.existsSync(path__rspack_import_1.join(outPath, relativeFile))) return false;
129694
+ return true;
129695
+ }
129696
+ async function waitForStableManifest(outPath, options) {
129697
+ const timeoutMs = options?.timeoutMs ?? 8000;
129698
+ const pollIntervalMs = options?.pollIntervalMs ?? 150;
129699
+ const stableReadsRequired = options?.stableReadsRequired ?? 2;
129700
+ const manifestPath = path__rspack_import_1.join(outPath, 'manifest.json');
129701
+ const start = Date.now();
129702
+ let lastValidContent;
129703
+ let stableReads = 0;
129704
+ while(Date.now() - start < timeoutMs){
129705
+ const currentContent = readValidManifest(manifestPath);
129706
+ if (currentContent && hasRequiredManifestFiles(outPath, currentContent)) {
129707
+ if (currentContent === lastValidContent) stableReads += 1;
129708
+ else {
129709
+ lastValidContent = currentContent;
129710
+ stableReads = 1;
129711
+ }
129712
+ if (stableReads >= stableReadsRequired) return true;
129713
+ } else {
129714
+ lastValidContent = void 0;
129715
+ stableReads = 0;
129716
+ }
129717
+ await sleep(pollIntervalMs);
129718
+ }
129719
+ return false;
129720
+ }
129494
129721
  },
129495
129722
  "./webpack/plugin-browsers/run-firefox/firefox-context/index.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
129496
129723
  "use strict";
@@ -129556,6 +129783,7 @@ var __webpack_modules__ = {
129556
129783
  var output_binaries_resolver = __webpack_require__("./webpack/plugin-browsers/browsers-lib/output-binaries-resolver.ts");
129557
129784
  var shared_utils = __webpack_require__("./webpack/plugin-browsers/browsers-lib/shared-utils.ts");
129558
129785
  var instance_registry = __webpack_require__("./webpack/plugin-browsers/browsers-lib/instance-registry.ts");
129786
+ var dev_server_messages = __webpack_require__("./webpack/dev-server/messages.ts");
129559
129787
  var external_child_process_ = __webpack_require__("child_process");
129560
129788
  function setupFirefoxProcessHandlers(browser, childRef, cleanupInstance) {
129561
129789
  let isCleaningUp = false;
@@ -130305,7 +130533,10 @@ var __webpack_modules__ = {
130305
130533
  debug: (...a)=>console?.debug?.(...a)
130306
130534
  };
130307
130535
  await this.launch(compilation, options);
130308
- this.ctx.logger?.info?.(messages.ACl(this.host.browser, options.mode));
130536
+ if ('development' === options.mode) {
130537
+ this.ctx.logger?.info?.(messages.ACl(this.host.browser, options.mode));
130538
+ this.ctx.logger?.info?.(dev_server_messages.Gc(options.mode, this.host.browser));
130539
+ }
130309
130540
  this.ctx.didLaunch = true;
130310
130541
  }
130311
130542
  apply(compiler) {
@@ -130328,6 +130559,7 @@ var __webpack_modules__ = {
130328
130559
  port: this.host.port
130329
130560
  });
130330
130561
  this.ctx.logger?.info?.(messages.ACl(this.host.browser, stats.compilation.options.mode));
130562
+ this.ctx.logger?.info?.(dev_server_messages.Gc(stats.compilation.options.mode, this.host.browser));
130331
130563
  this.ctx.didLaunch = true;
130332
130564
  } catch (error) {
130333
130565
  this.ctx.logger?.error?.(messages.MQS(error));
@@ -131452,16 +131684,20 @@ var __webpack_modules__ = {
131452
131684
  __webpack_require__.d(__webpack_exports__, {
131453
131685
  Dy: ()=>installOptionalDependenciesBatch,
131454
131686
  He: ()=>resolveDevelopInstallRoot,
131687
+ Iy: ()=>resolveOptionalInstallRoot,
131455
131688
  tm: ()=>installOptionalDependencies,
131456
131689
  ws: ()=>hasDependency
131457
131690
  });
131458
131691
  var path__rspack_import_0 = __webpack_require__("path");
131459
131692
  var fs__rspack_import_1 = __webpack_require__("fs");
131460
- var _messages__rspack_import_2 = __webpack_require__("./webpack/plugin-css/css-lib/messages.ts");
131461
- var pintor__rspack_import_3 = __webpack_require__("pintor");
131462
- var pintor__rspack_import_3_default = /*#__PURE__*/ __webpack_require__.n(pintor__rspack_import_3);
131463
- var _webpack_lib_check_build_dependencies__rspack_import_4 = __webpack_require__("./webpack/webpack-lib/check-build-dependencies.ts");
131464
- var _webpack_lib_package_manager__rspack_import_5 = __webpack_require__("./webpack/webpack-lib/package-manager.ts");
131693
+ var os__rspack_import_2 = __webpack_require__("os");
131694
+ var _messages__rspack_import_3 = __webpack_require__("./webpack/plugin-css/css-lib/messages.ts");
131695
+ var pintor__rspack_import_4 = __webpack_require__("pintor");
131696
+ var pintor__rspack_import_4_default = /*#__PURE__*/ __webpack_require__.n(pintor__rspack_import_4);
131697
+ var _package_json__rspack_import_5 = __webpack_require__("./package.json");
131698
+ var _webpack_lib_check_build_dependencies__rspack_import_6 = __webpack_require__("./webpack/webpack-lib/check-build-dependencies.ts");
131699
+ var _webpack_lib_optional_dependencies__rspack_import_7 = __webpack_require__("./webpack/webpack-lib/optional-dependencies.ts");
131700
+ var _webpack_lib_package_manager__rspack_import_8 = __webpack_require__("./webpack/webpack-lib/package-manager.ts");
131465
131701
  function parseJsonSafe(text) {
131466
131702
  const s = text && 0xfeff === text.charCodeAt(0) ? text.slice(1) : text;
131467
131703
  return JSON.parse(s || '{}');
@@ -131569,13 +131805,13 @@ var __webpack_modules__ = {
131569
131805
  }
131570
131806
  async function execInstallWithFallback(command, options) {
131571
131807
  try {
131572
- await (0, _webpack_lib_package_manager__rspack_import_5.Qt)(command.command, command.args, {
131808
+ await (0, _webpack_lib_package_manager__rspack_import_8.Qt)(command.command, command.args, {
131573
131809
  cwd: options.cwd,
131574
131810
  stdio: 'inherit'
131575
131811
  });
131576
131812
  return;
131577
131813
  } catch (error) {
131578
- if (options.fallbackNpmCommand && (isMissingManagerError(error) || options.allowFallbackOnFailure && isInstallExitFailure(error))) return void await (0, _webpack_lib_package_manager__rspack_import_5.Qt)(options.fallbackNpmCommand.command, options.fallbackNpmCommand.args, {
131814
+ if (options.fallbackNpmCommand && (isMissingManagerError(error) || options.allowFallbackOnFailure && isInstallExitFailure(error))) return void await (0, _webpack_lib_package_manager__rspack_import_8.Qt)(options.fallbackNpmCommand.command, options.fallbackNpmCommand.args, {
131579
131815
  cwd: options.cwd,
131580
131816
  stdio: 'inherit'
131581
131817
  });
@@ -131583,7 +131819,7 @@ var __webpack_modules__ = {
131583
131819
  }
131584
131820
  }
131585
131821
  function resolveDevelopInstallRoot() {
131586
- const directRoot = (0, _webpack_lib_check_build_dependencies__rspack_import_4.w1)();
131822
+ const directRoot = (0, _webpack_lib_check_build_dependencies__rspack_import_6.w1)();
131587
131823
  if (directRoot) return directRoot;
131588
131824
  try {
131589
131825
  const candidateRoot = findDevelopRootFrom(__dirname);
@@ -131600,43 +131836,67 @@ var __webpack_modules__ = {
131600
131836
  return;
131601
131837
  }
131602
131838
  }
131839
+ function getExtensionJsCacheBaseDir() {
131840
+ const override = process.env.EXTENSION_JS_CACHE_DIR;
131841
+ if (override) return path__rspack_import_0.resolve(override);
131842
+ if ('win32' === process.platform && process.env.LOCALAPPDATA) return path__rspack_import_0.join(process.env.LOCALAPPDATA, 'extensionjs');
131843
+ if (process.env.XDG_CACHE_HOME) return path__rspack_import_0.join(process.env.XDG_CACHE_HOME, 'extensionjs');
131844
+ return path__rspack_import_0.join(os__rspack_import_2.homedir(), '.cache', 'extensionjs');
131845
+ }
131846
+ function resolveOptionalInstallRoot() {
131847
+ return path__rspack_import_0.join(getExtensionJsCacheBaseDir(), 'optional-deps', _package_json__rspack_import_5.rE);
131848
+ }
131849
+ function ensureOptionalInstallBaseDir(installBaseDir) {
131850
+ fs__rspack_import_1.mkdirSync(installBaseDir, {
131851
+ recursive: true
131852
+ });
131853
+ const packageJsonPath = path__rspack_import_0.join(installBaseDir, 'package.json');
131854
+ if (!fs__rspack_import_1.existsSync(packageJsonPath)) fs__rspack_import_1.writeFileSync(packageJsonPath, JSON.stringify({
131855
+ name: `extensionjs-optional-deps-${_package_json__rspack_import_5.rE}`,
131856
+ private: true,
131857
+ version: _package_json__rspack_import_5.rE
131858
+ }, null, 2) + '\n');
131859
+ }
131603
131860
  function getOptionalInstallCommand(pm, dependencies, installBaseDir) {
131604
131861
  const pmName = pm.name;
131605
- if ('yarn' === pmName) return (0, _webpack_lib_package_manager__rspack_import_5.tj)(pm, [
131862
+ const dependencySpecs = (0, _webpack_lib_optional_dependencies__rspack_import_7.ad)(dependencies);
131863
+ if ('yarn' === pmName) return (0, _webpack_lib_package_manager__rspack_import_8.tj)(pm, [
131606
131864
  '--silent',
131607
131865
  'add',
131608
- ...dependencies,
131866
+ ...dependencySpecs,
131609
131867
  '--cwd',
131610
131868
  installBaseDir,
131611
131869
  '--optional'
131612
131870
  ]);
131613
- if ('npm' === pmName) return (0, _webpack_lib_package_manager__rspack_import_5.tj)(pm, [
131871
+ if ('npm' === pmName) return (0, _webpack_lib_package_manager__rspack_import_8.tj)(pm, [
131614
131872
  '--silent',
131615
131873
  'install',
131616
- ...dependencies,
131874
+ ...dependencySpecs,
131617
131875
  '--prefix',
131618
131876
  installBaseDir,
131619
131877
  '--save-optional'
131620
131878
  ]);
131621
- if ('pnpm' === pmName) return (0, _webpack_lib_package_manager__rspack_import_5.tj)(pm, [
131879
+ if ('pnpm' === pmName) return (0, _webpack_lib_package_manager__rspack_import_8.tj)(pm, [
131622
131880
  'add',
131623
- ...dependencies,
131881
+ ...dependencySpecs,
131624
131882
  '--dir',
131625
131883
  installBaseDir,
131626
131884
  '--save-optional',
131885
+ '--ignore-workspace',
131886
+ '--lockfile=false',
131627
131887
  '--silent'
131628
131888
  ]);
131629
- if ('bun' === pmName) return (0, _webpack_lib_package_manager__rspack_import_5.tj)(pm, [
131889
+ if ('bun' === pmName) return (0, _webpack_lib_package_manager__rspack_import_8.tj)(pm, [
131630
131890
  'add',
131631
- ...dependencies,
131891
+ ...dependencySpecs,
131632
131892
  '--cwd',
131633
131893
  installBaseDir,
131634
131894
  '--optional'
131635
131895
  ]);
131636
- return (0, _webpack_lib_package_manager__rspack_import_5.tj)(pm, [
131896
+ return (0, _webpack_lib_package_manager__rspack_import_8.tj)(pm, [
131637
131897
  '--silent',
131638
131898
  'install',
131639
- ...dependencies,
131899
+ ...dependencySpecs,
131640
131900
  '--cwd',
131641
131901
  installBaseDir,
131642
131902
  '--optional'
@@ -131657,26 +131917,28 @@ var __webpack_modules__ = {
131657
131917
  '--prefix',
131658
131918
  installBaseDir
131659
131919
  ] : [];
131660
- if ('yarn' === pmName) return (0, _webpack_lib_package_manager__rspack_import_5.tj)(pm, [
131920
+ if ('yarn' === pmName) return (0, _webpack_lib_package_manager__rspack_import_8.tj)(pm, [
131661
131921
  'install',
131662
131922
  '--silent',
131663
131923
  ...dirArgs
131664
131924
  ]);
131665
- if ('npm' === pmName) return (0, _webpack_lib_package_manager__rspack_import_5.tj)(pm, [
131925
+ if ('npm' === pmName) return (0, _webpack_lib_package_manager__rspack_import_8.tj)(pm, [
131666
131926
  'install',
131667
131927
  '--silent',
131668
131928
  ...dirArgs
131669
131929
  ]);
131670
- if ('pnpm' === pmName) return (0, _webpack_lib_package_manager__rspack_import_5.tj)(pm, [
131930
+ if ('pnpm' === pmName) return (0, _webpack_lib_package_manager__rspack_import_8.tj)(pm, [
131671
131931
  'install',
131672
131932
  '--silent',
131673
- ...dirArgs
131933
+ ...dirArgs,
131934
+ '--ignore-workspace',
131935
+ '--lockfile=false'
131674
131936
  ]);
131675
- if ('bun' === pmName) return (0, _webpack_lib_package_manager__rspack_import_5.tj)(pm, [
131937
+ if ('bun' === pmName) return (0, _webpack_lib_package_manager__rspack_import_8.tj)(pm, [
131676
131938
  'install',
131677
131939
  ...dirArgs
131678
131940
  ]);
131679
- return (0, _webpack_lib_package_manager__rspack_import_5.tj)(pm, [
131941
+ return (0, _webpack_lib_package_manager__rspack_import_8.tj)(pm, [
131680
131942
  'install',
131681
131943
  '--silent',
131682
131944
  ...dirArgs
@@ -131688,15 +131950,15 @@ var __webpack_modules__ = {
131688
131950
  let wslContext;
131689
131951
  let installBaseDir;
131690
131952
  try {
131691
- installBaseDir = resolveDevelopInstallRoot();
131692
- if (!installBaseDir) throw new Error(_messages__rspack_import_2.eG(integration));
131693
- pm = (0, _webpack_lib_package_manager__rspack_import_5._c)({
131953
+ installBaseDir = resolveOptionalInstallRoot();
131954
+ ensureOptionalInstallBaseDir(installBaseDir);
131955
+ pm = (0, _webpack_lib_package_manager__rspack_import_8._c)({
131694
131956
  cwd: installBaseDir
131695
131957
  });
131696
131958
  wslContext = resolveWslContext(installBaseDir);
131697
131959
  if (!wslContext.useWsl) pm = await preferCorepackFallback(pm);
131698
131960
  const isAuthor = 'true' === process.env.EXTENSION_AUTHOR_MODE;
131699
- const setupMessages = _messages__rspack_import_2._j([
131961
+ const setupMessages = _messages__rspack_import_3._j([
131700
131962
  integration
131701
131963
  ], integration, isAuthor);
131702
131964
  const setupMessage = setupMessages[0];
@@ -131704,31 +131966,28 @@ var __webpack_modules__ = {
131704
131966
  const setupMessageWithIndex = hasIndex ? setupMessage.replace('►►► ', `►►► [${options?.index}/${options?.total}] `) : setupMessage;
131705
131967
  if (isAuthor) console.warn(setupMessageWithIndex);
131706
131968
  else console.log(setupMessageWithIndex);
131707
- for (const dependency of dependencies){
131708
- const installCommand = getOptionalInstallCommand(pm, [
131709
- dependency
131710
- ], wslContext.installDir || installBaseDir);
131711
- const execCommand = wrapCommandForWsl(installCommand, wslContext);
131712
- const fallbackNpmCommand = wslContext.useWsl ? void 0 : (0, _webpack_lib_package_manager__rspack_import_5.sX)([
131713
- '--silent',
131714
- 'install',
131715
- dependency,
131716
- '--prefix',
131717
- installBaseDir,
131718
- '--save-optional'
131719
- ]);
131720
- await execInstallWithFallback(execCommand, {
131721
- cwd: wslContext.useWsl ? void 0 : installBaseDir,
131722
- fallbackNpmCommand,
131723
- allowFallbackOnFailure: !wslContext.useWsl && 'npm' !== pm.name && void 0 !== fallbackNpmCommand
131724
- });
131725
- }
131969
+ const installCommand = getOptionalInstallCommand(pm, dependencies, wslContext.installDir || installBaseDir);
131970
+ const execCommand = wrapCommandForWsl(installCommand, wslContext);
131971
+ const fallbackNpmCommand = wslContext.useWsl ? void 0 : (0, _webpack_lib_package_manager__rspack_import_8.sX)([
131972
+ '--silent',
131973
+ 'install',
131974
+ ...(0, _webpack_lib_optional_dependencies__rspack_import_7.ad)(dependencies),
131975
+ '--prefix',
131976
+ installBaseDir,
131977
+ '--save-optional'
131978
+ ]);
131979
+ await execInstallWithFallback(execCommand, {
131980
+ cwd: wslContext.useWsl ? void 0 : installBaseDir,
131981
+ fallbackNpmCommand,
131982
+ allowFallbackOnFailure: !wslContext.useWsl && 'npm' !== pm.name && void 0 !== fallbackNpmCommand
131983
+ });
131726
131984
  await new Promise((resolve)=>setTimeout(resolve, 500));
131727
- if (isAuthor) {
131728
- console.log(_messages__rspack_import_2.cr(integration));
131985
+ const needsRootRelink = isAuthor || dependencies.length > 1;
131986
+ if (needsRootRelink) {
131987
+ if (isAuthor) console.log(_messages__rspack_import_3.cr(integration));
131729
131988
  const rootInstall = getRootInstallCommand(pm, wslContext.useWsl ? wslContext.installDir : void 0);
131730
131989
  const rootCommand = wrapCommandForWsl(rootInstall, wslContext);
131731
- const rootFallbackCommand = wslContext.useWsl ? void 0 : (0, _webpack_lib_package_manager__rspack_import_5.sX)([
131990
+ const rootFallbackCommand = wslContext.useWsl ? void 0 : (0, _webpack_lib_package_manager__rspack_import_8.sX)([
131732
131991
  '--silent',
131733
131992
  'install',
131734
131993
  '--prefix',
@@ -131739,7 +131998,7 @@ var __webpack_modules__ = {
131739
131998
  fallbackNpmCommand: rootFallbackCommand,
131740
131999
  allowFallbackOnFailure: !wslContext.useWsl && 'npm' !== pm.name && void 0 !== rootFallbackCommand
131741
132000
  });
131742
- console.log(_messages__rspack_import_2.ys(integration));
132001
+ if (isAuthor) console.log(_messages__rspack_import_3.ys(integration));
131743
132002
  }
131744
132003
  return true;
131745
132004
  } catch (error) {
@@ -131757,17 +132016,19 @@ var __webpack_modules__ = {
131757
132016
  npm_config_userconfig: process.env.npm_config_userconfig,
131758
132017
  installBaseDir,
131759
132018
  wslContext,
131760
- pm
132019
+ pm,
132020
+ errorCode: error?.code,
132021
+ errorMessage: error instanceof Error ? error.message : String(error || 'unknown error')
131761
132022
  });
131762
132023
  const isAuthor = 'true' === process.env.EXTENSION_AUTHOR_MODE;
131763
- if (isMissingManagerError(error)) console.error(_messages__rspack_import_2.Vo(integration));
131764
- else console.error(_messages__rspack_import_2.DX(integration, error, isAuthor));
132024
+ if (isMissingManagerError(error)) console.error(_messages__rspack_import_3.Vo(integration));
132025
+ else console.error(_messages__rspack_import_3.DX(integration, error, isAuthor));
131765
132026
  return false;
131766
132027
  }
131767
132028
  }
131768
132029
  async function installOptionalDependenciesBatch(plans) {
131769
132030
  if (!plans.length) return;
131770
- console.log(`${pintor__rspack_import_3_default().gray('►►►')} Found ${pintor__rspack_import_3_default().yellow(String(plans.length))} specialized integration${1 === plans.length ? '' : 's'} needing installation...`);
132031
+ console.log(`${pintor__rspack_import_4_default().gray('►►►')} Found ${pintor__rspack_import_4_default().yellow(String(plans.length))} specialized integration${1 === plans.length ? '' : 's'} needing installation...`);
131771
132032
  for (const [index, plan] of plans.entries()){
131772
132033
  const didInstall = await installOptionalDependencies(plan.integration, plan.dependencies, {
131773
132034
  index: index + 1,
@@ -131834,7 +132095,6 @@ var __webpack_modules__ = {
131834
132095
  Vo: ()=>optionalInstallManagerMissing,
131835
132096
  _j: ()=>optionalToolingSetup,
131836
132097
  cr: ()=>optionalToolingRootInstall,
131837
- eG: ()=>optionalInstallRootMissing,
131838
132098
  fD: ()=>cssConfigsDetected,
131839
132099
  uo: ()=>cssIntegrationsEnabled,
131840
132100
  ys: ()=>optionalToolingReady,
@@ -131871,14 +132131,6 @@ var __webpack_modules__ = {
131871
132131
  const prefix = isAuthor ? pintor__rspack_import_0_default().brightMagenta('ERROR Author says') : pintor__rspack_import_0_default().red('ERROR');
131872
132132
  return `${prefix} [${integration}] Failed to install dependencies.\n${pintor__rspack_import_0_default().red(String(error?.message || error))}`;
131873
132133
  }
131874
- function optionalInstallRootMissing(integration) {
131875
- const prefix = pintor__rspack_import_0_default().red('ERROR');
131876
- return [
131877
- `${prefix} [${integration}] Failed to locate the extension-develop runtime.`,
131878
- 'Optional tooling must install into the extension-develop package, not the user project.',
131879
- 'Reinstall Extension.js or run the command from a valid Extension.js installation.'
131880
- ].join('\n');
131881
- }
131882
132134
  function optionalInstallManagerMissing(integration) {
131883
132135
  const prefix = pintor__rspack_import_0_default().red('ERROR');
131884
132136
  return [
@@ -133934,12 +134186,17 @@ var __webpack_modules__ = {
133934
134186
  return `${getLoggingPrefix('success')} Dependencies installed. Run the command again to proceed.`;
133935
134187
  }
133936
134188
  function buildWebpack(projectDir, stats, browser) {
133937
- const statsJson = stats?.toJson();
133938
- const manifestPath = path__rspack_import_1.join(projectDir, 'manifest.json');
134189
+ const statsJson = stats?.toJson({
134190
+ all: false,
134191
+ assets: true,
134192
+ time: true
134193
+ });
134194
+ const outputPath = 'string' == typeof stats?.compilation?.outputOptions?.path ? stats.compilation.outputOptions.path : '';
134195
+ const manifestPath = outputPath ? path__rspack_import_1.join(outputPath, 'manifest.json') : path__rspack_import_1.join(projectDir, 'manifest.json');
133939
134196
  const manifest = JSON.parse(fs__rspack_import_0.readFileSync(manifestPath, 'utf8'));
133940
134197
  const assets = statsJson?.assets;
133941
134198
  const heading = `${getLoggingPrefix('info')} Building ${pintor__rspack_import_2_default().blue(manifest.name)} extension using ${capitalizedBrowserName(browser)} defaults...\n`;
133942
- const buildTime = `\nBuild completed in ${((statsJson?.time || 0) / 1000).toFixed(2)} seconds.`;
134199
+ const buildTime = `\nBuild completed in ${((statsJson?.time || 0) / 1000).toFixed(2)} seconds.\n`;
133943
134200
  const buildTarget = `Build Target: ${pintor__rspack_import_2_default().gray(capitalizedBrowserName(browser))}\n`;
133944
134201
  const buildStatus = `Build Status: ${stats?.hasErrors() ? pintor__rspack_import_2_default().red('Failed') : pintor__rspack_import_2_default().green('Success')}\n`;
133945
134202
  const version1 = `\nVersion: ${pintor__rspack_import_2_default().gray(manifest.version)}\n`;
@@ -134000,32 +134257,34 @@ var __webpack_modules__ = {
134000
134257
  if (haystack.includes('runtime') || haystack.includes('will fail') || haystack.includes('cannot resolve') || haystack.includes('service_worker')) return 'Runtime-risk';
134001
134258
  return 'Warning';
134002
134259
  }
134003
- function suggestedActionForWarning(category) {
134004
- if ('Performance' === category) return 'Split optional features and lazy-load heavy paths. Tune thresholds only if large assets are intentional.';
134005
- if ('Deprecation' === category) return 'Move to the supported API/plugin path to avoid breakage in future updates.';
134260
+ function suggestedHintForWarning(category) {
134261
+ if ('Performance' === category) return 'Inspect the largest startup bundles and split optional code paths.';
134262
+ if ('Deprecation' === category) return 'Move to the supported API or plugin path before the next update.';
134006
134263
  if ('Configuration' === category) return 'Review extension and bundler config keys, then remove or rename invalid options.';
134007
134264
  if ('Compatibility' === category) return 'Verify browser target and manifest compatibility for this build.';
134008
- if ('Runtime-risk' === category) return 'Address this warning before release; it may fail or degrade at runtime.';
134009
- return 'Re-run with verbose output to inspect warning details and apply targeted fixes.';
134265
+ if ('Runtime-risk' === category) return 'Address this before release; it may fail or degrade at runtime.';
134266
+ return 'Re-run with EXTENSION_VERBOSE=1 to inspect full warning details.';
134010
134267
  }
134011
134268
  function buildSuccessWithWarnings(warningCount) {
134012
134269
  return `${getLoggingPrefix('warn')} Build succeeded with ${warningCount} warning(s). Your extension is ${pintor__rspack_import_2_default().green('ready for deployment')}.`;
134013
134270
  }
134014
134271
  function buildWarningsDetails(warnings) {
134015
134272
  if (!Array.isArray(warnings) || 0 === warnings.length) return '';
134016
- const lines = [];
134273
+ const blocks = [];
134017
134274
  warnings.forEach((warning, index)=>{
134018
134275
  const message = getWarningMessage(warning);
134019
134276
  const source = getWarningSource(warning);
134020
134277
  const artifact = getWarningArtifact(warning);
134021
134278
  const category = classifyWarning(message, source);
134022
- const action = suggestedActionForWarning(category);
134023
- if (!message) return void lines.push(`- Warning ${index + 1}: details were suppressed by tool output.`, ` Source: ${source}`, " Action: Re-run with EXTENSION_VERBOSE=1 to inspect full warning messages.");
134279
+ const hint = suggestedHintForWarning(category);
134280
+ if (!message) return void blocks.push(`${getLoggingPrefix('warn')} Warning ${index + 1}: details were suppressed by tool output.\n${formatWarningLabelLine('Source', pintor__rspack_import_2_default().gray(source))}\n${formatWarningLabelLine('Hint', 'Re-run with EXTENSION_VERBOSE=1 to inspect full warning messages.')}`);
134281
+ const performanceWarning = parsePerformanceWarning(warning, source, artifact);
134282
+ if (performanceWarning) return void blocks.push(performanceWarning);
134024
134283
  const oneLine = message.replace(/\s+/g, ' ').trim();
134025
- const artifactSuffix = artifact ? ` (${artifact})` : '';
134026
- lines.push(`- ${category}: ${oneLine}${artifactSuffix}`, ` Source: ${source}`, ` Action: ${action}`);
134284
+ const artifactSuffix = artifact ? ` ${pintor__rspack_import_2_default().gray(`(${artifact})`)}` : '';
134285
+ blocks.push(`${getLoggingPrefix('warn')} ${category}: ${oneLine}${artifactSuffix}\n${formatWarningLabelLine('Source', pintor__rspack_import_2_default().gray(source))}\n${formatWarningLabelLine('Hint', hint)}`);
134027
134286
  });
134028
- return lines.join('\n');
134287
+ return blocks.join('\n\n');
134029
134288
  }
134030
134289
  function fetchingProjectPath(owner, project) {
134031
134290
  return fmt.block('Fetching project', [
@@ -134127,6 +134386,49 @@ var __webpack_modules__ = {
134127
134386
  });
134128
134387
  return `.\n${printTree(assetTree)}`;
134129
134388
  }
134389
+ function formatWarningLabelLine(label, value) {
134390
+ return `${pintor__rspack_import_2_default().gray('│')} ${pintor__rspack_import_2_default().gray(`${label}:`)} ${value}`;
134391
+ }
134392
+ function parsePerformanceWarning(warning, source, _artifact) {
134393
+ const normalized = getWarningBody(warning).replace(/\r/g, '');
134394
+ const lower = normalized.toLowerCase();
134395
+ const threshold = normalized.match(/\(([\d.]+\s(?:KiB|MiB|GiB|KB|MB|GB))\)/)?.[1] || '';
134396
+ if (lower.includes('asset size limit')) return formatPerformanceWarningBlock({
134397
+ title: 'asset size limit exceeded',
134398
+ threshold,
134399
+ impact: 'Large emitted files can increase package size and slow extension startup.',
134400
+ source,
134401
+ hint: 'Inspect the largest startup bundles and split optional code paths.'
134402
+ });
134403
+ if (lower.includes('entrypoint size limit')) return formatPerformanceWarningBlock({
134404
+ title: 'entrypoint size limit exceeded',
134405
+ threshold,
134406
+ impact: 'Startup entrypoints are heavier than recommended.',
134407
+ source,
134408
+ hint: 'Keep startup entrypoints thin and defer non-critical code.'
134409
+ });
134410
+ }
134411
+ function formatPerformanceWarningBlock(options) {
134412
+ const lines = [
134413
+ `${getLoggingPrefix('warn')} Performance: ${options.title}`
134414
+ ];
134415
+ if (options.threshold) lines.push(formatWarningLabelLine('Threshold', options.threshold));
134416
+ lines.push(formatWarningLabelLine('Impact', options.impact));
134417
+ lines.push(pintor__rspack_import_2_default().gray('│'));
134418
+ lines.push(formatWarningLabelLine('Source', pintor__rspack_import_2_default().gray(options.source)));
134419
+ lines.push(formatWarningLabelLine('Hint', options.hint));
134420
+ return lines.join('\n');
134421
+ }
134422
+ function getWarningBody(warning) {
134423
+ if (!warning) return '';
134424
+ if ('string' == typeof warning) return warning;
134425
+ return [
134426
+ warning.message,
134427
+ warning.details,
134428
+ warning.reason,
134429
+ warning.description
134430
+ ].filter((value)=>'string' == typeof value && value.trim().length > 0).join('\n');
134431
+ }
134130
134432
  function isUsingExperimentalConfig(integration) {
134131
134433
  return `${getLoggingPrefix('info')} Using ${pintor__rspack_import_2_default().yellow(integration)}.`;
134132
134434
  }
@@ -134174,6 +134476,50 @@ var __webpack_modules__ = {
134174
134476
  return `${getLoggingPrefix('error')} Your project declares dependencies that are managed by ${pintor__rspack_import_2_default().blue('Extension.js')} and referenced in ${pintor__rspack_import_2_default().underline('extension.config.js')}\n${pintor__rspack_import_2_default().red('This can cause version conflicts and break the development/build process.')}\n\n${pintor__rspack_import_2_default().gray('Managed dependencies (remove these from your package.json):')}\n${list}\n\n${pintor__rspack_import_2_default().gray('PATH')} ${pintor__rspack_import_2_default().underline(userPackageJsonPath)}\nIf you need a different version, open an issue so we can consider bundling it safely.\nOperation aborted.`;
134175
134477
  }
134176
134478
  },
134479
+ "./webpack/webpack-lib/optional-dependencies.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
134480
+ "use strict";
134481
+ __webpack_require__.d(__webpack_exports__, {
134482
+ ad: ()=>resolveOptionalDependencySpecs,
134483
+ oR: ()=>getOptionalDependenciesSignature
134484
+ });
134485
+ var fs__rspack_import_0 = __webpack_require__("fs");
134486
+ var path__rspack_import_1 = __webpack_require__("path");
134487
+ var crypto__rspack_import_2 = __webpack_require__("crypto");
134488
+ function getOptionalDependenciesPath() {
134489
+ const candidates = [
134490
+ path__rspack_import_1.join(__dirname, 'optional-dependencies.json'),
134491
+ path__rspack_import_1.resolve(__dirname, '..', 'webpack', 'webpack-lib', 'optional-dependencies.json')
134492
+ ];
134493
+ for (const candidate of candidates)if (fs__rspack_import_0.existsSync(candidate)) return candidate;
134494
+ return candidates[0];
134495
+ }
134496
+ function loadOptionalDependencies() {
134497
+ const metadataPath = getOptionalDependenciesPath();
134498
+ if (!fs__rspack_import_0.existsSync(metadataPath)) throw new Error(`optional-dependencies.json not found at ${metadataPath}. This indicates a corrupted installation.`);
134499
+ try {
134500
+ const content = fs__rspack_import_0.readFileSync(metadataPath, 'utf8');
134501
+ const parsed = JSON.parse(content);
134502
+ if (!parsed || 'object' != typeof parsed || Array.isArray(parsed)) throw new Error('optional-dependencies.json must contain an object');
134503
+ return parsed;
134504
+ } catch (error) {
134505
+ throw new Error(`Failed to load optional-dependencies.json: ${error.message}`);
134506
+ }
134507
+ }
134508
+ function resolveOptionalDependencySpecs(dependencies) {
134509
+ const metadata = loadOptionalDependencies();
134510
+ const missingFromMetadata = dependencies.filter((dep)=>!(dep in metadata));
134511
+ if (missingFromMetadata.length > 0) throw new Error(`Dependencies not found in optional-dependencies.json: ${missingFromMetadata.join(', ')}`);
134512
+ return dependencies.map((dep)=>`${dep}@${metadata[dep]}`);
134513
+ }
134514
+ function getOptionalDependenciesSignature() {
134515
+ const metadata = loadOptionalDependencies();
134516
+ const stable = JSON.stringify(Object.keys(metadata).sort().reduce((acc, key)=>{
134517
+ acc[key] = metadata[key];
134518
+ return acc;
134519
+ }, {}));
134520
+ return (0, crypto__rspack_import_2.createHash)('sha1').update(stable).digest('hex');
134521
+ }
134522
+ },
134177
134523
  "./webpack/webpack-lib/optional-deps-resolver.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
134178
134524
  "use strict";
134179
134525
  __webpack_require__.d(__webpack_exports__, {
@@ -134187,12 +134533,15 @@ var __webpack_modules__ = {
134187
134533
  var _plugin_css_css_lib_integrations__rspack_import_3 = __webpack_require__("./webpack/plugin-css/css-lib/integrations.ts");
134188
134534
  const installSingleFlight = new Map();
134189
134535
  function getResolutionBases(projectPath) {
134536
+ const optionalInstallRoot = (0, _plugin_css_css_lib_integrations__rspack_import_3.Iy)();
134190
134537
  const extensionRoot = (0, _plugin_css_css_lib_integrations__rspack_import_3.He)();
134191
134538
  const bases = [
134192
134539
  projectPath,
134540
+ optionalInstallRoot && fs__rspack_import_0.existsSync(optionalInstallRoot) ? optionalInstallRoot : void 0,
134193
134541
  extensionRoot || void 0,
134194
134542
  process.cwd()
134195
134543
  ].filter(Boolean);
134544
+ if (optionalInstallRoot && optionalInstallRoot.includes('.pnpm')) bases.push(path__rspack_import_1.join(optionalInstallRoot, '..', '..'));
134196
134545
  if (extensionRoot && extensionRoot.includes('.pnpm')) bases.push(path__rspack_import_1.join(extensionRoot, '..', '..'));
134197
134546
  return Array.from(new Set(bases));
134198
134547
  }
@@ -134364,7 +134713,7 @@ var __webpack_modules__ = {
134364
134713
  }
134365
134714
  }
134366
134715
  async function ensureInstalledAndVerified(input) {
134367
- const installRoot = (0, _plugin_css_css_lib_integrations__rspack_import_3.He)();
134716
+ const installRoot = (0, _plugin_css_css_lib_integrations__rspack_import_3.Iy)();
134368
134717
  const key = [
134369
134718
  installRoot || 'missing-install-root',
134370
134719
  ...input.installDependencies.slice().sort()
@@ -134387,7 +134736,7 @@ var __webpack_modules__ = {
134387
134736
  }
134388
134737
  }
134389
134738
  function resolveOptionalDependencySync(dependencyId, projectPath) {
134390
- const installRoot = (0, _plugin_css_css_lib_integrations__rspack_import_3.He)();
134739
+ const installRoot = (0, _plugin_css_css_lib_integrations__rspack_import_3.Iy)();
134391
134740
  const resolved = resolveFromKnownLocations(dependencyId, projectPath, installRoot);
134392
134741
  if (resolved) return resolved;
134393
134742
  const bases = getResolutionBases(projectPath);
@@ -134398,7 +134747,7 @@ var __webpack_modules__ = {
134398
134747
  input.dependencyId
134399
134748
  ];
134400
134749
  const verifyPackageIds = input.verifyPackageIds || installDependencies;
134401
- const installRoot = (0, _plugin_css_css_lib_integrations__rspack_import_3.He)();
134750
+ const installRoot = (0, _plugin_css_css_lib_integrations__rspack_import_3.Iy)();
134402
134751
  const resolvedBeforeInstall = resolveFromKnownLocations(input.dependencyId, input.projectPath, installRoot);
134403
134752
  const missingBeforeInstall = resolvedBeforeInstall ? getModuleContextMissingDependencies(resolvedBeforeInstall, verifyPackageIds, input.dependencyId, {
134404
134753
  integration: input.integration
@@ -134475,7 +134824,7 @@ var __webpack_modules__ = {
134475
134824
  integration: input.integration,
134476
134825
  dependencyId: input.dependencyId,
134477
134826
  projectPath: input.projectPath,
134478
- installRoot: (0, _plugin_css_css_lib_integrations__rspack_import_3.He)(),
134827
+ installRoot: (0, _plugin_css_css_lib_integrations__rspack_import_3.Iy)(),
134479
134828
  installDependencies: input.installDependencies || [
134480
134829
  input.dependencyId
134481
134830
  ],
@@ -134593,7 +134942,7 @@ var __webpack_modules__ = {
134593
134942
  }
134594
134943
  function getPackageManagerOverride() {
134595
134944
  const name = normalizePackageManager(process.env.EXTENSION_JS_PACKAGE_MANAGER);
134596
- const execPath = process.env.EXTENSION_JS_PM_EXEC_PATH;
134945
+ const execPath = process.env.EXTENSION_JS_PM_EXEC_PATH || process.env.npm_execpath || process.env.NPM_EXEC_PATH;
134597
134946
  if (!name && !execPath) return;
134598
134947
  const inferredName = name || inferPackageManagerFromPath(execPath) || 'npm';
134599
134948
  return {
@@ -134603,19 +134952,23 @@ var __webpack_modules__ = {
134603
134952
  }
134604
134953
  function detectPackageManagerFromEnv() {
134605
134954
  const userAgent = process.env.npm_config_user_agent || '';
134955
+ const execPath = process.env.npm_execpath || process.env.NPM_EXEC_PATH || '';
134606
134956
  if (userAgent.includes('pnpm')) return {
134607
- name: 'pnpm'
134957
+ name: 'pnpm',
134958
+ execPath: execPath || void 0
134608
134959
  };
134609
134960
  if (userAgent.includes('yarn')) return {
134610
- name: 'yarn'
134961
+ name: 'yarn',
134962
+ execPath: execPath || void 0
134611
134963
  };
134612
134964
  if (userAgent.includes('bun')) return {
134613
- name: 'bun'
134965
+ name: 'bun',
134966
+ execPath: execPath || void 0
134614
134967
  };
134615
134968
  if (userAgent.includes('npm')) return {
134616
- name: 'npm'
134969
+ name: 'npm',
134970
+ execPath: execPath || void 0
134617
134971
  };
134618
- const execPath = process.env.npm_execpath || process.env.NPM_EXEC_PATH || '';
134619
134972
  if (execPath) {
134620
134973
  const inferred = inferPackageManagerFromPath(execPath) || 'npm';
134621
134974
  return {
@@ -135106,7 +135459,7 @@ var __webpack_modules__ = {
135106
135459
  },
135107
135460
  "./package.json" (module) {
135108
135461
  "use strict";
135109
- module.exports = JSON.parse('{"rE":"3.8.16","El":{"@rspack/core":"^1.7.5","@rspack/dev-server":"^1.1.5","@swc/core":"^1.15.8","@swc/helpers":"^0.5.18","adm-zip":"^0.5.16","browser-extension-manifest-fields":"^2.2.1","case-sensitive-paths-webpack-plugin":"^2.4.0","chrome-location2":"4.0.0","chromium-location":"2.0.0","content-security-policy-parser":"^0.6.0","cross-spawn":"^7.0.6","dotenv":"^17.2.3","edge-location":"2.2.0","extension-from-store":"^0.1.1","firefox-location2":"3.0.0","go-git-it":"^5.1.1","ignore":"^7.0.5","loader-utils":"^3.3.1","magic-string":"^0.30.21","parse5":"^8.0.0","parse5-utilities":"^1.0.0","pintor":"0.3.0","schema-utils":"^4.3.3","tiny-glob":"^0.2.9","unique-names-generator":"^4.7.1","webextension-polyfill":"^0.12.0","webpack-merge":"^6.0.1","webpack-target-webextension":"^2.1.3","ws":"^8.19.0"}}');
135462
+ module.exports = JSON.parse('{"rE":"3.9.0-canary.231.7b387a7","El":{"@rspack/core":"^1.7.5","@rspack/dev-server":"^1.1.5","@swc/core":"^1.15.8","@swc/helpers":"^0.5.18","adm-zip":"^0.5.16","browser-extension-manifest-fields":"^2.2.1","case-sensitive-paths-webpack-plugin":"^2.4.0","chrome-location2":"4.0.0","chromium-location":"2.0.0","content-security-policy-parser":"^0.6.0","cross-spawn":"^7.0.6","dotenv":"^17.2.3","edge-location":"2.2.0","extension-from-store":"^0.1.1","firefox-location2":"3.0.0","go-git-it":"^5.1.1","ignore":"^7.0.5","loader-utils":"^3.3.1","magic-string":"^0.30.21","parse5":"^8.0.0","parse5-utilities":"^1.0.0","pintor":"0.3.0","schema-utils":"^4.3.3","tiny-glob":"^0.2.9","unique-names-generator":"^4.7.1","webextension-polyfill":"^0.12.0","webpack-merge":"^6.0.1","webpack-target-webextension":"^2.1.3","ws":"^8.19.0"}}');
135110
135463
  }
135111
135464
  };
135112
135465
  var __webpack_module_cache__ = {};
@@ -135667,6 +136020,7 @@ var __webpack_exports__ = {};
135667
136020
  var external_pintor_ = __webpack_require__("pintor");
135668
136021
  var external_pintor_default = /*#__PURE__*/ __webpack_require__.n(external_pintor_);
135669
136022
  var external_crypto_ = __webpack_require__("crypto");
136023
+ var optional_dependencies = __webpack_require__("./webpack/webpack-lib/optional-dependencies.ts");
135670
136024
  function getPreflightCacheDir(packageRoot) {
135671
136025
  return external_path_.join(packageRoot, '.cache', 'extensionjs', 'preflight');
135672
136026
  }
@@ -135677,12 +136031,12 @@ var __webpack_exports__ = {};
135677
136031
  return external_path_.join(cacheDir, 'version.json');
135678
136032
  }
135679
136033
  function getProjectDepsHash(projectPath) {
135680
- const lockfileSignature = getNearestLockfileSignature(projectPath);
136034
+ const optionalDepsSignature = (0, optional_dependencies.oR)();
135681
136035
  try {
135682
136036
  const packageJsonPath = external_path_.join(projectPath, 'package.json');
135683
136037
  if (!external_fs_.existsSync(packageJsonPath)) return (0, external_crypto_.createHash)('sha1').update(JSON.stringify({
135684
136038
  packageJson: 'no-package-json',
135685
- lockfile: lockfileSignature
136039
+ optionalDeps: optionalDepsSignature
135686
136040
  })).digest('hex');
135687
136041
  const raw = external_fs_.readFileSync(packageJsonPath, 'utf8');
135688
136042
  const parsed = JSON.parse(raw || '{}');
@@ -135697,42 +136051,16 @@ var __webpack_exports__ = {};
135697
136051
  const stable = JSON.stringify({
135698
136052
  dependencies: normalize(deps),
135699
136053
  devDependencies: normalize(devDeps),
135700
- lockfile: lockfileSignature
136054
+ optionalDeps: optionalDepsSignature
135701
136055
  });
135702
136056
  return (0, external_crypto_.createHash)('sha1').update(stable).digest('hex');
135703
136057
  } catch {
135704
136058
  return (0, external_crypto_.createHash)('sha1').update(JSON.stringify({
135705
136059
  packageJson: 'invalid-package-json',
135706
- lockfile: lockfileSignature
136060
+ optionalDeps: optionalDepsSignature
135707
136061
  })).digest('hex');
135708
136062
  }
135709
136063
  }
135710
- function getNearestLockfileSignature(projectPath) {
135711
- const lockfileNames = [
135712
- 'pnpm-lock.yaml',
135713
- 'package-lock.json',
135714
- 'yarn.lock',
135715
- 'bun.lock',
135716
- 'bun.lockb'
135717
- ];
135718
- let current = external_path_.resolve(projectPath);
135719
- while(true){
135720
- for (const lockfileName of lockfileNames){
135721
- const lockfilePath = external_path_.join(current, lockfileName);
135722
- if (external_fs_.existsSync(lockfilePath)) try {
135723
- const content = external_fs_.readFileSync(lockfilePath);
135724
- const digest = (0, external_crypto_.createHash)('sha1').update(content).digest('hex');
135725
- return `${lockfileName}:${digest}`;
135726
- } catch {
135727
- return `${lockfileName}:unreadable`;
135728
- }
135729
- }
135730
- const parent = external_path_.dirname(current);
135731
- if (parent === current) break;
135732
- current = parent;
135733
- }
135734
- return 'none';
135735
- }
135736
136064
  function ensureCacheVersion(cacheDir) {
135737
136065
  const versionPath = getCacheVersionPath(cacheDir);
135738
136066
  const expectedVersion = package_0.rE;
@@ -135820,12 +136148,15 @@ var __webpack_exports__ = {};
135820
136148
  var postcss = __webpack_require__("./webpack/plugin-css/css-tools/postcss.ts");
135821
136149
  var js_frameworks_lib_messages = __webpack_require__("./webpack/plugin-js-frameworks/js-frameworks-lib/messages.ts");
135822
136150
  function getResolutionPaths(projectPath) {
136151
+ const optionalInstallRoot = (0, integrations.Iy)();
135823
136152
  const extensionRoot = (0, integrations.He)();
135824
136153
  const paths = [
135825
136154
  projectPath || void 0,
136155
+ optionalInstallRoot && external_fs_.existsSync(optionalInstallRoot) ? optionalInstallRoot : void 0,
135826
136156
  extensionRoot || void 0,
135827
136157
  process.cwd()
135828
136158
  ].filter(Boolean);
136159
+ if (optionalInstallRoot && optionalInstallRoot.includes('.pnpm')) paths.push(external_path_.join(optionalInstallRoot, '..', '..'));
135829
136160
  if (extensionRoot && extensionRoot.includes('.pnpm')) paths.push(external_path_.join(extensionRoot, '..', '..'));
135830
136161
  return Array.from(new Set(paths));
135831
136162
  }
@@ -136008,7 +136339,7 @@ var __webpack_exports__ = {};
136008
136339
  __webpack_require__.e("552").then(__webpack_require__.bind(__webpack_require__, "./webpack/webpack-lib/stats-handler.ts")),
136009
136340
  Promise.all([
136010
136341
  __webpack_require__.e("215"),
136011
- __webpack_require__.e("535")
136342
+ __webpack_require__.e("270")
136012
136343
  ]).then(__webpack_require__.bind(__webpack_require__, "./webpack/webpack-config.ts"))
136013
136344
  ]);
136014
136345
  const debug = isAuthor;
@@ -136045,6 +136376,7 @@ var __webpack_exports__ = {};
136045
136376
  plugins: allPluginsButBrowserRunners
136046
136377
  });
136047
136378
  const compilerConfig = merge(userConfig);
136379
+ compilerConfig.stats = false;
136048
136380
  const compiler = rspack(compilerConfig);
136049
136381
  let summary = {
136050
136382
  browser,
@@ -136152,8 +136484,8 @@ var __webpack_exports__ = {};
136152
136484
  if ('true' === process.env.EXTENSION_DEV_DRY_RUN) return;
136153
136485
  const { devServer } = await Promise.all([
136154
136486
  __webpack_require__.e("215"),
136155
- __webpack_require__.e("535"),
136156
- __webpack_require__.e("928")
136487
+ __webpack_require__.e("270"),
136488
+ __webpack_require__.e("324")
136157
136489
  ]).then(__webpack_require__.bind(__webpack_require__, "./webpack/dev-server/index.ts"));
136158
136490
  await devServer(projectStructure, {
136159
136491
  ...devOptions,
@@ -136280,7 +136612,9 @@ var __webpack_exports__ = {};
136280
136612
  await (0, banner.M)({
136281
136613
  browser: opts.browser,
136282
136614
  outPath: opts.outPath,
136283
- includeExtensionId: false
136615
+ includeExtensionId: true,
136616
+ includeRunId: false,
136617
+ readyPath: opts.readyPath
136284
136618
  });
136285
136619
  return;
136286
136620
  }
@@ -136299,10 +136633,18 @@ var __webpack_exports__ = {};
136299
136633
  geckoBinary: opts.geckoBinary,
136300
136634
  port: opts.port
136301
136635
  });
136636
+ await (0, banner.M)({
136637
+ browser: opts.browser,
136638
+ outPath: opts.outPath,
136639
+ includeExtensionId: true,
136640
+ includeRunId: false,
136641
+ readyPath: opts.readyPath
136642
+ });
136302
136643
  return;
136303
136644
  }
136304
136645
  throw new Error(`Unsupported browser: ${String(opts.browser)}`);
136305
136646
  }
136647
+ var dev_server_messages = __webpack_require__("./webpack/dev-server/messages.ts");
136306
136648
  async function extensionPreview(pathOrRemoteUrl, previewOptions) {
136307
136649
  const projectStructure = await getProjectStructure(pathOrRemoteUrl);
136308
136650
  const debug = 'true' === process.env.EXTENSION_AUTHOR_MODE;
@@ -136337,6 +136679,14 @@ var __webpack_exports__ = {};
136337
136679
  if (previewOptions.noBrowser) {
136338
136680
  console.log(messages.k4(browser));
136339
136681
  metadata.writeReady();
136682
+ console.log(dev_server_messages.tl());
136683
+ const browserLabel = String(browser || 'unknown');
136684
+ console.log(dev_server_messages.bL({
136685
+ browser: browserLabel,
136686
+ manifestPath: projectStructure.manifestPath,
136687
+ readyPath: metadata.readyPath,
136688
+ browserModeLabel: `${browserLabel.charAt(0).toUpperCase() + browserLabel.slice(1)} (no-browser mode)`
136689
+ }));
136340
136690
  return;
136341
136691
  }
136342
136692
  const safeBrowserConfig = (0, sanitize.a)(browserConfig);
@@ -136373,6 +136723,7 @@ var __webpack_exports__ = {};
136373
136723
  browser,
136374
136724
  outPath: outputPath,
136375
136725
  contextDir: packageJsonDir,
136726
+ readyPath: metadata.readyPath,
136376
136727
  extensionsToLoad: unpackedExtensionDirsToLoad,
136377
136728
  noOpen: merged.noOpen,
136378
136729
  profile: merged.profile,